浏览代码

add tts api (#2107)

### What problem does this PR solve?

add tts api 


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

---------

Co-authored-by: Zhedong Cen <cenzhedong2@126.com>
Co-authored-by: Kevin Hu <kevinhu.sh@gmail.com>
tags/v0.11.0
黄腾 1年前
父节点
当前提交
b88c3897b9
没有帐户链接到提交者的电子邮件
共有 2 个文件被更改,包括 37 次插入2 次删除
  1. 36
    2
      api/apps/conversation_app.py
  2. 1
    0
      api/db/services/user_service.py

+ 36
- 2
api/apps/conversation_app.py 查看文件

# #
from copy import deepcopy from copy import deepcopy
from flask import request, Response from flask import request, Response
from flask_login import login_required
from flask_login import login_required,current_user
from api.db.services.dialog_service import DialogService, ConversationService, chat from api.db.services.dialog_service import DialogService, ConversationService, chat
from api.db.services.llm_service import LLMBundle, TenantService
from api.db import LLMType
from api.utils.api_utils import server_error_response, get_data_error_result, validate_request from api.utils.api_utils import server_error_response, get_data_error_result, validate_request
from api.utils import get_uuid from api.utils import get_uuid
from api.utils.api_utils import get_json_result from api.utils.api_utils import get_json_result
return server_error_response(e) return server_error_response(e)




@manager.route('/tts', methods=['POST'])
@login_required
def tts():
req = request.json
text = req["text"]
tenants = TenantService.get_by_user_id(current_user.id)
if not tenants:
return get_data_error_result(retmsg="Tenant not found!")
tts_id = tenants[0]["tts_id"]
if not tts_id:
return get_data_error_result(retmsg="No default TTS model is set")
tts_mdl = LLMBundle(tenants[0]["tenant_id"], LLMType.TTS, tts_id)
def stream_audio():
try:
for chunk in tts_mdl(text):
yield chunk
except Exception as e:
yield "data:" + json.dumps({"retcode": 500, "retmsg": str(e),
"data": {"answer": "**ERROR**: "+str(e)}},
ensure_ascii=False).encode('utf-8')

resp = Response(stream_audio(), mimetype="audio/mpeg")
resp.headers.add_header("Cache-Control", "no-cache")
resp.headers.add_header("Connection", "keep-alive")
resp.headers.add_header("X-Accel-Buffering", "no")
return resp

@manager.route('/delete_msg', methods=['POST']) @manager.route('/delete_msg', methods=['POST'])
@login_required @login_required
@validate_request("conversation_id", "message_id") @validate_request("conversation_id", "message_id")
break break


ConversationService.update_by_id(conv["id"], conv) ConversationService.update_by_id(conv["id"], conv)
return get_json_result(data=conv)
return get_json_result(data=conv)

+ 1
- 0
api/db/services/user_service.py 查看文件

cls.model.rerank_id, cls.model.rerank_id,
cls.model.asr_id, cls.model.asr_id,
cls.model.img2txt_id, cls.model.img2txt_id,
cls.model.tts_id,
cls.model.parser_ids, cls.model.parser_ids,
UserTenant.role] UserTenant.role]
return list(cls.model.select(*fields) return list(cls.model.select(*fields)

正在加载...
取消
保存