nekoniii3 commited on
Commit
25e123e
1 Parent(s): dbc6787

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +64 -25
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
- # os.environ["OPENAI_API_KEY"] = state["openai_key"]
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
- state["assistant_id"] = os.environ["ASSIST_JA"]
 
 
 
 
 
 
 
 
 
 
 
 
111
 
112
  elif mode == 1:
113
 
114
  # 英語教師アシスタントをセット
115
- state["assistant_id"] = os.environ["ASSIST_EN"]
116
 
117
- else:
118
 
119
- # アシスタント確認(IDが存在しないならエラーとなる)
120
- # assistant = client.beta.assistants.retrieve(state["assistant_id"])
121
- pass
 
 
 
 
 
 
 
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 += "※自動再生の音声は送信ボタンの下の”出力音声”から自動再生で流れています。(設定でOFFにできます)<br>"
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" ,visible=False)
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)