Dao3 nyanko7 commited on
Commit
ad72f3b
·
0 Parent(s):

Duplicate from nyanko7/openai-translator

Browse files

Co-authored-by: Nyanko <nyanko7@users.noreply.huggingface.co>

Files changed (4) hide show
  1. .gitattributes +34 -0
  2. README.md +14 -0
  3. app.py +255 -0
  4. requirements.txt +2 -0
.gitattributes ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tflite filter=lfs diff=lfs merge=lfs -text
29
+ *.tgz filter=lfs diff=lfs merge=lfs -text
30
+ *.wasm filter=lfs diff=lfs merge=lfs -text
31
+ *.xz filter=lfs diff=lfs merge=lfs -text
32
+ *.zip filter=lfs diff=lfs merge=lfs -text
33
+ *.zst filter=lfs diff=lfs merge=lfs -text
34
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Openai Translator
3
+ emoji: 💻
4
+ colorFrom: pink
5
+ colorTo: blue
6
+ sdk: gradio
7
+ sdk_version: 3.20.1
8
+ app_file: app.py
9
+ pinned: false
10
+ license: openrail
11
+ duplicated_from: nyanko7/openai-translator
12
+ ---
13
+
14
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,255 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import openai
3
+ import gradio as gr
4
+
5
+ openai.api_key = os.environ['OPENAI_KEY']
6
+
7
+ supportLanguages = [
8
+ ["auto", "auto"],
9
+ ["粤语", "yue"],
10
+ ["古文", "wyw"],
11
+ ["af","Afrikaans"],
12
+ ["ak","Akan"],
13
+ ["sq","Albanian"],
14
+ ["am","Amharic"],
15
+ ["ar","Arabic"],
16
+ ["hy","Armenian"],
17
+ ["az","Azerbaijani"],
18
+ ["eu","Basque"],
19
+ ["be","Belarusian"],
20
+ ["bem","Bemba"],
21
+ ["bn","Bengali"],
22
+ ["bh","Bihari"],
23
+ ["xx-bork","Bork, bork, bork!"],
24
+ ["bs","Bosnian"],
25
+ ["br","Breton"],
26
+ ["bg","Bulgarian"],
27
+ ["km","Cambodian"],
28
+ ["ca","Catalan"],
29
+ ["chr","Cherokee"],
30
+ ["ny","Chichewa"],
31
+ ["zh-CN","Chinese (Simplified)"],
32
+ ["zh-TW","Chinese (Traditional)"],
33
+ ["co","Corsican"],
34
+ ["hr","Croatian"],
35
+ ["cs","Czech"],
36
+ ["da","Danish"],
37
+ ["nl","Dutch"],
38
+ ["xx-elmer","Elmer Fudd"],
39
+ ["en","English"],
40
+ ["eo","Esperanto"],
41
+ ["et","Estonian"],
42
+ ["ee","Ewe"],
43
+ ["fo","Faroese"],
44
+ ["tl","Filipino"],
45
+ ["fi","Finnish"],
46
+ ["fr","French"],
47
+ ["fy","Frisian"],
48
+ ["gaa","Ga"],
49
+ ["gl","Galician"],
50
+ ["ka","Georgian"],
51
+ ["de","German"],
52
+ ["el","Greek"],
53
+ ["gn","Guarani"],
54
+ ["gu","Gujarati"],
55
+ ["xx-hacker","Hacker"],
56
+ ["ht","Haitian Creole"],
57
+ ["ha","Hausa"],
58
+ ["haw","Hawaiian"],
59
+ ["iw","Hebrew"],
60
+ ["hi","Hindi"],
61
+ ["hu","Hungarian"],
62
+ ["is","Icelandic"],
63
+ ["ig","Igbo"],
64
+ ["id","Indonesian"],
65
+ ["ia","Interlingua"],
66
+ ["ga","Irish"],
67
+ ["it","Italian"],
68
+ ["ja","Japanese"],
69
+ ["jw","Javanese"],
70
+ ["kn","Kannada"],
71
+ ["kk","Kazakh"],
72
+ ["rw","Kinyarwanda"],
73
+ ["rn","Kirundi"],
74
+ ["xx-klingon","Klingon"],
75
+ ["kg","Kongo"],
76
+ ["ko","Korean"],
77
+ ["kri","Krio (Sierra Leone)"],
78
+ ["ku","Kurdish"],
79
+ ["ckb","Kurdish (Soranî)"],
80
+ ["ky","Kyrgyz"],
81
+ ["lo","Laothian"],
82
+ ["la","Latin"],
83
+ ["lv","Latvian"],
84
+ ["ln","Lingala"],
85
+ ["lt","Lithuanian"],
86
+ ["loz","Lozi"],
87
+ ["lg","Luganda"],
88
+ ["ach","Luo"],
89
+ ["mk","Macedonian"],
90
+ ["mg","Malagasy"],
91
+ ["ms","Malay"],
92
+ ["ml","Malayalam"],
93
+ ["mt","Maltese"],
94
+ ["mi","Maori"],
95
+ ["mr","Marathi"],
96
+ ["mfe","Mauritian Creole"],
97
+ ["mo","Moldavian"],
98
+ ["mn","Mongolian"],
99
+ ["sr-ME","Montenegrin"],
100
+ ["ne","Nepali"],
101
+ ["pcm","Nigerian Pidgin"],
102
+ ["nso","Northern Sotho"],
103
+ ["no","Norwegian"],
104
+ ["nn","Norwegian (Nynorsk)"],
105
+ ["oc","Occitan"],
106
+ ["or","Oriya"],
107
+ ["om","Oromo"],
108
+ ["ps","Pashto"],
109
+ ["fa","Persian"],
110
+ ["xx-pirate","Pirate"],
111
+ ["pl","Polish"],
112
+ ["pt-BR","Portuguese (Brazil)"],
113
+ ["pt-PT","Portuguese (Portugal)"],
114
+ ["pa","Punjabi"],
115
+ ["qu","Quechua"],
116
+ ["ro","Romanian"],
117
+ ["rm","Romansh"],
118
+ ["nyn","Runyakitara"],
119
+ ["ru","Russian"],
120
+ ["gd","Scots Gaelic"],
121
+ ["sr","Serbian"],
122
+ ["sh","Serbo-Croatian"],
123
+ ["st","Sesotho"],
124
+ ["tn","Setswana"],
125
+ ["crs","Seychellois Creole"],
126
+ ["sn","Shona"],
127
+ ["sd","Sindhi"],
128
+ ["si","Sinhalese"],
129
+ ["sk","Slovak"],
130
+ ["sl","Slovenian"],
131
+ ["so","Somali"],
132
+ ["es","Spanish"],
133
+ ["es-419","Spanish (Latin American)"],
134
+ ["su","Sundanese"],
135
+ ["sw","Swahili"],
136
+ ["sv","Swedish"],
137
+ ["tg","Tajik"],
138
+ ["ta","Tamil"],
139
+ ["tt","Tatar"],
140
+ ["te","Telugu"],
141
+ ["th","Thai"],
142
+ ["ti","Tigrinya"],
143
+ ["to","Tonga"],
144
+ ["lua","Tshiluba"],
145
+ ["tum","Tumbuka"],
146
+ ["tr","Turkish"],
147
+ ["tk","Turkmen"],
148
+ ["tw","Twi"],
149
+ ["ug","Uighur"],
150
+ ["uk","Ukrainian"],
151
+ ["ur","Urdu"],
152
+ ["uz","Uzbek"],
153
+ ["vi","Vietnamese"],
154
+ ["cy","Welsh"],
155
+ ["wo","Wolof"],
156
+ ["xh","Xhosa"],
157
+ ["yi","Yiddish"],
158
+ ["yo","Yoruba"],
159
+ ["zu","Zulu"],
160
+ ]
161
+ prompt_template = "You are a translation engine that can only translate text and cannot interpret it. Keep the indent of the original text, only modify when you need."
162
+
163
+ def submit_message(detectFrom, detectTo, user_token, prompt):
164
+ if user_token != "":
165
+ openai.api_key = user_token
166
+
167
+ if not prompt:
168
+ return gr.update(value="")
169
+
170
+ for lc, lang in supportLanguages:
171
+ if detectFrom == lang:
172
+ detectFrom = lc
173
+ if detectTo == lang:
174
+ detectTo = lc
175
+
176
+ systemInstruct = prompt_template
177
+ translateInstruct = f"translate from {detectFrom} to {detectTo}"
178
+ if detectFrom == "auto":
179
+ translateInstruct = f"translate to {detectTo}"
180
+ if detectFrom in ["古文", "zh-CN", "zh-TW"]:
181
+ if detectTo == "zh-TW":
182
+ translateInstruct = "翻译成繁体白话文"
183
+ if detectTo == "zh-CN":
184
+ translateInstruct = "翻译成简体白话文"
185
+ if detectTo == "粤语":
186
+ translateInstruct = "翻译成粤语白话文"
187
+
188
+ if detectFrom == detectTo:
189
+ systemInstruct = "You are a text embellisher, you can only embellish the text, don't interpret it."
190
+ if detectTo in ["zh-CN", "zh-TW"]:
191
+ translateInstruct = "润色此句"
192
+ else:
193
+ translateInstruct = "polish this sentence"
194
+
195
+ prompt_msg = [
196
+ {"role": "system", "content": systemInstruct},
197
+ {"role": "user", "content": translateInstruct},
198
+ {"role": "user", "content": prompt},
199
+ ]
200
+
201
+ try:
202
+ openai_response = openai.ChatCompletion.create(
203
+ model="gpt-3.5-turbo",
204
+ messages=prompt_msg,
205
+ temperature=0,
206
+ max_tokens=1000,
207
+ top_p=1,
208
+ stream=True,
209
+ frequency_penalty=1,
210
+ presence_penalty=1,
211
+ )
212
+
213
+ combined = ""
214
+ for resp in openai_response:
215
+ delta = resp["choices"][0]["delta"]
216
+ if "content" in delta:
217
+ combined += delta["content"]
218
+ yield combined
219
+
220
+ except Exception as e:
221
+ return f"Error: {e}"
222
+
223
+ css = """
224
+ #col-container {max-width: 80%; margin-left: auto; margin-right: auto;}
225
+ #chatbox {min-height: 400px;}
226
+ #header {text-align: center;}
227
+ #label {font-size: 0.8em; padding: 0.5em; margin: 0;}
228
+ .message { font-size: 1.2em; }
229
+ """
230
+
231
+ with gr.Blocks(css=css) as demo:
232
+
233
+ state = gr.State([])
234
+
235
+ with gr.Column(elem_id="col-container"):
236
+ gr.Markdown("""## OpenAI Translator
237
+ Using the official API (gpt-3.5-turbo model).""", elem_id="header")
238
+
239
+ with gr.Row():
240
+ with gr.Column():
241
+ translateFrom = gr.Dropdown(label="Translate From", elem_id="translate-from", multiselect=False, value="auto", choices=[l[1] for l in supportLanguages]).style(container=False)
242
+ input_message = gr.Textbox(max_lines=100, show_label=False, lines=10, placeholder="Enter text and press enter", visible=True).style(container=False)
243
+ with gr.Column():
244
+ translateTo = gr.Dropdown(label="Translate To", elem_id="translate-to", multiselect=False, value="Chinese (Simplified)", choices=[l[1] for l in supportLanguages[1:]]).style(container=False)
245
+ output = gr.Textbox(max_lines=100, show_label=False, lines=10, label="Output", visible=True).style(container=False)
246
+
247
+ btn_submit = gr.Button("Translate")
248
+
249
+ with gr.Row():
250
+ user_token = gr.Textbox(value='', placeholder="OpenAI API Key", type="password", label="Enter your OpenAI API Key. Leave blank to use default key.")
251
+
252
+ btn_submit.click(submit_message, [translateFrom, translateTo, user_token, input_message], [output])
253
+
254
+ demo.queue(concurrency_count=10)
255
+ demo.launch(height='800px')
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ openai==0.27.2
2
+ gradio