MerchFlow-AI / agents /memory_agent.py
Gaurav vashistha
Bugfix: Remove dynamic models/ string formatting in Vision Agent
e864198
import os
import time
from dotenv import load_dotenv
from pinecone import Pinecone, ServerlessSpec
from google import genai
load_dotenv()
class MemoryAgent:
def __init__(self):
# Configure Gemini
self.gemini_api_key = os.getenv("GEMINI_API_KEY")
if not self.gemini_api_key:
raise ValueError("GEMINI_API_KEY not found")
self.client = genai.Client(api_key=self.gemini_api_key)
# Configure Pinecone
self.pinecone_api_key = os.getenv("PINECONE_API_KEY")
if not self.pinecone_api_key:
raise ValueError("PINECONE_API_KEY not found")
self.pc = Pinecone(api_key=self.pinecone_api_key)
self.index_name = "merchflow-index"
# Check and create index
existing_indexes = [i.name for i in self.pc.list_indexes()]
if self.index_name not in existing_indexes:
print(f"Creating index {self.index_name}...")
self.pc.create_index(
name=self.index_name,
dimension=768, # gemini-embedding-001 output dimension
metric='cosine',
spec=ServerlessSpec(
cloud='aws',
region='us-east-1'
)
)
# Wait for index to be ready
while not self.pc.describe_index(self.index_name).status['ready']:
time.sleep(1)
print("Index created.")
self.index = self.pc.Index(self.index_name)
def _get_embedding(self, text):
# Using gemini-embedding-001
result = self.client.models.embed_content(
model="gemini-embedding-001",
contents=text,
config=genai.types.EmbedContentConfig(output_dimensionality=768)
)
return result.embeddings[0].values
def seed_database(self):
# Check if empty
stats = self.index.describe_index_stats()
if stats.total_vector_count > 0:
print("Database already seeded.")
return
print("Seeding database...")
items = [
{
"id": "item1",
"text": "Running Shoe",
"keywords": "breathable, shock absorption, marathon training, lightweight"
},
{
"id": "item2",
"text": "Graphic T-Shirt",
"keywords": "100% cotton, vintage wash, pre-shrunk, soft feel"
},
{
"id": "item3",
"text": "Leather Wallet",
"keywords": "genuine leather, RFID blocking, minimalist, bifold"
}
]
vectors = []
for item in items:
embedding = self._get_embedding(item['text'])
vectors.append({
"id": item['id'],
"values": embedding,
"metadata": {"keywords": item['keywords'], "text": item['text']}
})
self.index.upsert(vectors=vectors)
print(f"Seeded {len(vectors)} items.")
def retrieve_keywords(self, query_text: str):
try:
query_embedding = self._get_embedding(query_text)
results = self.index.query(
vector=query_embedding,
top_k=5,
include_metadata=True
)
return [m.metadata['keywords'] for m in results.matches if m.metadata and 'keywords' in m.metadata]
except Exception as e:
print(f"❌ Keyword Retrieval Failed: {e}")
return []