|
import streamlit as st |
|
import os, threading |
|
|
|
from openai import OpenAI |
|
|
|
lock = threading.Lock() |
|
|
|
config = { |
|
"max_tokens": 1000, |
|
"model": "gpt-4o-mini", |
|
"temperature": 0 |
|
} |
|
|
|
def invoke(openai_api_key, prompt): |
|
if not openai_api_key: |
|
st.error("OpenAI API Key is required.", icon = "π¨") |
|
return "" |
|
|
|
if not prompt: |
|
st.error("Prompt is required.", icon = "π¨") |
|
return "" |
|
|
|
with lock: |
|
os.environ["OPENAI_API_KEY"] = openai_api_key |
|
|
|
content = "" |
|
|
|
try: |
|
client = OpenAI() |
|
|
|
completion = client.chat.completions.create( |
|
max_tokens = config["max_tokens"], |
|
messages = [{"role": "user", "content": prompt}], |
|
model = config["model"], |
|
temperature = config["temperature"]) |
|
|
|
content = completion.choices[0].message.content |
|
except Exception as e: |
|
err_msg = e |
|
st.error(e, icon = "π¨") |
|
return "" |
|
finally: |
|
del os.environ["OPENAI_API_KEY"] |
|
|
|
return content |
|
|
|
st.title("GenAI - Hello, World!") |
|
st.write(os.environ["DESCRIPTION"]) |
|
completion = "" |
|
|
|
with st.form("myform"): |
|
openai_api_key = st.text_input("OpenAI API Key", type = "password") |
|
prompt = st.text_input("Prompt") |
|
submitted = st.form_submit_button("Submit") |
|
|
|
if submitted: |
|
with st.spinner(""): |
|
completion = invoke(openai_api_key, prompt) |
|
|
|
if completion != "": |
|
st.info(completion) |