Skip to content

Commit 12403d5

Browse files
committed
fix(ai): 任务失败日志打印具体原因+密钥来源诊断——真机 unauthorized 排查
1 parent 110edce commit 12403d5

1 file changed

Lines changed: 23 additions & 2 deletions

File tree

‎app/src-tauri/src/commands_ai_refine.rs‎

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,13 @@ fn run_refine_task(st: AppState, task_id: u64, session_id: i64, mock: bool) {
271271
set_task(&st, task_id, AiTaskState::Succeeded);
272272
}
273273
Err(reason) => {
274-
eprintln!("[refine-task] task={} failed kind={}", task_id, reason.kind());
274+
// 打印具体 message——区分"未配置密钥"vs"密钥无效(401/403)"(真机排查)
275+
eprintln!(
276+
"[refine-task] task={} failed kind={} msg={}",
277+
task_id,
278+
reason.kind(),
279+
reason.message()
280+
);
275281
set_task(&st, task_id, AiTaskState::Failed { reason });
276282
}
277283
}
@@ -333,7 +339,22 @@ fn run_refine_task_inner(
333339
.lock()
334340
.map_err(|e| AiTaskFailure::Other(e.to_string()))?
335341
.clone();
336-
let client = AiClient::from_settings(&settings, st.ai_credentials.load_key().ok().flatten());
342+
let env_key = std::env::var("SILICONFLOW_API_KEY").ok().filter(|k| !k.is_empty());
343+
let stored_key = st.ai_credentials.load_key().ok().flatten();
344+
// 密钥来源诊断(脱敏:只打长度+前 6 字符;真机 unauthorized 排查 2026-08-21)
345+
eprintln!(
346+
"[refine-task] task={} key: env={} stored={}",
347+
task_id,
348+
env_key
349+
.as_ref()
350+
.map(|k| format!("{}:{}..", k.len(), &k[..6.min(k.len())]))
351+
.unwrap_or_else(|| "无".to_string()),
352+
stored_key
353+
.as_ref()
354+
.map(|k| format!("{}:{}..", k.len(), &k[..6.min(k.len())]))
355+
.unwrap_or_else(|| "无".to_string()),
356+
);
357+
let client = AiClient::from_settings(&settings, stored_key);
337358
let adapter = AiNoteRefineAdapter::new(client.clone());
338359
let mock_adapter = AiMockAdapter;
339360
let mut refined = String::new();

0 commit comments

Comments
 (0)