"""Financial entity extraction endpoint.""" import asyncio from typing import Optional from fastapi import APIRouter, Depends from pydantic import BaseModel router = APIRouter(prefix="/api") class EntityRequest(BaseModel): document_id: Optional[str] = None text: Optional[str] = None def get_llm(): from core.bootstrap import get_llm as _get return _get() def get_db(): from core.bootstrap import get_db as _get return _get() @router.post("/extract-entities") async def extract_entities( request: EntityRequest, llm=Depends(get_llm), db=Depends(get_db), ): if request.text: doc_text = request.text elif request.document_id: chunks = db.fetch_chunks_by_document_id(request.document_id) if not chunks: return {"error": f"No chunks found for document {request.document_id}"} doc_text = "\n\n".join(c["text"] for c in chunks) else: return {"error": "Provide either document_id or text"} entities = await asyncio.to_thread(llm.extract_entities, doc_text) return {"entities": entities}