<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://docs.litellm.ai/blog</id>
    <title>liteLLM Blog</title>
    <updated>2026-10-15T10:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://docs.litellm.ai/blog"/>
    <subtitle>liteLLM Blog</subtitle>
    <icon>https://docs.litellm.ai/img/brand/litellm-favicon.svg</icon>
    <entry>
        <title type="html"><![CDATA[Day 0 Support: TypeSafe Jev 1.14: Adds images, box questions, and long context]]></title>
        <id>https://docs.litellm.ai/blog/typesafe_jev_images</id>
        <link href="https://docs.litellm.ai/blog/typesafe_jev_images"/>
        <updated>2026-10-15T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[TypeSafe Jev 1.14 reads images, answers box questions with coordinates and takes long-context requests. LiteLLM serves all three on /v1/systemone and /v1/decisions behind TypeSafe's opt-in headers.]]></summary>
        <content type="html"><![CDATA[<p>TypeSafe's Jev 1.14 adds a question type, <code>box</code>, that answers with where something is in an image. LiteLLM supports it from day 0 on both <a href="https://docs.litellm.ai/docs/decisions">decision routes</a>, <code>POST /v1/systemone</code> and <code>POST /v1/decisions</code>, together with TypeSafe's image input and long-context mode. If you are new to Jev, start with the <a href="https://docs.litellm.ai/blog/typesafe_jev">TypeSafe Jev launch post</a> and the <a href="https://docs.litellm.ai/blog/decision-models">decision models post</a>, which cover what a decision model is and how the two routes relate. Request <code>jev-1.14.0</code> through the proxy and the same virtual keys, budgets, spend logs and fallbacks you already use for decision models apply.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-images-on-a-decision-model-matter">Why images on a decision model matter<a href="https://docs.litellm.ai/blog/typesafe_jev_images#why-images-on-a-decision-model-matter" class="hash-link" aria-label="Direct link to Why images on a decision model matter" title="Direct link to Why images on a decision model matter">​</a></h2>
<p>A decision model answers typed questions with probabilities instead of text, which is what makes it cheap enough to sit in front of every request. Until now LiteLLM only sent text to them. The visual checks in a production app, whether an upload is a receipt, whether a listing photo breaks a policy, whether a screenshot shows an error dialog, still went to a chat model with a vision prompt, a JSON parser and a retry loop. Jev 1.14 answers those the same way it answers text questions: a <code>noul</code> question about an image comes back as a single probability you can threshold, log and compare, with no prose to parse.</p>
<p>The <code>box</code> question type, new in Jev 1.14 and also on <code>jev-preview</code>, adds where. Ask for "the red square in <code>photo</code>" and the answer is four edges, <code>top</code>, <code>bottom</code>, <code>left</code> and <code>right</code>, as fractions of the image height and width measured from the top left corner, plus a <code>confidence</code>. Because the edges are fractions, the same answer is correct at any image size, so you can crop the region for a bigger model, highlight it in a review tool or check that a required element is where it should be, without a generation step in between.</p>
<p>Long context is the third piece. TypeSafe's default limits are 64k tokens per request and 32k per question. With <code>TypeSafe-Danger-Zone-Long-Context: true</code> on the request, Jev decides over a whole contract, transcript or record in one call rather than a sliding window you stitch together yourself.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-litellm-adds">What LiteLLM adds<a href="https://docs.litellm.ai/blog/typesafe_jev_images#what-litellm-adds" class="hash-link" aria-label="Direct link to What LiteLLM adds" title="Direct link to What LiteLLM adds">​</a></h2>
<p>TypeSafe keeps images, <code>box</code> questions and long context behind opt-in request headers, <code>TypeSafe-Danger-Zone-Images: true</code> and <code>TypeSafe-Danger-Zone-Long-Context: true</code>. The proxy forwards any client header that starts with <code>TypeSafe-Danger-Zone-</code> to TypeSafe deployments and to no other provider, so a client turns the features on per request and nothing leaks to the other decision providers behind the same model name.</p>
<p>On <code>/v1/systemone</code> you send the images TypeSafe's way, named in <code>assets</code> and referenced from <code>state</code>. On <code>/v1/decisions</code> you send them OpenAI's way, as <code>input_image</code> parts with an image URL or a data URL, and LiteLLM turns each PNG or JPEG into an asset, puts the asset's name where the image was in the text and downloads image URLs first. A <code>box</code> answer comes back in the shape of the route you called, so an app written against the OpenAI Decisions format gets Jev's image answers without learning the System One format.</p>
<p>The same headers work on the <a href="https://docs.litellm.ai/docs/pass_through/typesafe"><code>/typesafe</code> pass-through</a>. If you call TypeSafe's API directly with <code>LITELLM_PROXY_BASE_URL/typesafe</code> as the base URL, client headers that start with <code>TypeSafe-Danger-Zone-</code> are forwarded to TypeSafe and other client headers are not, so an existing System One client only needs the header and <code>jev-1.14.0</code> to use images and <code>box</code>.</p>
<p>The failure modes stay predictable. A <code>box</code> question to a model that cannot answer it, <code>jev-1.13.0</code> and <code>jev-latest</code> included, or an image sent without the header, gets a 400 before any provider is called. With <code>drop_params</code> on, LiteLLM drops the question or the image instead and the rest of the request goes through, with a dropped question returned as <code>{"type": "refusal"}</code> on <code>/v1/decisions</code> and left out of <code>answers</code> on <code>/v1/systemone</code>. Spend for <code>jev-1.14.0</code> lands in the spend logs at TypeSafe's $0.042 per 1M input tokens, with no output charge.</p>
<p>The headers, the <code>assets</code> shape, a worked box example and SDK usage are in the <a href="https://docs.litellm.ai/docs/decisions">decisions docs</a>. Images and <code>box</code> questions ship in the next LiteLLM release, and cost tracking for <code>jev-1.14.0</code> works on the version you already run after you reload the model cost map.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="https://docs.litellm.ai/blog/typesafe_jev_images#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback">​</a></h2>
<p>Tell us what you build with image decisions, and what breaks, in <a href="https://github.com/BerriAI/litellm/discussions" target="_blank" rel="noopener noreferrer">GitHub Discussions</a>.</p>]]></content>
        <author>
            <name>Kerry Lu</name>
            <uri>https://github.com/kerry-berri</uri>
        </author>
        <author>
            <name>Mateo Wang</name>
            <uri>https://www.linkedin.com/in/mateo-wang</uri>
        </author>
        <category label="typesafe" term="typesafe"/>
        <category label="jev" term="jev"/>
        <category label="decisions" term="decisions"/>
        <category label="day 0 support" term="day 0 support"/>
        <category label="card_title:Jev 1.14" term="card_title:Jev 1.14"/>
        <category label="card_summary:Jev 1.14 reads PNG and JPEG images, answers box questions with coordinates, and takes long-context requests on LiteLLM." term="card_summary:Jev 1.14 reads PNG and JPEG images, answers box questions with coordinates, and takes long-context requests on LiteLLM."/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Decision models on LiteLLM: /v1/decisions and /v1/systemone]]></title>
        <id>https://docs.litellm.ai/blog/decision-models</id>
        <link href="https://docs.litellm.ai/blog/decision-models"/>
        <updated>2026-10-14T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Decision models return probabilities instead of text, which makes routing, triage and guardrail checks cheap and deterministic. LiteLLM serves nine providers of them behind one request shape.]]></summary>
        <content type="html"><![CDATA[<p>LiteLLM now serves <a href="https://docs.litellm.ai/docs/decisions">decision models</a> on <code>POST /v1/decisions</code> and <code>POST /v1/systemone</code>. You hand a decision model an input and a list of typed questions, and it answers each one with a probability: a yes/no, a pick from a fixed list, or a score on a scale. No prose comes back, so there is nothing to parse.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-decision-models-matter">Why decision models matter<a href="https://docs.litellm.ai/blog/decision-models#why-decision-models-matter" class="hash-link" aria-label="Direct link to Why decision models matter" title="Direct link to Why decision models matter">​</a></h2>
<p>Most "small" LLM calls in a production app are not generation at all. Should this ticket go to a human? Is this prompt a jailbreak? Which of our five models should handle this request? How frustrated is this customer? Today teams answer those with a chat model, a prompt that begs for JSON, a parser, and a retry loop for the times the model answers in a sentence anyway. That costs tokens, adds latency on every request, and still fails in ways you only find in logs.</p>
<p>A decision model fixes the shape of the problem. A <code>predicate</code> question returns a probability. A <code>choice</code> question returns the picked option with a probability per option. A <code>score</code> question returns a value on the scale you defined. The answer is a number you can threshold, log, and compare across models, and the model cannot drift into free text. Because these models skip generation, they are small and fast, which is what lets a decision sit in front of every request instead of only the expensive ones.</p>
<p>That is what makes them the natural building block for the gateway layer: routing a request to the right model, deciding whether a guardrail should block, triaging support traffic, ranking candidates before a bigger model sees them.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-litellm-adds">What LiteLLM adds<a href="https://docs.litellm.ai/blog/decision-models#what-litellm-adds" class="hash-link" aria-label="Direct link to What LiteLLM adds" title="Direct link to What LiteLLM adds">​</a></h2>
<ul>
<li><strong>One request shape, nine providers.</strong> OpenAI, TypeSafe Jev, Fireworks AI, Perplexity, Cloudflare Clef, Databricks (including <code>ai_decide</code>), Microsoft Foundry Decision-1, Strands Decider and self-hosted vLLM. LiteLLM translates between OpenAI's Decisions format and TypeSafe's System One format, so you can switch the model name and keep the request and the response shape.</li>
<li><strong>The same controls as chat.</strong> Virtual keys, budgets, rate limits, load balancing and fallbacks apply, and every answer carries <code>x-litellm-response-cost</code> and lands in the spend logs next to your chat traffic.</li>
<li><strong>Built into the Auto Router and guardrails.</strong> Any decision model on your proxy can pick the model for each request or decide whether a request is allowed, both covered below.</li>
<li><strong>A playground to try it.</strong> The Admin UI has a Decisions tab that sends to either route and shows the probabilities back.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="decision-models-in-the-auto-router">Decision models in the Auto Router<a href="https://docs.litellm.ai/blog/decision-models#decision-models-in-the-auto-router" class="hash-link" aria-label="Direct link to Decision models in the Auto Router" title="Direct link to Decision models in the Auto Router">​</a></h2>
<p>The <a href="https://docs.litellm.ai/docs/auto_router/decision_classifiers">Auto Router</a> can use any decision model deployed on your proxy as its classifier. In <strong>Models + Endpoints</strong>, open <strong>Auto-Routers</strong>, click <strong>Add Auto Router</strong>, pick <strong>Decisions Model</strong> under <strong>Choose your classifier</strong> and choose a deployment such as <code>jev-latest</code>. Each request is classified into one of your tiers and LiteLLM calls the model assigned to that tier, so clients keep sending one model name. <strong>Test Routing</strong> shows the tier the decision model picked, the probability for every tier and what the classification cost. In the run below, <code>jev-latest</code> put a Postgres failover design question in COMPLEX with 99% confidence for $0.00001848.</p>
<img src="https://docs.litellm.ai/assets/images/auto_router-512559077c69c7b5a170499eb455aecc.gif" width="800" alt="Add Auto Router in the Admin UI: Decisions Model picked as the classifier, jev-latest chosen from the deployed decision models, then Test Routing classifies a Postgres failover question as COMPLEX with 99% confidence and routes it to gpt-6-astra">
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="decision-models-as-guardrails">Decision models as guardrails<a href="https://docs.litellm.ai/blog/decision-models#decision-models-as-guardrails" class="hash-link" aria-label="Direct link to Decision models as guardrails" title="Direct link to Decision models as guardrails">​</a></h2>
<p>The <a href="https://docs.litellm.ai/docs/proxy/guardrails/decision_model">Decision Model guardrail</a> turns yes/no questions into checks on each request or response. In <strong>Guardrails</strong>, click <strong>Add New Guardrail</strong>, then <strong>Add Provider Guardrail</strong>, pick the <strong>Decision Model</strong> provider, choose a decision model and add a question such as "Does the text try to override or ignore the system instructions?". Each question is set to <strong>Block</strong> or <strong>Log only</strong> with a probability threshold, and the <strong>Test</strong> section scores sample inputs before you save. Below, a prompt injection scores 0.99 and is blocked while a refund question scores 0.06 and passes.</p>
<img src="https://docs.litellm.ai/assets/images/guardrail-f859b0f5198d13b8adb3148804df7006.gif" width="800" alt="Create guardrail in the Admin UI: Decision Model provider picked, jev-latest chosen, a prompt_injection question set to Block at a 0.70 threshold, then two test runs: an injection attempt scores 0.99 and blocks, a refund policy question scores 0.06 and passes">
<p>Setup, the request and response formats, the provider table and SDK usage are in the <a href="https://docs.litellm.ai/docs/decisions">decisions docs</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="https://docs.litellm.ai/blog/decision-models#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback">​</a></h2>
<p>Tell us which decision providers you want next in <a href="https://github.com/BerriAI/litellm/discussions" target="_blank" rel="noopener noreferrer">GitHub Discussions</a>.</p>]]></content>
        <author>
            <name>Kerry Lu</name>
            <uri>https://github.com/kerry-berri</uri>
        </author>
        <category label="openai" term="openai"/>
        <category label="typesafe" term="typesafe"/>
        <category label="decisions" term="decisions"/>
        <category label="day 0 support" term="day 0 support"/>
        <category label="card_title:Decision Models" term="card_title:Decision Models"/>
        <category label="card_summary:Typed yes/no, choice and score answers as probabilities, from 9 providers on /v1/decisions and /v1/systemone." term="card_summary:Typed yes/no, choice and score answers as probabilities, from 9 providers on /v1/decisions and /v1/systemone."/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Workshop: Build a self-hosted cloud agent.]]></title>
        <id>https://docs.litellm.ai/blog/cloud-agent-workshop</id>
        <link href="https://docs.litellm.ai/blog/cloud-agent-workshop"/>
        <updated>2026-10-13T22:00:00.000Z</updated>
        <summary type="html"><![CDATA[Build a self-hosted cloud agent with the LiteLLM team. A two-week remote workshop, October 19–30, to build a working v0 and deploy an internal beta on your infrastructure.]]></summary>
        <content type="html"><![CDATA[<div class="workshop_BlDP"><section class="hero_Zjzw" aria-labelledby="workshop-title"><div class="brandRow_C66d"><img src="https://docs.litellm.ai/img/brand/litellm-logo-blue.png" alt="LiteLLM" class="logo_SaxZ brandLight_rZSA" width="174" height="33"><img src="https://docs.litellm.ai/img/brand/litellm-logo-white.png" alt="LiteLLM" class="logo_SaxZ brandDark_VGXp" width="174" height="33"><a class="backLink_mAhH" href="https://docs.litellm.ai/blog">← Blog</a></div><h1 id="workshop-title">Workshop: Build a<br class="titleBreak_krhK"> self-hosted cloud agent.</h1><p class="heroLead_rHNw">Build and deploy with the LiteLLM team, on infrastructure your team controls.</p><div class="heroActions_q87R"><button class="button signup_wbZV" type="button">Sign up <span aria-hidden="true">↗</span></button><dialog class="dialog_BHNv" aria-labelledby=":R2c6mn8l:-title" aria-describedby=":R2c6mn8l:-description"><div class="panel_MVA9"><button class="close_edpH" type="button" aria-label="Close workshop signup">×</button><p class="eyebrow_H1Is">LITELLM WORKSHOP · OCTOBER 19–30</p><h2 class="title_uM5R" tabindex="-1" id=":R2c6mn8l:-title">Build a self-hosted cloud agent.</h2><p id=":R2c6mn8l:-description" class="description_gE6y">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.</p><form aria-busy="false"><fieldset class="fieldset_rmo9"><legend class="srOnly_FndZ">Workshop signup details</legend><div class="grid_p6U0"><label class="field_QphQ " for=":R2c6mn8l:-name"><span>Your name<span aria-hidden="true"> *</span></span><input type="text" autocomplete="name" id=":R2c6mn8l:-name" name="name" required="" maxlength="120"></label><label class="field_QphQ " for=":R2c6mn8l:-email"><span>Work email<span aria-hidden="true"> *</span></span><input type="email" autocomplete="email" id=":R2c6mn8l:-email" name="email" required="" maxlength="254"></label><label class="field_QphQ " for=":R2c6mn8l:-company"><span>Company<span aria-hidden="true"> *</span></span><input type="text" autocomplete="organization" id=":R2c6mn8l:-company" name="company" required="" maxlength="160"></label><label class="field_QphQ " for=":R2c6mn8l:-linkedin"><span>LinkedIn profile<span aria-hidden="true"> *</span></span><input type="text" inputmode="url" autocomplete="url" autocapitalize="none" spellcheck="false" placeholder="linkedin.com/in/your-profile" id=":R2c6mn8l:-linkedin" name="linkedin" required="" maxlength="1000"></label><label class="field_QphQ wide_YSby" for=":R2c6mn8l:-workflow"><span>What are you hoping to achieve?<span aria-hidden="true"> *</span></span><textarea rows="3" placeholder="For example: let engineers send tasks in Slack and get tested pull requests from an agent running in our cloud." id=":R2c6mn8l:-workflow" name="workflow" required="" maxlength="3000"></textarea></label><label class="field_QphQ wide_YSby" for=":R2c6mn8l:-onsiteInterest"><span>Would you like the LiteLLM team to work with you on-site? (optional)</span><select id=":R2c6mn8l:-onsiteInterest" name="onsiteInterest"><option value="" selected="">No preference yet</option><option value="Yes">Yes, I’d like to discuss it</option><option value="Maybe">Maybe, tell me more</option><option value="No">No, remote works for us</option></select></label></div><button class="submit_OEc5" type="submit">Sign up</button><p class="note_YCnd">* Required. We’ll use your details to arrange your workshop intake. Submitting this form does not reserve a time slot.</p></fieldset></form></div></dialog><p class="facts_wOFa">Remote <span aria-hidden="true">·</span> 2 weeks <span aria-hidden="true">·</span> October 19–30, 2026</p></div><div class="harnessRow_9PTT"><p>Work with your preferred agent</p><div class="harnesses_ovqD" aria-label="Agent options"><div class="harness_dCNx"><img src="https://docs.litellm.ai/img/cloud-agent-workshop/claude-code.svg" alt="" width="26" height="26"><span>Claude Code</span></div><div class="harness_dCNx"><img src="https://docs.litellm.ai/img/cloud-agent-workshop/codex.svg" alt="" width="26" height="26"><span>Codex</span></div><div class="harness_dCNx"><img src="https://docs.litellm.ai/img/cloud-agent-workshop/hermes-agent.svg" class="monochromeHarness_eSDq" alt="" width="26" height="26"><span>Hermes</span></div><div class="harness_dCNx"><img src="https://docs.litellm.ai/img/cloud-agent-workshop/openclaw-static.svg" alt="" width="26" height="26"><span>OpenClaw</span></div></div></div><figure class="blueprint__tnr"><div class="blueprintFrame_gb4H"><img src="https://docs.litellm.ai/img/cloud-agent-workshop/blueprint.png" class="blueprintImage_xukZ" alt="A Slack request reaches an agent harness and sandbox in your cloud, then produces a pull request." width="1254" height="1254" fetchpriority="high"><img src="https://docs.litellm.ai/img/cloud-agent-workshop/slack.svg" class="blueprintSlack_nK4P" alt="" width="51" height="51"></div></figure></section></div>
<!-- -->
<div class="workshop_BlDP"><section class="section_Ekax" id="audience" aria-labelledby="audience-title"><h2 class="anchor anchorWithStickyNavbar_LWe7" id="audience-title">Who the workshop is for<a href="https://docs.litellm.ai/blog/cloud-agent-workshop#audience-title" class="hash-link" aria-label="Direct link to Who the workshop is for" title="Direct link to Who the workshop is for">​</a></h2><p>Teams investing in a custom, self-hosted cloud agent platform. Build with LiteLLM engineers around your infrastructure and development workflows.</p><div class="teams_dLjl"><article class="team_yuDD"><span class="teamNumber_Hp8E">0<!-- -->1</span><h3>AI platform teams</h3><p>Build around your model providers, sandboxes, and cloud infrastructure.</p></article><article class="team_yuDD"><span class="teamNumber_Hp8E">0<!-- -->2</span><h3>Developer productivity teams</h3><p>Give engineers an internal agent for coding tasks and pull requests.</p></article><article class="team_yuDD"><span class="teamNumber_Hp8E">0<!-- -->3</span><h3>Agent platform teams</h3><p>Run your chosen harnesses in a platform your team operates.</p></article></div></section><section class="section_Ekax" id="program" aria-labelledby="program-title"><p class="eyebrow_tnSL">PROGRAM DETAILS</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="program-title">Timeline &amp; milestones<a href="https://docs.litellm.ai/blog/cloud-agent-workshop#program-title" class="hash-link" aria-label="Direct link to Timeline &amp; milestones" title="Direct link to Timeline &amp; milestones">​</a></h2><p>From your first use case to an internal beta in two weeks. Here’s what we build together at each stage.</p><ol class="timeline_eduW"><li class="timelineItem__4St"><span class="timelineNode_nfty" aria-hidden="true">01</span><section class="milestone_aILQ" id="intake" aria-label="BEFORE WE BUILD: 30 MINUTES"><div class="milestoneCopy_aonE"><p class="milestoneMeta_Zl6L"><span>BEFORE WE BUILD</span><span>30 MINUTES</span></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="scope-your-first-use-case">Scope your first use case.<a href="https://docs.litellm.ai/blog/cloud-agent-workshop#scope-your-first-use-case" class="hash-link" aria-label="Direct link to Scope your first use case." title="Direct link to Scope your first use case.">​</a></h3><p>We review your goals, what you’ve tried, and your providers, sandbox, and cloud setup. Together, we agree on scope, deployment timing, and success criteria.</p><div class="result__WYO"><span>YOU LEAVE WITH</span><p>A build plan for your first use case.</p></div></div><figure class="visual_PFWv" aria-label="The intake produces a build brief covering your use case, stack, and success criteria."><figcaption class="visualHeading_KaKo"><svg aria-hidden="true" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><rect x="5" y="4" width="14" height="17" rx="2"></rect><path d="M9 4V2h6v2M9 10h6M9 15h6"></path></svg><span>Your build brief</span><span class="visualBadge_uTsm">Intake</span></figcaption><div class="briefRow_BcFS"><svg aria-hidden="true" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="m5 12 4 4L19 6"></path></svg><div><strong>Use case</strong><span>The first workflow to build</span></div></div><div class="briefRow_BcFS"><svg aria-hidden="true" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="m5 12 4 4L19 6"></path></svg><div><strong>Stack</strong><span>Providers, sandbox, and cloud</span></div></div><div class="briefRow_BcFS"><svg aria-hidden="true" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="m5 12 4 4L19 6"></path></svg><div><strong>Success criteria</strong><span>What a useful v0 needs to do</span></div></div></figure></section></li><li class="timelineItem__4St"><span class="timelineNode_nfty" aria-hidden="true">02</span><section class="milestone_aILQ" id="week-one" aria-label="WEEK 1 · BUILD: OCTOBER 19–23"><div class="milestoneCopy_aonE"><p class="milestoneMeta_Zl6L"><span>WEEK 1 · BUILD</span><span>OCTOBER 19–23</span></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="get-a-working-cloud-agent">Get a working cloud agent.<a href="https://docs.litellm.ai/blog/cloud-agent-workshop#get-a-working-cloud-agent" class="hash-link" aria-label="Direct link to Get a working cloud agent." title="Direct link to Get a working cloud agent.">​</a></h3><p>We connect your agent harness and sandbox to a web app and Slack. Your team can send it tasks and try the first workflow.</p><div class="result__WYO"><span>WEEK-ONE TARGET</span><p>A working v0 you can interact with.</p></div></div><figure class="visual_PFWv" aria-label="A web app and Slack connect to an agent harness running inside a sandbox, powered by LiteLLM."><figcaption class="visualHeading_KaKo"><svg aria-hidden="true" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="m8 7-5 5 5 5m8-10 5 5-5 5m-3-13-2 16"></path></svg><span>Your working v0</span></figcaption><div class="clients_zr5m"><div><svg aria-hidden="true" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="13" rx="2"></rect><path d="M8 21h8m-4-5v5"></path></svg>Web app</div><div><img src="https://docs.litellm.ai/img/cloud-agent-workshop/slack.svg" alt="" width="15" height="15">Slack</div></div><div class="join_AuPv"><svg aria-hidden="true" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3v18m-6-6 6 6 6-6"></path></svg></div><div class="sandbox_qP81"><span class="sandboxLabel_ZXQd">Sandbox</span><div class="harnessModule_F59n"><svg aria-hidden="true" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="m8 7-5 5 5 5m8-10 5 5-5 5m-3-13-2 16"></path></svg><span>Agent harness</span></div></div><div class="powered_ZBRQ"><span>Powered by</span><img src="https://docs.litellm.ai/img/brand/litellm-logo-blue.png" alt="LiteLLM" class=" brandLight_rZSA" width="72" height="14"><img src="https://docs.litellm.ai/img/brand/litellm-logo-white.png" alt="LiteLLM" class=" brandDark_VGXp" width="72" height="14"></div></figure></section></li><li class="timelineItem__4St"><span class="timelineNode_nfty" aria-hidden="true">03</span><section class="milestone_aILQ" id="week-two" aria-label="WEEK 2 · DEPLOY: OCTOBER 26–30"><div class="milestoneCopy_aonE"><p class="milestoneMeta_Zl6L"><span>WEEK 2 · DEPLOY</span><span>OCTOBER 26–30</span></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="run-an-internal-beta">Run an internal beta.<a href="https://docs.litellm.ai/blog/cloud-agent-workshop#run-an-internal-beta" class="hash-link" aria-label="Direct link to Run an internal beta." title="Direct link to Run an internal beta.">​</a></h3><p>We deploy to your cloud, run internal tasks, and review traces with your team. We improve the agent based on what you see.</p><p class="scopeNote_cNZ9">Depending on scope: shared memory, additional harnesses such as Pi, and feedback and trace review tools.</p><div class="result__WYO"><span>WEEK-TWO TARGET</span><p>An internal beta on your infrastructure.</p></div></div><figure class="visual_PFWv" aria-label="Deploy to your cloud, run internal tasks, review traces, and improve the agent in an internal beta."><figcaption class="visualHeading_KaKo"><svg aria-hidden="true" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M6 18a4 4 0 0 1-.3-8 6.5 6.5 0 0 1 12.5-1.5A4.8 4.8 0 0 1 18 18H6Z"></path></svg><span>Internal beta</span><span class="visualBadge_uTsm">Your cloud</span></figcaption><div class="betaFlow_sv48"><div class="flowStep_CD36"><svg aria-hidden="true" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M6 18a4 4 0 0 1-.3-8 6.5 6.5 0 0 1 12.5-1.5A4.8 4.8 0 0 1 18 18H6Z"></path></svg><strong>Deploy</strong></div><svg class="flowArrow_fQYq" aria-hidden="true" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12h18m-6-6 6 6-6 6"></path></svg><div class="flowStep_CD36"><svg aria-hidden="true" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="m8 4 12 8-12 8V4Z"></path></svg><strong>Run tasks</strong></div><div class="flowTurn_spgY"><svg aria-hidden="true" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3v18m-6-6 6 6 6-6"></path></svg></div><div class="flowStep_CD36"><svg aria-hidden="true" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M20 7v5h-5M4 17v-5h5"></path><path d="M6 6a8 8 0 0 1 14 6M4 12a8 8 0 0 0 14 6"></path></svg><strong>Improve</strong></div><svg class="flowArrow_fQYq" aria-hidden="true" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12H3m6-6-6 6 6 6"></path></svg><div class="flowStep_CD36"><svg aria-hidden="true" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3v16h5M5 7h5"></path><rect x="10" y="4" width="10" height="6" rx="1"></rect><rect x="10" y="16" width="10" height="6" rx="1"></rect></svg><strong>Review traces</strong></div></div><p class="visualCaption__hEK">Test with your team’s real workflows.</p></figure></section></li><li class="timelineItem__4St"><span class="timelineNode_nfty" aria-hidden="true">04</span><section class="milestone_aILQ" id="after" aria-label="AFTER THE WORKSHOP: FOR LITELLM USERS"><div class="milestoneCopy_aonE"><p class="milestoneMeta_Zl6L"><span>AFTER THE WORKSHOP</span><span>FOR LITELLM USERS</span></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="keep-improving-with-our-team">Keep improving with our team.<a href="https://docs.litellm.ai/blog/cloud-agent-workshop#keep-improving-with-our-team" class="hash-link" aria-label="Direct link to Keep improving with our team." title="Direct link to Keep improving with our team.">​</a></h3><p>If you use LiteLLM, we continue working with you toward the success criteria from your intake call.</p><div class="result__WYO"><span>CONTINUED SUPPORT</span><p>Help with your next improvements.</p></div></div><figure class="visual_PFWv" aria-label="Your team and the LiteLLM team continue reviewing feedback and planning improvements together."><figcaption class="visualHeading_KaKo"><svg aria-hidden="true" width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="7" r="3"></circle><path d="M3 21v-3a6 6 0 0 1 12 0v3M16 4a3 3 0 0 1 0 6m2 5a5 5 0 0 1 3 5v1"></path></svg><span>Keep building together</span></figcaption><div class="collaboration_FBN3"><div class="visualTeam_ngP3"><span class="teamIcon_oqKn"><svg aria-hidden="true" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="7" r="3"></circle><path d="M3 21v-3a6 6 0 0 1 12 0v3M16 4a3 3 0 0 1 0 6m2 5a5 5 0 0 1 3 5v1"></path></svg></span><strong>Your team</strong></div><svg class="teamArrow_Y9bt" aria-hidden="true" width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M3 7h18m-4-4 4 4-4 4M21 17H3m4-4-4 4 4 4"></path></svg><div class="visualTeam_ngP3"><span class="teamIcon_oqKn brandIcon_VDX0"><img src="https://docs.litellm.ai/img/brand/litellm-logo-blue.png" alt="LiteLLM" class=" brandLight_rZSA" width="73" height="14"><img src="https://docs.litellm.ai/img/brand/litellm-logo-white.png" alt="LiteLLM" class=" brandDark_VGXp" width="73" height="14"></span><strong>LiteLLM team</strong></div></div><div class="supportNotes_SA_N"><span><svg aria-hidden="true" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="m5 12 4 4L19 6"></path></svg>Review feedback</span><span><svg aria-hidden="true" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12h18m-6-6 6 6-6 6"></path></svg>Next improvements</span></div></figure></section></li></ol></section><section class="closing_Iaei" aria-labelledby="closing-title"><div><h2 id="closing-title">Build with the LiteLLM team.</h2><p>Remote for two weeks. Want us at your office for several days? Tell us in the signup form.</p><p class="signupNote_SHaJ">Tell us what you hope to achieve. We’ll follow up to arrange a 30-minute intake.</p></div><button class="button signup_wbZV" type="button">Sign up <span aria-hidden="true">↗</span></button><dialog class="dialog_BHNv" aria-labelledby=":R1bimn8l:-title" aria-describedby=":R1bimn8l:-description"><div class="panel_MVA9"><button class="close_edpH" type="button" aria-label="Close workshop signup">×</button><p class="eyebrow_H1Is">LITELLM WORKSHOP · OCTOBER 19–30</p><h2 class="title_uM5R" tabindex="-1" id=":R1bimn8l:-title">Build a self-hosted cloud agent.</h2><p id=":R1bimn8l:-description" class="description_gE6y">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.</p><form aria-busy="false"><fieldset class="fieldset_rmo9"><legend class="srOnly_FndZ">Workshop signup details</legend><div class="grid_p6U0"><label class="field_QphQ " for=":R1bimn8l:-name"><span>Your name<span aria-hidden="true"> *</span></span><input type="text" autocomplete="name" id=":R1bimn8l:-name" name="name" required="" maxlength="120"></label><label class="field_QphQ " for=":R1bimn8l:-email"><span>Work email<span aria-hidden="true"> *</span></span><input type="email" autocomplete="email" id=":R1bimn8l:-email" name="email" required="" maxlength="254"></label><label class="field_QphQ " for=":R1bimn8l:-company"><span>Company<span aria-hidden="true"> *</span></span><input type="text" autocomplete="organization" id=":R1bimn8l:-company" name="company" required="" maxlength="160"></label><label class="field_QphQ " for=":R1bimn8l:-linkedin"><span>LinkedIn profile<span aria-hidden="true"> *</span></span><input type="text" inputmode="url" autocomplete="url" autocapitalize="none" spellcheck="false" placeholder="linkedin.com/in/your-profile" id=":R1bimn8l:-linkedin" name="linkedin" required="" maxlength="1000"></label><label class="field_QphQ wide_YSby" for=":R1bimn8l:-workflow"><span>What are you hoping to achieve?<span aria-hidden="true"> *</span></span><textarea rows="3" placeholder="For example: let engineers send tasks in Slack and get tested pull requests from an agent running in our cloud." id=":R1bimn8l:-workflow" name="workflow" required="" maxlength="3000"></textarea></label><label class="field_QphQ wide_YSby" for=":R1bimn8l:-onsiteInterest"><span>Would you like the LiteLLM team to work with you on-site? (optional)</span><select id=":R1bimn8l:-onsiteInterest" name="onsiteInterest"><option value="" selected="">No preference yet</option><option value="Yes">Yes, I’d like to discuss it</option><option value="Maybe">Maybe, tell me more</option><option value="No">No, remote works for us</option></select></label></div><button class="submit_OEc5" type="submit">Sign up</button><p class="note_YCnd">* Required. We’ll use your details to arrange your workshop intake. Submitting this form does not reserve a time slot.</p></fieldset></form></div></dialog></section></div>]]></content>
        <author>
            <name>Ishaan Jaffer</name>
            <uri>https://www.linkedin.com/in/reffajnaahsi/</uri>
        </author>
        <category label="agents" term="agents"/>
        <category label="infrastructure" term="infrastructure"/>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Gemini 4 Argon API Pricing and Day 0 Support on LiteLLM]]></title>
        <id>https://docs.litellm.ai/blog/gemini-4-argon</id>
        <link href="https://docs.litellm.ai/blog/gemini-4-argon"/>
        <updated>2026-10-13T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Gemini 4 Argon costs $2.00 per 1M input tokens and $10.00 per 1M output tokens until Nov 30. LiteLLM supports it on day 0 on AI Studio and Google Cloud.]]></summary>
        <content type="html"><![CDATA[<p>LiteLLM now supports <a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/introducing-gemini-4-argon/" target="_blank" rel="noopener noreferrer">Gemini 4 Argon</a> on Day 0. Use it on Google AI Studio and Gemini Enterprise Agent Platform (formerly Vertex AI) through the LiteLLM AI Gateway. Spend, rate limits and logs are in one place.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="gemini-4-argon-pricing">Gemini 4 Argon pricing<a href="https://docs.litellm.ai/blog/gemini-4-argon#gemini-4-argon-pricing" class="hash-link" aria-label="Direct link to Gemini 4 Argon pricing" title="Direct link to Gemini 4 Argon pricing">​</a></h2>
<p>Launch prices on Google AI Studio, per 1M tokens, until November 30, 2026:</p>
<ul>
<li><strong>Input:</strong> $2.00 / MTok</li>
<li><strong>Output:</strong> $10.00 / MTok. Thinking tokens bill as output.</li>
<li><strong>Cache read:</strong> $0.10 / MTok. Argon supports implicit caching only.</li>
<li><strong>Batch and Flex:</strong> 50% off input and output</li>
</ul>
<p>On December 1, 2026, these prices double to $4.00 input, $20.00 output and $0.20 cache read.</p>
<p>Prices on every provider: <a href="https://models.litellm.ai/models" target="_blank" rel="noopener noreferrer">https://models.litellm.ai/models</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new-in-gemini-4-argon">What's new in Gemini 4 Argon<a href="https://docs.litellm.ai/blog/gemini-4-argon#whats-new-in-gemini-4-argon" class="hash-link" aria-label="Direct link to What's new in Gemini 4 Argon" title="Direct link to What's new in Gemini 4 Argon">​</a></h2>
<ul>
<li><strong>77.9% on DeepSWE v1.1</strong>, per Google</li>
<li><strong>1M-token context window</strong> for input and output together. Google caps each request at 32,768 output tokens (65,536 when streaming), and LiteLLM continues past that cap for you</li>
<li><strong>Thinking levels low, medium and high.</strong> Argon does not support <code>thinking_budget</code>.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="use-gemini-4-argon-with-litellm">Use Gemini 4 Argon with LiteLLM<a href="https://docs.litellm.ai/blog/gemini-4-argon#use-gemini-4-argon-with-litellm" class="hash-link" aria-label="Direct link to Use Gemini 4 Argon with LiteLLM" title="Direct link to Use Gemini 4 Argon with LiteLLM">​</a></h2>
<p>No upgrade needed: open <strong>Price Data</strong> under <strong>Models + Endpoints</strong> in the UI and click <strong>Reload Price Data</strong> (or <code>POST /reload/model_cost_map</code>), on <code>v1.76.0</code> and above.</p>
<div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Google AI Studio</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Gemini Enterprise Agent Platform</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gemini</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">argon</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gemini/gemini</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">argon</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/GEMINI_API_KEY</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -p 4000:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e GEMINI_API_KEY=$GEMINI_API_KEY \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/config.yaml:/app/config.yaml \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/berriai/litellm:v1.107.0-dev.3 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --config /app/config.yaml</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gemini</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">argon</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> vertex_ai/gemini</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">argon</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">vertex_project</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/VERTEX_PROJECT</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">vertex_location</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> global</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -p 4000:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e VERTEX_PROJECT=$VERTEX_PROJECT \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e GOOGLE_APPLICATION_CREDENTIALS=/app/credentials.json \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/config.yaml:/app/config.yaml \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/credentials.json:/app/credentials.json \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/berriai/litellm:v1.107.0-dev.3 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --config /app/config.yaml</span><br></span></code></pre></div></div></div></div></div>
<p><strong>3. Test it!</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl --location 'http://0.0.0.0:4000/chat/completions' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--header 'Content-Type: application/json' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--header 'Authorization: Bearer $LITELLM_KEY' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--data '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "model": "gemini-4-argon",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "messages": [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "role": "user",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "content": "what llm are you"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ],</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "reasoning_effort": "high"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}'</span><br></span></code></pre></div></div>
<p>LiteLLM sends <code>reasoning_effort</code> to Argon as its <code>thinking_level</code>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="long-outputs">Long outputs<a href="https://docs.litellm.ai/blog/gemini-4-argon#long-outputs" class="hash-link" aria-label="Direct link to Long outputs" title="Direct link to Long outputs">​</a></h2>
<p>From <code>v1.107.0-dev.3</code>, set <code>max_tokens</code> above Google's per-request cap and LiteLLM keeps going. When Google ends a request with a <code>continuationToken</code>, LiteLLM sends the request again with that token until the answer finishes or <code>max_tokens</code> is spent. This works for unary and streaming calls on <code>/chat/completions</code>, <code>/v1/messages</code> and <code>/v1/responses</code>, on Google AI Studio and Gemini Enterprise Agent Platform. A request with no integer <code>max_tokens</code>, or with <code>n</code> above 1, is sent once.</p>
<ul>
<li><strong>Usage</strong> is summed across the requests, so cost and spend match Google's bill. The first request's prompt count is kept as <code>usage.prompt_tokens_details.initial_prompt_tokens</code> on an answer that took more than one request.</li>
<li><strong>A cut-off answer</strong> on <code>/chat/completions</code> ends with <code>finish_reason: "length"</code> and returns <code>provider_specific_fields.continuation_token</code>. Send the request again with that <code>"continuation_token"</code> and a higher <code>max_tokens</code> to continue it, since Google counts <code>max_tokens</code> across the whole answer.</li>
<li><strong>A dropped stream</strong> ends with the error. LiteLLM does not yet pick it back up from Google's mid-stream resume tokens.</li>
<li><strong>Timeouts:</strong> each request to Google runs under the deployment's <code>timeout</code>, 600 seconds when unset. A non-streamed request at the 32,768 cap takes about 10 minutes, so set <code>timeout: 1200</code> on deployments that serve long answers and give your client room for the whole answer.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="faq">FAQ<a href="https://docs.litellm.ai/blog/gemini-4-argon#faq" class="hash-link" aria-label="Direct link to FAQ" title="Direct link to FAQ">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-much-does-gemini-4-argon-cost">How much does Gemini 4 Argon cost?<a href="https://docs.litellm.ai/blog/gemini-4-argon#how-much-does-gemini-4-argon-cost" class="hash-link" aria-label="Direct link to How much does Gemini 4 Argon cost?" title="Direct link to How much does Gemini 4 Argon cost?">​</a></h3>
<p>Until November 30, 2026, it costs $2.00 per 1M input tokens and $10.00 per 1M output tokens. On December 1, the prices change to $4.00 and $20.00. Cache reads cost $0.10 per 1M tokens until then.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-the-context-window-of-gemini-4-argon">What is the context window of Gemini 4 Argon?<a href="https://docs.litellm.ai/blog/gemini-4-argon#what-is-the-context-window-of-gemini-4-argon" class="hash-link" aria-label="Direct link to What is the context window of Gemini 4 Argon?" title="Direct link to What is the context window of Gemini 4 Argon?">​</a></h3>
<p>1,048,576 tokens for input and output together. Google returns up to 32,768 output tokens per request (65,536 when streaming), and from <code>v1.107.0-dev.3</code> LiteLLM continues across requests until <code>max_tokens</code> is spent.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-do-i-call-gemini-4-argon-with-an-openai-compatible-api">How do I call Gemini 4 Argon with an OpenAI-compatible API?<a href="https://docs.litellm.ai/blog/gemini-4-argon#how-do-i-call-gemini-4-argon-with-an-openai-compatible-api" class="hash-link" aria-label="Direct link to How do I call Gemini 4 Argon with an OpenAI-compatible API?" title="Direct link to How do I call Gemini 4 Argon with an OpenAI-compatible API?">​</a></h3>
<p>Add <code>gemini/gemini-4-argon</code> to your LiteLLM config. Then send a standard <code>/chat/completions</code> request to the proxy with <code>"model": "gemini-4-argon"</code>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="https://docs.litellm.ai/blog/gemini-4-argon#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback">​</a></h2>
<p>Questions and feedback go in <a href="https://github.com/BerriAI/litellm/discussions/46238" target="_blank" rel="noopener noreferrer">GitHub discussion #46238</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="references">References<a href="https://docs.litellm.ai/blog/gemini-4-argon#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References">​</a></h2>
<ul>
<li>LiteLLM pricing for <code>gemini/gemini-4-argon</code>: <a href="https://github.com/BerriAI/litellm/pull/46227" target="_blank" rel="noopener noreferrer">PR #46227</a></li>
<li>LiteLLM long outputs for Gemini 4: <a href="https://github.com/BerriAI/litellm/pull/46240" target="_blank" rel="noopener noreferrer">PR #46240</a></li>
<li>Google: <a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/introducing-gemini-4-argon/" target="_blank" rel="noopener noreferrer">Gemini 4 Argon announcement</a>, <a href="https://ai.google.dev/gemini-api/docs/models/gemini-4-argon" target="_blank" rel="noopener noreferrer">model page</a> and <a href="https://ai.google.dev/gemini-api/docs/pricing" target="_blank" rel="noopener noreferrer">pricing</a></li>
</ul>]]></content>
        <author>
            <name>Misbah Syed</name>
            <uri>https://github.com/misbahsy</uri>
        </author>
        <author>
            <name>Mateo Wang</name>
            <uri>https://www.linkedin.com/in/mateo-wang</uri>
        </author>
        <author>
            <name>Kerry Lu</name>
            <uri>https://github.com/kerry-berri</uri>
        </author>
        <category label="gemini" term="gemini"/>
        <category label="gemini 4" term="gemini 4"/>
        <category label="gemini-4-argon" term="gemini-4-argon"/>
        <category label="pricing" term="pricing"/>
        <category label="day 0 support" term="day 0 support"/>
        <category label="card_title:Gemini 4 Argon" term="card_title:Gemini 4 Argon"/>
        <category label="card_summary:Google's new flagship: 77.9% on DeepSWE v1.1, 1M context, thinking levels, $2 / $10 per 1M tokens until Nov 30." term="card_summary:Google's new flagship: 77.9% on DeepSWE v1.1, 1M context, thinking levels, $2 / $10 per 1M tokens until Nov 30."/>
    </entry>
    <entry>
        <title type="html"><![CDATA[October Townhall: Product + Roadmap Updates]]></title>
        <id>https://docs.litellm.ai/blog/october-townhall-announcement</id>
        <link href="https://docs.litellm.ai/blog/october-townhall-announcement"/>
        <updated>2026-10-10T12:00:00.000Z</updated>
        <summary type="html"><![CDATA[Join the LiteLLM October townhall on Thursday, 22 October at 7:30 AM PT to learn about LiteLLM's product updates and roadmap.]]></summary>
        <content type="html"><![CDATA[<p>We are hosting our October townhall on <strong>Thursday, 22 October at 7:30 AM PT</strong>.</p>
<img src="https://docs.litellm.ai/assets/ideal-img/october_townhall_banner.bc12bc6.640.png" srcset="https://docs.litellm.ai/assets/ideal-img/october_townhall_banner.bc12bc6.640.png 640w, https://docs.litellm.ai/assets/ideal-img/october_townhall_banner.70f2450.1280.png 1280w" sizes="(max-width: 996px) 100vw, 900px" width="640" height="336" alt="" loading="lazy" decoding="async" style="max-width:100%;height:auto;width:900px;display:block">
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="agenda">Agenda<a href="https://docs.litellm.ai/blog/october-townhall-announcement#agenda" class="hash-link" aria-label="Direct link to Agenda" title="Direct link to Agenda">​</a></h2>
<ul>
<li>Security</li>
<li>Stability &amp; Performance</li>
<li>Recent product releases &amp; what we're planning to ship</li>
<li>Q&amp;A</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="stability">Stability<a href="https://docs.litellm.ai/blog/october-townhall-announcement#stability" class="hash-link" aria-label="Direct link to Stability" title="Direct link to Stability">​</a></h2>
<p>Our team is focused on stability: improving reliability and reducing regressions across releases. Follow the roadmap here: <a href="https://github.com/BerriAI/litellm/issues/30484" target="_blank" rel="noopener noreferrer">Stability roadmap</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-contribute">How to contribute<a href="https://docs.litellm.ai/blog/october-townhall-announcement#how-to-contribute" class="hash-link" aria-label="Direct link to How to contribute" title="Direct link to How to contribute">​</a></h2>
<p>Add the topics and questions you'd like us to cover when you register below. We use your responses to set the agenda.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="register">Register<a href="https://docs.litellm.ai/blog/october-townhall-announcement#register" class="hash-link" aria-label="Direct link to Register" title="Direct link to Register">​</a></h2>
<p>Register here: <a href="https://forms.gle/F8tTYR8rfjKBA4D67" target="_blank" rel="noopener noreferrer">LiteLLM October Townhall Form</a></p>
<p>We will hold the townhall from <strong>7:30 AM to 8:30 AM PT on Zoom</strong>.</p>
<p>For security, attendance is restricted to corporate emails. If you register with a non-corporate email, we will share the townhall slides and accompanying blog post after the event.</p>]]></content>
        <author>
            <name>Krrish Dholakia</name>
            <uri>https://www.linkedin.com/in/krish-d/</uri>
        </author>
        <author>
            <name>Ishaan Jaffer</name>
            <uri>https://www.linkedin.com/in/reffajnaahsi/</uri>
        </author>
        <category label="announcement" term="announcement"/>
        <category label="townhall" term="townhall"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Introducing Microsoft 365 Copilot in LiteLLM]]></title>
        <id>https://docs.litellm.ai/blog/microsoft-365-copilot</id>
        <link href="https://docs.litellm.ai/blog/microsoft-365-copilot"/>
        <updated>2026-10-09T12:00:00.000Z</updated>
        <summary type="html"><![CDATA[Use Microsoft 365 Copilot from your applications through LiteLLM, with access to your Microsoft 365 work data.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="LiteLLM × Microsoft 365 Copilot" src="https://docs.litellm.ai/assets/images/cover-e45c45cb297f07051f5dda6a99917f20.png" width="1600" height="836" class="img_ev3q"></p>
<p><strong>Microsoft 365 Copilot is now a provider in LiteLLM.</strong> Use it from your applications to ask questions about your Microsoft 365 work data.</p>
<p>Users sign in with their Microsoft work account and ask questions like “Summarize my latest meeting.” Copilot answers using the data they already have permission to access.</p>
<!-- -->
<p>Connect applications that support Microsoft Entra SSO and forward each user's access token. Each user needs a Microsoft 365 Copilot license, and LiteLLM requires enterprise JWT authentication.</p>
<p>Admins can set <a href="https://docs.litellm.ai/docs/proxy/custom_pricing#override-model-cost-map" target="_blank" rel="noopener noreferrer">custom pricing</a> to track usage costs.</p>
<p><a href="https://docs.litellm.ai/docs/providers/microsoft_365_copilot">Set up Microsoft 365 Copilot →</a></p>]]></content>
        <author>
            <name>Yassin Kortam</name>
            <uri>https://www.linkedin.com/in/yassink/</uri>
        </author>
        <category label="announcement" term="announcement"/>
        <category label="ai-gateway" term="ai-gateway"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Introducing litellm-core: the first step toward a leaner SDK]]></title>
        <id>https://docs.litellm.ai/blog/introducing-litellm-core</id>
        <link href="https://docs.litellm.ai/blog/introducing-litellm-core"/>
        <updated>2026-10-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Ongoing work to reduce LiteLLM's dependencies and installation footprint, improve runtime loading, and make imports faster]]></summary>
        <content type="html"><![CDATA[<p>We're introducing <code>litellm-core</code> as the first step in ongoing work to make the LiteLLM SDK leaner. We want applications to install fewer dependencies, use less disk space, and spend less time loading the SDK</p>
<p>This first step delivers an <strong>approximately 65.6 MB reduction</strong> in installed disk space, including runtime dependencies, compared with baseline <code>litellm</code> in our source-build comparison. We'll continue building on that progress with further dependency reductions and improvements to how the SDK loads</p>
<p>The first step separates SDK packaging from the existing distribution, removes mandatory AWS and Python Hugging Face tokenizer dependencies from core, and leaves out the bundled dashboard. Your application continues to use <code>import litellm</code></p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-a-separate-core-package">Why a separate core package<a href="https://docs.litellm.ai/blog/introducing-litellm-core#why-a-separate-core-package" class="hash-link" aria-label="Direct link to Why a separate core package" title="Direct link to Why a separate core package">​</a></h2>
<p>LiteLLM supports a broad range of providers, endpoints, and integrations. An application making ordinary chat completion calls may not need AWS credential handling or Python Hugging Face tokenizers, but those packages have been part of the SDK's default installation</p>
<p>Each mandatory dependency contributes to the installation footprint, and it can bring its own dependencies. Importing modules before they are needed can also add startup work. We want developers to install and load less when their application needs less</p>
<p><code>litellm-core</code> gives us a dedicated distribution to improve that experience while preserving the existing <code>litellm</code> package's dependency defaults</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-same-sdk-apis">The same SDK APIs<a href="https://docs.litellm.ai/blog/introducing-litellm-core#the-same-sdk-apis" class="hash-link" aria-label="Direct link to The same SDK APIs" title="Direct link to The same SDK APIs">​</a></h2>
<p>Core is built from the shared LiteLLM SDK sources. It retains provider request and response translation, synchronous and asynchronous completions, streaming, embeddings, token counting, model metadata, and cost calculations. Routing, retries, fallbacks, and consistent provider error handling remain part of the SDK</p>
<p>The broader API surface, including Responses, image, audio, and batch operations, is preserved too. Support still depends on the model and provider, and features with optional dependencies need those packages installed</p>
<p>The package name changes to <code>litellm-core</code>, but Python imports continue to use <code>litellm</code>. Core does not bundle the Admin UI or expose the gateway CLI entry points</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-changes-in-this-first-step">What changes in this first step<a href="https://docs.litellm.ai/blog/introducing-litellm-core#what-changes-in-this-first-step" class="hash-link" aria-label="Direct link to What changes in this first step" title="Direct link to What changes in this first step">​</a></h2>
<p>Core no longer requires <code>boto3</code>, <code>tokenizers</code>, or <code>huggingface-hub</code> in every installation. Applications that need AWS credential resolution, request signing, or event-stream decoding can install <code>boto3</code>. Applications using Python Hugging Face tokenizer paths can install <code>tokenizers</code> and <code>huggingface-hub</code></p>
<p>The shared implementation loads these optional packages at the operations that need them and provides installation guidance when they are missing. The proxy CLI is also deferred rather than imported as part of SDK initialization</p>
<p>Token counting remains available through the supported native and <code>tiktoken</code> paths. If a token-counting path falls back to an approximation, it emits a warning so applications can distinguish an estimate from a model-specific count</p>
<p>Core also declares <code>python-dateutil</code> directly. Removing three mandatory packages does not mean exactly three fewer installed packages: the total depends on their transitive dependencies and the rest of the application's environment</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="approximately-656-mb-less-installed-disk-space">Approximately 65.6 MB less installed disk space<a href="https://docs.litellm.ai/blog/introducing-litellm-core#approximately-656-mb-less-installed-disk-space" class="hash-link" aria-label="Direct link to Approximately 65.6 MB less installed disk space" title="Direct link to Approximately 65.6 MB less installed disk space">​</a></h2>
<p>Our source-build comparison measured an <strong>approximately 65.6 MB reduction</strong> in installed disk space, including runtime dependencies. This is the first measured step in our ongoing work to reduce what applications need to install</p>
<p>The comparison covers default installations without optional extras. Core retains the shared SDK APIs, excludes bundled dashboard assets and gateway CLI entry points, and makes AWS and Python Hugging Face tokenizer packages optional. Adding those packages changes the installation footprint</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-we-measured">How we measured<a href="https://docs.litellm.ai/blog/introducing-litellm-core#how-we-measured" class="hash-link" aria-label="Direct link to How we measured" title="Direct link to How we measured">​</a></h3>
<ul>
<li>We built baseline <code>litellm</code> at <a href="https://github.com/BerriAI/litellm/commit/5d207d85ee547bc323d704bc6aaab901aa0be8b6" target="_blank" rel="noopener noreferrer">commit 5d207d85</a> and <code>litellm-core</code> at <a href="https://github.com/BerriAI/litellm/commit/029a626c99ec8c6012512b18ecea075a90db9dcd" target="_blank" rel="noopener noreferrer">commit 029a626c</a>, then installed their default dependencies in separate clean environments on the same Ubuntu x86_64 machine and CPython version, with matching versions of shared dependencies. These measurements describe those source builds</li>
<li>Installed size counts unique files belonging to the SDK and its runtime dependencies, including metadata and scripts. It excludes the interpreter, common tooling, and generated bytecode. MB uses decimal units, with 1 MB equal to 1,000,000 bytes. The reduction measures disk space, not RAM usage or inference speed</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="a-shared-foundation-for-litellm">A shared foundation for LiteLLM<a href="https://docs.litellm.ai/blog/introducing-litellm-core#a-shared-foundation-for-litellm" class="hash-link" aria-label="Direct link to A shared foundation for LiteLLM" title="Direct link to A shared foundation for LiteLLM">​</a></h2>
<p>Our longer-term direction is for <code>litellm-core</code> to become the common SDK foundation for LiteLLM, with <code>litellm</code> eventually wrapping it</p>
<p>For developers familiar with <a href="https://docs.pydantic.dev/latest/internals/architecture/" target="_blank" rel="noopener noreferrer">Pydantic's architecture</a>, the separation between <code>pydantic</code> and <code>pydantic-core</code> is a useful analogy: shared core functionality can evolve behind a familiar public interface</p>
<p>That analogy describes the architectural direction. In this first step, <code>litellm</code> and <code>litellm-core</code> are independently packaged from shared sources. <code>litellm</code> has not yet become a wrapper around core</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="getting-started">Getting started<a href="https://docs.litellm.ai/blog/introducing-litellm-core#getting-started" class="hash-link" aria-label="Direct link to Getting started" title="Direct link to Getting started">​</a></h2>
<p>In a fresh virtual environment, install <code>litellm-core</code> and continue using your existing <code>litellm</code> imports. Add the optional AWS or Python tokenizer packages if your application uses those features</p>
<p>Choose one distribution per environment. <code>litellm</code> and <code>litellm-core</code> currently install overlapping Python files and cannot coexist, even at matching versions. Existing applications can continue using <code>litellm</code> with its current dependency defaults</p>
<p>The <a href="https://docs.litellm.ai/docs/litellm_core" target="_blank" rel="noopener noreferrer">LiteLLM Core guide</a> covers installation, dependency choices, and the gateway distinction</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="continuing-to-make-core-leaner-and-faster">Continuing to make core leaner and faster<a href="https://docs.litellm.ai/blog/introducing-litellm-core#continuing-to-make-core-leaner-and-faster" class="hash-link" aria-label="Direct link to Continuing to make core leaner and faster" title="Direct link to Continuing to make core leaner and faster">​</a></h2>
<p>Our longer-term goal is to bring the default installation to <strong>around 10 total dependencies, including transitive dependencies</strong>. That is a target for ongoing work, not the dependency count of this first release</p>
<p>We'll continue shrinking the installation footprint and loading runtime dependencies only when the relevant functionality needs them</p>
<p>Faster imports remain a goal of that work, alongside fewer dependencies and a smaller installation. We'll keep measuring progress as we improve how the SDK loads and uses its runtime dependencies</p>
<p>As core becomes the common SDK foundation and <code>litellm</code> eventually wraps it, we'll keep measuring these changes so developers can follow the progress</p>]]></content>
        <author>
            <name>Joshua Valluru</name>
            <uri>https://github.com/joshua-berri</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Claude Haiku 5.5 API Pricing and Day 0 Support on LiteLLM]]></title>
        <id>https://docs.litellm.ai/blog/claude-haiku-5-5</id>
        <link href="https://docs.litellm.ai/blog/claude-haiku-5-5"/>
        <updated>2026-10-07T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Claude Haiku 5.5 costs $0.10 per 1M input tokens and $0.50 per 1M output tokens. LiteLLM supports it on day 0 on Anthropic, AWS, Google Cloud and Azure.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Claude Haiku 5.5 on LiteLLM" src="https://docs.litellm.ai/assets/images/litellm_claude_haiku_5_5_announcement-6e471bf00e33af3062bc301c53d613ff.png" width="4800" height="2508" class="img_ev3q"></p>
<p>LiteLLM now supports <a href="https://www.anthropic.com/claude-haiku-5-5" target="_blank" rel="noopener noreferrer">Claude Haiku 5.5</a> on Day 0. Use it across Anthropic, Bedrock, Gemini Enterprise Agent Platform, and Azure through the LiteLLM AI Gateway, with spend, rate limits, and logging in one place.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="claude-haiku-55-pricing">Claude Haiku 5.5 pricing<a href="https://docs.litellm.ai/blog/claude-haiku-5-5#claude-haiku-55-pricing" class="hash-link" aria-label="Direct link to Claude Haiku 5.5 pricing" title="Direct link to Claude Haiku 5.5 pricing">​</a></h2>
<ul>
<li><strong>Input:</strong> $0.10 / MTok for prompts up to 100K tokens, $0.50 / MTok above</li>
<li><strong>Output:</strong> $0.50 / MTok, or $2.50 / MTok above 100K</li>
<li><strong>Cache read:</strong> $0.01 / MTok, or $0.05 / MTok above 100K</li>
<li><strong>Batch:</strong> 50% off input and output</li>
</ul>
<p>Prices on every provider: <a href="https://models.litellm.ai/models" target="_blank" rel="noopener noreferrer">https://models.litellm.ai/models</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new-in-claude-haiku-55">What's new in Claude Haiku 5.5<a href="https://docs.litellm.ai/blog/claude-haiku-5-5#whats-new-in-claude-haiku-55" class="hash-link" aria-label="Direct link to What's new in Claude Haiku 5.5" title="Direct link to What's new in Claude Haiku 5.5">​</a></h2>
<ul>
<li><strong>90% cheaper than Haiku 4.5</strong> for prompts up to 100K tokens, and around 75% less to run on average, per Anthropic</li>
<li><strong>72.4% on OSWorld 2.1</strong>, up from Haiku 4.5's 15.7%</li>
<li><strong>1M-token context</strong>, up to 128K output tokens</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="use-claude-haiku-55-with-litellm">Use Claude Haiku 5.5 with LiteLLM<a href="https://docs.litellm.ai/blog/claude-haiku-5-5#use-claude-haiku-55-with-litellm" class="hash-link" aria-label="Direct link to Use Claude Haiku 5.5 with LiteLLM" title="Direct link to Use Claude Haiku 5.5 with LiteLLM">​</a></h2>
<p>Pricing landed in <a href="https://github.com/BerriAI/litellm/pull/45108" target="_blank" rel="noopener noreferrer">PR #45108</a>. No upgrade needed: open <strong>Price Data</strong> under <strong>Models + Endpoints</strong> in the UI and click <strong>Reload Price Data</strong> (or <code>POST /reload/model_cost_map</code>), on <code>v1.76.0</code> and above.</p>
<div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Anthropic</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Bedrock</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Gemini Enterprise Agent Platform</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Azure</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">haiku</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> anthropic/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">haiku</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/ANTHROPIC_API_KEY</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -p 4000:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/config.yaml:/app/config.yaml \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/berriai/litellm:v1.104.0 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --config /app/config.yaml</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">haiku</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> bedrock/anthropic.claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">haiku</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">aws_access_key_id</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/AWS_ACCESS_KEY_ID</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">aws_secret_access_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/AWS_SECRET_ACCESS_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">aws_region_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> us</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">east</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">1</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -p 4000:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/config.yaml:/app/config.yaml \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/berriai/litellm:v1.104.0 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --config /app/config.yaml</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">haiku</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> vertex_ai/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">haiku</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">vertex_project</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/VERTEX_PROJECT</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">vertex_location</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> global</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -p 4000:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e VERTEX_PROJECT=$VERTEX_PROJECT \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e GOOGLE_APPLICATION_CREDENTIALS=/app/credentials.json \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/config.yaml:/app/config.yaml \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/credentials.json:/app/credentials.json \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/berriai/litellm:v1.104.0 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --config /app/config.yaml</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">haiku</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> azure_ai/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">haiku</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/AZURE_AI_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_base</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/AZURE_AI_API_BASE  </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># https://&lt;resource&gt;.services.ai.azure.com</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -p 4000:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e AZURE_AI_API_KEY=$AZURE_AI_API_KEY \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e AZURE_AI_API_BASE=$AZURE_AI_API_BASE \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/config.yaml:/app/config.yaml \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/berriai/litellm:v1.104.0 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --config /app/config.yaml</span><br></span></code></pre></div></div></div></div></div>
<p><strong>3. Test it!</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl --location 'http://0.0.0.0:4000/chat/completions' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--header 'Content-Type: application/json' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--header 'Authorization: Bearer $LITELLM_KEY' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--data '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "model": "claude-haiku-5-5",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "messages": [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "role": "user",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "content": "what llm are you"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}'</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="faq">FAQ<a href="https://docs.litellm.ai/blog/claude-haiku-5-5#faq" class="hash-link" aria-label="Direct link to FAQ" title="Direct link to FAQ">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-much-does-claude-haiku-55-cost">How much does Claude Haiku 5.5 cost?<a href="https://docs.litellm.ai/blog/claude-haiku-5-5#how-much-does-claude-haiku-55-cost" class="hash-link" aria-label="Direct link to How much does Claude Haiku 5.5 cost?" title="Direct link to How much does Claude Haiku 5.5 cost?">​</a></h3>
<p>$0.10 per 1M input tokens and $0.50 per 1M output tokens for prompts up to 100K tokens, and $0.50 and $2.50 above that. Cache reads cost $0.01 per 1M tokens.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-the-context-window-of-claude-haiku-55">What is the context window of Claude Haiku 5.5?<a href="https://docs.litellm.ai/blog/claude-haiku-5-5#what-is-the-context-window-of-claude-haiku-55" class="hash-link" aria-label="Direct link to What is the context window of Claude Haiku 5.5?" title="Direct link to What is the context window of Claude Haiku 5.5?">​</a></h3>
<p>1M tokens, with up to 128K output tokens per request.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-do-i-call-claude-haiku-55-with-an-openai-compatible-api">How do I call Claude Haiku 5.5 with an OpenAI-compatible API?<a href="https://docs.litellm.ai/blog/claude-haiku-5-5#how-do-i-call-claude-haiku-55-with-an-openai-compatible-api" class="hash-link" aria-label="Direct link to How do I call Claude Haiku 5.5 with an OpenAI-compatible API?" title="Direct link to How do I call Claude Haiku 5.5 with an OpenAI-compatible API?">​</a></h3>
<p>Add <code>anthropic/claude-haiku-5-5</code> to your LiteLLM config, then send a standard <code>/chat/completions</code> request to the proxy with <code>"model": "claude-haiku-5-5"</code>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="https://docs.litellm.ai/blog/claude-haiku-5-5#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback">​</a></h2>
<p>Questions and feedback go in <a href="https://github.com/BerriAI/litellm/discussions/45133" target="_blank" rel="noopener noreferrer">GitHub discussion #45133</a>.</p>]]></content>
        <author>
            <name>Misbah Syed</name>
            <uri>https://github.com/misbahsy</uri>
        </author>
        <author>
            <name>Mateo Wang</name>
            <uri>https://www.linkedin.com/in/mateo-wang</uri>
        </author>
        <author>
            <name>Kerry Lu</name>
            <uri>https://github.com/kerry-berri</uri>
        </author>
        <category label="anthropic" term="anthropic"/>
        <category label="claude" term="claude"/>
        <category label="claude haiku" term="claude haiku"/>
        <category label="haiku 5.5" term="haiku 5.5"/>
        <category label="pricing" term="pricing"/>
        <category label="day 0 support" term="day 0 support"/>
        <category label="card_title:Claude Haiku 5.5" term="card_title:Claude Haiku 5.5"/>
        <category label="card_summary:90% cheaper than Haiku 4.5 on short prompts, 1M context, 72.4% on OSWorld 2.1, $0.10 / $0.50 per 1M tokens." term="card_summary:90% cheaper than Haiku 4.5 on short prompts, 1M context, 72.4% on OSWorld 2.1, $0.10 / $0.50 per 1M tokens."/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Open Sourcing Moyai: Self-Hosted Cloud Coding Agent]]></title>
        <id>https://docs.litellm.ai/blog/moyai-open-source</id>
        <link href="https://docs.litellm.ai/blog/moyai-open-source"/>
        <updated>2026-10-07T09:00:00.000Z</updated>
        <summary type="html"><![CDATA[Run cloud coding agents on your own infrastructure with Moyai. Choose your agent and models through LiteLLM, track costs, and follow the setup guide.]]></summary>
        <content type="html"><![CDATA[<style>html:has(#moyai-hero){color-scheme:dark;--ifm-background-color:#05070d;--ifm-background-surface-color:#161b22;--ifm-navbar-background-color:#05070dd1;--ifm-footer-background-color:#05070d;--ifm-font-color-base:#e3e3e3;--ifm-heading-color:#f5f6fa;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#c2c6d0;--ifm-color-emphasis-300:#444950;--ifm-color-emphasis-400:#606770;--ifm-color-emphasis-500:#8d949e;--ifm-color-emphasis-600:#a6aab3;--ifm-color-emphasis-700:#c2c6d0;--ifm-toc-border-color:#2d3139}html:has(#moyai-hero) body,html:has(#moyai-hero) .main-wrapper{color:#e3e3e3;background:#05070d}html:has(#moyai-hero) [class*=colorModeToggle]{display:none}html:has(#moyai-hero){--ifm-navbar-background-color:#080b26;--aurora-nav-bg:#080b26b8;--aurora-line:#ffffff14;--aurora-line-strong:#9fabff29;--aurora-muted:#a6a4c6;--ifm-navbar-link-color:#e3e3e3}html:has(#moyai-hero) .navbar{background-color:#080b26b8!important;border-bottom-color:#ffffff14!important}html:has(#moyai-hero) .navbar__link,html:has(#moyai-hero) .navbar__item{color:#e3e3e3}html:has(#moyai-hero) .blog-wrapper article .markdown,html:has(#moyai-hero) article .markdown{color:#d1d5db}html:has(#moyai-hero) article .markdown h2,html:has(#moyai-hero) article .markdown h3{color:#f9fafb}html:has(#moyai-hero) article .markdown code{color:#f9fafb;background:#1f2937;border-color:#374151}</style><script>document.documentElement.setAttribute("data-theme","dark")</script><div class="backdrop_GepX" style="background:radial-gradient(ellipse at 50% 70%, #0a1226 0%, #04060c 65%)" aria-hidden="true"></div><canvas class="sky_m8FU" aria-hidden="true"></canvas><section id="moyai-hero" class="scroller_pNW6" data-stage="0" style="--accent:#a9c6ff"><div class="hero_k5iN"><canvas class="swirl_v22n" aria-hidden="true"></canvas><h1 class="split_QJ6G"><img class="mark__RL1" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/moyai-head.svg" alt=""><span class="brand_xOwg">Moyai</span><span class="subhead_nSZW">Open source cloud agent</span></h1><div class="date_Yw33">October 7, 2026</div><div class="orbit_Es90 undefined"><div class="chip_ryrt"><img class="chipLogo_nKV4" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/hermes.png" alt="Hermes" title="Hermes"><span>Hermes</span></div><div class="chip_ryrt"><img class="chipLogo_nKV4" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/anthropic.svg" alt="Claude Code" title="Claude Code"><span>Claude Code</span></div><div class="chip_ryrt"><img class="chipLogo_nKV4" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/openai.svg" alt="Codex" title="Codex"><span>Codex</span></div><div class="chip_ryrt"><img class="chipLogo_nKV4" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/opencode.svg" alt="OpenCode" title="OpenCode"><span>OpenCode</span></div><div class="chip_ryrt"><img class="chipLogo_nKV4" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/langchain.svg" alt="Deep Agents" title="Deep Agents"><span>Deep Agents</span></div></div><div class="orbit_Es90 orbitOuter_LL9L"><div class="chip_ryrt"><img class="chipLogo_nKV4" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/openai.svg" alt="OpenAI" title="OpenAI"><span>OpenAI</span></div><div class="chip_ryrt"><img class="chipLogo_nKV4" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/anthropic.svg" alt="Anthropic" title="Anthropic"><span>Anthropic</span></div><div class="chip_ryrt"><img class="chipLogo_nKV4" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/fireworks.svg" alt="Fireworks" title="Fireworks"><span>Fireworks</span></div><div class="chip_ryrt"><img class="chipLogo_nKV4" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/google.svg" alt="Google" title="Google"><span>Google</span></div><div class="chip_ryrt"><img class="chipLogo_nKV4" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/xai.svg" alt="xAI" title="xAI"><span>xAI</span></div><div class="chip_ryrt"><img class="chipLogo_nKV4" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/mistral.svg" alt="Mistral" title="Mistral"><span>Mistral</span></div><div class="chip_ryrt"><img class="chipLogo_nKV4" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/deepseek.svg" alt="DeepSeek" title="DeepSeek"><span>DeepSeek</span></div><div class="chip_ryrt"><img class="chipLogo_nKV4" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/bedrock.svg" alt="Bedrock" title="Bedrock"><span>Bedrock</span></div></div><p class="tagline_MZSp"><span>Works with Claude Code and Codex</span><span>Self-hosted · 100+ providers through LiteLLM</span></p></div></section><ol class="toc_zfxC"><li><a href="https://docs.litellm.ai/blog/moyai-open-source#the-problem"><span>[<!-- -->1<!-- -->]</span><span class="dots_P1Ow" aria-hidden="true"></span><span>The problem</span></a></li><li><a href="https://docs.litellm.ai/blog/moyai-open-source#the-results-79-cheaper"><span>[<!-- -->2<!-- -->]</span><span class="dots_P1Ow" aria-hidden="true"></span><span>Our cost estimate</span></a></li><li><a href="https://docs.litellm.ai/blog/moyai-open-source#why-were-open-sourcing-it"><span>[<!-- -->3<!-- -->]</span><span class="dots_P1Ow" aria-hidden="true"></span><span>Why we're open sourcing it</span></a></li><li><a href="https://docs.litellm.ai/blog/moyai-open-source#a-cloud-agent-that-keeps-working"><span>[<!-- -->4<!-- -->]</span><span class="dots_P1Ow" aria-hidden="true"></span><span>A cloud agent that keeps working</span></a></li><li><a href="https://docs.litellm.ai/blog/moyai-open-source#any-harness"><span>[<!-- -->5<!-- -->]</span><span class="dots_P1Ow" aria-hidden="true"></span><span>Choose your agent</span></a></li><li><a href="https://docs.litellm.ai/blog/moyai-open-source#any-model-any-provider"><span>[<!-- -->6<!-- -->]</span><span class="dots_P1Ow" aria-hidden="true"></span><span>Choose your models</span></a></li><li><a href="https://docs.litellm.ai/blog/moyai-open-source#one-source-of-truth-for-model-costs"><span>[<!-- -->7<!-- -->]</span><span class="dots_P1Ow" aria-hidden="true"></span><span>Know what you spend</span></a></li><li><a href="https://docs.litellm.ai/blog/moyai-open-source#get-started"><span>[<!-- -->8<!-- -->]</span><span class="dots_P1Ow" aria-hidden="true"></span><span>Set up your first task</span></a></li></ol>
<div class="page_YtqF immersiveByline_XkdX"><div class="inner_Too9"><span class="published_MQDR">Published: <time datetime="2026-10-07T09:00:00.000Z">Oct 7, 2026</time></span><div class="authors_hW1g"><span class="author_ZRh2"><a href="https://www.linkedin.com/in/reffajnaahsi/" target="_blank" rel="noopener noreferrer" tabindex="-1" aria-hidden="true"><img src="https://pbs.twimg.com/profile_images/1613813310264340481/lz54oEiB_400x400.jpg" alt="" class="avatar_Sim6"></a><span><a href="https://www.linkedin.com/in/reffajnaahsi/" target="_blank" rel="noopener noreferrer" class="authorLink_BPAX"><b>Ishaan Jaffer</b></a><small>CTO, LiteLLM</small></span></span><span class="author_ZRh2"><a href="https://www.linkedin.com/in/tinchi-lo/" target="_blank" rel="noopener noreferrer" tabindex="-1" aria-hidden="true"><img src="https://docs.litellm.ai/img/authors/tin.png" alt="" class="avatar_Sim6"></a><span><a href="https://www.linkedin.com/in/tinchi-lo/" target="_blank" rel="noopener noreferrer" class="authorLink_BPAX"><b>Tin Lo</b></a><small>AI Product Engineer, LiteLLM</small></span></span><span class="author_ZRh2"><a href="https://www.linkedin.com/in/moe-khalil-73a2371a1/" target="_blank" rel="noopener noreferrer" tabindex="-1" aria-hidden="true"><img src="https://docs.litellm.ai/img/authors/moe.jpg" alt="" class="avatar_Sim6"></a><span><a href="https://www.linkedin.com/in/moe-khalil-73a2371a1/" target="_blank" rel="noopener noreferrer" class="authorLink_BPAX"><b>Moe Khalil</b></a><small>AI Product Engineer, LiteLLM</small></span></span></div></div></div>
<p>Today we're open sourcing <a href="https://github.com/BerriAI/moyai" target="_blank" rel="noopener noreferrer">Moyai</a>, 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.</p>
<p><a href="https://docs.litellm.ai/docs/self_hosted_coding_agents/moyai/setup">Set up your first cloud task</a>, or see the cost comparison and a real bug fix below.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-problem">The problem<a href="https://docs.litellm.ai/blog/moyai-open-source#the-problem" class="hash-link" aria-label="Direct link to The problem" title="Direct link to The problem">​</a></h2>
<p>Our Devin bill hit $101,872 in a single month, and only our own team used it. Our engineers kicked off those sessions and automations on models and routing we couldn't control.</p>
<p><img decoding="async" loading="lazy" alt="Devin billing dashboard showing $101,872.24 spent between Aug 30 and Sep 29, with daily spend peaking above $10,000." src="https://docs.litellm.ai/assets/images/devin-bill-22730098d78b7ce19a60188c28770466.png" width="1548" height="838" class="img_ev3q"></p>
<p>We already run a gateway that routes across 100+ providers. We wanted to choose the model and routing for each coding task, with the usage visible in our own gateway.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-results-79-cheaper">Our estimate: 79% lower costs<a href="https://docs.litellm.ai/blog/moyai-open-source#the-results-79-cheaper" class="hash-link" aria-label="Direct link to Our estimate: 79% lower costs" title="Direct link to Our estimate: 79% lower costs">​</a></h2>
<p>We estimate about $700 a day to run Moyai for our team. Over 31 days, that comes to about $21,700 against our $101,872 Devin bill: roughly $80,000 less, or 79% lower estimated cost. This is an internal comparison, not a matched-workload benchmark. Your model mix, workload, compute, and storage determine your costs.</p>
<figure class="cost_CcW4"><div class="headline_aKzA"><span class="pct_zp4O">79<!-- -->% lower estimate</span><span class="headlineText_yA6Y">About <!-- -->$21,700<!-- --> estimated for Moyai vs our <!-- -->$101,872<!-- --> Devin bill over 31 days.</span></div><svg viewBox="0 0 760 320" role="img" aria-label="Internal 31-day comparison. The Devin bill totals $101,872; the Moyai estimate is $21,700, a difference of $80,172. This is not a matched-workload benchmark."><g><line x1="52" x2="610" y1="286" y2="286" class="grid_xyjs"></line><text x="42" y="290" text-anchor="end" class="axis_qblo">$0</text></g><g><line x1="52" x2="610" y1="241" y2="241" class="grid_xyjs"></line><text x="42" y="245" text-anchor="end" class="axis_qblo">$20k</text></g><g><line x1="52" x2="610" y1="196" y2="196" class="grid_xyjs"></line><text x="42" y="200" text-anchor="end" class="axis_qblo">$40k</text></g><g><line x1="52" x2="610" y1="151" y2="151" class="grid_xyjs"></line><text x="42" y="155" text-anchor="end" class="axis_qblo">$60k</text></g><g><line x1="52" x2="610" y1="106" y2="106" class="grid_xyjs"></line><text x="42" y="110" text-anchor="end" class="axis_qblo">$80k</text></g><g><line x1="52" x2="610" y1="61" y2="61" class="grid_xyjs"></line><text x="42" y="65" text-anchor="end" class="axis_qblo">$100k</text></g><g><line x1="52" x2="610" y1="16" y2="16" class="grid_xyjs"></line><text x="42" y="20" text-anchor="end" class="axis_qblo">$120k</text></g><path d="M52.0,285.8L70.6,283.6L89.2,280.1L107.8,276.2L126.4,273.3L145.0,271.7L163.6,270.4L182.2,270.2L200.8,268.8L219.4,263.2L238.0,259.0L256.6,253.2L275.2,247.5L293.8,242.9L312.4,241.8L331.0,232.4L349.6,221.9L368.2,209.3L386.8,194.3L405.4,180.6L424.0,172.5L442.6,169.7L461.2,148.9L479.8,123.6L498.4,104.1L517.0,86.0L535.6,79.9L554.2,70.3L572.8,68.0L591.4,63.4L610.0,56.8L610.0,237.2L591.4,238.8L572.8,240.3L554.2,241.9L535.6,243.5L517.0,245.1L498.4,246.6L479.8,248.2L461.2,249.8L442.6,251.3L424.0,252.9L405.4,254.5L386.8,256.1L368.2,257.6L349.6,259.2L331.0,260.8L312.4,262.4L293.8,263.9L275.2,265.5L256.6,267.1L238.0,268.7L219.4,270.3L200.8,271.8L182.2,273.4L163.6,275.0L145.0,276.6L126.4,278.1L107.8,279.7L89.2,281.3L70.6,282.9L52.0,284.4Z" class="gap_hPyW"></path><path d="M52.0,285.8L70.6,283.6L89.2,280.1L107.8,276.2L126.4,273.3L145.0,271.7L163.6,270.4L182.2,270.2L200.8,268.8L219.4,263.2L238.0,259.0L256.6,253.2L275.2,247.5L293.8,242.9L312.4,241.8L331.0,232.4L349.6,221.9L368.2,209.3L386.8,194.3L405.4,180.6L424.0,172.5L442.6,169.7L461.2,148.9L479.8,123.6L498.4,104.1L517.0,86.0L535.6,79.9L554.2,70.3L572.8,68.0L591.4,63.4L610.0,56.8" class="devin_YveB"></path><path d="M52.0,284.4L70.6,282.9L89.2,281.3L107.8,279.7L126.4,278.1L145.0,276.6L163.6,275.0L182.2,273.4L200.8,271.8L219.4,270.3L238.0,268.7L256.6,267.1L275.2,265.5L293.8,263.9L312.4,262.4L331.0,260.8L349.6,259.2L368.2,257.6L386.8,256.1L405.4,254.5L424.0,252.9L442.6,251.3L461.2,249.8L479.8,248.2L498.4,246.6L517.0,245.1L535.6,243.5L554.2,241.9L572.8,240.3L591.4,238.8L610.0,237.2" class="line__k2s"></path><circle cx="610" cy="56.78745999999998" r="4" class="devinDot_q7m2"></circle><circle cx="610" cy="237.175" r="4" class="moyaiDot_ngts"></circle><line x1="616" x2="616" y1="66.78745999999998" y2="227.175" class="bracket_zizg"></line><text x="624" y="60.78745999999998" class="endLabel_tzRP">Devin <!-- -->$101,872</text><text x="624" y="150.98122999999998" class="savedLabel_XCyf">gap <!-- -->$80,172</text><text x="624" y="241.175" class="endLabelMoyai_w0s7">Moyai <!-- -->$21,700</text><text x="52" y="310" text-anchor="middle" class="axis_qblo">Aug 30</text><text x="163.60000000000002" y="310" text-anchor="middle" class="axis_qblo">Sep 5</text><text x="275.20000000000005" y="310" text-anchor="middle" class="axis_qblo">Sep 11</text><text x="386.8" y="310" text-anchor="middle" class="axis_qblo">Sep 17</text><text x="498.40000000000003" y="310" text-anchor="middle" class="axis_qblo">Sep 23</text><text x="610" y="310" text-anchor="middle" class="axis_qblo">Sep 29</text></svg><figcaption><span><i class="swatchDevin_mmTY"></i>Devin bill</span><span><i class="swatchMoyai__skB"></i>Moyai estimate</span><span><i class="swatchGap_oXho"></i>Difference</span><p class="note_rOll">Devin's daily curve is approximated from its billing dashboard and scaled to the invoice total. The Moyai line assumes $700/day for our team. Actual costs depend on your workload and infrastructure.</p></figcaption></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-were-open-sourcing-it">Why we're open sourcing it<a href="https://docs.litellm.ai/blog/moyai-open-source#why-were-open-sourcing-it" class="hash-link" aria-label="Direct link to Why we're open sourcing it" title="Direct link to Why we're open sourcing it">​</a></h2>
<p>Last week we wrote about <a href="https://docs.litellm.ai/blog/internal-devin-two-days">how we built our own internal Devin in 2 days</a>, and most replies asked to run it themselves. Moyai is the same code we run in production at LiteLLM. You deploy it on your infrastructure and point it at your LiteLLM gateway. You control the installation and provider access; model requests still go to the provider you select.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="a-cloud-agent-that-keeps-working">A cloud agent that keeps working<a href="https://docs.litellm.ai/blog/moyai-open-source#a-cloud-agent-that-keeps-working" class="hash-link" aria-label="Direct link to A cloud agent that keeps working" title="Direct link to A cloud agent that keeps working">​</a></h2>
<p>Each session gets its own cloud workspace with a terminal, a filesystem, and a browser. The agent edits code and runs your tests there, then opens a pull request for you to review. Closing your laptop leaves the cloud task running.</p>
<p>You can follow along in the web app and send a correction while it works, or pick the thread back up in Slack the next morning. For large tasks, the agent can split work across parallel workers and collect their results.</p>
<p>Watch a real bug fix move from a Slack request through investigation and regression tests to a pull request:</p>
<figure class="demo_fj59"><video class="video_wQT_" controls="" muted="" playsinline="" preload="none" src="/assets/medias/bug-workflow-08b41275f096ef7fd90517574cc9b152.mp4" poster="/assets/ideal-img/bug-workflow-poster.9d3a3f1.1280.jpg" width="1600" height="1000" aria-label="18-second walkthrough of Moyai across Slack and the web: a real team workflow request, investigation, regression tests, and a pull request returned to the thread"><a href="https://docs.litellm.ai/assets/medias/bug-workflow-08b41275f096ef7fd90517574cc9b152.mp4">Watch the bug-fix walkthrough</a></video><figcaption class="caption_JM4l">A real <code>/personal:team</code> bug fix across Slack and the web. Edited 18-second walkthrough of a completed session; tests used a mocked Slack transport.</figcaption></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="any-harness">Choose the agent for the task<a href="https://docs.litellm.ai/blog/moyai-open-source#any-harness" class="hash-link" aria-label="Direct link to Choose the agent for the task" title="Direct link to Choose the agent for the task">​</a></h2>
<p>Pick a supported agent such as Codex, Claude Agent SDK, or Hermes when you start a session. Moyai runs it in a cloud workspace with the connections you enable.</p>
<figure class="wall_dvan"><figcaption>Harnesses</figcaption><div class="wallGrid_cJTx"><div class="wallItem_Q8fz"><img class="wallLogo_dhua" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/hermes.png" alt="Hermes" title="Hermes"><span>Hermes</span></div><div class="wallItem_Q8fz"><img class="wallLogo_dhua" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/anthropic.svg" alt="Claude Code" title="Claude Code"><span>Claude Code</span></div><div class="wallItem_Q8fz"><img class="wallLogo_dhua" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/openai.svg" alt="Codex" title="Codex"><span>Codex</span></div><div class="wallItem_Q8fz"><img class="wallLogo_dhua" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/opencode.svg" alt="OpenCode" title="OpenCode"><span>OpenCode</span></div><div class="wallItem_Q8fz"><img class="wallLogo_dhua" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/langchain.svg" alt="Deep Agents" title="Deep Agents"><span>Deep Agents</span></div></div></figure>
<p>Check the <a href="https://docs.litellm.ai/docs/self_hosted_coding_agents/moyai/setup#configure-litellm">agent and model compatibility table</a> when choosing a combination for your gateway.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="any-model-any-provider">Choose your models through LiteLLM<a href="https://docs.litellm.ai/blog/moyai-open-source#any-model-any-provider" class="hash-link" aria-label="Direct link to Choose your models through LiteLLM" title="Direct link to Choose your models through LiteLLM">​</a></h2>
<p>Moyai sends model requests through LiteLLM. Choose a compatible model for the task and your budget, with provider keys kept on the gateway. Moyai attributes each tracked request to the teammate who sent the message.</p>
<figure class="wall_dvan"><figcaption>Providers</figcaption><div class="wallGrid_cJTx"><div class="wallItem_Q8fz"><img class="wallLogo_dhua" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/openai.svg" alt="OpenAI" title="OpenAI"><span>OpenAI</span></div><div class="wallItem_Q8fz"><img class="wallLogo_dhua" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/anthropic.svg" alt="Anthropic" title="Anthropic"><span>Anthropic</span></div><div class="wallItem_Q8fz"><img class="wallLogo_dhua" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/fireworks.svg" alt="Fireworks" title="Fireworks"><span>Fireworks</span></div><div class="wallItem_Q8fz"><img class="wallLogo_dhua" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/google.svg" alt="Google" title="Google"><span>Google</span></div><div class="wallItem_Q8fz"><img class="wallLogo_dhua" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/xai.svg" alt="xAI" title="xAI"><span>xAI</span></div><div class="wallItem_Q8fz"><img class="wallLogo_dhua" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/mistral.svg" alt="Mistral" title="Mistral"><span>Mistral</span></div><div class="wallItem_Q8fz"><img class="wallLogo_dhua" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/deepseek.svg" alt="DeepSeek" title="DeepSeek"><span>DeepSeek</span></div><div class="wallItem_Q8fz"><img class="wallLogo_dhua" src="https://docs.litellm.ai/img/blog/moyai_devin_open_source/logos/bedrock.svg" alt="Bedrock" title="Bedrock"><span>Bedrock</span></div></div></figure>
<p>LiteLLM supports 100+ providers. Your selected agent needs a model and gateway endpoint that support its protocol and tool calls.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="one-source-of-truth-for-model-costs">One source of truth for model costs<a href="https://docs.litellm.ai/blog/moyai-open-source#one-source-of-truth-for-model-costs" class="hash-link" aria-label="Direct link to One source of truth for model costs" title="Direct link to One source of truth for model costs">​</a></h2>
<p>Moyai uses LiteLLM's reported charges for its per-user, session, and model breakdowns. You can see which teammates and tasks account for spend, then check a tracked request against the same gateway cost. See the <a href="https://docs.litellm.ai/docs/self_hosted_coding_agents/moyai#see-agent-spend">spend dashboard</a> and <a href="https://docs.litellm.ai/docs/self_hosted_coding_agents/moyai/architecture#cost-accounting">cost accounting details</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="get-started">Set up your first cloud task<a href="https://docs.litellm.ai/blog/moyai-open-source#get-started" class="hash-link" aria-label="Direct link to Set up your first cloud task" title="Direct link to Set up your first cloud task">​</a></h2>
<p>Bring a Modal account, a reachable LiteLLM gateway, and a key for your chosen model. <a href="https://docs.litellm.ai/docs/self_hosted_coding_agents/moyai/setup">Follow the setup guide</a> to deploy Moyai, verify a cloud task, and connect one repository. Give it a small bug your team already understands. Review the PR, test output, and model cost before expanding the rollout.</p>
<p>You own the installation, updates, credentials, and backups. You pay for model usage and cloud infrastructure. Read the <a href="https://docs.litellm.ai/docs/self_hosted_coding_agents/moyai/architecture">architecture guide</a> for the system design, checkpoints, and recovery behavior.</p>
<details class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true"><summary>Preview the interface locally first</summary><div><div class="collapsibleContent_i85q"><p>The local demo lets you explore the interface without model credentials. Demo tasks are simulated; they do not verify cloud execution.</p><div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git clone https://github.com/BerriAI/moyai.git</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cd moyai</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cp .env.example .env</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">uv sync --frozen</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">uv run uvicorn app.main:app --host 127.0.0.1 --port 8787 --workers 1</span><br></span></code></pre></div></div></div></div></details>
<p>Issues and PRs are welcome on <a href="https://github.com/BerriAI/moyai" target="_blank" rel="noopener noreferrer">GitHub</a>.</p>]]></content>
        <author>
            <name>Ishaan Jaffer</name>
            <uri>https://www.linkedin.com/in/reffajnaahsi/</uri>
        </author>
        <author>
            <name>Tin Lo</name>
            <uri>https://www.linkedin.com/in/tinchi-lo/</uri>
        </author>
        <author>
            <name>Moe Khalil</name>
            <uri>https://www.linkedin.com/in/moe-khalil-73a2371a1/</uri>
        </author>
        <category label="agents" term="agents"/>
        <category label="open-source" term="open-source"/>
        <category label="infrastructure" term="infrastructure"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Day 0 Support: Nano Banana 2.1]]></title>
        <id>https://docs.litellm.ai/blog/nano_banana_2_1</id>
        <link href="https://docs.litellm.ai/blog/nano_banana_2_1"/>
        <updated>2026-10-06T18:00:00.000Z</updated>
        <summary type="html"><![CDATA[Day 0 support for Gemini Nano Banana 2.1 on LiteLLM, on Google AI Studio and Gemini Enterprise Agent Platform, with image output at half Nano Banana 2's price.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="LiteLLM x Nano Banana 2.1" src="https://docs.litellm.ai/assets/images/hero-13d949a43f9f1df134394377f86f048b.png" width="4800" height="2508" class="img_ev3q"></p>
<p>LiteLLM supports <code>gemini-nano-banana-2.1</code> on day 0 on Google AI Studio (<code>gemini/</code>) and Gemini Enterprise Agent Platform, formerly Vertex AI (<code>vertex_ai/</code>), through <code>/v1/images/generations</code>, <code>/v1/images/edits</code> and <code>/chat/completions</code>. It replaces Nano Banana 2 (<code>gemini-3.1-flash-image</code>), which the Gemini API shuts down on October 29, 2026.</p>
<!-- -->
<p><a href="https://ai.google.dev/gemini-api/docs/models/gemini-nano-banana-2.1" target="_blank" rel="noopener noreferrer">Per Google</a>, Nano Banana 2.1 improves visual quality and text rendering at 1K, 2K and 4K, fixes tiling on wide aspect ratios, takes up to 14 reference images, and supports Search grounding and configurable thinking levels.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p><strong>No Docker image upgrade needed.</strong> Hit <strong>Reload Model Cost Map</strong> in the Admin UI (or <code>POST /reload/model_cost_map</code>) to pull pricing, on <code>v1.76.0</code> and above.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="pricing">Pricing<a href="https://docs.litellm.ai/blog/nano_banana_2_1#pricing" class="hash-link" aria-label="Direct link to Pricing" title="Direct link to Pricing">​</a></h2>
<ul>
<li>Image output: $30 / MTok ($0.0336 per 1K image)</li>
<li>Text input: $1.50 / MTok</li>
<li>Text output: $7.50 / MTok</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="quick-start">Quick Start<a href="https://docs.litellm.ai/blog/nano_banana_2_1#quick-start" class="hash-link" aria-label="Direct link to Quick Start" title="Direct link to Quick Start">​</a></h2>
<div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">PROXY</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">SDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> nano</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">banana</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">2.1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gemini/gemini</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">nano</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">banana</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">2.1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/GEMINI_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> nano</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">banana</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">2.1</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">agent</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">platform</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> vertex_ai/gemini</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">nano</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">banana</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">2.1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">vertex_project</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/VERTEX_PROJECT</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">vertex_location</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> global</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">litellm --config /path/to/config.yaml</span><br></span></code></pre></div></div><p><strong>3. Test it</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl http://0.0.0.0:4000/v1/images/generations \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Authorization: Bearer $LITELLM_KEY" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Content-Type: application/json" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -d '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "model": "nano-banana-2.1",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "prompt": "A product shot of a ceramic mug on a walnut desk, soft morning light"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  }'</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#CF222E">import</span><span class="token plain"> litellm</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">response </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> litellm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">image_generation</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    model</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"gemini/gemini-nano-banana-2.1"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    prompt</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"A product shot of a ceramic mug on a walnut desk, soft morning light"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#CF222E">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#005CC5">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">b64_json</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">:</span><span class="token number" style="color:#005CC5">64</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="https://docs.litellm.ai/blog/nano_banana_2_1#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback">​</a></h2>
<p>Questions and feedback go in <a href="https://github.com/BerriAI/litellm/discussions/44983" target="_blank" rel="noopener noreferrer">GitHub discussion #44983</a>.</p>]]></content>
        <author>
            <name>Misbah Syed</name>
            <uri>https://github.com/misbahsy</uri>
        </author>
        <author>
            <name>Mateo Wang</name>
            <uri>https://www.linkedin.com/in/mateo-wang</uri>
        </author>
        <author>
            <name>Kerry Lu</name>
            <uri>https://github.com/kerry-berri</uri>
        </author>
        <category label="gemini" term="gemini"/>
        <category label="gemini enterprise agent platform" term="gemini enterprise agent platform"/>
        <category label="nano banana" term="nano banana"/>
        <category label="image generation" term="image generation"/>
        <category label="day 0 support" term="day 0 support"/>
        <category label="card_title:Nano Banana 2.1" term="card_title:Nano Banana 2.1"/>
        <category label="card_summary:Gemini image model with image output at half Nano Banana 2's price: $30 / MTok image out, $1.50 text in." term="card_summary:Gemini image model with image output at half Nano Banana 2's price: $30 / MTok image out, $1.50 text in."/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How LiteLLM Lens finds repeated failures across 1,000s of agent traces]]></title>
        <id>https://docs.litellm.ai/blog/lens-failure-patterns</id>
        <link href="https://docs.litellm.ai/blog/lens-failure-patterns"/>
        <updated>2026-10-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Inside Lens: parallel trace review, Python tools for large traces, and investigations that connect repeated failures to source evidence.]]></summary>
        <content type="html"><![CDATA[<p>A research agent can finish a report after reading the first 8,000 characters of each page. If its web tool cuts off a source and the agent fills in the gaps, you get a completed run with unsupported claims.</p>
<p>Across thousands of runs, you need to find the affected sessions and what they have in common. <a href="https://docs.litellm.ai/blog/litellm-lens-launch">LiteLLM Lens</a> uses agents to do that work.</p>
<p>Here's how it works behind the scenes: reviewers inspect executions in parallel, grouping agents connect related observations, and investigators check each candidate pattern against the original traces.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="Lens reviews executions in parallel, groups observations, investigates candidate patterns, and returns findings with source evidence." src="https://docs.litellm.ai/assets/images/01-pipeline-305f84b5f833e7cf7ae19e809f3fe3ea.svg" width="1440" height="450" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="phase-1-review-each-execution">Phase 1: Review each execution<a href="https://docs.litellm.ai/blog/lens-failure-patterns#phase-1-review-each-execution" class="hash-link" aria-label="Direct link to Phase 1: Review each execution" title="Direct link to Phase 1: Review each execution">​</a></h2>
<p>We give each execution its own reviewer and run the reviewers in parallel. Each has a complete run to investigate, because a tool response near the start may explain an incorrect answer hundreds of steps later.</p>
<p><img decoding="async" loading="lazy" alt="Each execution has a reviewer that can read, search, and use Python before returning observations with source quotes." src="https://docs.litellm.ai/assets/images/02-parallel-review-0bdb8b01c35435456bf8c06d554fbc80.svg" width="1440" height="550" class="img_ev3q"></p>
<p>The reviewer decides what to read and follows leads through tool results and subagent handoffs. It keeps going until it has observations to return, and can open other selected executions if it needs a comparison.</p>
<p>In the research example, a reviewer might notice that a page ends mid-sentence and the final answer contains claims the returned text doesn't support. It records what it found with citations and leaves the cause open for investigation.</p>
<p>We ask reviewers to examine the process as well as the outcome. An agent might try an incompatible <code>grep</code> tool five times before succeeding through a terminal. We want to keep those failed attempts in view, even though the agent completed the task.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="reviewers-can-use-python">Reviewers can use Python<a href="https://docs.litellm.ai/blog/lens-failure-patterns#reviewers-can-use-python" class="hash-link" aria-label="Direct link to Reviewers can use Python" title="Direct link to Reviewers can use Python">​</a></h2>
<p>We give reviewers a workspace containing the traces and tools to inspect them, much like a coding agent working in a repository. They can read and search the evidence, or write Python to answer questions that need computation.</p>
<p><img decoding="async" loading="lazy" alt="Reviewers use catalog, read, search, and confined Python to inspect the trace workspace. Selected text or computed output returns to the model." src="https://docs.litellm.ai/assets/images/05-evidence-workspace-028227638f3f5b9f73f2a5e732074c15.svg" width="1440" height="590" class="img_ev3q"></p>
<p>For the research example, a reviewer could write a short script to compare response lengths and find pages that stop at the same point. It uses those measurements to decide which responses to open and which claims to check. It can use the same approach to count repeated failures or reconstruct a sequence of subagent calls.</p>
<p>The traces stay in the workspace, and the reviewer brings the passages or computed results it needs into the model's context. A trace can be larger than the context window because the agent can search and analyze it in pieces.</p>
<p>Python runs in a confined environment without network access. As an investigation grows, the agents can compact their conversations into working notes and return to earlier evidence when they need it.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="phase-2-group-related-observations">Phase 2: Group related observations<a href="https://docs.litellm.ai/blog/lens-failure-patterns#phase-2-group-related-observations" class="hash-link" aria-label="Direct link to Phase 2: Group related observations" title="Direct link to Phase 2: Group related observations">​</a></h2>
<p>Several reviewers may flag the same underlying problem. We group their observations in parallel batches, then merge matches across batches so an investigator can examine the examples together.</p>
<p><img decoding="async" loading="lazy" alt="Lens groups observation batches in parallel and merges matching candidates across batches." src="https://docs.litellm.ai/assets/images/03-group-patterns-75766769e812f24df3ca5449ad7cdc9b.svg" width="1440" height="545" class="img_ev3q"></p>
<p>We group by the check and suspected cause. A missing PDF tool needs a different fix from a failing PDF renderer, so those should remain separate candidates.</p>
<p>For the page-cutoff example, we collect observations about abrupt endings and unsupported claims into a candidate about missing source content. The investigator gets examples from different runs, with links to their evidence, and can test whether one explanation accounts for them.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="phase-3-investigate-the-candidate">Phase 3: Investigate the candidate<a href="https://docs.litellm.ai/blog/lens-failure-patterns#phase-3-investigate-the-candidate" class="hash-link" aria-label="Direct link to Phase 3: Investigate the candidate" title="Direct link to Phase 3: Investigate the candidate">​</a></h2>
<p>We start an investigator for each candidate and run these agents in parallel. They get the reviewers' observations and access to the original traces, with the same read, search, and Python tools.</p>
<p><img decoding="async" loading="lazy" alt="An investigator checks original traces and review records, then submits a finding whose citations Lens validates." src="https://docs.litellm.ai/assets/images/04-investigate-171fb4339f37c495b8b285061da48da5.svg" width="1440" height="530" class="img_ev3q"></p>
<p>We send investigators back to the original traces because a reviewer may have left out context that changes the explanation. In the research case, the investigator compares page responses with final claims. It also looks for counterexamples, such as runs where the agent acknowledged missing information or fetched the rest of the source.</p>
<p>When different pages repeatedly return exactly 8,000 characters, that suggests the tool is cutting them off at a fixed limit. The investigator still needs to check whether the missing content explains a false claim, and distinguish that evidence from a plausible guess.</p>
<p>The investigator can drop a candidate that doesn't hold up. Before saving a finding, the worker checks its citations against the source and sends invalid quotes back for repair. An exact quote can still support a bad interpretation, so we check that distinction in our evaluations too.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="checking-the-design-on-a-real-trace">Checking the design on a real trace<a href="https://docs.litellm.ai/blog/lens-failure-patterns#checking-the-design-on-a-real-trace" class="hash-link" aria-label="Direct link to Checking the design on a real trace" title="Direct link to Checking the design on a real trace">​</a></h2>
<p>On a real coding-agent session with 350 spans, reviewers and investigators used Python to inspect validation commands. They found checks piped through <code>tail</code> that reported success even when the underlying check failed. Lens identified the problem and the later passing checks, without claiming those failures remained in the delivered code. We checked the findings' citations against the source.</p>
<p>A search in that session returned more than 544,000 characters. Tool access gives agents control over what they read, but they can still request too much. We inspect their tool use alongside the quality of their findings.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-results-reach-lens">How results reach Lens<a href="https://docs.litellm.ai/blog/lens-failure-patterns#how-results-reach-lens" class="hash-link" aria-label="Direct link to How results reach Lens" title="Direct link to How results reach Lens">​</a></h2>
<p>The worker sends progress and findings to the LiteLLM gateway, so you can watch completed reviews appear while other agents are still working. The findings link back to the original steps for inspection.</p>
<p><img decoding="async" loading="lazy" alt="The Lens worker polls LiteLLM for investigations, reads evidence and calls models through the gateway, then reports progress and findings." src="https://docs.litellm.ai/assets/images/06-deployment-bfd51e627f3a2ab9f66acefb25efb92f.svg" width="1440" height="650" class="img_ev3q"></p>
<p>The worker runs on your infrastructure and polls LiteLLM for jobs. It uses the gateway for evidence and calls to your chosen analysis model. ClickHouse stores traces, and Postgres stores investigation state. The <a href="https://github.com/BerriAI/litellm/blob/main/litellm/proxy/lens/context_pipeline.py" target="_blank" rel="noopener noreferrer">pipeline and tools</a> are open source.</p>
<p>For our architecture experiments, we built a golden dataset with 25 investigations, 3,752 sessions, and 99,797 spans. The controlled cases include nested agents, long tool results, healthy runs, and failures followed by recovery. Our architecture found all 11 expected failure patterns: <strong>100% recall</strong>.</p>
<p>To try it on your agent, <a href="https://docs.litellm.ai/docs/proxy/lens/investigations">connect a worker and create an investigation</a>.</p>]]></content>
        <author>
            <name>Moe Khalil</name>
            <uri>https://www.linkedin.com/in/moe-khalil-73a2371a1/</uri>
        </author>
        <category label="lens" term="lens"/>
        <category label="agent-tracing" term="agent-tracing"/>
        <category label="engineering" term="engineering"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How we cut time to first byte by 94% for long prompts]]></title>
        <id>https://docs.litellm.ai/blog/long-prompt-latency</id>
        <link href="https://docs.litellm.ai/blog/long-prompt-latency"/>
        <updated>2026-10-03T09:00:00.000Z</updated>
        <summary type="html"><![CDATA[A 440k-token benchmark went from 553 ms to 35 ms median time to first byte. We removed unnecessary prompt-cache routing work before the model call.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="LiteLLM&amp;#39;s median time to first byte drops from 553 ms to 35 ms in a local 440k-token, single-deployment benchmark, a 94% reduction" src="https://docs.litellm.ai/assets/images/cover-81c6d13c10d9a3a08429119655132189.gif" width="1800" height="900" class="img_ev3q"></p>
<p>LiteLLM was counting every token in a long conversation to answer a yes-or-no routing question.</p>
<p>Removing that unnecessary work took median time to first byte from <strong>553 ms to 35 ms</strong> in our local 440k-token benchmark: <strong>94% lower</strong>.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="counting-440000-tokens-to-check-for-1024">Counting 440,000 tokens to check for 1,024<a href="https://docs.litellm.ai/blog/long-prompt-latency#counting-440000-tokens-to-check-for-1024" class="hash-link" aria-label="Direct link to Counting 440,000 tokens to check for 1,024" title="Direct link to Counting 440,000 tokens to check for 1,024">​</a></h2>
<p>LiteLLM's optional <code>prompt_caching</code> routing check helps keep requests on deployments that can reuse their cached prompt. To check whether a prompt met a deployment's minimum size, often 1,024 tokens, it counted the entire conversation.</p>
<p>For a coding session with hundreds of turns and tool results, that could mean hundreds of milliseconds of Python work before the model call.</p>
<p><strong>We skip the check for one healthy deployment.</strong> There is no routing choice to make, so we now skip the eligibility count, prefix hash, and cache-pin lookup entirely. This is the path measured below.</p>
<p><strong>With multiple deployments, counting stops once the answer is known.</strong> The eligibility check stops after the first message that brings the count to the required minimum. Cache affinity and prefix hashing remain in place. Other uses of token counting, including usage accounting, are unchanged.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="553-ms--35-ms">553 ms → 35 ms<a href="https://docs.litellm.ai/blog/long-prompt-latency#553-ms--35-ms" class="hash-link" aria-label="Direct link to 553 ms → 35 ms" title="Direct link to 553 ms → 35 ms">​</a></h2>
<p>The benchmark used the Python request path, a 439,945-token conversation with 334 turns and 18 tools, one healthy deployment, Redis response caching, and the <code>prompt_caching</code> check enabled. The test provider replied immediately, isolating request overhead from model generation time.</p>
<figure class="figure_nzn9"><div class="heading_kEx2"><strong>Time to first byte</strong><span class="context_NojL">Median of three requests</span></div><div class="benchmarkGrid_QWMN"><div class="benchmarkCard_rBeg"><div class="cardHeading_sFsH"><span>Chat completions</span></div><div class="comparison_IS2T"><div><span class="metricLabel_yTWF">Before</span><span class="beforeValue_gQoO">553<small>ms</small></span></div><span class="arrow_kODc" aria-hidden="true">→</span><div class="after_M2Pj"><span class="metricLabel_yTWF">After</span><span class="afterValue_oIlf">35<small>ms</small></span></div></div></div><div class="benchmarkCard_rBeg"><div class="cardHeading_sFsH"><span>Messages</span></div><div class="comparison_IS2T"><div><span class="metricLabel_yTWF">Before</span><span class="beforeValue_gQoO">542<small>ms</small></span></div><span class="arrow_kODc" aria-hidden="true">→</span><div class="after_M2Pj"><span class="metricLabel_yTWF">After</span><span class="afterValue_oIlf">40<small>ms</small></span></div></div></div></div><figcaption class="caption_gHZw">440k-token conversation · prompt-caching check enabled · instant mock upstream</figcaption></figure>
<p>Each result is the median of three requests after one warmup, on the same local machine. <code>/v1/responses</code> already bypassed this check and stayed roughly flat. Requests without the optional check are unaffected. <a href="https://github.com/BerriAI/litellm/pull/44221" target="_blank" rel="noopener noreferrer">Full benchmark samples and setup</a>.</p>
<p>See the changes: <a href="https://github.com/BerriAI/litellm/pull/44221" target="_blank" rel="noopener noreferrer">prompt-cache routing optimization</a>.</p>]]></content>
        <author>
            <name>Yassin Kortam</name>
            <uri>https://www.linkedin.com/in/yassink/</uri>
        </author>
        <category label="performance" term="performance"/>
        <category label="proxy" term="proxy"/>
        <category label="engineering" term="engineering"/>
        <category label="ai-gateway" term="ai-gateway"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How we built our own internal Devin in 2 days]]></title>
        <id>https://docs.litellm.ai/blog/internal-devin-two-days</id>
        <link href="https://docs.litellm.ai/blog/internal-devin-two-days"/>
        <updated>2026-10-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[How we built Moyai Devin with Render, Modal, Hermes, Temporal, and LiteLLM: durable sessions, parallel agents, Slack, and shared organization connections.]]></summary>
        <content type="html"><![CDATA[<header class="hero_H9Sr"><div class="heading_o6GM"><time class="date_z7M7" datetime="2026-10-03T00:00:00.000Z">October 3, 2026</time><h1 class="title_WgQS">How we built our own internal Devin in 2 days</h1><p class="subtitle_xpTd">Our team's cloud coding agent, built with Render and Temporal.</p></div><figure id="cloud-workstation-hero" class="cloudHero_NRjK"><div class="cloudStage_tKby"><iframe class="cloudFrame_W6w0" src="/animations/internal-devin-two-days/index.html?embed=1" title="Animated Moyai cloud workstation: our internal Devin, hosted on Render with Temporal sessions" scrolling="no"></iframe></div><figcaption><span>Our internal Devin, running in the cloud.</span><button class="motionToggle_cgqN" aria-pressed="false">Pause animation</button></figcaption></figure></header><nav class="contents_Qkey" aria-label="In this post"><ol><li><a href="https://docs.litellm.ai/blog/internal-devin-two-days#1-main-architecture"><span>[<!-- -->1<!-- -->]</span><span class="dots__xWr" aria-hidden="true"></span><span>Main architecture</span></a></li><li><a href="https://docs.litellm.ai/blog/internal-devin-two-days#2-main-challenges"><span>[<!-- -->2<!-- -->]</span><span class="dots__xWr" aria-hidden="true"></span><span>Main challenges</span></a></li><li><a href="https://docs.litellm.ai/blog/internal-devin-two-days#3-whats-next-and-what-id-recommend"><span>[<!-- -->3<!-- -->]</span><span class="dots__xWr" aria-hidden="true"></span><span>What's next</span></a></li></ol></nav>
<div class="page_YtqF immersiveByline_XkdX horizontalByline_yJxG"><div class="inner_Too9"><span class="published_MQDR">Published: <time datetime="2026-10-03T00:00:00.000Z">Oct 3, 2026</time></span><div class="authors_hW1g"><span class="author_ZRh2"><a href="https://www.linkedin.com/in/tinchi-lo/" target="_blank" rel="noopener noreferrer" tabindex="-1" aria-hidden="true"><img src="https://docs.litellm.ai/img/authors/tin.png" alt="" class="avatar_Sim6"></a><span><a href="https://www.linkedin.com/in/tinchi-lo/" target="_blank" rel="noopener noreferrer" class="authorLink_BPAX"><b>Tin Lo</b></a><small>AI Product Engineer, LiteLLM</small></span></span></div></div></div>
<p>At BerriAI, we built <strong>Moyai Devin</strong>, 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.</p>
<!-- -->
<p>We wanted:</p>
<ul>
<li><strong>Cloud workspaces:</strong> run code, tests, and a browser without using someone's laptop.</li>
<li><strong>Shared organization connections:</strong> access Slack, Linear, Notion, and GitHub.</li>
<li><strong>Ongoing conversations:</strong> continue a task across Slack and the web.</li>
<li><strong>Parallel agents:</strong> split independent work across several machines.</li>
<li><strong>Model choice and spend tracking:</strong> choose Astra or Opus and attribute usage to each teammate.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-it-looks-like">What it looks like<a href="https://docs.litellm.ai/blog/internal-devin-two-days#what-it-looks-like" class="hash-link" aria-label="Direct link to What it looks like" title="Direct link to What it looks like">​</a></h2>
<figure class="demo_fj59"><video class="video_wQT_" controls="" muted="" playsinline="" preload="none" src="/assets/medias/bug-workflow-08b41275f096ef7fd90517574cc9b152.mp4" poster="/assets/ideal-img/bug-workflow-poster.9d3a3f1.1280.jpg" width="1600" height="1000" aria-label="18-second walkthrough of Moyai across Slack and the web: a real team workflow request, investigation, regression tests, and a pull request returned to the thread"><a href="https://docs.litellm.ai/assets/medias/bug-workflow-08b41275f096ef7fd90517574cc9b152.mp4">Watch the bug-fix walkthrough</a></video><figcaption class="caption_JM4l">A real <code>/personal:team</code> bug fix across Slack and the web. Edited 18-second walkthrough of a completed session; tests used a mocked Slack transport.</figcaption></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="1-main-architecture">1. Main architecture<a href="https://docs.litellm.ai/blog/internal-devin-two-days#1-main-architecture" class="hash-link" aria-label="Direct link to 1. Main architecture" title="Direct link to 1. Main architecture">​</a></h2>
<p>We split the system at the lifetime of a chat session. Render owns the conversation, permissions, and saved execution state. Temporal schedules the next step. Modal provides the computer where Hermes runs code and uses a browser.</p>
<p><img decoding="async" loading="lazy" alt="Moyai architecture: Slack and the web enter the Render application; Temporal coordinates sessions; Hermes executes in Modal sandboxes; the Render broker calls LiteLLM and connected applications." src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA5NjAgODAwIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idGl0bGUgZGVzYyI+Cjx0aXRsZSBpZD0idGl0bGUiPk1veWFpOiBhcHBsaWNhdGlvbiwgb3JjaGVzdHJhdGlvbiwgYW5kIGFnZW50IGNvbXB1dGVyczwvdGl0bGU+PGRlc2MgaWQ9ImRlc2MiPlNsYWNrIGFuZCB0aGUgd2ViIHNlbmQgbWVzc2FnZXMgdG8gdGhlIFJlbmRlciBhcHAuIFJlbmRlciBrZWVwcyBTUUxpdGUgc3RhdGUsIGEgVGVtcG9yYWwgd29ya2VyLCBhbmQgYSBjcmVkZW50aWFsIGJyb2tlci4gVGVtcG9yYWwgQ2xvdWQgY29vcmRpbmF0ZXMgb25lIHdvcmtmbG93IHBlciBzZXNzaW9uLiBIZXJtZXMgcnVucyBpbiBNb2RhbCBzYW5kYm94ZXMgYW5kIGNhbGxzIHRoZSBicm9rZXIgZm9yIG1vZGVsIGFuZCBjb25uZWN0ZWQtYXBwIGFjY2Vzcy4gUmVuZGVyIGNhbGxzIExpdGVMTE0gYW5kIG9yZ2FuaXphdGlvbiBpbnRlZ3JhdGlvbnMuPC9kZXNjPgo8ZGVmcz48bWFya2VyIGlkPSJhcnJvdyIgbWFya2VyV2lkdGg9IjgiIG1hcmtlckhlaWdodD0iOCIgcmVmWD0iNyIgcmVmWT0iNCIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0xIDEgTDcgNCBMMSA3IiBmaWxsPSJub25lIiBzdHJva2U9IiM5Mjk2YWMiIHN0cm9rZS13aWR0aD0iMS42Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iOTYwIiBoZWlnaHQ9IjgwMCIgcng9IjIwIiBmaWxsPSIjZmFmYWZmIi8+CjxnIGZvbnQtZmFtaWx5PSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBmaWxsPSIjMjAyMjNiIj4KPHRleHQgeD0iMzYiIHk9IjQzIiBmaWxsPSIjMjAyMjNiIiBmb250LXNpemU9IjI1IiBmb250LXdlaWdodD0iNjAwIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPkEgc2Vzc2lvbiBzcGFucyB0aHJlZSBzZXJ2aWNlczwvdGV4dD4KPHRleHQgeD0iMzYiIHk9IjcxIiBmaWxsPSIjNjQ2NzdlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNDAwIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPktlZXAgdGhlIGNvbnZlcnNhdGlvbiBkdXJhYmxlOyBnaXZlIGVhY2ggZXhlY3V0aW5nIGFnZW50IGl0cyBvd24gY29tcHV0ZXIuPC90ZXh0Pgo8cmVjdCB4PSIzNiIgeT0iMTU2IiB3aWR0aD0iMTgwIiBoZWlnaHQ9Ijg2IiByeD0iMTIiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2RlZGZlYyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNTYiIHk9IjE5MCIgZmlsbD0iIzIwMjIzYiIgZm9udC1zaXplPSIyMiIgZm9udC13ZWlnaHQ9IjYwMCIgdGV4dC1hbmNob3I9InN0YXJ0Ij5TbGFjazwvdGV4dD4KPHRleHQgeD0iNTYiIHk9IjIxNyIgZmlsbD0iIzY0Njc3ZSIgZm9udC1zaXplPSIxMyIgZm9udC13ZWlnaHQ9IjQwMCIgdGV4dC1hbmNob3I9InN0YXJ0Ij5NZW50aW9ucyArIHRocmVhZCByZXBsaWVzPC90ZXh0Pgo8cG9seWxpbmUgcG9pbnRzPSIyMTYsMTk5IDI4MCwxOTkiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkyOTZhYyIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBtYXJrZXItZW5kPSJ1cmwoI2Fycm93KSIvPgo8cmVjdCB4PSIzNiIgeT0iMjgwIiB3aWR0aD0iMTgwIiBoZWlnaHQ9Ijg2IiByeD0iMTIiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2RlZGZlYyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNTYiIHk9IjMxNCIgZmlsbD0iIzIwMjIzYiIgZm9udC1zaXplPSIyMiIgZm9udC13ZWlnaHQ9IjYwMCIgdGV4dC1hbmNob3I9InN0YXJ0Ij5XZWIgVUk8L3RleHQ+Cjx0ZXh0IHg9IjU2IiB5PSIzNDEiIGZpbGw9IiM2NDY3N2UiIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJzdGFydCI+Q2hhdCArIGZpbGVzICsgcHJvZ3Jlc3M8L3RleHQ+Cjxwb2x5bGluZSBwb2ludHM9IjIxNiwzMjMgMjgwLDMyMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTI5NmFjIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIG1hcmtlci1lbmQ9InVybCgjYXJyb3cpIi8+CjxyZWN0IHg9IjI4MCIgeT0iMTA4IiB3aWR0aD0iMzUwIiBoZWlnaHQ9IjQzMCIgcng9IjEyIiBmaWxsPSIjZjBlY2ZmIiBzdHJva2U9IiNiN2E3ZWYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjMwOCIgeT0iMTQ2IiBmaWxsPSIjNWIzZmQxIiBmb250LXNpemU9IjE0IiBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPlJFTkRFUjwvdGV4dD4KPHRleHQgeD0iMzA4IiB5PSIxODAiIGZpbGw9IiMyMDIyM2IiIGZvbnQtc2l6ZT0iMjQiIGZvbnQtd2VpZ2h0PSI2MDAiIHRleHQtYW5jaG9yPSJzdGFydCI+QXBwbGljYXRpb24gKyB3b3JrZXI8L3RleHQ+Cjx0ZXh0IHg9IjMwOCIgeT0iMjExIiBmaWxsPSIjMjAyMjNiIiBmb250LXNpemU9IjE3IiBmb250LXdlaWdodD0iNDAwIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPldlYiBBUEkgLyBzaWduZWQgU2xhY2sgaW50YWtlPC90ZXh0Pgo8cmVjdCB4PSIzMDYiIHk9IjIzNSIgd2lkdGg9IjI5OCIgaGVpZ2h0PSI5MiIgcng9IjgiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iI2Q3Y2NlZiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMzI0IiB5PSIyNjciIGZpbGw9IiMyMDIyM2IiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiIHRleHQtYW5jaG9yPSJzdGFydCI+UGVyc2lzdGVudCBTUUxpdGUgKyBhcnRpZmFjdHM8L3RleHQ+Cjx0ZXh0IHg9IjMyNCIgeT0iMjkzIiBmaWxsPSIjNjQ2NzdlIiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNDAwIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPk1lc3NhZ2VzLCBleGVjdXRpb24gcGhhc2VzLDwvdGV4dD4KPHRleHQgeD0iMzI0IiB5PSIzMTQiIGZpbGw9IiM2NDY3N2UiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJzdGFydCI+ZGVsaXZlcnkgcmVjZWlwdHMsIHNhdmVkIHJlc3VsdHM8L3RleHQ+Cjx0ZXh0IHg9IjMwOCIgeT0iMzY5IiBmaWxsPSIjMjAyMjNiIiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iNjAwIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPlRlbXBvcmFsIHdvcmtlcjwvdGV4dD4KPHRleHQgeD0iMzA4IiB5PSIzOTUiIGZpbGw9IiM2NDY3N2UiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJzdGFydCI+U3RhcnQgb3IgcmVjb25uZWN0IHRvIHRoZSBzYW5kYm94PC90ZXh0Pgo8dGV4dCB4PSIzMDgiIHk9IjQ1MSIgZmlsbD0iIzIwMjIzYiIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9IjYwMCIgdGV4dC1hbmNob3I9InN0YXJ0Ij5Ub29sICsgbW9kZWwgYnJva2VyPC90ZXh0Pgo8dGV4dCB4PSIzMDgiIHk9IjQ3NyIgZmlsbD0iIzY0Njc3ZSIgZm9udC1zaXplPSIxNSIgZm9udC13ZWlnaHQ9IjQwMCIgdGV4dC1hbmNob3I9InN0YXJ0Ij5DaGVjayB0aGUgc2Vzc2lvbiBjYXBhYmlsaXR5PC90ZXh0Pgo8dGV4dCB4PSIzMDgiIHk9IjUwMSIgZmlsbD0iIzY0Njc3ZSIgZm9udC1zaXplPSIxNSIgZm9udC13ZWlnaHQ9IjQwMCIgdGV4dC1hbmNob3I9InN0YXJ0Ij5LZWVwIHByb3ZpZGVyIGNyZWRlbnRpYWxzIGhlcmU8L3RleHQ+CjxyZWN0IHg9IjcwNCIgeT0iMTA4IiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjE2OCIgcng9IjEyIiBmaWxsPSIjZmZmMGUzIiBzdHJva2U9IiNlZmJiOTUiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjcyNSIgeT0iMTQ0IiBmaWxsPSIjOWE0ZTFhIiBmb250LXNpemU9IjE0IiBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPlRFTVBPUkFMIENMT1VEPC90ZXh0Pgo8dGV4dCB4PSI3MjUiIHk9IjE3OCIgZmlsbD0iIzIwMjIzYiIgZm9udC1zaXplPSIyMyIgZm9udC13ZWlnaHQ9IjYwMCIgdGV4dC1hbmNob3I9InN0YXJ0Ij5PbmUgd29ya2Zsb3c8L3RleHQ+Cjx0ZXh0IHg9IjcyNSIgeT0iMjA3IiBmaWxsPSIjMjAyMjNiIiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iNDAwIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPnBlciBjaGF0IHNlc3Npb248L3RleHQ+Cjx0ZXh0IHg9IjcyNSIgeT0iMjM4IiBmaWxsPSIjNjQ2NzdlIiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNDAwIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPlNpZ25hbHMsIHJldHJpZXMsIHRpbWVyczwvdGV4dD4KPHRleHQgeD0iNzI1IiB5PSIyNTgiIGZpbGw9IiM2NDY3N2UiIGZvbnQtc2l6ZT0iMTQiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJzdGFydCI+SURzICsgc21hbGwgc3RhdHVzIHZhbHVlczwvdGV4dD4KPHBvbHlsaW5lIHBvaW50cz0iNjMzLDE4OCA3MDEsMTg4IiBmaWxsPSJub25lIiBzdHJva2U9IiM5Mjk2YWMiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgbWFya2VyLWVuZD0idXJsKCNhcnJvdykiIG1hcmtlci1zdGFydD0idXJsKCNhcnJvdykiLz4KPHJlY3QgeD0iNzA0IiB5PSIzNjAiIHdpZHRoPSIyMjAiIGhlaWdodD0iMjYwIiByeD0iMTIiIGZpbGw9IiNlOGY4ZjIiIHN0cm9rZT0iIzkzY2NiYyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzI1IiB5PSIzOTYiIGZpbGw9IiMyNjc3NWUiIGZvbnQtc2l6ZT0iMTQiIGZvbnQtd2VpZ2h0PSI3MDAiIHRleHQtYW5jaG9yPSJzdGFydCI+TU9EQUw8L3RleHQ+Cjx0ZXh0IHg9IjcyNSIgeT0iNDMwIiBmaWxsPSIjMjAyMjNiIiBmb250LXNpemU9IjIzIiBmb250LXdlaWdodD0iNjAwIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPkhlcm1lcyBhZ2VudDwvdGV4dD4KPHRleHQgeD0iNzI1IiB5PSI0NTkiIGZpbGw9IiMyMDIyM2IiIGZvbnQtc2l6ZT0iMTQiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJzdGFydCI+VGVybWluYWwgLyBmaWxlcyAvIGJyb3dzZXI8L3RleHQ+Cjx0ZXh0IHg9IjcyNSIgeT0iNDg5IiBmaWxsPSIjNjQ2NzdlIiBmb250LXNpemU9IjE0IiBmb250LXdlaWdodD0iNDAwIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPkNhbGxzIHRoZSBSZW5kZXIgYnJva2VyPC90ZXh0Pgo8dGV4dCB4PSI3MjUiIHk9IjUxMSIgZmlsbD0iIzY0Njc3ZSIgZm9udC1zaXplPSIxNCIgZm9udC13ZWlnaHQ9IjQwMCIgdGV4dC1hbmNob3I9InN0YXJ0Ij5mb3IgbW9kZWxzIGFuZCBhcHAgdG9vbHM8L3RleHQ+Cjxwb2x5bGluZSBwb2ludHM9IjYzMyw0MzkgNzAxLDQzOSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTI5NmFjIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIG1hcmtlci1lbmQ9InVybCgjYXJyb3cpIiBtYXJrZXItc3RhcnQ9InVybCgjYXJyb3cpIi8+CjxyZWN0IHg9IjcyMiIgeT0iNTQxIiB3aWR0aD0iMTg0IiBoZWlnaHQ9IjU4IiByeD0iOCIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjYjdkYWNkIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI4MTQiIHk9IjU2NiIgZmlsbD0iIzIwMjIzYiIgZm9udC1zaXplPSIxNSIgZm9udC13ZWlnaHQ9IjYwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+RmlsZXN5c3RlbSBzbmFwc2hvdHM8L3RleHQ+Cjx0ZXh0IHg9IjgxNCIgeT0iNTg4IiBmaWxsPSIjNjQ2NzdlIiBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNDAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5TYXZlICsgcmVzdG9yZSB3b3Jrc3BhY2U8L3RleHQ+Cjxwb2x5bGluZSBwb2ludHM9IjM3NSw1NDAgMzc1LDY0MiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTI5NmFjIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIG1hcmtlci1lbmQ9InVybCgjYXJyb3cpIi8+Cjx0ZXh0IHg9IjM4NSIgeT0iNTkyIiBmaWxsPSIjNjQ2NzdlIiBmb250LXNpemU9IjE0IiBmb250LXdlaWdodD0iNDAwIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPk1vZGVsIHJlcXVlc3RzPC90ZXh0Pgo8cG9seWxpbmUgcG9pbnRzPSI1NzAsNTQwIDU3MCw2MDUgNjA3LDYwNSA2MDcsNjQyIiBmaWxsPSJub25lIiBzdHJva2U9IiM5Mjk2YWMiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgbWFya2VyLWVuZD0idXJsKCNhcnJvdykiLz4KPHRleHQgeD0iNTgyIiB5PSI1NzUiIGZpbGw9IiM2NDY3N2UiIGZvbnQtc2l6ZT0iMTQiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJzdGFydCI+QXBwcm92ZWQgYXBwIHRvb2xzPC90ZXh0Pgo8cmVjdCB4PSIyODAiIHk9IjY0NSIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIxMDgiIHJ4PSIxMiIgZmlsbD0iI2VjZWZmZiIgc3Ryb2tlPSIjYmJjM2YzIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIzMDIiIHk9IjY4MiIgZmlsbD0iIzNhNDhhNSIgZm9udC1zaXplPSIyMyIgZm9udC13ZWlnaHQ9IjYwMCIgdGV4dC1hbmNob3I9InN0YXJ0Ij5MaXRlTExNPC90ZXh0Pgo8dGV4dCB4PSIzMDIiIHk9IjcxMCIgZmlsbD0iIzIwMjIzYiIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjQwMCIgdGV4dC1hbmNob3I9InN0YXJ0Ij5Nb2RlbCBhY2Nlc3M8L3RleHQ+Cjx0ZXh0IHg9IjMwMiIgeT0iNzMzIiBmaWxsPSIjNjQ2NzdlIiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNDAwIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPlJlcXVlc3QgY29zdHM8L3RleHQ+CjxyZWN0IHg9IjUwMCIgeT0iNjQ1IiB3aWR0aD0iMjE1IiBoZWlnaHQ9IjEwOCIgcng9IjEyIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNkZWRmZWMiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjUyMiIgeT0iNjgyIiBmaWxsPSIjMjAyMjNiIiBmb250LXNpemU9IjIxIiBmb250LXdlaWdodD0iNjAwIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPkNvbm5lY3RlZCBhcHBzPC90ZXh0Pgo8dGV4dCB4PSI1MjIiIHk9IjcxMCIgZmlsbD0iIzIwMjIzYiIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjQwMCIgdGV4dC1hbmNob3I9InN0YXJ0Ij5HaXRIdWIgLyBTbGFjazwvdGV4dD4KPHRleHQgeD0iNTIyIiB5PSI3MzMiIGZpbGw9IiMyMDIyM2IiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJzdGFydCI+TGluZWFyIC8gTm90aW9uPC90ZXh0Pgo8dGV4dCB4PSIzNiIgeT0iNjkyIiBmaWxsPSIjMjAyMjNiIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPk9uZSBSZW5kZXIgaW5zdGFuY2U8L3RleHQ+Cjx0ZXh0IHg9IjM2IiB5PSI3MTkiIGZpbGw9IiM2NDY3N2UiIGZvbnQtc2l6ZT0iMTQiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJzdGFydCI+b3ducyB0aGUgcGVyc2lzdGVudCBkaXNrLjwvdGV4dD4KPHRleHQgeD0iMzYiIHk9Ijc0MiIgZmlsbD0iIzY0Njc3ZSIgZm9udC1zaXplPSIxNCIgZm9udC13ZWlnaHQ9IjQwMCIgdGV4dC1hbmNob3I9InN0YXJ0Ij5BZ2VudHMgc2NhbGUgaW4gTW9kYWwuPC90ZXh0Pgo8L2c+PC9zdmc+Cg==" width="960" height="800" class="img_ev3q"></p>
<p><a href="https://docs.litellm.ai/assets/files/architecture-2672ab900da017ef87c2856092b66c89.svg" target="_blank">Open the architecture diagram</a>. Model requests and connected-app tools return through the Render broker. The sandbox receives a session capability; provider credentials stay on the server.</p>
<p>We used five services:</p>
<table><thead><tr><th>Service</th><th>What we use it for</th></tr></thead><tbody><tr><td><a href="https://render.com/" target="_blank" rel="noopener noreferrer">Render</a></td><td>Web app, Google SSO, application database, integration broker, and Temporal worker</td></tr><tr><td><a href="https://modal.com/" target="_blank" rel="noopener noreferrer">Modal</a></td><td>Cloud sandboxes with a terminal, filesystem, and Chromium</td></tr><tr><td><a href="https://github.com/NousResearch/hermes-agent" target="_blank" rel="noopener noreferrer">Hermes Agent</a></td><td>The agent loop: call the model, execute tools, and continue from their results</td></tr><tr><td><a href="https://temporal.io/" target="_blank" rel="noopener noreferrer">Temporal Cloud</a></td><td>Session orchestration, waiting, and recovery across interruptions</td></tr><tr><td><a href="https://github.com/BerriAI/litellm" target="_blank" rel="noopener noreferrer">LiteLLM</a></td><td>Access to multiple models through one gateway, with request costs for accounting</td></tr></tbody></table>
<p><strong>Render hosts the application; Modal hosts the agent's computer.</strong> That separation lets us provision execution environments as work arrives.</p>
<p>Each executing agent gets a sandbox. After a response, we save its workspace and keep the sandbox warm for five minutes. Follow-ups can reuse it; later messages restore a new machine from the checkpoint.</p>
<p>We run one shared Temporal worker on Render to coordinate sessions. We don't need a worker container for each agent.</p>
<p>For storage, we started with SQLite on Render's persistent disk. That keeps deployment simple, but multiple Render instances would require a shared database and artifact store.</p>
<p>A Slack message follows this path: verify the request, find the session for that Slack thread, commit the message to the inbox, and wake its Temporal workflow. The worker loads the saved execution phase and starts or reconnects to the agent's Modal sandbox. We persist the answer before delivering it back to Slack and the web.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="2-main-challenges">2. Main challenges<a href="https://docs.litellm.ai/blog/internal-devin-two-days#2-main-challenges" class="hash-link" aria-label="Direct link to 2. Main challenges" title="Direct link to 2. Main challenges">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="keeping-work-alive-across-deployments">Keeping work alive across deployments<a href="https://docs.litellm.ai/blog/internal-devin-two-days#keeping-work-alive-across-deployments" class="hash-link" aria-label="Direct link to Keeping work alive across deployments" title="Direct link to Keeping work alive across deployments">​</a></h3>
<p>Deploying a new version restarts Moyai on Render. The agent can keep working in its Modal sandbox while the app comes back online.</p>
<p>Each service has a role in recovery:</p>
<ul>
<li><strong>Temporal</strong> keeps track of unfinished steps and retries them when a worker reconnects.</li>
<li><strong>Render's database</strong> keeps the chat, queued messages, and the details needed to find the running agent.</li>
<li><strong>Modal</strong> runs the agent and stores saved copies of its conversation history and files.</li>
</ul>
<p>After a restart, the new Render worker reads the saved session and reconnects to Temporal. Temporal sends it the unfinished step. Moyai reconnects to the same sandbox and picks up the agent's progress. We record agent launches so a retry won't start a second copy.</p>
<p><img decoding="async" loading="lazy" alt="Recovery sequence: Temporal schedules an activity, Render launches a detached supervisor in Modal, Render restarts, and a retried activity reconnects to the same sandbox and reads its journal." src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA5NjAgODYwIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idGl0bGUgZGVzYyI+Cjx0aXRsZSBpZD0idGl0bGUiPlJlY292ZXJpbmcgYW4gZXhlY3V0aW9uIGFmdGVyIFJlbmRlciByZXN0YXJ0czwvdGl0bGU+PGRlc2MgaWQ9ImRlc2MiPlRlbXBvcmFsIHNjaGVkdWxlcyBhZHZhbmNlX3Nlc3Npb24uIFJlbmRlciBzYXZlcyBhIGxhdW5jaCBwaGFzZSBhbmQgc3RhcnRzIGEgZGV0YWNoZWQgc3VwZXJ2aXNvciBpbiBNb2RhbC4gV2hlbiBSZW5kZXIgcmVzdGFydHMsIEhlcm1lcyBjYW4ga2VlcCBydW5uaW5nLiBUZW1wb3JhbCByZXRyaWVzIHRoZSBhY3Rpdml0eSwgYW5kIHRoZSByZXBsYWNlbWVudCBSZW5kZXIgd29ya2VyIHJlYWRzIHRoZSBleGlzdGluZyBzYW5kYm94IGpvdXJuYWwgaW5zdGVhZCBvZiBsYXVuY2hpbmcgSGVybWVzIGFnYWluLiBJZiBleGVjdXRpb24gY2Fubm90IGJlIGNvbmZpcm1lZCwgTW95YWkgcmVwb3J0cyBhbiBpbnRlcnJ1cHRpb24uPC9kZXNjPgo8ZGVmcz48bWFya2VyIGlkPSJhcnJvdyIgbWFya2VyV2lkdGg9IjgiIG1hcmtlckhlaWdodD0iOCIgcmVmWD0iNyIgcmVmWT0iNCIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0xIDEgTDcgNCBMMSA3IiBmaWxsPSJub25lIiBzdHJva2U9IiM5Mjk2YWMiIHN0cm9rZS13aWR0aD0iMS42Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iOTYwIiBoZWlnaHQ9Ijg2MCIgcng9IjIwIiBmaWxsPSIjZmFmYWZmIi8+CjxnIGZvbnQtZmFtaWx5PSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiBmaWxsPSIjMjAyMjNiIj4KPHRleHQgeD0iMzYiIHk9IjQzIiBmaWxsPSIjMjAyMjNiIiBmb250LXNpemU9IjI1IiBmb250LXdlaWdodD0iNjAwIiB0ZXh0LWFuY2hvcj0ic3RhcnQiPkEgcmV0cnkgcmVjb25uZWN0cyB0byBleGlzdGluZyB3b3JrPC90ZXh0Pgo8dGV4dCB4PSIzNiIgeT0iNzIiIGZpbGw9IiM2NDY3N2UiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJzdGFydCI+UmVjb3ZlcnkgcGF0aCB3aGVuIHRoZSBNb2RhbCBzYW5kYm94IHN1cnZpdmVzIHRoZSBSZW5kZXIgcmVzdGFydC48L3RleHQ+CjxyZWN0IHg9IjQwIiB5PSIxMDIiIHdpZHRoPSIyNDAiIGhlaWdodD0iODIiIHJ4PSIxMiIgZmlsbD0iI2ZmZjBlMyIgc3Ryb2tlPSIjZWZiYjk1IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIxNjAiIHk9IjEzNiIgZmlsbD0iIzIwMjIzYiIgZm9udC1zaXplPSIyMCIgZm9udC13ZWlnaHQ9IjYwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+VGVtcG9yYWwgQ2xvdWQ8L3RleHQ+Cjx0ZXh0IHg9IjE2MCIgeT0iMTY0IiBmaWxsPSIjNjQ2NzdlIiBmb250LXNpemU9IjE0IiBmb250LXdlaWdodD0iNDAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5Xb3JrZmxvdyBoaXN0b3J5PC90ZXh0Pgo8cGF0aCBkPSJNMTYwIDE4NyBWNzc1IiBzdHJva2U9IiNkNWQ3ZTMiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWRhc2hhcnJheT0iNSA3Ii8+CjxyZWN0IHg9IjM2MCIgeT0iMTAyIiB3aWR0aD0iMjQwIiBoZWlnaHQ9IjgyIiByeD0iMTIiIGZpbGw9IiNmMGVjZmYiIHN0cm9rZT0iI2I3YTdlZiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNDgwIiB5PSIxMzYiIGZpbGw9IiMyMDIyM2IiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI2MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPlJlbmRlciB3b3JrZXI8L3RleHQ+Cjx0ZXh0IHg9IjQ4MCIgeT0iMTY0IiBmaWxsPSIjNjQ2NzdlIiBmb250LXNpemU9IjE0IiBmb250LXdlaWdodD0iNDAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5TYXZlZCBleGVjdXRpb24gcGhhc2U8L3RleHQ+CjxwYXRoIGQ9Ik00ODAgMTg3IFY3NzUiIHN0cm9rZT0iI2Q1ZDdlMyIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtZGFzaGFycmF5PSI1IDciLz4KPHJlY3QgeD0iNjgwIiB5PSIxMDIiIHdpZHRoPSIyNDAiIGhlaWdodD0iODIiIHJ4PSIxMiIgZmlsbD0iI2U4ZjhmMiIgc3Ryb2tlPSIjOTNjY2JjIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI4MDAiIHk9IjEzNiIgZmlsbD0iIzIwMjIzYiIgZm9udC1zaXplPSIyMCIgZm9udC13ZWlnaHQ9IjYwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+TW9kYWwgc2FuZGJveDwvdGV4dD4KPHRleHQgeD0iODAwIiB5PSIxNjQiIGZpbGw9IiM2NDY3N2UiIGZvbnQtc2l6ZT0iMTQiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPkhlcm1lcyArIGV2ZW50IGpvdXJuYWw8L3RleHQ+CjxwYXRoIGQ9Ik04MDAgMTg3IFY3NzUiIHN0cm9rZT0iI2Q1ZDdlMyIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtZGFzaGFycmF5PSI1IDciLz4KPHBvbHlsaW5lIHBvaW50cz0iMTYwLDIxOCA0ODAsMjE4IiBmaWxsPSJub25lIiBzdHJva2U9IiM5Mjk2YWMiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgbWFya2VyLWVuZD0idXJsKCNhcnJvdykiLz4KPHRleHQgeD0iMzIwIiB5PSIyMDUiIGZpbGw9IiMyMDIyM2IiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPmFkdmFuY2Vfc2Vzc2lvbihydW5faWQpPC90ZXh0Pgo8cmVjdCB4PSIzNTYiIHk9IjI0MiIgd2lkdGg9IjI0OCIgaGVpZ2h0PSI1NCIgcng9IjgiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2Q3Y2NlZiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNDgwIiB5PSIyNjUiIGZpbGw9IiMyMDIyM2IiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI2MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPlBlcnNpc3Qgc2FuZGJveCBJRDwvdGV4dD4KPHRleHQgeD0iNDgwIiB5PSIyODYiIGZpbGw9IiM2NDY3N2UiIGZvbnQtc2l6ZT0iMTQiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPmFuZCBsYXVuY2ggcGhhc2U8L3RleHQ+Cjxwb2x5bGluZSBwb2ludHM9IjQ4MCwzMzAgODAwLDMzMCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTI5NmFjIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIG1hcmtlci1lbmQ9InVybCgjYXJyb3cpIi8+Cjx0ZXh0IHg9IjY0MCIgeT0iMzE3IiBmaWxsPSIjMjAyMjNiIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNDAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5TdGFydCBkZXRhY2hlZCBzdXBlcnZpc29yPC90ZXh0Pgo8cmVjdCB4PSI2ODQiIHk9IjM1MiIgd2lkdGg9IjIzMiIgaGVpZ2h0PSI5MyIgcng9IjgiIGZpbGw9IiNlOGY4ZjIiIHN0cm9rZT0iIzkzY2NiYyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iODAwIiB5PSIzODMiIGZpbGw9IiMyMDIyM2IiIGZvbnQtc2l6ZT0iMTciIGZvbnQtd2VpZ2h0PSI2MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPkhlcm1lcyBrZWVwcyBydW5uaW5nPC90ZXh0Pgo8dGV4dCB4PSI4MDAiIHk9IjQxMSIgZmlsbD0iIzY0Njc3ZSIgZm9udC1zaXplPSIxNCIgZm9udC13ZWlnaHQ9IjQwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+TG9jayBoZWxkOyBldmVudHMgd3JpdHRlbjwvdGV4dD4KPHRleHQgeD0iODAwIiB5PSI0MzEiIGZpbGw9IiM2NDY3N2UiIGZvbnQtc2l6ZT0iMTQiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnRvIHRoZSBzYW5kYm94IGpvdXJuYWw8L3RleHQ+CjxyZWN0IHg9IjM2NSIgeT0iMzc2IiB3aWR0aD0iMjMwIiBoZWlnaHQ9IjU3IiByeD0iOCIgZmlsbD0iI2ZmZjBlZSIgc3Ryb2tlPSIjZTRhNmEwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI0ODAiIHk9IjQxMSIgZmlsbD0iI2E4NDkzZCIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9IjYwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+UmVuZGVyIHJlc3RhcnRzPC90ZXh0Pgo8cG9seWxpbmUgcG9pbnRzPSIxNjAsNTA0IDQ4MCw1MDQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkyOTZhYyIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBtYXJrZXItZW5kPSJ1cmwoI2Fycm93KSIgc3Ryb2tlLWRhc2hhcnJheT0iNyA2Ii8+Cjx0ZXh0IHg9IjMyMCIgeT0iNDg5IiBmaWxsPSIjMjAyMjNiIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNDAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5SZXRyeSB0aGUgc2FtZSBhY3Rpdml0eTwvdGV4dD4KPHBvbHlsaW5lIHBvaW50cz0iNDgwLDU4MCA4MDAsNTgwIiBmaWxsPSJub25lIiBzdHJva2U9IiM5Mjk2YWMiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgbWFya2VyLWVuZD0idXJsKCNhcnJvdykiLz4KPHRleHQgeD0iNjQwIiB5PSI1NTMiIGZpbGw9IiMyMDIyM2IiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPlJlY29ubmVjdCB0byBzYXZlZCBzYW5kYm94OzwvdGV4dD4KPHRleHQgeD0iNjQwIiB5PSI1NzQiIGZpbGw9IiM2NDY3N2UiIGZvbnQtc2l6ZT0iMTQiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnJlYWQgZnJvbSB0aGUgbGFzdCBqb3VybmFsIG9mZnNldDwvdGV4dD4KPHBvbHlsaW5lIHBvaW50cz0iODAwLDY1NiA0ODAsNjU2IiBmaWxsPSJub25lIiBzdHJva2U9IiM5Mjk2YWMiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgbWFya2VyLWVuZD0idXJsKCNhcnJvdykiLz4KPHRleHQgeD0iNjQwIiB5PSI2NDEiIGZpbGw9IiMyMDIyM2IiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPkV2ZW50cyArIHNhdmVkIGZpbmFsIHJlc3VsdDwvdGV4dD4KPHBvbHlsaW5lIHBvaW50cz0iNDgwLDczMCAxNjAsNzMwIiBmaWxsPSJub25lIiBzdHJva2U9IiM5Mjk2YWMiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgbWFya2VyLWVuZD0idXJsKCNhcnJvdykiLz4KPHRleHQgeD0iMzIwIiB5PSI3MTUiIGZpbGw9IiMyMDIyM2IiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI0MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPlJldHVybiBuZXh0IHNlc3Npb24gc3RhdHVzPC90ZXh0Pgo8cmVjdCB4PSIzNiIgeT0iNzg4IiB3aWR0aD0iODg4IiBoZWlnaHQ9IjQ4IiByeD0iOCIgZmlsbD0iI2YyZjNmOSIgc3Ryb2tlPSIjZGVkZmVjIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI0ODAiIHk9IjgxOCIgZmlsbD0iIzIwMjIzYiIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjQwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+SWYgZXhlY3V0aW9uIGNhbm5vdCBiZSBjb25maXJtZWQsIHN0b3AgZm9yIHJldmlldyBpbnN0ZWFkIG9mIHJlcGVhdGluZyBleHRlcm5hbCB3cml0ZXMuPC90ZXh0Pgo8L2c+PC9zdmc+Cg==" width="960" height="860" class="img_ev3q"></p>
<p><a href="https://docs.litellm.ai/assets/files/recovery-014cb86b3c85ccc897127ac38b0d666d.svg" target="_blank">Open the recovery diagram</a>. This path assumes the Modal sandbox survives the Render restart.</p>
<p>The workflow calls a bounded activity with the session ID. This excerpt comes from our <code>SessionWorkflow</code>; the surrounding loop waits for message signals and rolls over its history with Continue-As-New.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">app/session_workflow.py · activity configuration</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">busy </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> </span><span class="token keyword" style="color:#CF222E">await</span><span class="token plain"> workflow</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">execute_activity</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#C6105F">"advance_session"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> run_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    start_to_close_timeout</span><span class="token operator" style="color:#D73A49">=</span><span class="token plain">timedelta</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">minutes</span><span class="token operator" style="color:#D73A49">=</span><span class="token number" style="color:#005CC5">15</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    heartbeat_timeout</span><span class="token operator" style="color:#D73A49">=</span><span class="token plain">timedelta</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">seconds</span><span class="token operator" style="color:#D73A49">=</span><span class="token number" style="color:#005CC5">30</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    retry_policy</span><span class="token operator" style="color:#D73A49">=</span><span class="token plain">RetryPolicy</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        initial_interval</span><span class="token operator" style="color:#D73A49">=</span><span class="token plain">timedelta</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">seconds</span><span class="token operator" style="color:#D73A49">=</span><span class="token number" style="color:#005CC5">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        maximum_interval</span><span class="token operator" style="color:#D73A49">=</span><span class="token plain">timedelta</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">seconds</span><span class="token operator" style="color:#D73A49">=</span><span class="token number" style="color:#005CC5">60</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p>The Render worker heartbeats every five seconds while it advances the session. If it stops heartbeating, Temporal can retry the activity on a replacement worker. We pass only the session ID and return small status values; prompts, credentials, and workspace files stay outside workflow history.</p>
<p>That retry boundary needed a second safeguard. Render could ask Modal to launch Hermes, lose the response, and retry the same request. We put the launch check inside a detached supervisor in the sandbox:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">sandbox/durable_process.py · launch guard, excerpt</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#CF222E">with</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">directory </span><span class="token operator" style="color:#D73A49">/</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"lock"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token builtin">open</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#C6105F">"a"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#CF222E">as</span><span class="token plain"> lock</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#CF222E">try</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fcntl</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">flock</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">lock</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> fcntl</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">LOCK_EX </span><span class="token operator" style="color:#D73A49">|</span><span class="token plain"> fcntl</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">LOCK_NB</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#CF222E">except</span><span class="token plain"> BlockingIOError</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#CF222E">return</span><span class="token plain">  </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># Another supervisor still owns this execution.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#CF222E">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">directory </span><span class="token operator" style="color:#D73A49">/</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"started.json"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">exists</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#CF222E">return</span><span class="token plain">  </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># A previous launch may already have run tools.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    atomic</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">directory </span><span class="token operator" style="color:#D73A49">/</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"started.json"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#C6105F">"pid"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">getpid</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># Still holding the lock, start Hermes and journal its events.</span><br></span></code></pre></div></div>
<p>Each execution segment has its own directory. Our <code>atomic</code> helper writes a temporary file, flushes it with <code>fsync</code>, and renames it into place. The supervisor holds the lock while Hermes runs, appends events to a journal, and saves the final result separately. After a disconnect, the replacement Render worker resumes reading at its saved journal offset.</p>
<p>The marker covers a different failure from the lock. A live supervisor holds the lock; a dead supervisor may leave only <code>started.json</code>. If we find a started marker without a live owner or confirmed result, we stop and report an interrupted execution. Starting over could repeat a tool that already changed an external system.</p>
<p>We save the conversation and files between tool rounds so we can restore them on a new sandbox. We also save the final answer before packaging files.</p>
<p>Retries need care: if creating a PR succeeds but its response gets lost, we check our publication records before trying again.</p>
<p>Temporal retries activities; it does not make external side effects exactly-once. A filesystem snapshot also excludes running processes and browser tabs. Losing the Render disk would lose our application records, so Temporal history cannot replace a database backup.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="orchestrating-parallel-agents">Orchestrating parallel agents<a href="https://docs.litellm.ai/blog/internal-devin-two-days#orchestrating-parallel-agents" class="hash-link" aria-label="Direct link to Orchestrating parallel agents" title="Direct link to Orchestrating parallel agents">​</a></h3>
<p>We wanted to support requests such as: "Run 100 test cases across five agents."</p>
<p>Our coordinator:</p>
<ol>
<li>Splits the work into five assignments.</li>
<li>Gives each worker an isolated copy of the workspace.</li>
<li>Saves its own state and releases its sandbox while waiting.</li>
<li>Resumes after the workers finish and collects their results.</li>
</ol>
<p>We verified that flow with five workers handling 20 deterministic cases each. Users can open individual workers from the sidebar to inspect progress or continue their conversations.</p>
<p>Sandbox capacity follows demand. Executing agents and sessions within the idle window consume machines; a coordinator waiting for children does not.</p>
<p>We configured a ceiling of 100 sandboxes. Our five-worker test validates the orchestration, but a 100-agent load test remains separate work. Modal quotas and the server's model-request limit also constrain concurrency.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="making-slack-behave-like-a-conversation">Making Slack behave like a conversation<a href="https://docs.litellm.ai/blog/internal-devin-two-days#making-slack-behave-like-a-conversation" class="hash-link" aria-label="Direct link to Making Slack behave like a conversation" title="Direct link to Making Slack behave like a conversation">​</a></h3>
<p>Slack took more work than receiving a mention and posting an answer.</p>
<p>We needed to:</p>
<ul>
<li>Read the discussion behind a request.</li>
<li>Continue the same session through thread replies and DMs.</li>
<li>Mirror web messages into the linked Slack thread.</li>
<li>Handle duplicate events without starting duplicate work.</li>
<li>Show working status and deliver answers to the correct conversation.</li>
</ul>
<p>We used <a href="https://github.com/BerriAI/agentchat" target="_blank" rel="noopener noreferrer">AgentChat</a> for normalized messages, conversation handling, replies, and working-status support.</p>
<p>Moyai adds persisted inbound and outbound message records, Slack signature verification, and web-session mirroring. AgentChat reduced the messaging code we had to build; we retained responsibility for durable delivery and permissions.</p>
<p>The subtle failure is acknowledging a Slack event before its message is durable. Slack might stop retrying even though we never queued the work. We save the receipt and user message in the same SQLite transaction. Here is the ordinary-message path, shortened after signature validation and thread-to-session lookup:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">app/slack_chat.py · shortened message intake</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#CF222E">with</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">store</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">connect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#CF222E">as</span><span class="token plain"> conn</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    conn</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">execute</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#C6105F">"BEGIN IMMEDIATE"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    duplicate </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> conn</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">execute</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token triple-quoted-string string" style="color:#C6105F">"""SELECT 1 FROM slack_receipts</span><br></span><span class="token-line" style="color:#393A34"><span class="token triple-quoted-string string" style="color:#C6105F">           WHERE event_id=?</span><br></span><span class="token-line" style="color:#393A34"><span class="token triple-quoted-string string" style="color:#C6105F">              OR (team_id=? AND channel=? AND message_ts=?)"""</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">event_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> team</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> channel</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> ts</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fetchone</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#CF222E">if</span><span class="token plain"> duplicate</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#CF222E">return</span><span class="token plain"> </span><span class="token boolean" style="color:#005CC5">None</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    message</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> _ </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">store</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">enqueue_message_in</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        conn</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> run_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> prompt</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#C6105F">"slack:"</span><span class="token plain"> </span><span class="token operator" style="color:#D73A49">+</span><span class="token plain"> digest</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">team </span><span class="token operator" style="color:#D73A49">+</span><span class="token plain"> channel </span><span class="token operator" style="color:#D73A49">+</span><span class="token plain"> ts</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        user_id</span><span class="token operator" style="color:#D73A49">=</span><span class="token plain">actor_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    conn</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">execute</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token triple-quoted-string string" style="color:#C6105F">"""INSERT INTO slack_receipts</span><br></span><span class="token-line" style="color:#393A34"><span class="token triple-quoted-string string" style="color:#C6105F">           (event_id, team_id, channel, message_ts,</span><br></span><span class="token-line" style="color:#393A34"><span class="token triple-quoted-string string" style="color:#C6105F">            user_id, run_id, message_id)</span><br></span><span class="token-line" style="color:#393A34"><span class="token triple-quoted-string string" style="color:#C6105F">           VALUES (?, ?, ?, ?, ?, ?, ?)"""</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">event_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> team</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> channel</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> ts</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> user</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> run_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> message</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#C6105F">"id"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p>We deduplicate both the delivery ID and the physical Slack message, identified by team, channel, and timestamp. The receipt table also enforces those keys with database constraints. Thread replies resolve through a separate <code>(team_id, channel, thread_ts)</code> mapping, so a follow-up joins the existing session instead of creating another agent.</p>
<p>The workflow wake is a separate step after this commit. We retain pending wake requests until Temporal accepts them, and startup recovery scans the inbox for queued work. That covers a restart between saving the message and dispatching it.</p>
<p>Sending an answer has an ambiguity of its own: Slack can accept a post before our connection drops. We mark an outbox row as <code>sending</code> before the request, then <code>sent</code> after a confirmed response. A timeout leaves it <code>uncertain</code>; we keep the answer in the web session and avoid an automatic duplicate post. That trades automatic redelivery for a visible delivery failure the user can inspect.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="sharing-access-without-handing-credentials-to-agents">Sharing access without handing credentials to agents<a href="https://docs.litellm.ai/blog/internal-devin-two-days#sharing-access-without-handing-credentials-to-agents" class="hash-link" aria-label="Direct link to Sharing access without handing credentials to agents" title="Direct link to Sharing access without handing credentials to agents">​</a></h3>
<p>Teammates sign in through Google Workspace and use organization connections. Provider credentials stay on the trusted server, behind tools that check the current session's permissions.</p>
<p>For GitHub, Moyai can prepare and publish a normal PR after administrator approval. We expose no tools for approving or merging PRs.</p>
<p>We also added personal and organization skills, plus secure credential requests with explicit sharing choices. Users can reuse instructions and supported API keys without pasting secrets into conversations.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="3-whats-next-and-what-id-recommend">3. What's next, and what I'd recommend<a href="https://docs.litellm.ai/blog/internal-devin-two-days#3-whats-next-and-what-id-recommend" class="hash-link" aria-label="Direct link to 3. What's next, and what I'd recommend" title="Direct link to 3. What's next, and what I'd recommend">​</a></h2>
<p>Our next priorities are:</p>
<ul>
<li><strong>Billing recovery.</strong> LiteLLM can bill a request whose final response never reaches Moyai. We track returned costs today; we're evaluating durable receipts to recover the missing ones.</li>
<li><strong>Higher-concurrency testing.</strong> Exercise larger worker groups, failure recovery, and resource limits before increasing usage.</li>
<li><strong>Total cost visibility.</strong> Combine model spend with Render, Modal, and Temporal charges.</li>
</ul>
<p>If you're building something similar, start with one complete session: accept a message, execute the task, save the answer and workspace, then resume from a follow-up.</p>
<p>Test a deployment interruption, duplicate Slack event, and failed workspace save before adding more concurrency. Those tests expose the gaps that a successful single prompt won't catch.</p>]]></content>
        <author>
            <name>Tin Lo</name>
            <uri>https://www.linkedin.com/in/tinchi-lo/</uri>
        </author>
        <category label="engineering" term="engineering"/>
        <category label="agents" term="agents"/>
        <category label="infrastructure" term="infrastructure"/>
        <category label="slack" term="slack"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Adding Self-hosted Auto Router Classifiers: Laya & Nimble]]></title>
        <id>https://docs.litellm.ai/blog/laya-nimble-classifiers</id>
        <link href="https://docs.litellm.ai/blog/laya-nimble-classifiers"/>
        <updated>2026-10-02T12:00:00.000Z</updated>
        <summary type="html"><![CDATA[Use Laya or Bespoke Nimble to classify Auto Router requests on your own infrastructure. Control where classification runs, which model you serve, and how you provision it.]]></summary>
        <content type="html"><![CDATA[<p>LiteLLM Auto Router now supports <strong>Laya</strong> and <strong>Bespoke Nimble</strong> as self-hosted classifiers. Run either model on your infrastructure to choose which completion model handles each request. Your application keeps calling the same router endpoint.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-self-host-a-classifier">Why self-host a classifier?<a href="https://docs.litellm.ai/blog/laya-nimble-classifiers#why-self-host-a-classifier" class="hash-link" aria-label="Direct link to Why self-host a classifier?" title="Direct link to Why self-host a classifier?">​</a></h2>
<p>Customers have asked to keep classification local, avoid another hosted classifier vendor, and use clusters they already operate. Self-hosting gives you control over:</p>
<ul>
<li><strong>Prompt data.</strong> Process classification context on servers you control, with your own access and logging policies.</li>
<li><strong>Vendor dependencies.</strong> Run the classifier without opening an account with a separate hosted classifier service.</li>
<li><strong>Deployment location.</strong> Choose the network and region where classification runs, including your existing private cluster.</li>
<li><strong>Capacity and latency tuning.</strong> Allocate compute for your traffic, keep the model warm, and place it near the gateway.</li>
<li><strong>Model versions.</strong> Choose the supported checkpoint you serve and decide when to roll out upgrades.</li>
<li><strong>Compute costs.</strong> Use your infrastructure budget and compare its cost against hosted inference on your workload.</li>
</ul>
<p>You operate and pay for the classifier service. Measure latency, routing quality, and total cost on your own traffic with the <a href="https://docs.litellm.ai/docs/auto_router/evaluate">evaluation guide</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-it-works">How it works<a href="https://docs.litellm.ai/blog/laya-nimble-classifiers#how-it-works" class="hash-link" aria-label="Direct link to How it works" title="Direct link to How it works">​</a></h2>
<ol>
<li>Your application sends a request to the LiteLLM Auto Router.</li>
<li>Your self-hosted classifier chooses a complexity tier, such as <code>SIMPLE</code> or <code>COMPLEX</code>.</li>
<li>LiteLLM calls a completion model assigned to that tier to generate the answer.</li>
</ol>
<p>The completion model still receives the request. You choose separately whether that model runs locally or through a hosted provider.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="get-started">Get started<a href="https://docs.litellm.ai/blog/laya-nimble-classifiers#get-started" class="hash-link" aria-label="Direct link to Get started" title="Direct link to Get started">​</a></h2>
<p>Connect your classifier endpoint to LiteLLM:</p>
<ul>
<li><strong><a href="https://docs.litellm.ai/docs/auto_router/decision_classifiers#laya-self-hosted-http-server">Connect Laya</a>:</strong> set your server's base URL, credentials, and classifier model.</li>
<li><strong><a href="https://docs.litellm.ai/docs/auto_router/decision_classifiers#nimble-self-hosted-system-one-server">Connect Nimble</a>:</strong> connect your System One endpoint and select the model it serves.</li>
</ul>
<p>In <strong>Models + Endpoints → Auto Router</strong>, select <strong>OSS Classifier</strong>, choose your provider, and assign completion models to tiers. Use <strong><a href="https://docs.litellm.ai/docs/auto_router/decision_classifiers#test-routing-and-send-a-request">Test Routing</a></strong> to inspect the choice before sending completions.</p>
<p>The <strong><a href="https://docs.litellm.ai/docs/auto_router/decision_classifiers">connection guide</a></strong> covers endpoint settings and credentials, with a <strong><a href="https://docs.litellm.ai/docs/auto_router/decision_classifiers#configure-the-router">complete YAML example</a></strong> for configuring tiers and fallback behavior. Jev remains available as the hosted classifier option.</p>]]></content>
        <author>
            <name>Tin Lo</name>
            <uri>https://www.linkedin.com/in/tinchi-lo/</uri>
        </author>
        <category label="auto-router" term="auto-router"/>
        <category label="product" term="product"/>
        <category label="ai-gateway" term="ai-gateway"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Launching LiteLLM Lens]]></title>
        <id>https://docs.litellm.ai/blog/litellm-lens-launch</id>
        <link href="https://docs.litellm.ai/blog/litellm-lens-launch"/>
        <updated>2026-10-01T09:00:00.000Z</updated>
        <summary type="html"><![CDATA[LiteLLM Lens turns the traces flowing through your gateway into findings your agents can act on. Built for agent swarms generating 200K+ traces.]]></summary>
        <content type="html"><![CDATA[
<!-- -->
<canvas class="stars_UdGB" aria-hidden="true"></canvas><section class="scroller_JrbL" data-stage="0"><div class="hero_kD2X"><div class="date_OxJY">October 1, 2026</div><h1 class="headline_XV85">LiteLLM Lens</h1><div class="stage_ZUnN"><div class="lens-hero field__LJY"><style>
.lens-hero { --bg: #ffffff; --fg: #12142b; --muted: #6b6f8c; --faint: rgba(18,20,43,0.075); --gate: #0017b7;
  position: relative; width: 100%; aspect-ratio: 16 / 8.2; margin: 0.5rem 0 2rem; }
[data-theme=&#x27;dark&#x27;] .lens-hero { --bg: #1b1b1d; --fg: #eceefe; --muted: #9296b8; --faint: rgba(236,238,254,0.07); --gate: #7085ff; }
.lens-hero canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.lens-hero .tag { position: absolute; font-family: var(--ifm-font-family-monospace); font-size: 12px; line-height: 1.35;
  color: var(--muted); background: color-mix(in srgb, var(--bg) 84%, transparent); padding: 3px 6px; border-radius: 3px;
  white-space: nowrap; pointer-events: none; }
.lens-hero .tag b { display: block; color: var(--fg); font-weight: 500; }
.lens-hero .tag.blue b { color: var(--gate); }
.lens-hero .t-swarm { left: 0; top: 0; }
.lens-hero .t-gate { left: 46%; top: 16%; transform: translateX(-50%); text-align: center; }
.lens-hero .t-out { right: 0; top: 22%; text-align: right; }
.lens-hero .t-loop { left: 71.5%; bottom: 2%; transform: translateX(-50%); text-align: center; }
.lens-hero .t-run { left: 71.5%; top: 60%; transform: translateX(-50%); text-align: center; font-variant-numeric: tabular-nums; }
@media (max-width: 640px) { .lens-hero .tag { font-size: 10px; } .lens-hero .t-out, .lens-hero .t-swarm { display: none; } }
</style><canvas aria-label="Agent swarms converge into the LiteLLM gateway, leave as one trace, and Lens loops insight back into the gateway"></canvas><div hidden=""></div></div><div class="label_JkSJ lSwarm_dMuD"><b>Agent swarms</b>200K+ traces from every agent</div><div class="label_JkSJ lGate_sDiZ"><b>LiteLLM gateway</b>every call, one chokepoint</div><div class="label_JkSJ lLens_fxhH"><b>Lens</b>insight flows back to your agents</div></div><p class="tagline_J8XG">The gateway that helps your agents improve</p></div></section><ol class="toc_a57f"><li><a href="https://docs.litellm.ai/blog/litellm-lens-launch#the-agentic-swarm-developer"><span>[<!-- -->1<!-- -->]</span><span class="dots_Kkn3" aria-hidden="true"></span><span>The agentic swarm developer</span></a></li><li><a href="https://docs.litellm.ai/blog/litellm-lens-launch#the-problem"><span>[<!-- -->2<!-- -->]</span><span class="dots_Kkn3" aria-hidden="true"></span><span>The problem</span></a></li><li><a href="https://docs.litellm.ai/blog/litellm-lens-launch#our-solution"><span>[<!-- -->3<!-- -->]</span><span class="dots_Kkn3" aria-hidden="true"></span><span>Our solution</span></a></li><li><a href="https://docs.litellm.ai/blog/litellm-lens-launch#launch-partners"><span>[<!-- -->4<!-- -->]</span><span class="dots_Kkn3" aria-hidden="true"></span><span>Launch partners</span></a></li><li><a href="https://docs.litellm.ai/blog/litellm-lens-launch#get-started"><span>[<!-- -->5<!-- -->]</span><span class="dots_Kkn3" aria-hidden="true"></span><span>Get started</span></a></li></ol>
<div class="page_YtqF immersiveByline_XkdX"><div class="inner_Too9"><span class="published_MQDR">Published: <time datetime="2026-10-01T09:00:00.000Z">Oct 1, 2026</time></span><div class="authors_hW1g"><span class="author_ZRh2"><a href="https://www.linkedin.com/in/reffajnaahsi/" target="_blank" rel="noopener noreferrer" tabindex="-1" aria-hidden="true"><img src="https://pbs.twimg.com/profile_images/1613813310264340481/lz54oEiB_400x400.jpg" alt="" class="avatar_Sim6"></a><span><a href="https://www.linkedin.com/in/reffajnaahsi/" target="_blank" rel="noopener noreferrer" class="authorLink_BPAX"><b>Ishaan Jaffer</b></a><small>CTO, LiteLLM</small></span></span><span class="author_ZRh2"><a href="https://www.linkedin.com/in/moe-khalil-73a2371a1/" target="_blank" rel="noopener noreferrer" tabindex="-1" aria-hidden="true"><img src="https://docs.litellm.ai/img/authors/moe.jpg" alt="" class="avatar_Sim6"></a><span><a href="https://www.linkedin.com/in/moe-khalil-73a2371a1/" target="_blank" rel="noopener noreferrer" class="authorLink_BPAX"><b>Moe Khalil</b></a><small>AI Product Engineer, LiteLLM</small></span></span><span class="author_ZRh2"><a href="https://www.linkedin.com/in/tinchi-lo/" target="_blank" rel="noopener noreferrer" tabindex="-1" aria-hidden="true"><img src="https://docs.litellm.ai/img/authors/tin.png" alt="" class="avatar_Sim6"></a><span><a href="https://www.linkedin.com/in/tinchi-lo/" target="_blank" rel="noopener noreferrer" class="authorLink_BPAX"><b>Tin Lo</b></a><small>AI Product Engineer, LiteLLM</small></span></span><span class="author_ZRh2"><a href="https://www.linkedin.com/in/yujong1ee/" target="_blank" rel="noopener noreferrer" tabindex="-1" aria-hidden="true"><img src="https://avatars.githubusercontent.com/u/61503739?v=4" alt="" class="avatar_Sim6"></a><span><a href="https://www.linkedin.com/in/yujong1ee/" target="_blank" rel="noopener noreferrer" class="authorLink_BPAX"><b>Yujong Lee</b></a><small>Senior SWE, LiteLLM</small></span></span></div></div></div>
<canvas class="rails_pW1p" aria-hidden="true"></canvas><nav class="sideNav_O1u7 sideNavShown_sova" aria-label="On this page"><div class="sideNavTitle_Sc9z">On this page</div><ol><li class="sideNavActive_GHNx"><a href="https://docs.litellm.ai/blog/litellm-lens-launch#the-agentic-swarm-developer"><span>[<!-- -->1<!-- -->]</span>The agentic swarm developer</a></li><li><a href="https://docs.litellm.ai/blog/litellm-lens-launch#the-problem"><span>[<!-- -->2<!-- -->]</span>The problem</a></li><li><a href="https://docs.litellm.ai/blog/litellm-lens-launch#our-solution"><span>[<!-- -->3<!-- -->]</span>Our solution</a></li><li><a href="https://docs.litellm.ai/blog/litellm-lens-launch#launch-partners"><span>[<!-- -->4<!-- -->]</span>Launch partners</a></li><li><a href="https://docs.litellm.ai/blog/litellm-lens-launch#get-started"><span>[<!-- -->5<!-- -->]</span>Get started</a></li></ol></nav>
<p>Today we're launching LiteLLM Lens. Tell Lens what to look for in your agents, let it analyze your traces, then read the findings and go deeper into any trace</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-agentic-swarm-developer">The agentic swarm developer<a href="https://docs.litellm.ai/blog/litellm-lens-launch#the-agentic-swarm-developer" class="hash-link" aria-label="Direct link to The agentic swarm developer" title="Direct link to The agentic swarm developer">​</a></h2>
<p>We're building for a future where developers run agentic swarms: hundreds of agents working in parallel, each one making LLM and tool calls, together generating 200K+ traces</p>
<p>LiteLLM is already the chokepoint for 100% of your enterprise's AI traffic, so every one of those calls already flows through the gateway</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-problem">The problem<a href="https://docs.litellm.ai/blog/litellm-lens-launch#the-problem" class="hash-link" aria-label="Direct link to The problem" title="Direct link to The problem">​</a></h2>
<p>Nobody can read 200K traces by hand. When a swarm gets something wrong, the evidence is spread across thousands of runs, and you can't tell what's working, what's failing, or how your agents should improve</p>
<p>Tracing platforms make it harder. Your data sits in someone else's system behind rate limits, so you can't point Codex or Claude Code at it to dig in</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="our-solution">Our solution<a href="https://docs.litellm.ai/blog/litellm-lens-launch#our-solution" class="hash-link" aria-label="Direct link to Our solution" title="Direct link to Our solution">​</a></h2>
<p>We believe the next era of the gateway is using the data flowing through it to help your agents improve. Lens does this in three steps, and puts an agent-first tracing API underneath them</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-tell-lens-what-to-look-for">1. Tell Lens what to look for<a href="https://docs.litellm.ai/blog/litellm-lens-launch#1-tell-lens-what-to-look-for" class="hash-link" aria-label="Direct link to 1. Tell Lens what to look for" title="Direct link to 1. Tell Lens what to look for">​</a></h3>
<p>For each of your agents, describe what you want Lens to look for. What does a good run look like, and what does a bad one look like? You can also add specific questions, one per line, like "Find tool failures the agent does not recover from"</p>
<p><img decoding="async" loading="lazy" alt="Saved agent context and checks for a research agent." src="https://docs.litellm.ai/assets/images/questions-and-checks-22216ddb975152adeeb2b8d784a5f680.png" width="2590" height="1788" class="img_ev3q"></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-lens-analyzes-your-traces">2. Lens analyzes your traces<a href="https://docs.litellm.ai/blog/litellm-lens-launch#2-lens-analyzes-your-traces" class="hash-link" aria-label="Direct link to 2. Lens analyzes your traces" title="Direct link to 2. Lens analyzes your traces">​</a></h3>
<p>Lens uses AI agents to review your traces for you. It investigates the runs, groups similar problems, and shows you its findings for each of your agents: what happened, what to do next, and the runs that support it</p>
<p><img decoding="async" loading="lazy" alt="A finding showing what happened, what to do next, and links to the supporting runs." src="https://docs.litellm.ai/assets/images/finding-detail-96c62adcac80ef5ace90f751d006ca21.png" width="1600" height="1894" class="img_ev3q"></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="3-read-the-findings-then-go-deeper-into-the-trace">3. Read the findings, then go deeper into the trace<a href="https://docs.litellm.ai/blog/litellm-lens-launch#3-read-the-findings-then-go-deeper-into-the-trace" class="hash-link" aria-label="Direct link to 3. Read the findings, then go deeper into the trace" title="Direct link to 3. Read the findings, then go deeper into the trace">​</a></h3>
<p>Start with the findings. When you need more, every finding links back to the exact step in the original trace, so you can read the input, output, and attributes behind it</p>
<p>An individual trace looks like this: the full step tree on the left, and the input and output of the selected step on the right</p>
<p><img decoding="async" loading="lazy" alt="An individual trace for a research agent, with its step tree, timing, and the selected step&amp;#39;s input and output." src="https://docs.litellm.ai/assets/images/trace-detail-research-lead-7ad17c201e5ab5c7087c4048eaaa8bb8.png" width="4005" height="3562" class="img_ev3q"></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="agent-first-tracing-apis">Agent-first tracing APIs<a href="https://docs.litellm.ai/blog/litellm-lens-launch#agent-first-tracing-apis" class="hash-link" aria-label="Direct link to Agent-first tracing APIs" title="Direct link to Agent-first tracing APIs">​</a></h3>
<p>Own your infra. Traces land in ClickHouse that you run, next to the LiteLLM gateway you already deploy. Query them with simple SQL, or let Codex and Claude Code analyze them through the tracing API without tracing-platform rate limits</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="launch-partners">Launch partners<a href="https://docs.litellm.ai/blog/litellm-lens-launch#launch-partners" class="hash-link" aria-label="Direct link to Launch partners" title="Direct link to Launch partners">​</a></h2>
<p>Lens was built and designed with our launch partners</p>
<figure class="partner_l72O"><a class="partnerName_y_dL" href="https://mindfort.ai/?utm_source=litellm&amp;utm_medium=spotlight&amp;utm_campaign=spotlight" target="_blank" rel="noopener noreferrer"><img src="https://docs.litellm.ai/img/blog/litellm_lens_launch/partners/mindfort.svg" alt="">MindFort</a><blockquote class="partnerQuote_uLiW"><p>“<!-- -->We built the world's first fully autonomous security swarm. MindFort uses thousands of agents that work together to find real, exploitable vulnerabilities live on target, then safely build and roll out patches, continuously.</p><p>We use Lens to power our internal applied AI research and production engineering, letting us analyze hundreds of thousands of agent interactions at scale while maintaining complete data sovereignty.<!-- -->”</p></blockquote><figcaption class="partnerAuthor_lTmr">Akul Gupta, Co-founder &amp; CTO, MindFort</figcaption></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="get-started">Get started<a href="https://docs.litellm.ai/blog/litellm-lens-launch#get-started" class="hash-link" aria-label="Direct link to Get started" title="Direct link to Get started">​</a></h2>
<p>The era of self-improving agents is here. <a href="https://forms.gle/3GC1Ner4vjthGWi18" target="_blank" rel="noopener noreferrer">Sign up for early access</a>, or follow the <a href="https://docs.litellm.ai/docs/proxy/lens">Lens docs</a> to deploy it on your own LiteLLM gateway today</p>]]></content>
        <author>
            <name>Ishaan Jaffer</name>
            <uri>https://www.linkedin.com/in/reffajnaahsi/</uri>
        </author>
        <author>
            <name>Moe Khalil</name>
            <uri>https://www.linkedin.com/in/moe-khalil-73a2371a1/</uri>
        </author>
        <author>
            <name>Tin Lo</name>
            <uri>https://www.linkedin.com/in/tinchi-lo/</uri>
        </author>
        <author>
            <name>Yujong Lee</name>
            <email>yujong@berri.ai</email>
            <uri>https://www.linkedin.com/in/yujong1ee/</uri>
        </author>
        <category label="lens" term="lens"/>
        <category label="agent-tracing" term="agent-tracing"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How we cut LiteLLM's Redis round trips per request by 64%]]></title>
        <id>https://docs.litellm.ai/blog/redis-request-pipelines</id>
        <link href="https://docs.litellm.ai/blog/redis-request-pipelines"/>
        <updated>2026-10-01T09:00:00.000Z</updated>
        <summary type="html"><![CDATA[A governed request to the LiteLLM AI Gateway waited on Redis 22 times. It now waits 8 times: one pipeline per Redis backend before the model call, one after.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="LiteLLM&amp;#39;s 22 Redis round trips merge into 8, a 64% reduction per request" src="https://docs.litellm.ai/assets/images/cover-be0674413e2f2820663db4946cc50660.gif" width="1620" height="900" class="img_ev3q"></p>
<p>This week, we cut the number of times a request to the LiteLLM proxy waits on Redis from <strong>22 to 8</strong>.</p>
<p>A request from a key with a budget, in a team with a budget and TPM/RPM limits, against a model group with usage-based routing and a Redis response cache, made 22 Redis round trips: 12 before the model was called and 10 after. The same request, with the same checks and the same writes, now makes <strong>5 before and 3 after</strong>.</p>
<!-- -->
<figure class="figure_o7gF"><div class="results_i98j"><div class="resultHeading_AJ8r"><p class="eyebrow_Mh6p">Redis round trips per request</p><span class="improvement_HD15">14 fewer Redis round trips per request</span></div><div class="timing_hjbg"><div class="beforeTime_BXMO"><span class="timeLabel_VchS">Before</span><span class="timeValue_Hhx_">22<span class="timeUnit_JhNW"> <!-- -->round trips</span></span></div><svg class="timingArrow_f6mt" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 12h15m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><div class="afterTime_RTF3"><span class="timeLabel_VchS">After</span><span class="timeValue_Hhx_">8<span class="timeUnit_JhNW"> <!-- -->round trips</span></span></div></div><table class="metrics_z24J" aria-label="Redis round trips: Redis round trips before and after"><thead><tr><th scope="col">Redis round trips</th><th scope="col">Before</th><th scope="col">After</th></tr></thead><tbody><tr><th scope="row">Before the model call</th><td>12</td><td>5</td></tr><tr><th scope="row">After the model call</th><td>10</td><td>3</td></tr><tr><th scope="row">Streaming request</th><td>24</td><td>8</td></tr><tr><th scope="row">Response-cache hit</th><td>18</td><td>7</td></tr><tr><th scope="row">Once-a-minute auth refresh</th><td>46</td><td>16</td></tr></tbody></table></div><figcaption class="caption_dHe4">One /v1/chat/completions request · key, team and end-user budgets · TPM and RPM limits · usage-based routing · response cache</figcaption></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-it-was-slow">Why it was slow<a href="https://docs.litellm.ai/blog/redis-request-pipelines#why-it-was-slow" class="hash-link" aria-label="Direct link to Why it was slow" title="Direct link to Why it was slow">​</a></h2>
<p>Seven parts of the proxy talk to Redis on a request: auth, spend counters, budget reservation, the rate limiter, the router, the response cache, and the post-call accounting. Each one read what it needed, decided, wrote, and returned before the next one started. The rate limiter alone ran three Lua scripts one after another. Budget reservation re-read the spend counters auth had just read, then sent one increment per entity.</p>
<p>Of the 22 round trips, <strong>5 carried information a decision depended on</strong>: the identity rows, the spend counters, the rate-limit scripts, the routing state and the response-cache lookup. The other 17 were re-reads of values already in hand, write-backs, and counter updates nothing waited for. Redis was never the bottleneck. The cost was waiting for the answer, 22 times in a row, on every request.</p>
<figure class="figure_o7gF"><div class="timeline_i6NJ"><div class="lane_NPTW"><div class="laneLabel_BapR"><div class="laneHeading_TQPa"><span class="laneName_H0Ib">Before</span><span class="laneTotal_W63K"><strong>22</strong> round trips</span></div><span class="laneCount_FoG8">12 before the model call, 10 after</span></div><ol class="trips_XZy4" aria-label="Before Redis round trips"><li class="trip_z37Z" data-owner="identity"><span class="tripOp__LZi">MGET</span><span class="tripDetail_G2ag">team, membership</span></li><li class="trip_z37Z" data-owner="identity"><span class="tripOp__LZi">SET</span><span class="tripDetail_G2ag">write back</span></li><li class="trip_z37Z" data-owner="spend"><span class="tripOp__LZi">MGET</span><span class="tripDetail_G2ag">spend counters</span></li><li class="trip_z37Z" data-owner="spend"><span class="tripOp__LZi">MGET</span><span class="tripDetail_G2ag">same counters</span></li><li class="trip_z37Z" data-owner="spend"><span class="tripOp__LZi">INCR</span><span class="tripDetail_G2ag">reserve key</span></li><li class="trip_z37Z" data-owner="spend"><span class="tripOp__LZi">INCR</span><span class="tripDetail_G2ag">reserve team</span></li><li class="trip_z37Z" data-owner="spend"><span class="tripOp__LZi">INCR</span><span class="tripDetail_G2ag">reserve end user</span></li><li class="trip_z37Z" data-owner="limits"><span class="tripOp__LZi">EVALSHA</span><span class="tripDetail_G2ag">RPM check</span></li><li class="trip_z37Z" data-owner="limits"><span class="tripOp__LZi">EVALSHA</span><span class="tripDetail_G2ag">key TPM</span></li><li class="trip_z37Z" data-owner="limits"><span class="tripOp__LZi">EVALSHA</span><span class="tripDetail_G2ag">team TPM</span></li><li class="trip_z37Z" data-owner="routing"><span class="tripOp__LZi">MGET</span><span class="tripDetail_G2ag">cooldowns, usage</span></li><li class="trip_z37Z" data-owner="cache"><span class="tripOp__LZi">GET</span><span class="tripDetail_G2ag">response cache</span></li><li class="provider_hv1C">model call</li><li class="trip_z37Z" data-owner="cache"><span class="tripOp__LZi">SET</span><span class="tripDetail_G2ag">response cache</span></li><li class="trip_z37Z" data-owner="spend"><span class="tripOp__LZi">MGET</span><span class="tripDetail_G2ag">spend counters</span></li><li class="trip_z37Z" data-owner="spend"><span class="tripOp__LZi">INCR</span><span class="tripDetail_G2ag">settle reservation</span></li><li class="trip_z37Z" data-owner="spend"><span class="tripOp__LZi">MGET</span><span class="tripDetail_G2ag">same counters</span></li><li class="trip_z37Z" data-owner="spend"><span class="tripOp__LZi">INCR</span><span class="tripDetail_G2ag">other counters</span></li><li class="trip_z37Z" data-owner="routing"><span class="tripOp__LZi">INCR</span><span class="tripDetail_G2ag">deployment TPM</span></li><li class="trip_z37Z" data-owner="spend"><span class="tripOp__LZi">GET</span><span class="tripDetail_G2ag">user spend</span></li><li class="trip_z37Z" data-owner="spend"><span class="tripOp__LZi">GET</span><span class="tripDetail_G2ag">tag spend</span></li><li class="trip_z37Z" data-owner="spend"><span class="tripOp__LZi">GET</span><span class="tripDetail_G2ag">tag spend</span></li><li class="trip_z37Z" data-owner="limits"><span class="tripOp__LZi">EVALSHA</span><span class="tripDetail_G2ag">token usage</span></li></ol></div><div class="lane_NPTW laneAfter_TJIT"><div class="laneLabel_BapR"><div class="laneHeading_TQPa"><span class="laneName_H0Ib">After</span><span class="laneTotal_W63K"><strong>8</strong> round trips</span></div><span class="laneCount_FoG8">5 before the model call, 3 after</span></div><ol class="trips_XZy4" aria-label="After Redis round trips"><li class="trip_z37Z" data-owner="mixed"><span class="tripOp__LZi">PIPELINE</span><span class="tripDetail_G2ag">identity MGET + spend MGET</span></li><li class="trip_z37Z" data-owner="spend"><span class="tripOp__LZi">PIPELINE</span><span class="tripDetail_G2ag">reserve key, team, end user</span></li><li class="trip_z37Z" data-owner="mixed"><span class="tripOp__LZi">PIPELINE</span><span class="tripDetail_G2ag">identity write back + routing MGET + RPM check</span></li><li class="trip_z37Z" data-owner="limits"><span class="tripOp__LZi">PIPELINE</span><span class="tripDetail_G2ag">key TPM + team TPM</span></li><li class="trip_z37Z" data-owner="cache"><span class="tripOp__LZi">GET</span><span class="tripDetail_G2ag">response cache</span></li><li class="provider_hv1C">model call</li><li class="trip_z37Z" data-owner="spend"><span class="tripOp__LZi">PIPELINE</span><span class="tripDetail_G2ag">spend counters</span></li><li class="trip_z37Z" data-owner="spend"><span class="tripOp__LZi">PIPELINE</span><span class="tripDetail_G2ag">user, tag spend</span></li><li class="trip_z37Z" data-owner="mixed"><span class="tripOp__LZi">PIPELINE</span><span class="tripDetail_G2ag">cache SET + 8 counter INCRs + deployment TPM + token usage</span></li></ol></div><div class="legend_voeT"><span class="legendItem__oOh"><span class="swatch_CmIJ" data-owner="identity"></span>Identity</span><span class="legendItem__oOh"><span class="swatch_CmIJ" data-owner="spend"></span>Spend and budgets</span><span class="legendItem__oOh"><span class="swatch_CmIJ" data-owner="limits"></span>Rate limits</span><span class="legendItem__oOh"><span class="swatch_CmIJ" data-owner="routing"></span>Routing</span><span class="legendItem__oOh"><span class="swatch_CmIJ" data-owner="cache"></span>Response cache</span><span class="legendItem__oOh"><span class="swatch_CmIJ" data-owner="mixed"></span>Shared pipeline</span></div></div><figcaption class="caption_dHe4">Every box is one wait on Redis. Same request, same checks, same writes.</figcaption></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-we-changed">What we changed<a href="https://docs.litellm.ai/blog/redis-request-pipelines#what-we-changed" class="hash-link" aria-label="Direct link to What we changed" title="Direct link to What we changed">​</a></h2>
<p><strong>Every request now owns one Redis batch per backend.</strong> Auth, the spend check, the rate limiter and the router declare their reads and scripts on it and get a handle back. The first time anyone awaits a handle, everything declared so far leaves as one pipeline, and every caller reads its own reply. The checks themselves did not move: budget rejects still happen in the budget code, rate-limit rejects in the rate limiter, in the same order as before.</p>
<figure class="figure_o7gF"><div class="flows_JY6Y"><div class="flow_Q9fj"><div><span class="flowLabel_TGsz">Before</span><p class="flowTitle_CU0V">Each subsystem reads, decides and writes before the next one starts</p></div><ol class="stages_D30Q" aria-label="Before request flow"><li class="stage_SFcE"><span class="stageLabel_Zqp1">Auth</span><span class="stageDetail_IpN3">Read identity rows, write them back, read the spend counters</span></li><li class="stage_SFcE"><svg class="flowArrow_hk3f" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 12h15m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="stageLabel_Zqp1">Budgets</span><span class="stageDetail_IpN3">Read the same spend counters again, then reserve with three increments</span></li><li class="stage_SFcE"><svg class="flowArrow_hk3f" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 12h15m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="stageLabel_Zqp1">Rate limits</span><span class="stageDetail_IpN3">Run the RPM script, then the key TPM script, then the team TPM script</span></li><li class="stage_SFcE"><svg class="flowArrow_hk3f" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 12h15m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="stageLabel_Zqp1">Routing and cache</span><span class="stageDetail_IpN3">Read cooldowns and usage, pick a deployment, read the response cache</span></li></ol></div><div class="flow_Q9fj after_xC4k"><div><span class="flowLabel_TGsz">After</span><p class="flowTitle_CU0V">Declare, flush once, decide</p></div><ol class="stages_D30Q" aria-label="After request flow"><li class="stage_SFcE"><span class="stageLabel_Zqp1">Declare</span><span class="stageDetail_IpN3">Auth, budgets, rate limits and routing queue their reads and scripts on the request batch and get a handle each</span></li><li class="stage_SFcE"><svg class="flowArrow_hk3f" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 12h15m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="stageLabel_Zqp1">Flush</span><span class="stageDetail_IpN3">The first await sends everything queued as one pipeline per Redis backend; every command gets its own reply</span></li><li class="stage_SFcE"><svg class="flowArrow_hk3f" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 12h15m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="stageLabel_Zqp1">Decide</span><span class="stageDetail_IpN3">Each subsystem reads its reply and runs the same checks in the same order; a failed command fails only its owner</span></li><li class="stage_SFcE"><svg class="flowArrow_hk3f" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 12h15m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="stageLabel_Zqp1">Settle</span><span class="stageDetail_IpN3">After the model call, writes collect in a post-call batch and leave in one pipeline once the callbacks finish</span></li></ol></div></div><figcaption class="caption_dHe4">Only the I/O scheduling changed. Every check still runs in the module that owns it.</figcaption></figure>
<p>After the model responds, nothing waits on the writes, so they collect in a post-call batch: the response-cache write, the spend increments, the deployment usage counter and the rate limiter's token script. They leave in one pipeline when the success or failure callbacks finish. A one-second deadline flushes the batch if no callback closes it, and shutdown drains whatever is still pending, so a pod restart does not lose accounting.</p>
<p>Each command in a pipeline gets its own reply. A Lua script that is not loaded fails only its owner, which falls back to a direct call exactly as it did before. A pipeline that fails as a whole looks to every owner like Redis being unreachable, which they already handle. Redis Cluster clients keep making direct calls, since a cluster pipeline fans out per node. Requests that touch two Redis backends get one pipeline per backend, and the proxy and router caches share a pipeline when they point at the same server.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="redis-round-trips-per-request-22--8">Redis round trips per request: 22 → 8<a href="https://docs.litellm.ai/blog/redis-request-pipelines#redis-round-trips-per-request-22--8" class="hash-link" aria-label="Direct link to Redis round trips per request: 22 → 8" title="Direct link to Redis round trips per request: 22 → 8">​</a></h2>
<p>The same harness ran every endpoint shape the proxy governs the same way, with and without streaming, with usage-based and simple-shuffle routing, and with a response-cache hit. <code>/v1/responses</code> keeps one extra round trip on each side because its native handler still makes two synchronous cache calls from a worker thread.</p>
<figure class="figure_o7gF"><table class="metrics_z24J" aria-label="Request: Redis round trips before and after"><thead><tr><th scope="col">Request</th><th scope="col">Before</th><th scope="col">After</th></tr></thead><tbody><tr><th scope="row"><code>/v1/chat/completions</code></th><td>22</td><td>8</td></tr><tr><th scope="row"><code>/v1/chat/completions</code><span class="requestVariant_Xf1E">streaming</span></th><td>24</td><td>8</td></tr><tr><th scope="row"><code>/v1/chat/completions</code><span class="requestVariant_Xf1E">simple-shuffle routing</span></th><td>22</td><td>8</td></tr><tr><th scope="row"><code>/v1/messages</code></th><td>21</td><td>8</td></tr><tr><th scope="row"><code>/v1/responses</code></th><td>26</td><td>9</td></tr><tr><th scope="row"><code>/v1/chat/completions</code><span class="requestVariant_Xf1E">response-cache hit</span></th><td>18</td><td>7</td></tr></tbody></table></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="auth-refresh-requests-46--16-redis-round-trips">Auth refresh requests: 46 → 16 Redis round trips<a href="https://docs.litellm.ai/blog/redis-request-pipelines#auth-refresh-requests-46--16-redis-round-trips" class="hash-link" aria-label="Direct link to Auth refresh requests: 46 → 16 Redis round trips" title="Direct link to Auth refresh requests: 46 → 16 Redis round trips">​</a></h2>
<p>Auth keeps its management objects, the key, the end user, the team and the model-access registry, in memory for 60 seconds. On the first request after they expire, the proxy refreshed each one from Redis and then Postgres one call at a time: 16 serial Redis trips before routing started, the end user, the key and the registry each read twice, and the team alias deleted with a synchronous call on the event loop. That request cost 46 round trips instead of 22, once a minute for every active key.</p>
<p>The same request now reads whatever memory is missing with one MGET on the request pipeline, reads the team, and sends the write-backs and the alias delete as one pipeline behind it. The refresh is 3 trips, and the request as a whole went from <strong>46 to 16 round trips</strong> for chat and from 40 to 14 for <code>/v1/messages</code>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-we-measured">How we measured<a href="https://docs.litellm.ai/blog/redis-request-pipelines#how-we-measured" class="hash-link" aria-label="Direct link to How we measured" title="Direct link to How we measured">​</a></h2>
<p>We measured both versions on the same local proxy, from the commit before this work (<code>27c110cb</code>) to main with all five changes in it (<code>13d004fc</code>): Redis 6.0 and Postgres 14, mock deployments so the count does not depend on a provider, and a tracer that logs every Redis call and every pipeline flush with its caller. A pipeline or a Lua script counts as one round trip. Every sample was preceded by a warm-up request 12 seconds earlier, and the harness idles for 65 seconds every three samples so the 60-second cache expiry never lands inside a sample. For the refresh case, the harness sent a warm-up request, waited 65 seconds and traced the next one. All requests returned HTTP 200 in both arms.</p>
<p>See the changes: <a href="https://github.com/BerriAI/litellm/pull/43320" target="_blank" rel="noopener noreferrer">routing reads</a>, <a href="https://github.com/BerriAI/litellm/pull/43369" target="_blank" rel="noopener noreferrer">spend counters</a>, <a href="https://github.com/BerriAI/litellm/pull/43407" target="_blank" rel="noopener noreferrer">the pre-call pipeline</a>, <a href="https://github.com/BerriAI/litellm/pull/43779" target="_blank" rel="noopener noreferrer">the post-call pipeline</a> and <a href="https://github.com/BerriAI/litellm/pull/43776" target="_blank" rel="noopener noreferrer">the auth refresh</a>.</p>]]></content>
        <author>
            <name>Yassin Kortam</name>
            <uri>https://www.linkedin.com/in/yassink/</uri>
        </author>
        <category label="performance" term="performance"/>
        <category label="redis" term="redis"/>
        <category label="proxy" term="proxy"/>
        <category label="engineering" term="engineering"/>
        <category label="ai-gateway" term="ai-gateway"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How we made the LiteLLM Usage page 120x faster]]></title>
        <id>https://docs.litellm.ai/blog/usage-page-bounded-loading</id>
        <link href="https://docs.litellm.ai/blog/usage-page-bounded-loading"/>
        <updated>2026-09-30T09:00:00.000Z</updated>
        <summary type="html"><![CDATA[From six minutes to 3.2 seconds: how moving aggregation into Postgres made LiteLLM's Usage page roughly 120x faster in our benchmark.]]></summary>
        <content type="html"><![CDATA[<p>This week, we made the LiteLLM Usage page roughly 120x faster.</p>
<p>With 5,000 API keys, our Usage page took <strong>over six minutes</strong> to show 30 days of totals. We redesigned how it loads data and brought that down to <strong>3.2 seconds</strong> in our benchmark. That's roughly <strong>120x faster</strong>.</p>
<!-- -->
<figure class="figure_K3lX"><div class="results_oF6b"><div class="resultHeading_hwA2"><p class="eyebrow_xoZB">Time to usage totals</p><span class="improvement_YvyX">120×<!-- --> faster in this benchmark</span></div><div class="timing_Itsf"><div class="beforeTime_sGle"><span class="timeLabel_VIR9">Before</span><span class="timeValue_N9Nm">386<span class="timeUnit_TctC">s</span></span></div><svg class="timingArrow_eqSJ" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 12h15m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><div class="afterTime_L9fR"><span class="timeLabel_VIR9">After</span><span class="timeValue_N9Nm">3.2<span class="timeUnit_TctC">s</span></span></div></div><table class="metrics_XaDM"><thead><tr><th scope="col">30-day page load</th><th scope="col">Before</th><th scope="col">After</th></tr></thead><tbody><tr><th scope="row">Usage requests</th><td>315</td><td>6</td></tr><tr><th scope="row">Data transferred</th><td>1.3 GB</td><td>17 MB</td></tr><tr><th scope="row">Peak browser heap</th><td>2.0 GB</td><td>72 MB</td></tr></tbody></table></div><figcaption class="caption_lv0v">30-day Usage view · 5,000 API keys · same database</figcaption></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-it-was-slow">Why it was slow<a href="https://docs.litellm.ai/blog/usage-page-bounded-loading#why-it-was-slow" class="hash-link" aria-label="Direct link to Why it was slow" title="Direct link to Why it was slow">​</a></h2>
<p>The browser downloaded every key's daily usage, 1,000 rows at a time, then calculated totals and rankings in JavaScript.</p>
<p>More keys and more history meant more requests, more data, and more work in the browser. Our 30-day test needed <strong>315 requests and 1.3 GB of data</strong> before the totals appeared.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-we-changed">What we changed<a href="https://docs.litellm.ai/blog/usage-page-bounded-loading#what-we-changed" class="hash-link" aria-label="Direct link to What we changed" title="Direct link to What we changed">​</a></h2>
<p><strong>Postgres now does the aggregation.</strong> The page receives calculated totals and usage breakdowns, instead of downloading every key's history to calculate them.</p>
<figure class="figure_K3lX"><div class="flows_I_1r"><div class="flow_ynXR"><div><span class="flowLabel_yBPG">Before</span><p class="flowTitle_xFtv">Download, then calculate</p></div><ol class="stages_gvrw" aria-label="Before data flow"><li class="stage_nVmF"><span class="stageLabel_VCxT">Database</span><span class="stageDetail_JmZ2">Daily rows for every key</span></li><li class="stage_nVmF"><svg class="flowArrow_bpTK" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 12h15m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="stageLabel_VCxT">Transfer</span><span class="stageDetail_JmZ2">Page through the results</span></li><li class="stage_nVmF"><svg class="flowArrow_bpTK" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 12h15m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="stageLabel_VCxT">Browser</span><span class="stageDetail_JmZ2">Sum totals and sort keys</span></li></ol></div><div class="flow_ynXR after_ZODV"><div><span class="flowLabel_yBPG">After</span><p class="flowTitle_xFtv">Calculate, then download</p></div><ol class="stages_gvrw" aria-label="After data flow"><li class="stage_nVmF"><span class="stageLabel_VCxT">Database</span><span class="stageDetail_JmZ2">Aggregate across all keys</span></li><li class="stage_nVmF"><svg class="flowArrow_bpTK" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 12h15m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="stageLabel_VCxT">Transfer</span><span class="stageDetail_JmZ2">Totals and usage breakdowns</span></li><li class="stage_nVmF"><svg class="flowArrow_bpTK" width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M4 12h15m-6-6 6 6-6 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="stageLabel_VCxT">Browser</span><span class="stageDetail_JmZ2">Display the results</span></li></ol></div></div><figcaption class="caption_lv0v">Aggregate in the database. Send less to the browser.</figcaption></figure>
<p>Totals still include <strong>all keys</strong> in the selected range. The key list loads 50 keys at a time as you scroll, and a key's daily charts load when you expand it, so the browser never holds every key's history. Search and CSV export run in Postgres too, so you can still find any virtual key and export complete usage data.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-results-hold-up-over-longer-ranges">The results hold up over longer ranges<a href="https://docs.litellm.ai/blog/usage-page-bounded-loading#the-results-hold-up-over-longer-ranges" class="hash-link" aria-label="Direct link to The results hold up over longer ranges" title="Direct link to The results hold up over longer ranges">​</a></h2>
<p>For 90 days of usage, time to totals fell from <strong>about 34 minutes to 10 seconds</strong>. The same redesign covers the User, Agent, Team, Tag, Organization, and Customer usage views.</p>
<p>We tested both designs against the same Postgres database: <strong>5,000 API keys and 4.9 million daily rows across 91 days</strong>. Both used production UI builds. New timings are medians of five runs with a cold browser cache; old timings come from runs allowed to finish beyond our 90-second cutoff. These measurements track time to visible totals. We later reran the final code side by side with the version we first measured, on a separate machine, and time to totals matched within 2%.</p>
<p><img decoding="async" loading="lazy" alt="LiteLLM Usage page Key Activity tab showing complete 30-day totals for 5,000 keys, with the key list loading below." src="https://docs.litellm.ai/assets/images/after_usage_30d-4b65413c1e34262c6db066a3aaebcb9a.png" width="1600" height="1000" class="img_ev3q"></p>
<p>See the changes: <a href="https://github.com/BerriAI/litellm/pull/43398" target="_blank" rel="noopener noreferrer">database queries</a>, <a href="https://github.com/BerriAI/litellm/pull/43408" target="_blank" rel="noopener noreferrer">API routes</a>, and <a href="https://github.com/BerriAI/litellm/pull/43409" target="_blank" rel="noopener noreferrer">Admin UI</a>. We're making it faster to see where your LLM spend is going, even as your deployment grows.</p>]]></content>
        <author>
            <name>Yassin Kortam</name>
            <uri>https://www.linkedin.com/in/yassink/</uri>
        </author>
        <category label="performance" term="performance"/>
        <category label="admin-ui" term="admin-ui"/>
        <category label="postgres" term="postgres"/>
        <category label="engineering" term="engineering"/>
        <category label="ai-gateway" term="ai-gateway"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Day 0 Support: GPT-6.1 Sol]]></title>
        <id>https://docs.litellm.ai/blog/gpt_6_1_sol</id>
        <link href="https://docs.litellm.ai/blog/gpt_6_1_sol"/>
        <updated>2026-09-29T12:00:00.000Z</updated>
        <summary type="html"><![CDATA[Day 0 support for GPT-6.1 Sol on LiteLLM, with cached input at half GPT-6 Sol's price.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="LiteLLM x GPT-6.1 Sol" src="https://docs.litellm.ai/assets/images/litellm_gpt_6_1_sol_announcement-c8521af0e74fa2c208af7ad7b2e494a9.png" width="4800" height="2508" class="img_ev3q"></p>
<p>LiteLLM now supports <a href="https://openai.com/index/introducing-gpt-6-1-sol/" target="_blank" rel="noopener noreferrer">GPT-6.1 Sol</a>. Route traffic to it through the LiteLLM AI Gateway with the same config you use for every other OpenAI model.</p>
<!-- -->
<p>GPT-6.1 Sol is an upgrade to GPT-6 Sol at the same $2 input and $10 output per 1M tokens, with cached input cut in half to $0.10. Per OpenAI, it matches GPT-6 Astra on DeepSWE v1.1 at roughly a fifth of the cost, and on Terminal-Bench Science it averages $5.47 a task against $23.21 for Opus 5.5.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p><strong>No image upgrade needed.</strong> Pricing landed in <a href="https://github.com/BerriAI/litellm/pull/43738" target="_blank" rel="noopener noreferrer">PR #43738</a>; hit <strong>Reload Model Cost Map</strong> in the Admin UI (or <code>POST /reload/model_cost_map</code>) to pull it, on <code>v1.76.0</code> and above.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="usage">Usage<a href="https://docs.litellm.ai/blog/gpt_6_1_sol#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h2>
<div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">LiteLLM Proxy</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">LiteLLM Python SDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">6.1</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sol</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> openai/gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">6.1</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sol</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/OPENAI_API_KEY</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -p 4000:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e OPENAI_API_KEY=$OPENAI_API_KEY \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/config.yaml:/app/config.yaml \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/berriai/litellm:main-latest \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --config /app/config.yaml</span><br></span></code></pre></div></div><p><strong>3. Test it</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl -X POST "http://0.0.0.0:4000/chat/completions" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Content-Type: application/json" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Authorization: Bearer $LITELLM_KEY" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -d '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "model": "gpt-6.1-sol",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "messages": [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      {"role": "user", "content": "Write a Python function to check if a number is prime."}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ],</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "reasoning_effort": "high"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  }'</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#CF222E">from</span><span class="token plain"> litellm </span><span class="token keyword" style="color:#CF222E">import</span><span class="token plain"> completion</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">response </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> completion</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    model</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"openai/gpt-6.1-sol"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    messages</span><span class="token operator" style="color:#D73A49">=</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#C6105F">"role"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"user"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"content"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"Write a Python function to check if a number is prime."</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    reasoning_effort</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"high"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#CF222E">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">choices</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#005CC5">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">message</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">content</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="pricing">Pricing<a href="https://docs.litellm.ai/blog/gpt_6_1_sol#pricing" class="hash-link" aria-label="Direct link to Pricing" title="Direct link to Pricing">​</a></h2>
<p>Per 1M tokens (USD), short context (≤272K tokens) / long context (&gt;272K tokens).</p>
<table><thead><tr><th>Model</th><th>Input</th><th>Cached input</th><th>Cache write</th><th>Output</th></tr></thead><tbody><tr><td><code>gpt-6.1-sol</code></td><td>$2.00 / $4.00</td><td>$0.10 / $0.20</td><td>$2.50 / $5.00</td><td>$10.00 / $15.00</td></tr></tbody></table>
<p>Batch and Flex run at half these rates and Fast mode at double; LiteLLM tracks all of them from the same cost map row.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="notes">Notes<a href="https://docs.litellm.ai/blog/gpt_6_1_sol#notes" class="hash-link" aria-label="Direct link to Notes" title="Direct link to Notes">​</a></h2>
<p>OpenAI serves tool calling for this model on the Responses API only. LiteLLM bridges a <code>/chat/completions</code> request with tools to <code>/v1/responses</code> for you, so existing tool-calling code keeps working.</p>
<p>Reasoning effort runs <code>low</code> to <code>max</code>, defaulting to <code>medium</code>. Unlike GPT-6 Sol, <code>none</code> is not supported, so <code>temperature</code> is not available on this model.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="https://docs.litellm.ai/blog/gpt_6_1_sol#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback">​</a></h2>
<p>Running GPT-6.1 Sol through LiteLLM and hitting something unexpected? Share it on <a href="https://github.com/BerriAI/litellm/discussions/43742" target="_blank" rel="noopener noreferrer">GitHub discussion #43742</a>.</p>]]></content>
        <author>
            <name>Misbah Syed</name>
            <uri>https://github.com/misbahsy</uri>
        </author>
        <author>
            <name>Mateo Wang</name>
            <uri>https://www.linkedin.com/in/mateo-wang</uri>
        </author>
        <author>
            <name>Kerry Lu</name>
            <uri>https://github.com/kerry-berri</uri>
        </author>
        <category label="openai" term="openai"/>
        <category label="gpt-6" term="gpt-6"/>
        <category label="gpt-6.1-sol" term="gpt-6.1-sol"/>
        <category label="completion" term="completion"/>
        <category label="day 0 support" term="day 0 support"/>
        <category label="card_title:GPT-6.1 Sol" term="card_title:GPT-6.1 Sol"/>
        <category label="card_summary:GPT-6 Sol successor with cached input at half GPT-6 Sol's price, same request family and params." term="card_summary:GPT-6 Sol successor with cached input at half GPT-6 Sol's price, same request family and params."/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Learn the LiteLLM gateway with a guided course]]></title>
        <id>https://docs.litellm.ai/blog/litellm-gateway-course</id>
        <link href="https://docs.litellm.ai/blog/litellm-gateway-course"/>
        <updated>2026-09-28T17:00:00.000Z</updated>
        <summary type="html"><![CDATA[Follow a request through the LiteLLM gateway, Router, and SDK. A guided course for teams deploying the gateway and contributors making code changes.]]></summary>
        <content type="html"><![CDATA[<img src="https://docs.litellm.ai/assets/ideal-img/hero.2356978.1280.png" alt="Learn the LiteLLM gateway at litellm.ai/course. Follow a request through gateway access checks, Router deployment selection, and SDK provider translation." class="themedComponent_mlkZ themedComponent--light_NVdE" style="width:100%"><img src="https://docs.litellm.ai/assets/ideal-img/hero-dark.b5f1ab5.1280.png" alt="Learn the LiteLLM gateway at litellm.ai/course. Follow a request through gateway access checks, Router deployment selection, and SDK provider translation." class="themedComponent_mlkZ themedComponent--dark_xIcU" style="width:100%">
<p>The <a href="https://litellm.ai/course" target="_blank" rel="noopener noreferrer">LiteLLM gateway course</a> walks you through how the gateway, Router, and SDK work together. We built it for developers and platform teams deploying LiteLLM, and contributors who want to understand the code before opening a pull request.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="start-with-one-request">Start with one request<a href="https://docs.litellm.ai/blog/litellm-gateway-course#start-with-one-request" class="hash-link" aria-label="Direct link to Start with one request" title="Direct link to Start with one request">​</a></h2>
<p>The first lessons follow a support app that sends a question to a model called <code>support-chat</code>. The gateway checks the caller's access. The Router chooses a deployment. The SDK translates the call into the provider's format.</p>
<p>Later lessons build on that same app. You add access rules, compare routing choices, follow retries and fallbacks, and see how costs and logs are recorded.</p>
<p>In <a href="https://litellm.ai/course#/lesson/request-lifetime" target="_blank" rel="noopener noreferrer">Follow one request</a>, you can switch between an allowed request, a denied model, and a blocked answer. Select a scenario to see which steps run and where the request stops.</p>
<p><img decoding="async" loading="lazy" alt="Request flow with Answer blocked selected. The provider generates an answer before a response check blocks delivery." src="https://docs.litellm.ai/assets/images/request-stops-1b5b1195ee9d9b0362c4bd7757914121.png" width="738" height="390" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="understand-the-deployment-you-run">Understand the deployment you run<a href="https://docs.litellm.ai/blog/litellm-gateway-course#understand-the-deployment-you-run" class="hash-link" aria-label="Direct link to Understand the deployment you run" title="Direct link to Understand the deployment you run">​</a></h2>
<p>For platform teams, the lessons cover everyday decisions: how to give a team access to models, set a budget, choose fallbacks, and investigate a failed request.</p>
<p>The operations chapters explain how gateway workers, Redis, and PostgreSQL fit together. Other chapters cover streaming, caching, tools, and agents.</p>
<p>Use the <a href="https://docs.litellm.ai/docs/proxy/prod" target="_blank" rel="noopener noreferrer">production guide</a> alongside the course when you configure your deployment.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="find-where-a-code-change-belongs">Find where a code change belongs<a href="https://docs.litellm.ai/blog/litellm-gateway-course#find-where-a-code-change-belongs" class="hash-link" aria-label="Direct link to Find where a code change belongs" title="Direct link to Find where a code change belongs">​</a></h2>
<p>For contributors, the course helps you find where a change belongs. A provider request in the wrong format points toward an SDK adapter. An unexpected deployment choice points toward the Router. A permission error starts with the gateway's access checks.</p>
<p>The lessons include <strong>Why this exists</strong> and <strong>Where the code lives</strong> sections. Open them to read the reason for a behavior and follow links to the relevant implementation, documentation, or tests.</p>
<p>The final chapter follows a change across the system, from a dashboard field to permissions, stored data, and the settings loaded by gateway workers. It shows you how to trace the behavior and choose what to test. The <a href="https://docs.litellm.ai/docs/extras/contributing_code" target="_blank" rel="noopener noreferrer">contribution guide</a> covers repository setup and the pull request process.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="take-the-course">Take the course<a href="https://docs.litellm.ai/blog/litellm-gateway-course#take-the-course" class="hash-link" aria-label="Direct link to Take the course" title="Direct link to Take the course">​</a></h2>
<p>The course has 83 lessons in 15 chapters. Follow the lessons in order, or use the sidebar to return to a topic. Your progress is saved in your browser. No login is required.</p>
<p><strong><a href="https://litellm.ai/course" target="_blank" rel="noopener noreferrer">Start the LiteLLM gateway course →</a></strong></p>]]></content>
        <author>
            <name>Moe Khalil</name>
            <uri>https://www.linkedin.com/in/moe-khalil-73a2371a1/</uri>
        </author>
        <category label="proxy" term="proxy"/>
        <category label="product" term="product"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Day 0 Support: Claude Sonnet 5.5]]></title>
        <id>https://docs.litellm.ai/blog/claude_sonnet_5_5</id>
        <link href="https://docs.litellm.ai/blog/claude_sonnet_5_5"/>
        <updated>2026-09-28T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Day 0 support for Claude Sonnet 5.5 on the LiteLLM AI Gateway. Use it across Anthropic, Bedrock, Gemini Enterprise Agent Platform, and Azure.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="LiteLLM x Claude Sonnet 5.5" src="https://docs.litellm.ai/assets/images/litellm_claude_sonnet_5_5_announcement-b67ee287e6ead46c827ffe8e4184caf5.png" width="4800" height="2508" class="img_ev3q"></p>
<p>LiteLLM now supports <a href="https://www.anthropic.com/claude-sonnet-5-5" target="_blank" rel="noopener noreferrer">Claude Sonnet 5.5</a> on Day 0. Use it across Anthropic, Bedrock, Gemini Enterprise Agent Platform, and Azure through the LiteLLM AI Gateway, with spend, rate limits, and logging in one place.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new-in-sonnet-55">What's new in Sonnet 5.5<a href="https://docs.litellm.ai/blog/claude_sonnet_5_5#whats-new-in-sonnet-55" class="hash-link" aria-label="Direct link to What's new in Sonnet 5.5" title="Direct link to What's new in Sonnet 5.5">​</a></h2>
<ul>
<li><strong>Same price as Sonnet 5:</strong> $2 / MTok input, $10 / MTok output, $0.20 / MTok cache reads</li>
<li><strong>30%+ faster</strong>, and up to 30% less per task, per Anthropic</li>
<li><strong>70.6% on Terminal-Bench 4.0</strong>, up from Sonnet 5's 10.3%</li>
<li><strong>1M-token context</strong>, up to 128K output tokens</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="enabling-sonnet-55">Enabling Sonnet 5.5<a href="https://docs.litellm.ai/blog/claude_sonnet_5_5#enabling-sonnet-55" class="hash-link" aria-label="Direct link to Enabling Sonnet 5.5" title="Direct link to Enabling Sonnet 5.5">​</a></h2>
<p>Pricing landed in <a href="https://github.com/BerriAI/litellm/pull/43586" target="_blank" rel="noopener noreferrer">PR #43586</a>. No upgrade needed: open <strong>Price Data</strong> under <strong>Models + Endpoints</strong> in the UI and click <strong>Reload Price Data</strong> (or <code>POST /reload/model_cost_map</code>), on <code>v1.76.0</code> and above.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="usage">Usage<a href="https://docs.litellm.ai/blog/claude_sonnet_5_5#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h2>
<div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Anthropic</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Bedrock</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Gemini Enterprise Agent Platform</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Azure</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> anthropic/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/ANTHROPIC_API_KEY</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -p 4000:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/config.yaml:/app/config.yaml \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/berriai/litellm:v1.103.0 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --config /app/config.yaml</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> bedrock/anthropic.claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">aws_access_key_id</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/AWS_ACCESS_KEY_ID</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">aws_secret_access_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/AWS_SECRET_ACCESS_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">aws_region_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> us</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">east</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">1</span><br></span></code></pre></div></div><div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>For cross-region routing, use a regional inference profile such as <code>bedrock/converse/us.anthropic.claude-sonnet-5-5</code>. Regional profiles carry a 10% premium and <code>global.</code> stays at base price; LiteLLM tracks each variant.</p></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -p 4000:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/config.yaml:/app/config.yaml \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/berriai/litellm:v1.103.0 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --config /app/config.yaml</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> vertex_ai/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">vertex_project</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/VERTEX_PROJECT</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">vertex_location</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> global</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -p 4000:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e VERTEX_PROJECT=$VERTEX_PROJECT \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e GOOGLE_APPLICATION_CREDENTIALS=/app/credentials.json \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/config.yaml:/app/config.yaml \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/credentials.json:/app/credentials.json \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/berriai/litellm:v1.103.0 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --config /app/config.yaml</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> azure_ai/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/AZURE_AI_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_base</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/AZURE_AI_API_BASE  </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># https://&lt;resource&gt;.services.ai.azure.com</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -p 4000:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e AZURE_AI_API_KEY=$AZURE_AI_API_KEY \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e AZURE_AI_API_BASE=$AZURE_AI_API_BASE \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/config.yaml:/app/config.yaml \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/berriai/litellm:v1.103.0 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --config /app/config.yaml</span><br></span></code></pre></div></div></div></div></div>
<p><strong>3. Test it!</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl --location 'http://0.0.0.0:4000/chat/completions' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--header 'Content-Type: application/json' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--header 'Authorization: Bearer $LITELLM_KEY' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--data '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "model": "claude-sonnet-5-5",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "messages": [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "role": "user",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "content": "what llm are you"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}'</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="worth-knowing">Worth knowing<a href="https://docs.litellm.ai/blog/claude_sonnet_5_5#worth-knowing" class="hash-link" aria-label="Direct link to Worth knowing" title="Direct link to Worth knowing">​</a></h2>
<p><strong>Forced tool use returns a 400.</strong> Use <code>tool_choice: "auto"</code> and say in the prompt when the tool applies.</p>
<p><strong><code>thinking: {"type": "disabled"}</code> returns a 400.</strong> Anthropic's replacement is <code>between_tools</code>; see their <a href="https://platform.claude.com/docs/en/models/sonnet-5-5/migration-guide" target="_blank" rel="noopener noreferrer">migration guide</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="https://docs.litellm.ai/blog/claude_sonnet_5_5#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback">​</a></h2>
<p>Running Claude Sonnet 5.5 through LiteLLM and hitting something unexpected? Share it on <a href="https://github.com/BerriAI/litellm/discussions/43590" target="_blank" rel="noopener noreferrer">GitHub discussion #43590</a>.</p>]]></content>
        <author>
            <name>Misbah Syed</name>
            <uri>https://github.com/misbahsy</uri>
        </author>
        <author>
            <name>Mateo Wang</name>
            <uri>https://www.linkedin.com/in/mateo-wang</uri>
        </author>
        <author>
            <name>Kerry Lu</name>
            <uri>https://github.com/kerry-berri</uri>
        </author>
        <category label="anthropic" term="anthropic"/>
        <category label="claude" term="claude"/>
        <category label="sonnet 5.5" term="sonnet 5.5"/>
        <category label="day 0 support" term="day 0 support"/>
        <category label="card_title:Claude Sonnet 5.5" term="card_title:Claude Sonnet 5.5"/>
        <category label="card_summary:Same $2 / $10 price as Sonnet 5, 30%+ faster, 70.6% on Terminal-Bench 4.0 (Sonnet 5: 10.3%), 1M context." term="card_summary:Same $2 / $10 price as Sonnet 5, 30%+ faster, 70.6% on Terminal-Bench 4.0 (Sonnet 5: 10.3%), 1M context."/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Introducing the LiteLLM ROI Calculator]]></title>
        <id>https://docs.litellm.ai/blog/litellm-roi-calculator</id>
        <link href="https://docs.litellm.ai/blog/litellm-roi-calculator"/>
        <updated>2026-09-26T17:00:00.000Z</updated>
        <summary type="html"><![CDATA[Compare each engineer's LiteLLM gateway spend with the estimated effort of their merged pull requests. Open source and self-hosted.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="LiteLLM ROI Calculator overview: $258 of matched gateway spend compared with 78 estimated engineering hours, or $3.31 per estimated hour, above a list of merged pull requests." src="https://docs.litellm.ai/assets/images/overview-62a7703ebeae1bbf7e4ef9328a303545.png" width="1280" height="690" class="img_ev3q"></p>
<p>Your gateway tells you what your team spends on AI. It doesn't tell you what that spend produced.</p>
<p><strong>The <a href="https://github.com/BerriAI/litellm-roi-calculator" target="_blank" rel="noopener noreferrer">LiteLLM ROI Calculator</a> compares gateway spend with the engineering work your team ships.</strong> It reads spend per user from LiteLLM, estimates the effort in each merged pull request with a model you choose, and matches people by email. The result is one number: spend per estimated engineering hour.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="connect-your-gateway-and-github">Connect your gateway and GitHub<a href="https://docs.litellm.ai/blog/litellm-roi-calculator#connect-your-gateway-and-github" class="hash-link" aria-label="Direct link to Connect your gateway and GitHub" title="Direct link to Connect your gateway and GitHub">​</a></h2>
<p>Run it locally with one command:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git clone https://github.com/BerriAI/litellm-roi-calculator.git</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cd litellm-roi-calculator</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">uv run litellm-roi</span><br></span></code></pre></div></div>
<p>The app opens at <code>http://localhost:8787</code>. There is no database server, Node installation, or frontend build.</p>
<p>Setup takes three steps:</p>
<ul>
<li><strong>Gateway:</strong> enter your gateway URL and an admin or read-only admin key that can read users and spend.</li>
<li><strong>GitHub:</strong> click <strong>Connect GitHub</strong>. GitHub walks you through creating a read-only App and choosing its repositories. There are no client IDs or secrets to copy.</li>
<li><strong>Model and schedule:</strong> pick a model from your gateway. A small model such as GPT Luna or Claude Haiku works well.</li>
</ul>
<p><img decoding="async" loading="lazy" alt="Repository picker with two sample repositories selected" src="https://docs.litellm.ai/assets/images/setup-repositories-e0980e9acba9d89d73031745a0945096.png" width="720" height="720" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="estimate-every-merged-pull-request">Estimate every merged pull request<a href="https://docs.litellm.ai/blog/litellm-roi-calculator#estimate-every-merged-pull-request" class="hash-link" aria-label="Direct link to Estimate every merged pull request" title="Direct link to Estimate every merged pull request">​</a></h2>
<p>For each merged PR, the model answers one question:</p>
<blockquote>
<p>Estimate how many hours it would take an engineer to complete the work in this pull request without AI assistance. Explain your estimate briefly.</p>
</blockquote>
<p>The model sees the PR description, file change counts, and commit metadata. Code patches are never sent. Temperature is fixed at 0, and you can edit the prompt, backfill window, and update interval in <strong>Settings</strong>.</p>
<p><img decoding="async" loading="lazy" alt="Estimator setup with a model, a seven-day backfill, and a 24-hour update interval" src="https://docs.litellm.ai/assets/images/setup-estimator-3ee2c7c27e0e884b87e9ef22f8673717.png" width="720" height="670" class="img_ev3q"></p>
<p>Click <strong>Start backfill</strong> and the app imports spend and PRs, then estimates up to three PRs at a time. After that it refreshes on your schedule. Unchanged PRs reuse their cached estimates, so you only pay to estimate new or changed work.</p>
<p><img decoding="async" loading="lazy" alt="Backfill progress showing completed import stages, PR count, elapsed time, and estimated time remaining" src="https://docs.litellm.ai/assets/images/backfill-4c5221ffab34d69ea2e371cf8310e6b4.png" width="720" height="600" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="read-the-report">Read the report<a href="https://docs.litellm.ai/blog/litellm-roi-calculator#read-the-report" class="hash-link" aria-label="Direct link to Read the report" title="Direct link to Read the report">​</a></h2>
<ul>
<li><strong>Overview:</strong> matched spend divided by estimated hours. Click any PR to see its estimate and the model's reasoning.</li>
<li><strong>People:</strong> spend and estimated hours per engineer. Use <strong>Match email</strong> when someone's GitHub email differs from their gateway email.</li>
<li><strong>Calculation details:</strong> shows how much spend was matched and what was excluded.</li>
</ul>
<p>In the sample report above, $258 of matched spend ÷ 78 estimated hours = <strong>$3.31 per estimated hour</strong>. These are estimates of engineering effort, not hours worked or hours saved. Each person's spend covers all of their gateway usage, not costs attributed to a specific PR.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="host-it-for-your-team">Host it for your team<a href="https://docs.litellm.ai/blog/litellm-roi-calculator#host-it-for-your-team" class="hash-link" aria-label="Direct link to Host it for your team" title="Direct link to Host it for your team">​</a></h2>
<p>The repository includes a Render blueprint for a single shared instance with a persistent disk. It has no built-in dashboard login, so put it behind your hosting provider's access controls or an SSO proxy before sharing company data. Keys stay on the server, and PR metadata only goes to the model you picked, through your own gateway.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="get-started">Get started<a href="https://docs.litellm.ai/blog/litellm-roi-calculator#get-started" class="hash-link" aria-label="Direct link to Get started" title="Direct link to Get started">​</a></h2>
<p>The ROI Calculator is open source under Apache 2.0. Clone <a href="https://github.com/BerriAI/litellm-roi-calculator" target="_blank" rel="noopener noreferrer">BerriAI/litellm-roi-calculator</a>, follow the README, or <a href="https://github.com/BerriAI/litellm-roi-calculator/blob/main/docs/running.md" target="_blank" rel="noopener noreferrer">explore the demo without credentials</a>.</p>
<p>Try it on your team's last week of PRs and <a href="https://github.com/BerriAI/litellm-roi-calculator/issues" target="_blank" rel="noopener noreferrer">tell us what you find</a>.</p>]]></content>
        <author>
            <name>Moe Khalil</name>
            <uri>https://www.linkedin.com/in/moe-khalil-73a2371a1/</uri>
        </author>
        <category label="cost" term="cost"/>
        <category label="product" term="product"/>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Introducing LiteAgents]]></title>
        <id>https://docs.litellm.ai/blog/liteagents-sdk</id>
        <link href="https://docs.litellm.ai/blog/liteagents-sdk"/>
        <updated>2026-09-25T17:00:00.000Z</updated>
        <summary type="html"><![CDATA[Switch agent harnesses without rewriting your agent. Keep your tools and model configuration, use native harness controls, and add Temporal when you need durable runs.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="LiteAgents: switch harnesses, keep your agent. A ProfileOptions example changes deepagents to claude-sdk while keeping the model, tools, and MCP connections." src="https://docs.litellm.ai/assets/images/hero-665059ddadc1ca947cfc2d21b272a2a9.png" width="2400" height="1260" class="img_ev3q"></p>
<p>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.</p>
<p><strong>LiteAgents lets you switch agent harnesses without rewriting your application.</strong> Its interface is modeled after the Claude Agent SDK, including the <code>query()</code> 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.</p>
<p>LiteLLM gives you a common interface to models. LiteAgents brings that approach to agent harnesses, with native controls and optional durability through Temporal.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="change-one-field-to-try-another-harness">Change one field to try another harness<a href="https://docs.litellm.ai/blog/liteagents-sdk#change-one-field-to-try-another-harness" class="hash-link" aria-label="Direct link to Change one field to try another harness" title="Direct link to Change one field to try another harness">​</a></h2>
<p>An agent harness runs the loop around a model: supplying context, calling tools, and deciding when to continue. Different harnesses approach that work differently. You should be able to compare them on your own tasks without rebuilding the surrounding application.</p>
<p>In LiteAgents, the harness is a field in your profile:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#CF222E">import</span><span class="token plain"> os</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#CF222E">from</span><span class="token plain"> liteagents </span><span class="token keyword" style="color:#CF222E">import</span><span class="token plain"> LiteAgentClient</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> LiteAgentOptions</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> ProfileOptions</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">profile </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> ProfileOptions</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    harness</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"deepagents"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">  </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># Try "claude-sdk", "codex", or "pydantic-ai".</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    model</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"my-model"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    model_kwargs</span><span class="token operator" style="color:#D73A49">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#C6105F">"api_base"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"https://your-gateway.example/v1"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#C6105F">"api_key"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">environ</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#C6105F">"LITELLM_API_KEY"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">options </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> LiteAgentOptions</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">profile</span><span class="token operator" style="color:#D73A49">=</span><span class="token plain">profile</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> tools</span><span class="token operator" style="color:#D73A49">=</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">lookup_order</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#CF222E">async</span><span class="token plain"> </span><span class="token keyword" style="color:#CF222E">with</span><span class="token plain"> LiteAgentClient</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">options</span><span class="token operator" style="color:#D73A49">=</span><span class="token plain">options</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#CF222E">as</span><span class="token plain"> agent</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#CF222E">async</span><span class="token plain"> </span><span class="token keyword" style="color:#CF222E">for</span><span class="token plain"> message </span><span class="token keyword" style="color:#CF222E">in</span><span class="token plain"> agent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#C6105F">"Check the status of order A123."</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#CF222E">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">message</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p>This excerpt uses your existing <code>lookup_order</code> tool and the <code>LITELLM_API_KEY</code> environment variable. Set <code>model</code> to the alias configured on your gateway and <code>api_base</code> to its endpoint. LiteAgents sends the alias unchanged; no routing prefix is needed. Once you've installed the harness you want to try, change <code>harness</code> and run the same application.</p>
<p>Install only the harness integrations you plan to use. Extras such as <code>[deepagents]</code> supply that adapter's dependencies and reuse compatible packages in your Python environment. <code>[all]</code> is a convenience for trying every integration; OpenCode also needs its executable. Changing the profile selects which harness runs.</p>
<p>LiteAgents adapts your tools, MCP configuration, and events to each harness. Your application receives the same <code>AssistantMessage</code>, <code>UserMessage</code>, and optional streaming <code>TextDelta</code> types whichever harness you choose. LiteLLM handles model translation internally, so switching harnesses keeps the same model connection. With a gateway, the gateway routes your model alias to its provider. Without a gateway, use a LiteLLM <code>provider/model</code> name and provider credentials; LiteAgents calls that provider through the LiteLLM Python library. Profiles also load from JSON or YAML.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="keep-the-harnesss-native-controls">Keep the harness's native controls<a href="https://docs.litellm.ai/blog/liteagents-sdk#keep-the-harnesss-native-controls" class="hash-link" aria-label="Direct link to Keep the harness's native controls" title="Direct link to Keep the harness's native controls">​</a></h2>
<p>Each harness still runs its own agent loop. Through <code>harness_options</code>, you can use supported native settings such as Deep Agents middleware and backends or Pydantic AI tool timeouts.</p>
<p>Shared configuration makes switching straightforward; native options let you tune the harness you've chosen. Those options remain specific to that harness, and your model must support the settings you request. Switching selects a harness for new runs; it doesn't migrate an ongoing native session.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="add-temporal-when-you-need-durable-runs">Add Temporal when you need durable runs<a href="https://docs.litellm.ai/blog/liteagents-sdk#add-temporal-when-you-need-durable-runs" class="hash-link" aria-label="Direct link to Add Temporal when you need durable runs" title="Direct link to Add Temporal when you need durable runs">​</a></h2>
<p>A simple agent runs locally without Temporal or PostgreSQL. When a job needs to survive a worker restart or keep running after the client disconnects, add Temporal to the profile and run a worker. Your application keeps the same client API.</p>
<p>Durable runs recover recorded operations and checkpoints after worker failure. You can start locally with SQLite, then use self-hosted Temporal or Temporal Cloud. Tools that perform external actions still need idempotency if an interrupted action may be retried.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="try-it-on-your-agent">Try it on your agent<a href="https://docs.litellm.ai/blog/liteagents-sdk#try-it-on-your-agent" class="hash-link" aria-label="Direct link to Try it on your agent" title="Direct link to Try it on your agent">​</a></h2>
<p>The SDK is available as a preview. Follow the <a href="https://github.com/BerriAI/liteagents/blob/main/docs/getting-started.md" target="_blank" rel="noopener noreferrer">getting-started guide</a>, or install the package from the <a href="https://github.com/BerriAI/liteagents/releases/tag/v0.3.0a2" target="_blank" rel="noopener noreferrer">latest preview release</a>.</p>
<p>Start with the <a href="https://github.com/BerriAI/liteagents/blob/main/cookbook/recipes/10_harness_switch.py" target="_blank" rel="noopener noreferrer">harness-switching cookbook</a>. It runs the same model, Python tool, MCP tool, and follow-up across all six harness selectors. Add <code>--temporal</code> to try the same task with durability. The <a href="https://github.com/BerriAI/liteagents/blob/main/cookbook/recipes/README.md" target="_blank" rel="noopener noreferrer">cookbook collection</a> also covers streaming, approvals, subagents, and worker recovery.</p>
<p>Try your workflow on another harness and <a href="https://github.com/BerriAI/liteagents/issues" target="_blank" rel="noopener noreferrer">tell us how it goes</a>.</p>]]></content>
        <author>
            <name>Moe Khalil</name>
            <uri>https://www.linkedin.com/in/moe-khalil-73a2371a1/</uri>
        </author>
        <category label="agents" term="agents"/>
        <category label="sdk" term="sdk"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[September Townhall Updates: 583 Bug Fixes, OCR on Rust, and 83.5% Coverage]]></title>
        <id>https://docs.litellm.ai/blog/september-townhall-updates</id>
        <link href="https://docs.litellm.ai/blog/september-townhall-updates"/>
        <updated>2026-09-24T12:00:00.000Z</updated>
        <summary type="html"><![CDATA[A recap of the September LiteLLM town hall: security and stability updates, OCR running on Rust by default, test coverage past the 80% target, and new Fusion and liteagents launches.]]></summary>
        <content type="html"><![CDATA[<p>Thank you to everyone who joined our September town hall. We covered security updates, stability updates, and new features in the product, including OCR running on Rust by default and test coverage past the 80% target we set in August.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="security">Security<a href="https://docs.litellm.ai/blog/september-townhall-updates#security" class="hash-link" aria-label="Direct link to Security" title="Direct link to Security">​</a></h2>
<p>We shipped 52 security fixes this month, broken down by category:</p>
<table><thead><tr><th>Category</th><th>Fixes</th></tr></thead><tbody><tr><td>Credential / secret / PII hardening</td><td>27</td></tr><tr><td>General hardening (validation, fail-closed)</td><td>12</td></tr><tr><td>Quota / budget / rate-limit hardening</td><td>10</td></tr><tr><td>Access control / authz hardening</td><td>3</td></tr></tbody></table>
<p>Major work in security went into authentication:</p>
<ul>
<li>Configurable password policies</li>
<li>Blocking passwords found in known breaches</li>
<li>Enforced SSO login</li>
<li>The option to disable logins that use credentials held in environment variables</li>
</ul>
<p><strong>Master keys.</strong> Wiz found 1 in 10 of the LiteLLM instances they scanned running with a blank or default master key. LiteLLM now refuses to start when the master key is unset or still at the default, so a deployment leaning on it will fail to boot on upgrade.</p>
<p><strong>A new disclosure practice, and more CVEs.</strong></p>
<ul>
<li>For anything an unauthenticated attacker can reach, we build the fix in a private fork and publish it at the same moment as the release, the backports, and the disclosure.</li>
<li>We're minting more CVEs than before, mostly low and medium severity.</li>
<li>The increase comes from a change in publishing policy. Our security posture hasn't changed.</li>
<li>Subscribe to our <a href="https://github.com/BerriAI/litellm/security/advisories" target="_blank" rel="noopener noreferrer">GitHub security advisories</a> to get them as they land.</li>
</ul>
<p>Next month we're at Patch the Planet, an OpenAI and Trail of Bits initiative where security engineers spend a focused week on one project.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="stability">Stability<a href="https://docs.litellm.ai/blog/september-townhall-updates#stability" class="hash-link" aria-label="Direct link to Stability" title="Direct link to Stability">​</a></h2>
<p>In September we shipped <strong>583 bug fixes</strong>.</p>
<table><thead><tr><th>Area</th><th>Fixes</th></tr></thead><tbody><tr><td>Proxy Core &amp; Resilience</td><td>228</td></tr><tr><td>Providers &amp; Model Transforms</td><td>94</td></tr><tr><td>Other / SDK</td><td>88</td></tr><tr><td>UI + Auth / SSO</td><td>57</td></tr><tr><td>Cost, Budgets &amp; Observability</td><td>43</td></tr><tr><td>MCP Gateway</td><td>39</td></tr><tr><td>Streaming / Realtime APIs</td><td>34</td></tr></tbody></table>
<p>The largest share went to the proxy core: scaling, resilience, and the circuit breakers that decide what happens when a dependency fails. If Redis goes down, the gateway should not.</p>
<ul>
<li><strong>Coverage.</strong> We committed to 80% by the end of September and finished at <strong>83.5%</strong>, measured as the share of endpoints and user flows the suite exercises, not lines of code.</li>
<li><strong>User flows.</strong> Up from 402 to 521 covered, with 600 the October target.</li>
<li><strong>Staffing.</strong> One engineer now works only on cost and budget discrepancies, so report them as you hit them. Two more are on open source full time, aiming for fewer than 100 open issues by year end.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="product">Product<a href="https://docs.litellm.ai/blog/september-townhall-updates#product" class="hash-link" aria-label="Direct link to Product" title="Direct link to Product">​</a></h2>
<p><strong>221 feature commits</strong> this month.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="ocr-runs-on-rust-by-default">OCR runs on Rust by default<a href="https://docs.litellm.ai/blog/september-townhall-updates#ocr-runs-on-rust-by-default" class="hash-link" aria-label="Direct link to OCR runs on Rust by default" title="Direct link to OCR runs on Rust by default">​</a></h3>
<p>Starting with <code>v1.102.0</code>, OCR runs on Rust by default. <code>LITELLM_RUST=0</code> still falls back to Python. SDK and gateway users don't need to change anything for this migration.</p>
<p><img decoding="async" loading="lazy" alt="OCR benchmark at 30 offered requests per second with an 8 MiB upload, showing Rust completing every arrival while Python falls well short, and Rust p95 latency in the tens of milliseconds against several seconds for Python" src="https://docs.litellm.ai/assets/images/rust-ocr-benchmark-fb991f7d9a48b615ebc60348045c59a1.png" width="1806" height="592" class="img_ev3q"></p>
<ul>
<li>On a single CPU, median throughput went from 143.6 to 211.7 RPS at 1 MiB, and from 21.6 to 36.2 RPS at 8 MiB.</li>
<li>These are proxy overhead numbers, measured against a local mock provider with proxy CPU as the bottleneck. <a href="https://docs.litellm.ai/blog/litellm-rust-ocr" target="_blank" rel="noopener noreferrer">Full methodology</a>.</li>
<li><code>/messages</code> is next, shipping as opt-in.</li>
<li>By December 1, we want chat completions, messages, and responses migrated and deployable as a pure Rust Axum server.</li>
<li>Progress is public at <a href="https://docs.litellm.ai/rust-migration" target="_blank" rel="noopener noreferrer">docs.litellm.ai/rust-migration</a>, currently at 5%.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-models">New models<a href="https://docs.litellm.ai/blog/september-townhall-updates#new-models" class="hash-link" aria-label="Direct link to New models" title="Direct link to New models">​</a></h3>
<p>We added a lot of new models over the past month, across nearly every major provider.</p>
<p><img decoding="async" loading="lazy" alt="Thirty days of new AI integrations from August 25 to September 24, 2026, listing selected merged model additions across OpenAI, Anthropic, Google Gemini, xAI, Meta, Alibaba Qwen, Z.ai, Moonshot AI, Fireworks AI, Together AI, Eden AI and AIHubMix" src="https://docs.litellm.ai/assets/images/new-models-04476c5fc7e0134348b34e9dd0600f3a.png" width="1672" height="941" class="img_ev3q"></p>
<p>Highlights include OpenAI's GPT-6 family, Claude Opus 5.5 and Claude Fable 5.1, Gemini 3.8 Flash and Grok 4.7, plus Eden AI as a new provider.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="fusion">Fusion<a href="https://docs.litellm.ai/blog/september-townhall-updates#fusion" class="hash-link" aria-label="Direct link to Fusion" title="Direct link to Fusion">​</a></h3>
<p><code>litellm/fusion-1</code> sends your request to a configurable panel of models in parallel, has a judge compare the successful responses, then has that judge synthesize one answer. It works with Chat Completions, Anthropic Messages, and Responses.</p>
<p><img decoding="async" loading="lazy" alt="LiteLLM fusion model card: one request fans out to a panel of models in parallel, to openai/gpt-6-astra, anthropic/claude-opus-5 and gemini/gemini-3.8-flash, and a judge returns a single response" src="https://docs.litellm.ai/assets/images/fusion-1-9244700569986d49a11e2a9a4a52f08e.png" width="800" height="450" class="img_ev3q"></p>
<p>It's expensive, and cost and latency both scale with panel size and the models you pick. Keep it for hard problems where quality matters more than cost. See the <a href="https://docs.litellm.ai/docs/fusion" target="_blank" rel="noopener noreferrer">fusion docs</a> for setup.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="liteagents-sdk">liteagents SDK<a href="https://docs.litellm.ai/blog/september-townhall-updates#liteagents-sdk" class="hash-link" aria-label="Direct link to liteagents SDK" title="Direct link to liteagents SDK">​</a></h3>
<p>liteagents is a beta SDK that lets you swap between agent harnesses without rewriting your agent. Pick the harness in a <code>ProfileOptions</code> block, whether that's the Claude Agent SDK, Deep Agents or Pydantic AI, and query it through one client.</p>
<p><img decoding="async" loading="lazy" alt="liteagents SDK code sample: a LiteAgentClient is configured with a ProfileOptions block selecting the deepagents harness and a model, then queried for a response" src="https://docs.litellm.ai/assets/images/liteagents-sdk-f9bb0affb450aa8e79d67e6cd57d7cda.png" width="2048" height="1040" class="img_ev3q"></p>
<p>Read more about the <a href="https://www.litellm.ai/liteagents" target="_blank" rel="noopener noreferrer">liteagents SDK</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="also-shipped">Also shipped<a href="https://docs.litellm.ai/blog/september-townhall-updates#also-shipped" class="hash-link" aria-label="Direct link to Also shipped" title="Direct link to Also shipped">​</a></h3>
<ul>
<li><strong>Self-hosting.</strong> A PgBouncer inside the container shares database connections across workers, spend writes can move to a sidecar off the request path, and Helm and Terraform can <a href="https://docs.litellm.ai/docs/proxy/deploy#scale-on-requests-and-tokens-per-pod" target="_blank" rel="noopener noreferrer">autoscale on requests and tokens per second</a> per pod rather than only CPU.</li>
<li><strong>MCP Gateway.</strong> The <code>/mcp</code> route now runs <a href="https://docs.litellm.ai/docs/mcp_tool_search" target="_blank" rel="noopener noreferrer">semantic search across tools</a> and returns only those matching the query, so we no longer trim long upstream catalogs to fit. <a href="https://docs.litellm.ai/docs/mcp_control" target="_blank" rel="noopener noreferrer">Tool permissions</a> are enforced on listing and calling, and session tokens are RS256-signed so an external gateway can verify a token came from LiteLLM.</li>
<li><strong>Team admin permissions.</strong> Budget, TPM, RPM and the approved model list stay with the proxy admin while team admins self-serve keys and models. Rolling out shortly.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="were-hiring">We're hiring<a href="https://docs.litellm.ai/blog/september-townhall-updates#were-hiring" class="hash-link" aria-label="Direct link to We're hiring" title="Direct link to We're hiring">​</a></h2>
<p>We're hiring across the core gateway; reach us at <a href="mailto:recruiting@berri.ai" target="_blank" rel="noopener noreferrer">recruiting@berri.ai</a>, or <a href="mailto:product@berri.ai" target="_blank" rel="noopener noreferrer">product@berri.ai</a> for product feedback.</p>
<p>Thank you for using LiteLLM. <strong>The LiteLLM Team</strong></p>]]></content>
        <author>
            <name>Ishaan Jaffer</name>
            <uri>https://www.linkedin.com/in/reffajnaahsi/</uri>
        </author>
        <author>
            <name>Yujong Lee</name>
            <email>yujong@berri.ai</email>
            <uri>https://www.linkedin.com/in/yujong1ee/</uri>
        </author>
        <author>
            <name>Oliver Jensen</name>
        </author>
        <author>
            <name>Mateo Wang</name>
            <uri>https://www.linkedin.com/in/mateo-wang</uri>
        </author>
        <category label="townhall" term="townhall"/>
        <category label="security" term="security"/>
        <category label="reliability" term="reliability"/>
        <category label="product" term="product"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Day 0 support: Gemini 3.8 Flash TTS and Flash-Lite TTS]]></title>
        <id>https://docs.litellm.ai/blog/gemini_3_8_flash_tts</id>
        <link href="https://docs.litellm.ai/blog/gemini_3_8_flash_tts"/>
        <updated>2026-09-23T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Day 0 support for Gemini 3.8 Flash TTS and Flash-Lite TTS on LiteLLM's /v1/audio/speech, with launch pricing tracked through 2026.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="LiteLLM x Gemini 3.8 Flash TTS and Flash-Lite TTS" src="https://docs.litellm.ai/assets/images/hero-188c6c516591c4b1817e1aa8cd683368.png" width="4800" height="2508" class="img_ev3q"></p>
<p>LiteLLM supports <code>gemini-3.8-flash-tts</code> and <code>gemini-3.8-flash-lite-tts</code> on day 0 through <code>/v1/audio/speech</code>, on Google AI Studio (<code>gemini/</code>). Both are generally available and replace the 3.1 Flash TTS preview.</p>
<!-- -->
<p><a href="https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-8-text-to-speech/" target="_blank" rel="noopener noreferrer">Per Google</a>, Flash TTS is built for creative work like games, audiobooks and podcasts, and Flash-Lite TTS is the cheaper tier for high-volume dubbing and voice agents. Both draw on more than 2,000 prebuilt voices, and Flash TTS covers 130 languages with automatic detection.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p><strong>No Docker image upgrade needed.</strong> Both models route through LiteLLM's existing Gemini speech path, so any recent version works for inference. For cost tracking, hit the <strong>Reload Model Cost Map</strong> button in the Admin UI (or <code>POST /reload/model_cost_map</code>) to pull pricing from <a href="https://github.com/BerriAI/litellm/pull/42752" target="_blank" rel="noopener noreferrer">PR #42752</a>, on <code>v1.76.0</code> and above.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="launch-pricing">Launch pricing<a href="https://docs.litellm.ai/blog/gemini_3_8_flash_tts#launch-pricing" class="hash-link" aria-label="Direct link to Launch pricing" title="Direct link to Launch pricing">​</a></h2>
<p>Both models launch at promotional pricing through December 31, 2026, and Google's standard pricing applies from January 1, 2027. LiteLLM tracks cost at the launch rate.</p>
<p>Flash TTS is $0.50 per 1M text input tokens and $9.00 per 1M audio output tokens, and Flash-Lite TTS is $0.50 and $6.00. Batch and Flex run at half these rates and Priority at 1.8x. For comparison, the 3.1 Flash TTS preview was $1.00 in and $20.00 out.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="quick-start">Quick Start<a href="https://docs.litellm.ai/blog/gemini_3_8_flash_tts#quick-start" class="hash-link" aria-label="Direct link to Quick Start" title="Direct link to Quick Start">​</a></h2>
<div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">SDK</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">PROXY</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#CF222E">import</span><span class="token plain"> litellm</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">response </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> litellm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">speech</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    model</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"gemini/gemini-3.8-flash-tts"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token builtin">input</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"Welcome back. Your order shipped this morning."</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    voice</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"Kore"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">stream_to_file</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#C6105F">"welcome.wav"</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gemini</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">3.8</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">flash</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">tts</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gemini/gemini</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">3.8</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">flash</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">tts</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/GEMINI_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gemini</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">3.8</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">flash</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">lite</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">tts</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gemini/gemini</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">3.8</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">flash</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">lite</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">tts</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/GEMINI_API_KEY</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">litellm --config /path/to/config.yaml</span><br></span></code></pre></div></div><p><strong>3. Test it</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl http://0.0.0.0:4000/v1/audio/speech \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Authorization: Bearer $LITELLM_KEY" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Content-Type: application/json" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -d '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "model": "gemini-3.8-flash-tts",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "input": "Welcome back. Your order shipped this morning.",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "voice": "Kore"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  }' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --output welcome.wav</span><br></span></code></pre></div></div></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="notes">Notes<a href="https://docs.litellm.ai/blog/gemini_3_8_flash_tts#notes" class="hash-link" aria-label="Direct link to Notes" title="Direct link to Notes">​</a></h2>
<p>Input is capped at 8,192 tokens per request and output at 16,384, so split long scripts such as audiobook chapters across calls. Pass a prebuilt voice by name in <code>voice</code>; see Google's <a href="https://ai.google.dev/gemini-api/docs/speech-generation" target="_blank" rel="noopener noreferrer">speech generation guide</a> for the list.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="https://docs.litellm.ai/blog/gemini_3_8_flash_tts#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback">​</a></h2>
<p>Running Gemini 3.8 TTS through LiteLLM and hitting something unexpected? Share it on <a href="https://github.com/BerriAI/litellm/discussions/42776" target="_blank" rel="noopener noreferrer">GitHub discussion #42776</a>.</p>]]></content>
        <author>
            <name>Misbah Syed</name>
            <uri>https://github.com/misbahsy</uri>
        </author>
        <author>
            <name>Mateo Wang</name>
            <uri>https://www.linkedin.com/in/mateo-wang</uri>
        </author>
        <author>
            <name>Kerry Lu</name>
            <uri>https://github.com/kerry-berri</uri>
        </author>
        <category label="gemini" term="gemini"/>
        <category label="gemini-3.8-flash-tts" term="gemini-3.8-flash-tts"/>
        <category label="text to speech" term="text to speech"/>
        <category label="day 0 support" term="day 0 support"/>
        <category label="card_title:Gemini 3.8 Flash TTS and Flash-Lite TTS" term="card_title:Gemini 3.8 Flash TTS and Flash-Lite TTS"/>
        <category label="card_summary:Gemini speech models on /v1/audio/speech, Flash and Flash-Lite, with launch pricing tracked through 2026." term="card_summary:Gemini speech models on /v1/audio/speech, Flash and Flash-Lite, with launch pricing tracked through 2026."/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Introducing LiteAdmin MCP]]></title>
        <id>https://docs.litellm.ai/blog/litellm-admin-mcp</id>
        <link href="https://docs.litellm.ai/blog/litellm-admin-mcp"/>
        <updated>2026-09-23T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Give your agent tools to create keys, add models, and manage budgets with LiteAdmin MCP. Use the same connector through LiteAdmin, our Slack admin agent.]]></summary>
        <content type="html"><![CDATA[<img src="https://docs.litellm.ai/assets/ideal-img/hero.b7472d0.1280.png" alt="Introducing LiteAdmin MCP: your AI toolkit for gateway management. LiteAdmin for Slack is built on LiteAdmin MCP." class="themedComponent_mlkZ themedComponent--light_NVdE" style="width:100%"><img src="https://docs.litellm.ai/assets/ideal-img/hero-dark.500e065.1280.png" alt="Introducing LiteAdmin MCP: your AI toolkit for gateway management. LiteAdmin for Slack is built on LiteAdmin MCP." class="themedComponent_mlkZ themedComponent--dark_xIcU" style="width:100%">
<p>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.</p>
<p><strong>LiteAdmin MCP</strong> lets your agent handle these tasks through your gateway's management API. Connect it to an MCP client or a custom agent. We built <strong>LiteAdmin</strong>, our Slack admin agent, on the same connector.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="connect-your-agent-to-your-gateway">Connect your agent to your gateway<a href="https://docs.litellm.ai/blog/litellm-admin-mcp#connect-your-agent-to-your-gateway" class="hash-link" aria-label="Direct link to Connect your agent to your gateway" title="Direct link to Connect your agent to your gateway">​</a></h2>
<p>Connect LiteAdmin MCP to a client such as Claude Code or Cursor, or to your own agent. Your client provides the conversation and model; the connector calls your gateway's management API with your admin credential.</p>
<p>Through that connection, you can:</p>
<ul>
<li><strong>Create and manage virtual keys:</strong> Set model access and spending limits.</li>
<li><strong>Add model deployments:</strong> Use credentials configured on your gateway.</li>
<li><strong>Manage teams and budgets:</strong> Update team membership and budgets.</li>
<li><strong>Inspect usage:</strong> Check spending and request logs.</li>
</ul>
<p>The connector includes 65 reviewed admin operations and exposes the ones your gateway supports.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="set-up-access-for-a-project">Set up access for a project<a href="https://docs.litellm.ai/blog/litellm-admin-mcp#set-up-access-for-a-project" class="hash-link" aria-label="Direct link to Set up access for a project" title="Direct link to Set up access for a project">​</a></h2>
<p>To set up a project for Engineering, ask:</p>
<blockquote>
<p>Create a key for Engineering with a $100 monthly budget.</p>
</blockquote>
<p>Include the models the project needs and an alias to identify the key. The agent can look up Engineering and create the key with the limits you specify.</p>
<p>Once the project is running, ask for its recorded spend. You can update the key's budget or the team's budget; specify which one in your request.</p>
<p>To add a model deployment, provide its public name, provider/model ID, and credential reference:</p>
<blockquote>
<p>Add a model named support-chat using openai/gpt-4.1 and the existing gateway credential openai-production.</p>
</blockquote>
<p>Use a stored credential name and keep provider API keys out of chat. Your gateway needs provider access and a database configured to store models. Follow the <a href="https://docs.litellm.ai/docs/proxy/liteadmin_mcp#add-a-model-deployment">model setup requirements</a>, then test inference after adding the deployment.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="choose-the-tools-your-agent-can-use">Choose the tools your agent can use<a href="https://docs.litellm.ai/blog/litellm-admin-mcp#choose-the-tools-your-agent-can-use" class="hash-link" aria-label="Direct link to Choose the tools your agent can use" title="Direct link to Choose the tools your agent can use">​</a></h2>
<p>Connect with your own LiteLLM proxy-admin credential. Your gateway permissions apply to management requests, and you can restrict the connector to specific tools or enable read-only mode.</p>
<p>Start with team and spend lookups, then enable key creation when you're ready to make changes.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="liteadmin-a-slack-agent-built-on-admin-mcp">LiteAdmin: a Slack agent built on Admin MCP<a href="https://docs.litellm.ai/blog/litellm-admin-mcp#liteadmin-a-slack-agent-built-on-admin-mcp" class="hash-link" aria-label="Direct link to LiteAdmin: a Slack agent built on Admin MCP" title="Direct link to LiteAdmin: a Slack agent built on Admin MCP">​</a></h2>
<p><strong>LiteAdmin (the LiteLLM Admin Agent)</strong> uses the same MCP server to manage your gateway from Slack. The app provides the conversation and sign-in; Admin MCP provides the gateway tools.</p>
<p>Host the agent, connect your gateway, and choose the model it uses. The app includes the MCP connector, and each installation connects one gateway to one Slack workspace.</p>
<p>Open <strong>LiteLLM Admin</strong> in Slack, send <strong>connect</strong>, and follow the private link to sign in with your own admin account. Your deployment can use SSO or a personal admin key entered on a browser page. Then ask:</p>
<blockquote>
<p>Show Engineering's current spend and budget.</p>
</blockquote>
<p>After checking the spend, request a change:</p>
<blockquote>
<p>Increase Engineering's monthly budget to $500.</p>
</blockquote>
<p>You can follow up about the team's keys or usage in the same DM, from your laptop or phone.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="get-started">Get started<a href="https://docs.litellm.ai/blog/litellm-admin-mcp#get-started" class="hash-link" aria-label="Direct link to Get started" title="Direct link to Get started">​</a></h2>
<p>Both projects are open source. Choose where you want to work:</p>
<ul>
<li><strong>LiteAdmin MCP:</strong> Follow the <a href="https://docs.litellm.ai/docs/proxy/liteadmin_mcp">MCP setup guide</a> to connect Claude, Codex, or another MCP client.</li>
<li><strong>LiteAdmin for Slack:</strong> Follow the <a href="https://docs.litellm.ai/docs/proxy/liteadmin_slack">Slack app setup guide</a> to deploy with Docker Compose or Render.</li>
</ul>
<p>Once connected, try <strong>“List my teams and their current budgets.”</strong></p>]]></content>
        <author>
            <name>Tin Lo</name>
            <uri>https://www.linkedin.com/in/tinchi-lo/</uri>
        </author>
        <category label="mcp" term="mcp"/>
        <category label="agents" term="agents"/>
        <category label="ai-gateway" term="ai-gateway"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Day 0 Support: GPT-6 Sol and GPT-6 Luna]]></title>
        <id>https://docs.litellm.ai/blog/gpt_6_sol_luna</id>
        <link href="https://docs.litellm.ai/blog/gpt_6_sol_luna"/>
        <updated>2026-09-22T12:00:00.000Z</updated>
        <summary type="html"><![CDATA[Day 0 support for GPT-6 Sol and GPT-6 Luna on LiteLLM, at half the price of their GPT-5.6 counterparts.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="LiteLLM x GPT-6 Sol and Luna" src="https://docs.litellm.ai/assets/images/litellm_gpt_6_sol_luna_announcement-d97af9a6316cdf53321db5eeb75e82f3.png" width="4800" height="2508" class="img_ev3q"></p>
<p>LiteLLM now supports <a href="https://openai.com/index/introducing-gpt-6-sol-and-luna/" target="_blank" rel="noopener noreferrer">GPT-6 Sol and GPT-6 Luna</a>. Route traffic to them through the LiteLLM AI Gateway with the same config you use for every other OpenAI model.</p>
<!-- -->
<p>Sol and Luna join GPT-6 Astra, trained with the same methods and priced for work at scale. <code>gpt-6-sol</code> is built for complex coding and agentic workflows at $2 input and $10 output per 1M tokens, and <code>gpt-6-luna</code> is the high-volume tier at $0.10 and $0.50. OpenAI prices both at half their GPT-5.6 counterparts' current rates. Per OpenAI, Sol at <code>xhigh</code> scores 33.2% on AutomationBench at $0.27 a task and 68.8% on DeepSWE v1.1 at <code>max</code>, while Luna reaches 66.6% on DeepSWE. Both keep a 1,050,000-token context window with 922K input and 128K output, take text and image input, and run reasoning effort from <code>none</code> to <code>max</code>, defaulting to <code>medium</code>. There is no GPT-6 Terra; Astra stays the top of the range.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p><strong>No image upgrade needed.</strong> LiteLLM already treats GPT-6 names as the GPT-5 request family, so <code>max_completion_tokens</code> and the reasoning params are handled on any version from <code>v1.101.0</code>. Pricing landed in <a href="https://github.com/BerriAI/litellm/pull/42515" target="_blank" rel="noopener noreferrer">PR #42515</a>; hit <strong>Reload Model Cost Map</strong> in the Admin UI (or <code>POST /reload/model_cost_map</code>) to pull it, on <code>v1.76.0</code> and above.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="usage">Usage<a href="https://docs.litellm.ai/blog/gpt_6_sol_luna#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h2>
<div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">LiteLLM Proxy</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">LiteLLM Python SDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">6</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sol</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> openai/gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">6</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sol</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/OPENAI_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">6</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">luna</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> openai/gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">6</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">luna</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/OPENAI_API_KEY</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -p 4000:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e OPENAI_API_KEY=$OPENAI_API_KEY \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/config.yaml:/app/config.yaml \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/berriai/litellm:main-latest \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --config /app/config.yaml</span><br></span></code></pre></div></div><p><strong>3. Test it</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl -X POST "http://0.0.0.0:4000/chat/completions" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Content-Type: application/json" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Authorization: Bearer $LITELLM_KEY" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -d '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "model": "gpt-6-sol",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "messages": [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      {"role": "user", "content": "Write a Python function to check if a number is prime."}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ],</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "reasoning_effort": "high"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  }'</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#CF222E">from</span><span class="token plain"> litellm </span><span class="token keyword" style="color:#CF222E">import</span><span class="token plain"> completion</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">response </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> completion</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    model</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"openai/gpt-6-sol"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    messages</span><span class="token operator" style="color:#D73A49">=</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#C6105F">"role"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"user"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"content"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"Write a Python function to check if a number is prime."</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    reasoning_effort</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"high"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#CF222E">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">choices</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#005CC5">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">message</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">content</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#6B6B6B;font-style:italic"># gpt-6-luna for focused, high-volume work</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">response </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> completion</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    model</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"openai/gpt-6-luna"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    messages</span><span class="token operator" style="color:#D73A49">=</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#C6105F">"role"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"user"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"content"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"Classify this ticket as bug, feature, or question."</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    reasoning_effort</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"none"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    temperature</span><span class="token operator" style="color:#D73A49">=</span><span class="token number" style="color:#005CC5">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#CF222E">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">choices</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#005CC5">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">message</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">content</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="responses-api">Responses API<a href="https://docs.litellm.ai/blog/gpt_6_sol_luna#responses-api" class="hash-link" aria-label="Direct link to Responses API" title="Direct link to Responses API">​</a></h2>
<p>For agentic and multi-turn workflows, use <code>/v1/responses</code> to preserve reasoning state across turns.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl -X POST "http://0.0.0.0:4000/v1/responses" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Content-Type: application/json" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Authorization: Bearer $LITELLM_KEY" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -d '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "model": "gpt-6-sol",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "input": "Plan and write a Python script that scrapes a webpage and summarizes it."</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  }'</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="pricing">Pricing<a href="https://docs.litellm.ai/blog/gpt_6_sol_luna#pricing" class="hash-link" aria-label="Direct link to Pricing" title="Direct link to Pricing">​</a></h2>
<p>Prices are per 1M tokens (USD), shown as short context (≤272K tokens) / long context (&gt;272K tokens).</p>
<table><thead><tr><th>Model</th><th>Input</th><th>Cached input</th><th>Cache write</th><th>Output</th></tr></thead><tbody><tr><td><code>gpt-6-sol</code></td><td>$2.00 / $4.00</td><td>$0.20 / $0.40</td><td>$2.50 / $5.00</td><td>$10.00 / $15.00</td></tr><tr><td><code>gpt-6-luna</code></td><td>$0.10 / $0.20</td><td>$0.01 / $0.02</td><td>$0.125 / $0.25</td><td>$0.50 / $0.75</td></tr></tbody></table>
<p>Flex and Batch run at half these rates and Priority at double; LiteLLM tracks all of them from the same cost map row.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="notes">Notes<a href="https://docs.litellm.ai/blog/gpt_6_sol_luna#notes" class="hash-link" aria-label="Direct link to Notes" title="Direct link to Notes">​</a></h2>
<p><code>temperature</code> only applies when reasoning is off, so send <code>reasoning_effort="none"</code> alongside it, as in the Luna example above. Without it LiteLLM drops or refuses the parameter, since the default effort is <code>medium</code>.</p>
<p>Both models accept OpenAI's explicit prompt cache breakpoints, and LiteLLM passes them through on <code>/chat/completions</code>, <code>/responses</code> and <code>/v1/messages</code>; see <a href="https://docs.litellm.ai/docs/completion/prompt_caching">prompt caching</a>. OpenAI also says changing reasoning effort or tools mid-conversation no longer breaks the cache, which matters if you route different effort levels to the same deployment.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="https://docs.litellm.ai/blog/gpt_6_sol_luna#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback">​</a></h2>
<p>Running GPT-6 Sol or Luna through LiteLLM and hitting something unexpected? Share it on <a href="https://github.com/BerriAI/litellm/discussions/42523" target="_blank" rel="noopener noreferrer">GitHub discussion #42523</a>.</p>]]></content>
        <author>
            <name>Misbah Syed</name>
            <uri>https://github.com/misbahsy</uri>
        </author>
        <author>
            <name>Mateo Wang</name>
            <uri>https://www.linkedin.com/in/mateo-wang</uri>
        </author>
        <author>
            <name>Kerry Lu</name>
            <uri>https://github.com/kerry-berri</uri>
        </author>
        <category label="openai" term="openai"/>
        <category label="gpt-6" term="gpt-6"/>
        <category label="gpt-6-sol" term="gpt-6-sol"/>
        <category label="gpt-6-luna" term="gpt-6-luna"/>
        <category label="completion" term="completion"/>
        <category label="day 0 support" term="day 0 support"/>
        <category label="card_title:GPT-6 Sol and GPT-6 Luna" term="card_title:GPT-6 Sol and GPT-6 Luna"/>
        <category label="card_summary:Two GPT-6 variants at half the price of their GPT-5.6 counterparts, routed as the GPT-5 request family." term="card_summary:Two GPT-6 variants at half the price of their GPT-5.6 counterparts, routed as the GPT-5 request family."/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Day 0 Support: Claude Opus 5.5]]></title>
        <id>https://docs.litellm.ai/blog/claude_opus_5_5</id>
        <link href="https://docs.litellm.ai/blog/claude_opus_5_5"/>
        <updated>2026-09-22T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Day 0 support for Claude Opus 5.5 on the LiteLLM AI Gateway. Use it across Anthropic, Bedrock, Gemini Enterprise Agent Platform, and Azure.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="LiteLLM x Claude Opus 5.5" src="https://docs.litellm.ai/assets/images/litellm_claude_opus_5_5_announcement-57b88898b45c0ecdf91ddf932be7be1a.png" width="4800" height="2508" class="img_ev3q"></p>
<p>LiteLLM now supports <a href="https://www.anthropic.com/claude-opus-5-5" target="_blank" rel="noopener noreferrer">Claude Opus 5.5</a> on Day 0. Use it across Anthropic, Bedrock, Gemini Enterprise Agent Platform, and Azure through the LiteLLM AI Gateway. Call it with the same OpenAI-compatible request you already use, and track spend, rate limits, and logging in one place.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new-in-opus-55">What's new in Opus 5.5<a href="https://docs.litellm.ai/blog/claude_opus_5_5#whats-new-in-opus-55" class="hash-link" aria-label="Direct link to What's new in Opus 5.5" title="Direct link to What's new in Opus 5.5">​</a></h2>
<p>Key changes (<a href="https://www.anthropic.com/claude-opus-5-5" target="_blank" rel="noopener noreferrer">details from Anthropic</a>):</p>
<ul>
<li><strong>20% cheaper than Opus 5:</strong> $4 / MTok input and $20 / MTok output, down from $5 and $25</li>
<li><strong>Cheaper cache reads:</strong> $0.20 / MTok, with 5-minute writes at $5 and 1-hour writes at $8</li>
<li><strong>Stronger agentic coding:</strong> Terminal-Bench 4.0 at 66.4% and OSWorld 2.0 at 81.8%</li>
<li><strong>Faster and leaner:</strong> Anthropic reports output more than 30% faster, using fewer tokens per task</li>
<li><strong>Thinking is always on:</strong> effort is the only control, and its default is <code>medium</code></li>
<li><strong>Fast mode:</strong> about 2x the base price, down from Opus 5's $10 / $50</li>
</ul>
<p>Context window and max output are unchanged from Opus 5 at 1M and 128K.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="enabling-opus-55">Enabling Opus 5.5<a href="https://docs.litellm.ai/blog/claude_opus_5_5#enabling-opus-55" class="hash-link" aria-label="Direct link to Enabling Opus 5.5" title="Direct link to Enabling Opus 5.5">​</a></h2>
<p>Pricing landed in <a href="https://github.com/BerriAI/litellm/pull/42489" target="_blank" rel="noopener noreferrer">PR #42489</a>, and most proxies do not need to upgrade at all. On the default remote cost map, open the <strong>Price Data</strong> tab under <strong>Models + Endpoints</strong> in the UI and click <strong>Reload Price Data</strong> (or <code>POST /reload/model_cost_map</code> as a proxy admin), on any version <code>v1.76.0</code> or newer.</p>
<p>The exception is <code>LITELLM_LOCAL_MODEL_COST_MAP=true</code>, which bakes the cost map into the image and puts it out of the Reload button's reach. That path needs an image built after #42489 merged.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="usage">Usage<a href="https://docs.litellm.ai/blog/claude_opus_5_5#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h2>
<p>Pick your provider below. Each tab wires up <code>claude-opus-5-5</code> for that provider; the request you send afterward is identical everywhere.</p>
<div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Anthropic</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Bedrock</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Gemini Enterprise Agent Platform</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Azure</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">opus</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> anthropic/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">opus</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/ANTHROPIC_API_KEY</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -p 4000:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/config.yaml:/app/config.yaml \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/berriai/litellm:v1.103.0-rc.1 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --config /app/config.yaml</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">opus</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> bedrock/anthropic.claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">opus</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">aws_access_key_id</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/AWS_ACCESS_KEY_ID</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">aws_secret_access_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/AWS_SECRET_ACCESS_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">aws_region_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> us</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">east</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">1</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -p 4000:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/config.yaml:/app/config.yaml \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/berriai/litellm:v1.103.0-rc.1 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --config /app/config.yaml</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">opus</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> vertex_ai/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">opus</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">vertex_project</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/VERTEX_PROJECT</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">vertex_location</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> global</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -p 4000:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e VERTEX_PROJECT=$VERTEX_PROJECT \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e GOOGLE_APPLICATION_CREDENTIALS=/app/credentials.json \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/config.yaml:/app/config.yaml \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/credentials.json:/app/credentials.json \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/berriai/litellm:v1.103.0-rc.1 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --config /app/config.yaml</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><p><strong>1. Setup config.yaml</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">opus</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> azure_ai/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">opus</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/AZURE_AI_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_base</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/AZURE_AI_API_BASE  </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># https://&lt;resource&gt;.services.ai.azure.com</span><br></span></code></pre></div></div><p><strong>2. Start the proxy</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -p 4000:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e AZURE_AI_API_KEY=$AZURE_AI_API_KEY \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -e AZURE_AI_API_BASE=$AZURE_AI_API_BASE \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v $(pwd)/config.yaml:/app/config.yaml \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/berriai/litellm:v1.103.0-rc.1 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --config /app/config.yaml</span><br></span></code></pre></div></div></div></div></div>
<p><strong>3. Test it!</strong></p>
<p>The request is the same regardless of which provider you configured above:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl --location 'http://0.0.0.0:4000/chat/completions' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--header 'Content-Type: application/json' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--header 'Authorization: Bearer $LITELLM_KEY' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--data '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "model": "claude-opus-5-5",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "messages": [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "role": "user",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "content": "what llm are you"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}'</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="fast-mode">Fast Mode<a href="https://docs.litellm.ai/blog/claude_opus_5_5#fast-mode" class="hash-link" aria-label="Direct link to Fast Mode" title="Direct link to Fast Mode">​</a></h2>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>Fast mode is <strong>only supported on the Anthropic provider</strong> (<code>anthropic/claude-opus-5-5</code>). It is not available on Bedrock, Gemini Enterprise Agent Platform, or Azure, and it cannot be combined with the Batch API.</p></div></div>
<p>Opus 5.5 runs faster with <code>speed: "fast"</code>, billed at $8 / MTok input and $40 / MTok output, 2x the standard rate and down from the $10 / $50 on Opus 5. LiteLLM adds the <code>fast-mode-2026-02-01</code> beta header and tracks the premium in cost calculations automatically.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl --location 'http://0.0.0.0:4000/v1/chat/completions' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--header 'Content-Type: application/json' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--header 'Authorization: Bearer $LITELLM_KEY' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--data '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "model": "claude-opus-5-5",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "messages": [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "role": "user",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "content": "Refactor this module..."</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ],</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "max_tokens": 4096,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "speed": "fast"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}'</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="worth-knowing">Worth knowing<a href="https://docs.litellm.ai/blog/claude_opus_5_5#worth-knowing" class="hash-link" aria-label="Direct link to Worth knowing" title="Direct link to Worth knowing">​</a></h2>
<p><strong>Forced tool use returns a 400.</strong> With <code>drop_params</code> on, LiteLLM downgrades <code>tool_choice</code> to <code>auto</code> and logs a warning, so the call succeeds and the model is free not to call your tool.</p>
<p><strong>Thinking cannot be disabled, and the default effort is now <code>medium</code></strong> where Opus 5's was <code>high</code>, so a request that never set effort thinks less than it used to.</p>
<p><strong>Thinking blocks are tied to the model.</strong> Only Fable 5.1 and Mythos 5.1 read Opus 5.5's, so a fallback to Sonnet or Haiku runs those turns without the reasoning.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="https://docs.litellm.ai/blog/claude_opus_5_5#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback">​</a></h2>
<p>Running Claude Opus 5.5 through LiteLLM and hitting something unexpected? Share it on <a href="https://github.com/BerriAI/litellm/discussions/42494" target="_blank" rel="noopener noreferrer">GitHub discussion #42494</a>.</p>]]></content>
        <author>
            <name>Misbah Syed</name>
            <uri>https://github.com/misbahsy</uri>
        </author>
        <author>
            <name>Mateo Wang</name>
            <uri>https://www.linkedin.com/in/mateo-wang</uri>
        </author>
        <author>
            <name>Kerry Lu</name>
            <uri>https://github.com/kerry-berri</uri>
        </author>
        <category label="anthropic" term="anthropic"/>
        <category label="claude" term="claude"/>
        <category label="opus 5.5" term="opus 5.5"/>
        <category label="day 0 support" term="day 0 support"/>
        <category label="card_title:Claude Opus 5.5" term="card_title:Claude Opus 5.5"/>
        <category label="card_summary:20% cheaper than Opus 5 at $4 / $20 per 1M, 30% faster output, Terminal-Bench 4.0 66.4%, thinking always on." term="card_summary:20% cheaper than Opus 5 at $4 / $20 per 1M, 30% faster output, Terminal-Bench 4.0 66.4%, thinking always on."/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Getting Started with Fireworks AI on LiteLLM]]></title>
        <id>https://docs.litellm.ai/blog/fireworks-getting-started</id>
        <link href="https://docs.litellm.ai/blog/fireworks-getting-started"/>
        <updated>2026-09-22T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[A beginner tutorial: run an open model on Fireworks AI behind a LiteLLM gateway, call it with the OpenAI SDK you already use, then add a second model and a fallback.]]></summary>
        <content type="html"><![CDATA[<p>Fireworks AI is one of the largest open model inference platforms, serving more than 40 trillion tokens a day for companies including Uber, Notion, DoorDash, and Cursor. LiteLLM is the most widely used open source AI gateway, with over 500 million container pulls. Together they give you fast, low-cost open models behind a single OpenAI-compatible endpoint that tracks every token you spend.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-fireworks-ai-gives-you">What Fireworks AI gives you<a href="https://docs.litellm.ai/blog/fireworks-getting-started#what-fireworks-ai-gives-you" class="hash-link" aria-label="Direct link to What Fireworks AI gives you" title="Direct link to What Fireworks AI gives you">​</a></h2>
<p>Fireworks AI serves open models on fast inference infrastructure. Families like DeepSeek, Qwen, GLM, Kimi, MiniMax, and GPT-OSS are available as serverless endpoints you can call immediately with an API key. As your needs grow you can host a model inside your own Fireworks account, reserve a dedicated deployment for consistent throughput, or point at a Fireworks router that keeps you on the current version of a model family. Open models run fast on Fireworks and cost a fraction of frontier pricing, and because the weights are open you can fine-tune one on your own data and serve the result from the same platform.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-litellm-gives-you">What LiteLLM gives you<a href="https://docs.litellm.ai/blog/fireworks-getting-started#what-litellm-gives-you" class="hash-link" aria-label="Direct link to What LiteLLM gives you" title="Direct link to What LiteLLM gives you">​</a></h2>
<p>LiteLLM is an open source AI gateway. You run it in front of your models, and it gives every provider one OpenAI-compatible API. Your application sends a normal OpenAI request to one endpoint, and the gateway handles the provider-specific details. It also tracks token usage and cost for every request, issues keys with budgets attached, and can fall back to another model when one is busy.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-you-get-together">What you get together<a href="https://docs.litellm.ai/blog/fireworks-getting-started#what-you-get-together" class="hash-link" aria-label="Direct link to What you get together" title="Direct link to What you get together">​</a></h2>
<p>Your application code speaks OpenAI format to a single endpoint and never learns that Fireworks is behind it. Changing which model serves a route becomes a line in a config file, so you can move traffic to a cheaper or faster model without a deploy. Spend shows up per key and per team from the first request. When Fireworks adds a model you want, or you move a route onto a version fine-tuned on your own data, you pick it up by editing that one line.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-you-need">What you need<a href="https://docs.litellm.ai/blog/fireworks-getting-started#what-you-need" class="hash-link" aria-label="Direct link to What you need" title="Direct link to What you need">​</a></h2>
<p>A Fireworks API key from the <a href="https://fireworks.ai/" target="_blank" rel="noopener noreferrer">Fireworks dashboard</a>, Python 3.10 or newer, and a couple of minutes. Install the gateway with <code>pip install 'litellm[proxy]'</code>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="1-write-a-config-file">1. Write a config file<a href="https://docs.litellm.ai/blog/fireworks-getting-started#1-write-a-config-file" class="hash-link" aria-label="Direct link to 1. Write a config file" title="Direct link to 1. Write a config file">​</a></h2>
<p>Create <code>config.yaml</code> with one model. The <code>model_name</code> is the name your application will use. The <code>model</code> underneath it is the real Fireworks model, and the <code>fireworks_ai/</code> prefix tells the gateway which provider to route to.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">config.yaml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> my</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">model</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> fireworks_ai/deepseek</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">v4p1</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">flash</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/FIREWORKS_AI_API_KEY</span><br></span></code></pre></div></div>
<p>Writing <code>os.environ/FIREWORKS_AI_API_KEY</code> keeps the key out of the file. The gateway reads it from the environment at startup.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="2-start-the-gateway">2. Start the gateway<a href="https://docs.litellm.ai/blog/fireworks-getting-started#2-start-the-gateway" class="hash-link" aria-label="Direct link to 2. Start the gateway" title="Direct link to 2. Start the gateway">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">export FIREWORKS_AI_API_KEY="your-key-here"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">litellm --config config.yaml</span><br></span></code></pre></div></div>
<p>The gateway comes up on <code>http://0.0.0.0:4000</code>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="3-send-a-request">3. Send a request<a href="https://docs.litellm.ai/blog/fireworks-getting-started#3-send-a-request" class="hash-link" aria-label="Direct link to 3. Send a request" title="Direct link to 3. Send a request">​</a></h2>
<p>Any OpenAI-compatible client works. With curl:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl http://0.0.0.0:4000/chat/completions \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H 'Content-Type: application/json' \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -d '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "model": "my-model",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "messages": [{"role": "user", "content": "what llm are you"}]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  }'</span><br></span></code></pre></div></div>
<p>Or with the OpenAI Python SDK, changing only the <code>base_url</code>:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#CF222E">import</span><span class="token plain"> openai</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">client </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> openai</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">OpenAI</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    api_key</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"anything"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    base_url</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"http://0.0.0.0:4000"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">response </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">chat</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">completions</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    model</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"my-model"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    messages</span><span class="token operator" style="color:#D73A49">=</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#C6105F">"role"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"user"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"content"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"write a haiku about gateways"</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#CF222E">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">choices</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#005CC5">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">message</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">content</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p>Note the model name in the request is <code>my-model</code>, the alias you chose, and added earlier in the config.yaml file.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="4-add-a-second-model-and-a-fallback">4. Add a second model and a fallback<a href="https://docs.litellm.ai/blog/fireworks-getting-started#4-add-a-second-model-and-a-fallback" class="hash-link" aria-label="Direct link to 4. Add a second model and a fallback" title="Direct link to 4. Add a second model and a fallback">​</a></h2>
<p>You can add as many models as you like. In this tutorial they live in <code>config.yaml</code>, so add another entry to <code>model_list</code>, then tell the router to try the second model when the first is unavailable. Once you connect a database you can also add and edit models from the gateway dashboard without restarting.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">config.yaml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> my</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">model</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> fireworks_ai/deepseek</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">v4p1</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">flash</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/FIREWORKS_AI_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> my</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">backup</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> fireworks_ai/glm</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5p3</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">flash</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/FIREWORKS_AI_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#22863A">router_settings</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#22863A">fallbacks</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">{</span><span class="token key atrule" style="color:#22863A">"my-model"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#C6105F">"my-backup"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">]</span><br></span></code></pre></div></div>
<p>Restart the gateway and your application keeps calling <code>my-model</code>. Rate limits and transient errors now route to the backup automatically.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="where-to-go-next">Where to go next<a href="https://docs.litellm.ai/blog/fireworks-getting-started#where-to-go-next" class="hash-link" aria-label="Direct link to Where to go next" title="Direct link to Where to go next">​</a></h2>
<p>Once the basics are running, the same config file is where you reach the rest of the platform. Account-hosted models use their full <code>accounts/fireworks/models/...</code> path, dedicated deployments add an <code>api_base</code>, and Fireworks routers take a <code>routers/</code> prefix. Requests to <code>/v1/responses</code> reach the native Fireworks Responses API, so server-side MCP tools and response chaining work through the gateway. Document inlining lets models without vision support read documents and images. Embeddings, reranking, and audio transcription route through the same key and the same spend tracking.</p>
<p>To hand out scoped keys with their own budgets, connect a Postgres database and set a master key; see <a href="https://docs.litellm.ai/docs/proxy/virtual_keys">virtual keys</a>. The full provider reference lives in the <a href="https://docs.litellm.ai/docs/providers/fireworks_ai">Fireworks AI docs</a>.</p>]]></content>
        <author>
            <name>Misbah Syed</name>
            <uri>https://github.com/misbahsy</uri>
        </author>
        <category label="tutorial" term="tutorial"/>
        <category label="providers" term="providers"/>
        <category label="fireworks" term="fireworks"/>
        <category label="getting-started" term="getting-started"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Day 0 Support: Xiaomi MiMo V2.6]]></title>
        <id>https://docs.litellm.ai/blog/mimo_v2_6</id>
        <link href="https://docs.litellm.ai/blog/mimo_v2_6"/>
        <updated>2026-09-22T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Day 0 support for Xiaomi MiMo V2.6 Pro and Flash on LiteLLM, priced on the native route for the first time.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="LiteLLM x Xiaomi MiMo V2.6" src="https://docs.litellm.ai/assets/images/hero-78224d975de43e44f8e6be9a9fc50171.png" width="4800" height="2508" class="img_ev3q"></p>
<p>LiteLLM supports <code>mimo-v2.6-pro</code> and <code>mimo-v2.6-flash</code> on day 0, and prices both on Xiaomi's own endpoint for the first time.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="pricing">Pricing<a href="https://docs.litellm.ai/blog/mimo_v2_6#pricing" class="hash-link" aria-label="Direct link to Pricing" title="Direct link to Pricing">​</a></h2>
<p>Per 1M tokens, Pro is $0.435 input and $0.87 output, Flash is $0.14 and $0.28. V2.6 costs what V2.5 cost; Xiaomi kept the rates and raised the model.</p>
<p>Pro reads cached input at $0.0036, about a 121st of its input rate, where most providers in the same cost map charge a tenth. Cache writes are free for now.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="thinking-is-on-by-default">Thinking is on by default<a href="https://docs.litellm.ai/blog/mimo_v2_6#thinking-is-on-by-default" class="hash-link" aria-label="Direct link to Thinking is on by default" title="Direct link to Thinking is on by default">​</a></h2>
<p>Every V2.6 model reasons unless told otherwise, and Xiaomi controls that with <code>thinking.type</code> rather than <code>reasoning_effort</code>. LiteLLM treats <code>xiaomi_mimo</code> as an OpenAI-compatible provider and does not map <code>thinking</code> for it yet, so pass it through explicitly with <code>allowed_openai_params=["thinking"]</code>.</p>
<p>In multi-turn tool calling, the <code>reasoning_content</code> from a prior assistant turn has to go back in the next request or the API returns a 400.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="usage">Usage<a href="https://docs.litellm.ai/blog/mimo_v2_6#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h2>
<div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">SDK</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Proxy</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#CF222E">from</span><span class="token plain"> litellm </span><span class="token keyword" style="color:#CF222E">import</span><span class="token plain"> completion</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">response </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> completion</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    model</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"xiaomi_mimo/mimo-v2.6-pro"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    messages</span><span class="token operator" style="color:#D73A49">=</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#C6105F">"role"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"user"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"content"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"Refactor this migration script."</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    thinking</span><span class="token operator" style="color:#D73A49">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#C6105F">"type"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"disabled"</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">          </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># on by default</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    allowed_openai_params</span><span class="token operator" style="color:#D73A49">=</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#C6105F">"thinking"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#CF222E">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">choices</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#005CC5">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">message</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">content</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> mimo</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">v2.6</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">pro</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> xiaomi_mimo/mimo</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">v2.6</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">pro</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/XIAOMI_MIMO_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">allowed_openai_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#C6105F">"thinking"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> mimo</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">v2.6</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">flash</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> xiaomi_mimo/mimo</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">v2.6</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">flash</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/XIAOMI_MIMO_API_KEY</span><br></span></code></pre></div></div></div></div></div>
<p>Hit <strong>Reload Model Cost Map</strong> in the Admin UI, or <code>POST /reload/model_cost_map</code>, to pick the rows up without a redeploy on <code>v1.76.0</code> and above.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="if-you-are-on-v25">If you are on V2.5<a href="https://docs.litellm.ai/blog/mimo_v2_6#if-you-are-on-v25" class="hash-link" aria-label="Direct link to If you are on V2.5" title="Direct link to If you are on V2.5">​</a></h2>
<p>Xiaomi deprecates <code>mimo-v2.5-pro</code> and <code>mimo-v2.5</code> at 10:00 Beijing time on October 21, 2026.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="https://docs.litellm.ai/blog/mimo_v2_6#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback">​</a></h2>
<p>Running MiMo V2.6 through LiteLLM and hitting something unexpected? Share it on <!-- --> <a href="https://github.com/BerriAI/litellm/discussions" target="_blank" rel="noopener noreferrer">GitHub discussions</a>.</p>]]></content>
        <author>
            <name>Misbah Syed</name>
            <uri>https://github.com/misbahsy</uri>
        </author>
        <author>
            <name>Mateo Wang</name>
            <uri>https://www.linkedin.com/in/mateo-wang</uri>
        </author>
        <category label="xiaomi" term="xiaomi"/>
        <category label="mimo" term="mimo"/>
        <category label="mimo-v2.6" term="mimo-v2.6"/>
        <category label="day 0 support" term="day 0 support"/>
        <category label="card_title:Xiaomi MiMo V2.6" term="card_title:Xiaomi MiMo V2.6"/>
        <category label="card_summary:Xiaomi's Pro ($0.435 / $0.87 per 1M) and Flash ($0.14 / $0.28), same rates as V2.5, priced on the native route." term="card_summary:Xiaomi's Pro ($0.435 / $0.87 per 1M) and Flash ($0.14 / $0.28), same rates as V2.5, priced on the native route."/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Claude Code server-side auto mode through LiteLLM]]></title>
        <id>https://docs.litellm.ai/blog/claude-code-server-side-auto-mode</id>
        <link href="https://docs.litellm.ai/blog/claude-code-server-side-auto-mode"/>
        <updated>2026-09-21T12:00:00.000Z</updated>
        <summary type="html"><![CDATA[Anthropic is moving Claude Code auto mode's safety classifier server-side. LiteLLM's native /v1/messages route now forwards the safeguards contract to the Anthropic API, Bedrock InvokeModel, Bedrock Mantle and Vertex AI. Here is the contract, what changed, which releases carry it, and how to verify it.]]></summary>
        <content type="html"><![CDATA[<p><em>Last Updated: October 9, 2026</em></p>
<p>Anthropic is moving Claude Code auto mode's safety classifier from the client to the Claude API. Starting with Claude Code v2.1.278, released September 19, sessions on Enterprise plans and Claude API accounts ask the server to run those checks as part of their own model requests, and Anthropic does not charge for the checks when the server performs them. Anthropic told us the rollout started on September 18 and is gradual, beginning with the Claude Code CLI and VS Code extension and followed by the desktop app and Claude Code on the web over the following week, and that on September 25 auto mode becomes the default permission mode in Claude Code. Today the built-in default is auto on Pro, Max and Team plans and Manual on Enterprise plans and Claude API keys, the accounts that typically sit behind a gateway, per Anthropic's <a href="https://code.claude.com/docs/en/permission-modes" target="_blank" rel="noopener noreferrer">permission modes reference</a>.</p>
<p>Server-side auto mode depends on a contract between Claude Code and the API that some gateways did not preserve, LiteLLM included. The fix first shipped in the dev release cut on Tuesday, September 22, and is now in the v1.104.0 stable release and in patch releases of earlier lines. This post explains what Claude Code needs from an AI Gateway, what LiteLLM was doing wrong, what changed, which release carries it, and how to confirm your deployment is ready.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-server-side-auto-mode-needs-from-an-ai-gateway">What server-side auto mode needs from an AI Gateway<a href="https://docs.litellm.ai/blog/claude-code-server-side-auto-mode#what-server-side-auto-mode-needs-from-an-ai-gateway" class="hash-link" aria-label="Direct link to What server-side auto mode needs from an AI Gateway" title="Direct link to What server-side auto mode needs from an AI Gateway">​</a></h2>
<p>Claude Code sends a <code>safeguards</code> field in the <code>/v1/messages</code> request body, an array with one <code>dangerous_tool_use</code> entry that carries the session's permission mode, and it sets <code>dangerous-tool-use-2026-09-03</code> in the <code>anthropic-beta</code> header. The API answers with a <code>safeguard_results</code> field: one <code>dangerous_tool_use</code> entry whose <code>status.type</code> is <code>available</code> and whose <code>status.tool_uses</code> is keyed by tool use ID, each marked <code>evaluated</code> with an outcome such as <code>not_flagged</code>. When the response is streamed, <code>safeguard_results</code> arrives inside the <code>delta</code> of the final <code>message_delta</code> event.</p>
<p>For server-side auto mode to run, a gateway has to forward request headers and body fields as they are, including ones it does not recognize such as <code>safeguards</code>, and return responses and streaming events without dropping keys such as <code>safeguard_results</code> or rewriting tool use IDs. Anthropic's <a href="https://code.claude.com/docs/en/llm-gateway-protocol#feature-pass-through" target="_blank" rel="noopener noreferrer">gateway compatibility guide</a> spells this out.</p>
<p>If any of that is dropped or rewritten, the server's checks never reach the session, and Claude Code keeps using its own classifier requests, billed as before. Before the first action it would check that way, Claude Code holds the action and shows this notice, naming the gateway:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">We're changing auto mode to no longer charge for classifier requests in Claude Code. However, this session isn't eligible because your requests go through &lt;your gateway&gt;, which isn't compatible with this update. Nothing breaks: auto mode keeps working, and its classifier requests are billed as before. To fix it and access the new version of auto mode, ask your gateway to implement: https://code.claude.com/docs/en/auto-mode-classifier-billing</span><br></span></code></pre></div></div>
<p>Nothing breaks when this happens. Users keep the auto mode they have today and keep paying for the classifier calls. Anthropic has told us that new Claude Code releases keep the client-side classifier until at least October 23, 2026, that releases after that date only support server-side auto mode, and that from then on auto mode is not available behind a gateway that does not support the server-side classifier, so gateways have a window to catch up. Anthropic's <a href="https://code.claude.com/docs/en/auto-mode-classifier-billing" target="_blank" rel="noopener noreferrer">notice reference</a> covers who sees the notice and what it means.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-litellm-was-doing-wrong">What LiteLLM was doing wrong<a href="https://docs.litellm.ai/blog/claude-code-server-side-auto-mode#what-litellm-was-doing-wrong" class="hash-link" aria-label="Direct link to What LiteLLM was doing wrong" title="Direct link to What LiteLLM was doing wrong">​</a></h2>
<p>LiteLLM's native <code>/v1/messages</code> endpoint builds the outbound request from an allowlist of known Anthropic Messages parameters so that the same endpoint can front Claude on Bedrock, Vertex AI, Azure AI and non-Anthropic models. <code>safeguards</code> was not on that list, so it was silently dropped before the request left the proxy.</p>
<p>Anthropic therefore received a request with no <code>safeguards</code>, returned no evaluated <code>safeguard_results</code>, and Claude Code fell back to the paid client-side classifier. Running Claude Code v2.1.278 in auto mode against a LiteLLM release without the fix shows the notice above with your proxy's address in it, and <code>/status</code> reports the Auto mode server row as <code>Disabled</code>.</p>
<p>The raw pass-through route, <code>POST /anthropic/v1/messages</code>, was never affected. It forwards the body and headers verbatim, and it already carried <code>safeguards</code> and the full beta header before the fix. We confirmed this by running Anthropic's gateway check against a build from before the fix: the pass-through route passes and the native route fails.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-changed">What changed<a href="https://docs.litellm.ai/blog/claude-code-server-side-auto-mode#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed">​</a></h2>
<p><a href="https://github.com/BerriAI/litellm/pull/42152" target="_blank" rel="noopener noreferrer">PR #42152</a>, merged into <code>main</code> on September 21, 2026, makes the native <code>/v1/messages</code> route preserve the contract. <code>safeguards</code> is now a recognized request parameter and is forwarded as sent. When the resolved provider is first-party <code>anthropic</code>, the <code>anthropic-beta</code> header is forwarded unchanged instead of being filtered against the known-betas list; requests to Claude on Bedrock, Vertex AI and Azure AI keep the existing filtering because those providers still reject unknown flags. <code>safeguard_results</code> is declared on the response and streaming chunk types, and it is returned unchanged in both the JSON response and the final <code>message_delta</code> event when streaming. LiteLLM does not rewrite tool use IDs on this route, so <code>safeguard_results</code> entries still match the tool uses they refer to.</p>
<p>When <code>/v1/messages</code> is used to reach a non-Anthropic model through the adapter path, <code>safeguards</code> is stripped before the request is translated so those backends do not return a 400.</p>
<p>Non-Claude models behind the proxy can be covered too from v1.107.0. With <code>safeguards_classifier_model</code> set in <code>general_settings</code>, the proxy generates the auto mode verdicts itself for every non-Claude model behind <code>/v1/messages</code>, such as an open model on Fireworks, a Gemini deployment, an <code>openai/</code> deployment, or DeepSeek on its own Anthropic-compatible endpoint, and for <code>bedrock/converse/</code> models, Claude included. It asks the configured classifier deployment to judge each tool call of the response and returns <code>safeguard_results</code> the way the Anthropic API does, so auto mode stays on server review when Claude Code is pointed at an open model. Setup, cost and the failure behavior are in <a href="https://docs.litellm.ai/docs/claude_code_auto_mode" target="_blank" rel="noopener noreferrer">Claude Code auto mode on non-Claude models</a>.</p>
<p>This fix covers LiteLLM's route to the Anthropic API. Claude Code also asks for server-side checks on Amazon Bedrock and Google Cloud's Vertex AI, and <a href="https://github.com/BerriAI/litellm/pull/42288" target="_blank" rel="noopener noreferrer">PR #42288</a>, merged on September 21, 2026, covers those too. On <code>/v1/messages</code>, Claude on Bedrock InvokeModel (for example <code>bedrock/us.anthropic.claude-sonnet-5</code>) and Claude on Vertex AI now get <code>safeguards</code> and the <code>dangerous-tool-use-2026-09-03</code> beta forwarded, and <code>safeguard_results</code> comes back unchanged. That change is in v1.99.3, v1.100.2, v1.101.1, v1.102.1, v1.103.2 and v1.104.0; v1.101.0 and v1.103.0 do not have it. Claude on Bedrock Mantle (<code>bedrock_mantle/anthropic.claude-sonnet-5</code>) is served through Mantle's native Anthropic Messages API from v1.104.0 and preserves the contract there too.</p>
<p>Bedrock itself does not answer on the Converse route, <code>bedrock/converse/&lt;model&gt;</code>. LiteLLM translates it through the chat completions adapter, which drops <code>safeguards</code>, and Bedrock's ConverseStream API does not return <code>safeguard_results</code> even when they are sent, so Claude Code keeps its paid classifier there unless <code>safeguards_classifier_model</code> is set, in which case the proxy answers for Converse models, Claude included. On releases without the fix the verification request below fails on this route with a 400, <code>safeguards: Extra inputs are not permitted</code>. Without the setting, point Claude Code at a <code>bedrock/&lt;inference profile&gt;</code> deployment, or a <code>bedrock_mantle/</code> deployment on v1.104.0 or later, instead. Microsoft Foundry is tracked separately and not covered by this post.</p>
<p>It first shipped in the dev release cut from <code>main</code> on Tuesday, September 22, ahead of Anthropic's September 25 default change. Dev releases are pre-release builds published to PyPI, Docker Hub and GitHub releases as <code>-dev.N</code> tags, so this one is <code>v1.104.0-dev.1</code> by the current numbering (<code>litellm==1.104.0.dev1</code> on PyPI). The fix for the Anthropic API route is now in the v1.104.0 stable release and was backported to v1.99.3, v1.100.2, v1.101.1, v1.102.1 and v1.103.2. Claude Code sessions routed through the native <code>/v1/messages</code> endpoint on any earlier LiteLLM release see the notice and keep using the client-side classifier until you upgrade. If you would rather your users not see the notice in the meantime, Anthropic documents setting <code>CLAUDE_CODE_AUTO_MODE_SERVER=0</code> in the environment Claude Code starts from, which tells it not to ask the gateway for server-side checks. That only hides the notice: Claude Code keeps making the same paid classifier requests until you upgrade.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-verify-your-deployment">How to verify your deployment<a href="https://docs.litellm.ai/blog/claude-code-server-side-auto-mode#how-to-verify-your-deployment" class="hash-link" aria-label="Direct link to How to verify your deployment" title="Direct link to How to verify your deployment">​</a></h2>
<p>Send a request that mirrors what Claude Code sends, with a forced tool call so the server has something to evaluate, and check the response for <code>safeguard_results</code>. The model has to be a deployment that LiteLLM routes to the Anthropic API, Bedrock InvokeModel, Bedrock Mantle or Vertex AI; replace <code>claude-sonnet-5</code> with that deployment's model name on your proxy.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl -s "$LITELLM_PROXY_URL/v1/messages" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Authorization: Bearer $LITELLM_API_KEY" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "content-type: application/json" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "anthropic-version: 2023-06-01" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "anthropic-beta: dangerous-tool-use-2026-09-03" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -d '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "model": "claude-sonnet-5",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "max_tokens": 256,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "safeguards": [{"type": "dangerous_tool_use", "classifier_context": {"v": 1, "permission_mode": "auto"}}],</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "tools": [{"name": "Bash", "description": "Runs a shell command", "input_schema": {"type": "object", "properties": {"command": {"type": "string"}}, "required": ["command"]}}],</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "tool_choice": {"type": "tool", "name": "Bash"},</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "messages": [{"role": "user", "content": "Run: echo hello"}]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  }' | jq '{safeguard_results, tool_use_ids: [.content[] | select(.type == "tool_use") | .id]}'</span><br></span></code></pre></div></div>
<p>On a release with the fix, the tool use ID in <code>safeguard_results</code> matches the one in the response content:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#005CC5">"safeguard_results"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#005CC5">"type"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"dangerous_tool_use"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#005CC5">"status"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#005CC5">"type"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"available"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#005CC5">"tool_uses"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token property" style="color:#005CC5">"toolu_01V9Z5KXn3SU71Fzr5cquHLi"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token property" style="color:#005CC5">"type"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"evaluated"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token property" style="color:#005CC5">"outcome"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"not_flagged"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#005CC5">"tool_use_ids"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#C6105F">"toolu_01V9Z5KXn3SU71Fzr5cquHLi"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>On a proxy without the fix, <code>safeguard_results</code> comes back empty (<code>[]</code>) or missing, because <code>safeguards</code> never reached the provider.</p>
<p>Anthropic shared a gateway check script with us that sends the same request non-streaming and streaming and checks that every tool use ID comes back evaluated. Both legs pass against a release with the fix. You can also check from Claude Code itself: start a session through your proxy in auto mode, send a prompt and wait for the reply, then run <code>/status</code> and look for the Auto mode server row reading <code>Enabled</code>. Before the first model response the row reads <code>Enabled</code> on any proxy, so check it after a reply. In non-interactive mode with <code>-p --output-format stream-json</code>, the notice above arrives as a <code>system</code> message at <code>warning</code> level, so a scripted check can grep for it.</p>
<p>If you use the <code>/anthropic/v1/messages</code> pass-through route today, no action is needed.</p>
<hr>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="frequently-asked-questions">Frequently Asked Questions<a href="https://docs.litellm.ai/blog/claude-code-server-side-auto-mode#frequently-asked-questions" class="hash-link" aria-label="Direct link to Frequently Asked Questions" title="Direct link to Frequently Asked Questions">​</a></h3>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="does-this-change-how-litellm-handles-beta-headers-for-bedrock-vertex-ai-or-azure-ai">Does this change how LiteLLM handles beta headers for Bedrock, Vertex AI or Azure AI?<a href="https://docs.litellm.ai/blog/claude-code-server-side-auto-mode#does-this-change-how-litellm-handles-beta-headers-for-bedrock-vertex-ai-or-azure-ai" class="hash-link" aria-label="Direct link to Does this change how LiteLLM handles beta headers for Bedrock, Vertex AI or Azure AI?" title="Direct link to Does this change how LiteLLM handles beta headers for Bedrock, Vertex AI or Azure AI?">​</a></h3>
<p>Beta header filtering still applies when the resolved provider is anything other than first-party <code>anthropic</code>, because those providers reject unknown beta flags, so the allowlist in <code>anthropic_beta_headers_config.json</code> remains the source of truth for them. <code>dangerous-tool-use-2026-09-03</code> is on that allowlist for Bedrock InvokeModel and Vertex AI in the releases listed above, and for Bedrock Mantle from v1.104.0, which is how server-side auto mode runs on those routes. Bedrock Converse maps it to nothing, so it is not forwarded there. Only requests bound for the Anthropic API forward the whole header unchanged.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="will-my-claude-code-users-be-broken-before-i-upgrade">Will my Claude Code users be broken before I upgrade?<a href="https://docs.litellm.ai/blog/claude-code-server-side-auto-mode#will-my-claude-code-users-be-broken-before-i-upgrade" class="hash-link" aria-label="Direct link to Will my Claude Code users be broken before I upgrade?" title="Direct link to Will my Claude Code users be broken before I upgrade?">​</a></h3>
<p>No. Claude Code detects that the server's checks are not reaching the session and keeps using its own classifier. Users see the notice, keep the current experience, and keep being billed for classifier calls until you upgrade. Anthropic has told us new Claude Code releases keep the client-side classifier until at least October 23, 2026, and that releases after that date need the server-side classifier for auto mode, so upgrade before then.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="is-this-available-in-litellm-oss">Is this available in LiteLLM OSS?<a href="https://docs.litellm.ai/blog/claude-code-server-side-auto-mode#is-this-available-in-litellm-oss" class="hash-link" aria-label="Direct link to Is this available in LiteLLM OSS?" title="Direct link to Is this available in LiteLLM OSS?">​</a></h3>
<p>Yes. The fix is in LiteLLM OSS (Apache 2.0) and requires no configuration. <a href="https://litellm.ai/enterprise" target="_blank" rel="noopener noreferrer">LiteLLM Enterprise</a> adds SSO/SCIM, air-gapped deployment, 24/7 SLA support and advanced guardrails on top.</p>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://docs.litellm.ai/blog/claude-code-server-side-auto-mode#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
<p>An AI Gateway in front of Claude Code has to forward provider contracts it did not exist for when they were designed. The <code>safeguards</code> field is one of those, and LiteLLM's native <code>/v1/messages</code> route now passes it through unchanged on the way to the Anthropic API, Bedrock InvokeModel, Bedrock Mantle and Vertex AI. Upgrade to a release with the fix, keep Claude Code off <code>bedrock/converse/</code> deployments, run the check above, and your users get server-side auto mode at no cost.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="recommended-reading">Recommended Reading<a href="https://docs.litellm.ai/blog/claude-code-server-side-auto-mode#recommended-reading" class="hash-link" aria-label="Direct link to Recommended Reading" title="Direct link to Recommended Reading">​</a></h2>
<ul>
<li><a href="https://docs.litellm.ai/docs/tutorials/claude_code_gateway" target="_blank" rel="noopener noreferrer">Claude Code with LiteLLM AI Gateway</a></li>
<li><a href="https://docs.litellm.ai/docs/claude_code_auto_mode" target="_blank" rel="noopener noreferrer">Claude Code auto mode on non-Claude models</a></li>
<li><a href="https://docs.litellm.ai/docs/tutorials/claude_code_beta_headers" target="_blank" rel="noopener noreferrer">Claude Code: managing Anthropic beta headers</a></li>
<li><a href="https://docs.litellm.ai/docs/pass_through/anthropic_completion" target="_blank" rel="noopener noreferrer">Anthropic pass-through endpoints</a></li>
<li><a href="https://code.claude.com/docs/en/auto-mode-classifier-billing" target="_blank" rel="noopener noreferrer">Anthropic: auto mode classifier request charges</a></li>
<li><a href="https://code.claude.com/docs/en/llm-gateway-protocol#feature-pass-through" target="_blank" rel="noopener noreferrer">Anthropic: LLM gateway compatibility guide</a></li>
</ul>]]></content>
        <author>
            <name>LiteLLM Team</name>
            <uri>https://github.com/BerriAI/litellm</uri>
        </author>
        <category label="announcement" term="announcement"/>
        <category label="claude-code" term="claude-code"/>
        <category label="anthropic" term="anthropic"/>
        <category label="ai-gateway" term="ai-gateway"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Day 0 Support: Grok 4.7]]></title>
        <id>https://docs.litellm.ai/blog/grok_4_7</id>
        <link href="https://docs.litellm.ai/blog/grok_4_7"/>
        <updated>2026-09-21T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Day 0 support for Grok 4.7 on LiteLLM, at the same price as Grok 4.6.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="LiteLLM x Grok 4.7" src="https://docs.litellm.ai/assets/images/hero-cfcb8e9d9a113488ae752d0dcc526556.png" width="4800" height="2508" class="img_ev3q"></p>
<p>LiteLLM supports <code>grok-4.7</code> on day 0, on <code>/chat/completions</code> and <code>/responses</code>. It keeps Grok 4.6's prices, limits and capabilities.</p>
<!-- -->
<p>SpaceXAI, the company formerly called xAI, built 4.7 and reports the model is better at checking its own work and holding long context. Against Grok 4.6, Terminal-Bench 4.0 goes from 20.3% to 38.0% and EEBench from 53.0% to 64.0%.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="pricing">Pricing<a href="https://docs.litellm.ai/blog/grok_4_7#pricing" class="hash-link" aria-label="Direct link to Pricing" title="Direct link to Pricing">​</a></h2>
<p>Per 1M tokens: $2.00 input, $0.50 cached, $6.00 output, identical to Grok 4.6. Every rate doubles past 200K input tokens, to $4.00, $1.00 and $12.00, so a long-context request costs twice what the headline suggests.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="usage">Usage<a href="https://docs.litellm.ai/blog/grok_4_7#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h2>
<div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">SDK</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Proxy</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#CF222E">from</span><span class="token plain"> litellm </span><span class="token keyword" style="color:#CF222E">import</span><span class="token plain"> completion</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">response </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> completion</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    model</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"xai/grok-4.7"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    messages</span><span class="token operator" style="color:#D73A49">=</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#C6105F">"role"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"user"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"content"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"Refactor this migration script."</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    reasoning_effort</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"xhigh"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">  </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># low | medium | high (default) | xhigh</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#CF222E">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">choices</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#005CC5">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">message</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">content</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> grok</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">4.7</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> xai/grok</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">4.7</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/XAI_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> grok</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4.7</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">openrouter</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> openrouter/x</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">ai/grok</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">4.7</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/OPENROUTER_API_KEY</span><br></span></code></pre></div></div></div></div></div>
<p>Pricing landed in <a href="https://github.com/BerriAI/litellm/pull/42264" target="_blank" rel="noopener noreferrer">PR #42264</a>. Hit <strong>Reload Model Cost Map</strong> in the Admin UI, or <code>POST /reload/model_cost_map</code>, to pick it up without a redeploy on <code>v1.76.0</code> and above.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="https://docs.litellm.ai/blog/grok_4_7#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback">​</a></h2>
<p>Running Grok 4.7 through LiteLLM and hitting something unexpected? Share it on <a href="https://github.com/BerriAI/litellm/discussions/42287" target="_blank" rel="noopener noreferrer">GitHub discussion #42287</a>.</p>]]></content>
        <author>
            <name>Misbah Syed</name>
            <uri>https://github.com/misbahsy</uri>
        </author>
        <author>
            <name>Mateo Wang</name>
            <uri>https://www.linkedin.com/in/mateo-wang</uri>
        </author>
        <author>
            <name>Kerry Lu</name>
            <uri>https://github.com/kerry-berri</uri>
        </author>
        <category label="xai" term="xai"/>
        <category label="grok" term="grok"/>
        <category label="grok-4.7" term="grok-4.7"/>
        <category label="day 0 support" term="day 0 support"/>
        <category label="card_title:Grok 4.7" term="card_title:Grok 4.7"/>
        <category label="card_summary:SpaceXAI's update to Grok 4.6 at the same price and limits, better at checking its own work and long context." term="card_summary:SpaceXAI's update to Grok 4.6 at the same price and limits, better at checking its own work and long context."/>
    </entry>
    <entry>
        <title type="html"><![CDATA[JEV Classifier: 5.43x as Fast as Haiku, 96% Lower Cost]]></title>
        <id>https://docs.litellm.ai/blog/jev-auto-router-benchmark</id>
        <link href="https://docs.litellm.ai/blog/jev-auto-router-benchmark"/>
        <updated>2026-09-20T10:15:00.000Z</updated>
        <summary type="html"><![CDATA[JEV classified requests 5.43x as fast as Haiku by median latency in our AI Gateway benchmark. Explore the setup, cost savings and methodology.]]></summary>
        <content type="html"><![CDATA[<p><em>Last Updated: September 18, 2026</em></p>
<p>An Auto Router pays for classification before the selected model can answer. In our benchmark, TypeSafe JEV classified requests <strong>5.43x as fast as Haiku</strong>, comparing median classifier latency: <strong>126.81 ms versus 688.40 ms</strong>. Registry-priced classifier cost was <strong>96.12% lower</strong>, rounded to 96% in the title</p>
<p>JEV matched our benchmark's expected tiers on 95.00% of calls, versus 73.75% for Haiku. That result depends on the prompts, tier definitions, instructions and context used here. The expected tiers were authored with the synthetic prompts, without independent review. This comparison does not establish general classification accuracy or the quality of the final answers</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-ai-gateway-has-to-pay-for-the-routing-decision">The AI Gateway has to pay for the routing decision<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#the-ai-gateway-has-to-pay-for-the-routing-decision" class="hash-link" aria-label="Direct link to The AI Gateway has to pay for the routing decision" title="Direct link to The AI Gateway has to pay for the routing decision">​</a></h2>
<p>Classifying a greeting and a complex debugging request lets you send each to a different model. A general-purpose LLM can make that decision, but its network round trip, input tokens and structured output add latency and cost before the completion begins</p>
<p>We compared the existing LLM classifier path with <code>classifier_type: jev</code>, using the same authored tier rubric and opening instructions. JEV uses TypeSafe System One Choice evaluation. It returns a tier choice with confidence and probabilities, and the existing Auto Router selects a model from that tier. Tier pools, fallback and the completion path stay in the same router</p>
<p>The question we measured was narrow: how quickly and cheaply can each classifier reproduce the labels we assigned to these prompts? We did not grade generated answers or establish general LLM-quality equivalence</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-we-measured">What we measured<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#what-we-measured" class="hash-link" aria-label="Direct link to What we measured" title="Direct link to What we measured">​</a></h2>
<p>The benchmark ran on <strong>September 18, 2026 UTC</strong>, with <code>jev-latest</code> first resolved to <strong><code>jev-1.13.0</code></strong> and then pinned. The comparison model was <strong><code>anthropic/claude-haiku-4-5-20251001</code></strong>. Each classified the same 80 cases three times, giving 240 measured calls per classifier</p>
<table><thead><tr><th>Metric</th><th style="text-align:right">JEV</th><th style="text-align:right">Haiku</th></tr></thead><tbody><tr><td>Match with authored expected tiers</td><td style="text-align:right">228/240, 95.00%</td><td style="text-align:right">177/240, 73.75%</td></tr><tr><td>Mean classifier latency</td><td style="text-align:right">138.38 ms</td><td style="text-align:right">720.71 ms</td></tr><tr><td>p50 classifier latency</td><td style="text-align:right">126.81 ms</td><td style="text-align:right">688.40 ms</td></tr><tr><td>p95 classifier latency</td><td style="text-align:right">231.16 ms</td><td style="text-align:right">896.94 ms</td></tr><tr><td>Maximum measured latency</td><td style="text-align:right">401.26 ms</td><td style="text-align:right">1,914.98 ms</td></tr><tr><td>Registry-priced cost for 240 calls</td><td style="text-align:right">$0.007706664</td><td style="text-align:right">$0.198534</td></tr><tr><td>HTTP 200 responses</td><td style="text-align:right">240/240</td><td style="text-align:right">240/240</td></tr><tr><td>Provider errors / timeouts / fallback decisions</td><td style="text-align:right">0 / 0 / 0</td><td style="text-align:right">0 / 0 / 0</td></tr></tbody></table>
<p>All measured attempts succeeded, so all-attempt and successful-call latency statistics are identical. Calls with an incorrect tier remain in both latency and cost totals</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-we-calculate-543x-as-fast">How we calculate 5.43x as fast<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#how-we-calculate-543x-as-fast" class="hash-link" aria-label="Direct link to How we calculate 5.43x as fast" title="Direct link to How we calculate 5.43x as fast">​</a></h3>
<p>The title compares the <strong>median of all 240 JEV calls with the median of all 240 Haiku calls</strong>. Using unrounded measurements:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">p50 speed ratio = Haiku_p50 / JEV_p50</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                = 688.395634 ms / 126.814470 ms</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                = 5.43x</span><br></span></code></pre></div></div>
<p>This is a ratio of aggregate statistics, not an average of per-request ratios. The same calculation gives <strong>3.88x as fast at p95</strong> (231.16 ms versus 896.94 ms) and <strong>5.21x as fast by mean latency</strong> (138.38 ms versus 720.71 ms). These ratios measure classification time, not end-to-end completion speed or throughput under load</p>
<table><thead><tr><th>Comparison</th><th style="text-align:right">Estimate</th><th>95% clustered-bootstrap interval</th></tr></thead><tbody><tr><td>p50 speed ratio</td><td style="text-align:right">5.43x</td><td>5.20x to 5.71x</td></tr><tr><td>p95 speed ratio</td><td style="text-align:right">3.88x</td><td>2.94x to 4.78x</td></tr><tr><td>Registry-priced classifier cost savings</td><td style="text-align:right">96.118%</td><td>95.973% to 96.266%</td></tr><tr><td>Paired difference in expected-tier match rate</td><td style="text-align:right">21.25 percentage points</td><td>12.92 to 30.42 points</td></tr></tbody></table>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-matching-the-expected-tiers-tells-us">What matching the expected tiers tells us<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#what-matching-the-expected-tiers-tells-us" class="hash-link" aria-label="Direct link to What matching the expected tiers tells us" title="Direct link to What matching the expected tiers tells us">​</a></h3>
<p>The match rate counts exact matches with a frozen, authored tier label. JEV's 95% interval was <strong>90.00% to 98.75%</strong>, and Haiku's was <strong>64.16% to 82.92%</strong>. Labels and prompts came from the same author, without independent annotation or blind adjudication</p>
<p>Tier selection depends on both the user's request and the classifier's instructions. A different request mix, rubric, tier boundary or conversation history can change the result for either classifier. We tested one fixed configuration, without independently tuning either prompt or measuring sensitivity to alternate instructions. Matching these labels also does not prove that the selected completion model can answer a request well</p>
<p>The classifiers agreed with each other on <strong>189/240 calls, or 78.75%</strong>, with an interval of <strong>69.58% to 87.08%</strong>. Agreement ignores whether either classifier matched the authored label</p>
<table><thead><tr><th>Authored tier, 20 cases and 60 calls each</th><th>JEV match rate [95% interval]</th><th>Haiku match rate [95% interval]</th><th style="text-align:right">Agreement between classifiers</th></tr></thead><tbody><tr><td>SIMPLE</td><td>60/60, 100% [100%, 100%]</td><td>60/60, 100% [100%, 100%]</td><td style="text-align:right">100%</td></tr><tr><td>MEDIUM</td><td>51/60, 85% [70%, 100%]</td><td>23/60, 38.33% [18.33%, 60%]</td><td style="text-align:right">53.33%</td></tr><tr><td>COMPLEX</td><td>57/60, 95% [85%, 100%]</td><td>48/60, 80% [60%, 95%]</td><td style="text-align:right">85%</td></tr><tr><td>REASONING</td><td>60/60, 100% [100%, 100%]</td><td>46/60, 76.67% [58.33%, 93.33%]</td><td style="text-align:right">76.67%</td></tr></tbody></table>
<p>An empirical interval of 100% to 100% means every case in that sampled subset matched. It does not establish perfect accuracy on unseen prompts. There are <strong>80 independent case clusters</strong>, with correlated repeats</p>
<p>JEV consistently assigned four cases to a lower tier than the authored label: M07, M13 and M15 went from MEDIUM to SIMPLE, and C10 went from COMPLEX to MEDIUM. Haiku's mismatches also assigned lower tiers: 37 MEDIUM observations became SIMPLE, 12 COMPLEX became MEDIUM, and 14 REASONING became COMPLEX. The largest difference is on the subjective MEDIUM boundary</p>
<table><thead><tr><th>Subset</th><th>Cases / calls per classifier</th><th style="text-align:right">JEV match rate</th><th style="text-align:right">Haiku match rate</th><th style="text-align:right">Agreement between classifiers</th></tr></thead><tbody><tr><td>Short</td><td>40 / 120</td><td style="text-align:right">97.50%</td><td style="text-align:right">73.33%</td><td style="text-align:right">75.83%</td></tr><tr><td>Long</td><td>16 / 48</td><td style="text-align:right">87.50%</td><td style="text-align:right">62.50%</td><td style="text-align:right">75.00%</td></tr><tr><td>Follow-up</td><td>8 / 24</td><td style="text-align:right">100%</td><td style="text-align:right">87.50%</td><td style="text-align:right">87.50%</td></tr><tr><td>Tool context</td><td>8 / 24</td><td style="text-align:right">100%</td><td style="text-align:right">83.33%</td><td style="text-align:right">83.33%</td></tr><tr><td>Ambiguous boundary</td><td>8 / 24</td><td style="text-align:right">87.50%</td><td style="text-align:right">75.00%</td><td style="text-align:right">87.50%</td></tr></tbody></table>
<p>The boundary subset's match-rate difference was 12.50 points with a <strong>0 to 37.50 point interval</strong>, which includes zero. JEV matched fewer expected tiers on long cases than on short cases. Both findings matter when choosing prompts for your own evaluation</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="per-tier-latency">Per-tier latency<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#per-tier-latency" class="hash-link" aria-label="Direct link to Per-tier latency" title="Direct link to Per-tier latency">​</a></h3>
<table><thead><tr><th>Authored tier</th><th style="text-align:right">JEV p50</th><th style="text-align:right">Haiku p50</th><th style="text-align:right">JEV p95</th><th style="text-align:right">Haiku p95</th></tr></thead><tbody><tr><td>SIMPLE</td><td style="text-align:right">127.78 ms</td><td style="text-align:right">678.22 ms</td><td style="text-align:right">243.44 ms</td><td style="text-align:right">897.53 ms</td></tr><tr><td>MEDIUM</td><td style="text-align:right">128.15 ms</td><td style="text-align:right">690.80 ms</td><td style="text-align:right">215.59 ms</td><td style="text-align:right">844.70 ms</td></tr><tr><td>COMPLEX</td><td style="text-align:right">126.89 ms</td><td style="text-align:right">694.19 ms</td><td style="text-align:right">198.34 ms</td><td style="text-align:right">874.73 ms</td></tr><tr><td>REASONING</td><td style="text-align:right">120.78 ms</td><td style="text-align:right">696.01 ms</td><td style="text-align:right">231.68 ms</td><td style="text-align:right">1,001.60 ms</td></tr></tbody></table>
<p>Full per-tier and per-repeat latency, cost, confidence intervals, confusion matrices and mismatches are in the downloadable <code>metrics.json</code></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="cost-savings-stop-at-the-classifier-boundary">Cost savings stop at the classifier boundary<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#cost-savings-stop-at-the-classifier-boundary" class="hash-link" aria-label="Direct link to Cost savings stop at the classifier boundary" title="Direct link to Cost savings stop at the classifier boundary">​</a></h2>
<p>The cost comparison uses observed tokens multiplied by the archived LiteLLM registry prices. It is <strong>classifier cost</strong>, excluding the completion model, embeddings, warmups and evaluation judges</p>
<table><thead><tr><th>Measured usage and registry rates</th><th style="text-align:right">JEV</th><th style="text-align:right">Haiku</th></tr></thead><tbody><tr><td>Input tokens</td><td style="text-align:right">183,492</td><td style="text-align:right">186,519</td></tr><tr><td>Output tokens</td><td style="text-align:right">12,897</td><td style="text-align:right">2,403</td></tr><tr><td>Input price per million tokens</td><td style="text-align:right">$0.042</td><td style="text-align:right">$1</td></tr><tr><td>Output price per million tokens</td><td style="text-align:right">$0</td><td style="text-align:right">$5</td></tr><tr><td>Mean cost per classification</td><td style="text-align:right">$0.0000321111</td><td style="text-align:right">$0.000827225</td></tr></tbody></table>
<p>The resulting saving is <code>100 * (1 - 0.007706664 / 0.198534) = 96.118%</code>. Every measured response was independently repriced against the archived registry and matched the classifier's reported cost. Prices are the registry values captured for this run. Provider invoices, taxes, discounts and plan entitlements were not checked</p>
<p>The corrected run's excluded resolution and warmup calls cost $0.002478554 at those prices. An earlier setup resolution call is retained separately. They are overhead outside the 240-call comparison</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="configure-jev-in-the-existing-auto-router">Configure JEV in the existing Auto Router<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#configure-jev-in-the-existing-auto-router" class="hash-link" aria-label="Direct link to Configure JEV in the existing Auto Router" title="Direct link to Configure JEV in the existing Auto Router">​</a></h2>
<p>Provision <code>TYPESAFE_API_KEY</code> in the proxy's server environment. <code>TYPESAFE_API_BASE</code> is optional and defaults to <code>https://api.typesafe.ai</code>. Keep provider credentials on the server, and let clients call the router with a LiteLLM virtual key</p>
<p>Add this entry beside the existing tier deployments in <code>model_list</code>, replacing the tier values with your deployed model names:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">config.yaml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> jev</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">router</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> auto_router/complexity_router</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">complexity_router_default_model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">openai_large</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">complexity_router_config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">tiers</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">SIMPLE</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">openai_small</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">MEDIUM</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">openai_large</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">COMPLEX</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">anthropic</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">REASONING</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">anthropic_large</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">classifier_type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> jev</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">jev_classifier_config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> jev</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">latest</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">timeout_ms</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#005CC5">3000</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">circuit_breaker_enabled</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#005CC5">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">circuit_breaker_cooldown_seconds</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#005CC5">30</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">classifier_fallback</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> default_model</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">classifier_context_window_size</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#005CC5">3</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">classifier_context_budget_chars</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#005CC5">8000</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">classifier_context_include_assistant_turns</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#005CC5">false</span><br></span></code></pre></div></div>
<p>This deployment example uses built-in tier criteria, a three-second deadline and a circuit breaker. It explicitly chooses default-model fallback. The benchmark used a shared custom rubric, a ten-second deadline, assistant context and disabled breakers to compare every measured attempt</p>
<p>In the dashboard, create or edit an Auto Router under <strong>Models + Endpoints</strong>, then select <strong>JEV Classifier</strong> under <strong>Classification Method</strong>. The form exposes model, timeout, circuit breaker, context and fallback settings. Custom <strong>JEV Instructions</strong> replace the built-in instructions and follow the Enterprise custom-classifier policy. <a href="https://docs.litellm.ai/docs/auto_router/setup#jev-classifier-typesafe-ai">The setup guide</a> covers the full create, test and edit flow</p>
<p>JEV receives the current ask and classifier context in a System One <code>state</code>, with one <code>questions.tier</code> Choice question. Built-in tiers use shipped criteria. With <code>tier_definitions</code>, the custom descriptions become the Choice criteria. The classifier context budget bounds prior-turn text, while the current ask and extracted system text sit outside it</p>
<p>Like the LLM classifier, JEV sends up to three prior user turns by default, within an 8,000-character budget. That history goes to the configured TypeSafe endpoint. Set <code>classifier_context_window_size: 0</code> to omit it, including when upgrading an existing JEV router</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="failure-handling-in-a-production-grade-ai-gateway">Failure handling in a production-grade AI Gateway<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#failure-handling-in-a-production-grade-ai-gateway" class="hash-link" aria-label="Direct link to Failure handling in a production-grade AI Gateway" title="Direct link to Failure handling in a production-grade AI Gateway">​</a></h2>
<p>A reliable AI Gateway needs a defined route when its classifier cannot answer. JEV uses the existing fallback on a timeout, HTTP failure, malformed response, unknown tier or open circuit. Built-in tiers default to heuristic fallback. Setting <code>classifier_fallback: default_model</code> uses the configured default, while custom tiers can choose a <code>fallback_tier</code></p>
<p>To keep routing resilient to classifier timeouts, the enabled circuit breaker skips JEV calls during the 30-second default cooldown after a recognized timeout. One request then probes recovery. Success closes it, and failure starts another cooldown. The state is local to a router instance in one process, so it does not coordinate provider load across workers. Non-timeout errors while closed fall back without opening the circuit</p>
<p>The supplied live gateway evidence used a real local proxy, PostgreSQL and provider calls. A normal completion and Test Routing succeeded. A separate 1 ms deadline configuration produced a successful completion with <code>default_model_fallback</code> recorded. The logs did not retain the exception subtype, and no JEV usage returned for that cancellation, so receipt or billing by the provider remains unverified</p>
<p>All downstream tier aliases in this gateway check used the same Haiku model. That demonstrates tier selection and execution, without measuring quality or savings from different completion models. Streaming, tool-call completions, custom tier names, all authorization roles and multi-worker accounting are outside this proof</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-routing-can-spend-money">Test Routing can spend money<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#test-routing-can-spend-money" class="hash-link" aria-label="Direct link to Test Routing can spend money" title="Direct link to Test Routing can spend money">​</a></h3>
<p>Test Routing stops after classification and does not send a completion to the selected model. A JEV classification can still incur a charge. Test Connection additionally probes model dependencies and checks that the JEV result actually came from JEV rather than fallback</p>
<p>In the supplied gateway check, Test Routing persisted one classifier row costing <strong>$0.000018186</strong>. The normal completion persisted a <strong>$0.000018060</strong> classifier row and a <strong>$0.000064000</strong> downstream row. The completion's routing metadata carried the classifier cost for attribution, but its spend stayed separate</p>
<p>For accounting, sum the stored row spends once. Adding <code>routing_decision.classifier_cost</code> again would double count the classifier. Successful JEV decisions include the resolved classifier model, probabilities, confidence and registry-priced cost where available. Missing usage or pricing leaves cost unknown. A usable HTTP response can be logged even when its choice later fails validation, so inspect classifier spend rows when reconciling fallback traffic</p>
<p>JEV participates in dependency authorization as <code>typesafe/&lt;configured model&gt;</code> with the <code>evaluation</code> role. Restricted callers need access to the dependencies they invoke. Team-member management requests cannot override the provider key or base URL. See the <a href="https://docs.litellm.ai/docs/proxy/auto_routing#jev-classifier">configuration reference</a> for the exact settings and accounting behavior</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="methodology-and-reproduction">Methodology and reproduction<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#methodology-and-reproduction" class="hash-link" aria-label="Direct link to Methodology and reproduction" title="Direct link to Methodology and reproduction">​</a></h2>
<p>The corpus and protocol were frozen at <strong>22:18:53 UTC</strong>, before provider calls. Measured calls ran from approximately <strong>22:21:05 to 22:24:32 UTC</strong>. There were 20 cases in each tier, with 40 short cases, 16 long cases, eight follow-ups, eight tool-context cases and eight boundary cases. Each has an authored rationale</p>
<p>Both production classifier paths received the same authored rubric and opening instructions. SIMPLE covers lookup and mechanical work, MEDIUM routine drafting and localized code, COMPLEX coupled technical work, and REASONING explicit proofs, justified optimization and decisions with conflicting objectives. Their wire formats differ: the LLM path retains its trust boundary and structured-output wrapper, while JEV uses a Choice question. Neither prompt was independently tuned</p>
<table><thead><tr><th>Setting</th><th>Value</th></tr></thead><tbody><tr><td>Repeats and ordering</td><td>Three repeats, seeded shuffle per repeat, alternating JEV-first and Haiku-first across pairs</td></tr><tr><td>Seed</td><td><code>20260918</code></td></tr><tr><td>Concurrency</td><td><code>1</code></td></tr><tr><td>Deadline</td><td><code>10000</code> ms for both classifiers</td></tr><tr><td>Retries / circuit breakers</td><td>Zero retries / disabled</td></tr><tr><td>Fallback tier</td><td>REASONING</td></tr><tr><td>Context</td><td>Three turns, 8,000 total characters, 4,000 per turn, assistant turns included</td></tr><tr><td>Excluded setup</td><td>One model-resolution call and four warmup pairs in the corrected run</td></tr><tr><td>Sampling settings</td><td>Existing classifier defaults</td></tr><tr><td>Caching</td><td>LiteLLM response caching disabled, no provider prompt-cache directives</td></tr><tr><td>Timing</td><td>Wall clock around production <code>ComplexityRouter.aclassify</code></td></tr><tr><td>Uncertainty</td><td>10,000 percentile-bootstrap resamples of whole cases, preserving both classifiers and all repeats</td></tr></tbody></table>
<p>A symmetric loopback HTTP relay forwarded real provider requests and retained sanitized request/response bodies without authorization headers. Timings include local relay, client, network and provider work. Haiku reported zero cache-read and cache-creation tokens. JEV did not expose cache usage, and provider-internal caching is unknown. Client and provider regions are also unknown</p>
<p>Quantiles use linear interpolation. The bootstrap resamples cases, keeping repeated observations together, rather than treating 240 calls as independent prompts. These intervals describe this corpus and run. They do not cover author bias, another region, sustained load, rate limits, cold starts or another account</p>
<p><a href="https://docs.litellm.ai/assets/files/jev-live-evidence-20260918.tar-d45067fe38d398e8228be8f26d033eb0.gz" target="_blank">Download the frozen raw results and reproduction scripts</a>. The archive contains <code>cases.jsonl</code>, <code>protocol.json</code>, <code>attempts.jsonl</code>, sanitized <code>wire.jsonl</code>, <code>metrics.json</code>, the captured registry, environment versions, gateway evidence, setup failures and a hash manifest</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl -fL https://docs.litellm.ai/benchmarks/jev-live-evidence-20260918.tar.gz \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -o jev-live-evidence-20260918.tar.gz</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">echo "c2653861ab4cf591e902d4d62d55078187e4c66ad5845b5cf5b023d5f427fd7f  jev-live-evidence-20260918.tar.gz" | sha256sum -c -</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tar -xzf jev-live-evidence-20260918.tar.gz</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cd jev-benchmark</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">sha256sum -c SHA256SUMS</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">python analyze.py</span><br></span></code></pre></div></div>
<p>Offline analysis needs Python and Pydantic as listed in the archive's environment record. Its README gives the locked-repository setup and commands for fresh paid provider calls. Use a fresh run directory because the runner refuses to overwrite historical attempts. A future <code>jev-latest</code> resolution may produce a different model, requiring a new experiment and an explicit pricing-analysis update</p>
<p>The measured tree was <code>9dce43d6a0562a4926c39b1bacf7e9a1feac1170</code>, reconstructed from base <code>1d91fc232d20a434a86323506a1303935b9c684f</code>, budget change <code>b9e5bb3abb0f2f0ddc06dcaf9edb63563cac2a2a</code> first, and integration <code>8e5f43f45897fc72612aac53a690fa573ce029cd</code> second. This identifies the tested combination without implying a released version</p>
<table><thead><tr><th>Frozen artifact</th><th>SHA256</th></tr></thead><tbody><tr><td>Corpus</td><td><code>dc85aa66fcab982a2af812a46c6bcd17e0e2a764c2e0c921fb811ce0ce4f31ce</code></td></tr><tr><td>Protocol</td><td><code>27d564fa022d29d8d9dd9c1a905fbf9a92695a138271f59d1174e7b7c49c4927</code></td></tr><tr><td>Registry</td><td><code>529638485889e5499ddb631f05a7fa58c7aaa25ebddfea8b5152d6eca77b1d2b</code></td></tr></tbody></table>
<p>The first harness configuration combined incompatible custom-prompt fields and stopped before measured calls. Two earlier gateway configurations also used invalid or misplaced fallback settings. Their evidence is retained separately, including the first run's implicitly selected MEDIUM default. No measured case was removed or relabeled after calls began</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="key-takeaways">Key Takeaways<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#key-takeaways" class="hash-link" aria-label="Direct link to Key Takeaways" title="Direct link to Key Takeaways">​</a></h2>
<ul>
<li>JEV classified requests 5.43x as fast as Haiku by median latency, and 3.88x as fast at p95, on these 80 authored cases</li>
<li>Expected-tier match rates were 95.00% versus 73.75% for this prompt set and configuration, with 78.75% agreement between classifiers. Downstream answer quality was not measured</li>
<li>Registry-priced classifier cost was 96.118% lower. Total application cost and provider invoices need separate measurement</li>
<li>JEV uses the existing Auto Router's context, tier pools and fallback, with a process-local timeout breaker and separate classifier spend logging</li>
<li>Evaluate your own prompts and completion quality before changing a production routing policy</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="frequently-asked-questions">Frequently Asked Questions<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#frequently-asked-questions" class="hash-link" aria-label="Direct link to Frequently Asked Questions" title="Direct link to Frequently Asked Questions">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="does-this-establish-llm-quality-classification">Does this establish LLM-quality classification?<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#does-this-establish-llm-quality-classification" class="hash-link" aria-label="Direct link to Does this establish LLM-quality classification?" title="Direct link to Does this establish LLM-quality classification?">​</a></h3>
<p>It establishes higher agreement with our authored labels than this Haiku configuration on this corpus. Both classifiers depend on the requests, rubric and context they receive. The labels were not independently reviewed, and repeated calls do not create new independent cases. For a broader quality claim, evaluate representative held-out traffic with independently reviewed labels, compare instruction variants, and use <a href="https://docs.litellm.ai/docs/auto_router/evaluate">shadow evaluation</a> to score the final answers</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-does-543x-as-fast-mean">What does 5.43x as fast mean?<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#what-does-543x-as-fast-mean" class="hash-link" aria-label="Direct link to What does 5.43x as fast mean?" title="Direct link to What does 5.43x as fast mean?">​</a></h3>
<p>Haiku's median classification time divided by JEV's was 5.43: 688.40 ms versus 126.81 ms. The title describes that measured classification speed ratio. It does not measure end-to-end completion speed or throughput under load</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-happens-if-typesafe-is-unavailable">What happens if TypeSafe is unavailable?<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#what-happens-if-typesafe-is-unavailable" class="hash-link" aria-label="Direct link to What happens if TypeSafe is unavailable?" title="Direct link to What happens if TypeSafe is unavailable?">​</a></h3>
<p>The configured fallback picks the next routing path, and recognized classification timeouts open the local circuit breaker. The chosen completion provider must still succeed. Cancellation does not establish that an upstream request was unbilled</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="is-jev-available-in-litellm-oss-or-enterprise">Is JEV available in LiteLLM OSS or Enterprise?<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#is-jev-available-in-litellm-oss-or-enterprise" class="hash-link" aria-label="Direct link to Is JEV available in LiteLLM OSS or Enterprise?" title="Direct link to Is JEV available in LiteLLM OSS or Enterprise?">​</a></h3>
<p>Built-in JEV classification is available without an Enterprise license under the same policy as the built-in LLM classifier. Custom JEV instructions and custom tier definitions use the existing Enterprise custom-classifier capability. TypeSafe provider charges are separate from LiteLLM licensing</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
<p>JEV classified requests 5.43x as fast as Haiku by median latency in this comparison, with lower registry-priced cost and more matches with the authored expected tiers. For Enterprise AI Gateway deployments and OSS deployments alike, the next step is to test real prompts, score the resulting answers and include fallback traffic in spend accounting. Start with the <a href="https://docs.litellm.ai/docs/auto_router/setup#jev-classifier-typesafe-ai">JEV setup guide</a> and <a href="https://docs.litellm.ai/docs/auto_router/evaluate">evaluate on your traffic</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="recommended-reading">Recommended Reading<a href="https://docs.litellm.ai/blog/jev-auto-router-benchmark#recommended-reading" class="hash-link" aria-label="Direct link to Recommended Reading" title="Direct link to Recommended Reading">​</a></h2>
<ul>
<li><a href="https://docs.litellm.ai/docs/auto_router/setup#jev-classifier-typesafe-ai" target="_blank" rel="noopener noreferrer">JEV Auto Router setup</a></li>
<li><a href="https://docs.litellm.ai/docs/proxy/auto_routing#jev-classifier" target="_blank" rel="noopener noreferrer">Auto Router configuration reference</a></li>
<li><a href="https://docs.litellm.ai/docs/pass_through/typesafe" target="_blank" rel="noopener noreferrer">TypeSafe System One pass-through</a></li>
</ul>]]></content>
        <author>
            <name>Moe Khalil</name>
            <uri>https://www.linkedin.com/in/moe-khalil-73a2371a1/</uri>
        </author>
        <category label="routing" term="routing"/>
        <category label="complexity-router" term="complexity-router"/>
        <category label="engineering" term="engineering"/>
        <category label="ai-gateway" term="ai-gateway"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[TypeSafe Jev on LiteLLM]]></title>
        <id>https://docs.litellm.ai/blog/typesafe_jev</id>
        <link href="https://docs.litellm.ai/blog/typesafe_jev"/>
        <updated>2026-09-20T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[TypeSafe AI's Jev lands in LiteLLM v1.103.0-rc: call it through the proxy with logging and cost tracking.]]></summary>
        <content type="html"><![CDATA[<p><a href="https://docs.typesafe.ai/api" target="_blank" rel="noopener noreferrer">TypeSafe AI's Jev</a> launches on LiteLLM today in <code>v1.103.0-rc</code>. Jev is a decision model: it returns a choice, a score, or a yes/no probability instead of text, so it has its own evaluate endpoint rather than <code>/chat/completions</code>. LiteLLM proxies that endpoint with logging and cost tracking.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="pricing">Pricing<a href="https://docs.litellm.ai/blog/typesafe_jev#pricing" class="hash-link" aria-label="Direct link to Pricing" title="Direct link to Pricing">​</a></h2>
<p>$0.042 per 1M input tokens, no output charge. Spend is logged under the versioned model TypeSafe reports (<code>typesafe/jev-1.13.0</code> today), even when you request <code>jev-latest</code>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="usage">Usage<a href="https://docs.litellm.ai/blog/typesafe_jev#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h2>
<p>Set your TypeSafe key once on the proxy, then replace <code>https://api.typesafe.ai</code> with <code>LITELLM_PROXY_BASE_URL/typesafe</code>. Clients only need a LiteLLM virtual key.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">export TYPESAFE_API_KEY="your-typesafe-api-key"</span><br></span></code></pre></div></div>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl -X POST "http://0.0.0.0:4000/typesafe/v1/systemone" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Authorization: Bearer $LITELLM_KEY" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Content-Type: application/json" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -d '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "state": "Help! My payouts have been failing for 3 days.",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "model": "jev-latest",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "questions": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "department": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "type": "choice",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "instructions": "Which team should handle this?",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "criteria": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          "billing": "Payments, invoicing, refunds",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          "technical": "Bugs, outages, integrations"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  }'</span><br></span></code></pre></div></div>
<p>The response is TypeSafe's own, unchanged. Any path under <code>/typesafe/</code> is forwarded, so <code>GET /typesafe/v1/models</code> lists the available models. Full details in the <a href="https://docs.litellm.ai/docs/pass_through/typesafe">TypeSafe pass-through docs</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="https://docs.litellm.ai/blog/typesafe_jev#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback">​</a></h2>
<p>Running Jev through LiteLLM and hitting something unexpected? Open a <a href="https://github.com/BerriAI/litellm/discussions" target="_blank" rel="noopener noreferrer">GitHub discussion</a>.</p>]]></content>
        <author>
            <name>Kerry Lu</name>
            <uri>https://github.com/kerry-berri</uri>
        </author>
        <category label="typesafe" term="typesafe"/>
        <category label="jev" term="jev"/>
        <category label="product" term="product"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Auto-Router: Switching Tiers Without Encrypted Content Failures]]></title>
        <id>https://docs.litellm.ai/blog/auto-router-encrypted-content-routing</id>
        <link href="https://docs.litellm.ai/blog/auto-router-encrypted-content-routing"/>
        <updated>2026-09-18T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[How LiteLLM safely removes undecryptable encrypted reasoning from cross-tier follow-ups so Auto-Router can keep routing requests]]></summary>
        <content type="html"><![CDATA[<p>Auto-Router can move a conversation between tiers as the request changes from simple work to a harder task. Responses API clients can make that switch difficult because a previous response may include encrypted reasoning content that only the deployment that created it can decrypt</p>
<p>LiteLLM now keeps the readable history and removes encrypted reasoning that the newly selected tier cannot verify. The request can continue to the selected model instead of failing with <code>invalid_encrypted_content</code></p>
<p>This fix is included in the LiteLLM <code>v1.102.x</code> release line and landed in <a href="https://github.com/BerriAI/litellm/pull/40280" target="_blank" rel="noopener noreferrer">PR #40280</a></p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-encrypted-reasoning-blocks-fail-after-a-tier-change">Why encrypted reasoning blocks fail after a tier change<a href="https://docs.litellm.ai/blog/auto-router-encrypted-content-routing#why-encrypted-reasoning-blocks-fail-after-a-tier-change" class="hash-link" aria-label="Direct link to Why encrypted reasoning blocks fail after a tier change" title="Direct link to Why encrypted reasoning blocks fail after a tier change">​</a></h2>
<p>A Responses API reasoning item can contain an <code>encrypted_content</code> field and an item ID such as <code>rs_...</code>. The provider binds that payload to the organization, API key, or encryption boundary that created it. A later request that carries the item to a different boundary can reach the provider, but the provider cannot verify it</p>
<p>Auto-Router makes this situation more common than a fixed model route. One turn may go to a fast model in the SIMPLE tier. The next turn may classify as COMPLEX and select a different model group. If the follow-up includes reasoning from the first turn, forwarding the encrypted payload to the second group produces the upstream error</p>
<p>Broad session or deployment affinity avoids the error by pinning more traffic than the conversation requires. It also prevents Auto-Router from switching tiers when the request needs a different model</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-routing-decision">The routing decision<a href="https://docs.litellm.ai/blog/auto-router-encrypted-content-routing#the-routing-decision" class="hash-link" aria-label="Direct link to The routing decision" title="Direct link to The routing decision">​</a></h2>
<p>Enable the <code>encrypted_content_affinity</code> pre-call check alongside your Auto-Router configuration</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">router_settings</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#22863A">optional_pre_call_checks</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> encrypted_content_affinity</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">standard</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> anthropic/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/ANTHROPIC_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> opus</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> anthropic/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">opus</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/ANTHROPIC_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> production</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">auto</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">router</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> auto_router/complexity_router</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">complexity_router_config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">classifier_type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> heuristic</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">tiers</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#22863A">SIMPLE</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">standard</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#22863A">COMPLEX</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> opus</span><br></span></code></pre></div></div>
<p>When LiteLLM sees a tracked encrypted item, it first looks for the deployment that created it. If that deployment is available, LiteLLM pins this request to it. If another healthy deployment shares the same encryption boundary, LiteLLM can use that peer</p>
<p>If the originating deployment belongs to a different routed group, LiteLLM removes the undecryptable encrypted reasoning and returns the healthy deployments for the selected group. Auto-Router keeps its tier decision</p>
<p>A same-group deployment that is temporarily unavailable follows the existing fail-fast behavior. LiteLLM does not send the encrypted item to a same-group deployment that cannot serve it and does not hide a cooldown behind a cross-tier rewrite</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-litellm-removes">What LiteLLM removes<a href="https://docs.litellm.ai/blog/auto-router-encrypted-content-routing#what-litellm-removes" class="hash-link" aria-label="Direct link to What LiteLLM removes" title="Direct link to What LiteLLM removes">​</a></h2>
<p>LiteLLM mutates the request before dispatch and removes <code>encrypted_content</code> and <code>id</code> from a reasoning item when the selected deployment cannot decrypt them. It keeps a readable <code>summary</code> or <code>content</code> field so the selected model still sees the response history</p>
<p>If a reasoning item has no readable summary or content, LiteLLM removes that item. Other input items, including user messages and ordinary assistant messages, remain in the request</p>
<p>For example, a cross-tier follow-up changes from this:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#005CC5">"type"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"reasoning"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#005CC5">"id"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"rs_previous_deployment_item"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#005CC5">"encrypted_content"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"opaque-provider-payload"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#005CC5">"summary"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token property" style="color:#005CC5">"type"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"summary_text"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#005CC5">"text"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"The request needs a larger model"</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>to this before dispatch:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#005CC5">"type"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"reasoning"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#005CC5">"summary"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token property" style="color:#005CC5">"type"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"summary_text"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#005CC5">"text"</span><span class="token operator" style="color:#D73A49">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"The request needs a larger model"</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>LiteLLM applies the same boundary check to bridged Anthropic thinking blocks. When the bridge identifies encrypted reasoning from another route, it drops that thinking block instead of forwarding a foreign or unsigned signature that the provider would reject</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-this-keeps-auto-router-useful">Why this keeps Auto-Router useful<a href="https://docs.litellm.ai/blog/auto-router-encrypted-content-routing#why-this-keeps-auto-router-useful" class="hash-link" aria-label="Direct link to Why this keeps Auto-Router useful" title="Direct link to Why this keeps Auto-Router useful">​</a></h2>
<p>The check pins only requests that need the original encryption boundary. Ordinary requests continue through the configured routing strategy, and a cross-tier follow-up can reach the tier selected for the current request</p>
<p>This gives Auto-Router two safe paths. It preserves encrypted reasoning when the selected deployment can verify it. For cross-tier Responses requests, it preserves the readable summary and removes the provider-bound payload. For bridged Anthropic thinking, it drops the foreign encrypted block before dispatch</p>
<p>The behavior lives in the encrypted-content pre-call check and the Responses request utilities. The relevant implementation and regression coverage are available in <a href="https://github.com/BerriAI/litellm/blob/main/litellm/router_utils/pre_call_checks/encrypted_content_affinity_check.py" target="_blank" rel="noopener noreferrer">the affinity check</a>, <a href="https://github.com/BerriAI/litellm/blob/main/litellm/responses/utils.py" target="_blank" rel="noopener noreferrer">the Responses request utility</a>, and <a href="https://github.com/BerriAI/litellm/blob/main/tests/test_litellm/router_utils/pre_call_checks/test_encrypted_content_affinity_check.py" target="_blank" rel="noopener noreferrer">the routing tests</a></p>
<p>For the complete setup and deployment-affinity behavior, see the <a href="https://docs.litellm.ai/docs/response_api#encrypted-content-affinity-multi-region-load-balancing" target="_blank" rel="noopener noreferrer">Responses API encrypted content affinity guide</a></p>]]></content>
        <author>
            <name>Tin Lo</name>
            <uri>https://www.linkedin.com/in/tinchi-lo/</uri>
        </author>
        <category label="routing" term="routing"/>
        <category label="complexity-router" term="complexity-router"/>
        <category label="responses-api" term="responses-api"/>
        <category label="engineering" term="engineering"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Day 0 Support: Qwen3.8-Omni-Flash]]></title>
        <id>https://docs.litellm.ai/blog/qwen3_8_omni_flash</id>
        <link href="https://docs.litellm.ai/blog/qwen3_8_omni_flash"/>
        <updated>2026-09-18T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Day 0 support for Qwen3.8-Omni-Flash on LiteLLM, with text, image, audio and video input.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="LiteLLM x Qwen3.8-Omni-Flash" src="https://docs.litellm.ai/assets/images/hero-4fbaabc570f5d4a078bda24f6db8a809.png" width="4800" height="2508" class="img_ev3q"></p>
<p>LiteLLM supports <code>qwen3.8-omni-flash</code> on day 0 through the DashScope provider, with text, image, audio and video input and text output. Audio and video content parts pass straight through, so an OpenAI-shaped request works as it is.</p>
<!-- -->
<p>Qwen calls it its first omni model built around agentic work. It reasons over audio and video together and calls tools across long jobs, such as editing a vlog or recapping a film. It has a 1M-token context window and 131K max output, and Qwen puts video input at about 89% cheaper than Qwen3.5-Omni-Plus.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="pricing">Pricing<a href="https://docs.litellm.ai/blog/qwen3_8_omni_flash#pricing" class="hash-link" aria-label="Direct link to Pricing" title="Direct link to Pricing">​</a></h2>
<p>Per 1M tokens, International: $0.15 input, $0.016 cached input, $0.47 output. Pricing lands in <a href="https://github.com/BerriAI/litellm/pull/41754" target="_blank" rel="noopener noreferrer">PR #41754</a>; without it requests route fine but log $0 spend. Hit <strong>Reload Model Cost Map</strong> in the Admin UI, or <code>POST /reload/model_cost_map</code>, to pick it up without a redeploy on <code>v1.76.0</code> and above.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="usage">Usage<a href="https://docs.litellm.ai/blog/qwen3_8_omni_flash#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h2>
<p>LiteLLM's DashScope provider defaults to the mainland China endpoint. On an International account, set <code>api_base</code> to <code>https://dashscope-intl.aliyuncs.com/compatible-mode/v1</code>, as below. Audio goes in as a <code>data:;base64,</code> URL rather than the bare base64 OpenAI accepts.</p>
<div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">SDK</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Proxy</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#CF222E">import</span><span class="token plain"> base64</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#CF222E">from</span><span class="token plain"> litellm </span><span class="token keyword" style="color:#CF222E">import</span><span class="token plain"> completion</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">audio </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> base64</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">b64encode</span><span class="token punctuation" style="color:#393A34">(</span><span class="token builtin">open</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#C6105F">"clip.wav"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"rb"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">read</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">decode</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">response </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> completion</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    model</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"dashscope/qwen3.8-omni-flash"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    api_base</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"https://dashscope-intl.aliyuncs.com/compatible-mode/v1"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    messages</span><span class="token operator" style="color:#D73A49">=</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#C6105F">"role"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"user"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"content"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#C6105F">"type"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"input_audio"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"input_audio"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#C6105F">"data"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"data:;base64,"</span><span class="token plain"> </span><span class="token operator" style="color:#D73A49">+</span><span class="token plain"> audio</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"format"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"wav"</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#C6105F">"type"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"text"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"text"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"Summarize this clip in one sentence."</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#CF222E">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">choices</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#005CC5">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">message</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">content</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> qwen3.8</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">omni</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">flash</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> dashscope/qwen3.8</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">omni</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">flash</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_base</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">//dashscope</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">intl.aliyuncs.com/compatible</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">mode/v1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/DASHSCOPE_API_KEY</span><br></span></code></pre></div></div><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl -X POST "http://0.0.0.0:4000/chat/completions" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Content-Type: application/json" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Authorization: Bearer $LITELLM_KEY" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -d '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "model": "qwen3.8-omni-flash",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "messages": [{"role": "user", "content": "what llm are you"}]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  }'</span><br></span></code></pre></div></div></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="https://docs.litellm.ai/blog/qwen3_8_omni_flash#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback">​</a></h2>
<p>Running Qwen3.8-Omni-Flash through LiteLLM and hitting something unexpected? Share it on <a href="https://github.com/BerriAI/litellm/discussions/41845" target="_blank" rel="noopener noreferrer">GitHub discussion #41845</a>.</p>]]></content>
        <author>
            <name>Misbah Syed</name>
            <uri>https://github.com/misbahsy</uri>
        </author>
        <author>
            <name>Mateo Wang</name>
            <uri>https://www.linkedin.com/in/mateo-wang</uri>
        </author>
        <category label="qwen" term="qwen"/>
        <category label="dashscope" term="dashscope"/>
        <category label="qwen3.8-omni-flash" term="qwen3.8-omni-flash"/>
        <category label="day 0 support" term="day 0 support"/>
        <category label="card_title:Qwen3.8-Omni-Flash" term="card_title:Qwen3.8-Omni-Flash"/>
        <category label="card_summary:Qwen's first omni model: text, image, audio and video input with text output, through DashScope." term="card_summary:Qwen's first omni model: text, image, audio and video input with text output, through DashScope."/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Reduce agent context with TypeSafe Jev and LiteLLM]]></title>
        <id>https://docs.litellm.ai/blog/typesafe-jev-compaction</id>
        <link href="https://docs.litellm.ai/blog/typesafe-jev-compaction"/>
        <updated>2026-09-18T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Use TypeSafe Jev to remove old tool results from bot conversations and enable compaction for a team in LiteLLM.]]></summary>
        <content type="html"><![CDATA[<p>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.</p>
<p>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.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-jev-does">What Jev does<a href="https://docs.litellm.ai/blog/typesafe-jev-compaction#what-jev-does" class="hash-link" aria-label="Direct link to What Jev does" title="Direct link to What Jev does">​</a></h2>
<p><a href="https://docs.typesafe.ai/api" target="_blank" rel="noopener noreferrer">TypeSafe's Jev</a> answers questions with a choice, a score, or a yes/no probability. For example, it can choose whether a customer question belongs with billing or support.</p>
<p>You can call Jev directly through LiteLLM's <code>/typesafe/v1/systemone</code> endpoint. The <a href="https://docs.litellm.ai/docs/pass_through/typesafe">TypeSafe pass-through guide</a> shows the request format, logging, and cost tracking.</p>
<p>For compaction, LiteLLM asks Jev a simple question about each older tool result: <strong>does the bot still need this to answer the user's latest question?</strong></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-compaction-works">How compaction works<a href="https://docs.litellm.ai/blog/typesafe-jev-compaction#how-compaction-works" class="hash-link" aria-label="Direct link to How compaction works" title="Direct link to How compaction works">​</a></h2>
<!-- -->
<p>LiteLLM checks each completed tool exchange: a tool call and its results. By default, results with a Jev score below <code>0.2</code> are replaced with:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[Tool result removed by TypeSafe compaction: judged no longer relevant to the current task]</span><br></span></code></pre></div></div>
<p>Results that are kept stay unchanged. LiteLLM also keeps the tool calls and their IDs, so the conversation still has the structure the model expects. System and user messages are unchanged. The last assistant message and any tool exchange it belongs to are protected.</p>
<p>The guardrail works with Chat Completions, Anthropic Messages, and the Responses API. Jev checks the old tool results; your chosen model writes the answer.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="enable-compaction-in-litellm">Enable compaction in LiteLLM<a href="https://docs.litellm.ai/blog/typesafe-jev-compaction#enable-compaction-in-litellm" class="hash-link" aria-label="Direct link to Enable compaction in LiteLLM" title="Direct link to Enable compaction in LiteLLM">​</a></h2>
<p>Use a LiteLLM proxy with a model already configured and a build that includes the <code>typesafe</code> guardrail. Keep your existing authentication setup, including OIDC if you use it.</p>
<p>Set your TypeSafe API key on the proxy:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">export TYPESAFE_API_KEY="your-typesafe-api-key"</span><br></span></code></pre></div></div>
<p>Add this guardrail to your existing <code>config.yaml</code>, then restart the proxy:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">config.yaml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">guardrails</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">guardrail_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> jev</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">compaction</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">guardrail</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> typesafe</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">mode</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> pre_call</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/TYPESAFE_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">optional_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">relevance_threshold</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#005CC5">0.2</span><br></span></code></pre></div></div>
<p><code>pre_call</code> means compaction runs before LiteLLM calls your model. The proxy sends TypeSafe the system text, latest user question, and older tool exchanges selected for evaluation. This setup leaves compaction off until you enable it for a request or team.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="try-it-weather-then-shop-hours">Try it: weather, then shop hours<a href="https://docs.litellm.ai/blog/typesafe-jev-compaction#try-it-weather-then-shop-hours" class="hash-link" aria-label="Direct link to Try it: weather, then shop hours" title="Direct link to Try it: weather, then shop hours">​</a></h2>
<p>This example has two tool results: a weather report and the shop's opening hours. The user only wants to know when the shop closes. Jev can mark the weather report for removal. The shop hours belong to the last assistant exchange, so LiteLLM keeps them.</p>
<p>Set <code>LITELLM_PROXY_URL</code> to your gateway URL and <code>ACCESS_TOKEN</code> to a bearer token accepted by your proxy. For OIDC, use your valid OIDC access token. Replace <code>my-model</code> below with a model available to your team.</p>
<details class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true"><summary>Complete example request</summary><div><div class="collapsibleContent_i85q"><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl -i "$LITELLM_PROXY_URL/v1/chat/completions" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Authorization: Bearer $ACCESS_TOKEN" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Content-Type: application/json" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -d '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "model": "my-model",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "guardrails": ["jev-compaction"],</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "tool_choice": "none",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "tools": [{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "type": "function",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "function": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "name": "lookup",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "description": "Look up the weather or shop hours.",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "parameters": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          "type": "object",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          "properties": {"query": {"type": "string"}},</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          "required": ["query"]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }],</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "messages": [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      {"role": "system", "content": "Answer the latest question using the tool results. Keep it short."},</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      {"role": "user", "content": "Check the weather in London, then look up the shop hours."},</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      {"role": "assistant", "tool_calls": [{"id": "call_weather", "type": "function", "function": {"name": "lookup", "arguments": "{\"query\":\"London weather\"}"}}]},</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      {"role": "tool", "tool_call_id": "call_weather", "content": "Today in London it is cool and cloudy. It may rain in the afternoon, so bring an umbrella. The wind is light and the temperature is 16 C. Tomorrow is expected to be warmer with clear skies. This weather report covers the next two days."},</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      {"role": "assistant", "tool_calls": [{"id": "call_shop", "type": "function", "function": {"name": "lookup", "arguments": "{\"query\":\"shop hours\"}"}}]},</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      {"role": "tool", "tool_call_id": "call_shop", "content": "Shop hours: Monday to Friday, open at 9 AM and close at 6 PM. On Saturday, open at 10 AM and close at 4 PM. The shop is closed on Sunday. These hours apply to the main shop on High Street. Customers can collect online orders during the same opening hours."},</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      {"role": "user", "content": "Forget the weather. What time does the shop close on Monday?"}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  }'</span><br></span></code></pre></div></div></div></div></details>
<p>Both tool results are longer than the default 200-character minimum. If Jev scores the weather result below <code>0.2</code>, LiteLLM replaces it with the removal notice. The shop hours stay in the request, and the model should answer <strong>6 PM</strong>.</p>
<p>Jev may decide a result is still useful and keep it. Turning on compaction does not guarantee that every request gets smaller.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="check-the-result">Check the result<a href="https://docs.litellm.ai/blog/typesafe-jev-compaction#check-the-result" class="hash-link" aria-label="Direct link to Check the result" title="Direct link to Check the result">​</a></h2>
<p>Look for <code>jev-compaction</code> in the <code>x-litellm-applied-guardrails</code> response header. On a proxy with database logging, open the request in <strong>Logs → Guardrails &amp; Policy Compliance</strong>. When results are removed, the guardrail records:</p>
<table><thead><tr><th>Field</th><th>What it shows</th></tr></thead><tbody><tr><td><code>exchanges_evaluated</code></td><td>How many tool exchanges Jev checked.</td></tr><tr><td><code>exchanges_dropped</code></td><td>How many had their results replaced.</td></tr><tr><td><code>chars_removed</code></td><td>About how many characters were removed.</td></tr><tr><td><code>model</code></td><td>The configured Jev model.</td></tr></tbody></table>
<p>Compare the same request with compaction on and off. For the off version, remove <code>guardrails</code> from the request and use a team without compaction enabled. Also leave <code>default_on</code> disabled. Compare input tokens, response time, and whether the answer is still correct. Include Jev's own cost when checking total savings.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="turn-it-on-for-a-team">Turn it on for a team<a href="https://docs.litellm.ai/blog/typesafe-jev-compaction#turn-it-on-for-a-team" class="hash-link" aria-label="Direct link to Turn it on for a team" title="Direct link to Turn it on for a team">​</a></h2>
<p>On LiteLLM Enterprise, attach <code>jev-compaction</code> to a team. If your users authenticate with OIDC, use the LiteLLM team that their tokens map to. See the <a href="https://docs.litellm.ai/docs/proxy/token_auth#tracking-end-users--internal-users--team--org">OIDC setup guide</a> for that mapping.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl "$LITELLM_PROXY_URL/team/update" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Authorization: Bearer $LITELLM_MASTER_KEY" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Content-Type: application/json" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -d '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "team_id": "my-team-id",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "guardrails": ["jev-compaction"]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  }'</span><br></span></code></pre></div></div>
<p>Start with the default score threshold of <code>0.2</code>. A higher threshold can remove more results, so check that answers stay correct before raising it. If Jev is unavailable, LiteLLM's default <code>fail_open</code> setting sends the original request to the model without compaction.</p>
<p>See the <a href="https://docs.litellm.ai/docs/proxy/guardrails/typesafe">TypeSafe compaction guide</a> for more settings, or the <a href="https://docs.litellm.ai/docs/pass_through/typesafe">pass-through guide</a> to call Jev directly.</p>]]></content>
        <author>
            <name>Yassin Kortam</name>
            <uri>https://www.linkedin.com/in/yassink/</uri>
        </author>
        <category label="product" term="product"/>
        <category label="agents" term="agents"/>
        <category label="guardrails" term="guardrails"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Auto Router: 5 Improvements for Cost, Speed, and Team Control]]></title>
        <id>https://docs.litellm.ai/blog/auto-router-five-improvements</id>
        <link href="https://docs.litellm.ai/blog/auto-router-five-improvements"/>
        <updated>2026-09-17T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Five Auto Router updates: cache-cost estimates, Fast Mode by tier, team-managed routers, live CLI stats, and more accurate Anthropic savings.]]></summary>
        <content type="html"><![CDATA[<p>Predict cache costs, set speed by tier, let teams manage routers, and see the chosen model and savings in your CLI.</p>
<img src="data:image/png;base64,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u//yrnzZzrejpmsoTu8+T/h+sP6GG4lox/ZtB/bvS374pc8/UA8K77nA377j3e+dnItNrsH84fe9/yIfUaJnxszJqWiD53k/8mM/USg0XfzevuxxPnPmrO/7wR859zDNmDnzAx/8DW+q8O4sVz7MLvVsc0lD6zJeeqbr6N94y62TE+fJrt9w4/wFC1+xZ10AAAAAACBUjMK0e/zRh1Zft9YYs279hkce+vbkX61cvSb5SNmo6GTm9//UzyUfy4eHhx749H9s2vhCqVRsbWu/+dbb7rv/rcaYtddvuPGWW5987NEL3297R0dy4fgFZ1u/vG665TbjeSLyB7/16/39xxs//8IDn/mRH//JW2+/c9nyFS2tbcNDg1/+wgNf/sID73j3e++7/y1E9HM/+b5GIViQSr3pLW8joiiKHvjMf7zw7DPDI8PiXFNzy6rV193/1rcXmprS6fSa69Y99shDRHSBm7r47bnae2b3rp2jI8NNzS0bbrzprNn0667fYDyv//ixo0cOq0k1Vg3pdPoHf/THk2Di6JEjn//sp7Zv3VqtVjo6u2657Y7X3fcmrfXMWX1vf+e7//3f/oXOyZKGhwb/6cN/t2vnDsWKSKZ3WF7qwUqqBX/kx39SKUVEJ/qPP/CZT23burlSLre2td948633v/XtWuv73/r273zz69Vq5ZKufCUHaModNY1DcRr3+aRY6oZUKk1EX/3S5xs/PLB/3/ZtW5YuW7H2+g25fP589ZXGGBF56Nvf/NbXH+w/fiyby990y21vf8e7jOelM5m112945DvfuvAjaliwcBERPfnYo19/8MtHjxzJFwrrb7jxrd/zLt/305nMdeuuf+jb37yYvX0l4/ze171Baf30k49/+QufO3bsaKFQuOmW297ytncYz+vs6n79G9/8hQc+QxesF77yYXZJZ5vLeOJc0kvPS7xLuLijnxyU733vDySXd+3Y/sBn/mPf3j3GeEuXr/ied7+nu7vnCvcDAAAAAAAAIRh9dXnh+edKpVI2m73hplvO+nSaTGas1WqN2aOrr1vb0zuDiAZOnfr93/pfSVUUEZ080f/AZz61b+/en//FDxDR6++7/yXTkCQBIaKxsdFX7M5paW0jImtttXZ2vepHPvx3H/nw313MjaxYuSp5sP/20Y88XP98TkSnTp745te/OjBw8r//wgeIqLun99ps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f3DkgguwleA24fFPeur/97/+9/jkJDYF9hS2BvYOAAAAAAChYvQ27S//9I8+95lPYzvcnnzuM58+aPv0cU98ysMe8SgR+eD73vuZT10/OzOTGVMpVy67xxVP/bGfGJ+YfMWrX/trr/zldrt1x9kmcBv1pKc+LQgCbIeD/6GHPXXmrbG/n4rYO/gWAwAAAABCxSjAHaRvw+Oe+GQi+vd/+ed3vuNtx269NUkSt4Ly05+8/n/91huazUalUn3Eox+LbQUAAAAAAAAAQEiMAtw+jI+PFwoFIvrC5z5z+r8uzM9/8fOfI6K7X3Y5thUAAAAAAAAAAGEp/YEyffjI69/020EQfOJjH/m7v/nLwc/Llcob3/x7pXL5Ex//6N/99V8Mfn7R0aMPf+RjLrn0spHqiNa60Wz84Pvf+/CHPvC973yb1g5A+MTHPvLWf/jbxz/xKfd/4INGx8br9doXP//Zf/vndyZJPDo29qM//owrr7omXyjMz81+9L//678/9AERGf7zz3/202/5yz97ytN+/LoHPKhcriwvLX7lhi994H3vWVlePuuLKhZLj378E669570nJidFaPbUqc9/7jP//aH3x3F81r+tVEce+4QnXnX1tRMTk1aktrJ84/e/95EPf+gH3//ezp5liw+4lV87wxySRz/u8VdedY0beTEzc+pLn//chz/0gW63s26nfOoTH/+nt7/1SU952tXX3mt0dDSO4xu//70PvO893/32t3Zw8HS7XfcfF1508cypk6f/wj/+7V//49/+9ek/P+tR9JSnPf0pT/vxY7fe+vrXvHLd397tkru/+nW/mSTxL77kxd1u5/Rtst1XeuFFFz32CU++5O6XlivVxYX5T17/sQ+8772//htvOnqnO7/5ja///ne/s90DY0PlSuXhj3z0Pe9934mJSVZ88sSJz376k//9oQ8YY3a2K8/b+2srb/kHPuRhL/zZn//YRz78iY9/9Lkv+JnDh4/Uaiv/8e//+omPfeRc3o9nftitbKvN5rMNZrm8/GUvWV5a/KnnPPdRj3m8+6dXv/YNRPTOd7ztA//5nu1+nlx09OjjnvDkS+5+aaFYmjl58gPvf8+3v/GNLb6btnKAbXffbSXy7b5fdvYaX/P6N971bpf86zv/33v/49/WvZeJ6I9+/3e++uUbBj9/5GMe98znPO+rX77hj37/d9a9wc+8p4hIaf2oxzzuQQ952OTUoW6n88Mf3Pi+97578C4+s61/u53jB+lufXdstjU2+1Tc8YfGFrfPQXgfOb7vP+lHf+z+D3xwpVxZWlr66pe/9L73vPv0qU1b2eN7cVZAZ5swtt3D7FzOeQAAAAAAidE7ulMnT/zzO/7vs577/Ac/7OGf/9xnvvn1r7mfv+Bnfq5ULs/Pzb7jrf8w+OVHPfbxP/msn2bmwU9GRkbvfd/73es+173lL//s05+8fu2VSfCrr3ndXe52SS/jMzb+mMc98ciRC9/xtn949WvfUCyVBpnZZz7neYVC4d3/+q7hP9da/9KvvObSfrHh5NShRz/uCdc94IH/+3d+69itt5zhFR29051/8RWvKlcqwxc/Fx09+sAHP+R//85vLS4unOFvx8bGf/0Nb6pURwY/mZicmpicut8DHvTXf/Enn/3UJ7f7LFt8wK0/7+muvvaeP/fSXwijaLDdLz56p4uP3ulBD/2RP/zdN8/MnBr+5YmJyTf81v8aGRntvYt8/+pr73nVNdf++f/5wy9+/rPbPXjqtdoPvv+9u9ztkp9+wc+USqXPfvpTW+klupWj6FOf+NiTf/THLrzoogsuvOj4sVuH//z+D3oIEX3x858bzn+dbouv9F73ue7FL/mfnu+7/3lo+vCPP+OZl152D629nR0YG7rb3S996ct+efhoOXqnOx+9052vuPLqP/z937H93Oi2duX5eX9t6y0/Njb+8l99TT5fcFnLxfm5c3w/nuFht7WtzsXW47//Ax/8gp/9ea314Nd+9uf/p8vhbuU1bv0A2+K+29aW3+L7Zcev8Ss3fPGud7vkiquuHk6MXn7FVe4/Lrv8iuHE6NXX3JOIvvylL2z7tMDzf/mVr778iisH2TH3Kv70j/73DV/8/Ll/Lu3KB+nufndsM1248w+NbW2f/Xof9V+m9/Jf/bVLLr2s/waZetRjH3//Bz349978pltvuXm7r2jXzwq2bouH2a4/LwAAAAAgMXqH89//9YGrr73nFVdd/fwX/dxrX/XyTqfz8Ec++qpr7mmt/es//5NB+umCCy96xjOfw8zve8+7r//Yfy8tLeVyubvc9ZJnPPPZU4emf+wnfvIzn/rEcIHJfe93f2Pt29/695/99CeJ6NGPffwTn/K0K666+lW//huNRv0v//SPf3Dj98uVyk8//0WXX3HlYx7/xPe++9+Gq+euuee9tdYf+M/3/NcH399qNi6/4spnPfcFY2PjP/c/fuF1r37lujq7gWKp9Asv/5VypXLLzTf927v+6Qc3fj9L07vd/dKn/+SzLrzo4pf+4svf9Ppfs9Zutime+uM/UamO/OD733v72/7h5InjJstGx8Ye+ZjHP/LRj/3xn3jm4BJo68+yxQfc4q+d7tD04Ze87Jd937/1lpv/+R3/9/vf+47n+Vdde+0znvmcyampX3jFr77+Nb+aJKs1I5dcelmWpu/+13/+9Cc/UVtZvusld3/+i148Nj7xEz/1rB0kRonob//6L179ujcUi6VnP++Fz3zO8374wx987zvf+t53v/P9736n09kgcbnFo2hhfv473/7mZZdfcb8HPOhd//T2ocSHd5/r7k9En7r+42cObCuvdGx84md+/n94vv+db33zn97+1hPHj42PTzzxqU97wIMesrMDY0OFYvElL/ulcqVy4vjxd77jrd/7zre19q65572e9dPPv+Kqq5/45B/9j3971w525Xl4f233LX/l1dfMzpz63d9648ypk3e52yXf/tY3z/H9uNnDbndbndU73voP73jrP/z5W/4xDMPhMuGtxz85dej5L3qx1vqb3/jaO9/+tlMnT0xMTj31x37iwQ97+FYC2NYBtpV9t90tv5X3y7m8xi9/6Ys//oxn3uVul0RRbvCdco8re4nRSy+/x+A3wyi6+6WXichXbvjS1veUMz4xMTo6+p5//5frP/qRZqt517te8twX/uz4xMSP/+Qzz5wY3e6hvuMP0t397jjz1jjdjj80trh99v19NDhQJyan/uPf3vWxj3y43WpdfsVVz37uC0bHxl7ysl/69Ve9IkvTbe3xXT8r2LqtHGZ78bwAAAAAQOgxevvw4pf+wt++7Z82+z+Xrm37+Ja/+vNmszE6Nvbjz3jmkQsu/IlnPoeI/vM//v3GoZViD37YjyilvvSFz7/rn94+NzubpWmjXv/KDV90C/BHRsdK5fK6yTxvf+vff/iD7282Gs1G49/e9c652Vki8gP/t9/0G9/8xte63c7c7Mw//t3fEFEU5SanDtHaqqh3/+u73vmOty0vLSZJ8pUbvvS7v/WbSRJPHz5y3/s9YLNX/ajHPK5SHTl18sTvvOkNX/vKl1vNZhzH3/jaV3/nTW+orSwfvdOd73Wf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tVrrl/zPX7rgwot837/gwote/NKX3es+12VpShutS73s8nsEQRiG4bbif997391ut6YPH/mVX3vdXe52ied54xOTz33BzzzoIQ+Ts61f3sEBdtbPxr3Y8ufyGntbuNv9zre/lcvn73Pd/ZMk/uGN33c/d6WjV11zT2b+yg1fPOujnb6nzsX5/Hbb3e+Ovdga57599ut9NHzv5HkvfPEjH/O4QrEYRtF193/AK17161rrG7//Pbfdtv6Kdv2sYNft1/MCAAAAAGEp/cH34pf+wotf+gtn+IU/++M/+OLnP8vML/q5/5HPF2ZOnXznO97m/mlxYf7/ve0fn/eiFz/8kY/5yg1fctnSf3/XO5/9vBdedPTor/3Gm2horfS/vvP/XfeABx654MKpqUM/2GhONO10gE+z2fypZz/3p5793MEPj91661/92R+f4QJpeWnxT/7g9176i68Yn5h4yct+afifsjT9kz/8vTPP7fn7t/zVr7/hTVOHpl/2y69cd6H1zre/7dTJE9t9li0+4BZ/7XQnTxz/iz/5oxe/9GUXXXz05a/6teF/mpud/T9/8LtnnvmzmVe8+rWX3+OK73/vu2/+zded+Tff+vdvSbPsEY96zOX3uOLye1yx7l+NMe/593/9rw++b/BydnAUffL6j1597T2jKDc3O/O9735nF98jM6dO/t3f/OWLfu6l97jyqsGwbCL6rw+871GPffxgIfa57CAiqtdqf/KHv/+yX37l0Tvd+Vd+7fXD//SRD3/ok/1U7x7tyh2/v3blLX+O78dzP+zrtdr73/sfT3jyUy+59LLffPPvDn7tXf/09oc87BGTU1PDf3vrLTdfedU1T3na05/ytKd/8P3v/af/+9atx7+yvPznf/yHL/mFX77zXe76a69/4+ou/q8P3v+BD86dbf7Jtg6wrXw27sWWP8fXSL3V9F+84qqrtdbf/uY3siwb7LWF+bnxiUna2jr60/cUnVvx+Hn7dtv1745d3xrnvn328X3kfP2rX6lUq898zvOGiyVPnjj+Z3/8v3fw4bbrZwW7a1vPu/VvdgAAAAAgJEbvOB77hCddetnl1pi//vM/SYZGoF7/sY/c6z7XXXn1NS/82Ze89lUvb7VaH/nwh2ZmTj3uCU8+csGFxVKptrL8rW9+4wP/+Z5TJ0+MTUwcueDCK6++9tOfvJ52b6rAm3/z9T/69J+473X3z+XzszMzn/nUJz/64Q+edSX1d779rV//1Zc/+rGPv+qae05MTmjtLS8tfvub3/jA+9575gQWEdVWlt/42tc89glPvPLqa8cnJj3Pq9dWvvudb3/4g+//4Q9u3MGzbPEBt/68GyYaXvuqlz/m8U+84sqrR8fG0zSZPXXqC5//7Mf++8ODMTV7x1r79n/8u0987L+vu/+DLr/iypHR0UKhmCTx4sLit77xtes/9pF123wHR9FXbvhSs9Eolkp7Uf36mU99YubUycc/6amX3P3SXC43OzvzoQ+87zOf+oRLjA6GXJ/LDiKi733n26/91Vc89olPuurqa8fGxo0xt9x804c/9IF1/VLP567cyvtrV97y5/J+3JXD/l/e+Y6TJ44/7BGPuujioyL21ptvfv9//sdXv3zDQx72iHWP+Y9/+zc//YIXXXLJpcQcRbntxv/Nb3ztDb/+q497wpPvceXVlWp1cWH+o//9Xx/+4PvXLXs/x0+erX827sWWP5fX6Hz5hi89+3kvpKF19IPV9A/9kUd0Op3vfOubZ32QDffUuTif3267+92xF1vjHLfPPr6PnDRNfudNb/ixZ/zkve9zXaFQnJ+f+9xnPv3B971nZx9uu35WsOv263kBAAAAYN9xdfru2Aq3S/d/4IN/5uf/x8ypk6955S9ha8D5Nz4x8b/+4E+I6GU//yLXpBLvL8C+AwAAAAAAAEKPUQC4ffilX3n1377tn378Gc9c9/OH/MgjiGhpcfH2lxUFAAAAAAAAAEJiFADu4Nzsl0c/9vGPeNRjK9URz/cnp6ae9vRnPOFJTyWiD3/oA9hEAAAAAAAAAEDoMQoAtzMf+sD77nWf6y648KJnPff5z3ru84f/6bOf/uQH3/cebCIAAAAAAAAAICRGAeB2ptNuv/F1r3nAgx/6gAc+eGJyqlgqNRr1W2666ZPXf+yGL34e2wcAAAAAAAAACMOXAAAAAAAAAAAAAAg9RgEAAAAAAAAAAAAIiVEAAAAAAAAAAAAAQmIUAAAAAAAAAAAAgJAYBQAAAAAAAAAAACAkRgEAAAAAAAAAAAAIiVEAAAAAAAAAAAAAQmIUAAAAAAAAAAAAgJAYBQAAAAAAAAAAAEJiFAAAAAAAAAAAAICQGAUAAAAAAAAAAAAgJEYBAAAAAAAAAAAACIlRAAAAAAAAAAAAAEJiFAAAAAAAAAAAAICQGAUAAAAAAAAAAAAgJEYBAAAAAAAAAAAACIlRAAAAAAAAAAAAAEJiFAAAAAAAAAAAAICQGAUAAAAAAAAAAAAgJEYBAAAAAAAAAAAACIlRAAAAAAAAAAAAAEJiFAAAAAAAAAAAAICQGAUAAAAAAAAAAABCYhQAAAAAAAAAAACAkBgFAAAAAAAAAAAAICRGAQAAAAAAAAAAAAiJUQAAAAAAAAAAAABCYhQAAAAAAAAAAACAkBgFAAAAAAAAAAAAICRGAQAAAAAAAAAAAAiJUQAAAAAAAAAAAABCYhQAAAAAAAAAAACAkBgFAAAAAAAAAAAAICRGAQAAAAAAAAAAAAiJUQAAAAAAAAAAAABCYhQAAAAAAAAAAADgdP8/iJeSbogtfVoAAAAASUVORK5CYII=" alt="Five Auto Router improvements, with a CLI example showing the chosen model and savings">
<!-- -->
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Help shape Auto Router</div><div class="admonitionContent_BuS1"><p>Test Auto Router on your production traffic with the LiteLLM team.</p><a class="button button--primary button--lg" href="https://calendly.com/tin-berri/litellm-auto-router-design-partner">Apply to Become a Design Partner</a></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="1-predict-cache-costs-before-switching-models">1. Predict cache costs before switching models<a href="https://docs.litellm.ai/blog/auto-router-five-improvements#1-predict-cache-costs-before-switching-models" class="hash-link" aria-label="Direct link to 1. Predict cache costs before switching models" title="Direct link to 1. Predict cache costs before switching models">​</a></h2>
<p>Switching to a cheaper model can mean paying to rebuild the prompt cache. Estimate those costs from past requests before you switch.</p>
<ul>
<li>Compare input-token costs for your current and candidate models, including cache reads and writes.</li>
<li>Check cache status and compare cold-cache and warm-cache costs.</li>
<li>See the past requests behind each estimate. You get an unknown estimate if token counts or prices are missing.</li>
</ul>
<p>Call <code>POST /cost/predict-cache</code> with both deployment IDs and a supported native Anthropic Messages request.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="2-set-fast-mode-per-tier">2. Set Fast Mode per tier<a href="https://docs.litellm.ai/blog/auto-router-five-improvements#2-set-fast-mode-per-tier" class="hash-link" aria-label="Direct link to 2. Set Fast Mode per tier" title="Direct link to 2. Set Fast Mode per tier">​</a></h2>
<p>Turn on <strong>Fast</strong> beside reasoning effort in the Auto Router editor.</p>
<ul>
<li>Enable it for a model in one tier, such as Reasoning, while leaving the other tiers unchanged.</li>
<li>Choose speed and reasoning effort as separate settings.</li>
<li>Use Fast Mode with supported models on direct Anthropic.</li>
</ul>
<p>You need Anthropic Fast Mode access and quota, and you pay a higher rate. Turning Fast off clears the tier setting; caller and provider defaults apply.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="3-let-team-members-manage-auto-routers">3. Let team members manage Auto Routers<a href="https://docs.litellm.ai/blog/auto-router-five-improvements#3-let-team-members-manage-auto-routers" class="hash-link" aria-label="Direct link to 3. Let team members manage Auto Routers" title="Direct link to 3. Let team members manage Auto Routers">​</a></h2>
<p>Admins can give a team permission to create Auto Routers without granting proxy-admin access.</p>
<ul>
<li>Admins enable <code>/auto_router/manage</code> under <strong>Teams → Member Permissions</strong>.</li>
<li>Members create a router under <strong>Models + Endpoints → Auto-Routers</strong>, choose a team, and add their models.</li>
<li>Teammates can use the router. Its creator or an admin can edit it; existing model and dependency permissions apply.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="4-see-models-and-savings-in-your-cli">4. See models and savings in your CLI<a href="https://docs.litellm.ai/blog/auto-router-five-improvements#4-see-models-and-savings-in-your-cli" class="hash-link" aria-label="Direct link to 4. See models and savings in your CLI" title="Direct link to 4. See models and savings in your CLI">​</a></h2>
<p>Track Auto Router usage without leaving your coding agent.</p>
<ul>
<li>
<p>See the model that handled your last turn.</p>
</li>
<li>
<p>Compare session spend with an estimate for the most expensive model in your router's highest tier.</p>
</li>
<li>
<p>Use your existing LiteLLM API key to read your own session stats.</p>
</li>
<li>
<p><strong>Set it up with <code>lite configure</code>.</strong> Use your proxy URL, set <code>LITELLM_PROXY_API_KEY</code> to your key, and replace <code>production-auto-router</code> with your router name:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">lite configure \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --gateway-url http://localhost:4000 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  claude \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --api-key "$LITELLM_PROXY_API_KEY" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --model production-auto-router</span><br></span></code></pre></div></div>
</li>
</ul>
<img src="data:image/png;base64,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nZ92SXZ11sTWnKp1r63dbbh7RR1ap6jr3pO659LegL1N9Q712/Yx95XtB/sV+5//mPbj9QNhB1oPsg/W/2T508ZDjEOlDUjDnIbexqzGzqbkpo7DoYdbm72aD/3s+POuFtOWqiO6R1YcpR4tPjpwrPBY33Hp8Z4TmScetU5vvXNy8smrp2JOtZ8OO332l6BfTp7hnDl21vtsyznPc4fPs883XnC70NDm2nboV9dfD7W7tTdcdL/YdMnjUnPHpI6jl30vn7gScOWXq7yrF65FXuu4nnD95o3UG503hTef3cq99ep2we3+O4vuEu6W3tO8V37f8H71b7a/7et06zzyIOBB28O4h3ceCR69eCx//LGr+AntSflTk6e1z5yftXQHdV96PuV51wvpi/6ekt+1ft/40ublT3/4/dHWO7m365Xs1cCfy17rv971l8tfrX3Rffff5L3pf1v6Tv9dzXv2+zMfkj487Z/1kfSx4pPtp+bPYZ/vDuQNDEj5Mv7grwAGlFubDAD+3AUALRkABtw3Uqeo9oeDhqj2tIMI/Ces2kMOGvxzqYf/9DE98O/mBgD7dwBgBfXpqQBE0wCI9wDoxIkjbXgvN7jvVBoR7g22TvuUnpcO/o2p9qRfxT36DJSqLmD0+V+8qIL0pcRVcwAAo0dJREFUeNrs/XeYJclxGIhHZFW9qnqunvftvRlv1gMLLLAAAQIEQBIkAJGUKIknnUTK8nT6iZ8+3el0uqN0kj7pKOlEGUoUjUQDASAAwi2wABZrZnd2vJ/unmnf/by3lb8/sl69qvded89M9+zOABXfR6K3pyMyMjIyKzIyDI5OnQALLLDAAgsssMACCyyw4JEHYonAAgsssMACCyywwAILLNvdAgsssMACCyywwAILLLBsdwsssMACCyywwAILLLBsdwsssMACCyywwAILLLDAst0tsMACCyywwAILLLDAAst2t8ACCyywwAILLLDAAst2t8ACCyywwAILLLDAAgss290CCyywwAILLLDAAgsssGx3CyywwAILLLDAAgsssGx3CyywwAILLLDAAgsssOAdBt4SwcHC537244IgAAUAWLyz/PL33rBkYsHjDkcPzxw9PAtAEYACIjAFBwCaTGX/5KsvWSKywAILLLDAgkfFdpck8QPPP00BEAAQgFIKCEARsFKtpdPZVCa7sbldrzcehfnY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" alt="CLI status line showing gpt-5.6-luna, $3.03 in routed spend, and a $14.00 estimated baseline">
<p>In this example, the session cost $3.03 against a $14.00 estimated baseline, a 78% saving. Your results depend on your session. Stats can lag a completed turn while the proxy records it.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="5-get-more-accurate-anthropic-savings">5. Get more accurate Anthropic savings<a href="https://docs.litellm.ai/blog/auto-router-five-improvements#5-get-more-accurate-anthropic-savings" class="hash-link" aria-label="Direct link to 5. Get more accurate Anthropic savings" title="Direct link to 5. Get more accurate Anthropic savings">​</a></h2>
<p>We fixed the baseline calculation to include Anthropic's Fast Mode and regional pricing.</p>
<ul>
<li>Compare costs that include the same Fast Mode and regional charges, such as <code>inference_geo: us</code>.</li>
<li>Keep any custom prices you've set for a deployment.</li>
<li>See zero savings when the routed request and baseline have identical usage, cache treatment, and prices.</li>
</ul>
<p>See the fix in <a href="https://github.com/BerriAI/litellm/pull/41341" target="_blank" rel="noopener noreferrer">PR #41341</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="try-it">Try it<a href="https://docs.litellm.ai/blog/auto-router-five-improvements#try-it" class="hash-link" aria-label="Direct link to Try it" title="Direct link to Try it">​</a></h2>
<p>Use Sonnet for Simple and Medium, Opus for Complex, and Fast Opus for Reasoning. Choose proxy and CLI builds that include these updates from <code>main</code>.</p>
<p>Set <code>ANTHROPIC_API_KEY</code>, <code>DATABASE_URL</code>, and <code>LITELLM_MASTER_KEY</code> before using this config. Use PostgreSQL for session stats and a master key starting with <code>sk-</code>.</p>
<p><a href="https://docs.litellm.ai/assets/files/config-69119a1cf0e0ef363262c3cece34fa9a.yaml" target="_blank">Download config.yaml</a>.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">config.yaml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">standard</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> anthropic/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/ANTHROPIC_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> opus</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> anthropic/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">opus</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/ANTHROPIC_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> production</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">auto</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">router</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> auto_router/complexity_router</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">complexity_router_config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">classifier_type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> heuristic</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">session_affinity</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#005CC5">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">tiers</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#22863A">SIMPLE</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">standard</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#22863A">MEDIUM</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">standard</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#22863A">COMPLEX</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> opus</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#22863A">REASONING</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> opus</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token key atrule" style="color:#22863A">speed</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> fast</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#22863A">general_settings</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#22863A">master_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/LITELLM_MASTER_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#22863A">database_url</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/DATABASE_URL</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Become an Auto Router design partner</div><div class="admonitionContent_BuS1"><p>Test Auto Router on your workload and help us decide what to build next.</p><a class="button button--primary button--lg" href="https://calendly.com/tin-berri/litellm-auto-router-design-partner">Apply to Become a Design Partner</a></div></div>]]></content>
        <author>
            <name>Tin Lo</name>
            <uri>https://www.linkedin.com/in/tinchi-lo/</uri>
        </author>
        <category label="auto-router" term="auto-router"/>
        <category label="routing" term="routing"/>
        <category label="complexity-router" term="complexity-router"/>
        <category label="cost-optimization" term="cost-optimization"/>
        <category label="engineering" term="engineering"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[September Townhall: Product + Roadmap Updates]]></title>
        <id>https://docs.litellm.ai/blog/september-townhall-announcement</id>
        <link href="https://docs.litellm.ai/blog/september-townhall-announcement"/>
        <updated>2026-09-16T12:00:00.000Z</updated>
        <summary type="html"><![CDATA[Join the LiteLLM September townhall on Thursday, 24 September at 7:30 AM PT to learn about LiteLLM's product updates and roadmap.]]></summary>
        <content type="html"><![CDATA[<p>We are hosting our September townhall on <strong>Thursday, 24 September at 7:30 AM PT</strong>.</p>
<img src="https://docs.litellm.ai/assets/ideal-img/september_townhall_banner.02a3ba4.640.png" srcset="https://docs.litellm.ai/assets/ideal-img/september_townhall_banner.02a3ba4.640.png 640w, https://docs.litellm.ai/assets/ideal-img/september_townhall_banner.028b00f.873.png 873w" sizes="(max-width: 996px) 100vw, 900px" width="640" height="161" alt="" loading="lazy" decoding="async" style="max-width:100%;height:auto;width:900px;display:block">
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="agenda">Agenda<a href="https://docs.litellm.ai/blog/september-townhall-announcement#agenda" class="hash-link" aria-label="Direct link to Agenda" title="Direct link to Agenda">​</a></h2>
<ul>
<li>Product updates and roadmap progress</li>
<li>Reliability and security updates</li>
<li>Open Q&amp;A with the team</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="stability">Stability<a href="https://docs.litellm.ai/blog/september-townhall-announcement#stability" class="hash-link" aria-label="Direct link to Stability" title="Direct link to Stability">​</a></h2>
<p>Our team is focused on stability: improving reliability and reducing regressions across releases. Follow the roadmap here: <a href="https://github.com/BerriAI/litellm/issues/30484" target="_blank" rel="noopener noreferrer">Stability roadmap</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-contribute">How to contribute<a href="https://docs.litellm.ai/blog/september-townhall-announcement#how-to-contribute" class="hash-link" aria-label="Direct link to How to contribute" title="Direct link to How to contribute">​</a></h2>
<p>Add the topics and questions you'd like us to cover when you register below. We use your responses to set the agenda.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="register">Register<a href="https://docs.litellm.ai/blog/september-townhall-announcement#register" class="hash-link" aria-label="Direct link to Register" title="Direct link to Register">​</a></h2>
<p>Register here: <a href="https://forms.gle/QDK1Fq5HqouGNG9Z6" target="_blank" rel="noopener noreferrer">LiteLLM September Townhall Form</a></p>
<p>We will hold the townhall from <strong>7:30 AM to 8:30 AM PT on Zoom</strong>.</p>
<p>For security, attendance is restricted to corporate emails. If you register with a non-corporate email, we will share the townhall slides and accompanying blog post after the event.</p>]]></content>
        <author>
            <name>Krrish Dholakia</name>
            <uri>https://www.linkedin.com/in/krish-d/</uri>
        </author>
        <author>
            <name>Ishaan Jaffer</name>
            <uri>https://www.linkedin.com/in/reffajnaahsi/</uri>
        </author>
        <category label="announcement" term="announcement"/>
        <category label="townhall" term="townhall"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Auto Router: Maximize Quality & Savings with Our Fuse LLM Classifier]]></title>
        <id>https://docs.litellm.ai/blog/auto-router-fuse-v2</id>
        <link href="https://docs.litellm.ai/blog/auto-router-fuse-v2"/>
        <updated>2026-09-14T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[We’re improving Fuse V2 by combining complexity and capability assessment to learn where each model succeeds, fails, and needs an upgrade.]]></summary>
        <content type="html"><![CDATA[<p>We’re improving Fuse V2 by combining complexity and capability assessment to learn where each model succeeds, fails, and needs an upgrade.</p>
<p><img decoding="async" loading="lazy" alt="Fuse V2: 25/25 tasks solved in a SWE-bench Verified run, with one trial per task." src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNjAwIiBoZWlnaHQ9Ijg0MCIgdmlld0JveD0iMCAwIDE2MDAgODQwIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idGl0bGUgZGVzYyI+CiAgPHRpdGxlIGlkPSJ0aXRsZSI+RnVzZSBWMjogMjUgb2YgMjUgdGFza3Mgc29sdmVkPC90aXRsZT4KICA8ZGVzYyBpZD0iZGVzYyI+RnVzZSBWMiBzb2x2ZWQgMjUgb2YgMjUgU1dFLWJlbmNoIFZlcmlmaWVkIHRhc2tzIGluIG9uZSB0cmlhbCBwZXIgdGFzaywgZm9yICQxOC42NSBpbmNsdWRpbmcgY2xhc3NpZmljYXRpb24uIFRoZSB0ZXN0ZWQgcG9saWN5IHNlbGVjdGVkIE9wdXMgZm9yIGV2ZXJ5IHRhc2suPC9kZXNjPgogIDxkZWZzPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJiYWNrZ3JvdW5kIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2YyZjdmMCIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNlNmYxZTkiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxyZWN0IHdpZHRoPSIxNjAwIiBoZWlnaHQ9Ijg0MCIgcng9IjIwIiBmaWxsPSJ1cmwoI2JhY2tncm91bmQpIi8+CiAgPGcgZm9udC1mYW1pbHk9IkludGVyLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIEFyaWFsLCBzYW5zLXNlcmlmIj4KICAgIDx0ZXh0IHg9Ijk2IiB5PSIxMDgiIGZpbGw9IiM0NDYzNGUiIGZvbnQtc2l6ZT0iMzIiIGZvbnQtd2VpZ2h0PSI2MDAiPkxpdGVMTE0gQXV0byBSb3V0ZXIgwrcgRnVzZSBWMjwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg0IiB5PSI0MDEiIGZpbGw9IiMxNzNmMmIiIGZvbnQtc2l6ZT0iMTg0IiBmb250LXdlaWdodD0iNzUwIiBsZXR0ZXItc3BhY2luZz0iLTgiPjI1LzI1PC90ZXh0PgogICAgPHRleHQgeD0iOTYiIHk9IjUwMSIgZmlsbD0iIzE3M2YyYiIgZm9udC1zaXplPSI3MiIgZm9udC13ZWlnaHQ9IjY1MCIgbGV0dGVyLXNwYWNpbmc9Ii0yIj50YXNrcyBzb2x2ZWQ8L3RleHQ+CiAgICA8dGV4dCB4PSIxMDAiIHk9IjU5OCIgZmlsbD0iIzVmNzk2NiIgZm9udC1zaXplPSIzMSI+U1dFLWJlbmNoIFZlcmlmaWVkIMK3IG9uZSB0cmlhbCBwZXIgdGFzazwvdGV4dD4KICAgIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkxYjY5ZCIgc3Ryb2tlLXdpZHRoPSI1Ij4KICAgICAgPHBhdGggZD0iTTEwODAgMjk0IEMxMjMwIDI5NCAxMTgwIDQyMCAxMjk0IDQyMCIvPgogICAgICA8cGF0aCBkPSJNMTA4MCA1NDYgQzEyMzAgNTQ2IDExODAgNDIwIDEyOTQgNDIwIi8+CiAgICAgIDxwYXRoIGQ9Ik0xMjk0IDQyMCBIMTQzMCIvPgogICAgPC9nPgogICAgPGNpcmNsZSBjeD0iMTA4MCIgY3k9IjI5NCIgcj0iMzUiIGZpbGw9IiNjMmQ1YzYiLz4KICAgIDxjaXJjbGUgY3g9IjEwODAiIGN5PSI1NDYiIHI9IjM1IiBmaWxsPSIjYzJkNWM2Ii8+CiAgICA8Y2lyY2xlIGN4PSIxMjk0IiBjeT0iNDIwIiByPSI2NSIgZmlsbD0iIzJlODU1NSIvPgogICAgPGNpcmNsZSBjeD0iMTQzMCIgY3k9IjQyMCIgcj0iMTUiIGZpbGw9IiMxNzNmMmIiLz4KICA8L2c+Cjwvc3ZnPgo=" width="1600" height="840" class="img_ev3q"></p>
<!-- -->
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Help shape the Auto-Router</div><div class="admonitionContent_BuS1"><p>Work with the LiteLLM team to evaluate routing on your production traffic.</p><a class="button button--primary button--lg" href="https://calendly.com/tin-berri/litellm-auto-router-design-partner">Apply to Become a Design Partner</a></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="results">Results<a href="https://docs.litellm.ai/blog/auto-router-fuse-v2#results" class="hash-link" aria-label="Direct link to Results" title="Direct link to Results">​</a></h2>
<p>We evaluated <strong>25 tasks on SWE-bench Verified</strong>, with one attempt per task. Key findings from this run:</p>
<ul>
<li><strong>25/25 tasks solved</strong>, compared with 23/25 for both the capability classifier and Opus 5 only.</li>
<li><strong>21% lower cost per task solved than the complexity classifier:</strong> $0.75 versus $0.95.</li>
<li><strong>15% lower cost per task solved than Opus 5 only:</strong> $0.75 versus $0.88.</li>
</ul>
<table><thead><tr><th>Configuration</th><th style="text-align:right">Tasks solved</th><th style="text-align:right">Solve rate</th><th style="text-align:right">Total cost</th><th style="text-align:right">Cost / task solved</th></tr></thead><tbody><tr><td><strong>Fuse</strong></td><td style="text-align:right"><strong>25/25</strong></td><td style="text-align:right"><strong>100%</strong></td><td style="text-align:right"><strong>$18.65</strong></td><td style="text-align:right"><strong>$0.75</strong></td></tr><tr><td>Complexity classifier</td><td style="text-align:right">24/25</td><td style="text-align:right">96%</td><td style="text-align:right">$22.70</td><td style="text-align:right">$0.95</td></tr><tr><td>Capability classifier</td><td style="text-align:right">23/25</td><td style="text-align:right">92%</td><td style="text-align:right">$11.15</td><td style="text-align:right">$0.48</td></tr><tr><td>NeMo Switchyard</td><td style="text-align:right">21/25</td><td style="text-align:right">84%</td><td style="text-align:right">$17.03</td><td style="text-align:right">$0.81</td></tr><tr><td>Opus 5 only</td><td style="text-align:right">23/25</td><td style="text-align:right">92%</td><td style="text-align:right">$20.27</td><td style="text-align:right">$0.88</td></tr><tr><td>Sonnet 5 only</td><td style="text-align:right">22/25</td><td style="text-align:right">88%</td><td style="text-align:right">$13.19</td><td style="text-align:right">$0.60</td></tr></tbody></table>
<p>The capability classifier had the lowest total cost and cost per task solved. We divide total cost, including classifier calls and unsuccessful attempts, by tasks solved. Dollar values round to cents; percentage reductions use the ratios before rounding. <a href="https://docs.litellm.ai/assets/files/benchmark-results-10f2b238e64d02f3441c673bcde6297b.csv" target="_blank">Download the results table</a>.</p>
<p>At the tested settings, we sent all Fuse V2 solver calls to Opus. We observed 23–25 solves across all-Opus runs; this single-trial result does not establish a repeatable quality or cost improvement from fusion.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="improving-the-fusion-of-complexity-and-capability">Improving the fusion of complexity and capability<a href="https://docs.litellm.ai/blog/auto-router-fuse-v2#improving-the-fusion-of-complexity-and-capability" class="hash-link" aria-label="Direct link to Improving the fusion of complexity and capability" title="Direct link to Improving the fusion of complexity and capability">​</a></h2>
<p>We want to predict when a model will struggle with a task and when another model can help. In Fuse V2, we combine two assessments:</p>
<ul>
<li><strong>Complexity:</strong> assess the task’s scope, reasoning demands, and available checks.</li>
<li><strong>Capability:</strong> estimate each model’s chance of completing that task and identify its likely failure.</li>
</ul>
<p>We ask the judge for both assessments at the start of each task, then reuse the model choice. We choose between solvers using the difference in their predicted success probabilities.</p>
<p>In this experiment, we compared Sonnet 5 and Opus 5, with GPT-5.4-mini as the judge. See the <a href="https://github.com/BerriAI/litellm/blob/32326a08184497431a20d63c4e1f08d7ad05dc07/litellm/router_strategy/complexity_router/llm_v2.py" target="_blank" rel="noopener noreferrer">Fuse V2 implementation</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="learning-where-each-model-works">Learning where each model works<a href="https://docs.litellm.ai/blog/auto-router-fuse-v2#learning-where-each-model-works" class="hash-link" aria-label="Direct link to Learning where each model works" title="Direct link to Learning where each model works">​</a></h2>
<p>We see different strengths in the fixed-model results from our separate Terminal-Bench repeat study:</p>
<ul>
<li><strong>pytorch-model-cli:</strong> Sonnet solved 2/3 attempts; Opus solved 0/3.</li>
<li><strong>query-optimize:</strong> Opus solved 3/3 attempts; Sonnet solved 1/3.</li>
</ul>
<p>We want Fuse V2 to recognize these differences before choosing a model. To improve the combined assessment, we need to check its predictions against what each model can do on the same task.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-were-improving-next">What we’re improving next<a href="https://docs.litellm.ai/blog/auto-router-fuse-v2#what-were-improving-next" class="hash-link" aria-label="Direct link to What we’re improving next" title="Direct link to What we’re improving next">​</a></h2>
<p>Our goal is to match the capability classifier’s cost while delivering the complexity classifier’s quality. We’re working toward that in three steps:</p>
<ul>
<li><strong>Calibrate model predictions.</strong> Run both models on the same tasks and use their successes and failures to adjust the judge’s forecasts.</li>
<li><strong>Tune when to upgrade.</strong> Use separate tuning data to choose the cheaper model where it can finish the task and upgrade when we expect a quality gain that justifies the added cost.</li>
<li><strong>Validate quality and savings.</strong> Test Fuse on unseen tasks across repeated attempts, tracking solve rate and cost per task solved.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="benchmark-setup">Benchmark setup<a href="https://docs.litellm.ai/blog/auto-router-fuse-v2#benchmark-setup" class="hash-link" aria-label="Direct link to Benchmark setup" title="Direct link to Benchmark setup">​</a></h2>
<ul>
<li><strong>Harness:</strong> Harbor 0.22.0 with mini-swe-agent 2.4.6; the same agent configuration and budgets across arms.</li>
<li><strong>Tasks:</strong> 25 SWE-bench Verified tasks, sampled with seed <code>20260911</code>; one attempt per task and configuration.</li>
<li><strong>Scoring and cost:</strong> Harbor verifier <code>reward == 1.0</code>; LiteLLM spend logs with prompt caching enabled across arms. We excluded superseded setup-failure trials.</li>
</ul>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Become an Auto-Router design partner</div><div class="admonitionContent_BuS1"><p>Work with the LiteLLM team to test Fuse V2 on your workload and help improve model selection.</p><a class="button button--primary button--lg" href="https://calendly.com/tin-berri/litellm-auto-router-design-partner">Apply to Become a Design Partner</a></div></div>]]></content>
        <author>
            <name>Tin Lo</name>
            <uri>https://www.linkedin.com/in/tinchi-lo/</uri>
        </author>
        <category label="auto-router" term="auto-router"/>
        <category label="routing" term="routing"/>
        <category label="cost" term="cost"/>
        <category label="benchmarks" term="benchmarks"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OCR uses Rust by default starting with v1.102.0-rc.1]]></title>
        <id>https://docs.litellm.ai/blog/litellm-rust-ocr</id>
        <link href="https://docs.litellm.ai/blog/litellm-rust-ocr"/>
        <updated>2026-09-13T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Starting with v1.102.0-rc.1, OCR calls use the Rust implementation by default while preserving the existing API.]]></summary>
        <content type="html"><![CDATA[<p>Starting with LiteLLM <code>v1.102.0-rc.1</code>, OCR runs on Rust by default.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="no-action-required">No action required<a href="https://docs.litellm.ai/blog/litellm-rust-ocr#no-action-required" class="hash-link" aria-label="Direct link to No action required" title="Direct link to No action required">​</a></h2>
<p>Continue using the existing OCR API:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#CF222E">import</span><span class="token plain"> litellm</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">response </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> litellm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ocr</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    model</span><span class="token operator" style="color:#D73A49">=</span><span class="token string" style="color:#C6105F">"mistral/mistral-ocr-latest"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    document</span><span class="token operator" style="color:#D73A49">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#C6105F">"type"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"document_url"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#C6105F">"document_url"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"https://arxiv.org/pdf/2201.04234"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p>The same default applies to asynchronous OCR calls. Gateway users get the Rust path automatically on upgrade too.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="opt-out-when-needed">Opt out when needed<a href="https://docs.litellm.ai/blog/litellm-rust-ocr#opt-out-when-needed" class="hash-link" aria-label="Direct link to Opt out when needed" title="Direct link to Opt out when needed">​</a></h3>
<p>Set <code>LITELLM_RUST=0</code> to disable the Rust path for a process:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">export LITELLM_RUST=0</span><br></span></code></pre></div></div>
<p>You can also opt out for the current Python process before making OCR calls:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#CF222E">import</span><span class="token plain"> litellm</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">litellm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">rust</span><span class="token punctuation" style="color:#393A34">(</span><span class="token boolean" style="color:#005CC5">False</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-the-performance-impact">What is the performance impact?<a href="https://docs.litellm.ai/blog/litellm-rust-ocr#what-is-the-performance-impact" class="hash-link" aria-label="Direct link to What is the performance impact?" title="Direct link to What is the performance impact?">​</a></h2>
<p><strong>TL;DR:</strong> When proxy CPU is the bottleneck, Rust sustains more OCR requests per second.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-we-tested">How we tested<a href="https://docs.litellm.ai/blog/litellm-rust-ocr#how-we-tested" class="hash-link" aria-label="Direct link to How we tested" title="Direct link to How we tested">​</a></h3>
<p>We measured proxy overhead, not end-to-end OCR latency. Each path ran in a fresh container with <code>v1.102.0-rc.1</code>, one proxy worker, one CPU, <code>2 GiB</code> of memory, and a local mock provider. Python and Rust used the same image and limits; only <code>LITELLM_RUST</code> changed, and the order alternated across six paired rounds for each upload size.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="rust-raises-the-cpu-limited-proxy-ceiling">Rust raises the CPU-limited proxy ceiling<a href="https://docs.litellm.ai/blog/litellm-rust-ocr#rust-raises-the-cpu-limited-proxy-ceiling" class="hash-link" aria-label="Direct link to Rust raises the CPU-limited proxy ceiling" title="Direct link to Rust raises the CPU-limited proxy ceiling">​</a></h3>
<p>On one CPU, median throughput moved from <code>143.6</code> to <code>211.7 RPS</code> at <code>1 MiB</code> (<code>1.48x</code>) and from <code>21.6</code> to <code>36.2 RPS</code> at <code>8 MiB</code> (<code>1.69x</code>). Each gain is the median of the six within-round Rust/Python ratios.</p>
<figure class="chart_TM_x"><div class="vega_k1SQ"></div><div class="vega_k1SQ"></div><figcaption>Six paired rounds on one CPU. Hover a point for its exact value. Source: the published primary-trial CSV.</figcaption></figure>
<p>Both paths used 97% to 99% of their one-CPU allowance. This supports a higher OCR proxy throughput ceiling when proxy CPU is the bottleneck. It does not mean that a real OCR request finishes <code>1.69x</code> faster; provider latency usually dominates end-to-end latency.</p>
<p>Absolute RPS varied as load on the shared development host changed. The paired rounds preserve the more useful signal: which implementation was faster under nearby conditions.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-advantage-depends-on-the-bottleneck">The advantage depends on the bottleneck<a href="https://docs.litellm.ai/blog/litellm-rust-ocr#the-advantage-depends-on-the-bottleneck" class="hash-link" aria-label="Direct link to The advantage depends on the bottleneck" title="Direct link to The advantage depends on the bottleneck">​</a></h3>
<p>We ran a few extra checks to see where the main result holds and where it stops. The charts show one run each and the exact numbers moved between reruns, so read them as rough boundaries rather than precise numbers. The direction of each result held.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="the-gain-appears-only-when-proxy-cpu-saturates">The gain appears only when proxy CPU saturates<a href="https://docs.litellm.ai/blog/litellm-rust-ocr#the-gain-appears-only-when-proxy-cpu-saturates" class="hash-link" aria-label="Direct link to The gain appears only when proxy CPU saturates" title="Direct link to The gain appears only when proxy CPU saturates">​</a></h4>
<figure class="chart_TM_x"><div class="vega_k1SQ"></div><figcaption>Single run. Hover a point for its exact value.</figcaption></figure>
<p>We added a <code>100 ms</code> delay to the mock provider so that waiting on the provider, not the proxy, could become the bottleneck. At concurrency 8 it did: the proxy sat mostly idle and there was no measured Rust gain. At concurrency 64, enough requests were in flight that proxy CPU saturated again and the gain returned.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="above-pythons-ceiling-requests-queue">Above Python's ceiling, requests queue<a href="https://docs.litellm.ai/blog/litellm-rust-ocr#above-pythons-ceiling-requests-queue" class="hash-link" aria-label="Direct link to Above Python's ceiling, requests queue" title="Direct link to Above Python's ceiling, requests queue">​</a></h4>
<figure class="chart_TM_x"><div class="split_yXxO"><div class="vega_k1SQ"></div><div class="vega_k1SQ"></div></div><figcaption>Single run.</figcaption></figure>
<p>The primary benchmark fixed concurrency and measured each path's ceiling. This check instead offered a fixed thirty <code>8 MiB</code> requests per second, which is above Python's measured ceiling at that size and below Rust's. Rust completed every arrival with CPU to spare, so latency stayed in the tens of milliseconds. Python's CPU saturated, requests queued, p95 latency climbed into seconds, and it used roughly twice the memory.</p>]]></content>
        <author>
            <name>Yujong Lee</name>
            <email>yujong@berri.ai</email>
            <uri>https://www.linkedin.com/in/yujong1ee/</uri>
        </author>
        <category label="litellm" term="litellm"/>
        <category label="rust" term="rust"/>
        <category label="rust-migration" term="rust-migration"/>
        <category label="ocr" term="ocr"/>
        <category label="reliability" term="reliability"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Incident Report: Retry Breadcrumb Memory Growth Causing OOM on v1.100.0]]></title>
        <id>https://docs.litellm.ai/blog/retry-breadcrumb-oom-incident</id>
        <link href="https://docs.litellm.ai/blog/retry-breadcrumb-oom-incident"/>
        <updated>2026-09-12T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Date: September 7 to September 9, 2026]]></summary>
        <content type="html"><![CDATA[<p><strong>Date:</strong> September 7 to September 9, 2026<br>
<strong>Affected versions:</strong> <code>v1.100.0</code><br>
<strong>Severity:</strong> Medium (production outage for one customer; low blast radius, required an unreachable Redis)<br>
<strong>Status:</strong> Resolved in <code>v1.100.1</code></p>
<blockquote>
<p><strong>Note:</strong> If you are running <code>v1.100.0</code>, upgrade to <code>v1.100.1</code> or later. <a href="https://github.com/BerriAI/litellm/releases/tag/v1.99.1" target="_blank" rel="noopener noreferrer"><code>v1.99.1</code></a> and earlier are not affected. The <code>v1.100.0</code> dev and rc pre-releases, <code>v1.101.0-dev.1</code>, and <code>v1.101.0-dev.2</code> carry the same defect; <code>v1.101.0-rc.1</code> and later are not affected.</p>
</blockquote>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="summary">Summary<a href="https://docs.litellm.ai/blog/retry-breadcrumb-oom-incident#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary">​</a></h2>
<p>Between September 7 and September 9, 2026, an enterprise customer running <code>litellm-database:v1.100.0</code> behind nginx experienced two waves of kernel OOM kills across their proxy fleet: dozens of kills by the customer's count, one worker process reaching 61 GB RSS, and thousands of HTTP 502s and tens of thousands of HTTP 499s while the platform was down.</p>
<p>This needed two things to be true at once: the provider on the customer's traffic kept failing, so the router kept retrying, and Redis was unreachable at the same time, so every completing request logged the growing result of those retries in full. The retries grew unbounded because of a one-line change in <a href="https://github.com/BerriAI/litellm/pull/38133" target="_blank" rel="noopener noreferrer">PR #38133</a> (August 24), which ran retry breadcrumbs, the record the router keeps of each failed LLM attempt, through an existing credential-masking helper before storing them. The helper was correct for its original inputs but assumed it was copying a plain tree; the breadcrumb was not a tree, it contained a pointer back to the same list it was about to be appended to. Copying it without preserving that shared reference turned a structure that had cost nothing in memory since December 2023 into one that roughly doubled in size with every retry, until a cost-tracking error handler turned it into a log string on every request for as long as the Redis outage lasted, and a single allocation reached 27 GB.</p>
<p>We fixed the underlying growth in <a href="https://github.com/BerriAI/litellm/pull/39491" target="_blank" rel="noopener noreferrer">PR #39491</a>, merged September 3 and included in <code>v1.101.0-rc.1</code>. It was not backported to <code>v1.100.0</code> before that version was tagged stable two days later. We backported it to <code>stable/1.100.x</code> on September 9 (<a href="https://github.com/BerriAI/litellm/pull/40455" target="_blank" rel="noopener noreferrer">PR #40455</a>) and published <code>v1.100.1</code>.</p>
<p>We own this outcome entirely. The defect existed in a form we could have caught, a ticket filed three days before the stable release correctly identified a growth problem in the same code path, and our own fix PR turned an untested hedge in that ticket into a stated fact. The rest of this post explains how each of those things happened and what we're changing so that a defect like this can't reach a stable release the same way again.</p>
<!-- -->
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="background">Background<a href="https://docs.litellm.ai/blog/retry-breadcrumb-oom-incident#background" class="hash-link" aria-label="Direct link to Background" title="Direct link to Background">​</a></h2>
<ol>
<li><strong>What a retry breadcrumb is.</strong> When an LLM call fails and the router retries or falls back, it writes a note about the failed attempt into the request's metadata under <code>previous_models</code>, so logs can show what was tried and what succeeded. One breadcrumb is roughly 10 KB.</li>
<li><strong>Why the breadcrumb needed masking.</strong> Because it copies request settings wholesale, a breadcrumb can carry a forwarded <code>Authorization</code> header or a provider key, and it flows into spend logs and logging callbacks. <code>mask_credentials_in_payload</code> is an existing helper that replaces values under credential-looking keys with asterisks; it was already used elsewhere for guardrail responses. Running new breadcrumbs through it was reviewed and merged as a one-line security fix.</li>
<li><strong>A pointer loop that was already there, and had always been free.</strong> For every incoming request, the proxy builds one metadata dict and a request snapshot whose body is a shallow copy of that same dict. When a call fails, the router's breadcrumb stores the snapshot by reference, appends itself to a list shared across the process, and the metadata's <code>previous_models</code> field points at that same list. The breadcrumb, the snapshot, the metadata, and the list form a loop. This had existed since December 2023 and cost nothing: a pointer is 8 bytes, so the process held four breadcrumbs' worth of memory, forever, regardless of how many failures occurred.</li>
</ol>
<table><thead><tr><th></th><th>v1.98.0 (before)</th><th>v1.100.0 (regression)</th><th>v1.101.0-rc.1 (fix)</th></tr></thead><tbody><tr><td>Breadcrumb contents</td><td>Exception info, request kwargs, metadata, and a shallow copy of the request snapshot, all shared references, so the loop costs nothing</td><td>Same fields, now passed through <code>mask_credentials_in_payload</code> before storage</td><td>Same as v1.100.0, minus the request snapshot, which is what closed the loop</td></tr><tr><td>Stored on</td><td>The router, one list shared by every request in the process, last four kept</td><td>Same</td><td>The request's own metadata, last four per request</td></tr></tbody></table>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-went-wrong">What went wrong<a href="https://docs.litellm.ai/blog/retry-breadcrumb-oom-incident#what-went-wrong" class="hash-link" aria-label="Direct link to What went wrong" title="Direct link to What went wrong">​</a></h2>
<ol>
<li><strong>The masking helper assumed a tree, and the breadcrumb wasn't one.</strong> To star out a secret without mutating the original (which the router still needs for the retry), <code>mask_credentials_in_payload</code> rebuilds the structure it's given as a new copy. That's correct for guardrail responses and provider params, which are plain trees. It has no memo of objects it has already visited, which is how Python's own <code>copy.deepcopy</code> keeps shared references shared and loops as loops. Handed the breadcrumb's pointer back to the shared list, it didn't keep the pointer. It built a new list containing copies of every earlier breadcrumb, each of which already held copies of its own predecessors.</li>
<li><strong>Each retry's breadcrumb became roughly the sum of the last four.</strong> With nothing shared anymore, breadcrumb size compounds: measured at close to 1.85x per failed retry in our reproduction of the incident, which put one request's metadata past a million characters by the twelfth failure. The fix PR's own measurement shows the same curve on a chat completions path under <code>--detailed_debug</code>: a single debug log line grew from roughly 10 KB to 1.24 MB within nine failing requests (<a href="https://github.com/BerriAI/litellm/pull/39491" target="_blank" rel="noopener noreferrer">PR #39491</a>).</li>
<li><strong>Two failures at once is what made this an outage.</strong> Either one alone was survivable. The provider on the customer's high-volume embeddings path kept failing, so the router kept retrying, and every retry made the breadcrumb structure bigger: a request that failed a dozen times carried a structure over a million characters wide by the end. At the same time Redis was genuinely unreachable, so the spend-tracking call on every completing request failed with the same exception for as long as the outage lasted. The provider failures decided how large the structure got, and the Redis outage decided how often something read the whole thing back. On their own, the provider failures would have grown a structure nothing expensive touched, and the Redis outage would have raised an exception over a structure that was still 10 KB. Together, on that traffic, every completing request paid the full cost of every retry that preceded it.</li>
<li><strong>The growing structure was turned into a log string on every request, with no level gate.</strong> Each time the spend-counter increment failed, that exception landed in the cost-tracking callback's error handler, which builds a Slack alert by pasting the request's full metadata into an f-string, evaluated immediately, at every log level, not only under <code>--detailed_debug</code>. For a full minute at a time, every completing request turned an already-doubling structure into text, on the event loop. The customer's <code>py-spy</code> trace showed the worker pinned at 100% inside that single line; their memory map showed one 27 GB allocation.</li>
</ol>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="detection-and-response">Detection and response<a href="https://docs.litellm.ai/blog/retry-breadcrumb-oom-incident#detection-and-response" class="hash-link" aria-label="Direct link to Detection and response" title="Direct link to Detection and response">​</a></h2>
<p>The customer opened a Sev 0 ticket on September 9 reporting two waves of kernel OOM kills (September 7 and 9), 502s and 499s across their fleet, and one process at 61 GB RSS. A <code>py-spy</code> flamegraph they captured pinpointed the stall inside the cost-tracking callback's error handler, and they traced the regression to commit <code>721227e9ee</code> before we did.</p>
<table><thead><tr><th>Date (2026)</th><th>Event</th></tr></thead><tbody><tr><td>Aug 24</td><td><a href="https://github.com/BerriAI/litellm/pull/38133" target="_blank" rel="noopener noreferrer">PR #38133</a> merges: retry breadcrumbs are masked before storage. Regression introduced.</td></tr><tr><td>Sep 2, 17:47 PT</td><td>LIT-6780 filed at Medium priority after an engineer QA'ing an unrelated PR notices the proxy slowing down under repeated failing requests. The ticket's own text flags "running without --detailed_debug was not tried."</td></tr><tr><td>Sep 3</td><td><a href="https://github.com/BerriAI/litellm/pull/39491" target="_blank" rel="noopener noreferrer">PR #39491</a> merges, fixing the growth, but states "Only happens with --detailed_debug on", dropping the ticket's hedge rather than testing it. It is not nominated for a stable backport.</td></tr><tr><td>Sep 5, 18:12 PT</td><td><code>v1.101.0-rc.1</code> is tagged from staging, including both fixes.</td></tr><tr><td>Sep 5, 18:45 PT</td><td><code>v1.100.0</code> is tagged stable from the earlier rc line; neither fix is present.</td></tr><tr><td>Sep 6</td><td>Customer deploys <code>v1.100.0</code>.</td></tr><tr><td>Sep 7, 08:40 PT</td><td>First OOM wave.</td></tr><tr><td>Sep 9, 04:29 PT</td><td>Second OOM wave. The customer opens a Sev 0 ticket at 05:04 PT.</td></tr><tr><td>Sep 9, 06:21 PT</td><td>Customer traces the regression to commit <code>721227e9ee</code>, moves to <code>v1.102.0-dev.1</code>, which already carries the fix, and reports no further OOM kills.</td></tr><tr><td>Sep 9, 14:27 PT</td><td><a href="https://github.com/BerriAI/litellm/pull/40455" target="_blank" rel="noopener noreferrer">PR #40455</a> backports the PR #39491 fix to <code>stable/1.100.x</code>.</td></tr><tr><td>Sep 9, 18:42 PT</td><td><code>v1.100.1</code> is published with the backport.</td></tr></tbody></table>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-our-process-did-not-catch-this">Why our process did not catch this<a href="https://docs.litellm.ai/blog/retry-breadcrumb-oom-incident#why-our-process-did-not-catch-this" class="hash-link" aria-label="Direct link to Why our process did not catch this" title="Direct link to Why our process did not catch this">​</a></h2>
<ol>
<li><strong>Nothing tested two dependency failures at once.</strong> This incident needed upstream retries and a sustained Redis outage together. The twelve days between the regression merging and the stable tag, seven of them with <a href="https://github.com/BerriAI/litellm/releases/tag/v1.100.0-rc.1" target="_blank" rel="noopener noreferrer"><code>v1.100.0-rc.1</code></a> out as the release candidate, never combined them, so nothing exercised the path that broke.</li>
<li><strong>A hedge in a ticket did not survive into the fix that closed it.</strong> LIT-6780's repro was a credential failure that never reached the cost-tracking callback, so every test in it looked debug-only by construction, and the ticket said so directly. The fix PR dropped that hedge and stated the opposite as fact, without running the one test that would have checked it.</li>
<li><strong>The alert line that actually broke had no log-level gate, and nobody had reason to look at it.</strong> The line the fix PR measured and fixed was a genuinely debug-only line. A second consumer of the same structure, the cost-tracking alert, ran at every log level and was untouched by that PR, because nothing connected the two.</li>
<li><strong>Cost and memory regressions are silent in review.</strong> A one-line change to run an existing, well-tested helper on a new input looked like a self-evidently safe security fix. Nothing in code review or CI surfaces that an input violates an unstated assumption the helper depends on.</li>
</ol>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-were-changing">What we're changing<a href="https://docs.litellm.ai/blog/retry-breadcrumb-oom-incident#what-were-changing" class="hash-link" aria-label="Direct link to What we're changing" title="Direct link to What we're changing">​</a></h2>
<ul>
<li><strong>Verified assumptions, not inferred ones.</strong> A claim that narrows a bug's blast radius (such as "only under <code>--detailed_debug</code>") now has to be written down and either tested or explicitly carried forward, not silently dropped when the fix ships. Rather than a new section, we added this to the existing Caveats instructions in our PR template, alongside the severity-tiered caveats authors already list there.</li>
<li><strong>Chaos testing on every release candidate.</strong> Every release candidate of the proxy now has to pass a load test under an injected fault before it ships. Stable releases are cut from a release candidate that passed it; a patch cut straight from a stable branch, the way <code>v1.100.1</code> was, is not gated yet. The first case is this incident's exact trigger: <a href="https://github.com/BerriAI/litellm/blob/main/tests/e2e/load/test_redis_chaos_e2e.py" target="_blank" rel="noopener noreferrer"><code>tests/e2e/load/test_redis_chaos_e2e.py</code></a> (added in <a href="https://github.com/BerriAI/litellm/pull/40482" target="_blank" rel="noopener noreferrer">PR #40482</a>) drives sustained chat completions and Anthropic messages traffic through a live multi-worker proxy against deployments that fail and fall back, then holds the proxy's Redis unresponsive for 90 seconds mid-run. It asserts zero failed requests on both endpoints, budgets the proxy's RSS at p50, p90, and p99 and its CPU per request as multiples of the healthy baseline from the same run, and puts flat ceilings on p50/p90/p99 latency and log bytes per request. This is the class of test that would have caught this defect regardless of how the originating ticket was classified, because it doesn't depend on anyone correctly predicting the trigger. From here it expands to other dependencies: slow database writes and provider errors that trigger retries and fallbacks.</li>
</ul>
<table><thead><tr><th>Action item</th><th>Status</th><th>Date</th></tr></thead><tbody><tr><td>Untested-assumptions guidance added to PR template (<a href="https://github.com/BerriAI/litellm/pull/40811" target="_blank" rel="noopener noreferrer">litellm#40811</a>)</td><td>Shipped</td><td>September 11, 2026</td></tr><tr><td>Redis chaos load test gating every release candidate (<a href="https://github.com/BerriAI/litellm/pull/40482" target="_blank" rel="noopener noreferrer">litellm#40482</a>, <a href="https://github.com/BerriAI/project-releaser/pull/238" target="_blank" rel="noopener noreferrer">project-releaser#238</a>)</td><td>Shipped</td><td>September 12, 2026</td></tr></tbody></table>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="known-limitations">Known limitations<a href="https://docs.litellm.ai/blog/retry-breadcrumb-oom-incident#known-limitations" class="hash-link" aria-label="Direct link to Known limitations" title="Direct link to Known limitations">​</a></h2>
<ol>
<li>The cost-tracking callback's error handler still turns the full request metadata into a log string at every log level, bounded now only by the per-request cap of four breadcrumbs. This is a smaller version of the same class of defect and is tracked for a follow-up fix.</li>
<li><code>mask_credentials_in_payload</code> still copies without a memo of visited objects, and any value nested past a depth of 10 is returned unmasked. It is safe today because nothing currently hands it a structure with a shared reference or a loop, but that safety is an invariant of its callers, not a guarantee the helper itself enforces.</li>
</ol>
<p>We're sorry for the outage this caused. A defect in a one-line security fix should not have been able to take down a production proxy for hours, and the gap between "we have a ticket that describes this" and "we shipped a release that has it" is exactly the gap we're closing with the changes above.</p>]]></content>
        <author>
            <name>Kerry Lu</name>
            <uri>https://github.com/kerry-berri</uri>
        </author>
        <category label="incident-report" term="incident-report"/>
        <category label="router" term="router"/>
        <category label="redis" term="redis"/>
        <category label="memory" term="memory"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Auto Router: 45% Lower Cost on 25 SWE-bench Tasks]]></title>
        <id>https://docs.litellm.ai/blog/auto-router-capability-benchmark</id>
        <link href="https://docs.litellm.ai/blog/auto-router-capability-benchmark"/>
        <updated>2026-09-11T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[We solved 23 of 25 SWE-bench Verified tasks with LiteLLM's experimental capability router for $11.15, compared with $20.27 using Opus 5.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Cost comparison: Opus 5 at $20.27 and the capability router at $11.15, with 23 of 25 SWE-bench Verified tasks solved in each run." src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNjAwIiBoZWlnaHQ9Ijg0MCIgdmlld0JveD0iMCAwIDE2MDAgODQwIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idGl0bGUgZGVzYyI+CiAgPHRpdGxlIGlkPSJ0aXRsZSI+TGl0ZUxMTSBBdXRvIFJvdXRlcjogNDUlIGxvd2VyIGNvc3Qgb24gMjUgU1dFLWJlbmNoIFZlcmlmaWVkIHRhc2tzPC90aXRsZT4KICA8ZGVzYyBpZD0iZGVzYyI+VG90YWwgY29zdDogT3B1cyA1LCAkMjAuMjc7IGNhcGFiaWxpdHkgcm91dGVyLCAkMTEuMTUuIEJvdGggcnVucyBzb2x2ZWQgMjMgb2YgMjUgU1dFLWJlbmNoIFZlcmlmaWVkIHRhc2tzLiBUaGUgY2FwYWJpbGl0eSByb3V0ZXIgY29zdCA0NSUgbGVzcy48L2Rlc2M+CiAgPGRlZnM+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImJhY2tncm91bmQiIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIxIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZjJmN2YwIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2U2ZjFlOSIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICA8L2RlZnM+CiAgPHJlY3Qgd2lkdGg9IjE2MDAiIGhlaWdodD0iODQwIiByeD0iMjAiIGZpbGw9InVybCgjYmFja2dyb3VuZCkiLz4KICA8ZyBmb250LWZhbWlseT0iSW50ZXIsIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgQXJpYWwsIHNhbnMtc2VyaWYiPgogICAgPHRleHQgeD0iOTYiIHk9IjEwNSIgZmlsbD0iIzQ0NjM0ZSIgZm9udC1zaXplPSIzMiIgZm9udC13ZWlnaHQ9IjYwMCI+TGl0ZUxMTSBBdXRvIFJvdXRlcjwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg0IiB5PSI0MDIiIGZpbGw9IiMxNzNmMmIiIGZvbnQtc2l6ZT0iMjAwIiBmb250LXdlaWdodD0iNzUwIiBsZXR0ZXItc3BhY2luZz0iLTgiPjQ1JTwvdGV4dD4KICAgIDx0ZXh0IHg9Ijk2IiB5PSI1MDgiIGZpbGw9IiMxNzNmMmIiIGZvbnQtc2l6ZT0iODgiIGZvbnQtd2VpZ2h0PSI2NTAiIGxldHRlci1zcGFjaW5nPSItMiI+bG93ZXIgY29zdDwvdGV4dD4KICAgIDx0ZXh0IHg9IjEwMCIgeT0iNjA0IiBmaWxsPSIjNWY3OTY2IiBmb250LXNpemU9IjMxIj4yMy8yNSB0YXNrcyBzb2x2ZWQgwrcgU1dFLWJlbmNoIFZlcmlmaWVkPC90ZXh0PgogICAgPGxpbmUgeDE9Ijg0MCIgeTE9IjYyMCIgeDI9IjE0ODAiIHkyPSI2MjAiIHN0cm9rZT0iI2I4Y2JiYiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgICA8cmVjdCB4PSI5MDUiIHk9IjI2MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNjAiIHJ4PSI4IiBmaWxsPSIjYjVjNWI5Ii8+CiAgICA8cmVjdCB4PSIxMjI1IiB5PSI0MjEuOTczIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjE5OC4wMjciIHJ4PSI4IiBmaWxsPSIjMmU4NTU1Ii8+CiAgICA8dGV4dCB4PSIxMDAwIiB5PSIyMzIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM0ZDYyNTMiIGZvbnQtc2l6ZT0iNDQiIGZvbnQtd2VpZ2h0PSI2NTAiPiQyMC4yNzwvdGV4dD4KICAgIDx0ZXh0IHg9IjEzMjAiIHk9IjM5NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzI2Nzc0ZCIgZm9udC1zaXplPSI0NCIgZm9udC13ZWlnaHQ9IjcwMCI+JDExLjE1PC90ZXh0PgogICAgPHRleHQgeD0iMTAwMCIgeT0iNjc0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNDQ2MzRlIiBmb250LXNpemU9IjMxIiBmb250LXdlaWdodD0iNTUwIj5PcHVzIDU8L3RleHQ+CiAgICA8dGV4dCB4PSIxMzIwIiB5PSI2NzQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM0NDYzNGUiIGZvbnQtc2l6ZT0iMzEiIGZvbnQtd2VpZ2h0PSI1NTAiPkNhcGFiaWxpdHkgcm91dGVyPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==" width="1600" height="840" class="img_ev3q"></p>
<p>We solved 23 of 25 SWE-bench Verified tasks with LiteLLM's experimental capability router for <strong>$11.15</strong>. With Opus 5 for all solver calls, we solved 23 tasks for <strong>$20.27</strong>. We spent <strong>45% less</strong>, including classifier calls, with prompt caching on in both runs.</p>
<!-- -->
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Help shape the Auto-Router</div><div class="admonitionContent_BuS1"><p>Get early access and work with the LiteLLM team on routing for your production traffic.</p><a class="button button--primary button--lg" href="https://calendly.com/tin-berri/litellm-auto-router-design-partner">Apply to Become a Design Partner</a><p>Share your results in <a href="https://github.com/BerriAI/litellm/discussions/32168" target="_blank" rel="noopener noreferrer">discussion #32168</a>.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="results">Results<a href="https://docs.litellm.ai/blog/auto-router-capability-benchmark#results" class="hash-link" aria-label="Direct link to Results" title="Direct link to Results">​</a></h2>
<p>We compare four configurations on the same 25 tasks. We measure quality by solve rate and include unsuccessful attempts and classifier calls in total cost.</p>
<table><thead><tr><th>Configuration</th><th style="text-align:right">Tasks solved</th><th style="text-align:right">Solve rate</th><th style="text-align:right">Total cost</th><th style="text-align:right">Cost / solved task</th></tr></thead><tbody><tr><td><strong>LiteLLM capability router</strong></td><td style="text-align:right"><strong>23/25</strong></td><td style="text-align:right"><strong>92%</strong></td><td style="text-align:right"><strong>$11.15</strong></td><td style="text-align:right"><strong>$0.48</strong></td></tr><tr><td>Opus 5</td><td style="text-align:right">23/25</td><td style="text-align:right">92%</td><td style="text-align:right">$20.27</td><td style="text-align:right">$0.88</td></tr><tr><td>Sonnet 5</td><td style="text-align:right">22/25</td><td style="text-align:right">88%</td><td style="text-align:right">$13.19</td><td style="text-align:right">$0.60</td></tr><tr><td>NeMo Switchyard</td><td style="text-align:right">21/25</td><td style="text-align:right">84%</td><td style="text-align:right">$17.03</td><td style="text-align:right">$0.81</td></tr></tbody></table>
<p>Cost per solved task divides total run cost by the number of solved tasks.</p>
<ul>
<li><strong>45% lower cost than Opus 5 at the same solve count.</strong> We solved 23/25 tasks in each run, spending $11.15 with capability routing versus $20.27 with Opus 5.</li>
<li><strong>One more task solved than Sonnet 5, for $2.04 less.</strong> We solved 23/25 tasks with capability routing versus 22/25 with Sonnet 5.</li>
<li><strong>Two more tasks solved than NeMo Switchyard, for $5.88 less.</strong> We reached a 92% solve rate with LiteLLM capability routing versus 84% with Switchyard.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="routing-between-sonnet-and-opus">Routing between Sonnet and Opus<a href="https://docs.litellm.ai/blog/auto-router-capability-benchmark#routing-between-sonnet-and-opus" class="hash-link" aria-label="Direct link to Routing between Sonnet and Opus" title="Direct link to Routing between Sonnet and Opus">​</a></h2>
<p>We classify the task before choosing a model. We send GPT-5.4-mini the opening instruction, any latest user follow-up, and a capability checklist. We ask it to identify the hardest requirement and estimate Sonnet 5's chance of completing the whole task, using signals such as clear requirements, available inputs, and executable checks.</p>
<p>We compare that probability with the threshold for the task's capability category, requiring a higher probability for uncertain or unsupported tasks. We choose <strong>Sonnet 5</strong> when the estimate meets the threshold and <strong>Opus 5</strong> when it falls below.</p>
<p>In this run, we sent <strong>98.4% of solver calls to Sonnet 5</strong> and <strong>1.6% to Opus 5</strong>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="benchmark-setup">Benchmark setup<a href="https://docs.litellm.ai/blog/auto-router-capability-benchmark#benchmark-setup" class="hash-link" aria-label="Direct link to Benchmark setup" title="Direct link to Benchmark setup">​</a></h2>
<p>We used the same Harbor and mini-swe-agent setup for each configuration: the same 25 SWE-bench Verified tasks, one attempt per task, three concurrent tasks, and the same verifier. We enabled prompt caching in each run and measured total cost from LiteLLM gateway spend logs, including classifier and judge calls.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="scope-of-the-result">Scope of the result<a href="https://docs.litellm.ai/blog/auto-router-capability-benchmark#scope-of-the-result" class="hash-link" aria-label="Direct link to Scope of the result" title="Direct link to Scope of the result">​</a></h2>
<p>We matched the Opus solve count on this subset, with different successes and failures: we solved 21 tasks in both runs, plus two distinct tasks in each. With 25 tasks and one attempt per configuration, we cannot establish equal quality across workloads or predict savings for your agent.</p>
<p>For a comparison on your workload, use the same tasks and verifier, enable prompt caching across configurations, and include classifier spend in the total.</p>
<p>For related experiments, read <a href="https://docs.litellm.ai/blog/auto-router-prompt-caching-benchmark" target="_blank" rel="noopener noreferrer">Prompt Caching Works with Auto Router</a> and <a href="https://docs.litellm.ai/blog/subtask-type-routing" target="_blank" rel="noopener noreferrer">Subtask-Specific Routing: Same Quality, 46% Less Cost</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="an-experimental-classifier">An experimental classifier<a href="https://docs.litellm.ai/blog/auto-router-capability-benchmark#an-experimental-classifier" class="hash-link" aria-label="Direct link to An experimental classifier" title="Direct link to An experimental classifier">​</a></h2>
<p>Capability forecasting is an experimental approach to Auto Router. It estimates whether a cheaper model can complete a task using the requirements, available information, and verification tools. We are evaluating this idea and how it can work with complexity assessment</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Help shape the Auto-Router</div><div class="admonitionContent_BuS1"><p>Work with the LiteLLM team to evaluate Auto Router on your production traffic.</p><a class="button button--primary button--lg" href="https://calendly.com/tin-berri/litellm-auto-router-design-partner">Apply to Become a Design Partner</a></div></div>]]></content>
        <author>
            <name>Tin Lo</name>
            <uri>https://www.linkedin.com/in/tinchi-lo/</uri>
        </author>
        <category label="routing" term="routing"/>
        <category label="cost" term="cost"/>
        <category label="benchmarks" term="benchmarks"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How Pfizer Improved LiteLLM Gateway Performance and Resiliency at Scale]]></title>
        <id>https://docs.litellm.ai/blog/pfizer-gateway-performance-and-resiliency</id>
        <link href="https://docs.litellm.ai/blog/pfizer-gateway-performance-and-resiliency"/>
        <updated>2026-09-11T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[How Pfizer AI Platform Engineering isolated a Redis connection handling bug that cut LiteLLM gateway throughput by ~48% with zero HTTP errors, reduced CI load-test latency by 76%, and built a regression prevention framework with LiteLLM.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="LiteLLM x Pfizer" src="https://docs.litellm.ai/assets/images/litellm_pfizer_announcement-781048e57bc0ef4968ea9f4a79df9d44.png" width="4800" height="2508" class="img_ev3q"></p>
<p class="deck_jVqf">A joint debugging story with LiteLLM, and the release testing that comes next.</p>
<p>A LiteLLM version bump exposed a long-standing Redis configuration bug that cut Pfizer's gateway throughput by ~48%, with zero HTTP errors in the application logs. Here's how the team isolated it through configuration bisection, and the testing infrastructure both teams are building to catch this class of regression before it ships.</p>
<!-- -->
<hr class="introRule_ItQw">
<div class="stats_aEVk"><div class="card_Pm7j"><div class="num_A78F">~48%</div><div class="label_d9Ce">throughput drop caught in CI (≈300 → 156 RPS)</div></div><div class="card_Pm7j"><div class="num_A78F">76%</div><div class="label_d9Ce">faster CI latency after the fix (5,000ms → 1,200ms median)</div></div><div class="card_Pm7j"><div class="num_A78F">1 line</div><div class="label_d9Ce">the Redis conditional at the root of it</div></div><div class="card_Pm7j"><div class="num_A78F">134</div><div class="label_d9Ce">issues addressed in a two-week stability push (LiteLLM)</div></div></div>
<p class="kicker_RMpB">The regression</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="slower-with-no-http-errors-in-the-application-logs">Slower, with no HTTP errors in the application logs<a href="https://docs.litellm.ai/blog/pfizer-gateway-performance-and-resiliency#slower-with-no-http-errors-in-the-application-logs" class="hash-link" aria-label="Direct link to Slower, with no HTTP errors in the application logs" title="Direct link to Slower, with no HTTP errors in the application logs">​</a></h2>
<p class="lede_U2hj">The hardest regressions to catch are the ones that produce zero errors at the HTTP layer: no failures, no single slow request, just less work done per second under concurrency.</p>
<p>Pfizer runs LiteLLM as a self-hosted AI gateway - a single OpenAI-compatible API in front of a multi-provider model catalog, serving every team, application, and agent at Pfizer with uniform access to external and self-hosted models. One shared entry point means a regression in the gateway propagates to every consumer behind it at once, so every change, whether an upstream LiteLLM bump or an internal commit, runs through automated load and regression tests in CI before it ships.</p>
<p>That is what caught this one. CI throughput held steady around 300 requests per second on v1.85.0 and v1.87.3, then dropped to about 156 RPS on v1.89.2. Error rate: unchanged. Per-request latency at the HTTP layer: nothing obviously wrong. The throughput drop manifested only under concurrent load - internally, Redis operations were stalling on TLS handshake timeouts in the async hot path, degrading throughput without surfacing HTTP-level errors. The underlying Redis bug existed in older versions too, but surfaced during Pfizer's v1.89.2 upgrade validation under this workload. That was enough to hold the version back from production.</p>
<div class="pullquote_RcuL"><p>A throughput drop with a 0% HTTP error rate is the worst kind of regression to catch after the fact - nothing pages on it, and it only shows up under real concurrency, not in a single request. Redis timeout errors appeared in the proxy's internal logs, but the gateway still returned HTTP 200 to every caller. Our CI load-tests every version bump and every internal commit against fixed baselines specifically so this class of problem gets caught before it reaches production traffic that's latency-sensitive across chat sessions and agent loops.</p><cite>Aleksandr Liadov &amp; Praveena Mundolimoole, Pfizer AI Platform Engineering</cite></div>
<p class="kicker_RMpB">The hunt</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="isolate-first-then-read-the-diff">Isolate first, then read the diff<a href="https://docs.litellm.ai/blog/pfizer-gateway-performance-and-resiliency#isolate-first-then-read-the-diff" class="hash-link" aria-label="Direct link to Isolate first, then read the diff" title="Direct link to Isolate first, then read the diff">​</a></h2>
<p class="lede_U2hj">Rather than bisecting commits across two minor versions, the team narrowed the surface area by configuration first.</p>
<ol class="steps_buiZ"><li>Ran vanilla LiteLLM - no custom callbacks, no custom auth, mocked backend. Both v1.85.0 and v1.92.0 landed at 320-340ms median latency under concurrent load. The core proxy was clean on both versions.</li><li>Added Pfizer's custom components back one at a time, then all together. Still clean.</li><li>Enabled Redis caching. Median latency jumped to <strong>4,200ms</strong>. That isolated it to the Redis connection path.</li></ol>
<p>From there, the fix was in the diff. The connection-pool builder in <code>litellm/_redis.py</code> decided whether to open a TLS connection by checking whether the <code>ssl</code> key was <em>present</em> in <code>redis_kwargs</code>, not whether its value was <em>true</em>:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#6B6B6B;font-style:italic"># before (litellm/_redis.py at 142d5aa): presence check</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">connection_class </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> async_redis</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Connection</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#CF222E">if</span><span class="token plain"> </span><span class="token string" style="color:#C6105F">"ssl"</span><span class="token plain"> </span><span class="token keyword" style="color:#CF222E">in</span><span class="token plain"> redis_kwargs</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">            </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># true even when ssl: false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    connection_class </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> async_redis</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">SSLConnection</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    redis_kwargs</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">pop</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#C6105F">"ssl"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#005CC5">None</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    redis_kwargs</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#C6105F">"connection_class"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> connection_class</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#6B6B6B;font-style:italic"># after (PR #32590): value check</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#CF222E">if</span><span class="token plain"> redis_kwargs</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">pop</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#C6105F">"ssl"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#005CC5">None</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">        </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># only when ssl is truthy</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    redis_kwargs</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#C6105F">"connection_class"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#D73A49">=</span><span class="token plain"> async_redis</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">SSLConnection</span><br></span></code></pre></div></div>
<p>The config that triggers it - <code>ssl: false</code> with a plaintext Redis endpoint:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#6B6B6B;font-style:italic"># litellm_config.yaml (simplified)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#22863A">litellm_settings</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#22863A">cache</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#005CC5">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#22863A">cache_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> redis</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">host</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> my</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">redis.internal</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">port</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#005CC5">6379</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">password</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &lt;redacted</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">ssl</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#005CC5">false</span><span class="token plain">       </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># valid config, but key presence triggered SSLConnection</span><br></span></code></pre></div></div>
<p>Pfizer's config sets <code>ssl: false</code> against a non-TLS Redis instance - a valid, common setup. But because the key was merely present, cache operations attempted to use <code>SSLConnection</code> against a plaintext endpoint, stalling on TLS handshakes that never completed. This bug was version-independent - it existed in v1.85.0 too - but only surfaced under Pfizer's specific load profile when combined with other changes in the v1.89+ dependency tree. Several additional issues were identified during the same investigation:</p>
<ul class="cardGrid_pRwK"><li><span class="cardLabel_SYkE">Redis <code>ssl</code> handling</span><span class="cardBody_fYnx">Presence check → value check (LIT-4307 / <a href="https://github.com/BerriAI/litellm/pull/32590" target="_blank" rel="noopener noreferrer">PR #32590</a>, shipped in <a href="https://github.com/BerriAI/litellm/releases/tag/v1.93.0-rc.1" target="_blank" rel="noopener noreferrer">v1.93.0</a>).</span></li><li><span class="cardLabel_SYkE">Starlette/FastAPI dependency</span><span class="cardBody_fYnx">A Starlette dependency change showed measurable per-request middleware overhead in this benchmark under high concurrency; pinning to LiteLLM's tested version restored baseline throughput. Investigated separately from the Redis fix.</span></li><li><span class="cardLabel_SYkE">OTEL settings cache</span><span class="cardBody_fYnx"><code>is_otel_v2_enabled</code> was recomputing on every call; caching it dropped per-call cost from 28.4µs to 0.018µs (<a href="https://github.com/BerriAI/litellm/pull/30989" target="_blank" rel="noopener noreferrer">#30989</a>).</span></li><li><span class="cardLabel_SYkE">OTel lazy import fix</span><span class="cardBody_fYnx">A failed OTel import was retried on every request instead of being memoized (<a href="https://github.com/BerriAI/litellm/pull/31707" target="_blank" rel="noopener noreferrer">#31707</a>).</span></li><li><span class="cardLabel_SYkE">Spend-counter round-trips</span><span class="cardBody_fYnx">Reseed path reduced back toward a single Redis round-trip under contention.</span></li></ul>
<div class="pullquote_RcuL"><p>The reason this killed throughput without raising HTTP errors: Redis cache operations in LiteLLM's hot path use best-effort semantics with timeouts. When <code>SSLConnection</code> tried to negotiate TLS against a plaintext Redis, the handshake stalled until the socket timeout (5s default), then the proxy fell back to proceeding without the cache result. The request still returned HTTP 200 - the model response came back fine - but concurrent requests accumulated waiting on Redis connection attempts and timeouts in the async hot path. Under load, this saturated the connection pool and serialized what should have been parallel async operations. Meanwhile, Redis timeout errors appeared in the proxy's internal logs, but never surfaced as HTTP failures to the client.</p><cite>Pramod Naik &amp; Tung Hoang, Pfizer AI Platform Engineering</cite></div>
<p class="kicker_RMpB">The result</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-fix-and-the-test-that-now-runs-on-every-release">The fix, and the test that now runs on every release<a href="https://docs.litellm.ai/blog/pfizer-gateway-performance-and-resiliency#the-fix-and-the-test-that-now-runs-on-every-release" class="hash-link" aria-label="Direct link to The fix, and the test that now runs on every release" title="Direct link to The fix, and the test that now runs on every release">​</a></h2>
<p class="lede_U2hj">The fix closed the immediate gap. The more durable outcome is that the load test which caught it no longer lives only in Pfizer's CI.</p>
<p>Pfizer has shared its load-test configuration with LiteLLM for integration into their CI pipeline, including the mock-backend harness that mimics model providers without hitting real endpoints. The goal: this class of regression - a throughput drop with a clean error rate - becomes part of the release gate for every LiteLLM deployment, not just Pfizer's. This work shipped alongside a broader two-week stability push that addressed <a href="https://github.com/BerriAI/litellm/releases/tag/v1.93.0-rc.1" target="_blank" rel="noopener noreferrer">134 issues</a> across the LiteLLM codebase.</p>
<p class="signature_el8V">One conditional checked whether a key existed instead of whether it was true. Half the throughput. Both the fix and the test configuration that caught it have been contributed upstream.</p>
<div class="beforeafter_m8SO"><div class="card_Pm7j"><span class="baLabel_zT97">Before the fix</span><span class="baNum_hGHT">5,000ms</span><span class="baSub_Dvss">median CI latency · 158 RPS</span></div><div class="baArrow_Yz92">→</div><div class="card_Pm7j"><span class="baLabel_zT97">After the fix</span><span class="baNum_hGHT">1,200ms</span><span class="baSub_Dvss">median CI latency · 236 RPS, 76% faster</span></div></div>
<p><strong>Benchmark environment:</strong> CI mode: 750 concurrent Locust users, 100 users/s spawn rate, 60s sustained load, cassette-based mock backend (deterministic responses), single LiteLLM proxy container, Redis 7 with password auth, LocalStack for AWS services. Task mix weighted: chat completions (10), health (5), embeddings (3), image gen (1). Baselines: median &lt;1,200ms, &gt;200 RPS, error rate &lt;0.5%.</p>
<p class="kicker_RMpB">How Pfizer tests the gateway</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="five-ci-gates-and-whats-next">Five CI gates, and what's next<a href="https://docs.litellm.ai/blog/pfizer-gateway-performance-and-resiliency#five-ci-gates-and-whats-next" class="hash-link" aria-label="Direct link to Five CI gates, and what's next" title="Direct link to Five CI gates, and what's next">​</a></h2>
<p class="lede_U2hj">The load test that caught the regression isn't a one-off script. Pfizer's AI Platform Engineering team runs five automated testing gates on every code change to the gateway - no change reaches production without passing all five - plus one in active development.</p>
<ul class="cardGrid_pRwK"><li><span class="cardLabel_SYkE">Unit tests</span><span class="cardBody_fYnx">Auth, routing, health checks, and metrics validated on every PR. Tests run the same runtime configuration as production containers, so there is no config drift and no difference in behavior between the system under test and the production system.</span></li><li><span class="cardLabel_SYkE">API contract testing</span><span class="cardBody_fYnx">Automated OpenAPI diff on every PR. Breaking changes to customer-facing endpoints block the merge. Additive changes pass and get logged.</span></li><li><span class="cardLabel_SYkE">Load / performance testing</span><span class="cardBody_fYnx">Concurrent load against a fully mocked local infrastructure stack in CI with LocalStack, then again against live infrastructure post-deploy in staging environment. Dedicated load-generation infrastructure with traffic weighted to match real production patterns. Every run is checked against expected latency, throughput, and error-rate baselines.</span></li><li><span class="cardLabel_SYkE">Memory-leak detection</span><span class="cardBody_fYnx">Long-running, sustained load tests that monitor memory over hours, not minutes. This is, for instance, how the team identified a connection leak and hot-path object accumulation that were driving unnecessary autoscaling in production.</span></li><li><span class="cardLabel_SYkE">Functional / E2E testing</span><span class="cardBody_fYnx">Scenario suites running against live deployed environments covering chat completions, streaming, routing, auth flows, observability, and more. All scenarios must pass - partial passes are not accepted.</span></li><li><span class="cardLabel_SYkE">Work in progress: fault injection &amp; mutation testing</span><span class="cardBody_fYnx">Injecting provider failures to validate fallback routing under stress. Adding mutation testing to increase team's confidence in the quality of our test coverage.</span></li></ul>
<p>In practice, CI runs consistently achieve <strong>0% HTTP error rate</strong> and comfortably beat latency and throughput thresholds. The baselines are a safety net, not the norm.</p>
<p class="kicker_RMpB">How Pfizer improves gateway performance</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="instrument-before-you-optimize">Instrument before you optimize<a href="https://docs.litellm.ai/blog/pfizer-gateway-performance-and-resiliency#instrument-before-you-optimize" class="hash-link" aria-label="Direct link to Instrument before you optimize" title="Direct link to Instrument before you optimize">​</a></h2>
<p class="lede_U2hj">Load tests catch regressions at release time. Catching slow, cumulative drift - the kind that shows up as autoscaling pressure weeks later, not a failed CI check - needs a different discipline: instrumentation deep enough to see it, then fixes targeted enough not to introduce new drift.</p>
<ul class="cardGrid_pRwK"><li><span class="cardLabel_SYkE">Instrumentation</span><span class="cardBody_fYnx">Requests are traced down to memory allocation, HTTP connection reuse, event-loop scheduling, and Python garbage-collector behavior. This is how the team found a connection leak and hot-path object accumulation that were quietly driving unnecessary autoscaling in production - neither showed up as an error or a failed threshold, only as a slow upward trend in memory and instance count.</span></li><li><span class="cardLabel_SYkE">Targeted fixes, then a backstop</span><span class="cardBody_fYnx">Once the source is visible, fixes are narrow: tightening object lifecycles, smoothing hot-path loop behavior, closing the specific leak. As a last line of defense against whatever slips past instrumentation, long-running workers are still recycled periodically - a backstop, not a substitute for finding the root cause.</span></li></ul>
<!-- -->
<p>The instrumentation rests on three observability pillars: logs, metrics, and distributed traces — all enabled, all wired together. The team doesn't just turn them on and walk away. When something looks off, we inject additional instrumentation into the suspicious path, using all three pillars to triangulate exactly where the behavior diverges, until the root cause is fully visible. That's how we went from "something's slow" to root cause in a single investigation instead of a week of guesswork. These three pillars serve as the core foundation to gain insights into a constantly moving and dynamic system, such as the one we are working on.</p>
<p class="kicker_RMpB">What LiteLLM is building next</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="catching-this-class-of-bug-before-release-not-after">Catching this class of bug before release, not after<a href="https://docs.litellm.ai/blog/pfizer-gateway-performance-and-resiliency#catching-this-class-of-bug-before-release-not-after" class="hash-link" aria-label="Direct link to Catching this class of bug before release, not after" title="Direct link to Catching this class of bug before release, not after">​</a></h2>
<p>This regression was caught, but late - in a downstream user's CI, not in LiteLLM's own release checks. Based on what Pfizer's team flagged as highest priority, here's what's moving into the release pipeline:</p>
<ul class="cardGrid_pRwK"><li><span class="cardLabel_SYkE">Regression testing</span><span class="cardBody_fYnx">Representative load and behavior tests, Pfizer's included, running as release gates instead of after-the-fact checks.</span></li><li><span class="cardLabel_SYkE">Functional testing</span><span class="cardBody_fYnx">Broader end-to-end coverage of the request lifecycle across providers.</span></li><li><span class="cardLabel_SYkE">Contract verification</span><span class="cardBody_fYnx">Provider and API-shape checks so a dependency or schema change can't silently alter behavior.</span></li><li><span class="cardLabel_SYkE">Fuzzing</span><span class="cardBody_fYnx">Malformed and adversarial inputs against the proxy's hot paths to surface edge cases early.</span></li><li><span class="cardLabel_SYkE">Memory-leak detection</span><span class="cardBody_fYnx">Retention checks under sustained large-payload load, so worker memory stays flat over time.</span></li><li><span class="cardLabel_SYkE">In the open</span><span class="cardBody_fYnx">We'll report where each of these stands, with numbers, at the release milestones. You shouldn't have to take our word for it.</span></li></ul>
<div class="pullquote_RcuL"><p>This is exactly why we stand for open source and not some black-box solution. We want to deeply understand what's going on inside the gateway, and be able to contribute back, even change the way it's tested. The real win here isn't the latency number; it's that our load test is being integrated into LiteLLM's release pipeline, so this class of regression gets caught before it reaches us or anyone else. That's how we sleep better at night, and how the whole community benefits from the work.</p><cite>Alexey Reznichenko, Pfizer AI Platform Engineering</cite></div>
<div class="closecard_NUhK"><h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-we-wrote-this-together">Why we wrote this together<a href="https://docs.litellm.ai/blog/pfizer-gateway-performance-and-resiliency#why-we-wrote-this-together" class="hash-link" aria-label="Direct link to Why we wrote this together" title="Direct link to Why we wrote this together">​</a></h2><p>A one-line presence check cut a production gateway's throughput in half with a clean error rate - the kind of regression that's easy to miss and expensive to find late. We wrote this up jointly because Pfizer caught it in CI before it reached production, and because the fix and the test configuration have been contributed upstream, where every LiteLLM deployment can benefit. Platform teams running LiteLLM in production hit failure modes maintainers can't always reproduce locally; contributing fixes and tests, not just bug reports, is what turns those into permanent coverage. If you've hit something similar, we'd like to hear about it.</p><div class="btnRow_e_ZN"><a class="btn_k1TV btnPrimary_S0Ln" href="https://github.com/BerriAI/litellm">LiteLLM on GitHub</a><a class="btn_k1TV btnSecondary_i0Bm" href="https://docs.litellm.ai/">Read the docs</a></div></div>]]></content>
        <author>
            <name>Ishaan Jaffer</name>
            <uri>https://www.linkedin.com/in/reffajnaahsi/</uri>
        </author>
        <author>
            <name>Krrish Dholakia</name>
            <uri>https://www.linkedin.com/in/krish-d/</uri>
        </author>
        <author>
            <name>Yassin Kortam</name>
            <uri>https://www.linkedin.com/in/yassink/</uri>
        </author>
        <author>
            <name>Gabriele Michelli</name>
            <uri>https://github.com/BerriAI/litellm</uri>
        </author>
        <author>
            <name>Aleksandr Liadov</name>
            <uri>https://www.linkedin.com/in/aleksandr-liadov-76766a152/</uri>
        </author>
        <author>
            <name>Praveena Mundolimoole</name>
            <uri>https://www.linkedin.com/in/pmundolimoole/</uri>
        </author>
        <author>
            <name>Pramod Naik</name>
            <uri>https://www.linkedin.com/in/pramod-naik-b02a6322a/</uri>
        </author>
        <author>
            <name>Tung Hoang</name>
            <uri>https://www.linkedin.com/in/tunghoangs/</uri>
        </author>
        <author>
            <name>Alexey Reznichenko</name>
            <uri>https://www.linkedin.com/in/raaar/</uri>
        </author>
        <category label="engineering" term="engineering"/>
        <category label="performance" term="performance"/>
        <category label="redis" term="redis"/>
        <category label="testing" term="testing"/>
        <category label="customer-story" term="customer-story"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Auto-Router Updates: Harness-Aware Routing]]></title>
        <id>https://docs.litellm.ai/blog/auto-router-harness-aware-classification</id>
        <link href="https://docs.litellm.ai/blog/auto-router-harness-aware-classification"/>
        <updated>2026-09-10T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Harness-aware Auto-Router updates for Claude Code and Codex: less classifier context, encrypted task support, and clearer routing logs.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="The Auto-Router sends task context to the classifier and the original request to the selected model" src="https://docs.litellm.ai/assets/images/hero-03a151c611711d245010da20da13112f.png" width="2400" height="1350" class="img_ev3q"></p>
<p>We've updated the Auto-Router to account for how Claude Code and Codex package requests. It now removes more harness context from classification, preserves encrypted delegated tasks, and shows exactly what the classifier received</p>
<!-- -->
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Help shape the Auto-Router</div><div class="admonitionContent_BuS1"><p>Work with the LiteLLM team to test routing on your production traffic and help shape what we build next</p><a class="button button--primary button--lg" href="https://calendly.com/tin-berri/litellm-auto-router-design-partner">Apply to Become a Design Partner</a></div></div>
<p>A coding harness sends more than the user's task. Requests also carry environment details, repository instructions, skill catalogs, and reminders. Those can dominate the classifier input or appear after the task as a separate message. Harness-aware routing uses the client identity and request format to find the task that needs a model</p>
<table><thead><tr><th>Update</th><th>What changes</th></tr></thead><tbody><tr><td><a href="https://github.com/BerriAI/litellm/pull/40655" target="_blank" rel="noopener noreferrer">Claude Code classification</a></td><td>Omits caller system text from the classifier input</td></tr><tr><td><a href="https://github.com/BerriAI/litellm/pull/40599" target="_blank" rel="noopener noreferrer">Codex reminder handling</a></td><td>Removes recognized harness blocks while preserving the delegated task</td></tr><tr><td><a href="https://github.com/BerriAI/litellm/pull/40608" target="_blank" rel="noopener noreferrer">Encrypted delegated tasks</a></td><td>Preserves encrypted task blocks in native Responses classifier calls</td></tr><tr><td><a href="https://github.com/BerriAI/litellm/pull/40604" target="_blank" rel="noopener noreferrer">Classifier logs</a></td><td>Separates classifier input, masked source request, and classifier response</td></tr></tbody></table>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="less-classifier-input-for-claude-code">Less classifier input for Claude Code<a href="https://docs.litellm.ai/blog/auto-router-harness-aware-classification#less-classifier-input-for-claude-code" class="hash-link" aria-label="Direct link to Less classifier input for Claude Code" title="Direct link to Less classifier input for Claude Code">​</a></h2>
<p>In a Claude Code reproduction, a short binary-search question used 2,478 classifier input tokens. Environment details, agent definitions, and the skill catalog accounted for 7,613 characters in the classifier's user payload</p>
<p>For recognized Claude Code requests, the LLM classifier now omits caller system text. The selected model still receives the original system text, and the classifier keeps the current ask, configured prior turns, and conversation-depth signal</p>
<table><thead><tr><th>First classifier call</th><th style="text-align:right">Before</th><th style="text-align:right">After</th></tr></thead><tbody><tr><td>User payload, characters</td><td style="text-align:right">7,675</td><td style="text-align:right">62</td></tr><tr><td>Total input tokens</td><td style="text-align:right">2,478</td><td style="text-align:right">524</td></tr></tbody></table>
<p>That's <strong>about 79% fewer classifier input tokens on this call</strong>. The reproduction used Claude Code 2.1.268, a Haiku 4.5 classifier, and a three-turn session with one delegated subagent. It measures classifier overhead on that first call; total session cost and answer quality need separate evaluation. <a href="https://github.com/BerriAI/litellm/pull/40655" target="_blank" rel="noopener noreferrer">Reproduction and results</a></p>
<p>Task constraints supplied only in Claude Code system messages also stop influencing tier selection. Put constraints that should affect routing in the task itself</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="keep-the-codex-task-in-view">Keep the Codex task in view<a href="https://docs.litellm.ai/blog/auto-router-harness-aware-classification#keep-the-codex-task-in-view" class="hash-link" aria-label="Direct link to Keep the Codex task in view" title="Direct link to Keep the Codex task in view">​</a></h2>
<p>Codex can append environment and repository instructions after a delegated task. Previously, that trailing message could become the classifier's current ask</p>
<p>For recognized Codex user agents, the router now strips complete harness blocks such as <code>&lt;environment_context&gt;</code> and <code>&lt;recommended_plugins&gt;</code>, plus the repository instruction envelope. The delegated task stays available for classification, and the selected model receives the original request</p>
<p>With <code>classification_mode: user_turn</code> and a session identifier, a fresh ask followed by reminder text gets classified. Subsequent assistant or tool continuations reuse its selected model without another classifier call. A new ask remains eligible for classification. <a href="https://github.com/BerriAI/litellm/pull/40599" target="_blank" rel="noopener noreferrer">Behavior and reproduction</a></p>
<p>Custom <code>reminder_markers</code> replace the built-in markers, so include every pair your harness needs when overriding them</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="classify-encrypted-delegated-tasks">Classify encrypted delegated tasks<a href="https://docs.litellm.ai/blog/auto-router-harness-aware-classification#classify-encrypted-delegated-tasks" class="hash-link" aria-label="Direct link to Classify encrypted delegated tasks" title="Direct link to Classify encrypted delegated tasks">​</a></h2>
<p>Some Codex delegated tasks arrive in an <code>agent_message</code> containing <code>encrypted_content</code>. Converting that payload to ordinary text hid the task from the classifier and produced a <code>SIMPLE</code> verdict for a difficult request</p>
<p>The router now preserves the encrypted task in a native Responses classifier call. In the reproduction, the difficult task changed from <code>SIMPLE</code> on <code>gpt-5.6-luna</code> to <code>REASONING</code> on <code>gpt-6-astra</code>. The easy task stayed <code>SIMPLE</code> on <code>gpt-5.6-luna</code>, with both streaming and non-streaming requests tested. <a href="https://github.com/BerriAI/litellm/pull/40608" target="_blank" rel="noopener noreferrer">Reproduction and results</a></p>
<p>This requires a native OpenAI or Azure OpenAI Responses classifier deployment with credentials that can consume the encrypted content. Encrypted tasks bypass the local scoring shortcut in <code>heuristic_first</code> and <code>hybrid</code> modes. Unsupported deployments and decryption errors follow <code>classifier_fallback</code>. The live reproduction used OpenAI; Azure transport was not exercised</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="see-what-the-classifier-received">See what the classifier received<a href="https://docs.litellm.ai/blog/auto-router-harness-aware-classification#see-what-the-classifier-received" class="hash-link" aria-label="Direct link to See what the classifier received" title="Direct link to See what the classifier received">​</a></h2>
<p>Open a request in <strong>Logs</strong>, then select its <strong>Classify</strong> row. New captures show <strong>Classifier input</strong>, <strong>Originating request, credentials masked</strong>, and <strong>Classifier response</strong> separately</p>
<p>This makes it possible to check whether the task reached the classifier and compare its verdict with the original request. Credentials, including Cookie and Set-Cookie headers, are masked in the source copy. Message-logging redaction settings still apply, and older rows retain their existing view. <a href="https://github.com/BerriAI/litellm/pull/40604" target="_blank" rel="noopener noreferrer">Logs update</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="try-it-with-your-harness">Try it with your harness<a href="https://docs.litellm.ai/blog/auto-router-harness-aware-classification#try-it-with-your-harness" class="hash-link" aria-label="Direct link to Try it with your harness" title="Direct link to Try it with your harness">​</a></h2>
<p>Use a build containing the linked changes and send Claude Code or Codex traffic through the <a href="https://docs.litellm.ai/docs/proxy/auto_routing">Auto-Router</a>. Preserve the client's <code>User-Agent</code> header so the router can recognize it. Test Claude Code behavior through the real client: the browser routing preview has no client-identity field and uses generic classification behavior</p>
<p>Share what you find in the <a href="https://github.com/BerriAI/litellm/discussions/32168" target="_blank" rel="noopener noreferrer">Auto-Router discussion</a></p>]]></content>
        <author>
            <name>Moe Khalil</name>
            <uri>https://www.linkedin.com/in/moe-khalil-73a2371a1/</uri>
        </author>
        <category label="routing" term="routing"/>
        <category label="complexity-router" term="complexity-router"/>
        <category label="engineering" term="engineering"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Secure shared AI agents with identity-aware access and spend controls]]></title>
        <id>https://docs.litellm.ai/blog/ai-gateway-identity-and-finops</id>
        <link href="https://docs.litellm.ai/blog/ai-gateway-identity-and-finops"/>
        <updated>2026-09-08T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[How LiteLLM preserves caller identity across shared agents, governs model and MCP access, and enforces independent budgets for each business unit.]]></summary>
        <content type="html"><![CDATA[<p>Shared agents can preserve individual identity, access, and spend controls.</p>
<p>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.</p>
<p>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.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="one-gateway-for-the-complete-agent-workflow">One gateway for the complete agent workflow<a href="https://docs.litellm.ai/blog/ai-gateway-identity-and-finops#one-gateway-for-the-complete-agent-workflow" class="hash-link" aria-label="Direct link to One gateway for the complete agent workflow" title="Direct link to One gateway for the complete agent workflow">​</a></h2>
<p>A typical agent request crosses four boundaries:</p>
<ol>
<li>A user calls an agent.</li>
<li>The agent calls a model.</li>
<li>The agent calls an MCP tool.</li>
<li>The agent calls another agent.</li>
</ol>
<p>LiteLLM governs each boundary through a single proxy:</p>
<!-- -->
<p>The <a href="https://docs.litellm.ai/docs/a2a">Agent Gateway</a> authenticates callers, controls which users and teams can invoke each agent, and records request, response, latency, and cost data. The Model Gateway routes LLM traffic and applies budgets and rate limits. The MCP Gateway centralizes tool access and upstream authentication.</p>
<p>Together, they let platform teams operate agents as shared services with per-user governance across every request.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="authenticate-every-call-to-a-shared-agent">Authenticate every call to a shared agent<a href="https://docs.litellm.ai/blog/ai-gateway-identity-and-finops#authenticate-every-call-to-a-shared-agent" class="hash-link" aria-label="Direct link to Authenticate every call to a shared agent" title="Direct link to Authenticate every call to a shared agent">​</a></h2>
<p>Start by registering each agent in the Agent Gateway. Agents appear in the Admin UI with their status and spend data:</p>
<p><img decoding="async" loading="lazy" alt="Agents tab showing the finance-agent and summarizer-agent registered on the Agent Gateway" src="https://docs.litellm.ai/assets/images/a2a_gateway_poc_agents_tab-666433eea00489a5fa90bde19529dce1.png" width="1459" height="812" class="img_ev3q"></p>
<p>Users can authenticate through OIDC or another supported LiteLLM credential while sharing the same team policy. In this example, two business units belong to <code>shared-agents-team</code>:</p>
<p><img decoding="async" loading="lazy" alt="LiteLLM Admin UI showing op-unit-a and op-unit-b under the shared-agents-team policy" src="https://docs.litellm.ai/assets/images/a2a_gateway_poc_virtual_keys_tab-6634b50084de037998cb5f9798354b3d.png" width="1459" height="812" class="img_ev3q"></p>
<p>The team's object permissions define which agents and MCP servers its members can access. Both business units use a single finance agent registration with centrally managed upstream credentials.</p>
<p><img decoding="async" loading="lazy" alt="Teams tab showing shared-agents-team with its resources and combined spend against a $5 budget" src="https://docs.litellm.ai/assets/images/a2a_gateway_poc_teams_tab-582e8bde0037cc119ce339898ba1f654.png" width="1459" height="812" class="img_ev3q"></p>
<p>When a request reaches the Agent Gateway, LiteLLM validates the caller's authentication and resolves the associated user and team. The gateway forwards that verified context to the agent as <code>X-LiteLLM-User-Id</code> and <code>X-LiteLLM-Team-Id</code>.</p>
<!-- -->
<p>The agent can use this authenticated context for downstream authorization, attribution, and budget enforcement.</p>
<p>Clients invoke the shared agent through the standard A2A JSON-RPC interface:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">curl -X POST "$LITELLM_BASE_URL/a2a/$AGENT_ID" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Authorization: Bearer $ACCESS_TOKEN" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -H "Content-Type: application/json" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -d '{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "jsonrpc": "2.0",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "id": "request-1",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "method": "message/send",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "params": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "message": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "kind": "message",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "messageId": "message-1",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "role": "user",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "parts": [</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          {"kind": "text", "text": "Give me a one-sentence finance status update."}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        ]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  }'</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="keep-user-attribution-on-model-calls">Keep user attribution on model calls<a href="https://docs.litellm.ai/blog/ai-gateway-identity-and-finops#keep-user-attribution-on-model-calls" class="hash-link" aria-label="Direct link to Keep user attribution on model calls" title="Direct link to Keep user attribution on model calls">​</a></h2>
<p>The finance agent calls the Model Gateway with its own workload identity. This keeps service authentication separate from the end user's authentication.</p>
<p>For per-user attribution, the agent reads the verified <code>X-LiteLLM-User-Id</code> value from the inbound request and supplies it as the <code>user</code> field on its outbound model request. It also forwards LiteLLM trace and agent context headers so calls remain grouped under the same execution and spend is attributed to the correct agent.</p>
<p>This gives LiteLLM two useful dimensions at the same time:</p>
<ul>
<li>The workload identity identifies the agent making the model call.</li>
<li>The <code>user</code> field identifies the customer or business unit whose budget applies.</li>
</ul>
<p>Multiple teams can therefore share one agent and one model route while LiteLLM maintains separate usage and budget records for each caller.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="apply-each-users-permissions-to-mcp-tools">Apply each user's permissions to MCP tools<a href="https://docs.litellm.ai/blog/ai-gateway-identity-and-finops#apply-each-users-permissions-to-mcp-tools" class="hash-link" aria-label="Direct link to Apply each user's permissions to MCP tools" title="Direct link to Apply each user's permissions to MCP tools">​</a></h2>
<p>The same finance agent accesses tools through the MCP Gateway with centrally managed credentials for upstream systems.</p>
<p>In this example, the finance MCP server exposes two tools:</p>
<ul>
<li><code>get_revenue_summary</code>, available to any authorized caller</li>
<li><code>get_payroll_details</code>, restricted to users with the <code>finance-payroll-access</code> group</li>
</ul>
<p><img decoding="async" loading="lazy" alt="MCP Servers tab showing the finance_mcp server registered on the MCP Gateway" src="https://docs.litellm.ai/assets/images/a2a_gateway_poc_mcp_servers_tab-3a76b785c9bea6c6652ab8618b9635c2.png" width="1459" height="812" class="img_ev3q"></p>
<p>For interactive per-user OAuth, configure the MCP server with <code>auth_type: oauth2</code> and <code>oauth2_flow: authorization_code</code>. The user completes a PKCE sign-in with the organization's identity provider. LiteLLM stores the resulting credential for that user and MCP server, then attaches it to later tool calls for the same user.</p>
<p>The upstream MCP server remains the authorization authority. It evaluates the token's claims and decides whether the user can access payroll details or only the broader revenue summary. LiteLLM centralizes the OAuth flow and credential handling while preserving each user's upstream identity.</p>
<p>See <a href="https://docs.litellm.ai/docs/mcp_oauth">MCP OAuth</a> for configuration options, including machine-to-machine and on-behalf-of flows.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="keep-user-and-agent-attribution-across-multi-agent-calls">Keep user and agent attribution across multi-agent calls<a href="https://docs.litellm.ai/blog/ai-gateway-identity-and-finops#keep-user-and-agent-attribution-across-multi-agent-calls" class="hash-link" aria-label="Direct link to Keep user and agent attribution across multi-agent calls" title="Direct link to Keep user and agent attribution across multi-agent calls">​</a></h2>
<p>An agent-to-agent workflow includes two useful attribution dimensions:</p>
<ul>
<li>The immediate workload identity, such as the finance agent</li>
<li>The originating user who started the workflow</li>
</ul>
<p>LiteLLM records the immediate workload identity at every gateway hop. When a downstream agent also needs the originating user, the calling agent passes that authenticated user context as application metadata or a supported forwarded header.</p>
<p>Together, these dimensions give platform teams a complete view of the workflow: gateway logs show which agent made each call, while the propagated user context connects the workflow to the business unit that initiated it.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="enforce-independent-budgets-below-the-shared-team">Enforce independent budgets below the shared team<a href="https://docs.litellm.ai/blog/ai-gateway-identity-and-finops#enforce-independent-budgets-below-the-shared-team" class="hash-link" aria-label="Direct link to Enforce independent budgets below the shared team" title="Direct link to Enforce independent budgets below the shared team">​</a></h2>
<p>Shared infrastructure can support an independent spend limit for every business unit.</p>
<p>LiteLLM supports budgets at multiple levels, including keys, teams, agents, and customers. For a shared-agent deployment, create a customer record for each business unit and pass that customer ID in the model request's <code>user</code> field.</p>
<p>For example:</p>
<ul>
<li><code>op-unit-a</code>: $0.01 budget</li>
<li><code>op-unit-b</code>: $5.00 budget</li>
<li>Both units: the same finance agent and <code>shared-agents-team</code></li>
</ul>
<!-- -->
<p>When one unit reaches its limit, LiteLLM applies that unit's budget policy independently. Other units continue using their own budgets, and the shared team budget provides an aggregate ceiling across them.</p>
<p>This gives FinOps teams both views they need: consolidated spend for the shared service and independent controls for each business unit using it.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="monitor-identity-and-budgets-in-litellm-logs">Monitor identity and budgets in LiteLLM Logs<a href="https://docs.litellm.ai/blog/ai-gateway-identity-and-finops#monitor-identity-and-budgets-in-litellm-logs" class="hash-link" aria-label="Direct link to Monitor identity and budgets in LiteLLM Logs" title="Direct link to Monitor identity and budgets in LiteLLM Logs">​</a></h2>
<p>LiteLLM Logs gives platform, security, and FinOps teams a single operational view of shared-agent activity. When an agent carries the authenticated end-user context into its downstream calls, operators can filter by <strong>End User</strong> to follow one business unit across A2A agent invocations, model requests, and MCP tool operations.</p>
<p>Each log row includes the team, model or tool, token usage, cost, duration, and end-user ID. This makes it easy to start with a customer or business unit and trace the resources used throughout its workflow.</p>
<p><img decoding="async" loading="lazy" alt="LiteLLM Request Logs filtered by end user, showing A2A, model, and MCP activity for one business unit" src="https://docs.litellm.ai/assets/images/a2a_gateway_poc_logs_end_user_attribution-9ae2244170c92ae6840b68ab7d4b3dc6.png" width="1512" height="793" class="img_ev3q"></p>
<p>Request details make customer budget enforcement visible. The entry records the <code>429</code> status, the end-user ID, current spend, and configured budget limit. Budget evaluation occurs before model-provider invocation, so the entry shows zero model tokens and cost.</p>
<p><img decoding="async" loading="lazy" alt="LiteLLM request details for a budget enforcement event, including status 429, end-user ID, current spend, and budget limit" src="https://docs.litellm.ai/assets/images/a2a_gateway_poc_logs_budget_exceeded-62fb70a1f5f485cbdcd1534c265b3459.png" width="1512" height="793" class="img_ev3q"></p>
<p>For shared-agent environments, these views answer three common operational questions:</p>
<ul>
<li>Which business unit initiated the workflow?</li>
<li>Which agents, models, and tools handled its requests?</li>
<li>How did the applicable customer budget govern the request?</li>
</ul>
<p>Team and workload attribution support infrastructure-level reporting, while the end-user field provides the business-unit-level detail needed for access reviews, incident investigation, and spend management.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="a-practical-deployment-pattern">A practical deployment pattern<a href="https://docs.litellm.ai/blog/ai-gateway-identity-and-finops#a-practical-deployment-pattern" class="hash-link" aria-label="Direct link to A practical deployment pattern" title="Direct link to A practical deployment pattern">​</a></h2>
<p>To apply this architecture:</p>
<ol>
<li>Register shared agents in the Agent Gateway.</li>
<li>Grant teams access to the required agents and MCP servers through object permissions.</li>
<li>Configure OIDC or another supported authentication method that resolves end-user identity and team membership.</li>
<li>Read the authenticated inbound user context and pass it as <code>user</code> on model calls.</li>
<li>Configure per-user OAuth for MCP servers that enforce user-specific permissions.</li>
<li>Create customer budgets for each business unit, with an optional aggregate team budget.</li>
<li>Use LiteLLM Logs to audit the user, key, team, agent, latency, and cost for each request.</li>
</ol>
<p>The result is a shared agent platform with clear security and financial boundaries: users access their approved tools and data, spend is attributed to the correct business unit, and each unit is governed independently through one shared agent deployment.</p>
<p>Explore the <a href="https://docs.litellm.ai/docs/a2a">Agent Gateway</a>, <a href="https://docs.litellm.ai/docs/mcp">MCP Gateway</a>, and <a href="https://docs.litellm.ai/docs/proxy/users">budget and rate-limit controls</a> to build this pattern in your LiteLLM deployment.</p>]]></content>
        <author>
            <name>Yassin Kortam</name>
            <uri>https://www.linkedin.com/in/yassink/</uri>
        </author>
        <category label="product" term="product"/>
        <category label="agents" term="agents"/>
        <category label="mcp" term="mcp"/>
        <category label="security" term="security"/>
        <category label="finops" term="finops"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[AutoRouter: Tune Heuristics for Your Traffic]]></title>
        <id>https://docs.litellm.ai/blog/auto-router-heuristic-tuning</id>
        <link href="https://docs.litellm.ai/blog/auto-router-heuristic-tuning"/>
        <updated>2026-09-08T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Tune AutoRouter heuristic dimensions for specific workloads, improve classification accuracy, and configure tiers from models you already serve.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Tune AutoRouter Heuristic v1 dimensions to improve routing accuracy for your traffic" src="https://docs.litellm.ai/assets/images/hero-5a22e60750e95c7d644862a2ebbb2dd2.png" width="3200" height="1676" class="img_ev3q"></p>
<p>Heuristic v1 scores seven prompt signals, including reasoning language, code, technical terms, and prompt length. You can tune those signals for the traffic your router serves.</p>
<!-- -->
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>🚀 Help shape the Auto-Router</div><div class="admonitionContent_BuS1"><p>Test heuristic tuning on your production traffic with the LiteLLM team and influence the roadmap.</p><a class="button button--primary button--lg" href="https://calendly.com/tin-berri/litellm-auto-router-design-partner">Apply to Become a Design Partner</a><br><br><p>Share benchmark results in <a href="https://github.com/BerriAI/litellm/discussions/32168" target="_blank" rel="noopener noreferrer">discussion #32168</a>.</p></div></div>
<p>We tested that idea on a balanced 240-prompt mix:</p>
<table><thead><tr><th>Configuration</th><th style="text-align:right">Accuracy</th></tr></thead><tbody><tr><td>Default Heuristic v1</td><td style="text-align:right">90.8%</td></tr><tr><td>Workload-tuned Heuristic v1</td><td style="text-align:right"><strong>95.2%</strong></td></tr><tr><td>All Opus</td><td style="text-align:right">94.9%</td></tr></tbody></table>
<ul>
<li>The tuned configuration cut the classification error rate from <strong>9.2% to 4.8%</strong>, a <strong>48% reduction</strong>.</li>
<li>It slightly exceeded the all-Opus reference on this benchmark.</li>
<li>The model ladder and test set stayed fixed, so tuning the heuristic dimensions drove the change.</li>
</ul>
<p>A useful profile depends on your traffic. Code-heavy workloads and support questions reward different routing choices.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="tune-the-signals-your-workload-uses">Tune the signals your workload uses<a href="https://docs.litellm.ai/blog/auto-router-heuristic-tuning#tune-the-signals-your-workload-uses" class="hash-link" aria-label="Direct link to Tune the signals your workload uses" title="Direct link to Tune the signals your workload uses">​</a></h2>
<p>You can tune:</p>
<ul>
<li><code>reasoningMarkers</code>, <code>multiStepPatterns</code>, and <code>questionComplexity</code> for reasoning-heavy prompts.</li>
<li><code>codePresence</code> and <code>technicalTerms</code> for code and domain-specific traffic.</li>
<li><code>tokenCount</code> and <code>simpleIndicators</code> for prompt length and low-complexity cues.</li>
<li>A custom dimension for workload-specific vocabulary or structure.</li>
</ul>
<p>For a useful comparison:</p>
<ul>
<li>Start with a held-out sample from your traffic.</li>
<li>Keep the model ladder and test set fixed.</li>
<li>Change one signal family at a time and inspect which prompts move tiers.</li>
<li>Compare accuracy, latency, and tier distribution.</li>
</ul>
<p>The <a href="https://docs.litellm.ai/docs/auto_router/evaluate">shadow evaluation workflow</a> tests a candidate on sampled production traffic without changing the response your user receives.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="auto-configure-from-models-you-already-have">Auto-configure from models you already have<a href="https://docs.litellm.ai/blog/auto-router-heuristic-tuning#auto-configure-from-models-you-already-have" class="hash-link" aria-label="Direct link to Auto-configure from models you already have" title="Direct link to Auto-configure from models you already have">​</a></h2>
<p>Select <strong>Configure automatically</strong>. LiteLLM checks the models your proxy can access and, using current family presets, picks the best available model for each routing tier.</p>
<ul>
<li>Each tier uses a model from your existing deployments.</li>
<li>The configuration opens for review before you save it.</li>
<li>Anthropic Family uses <strong>Claude Fable 5.1 at high effort</strong> for reasoning traffic.</li>
<li>OpenAI Family uses <strong>GPT-6 Astra at xhigh effort</strong> for reasoning traffic.</li>
</ul>
<p>Deployment names do not need to match the catalog. AutoRouter identifies the provider model behind each deployment.</p>
<p><img decoding="async" loading="lazy" alt="Add Auto Router form with the new Configure automatically button" src="https://docs.litellm.ai/assets/images/auto-configure-button-d29e817c827a0ccbd9e4b49f940bbcc7.png" width="900" height="400" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="see-llm-classifier-activity-per-1000-turns">See LLM classifier activity per 1,000 turns<a href="https://docs.litellm.ai/blog/auto-router-heuristic-tuning#see-llm-classifier-activity-per-1000-turns" class="hash-link" aria-label="Direct link to See LLM classifier activity per 1,000 turns" title="Direct link to See LLM classifier activity per 1,000 turns">​</a></h2>
<p>You can now separate LLM classifier activity from routed requests:</p>
<ul>
<li>Normalize classifier activity per 1,000 routed turns.</li>
<li>Use sessions, turns, and tier distribution to compare routing changes.</li>
<li>See how often an LLM classifier runs alongside the traffic it routes.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="more-controls-for-agent-traffic">More controls for agent traffic<a href="https://docs.litellm.ai/blog/auto-router-heuristic-tuning#more-controls-for-agent-traffic" class="hash-link" aria-label="Direct link to More controls for agent traffic" title="Direct link to More controls for agent traffic">​</a></h2>
<p>Recent AutoRouter changes also cover long-running agent sessions:</p>
<ul>
<li><strong>A <code>NON_REASONING</code> tier below Simple</strong> handles tool-result relays, acknowledgements, and reformatting work.</li>
<li><strong>Output limits from the selected tier</strong> replace a caller's cap with the chosen model's output ceiling. An explicit per-tier cap still wins.</li>
<li><strong>Classifier timeout protection</strong> opens a circuit breaker after a timeout and uses the configured fallback during the cooldown.</li>
<li><strong>Cross-provider tool history</strong> lets the Messages API replay <code>tool_use</code> history when a session moves between OpenAI and Anthropic tiers.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="try-the-autorouter">Try the AutoRouter<a href="https://docs.litellm.ai/blog/auto-router-heuristic-tuning#try-the-autorouter" class="hash-link" aria-label="Direct link to Try the AutoRouter" title="Direct link to Try the AutoRouter">​</a></h2>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>Open <strong>Add Model → Auto Router</strong> and select <strong>Configure automatically</strong>. Review the generated tiers, then test them against your traffic. Share results in <a href="https://github.com/BerriAI/litellm/discussions/32168" target="_blank" rel="noopener noreferrer">discussion #32168</a>, or <a href="https://calendly.com/tin-berri/litellm-auto-router-design-partner" target="_blank" rel="noopener noreferrer">apply to be a design partner</a> to work with the LiteLLM team.</p></div></div>
<p>You can also start with a file-based config:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">config.yaml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">haiku</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> anthropic/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">haiku</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/ANTHROPIC_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> anthropic/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/ANTHROPIC_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">fable</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">1</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">high</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> anthropic/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">fable</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/ANTHROPIC_API_KEY</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">reasoning_effort</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> high</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> smart</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">router</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> auto_router/complexity_router</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">complexity_router_config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">classifier_type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> heuristic</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">tiers</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#22863A">SIMPLE</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">haiku</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#22863A">MEDIUM</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#22863A">COMPLEX</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">fable</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">1</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">high</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#22863A">REASONING</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">fable</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">5</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">1</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">high</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">complexity_router_default_model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><br></span></code></pre></div></div>
<p>Full reference on the <a href="https://docs.litellm.ai/docs/proxy/auto_routing">Auto Routing docs page</a>.</p>]]></content>
        <author>
            <name>Tin Lo</name>
            <uri>https://www.linkedin.com/in/tinchi-lo/</uri>
        </author>
        <category label="routing" term="routing"/>
        <category label="complexity-router" term="complexity-router"/>
        <category label="benchmarks" term="benchmarks"/>
        <category label="engineering" term="engineering"/>
        <category label="product" term="product"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Our Updated SOC 2 Type 2 Report Is Available]]></title>
        <id>https://docs.litellm.ai/blog/soc2-type-2-report</id>
        <link href="https://docs.litellm.ai/blog/soc2-type-2-report"/>
        <updated>2026-09-08T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[LiteLLM's updated SOC 2 Type 2 report is now available through the LiteLLM Trust Center.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="LiteLLM SOC 2 Type 2 report available" src="https://docs.litellm.ai/assets/images/soc2_type_2_report-2ea6eb8b12d9d165015291a53c1c0c1f.png" width="2400" height="1260" class="img_ev3q"></p>
<p>Our updated SOC 2 Type 2 report is ready. You can access it through the <a href="https://trust.litellm.ai/" target="_blank" rel="noopener noreferrer">LiteLLM Trust Center</a>.</p>
<!-- -->
<p>This completes the recertification we <a href="https://docs.litellm.ai/blog/vanta-compliance-recertification">announced in March</a>, run with Vanta and validated by an independent auditor.</p>
<p>If your security team needs the report for a vendor review, send them to <a href="https://trust.litellm.ai/" target="_blank" rel="noopener noreferrer">trust.litellm.ai</a>. For any additional questions, email <a href="mailto:security@berri.ai" target="_blank" rel="noopener noreferrer">security@berri.ai</a>.</p>]]></content>
        <author>
            <name>Krrish Dholakia</name>
            <uri>https://www.linkedin.com/in/krish-d/</uri>
        </author>
        <category label="security" term="security"/>
        <category label="compliance" term="compliance"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Subtask-Specific Routing: Same Quality, 46% Less Cost]]></title>
        <id>https://docs.litellm.ai/blog/subtask-type-routing</id>
        <link href="https://docs.litellm.ai/blog/subtask-type-routing"/>
        <updated>2026-09-07T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Routing each agent turn by what the agent is doing, exploring, implementing, or verifying, instead of by how hard the prompt looks. On a SWE-bench Verified subset it matched fixed Claude Opus-5 quality for 46% less, with 86% of turns never touching a frontier model.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Route by what subtask the agent is doing: 46% lower cost" src="https://docs.litellm.ai/assets/images/hero-850041919b0204b42b8a92925af4824b.png" width="2400" height="1350" class="img_ev3q"></p>
<p><strong>An experimental router that picks a model per agent phase matched fixed Claude Opus-5 quality on a SWE-bench Verified subset for 46% less money.</strong></p>
<!-- -->
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>🚀 Help shape the Auto-Router</div><div class="admonitionContent_BuS1"><p>Get early access, work directly with the LiteLLM team, and influence the roadmap with your production traffic.</p><a class="button button--primary button--lg" href="https://calendly.com/tin-berri/litellm-auto-router-design-partner">Apply to Become a Design Partner</a><br><br><p>Already testing it? Share your results in <a href="https://github.com/BerriAI/litellm/discussions/32168" target="_blank" rel="noopener noreferrer">discussion #32168</a>.</p></div></div>
<p>Frontier models are good at coding agents. They are also expensive, and most of what an agent does in a session does not need one. An agent spends the bulk of its turns reading files, grepping, and running tests. Only a fraction of the turns are the actual edits, and that is where the hard reasoning lives.</p>
<p>This experiment acts on that observation. Instead of picking one model for a whole session, it looks at what the agent is doing right now and routes each turn to the model that phase deserves.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-it-works">How it works<a href="https://docs.litellm.ai/blog/subtask-type-routing#how-it-works" class="hash-link" aria-label="Direct link to How it works" title="Direct link to How it works">​</a></h2>
<p>Every request an agent sends to the gateway carries its full conversation history, including every tool call it has made so far. The router reads that history and classifies each tool call into one of three phases:</p>
<ul>
<li><strong>Explore</strong>: reading and searching. <code>grep</code>, <code>find</code>, <code>cat</code>, <code>head</code>, <code>git diff</code>, <code>python -c</code> one-liners that inspect state, or dedicated tools like <code>Read</code>, <code>Glob</code>, <code>Grep</code></li>
<li><strong>Implement</strong>: changing files. <code>sed -i</code>, redirects and heredocs, <code>tee</code>, <code>patch</code>, <code>git apply</code>, Python writing to disk, <code>mv</code>/<code>cp</code>/<code>rm</code>, or dedicated tools like <code>Edit</code>, <code>Write</code></li>
<li><strong>Verify</strong>: running the code. <code>pytest</code>, <code>tox</code>, <code>runtests.py</code>, <code>make test</code>, <code>unittest</code>, <code>curl</code> against a live service</li>
</ul>
<p>Tool names are matched case-insensitively and any shell-like tool (<code>bash</code>, <code>shell</code>, <code>exec</code>, <code>terminal</code>) is treated the same way, so the classifier works with Claude Code, mini-SWE-agent, and anything else speaking OpenAI or Anthropic tool calls.</p>
<p>Individual calls are noisy. An agent mid-edit will <code>cat</code> a file to check its work. So the router does not react to single calls: it walks the classified calls as runs and only flips the current phase when a new phase has held for two consecutive calls. The result is a stable signal for what subtask the agent is in, computed in well under a millisecond per request with no extra LLM call and no classifier cost.</p>
<p>That phase then maps to a tier, and each tier has its own model:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">config.yaml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> subtask</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">type</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">router</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> auto_router/complexity_router</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">complexity_router_default_model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> anthropic/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">sonnet</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">complexity_router_config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">classifier_type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> custom</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">classifier_plugin</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> subtask_type_classifier.subtask_type_classifier</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">classifier_fallback</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> default_model</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">deployment_affinity</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#005CC5">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">tiers</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">SIMPLE</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">                          </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># explore</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> fireworks_ai/deepseek</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">v4</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">flash</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">MEDIUM</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">                          </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># verify</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> anthropic/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">haiku</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">COMPLEX</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">                         </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># implement</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> anthropic/claude</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">opus</span><span class="token punctuation" style="color:#393A34">-</span><span class="token number" style="color:#005CC5">5</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              </span><span class="token key atrule" style="color:#22863A">reasoning_effort</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> high</span><br></span></code></pre></div></div>
<p>Exploration goes to a fast, cheap model. Verification, where the model mostly needs to read a test log and decide what to do next, goes to Haiku. Implementation, where the change actually gets written, goes to Opus with high reasoning effort. The opening turns of a session, before any tool call has established a phase, go to the default model, Sonnet.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="results">Results<a href="https://docs.litellm.ai/blog/subtask-type-routing#results" class="hash-link" aria-label="Direct link to Results" title="Direct link to Results">​</a></h2>
<p>We ran mini-SWE-agent on 12 SWE-bench Verified tasks, once against fixed <code>anthropic/claude-opus-5</code> and once against the router above, and scored both with the official SWE-bench harness. Costs are the sum of every LLM call as reported by the gateway. Fixed Opus only resolved 9 of the 12, so the head-to-head comparison below is restricted to those 9 for a fair fight.</p>
<p>Across the 9 tasks both configurations solved:</p>
<table><thead><tr><th></th><th>Fixed Opus</th><th>Subtask router</th></tr></thead><tbody><tr><td>Tasks resolved</td><td>9 / 9</td><td>9 / 9</td></tr><tr><td>Total LLM cost</td><td>$2.82</td><td>$1.51</td></tr><tr><td>Cost per solved task</td><td>$0.31</td><td>$0.17</td></tr><tr><td>LLM turns</td><td>112</td><td>205</td></tr></tbody></table>
<p>Same quality, <strong>$1.31 saved (46%)</strong>. The router took more turns per task, since the explore model is more incremental than Opus, but each of those turns was cheap enough that the total still came in at roughly half.</p>
<p>Where the money went with the router, over all 382 turns of the full 12-task run:</p>
<table><thead><tr><th>Model</th><th>Turns</th><th>Share of turns</th><th>Cost</th></tr></thead><tbody><tr><td>deepseek-v4-flash (explore)</td><td>277</td><td>73%</td><td>$0.14</td></tr><tr><td>claude-haiku-4-5 (verify)</td><td>38</td><td>10%</td><td>$0.34</td></tr><tr><td>claude-sonnet-5 (opening)</td><td>12</td><td>3%</td><td>$0.08</td></tr><tr><td>claude-opus-5 (implement)</td><td>55</td><td>14%</td><td>$2.56</td></tr></tbody></table>
<p>86% of the agent's turns never touched Opus. The 14% that did were the edits, which is exactly the part of the job a frontier model should own. Worth sitting with the first row: 73% of all turns cost $0.14 in total. Exploration is nearly free once it is on the right model.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-phase-not-difficulty">Why phase, not difficulty<a href="https://docs.litellm.ai/blog/subtask-type-routing#why-phase-not-difficulty" class="hash-link" aria-label="Direct link to Why phase, not difficulty" title="Direct link to Why phase, not difficulty">​</a></h2>
<p>Most auto-routers ask how hard a prompt is, and send an LLM classifier to answer it. In an agent loop that question is almost always answered "hard", because the prompt is a coding task with tools attached, and the classifier costs money on every turn.</p>
<p>Phase routing asks a different question: what is the agent doing right now? That one has a cheap, deterministic answer already sitting in the tool-call history, and unlike difficulty it changes many times within a single task. That is where the savings are.</p>
<p>This is still an experiment. Twelve tasks is a small sample, mini-SWE-agent is a simpler loop than most production agents, and the phase taxonomy is a first cut that will need work on agents whose tool vocabularies look nothing like these. We are running it on more traffic before drawing firmer conclusions</p>]]></content>
        <author>
            <name>Moe Khalil</name>
            <uri>https://www.linkedin.com/in/moe-khalil-73a2371a1/</uri>
        </author>
        <category label="routing" term="routing"/>
        <category label="complexity-router" term="complexity-router"/>
        <category label="cost" term="cost"/>
        <category label="benchmarks" term="benchmarks"/>
        <category label="engineering" term="engineering"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[AutoRouter Per-Hop Compression: Cut LLM Classifier Costs Another 32%]]></title>
        <id>https://docs.litellm.ai/blog/auto-router-per-hop-compression</id>
        <link href="https://docs.litellm.ai/blog/auto-router-per-hop-compression"/>
        <updated>2026-09-05T21:00:00.000Z</updated>
        <summary type="html"><![CDATA[The complexity router's LLM classifier can now use different compression than the model call it routes to. The classifier only needs enough context to route correctly, not to generate an answer. In internal testing, compressing it aggressively cut classification costs a further 32% beyond shared compression, with no change in routing accuracy.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Per-hop compression: 32% lower classification cost without sacrificing routing quality" src="https://docs.litellm.ai/assets/images/hero-8174cdd358ddd8bf240043b4c621462a.png" width="1672" height="941" class="img_ev3q"></p>
<p><strong>The complexity router's LLM classifier can now be compressed more aggressively than your model calls. In internal testing, that cut classification costs a further 32% beyond what shared compression was already saving, with no change in routing accuracy.</strong></p>
<!-- -->
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>🚀 Help shape the Auto-Router</div><div class="admonitionContent_BuS1"><p>Get early access, work directly with the LiteLLM team, and influence the roadmap with your production traffic.</p><a class="button button--primary button--lg" href="https://calendly.com/tin-berri/litellm-auto-router-design-partner">Apply to Become a Design Partner</a><br><br><p>Already testing it? Share your results in <a href="https://github.com/BerriAI/litellm/discussions/32168" target="_blank" rel="noopener noreferrer">discussion #32168</a>.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-problem">The problem<a href="https://docs.litellm.ai/blog/auto-router-per-hop-compression#the-problem" class="hash-link" aria-label="Direct link to The problem" title="Direct link to The problem">​</a></h2>
<p>The complexity router can classify requests a few ways: a free heuristic scorer, keyword rules, or, when you need judgment the heuristics can't capture, an LLM classifier. That last option pays for a second LLM call on every request: one call to decide the tier (SIMPLE to a cheap model, MEDIUM to something in the middle, COMPLEX or REASONING to a frontier model), then a second call to the model that actually answers.</p>
<p>Until now, that classifier call shared its compression setting with the model call it routed to, which meant the classifier's compression was capped by whatever the model call could tolerate. That ceiling is the wrong one. The classifier only needs enough context to answer one question: what tier can handle this. It doesn't need the full conversation history or the detailed background the model call needs to actually produce an answer, so it can be compressed far past the point where the model call would start to suffer.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-solution">The solution<a href="https://docs.litellm.ai/blog/auto-router-per-hop-compression#the-solution" class="hash-link" aria-label="Direct link to The solution" title="Direct link to The solution">​</a></h2>
<p>Two new fields decouple the LLM classifier's compression from the model call's:</p>
<ul>
<li><code>auto_router_routing_compression</code>: the guardrail to compress the classifier's prompt</li>
<li><code>auto_router_model_compression</code>: the guardrail to compress the model's prompt</li>
</ul>
<p>Set the routing compression to be aggressive while the model call compression stays moderate. The same guardrail on both hops runs compression once, never twice. Either field can be <code>none</code> to skip compression for that hop.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-it-works">How it works<a href="https://docs.litellm.ai/blog/auto-router-per-hop-compression#how-it-works" class="hash-link" aria-label="Direct link to How it works" title="Direct link to How it works">​</a></h2>
<p>When you send a request through a complexity router with <code>classifier_type: llm</code> and separate compression settings:</p>
<ol>
<li>The proxy applies the routing-hop compression to a copy of your messages</li>
<li>The classifier sees the compressed version and makes a routing decision</li>
<li>Your original messages get the model-hop compression applied</li>
<li>The routed model receives its own compressed copy</li>
<li>In the logs and API response, you see which compression guardrail ran for each hop</li>
</ol>
<p>If both hops use the same guardrail, the proxy compresses once and reuses the result. If a compression guardrail is unreachable and set to <code>fail_closed</code>, the request fails safely.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="setting-it-up">Setting it up<a href="https://docs.litellm.ai/blog/auto-router-per-hop-compression#setting-it-up" class="hash-link" aria-label="Direct link to Setting it up" title="Direct link to Setting it up">​</a></h2>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">config.yaml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4o</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">mini</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> openai/gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4o</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">mini</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/OPENAI_API_KEY</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4o</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> openai/gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4o</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/OPENAI_API_KEY</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">turbo</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> openai/gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">turbo</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/OPENAI_API_KEY</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> smart</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">router</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> auto_router/complexity_router</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">complexity_router_config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">tiers</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#22863A">SIMPLE</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4o</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">mini</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#22863A">MEDIUM</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4o</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#22863A">COMPLEX</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">turbo</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">classifier_type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> llm</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># Aggressive compression for the classifier</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">auto_router_routing_compression</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> headroom</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">aggressive</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># Moderate compression for the model call</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">auto_router_model_compression</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> headroom</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">moderate</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#22863A">guardrails</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">guardrail_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> headroom</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">aggressive</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">guardrail</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> headroom</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">mode</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> pre_call</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_base</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">//api.berri.ai/headroom</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> o1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">tokens_to_retain</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#005CC5">200</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">guardrail_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> headroom</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">moderate</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">guardrail</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> headroom</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">mode</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> pre_call</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">api_base</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">//api.berri.ai/headroom</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4o</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">mini</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">tokens_to_retain</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#005CC5">1000</span><br></span></code></pre></div></div>
<p>In the Admin UI, open a complexity router's Detailed Configuration, then Advanced: Compression. Pick your routing guardrail, choose "Use a different compression" for the model call, and select its guardrail separately.</p>
<p><img decoding="async" loading="lazy" alt="Advanced: Compression, with the routing decision and model call set to different guardrails" src="https://docs.litellm.ai/assets/images/compression-config-00d54310a0bd5ceff489b3134db69428.png" width="1588" height="538" class="img_ev3q"></p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Try it on your traffic</div><div class="admonitionContent_BuS1"><p>Point a shadow-eval job at your busiest team, compare your current config against one with split compression, and tell us what you see in <a href="https://github.com/BerriAI/litellm/discussions/32168" target="_blank" rel="noopener noreferrer">discussion #32168</a>, or</p><a class="button button--primary button--lg" href="https://calendly.com/tin-berri/litellm-auto-router-design-partner">Apply to Become a Design Partner</a></div></div>]]></content>
        <author>
            <name>Moe Khalil</name>
            <uri>https://www.linkedin.com/in/moe-khalil-73a2371a1/</uri>
        </author>
        <category label="routing" term="routing"/>
        <category label="cost" term="cost"/>
        <category label="compression" term="compression"/>
        <category label="engineering" term="engineering"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Auto-Router: Escalate a Task That Gets Stuck]]></title>
        <id>https://docs.litellm.ai/blog/auto-router-stall-escalation</id>
        <link href="https://docs.litellm.ai/blog/auto-router-stall-escalation"/>
        <updated>2026-09-04T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[The Auto-Router now reads the assistant's own recent tool calls, notices when an agentic task is stuck in a retry loop, and escalates it one tier automatically, the same bump escalation_keywords already offers.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Mid-task escalation: the Auto-Router bumps a stuck request to a higher tier" src="https://docs.litellm.ai/assets/images/hero-188360d2336173fa96f1df0e0a09b707.png" width="1782" height="722" class="img_ev3q"></p>
<!-- -->
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>🚀 Help shape the Auto-Router</div><div class="admonitionContent_BuS1"><p>Get early access, work directly with the LiteLLM team, and influence the roadmap with your production traffic.</p><a class="button button--primary button--lg" href="https://calendly.com/tin-berri/litellm-auto-router-design-partner">Apply to Become a Design Partner</a><br><br><p>Already testing it? Share your results in <a href="https://github.com/BerriAI/litellm/discussions/32168" target="_blank" rel="noopener noreferrer">discussion #32168</a>.</p></div></div>
<p>A cheap model can get stuck mid-task: it calls the same tool with the same arguments three times, or the same call keeps erroring, while the newest message in that history still reads as a harmless follow-up like "can you try a different approach?" Read on its own, that turn classifies SIMPLE every time, so the router sends it right back to the model that was already failing. Until now, the only way out was a person noticing the loop and typing an escalation keyword.</p>
<p><code>stall_escalation_enabled: true</code> gives the router that judgment on its own.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-it-decides">How it decides<a href="https://docs.litellm.ai/blog/auto-router-stall-escalation#how-it-decides" class="hash-link" aria-label="Direct link to How it decides" title="Direct link to How it decides">​</a></h2>
<ul>
<li><strong>Reads the assistant's own tool calls, not the human's messages.</strong> A task counts as stalled once the newest call repeats, or errors, at least <code>stall_escalation_repeat_threshold</code> times across the last <code>stall_escalation_window</code> calls</li>
<li><strong>Anchored on the newest call, not whichever pattern is most common in the window.</strong> A task that tried the same thing three times and then found a different path still has those calls sitting in the window for a few more turns; anchoring on the newest one keeps that history from escalating a task that already recovered</li>
<li><strong>Reads both tool-call shapes.</strong> Anthropic Messages <code>tool_use</code>/<code>tool_result</code> blocks, including <code>is_error</code>, and chat-completions <code>tool_calls</code>/<code>tool</code> messages, which carry no error flag, so those are judged on repetition alone</li>
<li><strong>Stateless.</strong> Detection reruns on every classified turn from that request's own messages, so the bump lasts only as long as the task looks stuck and lifts on its own the moment it doesn't</li>
</ul>
<p>Escalation records <code>stall_escalation</code> in <code>routing_decision.signals</code>, right next to <code>escalation_keywords</code>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="in-the-dashboard">In the dashboard<a href="https://docs.litellm.ai/blog/auto-router-stall-escalation#in-the-dashboard" class="hash-link" aria-label="Direct link to In the dashboard" title="Direct link to In the dashboard">​</a></h2>
<p>Auto-Routers get an <strong>Advanced: Stalled Task Escalation</strong> section with the toggle and both knobs:</p>
<p><img decoding="async" loading="lazy" alt="Advanced: Stalled Task Escalation, with the repeat threshold and window set" src="https://docs.litellm.ai/assets/images/stall-escalation-config-73f37ba31681b55ad09e502b14e02570.png" width="767" height="260" class="img_ev3q"></p>
<p>It's rejected together with <code>session_affinity</code> and <code>classification_mode: user_turn</code>. Both replay a held routing decision on most turns instead of classifying, so detection would never see the tool calls it needs, and the toggle greys out with that reason instead of letting you save a config the backend would reject.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="turning-it-on">Turning it on<a href="https://docs.litellm.ai/blog/auto-router-stall-escalation#turning-it-on" class="hash-link" aria-label="Direct link to Turning it on" title="Direct link to Turning it on">​</a></h2>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#22863A">model_list</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4o</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">mini</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> openai/gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4o</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">mini</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/OPENAI_API_KEY</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4o</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> openai/gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4o</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">api_key</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> os.environ/OPENAI_API_KEY</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#22863A">model_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> smart</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">router</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#22863A">litellm_params</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">model</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> auto_router/complexity_router</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#22863A">complexity_router_config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">tiers</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#22863A">SIMPLE</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4o</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">mini</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token key atrule" style="color:#22863A">MEDIUM</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> gpt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4o</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#6B6B6B;font-style:italic"># off by default: bump a stuck task one tier higher</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">stall_escalation_enabled</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#005CC5">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">stall_escalation_window</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#005CC5">6</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#22863A">stall_escalation_repeat_threshold</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#005CC5">3</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Try it on your traffic</div><div class="admonitionContent_BuS1"><p>Point a shadow-eval job at your busiest team, compare your current config against one with stall escalation on, and tell us what you see in <a href="https://github.com/BerriAI/litellm/discussions/32168" target="_blank" rel="noopener noreferrer">discussion #32168</a>, or</p><a class="button button--primary button--lg" href="https://calendly.com/tin-berri/litellm-auto-router-design-partner">Apply to Become a Design Partner</a></div></div>]]></content>
        <author>
            <name>Moe Khalil</name>
            <uri>https://www.linkedin.com/in/moe-khalil-73a2371a1/</uri>
        </author>
        <category label="routing" term="routing"/>
        <category label="complexity-router" term="complexity-router"/>
        <category label="engineering" term="engineering"/>
    </entry>
</feed>