import time from typing import List, Dict, Any from src.generator.state import GeneratorState from src.generator.graph import COMPILED_GRAPH from src.retriever.state import RetrievalResult async def generate( query: str, history: List[Dict[str, str]], last_retrieval: RetrievalResult | None = None ) -> Dict[str, Any]: """ Public API entry point for Phase 4 Generative & Verifier flow. Evaluates context router, routes, builds context, generates, and verifies. """ start_time = time.time() initial_state: GeneratorState = { "query": query, "history": history, "retrieval_result": last_retrieval or {"primary": [], "supporting": [], "citations": [], "sources": [], "query_metadata": {}}, "context_str": "", "raw_answer": "", "generated": None, "citations": [], "verification": {"passed": False, "score": 0.0, "grounded_claims": 0, "ungrounded_claims": 0, "issues": []}, "final_answer": "", "retry_count": 0, "bypassed_retrieval": False, "error": None, "latency_ms": 0 } final_state = await COMPILED_GRAPH.ainvoke(initial_state) latency = round((time.time() - start_time) * 1000) return { "answer": final_state.get("final_answer", ""), "citations": final_state.get("citations", []), "confidence": final_state.get("verification", {}).get("score", 0.0), "verification": final_state.get("verification"), "retrieval": final_state.get("retrieval_result"), "latency_ms": latency }