fix: 豆包模型按行发送接收,合并mp3后返回前端

This commit is contained in:
CaptainB 2024-09-24 17:40:15 +08:00 committed by 刘瑞斌
parent 4981b15757
commit a9d9e293a7

View File

@ -90,31 +90,36 @@ class VolcanicEngineTextToSpeech(MaxKBBaseModel, BaseTextToSpeech):
}, },
"request": { "request": {
"reqid": str(uuid.uuid4()), "reqid": str(uuid.uuid4()),
"text": text, "text": '',
"text_type": "plain", "text_type": "plain",
"operation": "xxx" "operation": "xxx"
} }
} }
return asyncio.run(self.submit(request_json)) return asyncio.run(self.submit(request_json, text))
def token_auth(self): def token_auth(self):
return {'Authorization': 'Bearer; {}'.format(self.volcanic_token)} return {'Authorization': 'Bearer; {}'.format(self.volcanic_token)}
async def submit(self, request_json): async def submit(self, request_json, text):
submit_request_json = copy.deepcopy(request_json) submit_request_json = copy.deepcopy(request_json)
submit_request_json["request"]["reqid"] = str(uuid.uuid4())
submit_request_json["request"]["operation"] = "submit" submit_request_json["request"]["operation"] = "submit"
payload_bytes = str.encode(json.dumps(submit_request_json))
payload_bytes = gzip.compress(payload_bytes) # if no compression, comment this line
full_client_request = bytearray(default_header)
full_client_request.extend((len(payload_bytes)).to_bytes(4, 'big')) # payload size(4 bytes)
full_client_request.extend(payload_bytes) # payload
header = {"Authorization": f"Bearer; {self.volcanic_token}"} header = {"Authorization": f"Bearer; {self.volcanic_token}"}
result = b''
async with websockets.connect(self.volcanic_api_url, extra_headers=header, ping_interval=None, async with websockets.connect(self.volcanic_api_url, extra_headers=header, ping_interval=None,
ssl=ssl_context) as ws: ssl=ssl_context) as ws:
await ws.send(full_client_request) lines = text.split('\n')
return await self.parse_response(ws) for line in lines:
submit_request_json["request"]["reqid"] = str(uuid.uuid4())
submit_request_json["request"]["text"] = line
payload_bytes = str.encode(json.dumps(submit_request_json))
payload_bytes = gzip.compress(payload_bytes) # if no compression, comment this line
full_client_request = bytearray(default_header)
full_client_request.extend((len(payload_bytes)).to_bytes(4, 'big')) # payload size(4 bytes)
full_client_request.extend(payload_bytes) # payload
await ws.send(full_client_request)
result += await self.parse_response(ws)
return result
@staticmethod @staticmethod
async def parse_response(ws): async def parse_response(ws):