MM_Math_Helper / app.py
Nathan Butters
Updated to temporary solution based on examples.
e91d43c
raw
history blame
3.03 kB
"""UI for the Math Helper prototype for exploring safety engineering concepts and LLMs.
Using Streamlit to provide a python-based front end.
"""
#Import the libraries for human interaction and visualization.
import streamlit as st
import logging
from helpers.constant import *
from helpers.chat import basicChat, guidedMM, mmChat
import os
import tempfile
import requests
logger = logging.getLogger(__name__)
logging.basicConfig(filename='app.log', level=logging.INFO)
def update_model(name):
if name == "Llama":
st.session_state.model = LLAMA
else:
st.session_state.model = QWEN
if "model" not in st.session_state:
st.session_state.model = LLAMA
if "systemPrompt" not in st.session_state:
st.session_state.systemPrompt = "Model"
st.set_page_config(page_title="IMSA Math Helper v0.1")
st.title("IMSA Math Helper v0.1")
with st.sidebar:
# User selects a model
model_choice = st.radio("Please select the model:", options=["Llama","QWEN"])
update_model(model_choice)
logger.info(f"Model changed to {model_choice}.")
systemPrompt = st.radio("Designate a control persona:",options=["Model","Tutor"])
st.session_state.systemPrompt = systemPrompt
liveExperience = st.checkbox("Check for live experience, currently impoeverished.")
st.subheader(f"This experience is currently running on {st.session_state.model}.")
# Initialize chat history
if "messages" not in st.session_state:
st.session_state.messages = []
# Display chat messages from history on app rerun
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
if liveExperience:
st.warning("The experience is currently nonfunctional as I attempt to figure out how to expose the image URL to the HF inference API via streamlit...")
enable = st.checkbox("Enable camera")
picture = st.camera_input("Take a picture of your math work", disabled=not enable)
if picture is not None:
# Save the image to a temporary file
temp_dir = tempfile.mkdtemp()
temp_image_path = os.path.join(temp_dir, "picture.png")
with open(temp_image_path, "wb") as f:
f.write(picture.getbuffer())
extIP = requests.get("https://ipv4.icanhazip.com").text
img_url = f"https://{extIP}:8501{temp_image_path}"
guidedMM(st.session_state.systemPrompt, img_url)
else:
st.info("Please select an example image to understand the basic potential of the app while I try to figure out how to serve images correctly to the completions API.")
example = st.selectbox("Select an example image", options=["Example 1", "Example 2"])
if example == "Example 1":
img_url = "https://huggingface.co/spaces/butterswords/MM_Math_Helper/resolve/main/tempDir/example1.png"
elif example == "Example 2":
img_url = "https://huggingface.co/spaces/butterswords/MM_Math_Helper/resolve/main/tempDir/example2.png"
st.image(img_url)
guidedMM(st.session_state.systemPrompt, img_url)