mirror of
https://github.com/zyycn/codex-proxy-rs.git
synced 2026-11-06 08:06:19 +00:00
feat(settings): add preferred account affinity mode
Route relaxed requests through the configured scheduler and keep the session primary during preferred-mode spillover. Default new settings to strict while preserving saved modes. Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
+11
-7
@@ -1233,8 +1233,8 @@ HTTP 请求头及新建 WS 的握手提示按当时的最终出站档位构造
|
||||
`response.create`;空闲连接不占名额,内部重试不重复占用。
|
||||
修改 Key 策略对既有 WebSocket 连接的下一次请求同样生效,已开始的请求保持原有快照
|
||||
|
||||
运行设置可以分别启用 Key 与账号的有界排队。Key 并发满时按 Key 等待;OpenAI 宽松亲和下各线程独立调度,
|
||||
新子线程优先沿用根账号,必要时可分流;已有子绑定不随根账号迁移。严格亲和下后代线程只等待当前会话账号,
|
||||
运行设置可以分别启用 Key 与账号的有界排队。Key 并发满时按 Key 等待;OpenAI 优先亲和下会话请求优先主账号,
|
||||
繁忙时先按调度策略选择可用账号,临时分流不改写会话绑定;没有可立即使用的账号时才按配置排队。严格亲和下后代线程只等待当前会话账号,
|
||||
根线程迁移后跟随新账号,没有绑定时等待根线程首次认领
|
||||
|
||||
严格亲和下的后代线程始终排队,沿用 `concurrencyWaitTimeoutSeconds` 和请求截止时间;
|
||||
@@ -1348,10 +1348,13 @@ Guardian 以 `subagent_kind` 或 `client_metadata.x-openai-subagent` 值 `guardi
|
||||
仍受总等待容量与等待时限约束。不限并发的账号和关闭排队时的其余行为不变。
|
||||
设置更新请求须包含该字段
|
||||
|
||||
`openaiAccountAffinity` 控制 OpenAI 账号亲和,默认 `relaxed`(宽松),也可设置为 `strict`(严格)。
|
||||
宽松模式允许子代理按模型权限、可用性与容量独立分流,各线程保留自己的账号绑定;严格模式让同一会话共用账号,
|
||||
子代理等待当前账号。需要选号时仍使用 `rotationStrategy` 指定的调度策略。
|
||||
插件显式选号及原生续写的状态归属约束仍然生效,缺少可识别线程身份的子请求仍按跟随方式处理
|
||||
`openaiAccountAffinity` 控制 OpenAI 账号亲和,默认 `strict`(严格),已有保存的模式保持不变:
|
||||
|
||||
- `relaxed`(宽松):会话内请求直接按 `rotationStrategy` 选号,不优先主账号
|
||||
- `preferred`(优先):会话内所有可关联请求优先主账号,并发已满、请求间隔未到、额度耗尽、停用、限流冷却或不支持当前模型时临时分流,保留会话绑定,后续请求仍优先主账号
|
||||
- `strict`(严格):同一会话共用账号,后代请求等待当前账号并跟随根请求换号
|
||||
|
||||
插件显式选号及原生续写的状态归属约束在三种模式下仍然生效
|
||||
|
||||
`openaiSessionAffinityTtlHours` 是账号绑定及其会话关联的滑动保留时长,单位小时,默认 24,取值 1~720。
|
||||
各类请求统一在发送前成功准入时按请求冻结值续期。
|
||||
@@ -1396,7 +1399,8 @@ Guardian 以 `subagent_kind` 或 `client_metadata.x-openai-subagent` 值 `guardi
|
||||
不影响已入队请求的位置、队内 FIFO、容量上限或等待超时。两项默认均为 `0`
|
||||
|
||||
`preferHigherWeight` 默认关闭。开启后,更高权重账号恢复可用时,后续允许重新选号的请求优先回切;
|
||||
同权重且可用的会话亲和继续保留。没有可用亲和时,在最高可用权重层内按配置评分。
|
||||
同权重且可用的会话亲和继续保留。OpenAI 优先模式沿用可用的会话主账号,不因权重回切而分流。
|
||||
没有可用亲和时,在最高可用权重层内按配置评分。
|
||||
原生续写账号绑定仍是硬约束,不因回切而主动换号或触发历史重放。配置随运行设置原子保存和发布,
|
||||
新请求使用新值,已开始请求及其重试沿用原快照,无需重启
|
||||
|
||||
|
||||
@@ -354,6 +354,7 @@ Client Key 并发占用、账号调度槽位与请求恢复记录使用可续期
|
||||
`ConcurrencyWaitQueue` 在同一锁内读取队长并入队;Provider 只传递已限定续写范围的候选。
|
||||
排队系数为零时保留最短队列规则;已入队位置、队内 FIFO、取消回收、容量上限和请求共享等待预算保持原合同。
|
||||
高权重回切仅影响智能调度的软亲和:先验证候选资格,再决定是否由更高权重层覆盖亲和;同层亲和保留。
|
||||
OpenAI 优先模式沿用可用的会话主账号,高权重回切仅参与需要重新选号的请求。
|
||||
Provider 限定的原生续写账号范围仍是硬约束。回切在请求选号时发生,不新增后台任务或主动历史重放。
|
||||
插件显式选号沿用既有候选校验和实际亲和结果,委托内置选号时才应用智能调度配置
|
||||
|
||||
@@ -614,18 +615,19 @@ Continuation 仍受原请求的 Client Key、账号范围、Provider 和发送/
|
||||
OpenAI Provider 解释官方逻辑 `session_id` 与 `thread_id`,按 Client Key 隔离账号绑定,
|
||||
不将缓存路由键或请求内容推断为账号身份。账号亲和模式随请求策略冻结:
|
||||
|
||||
- 宽松:根线程与各子线程独立绑定,新子线程优先使用根账号,模型权限、可用性或容量不允许时可独立选号;
|
||||
根绑定只提供初始偏好,子线程认领、迁移和续写校验只操作自己的绑定,根迁移也不改写已有子绑定
|
||||
- 宽松:会话内请求直接按调度策略选号,不使用主账号偏好,成功准入后更新当前账号
|
||||
- 优先:会话内所有可关联请求优先使用主账号,并发已满、请求间隔未到、模型权限或可用性不允许时按调度策略临时分流;
|
||||
首次成功准入认领会话主账号,分流只改变本次租约,不改写绑定,后续请求继续优先主账号
|
||||
- 严格:根线程及后代共享当前账号,后代没有绑定时等待根线程认领,账号不可用时只排队,根迁移后重读共享绑定
|
||||
|
||||
无法识别线程的后代请求保留跟随约束。可关联的 Search、Images、Live 创建请求使用所属线程的绑定。
|
||||
可关联的 Search、Images、Live 创建请求共用会话绑定,宽松和优先模式不依赖线程身份分流;严格模式下后代请求保留跟随约束。
|
||||
需要选号时统一使用配置的调度策略;插件显式选号沿用原有裁决,native continuation 仍受独立的状态 owner 与安全重放边界约束
|
||||
|
||||
Store 只保存带版本的绑定事实,Provider 在取得租约后、发送前原子认领或迁移;快照冲突释放租约并重新选择。
|
||||
Store 只保存带版本的绑定事实,Provider 在取得租约后、发送前原子认领、续期或按模式迁移;快照冲突释放租约并重新选择。
|
||||
响应完成不写回账号,迁移前已准入的请求可以完成,不能把绑定改回旧账号。绑定存储不可用时不绕过绑定发送
|
||||
|
||||
官方独立 Images 仅携带 `turn_id`,通过已观测 Responses 轮次关联到会话,关联同时保留根线程或后代线程的调度权限。
|
||||
轮次关联保存不透明线程键及可选的根会话键,不复制账号;显式根身份只用于校验轮次归属。
|
||||
轮次关联保存不透明会话键,不复制账号;显式会话身份只用于校验轮次归属。
|
||||
绑定和轮次关联按同一请求策略中的可配置时长保留,均按 Client Key 隔离。
|
||||
成功准入按冻结时长续期,已关联的 Images 同时续期轮次关联;更新配置不扫描旧键,响应完成不续期。
|
||||
未知轮次不推测会话归属,已有轮次不能改指其他会话或更改调度权限
|
||||
|
||||
Reference in New Issue
Block a user