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/Nginx) │
│ Handles SSL, Routing │
└─────────────┬───────────────────────┘
│
┌─────── ──────────────────────┼─────────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Frontend │ │ Backend │ │ AI Services │
│ (Web UI) │◄────────► (API) │◄────────► (Completion) │
│ │ │ │ │ (Chat) │
│ • React App │ │ • FastAPI │ │ • LLM Providers │
│ • User Interface│ │ • Business Logic│ │ • Model Serving │
│ • Playground │ │ │ │ │
└─────────────────┘ └─────────┬───────┘ └─────────────────┘
│ │
│ ▼
│ ┌─────────────────┐
│ │ Worker │
│ │ (Background) │
│ │ │
│ │ • TaskIQ Tasks │
│ │ • Async Jobs │
│ │ • Evaluations │
│ └─────────┬───────┘
│ │
▼ ▼
┌───────────────────────────────────────────────────────────────────┐
│ Infrastructure Layer │
│ │
│ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ │
│ │ PostgreSQL │ │ Redis │ │ SuperTokens │ │
│ │ │ │ │ │ │ │
│ │• Core DB │ │• Task Queue │ │• Auth │ │
│ │• Tracing DB │ │ (TaskIQ) │ │ │ │
│ │ │ │• Caching │ │ │ │
│ │ │ │• Sessions │ │ │ │
│ └───────────────────┘ └───────────────────┘ └───────────────────┘ │
└───────────────────────────────────────────────────────────────────┘
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 Service (TaskIQ)
- Technology: Python, TaskIQ (task queue library), Redis
- Purpose: Background task processing and async operations
Key Responsibilities:
- Evaluation Execution: Runs AI model evaluations asynchronously
- Data Processing: Batch processing of evaluation results
- Scheduled Tasks: Periodic maintenance and cleanup operations
- Resource Management: Manages compute resources for evaluations
- Job Monitoring: Tracks task progress and handles failures
TaskIQ Integration:
- Broker: Uses Redis Streams via
RedisStreamBrokerfor task distribution - Task Registration: Evaluation tasks registered with the broker at startup
- Execution: Workers consume tasks from Redis and execute them asynchronously
AI 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
Completion Service
- Technology: Python, FastAPI
- Port: 80 (internal)
- Purpose: LLM completion and text generation
Chat Service
- Technology: Python, FastAPI
- Port: 80 (internal)
- Purpose: Conversational AI and chat-based interactions
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
- Port: 6379
- 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)
├── AI Services (direct calls for playground)
└── Authentication (SuperTokens via API)
Backend Dependencies
API Service depends on:
├── PostgreSQL (data persistence)
├── Redis (task queue, caching, sessions)
├── SuperTokens (authentication)
└── Worker (async task execution)
Worker Dependencies
Worker depends on:
├── Redis (task queue via TaskIQ)
├── PostgreSQL (data access)
└── AI Services (evaluation execution)