Traigent
Traigent is an AI Agent infrastructure that allows companies to take AI agents out of the lab and deploy them at high scale with high confidence.
Our mission: Anything you can measure, we can improve. Whether it's accuracy, speed of response, cost, or any other business metric — we bring strong results that deliver real business value.
Runs multiple LLM trials — run
python -m traigent.examples.quickstartfor a no-cost demo, or callenable_mock_mode_for_quickstart()fromtraigent.testingin local tutorial code. SetTRAIGENT_RUN_COST_LIMIT=2.0as a best-effort local guardrail and set hard caps with your LLM/cloud providers; actual billing is determined by those providers. The legacyTRAIGENT_MOCK_LLM=trueenv var remains for backwards compatibility and is disabled whenENVIRONMENT=production. See Cost Management.
Quick Install:
Install from PyPI — no clone required (Python 3.11+):
# pip
pip install "traigent[recommended]"
# uv (into the active venv, or `uv add` into a uv project)
uv pip install "traigent[recommended]"
uv add "traigent[recommended]"
Prefer an isolated virtual environment first?
macOS / Linux:
python3 -m venv .venv
source .venv/bin/activate
pip install "traigent[recommended]"
Windows PowerShell:
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install "traigent[recommended]"
For more options, see Installation details.
Try it now - no API keys needed:
pip install "traigent[integrations]"
python -m traigent.examples.quickstart
Or from a source checkout:
python hello_world.py
Here's what the quickstart does - one decorator, automatic optimization:
from langchain_openai import ChatOpenAI
import traigent
@traigent.optimize(
configuration_space={
"model": ["gpt-4o-mini", "gpt-4o"],
"temperature": [0.0, 0.7, 1.0],
},
objectives=["accuracy"],
eval_dataset="qa_samples.jsonl",
)
def answer(question: str) -> str:
cfg = traigent.get_config()
llm = ChatOpenAI(model=cfg["model"], temperature=cfg["temperature"])
return llm.invoke(question).content
Using it in your own code
Add @traigent.optimize() to any function that calls an LLM — no framework required:
import traigent
import litellm # or openai, anthropic, requests …
@traigent.optimize(
configuration_space={
"model": ["gpt-4o-mini", "gpt-4o"],
"temperature": [0.0, 0.7, 1.0],
},
objectives=["accuracy"],
eval_dataset="path/to/your_evals.jsonl",
)
def your_function(question: str) -> str:
cfg = traigent.get_config()
response = litellm.completion(
model=cfg["model"],
temperature=cfg["temperature"],
messages=[{"role": "user", "content": question}],
)
return response.choices[0].message.content
# Run it — this executes the trials and returns the winner
result = your_function.optimize_sync(max_trials=10)
print(result.best_config, result.best_score)
Works with any LLM provider — OpenAI, Anthropic, LiteLLM (100+ providers), or plain HTTP calls.
Portal · Quickstart · Examples · Skill · Walkthrough
Choose Your Path
| Goal | Resource | Time |
|---|---|---|
| Get started quickly | Quick Start Guide | 5 min |
| Understand the architecture | Architecture Overview | 5 min |
| Track runs in the portal | Portal tracking | 5 min |
| Try examples locally, then make runs portal-visible | Mock walkthrough (8 steps) → Portal | 15 min |
| Read the full API reference | Decorator Reference → | — |
Full documentation index
| Get started | Installation · 5-minute tutorial |
| User guides | Injection Modes · Configuration Spaces · Evaluation |
| Tunable Variable Language | TVL Guide |
| Advanced | Agent Optimization |
| API reference | Decorator Reference · Constraint DSL |
🎬 See Traigent in Action — click to play demos
| Demo | |
|---|---|
| LLM Agent Optimization | |
| Optimization Callbacks | |
| Agent Configuration Hooks |
🏗️ Architecture Overview — how it works
- Suggest — the optimizer proposes a configuration to test
- Inject — Traigent overrides your function's parameters with the proposed config
- Evaluate — your function runs against the dataset, scored by the evaluator
- Record — results update the optimizer's model
- Repeat — loop continues until budget/trials exhausted, then outputs results
🚀 Walkthrough — 8 runnable examples
The walkthrough examples use local mock mode through the quickstart/testing helpers with cost approval pre-set for dry runs — no provider API keys needed when calls go through LiteLLM or LangChain.
Show all 8 walkthrough steps
| # | Run | What you'll learn |
|---|---|---|
| 1 | python walkthrough/mock/01_tuning_qa.py |
Basic model + temperature optimization |
| 2 | python walkthrough/mock/02_zero_code_change.py |
Seamless mode — zero code changes to existing code |
| 3 | python walkthrough/mock/03_parameter_mode.py |
Explicit config access via traigent.get_config() |
| 4 | python walkthrough/mock/04_multi_objective.py |
Balance accuracy, cost, and latency |
| 5 | python walkthrough/mock/05_rag_parallel.py |
RAG optimization with parallel evaluation |
| 6 | python walkthrough/mock/06_custom_evaluator.py |
Define your own success metrics |
| 7 | python walkthrough/mock/07_multi_provider.py |
Compare OpenAI, Anthropic, Google in one run |
| 8 | python walkthrough/mock/08_privacy_modes.py |
No-egress local execution |
Browse reference examples → · Injection modes →
☁️ Traigent Portal Tracking
Connect to Traigent Portal to view results, compare trials, and collaborate. Portal tracking is enabled automatically when TRAIGENT_API_KEY is set; most users do not need any routing settings.
The default run uses Traigent's smart optimizer when portal credentials are available. Local grid and random searches still sync results to the portal when authenticated. Use offline=True only when a run must avoid Traigent backend egress; offline runs do not sync.
- Sign up at portal.traigent.ai — verify your email to activate
- Create an API key — click your name (top-right) → API Keys → + Create API Key
- Connect — run
traigent auth loginor setexport TRAIGENT_API_KEY="sk_..." - Run — portal tracking is automatic
Credential priority and multi-provider setup
| Credential | 1st (highest) | 2nd | 3rd (default) |
|---|---|---|---|
| API Key | TRAIGENT_API_KEY env var |
Stored CLI credentials | None (local only) |
| Backend URL | TRAIGENT_BACKEND_URL env var |
Stored CLI credentials | portal.traigent.ai |
Tip: No env vars needed after
traigent auth login— the SDK picks up stored credentials automatically.
Multi-provider optimization — use LiteLLM to compare OpenAI, Anthropic, Google, Mistral, and 100+ providers:
@traigent.optimize(
configuration_space={
"model": ["gpt-4o-mini", "claude-haiku-4-5-20251001", "gemini-1.5-pro"],
"temperature": [0.1, 0.5, 0.9],
},
objectives=["accuracy", "cost"],
eval_dataset="data/qa_samples.jsonl",
)
def multi_provider_agent(question: str) -> str:
config = traigent.get_config()
response = litellm.completion(
model=config.get("model"),
temperature=config.get("temperature"),
messages=[{"role": "user", "content": question}],
)
return response.choices[0].message.content
✨ Key Features
| Feature | Description |
|---|---|
| Zero-code integration | Add @traigent.optimize() to existing code — no refactoring |
| Multi-algorithm | Random and Grid locally; managed search algorithms via the Traigent cloud |
| Multi-objective | Optimize accuracy, latency, cost, and custom metrics simultaneously |
| Framework support | LangChain, OpenAI SDK, Anthropic, LiteLLM, and any LLM provider |
| Cost tracking | Integrated tokencost library with 500+ model pricing |
| Parallel execution | Concurrent trials and example-level parallelism |
| Error resilience | Interactive pause on rate limits and budget caps — resume or stop gracefully |
| Live progress | Auto-enabled progress bar in interactive terminals (progress_bar=False to disable) |
| No-egress option | offline=True keeps Traigent optimization traffic local when policy requires it |
TraigentDemo — Streamlit playground, use cases, and research benchmarks
📦 Installation details, optimization routing, CLI, and more
Installation
Python 3.11+ on Linux, macOS, or Windows. The published package on PyPI is the recommended way to install — pip install "traigent[recommended]" or uv add "traigent[recommended]". No repository checkout is required to use the SDK or its traigent CLI.
| Feature Set | Description |
|---|---|
[recommended] |
All user-facing features (default) |
[integrations] |
LangChain, OpenAI, Anthropic adapters |
[analytics] |
Visualization and analytics |
[bayesian] |
Bayesian optimization dependencies (used by the Traigent cloud; not available locally) |
[all] |
Everything |
Contributor / source install (only needed to hack on Traigent itself or run the coordinated release-validation suite — not required to use the SDK):
git clone https://github.com/Traigent/Traigent.git
cd Traigent
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[recommended]"
Cost Management
| Setting | How |
|---|---|
| Testing (no API calls) | Import and call enable_mock_mode_for_quickstart() from traigent.testing, or run python -m traigent.examples.quickstart for the demo |
| Cost Limit | TRAIGENT_RUN_COST_LIMIT=2.0 (default: $2/run) |
Cost estimates, budgets, limits, alerts, and thresholds are best-effort software controls, not
provider-side billing guarantees. Actual billing is determined by your LLM/cloud providers, and you
remain responsible for provider charges. The legacy TRAIGENT_MOCK_LLM=true env var is supported
only for backwards-compatible local scripts and is disabled when ENVIRONMENT=production.
Mock mode skips the optimized-function pricing preflight for supported calls made through
Traigent's integration/interceptor path; direct provider calls made outside that path should
be stubbed explicitly for a guaranteed $0 rehearsal. See DISCLAIMER.md
for details.
Evaluation
Provide a JSONL dataset — Traigent scores outputs by exact / case-insensitive match by default. For semantic scoring (paraphrases, summarization, translation), supply a scoring_function (embeddings or LLM-judge) or a custom_evaluator:
{"input": {"question": "What is AI?"}, "output": "Artificial Intelligence"}
{"input": {"question": "Explain ML"}, "output": "Machine learning uses data and algorithms"}
input(required): your function's parameter names as keysoutput(optional): expected output for accuracy scoring
Evaluation guide → — custom evaluators, dataset formats, troubleshooting
Optimization Routing
| Request | Where optimization decisions come from | Portal sync |
|---|---|---|
| Omit routing settings | Traigent smart optimizer when authenticated | Yes |
algorithm="grid" or "random" |
Local search in your Python process | Yes, unless offline=True |
Smart algorithm name, such as "bayesian" or "optuna_tpe" |
Traigent cloud optimizer | Yes |
offline=True |
Local only, zero Traigent backend egress | No |
Most users should omit these settings. Use grid or random for explicit local search; use offline=True only for no-egress runs.
Optimization routing guide → — defaults, local search, portal sync, and migration notes
Quick Reference
| Parameter | Where | Description |
|---|---|---|
configuration_space |
@traigent.optimize() |
Parameters to test (required) |
objectives |
@traigent.optimize() |
Metrics to optimize for |
eval_dataset |
@traigent.optimize() |
Dataset for evaluation |
algorithm |
.optimize() call |
"random", "grid" (local); smart algorithms run in the Traigent cloud |
max_trials |
.optimize() call |
Number of configurations to test |
progress_bar |
.optimize() call |
True / False / None (auto) — live progress bar |
Injection Modes
| Mode | Best for | How |
|---|---|---|
| Context (default) | Most cases | Inside the decorated function, call traigent.get_config() to read the active configuration (config.get("key", default)). |
| Seamless | Existing functions with simple local config defaults | Pass injection_mode="seamless"; Traigent rewrites simple local variable assignments that match configuration keys. |
| Parameter | New development | Pass injection_mode="parameter"; the decorated function receives a config argument with explicit config.get("key") access. |
CLI
traigent optimize module.py -a grid -n 10 # Run optimization
traigent validate data.jsonl -o accuracy # Validate dataset
traigent results list # List past runs
traigent plot <name> -p progress # Visualize results
traigent auth login # Authenticate with portal
traigent --help # Full command reference
Troubleshooting
| Problem | Fix |
|---|---|
ModuleNotFoundError |
pip install -e ".[recommended]" or check venv is activated |
| 0.0% accuracy | Check dataset format; for local demos, import and call enable_mock_mode_for_quickstart() from traigent.testing |
| Missing API keys | Copy .env.example to .env; or run python -m traigent.examples.quickstart for a no-key demo |
pytest rejects -n / --dist |
Install dev test tooling first: pip install -e ".[all,dev]" |
uv sync --all-extras --dev breaks pytest tests/unit collection (ModuleNotFoundError: No module named 'langchain.schema') |
Use uv sync --all-extras --no-extra deepeval --dev — deepeval is opt-in only (see Development below) |
execution={"runtime": "node"} fails |
Python SDK 0.12.0 removed the temporary JS bridge. Use native @traigent/sdk; see JS bridge migration. |
| Permission errors | Create a fresh venv and reinstall dependencies |
🛠️ Development
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[all,dev]" # Install with dev dependencies
pytest # Run tests
make format && make lint # Format and lint
Using uv (this repo commits uv.lock): run uv sync --all-extras --no-extra deepeval --dev,
not bare uv sync --all-extras --dev. The deepeval extra is deliberately excluded from the
all/recommended/enterprise bundles (opt-in only, pending an upstream telemetry-exfiltration
fix — see pyproject.toml), but --all-extras installs every extra regardless, including the
excluded one. The installed deepeval then imports langchain.schema, which the langchain
version --all-extras also resolves no longer provides, and pytest tests/unit fails to collect.
CI installs with pip install -e ".[all,dev]", which never selects deepeval, so this only shows
up locally with uv sync --all-extras.
Architecture guide → · Project structure →
🤝 Contributing
We welcome bug reports and feature requests via GitHub Issues. For security vulnerabilities, please email security@traigent.ai.
📄 License
This project is dual-licensed: the GNU Affero General Public License v3.0 only (AGPL-3.0-only) - see LICENSE - or a Traigent commercial license under a separate written agreement (see COMMERCIAL-LICENSE.md). SPDX: AGPL-3.0-only OR LicenseRef-Traigent-Commercial. Commercial inquiries: legal@traigent.ai.
Get Started → | Examples → | Portal → | Skill → | Walkthrough → | GitHub Issues | Discussions
Release files for traigent 0.29.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| traigent-0.29.0.tar.gz | 2.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| traigent-0.29.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 5.1 MB
Release files / traigent-0.29.0.tar.gz
| Download URL | traigent-0.29.0.tar.gz |
|---|---|
| Size | 2.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
60c08a2bbe1f8cd152724fda2370e91646b6eacd1301104a54e96a35b8b6f2cb
|
|
BLAKE2b-256 checksum How to use checksums |
704f2c9667d57b21317f9944f7c51ac2f5d5b277139a8924d096970fce8e8123
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / traigent-0.29.0-py3-none-any.whl
| Download URL | traigent-0.29.0-py3-none-any.whl |
|---|---|
| Size | 2.6 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ab258a54289652fa44036a28df0606407fe4af55474db1e08a590502928aee58
|
|
BLAKE2b-256 checksum How to use checksums |
8e3fca6312e3d574226a3f7e279140f7eb645634f85ddb6068c6e570f59e70d0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency log