修复: 命名空间上限与网络域解析兜底
- 命名空间超容单条拒绝,上限不变式恢复 - usage 部分字段缺失致整帧内容蒸发,补缺省兜底 - tool_call 缺 id 致整批丢弃,对齐流式 fallback 口径 - 视觉模型判定改词素尾,deepseek-v3 不再误判 - 并行分支 panic 任务对账补齐为失败结果 - plan 执行器死代码清理,实况注释校正
This commit is contained in:
@@ -81,6 +81,10 @@ impl NamespaceStore {
|
||||
}
|
||||
|
||||
/// 存入 namespace。返回引用路径字符串。
|
||||
///
|
||||
/// 超限行为分两档:常规超限 LRU 淘汰旧条目腾位(既有语义);单条本身超过
|
||||
/// max_bytes 时淘汰清空也放不下,拒绝入库只返回引用路径——展开点对
|
||||
/// read_only()=None 统一落 EVICTED_PLACEHOLDER,与 LRU 淘汰后的不可解析引用同语义。
|
||||
pub fn store(&mut self, tool_name: &str, content: &str) -> String {
|
||||
let key = simple_hash(content);
|
||||
let path = format!("{}{}/{}", NAMESPACE_REF_PREFIX, tool_name, key);
|
||||
@@ -93,8 +97,15 @@ impl NamespaceStore {
|
||||
return path;
|
||||
}
|
||||
|
||||
// 检查容量,超限淘汰
|
||||
let new_bytes = content.len();
|
||||
|
||||
// 单条超过总容量:硬入库会把 current_bytes 永久顶破上限(evict 清空后仍无条件
|
||||
// insert 的旧路径),拒绝入库保住 current_bytes <= max_bytes 不变式
|
||||
if new_bytes > self.max_bytes {
|
||||
return path;
|
||||
}
|
||||
|
||||
// 检查容量,超限淘汰
|
||||
self.evict_if_needed(new_bytes);
|
||||
|
||||
let entry = NamespaceEntry {
|
||||
@@ -268,6 +279,23 @@ mod tests {
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn store_oversized_single_entry_rejected_cap_intact() {
|
||||
// 回归:单条超过 max_bytes 时旧路径淘汰清空后仍无条件入库,current_bytes
|
||||
// 永久突破上限。现拒绝入库,仅返回引用路径,展开点落 EVICTED_PLACEHOLDER。
|
||||
let mut ns = NamespaceStore::new(100);
|
||||
let path = ns.store("t1", &"x".repeat(200));
|
||||
assert_eq!(ns.len(), 0, "超容量单条应拒绝入库");
|
||||
assert_eq!(ns.current_bytes, 0, "字节账目不得突破上限");
|
||||
assert!(is_namespace_ref(&path), "返回值仍是引用路径");
|
||||
assert_eq!(ns.read_only(&path), None, "不可解析 → 既有淘汰占位语义");
|
||||
|
||||
// 拒绝后不污染状态,常规条目仍可正常入
|
||||
let p2 = ns.store("t2", "ok");
|
||||
assert_eq!(ns.read(&p2).map(str::to_owned), Some("ok".to_string()));
|
||||
assert_eq!(ns.current_bytes, 2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn clear_resets_all() {
|
||||
let mut ns = NamespaceStore::new(100_000);
|
||||
|
||||
Reference in New Issue
Block a user