DigestAI news desk
Agents & Tools updated 2 min read

litelm releases lightweight LiteLLM alternative with 2,900 lines of code

A new open-source library named litelm has emerged as a streamlined alternative to the popular LiteLLM framework. While LiteLLM is a comprehensive suite featuring proxy servers, caching, and cost tracking that exceeds 100,000 lines of code, litelm focuses exclusively on the core functionality: routing LLM calls and translating message formats. The project achieves this with approximately 2,900…

1 source primary source HN 94

Key points

  • litelm reduces LiteLLM's 100k+ LOC to ~2,900 lines by removing proxy, caching, and cost tracking features.
  • The library supports 19 providers and maintains API compatibility with LiteLLM for easy drop-in replacement.
  • Development was AI-assisted using Claude and GPT-5.5, with 262 local tests passing in the current alpha release.

The library supports 19 providers, including OpenAI, Anthropic, and Bedrock, using a syntax that mirrors LiteLLM for easy migration. It handles completions, streaming, embeddings, and tool use, with async variants available for all functions. The project is currently in alpha status, with 262 local tests passing and verified compatibility with DSPy execution paths. Notably, the codebase was developed with significant assistance from AI models, including Claude Opus and GPT-5.5, though the maintainer attests to manual review of critical routing and formatting changes to ensure reliability.

Full story from github.com · via Hacker News primary source Open source ↗

Litelm: LiteLLM Without the Bloat

github.com · 11 September 2026

litellm's routing + translation in ~2,900 lines and 2 dependencies (openai, httpx).

litellm routes LLM calls across providers and translates between message formats. That core is buried under 100k+ LOC of proxy servers, caching layers, cost tracking, and dozens of features most users never touch. litelm extracts just the call path — model routing, message translation, streaming, tool use, embeddings — and nothing else. No Router class, no proxy, no caching.

pip install litelm                # openai + httpx
pip install litelm[anthropic]     # + anthropic SDK
pip install litelm[bedrock]       # + boto3
pip install litelm[all]           # everything
import litelm
# Basic completion
response = litelm.completion("openai/gpt-4o", messages=[{"role": "user", "content": "Hello!"}])
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"])

Every function has an async variant: acompletion, aembedding, aresponses, atext_completion.

The API mirrors litellm — same function names, same arguments, same response types. If you're using litellm today, switching is s/litellm/litelm/ in your imports.

Routes to 19 providers via "provider/model-name" syntax. Any OpenAI-compatible endpoint works via api_base.

Set the environment variable for your provider:

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

Or pass directly:

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

All provider errors are mapped to litelm's exception hierarchy:

from litelm import ContextWindowExceededError, RateLimitError, AuthenticationError
try:
    response = litelm.completion("openai/gpt-4o", messages=messages)
except ContextWindowExceededError:
    # prompt too long — truncate and retry
    pass
except RateLimitError:
    # back off
    pass
except AuthenticationError:
    # bad API key
    pass
tools = [{"type": "function", "function": {
    "name": "get_weather",
    "parameters": {"type": "object", "properties": {"city": {"type": "string"}}},
}}]
response = litelm.completion(
    "openai/gpt-4o", messages=[{"role": "user", "content": "Weather in Paris?"}],
    tools=tools, tool_choice="required",
)
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.function.name, tool_call.function.arguments)

Any OpenAI-compatible server works 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")

litelm is human-directed, AI-assisted software. Much of the code was written with Claude Code using Claude Opus 4.6/4.7. Code written from 2026-05-14 onward is written through Pi using GPT-5.5. Compatibility claims are based on tests and maintainer review, not AI authorship.

Maintainer attestation, 2026-09-11: LiteLLM's routing/formatting changes were reviewed from 649eb2d through 9a715df2. The audit triaged 360 core-path commits, inspected upstream tests for potentially relevant behavior, and fixed the resulting compatibility gaps test-first. Local scoped tests: 262 passed, 55 skipped; all 45 available-provider live tests and all 10 DSPy smoke tests also passed with the current dependency lock.

This attests litelm's declared routing/formatting/DSPy surface only, not full litellm compatibility.

Alpha. 262 own tests passing. The current scoped LiteLLM 9a715df2 baseline has 75 passing ported tests and no remaining actionable assertion/runtime failures.

DSPy drop-in verified — all 7 execution paths proven live (Predict, CoT, typed signatures, streaming, embeddings, tool use, multi-output).

uv run --extra all pytest tests/ -x --ignore=tests/ported --timeout=10  # 262 non-live tests
bash scripts/ported_contract.sh                                        # 49 fast 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 integration tests

Live tests require API keys in .env.test. Skipped by default; run with -m live.

This text was published by github.com . It is reproduced here with attribution so you can read it in full; the rights remain with the publisher. Read it at the source ↗

Coverage and discussion

1 source
Topics · follow one to build your own front page
OpenAIAnthropicBedrockGPT-4oLlama-3.1-70b-versatiletext-embedding-3-smallClaude Opus 4.6GPT-5.5

The headline, key points and digest above were generated by Digest AI's editorial model from the linked sources. Automated summaries can contain errors: the sources are the record. Spotted a mistake? Tell us.

Comments

via GitHub Discussions

More in Agents & Tools

All →

Related stories