stardust-coder commited on
Commit
d496a0a
·
1 Parent(s): fbb0032

[mod] add modes

Browse files
Files changed (2) hide show
  1. .gitignore +2 -0
  2. app.py +24 -9
.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ app_v1.py
2
+ app_v2.py
app.py CHANGED
@@ -30,7 +30,8 @@ async def astream_generate(prompt: str):
30
  params = SamplingParams(
31
  temperature=0.0,
32
  max_tokens=4096,
33
- stop=STOP_STRINGS, # ★ここがポイント
 
34
  )
35
 
36
  async for out in model.generate(prompt, params, request_id=str(uuid.uuid4())):
@@ -53,18 +54,27 @@ async def astream_generate(prompt: str):
53
  yield chunk
54
 
55
  # Gradio 用の応答関数(同期ジェネレータ)
56
- def respond(user_input, history):
57
  history = history or []
58
  # システムプロンプトと過去履歴を組み立て
59
- base_prompt = "以下は親切で何でも答えてくれるAIアシスタントとの会話です。\n"
 
60
  for u, b in history:
61
  base_prompt += f"ユーザー: {u}\nアシスタント: {b}\n"
 
 
 
 
 
 
62
  base_prompt += f"ユーザー: {user_input}\nアシスタント:"
63
 
64
  # ユーザー発話と空応答を履歴に追加
65
  history.append((user_input, ""))
66
 
67
  # 単一のイベントループを使ってストリーミング
 
 
68
  agen = astream_generate(base_prompt)
69
  try:
70
  while True:
@@ -74,19 +84,24 @@ def respond(user_input, history):
74
  yield history, history
75
  except StopAsyncIteration:
76
  return
77
-
78
- # Gradio UI 定義
79
  with gr.Blocks() as demo:
80
  gr.Markdown("# 💊 製薬に関する質問をしてみてください。")
81
  gr.Markdown("※ ストリーミングデモ用コードです。")
82
 
 
 
 
 
 
 
83
  chatbot = gr.Chatbot()
84
  msg = gr.Textbox(label="あなたのメッセージ (Enterで送信)")
85
  send = gr.Button("チャットを送信")
86
  clear = gr.Button("チャット履歴をクリア")
87
  state = gr.State([])
88
 
89
- # ▼ プリセット(クリックでテキストボックスに反映)
90
  gr.Markdown("### 🔧 すぐ使えるプリセット")
91
  preset_list = [
92
  "グレープフルーツと薬を一緒に飲んじゃだめなんですか?",
@@ -99,9 +114,9 @@ with gr.Blocks() as demo:
99
  label="プリセット(クリックで入力欄に反映)"
100
  )
101
 
102
- # 既存の送信/クリア動作
103
- msg.submit(respond, [msg, state], [chatbot, state]).then(lambda: "", None, msg)
104
- send.click(respond, [msg, state], [chatbot, state]).then(lambda: "", None, msg)
105
  clear.click(lambda: ([], []), None, [chatbot, state])
106
 
107
  # エントリポイント
 
30
  params = SamplingParams(
31
  temperature=0.0,
32
  max_tokens=4096,
33
+ repetition_penalty=1.2, # 回答重複の防止
34
+ stop=STOP_STRINGS,
35
  )
36
 
37
  async for out in model.generate(prompt, params, request_id=str(uuid.uuid4())):
 
54
  yield chunk
55
 
56
  # Gradio 用の応答関数(同期ジェネレータ)
57
+ def respond(user_input, history, mode):
58
  history = history or []
59
  # システムプロンプトと過去履歴を組み立て
60
+ base_prompt = "あなたは製薬に関する専門家です。製薬に関するユーザーの質問に親切に回答してください。参照した文献は常に提示してください。\n"
61
+
62
  for u, b in history:
63
  base_prompt += f"ユーザー: {u}\nアシスタント: {b}\n"
64
+
65
+ if "製薬の専門家" in mode:
66
+ base_prompt += "あなたは製薬に関する専門家です。製薬に関するユーザーの質問に親切に回答してください。参照した文献は常に提示してください。\n"
67
+ if "グローバル対応" in mode:
68
+ base_prompt += "グローバル基準に照らした回答をしてください。\n"
69
+
70
  base_prompt += f"ユーザー: {user_input}\nアシスタント:"
71
 
72
  # ユーザー発話と空応答を履歴に追加
73
  history.append((user_input, ""))
74
 
75
  # 単一のイベントループを使ってストリーミング
76
+ print("log: base_prompt")
77
+ print(base_prompt)
78
  agen = astream_generate(base_prompt)
79
  try:
80
  while True:
 
84
  yield history, history
85
  except StopAsyncIteration:
86
  return
87
+
 
88
  with gr.Blocks() as demo:
89
  gr.Markdown("# 💊 製薬に関する質問をしてみてください。")
90
  gr.Markdown("※ ストリーミングデモ用コードです。")
91
 
92
+ mode = gr.CheckboxGroup(
93
+ label="モード",
94
+ choices=["製薬の専門家", "グローバル対応", "スイッチ3"],
95
+ value=[],
96
+ )
97
+
98
  chatbot = gr.Chatbot()
99
  msg = gr.Textbox(label="あなたのメッセージ (Enterで送信)")
100
  send = gr.Button("チャットを送信")
101
  clear = gr.Button("チャット履歴をクリア")
102
  state = gr.State([])
103
 
104
+ # ▼ プリセット(クリックでテキストボックスに反映)
105
  gr.Markdown("### 🔧 すぐ使えるプリセット")
106
  preset_list = [
107
  "グレープフルーツと薬を一緒に飲んじゃだめなんですか?",
 
114
  label="プリセット(クリックで入力欄に反映)"
115
  )
116
 
117
+ # 送信ボタンやEnter送信でチェックボックスの状態も一緒に渡す
118
+ msg.submit(respond, [msg, state, mode], [chatbot, state]).then(lambda: "", None, msg)
119
+ send.click(respond, [msg, state, mode], [chatbot, state]).then(lambda: "", None, msg)
120
  clear.click(lambda: ([], []), None, [chatbot, state])
121
 
122
  # エントリポイント