Skip to content

[design] client 生命周期归属 Core 管理并下沉认证契约(依赖后端纯 API Key 认证) #1742

Description

@SAKURA-CAT

背景

#1715 暴露:online 模式下服务端在实验结束后使 sid 失效,同一脚本内第二次 swanlab.init() 复用旧 client(持有失效 sid)导致 401。

现行临时方案:SDK 侧在 Run.finish() 的清理段调用 client.reset() 销毁全局 client 单例,下次 init() 重新认证获取新 sid。相关代码以 [随临时方案删除] 注释标记。

现状问题

  1. client 生命周期割裂:client 单例(swanlab/sdk/internal/core_python/client/)物理上属于 core_python,但创建由上层驱动(swanlab.login / init.py::_ensure_online_clientlogin_raw,夹带 welcome 打印、settings merge 等前端逻辑),销毁由 SDK 运行层兜底,core 自身不管理自己的 HTTP 客户端
  2. proto 契约缺口CoreSettings proto(Settings.to_core_proto)仅携带 run_id/run_dir/批量参数,不含 api_key/api_host。Go core 落地时无法自主完成认证,存在迁移负担
  3. 认证非纯 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_clientswanlab.login 仅保留显式登录语义(前端校验 + netrc 持久化)

前置依赖

  • 后端支持纯 API Key 认证(去除 sid 中转)

完成标准

  • 删除 SDK 内全部 [随临时方案删除] 标记的代码及对应测试用例

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions