Spaces:
Sleeping
Sleeping
import openai | |
import time | |
import logging | |
import streamlit as st | |
from datetime import datetime | |
openai_api_key = st.secrets["openai_api_key"] | |
client = openai.OpenAI(api_key = openai_api_key) | |
model = "gpt-3.5-turbo-16k" | |
# # == Create our Assistant | |
personal_trainer_assis = client.beta.assistants.create( | |
name="Personal Trainer", | |
instructions="""You are the best personal trainer and nutritionist who knows how to get clients to build lean muscles.\n | |
You've trained high-caliber athletes and movie stars. """, | |
model=model, | |
) | |
asistant_id = personal_trainer_assis.id | |
# === Thread an empty thread | |
thread = client.beta.threads.create() | |
thread_id = thread.id | |
def wait_for_run_completion(client, thread_id, run_id, sleep_interval=5): | |
""" | |
Waits for a run to complete and prints the elapsed time.:param client: The OpenAI client object. | |
:param thread_id: The ID of the thread. | |
:param run_id: The ID of the run. | |
:param sleep_interval: Time in seconds to wait between checks. | |
""" | |
while True: | |
try: | |
run = client.beta.threads.runs.retrieve(thread_id=thread_id, run_id=run_id) | |
if run.completed_at: | |
elapsed_time = run.completed_at - run.created_at | |
formatted_elapsed_time = time.strftime( | |
"%H:%M:%S", time.gmtime(elapsed_time) | |
) | |
print(f"Run completed in {formatted_elapsed_time}") | |
logging.info(f"Run completed in {formatted_elapsed_time}") | |
# Get messages here once Run is completed! | |
messages = client.beta.threads.messages.list(thread_id=thread_id) | |
last_message = messages.data[0] | |
response = last_message.content[0].text.value | |
st.write(response) | |
break | |
except Exception as e: | |
logging.error(f"An error occurred while retrieving the run: {e}") | |
break | |
logging.info("Waiting for run to complete...") | |
time.sleep(sleep_interval) | |
def main(): | |
# Streamlit interface | |
st.title("Personal trainer") | |
with st.form(key="user_input_form"): | |
question = st.text_input("Enter question:") | |
submit_button = st.form_submit_button(label="Response to my question above") | |
if submit_button: | |
# ==== Create a Message ==== | |
message = question | |
message = client.beta.threads.messages.create( | |
thread_id=thread_id, role="user", content = message | |
) | |
# === Run our Assistant === | |
run = client.beta.threads.runs.create( | |
thread_id=thread_id, | |
assistant_id=asistant_id | |
) | |
# === Run === | |
wait_for_run_completion(client=client, thread_id=thread_id, run_id=run.id) | |
if __name__ == "__main__": | |
main() | |
# ==== Steps --- Logs == | |
# run_steps = client.beta.threads.runs.steps.list(thread_id=thread_id, run_id=run.id) | |
# print(f"Steps---> {run_steps.data[0]}") |