48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
"""将 zcbot JSON suite 导出为 Inspect AI 可摄取的 JSONL。
|
||
|
||
Inspect 运行环境与项目 `.venv` 隔离;JSONL 是稳定交换契约。
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
import json
|
||
from pathlib import Path
|
||
|
||
from .models import EvalSuite
|
||
|
||
|
||
def export_inspect_jsonl(suite: EvalSuite, output: Path) -> int:
|
||
output.parent.mkdir(parents=True, exist_ok=True)
|
||
lines: list[str] = []
|
||
for case in suite.cases:
|
||
record = {
|
||
"id": case.id,
|
||
"input": case.prompt,
|
||
# zcbot 使用结构化 assertions 评分,不强行伪造单一字符串 target。
|
||
"target": "",
|
||
"metadata": {
|
||
"name": case.name,
|
||
"dimension": case.dimension,
|
||
"weight": case.weight,
|
||
"repetitions": case.repetitions or suite.default_repetitions,
|
||
"timeout_s": case.timeout_s,
|
||
"skill": case.skill,
|
||
"model_profile": case.model_profile,
|
||
"tags": list(case.tags),
|
||
"assertions": [
|
||
{
|
||
"type": item.type,
|
||
"weight": item.weight,
|
||
"value": item.value,
|
||
"path": item.path,
|
||
"min_bytes": item.min_bytes,
|
||
"max_value": item.max_value,
|
||
"description": item.description,
|
||
}
|
||
for item in case.assertions
|
||
],
|
||
},
|
||
}
|
||
lines.append(json.dumps(record, ensure_ascii=False))
|
||
output.write_text("\n".join(lines) + "\n", encoding="utf-8")
|
||
return len(lines)
|