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-ReceiptJWS on any response usingverify_receipt.pyto prove a hit was real, not asserted. - Fetch public web context — Use
ohm_fetch_webto retrieve public pages as redacted markdown/JSON, with compliance flags likeweb_purposeandweb_compliance_ackenforced. - Check usage and billing — Query
ohm_usageto see metered consumption acrossohm_cache_hit,ohm_cache_miss, andohm_web_fetchmeters, plus the cross-tenant savings estimate. - Chat through the proxy — Use
ohm_chatto send OpenAI-compatible requests to any provider (OpenAI, Anthropic, Google, etc.) via one base URL, with BYOK viaX-Ohm-Upstream-Key.
문서
Ohm (withOhm)
한 문장으로 요약: 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/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 참조.
릴리스 스모크 테스트는 헬스 체크, 목(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_URL는https://api.openai.com/v1이어야 하며, 웹사이트 호스트platform.openai.com이 아니어야 합니다.
법적 범위 (필수)
웹 수집은 공개 전용이며 UK GDPR/CMA 및 US 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 리더 / 복제본 | 캐시 + 속도 제한; 복제본/리더에서 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