Skip to content

[Python SDK] Make it easier for running without control-plane + networking #651

Description

@pocesar

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:sdkCross-SDK (Python + Go + TS) parity workenhancementNew feature or requesthelp wantedExtra attention is neededsdk:pythonPython SDK related

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions