verify_business_wait_sample.py 1.6 KB

1234567891011121314151617181920212223242526272829303132
  1. import argparse
  2. import json
  3. from pathlib import Path
  4. def verify(path):
  5. # 只读取已保存的真实供应商响应与工具记录,不构造响应或再次调用模型。
  6. data = json.loads(path.read_text(encoding="utf-8"))
  7. assert data["status"] == "COMPLETED"
  8. assert 0 < data["actual_calls"] == len(data["attempts"]) <= data["request_limit"] == 3
  9. assert all(item["status"] == "RECEIVED" and item["usage"] for item in data["attempts"])
  10. calls = [call for message in data["messages"]
  11. for call in message["data"].get("tool_calls", [])]
  12. assert sum(call["name"] == "create_exchange_proposal" for call in calls) == 1
  13. assert any(call["name"] == "get_ticket" for call in calls)
  14. assert not any(call["name"] in {"confirm", "decide", "submit_exchange"} for call in calls)
  15. tickets = [json.loads(message["data"]["content"]) for message in data["messages"]
  16. if message["type"] == "tool"]
  17. assert tickets[-1]["status"] == "REJECTED" and tickets[-1]["operation_id"] is None
  18. assert tickets[-1]["ticket_id"] == tickets[0]["ticket_id"]
  19. assert data["messages"][-1]["type"] == "ai" and data["messages"][-1]["data"]["content"]
  20. print(json.dumps({
  21. "status": data["status"], "actual_calls": data["actual_calls"],
  22. "total_tokens": sum(item["usage"]["total_tokens"] for item in data["attempts"]),
  23. "ticket_status": tickets[-1]["status"], "additional_model_calls": 0,
  24. }))
  25. if __name__ == "__main__":
  26. parser = argparse.ArgumentParser(description="复核真实模型恢复运行的持久样本")
  27. parser.add_argument("path", type=Path)
  28. verify(parser.parse_args().path)