<feed xmlns="http://www.w3.org/2005/Atom"> <id>https://ndthuan.com/</id><title>{ndt.write();}</title><subtitle>Software engineer exploring AI, software systems, and how technology changes the way we work.</subtitle> <updated>2026-10-12T14:20:42+07:00</updated> <author> <name>Thuan Nguyen</name> <uri>https://ndthuan.com/</uri> </author><link rel="self" type="application/atom+xml" href="https://ndthuan.com/feed.xml"/><link rel="alternate" type="text/html" hreflang="en" href="https://ndthuan.com/"/> <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator> <rights> © 2026 Thuan Nguyen </rights> <icon>/assets/img/favicons/favicon.ico</icon> <logo>/assets/img/favicons/favicon-96x96.png</logo> <entry><title>EmbeddingGemma 2 and Qwen3-Embedding vs bge-m3: Why I Kept bge-m3</title><link href="https://ndthuan.com/embeddinggemma-2-qwen3-embedding-vs-bge-m3/" rel="alternate" type="text/html" title="EmbeddingGemma 2 and Qwen3-Embedding vs bge-m3: Why I Kept bge-m3" /><published>2026-10-08T20:00:00+07:00</published> <updated>2026-10-08T20:00:00+07:00</updated> <id>https://ndthuan.com/embeddinggemma-2-qwen3-embedding-vs-bge-m3/</id> <content type="text/html" src="https://ndthuan.com/embeddinggemma-2-qwen3-embedding-vs-bge-m3/" /> <author> <name>Thuan Nguyen</name> </author> <category term="Artificial Intelligence" /> <summary>EmbeddingGemma 2 and Qwen3-Embedding 0.6B against bge-m3 on one workload, clustering news articles from Vietnamese newspapers into stories. Quality was level, each model has its own cosine scale, and the one real gap covers under one percent of pairs.</summary> </entry> <entry><title>Why I Kept My Own LLM Gateway over LiteLLM and 9Router</title><link href="https://ndthuan.com/own-llm-gateway-over-litellm-and-9router/" rel="alternate" type="text/html" title="Why I Kept My Own LLM Gateway over LiteLLM and 9Router" /><published>2026-10-06T15:25:00+07:00</published> <updated>2026-10-06T15:25:00+07:00</updated> <id>https://ndthuan.com/own-llm-gateway-over-litellm-and-9router/</id> <content type="text/html" src="https://ndthuan.com/own-llm-gateway-over-litellm-and-9router/" /> <author> <name>Thuan Nguyen</name> </author> <category term="Artificial Intelligence" /> <summary>I put four model profiles on LiteLLM, sent back two comments and two issues, read how 9Router handles the same cases, and still run 3,000 lines of my own. Here is what worked, what did not, and why.</summary> </entry> <entry><title>Retry Storms: How Client Retries Turn a Short Dip into a Long Outage</title><link href="https://ndthuan.com/retry-storms-backoff-jitter-retry-budgets/" rel="alternate" type="text/html" title="Retry Storms: How Client Retries Turn a Short Dip into a Long Outage" /><published>2026-10-04T08:00:00+07:00</published> <updated>2026-10-04T08:00:00+07:00</updated> <id>https://ndthuan.com/retry-storms-backoff-jitter-retry-budgets/</id> <content type="text/html" src="https://ndthuan.com/retry-storms-backoff-jitter-retry-budgets/" /> <author> <name>Thuan Nguyen</name> </author> <category term="Software Engineering" /> <summary>A two-second capacity dip, four retry policies and one retry budget, simulated in about a hundred lines of Go: how retries multiply load, why jitter helps, and what a budget changes.</summary> </entry> <entry><title>The GIL Bottleneck Hiding in Self-Hosted LLM Serving</title><link href="https://ndthuan.com/gil-bottleneck-self-hosted-llm-serving/" rel="alternate" type="text/html" title="The GIL Bottleneck Hiding in Self-Hosted LLM Serving" /><published>2026-09-25T12:00:00+07:00</published> <updated>2026-09-25T12:00:00+07:00</updated> <id>https://ndthuan.com/gil-bottleneck-self-hosted-llm-serving/</id> <content type="text/html" src="https://ndthuan.com/gil-bottleneck-self-hosted-llm-serving/" /> <author> <name>Thuan Nguyen</name> </author> <category term="Artificial Intelligence" /> <summary>Why a custom logits processor that runs once per request can dominate tail latency even when the GPU batches perfectly, and the batch-level rewrite that fixes it.</summary> </entry> <entry><title>Open-weight LLMs are winning on cost, not benchmarks</title><link href="https://ndthuan.com/open-weight-models-winning-on-cost/" rel="alternate" type="text/html" title="Open-weight LLMs are winning on cost, not benchmarks" /><published>2026-09-13T10:00:00+07:00</published> <updated>2026-09-13T10:00:00+07:00</updated> <id>https://ndthuan.com/open-weight-models-winning-on-cost/</id> <content type="text/html" src="https://ndthuan.com/open-weight-models-winning-on-cost/" /> <author> <name>Thuan Nguyen</name> </author> <category term="Artificial Intelligence" /> <summary>Open-weight models are not catching up to frontier APIs on benchmarks. They are already ahead on the number that decides most production budgets: cost per request at scale.</summary> </entry> </feed>
