tool_parameter_converter.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from typing import Any
  2. from core.tools.entities.tool_entities import ToolParameter
  3. class ToolParameterConverter:
  4. @staticmethod
  5. def get_parameter_type(parameter_type: str | ToolParameter.ToolParameterType) -> str:
  6. match parameter_type:
  7. case ToolParameter.ToolParameterType.STRING \
  8. | ToolParameter.ToolParameterType.SECRET_INPUT \
  9. | ToolParameter.ToolParameterType.SELECT:
  10. return 'string'
  11. case ToolParameter.ToolParameterType.BOOLEAN:
  12. return 'boolean'
  13. case ToolParameter.ToolParameterType.NUMBER:
  14. return 'number'
  15. case _:
  16. raise ValueError(f"Unsupported parameter type {parameter_type}")
  17. @staticmethod
  18. def cast_parameter_by_type(value: Any, parameter_type: str) -> Any:
  19. # convert tool parameter config to correct type
  20. try:
  21. match parameter_type:
  22. case ToolParameter.ToolParameterType.STRING \
  23. | ToolParameter.ToolParameterType.SECRET_INPUT \
  24. | ToolParameter.ToolParameterType.SELECT:
  25. if value is None:
  26. return ''
  27. else:
  28. return value if isinstance(value, str) else str(value)
  29. case ToolParameter.ToolParameterType.BOOLEAN:
  30. if value is None:
  31. return False
  32. elif isinstance(value, str):
  33. # Allowed YAML boolean value strings: https://yaml.org/type/bool.html
  34. # and also '0' for False and '1' for True
  35. match value.lower():
  36. case 'true' | 'yes' | 'y' | '1':
  37. return True
  38. case 'false' | 'no' | 'n' | '0':
  39. return False
  40. case _:
  41. return bool(value)
  42. else:
  43. return value if isinstance(value, bool) else bool(value)
  44. case ToolParameter.ToolParameterType.NUMBER:
  45. if isinstance(value, int) | isinstance(value, float):
  46. return value
  47. elif isinstance(value, str) and value != '':
  48. if '.' in value:
  49. return float(value)
  50. else:
  51. return int(value)
  52. case ToolParameter.ToolParameterType.FILE:
  53. return value
  54. case _:
  55. return str(value)
  56. except Exception:
  57. raise ValueError(f"The tool parameter value {value} is not in correct type of {parameter_type}.")