litelm: LiteLLM zonder de ballast

LiteLLM routeert LLM-aanvragen tussen verschillende providers en vertaalt berichtenformaten. De kern van deze functionaliteit is echter ingebed in meer dan 100.000 regels code aan proxyservers, caching-lagen, kostenregistratie en talloze functies die de meeste gebruikers nooit gebruiken. litelm extraheert enkel het aanvraagpad — modelrouting, berichtvertaling, streaming, toolgebruik en embeddings — en niets meer. Er is geen Router-klasse, geen proxy en geen caching.

Installatie

pip install litelm                # installeert openai + httpx
pip install litelm[anthropic]     # inclusief anthropic SDK
pip install litelm[bedrock]       # inclusief boto3
pip install litelm[all]           # installeert alles

Gebruik

Basisvoorbeelden

Eenvoudige completion

import litelm

response = litelm.completion("openai/gpt-4o", messages=[{"role": "user", "content": "Hallo!"}])
print(response.choices[0].message.content)

Streaming

for chunk in litelm.completion("groq/llama-3.1-70b-versatile", messages=[...], stream=True):
    print(chunk.choices[0].delta.content or "", end="")

Embeddings

response = litelm.embedding("openai/text-embedding-3-small", input=["hello world"])

Elke functie heeft een asynchrone variant: acompletion, aembedding, aresponses en atext_completion.

De API is een kopie van LiteLLM — dezelfde functienamen, dezelfde argumenten en dezelfde responstypen. Als u LiteLLM momenteel gebruikt, is overstappen simpelweg een kwestie van s/litellm/litelm/ in uw imports.

Wat is inbegrepen en wat niet?

Functionaliteitlitellmlitelm
Modelrouting (provider/model → juiste endpoint)
Berichtvertaling (Anthropic, Bedrock, Cloudflare, Mistral)
Streaming + streamchunkbuilder
Toolgebruik (function calling)
Embeddings
Tekst-completions
OpenAI Responses API
Mock responses
Router (load balancing, fallbacks)
Proxyserver
Caching / budgettering / kostenregistratie
Token-telling
Beeldgeneratie, audio, OCR, fine-tuning
Agents, guardrails, scheduler

Providers

litelm routeert naar 19 providers via de "provider/model-naam" syntaxis. Elk OpenAI-compatibel endpoint werkt via api_base.

ProviderOmgevingsvariabeleHandlerGeverifieerd
OpenAIOPENAIAPIKEYOpenAI SDKJa
AnthropicANTHROPICAPIKEYCustomJa
GroqGROQAPIKEYOpenAI-compatibelJa
MistralMISTRALAPIKEYCustomJa
xAIXAIAPIKEYOpenAI-compatibelJa
OpenRouterOPENROUTERAPIKEYOpenAI-compatibelJa
AzureAZUREAPIKEYOpenAI SDK (Azure)Ja
BedrockAWSACCESSKEY_IDCustomNee
CloudflareCLOUDFLAREAPITOKENCustomNee
TogetherTOGETHERAIAPIKEYOpenAI-compatibelNee
FireworksFIREWORKSAPIKEYOpenAI-compatibelNee
DeepSeekDEEPSEEKAPIKEYOpenAI-compatibelNee
PerplexityPERPLEXITYAIAPIKEYOpenAI-compatibelNee
DeepInfraDEEPINFRAAPITOKENOpenAI-compatibelNee
GeminiGEMINIAPIKEYOpenAI-compatibelNee
CohereCOHEREAPIKEYOpenAI-compatibelNee
OllamaOpenAI-compatibelNee
vLLMOpenAI-compatibelNee
LM StudioOpenAI-compatibelNee

API-sleutels

Stel de omgevingsvariabele voor uw provider in:

export OPENAI_API_KEY=sk-...
export ANTHROPIC_API_KEY=sk-ant-...

Of geef de sleutel direct mee:

litelm.completion("openai/gpt-4o", messages=[...], api_key="sk-...")
litelm.completion("openai/gpt-4o", messages=[...], api_base="http://localhost:8000/v1")

Foutafhandeling

Alle providerfouten worden gemapt naar de exceptie-hiërarchie van litelm:

from litelm import ContextWindowExceededError, RateLimitError, AuthenticationError

try:
    response = litelm.completion("openai/gpt-4o", messages=messages)
except ContextWindowExceededError:
    # prompt is te lang — inkorten en opnieuw proberen
    pass
except RateLimitError:
    # wachten (back off)
    pass
except AuthenticationError:
    # ongeldige API-sleutel
    pass

Tool Calling

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "parameters": {"type": "object", "properties": {"city": {"type": "string"}}},
    }
}]

response = litelm.completion(
    "openai/gpt-4o",
    messages=[{"role": "user", "content": "Wat is het weer in Parijs?"}],
    tools=tools,
    tool_choice="required",
)

tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.function.name, tool_call.function.arguments)

Aangepaste / Lokale Providers

Elke OpenAI-compatibele server werkt via api_base:

# vLLM
litelm.completion("openai/my-model", messages=[...], api_base="http://localhost:8000/v1")

# Ollama
litelm.completion("ollama/llama3", messages=[...], api_base="http://localhost:11434/v1")

# LM Studio
litelm.completion("openai/local-model", messages=[...], api_base="http://localhost:1234/v1")

Transparantie over ontwikkeling

litelm is software die door mensen is gestuurd en met AI is ondersteund. Een groot deel van de code is geschreven met Claude Code met behulp van Claude Opus 4.6/4.7. Code geschreven vanaf 14-05-2026 is geschreven via Pi met behulp van GPT-5.5. Claims over compatibiliteit zijn gebaseerd op tests en reviews door de maintainer, niet op AI-auteurschap.

Bevestiging van upstream-compatibiliteit

Attestatie van de maintainer, 11-09-2026: De wijzigingen in routing/formatting van LiteLLM zijn beoordeeld van 649eb2d tot 9a715df2. De audit heeft 360 core-path commits getrieerd, upstream tests geïnspecteerd op relevant gedrag en de resulterende compatibiliteitsverschillen test-first opgelost. Lokale scoped tests: 262 geslaagd, 55 overgeslagen; alle 45 live tests voor beschikbare providers en alle 10 DSPy smoke tests zijn ook geslaagd met de huidige dependency lock.

Dit bevestigt uitsluitend de gedeclareerde routing/formatting/DSPy-oppervlakte van litelm, niet de volledige compatibiliteit met litellm.

Status

Alpha. 262 eigen tests zijn geslaagd. De huidige scoped LiteLLM 9a715df2 baseline heeft 75 geslaagde geporteerde tests en geen resterende actiegerichte assertion/runtime-fouten.

DSPy drop-in is geverifieerd — alle 7 executiepaden zijn live bewezen (Predict, CoT, typed signatures, streaming, embeddings, tool use, multi-output).

Tests

uv run --extra all pytest tests/ -x --ignore=tests/ported --timeout=10  # 262 non-live tests
bash scripts/ported_contract.sh                                        # 49 snelle upstream contract tests
uv run --extra all pytest tests/test_live.py -m live --timeout=30       # 45 live provider tests
uv run pytest tests/test_dspy_smoke.py -m live --timeout=60             # 10 DSPy integratietests

Live tests vereisen API-sleutels in .env.test. Deze worden standaard overgeslagen; voer ze uit met -m live.