nekoniii3 commited on
Commit
87a8c5e
1 Parent(s): d8c60a2
annotations/dummy.txt DELETED
@@ -1 +0,0 @@
1
- dummy
 
 
app.py CHANGED
@@ -2,18 +2,27 @@ import os
2
  import time
3
  import datetime
4
  import gradio as gr
5
- from openai import OpenAI
6
  from openai.types.beta.threads.runs import ToolCallsStepDetails
 
 
 
7
 
8
  # GPT用設定
9
- SYS_PROMPT_DEFAULT = "あなたは優秀なアシスタントです。質問をされた場合は、質問に答えるコードを作成して実行します。回答は日本語でお願いします。"
10
- DUMMY = "********************"
 
 
 
 
 
 
11
  # file_format = {".txt", ".csv", ".pdf"}
12
- file_format = {".txt", ".csv"}
13
 
14
- # 各種出力フォルダ
15
- IMG_FOLDER = "images"
16
- ANT_FOLDER = "annotations"
 
17
 
18
  # 各種メッセージ
19
  PLACEHOLDER = "これは東京都の年別人口データです、折れ線グラフでデータの可視化をお願いします… など"
@@ -25,12 +34,14 @@ MAX_TRIAL = int(os.environ["MAX_TRIAL"]) # メッセージ取得最大試行数
25
  INTER_SEC = int(os.environ["INTER_SEC"]) # 試行間隔(秒)
26
 
27
  # サンプル用情報
28
- examples = ["sample_data/東京都年別人口.csv", "sample_data/世界の人口2023年.csv", "sample_data/練馬区年齢別人口.csv", "sample_data/桃太郎あらすじ.txt"]
 
29
 
30
- example_toid = {"東京都年別人口.csv" : "file-TMLJxwdTy1oaaoo2l712r1Os"
31
- ,"世界の人口2023年.csv" : "file-rafHPSkmMciOjKovah0u5oug"
32
- , "練馬区年齢別人口.csv" : "file-B5VqVSqgh8dB70ygHwt0LVIH"
33
- , "桃太郎あらすじ.txt" : "file-ylcNO5LShDYgDk5wiuSiyTMA"}
 
34
 
35
  # コード出力用
36
  code_mode = {'ON': True, 'OFF': False}
@@ -51,15 +62,15 @@ def init(state, text, file):
51
  """ 入力チェックを行う関数
52
  ※ここで例外を起こすと入力できなくなるので次の関数でエラーにする """
53
 
54
- print(state)
55
-
56
  err_msg = ""
57
  file_id = None
58
 
59
- # if state["openai_key"] == "" or state["openai_key"] is None:
60
 
61
- # # OpenAI API Key未入力
62
- # err_msg = "OpenAI API Keyを入力してください。(設定タブ)"
 
 
63
 
64
  if not text:
65
 
@@ -70,7 +81,7 @@ def init(state, text, file):
70
 
71
  elif file:
72
 
73
- # 入力画像のファイル形式チェック
74
  root, ext = os.path.splitext(file)
75
 
76
  if ext not in file_format:
@@ -80,62 +91,79 @@ def init(state, text, file):
80
 
81
  return state, file_id, err_msg
82
 
 
83
 
84
- if state["client"] is None:
85
 
86
- # 初回起動時は初期処理をする
87
- os.environ["OPENAI_API_KEY"] = os.environ["TEST_OPENAI_KEY"] # テスト時
88
- # os.environ["OPENAI_API_KEY"] = state["openai_key"]
89
 
90
- # クライアント新規作成
91
- client = OpenAI()
92
 
93
- # client作成後は消す
94
- os.environ["OPENAI_API_KEY"] = ""
95
 
96
- # セッションにセット
97
- state["client"] = client
98
 
99
- else:
100
 
101
- # 既存のクライアントをセット
102
- client = state["client"]
103
 
 
104
 
105
- if state["thread_id"] == "":
 
106
 
107
- # スレッド作成
108
- thread = client.beta.threads.create()
109
 
110
- state["thread_id"] = thread.id
111
 
 
112
 
113
- if state["assistant_id"] == "":
 
114
 
115
- # アシスタント作成
116
- # assistant = client.beta.assistants.create(
117
- # name="codeinter_test",
118
- # instructions=state["system_prompt"],
119
- # # model="gpt-4-1106-preview",
120
- # model="gpt-3.5-turbo-1106",
121
- # tools=[{"type": "code_interpreter"}]
122
- # )
123
- # state["assistant_id"] = assistant.id
124
 
125
- state["assistant_id"] = os.environ["ASSIST_ID"] # テスト中アシスタントは固定
 
 
 
 
126
 
 
 
127
 
128
- if file:
 
 
 
 
 
 
 
129
 
130
- # ファイル名取得
131
- basename = os.path.basename(file)
132
 
133
- if example_toid.get(basename):
134
 
135
- # サンプルの場合は用意したIDをセット
136
- file_id = example_toid.get(basename)
137
 
138
- else:
 
 
 
 
 
 
 
 
 
 
139
 
140
  # ファイルのアップ
141
  file_response = client.files.create(
@@ -152,10 +180,36 @@ def init(state, text, file):
152
  # ファイルのIDをセット
153
  file_id = file_response.id
154
 
155
- print(file_id)
156
 
157
- return state, file_id, err_msg
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
 
 
 
 
 
 
 
 
 
 
 
 
159
 
160
  def raise_exception(err_msg):
161
  """ エラーの場合例外を起こす関数 """
@@ -171,16 +225,8 @@ def add_history(history, text, file_id):
171
 
172
  err_msg = ""
173
 
174
- if file_id is None or file_id == "":
175
-
176
- # テキストだけの場合そのまま追加
177
- history = history + [(text, None)]
178
-
179
- elif file_id is not None:
180
-
181
- # ファイルがあればファイルIDとテキストを追加
182
- history = history + [("file:" + file_id, DUMMY)]
183
- history = history + [(text, None)]
184
 
185
  # テキスト・ファイルを初期化し利用不可に
186
  update_text = gr.update(value="", placeholder = "",interactive=False)
@@ -227,14 +273,14 @@ def bot(state, history, file_id):
227
  run = client.beta.threads.runs.create(
228
  thread_id=thread_id,
229
  assistant_id=assistant_id,
230
- instructions=system_prompt
231
  )
232
 
233
- # "completed"となるまで繰り返す(指定秒おき)
234
  for i in range(0, MAX_TRIAL, 1):
235
 
236
  if i > 0:
237
- time.sleep(INTER_SEC)
238
 
239
  # メッセージ受け取り
240
  run = client.beta.threads.runs.retrieve(
@@ -249,102 +295,94 @@ def bot(state, history, file_id):
249
  order="asc"
250
  )
251
 
252
- msg_log = client.beta.threads.messages.list(
253
- thread_id=thread_id,
254
- # after=last_msg_id,
255
- order="asc"
256
- )
257
-
258
  # デバッグ用
259
  print(run.status)
260
- print(msg_log)
261
 
262
  # messageを取り出す
263
  for msg in messages:
264
 
265
  if msg.role == "assistant":
266
 
267
- for content in msg.content:
268
 
269
- res_text = ""
270
- file_id = ""
271
- ant_file = None
272
 
273
- cont_dict = content.model_dump() # 辞書型に変換
274
 
275
- ct_image_file = cont_dict.get("image_file")
276
 
277
- if ct_image_file:
278
 
279
- # imageファイルがあるならIDセット
280
- res_file_id = ct_image_file.get("file_id")
281
 
282
- # ファイルをダウンロード
283
- image_file = file_download(client, res_file_id, IMG_FOLDER , ".png")
284
 
285
- if image_file is None:
286
 
287
- err_msg = "ファイルのダウンロードに失敗しました。"
288
 
289
- else:
290
 
291
- print("画像ファイル追加")
292
 
293
- res_text = IMG_MSG
294
 
295
- history = history + [[None, res_text]]
 
296
 
297
- # 最終メッセージID更新
298
- last_msg_id = msg.id
299
 
300
- else:
 
301
 
302
- # 返答テキスト取得
303
- res_text = cont_dict["text"].get("value")
304
 
305
- # 注釈(参照ファイル)ががある場合取得
306
- if len(cont_dict.get("text").get("annotations")) > 0:
307
 
308
- ct_ant = cont_dict.get("text").get("annotations")
309
 
310
- if ct_ant[0].get("file_path") is not None:
 
311
 
312
- # 参照ファイルのID取得
313
- ant_file_id = ct_ant[0].get("file_path").get("file_id")
314
 
315
- if ct_ant[0].get("text") is not None:
 
316
 
317
- # ファイル形式(拡張子)取得
318
- ext = "." + ct_ant[0].get("text")[ct_ant[0].get("text").rfind('.') + 1:]
319
 
320
- # ファイルダウンロード
321
- ant_file = file_download(client, ant_file_id, ANT_FOLDER, ext)
322
 
323
- if ant_file is None:
324
 
325
- err_msg = "参照ファイルのダウンロードに失敗しました。"
326
 
327
- else:
 
328
 
329
- # 参照ファイルがある旨のメッセージを追加
330
- res_text = res_text + "\n\n" + ANT_MSG
331
 
332
- if res_text != "":
 
333
 
334
- # Chat画面更新
335
- if history[-1][1] is not None:
 
336
 
337
- # 新しい行を追加
338
- history = history + [[None, res_text]]
339
- else:
340
 
341
- history[-1][1] = res_text
 
342
 
343
- # 最終メッセージID更新
344
- last_msg_id = msg.id
345
-
346
- # Chatbotを返す(labelとhistoryを更新)
347
- yield gr.Chatbot(label=run.status ,value=history), image_file, ant_file, err_msg
348
 
349
  # メッセージIDを保存
350
  state["last_msg_id"] = last_msg_id
@@ -354,7 +392,7 @@ def bot(state, history, file_id):
354
 
355
  if not code_mode:
356
 
357
- yield gr.Chatbot(label=run.status ,value=history), image_file, ant_file, err_msg
358
 
359
  break
360
  else:
@@ -394,11 +432,11 @@ def bot(state, history, file_id):
394
  yield gr.Chatbot(label=run.status ,value=history), image_file, ant_file, err_msg
395
  break
396
 
397
- else:
398
- if i > 3:
399
 
400
- # 作業中とわかるようにする
401
- yield gr.Chatbot(label=run.status + " (Request:" + str(i) + ")" ,value=history), image_file, ant_file, err_msg
402
 
403
 
404
  def get_code(run_steps):
@@ -464,18 +502,22 @@ def clear_click(state):
464
  with gr.Blocks() as demo:
465
 
466
  title = "<h2>GPT Code Interpreter対応チャット</h2>"
467
- message = "<h3>・テスト中でAPIKEY無しで動きます ※機密ファイルはアップしないでください<br>"
468
  message += "・こういうときにエラーになるなどフィードバックあればお待ちしています。<br>"
469
- message += '※動いているかわかりづらいですが、左上の"in_progress(Request:XX)"が止まっていなければ回答の生成中となります。<br>'
470
- message += "※グラフの日本語文字化けの対応の仕方を注意事項に記載しました。<br>"
471
  message += "・コードインタープリターAPIの解説動画はこちらです→"
472
- message += "https://www.youtube.com/watch?v=tFmedAM1FM8<br></h3>"
 
 
 
 
 
 
473
 
474
- gr.Markdown(title + message)
475
 
476
  # セッションの宣言
477
  state = gr.State({
478
- "system_prompt": SYS_PROMPT_DEFAULT,
479
  "openai_key" : "",
480
  "code_mode" : False,
481
  "client" : None,
@@ -497,7 +539,7 @@ with gr.Blocks() as demo:
497
  btn = gr.Button(value="送信")
498
  # btn_download = gr.Button(value="画像のダウンロード") # 保留中
499
  # btn_clear = gr.ClearButton(value="リセット", components=[chatbot, text_msg, up_file, file_id, result_image, sys_msg, result_file])
500
- btn_clear = gr.ClearButton(value="リセット", components=[chatbot, text_msg, up_file])
501
  sys_msg = gr.Textbox(label="システムメッセージ", interactive = False)
502
  result_file = gr.File(label="出力ファイル", type="filepath",interactive = False)
503
 
@@ -519,9 +561,9 @@ with gr.Blocks() as demo:
519
  # txt_msg = text_msg.submit(respond, inputs=[text_msg, image, chatbot], outputs=[text_msg, image, chatbot])
520
 
521
  with gr.Tab("設定") as set:
522
- openai_key = gr.Textbox(label="OpenAI API Key", visible=False) # テスト中は表示せず
523
  # language = gr.Dropdown(choices=["Japanese", "English"], value = "Japanese", label="Language", interactive = True)
524
- system_prompt = gr.Textbox(value = SYS_PROMPT_DEFAULT,lines = 5, label="Custom instructions", interactive = True)
525
  code_output = gr.Dropdown(label="コード出力", choices=["OFF", "ON"], value = "OFF", interactive = True)
526
 
527
  # 設定タブからChatタブに戻った時の処理
@@ -529,16 +571,17 @@ with gr.Blocks() as demo:
529
 
530
  with gr.Tab("注意事項") as notes:
531
  caution = "現在Assistant APIはβ版でのリリースとなっています。<br>"
532
- caution += "そのためか一部のファイルのアップロードが上手くいかないため、制限をかけています。<br>"
533
- caution += "(現在アップできるファイル形式は.txtと.csvのみ)<br>"
534
- caution += "本来はPDFなども利用できるはずなので、今後更新したいと思います。<br>"
535
  caution += "文字化けする場合「NotoSansJP-Bold.zipを解凍してフォントを取得して下さい。」と指示し<br>"
536
  caution += "グラフ作成時に「フォントはNotoSansJP-Boldを使用して下さい。」と指示して下さい。<br>"
537
  caution += "※NotoSansJP-Bold.zipをアップする必要はありません。<br>"
538
- caution += "詳細はこちら→https://github.com/nekoniii3/openai_multi_chat/tree/main/Code_Interpreter/docs/日本語フォント利用"
539
  gr.Markdown("<h3>" + caution + "</h3>")
540
 
541
 
542
- demo.queue()
543
- demo.launch(debug=True)
544
 
 
 
 
2
  import time
3
  import datetime
4
  import gradio as gr
 
5
  from openai.types.beta.threads.runs import ToolCallsStepDetails
6
+ from openai import (
7
+ OpenAI, AuthenticationError, NotFoundError, BadRequestError
8
+ )
9
 
10
  # GPT用設定
11
+ # SYS_PROMPT_DEFAULT = "あなたは優秀なアシスタントです。質問をされた場合は、質問に答えるコードを作成して実行します。回答は日本語でお願いします。"
12
+
13
+ # アシスタント用設定
14
+ DF_MODEL = "gpt-3.5-turbo-1106"
15
+ ASSIST_NAME = "Code Interpreter Assistant for O3"
16
+ AST_SYS_PROMPT = "あなたは優秀なアシスタントです。質問をされた場合は、質問に答えるコードを作成して実行します。回答は日本語でお願いします。"
17
+
18
+ # DUMMY = "********************"
19
  # file_format = {".txt", ".csv", ".pdf"}
20
+ file_format = {".txt", ".csv", ".jpg", ".jpeg", ".png", ".xlsx", ".pdf", ".zip"}
21
 
22
+ # 各種フォルダ
23
+ FONT_FILE_PATH = "for_assistants/NotoSansJP-Bold.zip"
24
+ # IMG_FOLDER = "images"
25
+ # ANT_FOLDER = "annotations"
26
 
27
  # 各種メッセージ
28
  PLACEHOLDER = "これは東京都の年別人口データです、折れ線グラフでデータの可視化をお願いします… など"
 
34
  INTER_SEC = int(os.environ["INTER_SEC"]) # 試行間隔(秒)
35
 
36
  # サンプル用情報
37
+ # examples = ["sample_data/東京都年別人口.csv", "sample_data/世界の人口2023年.csv", "sample_data/練馬区年齢別人口.csv", "sample_data/桃太郎あらすじ.txt"]
38
+ examples = ["sample_data/東京都男女別人口_y23.csv","sample_data/東京都年齢別人口_y23.csv"]
39
 
40
+ # example_toid = {"東京都年別人口.csv" : "file-TMLJxwdTy1oaaoo2l712r1Os"
41
+ # ,"世界の人口2023年.csv" : "file-rafHPSkmMciOjKovah0u5oug"
42
+ # , "練馬区年齢別人口.csv" : "file-B5VqVSqgh8dB70ygHwt0LVIH"
43
+ # , "桃太郎あらすじ.txt" : "file-ylcNO5LShDYgDk5wiuSiyTMA"}
44
+ # ,"South Africa-2023.csv" : "file-6aarxpoX4TISJjqPH2Pi3QMV"}
45
 
46
  # コード出力用
47
  code_mode = {'ON': True, 'OFF': False}
 
62
  """ 入力チェックを行う関数
63
  ※ここで例外を起こすと入力できなくなるので次の関数でエラーにする """
64
 
 
 
65
  err_msg = ""
66
  file_id = None
67
 
68
+ if state["openai_key"] == "":
69
 
70
+ # OpenAI API Key未入力
71
+ err_msg = "OpenAI API Keyを入力してください。(設定タブ)"
72
+
73
+ return state, file_id, err_msg
74
 
75
  if not text:
76
 
 
81
 
82
  elif file:
83
 
84
+ # 入力ファイルの形式チェック
85
  root, ext = os.path.splitext(file)
86
 
87
  if ext not in file_format:
 
91
 
92
  return state, file_id, err_msg
93
 
94
+ try:
95
 
96
+ if state["client"] is None:
97
 
98
+ # 初回起動時は初期処理をする
99
+ # os.environ["OPENAI_API_KEY"] = os.environ["TEST_OPENAI_KEY"] # テスト時
100
+ os.environ["OPENAI_API_KEY"] = state["openai_key"]
101
 
102
+ # クライアント新規作成
103
+ client = OpenAI()
104
 
105
+ # client作成後は消す
106
+ os.environ["OPENAI_API_KEY"] = ""
107
 
108
+ # セッションにセット
109
+ state["client"] = client
110
 
111
+ else:
112
 
113
+ # 既存のクライアントをセット
114
+ client = state["client"]
115
 
116
+ if state["thread_id"] == "":
117
 
118
+ # スレッド作成
119
+ thread = client.beta.threads.create()
120
 
121
+ state["thread_id"] = thread.id
 
122
 
 
123
 
124
+ if state["assistant_id"] == "":
125
 
126
+ # 既存のアシスタントがあればIDを取得
127
+ assistant_id = get_assist_id(client, ASSIST_NAME)
128
 
129
+ if assistant_id == "":
 
 
 
 
 
 
 
 
130
 
131
+ # フォントファイルをアップ
132
+ font_file_response = client.files.create(
133
+ purpose="assistants",
134
+ file=open(FONT_FILE_PATH,"rb"),
135
+ )
136
 
137
+ # IDの取得
138
+ font_file_id = font_file_response.id
139
 
140
+ # アシスタント新規作成
141
+ assistant = client.beta.assistants.create(
142
+ name=ASSIST_NAME,
143
+ instructions=AST_SYS_PROMPT,
144
+ model=DF_MODEL,
145
+ file_ids=[font_file_id],
146
+ tools=[{"type": "code_interpreter"}] # テスト中はオフ
147
+ )
148
 
149
+ assistant_id = assistant.id
 
150
 
151
+ state["assistant_id"] = assistant_id
152
 
153
+ # アシスタントIDでフォルダ作成
154
+ os.makedirs(state["assistant_id"], exist_ok=True)
155
 
156
+ if file:
157
+
158
+ # ファイル名取得
159
+ # basename = os.path.basename(file)
160
+
161
+ # if example_toid.get(basename):
162
+
163
+ # # サンプルの場合は用意したIDをセット
164
+ # file_id = example_toid.get(basename)
165
+
166
+ # else:
167
 
168
  # ファイルのアップ
169
  file_response = client.files.create(
 
180
  # ファイルのIDをセット
181
  file_id = file_response.id
182
 
 
183
 
184
+ except NotFoundError as e:
185
+ err_msg = "アシスタントIDが間違っています。新しく作成する場合はアシスタントIDを空欄にして下さい。"
186
+ except AuthenticationError as e:
187
+ err_msg = "認証エラーとなりました。OpenAPIKeyが正しいか、支払い方法などが設定されているか確認して下さい。"
188
+ except Exception as e:
189
+ err_msg = "その他のエラーが発生しました。"
190
+ print(e)
191
+ finally:
192
+ return state, file_id, err_msg
193
+
194
+ def get_assist_id(client, assist_name):
195
+
196
+ assist_id = ""
197
+
198
+ assist_list = client.beta.assistants.list()
199
+
200
+ if len(assist_list.data) == 0:
201
 
202
+ return assist_id
203
+
204
+ for assist in assist_list:
205
+
206
+ if assist.name == assist_name:
207
+
208
+ assist_id = assist.id
209
+
210
+ break
211
+
212
+ return assist_id
213
 
214
  def raise_exception(err_msg):
215
  """ エラーの場合例外を起こす関数 """
 
225
 
226
  err_msg = ""
227
 
228
+ # 入力テキスト追加
229
+ history = history + [(text, None)]
 
 
 
 
 
 
 
 
230
 
231
  # テキスト・ファイルを初期化し利用不可に
232
  update_text = gr.update(value="", placeholder = "",interactive=False)
 
273
  run = client.beta.threads.runs.create(
274
  thread_id=thread_id,
275
  assistant_id=assistant_id,
276
+ # instructions=system_prompt
277
  )
278
 
279
+ # "completed"となるまで繰り返す
280
  for i in range(0, MAX_TRIAL, 1):
281
 
282
  if i > 0:
283
+ time.sleep(INTER_SEC) # 指定秒待��
284
 
285
  # メッセージ受け取り
286
  run = client.beta.threads.runs.retrieve(
 
295
  order="asc"
296
  )
297
 
 
 
 
 
 
 
298
  # デバッグ用
299
  print(run.status)
300
+ print(messages)
301
 
302
  # messageを取り出す
303
  for msg in messages:
304
 
305
  if msg.role == "assistant":
306
 
307
+ for content in msg.content:
308
 
309
+ res_text = ""
310
+ file_id = ""
311
+ ant_file = None
312
 
313
+ cont_dict = content.model_dump() # 辞書型に変換
314
 
315
+ ct_image_file = cont_dict.get("image_file")
316
 
317
+ if ct_image_file:
318
 
319
+ # imageファイルがあるならIDセット
320
+ res_file_id = ct_image_file.get("file_id")
321
 
322
+ # ファイルをダウンロード
323
+ image_file = file_download(client, res_file_id, assistant_id, ".png")
324
 
325
+ if image_file is None:
326
 
327
+ err_msg = "ファイルのダウンロードに失敗しました。"
328
 
329
+ else:
330
 
331
+ res_text = IMG_MSG
332
 
333
+ history = history + [[None, res_text]]
334
 
335
+ # 最終メッセージID更新
336
+ last_msg_id = msg.id
337
 
338
+ else:
 
339
 
340
+ # 返答テキスト取得
341
+ res_text = cont_dict["text"].get("value")
342
 
343
+ # 注釈(参照ファイル)ががある場合取得
344
+ if len(cont_dict.get("text").get("annotations")) > 0:
345
 
346
+ ct_ant = cont_dict.get("text").get("annotations")
 
347
 
348
+ if ct_ant[0].get("file_path") is not None:
349
 
350
+ # 参照ファイルのID取得
351
+ ant_file_id = ct_ant[0].get("file_path").get("file_id")
352
 
353
+ if ct_ant[0].get("text") is not None:
 
354
 
355
+ # ファイル形式(拡張子)取得
356
+ ext = "." + ct_ant[0].get("text")[ct_ant[0].get("text").rfind('.') + 1:]
357
 
358
+ # ファイルダウンロード
359
+ ant_file = file_download(client, ant_file_id, assistant_id, ext)
360
 
361
+ if ant_file is None:
 
362
 
363
+ err_msg = "参照ファイルのダウンロードに失敗しました。"
364
 
365
+ else:
366
 
367
+ # 参照ファイルがある旨のメッセージを追加
368
+ res_text = res_text + "\n\n" + ANT_MSG
369
 
370
+ if res_text != "":
 
371
 
372
+ # Chat画面更新
373
+ if history[-1][1] is not None:
374
 
375
+ # 新しい行を追加
376
+ history = history + [[None, res_text]]
377
+ else:
378
 
379
+ history[-1][1] = res_text
 
 
380
 
381
+ # 最終メッセージID更新
382
+ last_msg_id = msg.id
383
 
384
+ # Chatbotを返す(labelとhistoryを更新)
385
+ yield gr.Chatbot(label=run.status, value=history), image_file, ant_file, err_msg
 
 
 
386
 
387
  # メッセージIDを保存
388
  state["last_msg_id"] = last_msg_id
 
392
 
393
  if not code_mode:
394
 
395
+ # yield gr.Chatbot(label=run.status ,value=history), image_file, ant_file, err_msg
396
 
397
  break
398
  else:
 
432
  yield gr.Chatbot(label=run.status ,value=history), image_file, ant_file, err_msg
433
  break
434
 
435
+ # else:
436
+ # if i > 3:
437
 
438
+ # # 作業中とわかるようにする
439
+ # yield gr.Chatbot(label=run.status + " (Request:" + str(i) + ")" ,value=history), image_file, ant_file, err_msg
440
 
441
 
442
  def get_code(run_steps):
 
502
  with gr.Blocks() as demo:
503
 
504
  title = "<h2>GPT Code Interpreter対応チャット</h2>"
505
+ message = "・設定タブからAPIKEYを入力してください<br>"
506
  message += "・こういうときにエラーになるなどフィードバックあればお待ちしています。<br>"
 
 
507
  message += "・コードインタープリターAPIの解説動画はこちらです→"
508
+ message += "https://www.youtube.com/watch?v=tFmedAM1FM8<br>"
509
+ message += '※動いているかわかりづらいですが、左上の"in_progress(Request:XX)"が止まっていなければ回答の生成中となります。<br>'
510
+ message += "※グラフの日本語文字化けの対応方法を注意事項に記載しました。<br>"
511
+
512
+ # title = "<h2>Code Interpreterデモアプリ</h2>"
513
+ # message = "<h3>最初に[設定]タブからOpenAIキーを入力してください。"
514
+ # message += "</h3>"
515
 
516
+ gr.Markdown(title + "<h3>" + message + "</h3>")
517
 
518
  # セッションの宣言
519
  state = gr.State({
520
+ "system_prompt": "",
521
  "openai_key" : "",
522
  "code_mode" : False,
523
  "client" : None,
 
539
  btn = gr.Button(value="送信")
540
  # btn_download = gr.Button(value="画像のダウンロード") # 保留中
541
  # btn_clear = gr.ClearButton(value="リセット", components=[chatbot, text_msg, up_file, file_id, result_image, sys_msg, result_file])
542
+ btn_clear = gr.ClearButton(value="リセット", components=[chatbot, text_msg, up_file, result_image])
543
  sys_msg = gr.Textbox(label="システムメッセージ", interactive = False)
544
  result_file = gr.File(label="出力ファイル", type="filepath",interactive = False)
545
 
 
561
  # txt_msg = text_msg.submit(respond, inputs=[text_msg, image, chatbot], outputs=[text_msg, image, chatbot])
562
 
563
  with gr.Tab("設定") as set:
564
+ openai_key = gr.Textbox(label="OpenAI API Key", visible=True)
565
  # language = gr.Dropdown(choices=["Japanese", "English"], value = "Japanese", label="Language", interactive = True)
566
+ system_prompt = gr.Textbox(value = "",lines = 5, label="Custom instructions", interactive = True, visible=False)
567
  code_output = gr.Dropdown(label="コード出力", choices=["OFF", "ON"], value = "OFF", interactive = True)
568
 
569
  # 設定タブからChatタブに戻った時の処理
 
571
 
572
  with gr.Tab("注意事項") as notes:
573
  caution = "現在Assistant APIはβ版でのリリースとなっています。<br>"
574
+ # caution += "そのためか一部のファイルのアップロードが上手くいかないため、制限をかけています。<br>"
575
+ # caution += "(現在アップできるファイル形式は.txtと.csvのみ)<br>"
576
+ # caution += "本来はPDFなども利用できるはずなので、今後更新したいと思います。<br>"
577
  caution += "文字化けする場合「NotoSansJP-Bold.zipを解凍してフォントを取得して下さい。」と指示し<br>"
578
  caution += "グラフ作成時に「フォントはNotoSansJP-Boldを使用して下さい。」と指示して下さい。<br>"
579
  caution += "※NotoSansJP-Bold.zipをアップする必要はありません。<br>"
580
+ caution += "詳細はこちら→https://github.com/nekoniii3/openai_multi_chat/tree/main/Code_Interpreter/docs/%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E5%88%A9%E7%94%A8"
581
  gr.Markdown("<h3>" + caution + "</h3>")
582
 
583
 
584
+ if __name__ == "__main__":
 
585
 
586
+ demo.queue()
587
+ demo.launch(debug=True)
for_assistants/NotoSansJP-Bold.zip ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a4e86a6b7c33c42fc1e5abf15c988c0ce9c1c39377b04ff2acb68034fbe00525
3
+ size 3367847
images/dummy.txt DELETED
@@ -1 +0,0 @@
1
- dummy
 
 
requirements.txt CHANGED
@@ -1,2 +1,2 @@
1
  # gradio==4.2.0
2
- openai==1.2.4
 
1
  # gradio==4.2.0
2
+ openai==1.7.1
sample_data/世界の人口2023年.csv DELETED
@@ -1,22 +0,0 @@
1
- Age,M,F
2
- 0-4,337082467,319557714
3
- 5-9,351715561,331015496
4
- 10-14,346898098,325046485
5
- 15-19,328189555,307629576
6
- 20-24,313191215,294184526
7
- 25-29,304421477,287497451
8
- 30-34,308206126,294461443
9
- 35-39,293650660,283742580
10
- 40-44,264954566,258134000
11
- 45-49,238892693,235655907
12
- 50-54,230886182,231469447
13
- 55-59,204396487,210274344
14
- 60-64,162559789,173807303
15
- 65-69,135678685,152556237
16
- 70-74,99662458,119189625
17
- 75-79,61653088,78620257
18
- 80-84,36107650,52173305
19
- 85-89,17564615,30311032
20
- 90-94,5956267,12939489
21
- 95-99,1189572,3510425
22
- 100+,130480,547105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
sample_data/東京都年齢別人口_y23.csv ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 階層,令和5年1月1日現在/年齢,令和5年1月1日現在/総数(人),令和5年1月1日現在/男(人),令和5年1月1日現在/女(人),令和4年1月1日現在/年齢,令和4年1月1日現在/総数(人),令和4年1月1日現在/男(人),令和4年1月1日現在/女(人),差引増減/総数(人),差引増減/男(人),差引増減/女(人),増減率(総数)(%)
2
+ 1,0,87008,44630,42378,-,0,0,0,87008,44630,42378,0
3
+ 1,1,91032,46647,44385,0,91152,46693,44459,-120,-46,-74,-0.13
4
+ 1,2,93581,48024,45557,1,95461,48941,46520,-1880,-917,-963,-1.97
5
+ 1,3,95502,48665,46837,2,97025,49579,47446,-1523,-914,-609,-1.57
6
+ 1,4,100792,51773,49019,3,102008,52401,49607,-1216,-628,-588,-1.19
7
+ 1,5,102429,52228,50201,4,103363,52715,50648,-934,-487,-447,-0.9
8
+ 1,6,105243,53730,51513,5,106110,54195,51915,-867,-465,-402,-0.82
9
+ 1,7,106622,54484,52138,6,107540,54999,52541,-918,-515,-403,-0.85
10
+ 1,8,104807,53445,51362,7,105140,53584,51556,-333,-139,-194,-0.32
11
+ 1,9,105546,53889,51657,8,105795,54006,51789,-249,-117,-132,-0.24
12
+ 1,10,103211,52810,50401,9,103357,52866,50491,-146,-56,-90,-0.14
13
+ 1,11,102789,52887,49902,10,102828,52889,49939,-39,-2,-37,-0.04
14
+ 1,12,104836,53835,51001,11,104729,53797,50932,107,38,69,0.1
15
+ 1,13,103938,53317,50621,12,103783,53319,50464,155,-2,157,0.15
16
+ 1,14,103794,53057,50737,13,103735,53012,50723,59,45,14,0.06
17
+ 1,15,102696,52802,49894,14,102451,52665,49786,245,137,108,0.24
18
+ 1,16,101401,51662,49739,15,101051,51578,49473,350,84,266,0.35
19
+ 1,17,97131,49627,47504,16,96966,49549,47417,165,78,87,0.17
20
+ 1,18,103668,52552,51116,17,100872,51259,49613,2796,1293,1503,2.77
21
+ 1,19,112691,57155,55536,18,103645,52847,50798,9046,4308,4738,8.73
22
+ 1,20,118741,60256,58485,19,114295,58133,56162,4446,2123,2323,3.89
23
+ 1,21,125652,62586,63066,20,117457,59183,58274,8195,3403,4792,6.98
24
+ 1,22,137067,68160,68907,21,128043,63987,64056,9024,4173,4851,7.05
25
+ 1,23,156621,77106,79515,22,135810,67575,68235,20811,9531,11280,15.32
26
+ 1,24,168929,83198,85731,23,159702,78236,81466,9227,4962,4265,5.78
27
+ 1,25,175207,86693,88514,24,167117,81971,85146,8090,4722,3368,4.84
28
+ 1,26,178384,88899,89485,25,172660,85758,86902,5724,3141,2583,3.32
29
+ 1,27,175098,87351,87747,26,172049,85656,86393,3049,1695,1354,1.77
30
+ 1,28,181800,91377,90423,27,180094,90438,89656,1706,939,767,0.95
31
+ 1,29,171665,86613,85052,28,171176,86209,84967,489,404,85,0.29
32
+ 1,30,171547,86919,84628,29,172372,87277,85095,-825,-358,-467,-0.48
33
+ 1,31,169777,86098,83679,30,171460,87025,84435,-1683,-927,-756,-0.98
34
+ 1,32,165295,83218,82077,31,166883,84048,82835,-1588,-830,-758,-0.95
35
+ 1,33,164668,83420,81248,32,166310,84242,82068,-1642,-822,-820,-0.99
36
+ 1,34,171112,86619,84493,33,172849,87474,85375,-1737,-855,-882,-1
37
+ 1,35,173431,87895,85536,34,175105,88872,86233,-1674,-977,-697,-0.96
38
+ 1,36,174474,88313,86161,35,176321,89323,86998,-1847,-1010,-837,-1.05
39
+ 1,37,179695,91409,88286,36,181527,92348,89179,-1832,-939,-893,-1.01
40
+ 1,38,186958,95537,91421,37,188572,96360,92212,-1614,-823,-791,-0.86
41
+ 1,39,187241,95860,91381,38,188739,96671,92068,-1498,-811,-687,-0.79
42
+ 1,40,186221,95332,90889,39,187793,96226,91567,-1572,-894,-678,-0.84
43
+ 1,41,186165,95190,90975,40,187480,96001,91479,-1315,-811,-504,-0.7
44
+ 1,42,189821,96947,92874,41,191135,97719,93416,-1314,-772,-542,-0.69
45
+ 1,43,196288,99883,96405,42,197367,100512,96855,-1079,-629,-450,-0.55
46
+ 1,44,201030,102481,98549,43,201748,102945,98803,-718,-464,-254,-0.36
47
+ 1,45,203801,103883,99918,44,204778,104510,100268,-977,-627,-350,-0.48
48
+ 1,46,208445,106356,102089,45,209310,106877,102433,-865,-521,-344,-0.41
49
+ 1,47,212244,108210,104034,46,213069,108766,104303,-825,-556,-269,-0.39
50
+ 1,48,225408,114194,111214,47,226154,114758,111396,-746,-564,-182,-0.33
51
+ 1,49,233104,117930,115174,48,234026,118523,115503,-922,-593,-329,-0.39
52
+ 1,50,229268,115593,113675,49,230145,116183,113962,-877,-590,-287,-0.38
53
+ 1,51,226156,113902,112254,50,227051,114484,112567,-895,-582,-313,-0.39
54
+ 1,52,219422,111084,108338,51,220394,111643,108751,-972,-559,-413,-0.44
55
+ 1,53,214830,109734,105096,52,215816,110268,105548,-986,-534,-452,-0.46
56
+ 1,54,211765,109077,102688,53,212857,109685,103172,-1092,-608,-484,-0.51
57
+ 1,55,215139,110748,104391,54,216329,111427,104902,-1190,-679,-511,-0.55
58
+ 1,56,155689,80558,75131,55,156692,81134,75558,-1003,-576,-427,-0.64
59
+ 1,57,198044,102304,95740,56,199367,103134,96233,-1323,-830,-493,-0.66
60
+ 1,58,182601,94434,88167,57,183876,95228,88648,-1275,-794,-481,-0.69
61
+ 1,59,168484,86931,81553,58,169870,87750,82120,-1386,-819,-567,-0.82
62
+ 1,60,157982,81229,76753,59,159706,82397,77309,-1724,-1168,-556,-1.08
63
+ 1,61,149351,76456,72895,60,150752,77421,73331,-1401,-965,-436,-0.93
64
+ 1,62,145487,74342,71145,61,146909,75239,71670,-1422,-897,-525,-0.97
65
+ 1,63,138790,70754,68036,62,140277,71739,68538,-1487,-985,-502,-1.06
66
+ 1,64,135713,69019,66694,63,137109,69909,67200,-1396,-890,-506,-1.02
67
+ 1,65,124772,62657,62115,64,126279,63666,62613,-1507,-1009,-498,-1.19
68
+ 1,66,124815,62230,62585,65,126425,63328,63097,-1610,-1098,-512,-1.27
69
+ 1,67,126565,62978,63587,66,128127,64068,64059,-1562,-1090,-472,-1.22
70
+ 1,68,125169,62072,63097,67,126888,63243,63645,-1719,-1171,-548,-1.35
71
+ 1,69,126611,62064,64547,68,128367,63303,65064,-1756,-1239,-517,-1.37
72
+ 1,70,134370,65346,69024,69,136356,66766,69590,-1986,-1420,-566,-1.46
73
+ 1,71,138037,66694,71343,70,140253,68245,72008,-2216,-1551,-665,-1.58
74
+ 1,72,148729,71230,77499,71,151342,73017,78325,-2613,-1787,-826,-1.73
75
+ 1,73,170208,80330,89878,72,173411,82519,90892,-3203,-2189,-1014,-1.85
76
+ 1,74,167808,78464,89344,73,171270,80807,90463,-3462,-2343,-1119,-2.02
77
+ 1,75,169772,78309,91463,74,173461,80844,92617,-3689,-2535,-1154,-2.13
78
+ 1,76,114262,51543,62719,75,117064,53366,63698,-2802,-1823,-979,-2.39
79
+ 1,77,100355,44328,56027,76,103012,46073,56939,-2657,-1745,-912,-2.58
80
+ 1,78,120888,52366,68522,77,124459,54662,69797,-3571,-2296,-1275,-2.87
81
+ 1,79,127677,54440,73237,78,131675,56930,74745,-3998,-2490,-1508,-3.04
82
+ 1,80,120499,50678,69821,79,124681,53262,71419,-4182,-2584,-1598,-3.35
83
+ 1,81,117791,48677,69114,80,122467,51468,70999,-4676,-2791,-1885,-3.82
84
+ 1,82,105098,42448,62650,81,109658,45108,64550,-4560,-2660,-1900,-4.16
85
+ 1,83,88263,34890,53373,82,92724,37423,55301,-4461,-2533,-1928,-4.81
86
+ 1,84,82240,31805,50435,83,86726,34285,52441,-4486,-2480,-2006,-5.17
87
+ 1,85,86261,32467,53794,84,91734,35405,56329,-5473,-2938,-2535,-5.97
88
+ 1,86,78107,28710,49397,85,83832,31648,52184,-5725,-2938,-2787,-6.83
89
+ 1,87,75111,26875,48236,86,81298,29933,51365,-6187,-3058,-3129,-7.61
90
+ 1,88,60474,20836,39638,87,66298,23673,42625,-5824,-2837,-2987,-8.78
91
+ 1,89,54990,18089,36901,88,61100,20940,40160,-6110,-2851,-3259,-10
sample_data/{東京都年別人口.csv → 東京都男女別人口_y23.csv} RENAMED
@@ -1,5 +1,4 @@
1
  和暦(年次)・(各年1月1日),西暦(年次)・(各年1月1日),総数/人口(人),総数/増減数(人),男女別/男/人口(人),男女別/男/増減数(人),男女別/女/人口(人),男女別/女/増減数(人),地域別/区部/人口(人),地域別/区部/増減数(人),地域別/市部/人口(人),地域別/市部/増減数(人),地域別/町村部/人口(人),地域別/町村部/増減数(人)
2
- 昭和32,1957,8259474,-,4252152,-,4007322,-,7142559,-,1035603,-,81312,-
3
  昭和33,1958,8524433,264959,4399593,147441,4124840,117518,7359266,216707,1084404,48801,80763,-549
4
  昭和34,1959,8828705,304272,4560824,161231,4267881,143041,7598964,239698,1146960,62556,82781,2018
5
  昭和35,1960,9106349,277644,4706355,145531,4399994,132113,7796178,197214,1227950,80990,82221,-560
@@ -66,6 +65,3 @@
66
  令和3,2021,13297089,39493,6537442,14629,6759647,24864,9115890,31248,4101271,9081,79928,-836
67
  令和4,2022,13277052,-20037,6522919,-14523,6754133,-5514,9092428,-23462,4105528,4257,79096,-832
68
  令和5,2023,13260553,-16499,6509894,-13025,6750659,-3474,9083767,-8661,4098680,-6848,78106,-990
69
- ,,,,,,,,,,,,,
70
- 住民基本台帳による東京都の世帯と人口 令和5年1月,,,,,,,,,,,,,
71
- 時系列 第3表  男女別人口及び地域別人口(日本人) (昭和32年~令和5年),,,,,,,,,,,,,
 
1
  和暦(年次)・(各年1月1日),西暦(年次)・(各年1月1日),総数/人口(人),総数/増減数(人),男女別/男/人口(人),男女別/男/増減数(人),男女別/女/人口(人),男女別/女/増減数(人),地域別/区部/人口(人),地域別/区部/増減数(人),地域別/市部/人口(人),地域別/市部/増減数(人),地域別/町村部/人口(人),地域別/町村部/増減数(人)
 
2
  昭和33,1958,8524433,264959,4399593,147441,4124840,117518,7359266,216707,1084404,48801,80763,-549
3
  昭和34,1959,8828705,304272,4560824,161231,4267881,143041,7598964,239698,1146960,62556,82781,2018
4
  昭和35,1960,9106349,277644,4706355,145531,4399994,132113,7796178,197214,1227950,80990,82221,-560
 
65
  令和3,2021,13297089,39493,6537442,14629,6759647,24864,9115890,31248,4101271,9081,79928,-836
66
  令和4,2022,13277052,-20037,6522919,-14523,6754133,-5514,9092428,-23462,4105528,4257,79096,-832
67
  令和5,2023,13260553,-16499,6509894,-13025,6750659,-3474,9083767,-8661,4098680,-6848,78106,-990
 
 
 
sample_data/桃太郎あらすじ.txt DELETED
@@ -1,163 +0,0 @@
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
- 「わたくしは、漕こぎ手てになりましょう。」
118
-  こう言いって、犬いぬは船ふねをこぎ出だしました。
119
- 「わたくしは、かじ取とりになりましょう。」
120
-  こう言いって、猿さるがかじに座すわりました。
121
- 「わたくしは物見ものみをつとめましょう。」
122
-  こう言いって、きじがへさきに立たちました。
123
-  うららかないいお天気てんきで、まっ青さおな海うみの上には、波なみ一つ立たちませんでした。稲妻いなづまが走はしるようだといおうか、矢やを射いるようだといおうか、目のまわるような速はやさで船ふねは走って行きました。ほんの一時間じかんも走はしったと思おもうころ、へさきに立たって向むこうをながめていたきじが、「あれ、あれ、島しまが。」とさけびながら、ぱたぱたと高たかい羽音はおとをさせて、空そらにとび上あがったと思おもうと、スウッとまっすぐに風かぜを切きって、飛とんでいきました。
124
-  桃太郎ももたろうもすぐきじの立たったあとから向むこうを見みますと、なるほど、遠とおい遠とおい海うみのはてに、ぼんやり雲くものような薄うすぐろいものが見みえました。船ふねの進すすむにしたがって、雲くものように見みえていたものが、だんだんはっきりと島しまの形かたちになって、あらわれてきました。
125
- 「ああ、見みえる、見みえる、鬼おにが島しまが見みえる。」
126
-  桃太郎ももたろうがこういうと、犬いぬも、猿さるも、声こえをそろえて、「万歳ばんざい、万歳ばんざい。」とさけびました。
127
-  見みる見みる鬼おにが島しまが近ちかくなって、もう硬かたい岩いわで畳たたんだ鬼おにのお城しろが見みえました。いかめしいくろがねの門もんの前まえに見みはりをしている鬼おにの兵隊へいたいのすがたも見みえました。
128
- そのお城しろのいちばん高たかい屋根やねの上に、きじがとまって、こちらを見みていました。
129
- こうして何年なんねんも、何年なんねんもこいで行いかなければならないという鬼おにが島しまへ、ほんの目をつぶっている間まに来きたのです。
130
-
131
-
132
-
133
-  桃太郎ももたろうは、犬いぬと猿さるをしたがえて、船ふねからひらりと陸おかの上にとび上あがりました。
134
-  見みはりをしていた鬼おにの兵隊へいたいは、その見みなれないすがたを見みると、びっくりして、あわてて門もんの中に逃にげ込こんで、くろがねの門もんを固かたくしめてしまいました。その時とき犬いぬは門もんの前まえに立たって、
135
- 「日本にほんの桃太郎ももたろうさんが、お前まえたちをせいばいにおいでになったのだぞ���あけろ、あけろ。」
136
-  とどなりながら、ドン、ドン、扉とびらをたたきました。鬼おにはその声こえを聞きくと、ふるえ上あがって、よけい一生懸命いっしょうけんめいに、中から押おさえていました。
137
-  するときじが屋根やねの上からとび下おりてきて、門もんを押おさえている鬼おにどもの目をつつきまわりましたから、鬼おにはへいこうして逃にげ出だしました。その間まに、猿さるがするすると高たかい岩壁いわかべをよじ登のぼっていって、ぞうさなく門もんを中からあけました。
138
- 「わあッ。」とときの声こえを上あげて、桃太郎ももたろうの主従しゅじゅうが、いさましくお城しろの中に攻せめ込こんでいきますと、鬼おにの大将たいしょうも大おおぜいの家来けらいを引ひき連つれて、一人一人ひとりひとり、太ふとい鉄てつの棒ぼうをふりまわしながら、「おう、おう。」とさけんで、向むかってきました。
139
-  けれども、体からだが大きいばっかりで、いくじのない鬼おにどもは、さんざんきじに目をつつかれた上に、こんどは犬いぬに向むこうずねをくいつかれたといっては、痛いたい、痛いたいと逃にげまわり、猿さるに顔かおを引ひっかかれたといっては、おいおい泣なき出だして、鉄てつの棒ぼうも何なにもほうり出だして、降参こうさんしてしまいました。
140
-  おしまいまでがまんして、たたかっていた鬼おにの大将たいしょうも、とうとう桃太郎ももたろうに組くみふせられてしまいました。桃太郎ももたろうは大きな鬼おにの背中せなかに、馬乗うまのりにまたがって、
141
- 「どうだ、これでも降参こうさんしないか。」
142
-  といって、ぎゅうぎゅう、ぎゅうぎゅう、押おさえつけました。
143
-  鬼おにの大将たいしょうは、桃太郎ももたろうの大力だいりきで首くびをしめられて、もう苦くるしくってたまりませんから、大おおつぶの涙なみだをぼろぼろこぼしながら、
144
- 「降参こうさんします、降参こうさんします。命いのちだけはお助たすけ下ください。その代かわりに宝物たからものをのこらずさし上あげます。」
145
-  こう言いって、ゆるしてもらいました。
146
-  鬼おにの大将たいしょうは約束やくそくのとおり、お城しろから、かくれみのに、かくれ笠がさ、うちでの小こづちに如意宝珠にょいほうじゅ、そのほかさんごだの、たいまいだの、るりだの、世界せかいでいちばん貴とうとい宝物たからものを山のように車くるまに積つんで出だしました。
147
-  桃太郎ももたろうはたくさんの宝物たからものをのこらず積つんで、三にんの家来けらいといっしょに、また船ふねに乗のりました。帰かえりは行きよりもまた一そう船ふねの走はしるのが速はやくって、間まもなく日本にほんの国くにに着つきました。
148
-  船ふねが陸おかに着つきますと、宝物たからものをいっぱい積つんだ車くるまを、犬いぬが先さきに立たって引ひき出だしました。きじが綱つなを引ひいて、猿さるがあとを押おしました。
149
- 「えんやらさ、えんやらさ。」
150
-  三にんは重おもそうに、かけ声ごえをかけかけ進すすんでいきました。
151
-  うちではおじいさんと、おばあさんが、かわるがわる、
152
- 「もう桃太郎ももたろうが帰かえりそうなものだが。」
153
-  と言いい言いい、首くびをのばして待まっていました。そこへ桃太郎ももたろうが三にんのりっぱな家来けらいに、ぶんどりの宝物たからものを引ひかせて、さもとくいらしい様子ようすをして帰かえって来きましたので、おじいさんもおばあさんも、目も鼻はなもなくして喜よろこびました。
154
- 「えらいぞ、えらいぞ、それこそ日本一にっぽんいちだ。」
155
-  とおじいさんは言いいました。
156
- 「まあ、まあ、けががなくって、何なによりさ。」
157
-  とおばあさんは言いいました。
158
-  桃太郎ももたろうは、その時とき犬いぬと猿さるときじの方ほうを向むいてこう言いいました。
159
- 「どうだ。鬼おにせいばつはおもしろかったなあ。」
160
-  犬いぬはワン、ワンとうれしそうにほえながら、前足まえあしで立たちました。
161
-  猿さるはキャッ、キャッと笑わらいながら、白しろい歯はをむき出だしました。
162
-  きじはケン、ケンと鳴なきながら、くるくると宙返ちゅうがえりをしました。
163
-  空そらは青々あおあおと晴はれ上あが���て、お庭にわには桜さくらの花はなが咲さき乱みだれていました。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
sample_data/練馬区年齢別人口.csv DELETED
@@ -1,108 +0,0 @@
1
- 年齢[歳],合 計[人],男性合計[人],女性合計[人]
2
- 総 数,740410,358101,382309
3
- 0,4877,2467,2410
4
- 1,5161,2691,2470
5
- 2,5215,2700,2515
6
- 3,5482,2796,2686
7
- 4,5350,2730,2620
8
- 5,5773,2982,2791
9
- 6,5779,2915,2864
10
- 7,5808,2991,2817
11
- 8,6174,3121,3053
12
- 9,5844,2979,2865
13
- 10,5935,3034,2901
14
- 11,5731,2984,2747
15
- 12,6030,3090,2940
16
- 13,6017,3067,2950
17
- 14,5924,3005,2919
18
- 15,6107,3227,2880
19
- 16,5948,3086,2862
20
- 17,5757,2994,2763
21
- 18,6272,3165,3107
22
- 19,6704,3349,3355
23
- 20,7384,3778,3606
24
- 21,7855,3855,4000
25
- 22,8872,4313,4559
26
- 23,9817,4687,5130
27
- 24,9955,4735,5220
28
- 25,10560,4957,5603
29
- 26,10590,4940,5650
30
- 27,10394,4937,5457
31
- 28,10585,5036,5549
32
- 29,10576,5078,5498
33
- 30,10051,4750,5301
34
- 31,10165,4927,5238
35
- 32,10001,4860,5141
36
- 33,9913,4777,5136
37
- 34,9907,4849,5058
38
- 35,9901,4862,5039
39
- 36,9984,4935,5049
40
- 37,9873,4930,4943
41
- 38,10320,5145,5175
42
- 39,10588,5233,5355
43
- 40,10370,5184,5186
44
- 41,10188,5155,5033
45
- 42,10125,5093,5032
46
- 43,10478,5302,5176
47
- 44,10524,5315,5209
48
- 45,10590,5350,5240
49
- 46,10832,5389,5443
50
- 47,11185,5682,5503
51
- 48,11515,5819,5696
52
- 49,12151,6070,6081
53
- 50,12379,6181,6198
54
- 51,12037,5958,6079
55
- 52,11894,5959,5935
56
- 53,12058,6047,6011
57
- 54,11870,5952,5918
58
- 55,11698,5795,5903
59
- 56,11267,5730,5537
60
- 57,9580,4980,4600
61
- 58,10722,5531,5191
62
- 59,10146,5070,5076
63
- 60,9616,4892,4724
64
- 61,8807,4429,4378
65
- 62,8343,4212,4131
66
- 63,8184,4102,4082
67
- 64,7931,3987,3944
68
- 65,7284,3689,3595
69
- 66,7084,3517,3567
70
- 67,6646,3355,3291
71
- 68,6659,3326,3333
72
- 69,6306,3191,3115
73
- 70,6688,3295,3393
74
- 71,6688,3201,3487
75
- 72,7034,3378,3656
76
- 73,7650,3588,4062
77
- 74,8162,3820,4342
78
- 75,8180,3760,4420
79
- 76,7758,3526,4232
80
- 77,4776,2028,2748
81
- 78,5084,2194,2890
82
- 79,6204,2546,3658
83
- 80,5990,2493,3497
84
- 81,5974,2359,3615
85
- 82,5744,2242,3502
86
- 83,5124,1966,3158
87
- 84,4384,1639,2745
88
- 85,4477,1642,2835
89
- 86,4305,1569,2736
90
- 87,4266,1562,2704
91
- 88,3668,1289,2379
92
- 89,3132,1047,2085
93
- 90,2918,930,1988
94
- 91,2411,750,1661
95
- 92,1980,598,1382
96
- 93,1575,440,1135
97
- 94,1244,298,946
98
- 95,986,237,749
99
- 96,751,184,567
100
- 97,555,116,439
101
- 98,405,97,308
102
- 99,229,35,194
103
- 100,161,20,141
104
- 101,103,16,87
105
- 102,58,6,52
106
- 103,52,6,46
107
- 104歳以上,46,5,41
108
- 不詳者,0,0,0