<?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: Jayalakshmi Chearukupalli</title>
    <description>The latest articles on DEV Community by Jayalakshmi Chearukupalli (@jayalakshmi_chearukupalli).</description>
    <link>https://dev.to/jayalakshmi_chearukupalli</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%2F4147953%2F0a3100ca-5aa9-40a2-bcab-12df1590a19c.png</url>
      <title>DEV Community: Jayalakshmi Chearukupalli</title>
      <link>https://dev.to/jayalakshmi_chearukupalli</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jayalakshmi_chearukupalli"/>
    <language>en</language>
    <item>
      <title>SupportMind: A support agent that remembers every customer</title>
      <dc:creator>Jayalakshmi Chearukupalli</dc:creator>
      <pubDate>Mon, 28 Sep 2026 20:16:27 +0000</pubDate>
      <link>https://dev.to/jayalakshmi_chearukupalli/supportmind-a-support-agent-that-remembers-every-customer-2j5n</link>
      <guid>https://dev.to/jayalakshmi_chearukupalli/supportmind-a-support-agent-that-remembers-every-customer-2j5n</guid>
      <description>&lt;p&gt;Every time I contact support, I have to explain my problem again. So I built SupportMind, a support agent that remembers each customer.&lt;/p&gt;

&lt;p&gt;Priya's router used to disconnect because of old firmware, and an update fixed it. When she says "my internet keeps dropping" again, the agent skips the basic steps and goes straight to what worked before.&lt;/p&gt;

&lt;p&gt;A new customer sends the same message and gets a generic checklist. Same model, same prompt. Only the memory is different.&lt;/p&gt;

&lt;p&gt;I Am JayaLakshmi , And This Was Build In Code.in&lt;/p&gt;

&lt;p&gt;Have you ever contacted customer support twice about the same thing? The second time, you explain everything again, because the agent has no idea what happened before.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Story Angle&lt;/strong&gt;**&lt;br&gt;
That isn't an AI problem. It's a memory problem. So I built SupportMind, a support agent that remembers every customer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meet Priya&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Priya's router used to disconnect every evening. The cause was outdated firmware, and updating it fixed the problem. Later she had slow WiFi, and a WiFi extender fixed that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now Priya writes:&lt;/strong&gt;** "my internet keeps dropping."&lt;/p&gt;

&lt;p&gt;A normal bot replies with the usual checklist: restart the router, check the cables. Priya has heard this before.&lt;/p&gt;

&lt;p&gt;SupportMind already knows her history. It skips the basics and goes straight to what worked for her.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meet a new customer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A new customer sends the exact same message. There's no history, so the agent gives the generic checklist, which is the right answer for a first-time customer.&lt;/p&gt;

&lt;p&gt;Same model. Same prompt. The only difference is memory.&lt;/p&gt;

&lt;p&gt;Nothing gets mixed up&lt;/p&gt;

&lt;p&gt;Every customer has their own separate memory bank. Priya's router problems never show up in Ananya's billing chat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it's built&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flask for the app&lt;/li&gt;
&lt;li&gt;Groq (gpt-oss-120b) for the replies&lt;/li&gt;
&lt;li&gt;Hindsight for the memory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before each reply, the agent recalls the customer's past issues. After each reply, it saves the new conversation for next time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One memory bank per customer&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;The first rule:&lt;/strong&gt;every customer gets their own memory bank, using their customer ID. This keeps histories separate, so one customer's problems never leak into another customer's chat.&lt;/p&gt;

&lt;p&gt;Call 1: Recall (before replying)**&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;recall_result = hindsight.recall(bank_id=customer_id, query=message)
past_memories = [r.text for r in recall_result.results]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I use the customer's message as the search query, so I only get back memories that matter for this question. If nothing comes back, I tell the model "This is a new customer with no past history."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Call 2: Generate the reply&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
response = groq_client.chat.completions.create(
    model="openai/gpt-oss-120b",
    messages=[
        {"role": "system", "content": f"You are a helpful support agent.\n{memory_context}"},
        {"role": "user", "content": message}
    ]
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The memories go into the system prompt. That's the whole trick.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Call 3: Retain (after replying)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hindsight.retain(
    bank_id=customer_id,
    content=f"Customer said: {message}. Agent replied: {reply}"
)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the next conversation starts with more knowledge than this one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus: Reflect&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hindsight.reflect(
    bank_id=customer_id,
    query="Write a briefing for a support agent about this customer. Use 3 short bullet points."
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recall gives you raw memories. Reflect gives you a short summary. I use it for the "Generate customer briefing" button.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tips:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Test the empty-memory case first.&lt;/li&gt;
&lt;li&gt; Show the recalled memories in the UI. &lt;/li&gt;
&lt;li&gt; It makes the agent's behavior easy to understand and debug.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;What I learned&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Show the recalled memories in the UI. It makes the agent's behavior easy to understand.&lt;/li&gt;
&lt;li&gt;Test the empty-memory case first.&lt;/li&gt;
&lt;li&gt;Per-customer memory beats stuffing the full chat 
history into every prompt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built with Code.in and Hindsight&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fppll728k7t1ngyhq3ma7.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fppll728k7t1ngyhq3ma7.jpeg" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2q9upe3ew4tn3b412epp.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2q9upe3ew4tn3b412epp.jpeg" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwvshbiexi9eys5yzuxin.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwvshbiexi9eys5yzuxin.jpeg" alt=" " width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe75zmr7twn0k576gjn4t.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe75zmr7twn0k576gjn4t.jpeg" alt=" " width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmdtv0r7ziu014xi9v73z.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmdtv0r7ziu014xi9v73z.jpeg" alt=" " width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>llm</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
