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()