"""质量属性梳理 Skill 测试(intent-understanding-layer 任务 10)。 覆盖需求 7.1、7.5、7.6:注册发现、extract→compute→explain 全链路、无外推。 """ from __future__ import annotations from kernel.registry import SkillRegistry from kernel.skill_base import RawInput from skills.descriptive_summary.skill import DescriptiveSummarySkill def _confirmed_sheet_raw(): """构造一个含已确认任务单的 RawInput(SL-0010 风格)。""" task_sheet = { "extracted_items": [ {"field": "spec_limit", "value": "总杂≤2.0%", "source_ref": "限度 总杂≤2.0%", "group": {"attribute": "总杂"}}, {"field": "value", "value": "0.00", "source_ref": "总杂% 0", "group": {"strength": "20μg", "batch": "B1", "attribute": "总杂"}}, {"field": "value", "value": "0.00", "source_ref": "总杂% 0", "group": {"strength": "40μg", "batch": "B2", "attribute": "总杂"}}, {"field": "value", "value": "99.19", "source_ref": "含量 99.19", "group": {"strength": "20μg", "batch": "B1", "attribute": "含量"}}, ] } return RawInput(goal="梳理各规格质量属性", extra={"task_sheet": task_sheet}) class _Svc: llm = None lang = "zh" def test_skill_discovered_by_registry(): reg = SkillRegistry() reg.discover("skills") assert reg.get("descriptive_summary") is not None def test_full_extract_compute_explain(): skill = DescriptiveSummarySkill() svc = _Svc() data = skill.extract(_confirmed_sheet_raw(), svc) assert data.method == "task_sheet" result = skill.compute(data) assert result.can_proceed is True assert result.summary["n_groups"] == 3 sections = skill.explain(result, svc) assert "overview" in sections.sections assert "data_table" in sections.sections assert "