Код Middle Агенты и вызов инструментов обновлено

Проверить вызов инструмента перед выполнением

Условие

Напишите validate_call(call, tools). tools: словарь имя -> {"required": [...], "types": {аргумент: "str" | "int" | "bool"}}. call: {"name": str, "args": dict}. Проверьте по порядку и верните первую ошибку строкой или "ok":

  1. инструмента нет: "unknown_tool";
  2. нет обязательного аргумента: "missing:<имя>" (первый по порядку required);
  3. есть аргумент, которого нет в types: "unexpected:<имя>" (первый по алфавиту);
  4. тип не совпадает: "type:<имя>" (первый по алфавиту). Для int значение bool не подходит.

Примеры

validate_call({"name":"get_order","args":{"order_id":"A-17"}}, {"get_order":{"required":["order_id"],"types":{"order_id":"str"}}}) // "ok"
validate_call({"name":"drop_db","args":{}}, {"get_order":{"required":[],"types":{}}}) // "unknown_tool"
validate_call({"name":"refund","args":{"amount":100}}, {"refund":{"required":["order_id","amount"],"types":{"order_id":"str","amount":"int"}}}) // "missing:order_id"

Как подойти

Подсказки: 1
  1. isinstance(True, int) в Python истинно.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.