OncoAgent / tests /test_e2e_pipeline.py
MaximoLopezChenlo's picture
Upload folder using huggingface_hub
e1624f5 verified
"""
End-to-End integration test for the OncoAgent LangGraph pipeline.
Tests the full flow: ingestion -> RAG retrieval -> specialist -> validator.
"""
import sys
import os
# Ensure project root is in path
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)
# Simulated clinical case (no real PHI)
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)
# Build and invoke the graph
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": [],
})
# Display results
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()