withOhm

공식

AI traffic control plane (chaos governor): Redis prompt replay, compliant web ingest, SSO org ledger, Agent Shell. BYOK OpenAI-compatible ingress. Cursor optional; MCP is a compatibility client.

withOhm MCP(으)로 무엇을 할 수 있나요?

  • Replay cached prompts — Ask your AI to resend an identical request and get a byte-identical response with X-AT-Cache: HIT, billed as a hit instead of a fresh model call.
  • Verify cryptographic receipts — Have your assistant check the signed X-Ohm-Receipt JWS on any response using verify_receipt.py to prove a hit was real, not asserted.
  • Fetch public web context — Use ohm_fetch_web to retrieve public pages as redacted markdown/JSON, with compliance flags like web_purpose and web_compliance_ack enforced.
  • Check usage and billing — Query ohm_usage to see metered consumption across ohm_cache_hit, ohm_cache_miss, and ohm_web_fetch meters, plus the cross-tenant savings estimate.
  • Chat through the proxy — Use ohm_chat to send OpenAI-compatible requests to any provider (OpenAI, Anthropic, Google, etc.) via one base URL, with BYOK via X-Ohm-Upstream-Key.

문서

Ohm (withOhm)

CI Golden path (nightly, production)

한 문장으로 요약: withOhm은 앱(또는 Cursor)과 OpenAI/Anthropic 등 사이에 위치하는 프록시입니다. 모델에 다시 비용을 지불하는 대신 바이트 단위로 동일한 요청을 무료로 재생(replay)하고, 규정 준수 통제 하에 공개 웹 컨텍스트를 가져오며, 여러 개의 불투명한 제공업체 인보이스 대신 하나의 감사 가능하고 암호학적으로 영수증이 발급되는 청구서를 제공합니다.

낭비되는 반복 추론에 대한 계량화된 파이프: OpenAI 호환 수신(ingress), Redis 프롬프트 재생, 규정 준수 웹 수집(web ingest), SSO 조직 테넌시(tenancy), 기업용 클린 원장(clean ledger). 기업의 경우 동일한 파이프는 AI 지출에 대한 혼돈 통제 장치(chaos governor) 역할을 합니다(표준 설명: docs/GEM_POSITION.md). Cursor/MCP는 선택적 클라이언트입니다.

정확한 재생 히트는 업스트림 토큰 비용이 0입니다. 교차 제공업체 일관성. 지역성(locality) — Redis 엣지 읽기. 재생 및 감사 가치. OpenAI 호환 클라이언트(또는 Ohm Agent Shell)를 하나의 기본 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 — 모든 공개 주장에 적용되는 진실 유지(true-maintenance) 규율입니다. 엔지니어링 대 견인력 비율을 판단하기 전에 먼저 읽어보세요.

라이선스: MIT (LICENSE + NOTICE 참조). 소스는 공개되어 있으며, 호스팅된 withOhm 파이프는 상용 계량형 서비스로 유지됩니다. 패키지/키 이름은 여전히 at-utility / sk-at-* (레거시 AT 접두사)로 표기될 수 있습니다. 제품명은 withOhm입니다.

현재 단계, 솔직하게

과장 없이: withOhm은 설계상 프리시드(pre-seed) 및 프리트랙션(pre-traction) 단계입니다. 누락으로 인한 우연이 아닙니다. 전체 표 및 소싱 규칙: 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
히트가 재생되고 히트로 청구됨동일한 본문을 두 번 전송하세요. 두 번째 응답에는 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 소프트웨어 개발 키트를 여기에 연결하세요.
내부 제어 플레인http://localhost:8080Python FastAPI. Rust는 캐시 미스 시 여기에 프록시합니다. 외부에 공개하지 마세요.
인증Authorization: Bearer <ohm-api-key>로컬 부트스트랩 키: sk-at-dev (.env 참조).
BYOKX-Ohm-Upstream-Key: <provider-key>env/엔터프라이즈 관리 키가 없는 경우 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 참조.

릴리스 스모크 테스트는 헬스 체크, 목(mock) 미스/히트, OpenAI 미스/히트(키가 있는 경우), Rust 플레인 헤더, 사용량 카운터를 검증합니다. Railgun 스모크 테스트는 BYOK 헤더, seat_plus_meters, 체크아웃 엔드포인트 형태를 검증합니다.

Cursor / MCP

로컬 stdio MCP 및 streamable HTTP를 통한 무상태 원격 MCP (MCP 2026-07-28 무상태 코어). 공개 기본 URL: 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.

스트리밍 및 장애 조치 투명성

  • 비스트리밍(non-streaming) 채팅 완성: Rust 엣지는 본문을 반환하기 전에 Python 업스트림(기본 URL, 그다음 폴백 URL)에 재시도할 수 있습니다. 캐시 쓰기는 성공적인 전체 응답 이후에 발생합니다.
  • 스트리밍 채팅 완성: 첫 바이트 이전 장애 조치(pre-first-byte failover)는 출시되었습니다. Python 플레인은 업스트림 스트림을 적극적으로 열고, 첫 바이트 이전에 죽으면 한 번 재시도하며, 두 시도 모두 실패하면 정직한 HTTP 오류(200 오류 프레임 스트림이 아닌)를 반환합니다. Rust 엣지는 연결 오류 또는 첫 바이트 이전 5xx 시 폴백하고 토큰 스트림을 청크 단위로 전달합니다(엣지에서 버퍼링 없음). 첫 바이트 이후의 중간 스트림 제공업체 전환은 클라이언트 재연결 없이는 지원되지 않습니다 — 중요 경로에는 재연결 또는 비스트리밍을 계획하세요.

환경 변수 규칙

  • 라이브 비밀값은 .env 에만 있어야 합니다 (gitignore 처리됨).
  • .env.example 에는 라이브 OpenAI 또는 Stripe 비밀값이 절대 포함되어서는 안 됩니다.
  • .env 변경 후 컨테이너를 재생성하세요: docker compose up -d --force-recreate gateway.
  • OPENAI_BASE_URLhttps://api.openai.com/v1 이어야 하며, 웹사이트 호스트 platform.openai.com 이 아니어야 합니다.

법적 범위 (필수)

웹 수집은 공개 전용이며 UK GDPR/CMA 및 US CFAA/CCPA 규범에 따라 목적이 제한됩니다. 전체 저장소는 이 프레임워크 내에 유지되어야 합니다 — docs/LEGAL.md 참조.

fetch_web_context 가 true인 경우, 클라이언트는 다음을 전송해야 합니다:

  • web_purposepublic_web_retrieval, business_catalog, public_company_info, job_listings 중 하나
  • web_compliance_ack: true — 공개 전용 확인, 리드 수집 / 인물 파일 작성 / 제한적 접근 금지
  • terms_ack / dpa_ack: truedocs/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 리더 / 복제본캐시 + 속도 제한; 복제본/리더에서 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