黄腾 aopstudio Kevin Hu commited on
Commit
2489eac
·
1 Parent(s): 6ec7653

add tts api (#2107)

Browse files

### What problem does this PR solve?

add tts api


- [x] New Feature (non-breaking change which adds functionality)

---------

Co-authored-by: Zhedong Cen <[email protected]>
Co-authored-by: Kevin Hu <[email protected]>

api/apps/conversation_app.py CHANGED
@@ -15,8 +15,10 @@
15
  #
16
  from copy import deepcopy
17
  from flask import request, Response
18
- from flask_login import login_required
19
  from api.db.services.dialog_service import DialogService, ConversationService, chat
 
 
20
  from api.utils.api_utils import server_error_response, get_data_error_result, validate_request
21
  from api.utils import get_uuid
22
  from api.utils.api_utils import get_json_result
@@ -176,6 +178,38 @@ def completion():
176
  return server_error_response(e)
177
 
178
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
179
  @manager.route('/delete_msg', methods=['POST'])
180
  @login_required
181
  @validate_request("conversation_id", "message_id")
@@ -221,4 +255,4 @@ def thumbup():
221
  break
222
 
223
  ConversationService.update_by_id(conv["id"], conv)
224
- return get_json_result(data=conv)
 
15
  #
16
  from copy import deepcopy
17
  from flask import request, Response
18
+ from flask_login import login_required,current_user
19
  from api.db.services.dialog_service import DialogService, ConversationService, chat
20
+ from api.db.services.llm_service import LLMBundle, TenantService
21
+ from api.db import LLMType
22
  from api.utils.api_utils import server_error_response, get_data_error_result, validate_request
23
  from api.utils import get_uuid
24
  from api.utils.api_utils import get_json_result
 
178
  return server_error_response(e)
179
 
180
 
181
+ @manager.route('/tts', methods=['POST'])
182
+ @login_required
183
+ def tts():
184
+ req = request.json
185
+ text = req["text"]
186
+
187
+ tenants = TenantService.get_by_user_id(current_user.id)
188
+ if not tenants:
189
+ return get_data_error_result(retmsg="Tenant not found!")
190
+
191
+ tts_id = tenants[0]["tts_id"]
192
+ if not tts_id:
193
+ return get_data_error_result(retmsg="No default TTS model is set")
194
+
195
+ tts_mdl = LLMBundle(tenants[0]["tenant_id"], LLMType.TTS, tts_id)
196
+ def stream_audio():
197
+ try:
198
+ for chunk in tts_mdl(text):
199
+ yield chunk
200
+ except Exception as e:
201
+ yield "data:" + json.dumps({"retcode": 500, "retmsg": str(e),
202
+ "data": {"answer": "**ERROR**: "+str(e)}},
203
+ ensure_ascii=False).encode('utf-8')
204
+
205
+ resp = Response(stream_audio(), mimetype="audio/mpeg")
206
+ resp.headers.add_header("Cache-Control", "no-cache")
207
+ resp.headers.add_header("Connection", "keep-alive")
208
+ resp.headers.add_header("X-Accel-Buffering", "no")
209
+
210
+ return resp
211
+
212
+
213
  @manager.route('/delete_msg', methods=['POST'])
214
  @login_required
215
  @validate_request("conversation_id", "message_id")
 
255
  break
256
 
257
  ConversationService.update_by_id(conv["id"], conv)
258
+ return get_json_result(data=conv)
api/db/services/user_service.py CHANGED
@@ -96,6 +96,7 @@ class TenantService(CommonService):
96
  cls.model.rerank_id,
97
  cls.model.asr_id,
98
  cls.model.img2txt_id,
 
99
  cls.model.parser_ids,
100
  UserTenant.role]
101
  return list(cls.model.select(*fields)
 
96
  cls.model.rerank_id,
97
  cls.model.asr_id,
98
  cls.model.img2txt_id,
99
+ cls.model.tts_id,
100
  cls.model.parser_ids,
101
  UserTenant.role]
102
  return list(cls.model.select(*fields)