nivra-ai-agent / agent /text_symptom_tool.py
datdevsteve's picture
Update agent/text_symptom_tool.py
3ffff30 verified
import json
import requests
from langchain_core.tools import tool
@tool
def analyze_symptom_text(symptoms: str) -> str:
"""
Analyzes text-based symptoms using classification model via api backend.
Input: Patient's symptom description text.
Output: Predicted conditions with confidence scores.
"""
try:
print(f"🩺 Analyzing symptoms: {symptoms[:50]}...")
# Call your HF ClinicalBERT FastAPI Space
api_url = "https://datdevsteve-nivra-text-diagnosis.hf.space/run/predict"
payload = {
"data": [symptoms],
"fn_index": 0 # Default prediction function
}
print("🔬 Calling ClinicalBERT FastAPI backend...")
response = requests.post(api_url, json=payload, timeout=120)
response.raise_for_status()
result = response.json()
# Extract diagnosis from HF Space response format
if "data" in result and len(result["data"]) > 0:
diagnosis = result["data"][0]
# Parse confidence if available, else default format
if isinstance(diagnosis, list) and len(diagnosis) > 0:
diagnosis = diagnosis[0]
return f"""
[TEXT SYMPTOM ANALYSIS - SUCCESS]:
✅ FastAPI Backend Response: {diagnosis}
📡 **Backend**: nivra-text-diagnosis HF Space"""
else:
# Fallback with generic advice
return "[TEXT SYMPTOM ANALYSIS - WARNING]: No diagnosis returned from backend. Please consult a doctor."
except requests.exceptions.Timeout:
return "[TEXT SYMPTOM ANALYSIS - ERROR]: Analysis timeout. Please try again or consult a doctor."
except requests.exceptions.RequestException as e:
return f"[TEXT SYMPTOM ANALYSIS - ERROR]: Network error: {str(e)}. Please consult a doctor."
except Exception as e:
return f"[TEXT SYMPTOM ANALYSIS - ERROR]: Unexpected error: {str(e)}. Please consult a doctor."