{"id":2798,"date":"2026-07-24T12:44:00","date_gmt":"2026-07-24T12:44:00","guid":{"rendered":"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/"},"modified":"2026-07-24T18:59:07","modified_gmt":"2026-07-24T18:59:07","slug":"stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems","status":"publish","type":"post","link":"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/","title":{"rendered":"Stateful vs. Stateless Agent Design: Tradeoffs for Scalable Agentic Techniques"},"content":{"rendered":"<p><br \/>\n<\/p>\n<div id=\"\">\n<p>On this article, you&#8217;ll find out how an agent\u2019s strategy to managing state \u2014 stateless or stateful \u2014 shapes each its implementation and the deployment structure constructed round it.<\/p>\n<p>Subjects we are going to cowl embody:<\/p>\n<p>What separates stateless from stateful brokers, and the tradeoffs every design imposes on scaling.<br \/>\nThe right way to implement a stateless agent that relies upon solely on the consumer to produce dialog historical past.<br \/>\nThe right way to implement a stateful agent that manages its personal reminiscence via a database layer.<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/machinelearningmastery.com\/wp-content\/uploads\/2026\/07\/mlm-stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems-feature.png\" alt=\"Stateful vs. Stateless Agent Design: Tradeoffs for Scalable Agentic Systems\" width=\"800\" height=\"706\"\/><\/p>\n<h2>Introduction<\/h2>\n<p>A earlier article laid out a complete architectural roadmap for AI agent deployment, inspecting the infrastructure wanted to convey brokers into manufacturing settings.<\/p>\n<p>As a follow-up, we now flip to a basic, sensible query that needs to be answered earlier than any load balancer is configured: the place does the agent\u2019s reminiscence reside? Brokers could deal with their state (the context gained to this point and the dialog historical past) in numerous methods, and this code-level determination can considerably influence all the deployment structure.<\/p>\n<p>This text breaks down the 2 major paradigms for dealing with an agent\u2019s state: stateless and stateful design. A simplified model of a real-world implementation, utilizing open language fashions served via the quick Groq API, will illustrate these concepts in apply.<\/p>\n<h2>Preliminary Setup<\/h2>\n<p>If that is the primary time you might be utilizing language fashions from Groq in a Python program, you\u2019ll want to put in the required library: pip set up groq.<\/p>\n<p>After that, we import it and set our Groq API key within the code under:<\/p>\n<div id=\"urvanov-syntax-highlighter-6a63b5fa0d6cd557196472\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-mac print-yes notranslate\" data-settings=\" minimize scroll-mouseover disable-anim\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n<p>\nimport os&#13;<br \/>\nfrom groq import Groq&#13;<br \/>\n&#13;<br \/>\n# Get an API key in https:\/\/console.groq.com\/keys and set it right here&#13;<br \/>\nos.environ[&#8220;GROQ_API_KEY&#8221;] = &#8220;PASTE_YOUR_GROQ_API_KEY_HERE&#8221;&#13;<br \/>\n&#13;<br \/>\n# Initializing the consumer&#13;<br \/>\nconsumer = Groq()&#13;<br \/>\n&#13;<br \/>\n# Utilizing an environment friendly mannequin from Groq: Llama 3.1 8B Immediate&#13;<br \/>\nMODEL_ID = &#8220;llama-3.1-8b-instant&#8221;<\/p>\n<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n<div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\">\n<p><span class=\"crayon-e\">import <\/span><span class=\"crayon-e\">os<\/span><\/p>\n<p><span class=\"crayon-e\">from <\/span><span class=\"crayon-e\">groq <\/span><span class=\"crayon-e\">import <\/span><span class=\"crayon-i\">Groq<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-p\"># Get an API key in https:\/\/console.groq.com\/keys and set it right here<\/span><\/p>\n<p><span class=\"crayon-v\">os<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">environ<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-s\">&#8220;GROQ_API_KEY&#8221;<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;PASTE_YOUR_GROQ_API_KEY_HERE&#8221;<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-p\"># Initializing the consumer<\/span><\/p>\n<p><span class=\"crayon-v\">consumer<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">Groq<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-p\"># Utilizing an environment friendly mannequin from Groq: Llama 3.1 8B Immediate<\/span><\/p>\n<p><span class=\"crayon-v\">MODEL_ID<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;llama-3.1-8b-instant&#8221;<\/span><\/p>\n<\/div><\/div><\/div>\n<p>An essential setup determination right here is the selection of a selected mannequin. llama-3.1-8b-instant is a extremely cost-efficient mannequin that&#8217;s, on the time of writing, generously supported on Groq\u2019s 2026 free tier: it permits as much as 14,400 requests per day. That makes it a perfect alternative for illustrating the stateless and stateful agent paradigms under.<\/p>\n<h2>Stateless Brokers: Hearth and Neglect<\/h2>\n<p>Stateless brokers deal with every request as fully remoted and unbiased. The agent reads the person immediate, invokes the LLM inference engine, and delivers the output. As soon as that execution cycle ends, every little thing is forgotten.<\/p>\n<h3>The Tradeoff<\/h3>\n<p>Architectures based mostly on stateless brokers might be scaled horizontally with outstanding ease. Since no person reminiscence is saved on a backend server, incoming requests might be forwarded to any accessible occasion. There&#8217;s, nevertheless, an essential limitation in multi-turn conversations: the frontend should re-send the entire dialog historical past alongside each new request. In consequence, the context window grows with a snowballing impact, shortly driving up token utilization.<\/p>\n<h3>Illustrative Instance<\/h3>\n<p>This runnable code illustrates, via a fundamental situation, how a stateless agent sometimes interacts with a Groq language mannequin. <\/p>\n<p>First, we outline a stateless_agent perform that emulates an agent\u2019s interplay with our chosen mannequin. Importantly, no state or reminiscence of the dialog is saved internally. As an alternative, the earlier dialog historical past can optionally be handed in as a parameter and appended to the present immediate. The API name to the Groq mannequin takes place in consumer.chat.completions.create().<\/p>\n<div id=\"urvanov-syntax-highlighter-6a63b5fa0d6d9605805747\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-mac print-yes notranslate\" data-settings=\" minimize scroll-mouseover disable-anim\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n<p>\ndef stateless_agent(immediate: str, provided_history: listing = None) -&gt; str:&#13;<br \/>\n    &#8220;&#8221;&#8221;&#13;<br \/>\n    The agent depends fully on the consumer to supply context.&#13;<br \/>\n    It retains no data from previous interactions in native reminiscence.&#13;<br \/>\n    &#8220;&#8221;&#8221;&#13;<br \/>\n    # Initializing with a system immediate&#13;<br \/>\n    messages = [{&#8220;role&#8221;: &#8220;system&#8221;, &#8220;content&#8221;: &#8220;You are a helpful, concise assistant.&#8221;}]&#13;<br \/>\n    &#13;<br \/>\n    # Appending no matter historical past the consumer offered&#13;<br \/>\n    if provided_history:&#13;<br \/>\n        messages.lengthen(provided_history)&#13;<br \/>\n        &#13;<br \/>\n    # Appending the brand new immediate&#13;<br \/>\n    messages.append({&#8220;function&#8221;: &#8220;person&#8221;, &#8220;content material&#8221;: immediate})&#13;<br \/>\n    &#13;<br \/>\n    # The LLM processes all the chain of messages&#13;<br \/>\n    response = consumer.chat.completions.create(&#13;<br \/>\n        mannequin=MODEL_ID,&#13;<br \/>\n        messages=messages,&#13;<br \/>\n        max_tokens=100&#13;<br \/>\n    )&#13;<br \/>\n    &#13;<br \/>\n    return response.selections[0].message.content material.strip()<\/p>\n<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\">\n<p>1<\/p>\n<p>2<\/p>\n<p>3<\/p>\n<p>4<\/p>\n<p>5<\/p>\n<p>6<\/p>\n<p>7<\/p>\n<p>8<\/p>\n<p>9<\/p>\n<p>10<\/p>\n<p>11<\/p>\n<p>12<\/p>\n<p>13<\/p>\n<p>14<\/p>\n<p>15<\/p>\n<p>16<\/p>\n<p>17<\/p>\n<p>18<\/p>\n<p>19<\/p>\n<p>20<\/p>\n<p>21<\/p>\n<p>22<\/p>\n<p>23<\/p>\n<\/div>\n<div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\">\n<p><span class=\"crayon-e\">def <\/span><span class=\"crayon-e\">stateless_agent<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">immediate<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">str<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">provided_history<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">listing<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">None<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">str<\/span><span class=\"crayon-o\">:<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-s\">&#8220;&#8221;<\/span><span class=\"crayon-s\">&#8220;<\/span><\/p>\n<p><span class=\"crayon-s\">\u00a0\u00a0\u00a0\u00a0The agent depends fully on the consumer to supply context.<\/span><\/p>\n<p><span class=\"crayon-s\">\u00a0\u00a0\u00a0\u00a0It retains no data from previous interactions in native reminiscence.<\/span><\/p>\n<p><span class=\"crayon-s\">\u00a0\u00a0\u00a0\u00a0&#8220;<\/span><span class=\"crayon-s\">&#8220;&#8221;<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-p\"># Initializing with a system immediate<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">messages<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-s\">&#8220;role&#8221;<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;system&#8221;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;content&#8221;<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;You are a helpful, concise assistant.&#8221;<\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-sy\">]<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-p\"># Appending no matter historical past the consumer offered<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">provided_history<\/span><span class=\"crayon-o\">:<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">messages<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">lengthen<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">provided_history<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-p\"># Appending the brand new immediate<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">messages<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">append<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-s\">&#8220;function&#8221;<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;person&#8221;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;content material&#8221;<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">immediate<\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-p\"># The LLM processes all the chain of messages<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">response<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">consumer<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">chat<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">completions<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">create<\/span><span class=\"crayon-sy\">(<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mannequin<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-v\">MODEL_ID<\/span><span class=\"crayon-sy\">,<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">messages<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-v\">messages<\/span><span class=\"crayon-sy\">,<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">max_tokens<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-cn\">100<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-st\">return<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">response<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">selections<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">message<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">content material<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">strip<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<\/div><\/div><\/div>\n<p>To know the constraints of a stateless agent, we simulate a easy user-model dialog via it:<\/p>\n<div id=\"urvanov-syntax-highlighter-6a63b5fa0d6df047470640\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-mac print-yes notranslate\" data-settings=\" minimize scroll-mouseover disable-anim\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n<p>\n# &#8212; Testing the Stateless Agent &#8212;&#13;<br \/>\n&#13;<br \/>\nprint(&#8220;&#8212; Flip 1 &#8212;&#8220;)&#13;<br \/>\nprompt_1 = &#8220;Hello, my identify is Alice and I&#8217;m studying about API infrastructure.&#8221;&#13;<br \/>\nresponse_1 = stateless_agent(prompt_1)&#13;<br \/>\nprint(f&#8221;Agent: {response_1}&#8221;)&#13;<br \/>\n&#13;<br \/>\nprint(&#8220;n&#8212; Flip 2 (With out Shopper Context) &#8212;&#8220;)&#13;<br \/>\n# The agent fails right here as a result of it retained no reminiscence of Flip 1&#13;<br \/>\nprompt_2 = &#8220;What&#8217;s my identify and what am I studying about?&#8221;&#13;<br \/>\nresponse_2 = stateless_agent(prompt_2)&#13;<br \/>\nprint(f&#8221;Agent: {response_2}&#8221;)&#13;<br \/>\n&#13;<br \/>\nprint(&#8220;n&#8212; Flip 2 (With Shopper Context) &#8212;&#8220;)&#13;<br \/>\n# The frontend MUST inject the historical past into the payload for the agent to succeed&#13;<br \/>\nfrontend_payload = [&#13;<br \/>\n    {&#8220;role&#8221;: &#8220;user&#8221;, &#8220;content&#8221;: prompt_1},&#13;<br \/>\n    {&#8220;role&#8221;: &#8220;assistant&#8221;, &#8220;content&#8221;: response_1}&#13;<br \/>\n]&#13;<br \/>\nresponse_3 = stateless_agent(prompt_2, provided_history=frontend_payload)&#13;<br \/>\nprint(f&#8221;Agent: {response_3}&#8221;)<\/p>\n<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\">\n<p>1<\/p>\n<p>2<\/p>\n<p>3<\/p>\n<p>4<\/p>\n<p>5<\/p>\n<p>6<\/p>\n<p>7<\/p>\n<p>8<\/p>\n<p>9<\/p>\n<p>10<\/p>\n<p>11<\/p>\n<p>12<\/p>\n<p>13<\/p>\n<p>14<\/p>\n<p>15<\/p>\n<p>16<\/p>\n<p>17<\/p>\n<p>18<\/p>\n<p>19<\/p>\n<p>20<\/p>\n<p>21<\/p>\n<\/div>\n<div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\">\n<p><span class=\"crayon-p\"># &#8212; Testing the Stateless Agent &#8212;<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;&#8212; Flip 1 &#8212;&#8220;<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-v\">prompt_1<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;Hello, my identify is Alice and I&#8217;m studying about API infrastructure.&#8221;<\/span><\/p>\n<p><span class=\"crayon-v\">response_1<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">stateless_agent<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">prompt_1<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-i\">f<\/span><span class=\"crayon-s\">&#8220;Agent: {response_1}&#8221;<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;n&#8212; Flip 2 (With out Shopper Context) &#8212;&#8220;<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-p\"># The agent fails right here as a result of it retained no reminiscence of Flip 1<\/span><\/p>\n<p><span class=\"crayon-v\">prompt_2<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;What&#8217;s my identify and what am I studying about?&#8221;<\/span><\/p>\n<p><span class=\"crayon-v\">response_2<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">stateless_agent<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">prompt_2<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-i\">f<\/span><span class=\"crayon-s\">&#8220;Agent: {response_2}&#8221;<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;n&#8212; Flip 2 (With Shopper Context) &#8212;&#8220;<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-p\"># The frontend MUST inject the historical past into the payload for the agent to succeed<\/span><\/p>\n<p><span class=\"crayon-v\">frontend_payload<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-s\">&#8220;role&#8221;<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;user&#8221;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;content&#8221;<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">prompt_1<\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-sy\">,<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-s\">&#8220;role&#8221;<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;assistant&#8221;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;content&#8221;<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">response_1<\/span><span class=\"crayon-sy\">}<\/span><\/p>\n<p><span class=\"crayon-sy\">]<\/span><\/p>\n<p><span class=\"crayon-v\">response_3<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">stateless_agent<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">prompt_2<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">provided_history<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-v\">frontend_payload<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-i\">f<\/span><span class=\"crayon-s\">&#8220;Agent: {response_3}&#8221;<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<\/div><\/div><\/div>\n<p>Output:<\/p>\n<div id=\"urvanov-syntax-highlighter-6a63b5fa0d6e5580023761\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-mac print-yes notranslate\" data-settings=\" minimize scroll-mouseover disable-anim\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n<p>\n&#8212; Flip 1 &#8212;&#13;<br \/>\nAgent: Hey Alice, good to fulfill you. Studying about API infrastructure is usually a fascinating and rewarding subject. What particular elements of API infrastructure would you wish to discover or focus on? Are you searching for data on API administration, safety, deployment, or one thing else?&#13;<br \/>\n&#13;<br \/>\n&#8212; Flip 2 (With out Shopper Context) &#8212;&#13;<br \/>\nAgent: Sadly, I haven&#8217;t got any details about you, together with your identify. Our dialog simply began, so I am right here that can assist you with any questions or matters you&#8217;d wish to find out about. Please be at liberty to share your identify and a subject you are concerned about studying about.&#13;<br \/>\n&#13;<br \/>\n&#8212; Flip 2 (With Shopper Context) &#8212;&#13;<br \/>\nAgent: Your identify is Alice, and you might be studying about API infrastructure.<\/p>\n<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n<div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\">\n<p><span class=\"crayon-o\">&#8212;<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">Flip<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&#8212;<\/span><span class=\"crayon-o\">&#8211;<\/span><\/p>\n<p><span class=\"crayon-v\">Agent<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">Hey <\/span><span class=\"crayon-v\">Alice<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">good <\/span><span class=\"crayon-st\">to<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">meet <\/span><span class=\"crayon-v\">you<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">Studying <\/span><span class=\"crayon-e\">about <\/span><span class=\"crayon-e\">API <\/span><span class=\"crayon-e\">infrastructure <\/span><span class=\"crayon-e\">can <\/span><span class=\"crayon-i\">be<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">a<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">fascinating <\/span><span class=\"crayon-st\">and<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">rewarding <\/span><span class=\"crayon-v\">subject<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">What <\/span><span class=\"crayon-e\">particular <\/span><span class=\"crayon-e\">elements <\/span><span class=\"crayon-e\">of <\/span><span class=\"crayon-e\">API <\/span><span class=\"crayon-e\">infrastructure <\/span><span class=\"crayon-e\">would <\/span><span class=\"crayon-e\">you <\/span><span class=\"crayon-e\">like <\/span><span class=\"crayon-st\">to<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">discover <\/span><span class=\"crayon-st\">or<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">focus on<\/span><span class=\"crayon-sy\">?<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">Are <\/span><span class=\"crayon-e\">you <\/span><span class=\"crayon-e\">trying <\/span><span class=\"crayon-st\">for<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">data <\/span><span class=\"crayon-e\">on <\/span><span class=\"crayon-e\">API <\/span><span class=\"crayon-v\">administration<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">safety<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">deployment<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">or<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">one thing <\/span><span class=\"crayon-st\">else<\/span><span class=\"crayon-sy\">?<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-o\">&#8212;<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">Flip<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">With out <\/span><span class=\"crayon-e\">Shopper <\/span><span class=\"crayon-v\">Context<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&#8212;<\/span><span class=\"crayon-o\">&#8211;<\/span><\/p>\n<p><span class=\"crayon-v\">Agent<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">Sadly<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">I<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">don<\/span><span class=\"crayon-s\">&#8216;t have any details about you, together with your identify. Our dialog simply began, so I&#8217;<\/span><span class=\"crayon-i\">m<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">right here <\/span><span class=\"crayon-st\">to<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">assist <\/span><span class=\"crayon-e\">you <\/span><span class=\"crayon-e\">with <\/span><span class=\"crayon-e\">any <\/span><span class=\"crayon-e\">questions <\/span><span class=\"crayon-st\">or<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">matters <\/span><span class=\"crayon-i\">you<\/span><span class=\"crayon-s\">&#8216;d wish to find out about. Please be at liberty to share your identify and a subject you&#8217;<\/span><span class=\"crayon-e\">re <\/span><span class=\"crayon-e\"> <\/span><span class=\"crayon-st\">in<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">studying <\/span><span class=\"crayon-v\">about<\/span><span class=\"crayon-sy\">.<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-o\">&#8212;<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">Flip<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-e\">With <\/span><span class=\"crayon-e\">Shopper <\/span><span class=\"crayon-v\">Context<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&#8212;<\/span><span class=\"crayon-o\">&#8211;<\/span><\/p>\n<p><span class=\"crayon-v\">Agent<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">Your <\/span><span class=\"crayon-e\">identify <\/span><span class=\"crayon-st\">is<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">Alice<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">and<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">you <\/span><span class=\"crayon-e\">are <\/span><span class=\"crayon-e\">studying <\/span><span class=\"crayon-e\">about <\/span><span class=\"crayon-e\">API <\/span><span class=\"crayon-v\">infrastructure<\/span><span class=\"crayon-sy\">.<\/span><\/p>\n<\/div><\/div><\/div>\n<p>The implementation is straightforward, however with out a consumer or frontend that sends the total dialog historical past to the agent on each flip, the agent\u2019s LLM lacks the context it must reply sure questions correctly.<\/p>\n<h2>Stateful Brokers: Context-driven Continuity<\/h2>\n<p>Underneath this strategy, the agent takes on the reminiscence burden itself. The consumer, in the meantime, solely must ship the latest person immediate along with a singular identifier, usually related to the present session. The agent then retrieves the session historical past or context from a database and appends the brand new message to it. As soon as the LLM inference has been processed, the agent updates the context within the database.<\/p>\n<h3>The Tradeoff<\/h3>\n<p>It is a a lot neater expertise from the consumer facet. It additionally facilitates advanced and asynchronous workflows during which brokers could must pause their execution and anticipate instruments, app responses, or human approval. However it all comes with a value: scaling this answer turns into a lot tougher, beginning with the necessity for a persistent database layer within the structure. In infrastructures that scale horizontally, methods reminiscent of centralized reminiscence caching with Redis might also turn into essential to keep away from \u201clocalized amnesia\u201d, the place a session\u2019s historical past is stranded on the only occasion that occurred to serve the sooner turns.<\/p>\n<h3>Illustrative Instance<\/h3>\n<p>We illustrate the fundamental concepts behind a stateful agent by incorporating a \u201cpersistent\u201d database layer. For simplicity, we use a tiny SQLite database. The secret&#8217;s to have the agent handle its personal dialog reminiscence as a substitute of relying on a frontend to supply it externally:<\/p>\n<div id=\"urvanov-syntax-highlighter-6a63b5fa0d6ea081893171\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-mac print-yes notranslate\" data-settings=\" minimize scroll-mouseover disable-anim\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n<p>\nimport sqlite3&#13;<br \/>\nimport json&#13;<br \/>\n&#13;<br \/>\n# Initializing an in-memory SQLite database for pocket book testing&#13;<br \/>\nconn = sqlite3.join(&#8216;:reminiscence:&#8217;) &#13;<br \/>\ncursor = conn.cursor()&#13;<br \/>\ncursor.execute(&#8221;&#8217;CREATE TABLE IF NOT EXISTS agent_memory (session_id TEXT PRIMARY KEY, historical past TEXT)&#8221;&#8217;)&#13;<br \/>\nconn.commit()&#13;<br \/>\n&#13;<br \/>\ndef stateful_agent(session_id: str, new_prompt: str) -&gt; str:&#13;<br \/>\n    &#8220;&#8221;&#8221;&#13;<br \/>\n    The agent manages its personal state utilizing a database.&#13;<br \/>\n    The consumer solely sends the brand new immediate and their session ID.&#13;<br \/>\n    &#8220;&#8221;&#8221;&#13;<br \/>\n    # 1. Retrieving current state from the database&#13;<br \/>\n    cursor.execute(&#8220;SELECT historical past FROM agent_memory WHERE session_id=?&#8221;, (session_id,))&#13;<br \/>\n    row = cursor.fetchone()&#13;<br \/>\n    &#13;<br \/>\n    if row:&#13;<br \/>\n        conversation_history = json.hundreds(row[0])&#13;<br \/>\n    else:&#13;<br \/>\n        # Initializing with system immediate for brand spanking new classes&#13;<br \/>\n        conversation_history = [{&#8220;role&#8221;: &#8220;system&#8221;, &#8220;content&#8221;: &#8220;You are a helpful, concise assistant.&#8221;}]&#13;<br \/>\n        &#13;<br \/>\n    # 2. Appending the brand new person immediate&#13;<br \/>\n    conversation_history.append({&#8220;function&#8221;: &#8220;person&#8221;, &#8220;content material&#8221;: new_prompt})&#13;<br \/>\n        &#13;<br \/>\n    # 3. Processing the LLM name utilizing the retrieved historical past&#13;<br \/>\n    response = consumer.chat.completions.create(&#13;<br \/>\n        mannequin=MODEL_ID,&#13;<br \/>\n        messages=conversation_history,&#13;<br \/>\n        max_tokens=100&#13;<br \/>\n    ).selections[0].message.content material.strip()&#13;<br \/>\n    &#13;<br \/>\n    # 4. Updating the state with the assistant&#8217;s reply&#13;<br \/>\n    conversation_history.append({&#8220;function&#8221;: &#8220;assistant&#8221;, &#8220;content material&#8221;: response})&#13;<br \/>\n    &#13;<br \/>\n    # 5. Saving the brand new state again to the database&#13;<br \/>\n    cursor.execute(&#8221;&#8217;&#13;<br \/>\n        INSERT INTO agent_memory (session_id, historical past) &#13;<br \/>\n        VALUES (?, ?) &#13;<br \/>\n        ON CONFLICT(session_id) DO UPDATE SET historical past=excluded.historical past&#13;<br \/>\n    &#8221;&#8217;, (session_id, json.dumps(conversation_history)))&#13;<br \/>\n    conn.commit()&#13;<br \/>\n    &#13;<br \/>\n    return response<\/p>\n<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n<div class=\"urvanov-syntax-highlighter-nums-content\" style=\"font-size: 12px !important; line-height: 15px !important;\">\n<p>1<\/p>\n<p>2<\/p>\n<p>3<\/p>\n<p>4<\/p>\n<p>5<\/p>\n<p>6<\/p>\n<p>7<\/p>\n<p>8<\/p>\n<p>9<\/p>\n<p>10<\/p>\n<p>11<\/p>\n<p>12<\/p>\n<p>13<\/p>\n<p>14<\/p>\n<p>15<\/p>\n<p>16<\/p>\n<p>17<\/p>\n<p>18<\/p>\n<p>19<\/p>\n<p>20<\/p>\n<p>21<\/p>\n<p>22<\/p>\n<p>23<\/p>\n<p>24<\/p>\n<p>25<\/p>\n<p>26<\/p>\n<p>27<\/p>\n<p>28<\/p>\n<p>29<\/p>\n<p>30<\/p>\n<p>31<\/p>\n<p>32<\/p>\n<p>33<\/p>\n<p>34<\/p>\n<p>35<\/p>\n<p>36<\/p>\n<p>37<\/p>\n<p>38<\/p>\n<p>39<\/p>\n<p>40<\/p>\n<p>41<\/p>\n<p>42<\/p>\n<p>43<\/p>\n<p>44<\/p>\n<p>45<\/p>\n<p>46<\/p>\n<\/div>\n<div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\">\n<p><span class=\"crayon-e\">import <\/span><span class=\"crayon-e\">sqlite3<\/span><\/p>\n<p><span class=\"crayon-e\">import <\/span><span class=\"crayon-i\">json<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-p\"># Initializing an in-memory SQLite database for pocket book testing<\/span><\/p>\n<p><span class=\"crayon-v\">conn<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">sqlite3<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">join<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8216;:reminiscence:&#8217;<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><\/p>\n<p><span class=\"crayon-v\">cursor<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">conn<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">cursor<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-v\">cursor<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">execute<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8221;<\/span><span class=\"crayon-s\">&#8216;CREATE TABLE IF NOT EXISTS agent_memory (session_id TEXT PRIMARY KEY, historical past TEXT)&#8217;<\/span><span class=\"crayon-s\">&#8221;<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-v\">conn<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">commit<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-e\">def <\/span><span class=\"crayon-e\">stateful_agent<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">session_id<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">str<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">new_prompt<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">str<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">-&gt;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">str<\/span><span class=\"crayon-o\">:<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-s\">&#8220;&#8221;<\/span><span class=\"crayon-s\">&#8220;<\/span><\/p>\n<p><span class=\"crayon-s\">\u00a0\u00a0\u00a0\u00a0The agent manages its personal state utilizing a database.<\/span><\/p>\n<p><span class=\"crayon-s\">\u00a0\u00a0\u00a0\u00a0The consumer solely sends the brand new immediate and their session ID.<\/span><\/p>\n<p><span class=\"crayon-s\">\u00a0\u00a0\u00a0\u00a0&#8220;<\/span><span class=\"crayon-s\">&#8220;&#8221;<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-p\"># 1. Retrieving current state from the database<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">cursor<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">execute<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;SELECT historical past FROM agent_memory WHERE session_id=?&#8221;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">session_id<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">row<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">cursor<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">fetchone<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-st\">if<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">row<\/span><span class=\"crayon-o\">:<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">conversation_history<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">json<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">hundreds<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">row<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-st\">else<\/span><span class=\"crayon-o\">:<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-p\"># Initializing with system immediate for brand spanking new classes<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">conversation_history<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-s\">&#8220;role&#8221;<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;system&#8221;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;content&#8221;<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;You are a helpful, concise assistant.&#8221;<\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-sy\">]<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-p\"># 2. Appending the brand new person immediate<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">conversation_history<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">append<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-s\">&#8220;function&#8221;<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;person&#8221;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;content material&#8221;<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">new_prompt<\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-p\"># 3. Processing the LLM name utilizing the retrieved historical past<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">response<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">consumer<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">chat<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">completions<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">create<\/span><span class=\"crayon-sy\">(<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">mannequin<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-v\">MODEL_ID<\/span><span class=\"crayon-sy\">,<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">messages<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-v\">conversation_history<\/span><span class=\"crayon-sy\">,<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">max_tokens<\/span><span class=\"crayon-o\">=<\/span><span class=\"crayon-cn\">100<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">selections<\/span><span class=\"crayon-sy\">[<\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">]<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">message<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">content material<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">strip<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-p\"># 4. Updating the state with the assistant&#8217;s reply<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">conversation_history<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">append<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">{<\/span><span class=\"crayon-s\">&#8220;function&#8221;<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;assistant&#8221;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-s\">&#8220;content material&#8221;<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">response<\/span><span class=\"crayon-sy\">}<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-p\"># 5. Saving the brand new state again to the database<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">cursor<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">execute<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8221;<\/span><span class=\"crayon-s\">&#8216;<\/span><\/p>\n<p><span class=\"crayon-s\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0INSERT INTO agent_memory (session_id, historical past) <\/span><\/p>\n<p><span class=\"crayon-s\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0VALUES (?, ?) <\/span><\/p>\n<p><span class=\"crayon-s\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ON CONFLICT(session_id) DO UPDATE SET historical past=excluded.historical past<\/span><\/p>\n<p><span class=\"crayon-s\">\u00a0\u00a0\u00a0\u00a0&#8216;<\/span><span class=\"crayon-s\">&#8221;<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">session_id<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">json<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">dumps<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">conversation_history<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-v\">conn<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-e\">commit<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><\/p>\n<p><span class=\"crayon-h\">\u00a0\u00a0\u00a0\u00a0<\/span><span class=\"crayon-st\">return<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">response<\/span><\/p>\n<\/div><\/div><\/div>\n<p>Discover how the session identifier is used to question the related data from previous interactions within the dialog at hand.<\/p>\n<p>Now let\u2019s strive all of it in a dialog just like the earlier one, however this time with the person asking the agent to recall the person\u2019s personal identify:<\/p>\n<div id=\"urvanov-syntax-highlighter-6a63b5fa0d6f8283358668\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-mac print-yes notranslate\" data-settings=\" minimize scroll-mouseover disable-anim\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n<p>\n# &#8212; Testing the Stateful Agent &#8212;&#13;<br \/>\n&#13;<br \/>\nprint(&#8220;&#8212; Flip 1 &#8212;&#8220;)&#13;<br \/>\nprint(f&#8221;Agent: {stateful_agent(&#8216;user_123&#8217;, &#8216;Hello, I&#8217;m Bob and I need to scale my AI app.&#8217;)}&#8221;)&#13;<br \/>\n&#13;<br \/>\nprint(&#8220;n&#8212; Flip 2 &#8212;&#8220;)&#13;<br \/>\n# Discover how the consumer NO LONGER sends the context payload. Simply the session ID.&#13;<br \/>\nprint(f&#8221;Agent: {stateful_agent(&#8216;user_123&#8217;, &#8216;What was my identify once more?&#8217;)}&#8221;)<\/p>\n<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n<div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\">\n<p><span class=\"crayon-p\"># &#8212; Testing the Stateful Agent &#8212;<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;&#8212; Flip 1 &#8212;&#8220;<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-i\">f<\/span><span class=\"crayon-s\">&#8220;Agent: {stateful_agent(&#8216;user_123&#8217;, &#8216;Hello, I&#8217;m Bob and I need to scale my AI app.&#8217;)}&#8221;<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-s\">&#8220;n&#8212; Flip 2 &#8212;&#8220;<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-p\"># Discover how the consumer NO LONGER sends the context payload. Simply the session ID.<\/span><\/p>\n<p><span class=\"crayon-e\">print<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-i\">f<\/span><span class=\"crayon-s\">&#8220;Agent: {stateful_agent(&#8216;user_123&#8217;, &#8216;What was my identify once more?&#8217;)}&#8221;<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<\/div><\/div><\/div>\n<p>Output:<\/p>\n<div id=\"urvanov-syntax-highlighter-6a63b5fa0d6fd080722484\" class=\"urvanov-syntax-highlighter-syntax crayon-theme-classic urvanov-syntax-highlighter-font-monaco urvanov-syntax-highlighter-os-mac print-yes notranslate\" data-settings=\" minimize scroll-mouseover disable-anim\" style=\" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;\">\n<p>\n&#8212; Flip 1 &#8212;&#13;<br \/>\nAgent: Hey Bob, scaling an AI app is usually a advanced course of. Might I ask:&#13;<br \/>\n&#13;<br \/>\n1. What kind of AI know-how is your app constructed on? (e.g., machine studying, pure language processing, laptop imaginative and prescient)&#13;<br \/>\n2. Are you utilizing any cloud providers like AWS, Google Cloud, or Azure? &#13;<br \/>\n3. What are your scalability targets (e.g., enhance person depend, scale back latency, enhance response occasions)?&#13;<br \/>\n&#13;<br \/>\nThis data will assist me higher perceive your necessities and supply more practical help.&#13;<br \/>\n&#13;<br \/>\n&#8212; Flip 2 &#8212;&#13;<br \/>\nAgent: Your identify is Bob.<\/p>\n<div class=\"urvanov-syntax-highlighter-main\" style=\"\">\n<div class=\"crayon-pre\" style=\"font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\">\n<p><span class=\"crayon-o\">&#8212;<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">Flip<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">1<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&#8212;<\/span><span class=\"crayon-o\">&#8211;<\/span><\/p>\n<p><span class=\"crayon-v\">Agent<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">Hey <\/span><span class=\"crayon-v\">Bob<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">scaling <\/span><span class=\"crayon-e\">an <\/span><span class=\"crayon-e\">AI <\/span><span class=\"crayon-e\">app <\/span><span class=\"crayon-e\">can <\/span><span class=\"crayon-i\">be<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">a<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">advanced <\/span><span class=\"crayon-v\">course of<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">Might<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">I<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">ask<\/span><span class=\"crayon-o\">:<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-cn\">1.<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">What <\/span><span class=\"crayon-e\">kind <\/span><span class=\"crayon-e\">of <\/span><span class=\"crayon-e\">AI <\/span><span class=\"crayon-e\">know-how <\/span><span class=\"crayon-st\">is<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">your <\/span><span class=\"crayon-e\">app <\/span><span class=\"crayon-e\">constructed <\/span><span class=\"crayon-v\">on<\/span><span class=\"crayon-sy\">?<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">e<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">g<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">machine <\/span><span class=\"crayon-v\">studying<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">pure <\/span><span class=\"crayon-e\">language <\/span><span class=\"crayon-v\">processing<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">laptop <\/span><span class=\"crayon-v\">imaginative and prescient<\/span><span class=\"crayon-sy\">)<\/span><\/p>\n<p><span class=\"crayon-cn\">2.<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">Are <\/span><span class=\"crayon-e\">you <\/span><span class=\"crayon-e\">utilizing <\/span><span class=\"crayon-e\">any <\/span><span class=\"crayon-e\">cloud <\/span><span class=\"crayon-e\">providers <\/span><span class=\"crayon-e\">like <\/span><span class=\"crayon-v\">AWS<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">Google <\/span><span class=\"crayon-v\">Cloud<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-st\">or<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">Azure<\/span><span class=\"crayon-sy\">?<\/span><span class=\"crayon-h\"> <\/span><\/p>\n<p><span class=\"crayon-cn\">3.<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">What <\/span><span class=\"crayon-e\">are <\/span><span class=\"crayon-e\">your <\/span><span class=\"crayon-e\">scalability <\/span><span class=\"crayon-e\">targets<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-v\">e<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-v\">g<\/span><span class=\"crayon-sy\">.<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">enhance <\/span><span class=\"crayon-e\">person <\/span><span class=\"crayon-v\">depend<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">scale back <\/span><span class=\"crayon-v\">latency<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">enhance <\/span><span class=\"crayon-e\">response <\/span><span class=\"crayon-v\">occasions<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">?<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-r\">This<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">data <\/span><span class=\"crayon-e\">will <\/span><span class=\"crayon-e\">assist <\/span><span class=\"crayon-e\">me <\/span><span class=\"crayon-e\">higher <\/span><span class=\"crayon-e\">perceive <\/span><span class=\"crayon-e\">your <\/span><span class=\"crayon-e\">necessities <\/span><span class=\"crayon-st\">and<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">present <\/span><span class=\"crayon-e\">extra <\/span><span class=\"crayon-e\">efficient <\/span><span class=\"crayon-v\">help<\/span><span class=\"crayon-sy\">.<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span class=\"crayon-o\">&#8212;<\/span><span class=\"crayon-o\">&#8211;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">Flip<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-o\">&#8212;<\/span><span class=\"crayon-o\">&#8211;<\/span><\/p>\n<p><span class=\"crayon-v\">Agent<\/span><span class=\"crayon-o\">:<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">Your <\/span><span class=\"crayon-e\">identify <\/span><span class=\"crayon-st\">is<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-v\">Bob<\/span><span class=\"crayon-sy\">.<\/span><\/p>\n<\/div><\/div><\/div>\n<p>This instance is, after all, a great distance from a scaled-up manufacturing structure, nevertheless it serves to make clear the important thing distinction between how stateful and stateless brokers work.<\/p>\n<h2>Wrapping Up: The Tradeoffs<\/h2>\n<p>The selection between a stateful and a stateless architectural design boils right down to correctly matching the infrastructure to the workflow:<\/p>\n<p>Stateless brokers are most well-liked in easy pipelines oriented to very particular duties, like textual content extraction, summarization, or single-turn classification chatbots. They preserve the structure light-weight, which is often sufficient in such use instances, avoiding database bottlenecks and permitting seamless horizontal scaling.<br \/>\nStateful brokers make rather more sense if we intend to develop long-running assistants, coding assistants, or multi-turn bots in purposes like customer support. As a result of the agent owns the historical past, the consumer payload stays small on each flip, and the dialog might be trimmed or summarized server-side as a substitute of being resent in full because it grows.<\/p><\/div>\n<p><br \/>\n<br \/><a href=\"https:\/\/machinelearningmastery.com\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>On this article, you&#8217;ll find out how an agent\u2019s strategy to managing state \u2014 stateless or stateful \u2014 shapes each its implementation and the deployment structure constructed round it. Subjects we are going to cowl embody: What separates stateless from stateful brokers, and the tradeoffs every design imposes on scaling. The right way to implement [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2800,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/machinelearningmastery.com\/wp-content\/uploads\/2026\/07\/mlm-stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems-feature.png","fifu_image_alt":"","jnews-multi-image_gallery":[],"jnews_single_post":[],"jnews_primary_category":[],"jnews_override_bookmark_settings":[],"jnews_social_meta":[],"jnews_override_counter":[],"footnotes":""},"categories":[7],"tags":[457,15,824,3113,3262,3263,1363,2186],"class_list":["post-2798","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-science-mlops","tag-agent","tag-agentic","tag-design","tag-scalable","tag-stateful","tag-stateless","tag-systems","tag-tradeoffs"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Stateful vs. Stateless Agent Design: Tradeoffs for Scalable Agentic Techniques - Future News 24<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Stateful vs. Stateless Agent Design: Tradeoffs for Scalable Agentic Techniques - Future News 24\" \/>\n<meta property=\"og:description\" content=\"On this article, you&#8217;ll find out how an agent\u2019s strategy to managing state \u2014 stateless or stateful \u2014 shapes each its implementation and the deployment structure constructed round it. Subjects we are going to cowl embody: What separates stateless from stateful brokers, and the tradeoffs every design imposes on scaling. The right way to implement [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/\" \/>\n<meta property=\"og:site_name\" content=\"Future News 24\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-24T12:44:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-24T18:59:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/machinelearningmastery.com\/wp-content\/uploads\/2026\/07\/mlm-stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems-feature.png\" \/>\n<meta name=\"author\" content=\"Future News 24\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/machinelearningmastery.com\/wp-content\/uploads\/2026\/07\/mlm-stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems-feature.png\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Future News 24\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/24\\\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/24\\\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\\\/\"},\"author\":{\"name\":\"Future News 24\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#\\\/schema\\\/person\\\/cecad1bde21cfc357cf70128144d6c83\"},\"headline\":\"Stateful vs. Stateless Agent Design: Tradeoffs for Scalable Agentic Techniques\",\"datePublished\":\"2026-07-24T12:44:00+00:00\",\"dateModified\":\"2026-07-24T18:59:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/24\\\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\\\/\"},\"wordCount\":2579,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/24\\\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/machinelearningmastery.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/mlm-stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems-feature.png\",\"keywords\":[\"Agent\",\"Agentic\",\"Design\",\"Scalable\",\"Stateful\",\"Stateless\",\"Systems\",\"Tradeoffs\"],\"articleSection\":[\"Data Science &amp; MLOps\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/24\\\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/24\\\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\\\/\",\"url\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/24\\\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\\\/\",\"name\":\"Stateful vs. Stateless Agent Design: Tradeoffs for Scalable Agentic Techniques - Future News 24\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/24\\\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/24\\\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/machinelearningmastery.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/mlm-stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems-feature.png\",\"datePublished\":\"2026-07-24T12:44:00+00:00\",\"dateModified\":\"2026-07-24T18:59:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/24\\\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/24\\\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/24\\\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\\\/#primaryimage\",\"url\":\"https:\\\/\\\/machinelearningmastery.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/mlm-stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems-feature.png\",\"contentUrl\":\"https:\\\/\\\/machinelearningmastery.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/mlm-stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems-feature.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/07\\\/24\\\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/futurenews24.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Stateful vs. Stateless Agent Design: Tradeoffs for Scalable Agentic Techniques\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#website\",\"url\":\"https:\\\/\\\/futurenews24.com\\\/\",\"name\":\"Future News 24\",\"description\":\"The Smart Hub for AI and Next-Gen Innovation\",\"publisher\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/futurenews24.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#organization\",\"name\":\"Future News 24\",\"url\":\"https:\\\/\\\/futurenews24.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/futurenews24.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/fn24-favicon.png\",\"contentUrl\":\"https:\\\/\\\/futurenews24.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/fn24-favicon.png\",\"width\":250,\"height\":250,\"caption\":\"Future News 24\"},\"image\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#\\\/schema\\\/person\\\/cecad1bde21cfc357cf70128144d6c83\",\"name\":\"Future News 24\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g\",\"caption\":\"Future News 24\"},\"sameAs\":[\"https:\\\/\\\/futurenews24.com\"],\"url\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/author\\\/mridulpahuja20\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Stateful vs. Stateless Agent Design: Tradeoffs for Scalable Agentic Techniques - Future News 24","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/","og_locale":"en_US","og_type":"article","og_title":"Stateful vs. Stateless Agent Design: Tradeoffs for Scalable Agentic Techniques - Future News 24","og_description":"On this article, you&#8217;ll find out how an agent\u2019s strategy to managing state \u2014 stateless or stateful \u2014 shapes each its implementation and the deployment structure constructed round it. Subjects we are going to cowl embody: What separates stateless from stateful brokers, and the tradeoffs every design imposes on scaling. The right way to implement [&hellip;]","og_url":"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/","og_site_name":"Future News 24","article_published_time":"2026-07-24T12:44:00+00:00","article_modified_time":"2026-07-24T18:59:07+00:00","og_image":[{"url":"https:\/\/machinelearningmastery.com\/wp-content\/uploads\/2026\/07\/mlm-stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems-feature.png","type":"","width":"","height":""}],"author":"Future News 24","twitter_card":"summary_large_image","twitter_image":"https:\/\/machinelearningmastery.com\/wp-content\/uploads\/2026\/07\/mlm-stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems-feature.png","twitter_misc":{"Written by":"Future News 24","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/#article","isPartOf":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/"},"author":{"name":"Future News 24","@id":"https:\/\/futurenews24.com\/#\/schema\/person\/cecad1bde21cfc357cf70128144d6c83"},"headline":"Stateful vs. Stateless Agent Design: Tradeoffs for Scalable Agentic Techniques","datePublished":"2026-07-24T12:44:00+00:00","dateModified":"2026-07-24T18:59:07+00:00","mainEntityOfPage":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/"},"wordCount":2579,"commentCount":0,"publisher":{"@id":"https:\/\/futurenews24.com\/#organization"},"image":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/#primaryimage"},"thumbnailUrl":"https:\/\/machinelearningmastery.com\/wp-content\/uploads\/2026\/07\/mlm-stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems-feature.png","keywords":["Agent","Agentic","Design","Scalable","Stateful","Stateless","Systems","Tradeoffs"],"articleSection":["Data Science &amp; MLOps"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/","url":"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/","name":"Stateful vs. Stateless Agent Design: Tradeoffs for Scalable Agentic Techniques - Future News 24","isPartOf":{"@id":"https:\/\/futurenews24.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/#primaryimage"},"image":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/#primaryimage"},"thumbnailUrl":"https:\/\/machinelearningmastery.com\/wp-content\/uploads\/2026\/07\/mlm-stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems-feature.png","datePublished":"2026-07-24T12:44:00+00:00","dateModified":"2026-07-24T18:59:07+00:00","breadcrumb":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/#primaryimage","url":"https:\/\/machinelearningmastery.com\/wp-content\/uploads\/2026\/07\/mlm-stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems-feature.png","contentUrl":"https:\/\/machinelearningmastery.com\/wp-content\/uploads\/2026\/07\/mlm-stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems-feature.png"},{"@type":"BreadcrumbList","@id":"https:\/\/futurenews24.com\/index.php\/2026\/07\/24\/stateful-vs-stateless-agent-design-tradeoffs-for-scalable-agentic-systems\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/futurenews24.com\/"},{"@type":"ListItem","position":2,"name":"Stateful vs. Stateless Agent Design: Tradeoffs for Scalable Agentic Techniques"}]},{"@type":"WebSite","@id":"https:\/\/futurenews24.com\/#website","url":"https:\/\/futurenews24.com\/","name":"Future News 24","description":"The Smart Hub for AI and Next-Gen Innovation","publisher":{"@id":"https:\/\/futurenews24.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/futurenews24.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/futurenews24.com\/#organization","name":"Future News 24","url":"https:\/\/futurenews24.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/futurenews24.com\/#\/schema\/logo\/image\/","url":"https:\/\/futurenews24.com\/wp-content\/uploads\/2026\/06\/fn24-favicon.png","contentUrl":"https:\/\/futurenews24.com\/wp-content\/uploads\/2026\/06\/fn24-favicon.png","width":250,"height":250,"caption":"Future News 24"},"image":{"@id":"https:\/\/futurenews24.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/futurenews24.com\/#\/schema\/person\/cecad1bde21cfc357cf70128144d6c83","name":"Future News 24","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g","caption":"Future News 24"},"sameAs":["https:\/\/futurenews24.com"],"url":"https:\/\/futurenews24.com\/index.php\/author\/mridulpahuja20\/"}]}},"_links":{"self":[{"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/posts\/2798","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/comments?post=2798"}],"version-history":[{"count":1,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/posts\/2798\/revisions"}],"predecessor-version":[{"id":2799,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/posts\/2798\/revisions\/2799"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/media\/2800"}],"wp:attachment":[{"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/media?parent=2798"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/categories?post=2798"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/tags?post=2798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}