refactor: add execution backend selection
This commit is contained in:
@@ -610,8 +610,9 @@ export async function selectExecutionBackend(input: {
|
||||
primary: { provider: string; status: string };
|
||||
backups: Array<{ provider: string; status: string }>;
|
||||
}) {
|
||||
if (input.primary.provider === "master_codex_node" && input.primary.status === "ready") {
|
||||
return { backendId: "master-codex-node" };
|
||||
const primaryBackend = resolveBackendByProvider(input.primary.provider);
|
||||
if (input.primary.status === "ready") {
|
||||
return primaryBackend;
|
||||
}
|
||||
const qwen = input.backups.find((item) => item.provider === "aliyun_qwen_api" && item.status === "ready");
|
||||
if (qwen) {
|
||||
@@ -621,12 +622,20 @@ export async function selectExecutionBackend(input: {
|
||||
if (openai) {
|
||||
return { backendId: "openai-api" };
|
||||
}
|
||||
return { backendId: "master-codex-node" };
|
||||
const master = input.backups.find((item) => item.provider === "master_codex_node" && item.status === "ready");
|
||||
if (master) {
|
||||
return { backendId: "master-codex-node" };
|
||||
}
|
||||
return primaryBackend;
|
||||
}
|
||||
|
||||
export const selectExecutionBackendForTesting = selectExecutionBackend;
|
||||
```
|
||||
|
||||
补充说明:
|
||||
- selector 的运行时语义以“`ready primary` 优先,否则按 `aliyun_qwen -> openai -> master_codex_node` 顺序回退,最后再回 primary 兜底”为准。
|
||||
- 如果同一 provider 存在多个账号,只要其中任何一个是 `ready`,该 backend 就视为可选。
|
||||
|
||||
在 `/Users/kris/code/boss/src/lib/boss-master-agent.ts` 中,把 provider fallback 的选择逻辑收进一个单独调用:
|
||||
|
||||
```ts
|
||||
|
||||
@@ -138,6 +138,11 @@ interface ExecutionBackend {
|
||||
说明:
|
||||
|
||||
- 这层只负责“选择谁执行”,不负责组装 prompt,也不负责审批和业务决策
|
||||
- 运行时选择语义应明确为:
|
||||
- `ready primary` 优先
|
||||
- 否则按 `aliyun_qwen -> openai -> master_codex_node` 顺序回退
|
||||
- 如果没有任何 ready backend,再回 primary 兜底
|
||||
- 同一 provider 下如果存在多个账号,只要其中任一账号 `ready`,该 backend 就视为可选
|
||||
|
||||
### 3. `SessionRuntime`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user