Agent Factories

Agent factories specify which agents are available to your app. In order to connect an agent to your app, you must first define an agent factory. To do so, subclass the AbstractAgentFactory class to specify how agents are created. Here you can import and use your own custom agents.

Example

First define your AgentFactory. In this example, we are creating a factory for a new type of agent called MyActionAgent:

from vocode.streaming.agent.abstract_factory import AbstractAgentFactory
from vocode.streaming.action.my_action_factory import MyActionFactory

class MyAgentFactory(AbstractAgentFactory):
    def __init__(self, action_factory: MyActionFactory):
        self.action_factory = action_factory

    def create_agent(
        self, agent_config: AgentConfig, logger: Optional[logging.Logger] = None
    ) -> BaseAgent:
        if agent_config.type == "MY_ACTION":
            return MyActionAgent(
                agent_config=agent_config,
                action_factory=self.action_factory
            )
        elif agent_config.type == "other_agent_type":
            ...
        else:
            raise Exception("Invalid agent config")

Then, in your app, you can connect the agent to the app:

from vocode.streaming.telephony.server.base import TelephonyServer
from vocode.streaming.agent.my_agent_factory import MyAgentFactory
from vocode.streaming.action.my_action_factory import MyActionFactory

telephony_server = TelephonyServer(
    agent_factory=MyAgentFactory(action_factory=MyActionFactory())
    ...
)