Spaces:
Running
Running
| """ | |
| RAG Retrieval Agent | |
| Dedicated agent for vector database queries | |
| Uses FAISS for local vector storage | |
| """ | |
| import json | |
| from rag.scheme_vectorstore import load_scheme_vectorstore | |
| from rag.exam_vectorstore import load_exam_vectorstore | |
| def run_rag_agent(query: str, database: str = "schemes", k: int = 5) -> dict: | |
| """ | |
| Performs RAG retrieval from specified vectorstore | |
| Args: | |
| query: Search query | |
| database: "schemes" or "exams" | |
| k: Number of documents to retrieve | |
| Returns: | |
| Retrieved documents dictionary | |
| """ | |
| try: | |
| if database == "schemes": | |
| vectorstore = load_scheme_vectorstore() | |
| elif database == "exams": | |
| vectorstore = load_exam_vectorstore() | |
| else: | |
| return { | |
| "error": f"Invalid database: {database}. Use 'schemes' or 'exams'", | |
| "documents": [] | |
| } | |
| # Similarity search | |
| docs = vectorstore.similarity_search(query, k=k) | |
| # Format results | |
| formatted_docs = [] | |
| for i, doc in enumerate(docs): | |
| formatted_docs.append({ | |
| "id": i + 1, | |
| "content": doc.page_content, | |
| "metadata": doc.metadata, | |
| "source": doc.metadata.get('source', 'Unknown') | |
| }) | |
| return { | |
| "query": query, | |
| "database": database, | |
| "documents_found": len(formatted_docs), | |
| "documents": formatted_docs | |
| } | |
| except FileNotFoundError as e: | |
| return { | |
| "error": f"Vectorstore not found for {database}. Please build it first.", | |
| "documents": [] | |
| } | |
| except Exception as e: | |
| return { | |
| "error": str(e), | |
| "documents": [] | |
| } | |
| def hybrid_rag_search(query: str, k: int = 3) -> dict: | |
| """ | |
| Searches both scheme and exam databases | |
| Args: | |
| query: Search query | |
| k: Number of documents per database | |
| Returns: | |
| Combined results from both databases | |
| """ | |
| scheme_results = run_rag_agent(query, database="schemes", k=k) | |
| exam_results = run_rag_agent(query, database="exams", k=k) | |
| return { | |
| "query": query, | |
| "scheme_results": scheme_results, | |
| "exam_results": exam_results | |
| } | |
| if __name__ == "__main__": | |
| # Test the agent | |
| result = run_rag_agent("agricultural schemes for farmers", database="schemes", k=3) | |
| print(json.dumps(result, indent=2)) | |