Sobit commited on
Commit
2ee4d32
·
verified ·
1 Parent(s): 2051002

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +113 -0
app.py ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from crewai import Agent, Task, Crew, Process
3
+ import os
4
+ from crewai_tools import ScrapeWebsiteTool, SerperDevTool
5
+ from dotenv import load_dotenv
6
+ from langchain_openai import ChatOpenAI
7
+ from docx import Document
8
+ from io import BytesIO
9
+ import base64
10
+
11
+ load_dotenv()
12
+
13
+ # LLM object and API Key
14
+ os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
15
+ os.environ["SERPER_API_KEY"] = os.getenv("SERPER_API_KEY")
16
+
17
+
18
+ def generate_docx(result):
19
+ doc = Document()
20
+ doc.add_heading('Healthcare Diagnosis and Treatment Recommendations', 0)
21
+ doc.add_paragraph(result)
22
+ bio = BytesIO()
23
+ doc.save(bio)
24
+ bio.seek(0)
25
+ return bio
26
+
27
+ def get_download_link(bio, filename):
28
+ b64 = base64.b64encode(bio.read()).decode()
29
+ return f'<a href="data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,{b64}" download="{filename}">Download Diagnosis and Treatment Plan</a>'
30
+
31
+ st.set_page_config(
32
+ layout="wide"
33
+ )
34
+
35
+ # Title
36
+ st.title("AI Agents to Empower Doctors")
37
+
38
+
39
+ # Text Inputs
40
+ gender = st.selectbox('Select Gender', ('Male', 'Female', 'Other'))
41
+ age = st.number_input('Enter Age', min_value=0, max_value=120, value=25)
42
+ symptoms = st.text_area('Enter Symptoms', 'e.g., fever, cough, headache')
43
+ medical_history = st.text_area('Enter Medical History', 'e.g., diabetes, hypertension')
44
+
45
+ # Initialize Tools
46
+ search_tool = SerperDevTool()
47
+ scrape_tool = ScrapeWebsiteTool()
48
+
49
+ llm = ChatOpenAI(
50
+ model="gpt-3.5-turbo-16k",
51
+ temperature=0.1,
52
+ max_tokens=8000
53
+ )
54
+
55
+ # Define Agents
56
+ diagnostician = Agent(
57
+ role="Medical Diagnostician",
58
+ goal="Analyze patient symptoms and medical history to provide a preliminary diagnosis.",
59
+ 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.",
60
+ verbose=True,
61
+ allow_delegation=False,
62
+ tools=[search_tool, scrape_tool],
63
+ llm=llm
64
+ )
65
+
66
+ treatment_advisor = Agent(
67
+ role="Treatment Advisor",
68
+ goal="Recommend appropriate treatment plans based on the diagnosis provided by the Medical Diagnostician.",
69
+ 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.",
70
+ verbose=True,
71
+ allow_delegation=False,
72
+ tools=[search_tool, scrape_tool],
73
+ llm=llm
74
+ )
75
+
76
+ # Define Tasks
77
+ diagnose_task = Task(
78
+ description=(
79
+ "1. Analyze the patient's symptoms ({symptoms}) and medical history ({medical_history}).\n"
80
+ "2. Provide a preliminary diagnosis with possible conditions based on the provided information.\n"
81
+ "3. Limit the diagnosis to the most likely conditions."
82
+ ),
83
+ expected_output="A preliminary diagnosis with a list of possible conditions.",
84
+ agent=diagnostician
85
+ )
86
+
87
+ treatment_task = Task(
88
+ description=(
89
+ "1. Based on the diagnosis, recommend appropriate treatment plans step by step.\n"
90
+ "2. Consider the patient's medical history ({medical_history}) and current symptoms ({symptoms}).\n"
91
+ "3. Provide detailed treatment recommendations, including medications, lifestyle changes, and follow-up care."
92
+ ),
93
+ expected_output="A comprehensive treatment plan tailored to the patient's needs.",
94
+ agent=treatment_advisor
95
+ )
96
+
97
+ # Create Crew
98
+ crew = Crew(
99
+ agents=[diagnostician, treatment_advisor],
100
+ tasks=[diagnose_task, treatment_task],
101
+ verbose=2
102
+ )
103
+
104
+ # Execution
105
+ if st.button("Get Diagnosis and Treatment Plan"):
106
+ with st.spinner('Generating recommendations...'):
107
+ result = crew.kickoff(inputs={"symptoms": symptoms, "medical_history": medical_history})
108
+ st.write(result)
109
+ docx_file = generate_docx(result)
110
+
111
+ download_link = get_download_link(docx_file, "diagnosis_and_treatment_plan.docx")
112
+
113
+ st.markdown(download_link, unsafe_allow_html=True)