---
title: "How does Agenta work?"
description: "An overview of the architecture and main concepts of Agenta"
---

import Image from "@theme/IdealImage";

## What problem does Agenta solve?

To build a robust LLM application, you need to:

1. **Rapidly experiment and evaluate** various prompts, models, and architectures/workflows (RAG, chain-of-prompts, etc..).
2. **Collaborate with non-developers**, such as product managers or domain experts.

While some tools exist that help doing the first point via a user interface, they are typically limited to pre-built single-prompt applications and fail to accommodate custom workflows or application logic.

## How does Agenta solve this problem?

Agenta creates a playground in the web UI from your LLM applications, regardless of the workflow (RAG, chain-of-prompts, custom logic) or the framework (Langchain, Llama_index, OpenAI calls) in use.

This enables the entire team to collaborate on prompt engineering and experimentation with the application parameters (prompts, models, chunk size, etc.). It also allow them to manage all aspects of the app development lifecyclefrom the UI: comparing different configuration, evaluating the application, deploying it, and more.

## How does Agenta achieve this?

1. **Microservice-based Applications**:

Agenta treats each application as a microservice. Creating a new application in Agenta automatically generates a container with a REST API. This is true whether the application is created using a pre-built template from the UI, or whether from CLI using custom application code. Agenta handles the creation of Docker images and container deployment. This means that all interactions with the application (either from the UI, during evaluations, or post-deployment) occur with the container.

2. **Separation of Logic and Configuration**:

Agenta separates the application logic from the configuration. The application logic refers to the code that defines the application, whether it's a simple prompt, chain of prompts, RAG, etc. The configuration refers to the parameters used in the application logic, such as the prompt, model, chunk size, etc. In the application code, you specify which configuration does the application use. This configuration can be modified from the UI in the playground or the CLI.

## Agenta architecture

<Image img={require("/images/apps_and_configurations_light.png")}/>
Agenta decouples the configuration (prompts, model) from the application logic. The
configuration is managed by the backend. The configuration then can be modified both
from the UI (in the playground) or from the CLI

### The Application

The application describes the logic written in Python code. An application can be created from a pre-built template in the UI or from code in the CLI. In either case, a new container with the application code is launched. The application can then be accessed via a REST API.

Each application has a default configuration specified in its code. This default configuration can be overridden by the user in the UI or the CLI. Additionally, the user can create new configurations from the UI or the CLI. Each new configuration results in the creation of a new application variant, which is a combination of the application logic and a configuration. A single project can house many variants encompassing multiple application logics and configurations.

## The Backend

Agenta's backend manages applications and configurations. It is responsible for building images, deploying containers, and managing configurations and prompts for the application.

## The Frontend / UI

The frontend provides tools to create new applications from a template, create and edit configurations, run evaluations, and deploy applications to different environments (e.g., staging, production, etc.).

## The CLI

The CLI offers the same capabilities as the frontend. Additionally, it allows for the creation of custom applications not available as templates. When serving a new application from the CLI, Agenta handles container creation and deployment. After creating a new application, users can edit its configuration and evaluate it in the UI.

## The SDK

The SDK is a Python library used to create new applications from code. It manages the saving of the default configuration, creation of the REST API, and necessary actions to create a playground and integrate the application with the Agenta platform.
