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)

CI Golden path (nightly, production)

Одним предложением: 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/v1Rust-граница. Направьте сюда OpenAI-совместимые SDK.
Внутренняя плоскость управленияhttp://localhost:8080Python FastAPI. Rust проксирует сюда при промахе кэша. Не давайте это посторонним.
АутентификацияAuthorization: Bearer <ohm-api-key>Локальный bootstrap-ключ: sk-at-dev (см. .env).
BYOKX-Ohm-Upstream-Key: <provider-key>Требуется при промахе кэша для gpt/claude, если не используются управляемые ключи окружения/предприятия.
Выбор моделиJSON-поле modelmock остаётся локальным; 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_listings
  • web_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