<?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: Shiv Shankar</title>
    <description>The latest articles on DEV Community by Shiv Shankar (@shiv_s_hankar).</description>
    <link>https://dev.to/shiv_s_hankar</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%2F4050861%2F76238f0e-97c8-4572-9b70-a6adc97e2ceb.png</url>
      <title>DEV Community: Shiv Shankar</title>
      <link>https://dev.to/shiv_s_hankar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shiv_s_hankar"/>
    <language>en</language>
    <item>
      <title>Architecting Deterministic Rollbacks for AI Agents</title>
      <dc:creator>Shiv Shankar</dc:creator>
      <pubDate>Tue, 04 Aug 2026 13:09:11 +0000</pubDate>
      <link>https://dev.to/shiv_s_hankar/architecting-deterministic-rollbacks-for-ai-agents-k9k</link>
      <guid>https://dev.to/shiv_s_hankar/architecting-deterministic-rollbacks-for-ai-agents-k9k</guid>
      <description>&lt;h1&gt;
  
  
  Architecting Deterministic Rollbacks for AI Agents
&lt;/h1&gt;

&lt;p&gt;Debugging long-running AI agents in production is exceptionally difficult when you cannot restore their exact memory state from a specific point in the past. &lt;/p&gt;

&lt;p&gt;Standard RAG (Retrieval-Augmented Generation) architectures store flat vectors. When facts change, developers either overwrite the old vector (losing history) or keep both (causing context drift and LLM hallucination).&lt;/p&gt;

&lt;p&gt;The structural fix is implementing a bi-temporal schema. Every observation is stored with a &lt;code&gt;valid_from&lt;/code&gt; and &lt;code&gt;valid_to&lt;/code&gt; timestamp. When a fact is superseded, you update &lt;code&gt;valid_to&lt;/code&gt; on the old record. &lt;/p&gt;

&lt;p&gt;This guarantees deterministic rollbacks. To debug what the agent knew three days ago (Time &lt;em&gt;T&lt;/em&gt;), you query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;valid_from&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;valid_to&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="n"&gt;valid_to&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We implemented this natively in the open-source &lt;a href="https://smriti-kaal.vercel.app/" rel="noopener noreferrer"&gt;Smriti&lt;/a&gt; engine to enforce strict state transitions and eliminate context corruption.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Why AI Agents Need Database Triggers, Not Just Prompts</title>
      <dc:creator>Shiv Shankar</dc:creator>
      <pubDate>Sun, 02 Aug 2026 12:05:40 +0000</pubDate>
      <link>https://dev.to/shiv_s_hankar/why-ai-agents-need-database-triggers-not-just-prompts-1igi</link>
      <guid>https://dev.to/shiv_s_hankar/why-ai-agents-need-database-triggers-not-just-prompts-1igi</guid>
      <description>&lt;h1&gt;
  
  
  Why AI Agents Need Database Triggers, Not Just Prompts
&lt;/h1&gt;

&lt;p&gt;When a fact changes, prompting the LLM to 'forget' it is unreliable. Instead, use database triggers to automatically close temporal boundaries (&lt;code&gt;valid_to = NOW()&lt;/code&gt;) on superseded facts. Let the DB handle state coherence.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>The 'Agentic' Trend is Masking a Deep Infrastructure Problem</title>
      <dc:creator>Shiv Shankar</dc:creator>
      <pubDate>Sun, 02 Aug 2026 12:05:36 +0000</pubDate>
      <link>https://dev.to/shiv_s_hankar/the-agentic-trend-is-masking-a-deep-infrastructure-problem-57no</link>
      <guid>https://dev.to/shiv_s_hankar/the-agentic-trend-is-masking-a-deep-infrastructure-problem-57no</guid>
      <description>&lt;h1&gt;
  
  
  The 'Agentic' Trend is Masking a Deep Infrastructure Problem
&lt;/h1&gt;

&lt;p&gt;Most frameworks treat agents as black boxes. But if you look closely, the state management layer is usually just a flat RAG implementation. This causes catastrophic context drift in long-term tasks. We need bi-temporal architectures at the storage layer.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>LLMs Are Stateless. Here Is What That Actually Means for Agent Memory.</title>
      <dc:creator>Shiv Shankar</dc:creator>
      <pubDate>Thu, 30 Jul 2026 13:08:59 +0000</pubDate>
      <link>https://dev.to/shiv_s_hankar/llms-are-stateless-here-is-what-that-actually-means-for-agent-memory-3p9</link>
      <guid>https://dev.to/shiv_s_hankar/llms-are-stateless-here-is-what-that-actually-means-for-agent-memory-3p9</guid>
      <description>&lt;h1&gt;
  
  
  LLMs Are Stateless. Here Is What That Actually Means for Agent Memory.
&lt;/h1&gt;

&lt;p&gt;There is a sentence that most AI agent tutorials skip over, and it explains&lt;br&gt;
why building reliable long-running agents is so hard:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Between API calls, the model knows nothing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every "memory feature" you have ever seen — ChatGPT's memory, Claude's Projects,&lt;br&gt;
LangMem, Mem0 — is a human-written system that prepares text and injects it into&lt;br&gt;
the context window before calling the model. The model itself has no persistent state.&lt;/p&gt;
&lt;h2&gt;
  
  
  The implication people miss
&lt;/h2&gt;

&lt;p&gt;If the LLM is stateless, then the &lt;em&gt;intelligence&lt;/em&gt; of a long-running agent lives entirely&lt;br&gt;
in the harness that manages what gets injected and what gets discarded.&lt;/p&gt;

&lt;p&gt;This is not a limitation. It is a design principle.&lt;/p&gt;

&lt;p&gt;The research community has started treating it explicitly this way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MemGPT (2023)&lt;/strong&gt; introduced the "LLM as OS" analogy: the model is a CPU,&lt;br&gt;
external memory is disk, and the harness manages what pages are in RAM at query time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;StateFlow (2024)&lt;/strong&gt; goes further: the agent is a Finite State Machine.&lt;br&gt;
The LLM is only invoked at state transitions, not held responsible for state itself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ClawVM (2026)&lt;/strong&gt; formalises this as a virtual memory layer: the harness enforces&lt;br&gt;
deterministic, validated writebacks at every lifecycle boundary.&lt;br&gt;
The LLM outputs raw thoughts; the harness decides what is committed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  The consequence for memory design
&lt;/h2&gt;

&lt;p&gt;If the LLM is purely a processing unit, then the quality of your agent's memory&lt;br&gt;
is entirely the quality of your &lt;em&gt;harness&lt;/em&gt; — the system that decides what facts to&lt;br&gt;
store, how long they are valid, and when they should be superseded.&lt;/p&gt;

&lt;p&gt;A harness that stores flat embeddings and retrieves by similarity gives you a&lt;br&gt;
mediocre agent. A harness that stores temporal assertions and resolves conflicts&lt;br&gt;
deterministically gives you a reliable one.&lt;/p&gt;
&lt;h2&gt;
  
  
  What "temporal assertion" means in practice
&lt;/h2&gt;

&lt;p&gt;A temporal assertion is a fact with a lifespan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;subject&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;   &lt;span class="s"&gt;user_project&lt;/span&gt;
&lt;span class="na"&gt;predicate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;uses_language&lt;/span&gt;  
&lt;span class="na"&gt;object&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;    &lt;span class="s"&gt;Python&lt;/span&gt;
&lt;span class="na"&gt;valid_from&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2025-01-10&lt;/span&gt;
&lt;span class="na"&gt;valid_to&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;   &lt;span class="s"&gt;2025-06-15   ← closed when user switched to TypeScript&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The harness stores this, not the LLM. The LLM never sees the old fact again&lt;br&gt;
once &lt;code&gt;valid_to&lt;/code&gt; is set. Active state is &lt;code&gt;WHERE valid_to IS NULL&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This is the model behind &lt;a href="https://smriti-kaal.vercel.app/" rel="noopener noreferrer"&gt;Smriti&lt;/a&gt; — an open-source&lt;br&gt;
temporal memory engine built precisely to be a reliable harness for stateless LLMs.&lt;/p&gt;

&lt;p&gt;The LLM is not the agent. The harness is the agent. Build the harness well.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;MIT license. PostgreSQL-backed. Open source.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>agentmemory</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The Hidden Bug in Every AI Agent Memory System: Temporal Drift</title>
      <dc:creator>Shiv Shankar</dc:creator>
      <pubDate>Thu, 30 Jul 2026 13:08:28 +0000</pubDate>
      <link>https://dev.to/shiv_s_hankar/the-hidden-bug-in-every-ai-agent-memory-system-temporal-drift-1b1a</link>
      <guid>https://dev.to/shiv_s_hankar/the-hidden-bug-in-every-ai-agent-memory-system-temporal-drift-1b1a</guid>
      <description>&lt;h1&gt;
  
  
  The Hidden Bug in Every AI Agent Memory System: Temporal Drift
&lt;/h1&gt;

&lt;p&gt;Most AI agent memory systems have a silent bug. It doesn't show up in demos.&lt;br&gt;
It only surfaces in production, after weeks of running.&lt;/p&gt;

&lt;p&gt;The bug is called &lt;strong&gt;temporal drift&lt;/strong&gt; — and it is the reason your agent confidently&lt;br&gt;
tells a user something that stopped being true three weeks ago.&lt;/p&gt;
&lt;h2&gt;
  
  
  How it happens
&lt;/h2&gt;

&lt;p&gt;You store a fact: &lt;em&gt;"User prefers Python over TypeScript."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Three weeks later the user switches to a TypeScript-first team.&lt;br&gt;
You store a new fact: &lt;em&gt;"User is now working in a TypeScript monorepo."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Both facts live in your vector database. Both have similar embeddings to queries&lt;br&gt;
about the user's tech preferences. Your similarity search retrieves both.&lt;/p&gt;

&lt;p&gt;Now your agent has two contradictory beliefs — and no way to know which one is current.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why vector similarity cannot fix this
&lt;/h2&gt;

&lt;p&gt;Cosine similarity measures semantic closeness, not temporal validity.&lt;br&gt;
A fact from two years ago and a fact from this morning score equally if they&lt;br&gt;
are semantically related to the query. There is no "time" in the embedding space.&lt;/p&gt;

&lt;p&gt;You can try to inject timestamps into your prompt and ask the LLM to reason about&lt;br&gt;
which fact is newer. That works in demos. In production, it is slow, non-deterministic,&lt;br&gt;
and fails the moment two facts have similar timestamps.&lt;/p&gt;
&lt;h2&gt;
  
  
  The structural fix: temporal assertions
&lt;/h2&gt;

&lt;p&gt;Instead of storing facts as permanent records, treat each fact as a &lt;strong&gt;temporal interval&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;valid_from&lt;/code&gt;: when this fact became true&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;valid_to&lt;/code&gt;: when this fact stopped being true (NULL = still active)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a new fact supersedes an old one, you write a &lt;code&gt;valid_to&lt;/code&gt; timestamp on the old record&lt;br&gt;
and insert the new one. You never delete. You never update in place.&lt;/p&gt;

&lt;p&gt;Active memory is then trivially:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;memory_events&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;agent_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
  &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;subject&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
  &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;valid_to&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Historical state at any past moment T is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;memory_events&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;agent_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
  &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;valid_from&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt;
  &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;valid_to&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="n"&gt;valid_to&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No LLM calls. No reasoning under uncertainty. Pure index arithmetic.&lt;/p&gt;

&lt;h2&gt;
  
  
  This is what we built with Smriti
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://smriti-kaal.vercel.app/" rel="noopener noreferrer"&gt;Smriti&lt;/a&gt; is an open-source bi-temporal memory engine&lt;br&gt;
that does exactly this. It extracts Subject-Verb-Object facts from agent interactions,&lt;br&gt;
assigns them validity windows, and handles supersession automatically.&lt;/p&gt;

&lt;p&gt;The result: your agent's memory is always temporally coherent.&lt;br&gt;
No stale facts. No conflicting beliefs. No hallucinations from outdated context.&lt;/p&gt;

&lt;p&gt;If you are building an agent that runs for more than a single session,&lt;br&gt;
this is the architectural layer you are probably missing.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Open source. MIT license. Built on PostgreSQL.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>agents</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Why Vector Databases Fail at Agent Memory (And How We Fixed It)</title>
      <dc:creator>Shiv Shankar</dc:creator>
      <pubDate>Wed, 29 Jul 2026 16:32:33 +0000</pubDate>
      <link>https://dev.to/shiv_s_hankar/why-vector-databases-fail-at-agent-memory-and-how-we-fixed-it-2b91</link>
      <guid>https://dev.to/shiv_s_hankar/why-vector-databases-fail-at-agent-memory-and-how-we-fixed-it-2b91</guid>
      <description>&lt;h1&gt;
  
  
  Why Vector Databases Fail at Agent Memory (And How We Fixed It)
&lt;/h1&gt;

&lt;p&gt;If you are building an AI agent that runs over long periods (days or weeks), you've likely hit the "Context Window Wall." The standard solution is to take all your chat history, embed it, and shove it into a Vector Database.&lt;/p&gt;

&lt;p&gt;But here is the fatal flaw with flat vector retrieval: &lt;strong&gt;It doesn't understand time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If a user says "I live in New York" on Monday, and "I just moved to London" on Friday, a vector database returns both facts. Your agent gets confused and hallucinated.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bi-Temporal Fix
&lt;/h2&gt;

&lt;p&gt;In traditional systems engineering, we fix this with a dual-calendar model. Instead of storing flat documents, you extract the state into Subject-Verb-Object (SVO) events and tag them with &lt;code&gt;valid_from&lt;/code&gt; and &lt;code&gt;valid_to&lt;/code&gt;. When a contradictory fact arrives, you simply close the &lt;code&gt;valid_to&lt;/code&gt; bound of the old fact. &lt;/p&gt;

&lt;p&gt;To fetch active memory, your agent just queries: &lt;code&gt;WHERE valid_to IS NULL&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Smriti
&lt;/h2&gt;

&lt;p&gt;We got tired of writing this complex supersession logic, so we built &lt;a href="https://smriti-kaal.vercel.app/" rel="noopener noreferrer"&gt;Smriti&lt;/a&gt;. It's a completely open-source, Postgres-backed temporal memory engine for AI agents. It handles the SVO extraction and invalidation asynchronously, so your agent's reasoning loop is never blocked.&lt;/p&gt;

&lt;p&gt;Check out the repo and let us know what you think!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>python</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Why Flat Vector Retrieval Fails on Long-Term Agent Memory (And How Bi-Temporal SVO Modeling Fixes It)</title>
      <dc:creator>Shiv Shankar</dc:creator>
      <pubDate>Tue, 28 Jul 2026 10:13:32 +0000</pubDate>
      <link>https://dev.to/shiv_s_hankar/why-flat-vector-retrieval-fails-on-long-term-agent-memory-and-how-bi-temporal-svo-modeling-fixes-2fjn</link>
      <guid>https://dev.to/shiv_s_hankar/why-flat-vector-retrieval-fails-on-long-term-agent-memory-and-how-bi-temporal-svo-modeling-fixes-2fjn</guid>
      <description>&lt;p&gt;When building autonomous AI agents, developers often start with a flat vector database (like ChromaDB or Pinecone) to store conversation history. However, as agent sessions scale, flat vector search faces a fundamental limitation: &lt;strong&gt;it cannot encode time&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Core Problem: Flat Vectors Don't Know "When"
&lt;/h3&gt;

&lt;p&gt;If a user says &lt;em&gt;"I live in New York"&lt;/em&gt; on Monday, and then &lt;em&gt;"I moved to San Francisco"&lt;/em&gt; on Friday, a standard vector search for &lt;em&gt;"Where does the user live?"&lt;/em&gt; will retrieve &lt;strong&gt;both&lt;/strong&gt; statements with high cosine similarity. The agent receives conflicting facts and hallucinates.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution: Bi-Temporal Dual-Calendar Memory (Smriti)
&lt;/h3&gt;

&lt;p&gt;To solve this, &lt;strong&gt;&lt;a href="https://smriti-kaal.vercel.app/" rel="noopener noreferrer"&gt;Smriti&lt;/a&gt;&lt;/strong&gt; uses a bi-temporal architecture in PostgreSQL:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;SVO Event Extraction&lt;/strong&gt;: Turns are parsed into Subject-Verb-Object (SVO) assertions with explicit &lt;code&gt;valid_from&lt;/code&gt; and &lt;code&gt;valid_to&lt;/code&gt; timestamps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-LLM Fact Supersession&lt;/strong&gt;: When a new fact arrives, an in-process statistical engine invalidates the prior &lt;code&gt;valid_to&lt;/code&gt; timestamp without needing slow, expensive LLM reflection passes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Point-in-Time Queries&lt;/strong&gt;: Queries evaluate &lt;code&gt;valid_to IS NULL&lt;/code&gt; for active truths, keeping the context window 100% clean.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check out the live API and benchmarks at &lt;a href="https://smriti-kaal.vercel.app/" rel="noopener noreferrer"&gt;smriti-kaal.vercel.app&lt;/a&gt;.&lt;/p&gt;

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