@@ -391,6 +391,43 @@ async def _create_upstream_chat(
391391 raise RuntimeError ("上游创建 chat 成功但未返回 chat_id" )
392392 return chat_id
393393
394+ async def _delete_upstream_chat (
395+ self ,
396+ chat_id : str ,
397+ token : str ,
398+ headers : Dict [str , str ],
399+ ) -> None :
400+ """删除已创建的 GLM-4.7 上游 chat。"""
401+ if not chat_id or not token :
402+ return
403+
404+ request_headers = {
405+ "Accept" : "application/json" ,
406+ "Content-Type" : "application/json" ,
407+ "Authorization" : f"Bearer { token } " ,
408+ "User-Agent" : headers .get ("User-Agent" , "" ),
409+ "Accept-Language" : headers .get ("Accept-Language" , "zh-CN" ),
410+ "Cache-Control" : "no-cache" ,
411+ "Origin" : self .base_url ,
412+ "Referer" : f"{ self .base_url } /c/{ chat_id } " ,
413+ }
414+
415+ try :
416+ async with httpx .AsyncClient (timeout = 30.0 ) as client :
417+ response = await client .delete (
418+ f"{ self .base_url } /api/v1/chats/{ chat_id } " ,
419+ headers = request_headers ,
420+ )
421+
422+ if response .is_success :
423+ self .logger .info (f"🗑️ 已删除上游 chat: { chat_id } " )
424+ else :
425+ self .logger .warning (
426+ f"⚠️ 删除上游 chat 失败: { response .status_code } { response .text } "
427+ )
428+ except Exception as e :
429+ self .logger .warning (f"⚠️ 删除上游 chat 异常: { e } " )
430+
394431 def _build_glm47_completion_body (
395432 self ,
396433 model : str ,
@@ -681,6 +718,7 @@ async def transform_request(self, request: OpenAIRequest) -> Dict[str, Any]:
681718 "token" : token ,
682719 "chat_id" : chat_id ,
683720 "model" : requested_model ,
721+ "should_delete_chat" : upstream_model_id == "glm-4.7" ,
684722 }
685723
686724 @staticmethod
@@ -731,8 +769,16 @@ async def chat_completion(
731769 headers = transformed ["headers" ],
732770 json = transformed ["body" ],
733771 )
734- # transform_response 知道如何处理上游的流并聚合成单个响应
735- return await self .transform_response (response , request , transformed )
772+ try :
773+ # transform_response 知道如何处理上游的流并聚合成单个响应
774+ return await self .transform_response (response , request , transformed )
775+ finally :
776+ if transformed .get ("should_delete_chat" ):
777+ await self ._delete_upstream_chat (
778+ transformed .get ("chat_id" , "" ),
779+ transformed .get ("token" , "" ),
780+ transformed .get ("headers" , {}),
781+ )
736782
737783 except Exception as e :
738784 self .log_response (False , str (e ))
@@ -778,6 +824,12 @@ async def _create_stream_response(
778824 }
779825 yield f"data: { json .dumps (error_response )} \n \n "
780826 yield "data: [DONE]\n \n "
827+ if transformed .get ("should_delete_chat" ):
828+ await self ._delete_upstream_chat (
829+ transformed .get ("chat_id" , "" ),
830+ transformed .get ("token" , "" ),
831+ transformed .get ("headers" , {}),
832+ )
781833 return
782834
783835 # 标记token使用成功(如果不是匿名模式)
@@ -791,6 +843,12 @@ async def _create_stream_response(
791843 model = transformed ["model" ]
792844 async for chunk in self ._handle_stream_response (response , chat_id , model , transformed ):
793845 yield chunk
846+ if transformed .get ("should_delete_chat" ):
847+ await self ._delete_upstream_chat (
848+ transformed .get ("chat_id" , "" ),
849+ transformed .get ("token" , "" ),
850+ transformed .get ("headers" , {}),
851+ )
794852 return
795853
796854 except Exception as e :
@@ -803,6 +861,13 @@ async def _create_stream_response(
803861 if current_token and not settings .ANONYMOUS_MODE :
804862 self .mark_token_failure (current_token , e )
805863
864+ if transformed .get ("should_delete_chat" ):
865+ await self ._delete_upstream_chat (
866+ transformed .get ("chat_id" , "" ),
867+ transformed .get ("token" , "" ),
868+ transformed .get ("headers" , {}),
869+ )
870+
806871 # 返回错误
807872 error_response = {"error" : {"message" : str (e ), "type" : "stream_error" }}
808873 yield f"data: { json .dumps (error_response )} \n \n "
0 commit comments