tool_parameter_converter.py 2.8 KB

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