
2026/09/12 3:10
Litelm:冗長性のない LiteLLM
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
litelm は、軽量な Python ライブラリであり、モデルルーティング、メッセージ翻訳、ストリーミング、ツールの使用、埋め込み、テキスト補完をサポートする LiteLLM 向けのフォーカスされたドロップイン交換用 alpha ステージのものです。その主な目標は複雑性を削減することで開発者の体験を簡素化することです。コード行数は 2,900 行、依存関係は 2 つに抑えられており、主要な LLM プロバイダーとの互換性を維持しながら、ルーティング(負荷分散/フェールバック)、プロキシサーバー、キャッシュ、予算管理/コスト追跡、トークンカウント、画像/音声/OCR/ファインチューニング、エージェント、ガードレール、スケジューラー、DSPy ファインチューニングサポートなどの高度な機能を除外しています。
このプロジェクトは AI 支援によるコード生成と厳格なテストを通じて信頼性を確保しています:ローカルテストが 262 つパスし、特定のコミットハッシュ(基準
9a715df2)に対するライブプロバイダーチェックが 45 つ成功しており、2026-09-11 以降のアップストリーム認証の一部として追加の DSPy スモークテストもパスしています。現在、OpenAI、Anthropic、Groq、Mistral、Azure、xAI など主要なプロバイダー十九社をサポートしており、「provider/model-name」構文(環境変数 OPENAI_API_KEY などの設定または直接の api_key アーギュメントで構成可能)によりアクセスでき、ローカルサーバーは api_base 経由で利用可能です。
litelm は LiteLLM の使用パターンを鏡像し、
litelm.completion、litelm.embedding および非同期変種 (acompletion, aembedding) などの関数を提供します。エラーハンドリングについては、プロバイダー固有の問題を litelm 例外(ContextWindowExceededError、RateLimitError、AuthenticationError)にマッピングし、関数定義と必須/オプションのツール選択をサポートするツールの呼び出しに対応します。カスタム/ローカルプロバイダー(例:vLLM、Ollama、LM Studio)は api_base パラメータ経由でアクセス可能です。
litelm は単純なルーティングタスクのために最小限の依存関係を求める開発者に理想的ですが、より重量のある対照的な製品に見られるエージェント、予算管理ツール、画像処理機能は意図的に欠如しています。コアの安定性を検証された初期段階のプロジェクトとして、これは LiteLLM の完全な機能ごとの複製ではなく、ターゲットを絞った代替手段として役立ちます。
本文
litelm: 軽量な LLM コールルーティングライブラリ
Litelm は、大規模言語モデル(LLM)のコール処理に必要な機能を最小限に絞った、軽量なライブラリです。約 2,900 行のコード と 2 つの依存関係 (
openai, httpx) のみで構成されています。
完全機能版 LiteLLM から高度なプロキシサーバーやコスト追跡など、コア機能ではない部分を除去し、開発効率を向上させた製品です。
基本コンセプトと特徴
Litelm は LLM コールの「コア機能」に特化しています。
- モデルのルーティング(プロバイダー/モデル → エンドポイント)
- メッセージ形式の変換(Anthropic, Bedrock 他)
- ストリーミング処理
- ツール呼び出し
- 埋め込み(Embedding)
以下の機能を意図的に排除しています:
- Router クラス(負荷分散やフォールバック処理機能なし)
- プロキシサーバー
- キャッシュ機能(バッジ管理やコスト追跡、トークンカウントも除外)
インストール方法
標準的な
pip コマンドでインストール可能です。必要な依存関係が自動解決されます。
# 基本機能 (OpenAI + HTTPX) pip install litelm # Anthropic SDK も含むインストール pip install litelm[anthropic] # Bedrock を利用する場合 (boto3 含む) pip install litelm[bedrock] # 全ての機能を含むインストール pip install litelm[all]
使用方法
API 設計は LiteLLM と同一です。関数名や引数、レスポンス型も共有されており、
litellm/litelm/ をインポート先に変更するだけで切り替え可能です。
コード例:基本処理
import litelm # 【完了処理 (Completion)】 response = litelm.completion("openai/gpt-4o", messages=[{"role": "user", "content": "こんにちは!"}]) print(response.choices[0].message.content) # 【ストリーミング処理】 for chunk in litelm.completion("groq/llama-3.1-70b-versatile", messages=[...], stream=True): print(chunk.choices[0].delta.content or "", end="") # 【埋め込み (Embedding) 処理】 response = litelm.embedding("openai/text-embedding-3-small", input=["hello world"])
非同期バージョンも利用可能です。
acompletionaembeddingaresponsesatext_completion
機能比較表
| 機能 | Litelm (軽量版) | LiteLLM (フル版) |
|---|---|---|
| モデルルーティング | ✓ | ✓ |
| メッセージ変換 | ✓ | ✓ |
| ストリーミング | ✓ | ✓ |
| ツール呼び出し | ✓ | ✓ |
| 埋め込み (Embeddings) | ✓ | ✓ |
| テキスト完了 | ✓ | ✓ |
| OpenAI Responses API | ✓ | ✓ |
| モックレスポンス | ✓ | ✓ |
| Router (負荷分散等) | ✗ | ✓ |
| プロキシサーバー | ✗ | ✓ |
| キャッシュ / コスト追跡 | ✗ | ✓ |
| トークンカウント | ✗ | ✓ |
| 画像生成 / OCR 等 | ✗ | ✓ |
| エージェント / スケジューラ | ✗ | ✓ |
サポートされるプロバイダー
provider/model-name という構文で以下 19 のプロバイダー にアクセス可能です。また、api_base を指定することで任意の OpenAI 互換エンドポイントも利用できます。
| プロバイダー | 環境変数 | ハンドラー | 検証済み |
|---|---|---|---|
| OpenAI | | OpenAI SDK | Yes |
| Anthropic | | Custom | Yes |
| Groq | | OpenAI-compat | Yes |
| Mistral | | Custom | Yes |
| xAI | | OpenAI-compat | Yes |
| OpenRouter | | OpenAI-compat | Yes |
| Azure | | OpenAI SDK (Azure) | Yes |
| Bedrock | | Custom | No |
| Cloudflare | | Custom | No |
| Together | | OpenAI-compat | No |
| Fireworks | | OpenAI-compat | No |
| DeepSeek | | OpenAI-compat | No |
| Perplexity | | OpenAI-compat | No |
| DeepInfra | | OpenAI-compat | No |
| Gemini | | OpenAI-compat | No |
| Cohere | | OpenAI-compat | No |
| Ollama | — | OpenAI-compat | No |
| vLLM | — | OpenAI-compat | No |
| LM Studio | — | OpenAI-compat | No |
API キーの設定方法
環境変数を設定するか、Python コード内で直接渡すことができます。
環境変数 (bash
)
bashexport OPENAI_API_KEY=sk-... export ANTHROPIC_API_KEY=sk-ant-...
コード内での指定 (Python
)
Python# キーを直接指定 litelm.completion("openai/gpt-4o", messages=[...], api_key="sk-...") # 自前の API サーバーを利用する設定 (api_base) litelm.completion("openai/gpt-4o", messages=[...], api_base="http://localhost:8000/v1")
エラーハンドリング
各プロバイダー特有のエラーは、Litelm の標準的な例外階層にマッピングされます。
from litelm import ContextWindowExceededError, RateLimitError, AuthenticationError try: response = litelm.completion("openai/gpt-4o", messages=messages) except ContextWindowExceededError: # プロンプトが長すぎる — トランケートして再試行してください pass except RateLimitError: # レート制限が発生 — バックオフ処理を適用 pass except AuthenticationError: # API キーが無効または不正です pass
ツール呼び出し (Tool Calling)
関数定義を
tools 引数に渡し、LLM にツール使用を指示できます。
tools = [{"type": "function", "function": { "name": "get_weather", "parameters": {"type": "object", "properties": {"city": {"type": "string"}}}, }}] response = litelm.completion( "openai/gpt-4o", messages=[{"role": "user", "content": "パリでの天気は?"}], tools=tools, tool_choice="required", ) # ツール呼び出しの結果を抽出 tool_call = response.choices[0].message.tool_calls[0] print(tool_call.function.name, tool_call.function.arguments)
カスタム/ローカルプロバイダーの設定
OpenAI 互換サーバーであれば、
api_base を指定することで任意の環境でも動作します。
- vLLM (
)http://localhost:8000/v1 - Ollama (
)http://localhost:11434/v1 - LM Studio (
)http://localhost:1234/v1
# 例:Ollama の利用 litelm.completion("ollama/llama3", messages=[...], api_base="http://localhost:11434/v1")
開発の透明性と検証声明
Litelm は、人間が主導し AI が支援して開発されています。
- コードの一部は Claude Code (Opus 4.6/4.7) を使用して記述されました。
- 2026 年 5 月 14 日以降のコードは、Pi 経由で GPT-5.5 で記述されています。
- 互換性の声明については、AI による執筆ではなく、厳格なテストおよびメンテナによるレビューに基づいています。
アップストリーム検証(Attestation)
維持者による検証声明 (2026 年 9 月 11 日):
- コードリビュー: LiteLLM のコミット
から649eb2d
まで精査。9a715df2 - 監査プロセス: コアパスの 360 のコミットをトリヤージ(分類)し、アップストリームテストで挙動を検証。
- 結果: 互換性のギャップはテストファーストのアプローチで即座に修正。
ローカルスコープでのテスト成績
- 262 テストケースがパス。
- 55 テストケースがスキップ。
- 全プロバイダーライブテスト (45 ケース) と DSPy スモークテスト (10 ケース) も依存関係ロック下で正常に完了。
※この声明は Litelm の宣言された機能のみを保証し、フルな LiteLLM 互換性を保証するものではありません。
ステータスとバージョン情報
- 現状: Alpha(アルファ版)
- 独自のテスト: 262 パス
- ポート済みテスト: 75 パス (基準
)9a715df2 - 残りの問題: アクション可能なアサーション/ランタイムエラーは存在しません。
DSPy ドロップイン検証
以下の 7 つの実行パスがすべてライブであることを証明しました:
- 予測 (Predictions)
- Chain of Thought (CoT)
- タイプ付けシグネチャ
- ストリーミング
- 埋め込み
- ツール使用
- マルチアウトプット
テストの実行方法
# 【ローカル検証】独自の 262 テスト uv run --extra all pytest tests/ -x --ignore=tests/ported --timeout=10 # 【アップストリーム契約】高速な 49 ケースのテスト bash scripts/ported_contract.sh # 【プロバイダーライブ】45 ケースのテスト (.env.test に API キーを含む必要あり) uv run --extra all pytest tests/test_live.py -m live --timeout=30 # 【DSPy インテグレーション】10 ケースのテスト uv run pytest tests/test_dspy_smoke.py -m live --timeout=60