withOhm
公式AIトラフィックコントロールプレーン(カオスガバナー):Redisプロンプトリプレイ、準拠型ウェブインジェスト、SSO組織台帳、Agent Shell。BYOK OpenAI互換イングレス。Cursorはオプション。MCPは互換性クライアントです。
withOhm MCPで何ができますか?
- キャッシュされたプロンプトの再生 — AIに同一のリクエストを再送信させ、
X-AT-Cache: HITでバイト単位で同一のレスポンスを取得します。新規モデル呼び出しではなくヒットとして課金されます。 - 暗号化レシートの検証 — アシスタントに
verify_receipt.pyを使用して任意のレスポンスの署名付きX-Ohm-ReceiptJWS を確認させ、ヒットが実際に発生したものであり、主張されたものではないことを証明します。 - 公開ウェブコンテキストの取得 —
ohm_fetch_webを使用して公開ページを編集済みのマークダウン/JSONとして取得し、web_purposeやweb_compliance_ackなどのコンプライアンスフラグを適用します。 - 使用量と請求の確認 —
ohm_usageをクエリして、ohm_cache_hit、ohm_cache_miss、ohm_web_fetchメーターにわたるメータリング消費量と、クロステナント節約見積もりを確認します。 - プロキシ経由のチャット —
ohm_chatを使用して、OpenAI互換のリクエストを任意のプロバイダー(OpenAI、Anthropic、Googleなど)に単一のベースURL経由で送信し、X-Ohm-Upstream-KeyでBYOKを実現します。
ドキュメント
Ohm (withOhm)
一言で言うと: withOhm は、アプリ(または Cursor)と OpenAI/Anthropic などの間に位置するプロキシです。モデルに再課金する代わりに、バイト単位で同一のリクエストを無料でリプレイし、コンプライアンス管理下で公開 Web コンテキストを取得し、複数の不透明なプロバイダー請求書の代わりに、監査可能で暗号学的に領収書付きの 1 つの請求書を提供します。
無駄な反復推論に対するメータリングパイプ: OpenAI 互換の入口、Redis プロンプトリプレイ、コンプライアンス準拠の Web 取り込み、SSO 組織テナント、そして企業向けのクリーンな台帳。企業にとって同じパイプは AI 支出のカオスガバナーです(標準的なウェッジ: docs/GEM_POSITION.md)。Cursor/MCP はオプションのクライアントです。
正確なリプレイヒットは上流トークンをゼロ消費。プロバイダー間の一貫性。局所性 — Redis エッジ読み取り。リプレイと監査の価値。 OpenAI 互換の任意のクライアント(または Ohm Agent Shell)を 1 つのベース URL に向けます。キーを保持するか、管理プールを使用します。配管をレンタルし、カオスを統治します。
サイト: https://www.withohm.dev · API: https://api.withohm.dev/v1 · ワークベンチ: /workbench · アーキテクチャ: docs/ARCHITECTURE.md · ビジョン: docs/VISION.md · エンタープライズ: docs/ENTERPRISE_CHAOS.md · Gem: docs/GEM_POSITION.md · ケア監査: docs/CARE_AUDIT.md — すべての公開主張に適用される真実維持の規律です。エンジニアリング対トラクション比率を判断する前に読んでください。
ライセンス: MIT(LICENSE + NOTICE を参照)。ソースはオープンですが、ホスト型 withOhm パイプは商用メータリングサービスです。パッケージ/キー名はまだ at-utility / sk-at-*(レガシー AT プレフィックス)と表示される場合があります。製品は withOhm です。
ステージ(率直に)
誇張なし: withOhm は、省略による偶然ではなく設計によりプレシードかつプレトラクションです。完全な表とソーシングルール: docs/STATUS.md。
| 事実 | 現在 |
|---|---|
| バージョン | 0.1.2 |
| デザインパートナー | 10 チーム目標のうち 0(docs/DESIGN_PARTNERS.md — 「ゼロから」) |
| 機関投資 | なし。法人化前(docs/distribution/INVESTOR_INTRO_TARGETS.md) |
| リージョン | 単一(us-east-1)。契約 SLA なし |
| 自動テストカバレッジ | tests/ で 30 ファイル、215+ テスト関数(pytest -q、プッシュごとに CI) |
エンジニアリングと監査の規律(テスト、署名付き領収書、INSPECTION.md、docs/CARE_AUDIT.md)にプレトラクション期間の時間が投入されてきました。ステージの数字と規律を個別ではなく一緒に読んでください。
自分で検証する
散文は安価です。すべての重要な主張には、それをチェックするコマンドが付属しています。
| 主張 | チェック |
|---|---|
| パイプが稼働している(両プレーン) | curl -s https://api.withohm.dev/health && curl -s https://api.withohm.dev/ready |
| ヒットがリプレイされ、ヒットとして請求される | 同じボディを 2 回送信。2 回目のレスポンスには X-AT-Cache: HIT + X-AT-Billed-USD が含まれる |
| ヒットは暗号学的であり、主張ではない | ヒットレスポンスには X-Ohm-Receipt(署名付き JWS)が含まれる — 検証: python scripts/verify_receipt.py "<receipt>"(docs/RECEIPTS.md) |
| 署名キーは公開 | curl -s https://api.withohm.dev/.well-known/http-message-signatures-directory |
| 公開された制限と拒否 | curl -s https://api.withohm.dev/v1/public/honesty — 私たちが行わないことと、各項目を証明するエンドポイント |
| クロステナント節約カウンター | curl -s https://api.withohm.dev/v1/public/stats(常に estimate_only: true) |
| レビューパスが毎晩本番環境で動作 | ゴールデンパスワークフロー履歴 |
ローカル開発者契約(安定)
| 役割 | アドレス | 注記 |
|---|---|---|
| 公開クライアントエントリ | http://localhost:8081/v1 | Rust エッジ。OpenAI ソフトウェア開発キットをここに向けます。 |
| 内部コントロールプレーン | http://localhost:8080 | Python FastAPI。Rust はキャッシュミス時にここにプロキシします。見知らぬ人に渡さないでください。 |
| 認証 | Authorization: Bearer <ohm-api-key> | ローカルブートストラップキー: sk-at-dev(.env を参照)。 |
| BYOK | X-Ohm-Upstream-Key: <provider-key> | env/エンタープライズ管理キーがない場合、gpt/claude のキャッシュミス時に必須。 |
| モデル選択 | JSON フィールド model | mock はローカルに留まります。gpt-* / o* → OpenAI; claude-* → Anthropic; gemini-* → Google; deepseek-* → DeepSeek; kimi-* / moonshot-* → Moonshot; glm-* → Z.ai; qwen* → Qwen; grok-* → xAI(すべて OpenAI 互換、BYOK)。 |
from at_utility_sdk import openai_client, LOCAL_BASE_URL
client = openai_client(
"sk-at-dev",
base_url=LOCAL_BASE_URL,
upstream_api_key="sk-proj-...",
)
completion = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello"}],
)
クイックスタート(Docker Compose)
cd <repo-root> # e.g. clone of iwasinnam2/ohm
copy .env.example .env
# Edit .env: set OPENAI_API_KEY for local env-fallback; keep OPENAI_BASE_URL=https://api.openai.com/v1
docker compose --profile rust up --build -d
powershell -NoProfile -ExecutionPolicy Bypass -File scripts\release_smoke.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File scripts\railgun_smoke.ps1
クラウド / エージェントネイティブ実行(Docker なし): AGENTS.md を参照。
リリーススモークは、ヘルス、モックミス/ヒット、OpenAI ミス/ヒット(キーがある場合)、Rust プレーンヘッダー、使用量カウンターを検証します。Railgun スモークは、BYOK ヘッダー、seat_plus_meters、チェックアウトエンドポイントの形状を検証します。
Cursor / MCP
ローカル stdio MCP と、ストリーミング可能な HTTP 上のステートレスリモート MCP(MCP 2026-07-28 ステートレスコア)。公開ベース: https://api.withohm.dev/v1。パートナー: docs/LAUNCH_GTM.md · https://www.withohm.dev/design-partners
pip install withohm-mcp
# monorepo dev alternative: pip install -e ".[mcp]"
# stdio (Cursor local attach): set OHM_API_KEY (required). Optional: OHM_UPSTREAM_KEY, OHM_BASE_URL
# Plugin: .cursor-plugin/ + mcp.json — see docs/CURSOR.md
# Remote (stateless streamable HTTP at /mcp, default port 8091):
# OHM_MCP_TRANSPORT=http ohm-mcp (or: ohm-mcp-http)
# Auth is per-request: clients send `Authorization: Bearer sk-at-*`
# (falls back to OHM_API_KEY env). Host allowlist: OHM_MCP_ALLOWED_HOSTS.
ストリーミングとフェイルオーバーの誠実さ
- 非ストリーミング チャット完了: Rust エッジは、ボディを返す前に Python アップストリーム(プライマリ、次にフォールバック URL)を再試行する場合があります。キャッシュ書き込みは、完全なレスポンスが成功した後に行われます。
- ストリーミング チャット完了: 先頭バイト前フェイルオーバーは出荷済みです。 Python プレーンはアップストリームストリームを積極的に開き、最初のバイトの前に失敗した場合は 1 回再試行し、両方の試行が失敗した場合は誠実な HTTP エラー(200 エラーフレームストリームではない)を返します。Rust エッジは接続エラーまたは先頭バイト前の 5xx でフォールバックし、トークンストリームをチャンクごとに転送します(エッジでのバッファリングなし)。最初のバイト後のミッドストリームプロバイダーハンドオフは、クライアントの再接続なしではサポートされていません — 重要なパスでは再接続または非ストリーミングを計画してください。
環境ルール
- ライブシークレットは
.env(gitignored)にのみ存在します。 .env.exampleにはライブの OpenAI または Stripe シークレットを含めてはなりません。.envを変更した後、コンテナを再作成します:docker compose up -d --force-recreate gateway。OPENAI_BASE_URLはhttps://api.openai.com/v1でなければならず、ウェブサイトホストplatform.openai.comではありません。
法的境界(必須)
Web 取り込みは、英国 GDPR/CMA および米国 CFAA/CCPA の規範に基づき、公開のみかつ目的限定です。リポジトリ全体がこのフレームワーク内に留まる必要があります — docs/LEGAL.md を参照。
fetch_web_context が true の場合、クライアントは以下を送信する必要があります:
web_purpose—public_web_retrieval、business_catalog、public_company_info、job_listingsのいずれかweb_compliance_ack: true— 公開のみ、リード収集 / 個人ファイル / ゲート付きアクセスなしを確認terms_ack/dpa_ack: true— docs/legal/ テンプレートをバインド- オプションの
cache_control: "no_store"— 機密プロンプトの Redis 書き込みをスキップ
ライブポリシーを検査: GET /v1/compliance/policy。テンプレート: 利用規約、DPA、アップストリームチェックリストは docs/legal/ の下にあります。
アーキテクチャ
| レイヤー | 役割 |
|---|---|
gateway-rs(:8081) | 公開エッジ: Redis シリアライゼーションプロトコルキャッシュ、プロキシ、プレーンヘッダー |
Python ゲートウェイ(:8080) | OpenAI 互換 API、プロバイダー、レート制限、メータリング、テナント、コンプライアンスゲート |
インジェストワーカー(:8090) | メタ検索 + 公開ページ取得 → fetch_web_context 用の編集済みマークダウン/JSON |
src/at_utility/compliance/ | 目的マトリックス、URL ゲート、robots.txt、PII 編集 |
src/ohm_mcp/ | Cursor MCP アタッチ(ohm_fetch_web、ohm_usage、ohm_chat) |
| Redis リーダー / レプリカ | キャッシュ + RL; レプリカ/リーダーで GET、リーダーで SET — docs/REDIS_MESH.md |
infra/ | Terraform + Kubernetes: 単一リージョン EKS(メッシュはフラグの背後に保持) |
site/ | マーケティング + ドキュメント + セルフサービス /billing |
テナントと請求
ブートストラップキー sk-at-dev はローカルで動作します。セルフサービス: POST /v1/billing/checkout(サイト /billing)。運用: 管理者キーで発行(AT_ADMIN_API_KEYS):
curl.exe -s -X POST http://localhost:8080/v1/admin/tenants `
-H "Authorization: Bearer sk-at-dev" `
-H "Content-Type: application/json" `
-d "{\"plan\":\"payg\",\"label\":\"design-partner-1\",\"terms_ack\":true,\"dpa_ack\":true}"
停止されたテナント(POST /v1/admin/tenants/{id}/status と {"status":"suspended"}、または Stripe キャンセルウェブフック)は HTTP 403 を受け取ります。
メータリングは永続的な日次台帳キーを書き込み、stripe_customer_id が設定されている場合に Stripe Billing Meters と同期します(ohm_web_fetch、ohm_cache_hit、ohm_cache_miss)。
台帳: 顧客はプロバイダーに支払います(BYOK)。顧客は Ohm シート + メーターに支払います。オプション: pip install -e ".[billing]"。
テスト
pip install -e ".[dev,billing]"
pytest -q