"""预置调用轨迹，无模型推理。演示校验、工具分发、结果关联和轮数限制。"""
from tool_contracts import DEMO_USER, ToolFailure, dispatch


def run() -> list[dict]:
    # 这些消息由作者手工安排，不能当作模型真实选择结果。
    turns = [
        {"calls": [{"id": "c1", "name": "get_order", "arguments": {"order_id": "A1042"}}]},
        {"calls": [{"id": "c2", "name": "get_refund_policy", "arguments": {"order_id": "A1042"}}]},
        {"answer": "教学固定答复：时间条件满足，质量尚未核实；符合 P7-v2 后商家承担运费。"},
    ]
    history = []
    seen_ids = set()
    tool_count = 0
    for turn in turns[:4]:
        history.append({"role": "assistant", **turn})
        if "answer" in turn:
            return history
        for call in turn["calls"]:
            if call["id"] in seen_ids or tool_count >= 4:
                raise RuntimeError("duplicate_call_id_or_tool_limit")
            seen_ids.add(call["id"])
            tool_count += 1
            try:
                result = {"ok": True, "data": dispatch(call["name"], call["arguments"], DEMO_USER)}
            except ToolFailure as error:
                result = {"ok": False, "error": str(error)}
            # 统一教学消息，不是某个模型 API 的精确请求格式。
            history.append({"role": "tool", "call_id": call["id"], "result": result})
    raise RuntimeError("iteration_limit")


if __name__ == "__main__":
    import json
    print(json.dumps(run(), ensure_ascii=False, indent=2))
