System Architecture
This guide provides a comprehensive overview of Agenta's system architecture, explaining each component's role, responsibilities, and how they work together to deliver AI application evaluation and management capabilities.
System Overview
Agenta follows a modern microservices architecture with clear separation of concerns. The system is designed for scalability, maintainability, and ease of deployment using Docker containers.
┌─────────────────────────────────────┐
│ Users │
│ (Developers, AI Engineers) │
└─────────────────┬───────────────────┘
│
┌─────────────────▼───────────────────┐
│ Load Balancer / Proxy │
│ (Traefik or Nginx) │
│ Handles SSL and routing │
└─────────────┬───────────────────────┘
│
┌─────────────────────────────┼─────────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────── ──┐ ┌─────────────────┐ ┌─────────────────┐
│ Frontend │ │ API Backend │ │ Services API │
│ (Web UI) │◄────────► (FastAPI) │◄────────► (FastAPI) │
│ │ │ │ │ │
│ • Next.js App │ │ • REST API │ │ • Completion │
│ • Playground │ │ • Core logic │ │ • Chat │
│ • Admin UI │ │ • Persistence │ │ • LLM adapters │
└─────────────────┘ └─────────┬───────┘ └─────────────────┘
│ │
│ ▼
│ ┌─────────────────────────────┐
│ │ Worker Pool │
│ │ (background processes) │
│ │ │
│ │ • worker-evaluations │
│ │ • worker-tracing │
│ │ • worker-webhooks │
│ │ • worker-events │
│ │ • cron │
│ └──────────────┬──────────────┘
│ │
▼ ▼
┌───────────────────────────────────────────────────────────────────┐
│ Infrastructure Layer │
│ │
│ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ │
│ │ PostgreSQL │ │ Redis │ │ SuperTokens │ │
│ │ │ │ │ │ │ │
│ │ • Core DB │ │ • Task queues │ │ • Authentication │ │
│ │ • Tracing DB │ │ • Streams │ │ • Session mgmt │ │
│ │ • Auth DB │ │ • Caching │ │ │ │
│ └───────────────────┘ └───────────────────┘ └───────────────────┘ │
└───────────────────────────────────────────────────────────────────┘
Frontend Components
Web UI (NextJS Application)
- Technology: React, TypeScript, Next.js
- Port: 3000 (internal)
- Purpose: Primary user interface for Agenta platform
Key Responsibilities:
- User Interface: Provides intuitive web interface for application management
- Playground: Interactive environment for testing and evaluating LLM applications
- Evaluation Dashboard: Visualizations and metrics for application performance
- Application Management: Create, configure, and deploy AI applications
- User Authentication: Login, registration, and session management
Backend Components
API Service (FastAPI)
- Technology: Python, FastAPI, SQLAlchemy
- Port: 8000 (internal)
- Purpose: Core business logic and API endpoints
Key Responsibilities:
- REST API: Provides RESTful endpoints for frontend and external integrations
- Business Logic: Implements core platform functionality
- Data Management: Handles CRUD operations for applications, evaluations, experiments, etc
- Authentication: Integrates with SuperTokens for user authentication
- Application Orchestration: Manages application lifecycle and deployment
- Evaluation Management: Coordinates evaluation runs and result collection
Worker Services (TaskIQ + Async Consumers)
- Technology: Python workers, TaskIQ, asyncio consumers, Redis, PostgreSQL
- Purpose: Background processing for evaluations, tracing, events, and webhooks
Key Responsibilities:
- Evaluation Execution:
worker-evaluationsruns asynchronous evaluation workloads - Tracing Ingestion:
worker-tracingconsumes OTLP tracing pipelines - Webhook Delivery:
worker-webhooksdispatches outbound webhook notifications - Event Processing:
worker-eventsprocesses internal event streams - Scheduled Tasks:
cronruns periodic maintenance and cleanup jobs
TaskIQ Integration:
- Broker: Uses Redis streams for queueing and task distribution
- Task Registration: Evaluation tasks are registered at worker startup
- Execution: Workers consume Redis-backed jobs and process them asynchronously
Services Backend
Services API (FastAPI)
- Technology: Python, FastAPI
- Port: 80 (internal)
- Purpose: LLM-facing endpoints and service-layer APIs exposed under
/services/*
Key Responsibilities:
- LLM Integration: Connects to various LLM providers (OpenAI, Anthropic, etc.)
- Prompt Processing: Handles prompt templates and variable substitution
- Response Generation: Manages LLM API calls and response handling
- Provider Abstraction: Unified interface across different LLM providers
- Error Handling: Robust error handling for LLM API failures
- Endpoint Groups: Includes
/services/completion/*and/services/chat/*
Infrastructure Services
PostgreSQL (Database)
- Technology: PostgreSQL 16
- Port: 5432
- Purpose: Primary data storage
Databases:
- Core Database: Application data, Datasets, Evaluations, Users & Profiles, etc.
- Tracing Database: Execution traces and performance metrics
- SuperTokens Database: Authentication and user management data
Redis (Task Queue, Caching & Sessions)
- Technology: Redis
- Ports: 6379 (volatile), 6381 (durable)
- Purpose: Task queue, caching, pub/sub, streams
Use Cases:
- Task Queue: TaskIQ broker for background job distribution and processing
- Application Caching: Frequently accessed data
- Session Storage: User sessions and temporary data
- Task Results: TaskIQ task results and status
- Real-time Data: Live updates and notifications
- Rate Limiting: API rate limit counters
SuperTokens (Authentication)
- Technology: SuperTokens
- Port: 3567
- Purpose: Authentication and user management
Features:
- User Authentication: Login/logout, password management
- Session Management: Secure session handling with JWT
- OAuth Integration: Google, and GitHub
- User Management: User registration, profile management
Service Dependencies
Frontend Dependencies
Web UI depends on:
├── API Service (primary backend)
├── Services API (playground and model calls)
└── Authentication (SuperTokens via API)
Backend Dependencies
API Service depends on:
├── PostgreSQL (data persistence)
├── Redis (task queue, caching, sessions)
├── SuperTokens (authentication)
└── Worker pool (async task execution)
Worker Dependencies
Worker pool depends on:
├── Redis (queues and streams)
├── PostgreSQL (state and persistence)
├── API backend (coordination and config)
└── Services API / external endpoints (workload-specific processing)