Wat is litelm?
litelm is een gestroomlijnde versie van de LiteLLM-bibliotheek, ontworpen om de essentie van routing- en vertaalfuncties te bieden zonder de complexiteit van een volledige proxyserver. Terwijl het origineel tienduizenden regels code bevat, beperkt litelm zich tot ongeveer 2.900 regels en slechts twee basisafhankelijkheden (openai en httpx).
Belangrijkste kenmerken:
- Core Functionaliteit: Ondersteunt modelrouting, berichtvertaling voor diverse providers, streaming, tool-gebruik (function calling) en embeddings.
- API-Compatibiliteit: De API is een directe kopie van LiteLLM, waardoor gebruikers eenvoudig kunnen overstappen door enkel de import-naam te wijzigen.
- Provider Ondersteuning: Routeert naar 19 providers via een eenvoudige syntaxis (
provider/model-naam) en ondersteunt lokale servers zoals Ollama, vLLM en LM Studio via api_base.
- Foutafhandeling: Biedt een eigen exceptie-hiërarchie voor veelvoorkomende LLM-fouten zoals
RateLimitError en ContextWindowExceededError.
Ontwikkeling en Status: Het project bevindt zich in de Alpha-fase. De ontwikkeling is gedaan met AI-ondersteuning (Claude en GPT) en de compatibiliteit met DSPy is reeds geverifieerd door de maintainer.
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?
| Functionaliteit | litellm | litelm |
| 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.
| Provider | Omgevingsvariabele | Handler | Geverifieerd |
| OpenAI | OPENAIAPIKEY | OpenAI SDK | Ja |
| Anthropic | ANTHROPICAPIKEY | Custom | Ja |
| Groq | GROQAPIKEY | OpenAI-compatibel | Ja |
| Mistral | MISTRALAPIKEY | Custom | Ja |
| xAI | XAIAPIKEY | OpenAI-compatibel | Ja |
| OpenRouter | OPENROUTERAPIKEY | OpenAI-compatibel | Ja |
| Azure | AZUREAPIKEY | OpenAI SDK (Azure) | Ja |
| Bedrock | AWSACCESSKEY_ID | Custom | Nee |
| Cloudflare | CLOUDFLAREAPITOKEN | Custom | Nee |
| Together | TOGETHERAIAPIKEY | OpenAI-compatibel | Nee |
| Fireworks | FIREWORKSAPIKEY | OpenAI-compatibel | Nee |
| DeepSeek | DEEPSEEKAPIKEY | OpenAI-compatibel | Nee |
| Perplexity | PERPLEXITYAIAPIKEY | OpenAI-compatibel | Nee |
| DeepInfra | DEEPINFRAAPITOKEN | OpenAI-compatibel | Nee |
| Gemini | GEMINIAPIKEY | OpenAI-compatibel | Nee |
| Cohere | COHEREAPIKEY | OpenAI-compatibel | Nee |
| Ollama | — | OpenAI-compatibel | Nee |
| vLLM | — | OpenAI-compatibel | Nee |
| LM Studio | — | OpenAI-compatibel | Nee |
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.
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?
| Functionaliteit | litellm | litelm |
| 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.
| Provider | Omgevingsvariabele | Handler | Geverifieerd |
| OpenAI | OPENAIAPIKEY | OpenAI SDK | Ja |
| Anthropic | ANTHROPICAPIKEY | Custom | Ja |
| Groq | GROQAPIKEY | OpenAI-compatibel | Ja |
| Mistral | MISTRALAPIKEY | Custom | Ja |
| xAI | XAIAPIKEY | OpenAI-compatibel | Ja |
| OpenRouter | OPENROUTERAPIKEY | OpenAI-compatibel | Ja |
| Azure | AZUREAPIKEY | OpenAI SDK (Azure) | Ja |
| Bedrock | AWSACCESSKEY_ID | Custom | Nee |
| Cloudflare | CLOUDFLAREAPITOKEN | Custom | Nee |
| Together | TOGETHERAIAPIKEY | OpenAI-compatibel | Nee |
| Fireworks | FIREWORKSAPIKEY | OpenAI-compatibel | Nee |
| DeepSeek | DEEPSEEKAPIKEY | OpenAI-compatibel | Nee |
| Perplexity | PERPLEXITYAIAPIKEY | OpenAI-compatibel | Nee |
| DeepInfra | DEEPINFRAAPITOKEN | OpenAI-compatibel | Nee |
| Gemini | GEMINIAPIKEY | OpenAI-compatibel | Nee |
| Cohere | COHEREAPIKEY | OpenAI-compatibel | Nee |
| Ollama | — | OpenAI-compatibel | Nee |
| vLLM | — | OpenAI-compatibel | Nee |
| LM Studio | — | OpenAI-compatibel | Nee |
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.