新增: F-01阶段5模型路由调用点接入
This commit is contained in:
@@ -187,9 +187,12 @@ pub async fn evaluate_idea(
|
||||
let scores = df_ideas::scoring::ScoringEngine::compute_default(&idea);
|
||||
|
||||
// 对抗式评估(构造注入:从 DB 读默认 provider 装配 LLM,无 provider/构造失败 → 启发式兜底)
|
||||
// F-01 阶段5: 透传 model_configs 池,evaluate_with_llm 经路由选模型(池空兜底 default_model)。
|
||||
let provider = build_default_provider(&state).await;
|
||||
let engine = match provider {
|
||||
Some(p) => df_ideas::adversarial::AdversarialEngine::new(Arc::from(p)),
|
||||
Some((p, pool)) => {
|
||||
df_ideas::adversarial::AdversarialEngine::with_pool(Arc::from(p), pool)
|
||||
}
|
||||
None => df_ideas::adversarial::AdversarialEngine::heuristic(),
|
||||
};
|
||||
let eval = engine.evaluate(&idea).await.map_err(err_str)?;
|
||||
@@ -262,7 +265,12 @@ pub async fn evaluate_idea(
|
||||
///
|
||||
/// 复用 `commands::ai::secret::build_provider_for`(resolve→ensure→build 三步),
|
||||
/// 与 AI Chat / 项目扫描的 provider 构造路径统一(FR-S1 密钥解析一致)。
|
||||
async fn build_default_provider(state: &State<'_, AppState>) -> Option<Box<dyn LlmProvider>> {
|
||||
///
|
||||
/// 返回 (provider, model_pool):model_pool = 选中 provider 的 model_configs(F-01 阶段5,
|
||||
/// 供对抗评估路由)。池空(用户未拉取)→ 调用方兜底 default_model。
|
||||
async fn build_default_provider(
|
||||
state: &State<'_, AppState>,
|
||||
) -> Option<(Box<dyn LlmProvider>, Vec<df_ai::df_ai_core::model::ModelConfig>)> {
|
||||
let providers = state.ai_providers.list_all().await.ok()?;
|
||||
let pc = providers
|
||||
.iter()
|
||||
@@ -270,7 +278,7 @@ async fn build_default_provider(state: &State<'_, AppState>) -> Option<Box<dyn L
|
||||
.cloned()
|
||||
.or_else(|| providers.into_iter().next())?;
|
||||
match crate::commands::ai::secret::build_provider_for(&pc) {
|
||||
Ok(p) => Some(p),
|
||||
Ok(p) => Some((p, pc.model_configs.clone())),
|
||||
Err(e) => {
|
||||
// 密钥不可用:启发式兜底,不阻断评估(与 evaluate_idea LLM 失败降级语义一致)
|
||||
tracing::warn!("默认 provider 密钥不可用,对抗评估走启发式: {e}");
|
||||
|
||||
Reference in New Issue
Block a user