""" Query service for the sim-search API. This module provides services for query processing and classification. """ import sys import os from pathlib import Path from typing import Dict, Any, List, Optional from app.core.config import settings # Add sim-search to the python path sim_search_path = Path(settings.SIM_SEARCH_PATH) sys.path.append(str(sim_search_path)) # Import sim-search components from query.query_processor import QueryProcessor from query.llm_interface import LLMInterface class QueryService: """ Service for query processing and classification. This class provides methods to process and classify queries using the sim-search query processing functionality. """ def __init__(self): """Initialize the query service.""" self.query_processor = QueryProcessor() self.llm_interface = LLMInterface() async def process_query(self, query: str) -> Dict[str, Any]: """ Process a query to enhance and structure it. Args: query: Query to process Returns: Processed query with structured information """ # Process the query using the sim-search query processor structured_query = await self.query_processor.process_query(query) # Format the response return { "original_query": query, "structured_query": structured_query } async def classify_query(self, query: str) -> Dict[str, Any]: """ Classify a query by type and intent. Args: query: Query to classify Returns: Classified query with type and intent information """ # Classify the query using the sim-search LLM interface classification = await self.llm_interface.classify_query_domain(query) # Create a structured query with the classification structured_query = { "original_query": query, "type": classification.get("type"), "intent": classification.get("intent"), "domain": classification.get("domain"), "confidence": classification.get("confidence"), "reasoning": classification.get("reasoning"), "is_academic": classification.get("is_academic", False), "is_code": classification.get("is_code", False), "is_current_events": classification.get("is_current_events", False) } # Format the response return { "original_query": query, "structured_query": structured_query }