---
title: "Core Concepts"
---

import Image from "@theme/IdealImage";

## Motivation

Building reliable LLM applications goes beyond crafting a single prompt or selecting a model. It's about experimentation—trying various prompts, models, configurations, and AI workflows to determine what works best. Without a robust system, managing these experiments can quickly become chaotic.

Agenta addresses this challenge by structuring experimentation in a manner similar to **git**'s code management. Rather than maintaining a single, linear history of changes, you can create multiple branches—called **variants** in Agenta. Each **variant** represents a distinct approach or solution you're exploring.

Within each **variant**, you can make changes that are saved as immutable **versions**. This means every change is recorded and you can always go back to a previous version if needed.

To move from experimentation to deployment, Agenta uses **environments** like development, staging, and production. You can deploy specific versions of your variants to these environments, controlling what gets tested and what goes live.

In each of your experiments pre-production or in the environment post-production, all the data that you generate is stored and linked to the **variant** and **version** that you used to generate it. This allows you to always go back to the **variant** and **version** that generated a particular data point and see which **variant** and **version** performed best on it.

## Concepts

Below are the description to the main terms and concepts used in Agenta.

<Image
  style={{ display: "block", margin: "10px auto" }}
  img={require("/images/prompt_management/taxonomy-concepts.png")}
  alt="Taxonomy of concepts in Agenta"
  loading="lazy"
/>

### Templates

**Templates** are the workflows used by LLM-powered applications. Agenta comes with two default templates:

- **Completion Application Template:** For single-prompt applications that generate text completions.
- **Chat Application Template:** For applications that handle conversational interactions.

Agenta also allows you to create custom templates for your workflows using our SDK. Examples include:

- Retrieval-Augmented Generation (RAG) Applications
- Chains of Multiple Prompts
- Agents Interacting with External APIs

After creating a template, you can interact with it in the playground, run no-code evaluations, and deploy versions all from the web UI.

### Applications

An **application** uses a **template** to solve a specific use case. For instance, an **application** could use the single-prompt **template** for tasks like:

- **Tweet Generation:** Crafting engaging tweets based on input topics.
- **Article Summarization:** Condensing long articles into key points.

### Variants

Within each application, you can create **variants**. **Variants** are different configurations of the application, allowing you to experiment with and compare multiple approaches. For example, for the "tweet generation" application, you might create **variants** that:

- Use different prompt phrasings.
- Adjust model parameters like temperature or maximum tokens.
- Incorporate different styles or tones (e.g., professional vs. casual).

### Versions

Every **variant** is **versioned** and each **version** is immutable. When you make changes to a **variant**, a new **version** is created. Each **version** has a **commit id** that uniquely identifies it.

### Environments

**Environments** are the interfaces where your deployed variants are accessible. You can deploy a **version** of a **variant** to an **environment**. Each **environment** has a user-defined environment name (e.g. development, staging, production) that specifies its context or stage.

You can then integrate the **environment** into your codebase to fetch the configuration deployed on that **environment**. Additionally, you can directly invoke the endpoints relating to the **environment** containing the application running with that configuration.

By default, applications come with three predefined **environments**:

- **Development:** For initial testing and experimentation.
- **Staging:** For pre-production testing and quality assurance.
- **Production:** For live use with real users.

:::warning
When deploying a **variant** to an **environment**, the latest **version** of that **variant** gets deployed. Each **environment** points to a specific **version** of a **variant** (a certain **commit**). Updating the **variant** after deploying does not automatically update the **environment**.
:::
