Update app.py
Browse files
app.py
CHANGED
@@ -25,7 +25,7 @@ from Bio import Entrez # Ensure BioPython is installed
|
|
25 |
|
26 |
from dotenv import load_dotenv
|
27 |
import requests
|
28 |
-
import openai #
|
29 |
import ast
|
30 |
import logging
|
31 |
|
@@ -42,7 +42,6 @@ logging.basicConfig(
|
|
42 |
logger = logging.getLogger()
|
43 |
|
44 |
# ---------------------- Streamlit Page Configuration ---------------------------
|
45 |
-
# This must be the first Streamlit command in the script
|
46 |
st.set_page_config(page_title="AI Clinical Intelligence Hub", layout="wide")
|
47 |
|
48 |
# ---------------------- Initialize External Clients ---------------------------
|
@@ -54,7 +53,7 @@ if not OPENAI_API_KEY:
|
|
54 |
st.error("OpenAI API key must be set as an environment variable (OPENAI_API_KEY).")
|
55 |
st.stop()
|
56 |
|
57 |
-
openai.api_key
|
58 |
|
59 |
# Load spaCy model with error handling
|
60 |
try:
|
@@ -390,7 +389,7 @@ class DiagnosisSupport(ABC):
|
|
390 |
class SimpleDiagnosis(DiagnosisSupport):
|
391 |
"""Provides a simple diagnosis example, based on the Logistic regression model."""
|
392 |
def __init__(self):
|
393 |
-
self.
|
394 |
|
395 |
def diagnose(
|
396 |
self,
|
@@ -401,7 +400,7 @@ class SimpleDiagnosis(DiagnosisSupport):
|
|
401 |
**kwargs
|
402 |
) -> pd.DataFrame:
|
403 |
try:
|
404 |
-
result = self.
|
405 |
if "accuracy" in result:
|
406 |
return pd.DataFrame({
|
407 |
diagnosis_key: [f"Model Accuracy: {result['accuracy']:.2%}"],
|
@@ -466,8 +465,9 @@ class MedicalKnowledgeBase(ABC):
|
|
466 |
|
467 |
class SimpleMedicalKnowledge(MedicalKnowledgeBase):
|
468 |
"""Enhanced Medical Knowledge Class using OpenAI GPT-4."""
|
469 |
-
def __init__(self):
|
470 |
-
self.nlp =
|
|
|
471 |
|
472 |
def search_medical_info(self, query: str, pub_email: str = "") -> str:
|
473 |
"""
|
@@ -492,20 +492,18 @@ class SimpleMedicalKnowledge(MedicalKnowledgeBase):
|
|
492 |
"""
|
493 |
|
494 |
# Make the API request to OpenAI GPT-4
|
495 |
-
response =
|
496 |
model="gpt-4",
|
497 |
messages=[
|
498 |
{"role": "system", "content": "You are a helpful medical assistant."},
|
499 |
{"role": "user", "content": prompt}
|
500 |
],
|
501 |
max_tokens=500,
|
502 |
-
n=1,
|
503 |
-
stop=None,
|
504 |
temperature=0.7,
|
505 |
)
|
506 |
|
507 |
# Extract the answer from the response
|
508 |
-
answer = response.choices[0].message
|
509 |
|
510 |
logger.info("Successfully retrieved data from OpenAI GPT-4.")
|
511 |
|
@@ -775,7 +773,7 @@ def initialize_session_state():
|
|
775 |
if 'treatment_recommendation' not in st.session_state:
|
776 |
st.session_state.treatment_recommendation = BasicTreatmentRecommendation()
|
777 |
if 'knowledge_base' not in st.session_state:
|
778 |
-
st.session_state.knowledge_base = SimpleMedicalKnowledge()
|
779 |
if 'pub_email' not in st.session_state:
|
780 |
st.session_state.pub_email = PUB_EMAIL # Load PUB_EMAIL from environment variables
|
781 |
|
|
|
25 |
|
26 |
from dotenv import load_dotenv
|
27 |
import requests
|
28 |
+
import openai # Updated for OpenAI SDK v1.0
|
29 |
import ast
|
30 |
import logging
|
31 |
|
|
|
42 |
logger = logging.getLogger()
|
43 |
|
44 |
# ---------------------- Streamlit Page Configuration ---------------------------
|
|
|
45 |
st.set_page_config(page_title="AI Clinical Intelligence Hub", layout="wide")
|
46 |
|
47 |
# ---------------------- Initialize External Clients ---------------------------
|
|
|
53 |
st.error("OpenAI API key must be set as an environment variable (OPENAI_API_KEY).")
|
54 |
st.stop()
|
55 |
|
56 |
+
openai_client = openai.OpenAI(api_key=OPENAI_API_KEY) # Instantiate OpenAI client
|
57 |
|
58 |
# Load spaCy model with error handling
|
59 |
try:
|
|
|
389 |
class SimpleDiagnosis(DiagnosisSupport):
|
390 |
"""Provides a simple diagnosis example, based on the Logistic regression model."""
|
391 |
def __init__(self):
|
392 |
+
self.model_trainer: LogisticRegressionTrainer = LogisticRegressionTrainer()
|
393 |
|
394 |
def diagnose(
|
395 |
self,
|
|
|
400 |
**kwargs
|
401 |
) -> pd.DataFrame:
|
402 |
try:
|
403 |
+
result = self.model_trainer.invoke(data, target_col=target_col, columns=columns)
|
404 |
if "accuracy" in result:
|
405 |
return pd.DataFrame({
|
406 |
diagnosis_key: [f"Model Accuracy: {result['accuracy']:.2%}"],
|
|
|
465 |
|
466 |
class SimpleMedicalKnowledge(MedicalKnowledgeBase):
|
467 |
"""Enhanced Medical Knowledge Class using OpenAI GPT-4."""
|
468 |
+
def __init__(self, client: openai.OpenAI, nlp_model):
|
469 |
+
self.nlp = nlp_model # Using the loaded spaCy model
|
470 |
+
self.client = client
|
471 |
|
472 |
def search_medical_info(self, query: str, pub_email: str = "") -> str:
|
473 |
"""
|
|
|
492 |
"""
|
493 |
|
494 |
# Make the API request to OpenAI GPT-4
|
495 |
+
response = self.client.chat_completions.create(
|
496 |
model="gpt-4",
|
497 |
messages=[
|
498 |
{"role": "system", "content": "You are a helpful medical assistant."},
|
499 |
{"role": "user", "content": prompt}
|
500 |
],
|
501 |
max_tokens=500,
|
|
|
|
|
502 |
temperature=0.7,
|
503 |
)
|
504 |
|
505 |
# Extract the answer from the response
|
506 |
+
answer = response.choices[0].message.content.strip()
|
507 |
|
508 |
logger.info("Successfully retrieved data from OpenAI GPT-4.")
|
509 |
|
|
|
773 |
if 'treatment_recommendation' not in st.session_state:
|
774 |
st.session_state.treatment_recommendation = BasicTreatmentRecommendation()
|
775 |
if 'knowledge_base' not in st.session_state:
|
776 |
+
st.session_state.knowledge_base = SimpleMedicalKnowledge(openai_client, nlp)
|
777 |
if 'pub_email' not in st.session_state:
|
778 |
st.session_state.pub_email = PUB_EMAIL # Load PUB_EMAIL from environment variables
|
779 |
|