-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp_groq.py
112 lines (93 loc) · 3.87 KB
/
app_groq.py
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
import streamlit as st
from crewai import Agent, Task, Crew, Process
import os
from crewai_tools import ScrapeWebsiteTool, SerperDevTool
from dotenv import load_dotenv
from langchain_groq import ChatGroq
from docx import Document
from io import BytesIO
import base64
load_dotenv()
# LLM object and API Key
os.environ["GROQ_API_KEY"] = os.getenv("GROQ_API_KEY")
os.environ["SERPER_API_KEY"] = os.getenv("SERPER_API_KEY")
def generate_docx(result):
doc = Document()
doc.add_heading('Healthcare Diagnosis and Treatment Recommendations', 0)
doc.add_paragraph(result)
bio = BytesIO()
doc.save(bio)
bio.seek(0)
return bio
def get_download_link(bio, filename):
b64 = base64.b64encode(bio.read()).decode()
return f'<a href="data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,{b64}" download="{filename}">Download Diagnosis and Treatment Plan</a>'
st.set_page_config(
layout="wide"
)
# Title
st.title("Doctor Assist AI Agents")
# Text Inputs
gender = st.selectbox('Select Gender', ('Male', 'Female', 'Other'))
age = st.number_input('Enter Age', min_value=0, max_value=120, value=25)
symptoms = st.text_area('Enter Symptoms', 'e.g., fever, cough, headache')
medical_history = st.text_area('Enter Medical History', 'e.g., diabetes, hypertension')
# Initialize Tools
search_tool = SerperDevTool()
scrape_tool = ScrapeWebsiteTool()
llm = ChatGroq(
model="gemma-7b-it",
groq_api_key=os.environ["GROQ_API_KEY"],
)
# Define Agents
diagnostician = Agent(
role="Medical Diagnostician",
goal="Analyze patient symptoms and medical history to provide a preliminary diagnosis.",
backstory="This agent specializes in diagnosing medical conditions based on patient-reported symptoms and medical history. It uses advanced algorithms and medical knowledge to identify potential health issues.",
verbose=True,
allow_delegation=False,
tools=[search_tool, scrape_tool],
llm=llm
)
treatment_advisor = Agent(
role="Treatment Advisor",
goal="Recommend appropriate treatment plans based on the diagnosis provided by the Medical Diagnostician.",
backstory="This agent specializes in creating treatment plans tailored to individual patient needs. It considers the diagnosis, patient history, and current best practices in medicine to recommend effective treatments.",
verbose=True,
allow_delegation=False,
tools=[search_tool, scrape_tool],
llm=llm
)
# Define Tasks
diagnose_task = Task(
description=(
"1. Analyze the patient's symptoms ({symptoms}) and medical history ({medical_history}).\n"
"2. Provide a preliminary diagnosis with possible conditions based on the provided information.\n"
"3. Limit the diagnosis to the most likely conditions."
),
expected_output="A preliminary diagnosis with a list of possible conditions.",
agent=diagnostician
)
treatment_task = Task(
description=(
"1. Based on the diagnosis, recommend appropriate treatment plans step by step.\n"
"2. Consider the patient's medical history ({medical_history}) and current symptoms ({symptoms}).\n"
"3. Provide detailed treatment recommendations, including medications, lifestyle changes, and follow-up care."
),
expected_output="A comprehensive treatment plan tailored to the patient's needs.",
agent=treatment_advisor
)
# Create Crew
crew = Crew(
agents=[diagnostician, treatment_advisor],
tasks=[diagnose_task, treatment_task],
verbose=2
)
# Execution
if st.button("Get Diagnosis and Treatment Plan"):
with st.spinner('Generating recommendations...'):
result = crew.kickoff(inputs={"symptoms": symptoms, "medical_history": medical_history})
st.write(result)
docx_file = generate_docx(result)
download_link = get_download_link(docx_file, "diagnosis_and_treatment_plan.docx")
st.markdown(download_link, unsafe_allow_html=True)