Rifqi Hafizuddin
[KM-438-439] add retriever feature
ba550a5
raw
history blame
1.34 kB
"""Public retrieval API — thin wrapper around RetrievalRouter."""
from typing import Any
from sqlalchemy.ext.asyncio import AsyncSession
from src.middlewares.logging import get_logger
from src.rag.retrievers.document import document_retriever
from src.rag.retrievers.schema import schema_retriever
from src.rag.router import RetrievalRouter, SourceHint
logger = get_logger("retriever")
class RetrieverService:
"""Public retrieval service used by chat.py and search tools.
Delegates to RetrievalRouter which dispatches based on source_hint.
Returns List[Dict] to preserve backward compatibility with chat.py.
"""
def __init__(self):
self._router = RetrievalRouter(
schema_retriever=schema_retriever,
document_retriever=document_retriever,
)
async def retrieve(
self,
query: str,
user_id: str,
db: AsyncSession,
k: int = 5,
source_hint: SourceHint = "both",
) -> list[dict[str, Any]]:
try:
results = await self._router.retrieve(query, user_id, source_hint, k)
return [{"content": r.content, "metadata": r.metadata} for r in results]
except Exception as e:
logger.error("retrieval failed", error=str(e))
return []
retriever = RetrieverService()