<?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: Harshavardhan S</title>
    <description>The latest articles on DEV Community by Harshavardhan S (@harshavardhan_s_1b0cae4e3).</description>
    <link>https://dev.to/harshavardhan_s_1b0cae4e3</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%2F4232099%2F1961a017-906f-436f-8a25-9c6ddc37792d.png</url>
      <title>DEV Community: Harshavardhan S</title>
      <link>https://dev.to/harshavardhan_s_1b0cae4e3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/harshavardhan_s_1b0cae4e3"/>
    <language>en</language>
    <item>
      <title>**SmartSupport AI**: A Customer Support Chatbot That Never Forgets</title>
      <dc:creator>Harshavardhan S</dc:creator>
      <pubDate>Sat, 07 Nov 2026 12:43:32 +0000</pubDate>
      <link>https://dev.to/harshavardhan_s_1b0cae4e3/smartsupport-ai-a-customer-support-chatbot-that-never-forgets-56n4</link>
      <guid>https://dev.to/harshavardhan_s_1b0cae4e3/smartsupport-ai-a-customer-support-chatbot-that-never-forgets-56n4</guid>
      <description>&lt;h1&gt;
  
  
  SmartSupport AI: An AI Customer Support Assistant with Long-Term Memory
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Customer support chatbots are everywhere, but most of them share one frustrating flaw: they forget. A customer explains their problem, gives their details, and the next time they return, the conversation starts from zero. &lt;strong&gt;SmartSupport AI&lt;/strong&gt; is a customer support chatbot built to fix exactly that, using artificial intelligence combined with long-term memory to deliver personalized support.&lt;/p&gt;

&lt;p&gt;Imagine a customer named Alex contacting support. In the first conversation, Alex shares three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My name is Alex.&lt;/li&gt;
&lt;li&gt;My order number is 12345.&lt;/li&gt;
&lt;li&gt;I prefer email support.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Later, Alex returns and simply asks, &lt;em&gt;"Can you help me with my order?"&lt;/em&gt; SmartSupport AI retrieves the stored information and uses it to give a more personalized response.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;In simple words:&lt;/strong&gt; our chatbot doesn't just answer questions; it can remember useful customer information for future conversations.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Problem We Solve
&lt;/h2&gt;

&lt;p&gt;Traditional support systems lose useful customer context between conversations. This forces customers to repeat themselves and makes the experience feel impersonal.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Traditional chatbot&lt;/th&gt;
&lt;th&gt;SmartSupport AI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Limited conversation memory&lt;/td&gt;
&lt;td&gt;Long-term memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repeatedly asks customer details&lt;/td&gt;
&lt;td&gt;Can recall stored details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Less personalized&lt;/td&gt;
&lt;td&gt;Personalized responses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Limited customer context&lt;/td&gt;
&lt;td&gt;Retrieves previous information&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Technologies Used
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Python&lt;/strong&gt; (programming language): writes the application logic, connects APIs, processes messages and manages customer information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streamlit&lt;/strong&gt; (frontend and dashboard): builds the web interface using Python, without needing HTML, CSS or JavaScript for the basic application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Groq&lt;/strong&gt; (AI response generation): provides access to the language model that understands customer questions and generates responses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hindsight&lt;/strong&gt; (long-term AI memory): stores customer conversation information and retrieves relevant memories when needed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;SQLite&lt;/strong&gt; (optional local database) was discussed for persistent chat history, but I decided not to add it yet. It is not part of the working implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Architecture
&lt;/h2&gt;

&lt;p&gt;SmartSupport AI follows a &lt;strong&gt;memory-augmented AI chatbot&lt;/strong&gt; design. A message travels through six stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The customer enters a support question.&lt;/li&gt;
&lt;li&gt;The Streamlit application receives the message.&lt;/li&gt;
&lt;li&gt;Hindsight searches for relevant customer memories.&lt;/li&gt;
&lt;li&gt;Groq receives the question together with the retrieved memory context.&lt;/li&gt;
&lt;li&gt;Groq generates a personalized response, which is displayed to the customer.&lt;/li&gt;
&lt;li&gt;The conversation is saved to Hindsight, making useful information available for future retrieval.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/PASTE_ARCHITECTURE_IMAGE_URL_HERE" 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/PASTE_ARCHITECTURE_IMAGE_URL_HERE" alt="Architecture diagram" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 1: Conceptual architecture. Human-agent escalation is a design idea, not yet implemented.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Understanding the Code
&lt;/h2&gt;

&lt;p&gt;The main logic lives in &lt;code&gt;app.py&lt;/code&gt;. Its key parts are below.&lt;/p&gt;
&lt;h3&gt;
  
  
  Importing libraries
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;streamlit&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;st&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dotenv&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_dotenv&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;groq&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Groq&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;hindsight_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Hindsight&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Library&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;streamlit&lt;/td&gt;
&lt;td&gt;Creates the user interface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;os&lt;/td&gt;
&lt;td&gt;Reads environment variables&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;asyncio&lt;/td&gt;
&lt;td&gt;Runs asynchronous functions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dotenv&lt;/td&gt;
&lt;td&gt;Loads API keys from .env&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;groq&lt;/td&gt;
&lt;td&gt;Connects to Groq AI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hindsight_client&lt;/td&gt;
&lt;td&gt;Connects to Hindsight&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Connecting Groq
&lt;/h3&gt;

&lt;p&gt;The Groq client is initialized with an API key. The project currently uses the model &lt;code&gt;openai/gpt-oss-120b&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;groq_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Groq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;groq_key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Retrieving memories
&lt;/h3&gt;

&lt;p&gt;The app asks Hindsight to find useful information associated with the customer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;recall_memory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Customer ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Find previous support details and preferences.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Generating AI responses
&lt;/h3&gt;

&lt;p&gt;The system instructions, conversation history and current question are sent to Groq.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;groq_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;openai/gpt-oss-120b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;system_prompt&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;session_state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user_input&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Saving memories
&lt;/h3&gt;

&lt;p&gt;The conversation is sent to Hindsight for use in future retrieval.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;save_memory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Customer ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Customer message: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;user_input&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Assistant response: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Customer Dashboard
&lt;/h2&gt;

&lt;p&gt;The dashboard is one of the most important parts of the project and has three major functions.&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/PASTE_DASHBOARD_IMAGE_URL_HERE" 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/PASTE_DASHBOARD_IMAGE_URL_HERE" alt="Dashboard screenshot" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 2: The Streamlit dashboard showing the customer profile extracted from stored memories.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  A. Customer Profile
&lt;/h3&gt;

&lt;p&gt;Displays information extracted from stored memories. For my test customer:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Customer information&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Customer ID&lt;/td&gt;
&lt;td&gt;customer-001&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Name&lt;/td&gt;
&lt;td&gt;Alex&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Order number&lt;/td&gt;
&lt;td&gt;12345&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support preference&lt;/td&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  B. Customer Memory
&lt;/h3&gt;

&lt;p&gt;Retrieves stored information from Hindsight. In a successful test, the dashboard displayed &lt;strong&gt;21 memories retrieved&lt;/strong&gt;, each of which can be expanded to inspect its contents.&lt;/p&gt;
&lt;h3&gt;
  
  
  C. Automatic Profile Extraction
&lt;/h3&gt;

&lt;p&gt;A Groq-powered extraction function takes the retrieved memories and extracts structured information: customer name, order number and preferred support method. JSON is used because it organizes information into predictable fields, making it easy to display with Streamlit metrics.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Alex"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"order_number"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"12345"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"support_preference"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"email"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Project Files
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SmartSupport-AI/
├── venv/
├── .env
├── .gitignore
├── app.py
├── test_hindsight.py
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;app.py&lt;/td&gt;
&lt;td&gt;Main application code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;.env&lt;/td&gt;
&lt;td&gt;Stores secret API credentials&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;.gitignore&lt;/td&gt;
&lt;td&gt;Prevents selected files from being uploaded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;test_hindsight.py&lt;/td&gt;
&lt;td&gt;Tests Hindsight connectivity and functionality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;README.md&lt;/td&gt;
&lt;td&gt;Explains the project to other developers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;venv/&lt;/td&gt;
&lt;td&gt;Python virtual environment containing dependencies&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; never upload &lt;code&gt;.env&lt;/code&gt; or &lt;code&gt;venv&lt;/code&gt; to GitHub. Also, the README mentions a &lt;code&gt;requirements.txt&lt;/code&gt; file that isn't in the project yet. It should be created before anyone else tries to install the project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Project Progress
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Working in tests:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python and VS Code setup&lt;/li&gt;
&lt;li&gt;Groq API integration and working AI chatbot&lt;/li&gt;
&lt;li&gt;Hindsight API integration&lt;/li&gt;
&lt;li&gt;Customer memory saving and retrieval&lt;/li&gt;
&lt;li&gt;Customer profile extraction&lt;/li&gt;
&lt;li&gt;Streamlit customer dashboard&lt;/li&gt;
&lt;li&gt;README documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Not implemented yet:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Persistent chat history using SQLite&lt;/li&gt;
&lt;li&gt;Multi-user authentication&lt;/li&gt;
&lt;li&gt;Admin and support-agent roles&lt;/li&gt;
&lt;li&gt;Deployment to a public hosting service&lt;/li&gt;
&lt;li&gt;Automated customer analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Advantages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Personalization:&lt;/strong&gt; responses use relevant customer information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-term memory:&lt;/strong&gt; can retrieve information from previous conversations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduced repetition:&lt;/strong&gt; customers may not need to repeat previously stored details.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple interface:&lt;/strong&gt; Streamlit makes the application easy to use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modular architecture:&lt;/strong&gt; response generation and memory retrieval are handled by separate services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expandable:&lt;/strong&gt; additional features can be added in the future.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limitations and Future Improvements
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Limitation&lt;/th&gt;
&lt;th&gt;Possible future improvement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Depends on internet connectivity&lt;/td&gt;
&lt;td&gt;Improve offline handling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Depends on external APIs&lt;/td&gt;
&lt;td&gt;Add fallback mechanisms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No login system yet&lt;/td&gt;
&lt;td&gt;Add authentication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No persistent chat history in SQLite&lt;/td&gt;
&lt;td&gt;Add a database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory retrieval may not always find everything&lt;/td&gt;
&lt;td&gt;Improve retrieval and memory testing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Hindsight retrieval is not guaranteed to be perfect, so customer details should be verified before they are used for sensitive support actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;SmartSupport AI shows how combining a fast language model (Groq) with a dedicated memory layer (Hindsight) can turn a forgetful chatbot into a more helpful, personalized assistant. By recalling details such as a customer's name, order number and contact preference, it reduces repetition and preserves context across conversations. With future additions like authentication, persistent history and deployment, it has a clear path to grow beyond its hackathon beginnings.&lt;/p&gt;

&lt;p&gt;Feedback and ideas are welcome in the comments!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>chatbot</category>
      <category>streamlit</category>
    </item>
  </channel>
</rss>
