""" CLI entry point. All the actual pipeline logic (index building, retrieval, generation, evaluation loop) lives in pipeline_service.py so it can be shared with api.py — this file just calls it and prints the result. Run with: python main.py """ from pipeline_service import answer_query if __name__ == "__main__": user_query = "What is hallucination and cause?" result = answer_query(user_query) print(f"Route: {result['route']} " f"(intent={result['intent']['intent']}, " f"confidence={result['intent']['confidence']})") print(f"\nAttempts: {result['attempts']} Decision: {result['decision']} " f"Passed: {result['passed']}") print(f"Metrics: {result['metrics']}") print(f"Checks: {result['checks']}") print("\n==============================") print("Retrieved Context") print("==============================") for i, src in enumerate(result["sources"], 1): print(f"\nDocument {i}: {src}") print("\n==============================") print("Final Answer") print("==============================") print(result["answer"]) if not result["passed"]: print("\n[Note: did not pass all quality thresholds; showing best available answer.]") print("\n==============================") print("Cited Answer") print("==============================") print(result["cited_answer"]) print("\n==============================") print("Hallucination Detection (NLI)") print("==============================") hr = result["hallucination_report"] print(f"Hallucination rate: {hr.get('hallucination_rate')} Flagged: {hr.get('flagged')}") for r in hr.get("sentence_results", []): status = "OK" if r["supported"] else "UNSUPPORTED" print(f" [{status}] ({r['entailment_score']}, source={r['best_source']}) {r['sentence']}") print("\n==============================") print("Evidence Verification (LLM)") print("==============================") vr = result["verification_report"] if not vr.get("verifiable"): print("Could not parse verification output.") else: print(f"All claims supported: {vr.get('all_supported')}") for c in vr.get("claims", []): status = "OK" if c.get("supported") else "UNSUPPORTED" print(f" [{status}] {c.get('claim')}") if c.get("evidence"): print(f" evidence: {c['evidence']}")