Skip to content

Implement a drag and drop team builder interface for AGS #4202

@victordibia

Description

@victordibia

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

Image

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

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions