Skip to main content

ローカル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

local_llm_server-0.6.1.tar.gz (45.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

local_llm_server-0.6.1-py3-none-any.whl (39.7 kB view details)

Uploaded Python 3

File details

Details for the file local_llm_server-0.6.1.tar.gz.

File metadata

  • Download URL: local_llm_server-0.6.1.tar.gz
  • Upload date:
  • Size: 45.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.7

File hashes

Hashes for local_llm_server-0.6.1.tar.gz
Algorithm Hash digest
SHA256 b0dde922309777f7af155d976c28cf47692b25bb4f20ddac77ced30041718fab
MD5 97482b5a6197fa3730e77a2ffaf119e7
BLAKE2b-256 65e0d0c4618c87a04ded3278517d1df69780b1b1b08029d1280f0b15ffb6689a

See more details on using hashes here.

File details

Details for the file local_llm_server-0.6.1-py3-none-any.whl.

File metadata

File hashes

Hashes for local_llm_server-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0bd3b8f82573783b84814796e1d6cfeca27b05ea52f535907442470200a3c4b9
MD5 51c39c8824b93628c2aeb9a505a4136c
BLAKE2b-256 6b8a93fa8de4e4d7ea7a9e702abff6edbaa3707ef884b7ac58106d8948f7625c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page