Skip to main content

14 posts tagged with "agents"

View All Tags

How to build an agent with grounding on LiteLLM

Ishaan Jaffer
CTO, LiteLLM
A DEVELOPER GUIDE BY LITELLMPYTHON SDK / OCTOBER 2026

BUILD AN AGENT WITHGROUNDING

Grounding checks whether an answer is supported
by the documents you give it.

Start building
01 / YOUR EVIDENCE$500Home office equipment policy

Employees receive a one-time home office equipment allowance of $500. Submit receipts within 30 days of purchase.

home-office
native structured findings
WORKPLACE ASSISTANTRecorded fixture
How much can I spend on my home office?
YOUR AGENT

You receive a one-time home office allowance of $500. Submit your receipts within 30 days of purchase.

Grounded in your documents

The policy supports the allowance and receipt deadline.

source_ids: ["home-office"]
true
RECORDED FIXTURE / NO MODEL CALLS

Build an agent that answers questions from your documents, then checks each answer against the evidence before showing it in chat.

We will connect to a LiteLLM gateway, load a policy, generate and check an answer, then display the grounding result. The Python snippets form one async request handler. Start with one document; connect your retriever once you can inspect the complete flow.

Source preview

This guide uses the unreleased SDK helper #49469, native endpoint response #49460, and Bedrock assessment setting #49470, for issue #49217. Use that implementation for both your SDK and gateway until release. The template at the end pins the complete revision.

Step 1. Connect to your gateway​

Configure your SDK once. Use your gateway URL and a virtual key with access to the agent model and grounding guardrail:

agent.py / connection
import osimport litellm
litellm.api_base = os.environ["LITELLM_API_BASE"]litellm.api_key = os.environ["LITELLM_API_KEY"]

We use a model named agent on the gateway. The openai/ prefix below selects the OpenAI-compatible transport; the gateway can route agent to a model from another provider.

For the grounding check, use Amazon Bedrock Guardrails through LiteLLM. AWS maintains the assessment service, and you can use it with answers from other model providers. Add this to your gateway configuration:

config.yaml / grounding
guardrails:  - guardrail_name: answer-grounding    litellm_params:      guardrail: bedrock      mode: post_call      default_on: false      guardrailIdentifier: os.environ/BEDROCK_GUARDRAIL_ID      guardrailVersion: os.environ/BEDROCK_GUARDRAIL_VERSION      aws_region_name: os.environ/AWS_REGION_NAME      contextual_grounding_from_messages: true      outputScope: FULL

Create an AWS guardrail with contextual grounding enabled. For conversational answers, choose Standard tier and its required cross-Region inference profile. Set the AWS filter action to NONE so your application can receive an unsupported finding and decide what to display. Set outputScope: FULL in LiteLLM to receive supported assessments too. See AWS setup, filter actions, and full assessments.

default_on: false leaves this guardrail available for the explicit SDK call in step 3. You control when the check runs.

Step 2. Retrieve the evidence​

Start with a home office policy. Save this text as home-office.md:

home-office.md
Employees receive a one-time home office equipment allowance of $500.Submit receipts within 30 days of purchase.

Load the policy and keep it with the question:

agent.py / evidence
from pathlib import Path
question = "How much can I spend on my home office?"evidence = Path("home-office.md").read_text()
source_messages = [    {"role": "system", "content": evidence},    {"role": "user", "content": question},]

Your agent and the grounding service must receive the same evidence. With contextual_grounding_from_messages: true, LiteLLM sends the system text to Bedrock as the grounding source and the user question as the query.

For your own documents, replace the file read with your retriever. Pass only documents the current user can access. Keep previous assistant answers out of the reference evidence.

Step 3. Generate and check the answer​

Ask your model to answer from that evidence:

agent.py / answer
completion = await litellm.acompletion(    model="openai/agent",    messages=[        {"role": "system", "content": "Answer using only this policy:\n" + evidence},        {"role": "user", "content": question},    ],)answer = completion.choices[0].message.content

Then call the grounding guardrail with the answer and source messages:

agent.py / grounding
native_result = await litellm.guardrails.apply(    "answer-grounding",    response=answer,    messages=source_messages,)

"answer-grounding" selects the configured guardrail. response=answer tells the SDK to check generated output; the SDK infers the direction. You do not need to provide an input type or a response-format flag.

The call returns the guardrail's native structured findings, after LiteLLM's existing reporting sanitization. For Bedrock, the grounding assessment looks like this illustrative excerpt:

Bedrock assessment
{  "contextualGroundingPolicy": {    "filters": [{      "type": "GROUNDING",      "score": 0.98,      "threshold": 0.7,      "detected": false    }]  }}

Bedrock compares the answer with the supplied evidence. It does not verify whether the source document itself is correct. Evaluate the check on supported, contradicted, and incomplete answers from your use case before using it to enforce policy.

Step 4. Show the result in chat​

Read the GROUNDING assessments. Require an assessment before showing a positive badge, and check the score against its configured threshold:

agent.py / verdict
results = native_result if isinstance(native_result, list) else [native_result]checks_by_result = [    [check     for assessment in result.get("assessments", [])     for check in assessment.get("contextualGroundingPolicy", {}).get("filters", [])     if check["type"] == "GROUNDING"]    for result in results]
is_grounded = Noneif checks_by_result and all(checks_by_result):    is_grounded = all(        check["score"] >= check["threshold"] and not check.get("detected", False)        for checks in checks_by_result        for check in checks    )

Check all returned chunks. Do not infer success from Bedrock's overall action: a report-only guardrail can return NONE with a negative grounding finding.

Return the answer and verdict from your chat backend. In your chat component, show the result beside the answer:

GroundingBadge.jsx
export function GroundingBadge({grounded}) {  if (grounded == null) {    return <span>Grounding check unavailable</span>;  }
  return (    <span data-status={grounded ? "supported" : "unsupported"}>      {grounded ? "Supported by your documents" : "Not supported"}    </span>  );}
01 / SUPPORTEDGrounded

Show the source and the check's explanation.

is_grounded: true
02 / UNSUPPORTEDNot supported

Explain the gap or ask the agent to retry.

is_grounded: false
03 / CHECK FAILEDUnavailable

Keep this separate from a completed check.

no valid verdict

A timeout, missing assessment, or invalid result should produce Check unavailable, with no green badge. The template below includes typed response validation and those failure states.

Bedrock evaluates the supplied documents together. Label the references Documents checked; its response does not attribute an answer to an individual document. For an unsupported answer, you can show the gap, retrieve more evidence, or withhold the answer. Wait for the check before rendering if your product gates delivery on the result.

Deploy the complete chat template​

You have the core flow: evidence, answer, grounding call, and a verdict beside the response. Use the template to get the complete chat UI, a tool-calling document agent, and validated result handling in a separate repository.

Run the complete app
git clone https://github.com/BerriAI/litellm-grounded-agent-starter.gitcd litellm-grounded-agent-starteruv syncuv run grounded-agent-demo

Open localhost:8502. Choose Home office allowance for a supported answer, or Check an unsupported answer to see a negative verdict. This local demo uses fixed model and judge responses, labelled in the UI, so you can exercise the SDK, gateway, and chat without provider credentials.

For a live deployment, follow the template's Bedrock setup, replace the included documents with your retriever, and connect your models. The launcher supports local development; deploy the gateway and chat app with your platform's normal service configuration. Add sign-in and document authorization before sharing the app with coworkers. Live AWS execution remains unverified in this example; the template tests its adapter with representative responses.

Key takeaways​

Give your agent and grounding guardrail the same evidence. Call litellm.guardrails.apply after the answer exists, read the provider's assessment, and keep supported, unsupported, and failed checks distinct in your UI.

Frequently asked questions​

Can I use an existing agent and guardrail?​

Yes. Keep your framework and evaluation logic. Replace the answer-generation snippet with your agent's final answer, call litellm.guardrails.apply, and read your guardrail's result schema.

Does LiteLLM generate a second answer for the check?​

The SDK invokes your configured guardrail. Bedrock evaluates the supplied answer. A custom LLM judge makes an evaluation request; it does not regenerate the agent's answer to obtain the verdict.

Can I use this with LiteLLM OSS?​

The SDK changes and template are open source. Use the linked implementation revision for both the SDK and AI Gateway until release. LiteLLM Enterprise adds controls and support for production deployments.

Call a guardrail directly, configure Bedrock grounding, and write a custom guardrail.

Workshop: Build a self-hosted cloud agent.

Ishaan Jaffer
CTO, LiteLLM

Workshop: Build a
self-hosted cloud agent.

Build and deploy with the LiteLLM team, on infrastructure your team controls.

LITELLM WORKSHOP · OCTOBER 19–30

Build a self-hosted cloud agent.

Tell us about your team and what you want to achieve. We’ll follow up to arrange a 30-minute intake. Remote, over two weeks.

Workshop signup details

* Required. We’ll use your details to arrange your workshop intake. Submitting this form does not reserve a time slot.

Remote 2 weeks October 19–30, 2026

Work with your preferred agent

Claude Code
Codex
Hermes
OpenClaw
A Slack request reaches an agent harness and sandbox in your cloud, then produces a pull request.

Open Sourcing Moyai: Self-Hosted Cloud Coding Agent

Ishaan Jaffer
CTO, LiteLLM
Tin Lo
AI Product Engineer, LiteLLM
Moe Khalil
AI Product Engineer, LiteLLM

MoyaiOpen source cloud agent

October 7, 2026
HermesHermes
Claude CodeClaude Code
CodexCodex
OpenCodeOpenCode
Deep AgentsDeep Agents
OpenAIOpenAI
AnthropicAnthropic
FireworksFireworks
GoogleGoogle
xAIxAI
MistralMistral
DeepSeekDeepSeek
BedrockBedrock

Works with Claude Code and CodexSelf-hosted · 100+ providers through LiteLLM

  1. [1]The problem
  2. [2]Our cost estimate
  3. [3]Why we're open sourcing it
  4. [4]A cloud agent that keeps working
  5. [5]Choose your agent
  6. [6]Choose your models
  7. [7]Know what you spend
  8. [8]Set up your first task
Published:
Ishaan JafferCTO, LiteLLMTin LoAI Product Engineer, LiteLLMMoe KhalilAI Product Engineer, LiteLLM

Today we're open sourcing Moyai, the cloud coding agent our team runs at LiteLLM. Give it a task in Slack or the browser, then come back to a pull request with code and test results to review. You choose the agent and compatible model, run it on your infrastructure, and track the cost through LiteLLM.

Set up your first cloud task, or see the cost comparison and a real bug fix below.

How we built our own internal Devin in 2 days

Tin Lo
AI Product Engineer, LiteLLM

How we built our own internal Devin in 2 days

Our team's cloud coding agent, built with Render and Temporal.

Our internal Devin, running in the cloud.
Published:
Tin LoAI Product Engineer, LiteLLM

At BerriAI, we built Moyai Devin, an internal engineering agent that runs in the cloud. Teammates can give it a task in Slack, follow its progress in a web app, and ask it to prepare a pull request.

Introducing LiteAgents

Moe Khalil
AI Product Engineer, LiteLLM

LiteAgents: switch harnesses, keep your agent. A ProfileOptions example changes deepagents to claude-sdk while keeping the model, tools, and MCP connections.

You've built an agent with your own tools, prompts, and model configuration. Now you want to try a different harness on the same task.

LiteAgents lets you switch agent harnesses without rewriting your application. Its interface is modeled after the Claude Agent SDK, including the query() pattern and typed messages. Choose Deep Agents, Pydantic AI, Claude Agent SDK, Codex, or OpenCode while keeping your tools, MCP connections, model configuration, and client code. Each selected harness runs its own agent loop.

LiteLLM gives you a common interface to models. LiteAgents brings that approach to agent harnesses, with native controls and optional durability through Temporal.

Introducing LiteAdmin MCP

Tin Lo
AI Product Engineer, LiteLLM
Introducing LiteAdmin MCP: your AI toolkit for gateway management. LiteAdmin for Slack is built on LiteAdmin MCP.Introducing LiteAdmin MCP: your AI toolkit for gateway management. LiteAdmin for Slack is built on LiteAdmin MCP.

An engineer asks for an API key for a new project. You need to choose its models, set a budget, and assign it to a team. As usage grows, you need to check spending and adjust those limits.

LiteAdmin MCP lets your agent handle these tasks through your gateway's management API. Connect it to an MCP client or a custom agent. We built LiteAdmin, our Slack admin agent, on the same connector.

Reduce agent context with TypeSafe Jev and LiteLLM

Yassin Kortam
Senior SWE @ LiteLLM

A bot looks up the weather, then checks a shop's opening hours. The user asks, "What time does the shop close?" The bot still sends the old weather report to the model, even though it no longer helps answer the question.

TypeSafe Jev helps LiteLLM spot tool results that are no longer needed. LiteLLM replaces those results with a short notice before calling the model. This is called compaction, and it can reduce the input tokens used by long conversations.

Secure shared AI agents with identity-aware access and spend controls

Yassin Kortam
Senior SWE @ LiteLLM

Shared agents can preserve individual identity, access, and spend controls.

When a finance agent serves multiple business units, platform teams need a consistent way to identify who initiated each request, apply the right model and tool permissions, and attribute spend. LiteLLM keeps this context available across shared-agent workflows so each business unit can operate under its own access and budget policies.

LiteLLM provides one control plane for this workflow across the Agent Gateway, Model Gateway, and MCP Gateway. Teams can share the same agent infrastructure while keeping access, credentials, spend, and audit data tied to the right caller.

Swap OpenAI Code Interpreter for E2B/OpenSandbox

Krrish Dholakia
CEO, LiteLLM

Swap OpenAI Code Interpreter with E2B

The OpenAI Responses and Chat Completions APIs let you declare a code_interpreter tool and the model runs Python inside an OpenAI-hosted container. That container is opaque, billed by OpenAI, and the code (often customer data) leaves your perimeter. LiteLLM now let's you intercept that tool call and runs it in a sandbox you control. The client request is unchanged.

Available starting LiteLLM v1.91.0.dev1. Check here for releases.

LiteLLM Labs: Announcing Lite-Harness SDK — Unified API for Claude Code, Codex, and Pi AI

Krrish Dholakia
CEO, LiteLLM
Ishaan Jaffer
CTO, LiteLLM

Harnesses are the next frontier of vendor lock-in. LiteLLM was built to swap across model providers easily. However, as the models get saturated, the next area for competition becomes the harnesses and managed agents. To make it easy to go across vendors at the harness layer, we're launching the Lite-Harness SDK. This is a simple TypeScript+Python SDK which allows developers to change harnesses, like they change models.

How we built a background agent to cover 30% of our backlog

Krrish Dholakia
CEO, LiteLLM
Ishaan Jaffer
CTO, LiteLLM
LiteLLM Agent Platform: agent.litellm.ai
info

The platform we built is open source. Check out litellm-agent-platform. The swappable harness layer is lite-harness.

Building the same thing inside your company?

Our goal was to 10x the productivity of our company with agents.

Three weeks ago we began building an agent that could own 30% of our engineering tickets. Here's what we've learnt so far.