"""Custom tools for A11y Expert agent.""" from typing import Optional from database.vector_store_client import VectorStoreClient from models.embeddings import get_embeddings_client from loguru import logger def search_knowledge_base( query: str, vector_store: VectorStoreClient, language: str = "en" ) -> str: """ Search the accessibility knowledge base for relevant information. Args: query: Question or search terms. vector_store: The VectorStoreClient instance. language: Language filter ('pl' or 'en'). Returns: Formatted context from the knowledge base or an error message. """ try: logger.info(f"Query: {query} (language: {language})") embeddings_client = get_embeddings_client() query_embedding = embeddings_client.get_embedding(query) where_clause = f"language = '{language}'" results = vector_store.search( query_embedding=query_embedding, where=where_clause, top_k=5 ) if not results: return f"No documents found for language '{language}'. Please ensure the knowledge base is loaded." context_lines = [ f"[{i}. {r.get('source', 'unknown')} - {r.get('doc_type', 'Document')}]\n" f"{r.get('text', '')}\n" for i, r in enumerate(results, 1) ] context = "\n".join(context_lines) logger.info(f"Found {len(results)} relevant documents") return context except Exception as e: logger.error(f"Search failed: {e}") return f"Error searching knowledge base: {str(e)}" def get_database_stats(vector_store: VectorStoreClient) -> str: """ Get statistics about the knowledge base. Args: vector_store: The VectorStoreClient instance. Returns: A formatted string of database statistics. """ try: count = vector_store.count_documents() return f"📊 Knowledge Base Statistics: Total documents: {count}" except Exception as e: logger.error(f"Failed to get stats: {e}") return f"Error retrieving statistics: {str(e)}"