File size: 1,802 Bytes
a0c836f | 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 | import streamlit as st
from state import State
from workflow import Workflow
from langchain_core.messages import HumanMessage
st.title("Medicine Information Assistant")
if "messages" not in st.session_state:
st.session_state.messages = []
if "workflow" not in st.session_state:
st.session_state.workflow = Workflow()
if "uploader_key" not in st.session_state:
st.session_state.uploader_key = 0
for msg in st.session_state.messages:
with st.chat_message(msg["role"]):
st.write(msg["content"])
uploaded_image = st.file_uploader(
"Upload a photo of your medicine ",
type=["jpg", "jpeg", "png", "jfif"],
key=f"uploader_{st.session_state.uploader_key}"
)
query = st.chat_input("Enter your question here...")
if query or uploaded_image:
display_text = query if query else "[Image uploaded]"
st.session_state.messages.append({"role": "user", "content": display_text})
with st.chat_message("user"):
if uploaded_image:
st.image(uploaded_image, width=200)
if query:
st.write(query)
with st.chat_message("assistant"):
with st.spinner("thinking..."):
image_bytes = uploaded_image.read() if uploaded_image else None
initial_state = State(
query=query,
image=image_bytes,
messages=st.session_state.messages,
content=None,
rewritten_query=None,
response=None
)
result = st.session_state.workflow.run(initial_state)
response = result.get("response")
st.write(response)
st.session_state.messages.append({"role": "assistant", "content": response})
if uploaded_image:
st.session_state.uploader_key += 1
st.rerun() |