enable_fuel_rate.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. class EnableFuelRateTool:
  2. name = 'enable_fuel_rate'
  3. route_path = '/mcp/tools/enableFuelRate'
  4. backend = 'base'
  5. def __init__(self, api_client=None):
  6. self.api_client = api_client
  7. def metadata(self):
  8. return {
  9. 'name': self.name,
  10. 'description': (
  11. '使用场景:把燃油系数生效或启用。燃油代码必须来自query_fuel_rate_list,格式为RY加数字。'
  12. '可以一次启用多条,最多20条。草稿和失效都可以启用。'
  13. '已经启用的不能再次启用。'
  14. '禁止使用:新增、编辑、失效、删除、手填不存在的燃油代码。'
  15. '参数只用于工具内部调用;最终回答只能展示中文业务名称和燃油代码。'
  16. ),
  17. 'input_schema': {
  18. 'type': 'object',
  19. 'properties': {
  20. 'fuel_no': {
  21. 'type': 'array',
  22. 'minItems': 1,
  23. 'maxItems': 20,
  24. 'items': {
  25. 'type': 'string',
  26. 'minLength': 1,
  27. 'maxLength': 20,
  28. },
  29. 'description': '要启用的燃油代码,例如["RY12"]。',
  30. },
  31. },
  32. 'required': ['fuel_no'],
  33. 'additionalProperties': False,
  34. },
  35. }
  36. def call(self, fuel_no, request_id='rq_enable_fuel_rate'):
  37. if self.api_client is None:
  38. raise RuntimeError('api client is required for enable_fuel_rate')
  39. return self.api_client.call_tool(
  40. self.name,
  41. self.route_path,
  42. {'fuel_no': _fuel_numbers(fuel_no)},
  43. request_id,
  44. )
  45. def _fuel_numbers(value):
  46. if isinstance(value, str):
  47. value = [value]
  48. if not isinstance(value, list) or not value or len(value) > 20:
  49. raise ValueError('fuel_no is invalid')
  50. numbers = []
  51. seen = set()
  52. for item in value:
  53. if not isinstance(item, str) or not item.strip() or len(item.strip()) > 20:
  54. raise ValueError('fuel_no is invalid')
  55. number = item.strip()
  56. if number in seen:
  57. continue
  58. seen.add(number)
  59. numbers.append(number)
  60. if not numbers:
  61. raise ValueError('fuel_no is invalid')
  62. return numbers