ローカルLLM(mlx / mlx-vlm / llama.cpp)を OpenAI 互換 API で束ねるマルチモデルゲートウェイ。gateway.toml のカタログを 1 ポートで配信し、model で振り分け・遅延起動・LRU 退避・MTP 高速化(Ollama 流の共有デーモン)
Project description
local-llm-server
ローカルLLM(mlx / mlx-vlm / llama.cpp)を束ねるマルチモデルゲートウェイ。
gateway.toml(モデルカタログ)を書いて 1 プロセス起動するだけ。- 1 つの公開ポートで複数モデルを配信し、リクエストの
modelで振り分ける。 - モデルは初回リクエスト時に遅延起動、
max_resident超過で LRU 退避、idle_timeoutで自動アンロード。 - クライアントは公開ポートに繋いで
modelを選ぶだけ。
インストール
uvを使用する。
uv add "local-llm-server[mlx]"
extras 指定はクォート必須(zsh の glob 展開回避)。内訳:
| extra | 入るもの | 用途 |
|---|---|---|
mlx |
mlx-lm / mlx-vlm |
Apple Silicon で実際に推論する |
使い方
1. gateway.toml(モデルカタログ)
カレントディレクトリに gateway.toml を置く。これがサーバーの唯一の設定。リポジトリ直下に
すぐ使える例を同梱(→ gateway.toml):
host = "127.0.0.1"
port = 8799 # 公開ポート。クライアントの base_url はここ
max_resident = 1 # 同時常駐モデル数の上限。超えたら LRU 退避(省略時 無制限)
idle_timeout = 1200 # 20分使われないモデルは自動アンロード(0/省略で無効)
draft_model = "auto" # MTP の既定(各 [[models]] で上書き・"off" で無効)
[[models]]
model = "mlx-community/Qwen3.6-27B-4bit"
backend = "mlx-vlm"
[[models]]
model = "mlx-community/gemma-4-26B-A4B-it-qat-4bit"
backend = "mlx-vlm"
MTP(投機的デコード)による高速化 → docs/mtp.md。
2. ゲートウェイを起動
gateway.toml のあるディレクトリで起動するだけ(管理者の唯一の操作):
uv run local-llm-server
1 つの公開ポート(例 http://127.0.0.1:8799/v1)でカタログのモデルを束ねる。各モデルは
初回リクエスト時に遅延起動し、2 回目以降は常駐して即応答。max_resident 超過は LRU 退避、
idle_timeout で自動アンロード。
3. 接続( model で選ぶ)
公開ポートに繋ぎ、model で使うモデルを選ぶ。
from local_llm_server import LLMClient
llm = LLMClient(
model="mlx-community/Qwen3.6-27B-4bit",
base_url="http://127.0.0.1:8799/v1"
)
print(llm.respond("ローカルLLMの利点を3つ。"))
高度操作 → docs/connecting.md。
運用(status / stop)
稼働確認(カタログ=全モデル・pid・ログパス)
uv run local-llm-server --status
ゲートウェイ停止(配下のモデルサーバーも全て停止)
uv run local-llm-server --stop
Ctrl+C / kill でも、起動済みのモデルサーバーまで一緒に止まる(孫プロセスは残らない)。
ライセンス
Apache-2.0
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file local_llm_server-0.6.2.tar.gz.
File metadata
- Download URL: local_llm_server-0.6.2.tar.gz
- Upload date:
- Size: 45.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f8df62cd0eaa529cd4e6f8598656ba91478d1c79bc70fde2bd9a995f113838b
|
|
| MD5 |
36182998b1a463c13dd51d13420cfdbc
|
|
| BLAKE2b-256 |
4b6de956a6ff3e2c00d516041e3628c40909e617c6b4c1fc89b44d197cd251f6
|
File details
Details for the file local_llm_server-0.6.2-py3-none-any.whl.
File metadata
- Download URL: local_llm_server-0.6.2-py3-none-any.whl
- Upload date:
- Size: 39.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e04333f93d19c68b53adf72606a15d4a35d20c58f168c4733bd14cb52c8d2dcc
|
|
| MD5 |
20bd04a2b60646c9d8f6ccd907deb22c
|
|
| BLAKE2b-256 |
d9324c7cfbfed14e40af16d77c1641b865916820b18080bc8cc1d8c9f0ed6a83
|