Spaces:
Runtime error
Runtime error
import codecs | |
import json | |
import time | |
import openai | |
import gradio as gr | |
import os | |
from dotenv import load_dotenv | |
# OpenAI API キーの設定 | |
load_dotenv() | |
openai.api_key = os.getenv('OPENAI_API_KEY') | |
assistant_id = os.getenv('OPENAI_ASSISTANT_ID') | |
import json | |
assistant = None | |
client = openai.OpenAI() | |
print("### Step 1: Get the Assistant's ID ###") | |
assistant = client.beta.assistants.retrieve(assistant_id) | |
print(assistant) | |
assistant_name = assistant.name | |
assistant_description = assistant.description | |
assistant_model = assistant.model | |
assistant_tools = assistant.tools | |
assistant_file_ids = assistant.file_ids | |
if assistant_description is None: | |
assistant_description += f"このアシスタントは、OpenAI APIで {assistant_model} を使用して作成されました。" | |
def assistant_response(prompt): | |
"### Step 2: Create a Thread ###" | |
empty_thread = client.beta.threads.create() | |
thread_id = empty_thread.id | |
print(empty_thread) | |
print("### Step 3: Add a Message to the Thread ###") | |
thread = client.beta.threads.retrieve(thread_id) | |
print(thread) | |
print("### Step 4: Add a Message to the Thread ###") | |
thread_message = client.beta.threads.messages.create( | |
thread_id, | |
role="user", | |
content=prompt, | |
) | |
message_id = thread_message.id | |
print(thread_message) | |
print("### Step 5: Retrieve the Message ###") | |
message = client.beta.threads.messages.retrieve( | |
message_id=message_id, | |
thread_id=thread_id, | |
) | |
print(message) | |
print("### Step 6: Run the Assistant ###") | |
run = client.beta.threads.runs.create( | |
thread_id=thread.id, | |
assistant_id=assistant.id, | |
) | |
print("### Step 7: Wait for the Assistant to Finish ###") | |
def wait_on_run(run, thread): | |
while run.status == "queued" or run.status == "in_progress": | |
run = client.beta.threads.runs.retrieve( | |
thread_id=thread.id, | |
run_id=run.id, | |
) | |
time.sleep(0.5) | |
return run | |
run = wait_on_run(run, thread) | |
print(run) | |
print("### Step 8: Retrieve the Messages ###") | |
messages = client.beta.threads.messages.list( | |
thread_id=thread.id | |
) | |
messages_str = json.dumps(messages.dict(), indent=2) | |
print(codecs.decode(messages_str, 'unicode-escape')) | |
print("### Step 9: Retrieve the Assistant's Response ###") | |
answers = [] | |
for message in messages.data: | |
if message.role == "assistant": | |
if message.content[0].type == "text": | |
answers.append(message.content[0].text.value + "\n\n") | |
else: | |
answers.append("Content is not text.\n\n") | |
elif message.role == "user": | |
break | |
# answersを逆順にする | |
answers.reverse() | |
return "".join(answers) | |
title = "OpenAPI Assistant API: " + assistant_name | |
description = assistant_description | |
# Gradio インターフェースの設定 | |
iface = gr.Interface( | |
title=title, | |
description=description, | |
fn=assistant_response, | |
inputs=gr.Textbox(lines=2, placeholder="Enter your prompt here..."), | |
outputs=gr.Textbox(), | |
) | |
# アプリケーションの起動 | |
iface.launch() | |