withOhm
официальныйУправляющая плоскость ИИ-трафика (хаос-губернатор): повторное воспроизведение промптов Redis, совместимый веб-приём, реестр организаций SSO, Agent Shell. BYOK-совместимый вход OpenAI. Cursor опционален; MCP — клиент совместимости.
Что можно делать с withOhm MCP?
- Повторное воспроизведение кэшированных запросов — Попросите вашего ИИ отправить идентичный запрос и получить байт-идентичный ответ с
X-AT-Cache: HIT, тарифицируемый как попадание, а не как новый вызов модели. - Проверка криптографических квитанций — Попросите вашего ассистента проверить подписанный JWS
X-Ohm-Receiptна любом ответе с помощьюverify_receipt.py, чтобы доказать, что попадание было реальным, а не заявленным. - Получение публичного веб-контекста — Используйте
ohm_fetch_webдля получения публичных страниц в виде отредактированного markdown/JSON, с применением флагов соответствия, таких какweb_purposeиweb_compliance_ack. - Проверка использования и выставления счетов — Запросите
ohm_usage, чтобы увидеть измеренное потребление по счетчикамohm_cache_hit,ohm_cache_missиohm_web_fetch, а также оценку экономии между арендаторами. - Общение через прокси — Используйте
ohm_chatдля отправки OpenAI-совместимых запросов любому провайдеру (OpenAI, Anthropic, Google и т.д.) через один базовый URL, с BYOK черезX-Ohm-Upstream-Key.
Документация
Ohm (withOhm)
Одним предложением: withOhm — это прокси, который располагается между вашим приложением (или Cursor) и OpenAI/Anthropic и т. д. — он бесплатно воспроизводит байт-идентичные запросы вместо повторной оплаты модели, получает публичный веб-контекст под контролем соответствия требованиям и даёт вам один проверяемый, криптографически подтверждённый счёт вместо нескольких непрозрачных счетов от провайдеров.
Измеримый канал для пустых, повторяющихся выводов: OpenAI-совместимый вход, Redis-воспроизведение промптов, соответствующее требованиям веб-поглощение, аренда с SSO для организаций и корпоративная чистая бухгалтерия. Для предприятий тот же канал является регулятором хаоса для расходов на ИИ (канонический клин: docs/GEM_POSITION.md). Cursor/MCP — опциональные клиенты.
Точные повторные попадания, которые стоят ноль токенов у провайдера. Согласованность между провайдерами. Локальность — чтения на границе Redis. Ценность воспроизведения и аудита. Направьте любой OpenAI-совместимый клиент (или Ohm Agent Shell) на один базовый URL. Держите свои ключи или используйте управляемый пул. Арендуйте инфраструктуру; управляйте хаосом.
Сайт: https://www.withohm.dev · API: https://api.withohm.dev/v1 · Workbench: /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 находится на стадии pre-seed и до привлечения клиентов по замыслу, а не из-за упущений. Полная таблица и правило источников: docs/STATUS.md.
| Факт | Сейчас |
|---|---|
| Версия | 0.1.2 |
| Партнёры по дизайну | 0 из целевых 10 команд (docs/DESIGN_PARTNERS.md — «с нуля») |
| Институциональное финансирование | Нет; до инкорпорации (docs/distribution/INVESTOR_INTRO_TARGETS.md) |
| Регион | Один (us-east-1); без контрактного SLA |
| Автоматизированное тестовое покрытие | 30 файлов, 215+ тестовых функций в tests/ (pytest -q, CI при каждом пуше) |
Инженерная и аудиторская дисциплина (тесты, подписанные квитанции, INSPECTION.md, docs/CARE_AUDIT.md) — вот на что ушло время до привлечения клиентов — читайте цифры стадии и дисциплину вместе, а не по отдельности.
Проверьте сами
Проза дешёва; каждое важное утверждение сопровождается командой, которая его проверяет.
| Утверждение | Проверка |
|---|---|
| Канал работает (обе плоскости) | curl -s https://api.withohm.dev/health && curl -s https://api.withohm.dev/ready |
| Попадания воспроизводятся и тарифицируются как попадания | Отправьте одно и то же тело дважды; второй ответ содержит 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) |
| Путь рецензента работает ежедневно против продакшена | История рабочего процесса Golden path |
Локальный контракт разработчика (стабильный)
| Роль | Адрес | Примечания |
|---|---|---|
| Публичная точка входа клиента | http://localhost:8081/v1 | Rust-граница. Направьте сюда OpenAI-совместимые SDK. |
| Внутренняя плоскость управления | http://localhost:8080 | Python FastAPI. Rust проксирует сюда при промахе кэша. Не давайте это посторонним. |
| Аутентификация | Authorization: Bearer <ohm-api-key> | Локальный bootstrap-ключ: sk-at-dev (см. .env). |
| BYOK | X-Ohm-Upstream-Key: <provider-key> | Требуется при промахе кэша для 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.
Release smoke проверяет здоровье, mock-промах/попадание, OpenAI-промах/попадание (при наличии ключа), заголовок Rust-плоскости и счётчики использования. Railgun smoke проверяет заголовки BYOK, seat_plus_meters и форму конечной точки оформления заказа.
Cursor / MCP
Локальный stdio MCP плюс stateless remote MCP через потоковый HTTP (MCP 2026-07-28 stateless core). Публичная база: 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.
Честность потоковой передачи и отказоустойчивости
- Не потоковые chat completions: Rust-граница может повторить попытку обращения к Python-апстриму (основной, затем запасной URL) перед возвратом тела. Запись в кэш происходит после успешного полного ответа.
- Потоковые chat completions: отказоустойчивость до первого байта реализована. Python-плоскость с нетерпением открывает поток апстрима, повторяет попытку один раз, если он умирает до первого байта, и возвращает честную HTTP-ошибку (не поток с фреймом ошибки 200), если обе попытки не удались; Rust-граница переключается на ошибки соединения или 5xx до первого байта и пересылает поток токенов чанк за чанком (без буферизации на границе). Передача провайдера в середине потока после первого байта без переподключения клиента не поддерживается — планируйте переподключение или не потоковый режим для критических путей.
Правила окружения
- Живые секреты принадлежат только
.env(в gitignore). .env.exampleникогда не должен содержать живой секрет OpenAI или Stripe.- После изменения
.envпересоздайте контейнеры:docker compose up -d --force-recreate gateway. OPENAI_BASE_URLдолжен бытьhttps://api.openai.com/v1, никогда не хостом веб-сайтаplatform.openai.com.
Правовые границы (обязательно)
Веб-поглощение — только публичное и ограниченное по назначению в соответствии с нормами UK GDPR/CMA и US CFAA/CCPA. Весь репозиторий должен оставаться в этих рамках — см. docs/LEGAL.md.
Когда fetch_web_context истинно, клиенты должны отправлять:
web_purpose— одно изpublic_web_retrieval,business_catalog,public_company_info,job_listingsweb_compliance_ack: true— подтверждение только публичного доступа, без сбора лидов / досье / закрытого доступаterms_ack/dpa_ack: true— привязка шаблонов docs/legal/- опционально
cache_control: "no_store"— пропуск записи в Redis для конфиденциальных промптов
Проверьте действующую политику: GET /v1/compliance/policy. Шаблоны: Terms, DPA, чек-лист апстрима в docs/legal/.
Архитектура
| Слой | Роль |
|---|---|
gateway-rs (:8081) | Публичная граница: кэш Redis serialization protocol, прокси, заголовок плоскости |
Python-шлюз (:8080) | OpenAI-совместимый API, провайдеры, лимиты скорости, учёт, аренда, шлюзы соответствия |
Ingest worker (:8090) | Мета-поиск + получение публичных страниц → редактированный markdown/JSON для fetch_web_context |
src/at_utility/compliance/ | Матрица назначений, URL-шлюз, robots.txt, редактирование PII |
src/ohm_mcp/ | Подключение Cursor MCP (ohm_fetch_web, ohm_usage, ohm_chat) |
| Redis leader / replica | Кэш + RL; GET на реплике/читателе, SET на лидере — docs/REDIS_MESH.md |
infra/ | Terraform + Kubernetes: однорегиональный EKS (mesh сохранён за флагами) |
site/ | Маркетинг + документация + self-serve /billing |
Аренда и выставление счетов
Bootstrap-ключ sk-at-dev работает локально. Self-serve: POST /v1/billing/checkout (сайт /billing). Операции: выпуск с помощью admin-ключа (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 cancel webhook) получают HTTP 403.
Учёт записывает долговечные ежедневные ключи бухгалтерской книги и синхронизирует Stripe Billing Meters, когда установлен stripe_customer_id (ohm_web_fetch, ohm_cache_hit, ohm_cache_miss).
Бухгалтерские книги: Клиент платит провайдерам (BYOK). Клиент платит за место Ohm + метры. Опционально: pip install -e ".[billing]".
Тесты
pip install -e ".[dev,billing]"
pytest -q