Skip to content

Commit 7500e89

Browse files
committed
feat: 请求结束后,删除glm47创建的真实chat,zai页面不保留记录。
1 parent e8c6e03 commit 7500e89

File tree

1 file changed

+67
-2
lines changed

1 file changed

+67
-2
lines changed

app/providers/zai_provider.py

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)