motleycrew.agents

Everything agent-related: wrappers, pre-made agents, output handlers etc.

Modules

abstract_parent

crewai

langchain

llama_index

mixins

parent

class motleycrew.agents.MotleyAgentAbstractParent

Bases: Runnable, ABC

Abstract class for describing agents.

Agents in motleycrew implement the Langchain Runnable interface.

abstract invoke(input: dict, config: RunnableConfig | None = None, **kwargs: Any) Any

Transform a single input into an output. Override to implement.

Parameters:
  • input – The input to the Runnable.

  • config – A config to use when invoking the Runnable. The config supports standard keys like ‘tags’, ‘metadata’ for tracing purposes, ‘max_concurrency’ for controlling how much work to do in parallel, and other keys. Please refer to the RunnableConfig for more details.

Returns:

The output of the Runnable.

abstract as_tool(**kwargs) Any

Convert the agent to a tool to be used by other agents via delegation.

Parameters:

kwargs – Additional arguments to pass to the tool. See motleycrew.tools.tool.MotleyTool for more details.

class motleycrew.agents.MotleyAgentParent(prompt_prefix: str | ChatPromptTemplate | None = None, description: str | None = None, name: str | None = None, agent_factory: MotleyAgentFactory | None = None, tools: Sequence[MotleySupportedTool] | None = None, force_output_handler: bool = False, verbose: bool = False)

Bases: MotleyAgentAbstractParent, ABC

Parent class for all motleycrew agents.

This class is abstract and should be subclassed by all agents in motleycrew.

In most cases, it’s better to use one of the specialized agent classes, such as LangchainMotleyAgent or LlamaIndexMotleyAgent, which provide various useful features, such as observability and output handling, out of the box.

If you need to create a custom agent, subclass this class and implement the invoke method.

__init__(prompt_prefix: str | ChatPromptTemplate | None = None, description: str | None = None, name: str | None = None, agent_factory: MotleyAgentFactory | None = None, tools: Sequence[MotleySupportedTool] | None = None, force_output_handler: bool = False, verbose: bool = False)
Parameters:
  • prompt_prefix – Prefix to the agent’s prompt. Can be used for providing additional context, such as the agent’s role or backstory.

  • description

    Description of the agent.

    Unlike the prompt prefix, it is not included in the prompt. The description is only used for describing the agent’s purpose when giving it as a tool to other agents.

  • name

    Name of the agent. The name is used for identifying the agent when it is given as a tool to other agents, as well as for logging purposes.

    It is not included in the agent’s prompt.

  • agent_factory

    Factory function to create the agent. The factory function should accept a dictionary of tools and return the agent. It is usually called right before the agent is invoked for the first time.

    See motleycrew.common.types.MotleyAgentFactory for more details.

  • tools – Tools to add to the agent.

  • force_output_handler – Whether to force the agent to return through an output handler. If True, at least one tool must have return_direct set to True.

  • verbose – Whether to log verbose output.

compose_prompt(input_dict: dict, prompt: ChatPromptTemplate | str, as_messages: bool = False) str | list[BaseMessage]

Compose the agent’s prompt from the prompt prefix and the provided prompt.

Parameters:
  • input_dict – The input dictionary to the agent.

  • prompt – The prompt to be added to the agent’s prompt.

  • as_messages – Whether the prompt should be returned as a Langchain messages list instead of a single string.

Returns:

The composed prompt.

property agent

Getter for the inner agent that makes sure it’s already materialized. The inner agent should always be accessed via this property method.

property is_materialized

Whether the agent is materialized.

get_output_handlers()

Get all output handlers (tools with return_direct set to True).

materialize()

Materialize the agent by creating the agent instance using the agent factory. This method should be called before invoking the agent for the first time.

add_tools(tools: Sequence[MotleySupportedTool])

Add tools to the agent.

Parameters:

tools – The tools to add to the agent.

as_tool(**kwargs) MotleyTool

Convert the agent to a tool to be used by other agents via delegation.

Parameters:

kwargs – Additional arguments to pass to the tool. See motleycrew.tools.tool.MotleyTool for more details.

abstract invoke(input: dict, config: RunnableConfig | None = None, **kwargs: Any) Any

Transform a single input into an output. Override to implement.

Parameters:
  • input – The input to the Runnable.

  • config – A config to use when invoking the Runnable. The config supports standard keys like ‘tags’, ‘metadata’ for tracing purposes, ‘max_concurrency’ for controlling how much work to do in parallel, and other keys. Please refer to the RunnableConfig for more details.

Returns:

The output of the Runnable.

class motleycrew.agents.LangchainMotleyAgent(description: str | None = None, name: str | None = None, prompt_prefix: str | ChatPromptTemplate | None = None, agent_factory: MotleyAgentFactory[AgentExecutor] | None = None, tools: Sequence[MotleySupportedTool] | None = None, force_output_handler: bool = False, chat_history: bool | GetSessionHistoryCallable = True, input_as_messages: bool = False, runnable_config: RunnableConfig | None = None, verbose: bool = False)

Bases: MotleyAgentParent, LangchainOutputHandlingAgentMixin

MotleyCrew wrapper for Langchain agents.

__init__(description: str | None = None, name: str | None = None, prompt_prefix: str | ChatPromptTemplate | None = None, agent_factory: MotleyAgentFactory[AgentExecutor] | None = None, tools: Sequence[MotleySupportedTool] | None = None, force_output_handler: bool = False, chat_history: bool | GetSessionHistoryCallable = True, input_as_messages: bool = False, runnable_config: RunnableConfig | None = None, verbose: bool = False)
Parameters:
  • description

    Description of the agent.

    Unlike the prompt prefix, it is not included in the prompt. The description is only used for describing the agent’s purpose when giving it as a tool to other agents.

  • name

    Name of the agent. The name is used for identifying the agent when it is given as a tool to other agents, as well as for logging purposes.

    It is not included in the agent’s prompt.

  • prompt_prefix – Prefix to the agent’s prompt. Can be used for providing additional context, such as the agent’s role or backstory.

  • agent_factory

    Factory function to create the agent. The factory function should accept a dictionary of tools and return an AgentExecutor instance.

    See motleycrew.common.types.MotleyAgentFactory for more details.

    Alternatively, you can use the from_agent() method to wrap an existing AgentExecutor.

  • tools – Tools to add to the agent.

  • force_output_handler – Whether to force the agent to return through an output handler. If True, at least one tool must have return_direct set to True.

  • chat_history

    Whether to use chat history or not. If True, uses InMemoryChatMessageHistory. If a callable is passed, it is used to get the chat history by session_id.

    See langchain_core.runnables.history.RunnableWithMessageHistory for more details.

  • input_as_messages – Whether the agent expects a list of messages as input instead of a single string.

  • runnable_config – Default Langchain config to use when invoking the agent. It can be used to add callbacks, metadata, etc.

  • verbose – Whether to log verbose output.

materialize()

Materialize the agent and wrap it in RunnableWithMessageHistory if needed.

invoke(input: dict, config: RunnableConfig | None = None, **kwargs: Any) Any

Transform a single input into an output. Override to implement.

Parameters:
  • input – The input to the Runnable.

  • config – A config to use when invoking the Runnable. The config supports standard keys like ‘tags’, ‘metadata’ for tracing purposes, ‘max_concurrency’ for controlling how much work to do in parallel, and other keys. Please refer to the RunnableConfig for more details.

Returns:

The output of the Runnable.

async ainvoke(input: dict, config: RunnableConfig | None = None, **kwargs: Any) Any

Default implementation of ainvoke, calls invoke from a thread.

The default implementation allows usage of async code even if the Runnable did not implement a native async version of invoke.

Subclasses should override this method if they can run asynchronously.

static from_agent(agent: AgentExecutor, description: str | None = None, prompt_prefix: str | None = None, tools: Sequence[MotleySupportedTool] | None = None, runnable_config: RunnableConfig | None = None, verbose: bool = False) LangchainMotleyAgent

Create a LangchainMotleyAgent from a langchain.agents.AgentExecutor instance.

Using this method, you can wrap an existing AgentExecutor without providing a factory function.

Parameters:
  • agent – AgentExecutor instance to wrap.

  • prompt_prefix – Prefix to the agent’s prompt. Can be used for providing additional context, such as the agent’s role or backstory.

  • description

    Description of the agent.

    Unlike the prompt prefix, it is not included in the prompt. The description is only used for describing the agent’s purpose when giving it as a tool to other agents.

  • tools – Tools to add to the agent.

  • runnable_config – Default Langchain config to use when invoking the agent. It can be used to add callbacks, metadata, etc.

  • verbose – Whether to log verbose output.