| """ |
| End-to-End integration test for the OncoAgent LangGraph pipeline. |
| Tests the full flow: ingestion -> RAG retrieval -> specialist -> validator. |
| """ |
|
|
| import sys |
| import os |
|
|
| |
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
|
|
| from agents.graph import build_oncoagent_graph |
|
|
|
|
| def run_e2e_test(): |
| """Run a sample clinical case through the full OncoAgent pipeline.""" |
| |
| print("=" * 70) |
| print(" OncoAgent β End-to-End Pipeline Test") |
| print("=" * 70) |
| |
| |
| clinical_case = ( |
| "Patient is a 62-year-old male presenting with hepatocellular carcinoma " |
| "(HCC), Stage III. Imaging reveals a 5.2 cm lesion in the right hepatic " |
| "lobe with portal vein invasion. AFP elevated at 1200 ng/mL. " |
| "No extrahepatic disease identified. Child-Pugh score B7. " |
| "ECOG performance status 1. Prior treatment: none." |
| ) |
| |
| print(f"\nπ Input Clinical Text:\n{clinical_case}\n") |
| print("-" * 70) |
| |
| |
| print("\nβ³ Building LangGraph pipeline...") |
| graph = build_oncoagent_graph() |
| |
| print("π Invoking pipeline...\n") |
| result = graph.invoke({ |
| "clinical_text": clinical_case, |
| "extracted_entities": {}, |
| "phi_detected": False, |
| "rag_context": [], |
| "clinical_recommendation": "", |
| "safety_status": "", |
| "is_safe": False, |
| "routing_decision": "", |
| "errors": [], |
| }) |
| |
| |
| print("=" * 70) |
| print(" PIPELINE RESULTS") |
| print("=" * 70) |
| |
| print(f"\nπ·οΈ Extracted Entities:") |
| entities = result.get("extracted_entities", {}) |
| print(f" Cancer Type : {entities.get('cancer_type', 'N/A')}") |
| print(f" Stage : {entities.get('stage', 'N/A')}") |
| print(f" Mutations : {entities.get('mutations', [])}") |
| |
| print(f"\nπ PHI Detected: {result.get('phi_detected', 'N/A')}") |
| |
| rag_context = result.get("rag_context", []) |
| print(f"\nπ RAG Context Retrieved: {len(rag_context)} documents") |
| for i, ctx in enumerate(rag_context[:2], 1): |
| print(f"\n --- Document {i} (first 200 chars) ---") |
| print(f" {ctx[:200]}...") |
| |
| print(f"\nπ Clinical Recommendation:") |
| rec = result.get("clinical_recommendation", "N/A") |
| print(f" {rec[:500]}...") |
| |
| print(f"\nβ
Safety Status: {result.get('safety_status', 'N/A')}") |
| print(f" Is Safe: {result.get('is_safe', 'N/A')}") |
| |
| print("\n" + "=" * 70) |
| if result.get("is_safe"): |
| print(" β
PIPELINE TEST PASSED β Safe recommendation generated.") |
| else: |
| print(" β οΈ PIPELINE TEST β Recommendation flagged as unsafe.") |
| print("=" * 70) |
|
|
|
|
| if __name__ == "__main__": |
| run_e2e_test() |
|
|