<img alt="oMLX" src="https://github.com/jundot/omlx/raw/v0.4.4/docs/images/icon-rounded-light.svg" width="140">
Mac向けに最適化されたLLM推論サーバー
連続バッチングと階層型KVキャッシュを、メニューバーから直接管理します。
junkim.dot@gmail.com · https://omlx.ai/me
インストール · クイックスタート · 機能 · モデル · CLI 設定 · ベンチマーク · oMLX.ai

これまで試したLLMサーバーは、利便性とコントロールのどちらかを選ばせるものでした。よく使うモデルをメモリにピン留めし、重いモデルは必要に応じて自動スワップし、コンテキスト制限を設定して、すべてをメニューバーから管理したかったのです。
oMLXはKVキャッシュをホットなメモリ層とコールドなSSD層の2階層で永続化します。会話中にコンテキストが変わっても、すべての過去のコンテキストはキャッシュされ、リクエスト間で再利用可能です。これによりClaude Codeのようなツールでの実際のコーディング作業において、ローカルLLMが実用的になります。だから作りました。
Releasesから.dmgをダウンロードし、Applicationsにドラッグするだけです。アプリ内自動アップデートに対応しているので、以降のアップグレードはワンクリックで完了します。macOSアプリは軽量な~/.omlx/bin/omlx CLI shimもインストールするため、ターミナルコマンドやApple Shortcutsからアプリ管理のサーバーを制御できます。
brew tap jundot/omlx https://github.com/jundot/omlx
brew install omlx
# 最新バージョンへアップグレード
brew update && brew upgrade omlx
# バックグラウンドサービスとして実行(クラッシュ時に自動再起動)
brew services start omlx
# オプション: MCP(Model Context Protocol)サポート
/opt/homebrew/opt/omlx/libexec/bin/pip install mcp
git clone https://github.com/jundot/omlx.git
cd omlx
pip install -e . # コアのみ
pip install -e ".[mcp]" # MCP(Model Context Protocol)サポート付き
Python 3.10+とApple Silicon(M1/M2/M3/M4)が必要です。
ApplicationsフォルダからoMLXを起動します。ウェルカム画面が3つのステップを案内します — モデルディレクトリの設定、サーバー起動、最初のモデルダウンロード。以上です。OpenClaw、OpenCode、Codex、Hermes Agent、Copilotに接続するには、統合を参照してください。

omlx serve --model-dir ~/models
サーバーがサブディレクトリからLLM、VLM、エンベディングモデル、リランカーを自動的に検出します。OpenAI互換クライアントからhttp://localhost:8000/v1に接続できます。内蔵チャットUIもhttp://localhost:8000/admin/chatで利用可能です。
Homebrewでインストールした場合、oMLXをマネージドバックグラウンドサービスとして実行できます:
brew services start omlx # 起動(クラッシュ時に自動再起動)
brew services stop omlx # 停止
brew services restart omlx # 再起動
brew services info omlx # ステータス確認
サービスはデフォルト設定でomlx serveを実行します(~/.omlx/models、ポート8000)。カスタマイズするには、環境変数(OMLX_MODEL_DIR、OMLX_PORTなど)を設定するか、omlx serve --model-dir /your/pathを一度実行して~/.omlx/settings.jsonに設定を保存してください。
ログは2か所に記録されます:
- サービスログ: $(brew --prefix)/var/log/omlx.log(stdout/stderr)
- サーバーログ: ~/.omlx/logs/server.log(構造化アプリケーションログ)
Apple SiliconでテキストLLM、ビジョン言語モデル(VLM)、OCRモデル、エンベディング、リランカーをサポートします。
/adminでリアルタイム監視、モデル管理、チャット、ベンチマーク、モデル別設定のためのWeb UIを提供します。英語、韓国語、日本語、中国語、ロシア語に対応。すべてのCDN依存関係がバンドルされ、完全オフラインでの運用が可能です。

テキストLLMと同じ連続バッチング・階層型KVキャッシュスタックでVLMを実行します。マルチ画像チャット、base64/URL/ファイル画像入力、ビジョンコンテキストを活用したツール呼び出しをサポートします。OCRモデル(DeepSeek-OCR、DOTS-OCR、GLM-OCR)は最適化されたプロンプトで自動検出されます。
vLLMにインスパイアされたブロックベースのKVキャッシュ管理で、プレフィックス共有とCopy-on-Writeをサポートします。キャッシュは2つの階層で動作します:

mlx-lmのBatchGeneratorを通じて同時リクエストを処理します。最大同時リクエスト数はCLIまたは管理パネルで設定できます。
Claude Codeで小さなコンテキストモデルを実行するためのコンテキストスケーリングをサポートします。報告されるトークン数をスケーリングすることで自動圧縮が適切なタイミングでトリガーされ、長いプリフィル中の読み取りタイムアウトを防ぐSSE keep-aliveを提供します。
同一サーバーでLLM、VLM、エンベディングモデル、リランカーをロードします。自動と手動の制御を組み合わせてモデルを管理します:
管理画面からサンプリングパラメータ、チャットテンプレート引数、TTL、モデルエイリアス、モデルタイプオーバーライドなどをモデルごとに設定します。サーバー再起動なしで即座に適用されます。
/v1/modelsでエイリアスが返され、リクエスト時にエイリアスとディレクトリ名の両方が使用可能です。
管理画面からロード済みモデルと直接チャットします。会話履歴、モデル切り替え、ダークモード、推論モデル出力、および VLM/OCR モデルの画像アップロード をサポートします。

管理画面からHuggingFaceのMLXモデルを直接検索してダウンロードします。モデルカードの確認、ファイルサイズの確認、ワンクリックダウンロードが可能です。

管理画面からOpenClaw、OpenCode、Codex、Hermes Agent、Copilot、Piをワンクリックで設定できます。設定ファイルを手動で編集する必要はありません。

管理画面からワンクリックでベンチマークを実行します。プリフィル(PP)とトークン生成(TG)の毎秒トークン数を測定し、現実的なパフォーマンス数値のための部分的プレフィックスキャッシュヒットテストも含まれます。

ネイティブ Swift / SwiftUI メニューバーアプリ(Electron ではありません)。ターミナルを開かずにサーバーの起動、停止、監視が可能です。永続的な配信統計(再起動後も維持)、クラッシュ時の自動再起動、Sparkle による自動アップデートを含みます。

OpenAIとAnthropic APIのドロップイン代替です。ストリーミング使用統計(stream_options.include_usage)、Anthropic adaptive thinking、ビジョン入力(base64、URL)をサポートします。
| エンドポイント | 説明 |
|---|---|
POST /v1/chat/completions |
チャット補完(ストリーミング) |
POST /v1/completions |
テキスト補完(ストリーミング) |
POST /v1/messages |
Anthropic Messages API |
POST /v1/embeddings |
テキストエンベディング |
POST /v1/rerank |
ドキュメントリランキング |
GET /v1/models |
利用可能なモデル一覧 |
mlx-lmで利用可能なすべての関数呼び出し形式、JSONスキーマバリデーション、MCPツール統合をサポートします。ツール呼び出しにはモデルのチャットテンプレートがtoolsパラメータをサポートしている必要があります。以下のモデルファミリーがmlx-lmの内蔵ツールパーサーを通じて自動検出されます:
| モデルファミリー | 形式 |
|---|---|
| Llama、Qwen、DeepSeek等 | JSON <tool_call> |
| Qwen3.5シリーズ | XML <function=...> |
| Gemma | <start_function_call> |
| GLM (4.7, 5) | <arg_key>/<arg_value> XML |
| MiniMax | Namespaced <minimax:tool_call> |
| Mistral | [TOOL_CALLS] |
| Kimi K2 | <\|tool_calls_section_begin\|> |
| Longcat | <longcat_tool_call> |
上記に記載されていないモデルでも、チャットテンプレートがtoolsを受け入れ、出力が認識可能な<tool_call> XML形式を使用していれば動作する可能性があります。ツール呼び出しを含むストリーミングリクエストはすべてのコンテンツをバッファリングし、完了時に結果を送信します。
--model-dirをMLX形式のモデルサブディレクトリを含むディレクトリに指定します。2階層の構造フォルダ(例:mlx-community/model-name/)もサポートされています。
~/models/
├── Step-3.5-Flash-8bit/
├── Qwen3-Coder-Next-8bit/
├── gpt-oss-120b-MXFP4-Q8/
├── Qwen3.5-122B-A10B-4bit/
└── bge-m3/
モデルはタイプ別に自動検出されます。管理画面から直接モデルをダウンロードすることもできます。
| タイプ | モデル |
|---|---|
| LLM | mlx-lmがサポートするすべてのモデル |
| VLM | Qwen3.5シリーズ、GLM-4V、Pixtralおよびその他のmlx-vlmモデル |
| OCR | DeepSeek-OCR、DOTS-OCR、GLM-OCR |
| エンベディング | BERT、BGE-M3、ModernBERT |
| リランカー | ModernBERT、XLM-RoBERTa |
# ロード済みモデルのメモリ上限
omlx serve --model-dir ~/models --max-model-memory 32GB
# プロセスレベルのメモリ上限(デフォルト: auto = RAM - 8GB)
omlx serve --model-dir ~/models --max-process-memory 80%
# KVブロック用SSDキャッシュを有効化
omlx serve --model-dir ~/models --paged-ssd-cache-dir ~/.omlx/cache
# メモリ内ホットキャッシュサイズの設定
omlx serve --model-dir ~/models --hot-cache-max-size 20%
# 最大同時リクエスト数の調整(デフォルト: 8)
omlx serve --model-dir ~/models --max-concurrent-requests 16
# MCPツールの使用
omlx serve --model-dir ~/models --mcp-config mcp.json
# APIキー認証
omlx serve --model-dir ~/models --api-key your-secret-key
# Localhost専用: 管理画面のグローバル設定で検証をスキップ
すべての設定は/adminのWeb管理画面からも設定できます。設定は~/.omlx/settings.jsonに保存され、CLIフラグが優先されます。
アーキテクチャ
FastAPI Server (OpenAI / Anthropic API)
│
├── EnginePool (マルチモデル、LRU退去、TTL、手動ロード/アンロード)
│ ├── BatchedEngine (LLM、連続バッチング)
│ ├── VLMEngine (ビジョン言語モデル)
│ ├── EmbeddingEngine
│ └── RerankerEngine
│
├── ProcessMemoryEnforcer (合計メモリ制限、TTLチェック)
│
├── Scheduler (FCFS、設定可能な同時処理数)
│ └── mlx-lm BatchGenerator
│
└── Cache Stack
├── PagedCacheManager (GPU、ブロックベース、CoW、プレフィックス共有)
├── Hot Cache (メモリキャッシュ、write-back)
└── PagedSSDCacheManager (SSDコールドキャッシュ、safetensors形式)
git clone https://github.com/jundot/omlx.git
cd omlx
pip install -e ".[dev]"
pytest -m "not slow"
ネイティブ SwiftUI アプリは apps/omlx-mac/ にあります。Xcode 26.5+ と Python 3.11+ が必要です。venvstacks は dev 依存として宣言されているため、pip install -e ".[dev]"(または uv sync --dev)でピン留めされたバージョンが入ります。ホスト全体のツールランナーを使いたい場合は uvx venvstacks や pipx run venvstacks でも動作します。
# 実行可能な oMLX.app をステージング(xcodebuild + venvstacks Python レイヤー + ad-hoc 署名)
apps/omlx-mac/Scripts/build.sh release
# 出力は apps/omlx-mac/build/Stage/oMLX.app
open apps/omlx-mac/build/Stage/oMLX.app
# venvstacks を強制的に再ビルド(通常は fingerprint でキャッシュ)
apps/omlx-mac/Scripts/build.sh release --rebuild-donor
初回 cold ビルドは 10–20 分かかります(venvstacks Python レイヤーの組み立て)。以降のビルドは packaging/_export/ のキャッシュを再利用し、約 4 分で完了します。レイヤー構成は packaging/README.md、Swift ソースは apps/omlx-mac/ を参照してください。
コントリビューションを歓迎します!詳細はコントリビューションガイドを参照してください。