zzc0208 commited on
Commit
86d0f8b
1 Parent(s): 27f9849

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +78 -46
app.py CHANGED
@@ -12,13 +12,14 @@ from utils import *
12
  def set_interface_language(lang):
13
  if lang == "Chinese":
14
  return {
15
- "title": "# LLM角色扮演竞技场:在角色扮演场景中评估LLMs的表现",
16
  "intro": """
17
  ## 📜 规则
18
  #### · 与两个匿名的模型(例如 Claude, Gemini, Llama )同时进行角色扮演(他们会成为一个相同的角色),投票选出更好的那个
19
  #### · 你可以一直对话直到选出赢家(单轮对话上限是5轮)
20
- #### · [角色来自Rubii.ai, 想要和角色进行更长久的角色扮演?来Rubii.ai吧。](https://rubii.ai/)
21
  #### · 想要开始对话,您需要先在"选择角色"中选择一个角色,之后您需要在"选择时刻"中选择一个时刻,时刻是给角色选一个场景和开场白,这样可以与角色在想要的场景中进行对话。
 
 
22
  """,
23
  "avatar_label": "角色图片",
24
  "char_choice_label": "选择角色",
@@ -48,9 +49,9 @@ def set_interface_language(lang):
48
  "selected_char_label": "当前选择的角色",
49
  "contant": """
50
  ## 联系我们
 
51
  ### 我们正在积极寻求更多模型愿意参与我们排行榜,
52
  ### 我们也在寻求合作,如果您有意的话,欢迎请联系我们。**Email:** [[email protected]](mailto:[email protected])
53
- ### 您可以在我们的[Discord](https://discord.gg/jwcTfTpYj5)反馈遇到的BUG和问题
54
  ## 服务条款
55
  ### 用户在使用服务之前需同意以下条款:
56
  ### 该服务为研究预览版。它仅提供有限的安全措施,可能会生成冒犯性内容。不得将该服务用于任何非法、有害、暴力、种族主义或性相关的目的。请勿上传任何私人信息。该服务会收集用户的对话数据,包括文字和图像,并保留在创作共用署名(CC-BY)或类似许可证下分发这些数据的权利。
@@ -58,13 +59,14 @@ def set_interface_language(lang):
58
  }
59
  elif lang == "English":
60
  return {
61
- "title": "# Roleplay LLM Arena: Benchmarking LLMs in the Roleplay Scenario",
62
  "intro": """
63
  ## 📜 Rules
64
  #### · Engage in roleplay with two anonymous models (e.g., Claude, Gemini, Llama) simultaneously, as they take on the same character. Vote for the one that performs better.
65
  #### · You can continue the conversation until you select a winner (the maximum number of dialogue rounds per session is 5).
66
- #### · [The character comes from Rubii.ai. Want to engage in longer roleplay sessions with the character? Come to Rubii.ai.](https://rubii.ai/)
67
  #### · To start the comparison, you need to first select a character in "Choose Character." Then, you need to select a "Moment" in "Choose Moment." A moment is used to set a scene and opening line for the character, allowing you to converse with the character in the desired scenario.
 
 
68
  """,
69
  "avatar_label": "Character Image",
70
  "char_choice_label": "Select Character",
@@ -94,9 +96,9 @@ def set_interface_language(lang):
94
  "selected_char_label": "Currently Selected Character",
95
  "contant": """
96
  ## Contact Us
 
97
  ### We are actively seeking more models willing to participate in our leaderboard.
98
  ### We are also looking for collaboration opportunities. If you are interested, please contact us. **Email:** [[email protected]](mailto:[email protected]).
99
- ### You can report any bugs and issues on our [Discord](https://discord.gg/jwcTfTpYj5).
100
  ## Terms of Service
101
  ### Users must agree to the following terms before using the service:
102
  ### This service is a research preview. It provides limited safety measures and may generate offensive content. The service should not be used for any illegal, harmful, violent, racist, or sexually related purposes. Please do not upload any personal information. The service collects user conversation data, including text and images, and reserves the right to distribute this data under Creative Commons Attribution (CC-BY) or similar licenses.
@@ -104,13 +106,14 @@ def set_interface_language(lang):
104
  }
105
  elif lang == "Japanese":
106
  return {
107
- "title": "# LLMロールプレイアリーナ:ロールプレイシナリオでのLLMのパフォーマンスを評価",
108
  "intro": """
109
  ## 📜 ルール
110
  #### · 2つの匿名モデル(例: Claude, Gemini, Llama)と同時にロールプレイを行い(彼らは同じキャラクターになります)、より良い方に投票してください。
111
  #### · 勝者が決まるまで会話を続けることができます(1ターンあたりの会話の上限は5ターンです)。
112
- #### · [キャラクターはRubii.aiから来ました。キャラクターともっと長いロールプレイをしたいですか?Rubii.aiに来てください。](https://rubii.ai/)]
113
  #### · 会話を始めるには、まず「キャラクターを選択」でキャラクターを選択し、「時刻を選択」でシーンとオープニングを選択してください。これにより、キャラクターと望むシーンで会話ができます。
 
 
114
  """,
115
  "avatar_label": "キャラクター画像",
116
  "char_choice_label": "キャラクターを選択",
@@ -140,9 +143,9 @@ def set_interface_language(lang):
140
  "selected_char_label": "現在選択されているキャラクター",
141
  "contant": """
142
  ## お問い合わせ
 
143
  ### 私たちは、リーダーボードに参加したいモデルを積極的に探しています。
144
  ### 私たちはコラボレーションの機会も探しています。興味がある方は、ぜひご連絡ください。**メール:** [[email protected]](mailto:[email protected])。
145
- ### バグや問題が発生した場合は、[Discord](https://discord.gg/jwcTfTpYj5)で報告できます。
146
  ## 利用規約
147
  ### サービスを利用する前に、ユーザーは以下の規約に同意する必要があります:
148
  ### 本サービスは研究プレビュー版です。限られた安全対策を提供しており、攻撃的な内容を生成する可能性があります。本サービスを違法、有害、暴力的、人種差別的、または性的な目的で使用しないでください。個人情報のアップロードは避けてください。本サービスはユーザーの会話データ(テキストおよび画像)を収集し、クリエイティブ・コモンズ・ライセンス(CC-BY)または同様のライセンスの下でこれらのデータを配布する権利を保有します。
@@ -151,13 +154,14 @@ def set_interface_language(lang):
151
 
152
  elif lang == "Korean":
153
  return {
154
- "title": "# LLM 역할 수행 경기장: 역할 수행 시나리오에서 LLM의 성능 평가",
155
  "intro": """
156
  ## 📜 규칙
157
  #### · 두 개의 익명의 모델(예: Claude, Gemini, Llama)과 동시에 역할 수행을 진행하고, 더 나은 모델을 선택하세요.
158
  #### · 우승자를 선택할 때까지 계속 대화를 진행할 수 있습니다(최대 5라운드).
159
- #### · [캐릭터는 Rubii.ai에서 왔습니다. 캐릭터와 더 긴 롤플레이를 하고 싶으신가요? Rubii.ai로 오세요.](https://rubii.ai/)
160
  #### · 대화를 시작하려면 먼저 "캐릭터 선택"에서 캐릭터를 선택해야 하며, 그 다음 "시나리오 선택"에서 시나리오를 선택해야 합니다. 시나리오는 캐릭터에게 장면과 오프닝을 제공하여 원하는 시나리오에서 대화를 진행할 수 있게 합니다.
 
 
161
  """,
162
  "avatar_label": "캐릭터 이미지",
163
  "char_choice_label": "캐릭터 선택",
@@ -187,9 +191,9 @@ def set_interface_language(lang):
187
  "selected_char_label": "현재 선택된 캐릭터",
188
  "contant": """
189
  ## 문의하기
 
190
  ### 우리는 리더보드에 참여할 의향이 있는 모델을 적극적으로 찾고 있습니다.
191
  ### 우리는 또한 협력 기회를 모색하고 있습니다. 관심이 있으시면 연락해 주세요. **이메일:** [[email protected]](mailto:[email protected])
192
- ### 버그 및 문제는 [Discord](https://discord.gg/jwcTfTpYj5)에서 보고할 수 있습니다.
193
  ## 이용 약관
194
  ### 사용자는 서비스를 사용하기 전에 다음 약관에 동의해야 합니다:
195
  ### 이 서비스는 연구 미리보기 버전입니다. 제한된 안전 조치를 제공하며, 불쾌한 콘텐츠를 생성할 수 있습니다. 이 서비스를 불법적, 해롭거나, 폭력적이거나, 인종차별적이거나, 성적으로 관련된 목적으로 사용하지 마십시오. 개인 정보를 업로드하지 마십시오. 이 서비스는 사용자 대화 데이터(텍스트 및 이미지)를 수집하며, 크리에이티브 커먼즈 저작자 표시(CC-BY) 또는 유사한 라이선스 하에 이 데이터를 배포할 권리를 보유합니다.
@@ -421,13 +425,12 @@ def refresh_chat(moment):
421
  def update_language(lang):
422
  print("update_language", lang)
423
  text = set_interface_language(lang)
424
- characters = recommand_character(lang)
425
- characters = [[id_to_avatar(item["_id"]), item["name"]] for item in characters] # 只保留头像和名称
426
  return (
427
  text["title"],
428
  text["intro"],
429
  None,
430
- gr.update(label=text["char_choice_label"], value=characters),
431
  gr.update(label=text["preset_prompt_label"]),
432
  gr.update(value=text["refresh_button"]),
433
  gr.update(placeholder=text["bio_placeholder"], label=text["bio_label"]),
@@ -446,7 +449,8 @@ def update_language(lang):
446
  gr.update(label=text["select_language"], value=lang),
447
  text["score_instruction"],
448
  text["contant"],
449
- gr.update(value=lang,label=text["select_language2"])
 
450
  )
451
 
452
 
@@ -467,7 +471,36 @@ def auto_i18n(request: gr.Request):
467
 
468
  def init_and_update(request: gr.Request):
469
  detected_lang = auto_i18n(request)
470
- return [detected_lang] + list(update_language(detected_lang))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
471
  def passive_language_change(lang):
472
  return gr.update(value=lang)
473
 
@@ -479,34 +512,28 @@ def update_character_gallery(language):
479
  characters = get_character_gallery(language)
480
  return gr.update(value=characters)
481
 
482
- def select_character(evt: gr.SelectData, gallery, language):
483
- print(f"Event triggered. Index: {evt.index}")
484
- print(f"Selected character from gallery: {gallery[evt.index]}")
485
- if evt.index >= len(gallery):
486
- return None, None
487
-
488
- selected_char = gallery[evt.index]
489
- selected_char_id = os.path.basename(selected_char[0]).split('_')[1].split('.')[0]
490
- print(f"Extracted character ID: {selected_char_id}")
491
-
492
- characters = recommand_character(language)
493
- print(f"Number of characters from recommand_character: {len(characters)}")
494
-
495
- for char in characters:
496
- if char['_id'].split('_')[1] == selected_char_id:
497
- print(f"Match found: {char['name']}, {char['_id']}")
498
- return char['name'], char['_id']
499
-
500
- print("No match found")
501
- return None, None
502
-
503
  def refresh_character_gallery(language):
504
  characters = recommand_character(language)
505
  gallery_data = [[id_to_avatar(char['_id']), char['name']] for char in characters]
506
- return gallery_data
 
 
 
 
 
 
 
 
 
 
 
 
 
 
507
 
508
 
509
  with gr.Blocks() as demo:
 
510
  # load 的时候就会刷新掉default_language
511
  default_language = gr.State("Chinese")
512
  language = "Chinese"
@@ -620,13 +647,14 @@ with gr.Blocks() as demo:
620
  refresh_button.click(
621
  fn=refresh_character_gallery,
622
  inputs=[language],
623
- outputs=[char_gallery]
624
  )
625
  char_gallery.select(
626
  fn=select_character,
627
- inputs=[char_gallery, language],
628
  outputs=[selected_char_name, selected_char_id]
629
  )
 
630
  selected_char_id.change(
631
  fn=update_preset_prompt,
632
  inputs=[selected_char_id, language],
@@ -678,7 +706,8 @@ with gr.Blocks() as demo:
678
  language,
679
  score_instruction,
680
  contant,
681
- language2
 
682
  ],
683
  )
684
  language2.change(
@@ -686,11 +715,12 @@ with gr.Blocks() as demo:
686
  inputs=language2,
687
  outputs=language
688
  )
689
- char_gallery.change(
690
- fn=update_preset_prompt,
691
- inputs=[char_gallery, language],
692
- outputs=[preset_prompt, avatar_image],
693
  )
 
694
  preset_prompt.change(
695
  fn=update_chat_and_avatar,
696
  inputs=[preset_prompt],
@@ -834,9 +864,11 @@ with gr.Blocks() as demo:
834
  language,
835
  score_instruction,
836
  contant,
 
837
  ],
838
  )
839
 
 
840
  if __name__ == "__main__":
841
  demo.queue(default_concurrency_limit=8).launch(
842
  server_name="0.0.0.0",
 
12
  def set_interface_language(lang):
13
  if lang == "Chinese":
14
  return {
15
+ "title": "# LLM角色扮演竞技场:在角色扮演场景中评估LLMs的表现\n\n## 点赞❤️这个Space,下次还能找到!",
16
  "intro": """
17
  ## 📜 规则
18
  #### · 与两个匿名的模型(例如 Claude, Gemini, Llama )同时进行角色扮演(他们会成为一个相同的角色),投票选出更好的那个
19
  #### · 你可以一直对话直到选出赢家(单轮对话上限是5轮)
 
20
  #### · 想要开始对话,您需要先在"选择角色"中选择一个角色,之后您需要在"选择时刻"中选择一个时刻,时刻是给角色选一个场景和开场白,这样可以与角色在想要的场景中进行对话。
21
+ ### [角色来自Rubii.ai, 想要和角色进行更长久的角色扮演?来Rubii.ai吧。](https://rubii.ai/)
22
+ ### [在线免费语音合成以及声音克隆](https://huggingface.co/spaces/YoMioAI/Free-Zero-shot-TTS-by-GSV-Infer-Engine)
23
  """,
24
  "avatar_label": "角色图片",
25
  "char_choice_label": "选择角色",
 
49
  "selected_char_label": "当前选择的角色",
50
  "contant": """
51
  ## 联系我们
52
+ ### [技术讨论,或有任何问题,或是对LLM角色扮演感兴趣,欢迎加入我们的Discord](https://discord.gg/DyECTyqhkC)
53
  ### 我们正在积极寻求更多模型愿意参与我们排行榜,
54
  ### 我们也在寻求合作,如果您有意的话,欢迎请联系我们。**Email:** [[email protected]](mailto:[email protected])
 
55
  ## 服务条款
56
  ### 用户在使用服务之前需同意以下条款:
57
  ### 该服务为研究预览版。它仅提供有限的安全措施,可能会生成冒犯性内容。不得将该服务用于任何非法、有害、暴力、种族主义或性相关的目的。请勿上传任何私人信息。该服务会收集用户的对话数据,包括文字和图像,并保留在创作共用署名(CC-BY)或类似许可证下分发这些数据的权利。
 
59
  }
60
  elif lang == "English":
61
  return {
62
+ "title": "# Roleplay LLM Arena: Benchmarking LLMs in the Roleplay Scenario\n\n## Like❤️ this Space, you can find it next time!",
63
  "intro": """
64
  ## 📜 Rules
65
  #### · Engage in roleplay with two anonymous models (e.g., Claude, Gemini, Llama) simultaneously, as they take on the same character. Vote for the one that performs better.
66
  #### · You can continue the conversation until you select a winner (the maximum number of dialogue rounds per session is 5).
 
67
  #### · To start the comparison, you need to first select a character in "Choose Character." Then, you need to select a "Moment" in "Choose Moment." A moment is used to set a scene and opening line for the character, allowing you to converse with the character in the desired scenario.
68
+ ### [Characters are from Rubii.ai. Want to roleplay with characters for a longer time? Come to Rubii.ai.](https://rubii.ai/)
69
+ ### [Online free voice synthesis and voice cloning](https://huggingface.co/spaces/YoMioAI/Free-Zero-shot-TTS-by-GSV-Infer-Engine)
70
  """,
71
  "avatar_label": "Character Image",
72
  "char_choice_label": "Select Character",
 
96
  "selected_char_label": "Currently Selected Character",
97
  "contant": """
98
  ## Contact Us
99
+ ### [Technical discussion, or any questions, or if you are interested in LLM roleplay, welcome to join our Discord](https://discord.gg/DyECTyqhkC)
100
  ### We are actively seeking more models willing to participate in our leaderboard.
101
  ### We are also looking for collaboration opportunities. If you are interested, please contact us. **Email:** [[email protected]](mailto:[email protected]).
 
102
  ## Terms of Service
103
  ### Users must agree to the following terms before using the service:
104
  ### This service is a research preview. It provides limited safety measures and may generate offensive content. The service should not be used for any illegal, harmful, violent, racist, or sexually related purposes. Please do not upload any personal information. The service collects user conversation data, including text and images, and reserves the right to distribute this data under Creative Commons Attribution (CC-BY) or similar licenses.
 
106
  }
107
  elif lang == "Japanese":
108
  return {
109
+ "title": "# LLMロールプレイアリーナ:ロールプレイシナリオでのLLMのパフォーマンスを評価\n\n## Like❤️this Space!",
110
  "intro": """
111
  ## 📜 ルール
112
  #### · 2つの匿名モデル(例: Claude, Gemini, Llama)と同時にロールプレイを行い(彼らは同じキャラクターになります)、より良い方に投票してください。
113
  #### · 勝者が決まるまで会話を続けることができます(1ターンあたりの会話の上限は5ターンです)。
 
114
  #### · 会話を始めるには、まず「キャラクターを選択」でキャラクターを選択し、「時刻を選択」でシーンとオープニングを選択してください。これにより、キャラクターと望むシーンで会話ができます。
115
+ ### [キャラクターはRubii.aiから来ています。キャラクターとのロールプレイをより長く続けたい場合は、Rubii.aiに来てください。](https://rubii.ai/)
116
+ ### [オンライン無料音声合成と声のクローン](https://huggingface.co/spaces/YoMioAI/Free-Zero-shot-TTS-by-GSV-Infer-Engine)
117
  """,
118
  "avatar_label": "キャラクター画像",
119
  "char_choice_label": "キャラクターを選択",
 
143
  "selected_char_label": "現在選択されているキャラクター",
144
  "contant": """
145
  ## お問い合わせ
146
+ ### [技術的な議論、またはご質問、またはLLMロールプレイに興味がある場合は、私たちのDiscordにご参加ください。](https://discord.gg/DyECTyqhkC)
147
  ### 私たちは、リーダーボードに参加したいモデルを積極的に探しています。
148
  ### 私たちはコラボレーションの機会も探しています。興味がある方は、ぜひご連絡ください。**メール:** [[email protected]](mailto:[email protected])。
 
149
  ## 利用規約
150
  ### サービスを利用する前に、ユーザーは以下の規約に同意する必要があります:
151
  ### 本サービスは研究プレビュー版です。限られた安全対策を提供しており、攻撃的な内容を生成する可能性があります。本サービスを違法、有害、暴力的、人種差別的、または性的な目的で使用しないでください。個人情報のアップロードは避けてください。本サービスはユーザーの会話データ(テキストおよび画像)を収集し、クリエイティブ・コモンズ・ライセンス(CC-BY)または同様のライセンスの下でこれらのデータを配布する権利を保有します。
 
154
 
155
  elif lang == "Korean":
156
  return {
157
+ "title": "# LLM 역할 수행 경기장: 역할 수행 시나리오에서 LLM의 성능 평가\n\n## Like❤️this Space!",
158
  "intro": """
159
  ## 📜 규칙
160
  #### · 두 개의 익명의 모델(예: Claude, Gemini, Llama)과 동시에 역할 수행을 진행하고, 더 나은 모델을 선택하세요.
161
  #### · 우승자를 선택할 때까지 계속 대화를 진행할 수 있습니다(최대 5라운드).
 
162
  #### · 대화를 시작하려면 먼저 "캐릭터 선택"에서 캐릭터를 선택해야 하며, 그 다음 "시나리오 선택"에서 시나리오를 선택해야 합니다. 시나리오는 캐릭터에게 장면과 오프닝을 제공하여 원하는 시나리오에서 대화를 진행할 수 있게 합니다.
163
+ ### [캐릭터는 Rubii.ai에서 오고 있습니다. 캐릭터와 더 긴 역할 수행을 하고 싶으신가요? Rubii.ai로 오세요.](https://rubii.ai/)
164
+ ### [온라인 무료 음성 합성 및 음성 클론](https://huggingface.co/spaces/YoMioAI/Free-Zero-shot-TTS-by-GSV-Infer-Engine)
165
  """,
166
  "avatar_label": "캐릭터 이미지",
167
  "char_choice_label": "캐릭터 선택",
 
191
  "selected_char_label": "현재 선택된 캐릭터",
192
  "contant": """
193
  ## 문의하기
194
+ ### [기술적인 논의, 또는 문의사항, 또는 LLM 역할 수행에 관심이 있으실 경우, 우리의 Discord에 참여해 주세요.](https://discord.gg/DyECTyqhkC)
195
  ### 우리는 리더보드에 참여할 의향이 있는 모델을 적극적으로 찾고 있습니다.
196
  ### 우리는 또한 협력 기회를 모색하고 있습니다. 관심이 있으시면 연락해 주세요. **이메일:** [[email protected]](mailto:[email protected])
 
197
  ## 이용 약관
198
  ### 사용자는 서비스를 사용하기 전에 다음 약관에 동의해야 합니다:
199
  ### 이 서비스는 연구 미리보기 버전입니다. 제한된 안전 조치를 제공하며, 불쾌한 콘텐츠를 생성할 수 있습니다. 이 서비스를 불법적, 해롭거나, 폭력적이거나, 인종차별적이거나, 성적으로 관련된 목적으로 사용하지 마십시오. 개인 정보를 업로드하지 마십시오. 이 서비스는 사용자 대화 데이터(텍스트 및 이미지)를 수집하며, 크리에이티브 커먼즈 저작자 표시(CC-BY) 또는 유사한 라이선스 하에 이 데이터를 배포할 권리를 보유합니다.
 
425
  def update_language(lang):
426
  print("update_language", lang)
427
  text = set_interface_language(lang)
428
+ gallery_data, characters = refresh_character_gallery(lang)
 
429
  return (
430
  text["title"],
431
  text["intro"],
432
  None,
433
+ gr.update(label=text["char_choice_label"], value=gallery_data),
434
  gr.update(label=text["preset_prompt_label"]),
435
  gr.update(value=text["refresh_button"]),
436
  gr.update(placeholder=text["bio_placeholder"], label=text["bio_label"]),
 
449
  gr.update(label=text["select_language"], value=lang),
450
  text["score_instruction"],
451
  text["contant"],
452
+ gr.update(value=lang,label=text["select_language2"]),
453
+ characters # 新增的输出,用于更新 characters_state
454
  )
455
 
456
 
 
471
 
472
  def init_and_update(request: gr.Request):
473
  detected_lang = auto_i18n(request)
474
+ text = set_interface_language(detected_lang)
475
+ gallery_data, characters = refresh_character_gallery(detected_lang)
476
+ return [
477
+ detected_lang,
478
+ text["title"],
479
+ text["intro"],
480
+ None,
481
+ gr.update(label=text["char_choice_label"], value=gallery_data),
482
+ gr.update(label=text["preset_prompt_label"]),
483
+ gr.update(value=text["refresh_button"]),
484
+ gr.update(placeholder=text["bio_placeholder"], label=text["bio_label"]),
485
+ gr.update(label=text["chatbox1_label"]),
486
+ gr.update(label=text["chatbox2_label"]),
487
+ gr.update(placeholder=text["user_input_placeholder"]),
488
+ gr.update(value=text["battle_button"]),
489
+ gr.update(placeholder=text["result_placeholder"]),
490
+ gr.update(value=text["refresh_chat_button"]),
491
+ gr.update(value=text["model1win_button"]),
492
+ gr.update(value=text["model2win_button"]),
493
+ gr.update(value=text["tie_button"]),
494
+ gr.update(value=text["bothbad_button"]),
495
+ gr.update(label=text["random_model"]),
496
+ gr.update(label=text["ranking_tab"]),
497
+ gr.update(label=text["select_language"], value=detected_lang),
498
+ text["score_instruction"],
499
+ text["contant"],
500
+ characters # 新增的输出
501
+ ]
502
+
503
+
504
  def passive_language_change(lang):
505
  return gr.update(value=lang)
506
 
 
512
  characters = get_character_gallery(language)
513
  return gr.update(value=characters)
514
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
515
  def refresh_character_gallery(language):
516
  characters = recommand_character(language)
517
  gallery_data = [[id_to_avatar(char['_id']), char['name']] for char in characters]
518
+ return gallery_data, characters
519
+
520
+ def select_character(evt: gr.SelectData, characters):
521
+ index = evt.index
522
+ print(f"Event triggered. Index: {index}")
523
+ if index >= len(characters):
524
+ return None, None
525
+
526
+ selected_char = characters[index]
527
+ selected_char_name = selected_char['name']
528
+ selected_char_id = selected_char['_id']
529
+ print(f"Selected character: {selected_char_name}, ID: {selected_char_id}")
530
+
531
+ return selected_char_name, selected_char_id
532
+
533
 
534
 
535
  with gr.Blocks() as demo:
536
+ characters_state = gr.State(value=[])
537
  # load 的时候就会刷新掉default_language
538
  default_language = gr.State("Chinese")
539
  language = "Chinese"
 
647
  refresh_button.click(
648
  fn=refresh_character_gallery,
649
  inputs=[language],
650
+ outputs=[char_gallery, characters_state]
651
  )
652
  char_gallery.select(
653
  fn=select_character,
654
+ inputs=[characters_state],
655
  outputs=[selected_char_name, selected_char_id]
656
  )
657
+
658
  selected_char_id.change(
659
  fn=update_preset_prompt,
660
  inputs=[selected_char_id, language],
 
706
  language,
707
  score_instruction,
708
  contant,
709
+ language2,
710
+ characters_state # 新增的输出
711
  ],
712
  )
713
  language2.change(
 
715
  inputs=language2,
716
  outputs=language
717
  )
718
+ char_gallery.select(
719
+ fn=select_character,
720
+ inputs=[characters_state],
721
+ outputs=[selected_char_name, selected_char_id]
722
  )
723
+
724
  preset_prompt.change(
725
  fn=update_chat_and_avatar,
726
  inputs=[preset_prompt],
 
864
  language,
865
  score_instruction,
866
  contant,
867
+ characters_state # 新增的输出
868
  ],
869
  )
870
 
871
+
872
  if __name__ == "__main__":
873
  demo.queue(default_concurrency_limit=8).launch(
874
  server_name="0.0.0.0",