from typing import Optional from lagent.actions.base_action import BaseAction, tool_api from lagent.actions.parser import BaseParser from lagent.schema import ActionReturn, ActionStatusCode, ActionValidCode class InvalidAction(BaseAction): """This is a invalid action class, which is used to return error message when the action is invalid. Args: err_msg (str): The error message. Defaults to 'The action is invalid, please check the action name'. Returns: ActionReturn: The action return. """ def __init__(self, err_msg: str = 'The action is invalid, please check the action name.', description: Optional[dict] = None, parser=BaseParser) -> None: super().__init__(description, parser) self._err_msg = err_msg @tool_api def run(self, err_msg: Optional[str] = None) -> ActionReturn: """Return the error message. Args: err_msg (str, optional): The error message. If err_msg is not None, it will be returned, otherwise the default error message will be returned. Defaults to None. """ action_return = ActionReturn( url=None, args=dict(text=err_msg), errmsg=err_msg or self._err_msg, type=self.name, valid=ActionValidCode.INVALID, state=ActionStatusCode.API_ERROR) return action_return class NoAction(BaseAction): """This is a no action class, which is used to return error message when the response does not follow the format. Args: err_msg (str): The error message. Defaults to 'Please follow the format'. """ def __init__(self, err_msg: str = 'Please follow the format', description: Optional[dict] = None, parser=BaseParser): super().__init__(description, parser) self._err_msg = err_msg @tool_api def run(self, err_msg: Optional[str] = None) -> ActionReturn: """Return the error message. Args: err_msg (str, optional): The error message. If err_msg is not None, it will be returned, otherwise the default error message will be returned. Defaults to None. Returns: ActionReturn: The action return. """ action_return = ActionReturn( url=None, args=dict(text=err_msg), type=self.name, errmsg=err_msg or self._err_msg, valid=ActionValidCode.INVALID, state=ActionStatusCode.API_ERROR) return action_return class FinishAction(BaseAction): """This is a finish action class, which is used to return the final result.""" def __init__(self, description: Optional[dict] = None, parser=BaseParser): super().__init__(description, parser) @tool_api def run(self, response: str) -> ActionReturn: """Return the final result. Args: response (str): The final result. Returns: ActionReturn: The action return. """ action_return = ActionReturn( url=None, args=dict(text=response), result=[dict(type='text', content=response)], type=self.name, valid=ActionValidCode.FINISH, state=ActionStatusCode.SUCCESS) return action_return