新增: F-04c后端(provider池enabled/weight更新IPC+set_caps启动接入)
This commit is contained in:
@@ -294,8 +294,38 @@ impl AppState {
|
||||
// 启动恢复:重启前卡 pending 的工具审批(内存 pending_approvals 已丢)从审计表重建,
|
||||
// 使重启后待审批不丢。前端经 ai_pending_tool_calls + switchConversation 恢复 toolCard 态。
|
||||
crate::commands::ai::restore_pending_approvals(&state).await;
|
||||
// F-260614-04c: 启动一次性初始化 per-provider caps 表。
|
||||
// 根据 DB enabled providers 建 HashMap<provider_id, global_cap>,让 agentic loop 的
|
||||
// acquire_for_provider 从 None(无限流)切换到 Some(按配置限流)。disabled / weight=0
|
||||
// 的 provider 不入表(其被 provider_pool::select 过滤出候选,不会被 acquire)。
|
||||
// 单 provider 场景:该 provider cap=global_cap → acquire_global+acquire_for_provider
|
||||
// 串联,min(3,3)=3,有效上限同未配置 → 行为零变化。
|
||||
state.reload_provider_caps().await;
|
||||
Ok(state)
|
||||
}
|
||||
|
||||
/// F-260614-04c: 从 DB enabled providers 重建 per_provider caps 并 set_provider_caps。
|
||||
///
|
||||
/// 启动 + provider 变更(ai_update_provider_pool / 删除 / 新增)后调用。caps 策略见
|
||||
/// AppState::init 注释(本轮每 provider cap = global_cap,F-04d 配差异化上限时仅改此)。
|
||||
pub async fn reload_provider_caps(&self) {
|
||||
let providers = match self.ai_providers.list_all().await {
|
||||
Ok(ps) => ps,
|
||||
Err(e) => {
|
||||
tracing::warn!(
|
||||
"[F-04c] 读取 providers 重建 caps 失败,保持当前 caps 表不变: {}", e
|
||||
);
|
||||
return;
|
||||
}
|
||||
};
|
||||
let global_cap = 3; // 与 LlmConcurrency::new(3, 2) 的 global 上限对齐。
|
||||
let caps: HashMap<String, usize> = providers
|
||||
.into_iter()
|
||||
.filter(|p| p.enabled && p.weight > 0)
|
||||
.map(|p| (p.id, global_cap))
|
||||
.collect();
|
||||
self.llm_concurrency.set_provider_caps(caps).await;
|
||||
}
|
||||
}
|
||||
|
||||
/// 构建节点注册表 — 注册内置节点
|
||||
|
||||
Reference in New Issue
Block a user