Miday commited on
Commit
c0fb54b
·
1 Parent(s): d5b29d9

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +200 -0
app.py ADDED
@@ -0,0 +1,200 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import time
2
+ import base64
3
+ from openai import OpenAI
4
+ import gradio
5
+ import google.generativeai as genai
6
+
7
+
8
+ def generation(prompt_text):
9
+ a_key = "QUl6YVN5Q1N1ZC1JTWtyWnV3bXhQSFdNbGxDM2hkWk9jQVZoXy1V"
10
+ genai.configure(api_key=str(base64.b64decode(a_key), encoding="utf-8"))
11
+
12
+ generation_config = {"temperature": 0.9, "top_p": 1, "top_k": 1, "max_output_tokens": 2048}
13
+ safety_settings = [
14
+ {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
15
+ {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
16
+ {"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
17
+ {"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"}]
18
+
19
+ model = genai.GenerativeModel(model_name="gemini-pro", generation_config=generation_config, safety_settings=safety_settings)
20
+
21
+ response = model.generate_content(prompt_text)
22
+ return response
23
+
24
+
25
+ chatgpt_model_type_normal = "gpt-3.5-turbo-instruct:普通对话型"
26
+ chatgpt_model_type_memory = "gpt-3.5-turbo-16k:记忆对话型"
27
+ chatgpt_model_type_gemini = "这是Google旗下原生多模态大模型 Gemini google-gemini-pro:普通对话型"
28
+ conversation_history = []
29
+ prompt_parts = [""]
30
+ def chatgpt(input_text, model_type, field):
31
+ a_key = "c2stRFo3ZzRadXlzOEhMd2RWZnFYVWJUM0JsYmtGSkFPTm9PNHdPMmJZTTc5Tm5DTVQ5"
32
+ client = OpenAI(api_key=str(base64.b64decode(a_key), encoding="utf-8"))
33
+
34
+ if field != "":
35
+ input_text = input_text + "\n" + "假设你扮演的人物角色或你专注的学术领域为:" + field
36
+
37
+ if model_type == chatgpt_model_type_normal:
38
+ response = client.completions.create(
39
+ model="gpt-3.5-turbo-instruct",
40
+ temperature=0.25,
41
+ max_tokens=2500,
42
+ frequency_penalty=0.5,
43
+ presence_penalty=0.5,
44
+ top_p=0.88,
45
+ prompt=input_text
46
+ )
47
+ response_text = response.choices[0].text.strip()
48
+
49
+ if model_type == chatgpt_model_type_memory:
50
+ conversation_system = {"role": "system", "content": ""}
51
+ conversation_user = {"role": "user", "content": input_text}
52
+ if conversation_history == []:
53
+ conversation_history.append(conversation_system)
54
+ conversation_history.append(conversation_user)
55
+ else:
56
+ conversation_history.append(conversation_user)
57
+
58
+ response = client.chat.completions.create(
59
+ model="gpt-3.5-turbo-16k",
60
+ temperature=0.25,
61
+ max_tokens=5000,
62
+ frequency_penalty=0.5,
63
+ presence_penalty=0.5,
64
+ top_p=0.88,
65
+ messages=conversation_history,
66
+ )
67
+ response_text = response.choices[0].message.content
68
+
69
+ conversation_system = {"role": "system", "content": response_text}
70
+ conversation_history.append(conversation_system)
71
+
72
+ if model_type == chatgpt_model_type_gemini:
73
+ if prompt_parts[0] == "":
74
+ prompt_parts[0] += input_text
75
+ else:
76
+ prompt_parts[0] += (" " + input_text)
77
+
78
+ response_gemini = generation(prompt_parts)
79
+ response_text = response_gemini.text
80
+ prompt_parts[0] += (" " + response_text)
81
+
82
+ return response_text
83
+
84
+
85
+ dall_e_model_type_2 = "Dall-E-2:较快 | 较差"
86
+ dall_e_model_type_3 = "Dall-E-3:较慢 | 较好"
87
+ def dall_e(input_text, add_text, model_type):
88
+ a_key = "c2stRFo3ZzRadXlzOEhMd2RWZnFYVWJUM0JsYmtGSkFPTm9PNHdPMmJZTTc5Tm5DTVQ5"
89
+ client = OpenAI(api_key=str(base64.b64decode(a_key), encoding="utf-8"))
90
+
91
+ complete_text = input_text + "\n" + "增加图片风格的细节或场景的细节:" + add_text
92
+ if model_type == dall_e_model_type_2:
93
+ model_select = "dall-e-2"
94
+ if model_type == dall_e_model_type_3:
95
+ model_select = "dall-e-3"
96
+
97
+ response = client.images.generate(
98
+ model=model_select,
99
+ prompt=complete_text,
100
+ size="1024x1024",
101
+ quality="standard",
102
+ n=1,
103
+ )
104
+ image_url = response.data[0].url
105
+ return image_url
106
+
107
+
108
+ def whisper(audio_file):
109
+ a_key = "c2stRFo3ZzRadXlzOEhMd2RWZnFYVWJUM0JsYmtGSkFPTm9PNHdPMmJZTTc5Tm5DTVQ5"
110
+ client = OpenAI(api_key=str(base64.b64decode(a_key), encoding="utf-8"))
111
+ audio_file = open(audio_file, "rb")
112
+ transcript = client.audio.transcriptions.create(model="whisper-1", file=audio_file, response_format="text")
113
+
114
+ return transcript
115
+
116
+
117
+ tts_model_type_1 = "tts-1:较快 | 较差"
118
+ tts_model_type_1_hd = "tts-1-hd:较慢 | 较好"
119
+ tts_gender_male = "男生声音:Alloy"
120
+ tts_gender_female = "女生声音:Nova"
121
+ def tts(input_text, model_type, gender):
122
+ a_key = "c2stRFo3ZzRadXlzOEhMd2RWZnFYVWJUM0JsYmtGSkFPTm9PNHdPMmJZTTc5Tm5DTVQ5"
123
+ client = OpenAI(api_key=str(base64.b64decode(a_key), encoding="utf-8"))
124
+
125
+ timestamp = time.time()
126
+ speech_file_path = "tts_" + str(timestamp) + ".mp3"
127
+
128
+ if model_type == "tts-1:较快 | 较差":
129
+ model_select = "tts-1"
130
+ if model_type == "tts-1-hd:较慢 | 较好":
131
+ model_select = "tts-1-hd"
132
+ if gender == "男生声音:Alloy":
133
+ voice_select = "alloy"
134
+ if gender == "女生声音:Nova":
135
+ voice_select = "nova"
136
+
137
+ response = client.audio.speech.create(
138
+ model=model_select,
139
+ voice=voice_select,
140
+ input=input_text,
141
+ )
142
+ response.stream_to_file(speech_file_path)
143
+ return speech_file_path, whisper(speech_file_path)
144
+
145
+
146
+ def demo():
147
+ article_thanks = "<br> 🔅Thanks Python. &nbsp;&nbsp; 🔅Thanks OpenAI. &nbsp;&nbsp; 🔅Thanks Gradio. &nbsp;&nbsp; 🔅Thanks Myself. &nbsp;&nbsp; 🔅Thank you !"
148
+ chat_demo = gradio.Interface(fn=chatgpt,
149
+ inputs=[gradio.Textbox(label="💢(必须) ⚡你的对话", lines=3, placeholder="输入内容", show_copy_button=True),
150
+ gradio.Radio([chatgpt_model_type_normal, chatgpt_model_type_memory, chatgpt_model_type_gemini],
151
+ label="⚡选择GPT模型", value=chatgpt_model_type_normal),
152
+ gradio.Textbox(label="⚡人物角色 / 学术领域(选择 #记忆对话型 生效)", lines=1,
153
+ placeholder="例如:马斯克;人工智能")],
154
+ outputs=gradio.Textbox(label="⚡ GPT 对话生成", lines=11,
155
+ show_copy_button=True,
156
+ placeholder="ChatGPT - 是未成熟的AGI智能工具 - 无法保证回答正确 !仅供参考 😊"),
157
+ title="<br> Gradio:🤖 Chat-with-GPT3.5",
158
+ description="✅ 操作指南:在左边的文本框中输入内容,再选择对话的GPT模型类型,如果选择为角色型则可以为GPT设定一种角色或领域作为回答的方向 !😁",
159
+ article=article_thanks)
160
+
161
+ image_demo = gradio.Interface(fn=dall_e,
162
+ inputs=[gradio.Textbox(label="💢(必须) ⚡描述图片", lines=2, placeholder="输入内容", show_copy_button=True),
163
+ gradio.Textbox(label="⚡描述细节", lines=1, placeholder="例如:蔚蓝;科幻", show_copy_button=True),
164
+ gradio.Radio([dall_e_model_type_2, dall_e_model_type_3],
165
+ label="⚡选择Dall-E模型", value=dall_e_model_type_2)],
166
+ outputs=gradio.Image(label="⚡Dell-E 图片生成"),
167
+ title="<br> Gradio:🤖 Dall-E-Generate-Image",
168
+ description="✅ 操作指南:在左边的文本框中输入需要生成图片的内容,再选择生成图片的Dall-E模型,需要注意Dall-E-3模型的请求更容易受到限制 !😁",
169
+ article=article_thanks)
170
+
171
+ stt_demo = gradio.Interface(fn=whisper,
172
+ inputs=[gradio.Audio(label="💢(必须) ⚡上传音频文件", type="filepath")],
173
+ outputs=gradio.Textbox(label="⚡Whisper 文字生成", lines=10,
174
+ placeholder="Whisper-v1 - 是初代版本模型 - 无法保证转换正确 !仅供参考 😊",
175
+ show_copy_button=True),
176
+ title="<br> Gradio:🤖 Whisper-Speech-to-Text",
177
+ description="✅ 操作指南:点击左边的音频框进行本地音频文件选取,或者直接将音频文件拖拉到当前音频框,默认的音频转文本模型是Whisper-v1 !😁",
178
+ article=article_thanks)
179
+
180
+ tts_demo = gradio.Interface(fn=tts,
181
+ inputs=[gradio.Textbox(label="💢(必须) ⚡你的文本", lines=3, placeholder="输入内容", show_copy_button=True),
182
+ gradio.Radio([tts_model_type_1, tts_model_type_1_hd], label="选择TTS模型", value=tts_model_type_1),
183
+ gradio.Radio([tts_gender_male, tts_gender_female], label="选择声音性别", value=tts_gender_male)],
184
+ outputs=[gradio.Audio(label="⚡TTS 音频生成"),
185
+ gradio.Textbox(label="生成的音频再经过 Whisper 二次检验", lines=5,
186
+ placeholder="生成的音频再次经过 Whisper 转换用于验证TTS的准确性 !仅供参考 😊",
187
+ show_copy_button=True)],
188
+ title="<br> Gradio:🤖 TTS-Text-to-Speech",
189
+ description="✅ 操作指南:在左边的文本框中输入需要转音频的内��,再选择生成音频的TTS模型,两个模型实际差异不大,最后为模型选择输出男声还是女声 !😁",
190
+ article=article_thanks)
191
+
192
+ GUI = gradio.TabbedInterface([chat_demo, image_demo, stt_demo, tts_demo],
193
+ ["1️⃣ Chat-with-GPT:对话学习", "2️⃣ Generate-Image:生成图片", "3️⃣ Speech-to-Text:语音转文本", "4️⃣ Text-to-Speech:文本转语音"],
194
+ css="footer {visibility: hidden}")
195
+
196
+ GUI.launch(debug=True, share=False)
197
+
198
+
199
+ if __name__ == "__main__":
200
+ demo()