Skip to content

docs(router): explain why tee_verified is absent on Private models - #422

Open
Ravenyjh wants to merge 1 commit into
mainfrom
raven/verifiable-execution-sealed
Open

Ravenyjh wants to merge 1 commit into
mainfrom
raven/verifiable-execution-sealed

Conversation

@Ravenyjh

@Ravenyjh Ravenyjh commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

Description

A heavy PC user reported tee_verified coming back null on glm-5.3 and filed it as a P0, because the page said a missing value means "verification was not requested".

That isn't what happens. Requests to Private (TeeML) models are sealed by the 0G gateway before they reach the Router, so the Router sees ciphertext and never sets tee_verified, even with verify_tee: true (router backend/pkg/inference/handler.go, SealedRequest skip). The signature check runs in the gateway instead (ZG_GATEWAY_VERIFY_RESPONSES=true in 0g-pc/deploy/phala/docker-compose.yml):

  • non-streaming: a response whose signature fails is never delivered, and the caller gets an error;
  • streaming: the check runs after the last frame, and a failure ends the stream with an SSE error event instead of [DONE] (0g-pc/client/core/stream.go, client/openaiproxy/proxy.go).

Changes:

  • verifiable-execution.md: new Private models section covering the above, the X-0G-E2EE / X-Provider / ZG-Res-Key headers, and why step 4 of independent verification doesn't apply (the provider signs hashes of the encrypted exchange); the "absent" row now lists all three causes; the intro no longer claims every provider runs in a TEE (the standard tier signs nothing).
  • privacy.md: the Auditing bullet pointed Private-model users at verify_tee, which gives them no verdict. It now points to the new section.

Checked on mainnet today: glm-5.3 with verify_tee: true, both streaming and non-streaming, returns 200 with X-0G-E2EE: sealed, X-Provider and ZG-Res-Key, and x_0g_trace has no tee_verified.

Type of Change

  • Documentation update

Testing

  • Build passes with pnpm build
  • New anchors (#private-models, #without-the-sdk, ../routing#trust-modes) resolve in the built HTML
  • cspell: 0 issues

🤖 Generated with Claude Code


This change is Reviewable

Requests to Private (TeeML) models are sealed by the 0G gateway before they
reach the Router, so the Router never sets tee_verified on them, even with
verify_tee: true. The page read this as "verification was not requested",
which led a heavy user to report it as a bug. The check actually runs in the
gateway: a failed signature blocks a non-streaming response, and ends a
stream with an error event.

Document that, the X-0G-E2EE / X-Provider / ZG-Res-Key headers, and the
limit of independent verification for sealed responses (the provider signs
hashes of the encrypted exchange). Also stop claiming every provider runs in
a TEE, and fix the privacy page's Auditing bullet that pointed Private-model
users at verify_tee.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
0g-doc Ready Ready Preview Oct 14, 2026 1:25pm UTC
0g-doc-new Ready Ready Preview Oct 14, 2026 1:25pm UTC

This branch was successfully deployed

2 active deployments
Preview – 0g-doc-new — b32e5b39 Deployed Oct 14, 2026 by vercel[bot]
Preview – 0g-doc — b32e5b39 Deployed Oct 14, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant