Skip to main content

agent-in-the-loop

PyPI version Python License: MIT CI

A lightweight Python client for the Agent In The Loop (AITL) confidence evaluation API. Attach a callback to your LangChain / LangGraph run, then call evaluate_confidence() when you want a score. Context, trace ID, and agent name are picked up automatically — no manual wiring.

This library cannot be used without an API key from trellar.io.


Create an account and API key

trellar.io is the only place that issues API keys for this library. Create an account there, then generate an API key from the dashboard. Without that key, evaluate_confidence() cannot authenticate and the client will not work.

Then pass the key into the SDK (see Environment Variables):

  • evaluate_confidence(api_key="..."), or
  • AGENT_IN_THE_LOOP_API_KEY in the environment

Installation

pip install "agent-in-the-loop[langchain]"

The langchain extra is required because agent runs are captured via a LangChain callback handler (get_agent_guard). Requires Python 3.9+.


Quick Start

from agent_in_the_loop import get_agent_guard, evaluate_confidence

# agent_name must be a stable, unique name for this agent graph — the
# backend uses it to track the graph's network profile across runs.
guard = get_agent_guard("research-agent")

graph.invoke(inputs, config={"callbacks": [guard]})

# context, trace_id, and agent_name are picked up from the guard
result = evaluate_confidence()
print(result.score)        # int, 1-10
print(result.explanation)  # str, human-readable reasoning

Where to call evaluate_confidence

Call it from a graph node (or after invoke()), at the point in the run you want scored. The payload is the events captured so far — later nodes are not included.

There are two ways to use the result:

1. Gate — validate before the graph continues

Put the call on an edge you do not want the graph to cross until AITL has scored the run. Use result.score / result.explanation to decide whether to proceed or stop.

def confidence_gate(state):
    result = evaluate_confidence()
    if result.score < 7:
        return {**state, "halt": True, "reason": result.explanation}
    return {**state, "halt": False}

Wire that node in front of the next step, and only continue when the score is acceptable.

2. Observe — send a validation, do not restrict the graph

Put the call anywhere you want a score recorded (a node, or after invoke()). Store or log result if you want it; do not branch on it. The graph continues either way.

def report_confidence(state):
    result = evaluate_confidence()
    return {**state, "confidence_score": result.score, "confidence_explanation": result.explanation}

Environment Variables

The SDK always talks to the managed AITL backend at https://api.trellar.io — this is fixed and cannot be overridden via an environment variable or function argument.

The API key itself is created only at trellar.io. Once you have it, you can pass it to evaluate_confidence(api_key=...) or set it as an environment variable so you do not pass it on every call:

Variable Description Default
AGENT_IN_THE_LOOP_API_KEY Bearer token for authentication (required)
export AGENT_IN_THE_LOOP_API_KEY=your-api-key
result = evaluate_confidence()  # api_key read from the env var

API Reference

get_agent_guard

get_agent_guard(agent_name: str) -> BaseCallbackHandler
Parameter Type Description
agent_name str Stable, unique name identifying this agent graph (e.g. "research-agent")

Returns a LangChain callback handler bound to agent_name. Pass it to graph.invoke(..., config={"callbacks": [guard]}).

Raises:

  • ValueError — if agent_name is empty or blank

evaluate_confidence

evaluate_confidence(
    *,
    api_key: str | None = None,
    timeout: float = 30.0,
) -> AgentLoopResult
Parameter Type Description
api_key str | None Bearer token. Falls back to AGENT_IN_THE_LOOP_API_KEY
timeout float HTTP request timeout in seconds (default 30.0)

context, trace_id, and agent_name are resolved automatically from the active guard created by get_agent_guard — there is no way to pass them manually. Requests always go to https://api.trellar.io; callers cannot redirect them.

Raises:

  • ValueError — if no active guard is found, its trace_id cannot be resolved, or api_key is missing
  • requests.HTTPError — on non-2xx HTTP responses

AgentLoopResult

A frozen dataclass with two fields:

Field Type Description
score int Confidence score from 1 (low) to 10 (high)
explanation str Human-readable explanation of the score

License

MIT — see LICENSE for details.

Release files for agent-in-the-loop 0.2.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for agent-in-the-loop 0.2.4
File Size Uploaded
agent_in_the_loop-0.2.4.tar.gz 17.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for agent-in-the-loop 0.2.4
File Interpreter ABI Platform
agent_in_the_loop-0.2.4-py3-none-any.whl Python 3 none any Details

Total release size: 31.5 kB

Release files / agent_in_the_loop-0.2.4.tar.gz

Download URL agent_in_the_loop-0.2.4.tar.gz
Size 17.5 kB
Tags Source
SHA-256 checksum
How to use checksums
0b93e1edb0ecd59a9046b524c16a6be91af88c9e56958fb2d36906a74e3dd279
BLAKE2b-256 checksum
How to use checksums
9a4a28d804f07c7b5881d9012ccb3d4f8ffe1af916e42e4925f1535f7aa60e9b
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 Aug 18, 2026.

Transparency log

Release files / agent_in_the_loop-0.2.4-py3-none-any.whl

Download URL agent_in_the_loop-0.2.4-py3-none-any.whl
Size 14.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
92e8efe059a51e1d4b891052ab8fad7e3232d6fd3a6d2ac2d5e9b084c663c2a6
BLAKE2b-256 checksum
How to use checksums
aa5fb13733cbfc1b3f984148a31bc516a76476ca1542fd366a3a5f8651b20184
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 Aug 18, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

This release

0.2.4 This release

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page