Spaces:
Runtime error
Runtime error
| import os | |
| import chromadb | |
| from chromadb.utils import embedding_functions | |
| # Configurar persistencia en la carpeta raíz del proyecto | |
| PERSIST_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), ".chroma_db") | |
| class VectorStore: | |
| """Implementación nativa de base de datos vectorial usando ChromaDB para búsquedas locales.""" | |
| def __init__(self, collection_name: str = "letxipu_docs"): | |
| # Asegurar que el directorio de persistencia exista | |
| os.makedirs(PERSIST_DIR, exist_ok=True) | |
| self.client = chromadb.PersistentClient(path=PERSIST_DIR) | |
| # Usar un modelo ligero local multilingüe o estándar | |
| self.embedding_fn = embedding_functions.SentenceTransformerEmbeddingFunction( | |
| model_name="paraphrase-multilingual-MiniLM-L12-v2" # Soporta español e inglés muy bien | |
| ) | |
| self.collection = self.client.get_or_create_collection( | |
| name=collection_name, | |
| embedding_function=self.embedding_fn | |
| ) | |
| def add_documents(self, documents: list[str], metadatas: list[dict], ids: list[str]): | |
| """Añade documentos (chunks) a la base vectorial.""" | |
| if not documents: | |
| return | |
| self.collection.add( | |
| documents=documents, | |
| metadatas=metadatas, | |
| ids=ids | |
| ) | |
| def search(self, query: str, n_results: int = 5, filter_dict: dict = None) -> dict: | |
| """Busca los fragmentos semánticamente más similares a la consulta.""" | |
| results = self.collection.query( | |
| query_texts=[query], | |
| n_results=n_results, | |
| where=filter_dict | |
| ) | |
| return results | |
| def clear(self): | |
| """Elimina todos los documentos de la colección actual.""" | |
| all_ids = self.collection.get().get("ids", []) | |
| if all_ids: | |
| self.collection.delete(ids=all_ids) | |