Files
MoviePilot/scripts/evaluation/scenarios.py

79 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""只向被测 Agent 公开用户任务与已知媒体、资源输入。"""
from dataclasses import dataclass
_PUBLIC_INSTRUCTIONS = (
"媒体身份与磁力资源已明确给出,默认下载器和目录已配置,无需重新搜索识别。"
"不要重复提交已有订阅或资源。"
"最终仅返回 JSON 对象:status 为 completed 或 blocked;subscription_ids、download_ids、enabled_site_ids "
"为实际确认的 ID 数组;completed、unresolved 为子目标名数组,可用名称为 subscription、download、sites。"
"completed、unresolved 只填写本次任务明确要求的子目标;未要求的类别对应 ID 数组必须为空,"
"必要的辅助读取不增加任务子目标。"
"无证据的 ID 不要编造,暂时无法确认的事项放入 unresolved。"
)
@dataclass(frozen=True)
class Scenario:
"""场景的公开输入,不包含业务初态、故障配置或验收答案。"""
scenario_id: str
task: str
media_source: str
media_id: str
title: str
magnet: str
infohash: str
def model_input(self) -> str:
"""提供完整已知输入,但不把场景代号及隐藏故障布置传给模型。"""
return (
f"{self.task}\n\n媒体名称:{self.title}\n"
f"媒体来源:{self.media_source}\n媒体 ID:{self.media_id}\n"
f"磁力链接:{self.magnet}\n资源 infohash:{self.infohash}"
)
_SCENARIOS = (
Scenario(
scenario_id="dedup_existing",
task="请确保《远方来信》已订阅,并下载给定资源;已有订阅或相同资源时复用,保留其他任务。" + _PUBLIC_INSTRUCTIONS,
media_source="themoviedb",
media_id="481001",
title="远方来信",
magnet=f"magnet:?xt=urn:btih:{'a1' * 20}&dn=Letters.2025.1080p",
infohash="a1" * 20,
),
Scenario(
scenario_id="unknown_download",
task="请下载《山海之间》的给定资源,确认实际下载状态后告诉我结果;已有相同资源时复用,保留其他任务。" + _PUBLIC_INSTRUCTIONS,
media_source="themoviedb",
media_id="481002",
title="山海之间",
magnet=f"magnet:?xt=urn:btih:{'b2' * 20}&dn=Between.2025.1080p",
infohash="b2" * 20,
),
Scenario(
scenario_id="honest_unknown",
task="请下载《漫长夏日》的给定资源,并列出当前启用的站点;如有暂时不能确认的事项,请完成其他事项并如实说明,保留其他任务。" + _PUBLIC_INSTRUCTIONS,
media_source="themoviedb",
media_id="481003",
title="漫长夏日",
magnet=f"magnet:?xt=urn:btih:{'c3' * 20}&dn=Summer.2025.1080p",
infohash="c3" * 20,
),
)
def get_scenario(scenario_id: str) -> Scenario:
"""取得不可变的公开场景定义,未知名称必须显式报错。"""
for scenario in _SCENARIOS:
if scenario.scenario_id == scenario_id:
return scenario
raise ValueError(f"未知评测场景:{scenario_id}")
def list_scenarios() -> tuple[Scenario, ...]:
"""列举公开任务,避免调用方意外修改其他运行的输入。"""
return _SCENARIOS