Skip to main content

ローカルLLM(mlx / mlx-vlm / llama.cpp)を OpenAI 互換 API で束ねるマルチモデルゲートウェイ(サーバー)。gateway.toml のカタログを 1 ポートで配信し、model で振り分け・遅延起動・LRU 退避・MTP 高速化(Ollama 流の共有デーモン)。接続用クライアントは別パッケージ local-llm-client。

Project description

local-llm-server

ローカルLLM(mlx / mlx-vlm / llama.cpp)と音声認識(whisper / STT)を束ねる マルチモデルゲートウェイ。1 プロセス起動するだけで、1 つの公開ポートに複数モデルを配信する。

  • モデルの事前登録は不要。クライアントが指定した model をその場でロードする。画像入力(mmproj 自動検出)も mlx-vlm の MTP も設定なしで効く。
  • 音声認識(STT)も同じポートで/v1/audio/transcriptions に音声を投げれば mlx-whisper が遅延起動して文字起こしする。エージェント側に mlx 依存は要らない(→ 音声認識(STT / whisper))。
  • 1 つの公開ポートで複数モデルを配信し、リクエストの model で振り分ける。
  • TUI ダッシュボードが使えるモデルを自動一覧。どれを指定すればよいか一目で分かる。
  • モデルは初回リクエスト時に遅延起動max_resident(数)/ max_memory_fraction(メモリ量)超過で LRU 退避、idle_timeout で自動アンロード。
  • エージェントが「使い終わった」と通知すれば、在席が 0 になった瞬間に待たず即アンロードしてメモリ解放(→ 在席ベースの即時アンロード)。
  • 別PCからも接続できるhost = "0.0.0.0" で LAN に公開し、api_key で認証(→ 別PCから接続する)。
  • 接続側は公開ポートに繋いで model を選ぶだけ(接続クライアントは別パッケージ)。

インストール

uv を使う。このリポジトリをクローンして、ソースから動かすのが基本。

git clone https://github.com/ToPo-ToPo-ToPo/local-llm-server
cd local-llm-server          # クローンしたフォルダの中で実行(uv add ではなく uv sync)
uv sync

以降このフォルダで gateway.toml を編集し、uv run gw で起動する(→ 使い方)。

他 OS(Linux / Windows / Intel Mac)= llama.cpp: uv sync は mlx を入れずに済むので、追加で llama-server をインストールして PATH に通すだけ(OS 別手順は docs/llama-cpp.md)。 gateway.toml[[models]]backend = "llama-cpp" を指定する。

クローンせず PyPI の公開パッケージを使う場合(任意)
  • コマンドとして入れる: uv tool install local-llm-server → どこでも gw で起動。
  • 別プロジェクトの依存として入れる: gateway.toml を置く新規フォルダで uv inituv add local-llm-serveruv run gw

使い方

1. サーバー設定を置く

カレントディレクトリに gateway.toml を置く。リポジトリ直下に例を同梱(→ gateway.toml)。 モデルは列挙不要 —— 運用方針(ポートや同時常駐数など)だけ書けばよい:

host = "127.0.0.1"
port = 8799                 # クライアントの base_url はここ
max_resident = 1            # 同時常駐モデル数の上限(超過は LRU 退避)
# モデルは事前登録不要。クライアントが指定した model をその場でロードする。
# parallel や llama.cpp の MTP 等、個別の上書きが要るモデルだけ [[models]] に書く(→ docs/gateway.md)。

2. サーバー起動

クローンしたフォルダ(gateway.toml のある場所)で、起動する。 TUI ダッシュボードが開き、使えるモデル・ロード状況・処理中数が一目で分かる。

uv run gw

3. このサーバーとの接続 (使用先で実施)

公開ポートに繋ぎ、model で使うモデルを選ぶ。接続クライアントは別パッケージ local-llm-client

uv add local-llm-client
from local_llm_client import LLMClient

llm = LLMClient(model="ToPo-ToPo/Qwen3.6-27B-mlx-4bit",
                base_url="http://127.0.0.1:8799/v1")
print(llm.respond("ローカルLLMの利点を3つ。"))

ドキュメント

ライセンス

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.21.0.tar.gz (98.7 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.21.0-py3-none-any.whl (76.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: local_llm_server-0.21.0.tar.gz
  • Upload date:
  • Size: 98.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for local_llm_server-0.21.0.tar.gz
Algorithm Hash digest
SHA256 438c8ebed3a628591424e7208243d0bf3f83c8a1efa8f1a4e9e1b67ecd67f830
MD5 ca6313b1d0d8bf826a7753af0463d905
BLAKE2b-256 748760e708f445f26cca6f97f7b0f4c22827f9ea76da8914d282b3107286f689

See more details on using hashes here.

File details

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

File metadata

  • Download URL: local_llm_server-0.21.0-py3-none-any.whl
  • Upload date:
  • Size: 76.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for local_llm_server-0.21.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2e35a7689abd80bd2ed19f18f910c6048b937a09a9a61fc4252a55de63e9662e
MD5 ccc48ad8708f3f6d55d5a760d0255c7c
BLAKE2b-256 1423d8d88e92547fc0f6dfe5fe38d1fbcb5560db23b95ac573a565871853cd82

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