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]}")