优化: 清理无意义注释(走查编号前缀/过时历史标注/死代码注释)
This commit is contained in:
@@ -277,7 +277,7 @@ pub const CIRCUIT_BREAKER_THRESHOLD: u32 = 3;
|
||||
/// 单轮并行失败爆发,又足够长以容忍偶发抖动。
|
||||
pub const CIRCUIT_BREAKER_WINDOW: usize = 20;
|
||||
|
||||
/// BE2(AC-EFF-R2-1):断路器/探索熔断读消息的尾部窗口大小。
|
||||
/// BE2 断路器/探索熔断读消息的尾部窗口大小。
|
||||
///
|
||||
/// count_recent_failures / check_stall_breaker 只关心最近若干条消息(末尾工具结果 + 其前驱
|
||||
/// assistant tool_calls / 最近几轮工具签名),用 ContextManager::recent_messages 只 clone 尾部
|
||||
@@ -570,7 +570,7 @@ async fn stream_with_retry(
|
||||
/// 表达本轮的 4 种结束路径,供 loop 主框架据以 `return` 或继续后续处理。
|
||||
///
|
||||
/// **不在本函数范围**(loop 内其它段):
|
||||
/// - 停止/收敛/审批等待/熔断(L1815-L1917):这些在 process_tool_calls 之后,
|
||||
/// - 停止/收敛/审批等待/熔断这些在 process_tool_calls 之后,
|
||||
/// 属「工具执行后路径」,与流式调用本身解耦,留 loop 主体。
|
||||
/// - 正常完成(loop 外 L1957+):loop 退出后由 run_agentic_loop 直收尾。
|
||||
enum RoundOutcome {
|
||||
@@ -1096,12 +1096,12 @@ pub(crate) async fn run_agentic_loop(
|
||||
// 单 provider 场景:池仅 1 enabled provider → select 返回单元素 Vec → 首位 = 唯一 provider,
|
||||
// 行为同 F-01 前(零变化)。空池(0 enabled)→ fallback 入参 provider_config(保启动行为)。
|
||||
//
|
||||
// F-04b:select 返回的**完整有序 Vec** 即 fallback 序(主→备用)。本轮接入真实切换:
|
||||
// b:select 返回的**完整有序 Vec** 即 fallback 序(主→备用)。本轮接入真实切换:
|
||||
// 流式重试块外层包 `for candidate in &candidates`,主 candidate InitFailed{retryable=true}
|
||||
// 耗尽 → continue 切下一 candidate(stream_one_provider 内重建 build_provider + resolved_model
|
||||
// 在新 candidate.model_configs 上重算 select_model_id);Fatal(4xx 非429)立即放弃整轮。
|
||||
//
|
||||
// 主候选的 model_configs 用于路由(F-01),其 provider_config 用于 build_provider。
|
||||
// 主候选的 model_configs 用于路由,其 provider_config 用于 build_provider。
|
||||
// compress_via_llm / 标题 / 后台 spawn 沿用主 candidate(非 fallback 范围,见各调用点注释)。
|
||||
//
|
||||
// AiProviderRepo::new 仅 clone Arc<Database>(廉价),不复用 AppState.ai_providers
|
||||
@@ -1212,7 +1212,7 @@ pub(crate) async fn run_agentic_loop(
|
||||
}
|
||||
};
|
||||
// 用主候选覆盖入参 provider_config(下游 build_provider / 路由 / 日志均用此)。
|
||||
// mut:F-04b 切换 candidate 后更新为实际成功所用 provider(供后续 push/save/标题 spawn)。
|
||||
// mut:b 切换 candidate 后更新为实际成功所用 provider(供后续 push/save/标题 spawn)。
|
||||
let mut provider_config = primary_provider;
|
||||
// 诊断日志:401/错误时据此定位是 url/type/model/key 哪项问题(只记长度不记明文)
|
||||
tracing::info!(
|
||||
@@ -1250,7 +1250,7 @@ pub(crate) async fn run_agentic_loop(
|
||||
// 用户指定模型 override 穿透(仅主对话生效,标题/扫描/灵感仍走路由)。
|
||||
// 兜底原则:override 非空且在该 provider model_configs 池中 → 用 override;否则用 resolved_model。
|
||||
// 绝不让 override 导致无模型(空/不在池 → 落回路由结果,行为不变)。
|
||||
// mut:F-04b 切换 candidate 后由 stream_one_provider 返回的 Success.resolved_model 覆盖
|
||||
// mut:b 切换 candidate 后由 stream_one_provider 返回的 Success.resolved_model 覆盖
|
||||
// (新 candidate 模型池不同,必须重选);此后 push/save 均用迭代最新值。
|
||||
let mut resolved_model = match model_override.as_deref() {
|
||||
Some(id) if !id.is_empty()
|
||||
@@ -2238,7 +2238,7 @@ async fn count_recent_failures(
|
||||
conv_id: &str,
|
||||
fail_window: &mut std::collections::VecDeque<String>,
|
||||
) -> (u32, String) {
|
||||
// BE2(AC-EFF-R2-1):只克隆尾部 BREAKER_TAIL_N 条,避免 all_messages_clone 全量深克隆
|
||||
// BE2只克隆尾部 BREAKER_TAIL_N 条,避免 all_messages_clone 全量深克隆
|
||||
// (长对话每轮 O(n) clone 浪费)。窗口覆盖末尾 Tool 结果与其前驱 assistant tool_calls
|
||||
// (同轮工具回填通常 1~5 条,40 足富余;超窗工具映射退化为 unknown_tool,仅失败分组更粗,不误熔断)。
|
||||
let messages = {
|
||||
@@ -2298,7 +2298,7 @@ async fn count_recent_failures(
|
||||
///
|
||||
/// - run_command 等带 exit_code → `tool_name::exit=N`(非零退出码即失败类别)。
|
||||
/// - status=failed/error envelope → `tool_name::error:<错误文本稳定哈希>`:
|
||||
/// 用 fxhash 风格简单 FNV-1a 哈希避免裸截内容前缀(前 40 字符易把同类失败拆多 key
|
||||
/// 用 fxhash 风格简单 a 哈希避免裸截内容前缀(前 40 字符易把同类失败拆多 key
|
||||
/// 或异类误聚)。哈希值非敏感信息(仅断路器分组用),无碰撞顾虑(N=20 窗口内几无碰撞)。
|
||||
/// - 内容解析失败(非 JSON)→ is_failure_content 已返回 false 不会进本函数,
|
||||
/// 此处兜底返回 `tool_name::unknown` 防御。
|
||||
@@ -2327,7 +2327,7 @@ fn failure_key(tool_name: &str, content: &str) -> String {
|
||||
format!("{}::{}:{:08x}", tool_name, bucket, h)
|
||||
}
|
||||
|
||||
/// FNV-1a 32-bit 哈希(零依赖,纯函数,断路器 key 归一专用;非密码学用途)。
|
||||
/// a 32-bit 哈希(零依赖,纯函数,断路器 key 归一专用;非密码学用途)。
|
||||
fn fnv1a_32(bytes: &[u8]) -> u32 {
|
||||
let mut hash: u32 = 0x811c9dc5;
|
||||
for &b in bytes {
|
||||
@@ -2556,7 +2556,7 @@ async fn check_stall_breaker(
|
||||
// arguments 非合法 JSON 时 to_string 兜底(签名仍可比,只是兜底全量)。
|
||||
let signatures: Vec<String> = {
|
||||
let session = session_arc.lock().await;
|
||||
// BE2(AC-EFF-R2-1):只取尾部 BREAKER_TAIL_N 条(签名抽取只需最近几轮工具调用,
|
||||
// BE2只取尾部 BREAKER_TAIL_N 条(签名抽取只需最近几轮工具调用,
|
||||
// 全量 clone 纯浪费;STALL_BREAKER_SAMPLE_SIZE=12 ≪ 40,样本充足)。
|
||||
let messages = match session.conv_read(conv_id) {
|
||||
Some(conv) => conv.messages.recent_messages(BREAKER_TAIL_N),
|
||||
|
||||
Reference in New Issue
Block a user