-
Notifications
You must be signed in to change notification settings - Fork 7.7k
Description
The current rewrite of AutoGen studio has focused on representing teams declaratively in JSON.
It would be great to add a flexible GUI to let users modify team configurations. A team is made of up compontents - agents (models, tools, etc), termination conditions etc.
- Visualize team config (what are the agents, what are the tools, models etc)
- Add/remove components (agents, teams, models) either directly in JSON or via UI
Component Serialization Decisions
The team (which defines the main workflow/orchestration behaviors) is the primary component in AGS.
There are two potential approaches for storing declarative team (and other component) specifications in the same internal ags database:
Fully Linked Components
In this approach, each component (model, agent, team, memory etc) maintains relationships at the database level. For example, an Agent table row would have foreign keys to its models and tools. Fetching a team's complete configuration requires traversing these relationships to assemble the full picture.
Pros:
- Components stay synchronized - when a model or tool is updated, all agents using it automatically see the change
- Referential integrity is enforced by the database
- Storage efficiency since components are stored once and referenced many times
Cons:
- Complex fetching logic requiring multiple joins to assemble full configurations
- Updates must cascade through relationships
- Schema changes needed to support new component types (a deployment challenge each time AGS users update their app)
- Harder to version control since components can change underneath a team
- More complex deployment as schema updates needed for new features
Independent Components
This approach serializes the complete configuration of each component. Rather than maintaining relationships, a team's configuration includes the full definition of all its agents, including their tools, models, and other settings. When you store a team using the weather_api tool, that tool's entire configuration is part of the team definition.
Pros:
- Configurations are self-contained and portable
- Simple updates - just modify a single record, test it and reuse elsewhere (helps with trust)
- Easy versioning since each team captures a complete snapshot
- Schema flexibility - new component types don't require database changes
- Simpler deployment with less database coordination
Cons:
- Storage duplication when components are reused across teams (not really an issue, configurations are very light).
- No automatic propagation of component updates (we can mitigate this by providing UX that helps users easily validate/test all components to build trust)
- UX needs to clearly communicate the independence of configurations
- Potential confusion if users expect linked behavior (UX can help here)
Key Decision Factors
The choice depends heavily on use case. For experimentation and reproducibility, Independent Components shines - each team captures a precise snapshot of its configuration at a point in time. For production systems prioritizing consistency, Fully Linked Components ensures changes propagate automatically.
A hybrid approach storing both relationships and snapshots is possible but adds complexity. The benefits of Independent Components - reproducibility, schema flexibility, and configuration portability - likely outweigh the storage overhead from duplication for most use cases.
Happy to get thoughts here.
@husseinmozannar , @ekzhu , @JingyaChen