#!/usr/bin/env python3 """Test the BioFlow Agent Pipeline.""" import sys import os # Add project root to path ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, ROOT_DIR) def test_generator(): """Test GeneratorAgent.""" print("\n[1] Testing GeneratorAgent...") from bioflow.agents import GeneratorAgent gen = GeneratorAgent(num_samples=5) result = gen.process("Generate a kinase inhibitor for cancer treatment") print(f" Generated: {len(result.content)} molecules") for i, mol in enumerate(result.content[:3]): smiles = mol["smiles"][:40] conf = mol["confidence"] print(f" [{i+1}] {smiles}... (conf={conf:.2f})") return result.content def test_validator(molecules): """Test ValidatorAgent.""" print("\n[2] Testing ValidatorAgent...") from bioflow.agents import ValidatorAgent val = ValidatorAgent() smiles_list = [mol["smiles"] for mol in molecules[:3]] result = val.process(smiles_list) total = result.metadata["total"] passed = result.metadata["passed"] rate = result.metadata["pass_rate"] * 100 print(f" Validated: {total} molecules") print(f" Passed: {passed} ({rate:.0f}%)") for v in result.content[:2]: smiles = v["smiles"][:30] score = v["score"] status = v["status"] print(f" - {smiles}... score={score:.3f} status={status}") return result.content def test_ranker(molecules, validations): """Test RankerAgent.""" print("\n[3] Testing RankerAgent...") from bioflow.agents import RankerAgent ranker = RankerAgent() candidates = [] for i, mol in enumerate(molecules[:5]): val_score = validations[i]["score"] if i < len(validations) else 0.5 candidates.append({ "smiles": mol["smiles"], "validation_score": val_score, "confidence": mol["confidence"], }) result = ranker.process({"candidates": candidates, "top_k": 3}) total = result.metadata["total_candidates"] print(f" Ranked: {total} candidates") for r in result.content: smiles = r["smiles"][:40] rank = r["rank"] score = r["final_score"] print(f" [{rank}] score={score:.3f} - {smiles}...") return result.content def test_workflow(): """Test full DiscoveryWorkflow.""" print("\n[4] Testing DiscoveryWorkflow...") from bioflow.agents import DiscoveryWorkflow workflow = DiscoveryWorkflow(num_candidates=5, top_k=3) result = workflow.run("Design an EGFR inhibitor with good bioavailability") print(f" Status: {result.status.value}") print(f" Steps: {result.steps_completed}/{result.total_steps}") print(f" Time: {result.execution_time_ms:.1f}ms") if result.errors: print(f" Errors: {result.errors}") # Get top candidates top = workflow.get_top_candidates(result) print(f"\n Top {len(top)} candidates:") for i, cand in enumerate(top): smiles = cand.get("smiles", "")[:35] score = cand.get("final_score", 0) rank = cand.get("rank", i+1) print(f" [{rank}] {smiles}... (score={score:.3f})") return result if __name__ == "__main__": print("=" * 60) print("BioFlow Agent Pipeline - Phase 3 Test") print("=" * 60) # Run individual agent tests molecules = test_generator() validations = test_validator(molecules) rankings = test_ranker(molecules, validations) # Run full workflow result = test_workflow() print("\n" + "=" * 60) print("[OK] All Phase 3 tests passed!") print("=" * 60)