Summary
Currently, my setup contains 6 isolated agents and deployed individually.
They don't share the same codebase, but live in a monorepo.
To be able to use all of them locally I need to collect each individual generated agent (through Agent(...)), patch their .call to lookup a table of agents (node_ids + reasoners + skills) to be able to call each other bypassing the internal Control Plane request mechanism.
lookup: Dict[str, agentfield.Agent] = {}
# collect and place them into lookup dict
agent_id = agent.id
async def _call(target: str, *args, **kwargs):
node_id, reasoner_or_skill = target.split(".", 1)
if node_id != agent_id and node_id in lookup:
return await lookup.get(node_id).call(target, *args, **kwargs)
entry = agent._skill_registry.get(reasoner_or_skill) or agent._reasoner_registry.get(reasoner_or_skill)
if entry is None:
raise ValueError(f"Invalid target '{target}'")
return await entry.func(target, *args, **kwargs)
agent.call = _call
Proposed solution
Ideally, having the AsyncExecutionManager to be able to collect many agents and orchestrate the calls between them, without the ConnectionManager doing the requests.
Make the AEM decoupled from the network.
It could be enabled by adapters that will keep the executions in memory but won't do any requests. By default it will use the current ConnectionManager delegation. But you can swap to a MemoryManager instead.
This is ideal to deploy mini versions that will live as a monolith instead of full separated deployments living in different machines.
Alternatives considered
Additional context
Summary
Currently, my setup contains 6 isolated agents and deployed individually.
They don't share the same codebase, but live in a monorepo.
To be able to use all of them locally I need to collect each individual generated
agent(throughAgent(...)), patch their.callto lookup a table of agents (node_ids + reasoners + skills) to be able to call each other bypassing the internal Control Plane request mechanism.Proposed solution
Ideally, having the
AsyncExecutionManagerto be able to collect many agents and orchestrate the calls between them, without theConnectionManagerdoing the requests.Make the AEM decoupled from the network.
It could be enabled by adapters that will keep the executions in memory but won't do any requests. By default it will use the current ConnectionManager delegation. But you can swap to a MemoryManager instead.
This is ideal to deploy mini versions that will live as a monolith instead of full separated deployments living in different machines.
Alternatives considered
Additional context