import assert from "node:assert/strict"; import { DEFAULT_DESCRIPTOR, cloneDescriptor, parseInstruction } from "./parser-engine.js"; const successCases = [ ["开启车载冰箱", "refrigerator.set_power", { state: "on" }], ["把冰箱温度调到4度", "refrigerator.set_temperature", { temperature_c: 4 }], ["将冷藏箱设为速冷模式", "refrigerator.set_mode", { mode: "fast_cool" }], ["关闭冰箱", "refrigerator.set_power", { state: "off" }], ]; for (const [utterance, capability, parameters] of successCases) { const result = parseInstruction(utterance, DEFAULT_DESCRIPTOR); assert.equal(result.semantic_status, "recognized_executable", utterance); assert.equal(result.execution_eligible, true, utterance); assert.equal(result.command.capability, capability, utterance); assert.deepEqual(result.command.parameters, parameters, utterance); assert.equal(result.command.executor_payload.demo_only, true, utterance); } const outOfRange = parseInstruction("把冰箱调到零下10度", DEFAULT_DESCRIPTOR); assert.equal(outOfRange.semantic_status, "recognized_unsupported"); assert.equal(outOfRange.execution_eligible, false); assert.match(outOfRange.issues.join(" "), /低于下限/); const noDevice = parseInstruction("把空调调到4度", DEFAULT_DESCRIPTOR); assert.equal(noDevice.semantic_status, "no_command"); assert.equal(noDevice.execution_eligible, false); const disabled = cloneDescriptor(); disabled.capabilities.find((item) => item.id === "refrigerator.set_temperature").enabled = false; const disabledResult = parseInstruction("把冰箱温度调到4度", disabled); assert.equal(disabledResult.semantic_status, "incomplete"); console.log(`device capability card demo: ${successCases.length + 3} parser checks passed`);