• v1.0.3 622b17f90c

    v1.0.3 Stable

    iomgaa released this 2026-08-30 02:20:51 +08:00 | 0 commits to main since this release

    回应 GovDoc-SaaS 提的 issue #6:网关适配器的转发白名单把 cache_namespace 挡在外面,而那是
    PolyGateway 指定的租户隔离手段。

    这一版发出去之前跑了一轮完整压测,与 1.0.2 那次验收逐项可比:正常负载 400 次运行、3501 次
    真实模型调用,十一条不变量全部通过、零击穿、零无法判定;九类故障注入 58 条判据全部通过、零
    击穿,剩下那一条无法判定与 1.0.2 那次是同一条(cancel_env 那次运行一条事件都没发出过,
    事件文件的完整性无从判起)。库本身没有被压出 bug。产物在 tools/soak/runs/v1.0.3/
    (该目录在 gitignore 里)。

    第一次开跑那轮作废了,原因不在库:模型中转连返 20 次 503 打开了网关的熔断,其后每次调用都
    快速失败,400 次运行全部以 llm_error 收尾。正常负载那一轮的记分板不开「允许无法判定」,
    于是它当场拦下、退出码非零——一次什么都没验到的跑没有冒充通过。那批产物留在
    tools/soak/runs/v1.0.3-aborted-503/

    网关适配器改按保留前缀转发绑定,而不是按键名撞

    这是一次破坏性的行为变更。 绑定里不带前缀的 session_idparent_call_id 从「静默转发
    给网关」变成「抛 ValueError 并给出改法」,改法是把键名写成 gateway.session_id

    model_binding={
        "book": "b7",                                     # 项目自己的坐标,不传
        "gateway.cache_namespace": "acme:v1:tenant:x7",   # 传成 chat(cache_namespace=...)
        "gateway.tenant_id": "x7",
    }
    

    绑定里键名以 gateway. 开头的,前缀之后那一段当作网关 chat() 的关键字参数名,值原样传下去;
    其余的键照旧不传、也不报错。本库不再持有一份网关参数名单——上游哪天再加一个字符串维度,
    下游当天就能用,本库不发版,声明的依赖下界也不用跟着抬。

    原来那份写死的白名单只认两个键,把 cache_namespace 挡在外面,而那是 PolyGateway 指定的租户
    隔离手段:挡掉之后,两个租户提交内容相同的一段文字,第二个会读到第一个那次的模型输出。给出
    那份白名单的理由是「网关只有两个槽位放得下这类东西」,而这句话在写下的那天就已经不成立——
    当时装得到的最低版本上已经有四个。

    四条会抛 ValueError 的情形:带前缀的键名指向 messagesstreamstructuredoverlay
    之一(这些改变请求本身,另有权威);带前缀的键取值是空串或纯空白(在网关那边和「没传」分不
    开,或者不带任何信息,而一个看着配了、实际没配的隔离比没配更糟);键恰好是 gateway.、前缀
    后面没跟参数名;以及不带前缀的那两个历史裸键。
    判断发生在把请求交给网关之前,所以出错的那次调用不会真的发出去。

    转发的键照旧全部进参数快照,键名不变(request.binding.gateway.cache_namespace),所以换一个
    命名空间续跑会照常撞参数漂移。

    方案与被否掉的三条路见 research-wiki/design/0017-gateway-forwarding.md

    Downloads