Spaces:
Running
Running
| #!/usr/bin/env python3 | |
| """Test the BioFlow Agent API endpoints.""" | |
| import requests | |
| import json | |
| BASE_URL = "http://localhost:8000" | |
| def test_health(): | |
| """Test health endpoint.""" | |
| r = requests.get(f"{BASE_URL}/health") | |
| print(f"Health: {r.status_code}") | |
| return r.status_code == 200 | |
| def test_generate(): | |
| """Test molecule generation endpoint.""" | |
| print("\n[1] Testing /api/agents/generate...") | |
| data = { | |
| "prompt": "Design a kinase inhibitor for EGFR", | |
| "mode": "text", | |
| "num_samples": 3, | |
| } | |
| r = requests.post(f"{BASE_URL}/api/agents/generate", json=data) | |
| print(f" Status: {r.status_code}") | |
| if r.status_code == 200: | |
| result = r.json() | |
| print(f" [OK] Generated: {len(result.get('molecules', []))} molecules") | |
| for mol in result.get("molecules", [])[:2]: | |
| smiles = mol.get("smiles", "")[:40] | |
| print(f" - {smiles}...") | |
| return True | |
| else: | |
| print(f" [ERROR] {r.text}") | |
| return False | |
| def test_validate(): | |
| """Test molecule validation endpoint.""" | |
| print("\n[2] Testing /api/agents/validate...") | |
| data = { | |
| "smiles": [ | |
| "CC(=O)Oc1ccccc1C(=O)O", # Aspirin | |
| "Cn1cnc2c1c(=O)n(C)c(=O)n2C", # Caffeine | |
| "CC(=O)Nc1ccc(O)cc1", # Paracetamol | |
| ], | |
| } | |
| r = requests.post(f"{BASE_URL}/api/agents/validate", json=data) | |
| print(f" Status: {r.status_code}") | |
| if r.status_code == 200: | |
| result = r.json() | |
| summary = result.get("summary", {}) | |
| print(f" [OK] Validated: {summary.get('total', 0)} molecules") | |
| print(f" Passed: {summary.get('passed', 0)}") | |
| for val in result.get("validations", [])[:2]: | |
| smiles = val.get("smiles", "")[:25] | |
| score = val.get("score", 0) | |
| status = val.get("status", "?") | |
| print(f" - {smiles}... score={score:.3f} ({status})") | |
| return True | |
| else: | |
| print(f" [ERROR] {r.text}") | |
| return False | |
| def test_rank(): | |
| """Test candidate ranking endpoint.""" | |
| print("\n[3] Testing /api/agents/rank...") | |
| data = { | |
| "candidates": [ | |
| {"smiles": "CCO", "validation_score": 0.8, "confidence": 0.9}, | |
| {"smiles": "CC", "validation_score": 0.9, "confidence": 0.7}, | |
| {"smiles": "CCC", "validation_score": 0.7, "confidence": 0.8}, | |
| ], | |
| "top_k": 2, | |
| } | |
| r = requests.post(f"{BASE_URL}/api/agents/rank", json=data) | |
| print(f" Status: {r.status_code}") | |
| if r.status_code == 200: | |
| result = r.json() | |
| ranked = result.get("ranked", []) | |
| print(f" [OK] Ranked: {len(ranked)} candidates") | |
| for cand in ranked: | |
| print(f" [{cand.get('rank')}] {cand.get('smiles')} score={cand.get('final_score', 0):.3f}") | |
| return True | |
| else: | |
| print(f" [ERROR] {r.text}") | |
| return False | |
| def test_workflow(): | |
| """Test full discovery workflow endpoint.""" | |
| print("\n[4] Testing /api/agents/workflow...") | |
| data = { | |
| "query": "Design an EGFR inhibitor with good oral bioavailability", | |
| "num_candidates": 5, | |
| "top_k": 3, | |
| } | |
| r = requests.post(f"{BASE_URL}/api/agents/workflow", json=data) | |
| print(f" Status: {r.status_code}") | |
| if r.status_code == 200: | |
| result = r.json() | |
| print(f" [OK] Workflow status: {result.get('status')}") | |
| print(f" Steps: {result.get('steps_completed')}/{result.get('total_steps')}") | |
| print(f" Time: {result.get('execution_time_ms', 0):.1f}ms") | |
| top = result.get("top_candidates", []) | |
| print(f" Top {len(top)} candidates:") | |
| for cand in top: | |
| smiles = cand.get("smiles", "")[:30] | |
| score = cand.get("final_score", 0) | |
| print(f" - {smiles}... (score={score:.3f})") | |
| return True | |
| else: | |
| print(f" [ERROR] {r.text}") | |
| return False | |
| if __name__ == "__main__": | |
| print("=" * 60) | |
| print("BioFlow Agent API Test") | |
| print("=" * 60) | |
| # Wait for server | |
| import time | |
| for i in range(10): | |
| try: | |
| if test_health(): | |
| break | |
| except: | |
| print(f"Waiting for server... ({i+1}/10)") | |
| time.sleep(1) | |
| else: | |
| print("[ERROR] Server not available") | |
| exit(1) | |
| # Run tests | |
| test_generate() | |
| test_validate() | |
| test_rank() | |
| test_workflow() | |
| print("\n" + "=" * 60) | |
| print("[OK] Agent API tests complete!") | |
| print("=" * 60) | |