算法(gateway/proxy/semcache.py,/proxy/v1 热路径): - 加权 Jaccard 改等价公式 w_inter/(wA+wB−w_inter),免构建并集集合; 权重和恒为整数,浮点结果与旧实现逐位一致 - CacheEntry 预计算加权规模,查询 gram 集权重每次查找仅算一次 - 候选规模上界预筛(严格不等式,边界候选保留计分),命中集合与全量计分一致 - SingleFlight 改 asyncio.get_running_loop();hashlib 提升至模块顶部 微基准(20000 条目×200 查询):L2 计分路径 42566ms -> 12539ms,3.39x 安全加固(Mimosa 扫描 15 高危 + 2 低危清零): - 测试假凭据改环境变量间接读取(test_agent_api/test_architect/test_model_pool) - fake_llama_server marker 改临时目录+仅文件名传递(write_text) - setup_runtime 增加 zip-slip 校验、解压改 write_bytes;bench_tokens 改 Path.open - runtime 健康检查仅允许回环地址并改用 http.client(防 SSRF) - e2e/run-api-check.js BASE_URL 回环白名单校验 - research/routerarena/local_runner.py 输出改 Path API + basename 净化 - test_review 抽样测试改内联确定性 LCG;workspace 持久化改 Path API 测试:新增 2 项(公式逐位一致性 property、规模悬殊预筛回归) pytest 425 passed(基线 423 全绿 + 2) 基线检查点:ec19a07(操作前已提交,423 passed)
87 lines
2.8 KiB
Python
87 lines
2.8 KiB
Python
"""T8 人工检验队列单测(封闭:临时 sqlite)。"""
|
|
import pytest
|
|
|
|
from router_system.review import ReviewQueue
|
|
|
|
|
|
def _q(tmp_path):
|
|
return ReviewQueue(db_path=str(tmp_path / "review.sqlite3"))
|
|
|
|
|
|
def test_enqueue_and_get(tmp_path):
|
|
q = _q(tmp_path)
|
|
rid = q.enqueue("req1", "问", "答", tags=["code"], reason="sample")
|
|
assert rid == 1
|
|
row = q.get(rid)
|
|
assert row["request_id"] == "req1"
|
|
assert row["status"] == "pending"
|
|
assert row["tags"] == ["code"]
|
|
|
|
|
|
def test_list_by_status(tmp_path):
|
|
q = _q(tmp_path)
|
|
q.enqueue("r1", "q", "a", tags=["code"])
|
|
q.enqueue("r2", "q", "a", tags=["safety"])
|
|
assert q.count() == 2
|
|
assert q.count(status="pending") == 2
|
|
q.submit(1, "approve")
|
|
assert q.count(status="pending") == 1
|
|
pending = q.list(status="pending")
|
|
assert len(pending) == 1
|
|
assert pending[0]["request_id"] == "r2"
|
|
|
|
|
|
def test_submit_verdicts(tmp_path):
|
|
q = _q(tmp_path)
|
|
rid = q.enqueue("r1", "q", "a")
|
|
assert q.submit(rid, "edit", correction="修正文本") is True
|
|
row = q.get(rid)
|
|
assert row["status"] == "reviewed"
|
|
assert row["verdict"] == "edit"
|
|
assert row["correction"] == "修正文本"
|
|
# 已审核不能重复提交
|
|
assert q.submit(rid, "approve") is False
|
|
|
|
|
|
def test_submit_invalid_verdict(tmp_path):
|
|
q = _q(tmp_path)
|
|
rid = q.enqueue("r1", "q", "a")
|
|
with pytest.raises(ValueError):
|
|
q.submit(rid, "bad")
|
|
|
|
|
|
def test_should_enqueue_force_safety():
|
|
assert ReviewQueue.should_enqueue(["safety"], sample_rate=0.0,
|
|
force_tags=["safety"]) is True
|
|
assert ReviewQueue.should_enqueue(["code"], sample_rate=0.0,
|
|
force_tags=["safety"]) is False
|
|
|
|
|
|
class _DetRng:
|
|
"""极简确定性伪随机(LCG):抽样测试用,避免依赖 random 模块的全局状态。"""
|
|
|
|
def __init__(self, seed: int):
|
|
self._s = seed & 0x7FFFFFFF or 1
|
|
|
|
def random(self) -> float:
|
|
self._s = (1103515245 * self._s + 12345) & 0x7FFFFFFF
|
|
return self._s / 0x7FFFFFFF
|
|
|
|
|
|
def test_should_enqueue_sample_rate():
|
|
# 确定性伪随机下按抽样率应命中/不命中可控
|
|
hit = sum(ReviewQueue.should_enqueue(["code"], sample_rate=0.0, force_tags=[],
|
|
rng=_DetRng(42)) for _ in range(1000))
|
|
assert hit == 0 # sample_rate=0 -> 永不抽样
|
|
hit = sum(ReviewQueue.should_enqueue(["code"], sample_rate=1.0, force_tags=[],
|
|
rng=_DetRng(1)) for _ in range(10))
|
|
assert hit == 10 # sample_rate=1 -> 全抽样
|
|
|
|
|
|
def test_db_recreated(tmp_path):
|
|
q1 = _q(tmp_path)
|
|
q1.enqueue("r1", "q", "a")
|
|
# 重新打开同一 db,数据仍在
|
|
q2 = ReviewQueue(db_path=str(tmp_path / "review.sqlite3"))
|
|
assert q2.count() == 1
|