import React, { useState } from 'react'; import { Code, Terminal, Play, CheckCircle, Copy, FileText, Server } from 'lucide-react'; export const ApiDocsPanel: React.FC = () => { const [activeEndpoint, setActiveEndpoint] = useState<'/predict' | '/explain' | '/health' | '/organs'>('/predict'); const [testSmiles, setTestSmiles] = useState('CC(=O)NC1=CC=C(O)C=C1'); const [useTissueConditioning, setUseTissueConditioning] = useState(true); const [apiResponse, setApiResponse] = useState(null); const [isLoading, setIsLoading] = useState(false); const [copied, setCopied] = useState(false); const handleRunRequest = async () => { setIsLoading(true); setApiResponse(null); await new Promise((r) => setTimeout(r, 400)); if (activeEndpoint === '/predict') { setApiResponse(JSON.stringify({ compound: "Acetaminophen", smiles: testSmiles, tissueConditioning: useTissueConditioning, organScores: { liver: { meanRisk: 0.92, uncertaintySigma: 0.03, riskLevel: "Severe" }, heart: { meanRisk: 0.12, uncertaintySigma: 0.02, riskLevel: "Low" }, kidney: { meanRisk: 0.54, uncertaintySigma: 0.04, riskLevel: "Moderate" }, brain: { meanRisk: 0.15, uncertaintySigma: 0.02, riskLevel: "Low" }, lung: { meanRisk: 0.10, uncertaintySigma: 0.02, riskLevel: "Low" } }, tanimotoDomain: { score: 0.88, status: "High Confidence (In-Domain)" } }, null, 2)); } else if (activeEndpoint === '/explain') { setApiResponse(JSON.stringify({ smiles: testSmiles, atomicHotspots: [ { atomIndex: 0, symbol: "C", attentionWeight: 0.15 }, { atomIndex: 1, symbol: "O", attentionWeight: 0.72, toxicophore: "Reactive Carbonyl" }, { atomIndex: 2, symbol: "N", attentionWeight: 0.81, toxicophore: "Amide Center" } ], primaryToxicophores: ["Reactive Carbonyl Center", "Substituted Amine Core"] }, null, 2)); } else if (activeEndpoint === '/organs') { setApiResponse(JSON.stringify({ organs: [ { id: "liver", markerGenes: ["CYP3A4", "ALB"], expressionDim: 128 }, { id: "heart", markerGenes: ["MYH6", "TNNT2"], expressionDim: 128 }, { id: "kidney", markerGenes: ["SLC22A2", "UMOD"], expressionDim: 128 } ] }, null, 2)); } else { setApiResponse(JSON.stringify({ status: "ok", version: "2.1.0-EpiADR-Net", model: "EpiADR-Net Tissue-Conditioned Graph Transformer", dataset: "SIDER 4.1 & GTEx V8" }, null, 2)); } setIsLoading(false); }; const pythonSnippet = `import requests url = "http://localhost:8000/predict" payload = { "smiles": "${testSmiles}", "use_tissue_conditioning": ${useTissueConditioning ? "True" : "False"}, "mc_dropout_passes": 30 } response = requests.post(url, json=payload) print(response.json())`; const curlSnippet = `curl -X POST "http://localhost:8000/predict" \\ -H "Content-Type: application/json" \\ -d '{"smiles": "${testSmiles}", "use_tissue_conditioning": ${useTissueConditioning}}'`; const copyToClipboard = (text: string) => { navigator.clipboard.writeText(text); setCopied(true); setTimeout(() => setCopied(false), 2000); }; return (
{/* Header */}

FastAPI REST Microservice & Swagger UI Simulator

Enterprise REST Endpoints for High-Throughput Preclinical Screening

{/* Endpoints Nav */}
{(['/predict', '/explain', '/organs', '/health'] as const).map((ep) => ( ))}
{/* Main Interactive Testing Grid */}
{/* Left Column: Request Body & Test Form */}

Request Simulator ({activeEndpoint})

{(activeEndpoint === '/predict' || activeEndpoint === '/explain') && (
setTestSmiles(e.target.value)} className="w-full bg-slate-950 border border-slate-800 rounded-xl px-3 py-2 text-indigo-300 font-mono" />
{activeEndpoint === '/predict' && (
use_tissue_conditioning setUseTissueConditioning(e.target.checked)} className="accent-indigo-500 w-4 h-4 cursor-pointer" />
)}
)} {/* Code Snippets */}
Python Integration Snippet
              {pythonSnippet}
            
{/* Right Column: JSON Response Output */}
Response Payload (200 OK) application/json
{isLoading ? (
Executing forward pass...
) : apiResponse ? (
                {apiResponse}
              
) : (
Click "Execute API Request" above to view response payload
)}
); };