Spaces:
Sleeping
Sleeping
| # semantic_memory.py | |
| import chromadb | |
| from sentence_transformers import SentenceTransformer | |
| import numpy as np | |
| # نموذج تضمين مجاني وصغير (حجمه ~80 ميجا) | |
| model = SentenceTransformer('all-MiniLM-L6-v2') | |
| client = chromadb.PersistentClient(path="./chroma_memory") | |
| collection = client.get_or_create_collection("semantic_memory") | |
| def store_memory(text: str, user: str, metadata: dict = None): | |
| """تخزين الذاكرة مع تضمين دلالي""" | |
| embedding = model.encode(text).tolist() | |
| doc_id = f"{user}_{hash(text)}_{len(collection.get()['ids'])}" | |
| collection.add( | |
| documents=[text], | |
| embeddings=[embedding], | |
| metadatas=[{"user": user, "text": text, **(metadata or {})}], | |
| ids=[doc_id] | |
| ) | |
| return doc_id | |
| def recall_memory(query: str, user: str, limit: int = 3) -> list: | |
| """استرجاع أكثر الذكريات تشابهاً دلالياً""" | |
| embedding = model.encode(query).tolist() | |
| results = collection.query(query_embeddings=[embedding], n_results=limit, where={"user": user}) | |
| return results['documents'][0] if results['documents'] else [] |