Fetching metadata from the HF Docker repository...
-
Fix streaming replay and isolate temporary chats
-
修正功能开关的说明并修复派生标志不重算的问题
之前 README 与面板提示都写着"在 HF Space 上必须设 Space Variable,不要靠面板开关"——
这是错的。面板开关本来就会直接改运行时变量(main.ENABLE_THINKING 等),**点一下立即生效、
不需要重启**;只有容器内的 .env 会随重建丢失。这个错误说明很可能让用户一直没去点那个开关,
所以思考功能始终没开。
改动:
- 修正 admin.html 的提示与 README:开关立即生效;重建后会回到 Space Variables/Secrets 的
值,想永久生效再设 Variable。
- 修复派生标志不重算:新增 main.AUTO_DELETE_CHAT_SETTING 与 main.refresh_derived_flags(),
切换开关后统一重算(AUTO_DELETE_CHAT 依赖 TEMPORARY_CHAT,开着临时对话时必须为关)。
之前切到"临时对话"时 AUTO_DELETE_CHAT 仍是旧值,两个开关状态互相矛盾。
- 切换开关的返回消息改为"已立即生效",并在 autoDelete 因临时对话而不生效时给出原因。
tests/test_admin_panel.py 增至 30 项:新增开关立即生效、派生值重算、以及临时对话与自动
删除的互斥关系(测试里把 write_env 换成空操作,避免真写 .env)。全套 193 项通过。 -
暴露"最近一次回复"的诊断信息,不用翻日志就能判断内容是否发全
背景:排查"内容不全"时,一直需要去翻 Space 的 Container logs 找
"Streaming response completed: ... chars=... truncated=..." 这一行,很费事。
改动:
- 新增模块级 LAST_RESPONSE_STATS 与 record_response_stats(),在流式(正常收尾与断流两条
分支)和非流式路径各记录一次:mode / model / chars / chunks / images / fence_open /
truncated / finish_reason / error / at。
- GET /api/session 增加 last_response 字段;管理面板 /api/status 也透出,并在「会话与
__1PSIDTS 轮换」卡片里显示为「最近一次回复」:流式/非流式 · N 字符 · 疑似被截断 · 有错误
(截断或出错时标橙色)。
- 非流式路径补齐与流式一致的截断处理:同样判定、同样追加提示、finish_reason 也置 length。
判断口径:chars 正常且 truncated=false → 服务端发全了,问题在客户端显示;
truncated=true → 上游截断,看 finish_reason 与 error。
tests/test_streaming_fidelity.py 增至 30 项(新增最近回复诊断的 4 项断言),
tests/test_admin_panel.py 增至 23 项。全套 186 项通过。 -
会话自愈:Cookie 初始化 + 后台持续轮换 __Secure-1PSIDTS
修复常驻服务里 1PSIDTS 会永久停止轮换的问题:gemini-webapi 的 start_auto_refresh / start_activity_watchdog 在账号状态不是 AVAILABLE 时会 break 并把 task 置空,此后没有任何机制拉起它,导致进程一直在跑但 Cookie 依然过期。
新增 gemini_session.py:CookieStore(txt/json 双缓存按 mtime 取较新者);GeminiSessionManager 监督协程(观察轮换落盘、重拉停掉的 refresh/activity 任务、会话失效即重建,带 rearm 冷却防忙循环);HfCookieBackup 可选备份(Dataset 不触发重启 / Secret 回写默认关闭)。
main.py:get_gemini_client 委托 manager 并做返回前健康检查;新增 reinitialize_gemini_client、generate_content(_stream)_with_recovery(仅在 account_status 变为 UNAUTHENTICATED 时重建重试一次)、GET /api/session。
admin.py / admin.html:状态页新增「会话与 __Secure-1PSIDTS 轮换」卡片,展示生效中与缓存中的 1PSIDTS、轮换计数、任务存活状态。
新增 tests/(78 项断言,全部不联网)与 .gitignore(排除 secrets/ 与 Cookie 缓存)。