From 3d6b5063d5ee2725e88f8b7bb59cadd93e366ecf Mon Sep 17 00:00:00 2001 From: sanjusss Date: Fri, 25 Jul 2025 19:44:01 +0800 Subject: [PATCH] =?UTF-8?q?fix=20#248=20=E4=BF=AE=E5=A4=8D=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=83=85=E5=86=B5=E4=B8=8B=EF=BC=8C=E5=81=87=E6=B5=81?= =?UTF-8?q?=E5=BC=8F=E6=97=A0=E6=B3=95=E5=8F=91=E5=87=BA=E7=A9=BA=E7=99=BD?= =?UTF-8?q?=E5=9B=9E=E5=A4=8D=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82=E7=AE=80?= =?UTF-8?q?=E5=8C=96=E7=A9=BA=E7=99=BD=E5=9B=9E=E5=A4=8D=E7=9A=84=E5=8F=91?= =?UTF-8?q?=E9=80=81=E9=80=BB=E8=BE=91=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/service/chat/openai_chat_service.py | 37 ++++++++----------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/app/service/chat/openai_chat_service.py b/app/service/chat/openai_chat_service.py index b627fc0..fcf2cef 100644 --- a/app/service/chat/openai_chat_service.py +++ b/app/service/chat/openai_chat_service.py @@ -358,39 +358,24 @@ class OpenAIChatService: logger.info( f"Fake streaming enabled for model: {model}. Calling non-streaming endpoint." ) - keep_sending_empty_data = True - - async def send_empty_data_locally() -> AsyncGenerator[str, None]: - """定期发送空数据以保持连接""" - while keep_sending_empty_data: - await asyncio.sleep(settings.FAKE_STREAM_EMPTY_DATA_INTERVAL_SECONDS) - if keep_sending_empty_data: - empty_chunk = self.response_handler.handle_response({}, model, stream=True, finish_reason='stop', usage_metadata=None) - yield f"data: {json.dumps(empty_chunk)}\n\n" - logger.debug("Sent empty data chunk for fake stream heartbeat.") - - empty_data_generator = send_empty_data_locally() + api_response_task = asyncio.create_task( self.api_client.generate_content(payload, model, api_key) ) + i = 0 try: while not api_response_task.done(): - try: - next_empty_chunk = await asyncio.wait_for( - empty_data_generator.__anext__(), timeout=0.1 - ) - yield next_empty_chunk - except asyncio.TimeoutError: - pass - except ( - StopAsyncIteration - ): - break - - response = await api_response_task + i = i + 1 + """定期发送空数据以保持连接""" + if i >= settings.FAKE_STREAM_EMPTY_DATA_INTERVAL_SECONDS : + i = 0 + empty_chunk = self.response_handler.handle_response({}, model, stream=True, finish_reason='stop', usage_metadata=None) + yield f"data: {json.dumps(empty_chunk)}\n\n" + logger.debug("Sent empty data chunk for fake stream heartbeat.") + await asyncio.sleep(1) finally: - keep_sending_empty_data = False + response = await api_response_task if response and response.get("candidates"): response = self.response_handler.handle_response(response, model, stream=True, finish_reason='stop', usage_metadata=response.get("usageMetadata", {}))