Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
157 commits
Select commit Hold shift + click to select a range
f3d8935
Test (#807)
aix-ahmet Jan 27, 2026
43d6183
ENG-2722 Fix code/value attribute handling for actions and removed au…
kadirpekel Jan 27, 2026
bebb927
Merge branch 'test' into development
aix-ahmet Jan 27, 2026
5a94cf1
removed limitations other than abort-critical (#811)
xainaz Jan 27, 2026
41285aa
Make model tool function, supplier, and version optional (#813)
xainaz Jan 28, 2026
11a53a8
fix: remove INFO severity from inspector
ahmetgunduz Jan 28, 2026
f63d1ff
ENG-2727-Change-the-inspector-payload-structure (#815)
aix-ahmet Jan 28, 2026
40042a1
feat(v2): Add Debugger meta-agent for agent response analysis (#814)
MaiaJP-AIXplain Jan 28, 2026
8ad7c97
ENG-2726 streaming support for v2 models (#816)
kadirpekel Jan 30, 2026
e62c1fb
ENG-2724 Added v2 apikey resource (#810)
kadirpekel Feb 3, 2026
bf38bd4
ENG-2725 Adjust run methods so that run uses the v2 endpoint and run_…
kadirpekel Feb 3, 2026
4cdf36a
Get-models-by-name (#674)
ahmetgunduz Feb 3, 2026
b004cd4
fix model completed
ahmetgunduz Feb 5, 2026
39a0448
Fix v2 imports from v1 modules that trigger env var validation (#819)
aix-ahmet Feb 5, 2026
d41cde0
Fix models api (#822)
aix-ahmet Feb 5, 2026
197c547
Merge branch 'test' into development
aix-ahmet Feb 5, 2026
698447e
remove duplicated code in v2/agent.py
aix-ahmet Feb 5, 2026
155b206
Development (#821)
ikxplain Feb 5, 2026
cda96cc
added rfc for test cleanup refactoring (#825)
aix-ahmet Feb 6, 2026
657ca4f
ci: add development branch to workflow triggers
aix-ahmet Feb 9, 2026
63897a8
undo ci
aix-ahmet Feb 9, 2026
987ec85
fix tests with available llm
aix-ahmet Feb 9, 2026
5bcbd2d
fix agent functional test and team agent functional test
aix-ahmet Feb 9, 2026
1db0f38
refactored test cleanup to use yield fixtures
aix-ahmet Feb 9, 2026
1539df1
removed finetune tests from development branch
aix-ahmet Feb 9, 2026
c71a3ab
Feature/fixture-based-test-cleanup (#826)
aix-ahmet Feb 9, 2026
a71e715
file parsing support in aiR and add functional test (#824)
basitanees Feb 9, 2026
6d61463
FIX: Bug 710 - Allowed Actions Not Set (#828)
aix-ahmet Feb 12, 2026
08c44b2
Development (#829)
ikxplain Feb 17, 2026
503e03e
fix agent exists bug on agent functional test
aix-ahmet Feb 18, 2026
8099123
fix agent exists bug on agent functional test cont'uned
aix-ahmet Feb 18, 2026
4c98777
fix tool exists bug on agent functional test
aix-ahmet Feb 18, 2026
fa8d549
fix llm not found bug on agent functional test
aix-ahmet Feb 18, 2026
14a9135
replace test agent name with uuid suffix in agent functional test
aix-ahmet Feb 18, 2026
4cefedf
remove _ from agent name in agent functional test
aix-ahmet Feb 18, 2026
1f11521
Merge branch 'main' into test
ikxplain Feb 23, 2026
95bbf09
Add score threshold option for searching in index (#683)
basitanees Feb 23, 2026
6ca8a98
Merge branch 'development' into test
aix-ahmet Feb 23, 2026
351c864
Test (#835)
aix-ahmet Feb 23, 2026
ffab69e
ENG-2794: Improve v2 streaming tool-calling handling and test coverag…
MaiaJP-AIXplain Feb 23, 2026
0ad819b
hotfix in toolcal with streamming (#836)
MaiaJP-AIXplain Feb 24, 2026
41dc526
V2 test failures (#839)
xainaz Feb 25, 2026
fb5b1dd
ENG-2804 Review of docstrings (#838)
kadirpekel Feb 25, 2026
36eda45
send dependencies if empty (#840)
xainaz Feb 25, 2026
6e84586
ENG-2808 Return connection URL when creating a Tool (#837)
kadirpekel Feb 25, 2026
a772743
check nested error message (#833)
xainaz Feb 25, 2026
86a2549
ENG-2783: reorg directory structure into dedicated v1/v2 folders (#831)
aix-ahmet Feb 25, 2026
3c9705e
fix python 3.12> compatibility and removed except from models
aix-ahmet Feb 25, 2026
85c5e2d
fix: response geneartion in v2
aix-ahmet Feb 25, 2026
14d58b9
feat: update default LLM from GPT-4o to GPT-5 Mini
aix-ahmet Feb 26, 2026
4b05fc7
Merge devtest (#843)
xainaz Mar 2, 2026
12148ce
Merge branch 'test' into development
aix-ahmet Mar 3, 2026
a571c51
ENG-2821 Addressed several api key management issues (#841)
kadirpekel Mar 3, 2026
1da7931
fix bug list action input (#846)
basitanees Mar 5, 2026
2920c68
Development (#842)
ikxplain Mar 5, 2026
9c38ae4
ENG-2831 using camelCase instead of Python's snake_case convention (#…
kadirpekel Mar 6, 2026
2d97a54
docs: refresh README positioning, diagrams, and v2 quickstart
nurhamdan1987 Mar 8, 2026
3ee3091
docs: refine README copy and update team-agent diagram
nurhamdan1987 Mar 8, 2026
bd08fb4
docs: mention built-in opt-in agent memory
nurhamdan1987 Mar 8, 2026
a77f20d
Merge branch 'main' into test with properly resolved conflicts
aix-ahmet Mar 9, 2026
6b7bbfc
Fix general asset tests: update model names, replace deleted model, s…
aix-ahmet Mar 9, 2026
fa8430c
Mark apikey create test as flaky due to transient 502 errors
aix-ahmet Mar 9, 2026
aad37a2
Fix failing functional tests: agent tool_steps iteration, v2 model te…
aix-ahmet Mar 9, 2026
5b4ca69
Merge branch 'main' into test
aix-ahmet Mar 9, 2026
e4f62c0
docs: refresh README for Agents SDK v2 (#849)
nurhamdan1987 Mar 10, 2026
b97b028
added tool type (#852)
xainaz Mar 10, 2026
c786e10
ENG-2852 GET /sdk/runs/{execution_id} returns 404 for valid agent exe…
kadirpekel Mar 10, 2026
ab1035e
ENG-2854 runtimewarning when saving an agent (#855)
kadirpekel Mar 10, 2026
57b70ae
ENG-2855 run_response_generation arg false by default (#856)
kadirpekel Mar 10, 2026
a8a9d16
Merge main into test, accepting main changes for conflicts
aix-ahmet Mar 11, 2026
1dedcbf
Test (#862)
aix-ahmet Mar 11, 2026
873fd64
Fix Function enum decoder: backend kebab-case IDs were silently rejec…
MaiaJP-AIXplain Mar 13, 2026
99dd844
Development (#867)
ikxplain Mar 16, 2026
6ab523d
problem 3 and 6 addressed (#865)
xainaz Mar 17, 2026
eacd131
ENG-2856 Unify action/input discovery API across Tool and Model (#857)
kadirpekel Mar 18, 2026
3291b51
ENG-2855 run_response_generation arg false by default (#868)
kadirpekel Mar 18, 2026
1dea6c2
ENG-2886 Fixed dataclass formation causing a bug (#870)
kadirpekel Mar 19, 2026
ac64b25
ENG-2880 Deprecate subagents param and replace with agents param (#871)
kadirpekel Mar 26, 2026
7df39c1
Readme refreshRefresh README positioning, examples, and AgenticOS arc…
nurhamdan1987 Mar 26, 2026
fc8c8af
fix: enable run_response_generation for Debugger meta-agent (#876)
MaiaJP-AIXplain Mar 26, 2026
53fc567
Add pre-commit CI workflow and fix two failing unit tests (#879)
aix-ahmet Mar 26, 2026
dd3317a
ENG-2836 Agent cloning introduced (#847)
kadirpekel Mar 26, 2026
3b6a63f
ENG-2847 fix the ActionInputsProxy to properly extract and coerce def…
kadirpekel Mar 26, 2026
f32e80f
Eng 2840 implement rlms (#869)
elsheikhams99 Mar 26, 2026
af6c341
ENG-2922: Add token usage and asset fields to model response (#881)
aix-ahmet Mar 27, 2026
632b214
each actions spec retrieved + attributes -> list (#883)
xainaz Mar 31, 2026
05c827c
ENG-2891 Tool saving foundation (#872)
kadirpekel Mar 31, 2026
8d29034
added available action (#887)
xainaz Mar 31, 2026
e83814c
Change default model for agents to GPT-5.4 (#888)
elsheikhams99 Apr 1, 2026
65d5520
Eng 2922 add token usage in llm calls in sdk (#884)
aix-ahmet Apr 1, 2026
a0ca7eb
ENG-2922 Token usage tracking in model responses and agent progress (…
aix-ahmet Apr 1, 2026
31eaddf
BUG-734 Fix OAuth tool deserialization crash and type mismatch (#891)
aix-ahmet Apr 6, 2026
fc9349c
fix single-action tool serialization and coverage (#898)
aix-ahmet Apr 6, 2026
12f38e3
Support URLs in RLMs context (#892)
elsheikhams99 Apr 7, 2026
adc66ca
docs: align root and docs README (#895)
nurhamdan1987 Apr 7, 2026
b0218f8
docs: add llms reference files (#893)
nurhamdan1987 Apr 7, 2026
8504c75
Main to Test (#899)
aix-ahmet Apr 7, 2026
fc38ae6
Merge origin/test into development
aix-ahmet Apr 7, 2026
7f0ce73
tests: restore GPT-5.4 default llm references
aix-ahmet Apr 7, 2026
23be558
Development (#901)
aix-ahmet Apr 7, 2026
12e1967
fix: support modern S3 presigned upload URLs
aix-ahmet Apr 7, 2026
8b1de63
remove not available cladue model
aix-ahmet Apr 7, 2026
bdf7c3b
update model to gpt 4o
aix-ahmet Apr 7, 2026
ddf3840
remove not available modedl
aix-ahmet Apr 7, 2026
89976a2
fix: align v2 attributes and functional fixtures with backend
aix-ahmet Apr 7, 2026
6d77e3f
Merge branch 'test' into development
aix-ahmet Apr 7, 2026
9bd9bfc
Development (#902)
aix-ahmet Apr 7, 2026
25dbeaa
Merge branch 'main' into test
aix-ahmet Apr 7, 2026
0b66545
chore: change the in/out token format
aix-ahmet Apr 7, 2026
c58c2f4
Update pyproject.toml (#909)
aix-ahmet Apr 9, 2026
317faa7
Eng 2969 (#910)
elsheikhams99 Apr 9, 2026
c8ef8de
Add support for pre-built inspectors (#913)
elsheikhams99 Apr 14, 2026
0631f7a
Development (#914)
ikxplain Apr 16, 2026
8d0792b
test: add Arabic v2 functional coverage (#906)
aix-ahmet Apr 17, 2026
6e94ab5
merge to test (#915)
hadi-aix Apr 24, 2026
444b435
Update AGENTS.md with behavioral rules for coding agents (#911)
nurhamdan1987 Apr 27, 2026
423942a
added datetime extracted (#873)
xainaz Apr 27, 2026
7ba7e8e
added mock link to test (#917)
xainaz May 4, 2026
b8517b4
Merge branch 'main' into test
elsheikhams99 May 5, 2026
20be0c7
fix(ENG-3044): force UTF-8 on SSE response in ModelResponseStreamer (…
MaiaJP-AIXplain May 6, 2026
b43d87a
Add hallucination guardrail (#916)
elsheikhams99 May 7, 2026
e05be93
Add agents with aixplain tools tests (#924)
elsheikhams99 May 11, 2026
a130638
initial changes for llms (#922)
xainaz May 22, 2026
94dd353
docs: refresh SDK README for SDK 2 (#938)
nurhamdan1987 Jun 1, 2026
5c27b31
main to test sync (#939)
aix-ahmet Jun 1, 2026
6b45ad2
Merge branch 'development' into test
aix-ahmet Jun 1, 2026
cec837e
Test to dev sync (#940)
aix-ahmet Jun 1, 2026
619fee3
feat: add parallel and rag modes to RLMs (#928)
elsheikhams99 Jun 2, 2026
f7e15d5
issue + tests added (#896)
xainaz Jun 2, 2026
a93ad3d
fix(v2): tolerate non-list details in ModelResult deserialization (#942)
aix-ahmet Jun 3, 2026
ee3b70f
fix(v2): V3-compat agent fixes — dict expected_output at run, json de…
aix-ahmet Jun 3, 2026
fe46dbc
fix(v2): dispatch prebuilt inspector payloads in Agent.__post_init__
aix-ahmet Jun 3, 2026
63ad1e5
Remove temperature parameter from worker run call (#945)
elsheikhams99 Jun 4, 2026
98d5e94
New feature for silent release - Agent benchmarking v0.1 (#946)
shreyasXplain Jun 5, 2026
5236df5
error codes changes (#934)
xainaz Jun 8, 2026
3e8c9a8
Merge branch 'test' into development
hadi-aix Jun 8, 2026
85c3750
merge to test (#948)
hadi-aix Jun 8, 2026
7fe6627
fix unit tests
aix-ahmet Jun 9, 2026
7ad13f4
fix(tests): replace removed/deprecated hardcoded asset IDs
aix-ahmet Jun 9, 2026
7ab1fe0
ci: trigger fresh test run
aix-ahmet Jun 9, 2026
a11d65f
test(general_assets): skip destructive test_model_deletion
aix-ahmet Jun 9, 2026
2fc1cfe
fix(sdk): harden against deleted models, dict polling responses, and …
aix-ahmet Jun 9, 2026
acb2b9e
fix(api_key): handle string model id in to_dict and _set_limit
aix-ahmet Jun 9, 2026
3ee24f8
Merge branch 'development' into test
aix-ahmet Jun 10, 2026
d003015
fix: remove incorrect object attribute access for dict response (#951)
shreyasXplain Jun 10, 2026
cd4cf5a
Fix/pipeline polling status (#955)
shreyasXplain Jun 10, 2026
024dba0
Merge branch 'main' into test
aix-ahmet Jun 11, 2026
3aa42df
fix: add trailing newlines to Arabic markdown files
aix-ahmet Jun 11, 2026
5df7b20
Development (#988)
aix-ahmet Jul 14, 2026
eb17443
Development (#990)
ikxplain Jul 17, 2026
7436793
Development (#992)
aix-ahmet Jul 21, 2026
ab93886
Development (#994)
aix-ahmet Jul 21, 2026
5664f4d
fix(ci): repair test-branch CI failures (run 29570846631) (#995)
aix-ahmet Jul 21, 2026
99e09c7
test(v2): align functional tests with current backend behavior (#996)
aix-ahmet Jul 21, 2026
edd8df7
test(v2): match Arabic inspector steps by the inspector's configured …
aix-ahmet Jul 21, 2026
640bed9
test: quiet the remaining non-backend CI failures (#998)
aix-ahmet Jul 21, 2026
0fb24b2
Merge remote-tracking branch 'origin/main' into test
aix-ahmet Jul 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -148,3 +148,8 @@ dmypy.json
.env.test

aixplain-dev/

# brusk:worktree-ignores
.brusk/
.claude/
CLAUDE.md
21 changes: 21 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,24 @@ repos:
pass_filenames: false
types: [python]
always_run: true
additional_dependencies:
- coverage
- pytest
- pytest-mock
- pytest-rerunfailures
- pytest-xdist
- requests-mock
- Babel>=2.12.0
- requests>=2.1.0
- tqdm>=4.1.0
- pandas>=2.0.0
- python-dotenv>=1.0.0
- validators>=0.20.0
- filetype>=1.2.0
- click>=7.1.2
- PyYAML>=6.0.1
- dataclasses-json>=0.5.2
- Jinja2==3.1.6
- sentry-sdk>=1.0.0
- pydantic>=2.10.6
- filelock>=3.0.0
116 changes: 39 additions & 77 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/aixplain-logo-light.png">
<source media="(prefers-color-scheme: light)" srcset="docs/assets/aixplain-logo-dark.png">
<img src="docs/assets/aixplain-logo-dark.png" alt="aixplain" width="520">
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/aixplain-logo-light.svg">
<source media="(prefers-color-scheme: light)" srcset="docs/assets/aixplain-logo-dark.svg">
<img src="docs/assets/aixplain-logo-dark.svg" alt="aixplain" width="420">
</picture>
</p>

Expand All @@ -11,53 +11,47 @@
<p align="center">
<a href="LICENSE"><img src="https://img.shields.io/badge/License-Apache%202.0-2ea44f?style=flat-square" alt="License"></a>
<a href="https://studio.aixplain.com/browse"><img src="https://img.shields.io/badge/Marketplace-900%2B%20models%20%26%20tools-0b74de?style=flat-square" alt="Marketplace size"></a>
<a href="https://console.aixplain.com/settings/keys"><img src="https://img.shields.io/badge/%F0%9F%94%91%20PAYG%20API%20key-Settings-0b74de?style=flat-square" alt="PAYG API key"></a>
<a href="https://discord.gg/aixplain"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat-square&logo=discord&logoColor=white" alt="Discord"></a>
</p>

**Build, deploy, and govern autonomous AI agents — in a few lines of Python.**
**Build, deploy, and run autonomous AI agents — governed by default, in a few lines of Python.**

_The fastest way to deploy managed, multi-agent systems with runtime governance on any infrastructure._
aixplain is the operating system for autonomous AI: multi-agent orchestration with **runtime governance on every action**, across cloud, on-prem, edge, and local. The full lifecycle — build → evaluate → deploy → monitor → evolve — on one runtime, instead of stitching tools together.

aixplain is the operating system for autonomous AI — **multi-agent orchestration and runtime governance across cloud, on-prem, edge, and fully air-gapped environments**. It spans the full lifecycle — **development → evaluation → deployment → monitoring → evolution** — so you ship faster instead of stitching tools together. Agents plan, call models and tools, run code, and adapt at runtime, with **agents-in-the-loop** governance enforced on every execution.
**On your terms** — **your data** in your perimeter, **your cost** free on local models and tools, pay as you go in the cloud, **your independence** across any model or infrastructure, no lock-in.

**Build any kind of agent on one runtime** — knowledge (RAG), data, custom-logic, integration, and team agents — with built-in memory, multimodality, and file handling.

Develop your way — **SDK, API, CLI, and MCP** environments all run on the same runtime layer, backed by an integrated marketplace of **900+ AI models, tools, and integrations from 70+ vendors** (OpenAI, Anthropic, Gemini, Firecrawl, Tavily, SerpAPI, a code-execution sandbox, and more). **One API key, one bill**, pay as you go — no per-vendor keys or contracts.
Build any agent — knowledge (RAG), data, custom-logic, integration, and team — via **SDK, API, CLI, or MCP**, on a marketplace of **900+ models, tools, and integrations**.

## Why aixplain

Less to build, less to operate:

- **Deploy with one call** — `agent.save()` promotes an agent to a persistent, versioned endpoint; no Dockerfiles, queues, or autoscaling to manage.
- **No integration glue** — reach [900+ models, tools, and integrations](#mcp-server-marketplace) through one key; skip per-provider SDKs, auth, and rate-limit handling.
- **Governance you don't have to code** — allow-lists, per-asset permissions, rate and usage limits, and enterprise RBAC enforced at runtime.
- **No integration glue** — reach [900+ models, tools, and integrations](#marketplace) through one key; skip per-provider SDKs, auth, and rate-limit handling.
- **Guardrails you don't have to build** — allow-lists, per-asset permissions, rate and usage limits, and access control enforced at runtime.
- **Self-debugging** — step-level traces of every plan, tool call, and outcome.
- **Run it anywhere** — the same definition runs serverless, on-prem, at the edge, or fully air-gapped.
- **Run it anywhere** — the same definition runs in the cloud, on-prem, at the edge, or locally.
- **Works with your coding agent** — native [MCP support](#marketplace) for MCP-compatible IDEs and coding agents.

| | aixplain SDK | Other agent frameworks |
|---|---|---|
| Governance | Asset/action allow-lists, per-asset permissions, rate and usage limits, and enterprise RBAC | Usually custom code or external guardrails |
| Models and tools | 900+ models and tools with one API key | Provider-by-provider setup |
| Deployment | Cloud (instant) or on-prem | Usually self-assembled runtime and infra |
| Observability | Built-in traces and dashboards | Varies by framework |
| [Coding-agent workflows](https://github.com/aixplain/aiXplain/tree/main/skills/aixplain-agent-builder) | Works natively with MCP-compatible coding agents and IDEs | Usually not a first-class workflow target |
## How it works

## Agentic OS
The portable runtime behind aixplain agents: orchestration, governed asset serving, and observability across cloud, on-prem, edge, and local. See the [documentation](https://docs.aixplain.com) for the full architecture.

Agentic OS is the portable runtime platform behind aixplain agents — orchestration, governed asset serving, and observability across Cloud (instant), on-prem, edge, and air-gapped deployments. See the [documentation](https://docs.aixplain.com) for the full architecture.
<p align="center">
<img src="docs/assets/aixplain-agentic-os-architecture.svg" alt="aixplain Agentic OS architecture — governed execution loop (Planner, Orchestrator, Inspector, Bodyguard) over the infrastructure services, deployable on cloud, on-prem, edge, and local" width="100%">
</p>

---

## Quick start

> **This README documents SDK v2, the default API.** SDK v1 (the legacy factory API) keeps working until **end of July 2026**, after which v2 is the only supported surface.
> **This README documents SDK v2, the default API.** SDK v1 (the legacy factory API) keeps working until **August 1, 2026**, after which v2 is the only supported surface.

```bash
pip install aixplain
```

Get your API key from your [aixplain account](https://console.aixplain.com/settings/keys), then expose it to the SDK:
Get your API key from your aixplain account, then expose it to the SDK:

```bash
export AIXPLAIN_API_KEY=<your-key>
Expand All @@ -66,7 +60,6 @@ export AIXPLAIN_API_KEY=<your-key>
### Create and run your first agent

```python
from uuid import uuid4
from aixplain import Aixplain

aix = Aixplain() # reads AIXPLAIN_API_KEY from the environment
Expand All @@ -75,7 +68,7 @@ search_tool = aix.Tool.get("tavily/tavily-web-search/tavily")
search_tool.allowed_actions = ["search"]

agent = aix.Agent(
name=f"Research agent {uuid4().hex[:8]}",
name="Research agent",
description="Answers questions with concise web-grounded findings.",
instructions="Use the search tool when needed and cite key findings.",
tools=[search_tool],
Expand All @@ -93,9 +86,8 @@ print(result.data.output)
### Build a multi-agent team

```python
from uuid import uuid4
from aixplain import Aixplain
from aixplain.v2 import EditorConfig, EvaluatorConfig, EvaluatorType, Inspector, InspectorAction, InspectorActionConfig, InspectorSeverity, InspectorTarget
from aixplain.v2 import Inspector

aix = Aixplain() # reads AIXPLAIN_API_KEY from the environment
search_tool = aix.Tool.get("tavily/tavily-web-search/tavily")
Expand All @@ -107,29 +99,25 @@ def never_edit(text: str) -> bool:
def passthrough(text: str) -> str:
return text

# Config is plain data — strings for action/targets/severity, and a Metric,
# asset-id string, or callable for the `metric` (the universal judge).
noop_inspector = Inspector(
name=f"noop-output-inspector-{uuid4().hex[:8]}",
severity=InspectorSeverity.LOW,
targets=[InspectorTarget.OUTPUT],
action=InspectorActionConfig(type=InspectorAction.EDIT),
evaluator=EvaluatorConfig(
type=EvaluatorType.FUNCTION,
function=never_edit,
),
editor=EditorConfig(
type=EvaluatorType.FUNCTION,
function=passthrough,
),
name="noop-output-inspector",
severity="low",
targets=["output"],
action="edit",
metric=never_edit,
editor=passthrough,
)

researcher = aix.Agent(
name=f"Researcher {uuid4().hex[:8]}",
name="Researcher",
instructions="Find and summarize reliable sources.",
tools=[search_tool],
)

team_agent = aix.Agent(
name=f"Research team {uuid4().hex[:8]}",
name="Research team",
instructions="Research the topic and return exactly 5 concise bullet points.",
subagents=[researcher],
inspectors=[noop_inspector],
Expand All @@ -142,10 +130,6 @@ response = team_agent.run(
print(response.data.output)
```

<div align="center">
<img src="docs/assets/aixplain-workflow-teamagent.png" alt="aixplain team-agent runtime flow" title="aixplain" width="70%"/>
</div>

Execution order:

```text
Expand All @@ -156,20 +140,19 @@ Team agent
├── Orchestrator: routes work to the right subagent
├── Researcher subagent
│ └── Tavily search tool: finds and summarizes reliable sources
├── Inspector: checks the final output through a simple runtime policy
├── Orchestrator: decides whether another pass is needed
└── Responder: returns one final answer
├── Inspector: validates the output against a runtime policy
└── Orchestrator: composes and returns the final answer
```

> **SDK 1 (legacy):** available until end of July 2026 — see the [SDK 1 docs](https://docs.aixplain.com/1.0/).
> **SDK v1 (legacy):** available until August 1, 2026 — see the [SDK v1 docs](https://docs.aixplain.com/1.0/).

---

## MCP Server Marketplace
## Marketplace

[aixplain Marketplace](https://studio.aixplain.com/browse) now also exposes MCP servers for **900+ models and tools**, allowing external clients to access selected **tool, integration, and model assets**, for example **Opus 4.6, Kimi, Qwen, Airtable, and Slack**, through **aixplain-hosted MCP endpoints** with a single API key 🔑.
The [aixplain Marketplace](https://studio.aixplain.com/browse) is a catalog of **900+ models, tools, and integrations**. Every asset is reachable through the same three outlets — **SDK, API, and MCP** — with a single API key 🔑.

Read the full MCP setup guide in the [MCP servers docs](https://docs.aixplain.com/api-reference/mcp-servers).
For MCP-compatible clients and IDEs, assets (for example Opus 4.6, Kimi, Qwen, Airtable, Slack) are served through aixplain-hosted MCP endpoints. See the [MCP servers docs](https://docs.aixplain.com/api-reference/mcp-servers).

```json
{
Expand All @@ -185,32 +168,11 @@ Read the full MCP setup guide in the [MCP servers docs](https://docs.aixplain.co

---

## Core concepts

| Concept | What it is |
|---|---|
| **Agent** | An autonomous entity that reasons, plans, and uses tools to complete a task. |
| **Team agent** | Multiple specialized agents coordinated by a planner and orchestrator at runtime. |
| **Tool** | A capability an agent can invoke — a model, an integration, or code (Python/SQL). |
| **Model** | An LLM, utility, or index asset from the [marketplace](https://studio.aixplain.com/browse). |
| **Integration** | A connector to an external service (Slack, Airtable, Gmail, and more) that an agent can act through. |
| **Micro-agents** | Built-in governance components that run inline on every execution: Mentalist (planning), Orchestrator (routing), Inspector (validation — e.g. block pip installs or network access), Bodyguard (security), Responder (formatting). |
| **Meta-agent** | An agent that improves other agents — the Evolver monitors KPIs and refines behavior over time. |

See the [documentation](https://docs.aixplain.com) for the full API reference.

---

## Data handling and deployment

aixplain applies runtime governance and enterprise controls by default:

- **We do not train on your data** — your data is not used to train foundation models.
- **No data retained by default** — agent memory is opt-in (short-term and long-term).
- **SOC 2 Type II certified** — enterprise security and compliance posture.
- **Runtime policy enforcement** — Inspector and Bodyguard govern every agent execution, with allow-lists for assets and actions, per-asset permissions, rate and usage limits, and enterprise RBAC.
- **Portable deployment options** — Cloud (instant) or on-prem (including VPC and air-gapped environments).
- **Encryption** — TLS 1.2+ in transit and encrypted storage at rest.
- **Your data stays yours** — never used to train foundation models; agent memory is opt-in. SOC 2 Type II; TLS 1.2+ in transit, encrypted at rest.
- **Governed at runtime** — Inspector and Bodyguard enforce allow-lists, per-asset permissions, rate and usage limits, and access control on every execution.
- **Deploy anywhere** — cloud, on-prem, edge, or local; air-gapped and VPC available on-prem or local.

Learn more at aixplain [Security](https://aixplain.com/security/) and aixplain [pricing](https://aixplain.com/pricing/).

Expand Down
7 changes: 6 additions & 1 deletion aixplain/utils/user_info_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,12 @@

@lru_cache(maxsize=1)
def _fetch_ipinfo() -> Dict[str, Any]:
"""Fetch and cache the ipinfo.io payload for the current public IP."""
"""Fetch and cache the ipinfo.io payload for the current public IP.

All errors degrade silently to ``{}`` — this is auxiliary metadata
and an outage / network-isolation / test-mock should never break a
caller's run.
"""
try:
response = requests.get(_IPINFO_URL, timeout=_IPINFO_TIMEOUT)
response.raise_for_status()
Expand Down
8 changes: 6 additions & 2 deletions aixplain/v1/modules/pipeline/asset.py
Original file line number Diff line number Diff line change
Expand Up @@ -260,12 +260,16 @@ def run(
if response_version == "v1":
polling_response["elapsed_time"] = end - start
return polling_response
# `status`/`completed` were already read above via subscript access, which
# works for both a PipelineResponse and the plain dict __polling may return
# when polling fails. Use subscript/`in` access here too so a failed run
# doesn't raise AttributeError on a dict.
return PipelineResponse(
status=status,
completed=completed,
error=polling_response.get("error"),
error=polling_response["error"] if "error" in polling_response else None,
elapsed_time=end - start,
data=polling_response.get("data", {}),
data=polling_response["data"] if "data" in polling_response else {},
**kwargs,
)

Expand Down
58 changes: 35 additions & 23 deletions aixplain/v2/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,20 @@
from .core import Aixplain
from .rlm import RLM, RLMResult
from .utility import Utility
from .agent import Agent, ContextOverflowStrategy
from .agent import Agent, Budget, ContextOverflowStrategy
from .tool import Tool
from .skill import Skill
from .actions import Input, Inputs, Action, Actions
from .integration import TriggerTypeSpec, TriggerEventOption, TriggerTypes
from .trigger import Trigger, TriggerConfiguration, TriggerRepeatRule
from .file import Resource
from .upload_utils import FileUploader, upload_file, validate_file_for_upload
from .inspector import (
Inspector,
InspectorTarget,
InspectorAction,
InspectorOnExhaust,
InspectorSeverity,
InspectorActionConfig,
EvaluatorType,
EvaluatorConfig,
EditorConfig,
PrebuiltInspector,
from .inspector import Inspector
from .session import (
ExecutionConfig,
Session,
SessionMessage,
SessionMessageAttachment,
)
from .meta_agents import Debugger, DebugResult
from .agent_progress import AgentProgressTracker, ProgressFormat
Expand Down Expand Up @@ -84,6 +82,11 @@
EvolveType,
CodeInterpreterModel,
SplittingOptions,
SessionStatus,
RunStatus,
MessageRole,
Reaction,
AttachmentType,
)

__all__ = [
Expand All @@ -92,24 +95,21 @@
"RLMResult",
"Utility",
"Agent",
"Budget",
"ContextOverflowStrategy",
"Tool",
"Skill",
"Resource",
"FileUploader",
"upload_file",
"validate_file_for_upload",
# Inspector classes
# Session classes
"Session",
"SessionMessage",
"SessionMessageAttachment",
"ExecutionConfig",
# Inspector
"Inspector",
"InspectorTarget",
"InspectorAction",
"InspectorOnExhaust",
"InspectorSeverity",
"InspectorActionConfig",
"EvaluatorType",
"EvaluatorConfig",
"EditorConfig",
"PrebuiltInspector",
"ModelResponse",
# Meta-agents
"Debugger",
"DebugResult",
Expand Down Expand Up @@ -180,9 +180,21 @@
"EvolveType",
"CodeInterpreterModel",
"SplittingOptions",
"SessionStatus",
"RunStatus",
"MessageRole",
"Reaction",
"AttachmentType",
# Actions / Inputs hierarchy
"Input",
"Inputs",
"Action",
"Actions",
# Triggers
"Trigger",
"TriggerConfiguration",
"TriggerRepeatRule",
"TriggerTypeSpec",
"TriggerEventOption",
"TriggerTypes",
]
Loading
Loading