withOhm

ทางการ

AI ตัวควบคุมการจราจร (chaos governor): Redis prompt replay, การรับข้อมูลเว็บที่ปฏิบัติตามข้อกำหนด, SSO org ledger, Agent Shell. BYOK รองรับการเชื่อมต่อแบบ OpenAI-compatible. Cursor เป็นทางเลือก; MCP เป็นไคลเอนต์ที่เข้ากันได้

คุณทำอะไรได้บ้างด้วย withOhm MCP?

  • เล่นซ้ำพรอมต์ที่แคชไว้ — ขอให้ AI ของคุณส่งคำขอที่เหมือนกันอีกครั้งและได้รับการตอบกลับที่เหมือนกันทุกไบต์ด้วย X-AT-Cache: HIT คิดค่าบริการเป็น hit แทนการเรียกโมเดลใหม่
  • ตรวจสอบใบรับรองเข้ารหัส — ให้ผู้ช่วยของคุณตรวจสอบ JWS ที่ลงนาม X-Ohm-Receipt ในการตอบกลับใดๆ โดยใช้ verify_receipt.py เพื่อพิสูจน์ว่า hit นั้นจริง ไม่ใช่แค่การอ้าง
  • ดึงข้อมูลบริบทเว็บสาธารณะ — ใช้ 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 ฯลฯ) ผ่าน base URL เดียว พร้อม BYOK ผ่าน X-Ohm-Upstream-Key

เอกสาร

Ohm (withOhm)

CI Golden path (nightly, production)

ในหนึ่งประโยค: withOhm คือพร็อกซีที่อยู่ระหว่างแอปของคุณ (หรือ Cursor) กับ OpenAI/Anthropic/ฯลฯ — มันเล่นซ้ำคำขอที่เหมือนกันแบบไบต์ต่อไบต์ได้ฟรี แทนการจ่ายค่าโมเดลใหม่ ดึงข้อมูลเว็บสาธารณะภายใต้การควบคุมการปฏิบัติตามข้อกำหนด และให้ใบแจ้งหนี้เดียวที่ตรวจสอบได้และมีใบรับรองเข้ารหัส แทนที่ใบแจ้งหนี้ของผู้ให้บริการหลายใบที่ไม่โปร่งใส

ท่อที่วัดค่าใช้จ่ายสำหรับการอนุมานซ้ำที่สิ้นเปลือง: ทางเข้าแบบ OpenAI-compatible, Redis prompt replay, การดึงข้อมูลเว็บที่ปฏิบัติตามข้อกำหนด, การเช่าพื้นที่องค์กรแบบ SSO และบัญชีแยกประเภทที่สะอาดสำหรับองค์กร สำหรับองค์กร ท่อเดียวกันนี้คือ ผู้ควบคุมความวุ่นวาย สำหรับการใช้จ่าย AI (wedge หลัก: docs/GEM_POSITION.md) Cursor/MCP เป็นลูกค้าที่เป็นตัวเลือก

การเล่นซ้ำแบบตรงเป๊ะที่ไม่มีค่าใช้จ่าย token ต้นทาง ความสอดคล้องข้ามผู้ให้บริการ ความใกล้ชิด — การอ่านจาก Redis edge การเล่นซ้ำและคุณค่าการตรวจสอบ ชี้ลูกค้า OpenAI-compatible ใดๆ (หรือ Ohm Agent Shell) ไปที่ base 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 อยู่ในช่วงก่อน seed และก่อน traction โดยการออกแบบ ไม่ใช่เพราะความบกพร่อง ตารางเต็มและกฎการอ้างอิง: 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 ทุกการ push)

ระเบียบวินัยด้านวิศวกรรมและการตรวจสอบ (การทดสอบ, ใบรับรองที่ลงนาม, INSPECTION.md, docs/CARE_AUDIT.md) คือสิ่งที่ใช้เวลาในช่วงก่อน traction — โปรดอ่านตัวเลขระยะและระเบียบวินัยร่วมกัน ไม่ใช่แยกกัน

ตรวจสอบด้วยตัวเอง

คำพูดถูก; ทุกข้อกล่าวอ้างที่มีน้ำหนักมาพร้อมคำสั่งที่ตรวจสอบได้

ข้อกล่าวอ้างการตรวจสอบ
ท่อทำงาน (ทั้งสองระนาบ)curl -s https://api.withohm.dev/health && curl -s https://api.withohm.dev/ready
การเล่นซ้ำถูกนับและเรียกเก็บเป็น hitส่ง body เดียวกันสองครั้ง; การตอบสนองครั้งที่สองมี X-AT-Cache: HIT + X-AT-Billed-USD
การเล่นซ้ำคือ cryptographic ไม่ใช่การยืนยันการตอบสนองของ hit มี 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 — สิ่งที่เราจะไม่ทำ พร้อม endpoint ที่พิสูจน์แต่ละรายการ
ตัวนับการประหยัดข้ามผู้เช่าcurl -s https://api.withohm.dev/v1/public/stats (เสมอ estimate_only: true)
เส้นทางผู้ตรวจสอบทำงานทุกคืนกับการผลิตประวัติเวิร์กโฟลว์ Golden path

ข้อตกลงนักพัฒนาท้องถิ่น (คงที่)

บทบาทที่อยู่หมายเหตุ
จุดเข้าลูกค้าสาธารณะhttp://localhost:8081/v1Rust edge. ชี้ชุดพัฒนา OpenAI ซอฟต์แวร์ที่นี่
ระนาบควบคุมภายในhttp://localhost:8080Python FastAPI. Rust พร็อกซีไปที่นี่เมื่อ cache miss. อย่าให้กับคนแปลกหน้า
การรับรองความถูกต้องAuthorization: Bearer <ohm-api-key>คีย์ bootstrap ท้องถิ่น: sk-at-dev (ดู .env)
BYOKX-Ohm-Upstream-Key: <provider-key>จำเป็นเมื่อ cache miss สำหรับ gpt/claude เว้นแต่ env/enterprise มีการจัดการคีย์
การเลือกโมเดลฟิลด์ JSON modelmock ยังคงท้องถิ่น; gpt-* / o* → OpenAI; claude-* → Anthropic; gemini-* → Google; deepseek-* → DeepSeek; kimi-* / moonshot-* → Moonshot; glm-* → Z.ai; qwen* → Qwen; grok-* → xAI (ทั้งหมด OpenAI-compatible, 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 miss/hit, OpenAI miss/hit (เมื่อมีคีย์), ส่วนหัวของ Rust plane และตัวนับการใช้งาน Railgun smoke ตรวจสอบส่วนหัว BYOK, seat_plus_meters และรูปร่างของ checkout endpoint

Cursor / MCP

MCP แบบ stdio ท้องถิ่นบวก remote MCP แบบไม่เก็บสถานะ ผ่าน streamable 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.

ความซื่อสัตย์ในการสตรีมและการเฟลโอเวอร์

  • Non-streaming chat completions: Rust edge อาจลอง upstream Python ซ้ำ (URL หลักแล้ว fallback) ก่อนส่งคืน body การเขียนแคชเกิดขึ้นหลังจากการตอบสนองเต็มสำเร็จ
  • Streaming chat completions: เฟลโอเวอร์ก่อนไบต์แรกถูกส่ง ระนาบ Python เปิดสตรีม upstream อย่างกระตือรือร้น ลองอีกครั้งถ้ามันตายก่อนไบต์แรก และส่งคืน HTTP error ที่ซื่อสัตย์ (ไม่ใช่สตรีม error-frame 200) ถ้าทั้งสองครั้งล้มเหลว; Rust edge ฟอลแบ็กเมื่อ connect errors หรือ 5xx ก่อนไบต์แรก และส่งต่อ token stream เป็นชิ้นๆ (ไม่มีการบัฟเฟอร์ที่ edge) การสลับผู้ให้บริการกลางสตรีมหลังไบต์แรกโดยไม่ให้ไคลเอนต์เชื่อมต่อใหม่ ไม่ได้รับการสนับสนุน — วางแผนการเชื่อมต่อใหม่หรือ non-stream สำหรับเส้นทางที่สำคัญ

กฎสภาพแวดล้อม

  • ความลับที่ใช้งานจริงอยู่ใน .env เท่านั้น (gitignored)
  • .env.example ต้องไม่มี OpenAI หรือ Stripe secret ที่ใช้งานจริง
  • หลังจากเปลี่ยน .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 ทั้ง repo ต้องอยู่ในกรอบนี้—ดู docs/LEGAL.md

เมื่อ fetch_web_context เป็น true, ไคลเอนต์ต้องส่ง:

  • web_purpose — หนึ่งใน public_web_retrieval, business_catalog, public_company_info, job_listings
  • web_compliance_ack: true — ยืนยันสาธารณะเท่านั้น, ไม่มีการเก็บ lead / dossier / การเข้าถึงแบบ gated
  • terms_ack / dpa_ack: true — ผูกกับเทมเพลต docs/legal/
  • ตัวเลือก cache_control: "no_store" — ข้ามการเขียน Redis สำหรับพรอมพ์ที่เป็นความลับ

ตรวจสอบนโยบายสด: GET /v1/compliance/policy เทมเพลต: ข้อกำหนด, DPA, รายการตรวจสอบ upstream ภายใต้ docs/legal/

สถาปัตยกรรม

เลเยอร์บทบาท
gateway-rs (:8081)ขอบสาธารณะ: แคช Redis serialization protocol, พร็อกซี, ส่วนหัวของ plane
Python gateway (:8080)API ที่เข้ากันได้กับ OpenAI, ผู้ให้บริการ, อัตราจำกัด, การวัดปริมาณ, การเช่า, ประตูการปฏิบัติตามข้อกำหนด
Ingest worker (:8090)Meta-search + การดึงหน้าเว็บสาธารณะ → markdown/JSON ที่ถูกลบข้อมูลสำหรับ fetch_web_context
src/at_utility/compliance/เมทริกซ์วัตถุประสงค์, URL gate, robots.txt, การลบ PII
src/ohm_mcp/Cursor MCP attach (ohm_fetch_web, ohm_usage, ohm_chat)
Redis leader / replicaแคช + RL; GET บน replica/reader, SET บน leader — docs/REDIS_MESH.md
infra/Terraform + Kubernetes: EKS ภูมิภาคเดียว (mesh เก็บไว้หลัง flags)
site/การตลาด + เอกสาร + /billing แบบบริการตนเอง

การเช่าและการเรียกเก็บเงิน

คีย์ bootstrap sk-at-dev ทำงานในท้องถิ่น บริการตนเอง: POST /v1/billing/checkout (เว็บไซต์ /billing) Ops: ออกด้วยคีย์ผู้ดูแล (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) ลูกค้าจ่ายค่า seat และมิเตอร์ของ Ohm ตัวเลือก: pip install -e ".[billing]"

การทดสอบ

pip install -e ".[dev,billing]"
pytest -q