怀羽 commited on
Commit
e48f6e2
·
1 Parent(s): 323ec1e

Add Gradio app and requirements

Browse files
Files changed (2) hide show
  1. app.py +245 -0
  2. requirements.txt +3 -0
app.py ADDED
@@ -0,0 +1,245 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py
2
+ import gradio as gr
3
+ from vllm import LLM, SamplingParams
4
+
5
+ # --------------------------------------------------------------------------
6
+ # 1. 配置和加载模型 (在应用启动时执行一次)
7
+ # --------------------------------------------------------------------------
8
+
9
+ # !! 重要 !! -> 将此处的 "your-org/your-algharb-model" 替换成你在 Hugging Face Hub 上的模型ID
10
+ model_id = "/mnt/workspace/wanghao/model_saved/Marco-MT-WMT"
11
+
12
+ # 为 vLLM 配置 GPU 数量
13
+ tensor_parallel_size = 1
14
+
15
+ print(f"正在加载模型: {model_id}...")
16
+ try:
17
+ llm = LLM(model=model_id, tensor_parallel_size=tensor_parallel_size)
18
+ print("模型加载成功!")
19
+ except Exception as e:
20
+ print(f"模型加载失败: {e}")
21
+ llm = None # 标记模型加载失败
22
+
23
+ # 定义采样参数
24
+ sampling_params = SamplingParams(
25
+ n=1,
26
+ temperature=0.001,
27
+ top_p=0.001,
28
+ max_tokens=512,
29
+ )
30
+
31
+ # 语言代码到全名的映射
32
+ source_lang_name_map = {
33
+ "en": "english",
34
+ "ja": "japanese",
35
+ "cs": "czech",
36
+ "de": "german",
37
+ }
38
+
39
+ target_lang_name_map = {
40
+ "zh": "chinese",
41
+ "ko": "korean",
42
+ "ja": "japanese",
43
+ "ar": "arabic",
44
+ "cs": "czech",
45
+ "ru": "russian",
46
+ "uk": "ukraine",
47
+ "et": "estonian",
48
+ "bho": "bhojpuri",
49
+ "sr_latin": "serbian",
50
+ "de": "german",
51
+ }
52
+ # --------------------------------------------------------------------------
53
+ # 2. 定义核心翻译函数
54
+ # --------------------------------------------------------------------------
55
+ def translate(source_text, source_lang_code, target_lang_code):
56
+ """
57
+ 接收用户输入并返回翻译结果
58
+ """
59
+ if llm is None:
60
+ return "错误:模型未能成功加载,请检查 Space 日志。"
61
+
62
+ # 简单的输入验证
63
+ if not source_text or not source_text.strip():
64
+ return ""
65
+
66
+ source_language_name = source_lang_name_map.get(source_lang_code, "the source language")
67
+ target_language_name = target_lang_name_map.get(target_lang_code, "the target language")
68
+
69
+ prompt = (
70
+ f"Human: Please translate the following text into {target_language_name}: \n"
71
+ f"{source_text}<|im_end|>\n"
72
+ f"Assistant:"
73
+ )
74
+ print(prompt)
75
+ outputs = llm.generate([prompt], sampling_params)
76
+
77
+ generated_text = outputs[0].outputs[0].text.strip()
78
+
79
+ return generated_text
80
+
81
+ # --------------------------------------------------------------------------
82
+ # 3. 创建并配置 Gradio 界面 (修改版)
83
+ # --------------------------------------------------------------------------
84
+
85
+ # <--- 修改 1: 定义自定义 CSS 样式 (高级背景 + 正常字体) --->
86
+ css = """
87
+ /* --- 1. 整体背景 (改为更高级的浅灰蓝渐变) --- */
88
+ .gradio-container {
89
+ /* 新的背景: 一个更清晰、更现代的浅灰蓝色渐变 */
90
+ background: linear-gradient(135deg, #F5F7FA 0%, #E8EBEE 100%);
91
+ padding: 20px !important;
92
+
93
+ /* 新增: 设置全局字体为"正常"的系统默认字体 */
94
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
95
+ }
96
+
97
+ /* --- 2. 标题 (保持不变, 它将继承上面的新字体) --- */
98
+ .app-title {
99
+ font-size: 32px;
100
+ font-weight: 600;
101
+ text-align: center;
102
+ color: #333333;
103
+ margin-bottom: 5px;
104
+ padding-top: 10px;
105
+ }
106
+ .app-subtitle {
107
+ text-align: center;
108
+ font-size: 18px;
109
+ color: #555555;
110
+ margin-bottom: 20px;
111
+ }
112
+
113
+ /* --- 3. "悬浮卡片" 效果 (保持不变, 新背景将使其更突出) --- */
114
+ .gradio-group {
115
+ border-radius: 20px !important;
116
+ box-shadow: 0 10px 30px rgba(0,0,0,0.07) !important;
117
+ border: 0 !important;
118
+ background: white;
119
+ }
120
+
121
+ /* --- 4. 增大文本框 (保持不变) --- */
122
+ .gradio-textbox {
123
+ min-height: 300px !important;
124
+ }
125
+ """
126
+
127
+ # <--- 修复: 在这里加回被删除的 choices 定义 ---
128
+ source_lang_choices = [(name.capitalize(), code) for code, name in source_lang_name_map.items()]
129
+ target_lang_choices = [(name.capitalize(), code) for code, name in target_lang_name_map.items()]
130
+
131
+
132
+ # <--- 修改 2: 使用 gr.Blocks 并保持主题 --->
133
+ with gr.Blocks(
134
+ theme=gr.themes.Soft(primary_hue="amber", secondary_hue="amber"), # 保持 "amber" 主题
135
+ css=css,
136
+ ) as demo:
137
+
138
+ # --- 标题 ---
139
+ gr.HTML(f"""
140
+ <div class='app-title'>Marco-MT-Algharb</div>
141
+ <div class='app-subtitle'>Our Submission for the WMT25 General Translation Task</div>
142
+ """)
143
+
144
+ # --- 翻译器主界面 (两栏布局) ---
145
+ with gr.Row(variant="panel", equal_height=True):
146
+
147
+ # --- 左侧输入卡片 ---
148
+ with gr.Group():
149
+ source_lang_dd = gr.Dropdown(
150
+ choices=source_lang_choices,
151
+ value="en",
152
+ label="源语言 (Source Language)"
153
+ )
154
+ source_text_tb = gr.Textbox(
155
+ lines=10,
156
+ label="源文本 (Source Text)",
157
+ placeholder="Enter text to translate here...",
158
+ elem_classes=["gradio-textbox"]
159
+ )
160
+
161
+ # --- 右侧输出卡片 ---
162
+ with gr.Group():
163
+ target_lang_dd = gr.Dropdown(
164
+ choices=target_lang_choices,
165
+ value="zh",
166
+ label="目标语言 (Target Language)"
167
+ )
168
+ output_text_tb = gr.Textbox(
169
+ lines=10,
170
+ label="翻译结果 (Translation)",
171
+ interactive=False,
172
+ elem_classes=["gradio-textbox"]
173
+ )
174
+
175
+ # --- 按钮行 ---
176
+ with gr.Row():
177
+ clear_btn = gr.ClearButton(
178
+ value="清除 (Clear)",
179
+ components=[source_text_tb, output_text_tb, source_lang_dd, target_lang_dd]
180
+ )
181
+ submit_btn = gr.Button("翻译 (Submit)", variant="primary", scale=1)
182
+
183
+ # --- 示例 ---
184
+ example_list = [
185
+ ["The quick brown fox jumps over the lazy dog.", "en", "zh"],
186
+ ["The sunset painted the sky with brilliant shades of orange and purple.", "en", "ko"],
187
+ ["The ancient ruins stand as a silent testament to the rise and fall of a great civilization.", "en", "ja"],
188
+ ]
189
+ gr.Examples(
190
+ examples=example_list,
191
+ inputs=[source_text_tb, source_lang_dd, target_lang_dd]
192
+ )
193
+
194
+ # --- (新位置) 支持的语向卡片 ---
195
+ # <--- 修改 3: 此处HTML将自动继承新的全局字体 --->
196
+ gr.HTML(f"""
197
+ <div style="color: #444; font-size: 16px; margin-top: 30px; padding: 20px 25px; background-color: #FFFFFF; border-radius: 15px; max-width: 900px; margin-left: auto; margin-right: auto; box-shadow: 0 4px 20px rgba(0,0,0,0.05);">
198
+
199
+ <h3 style="text-align: center; margin-top: 5px; margin-bottom: 20px; color: #444444; font-weight: 600;">Supported Language Pairs</h3>
200
+
201
+ <div style="display: flex; justify-content: space-around; text-align: left; line-height: 1.8;">
202
+
203
+ <div>
204
+ <strong>From English (en):</strong>
205
+ <ul style="list-style-type: '» '; margin: 5px 0 0 20px; padding: 0;">
206
+ <li>en2zh</li>
207
+ <li>en2ja</li>
208
+ <li>en2ko</li>
209
+ <li>en2ar</li>
210
+ <li>en2et</li>
211
+ <li>en2sr_latin</li>
212
+ <li>en2ru</li>
213
+ <li>en2uk</li>
214
+ <li>en2cs</li>
215
+ <li>en2bho</li>
216
+ </ul>
217
+ </div>
218
+
219
+ <div style="margin-left: 20px;">
220
+ <strong>From Czech (cs):</strong>
221
+ <ul style="list-style-type: '» '; margin: 5px 0 15px 20px; padding: 0;">
222
+ <li>cs2uk</li>
223
+ <li>cs2de</li>
224
+ </ul>
225
+
226
+ <strong>From Japanese (ja):</strong>
227
+ <ul style="list-style-type: '» '; margin: 5px 0 0 20px; padding: 0;">
228
+ <li>ja2zh</li>
229
+ </ul>
230
+ </div>
231
+ </div>
232
+ </div>
233
+ """)
234
+
235
+ # --- 设定按钮的点击逻辑 ---
236
+ submit_btn.click(
237
+ fn=translate,
238
+ inputs=[source_text_tb, source_lang_dd, target_lang_dd],
239
+ outputs=[output_text_tb],
240
+ api_name="translate"
241
+ )
242
+
243
+ # 启动应用
244
+ if __name__ == "__main__":
245
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ Transformers==4.55.0
2
+ vllm==0.10.0
3
+ gradio==5.49.1