# import os | |
# import base64 | |
# import zipfile | |
# from pathlib import Path | |
# import streamlit as st | |
# from byaldi import RAGMultiModalModel | |
# from openai import OpenAI | |
# import os | |
# st.write("Current Working Directory:", os.getcwd()) | |
# # Function to unzip a folder if it does not exist | |
# # def unzip_folder_if_not_exist(zip_path, extract_to): | |
# # if not os.path.exists(extract_to): | |
# # with zipfile.ZipFile(zip_path, 'r') as zip_ref: | |
# # zip_ref.extractall(extract_to) | |
# # # Example usage | |
# # zip_path = 'medical_index.zip' | |
# # extract_to = 'medical_index' | |
# # unzip_folder_if_not_exist(zip_path, extract_to) | |
# # Preload the RAGMultiModalModel | |
# @st.cache_resource | |
# def load_model(): | |
# return RAGMultiModalModel.from_index("./medical_index") | |
# RAG = load_model() | |
# # OpenAI API key from environment | |
# api_key = os.getenv("OPENAI_API_KEY") | |
# client = OpenAI(api_key=api_key) | |
# # Streamlit UI | |
# st.title("Medical Diagnostic Assistant") | |
# st.write("Enter a medical query and get diagnostic recommendations along with visual references.") | |
# # User input | |
# query = st.text_input("Query", "What should be the appropriate diagnostic test for peptic ulcer?") | |
# if st.button("Submit"): | |
# if query: | |
# # Search using RAG model | |
# with st.spinner('Retrieving information...'): | |
# try: | |
# returned_page = RAG.search(query, k=1)[0].base64 | |
# # Decode and display the retrieved image | |
# image_bytes = base64.b64decode(returned_page) | |
# filename = 'retrieved_image.jpg' | |
# with open(filename, 'wb') as f: | |
# f.write(image_bytes) | |
# # Display image in Streamlit | |
# st.image(filename, caption="Reference Image", use_column_width=True) | |
# # Get model response | |
# response = client.chat.completions.create( | |
# model="gpt-4o-mini-2024-07-18", | |
# messages=[ | |
# {"role": "system", "content": "You are a helpful assistant. You only answer the question based on the provided image"}, | |
# { | |
# "role": "user", | |
# "content": [ | |
# {"type": "text", "text": query}, | |
# { | |
# "type": "image_url", | |
# "image_url": {"url": f"data:image/jpeg;base64,{returned_page}"}, | |
# }, | |
# ], | |
# }, | |
# ], | |
# max_tokens=300, | |
# ) | |
# # Display the response | |
# st.success("Model Response:") | |
# st.write(response.choices[0].message.content) | |
# except Exception as e: | |
# st.error(f"An error occurred: {e}") | |
# else: | |
# st.warning("Please enter a query.") | |
import os | |
import base64 | |
import zipfile | |
from pathlib import Path | |
import streamlit as st | |
from byaldi import RAGMultiModalModel | |
from openai import OpenAI | |
# Preload the RAGMultiModalModel | |
def load_model(): | |
return RAGMultiModalModel.from_index("/home/user/app/medical_index1") | |
RAG = load_model() | |
# OpenAI API key from environment | |
api_key = os.getenv("OPENAI_API_KEY") | |
client = OpenAI(api_key=api_key) | |
# Streamlit UI | |
st.title("Medical Diagnostic Assistant") | |
st.write("Enter a medical query and get diagnostic recommendations along with visual references.") | |
# User input for selecting the model | |
model_options = ["gpt-4o", "gpt-4o-mini", "o1-preview", "o1-mini"] | |
selected_model = st.selectbox("Choose a GPT model", model_options) | |
# User input for query | |
query = st.text_input("Query", "What should be the appropriate diagnostic test for peptic ulcer?") | |
if st.button("Submit"): | |
if query: | |
# Search using RAG model | |
with st.spinner('Retrieving information...'): | |
try: | |
# Get top 10 images | |
returned_pages = RAG.search(query, k=10) | |
image_urls = [] | |
for i, page in enumerate(returned_pages): | |
image_bytes = base64.b64decode(page.base64) | |
filename = f'retrieved_image_{i}.jpg' | |
with open(filename, 'wb') as f: | |
f.write(image_bytes) | |
image_urls.append(f"data:image/jpeg;base64,{page.base64}") | |
# Get model response | |
response = client.chat.completions.create( | |
model=selected_model, | |
messages=[ | |
{"role": "system", "content": "You are a helpful assistant. You only answer the question based on the provided images."}, | |
{ | |
"role": "user", | |
"content": [ | |
{"type": "text", "text": query}, | |
*[{"type": "image_url", "image_url": {"url": url}} for url in image_urls], | |
], | |
}, | |
], | |
max_tokens=300, | |
) | |
# Display the response | |
st.success("Model Response:") | |
st.write(response.choices[0].message.content) | |
# Option to see all references | |
# # Option to see all references | |
# if st.button("Show References"): | |
# st.subheader("References") | |
# for i, page in enumerate(returned_pages): | |
# st.image(f'retrieved_image_{i}.jpg', caption=f"Reference Image {i+1}", use_column_width=True) | |
except Exception as e: | |
st.error(f"An error occurred: {e}") | |
else: | |
st.warning("Please enter a query.") |