<?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: Roan de Jager</title>
    <description>The latest articles on DEV Community by Roan de Jager (@roandejager).</description>
    <link>https://dev.to/roandejager</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%2F3984390%2Fbfb46654-8a1d-44d4-bfa9-7cc53f4f1630.png</url>
      <title>DEV Community: Roan de Jager</title>
      <link>https://dev.to/roandejager</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/roandejager"/>
    <language>en</language>
    <item>
      <title>Building TALON: Sub-Second Non-Generative Knowledge Graph Ingestion on a GTX 1070</title>
      <dc:creator>Roan de Jager</dc:creator>
      <pubDate>Tue, 11 Aug 2026 14:52:13 +0000</pubDate>
      <link>https://dev.to/roandejager/building-talon-sub-second-non-generative-knowledge-graph-ingestion-on-a-gtx-1070-5hnj</link>
      <guid>https://dev.to/roandejager/building-talon-sub-second-non-generative-knowledge-graph-ingestion-on-a-gtx-1070-5hnj</guid>
      <description>&lt;h1&gt;
  
  
  Building TALON: Sub-Second Non-Generative Knowledge Graph Ingestion on a GTX 1070
&lt;/h1&gt;

&lt;p&gt;Knowledge Graphs are rapidly becoming the preferred alternative to raw Vector Databases for Retrieval-Augmented Generation (RAG). By storing structured &lt;code&gt;[Subject, Predicate, Object]&lt;/code&gt; triples, Knowledge Graphs eliminate the semantic ambiguity that causes traditional vector search to hallucinate.&lt;/p&gt;

&lt;p&gt;However, Knowledge Graphs have suffered from a massive performance bottleneck: &lt;strong&gt;Ingestion Speed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Until now, extracting structured facts from text required passing document blocks into generative LLMs (like Llama 3 or Qwen) and waiting for them to type out JSON token-by-token. This process takes 10 to 15 minutes per document, consumes heavy GPU VRAM, and frequently breaks due to JSON parsing errors.&lt;/p&gt;

&lt;p&gt;To solve this bottleneck, I built &lt;strong&gt;TALON (Tensor-Accelerated Local Ontology Network)&lt;/strong&gt; inside &lt;strong&gt;Hillock v0.2.2&lt;/strong&gt;—a non-generative, open-source neuro-symbolic memory engine built in Python.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 What is Hillock?
&lt;/h2&gt;

&lt;p&gt;Hillock is a privacy-first local memory engine (AGPL-3.0) that replaces Vector Databases with three decoupled components:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;SQLite Knowledge Graph&lt;/strong&gt;: Stores deterministic &lt;code&gt;[Subject, Predicate, Object]&lt;/code&gt; triples.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hebbian Plasticity Engine&lt;/strong&gt;: Tracks gradient-free co-activation associations between entities over time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hyperdimensional Computing (HDC / VSA)&lt;/strong&gt;: Uses CPU-bound vector symbolic algebra for hallucination defense and gating.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Repository: &lt;a href="https://github.com/roandejager/Hillock" rel="noopener noreferrer"&gt;github.com/roandejager/Hillock&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🦅 The TALON Architecture
&lt;/h2&gt;

&lt;p&gt;Instead of relying on token generation, TALON uses pure tensor math and bi-encoder routing to achieve &lt;strong&gt;sub-second document relation extraction&lt;/strong&gt; on consumer hardware (NVIDIA GTX 1070 / &amp;lt; 1GB VRAM).&lt;/p&gt;

&lt;p&gt;TALON operates in three isolated CUDA stages:&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 1: Anaphora Resolution (&lt;code&gt;Fastcoref&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Paragraphs are full of pronouns (&lt;em&gt;"She"&lt;/em&gt;, &lt;em&gt;"He"&lt;/em&gt;, &lt;em&gt;"Their"&lt;/em&gt;). If you chunk text before resolving pronouns, downstream models lose the canonical head entity. TALON uses &lt;code&gt;Fastcoref&lt;/code&gt; to replace all pronouns across full documents in ~300ms before text chunking.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 2: Dynamic Predicate Routing (&lt;code&gt;MiniLM-L6-v2&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Zero-shot relation classifiers get overloaded if you pass 100+ candidate labels at once. Stage 2 uses an 80MB MiniLM bi-encoder to scan input sentences and retrieve the &lt;strong&gt;Top-10 most relevant Wikidata predicates in &amp;lt; 2ms&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage 3: Zero-Shot Matrix Classification (&lt;code&gt;GLiREL&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Stage 3 passes the sentence, spaCy entity spans, and Top-10 dynamic predicates into &lt;code&gt;GLiREL&lt;/code&gt; (DeBERTa-v3). &lt;code&gt;GLiREL&lt;/code&gt; performs single-pass latent span classification over entity pairs, extracting structured triples without generating a single text token.&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 Benchmark Results (v0.2.2)
&lt;/h2&gt;

&lt;p&gt;On our automated scientific evaluation harness (&lt;code&gt;evaluate_hillock_PROTO_ish.py&lt;/code&gt;), upgrading to the TALON Engine produced massive accuracy jumps while running in sub-seconds:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Legacy LLM Baseline&lt;/th&gt;
&lt;th&gt;TALON Engine (v0.2.2)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Retrieval Accuracy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10.0%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;50.0%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Extraction Recall&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;13.6%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;50.0%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gate Accuracy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;16.7%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;50.0%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Processing Speed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~15 minutes&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Sub-second Tensor Math&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🛠️ Try It Locally
&lt;/h2&gt;

&lt;p&gt;Hillock is 100% open-source under AGPL-3.0. You can run it locally with PyTorch CUDA:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/roandejager/Hillock.git
&lt;span class="nb"&gt;cd &lt;/span&gt;Hillock
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
python main.py&lt;span class="k"&gt;****&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check out the code and roadmap on GitHub: github.com/roandejager/Hillock&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>I built a local AI memory gate on a CPU, and my 7B model scored worse than my 1.5B model because it was too smart</title>
      <dc:creator>Roan de Jager</dc:creator>
      <pubDate>Mon, 22 Jun 2026 18:24:41 +0000</pubDate>
      <link>https://dev.to/roandejager/i-built-a-local-ai-memory-gate-on-a-cpu-and-my-7b-model-scored-worse-than-my-15b-model-because-it-330n</link>
      <guid>https://dev.to/roandejager/i-built-a-local-ai-memory-gate-on-a-cpu-and-my-7b-model-scored-worse-than-my-15b-model-because-it-330n</guid>
      <description>&lt;p&gt;Hi everyone,&lt;/p&gt;

&lt;p&gt;I've been hacking on a personal, local project called &lt;strong&gt;Hillock&lt;/strong&gt;. Honestly, it's very much a work in progress and it isn't some flawless breakthrough, but I wanted to see if we could build a lightweight, completely offline memory layer for local LLMs without the overhead of running a heavy neural vector database or wasting precious VRAM. &lt;/p&gt;

&lt;p&gt;It is named after the biological &lt;em&gt;Axon Hillock&lt;/em&gt;—the region of a human neuron that sums up incoming electrical charges and decides whether to fire (open the gate) or remain silent (block).&lt;/p&gt;

&lt;h3&gt;
  
  
  How the architecture works:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Ground Truth (SQLite)&lt;/strong&gt;: Stores hard facts as simple database triples (Subject-Predicate-Object) so the system has a solid symbolic foundation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Synapses (Hebbian Plasticity)&lt;/strong&gt;: Tracks which concepts co-occur during a conversation to dynamically build gradient-free associative weights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Context (Hyperdimensional Computing)&lt;/strong&gt;: Maintains a 10,000-dimensional leaky context vector that rolls, binds, and accumulates history. This helps the system resolve pronouns (like "he/she") and decide when to block a query to prevent hallucinations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The "Smarter Model, Lower Score" Paradox
&lt;/h3&gt;

&lt;p&gt;I wrote a tough, 32-sentence scientific benchmark with complex sentence structures and hard negatives (like asking what Einstein discovered when the text only mentions Curie discovering radioactivity and Einstein working with her). &lt;/p&gt;

&lt;p&gt;When I ran Qwen 2 (1.5B), it got around &lt;strong&gt;50.0%&lt;/strong&gt; Retrieval Accuracy. But when I upgraded to the much smarter Qwen 3 (5.2GB), the ingestion time jumped to &lt;strong&gt;20 minutes&lt;/strong&gt; on my local machine, and its score actually dropped to &lt;strong&gt;25.0%&lt;/strong&gt;! &lt;/p&gt;

&lt;p&gt;Why? Because Qwen 3 is too expressive for my rigid evaluation script:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The test expected &lt;code&gt;Marie_Curie born_in Poland&lt;/code&gt;. Qwen 3 extracted &lt;code&gt;[Marie_Curie] -[spent_childhood_in]-&amp;gt; [Poland]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The test expected &lt;code&gt;Albert_Einstein&lt;/code&gt;. Qwen 3 extracted &lt;code&gt;[albert_einstein]&lt;/code&gt; (lowercase), which broke the exact-string checks.&lt;/li&gt;
&lt;li&gt;The test expected &lt;code&gt;compiler&lt;/code&gt;. Qwen 3 extracted &lt;code&gt;[first_compiler]&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, while Qwen 3 populated the database with beautiful, highly accurate, and conversational triples (extracting up to 6 clean relations per block in a single pass), it got penalized by the rigid evaluation harness.&lt;/p&gt;

&lt;p&gt;The codebase is written in pure Python, is fully open-source (under the AGPL-3.0 copyleft license), and is designed to run entirely offline on consumer hardware. &lt;/p&gt;

&lt;p&gt;If anyone is interested in VSAs, alternative cognitive architectures, or has feedback on the HDC context-binding math, I'd love for you to check it out!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/roandejager/Hillock" rel="noopener noreferrer"&gt;https://github.com/roandejager/Hillock&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Hillock: A brain-inspired, CPU-bound memory gate for local LLMs</title>
      <dc:creator>Roan de Jager</dc:creator>
      <pubDate>Tue, 16 Jun 2026 19:18:50 +0000</pubDate>
      <link>https://dev.to/roandejager/hillock-a-brain-inspired-cpu-bound-memory-gate-for-local-llms-3aim</link>
      <guid>https://dev.to/roandejager/hillock-a-brain-inspired-cpu-bound-memory-gate-for-local-llms-3aim</guid>
      <description>&lt;p&gt;Hi everyone,&lt;/p&gt;

&lt;p&gt;I've been hacking on a personal, local project called &lt;strong&gt;Hillock&lt;/strong&gt;. Honestly, it's very much a work in progress and it isn't all that, but I wanted to see if we could build a lightweight, offline memory layer for local LLMs without the overhead of running a heavy neural vector database or wasting precious VRAM. &lt;/p&gt;

&lt;p&gt;It is named after the biological &lt;em&gt;Axon Hillock&lt;/em&gt;—the region of a human neuron that sums up incoming electrical charges and decides whether to fire (open the gate) or remain silent (block).&lt;/p&gt;

&lt;h3&gt;
  
  
  How the stack works:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hard Facts (SQLite)&lt;/strong&gt;: Stores raw facts as simple database triples (Subject-Predicate-Object) so the system has a solid symbolic foundation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Synapses (Hebbian Plasticity)&lt;/strong&gt;: Tracks which concepts co-occur during a conversation to dynamically build gradient-free associative weights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context (Hyperdimensional Computing)&lt;/strong&gt;: Maintains a 10,000-dimensional leaky context vector that rolls, binds, and accumulates history. This helps the system resolve pronouns (like "he/she") and decide when to block a query to prevent hallucinations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The "Smarter Model, Lower Score" Paradox
&lt;/h3&gt;

&lt;p&gt;I wrote a tough, 30-sentence scientific benchmark with complex sentence structures and hard negatives to see where this breaks on local hardware. &lt;/p&gt;

&lt;p&gt;When I ran Qwen 2 (1.5B), it got around &lt;strong&gt;50.0%&lt;/strong&gt; Retrieval Accuracy. But when I upgraded to the much smarter Qwen 3 (5.2GB), its score actually dropped to &lt;strong&gt;15.0%&lt;/strong&gt;! &lt;/p&gt;

&lt;p&gt;Why? Because Qwen 3 is too expressive for my rigid evaluation script:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The test expected &lt;code&gt;Marie_Curie born_in Poland&lt;/code&gt;. Qwen 3 extracted &lt;code&gt;[Marie_Curie] -[spent_childhood_in]-&amp;gt; [Poland]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The test expected &lt;code&gt;Albert_Einstein&lt;/code&gt;. Qwen 3 extracted &lt;code&gt;[albert_einstein]&lt;/code&gt; (lowercase), which broke the exact-string checks.&lt;/li&gt;
&lt;li&gt;The test expected &lt;code&gt;compiler&lt;/code&gt;. Qwen 3 extracted &lt;code&gt;[first_compiler]&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, while Qwen 3 populated the database with beautiful, highly accurate, and conversational triples, it got penalized by the rigid evaluation harness.&lt;/p&gt;

&lt;p&gt;The codebase is written in pure Python, is fully open-source (under the AGPL-3.0 copyleft license), and is designed to run entirely offline on consumer hardware. &lt;/p&gt;

&lt;p&gt;If anyone is interested in VSAs, alternative cognitive architectures, or has feedback on the HDC context-binding math, I'd love for you to check it out!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/roandejager/Hillock" rel="noopener noreferrer"&gt;https://github.com/roandejager/Hillock&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>opensource</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Hillock: A brain-inspired, CPU-bound memory gate for local LLMs</title>
      <dc:creator>Roan de Jager</dc:creator>
      <pubDate>Sun, 14 Jun 2026 21:04:21 +0000</pubDate>
      <link>https://dev.to/roandejager/hillock-a-brain-inspired-cpu-bound-memory-gate-for-local-llms-24n9</link>
      <guid>https://dev.to/roandejager/hillock-a-brain-inspired-cpu-bound-memory-gate-for-local-llms-24n9</guid>
      <description>&lt;p&gt;Hi everyone,&lt;/p&gt;

&lt;p&gt;I've been hacking on a local personal memory system called &lt;strong&gt;Hillock&lt;/strong&gt;. Honestly, it's very much a work in progress and it isn't some flawless breakthrough, but I wanted to see if we could build a lightweight, completely offline memory layer for local LLMs without the overhead of running a heavy neural vector database or wasting precious VRAM. &lt;/p&gt;

&lt;p&gt;The project is named after the biological &lt;em&gt;Axon Hillock&lt;/em&gt;—the exact gatekeeper region of a human neuron that sums up incoming electrical charges and decides whether to fire (open the gate) or remain silent (block).&lt;/p&gt;

&lt;h3&gt;
  
  
  How the architecture works:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Ground Truth (SQLite)&lt;/strong&gt;: Stores hard facts as simple database triples (Subject-Predicate-Object) so the system has a solid symbolic foundation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Synapses (Hebbian Plasticity)&lt;/strong&gt;: Tracks which concepts co-occur during a conversation to dynamically build gradient-free associative weights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Context (Hyperdimensional Computing)&lt;/strong&gt;: Maintains a 10,000-dimensional leaky context vector that rolls, binds, and accumulates history. This helps the system resolve pronouns (like "he/she") and decide when to block a query to prevent hallucinations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Honest Benchmarks (Yes, it breaks!)
&lt;/h3&gt;

&lt;p&gt;I wrote a tough, 30-sentence scientific benchmark with complex sentence structures and hard negatives (like asking what Einstein discovered when the text only mentions Curie discovering radioactivity and Einstein working with her). &lt;/p&gt;

&lt;p&gt;Running Qwen 1.5B locally on my computer, here is how it actually did:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Extraction Precision&lt;/strong&gt;: 10.6%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extraction Recall&lt;/strong&gt;: 22.7%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval Accuracy&lt;/strong&gt;: 30.0%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gate Accuracy&lt;/strong&gt;: 30.0%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why are these scores low? Because a tiny 1.5B model completely trips over complex English grammar during ingestion (it gets confused and creates weird predicates). However, the actual HDC vector-matching itself is incredibly stable. I enforce a &lt;em&gt;Constant-Component-Count&lt;/em&gt; of exactly 3 components per fact, which balances the vector norms and keeps retrieval highly reliable once the facts are actually in the database.&lt;/p&gt;

&lt;p&gt;It is fully open-source (under the AGPL-3.0 copyleft license) and designed to run entirely offline on consumer hardware. &lt;/p&gt;

&lt;p&gt;If anyone is interested in VSAs, neuro-symbolic AI, or has feedback on the HDC context-binding math, I'd love for you to check it out!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/roandejager/Hillock" rel="noopener noreferrer"&gt;https://github.com/roandejager/Hillock&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
