chat-image-edit / app.py
simonlee-cb's picture
feat: working gradio demo
c55fe6a
raw
history blame
2.02 kB
from openai import OpenAI
import streamlit as st
from src.utils import image_path_to_uri
st.title("ChatGPT-like clone")
client = OpenAI(api_key=st.secrets["OPENAI_API_KEY"])
image = st.file_uploader("Upload an image", type=["png", "jpg", "jpeg"])
if "openai_model" not in st.session_state:
st.session_state["openai_model"] = "gpt-4o"
if "messages" not in st.session_state:
st.session_state.messages = []
if "image" not in st.session_state:
st.session_state.image = None
for message in st.session_state.messages:
with st.chat_message(message["role"]):
for content in message["content"]:
if content["type"] == "text":
st.markdown(content["text"])
elif content["type"] == "image_url":
st.image(content["image_url"]["url"])
if prompt := st.chat_input("What is up?"):
# Add image to the message if it exists
if image is not None:
st.session_state.image = image
if st.session_state.image:
image_url = image_path_to_uri(st.session_state.image)
st.session_state.messages.append({"role": "user", "content": [
{"type": "text", "text": prompt},
{"type": "image_url", "image_url": {"url": image_url}}
]})
else:
st.session_state.messages.append({"role": "user", "content": [
{"type": "text", "text": prompt}
]})
with st.chat_message("user"):
if st.session_state.image:
st.image(st.session_state.image)
st.markdown(prompt)
with st.chat_message("assistant"):
stream = client.chat.completions.create(
model=st.session_state["openai_model"],
messages=[
{"role": m["role"], "content": m["content"]}
for m in st.session_state.messages
],
stream=True,
)
response = st.write_stream(stream)
st.session_state.messages.append({"role": "assistant", "content": [
{"type": "text", "text": response}
]})