Spaces:
Sleeping
Sleeping
File size: 6,354 Bytes
04c7c4e 9b5b26a c19d193 6aae614 9b5b26a 04c7c4e b989274 729eb25 cc15b06 e3a21b3 b989274 e3a21b3 9b5b26a b989274 e3a21b3 05baa6b 9b5b26a 729eb25 cc15b06 729eb25 05baa6b cc15b06 05baa6b a607fa0 05baa6b eedf2cb 05baa6b eedf2cb 05baa6b cba1dbe eedf2cb cc15b06 05baa6b cc15b06 05baa6b cc15b06 05baa6b 729eb25 b989274 729eb25 05baa6b cc15b06 729eb25 05baa6b cc15b06 729eb25 b989274 729eb25 9b5b26a 04c7c4e 9b5b26a 04c7c4e 9b5b26a 8c01ffb 6aae614 ae7a494 04c7c4e e121372 04c7c4e 13d500a 8c01ffb 04c7c4e 9b5b26a 8c01ffb 04c7c4e 861422e 04c7c4e 8c01ffb 8fe992b cc15b06 8c01ffb 861422e 8fe992b 04c7c4e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI
# Custom Tool to fetch datasets related to body parts or imaging types
@tool
def my_custom_tool(arg1: str, arg2: int) -> str:
"""
Search and retrieve publicly available medical datasets from Hugging Face based on any medical-related keyword.
Args:
arg1: A keyword related to medical data (e.g., 'cancer', 'diabetes', 'CT scan', 'radiology', 'dermoscopy').
arg2: The maximum number of datasets to retrieve.
Returns:
A list of dataset names matching the search query, or a message stating that no datasets were found.
"""
try:
keyword = arg1.strip().lower()
limit = int(arg2)
# Define a basic list of medically relevant terms
medical_terms = [
# Anatomy / Body Parts
"skin", "brain", "lung", "chest", "abdomen", "spine", "bone", "heart", "liver", "kidney",
"bladder", "stomach", "colon", "rectum", "esophagus", "pancreas", "breast", "ear", "eye",
"retina", "tooth", "teeth", "tongue", "jaw", "neck", "wrist", "hand", "leg", "arm", "shoulder", "pelvis",
# Diseases / Conditions
"cancer", "tumor", "stroke", "diabetes", "pneumonia", "covid", "asthma", "eczema", "melanoma",
"hypertension", "alzheimer", "parkinson", "arthritis", "scoliosis", "epilepsy", "glaucoma",
"ulcer", "hepatitis", "leukemia", "lymphoma", "tuberculosis", "anemia", "obesity", "depression",
"anxiety", "bipolar", "autism", "adhd", "ptsd", "psychosis", "schizophrenia",
# Imaging Modalities
"mri", "ct", "xray", "x-ray", "ultrasound", "pet", "fmri", "mammo", "angiography", "radiography",
"echocardiogram", "spect", "dermoscopy", "colonoscopy", "endoscopy", "biopsy", "histopathology",
# Medical Specialties
"radiology", "pathology", "oncology", "cardiology", "neurology", "dermatology", "dentistry",
"ophthalmology", "urology", "orthopedics", "gastroenterology", "pulmonology", "nephrology",
"psychiatry", "pediatrics", "geriatrics", "infectious disease",
# Symptoms / Signs
"lesion", "infection", "fever", "pain", "inflammation", "rash", "headache", "swelling",
"cough", "seizure", "dizziness", "vomiting", "diarrhea", "nausea", "fatigue", "itching",
# Common Specific Diseases
"breast cancer", "prostate cancer", "lung cancer", "skin cancer", "colon cancer",
"brain tumor", "liver cancer", "cervical cancer", "bladder cancer", "thyroid cancer",
# Procedures / Interventions
"surgery", "chemotherapy", "radiation", "transplant", "dialysis", "intubation", "stenting",
"ventilation", "vaccination", "anesthesia", "rehabilitation", "prosthetics", "orthotics",
# Lab Tests / Biomarkers
"blood test", "cbc", "glucose", "hemoglobin", "cholesterol", "biomarker", "urinalysis",
"pcr", "serology", "antibody", "antigen",
# Clinical Settings / Roles
"icu", "hospital", "emergency", "clinical notes", "nursing", "physician", "patient",
"medical record", "electronic health record", "ehr", "vitals",
# Age-based Terms
"pediatric", "neonatal", "infant", "child", "adolescent", "geriatrics", "elderly",
# Epidemiology / Public Health
"epidemiology", "prevalence", "incidence", "mortality", "public health", "health disparity",
"risk factor", "social determinant",
# Pharmacology / Medications
"drug", "medication", "pharmacology", "side effect", "adverse event", "dose", "tablet",
"vaccine", "clinical trial", "placebo"
]
# Check if keyword is in known medical terms
if not any(term in keyword for term in medical_terms):
return f"No medical datasets found for '{arg1}'."
# Fetch datasets from Hugging Face
response = requests.get(
f"https://huggingface.co/api/datasets?search={keyword}&limit={limit}"
)
response.raise_for_status()
datasets = response.json()
# Return message if no datasets found
if not datasets:
return f"No medical datasets found for '{arg1}'."
# Collect and return dataset names
results = [f"- {ds.get('id', 'Unknown')}" for ds in datasets[:limit]]
return f"Medical datasets related to '{arg1}':\n" + "\n".join(results)
except Exception as e:
return f"Error searching medical datasets for '{arg1}': {str(e)}"
@tool
def get_current_time_in_timezone(timezone: str) -> str:
"""
A tool that fetches the current local time in a specified timezone.
Args:
timezone: A string representing a valid timezone (e.g., 'America/New_York').
Returns:
A string showing the current local time in the specified timezone.
"""
try:
tz = pytz.timezone(timezone)
local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
return f"The current local time in {timezone} is: {local_time}"
except Exception as e:
return f"Error fetching time for timezone '{timezone}': {str(e)}"
final_answer = FinalAnswerTool()
# Model setup
model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id='Qwen/Qwen2.5-Coder-32B-Instruct', # this model may be overloaded
custom_role_conversions=None,
)
# Load tool from hub
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)
# Load prompt templates
with open("prompts.yaml", 'r') as stream:
prompt_templates = yaml.safe_load(stream)
# Create the agent
agent = CodeAgent(
model=model,
tools=[final_answer, get_current_time_in_timezone, my_custom_tool], # add your tools here
max_steps=6,
verbosity_level=1,
grammar=None,
planning_interval=None,
name=None,
description=None,
prompt_templates=prompt_templates
)
# Launch the UI
GradioUI(agent).launch()
|