背景
#1715 暴露:online 模式下服务端在实验结束后使 sid 失效,同一脚本内第二次 swanlab.init() 复用旧 client(持有失效 sid)导致 401。
现行临时方案:SDK 侧在 Run.finish() 的清理段调用 client.reset() 销毁全局 client 单例,下次 init() 重新认证获取新 sid。相关代码以 [随临时方案删除] 注释标记。
现状问题
- client 生命周期割裂:client 单例(
swanlab/sdk/internal/core_python/client/)物理上属于 core_python,但创建由上层驱动(swanlab.login / init.py::_ensure_online_client → login_raw,夹带 welcome 打印、settings merge 等前端逻辑),销毁由 SDK 运行层兜底,core 自身不管理自己的 HTTP 客户端
- proto 契约缺口:
CoreSettings proto(Settings.to_core_proto)仅携带 run_id/run_dir/批量参数,不含 api_key/api_host。Go core 落地时无法自主完成认证,存在迁移负担
- 认证非纯 API Key:当前经
/api/login/api_key 换取 sid 中转认证,sid 会话结束即失效——这是本问题的根因,依赖后端完善
目标形态(方案 B)
CoreSettings proto 增加 api_key / api_host 字段(Python + Go 生成物同步)
CoreContext.from_proto 携带凭证字段
CorePython._start_when_online 自建 client,_confirm_finish_when_enabled 销毁 client,生命周期完全归 Core
- 上层删除
init.py::_ensure_online_client,swanlab.login 仅保留显式登录语义(前端校验 + netrc 持久化)
前置依赖
- 后端支持纯 API Key 认证(去除 sid 中转)
完成标准
- 删除 SDK 内全部
[随临时方案删除] 标记的代码及对应测试用例
背景
#1715 暴露:online 模式下服务端在实验结束后使 sid 失效,同一脚本内第二次
swanlab.init()复用旧 client(持有失效 sid)导致 401。现行临时方案:SDK 侧在
Run.finish()的清理段调用client.reset()销毁全局 client 单例,下次init()重新认证获取新 sid。相关代码以[随临时方案删除]注释标记。现状问题
swanlab/sdk/internal/core_python/client/)物理上属于 core_python,但创建由上层驱动(swanlab.login/init.py::_ensure_online_client→login_raw,夹带 welcome 打印、settings merge 等前端逻辑),销毁由 SDK 运行层兜底,core 自身不管理自己的 HTTP 客户端CoreSettingsproto(Settings.to_core_proto)仅携带 run_id/run_dir/批量参数,不含 api_key/api_host。Go core 落地时无法自主完成认证,存在迁移负担/api/login/api_key换取 sid 中转认证,sid 会话结束即失效——这是本问题的根因,依赖后端完善目标形态(方案 B)
CoreSettingsproto 增加api_key/api_host字段(Python + Go 生成物同步)CoreContext.from_proto携带凭证字段CorePython._start_when_online自建 client,_confirm_finish_when_enabled销毁 client,生命周期完全归 Coreinit.py::_ensure_online_client,swanlab.login仅保留显式登录语义(前端校验 + netrc 持久化)前置依赖
完成标准
[随临时方案删除]标记的代码及对应测试用例