Spaces:
Runtime error
Runtime error
import time | |
import gradio as gr | |
from openai import OpenAI | |
from dotenv import load_dotenv | |
from pathlib import Path | |
import json | |
load_dotenv() | |
# client = OpenAI() | |
client = OpenAI() | |
assistant_id = 'asst_4DJlWbqXooIm6hzJYBW5TSpX' | |
def wait_on_run(run, thread): | |
while run.status == "queued" or run.status == "in_progress": | |
run = client.beta.threads.runs.retrieve( | |
thread_id=thread, | |
run_id=run.id, | |
) | |
time.sleep(0.5) | |
return run | |
# thread = client.beta.threads.create() | |
# print("first print thread ID", thread.id) | |
def send_message(message, thread_id): | |
message = client.beta.threads.messages.create(thread_id, role='user', content=message) | |
run = client.beta.threads.runs.create( | |
thread_id=thread_id, | |
assistant_id=assistant_id, | |
) | |
run = wait_on_run(run, thread_id) | |
messages = client.beta.threads.messages.list(thread_id=thread_id) | |
if run.status == "requires_action": | |
tool_call = run.required_action.submit_tool_outputs.tool_calls[0] | |
# name = tool_call.function.name | |
# arguments = json.loads(tool_call.function.arguments) | |
run = client.beta.threads.runs.submit_tool_outputs( | |
thread_id=thread_id, | |
run_id=run.id, | |
tool_outputs=[ | |
{"tool_call_id": tool_call.id, "output": json.dumps("true")} | |
] | |
) | |
try: | |
print("second print thread_id", thread_id) | |
run = wait_on_run(run, thread_id) | |
except: | |
# print("Third print thread", thread) | |
# run = wait_on_run(run, thread) | |
print("Third print thread", thread_id) | |
messages = client.beta.threads.messages.list(thread_id=thread_id) | |
last_message = messages.data[0].content[0].text.value | |
return last_message | |
def get_thread_id(): | |
thread = client.beta.threads.create() | |
print("first print thread ID", thread.id) | |
return thread.id | |
def file_update_for_threads(filepath, user_message): | |
filename = filepath.name | |
file = client.files.create( | |
file=open(filename, "rb"), | |
purpose="assistants", | |
) | |
thread = client.beta.threads.create( | |
messages=[ | |
{ | |
"role": "user", | |
"content": user_message, | |
"attachments": [ | |
{ "file_id": file.id, "tools": [{"type": "file_search"}] } | |
], | |
} | |
] | |
) | |
run = client.beta.threads.runs.create_and_poll( | |
thread_id=thread.id, assistant_id=assistant_id | |
) | |
messages = list(client.beta.threads.messages.list(thread_id=thread.id, run_id=run.id)) | |
message_content = messages[0].content[0].text.value | |
return message_content, thread.id | |
with gr.Blocks() as demo: | |
with gr.Row(): | |
file_upload = gr.File(label="Upload your File") | |
user_message_input = gr.Textbox(label="Enter your message") | |
with gr.Row(): | |
output_message = gr.Textbox(label="Response", interactive=False) | |
output_thread_id = gr.Textbox(label="Thread ID", interactive=False) | |
upload_button = gr.Button("Upload File and Send Message") | |
upload_button.click( | |
file_update_for_threads, | |
inputs=[file_upload, user_message_input], | |
outputs=[output_message, output_thread_id] | |
) | |
# get_thread = gr.Textbox(label="Get Thread ID") | |
# get_thread_d = gr.Button("Get Thread ID") | |
# get_thread_d.click(fn=get_thread_id, outputs=get_thread, api_name="get_thread_id") | |
message_to_assistant = gr.Textbox(label="Send Message to the the current thread") | |
thread_id = gr.Textbox(label="Thread ID") | |
output = gr.Textbox(label="Output response from the Assistant") | |
greet_btn = gr.Button("Send Message") | |
greet_btn.click(fn=send_message, inputs=[message_to_assistant, thread_id], outputs=output, api_name="send_message") | |
demo.launch() |