Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -1,8 +1,8 @@
|
|
|
|
1 |
import gradio as gr
|
2 |
import time
|
3 |
import datetime
|
4 |
from zoneinfo import ZoneInfo
|
5 |
-
import os
|
6 |
from openai import (
|
7 |
OpenAI, AuthenticationError, NotFoundError, BadRequestError
|
8 |
)
|
@@ -11,6 +11,13 @@ from openai import (
|
|
11 |
MAX_TRIAL = int(os.environ["MAX_TRIAL"]) # メッセージ取得最大試行数
|
12 |
INTER_SEC = int(os.environ["INTER_SEC"]) # 試行間隔(秒)
|
13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
# sys_prompt_default = "あなたは優秀なアシスタントです。日本語で質問に回答してください。"
|
15 |
# lang_code = {'Japanese': "ja", 'English': "en"}
|
16 |
auto_play_bl = {'ON': True, 'OFF': False}
|
@@ -43,11 +50,15 @@ def add_history(history, text_msg):
|
|
43 |
def init(state, mode, text_msg, voice_msg):
|
44 |
""" 初期処理(入力チェック・テキスト変換) """
|
45 |
|
46 |
-
print(state)
|
47 |
-
|
48 |
err_msg = ""
|
49 |
text = ""
|
50 |
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
|
52 |
if text_msg == "" and voice_msg is None:
|
53 |
|
@@ -61,8 +72,8 @@ def init(state, mode, text_msg, voice_msg):
|
|
61 |
if state["client"] is None:
|
62 |
|
63 |
# 初回起動時は初期処理をする
|
64 |
-
os.environ["OPENAI_API_KEY"] = os.environ["TEST_OPENAI_KEY"] # テスト時
|
65 |
-
|
66 |
|
67 |
# クライアント新規作成
|
68 |
client = OpenAI()
|
@@ -94,31 +105,40 @@ def init(state, mode, text_msg, voice_msg):
|
|
94 |
|
95 |
if state["assistant_id"] == "":
|
96 |
|
97 |
-
# アシスタント作成
|
98 |
-
# assistant = client.beta.assistants.create(
|
99 |
-
# name="codeinter_test",
|
100 |
-
# instructions=state["system_prompt"],
|
101 |
-
# # model="gpt-4-1106-preview",
|
102 |
-
# model="gpt-3.5-turbo-1106",
|
103 |
-
# tools=[{"type": "code_interpreter"}]
|
104 |
-
# )
|
105 |
-
# state["assistant_id"] = assistant.id
|
106 |
-
|
107 |
if mode == 0:
|
108 |
|
109 |
# 日本語アシスタントをセット
|
110 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
|
112 |
elif mode == 1:
|
113 |
|
114 |
# 英語教師アシスタントをセット
|
115 |
-
|
116 |
|
117 |
-
|
118 |
|
119 |
-
|
120 |
-
|
121 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
122 |
|
123 |
# ユーザIDでフォルダ作成
|
124 |
os.makedirs(state["user_id"], exist_ok=True)
|
@@ -146,6 +166,25 @@ def init(state, mode, text_msg, voice_msg):
|
|
146 |
finally:
|
147 |
return state, text, err_msg
|
148 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
149 |
|
150 |
def raise_exception(err_msg):
|
151 |
""" エラーの場合例外を起こす関数 """
|
@@ -362,12 +401,12 @@ def reset_chat(state):
|
|
362 |
|
363 |
with gr.Blocks() as demo:
|
364 |
|
365 |
-
title = "<h2>GPT音声対応チャット</h2>"
|
366 |
message = "<h3>・WhisperとText to speechによ���チャットを行います。<br>"
|
367 |
message += "・テキストまたは音声を入力して下さい。モードの違いは「利用上の注意」タブをご覧ください。<br>"
|
|
|
368 |
message += "・動画での紹介はこちら→https://www.youtube.com/watch?v=wMoAORg0Y5Q<br>"
|
369 |
-
message += "
|
370 |
-
# message += "・テスト中でAPIKEY無しで動きます。フィードバックもお待ちしております。<br>"
|
371 |
message += "</h3>"
|
372 |
|
373 |
gr.Markdown(title + message)
|
@@ -420,7 +459,7 @@ with gr.Blocks() as demo:
|
|
420 |
# finally_proc, [state, chatbot, sys_msg], [text_msg, voice_msg, out_voice], queue=False)
|
421 |
|
422 |
with gr.Tab("設定"):
|
423 |
-
openai_key = gr.Textbox(label="OpenAI API Key"
|
424 |
voice = gr.Dropdown(choices=voice_list, value = "nova", label="Voice", interactive = True)
|
425 |
auto_play = gr.Dropdown(choices=["ON", "OFF"], value = "ON", label="Auto Play", interactive = True)
|
426 |
speed = gr.Slider(0, 1, value=0.8, label="Speed", info="1に近づけるほど読むスピードが速くなります。", interactive = True)
|
|
|
1 |
+
import os
|
2 |
import gradio as gr
|
3 |
import time
|
4 |
import datetime
|
5 |
from zoneinfo import ZoneInfo
|
|
|
6 |
from openai import (
|
7 |
OpenAI, AuthenticationError, NotFoundError, BadRequestError
|
8 |
)
|
|
|
11 |
MAX_TRIAL = int(os.environ["MAX_TRIAL"]) # メッセージ取得最大試行数
|
12 |
INTER_SEC = int(os.environ["INTER_SEC"]) # 試行間隔(秒)
|
13 |
|
14 |
+
# アシスタント用設定
|
15 |
+
DF_MODEL = "gpt-3.5-turbo-1106"
|
16 |
+
ASSIST_NAME_JA = "Japanese Assistant"
|
17 |
+
ASSIST_NAME_ET = "English Teacher Assistant"
|
18 |
+
AST_SYS_PROMPT_JA = "あなたは日本人の優秀なアシスタントです。質問は日本語で回答して下さい。"
|
19 |
+
AST_SYS_PROMPT_EN = "You are an English teacher. Please be sure to answer in English."
|
20 |
+
|
21 |
# sys_prompt_default = "あなたは優秀なアシスタントです。日本語で質問に回答してください。"
|
22 |
# lang_code = {'Japanese': "ja", 'English': "en"}
|
23 |
auto_play_bl = {'ON': True, 'OFF': False}
|
|
|
50 |
def init(state, mode, text_msg, voice_msg):
|
51 |
""" 初期処理(入力チェック・テキスト変換) """
|
52 |
|
|
|
|
|
53 |
err_msg = ""
|
54 |
text = ""
|
55 |
|
56 |
+
if state["openai_key"] == "":
|
57 |
+
|
58 |
+
# OpenAI API Key未入力
|
59 |
+
err_msg = "OpenAI API Keyを入力してください。(設定タブ)"
|
60 |
+
|
61 |
+
return state, "", err_msg
|
62 |
|
63 |
if text_msg == "" and voice_msg is None:
|
64 |
|
|
|
72 |
if state["client"] is None:
|
73 |
|
74 |
# 初回起動時は初期処理をする
|
75 |
+
# os.environ["OPENAI_API_KEY"] = os.environ["TEST_OPENAI_KEY"] # テスト時
|
76 |
+
os.environ["OPENAI_API_KEY"] = state["openai_key"]
|
77 |
|
78 |
# クライアント新規作成
|
79 |
client = OpenAI()
|
|
|
105 |
|
106 |
if state["assistant_id"] == "":
|
107 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
if mode == 0:
|
109 |
|
110 |
# 日本語アシスタントをセット
|
111 |
+
assistant_id = get_assist_id(client, ASSIST_NAME_JA)
|
112 |
+
# state["assistant_id"] = os.environ["ASSIST_JA"]
|
113 |
+
|
114 |
+
if assistant_id == "":
|
115 |
+
|
116 |
+
# アシスタント新規作成
|
117 |
+
assistant = client.beta.assistants.create(
|
118 |
+
name=ASSIST_NAME_JA,
|
119 |
+
instructions=AST_SYS_PROMPT_JA,
|
120 |
+
model=DF_MODEL,
|
121 |
+
)
|
122 |
+
|
123 |
+
assistant_id = assistant.id
|
124 |
|
125 |
elif mode == 1:
|
126 |
|
127 |
# 英語教師アシスタントをセット
|
128 |
+
assistant_id = get_assist_id(client, ASSIST_NAME_ET)
|
129 |
|
130 |
+
if assistant_id == "":
|
131 |
|
132 |
+
# アシスタント新規作成
|
133 |
+
assistant = client.beta.assistants.create(
|
134 |
+
name=ASSIST_NAME_ET,
|
135 |
+
instructions=AST_SYS_PROMPT_EN,
|
136 |
+
model=DF_MODEL,
|
137 |
+
)
|
138 |
+
|
139 |
+
assistant_id = assistant.id
|
140 |
+
|
141 |
+
state["assistant_id"] = assistant_id
|
142 |
|
143 |
# ユーザIDでフォルダ作成
|
144 |
os.makedirs(state["user_id"], exist_ok=True)
|
|
|
166 |
finally:
|
167 |
return state, text, err_msg
|
168 |
|
169 |
+
def get_assist_id(client, assist_name):
|
170 |
+
|
171 |
+
assist_id = ""
|
172 |
+
|
173 |
+
assist_list = client.beta.assistants.list()
|
174 |
+
|
175 |
+
if len(assist_list.data) == 0:
|
176 |
+
|
177 |
+
return assist_id
|
178 |
+
|
179 |
+
for assist in assist_list:
|
180 |
+
|
181 |
+
if assist.name == assist_name:
|
182 |
+
|
183 |
+
assist_id = assist.id
|
184 |
+
|
185 |
+
break
|
186 |
+
|
187 |
+
return assist_id
|
188 |
|
189 |
def raise_exception(err_msg):
|
190 |
""" エラーの場合例外を起こす関数 """
|
|
|
401 |
|
402 |
with gr.Blocks() as demo:
|
403 |
|
404 |
+
title = "<h2>GPT 音声対応チャット</h2>"
|
405 |
message = "<h3>・WhisperとText to speechによ���チャットを行います。<br>"
|
406 |
message += "・テキストまたは音声を入力して下さい。モードの違いは「利用上の注意」タブをご覧ください。<br>"
|
407 |
+
message += "・自動再生の音声は送信ボタンの下の”出力音声”から自動再生で流れています。(設定でOFFにできます)<br>"
|
408 |
message += "・動画での紹介はこちら→https://www.youtube.com/watch?v=wMoAORg0Y5Q<br>"
|
409 |
+
message += "※OpenAIのAPIキーが必要となります。設定タブから入力して下さい。<br>"
|
|
|
410 |
message += "</h3>"
|
411 |
|
412 |
gr.Markdown(title + message)
|
|
|
459 |
# finally_proc, [state, chatbot, sys_msg], [text_msg, voice_msg, out_voice], queue=False)
|
460 |
|
461 |
with gr.Tab("設定"):
|
462 |
+
openai_key = gr.Textbox(label="OpenAI API Key", visible=True)
|
463 |
voice = gr.Dropdown(choices=voice_list, value = "nova", label="Voice", interactive = True)
|
464 |
auto_play = gr.Dropdown(choices=["ON", "OFF"], value = "ON", label="Auto Play", interactive = True)
|
465 |
speed = gr.Slider(0, 1, value=0.8, label="Speed", info="1に近づけるほど読むスピードが速くなります。", interactive = True)
|