The TEE request flow
What happens to one encrypted request, hop by hop, with the exact payload at each step.
This page follows one client.chat() call through the SDK, the Solrouter backend, the Intel TDX enclave, the model's GPU (an H200 GPU enclave for Qwen3.5 122B, a Nosana node for the smaller models), and back. Use the step list to walk the map. Each step names its payload and source file.
Select a node to see what it holds and what it sees.
GET /tee/public-key -> {publicKey, publicKeySha256, algorithm, teeType}. Cached per process.In words
GET /tee/public-keyreturns{publicKey, publicKeySha256, algorithm, teeType}. The SDK caches it for the life of the process.- The SDK makes an ephemeral X25519 keypair and derives the shared secret with the enclave key.
- RescueCipher encrypts the prompt in packed-31 form. The bundle is
{ciphertext, nonce, publicKey, version: '2.0-packed31'}. POST /tee/processwith a Bearer key. What leaves the machine: the ciphertext bundle plus, in plaintext, the API key, model id,chatId, and the optionalsystemPrompt,useRAG,ragCollection,useLiveSearch.- The backend forwards
{encryptedPrompt, model, privacyAttestationId}unchanged. - The CVM derives the shared secret with its X25519 private key and decrypts.
- The CVM calls the model's endpoint at
/v1/chat/completionswith the plaintext prompt: the H200 GPU enclave for Qwen3.5 122B (plaintext exists only inside GPU-encrypted memory there), or the configured Nosana endpoint for the smaller models (HTTPS per the documented node URL, not re-verified). - The CVM encrypts the reply to your key, signs the
SOLR-ATTEST-v2tuple, and requests a tappd quote overreportData = sha256(x25519 || ed25519), which tappd writes into the quote assha512("app-data:" || reportData). - The backend commits the compressed receipt and returns
{success, encryptedResponse, attestation, encryptionProof, requestId, metadata, backendRole: 'BLIND_RELAY', onchainAttestation, privacyProof}. - The SDK decrypts
encryptedResponsewith the session private key.
The short picture
In words
- Your device encrypts. The backend relays ciphertext. The enclave decrypts. Qwen3.5 122B runs inside an H200 GPU enclave; the smaller models run in plaintext on a Nosana node. The reply returns encrypted.
Key custody
- Your device: an ephemeral X25519 private key per session. Never sent.
- Solrouter backend: no key on this path.
- Enclave: an X25519 sealing key and an ed25519 signing key, generated at boot and never exported.
- H200 GPU enclave (Qwen3.5 122B): a vLLM API key sealed on both CVMs, so only the enclave can call it. Its host reads nothing.
- Nosana node (smaller models): no key. It receives plaintext from the enclave.
What is a TEE?
A TEE is a sealed part of a computer that the cloud operator cannot look into, and this page explains what that means for your prompt.
Encryption
Solrouter encrypts prompts on your device with Arcium RescueCipher and X25519 key exchange. Only an Intel TDX enclave can decrypt them. Solrouter's backend never sees plaintext.