Spaces:
Runtime error
Runtime error
Upload app.py
Browse files
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:** [contact@yomio.ai](mailto:contact@yomio.ai)
|
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:** [contact@yomio.ai](mailto:contact@yomio.ai).
|
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 |
### 私たちはコラボレーションの機会も探しています。興味がある方は、ぜひご連絡ください。**メール:** [contact@yomio.ai](mailto:contact@yomio.ai)。
|
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 |
### 우리는 또한 협력 기회를 모색하고 있습니다. 관심이 있으시면 연락해 주세요. **이메일:** [contact@yomio.ai](mailto:contact@yomio.ai)
|
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 =
|
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=
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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=[
|
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.
|
690 |
-
fn=
|
691 |
-
inputs=[
|
692 |
-
outputs=[
|
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:** [contact@yomio.ai](mailto:contact@yomio.ai)
|
|
|
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:** [contact@yomio.ai](mailto:contact@yomio.ai).
|
|
|
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 |
### 私たちはコラボレーションの機会も探しています。興味がある方は、ぜひご連絡ください。**メール:** [contact@yomio.ai](mailto:contact@yomio.ai)。
|
|
|
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 |
### 우리는 또한 협력 기회를 모색하고 있습니다. 관심이 있으시면 연락해 주세요. **이메일:** [contact@yomio.ai](mailto:contact@yomio.ai)
|
|
|
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",
|