__init__.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. from opendevin.core.exceptions import AgentMalformedActionError
  2. from .action import Action
  3. from .agent import (
  4. AgentDelegateAction,
  5. AgentFinishAction,
  6. AgentRecallAction,
  7. AgentRejectAction,
  8. AgentSummarizeAction,
  9. ChangeAgentStateAction,
  10. )
  11. from .browse import BrowseURLAction
  12. from .commands import CmdKillAction, CmdRunAction, IPythonRunCellAction
  13. from .empty import NullAction
  14. from .files import FileReadAction, FileWriteAction
  15. from .github import GitHubPushAction
  16. from .message import MessageAction
  17. from .tasks import AddTaskAction, ModifyTaskAction
  18. actions = (
  19. CmdKillAction,
  20. CmdRunAction,
  21. IPythonRunCellAction,
  22. BrowseURLAction,
  23. FileReadAction,
  24. FileWriteAction,
  25. AgentRecallAction,
  26. AgentFinishAction,
  27. AgentRejectAction,
  28. AgentDelegateAction,
  29. AddTaskAction,
  30. ModifyTaskAction,
  31. ChangeAgentStateAction,
  32. GitHubPushAction,
  33. MessageAction,
  34. )
  35. ACTION_TYPE_TO_CLASS = {action_class.action: action_class for action_class in actions} # type: ignore[attr-defined]
  36. def action_from_dict(action: dict) -> Action:
  37. if not isinstance(action, dict):
  38. raise AgentMalformedActionError('action must be a dictionary')
  39. action = action.copy()
  40. if 'action' not in action:
  41. raise AgentMalformedActionError(f"'action' key is not found in {action=}")
  42. if not isinstance(action['action'], str):
  43. raise AgentMalformedActionError(
  44. f"'{action['action']=}' is not defined. Available actions: {ACTION_TYPE_TO_CLASS.keys()}"
  45. )
  46. action_class = ACTION_TYPE_TO_CLASS.get(action['action'])
  47. if action_class is None:
  48. raise AgentMalformedActionError(
  49. f"'{action['action']=}' is not defined. Available actions: {ACTION_TYPE_TO_CLASS.keys()}"
  50. )
  51. args = action.get('args', {})
  52. try:
  53. decoded_action = action_class(**args)
  54. except TypeError:
  55. raise AgentMalformedActionError(f'action={action} has the wrong arguments')
  56. return decoded_action
  57. __all__ = [
  58. 'Action',
  59. 'NullAction',
  60. 'CmdRunAction',
  61. 'CmdKillAction',
  62. 'BrowseURLAction',
  63. 'FileReadAction',
  64. 'FileWriteAction',
  65. 'AgentRecallAction',
  66. 'AgentFinishAction',
  67. 'AgentRejectAction',
  68. 'AgentDelegateAction',
  69. 'AgentSummarizeAction',
  70. 'AddTaskAction',
  71. 'ModifyTaskAction',
  72. 'ChangeAgentStateAction',
  73. 'IPythonRunCellAction',
  74. 'MessageAction',
  75. ]