Skip to main content

Ensemble Design Principles

1. Single Responsibility

Each ensemble should accomplish one clear task:

2. Composability

Design agents to be reusable across ensembles:

3. Explicit Dependencies

Make data flow obvious:

Common Patterns

Sequential Pipeline

Process data through multiple stages:

Parallel Fan-Out/Fan-In

Process multiple items in parallel:

Conditional Branching

Route based on conditions:

Error Recovery

Handle failures gracefully:

Event-Driven

Trigger actions based on events:

Anti-Patterns

1. God Ensemble

2. Tight Coupling

3. Hidden State

4. Deep Nesting

Performance Optimization

Minimize Sequential Dependencies

Cache Expensive Operations

Early Termination

Testing Ensembles

Documentation

Document your ensembles:

TypeScript Ensembles

For complex workflows, TypeScript ensembles offer type safety and IDE support:

Flow Control Primitives

Reusable Step Patterns

Create factory functions for common patterns:
For complete TypeScript API documentation, see the TypeScript API Reference.

Best Practices

  1. Single Responsibility - One ensemble, one task
  2. Composable Agents - Reusable across ensembles
  3. Explicit Dependencies - Make data flow clear
  4. Parallel by Default - Only add dependencies when needed
  5. Handle Failures - Always have fallbacks
  6. Cache Strategically - Cache expensive operations
  7. Test Thoroughly - Unit and integration tests
  8. Document Well - Clear descriptions and examples
  9. Monitor Performance - Track execution times
  10. Version with Edgit - Track changes over time

Next Steps

TypeScript API

Complete TypeScript reference

A/B Testing Patterns

Test multiple variants

Testing & Observability

Monitor ensembles

Playbooks

Real-world examples