58 lines
1.5 KiB
Python
58 lines
1.5 KiB
Python
"""
|
|
Search service layer using API.
|
|
"""
|
|
|
|
from typing import Any, Dict, List, Union
|
|
|
|
from loguru import logger
|
|
|
|
from api.client import api_client
|
|
|
|
|
|
class SearchService:
|
|
"""Service layer for search operations using API."""
|
|
|
|
def __init__(self):
|
|
logger.info("Using API for search operations")
|
|
|
|
def search(
|
|
self,
|
|
query: str,
|
|
search_type: str = "text",
|
|
limit: int = 100,
|
|
search_sources: bool = True,
|
|
search_notes: bool = True,
|
|
minimum_score: float = 0.2
|
|
) -> List[Dict[str, Any]]:
|
|
"""Search the knowledge base."""
|
|
response = api_client.search(
|
|
query=query,
|
|
search_type=search_type,
|
|
limit=limit,
|
|
search_sources=search_sources,
|
|
search_notes=search_notes,
|
|
minimum_score=minimum_score
|
|
)
|
|
if isinstance(response, dict):
|
|
return response.get("results", [])
|
|
return []
|
|
|
|
def ask_knowledge_base(
|
|
self,
|
|
question: str,
|
|
strategy_model: str,
|
|
answer_model: str,
|
|
final_answer_model: str
|
|
) -> Union[Dict[Any, Any], List[Dict[Any, Any]]]:
|
|
"""Ask the knowledge base a question."""
|
|
response = api_client.ask_simple(
|
|
question=question,
|
|
strategy_model=strategy_model,
|
|
answer_model=answer_model,
|
|
final_answer_model=final_answer_model
|
|
)
|
|
return response
|
|
|
|
|
|
# Global service instance
|
|
search_service = SearchService() |