实现侧: - 上下文:任务范围拆分为 范围校验/范围授权;索引按可发现口径重建、索引新鲜度改对称差;依赖校验统一快照漂移说明。 - 知识方法:方法与材料读取口径统一;超限方法材料按可选省略,核对路径不再二次计费;删除无合同的读时重算。 - 任务运行:新增 context.usage/tool.denied 事件类型;连接池常驻并在装配生命周期内开关;调用结算与核对分列。 - 效果评测/审校修订/交付连载/作者经验/作品规划:凭据冻结、标定消费、导出补证、事实引文核对等收尾修复。 - 资源加载:能力正文不再夹带索引用的导航注记(该注记此前进入角色与技能的模型提示)。 - 元数据:受保护骨架与代码保护属性对齐;字段校验与内置结构口径同步。 - 基础设施:环境预检进入装配生命周期;数据库连接运行期字段不参与相等比较;索引指纹归一化 jsonb 浮点。 - 删除被替代实现:7 份旧提示词模板与空壳 资料来源 读取器。 用例侧: - 用例身份与导航元信息迁移;夹具补生命周期、同库暴露与模板封存; - 本轮定向修复:方法材料省略、事实引文、迁移回执、额度与暂停用例、慢用例超时预算等。
146 lines
5.7 KiB
Python
146 lines
5.7 KiB
Python
"""数据集的来源泄漏、版本和公开输入合同,不认证真实模型效果。"""
|
|
|
|
import json
|
|
|
|
import pytest
|
|
from pydantic import ValidationError
|
|
|
|
from muse.效果评测.接口 import 公开评测输入, 冻结数据集, 数据样本, 数据集发布, 评测错误
|
|
|
|
|
|
def _sample(id_="sample-1", split="holdout", group="book-1", text="我的公开合成正文。"):
|
|
return 数据样本(
|
|
sample_id=id_,
|
|
source_ref="synthetic:sample",
|
|
license_ref="synthetic:许可",
|
|
source_groups=(group,),
|
|
split=split,
|
|
input=公开评测输入(instruction="保持原意改写。", original=text),
|
|
answer={"private": "只属于oracle的金标准"},
|
|
)
|
|
|
|
|
|
@pytest.mark.case_id(
|
|
"NC-w25-252001",
|
|
environment="离线纯合同",
|
|
given="含私有答案与可变输入的数据集",
|
|
when="冻结后修改原请求容器",
|
|
then=["公开输入与答案分开、封存副本不随请求变化"],
|
|
contract="docs/系统架构/新版设计/模块设计/B10-效果评测.md",
|
|
)
|
|
def test_封存输入和答案分开且不受原请求容器修改影响__252001():
|
|
s = _sample()
|
|
request = 数据集发布(dataset_id="synthetic", revision=1, samples=(s,))
|
|
frozen = 冻结数据集(request)
|
|
assert "只属于oracle" not in json.dumps(frozen["public"], ensure_ascii=False)
|
|
assert frozen["answers"][0]["answer"] == s.answer
|
|
s.answer["private"] = "后来改变的值"
|
|
s.input.context["nested"] = {"change": 1}
|
|
assert frozen["answers"][0]["answer"]["private"] == "只属于oracle的金标准"
|
|
assert frozen["public"]["samples"][0]["input"]["context"] == {}
|
|
changed = 冻结数据集(request)
|
|
assert frozen["version_id"] == changed["version_id"]
|
|
assert frozen["public_hash"] != changed["public_hash"]
|
|
assert frozen["answer_hash"] != changed["answer_hash"]
|
|
|
|
|
|
@pytest.mark.case_id(
|
|
"NC-w25-252002",
|
|
environment="离线纯合同",
|
|
given="重复样本或跨分割的同源及变体",
|
|
when="发布前核对分割",
|
|
then=["重复身份、同源跨分割及空来源许可被拒绝"],
|
|
contract="docs/系统架构/新版设计/模块设计/B10-效果评测.md",
|
|
)
|
|
@pytest.mark.parametrize(
|
|
"bad",
|
|
[
|
|
"duplicate_id",
|
|
"same_group",
|
|
"same_text",
|
|
"instruction_variant",
|
|
"duplicate_group",
|
|
"blank_source",
|
|
"blank_license",
|
|
],
|
|
)
|
|
def test_样本重复和跨分割来源泄漏被拒绝__252002(bad):
|
|
a = _sample()
|
|
b = _sample("sample-2", "calibration", "book-2", "另一段不同正文。")
|
|
if bad == "duplicate_id":
|
|
b = b.model_copy(update={"sample_id": a.sample_id})
|
|
elif bad == "same_group":
|
|
b = b.model_copy(update={"source_groups": a.source_groups})
|
|
elif bad in {"same_text", "instruction_variant"}:
|
|
b = b.model_copy(
|
|
update={
|
|
"input": a.input.model_copy(
|
|
update={"instruction": "改变任务要求"} if bad == "instruction_variant" else {}
|
|
)
|
|
}
|
|
)
|
|
elif bad == "duplicate_group":
|
|
b = b.model_copy(update={"source_groups": ("book-2", "book-2")})
|
|
elif bad == "blank_source":
|
|
b = b.model_copy(update={"source_ref": " "})
|
|
else:
|
|
b = b.model_copy(update={"license_ref": " "})
|
|
with pytest.raises(评测错误):
|
|
冻结数据集(数据集发布(dataset_id="synthetic", revision=1, samples=(a, b)))
|
|
|
|
|
|
@pytest.mark.case_id(
|
|
"NC-w25-252003",
|
|
environment="离线纯合同",
|
|
given="没有正文与背景的纯指令任务",
|
|
when="比较任务内容分组",
|
|
then=["不同任务可分割,相同指令不能跨分割"],
|
|
contract="docs/系统架构/新版设计/模块设计/B10-效果评测.md",
|
|
)
|
|
def test_只有指令的样本按实际任务内容识别而非都视为空文本__252003():
|
|
a = _sample(split="discovery", text="").model_copy(
|
|
update={"input": 公开评测输入(instruction="提出关于雨天的故事。")}
|
|
)
|
|
b = _sample("sample-2", "holdout", "book-2", text="").model_copy(
|
|
update={"input": 公开评测输入(instruction="提出关于沙漠的故事。")}
|
|
)
|
|
result = 冻结数据集(数据集发布(dataset_id="synthetic", revision=1, samples=(a, b)))
|
|
assert len(result["public"]["samples"]) == 2
|
|
with pytest.raises(评测错误):
|
|
冻结数据集(
|
|
数据集发布(
|
|
dataset_id="synthetic",
|
|
revision=1,
|
|
samples=(a, b.model_copy(update={"input": a.input})),
|
|
)
|
|
)
|
|
|
|
|
|
@pytest.mark.case_id(
|
|
"NC-w25-252004",
|
|
environment="离线纯合同",
|
|
given="含答案、臂或模型字段的生成输入",
|
|
when="输入合同校验",
|
|
then=["拒绝内部元信息,不自动合并进生成材料"],
|
|
contract="docs/系统架构/新版设计/模块设计/B10-效果评测.md",
|
|
)
|
|
@pytest.mark.parametrize("field", ["answer", "oracle", "blind_mapping", "arm", "model_id"])
|
|
def test_模型输入外壳不接受评测内部字段__252004(field):
|
|
with pytest.raises(ValidationError):
|
|
公开评测输入.model_validate({"instruction": "公开任务", field: {"secret": "不得合并"}})
|
|
|
|
|
|
@pytest.mark.case_id(
|
|
"NC-w25-252005",
|
|
environment="离线纯合同",
|
|
given="相同样本按不同顺序提交",
|
|
when="冻结数据集",
|
|
then=["版本身份及公开与私有哈希不变"],
|
|
contract="docs/系统架构/新版设计/模块设计/B10-效果评测.md",
|
|
)
|
|
def test_样本顺序不改变数据集身份及封存哈希__252005():
|
|
a, b = _sample(), _sample("sample-2", "calibration", "book-2", "另一段正文。")
|
|
one = 冻结数据集(数据集发布(dataset_id="synthetic", revision=1, samples=(a, b)))
|
|
two = 冻结数据集(数据集发布(dataset_id="synthetic", revision=1, samples=(b, a)))
|
|
assert one == two
|