File size: 3,223 Bytes
db3f703
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c9a66e4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
db3f703
c9a66e4
db3f703
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c9a66e4
db3f703
 
 
 
 
 
 
c9a66e4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
db3f703
 
 
c9a66e4
 
db3f703
 
c9a66e4
db3f703
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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()