From 17d17503290028332eda3e5341f7f1ad9cd2512e Mon Sep 17 00:00:00 2001 From: yinpeng <2291314224@qq.com> Date: Sun, 15 Dec 2024 14:39:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96Gemini=E5=93=8D=E5=BA=94?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E9=80=BB=E8=BE=91=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89finish=5Freason=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/chat_service.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/app/services/chat_service.py b/app/services/chat_service.py index 9027f0e..8a0c6af 100644 --- a/app/services/chat_service.py +++ b/app/services/chat_service.py @@ -61,7 +61,7 @@ def convert_messages_to_gemini_format(self, messages: list) -> list: return converted_messages def convert_gemini_response_to_openai( - self, response: Dict[str, Any], model: str, stream: bool = False + self, response: Dict[str, Any], model: str, stream: bool = False, finish_reason: str = None ) -> Optional[Dict[str, Any]]: """Convert Gemini response to OpenAI format""" if stream: @@ -97,8 +97,8 @@ def convert_gemini_response_to_openai( "choices": [ { "index": 0, - "delta": {"content": text}, - "finish_reason": None, + "delta": {"content": text} if text else {}, + "finish_reason": finish_reason, } ], } @@ -121,7 +121,7 @@ def convert_gemini_response_to_openai( "text" ], }, - "finish_reason": "stop", + "finish_reason": finish_reason, } ], "usage": { @@ -221,13 +221,14 @@ async def generate(): chunk = json.loads(line[6:]) openai_chunk = ( self.convert_gemini_response_to_openai( - chunk, model, stream=True + chunk, model, stream=True, finish_reason=None ) ) if openai_chunk: yield f"data: {json.dumps(openai_chunk)}\n\n" except json.JSONDecodeError: continue + yield f"data: {json.dumps({'finish_reason': 'stop'})}\n\n" yield "data: [DONE]\n\n" return # 成功完成,退出重试循环 @@ -252,7 +253,7 @@ async def generate(): url = f"https://generativelanguage.googleapis.com/v1beta/models/{gemini_model}:generateContent?key={api_key}" response = await client.post(url, json=payload) gemini_response = response.json() - return self.convert_gemini_response_to_openai(gemini_response, model) + return self.convert_gemini_response_to_openai(gemini_response, model, finish_reason="stop") async def _openai_chat_completion( self,