<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Le Huy Hiep</title>
    <description>The latest articles on DEV Community by Le Huy Hiep (@coji831).</description>
    <link>https://dev.to/coji831</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4059146%2F780a3a3e-9230-484f-ab5a-4fe48798e3fe.jpg</url>
      <title>DEV Community: Le Huy Hiep</title>
      <link>https://dev.to/coji831</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/coji831"/>
    <language>en</language>
    <item>
      <title>Agent reading every files to answer one simple question?</title>
      <dc:creator>Le Huy Hiep</dc:creator>
      <pubDate>Tue, 18 Aug 2026 05:30:57 +0000</pubDate>
      <link>https://dev.to/coji831/agent-reading-every-files-to-answer-one-simple-question-18ce</link>
      <guid>https://dev.to/coji831/agent-reading-every-files-to-answer-one-simple-question-18ce</guid>
      <description>&lt;p&gt;My knowledge base grew across thousands of markdown files. Finding one fact meant reading whole files. Keyword search found words, not meaning. And reading whole files burns tokens: tens of thousands of tokens to surface one fact. The real metric is not storage. It is tokens per answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why not the usual tools?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;grep finds the file, but you still read it. Cost unchanged.&lt;/li&gt;
&lt;li&gt;A cloud vector DB sends private notes out and adds infra for a 2 MB corpus.&lt;/li&gt;
&lt;li&gt;Semantic-only search cannot do exact filters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What I built:&lt;/strong&gt; a local-first retrieval layer.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;SQLite FTS5 index: instant keyword search, exact filters, real file:line references.&lt;/li&gt;
&lt;li&gt;Local ONNX embeddings (384-dim): semantic ranking. Every hit points at a real file.&lt;/li&gt;
&lt;li&gt;One-command rebuild. The index is derived, so it never goes stale.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; 2,000 chunks, one CLI, zero servers. An answer now costs a few hundred tokens, not a sweep through thousands of files.&lt;/p&gt;

&lt;p&gt;Start deterministic. Add semantic where keywords fail. Rebuild often.&lt;/p&gt;

</description>
      <category>rag</category>
      <category>sqlite</category>
      <category>ai</category>
      <category>llm</category>
    </item>
    <item>
      <title>How to add UI for your RAG?!?</title>
      <dc:creator>Le Huy Hiep</dc:creator>
      <pubDate>Mon, 03 Aug 2026 14:53:12 +0000</pubDate>
      <link>https://dev.to/coji831/how-to-add-ui-for-your-rag-51bl</link>
      <guid>https://dev.to/coji831/how-to-add-ui-for-your-rag-51bl</guid>
      <description>&lt;p&gt;Just built some FastAPI SSE backend streaming LLM responses token-by-token,&lt;br&gt;
after i got some free time.&lt;/p&gt;

&lt;p&gt;Two things broke in production that worked fine locally 🙃:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;nginx buffers SSE by default. The stream was delivering locally, dead&lt;br&gt;
silent on Railway. &lt;code&gt;proxy_buffering&lt;/code&gt; off, two hours later, fixed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The LLM API returns an &lt;code&gt;empty_retrieval&lt;/code&gt; event when no docs match. I wasn't&lt;br&gt;
handling it, so the frontend sat on a loading spinner indefinitely. Added&lt;br&gt;
the handler, resolved.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://zooming-charm-production-547e.up.railway.app/" rel="noopener noreferrer"&gt;https://zooming-charm-production-547e.up.railway.app/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>fastapi</category>
      <category>react</category>
      <category>rag</category>
    </item>
  </channel>
</rss>
