LatentGate について
LatentGateは、ログ、JSON、ドキュメント、Webページを読み込む前に最適化する、コーディングエージェント向けのローカルMCPサーバーです。APIキー不要の決定的なテキスト最適化を行い、コードブロック、URL、引用文字列を保持します。
主な機能
- 01オフラインでの決定的なテキスト最適化
- 02質問や予算に応じたテキスト最適化
- 03最適化済みファイルの読み込み
- 04トークン数のカウント
- 05画像・ドキュメント圧縮ツール
活用シーン
- 01反復するログの分析前圧縮
- 02長いプロンプトのトークン予算への調整
- 03大きなJSONやドキュメントの読み込み
- 04トークン数の確認
MCP 対応
MCPサーバーとして、ファイル読み込み、テキスト最適化、トークン数カウントのツールをクライアントに公開します。画像および一部の圧縮ツールにはOllamaが必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
9掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| path | string | はい | テキストファイルへのパス |
| level | enum | いいえ | lossless = 意味を変えない;balanced = ログの繰り返し部分も折りたたみ、冗長部分を削除;aggressive = 最も関連性の高い文のみを保持(約 50%)lossless | balanced | aggressive |
| question | string | いいえ | 探している内容(文の選択に焦点を当てます) |
| max_tokens | integer | いいえ | 結果のトークン予算(0 = 予算なし) |
詳細
LatentGate
AI にはノイズではなく、シグナルを届けましょう。
AI が読み込む前に、ログ、JSON、ドキュメント、Web ページを縮小する MCP サーバーです。オフラインで、決定論的に、約3msで動作し、API キーは不要です。さまざまな開発データを組み合わせたコーパスではトークンを66%削減し、繰り返しの多いログでは90%以上削減します。
Claude で使う | クイックスタート | Python API | REST API | モニタリング | 負荷テスト | デプロイ | AI ツール | ベンチマーク | コントリビューション
動作を見る
ブラウザーで試す → 実際のオプティマイザーは WebAssembly 経由でお使いの マシン上で動作します。貼り付けた内容がアップロードされることはありません。
LatentGate(balanced)を通して読み込んだ400行のエラーログ(tiktokenで測定):
BEFORE 13,641 tokens
2026-10-08 09:00:00 ERROR order 10000 failed: payment gateway timeout after 2982ms (retry 1/3)
... 398 more lines in the same shape ...
AFTER 145 tokens (98.9% saved)
2026-10-08 09:00:00 INFO app started, 3 workers
2026-10-08 09:00:00 ERROR order 10000 failed: payment gateway timeout after 2982ms (retry 1/3)
[… 398 similar lines: order 10001…10398, 2900…3100 ms …]
2026-10-08 09:06:39 ERROR order 10399 failed: payment gateway timeout after 3030ms (retry 1/3)
2026-10-08 09:07:00 FATAL circuit breaker open for payments-api
1行で Claude Code にインストールし、*「app.logを読んで、注文が失敗する理由を教えて」*と尋ねられます:
claude mcp add --scope user latent-gate -- uvx --from "latent-gate[mcp,tokens]" latent-gate-mcp
**信頼できる点:**同じ入力には常に同じ出力が返されるため、プロバイダーのプロンプトキャッシュが引き続き機能します。出力が入力より大きくなることはありません。コードブロック、URL、引用符で囲まれた文字列はバイト単位で元のまま保持されます。level="lossless"では、空白、JSON の書式、完全一致する重複以外は変更されません。
**デフォルトレベルでのトレードオフ:**ほぼ同一の行が連続する箇所は、最初と最後の行、および値の範囲にまとめられるため、まとめられた部分に含まれる個別の ID は保持されません。事実が失われる箇所も含めたコーパス全体はコストベンチマークに掲載されており、latent-gate --optimizer-benchmarkで再現できます。
Claude Code、Claude Desktop、Cursor、Cline、Continue、Zed で、無料かつオフラインで動作します。
何もインストールしたくない場合は? 公式のmcprush でホストされている LatentGateなら、ローカルサーバーを使えない環境(Web 版やモバイル版の claude.ai など)でも動作します。無料プラン(月300回)と、月額9ドルからの有料プランがあります。
問題
画像や長いプロンプトを GPT-4o/Claude/Gemini に送信するたびに、本来なら無料でローカル処理できる内容のために、1,000以上のトークンを消費しています。
Traditional: Image -> Cloud LLM (1,200 tokens) -> Answer
LatentGate: Image -> Local Ollama (FREE) -> Cloud LLM (200 tokens) -> Answer
機能
| 機能 | 説明 |
|---|---|
| ローカルファースト | 画像とテキストの圧縮は Ollama 上で実行されます(無料、API キー不要) |
| トークン最適化 | 事実を保持する決定論的な圧縮:現実的な開発コーパスでトークンを 66% 削減し、約 1ms で処理します(ベンチマーク) |
| MCP サーバー | Claude Desktop、Cursor、Cline、Continue、Zed で動作します |
| 選択的デコード | 動画では、シーンが変わったときだけ API を呼び出します(コサイン類似度を使用し、呼び出し回数を約 2.85 倍削減) |
| テキスト圧縮 | 長いプロンプト、会話、RAG ドキュメントをローカルで圧縮します |
| 速度の最適化 | コネクションプーリング、モデルのプリロード、並列処理 |
| マルチプロバイダー | OpenAI、Anthropic、Google、Groq、DeepSeek、Together、Azure、AWS Bedrock、Ollama、または OpenAI 互換の任意のエンドポイント |
| REST API | ウェブアプリケーションとの連携に使える FastAPI サーバー |
| 動画処理 | 動画ファイルを直接入力すると、フレームを自動的に抽出します |
| コスト追跡 | SQLite による分析とエクスポート可能なレポートを備えた、永続的なコスト追跡 |
| 非同期サポート | FastAPI、aiohttp などに対応する、ブロッキングしない非同期メソッド |
| ストリーミング応答 | リモート LLM からの応答をストリーミングします |
| 設定の永続化 | 環境変数による上書きに対応した YAML/TOML 設定ファイル |
| 構造化ログ | ローテーションと相関 ID に対応した JSON 形式のログ |
| Docker サポート | 簡単にデプロイできる Dockerfile と docker-compose |
| プラグインシステム | ドメイン固有の圧縮に対応するカスタムプロセッサー |
| 多言語対応 | 自動検出に対応し、30 以上の言語をサポート |
Claude で使う
LatentGate は MCP サーバーとして Claude に接続できます。最適化ツールは Ollama も API キーも不要で、オフラインで動作します。Claude はこのツールを通じて大量のログ、JSON ダンプ、ドキュメントを読み込み、コンテキストの使用量を大幅に抑えられます。400 行のエラーログなら、14,400 トークンから約 100 トークンになります。
uv が必要です(初回実行時に uvx が PyPI から LatentGate を取得します)。
初回実行では依存関係がダウンロードされます。接続が遅いと Claude の MCP 起動制限である 30 秒を超えることがあります。あらかじめ一度実行してください(2 回目以降の起動は約 2 秒です)。
uvx --from "latent-gate[mcp,tokens]" latent-gate --optimizer-benchmark
Claude Code — プラグイン(MCP サーバーと、Claude に使用タイミングを知らせるスキル):
/plugin marketplace add KathanModh259/latent-gate
/plugin install latent-gate@latent-gate
Claude Code — MCP サーバーのみ:
claude mcp add latent-gate -- uvx --from "latent-gate[mcp,tokens]" latent-gate-mcp
任意のエージェント — Agensi マーケットプレイスから: LatentGate Context Saver は Claude Code、Cursor、Codex CLI、その他 20 以上のエージェント向けの公式スキルです。LatentGate が未導入の場合はセットアップし、ローカル版とホスト版の両方に対応して、いつ使用するかをエージェントに知らせます。
Claude Desktop — claude_desktop_config.json に追加して再起動します。
{
"mcpServers": {
"latent-gate": {
"command": "uvx",
"args": ["--from", "latent-gate[mcp,tokens]", "latent-gate-mcp"]
}
}
}
あとは、次のように尋ねるだけです:「latent-gate で logs/app.log を読み、注文が失敗する理由を教えてください。」
| ツール | Ollama が必要 | 説明 |
|---|---|---|
read_file_optimized | いいえ | テキストファイルを読み込み、最適化した形式で返します(編集するファイルではなく、読み込むファイルに使用します) |
optimize_text | いいえ | 手元にあるテキストを最適化します。必要に応じて question / max_tokens の予算を指定できます |
count_tokens | いいえ | トークン数を数えます(tiktoken o200k_base) |
compress_image | はい | 画像をローカルで説明し、約 150 トークンのシーン情報を返します |
compress_text / compress_conversation / compress_documents | はい | オプティマイザーと、事実確認を行うローカル LLM による圧縮 |
get_stats | はい | セッション統計 |
クイックスタート
インストール
# Core install
pip install latent-gate
# With MCP server (for Claude Desktop, Cursor, Cline, etc.)
pip install latent-gate[mcp]
# With API server (for web applications)
pip install latent-gate[api]
# With video processing
pip install latent-gate[video]
# With embedding-based similarity (more accurate selective decoding)
pip install latent-gate[embeddings]
# With LangChain integration
pip install latent-gate[langchain]
# With AWS Bedrock support
pip install latent-gate[bedrock]
# Exact token counts via tiktoken (otherwise a calibrated ~6%-error estimate)
pip install latent-gate[tokens]
# With all features
pip install latent-gate[all]
Ollama モデルを取得
ollama pull llava:7b # Vision model (required for image queries)
ollama pull llama3:8b # Text model (required for text compression & prediction)
ワンコマンドでクイックスタート
chmod +x scripts/quickstart.sh
./scripts/quickstart.sh
これで、Ollama → モデルの取得 → API サーバー → ウェブサイトがすべて起動します。--no-pull、--no-website、--port 9000 などのオプションについては、scripts/quickstart.sh を参照してください。
CLI の使用方法
# Image query
latent-gate photo.jpg "What is in this image?" --provider ollama -v
# Text compression
latent-gate --text "Your long prompt here..." --provider ollama -v
# Text from file
latent-gate --text-file prompt.txt --provider openai -v
# Image + Text combined
latent-gate photo.jpg "Analyze" --text "Extra context..." -v
# Full JSON output
latent-gate photo.jpg "Describe" --json -v
# Compress only, deterministically (no LLM call, ~1ms, reproducible)
cat prompt.txt | latent-gate --text-file - --compress-only --deterministic --level balanced
# Reproduce the token-savings benchmark (no Ollama needed)
latent-gate --optimizer-benchmark
# Production benchmark
latent-gate --benchmark --benchmark-output reports/benchmark.json
# Start API server (requires: pip install latent-gate[api])
latent-gate-api
本番環境のセキュリティ強化
API をデプロイする場合、画像パスを直接読み込める場所を信頼できるディレクトリに限定してください。
set LATENTGATE_ALLOWED_IMAGE_ROOTS=C:\safe-images;D:\datasets
latent-gate-api
リリース前にベンチマークを実施し、速度と削減効果を推測ではなく実測してください。
latent-gate --benchmark --json
Python API
画像クエリ
from latent_gate import LatentGatePipeline, PipelineConfig
config = PipelineConfig(
vision_model="llava:7b",
predictor_model="llama3:8b",
remote_provider="openai",
remote_model="gpt-4o-mini",
)
with LatentGatePipeline(config) as pipeline:
result = pipeline.query("photo.jpg", "What is in this image?")
print(result["answer"])
print(f"Tokens sent: ~{result['tokens_estimated']}")
print(f"Timing: {result['timing']}")
テキスト圧縮
# Long prompt compression
result = pipeline.query_text("Your 500-word prompt here...", mode="auto")
# Conversation history compression
messages = [
{"role": "user", "content": "Help me with Kubernetes setup"},
{"role": "assistant", "content": "Sure! What's your target configuration?"},
{"role": "user", "content": "3 nodes, t3.large, us-east-1 with autoscaling"},
]
result = pipeline.query_conversation(messages, "Now give me the setup commands")
# RAG document compression
documents = ["doc1 text...", "doc2 text...", "doc3 text..."]
result = pipeline.query_documents(documents, "How do I implement JWT refresh?")
# Universal (auto-detect input type)
result = pipeline.query_universal(text="Explain this code...", image="screenshot.png")
バッチ処理
# Sequential with selective decoding (skips redundant API calls)
results = pipeline.query_batch(image_paths, "Describe each scene")
# Parallel processing
results = pipeline.query_batch(image_paths, "Describe each scene", parallel=True, max_workers=4)
# Text batch
results = pipeline.query_batch_texts(text_list, question="Summarize each")
ストリーミング
# Stream image query
for token in pipeline.query_stream("photo.jpg", "Describe this"):
print(token, end="", flush=True)
# Stream text query
for token in pipeline.query_text_stream("Long prompt...", mode="compress"):
print(token, end="", flush=True)
REST API
サーバーの起動
# Default (0.0.0.0:8000)
latent-gate-api
# Custom host/port
# Linux/macOS:
LATENTGATE_HOST=127.0.0.1 LATENTGATE_PORT=9000 latent-gate-api
# Windows PowerShell:
$env:LATENTGATE_HOST="127.0.0.1"; $env:LATENTGATE_PORT="9000"; latent-gate-api
# Windows CMD:
set LATENTGATE_HOST=127.0.0.1 && set LATENTGATE_PORT=9000 && latent-gate-api
エンドポイント
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /health | ヘルスチェック(Ollama 接続ステータス) |
GET | /stats | セッション使用統計 |
POST | /query/image | 画像クエリ |
POST | /query/text | テキスト圧縮 |
POST | /query/conversation | 会話の圧縮 |
POST | /query/documents | RAG ドキュメントの圧縮 |
POST | /query/universal | 入力タイプの自動検出 |
POST | /query/image/upload | クエリ用の画像をアップロード |
リクエスト例
import requests
# Image query
response = requests.post("http://localhost:8000/query/image", json={
"image_path": "photo.jpg",
"question": "What is in this image?"
})
# Text query
response = requests.post("http://localhost:8000/query/text", json={
"text": "Your long prompt here...",
"question": "Summarize this",
"mode": "auto" # auto | compress | summarize | condense | code
})
# Health check
response = requests.get("http://localhost:8000/health")
print(response.json()) # {"status": "healthy", "ollama_connected": true, ...}
非同期サポート
import asyncio
from latent_gate import AsyncLatentGatePipeline, PipelineConfig
async def main():
async with AsyncLatentGatePipeline() as pipeline:
# Single queries
result = await pipeline.query("photo.jpg", "What is this?")
result = await pipeline.query_text("Long prompt...")
# Concurrent batch processing
results = await pipeline.query_many_images(
["img1.jpg", "img2.jpg", "img3.jpg"],
"Describe each image",
max_concurrent=3,
)
asyncio.run(main())
動画処理
from latent_gate import LatentGatePipeline, PipelineConfig, VideoProcessor, VideoConfig
config = PipelineConfig(
vision_model="llava:7b",
remote_provider="ollama",
remote_model="llama3:8b",
)
video_config = VideoConfig(
fps=1.0, # Extract 1 frame per second
max_frames=100, # Max frames to process
quality=95, # JPEG quality
resize_width=640, # Resize frames (saves processing time)
)
with VideoProcessor(config, video_config) as processor:
result = processor.process_video("video.mp4", "Describe the action")
print(f"Frames processed: {result['total_frames']}")
print(f"Unique scenes: {result['statistics']['unique_scenes']}")
print(f"Skip rate: {result['statistics']['skip_rate']}")
設定
設定ファイル
# latentgate.yaml
ollama_base_url: http://localhost:11434
vision_model: llava:7b
predictor_model: llama3:8b
remote_provider: openai
remote_model: gpt-4o-mini
selective_decoding: true
similarity_threshold: 0.85
use_embeddings: true
enable_caching: true
temperature: 0.1
request_timeout: 120
track_costs: true
cost_db_path: "latentgate_costs.db"
from latent_gate import get_config, LatentGatePipeline
config = get_config("latentgate.yaml")
with LatentGatePipeline(config) as pipeline:
result = pipeline.query("photo.jpg", "Describe this")
環境変数
| 変数 | 説明 | デフォルト |
|---|---|---|
OPENAI_API_KEY | OpenAI API キー | - |
ANTHROPIC_API_KEY | Anthropic API キー | - |
GOOGLE_API_KEY | Google API キー | - |
LATENTGATE_REMOTE_PROVIDER | リモートプロバイダーを上書き | openai |
LATENTGATE_REMOTE_MODEL | リモートモデルを上書き | プロバイダーのデフォルト(例:gpt-4o-mini、claude-sonnet-5) |
LATENTGATE_VISION_MODEL | ビジョンモデルを上書き | llava:7b |
LATENTGATE_LOG_LEVEL | ログレベル | INFO |
LATENTGATE_LOG_FILE | ログファイルのパス | - |
LATENTGATE_LOG_JSON | JSON ログ形式 | false |
LATENTGATE_TRACK_COSTS | コスト分析を有効化 | false |
LATENTGATE_COST_DB_PATH | SQLite DB のパス | .latentgate_costs.db |
LATENTGATE_API_KEY | API で Authorization: Bearer <key> を必須にする(/compress を含む。WebSocket クライアントは ?api_key= を指定できます) | 未設定(制限なし) |
LATENTGATE_COMPRESSION_LEVEL | トークン最適化レベル:lossless、balanced、aggressive | balanced |
LATENTGATE_COMPRESSION_STRATEGY | auto(最適化機能+事実確認済みローカル LLM)または deterministic | auto |
LATENTGATE_TARGET_TOKEN_BUDGET | 圧縮後のプロンプトの最大トークン数(0 = 予算なし) | 0 |
LATENTGATE_MAX_OUTPUT_TOKENS | クラウドモデルが回答ごとに生成できる最大トークン数 | 4096 |
LATENTGATE_PRELOAD | API 起動時に Ollama モデルをバックグラウンドでウォームアップ | true |
LATENTGATE_MAX_CONCURRENT_REQUESTS | API サーバー内のパイプライン呼び出しの最大同時実行数 | 3 |
LATENTGATE_CORS_ORIGINS | カンマ区切りの許可する CORS オリジン | http://localhost:5173 |
設定の保存
from latent_gate import PipelineConfig, save_config
config = PipelineConfig(remote_provider="anthropic", remote_model="claude-sonnet-5")
save_config(config, "my_config.yaml")
Docker
# Start full stack (API + Ollama)
docker compose up -d
# Pull models first (one-time setup)
docker compose --profile setup up ollama-init
# Start with monitoring (Prometheus + Grafana)
docker compose --profile monitoring up -d
# Build and run manually
docker build -t latent-gate .
docker run -p 8000:8000 latent-gate
docker-compose の設定には、以下が含まれています。
- latent-gate API サーバー(ポート 8000)
- Ollama ローカル LLM サーバー(ポート 11434)
- ollama-init 必要なモデルを自動取得するコンテナ(プロファイル:
setup) - Prometheus ポート 9090 で動作するメトリクス収集ツール(プロファイル:
monitoring) - Grafana ポート 3000 のダッシュボード(プロファイル:
monitoring、認証情報:admin/latentgate)
監視スタック
監視機能を有効にして起動します。
docker compose --profile monitoring up -d
アクセス先:
- Grafana: http://localhost:3000(ログイン:`admin` /
latentgate) - Prometheus: http://localhost:9090
- メトリクスエンドポイント: http://localhost:8000/metrics
LatentGate ダッシュボードは Grafana で自動的に読み込まれ、リクエストレート、レイテンシのパーセンタイル(p50/p95/p99)、トークン削減量、エラー率、パイプラインの健全性、エンドポイントの内訳を網羅する 9 つのパネルを表示します。
環境変数でカスタマイズできます。
GRAFANA_ADMIN— Grafana 管理者のユーザー名(デフォルト:admin)GRAFANA_PASSWORD— Grafana のパスワード(デフォルト:latentgate)GRAFANA_ANONYMOUS— 匿名アクセスを有効化(デフォルト:true)LATENTGATE_ENABLE_METRICS— Prometheus メトリクスを有効化(デフォルト:true)
AI コーディングツールとの統合(MCP)
LatentGate は、主要な AI コーディングツールすべてで Model Context Protocol(MCP)サーバーとして動作します。AI アシスタントは、画像、長いプロンプト、ドキュメントをクラウドモデルに送信する前に自動的に圧縮します。
対応ツール
| ツール | ステータス | セットアップ |
|---|---|---|
| VS Code / Copilot | 対応 | 拡張機能 |
| Claude Desktop | 対応 | MCP 設定 |
| Claude Code (CLI) | 対応 | スキル |
| Cursor | 対応 | MCP 設定 |
| Cline (VS Code) | 対応 | MCP 設定 |
| Continue.dev | 対応 | MCP 設定 |
| Zed Editor | 対応 | MCP 設定 |
VS Code 拡張機能
code --install-extension KathanModh259.latent-gate-vscode
機能:
- 任意の画像を右クリックして、LatentGate で圧縮できます
- テキストを選択し、
Ctrl+Shift+Alt+Cを押して圧縮できます - アクティビティバーにコストダッシュボードを表示します
- Copilot Chat 用に MCP を自動設定します
- トークンの削減量をステータスバーに表示します
MCP のセットアップ
Claude については、Claude で使用するをご覧ください。Cursor、Cline、Continue、Zed などの MCP クライアントでは、同じサーバーコマンドを使用します:
{
"mcpServers": {
"latent-gate": {
"command": "uvx",
"args": ["--from", "latent-gate[mcp,tokens]", "latent-gate-mcp"]
}
}
}
または、環境にインストールして(pip install "latent-gate[mcp,tokens]")、"command": "latent-gate-mcp" を使用します。コマンドは latent-gate-mcp です。latent-gate は CLI であり、MCP 通信には対応していないので注意してください。画像ツールと compress_* ツールには、さらに ollama pull llava:7b と ollama pull phi3:mini が必要です。
各ツールの詳しいセットアップガイドについては、integrations/ フォルダーをご覧ください。
ホスト型 MCP(リモート、mcprush などのゲートウェイ向け)
docker build -f Dockerfile.mcp -t latent-gate-mcp .
docker run -p 8000:8000 -e LATENTGATE_API_KEY=change-me latent-gate-mcp
# or without Docker: latent-gate mcp --http --port 8000
ストリーミング可能な HTTP を /mcp(ステートレスなので、どのインスタンスでも任意のリクエストに応答できます)と
/health で提供します。リモートなので、ローカル MCP サーバーを実行できない環境でも動作します。ウェブ版やモバイル版の claude.ai、またコネクター URL しか受け付けないクライアントでも使用できます。このモードの主なツールは
fetch_url_optimized です。URL からページ、JSON API、または生のログを取得し、要約モデルを使わずに、表示可能なテキストを圧縮して重複を除去して返します。
公開されていないアドレス(localhost、10.x、クラウドメタデータ)は拒否されます。これはライブ接続時に確認されるため、
DNS を悪用して回避することもできません。このモードでは:
read_file_optimized、compress_image、get_statsは非表示です。最初の 2 つは サーバーのディスクを読み取り、統計情報にはすべての呼び出し元の利用状況が混在するためです。compress_*ツールは、LATENTGATE_HOSTED_OLLAMA=1の場合(ホストで Ollama を実行している場合)にのみ一覧表示されます。- 各呼び出しの入力は 2MB に制限されます。
LATENTGATE_API_KEYが設定されている場合、リクエストにはAuthorization: Bearer <key>が必要です。キーはゲートウェイにのみ渡し、他者には渡さないでください。そうしないと、呼び出し元が有料プランを回避できてしまいます。
| 環境変数 | デフォルト | 目的 |
|---|---|---|
LATENTGATE_API_KEY | 未設定(公開、警告あり) | ゲートウェイが送信する必要のあるベアラーキー |
LATENTGATE_HOSTED_OLLAMA | オフ | Ollama を使用する compress_* ツールを公開します |
PORT | 8000 | リッスンポート(ほとんどのホストが設定します) |
速度の最適化
| 最適化 | 内容 | 効果 |
|---|---|---|
| コネクションプーリング | requests.Session を使用して HTTP 接続を再利用します | 呼び出しあたり約 30~50% 高速化 |
| モデルの事前読み込み | 初期化時に Ollama モデルをウォームアップします(keep_alive) | 5~15 秒のコールドスタートを解消 |
| プロンプトの短縮 | 最適化された抽出プロンプトで、出力トークン数を削減します | 生成が約 20% 高速化 |
| 3 段階の JSON 解析 | 高速解析、テキストからの抽出、LLM フォールバック | 90% のケースで遅い LLM 呼び出しを回避 |
| 並列処理 | ThreadPool を介して画像とテキストを同時に処理します | 複合クエリが約 40% 高速化 |
| コンテンツハッシュキャッシュ | 繰り返し使用する画像をディスクにキャッシュします | キャッシュヒット時は即時 |
| 選択的デコード | コサイン類似度により、冗長な API 呼び出しをスキップします | 呼び出し回数を約 2.85 倍削減 |
コストのベンチマーク
画像クエリ(プロバイダー別、推定)
各プロバイダーが公開している画像トークンの計算式と、ローカルで生成する約 150 トークンの説明との比較による推定値です。
| プロバイダー | 生の画像トークン数 | LatentGate のトークン数 | 削減率 |
|---|---|---|---|
| OpenAI GPT-4o(高精細) | 約 1,105 | 約 150 | 約 86% |
| Claude 3.5 Sonnet(1MP 画像) | 約 1,334 | 約 150 | 約 89% |
| Gemini 2.0 Flash | 約 258 | 約 150 | 約 42% |
テキスト:測定可能で再現性あり
組み込みの現実的な入力を使用する決定論的オプティマイザーを、tiktoken(o200k_base)でカウントしました。
保持された事実 = 数値、識別子、URL、ファイル名、コードのうち、原文どおりに保持されたものの割合です。
latent-gate --optimizer-benchmark で再現できます(Ollama や API キーは不要です)。
| 入力 | トークン数 | lossless | balanced(デフォルト) | aggressive |
|---|---|---|---|---|
| 整形済み API JSON | 1,407 | −33%、事実 100% | −33%、事実 100% | −33%、事実 100% |
| 60 行の繰り返しログ+トレース | 2,235 | 0% | −92%(範囲を保持) | −92% |
| 3 回貼り付けられたプロンプト | 121 | −61%、事実 100% | −61%、事実 100% | −61%、事実 100% |
| 要件 6 件を含む冗長な仕様 | 127 | 0% | −20%、事実 100% | −51%、事実 90% |
| コードレビューの依頼 | 57 | −5% | −16%、事実 100% | −28%、事実 100% |
| 5 件の RAG チャンク+質問 | 190 | 0% | −58%(関連する 2 件のドキュメントを保持) | −58% |
| 合計 | 4,137 | −13%、事実 100% | −66% | −67% |
ログを折りたたむと個々の ID/タイムスタンプは失われます(折りたたみ後も先頭、末尾、値の範囲は保持されます)。 また、RAG では質問に関係のないドキュメントの事実が除外されます。どちらも意図的な動作です。
仕組み(安全性の高い順。latent_gate/optimizer.py を参照):
- 保護:コードブロック、インラインコード、URL、引用文字列を保護し、バイト単位で完全に復元します
- Lossless:空白/Unicode の整理、JSON の最小化(値は変更しません)、重複の折りたたみ
- ログの折りたたみ:数値/ID のみが異なる一連のログ行を、先頭、末尾、範囲にまとめます
- フィラー:単なる社交辞令(「こんにちは!」、「前もってお礼申し上げます!」)や曖昧な表現を削除します
- 選択(予算を超過した場合、または
aggressiveの場合のみ):BM25 による質問との関連度+要件の手がかりを使用し、 元の順序を維持します。ユーザーが実際に求めている内容は決して削除しません
保証:出力のトークン数が入力を上回ることはありません。同じ入力からは同じ出力が得られるため、プロバイダーのプロンプトキャッシュが引き続き機能します。ローカル LLM による書き換えを使用する場合は、入力より短く、かつすべての事実を保持している必要があります。そうでない場合は、決定論的な結果が送信されます。
from latent_gate import optimize
r = optimize(long_prompt, question="What failed?", level="balanced", max_tokens=2000)
print(r.optimized_tokens, r.savings_pct, r.stages)
動画
選択的デコードにより、前のフレームと類似したフレームではリモート呼び出しをスキップします(一般的な映像では呼び出し回数を約 2.85 倍削減)。
大規模運用時(gpt-4o-mini で画像クエリ 10,000 件、推定)
| 指標 | 従来方式 | LatentGate | 節約額 |
|---|---|---|---|
| 入力トークン | 12,000,000 | 2,000,000 | 10M トークン |
| コスト | $1.80 | $0.30 | $1.50(83%) |
コストの追跡
from latent_gate import CostTracker
tracker = CostTracker()
tracker.record_usage(
query_type="image",
provider="openai",
model="gpt-4o-mini",
input_tokens=150,
output_tokens=200,
tokens_saved=1000,
compression_ratio=6.7,
latency_ms=1500,
)
# Session statistics
stats = tracker.get_session_statistics()
print(f"Total cost: ${stats['total_cost']:.4f}")
print(f"Tokens saved: {stats['total_tokens_saved']}")
# Cost projection
projection = tracker.get_cost_projection(
daily_queries=1000,
provider="openai",
model="gpt-4o-mini"
)
print(f"Monthly savings: ${projection['savings']['monthly']:.2f}")
# Export report
tracker.export_report("usage_report.json", fmt="json")
tracker.export_report("usage_report.csv", fmt="csv")
多言語サポート
from latent_gate import detect_language, MultiLanguageProcessor
# Detect language
lang = detect_language("Esto es un texto en español")
print(f"Detected: {lang.name} ({lang.confidence:.0%})")
# Process with auto-translation to English
processor = MultiLanguageProcessor()
text, lang_info = processor.process("Texto en español para analizar")
print(f"Language: {lang_info.name}, Translated: {text[:100]}...")
プロジェクト構成
latent-gate/
├── latent_gate/
│ ├── __init__.py # Package exports and version
│ ├── config.py # PipelineConfig dataclass
│ ├── config_loader.py # YAML/TOML/JSON config loading
│ ├── payload.py # SemanticPayload (compact representation)
│ ├── text_processor.py # TextPayload + TextProcessor (local compression)
│ ├── local_processor.py # X-Encoder + Predictor (Ollama vision pipeline)
│ ├── remote_decoder.py # Y-Decoder (OpenAI, Anthropic, Google, Ollama)
│ ├── selective_decoder.py # Cosine/Jaccard similarity for skip decisions
│ ├── fast_client.py # Connection pooling + model preloading
│ ├── cache.py # Content-hash disk cache
│ ├── pipeline.py # LatentGatePipeline (main orchestrator)
│ ├── async_pipeline.py # AsyncLatentGatePipeline
│ ├── video_processor.py # Video frame extraction + batch processing
│ ├── cost_tracker.py # SQLite-based cost analytics
│ ├── mcp_server.py # MCP server (Model Context Protocol)
│ ├── api_server.py # FastAPI REST server
│ ├── cli.py # Command-line interface
│ ├── logging_config.py # Structured logging with rotation
│ ├── plugin_system.py # Custom processor plugins
│ └── multilang.py # Multi-language detection and translation
├── integrations/
│ ├── agent_skills/ # Prompt compression skill + scripts
│ ├── vscode-extension/ # VS Code extension source
│ ├── cursor/ # Cursor rules and MCP config
│ ├── continue_dev/ # Continue.dev config
│ ├── langchain/ # LangChain integration wrapper
│ ├── llamaindex/ # LlamaIndex retriever integration
│ └── openai_functions/ # OpenAI/Anthropic function schemas
├── tests/ # 240+ tests (unit + integration)
├── website/ # React-based analytics dashboard & landing page
├── deployments/ # Kubernetes Helm configs
├── .github/workflows/ # CI + publish workflows
├── Dockerfile
├── docker-compose.yml
├── pyproject.toml
└── requirements.txt
コミュニティ
- GitHub Discussions — 機能リクエスト、Q&A、活用事例
コントリビューション
コントリビューションを歓迎します!CONTRIBUTING.md をご覧ください。
開発環境のセットアップ
git clone https://github.com/KathanModh259/latent-gate.git
cd latent-gate
python -m venv .venv
source .venv/bin/activate # Linux/macOS
.venv\Scripts\Activate.ps1 # Windows
pip install -e ".[dev]"
テストの実行
pytest tests/ -v
優先分野
- 追加のビジョンモデルのサポート(Florence-2、InternVL、Qwen-VL)
- ドメイン固有のユースケース向けカスタム類似度プラグイン
- リアルタイムストリーミング向け WebSocket のサポート
- 高度なコスト分析と最適化の提案
- 専門業界向けプラグインの開発
- テストカバレッジの改善
- ドキュメントとサンプル
引用
@software{latentgate2026,
author = {Kathan Modh},
title = {LatentGate: Local-First Semantic Compression Pipeline},
year = {2026},
url = {https://github.com/KathanModh259/latent-gate},
version = {1.3.0}
}
VL-JEPA(Meta FAIR、2025)に着想を得ています。
ライセンス
独自のプロプライエタリライセンスです。LICENSE をご覧ください。
Kathan Modh が開発
ローカルで処理。賢く送信。コストを削減。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。