dev.cocore.inference.dispatch
Submit an inference request and stream the result back as Server-Sent Events. Authenticates the requester, runs the dispatch core, and emits typed SSE frames. Unlike `submit` (which returns URIs to poll), `dispatch` drives the full request and streams plaintext output chunks until completion. Confidentiality: by default the AppView seals the prompt to the chosen provider on the caller's behalf (`best-effort` tier) — convenient, but the AppView is in the plaintext path. A caller that needs privacy FROM the provider sets `requireConfidential` and supplies a fresh `nonce`; the AppView then runs the verified, enclave-bound ephemeral handshake and either confirms an `attested-confidential` session or fails closed with the `ConfidentialUnavailable` error. For genuine end-to-end confidentiality the prompt is sealed at the client edge (SDK/browser) and the AppView forwards ciphertext only; this method's server-side seal path is always `best-effort`. SSE events: * `meta` — { jobUri, jobCid, authUri, inputCommitment, providerDid, sessionId, tier } * `sessionKey` — { ephemeralPubKey, nonce, attestationCid, signature } (only when `requireConfidential`; the enclave-signed fresh key the requester verifies before sealing) * `chunk` — { seq, text } (plaintext, decrypted) * `complete` — { tokensIn, tokensOut, receiptUri, tier, providerCredit? } * `error` — { reason, code }
Details · procedure
| Kind | procedure |
|---|---|
| Authority | inference.cocore.dev |
| Indexed |
Procedure
procedure · POSTInput
application/jsonminimum: 1
minLength: 1
nonce
stringFresh lowercase-hex freshness challenge (>=16 random bytes) supplied by the caller when `requireConfidential` is set. The provider's enclave signs (ephemeralPubKey || nonce || attestationCid) so the caller can prove the ephemeral seal key was minted for THIS request and is not replayed. Required when requireConfidential is true; ignored otherwise.
minLength: 32maxLength: 64
outputSchema
objectOptional JSON Schema to constrain the model output. When present, the published job record carries this schema and the provider passes it to the inference engine as response_format guided decoding. The schema is public (not encrypted) — it describes the output shape, not the input.
minLength: 1
requireConfidential
booleanDemand the `attested-confidential` tier: the chosen provider must present a verified, signing-key-bound Apple MDA chain, a known-good measured cdHash, the hardened-runtime posture, and a fresh enclave-signed ephemeral session key bound to `nonce`. If no eligible provider is available the request fails closed with `ConfidentialUnavailable` rather than silently downgrading to best-effort. Optional / additive; absent or false means best-effort.
targetProviderDid
string · didPin dispatch to a specific provider DID instead of letting the advisor route.
toolChoice
stringOptional tool choice strategy. 'auto' (default), 'none', or 'required'. Additive.
knownValues: auto | none | required
toolChoiceFunction
stringWhen toolChoice is 'required', force the model to call this specific function. Maps to OpenAI tool_choice object form. Additive.
maxLength: 256
tools
arrayOptional list of tool/function definitions the model may call. Public (not encrypted). The published job record carries this list and the provider passes it to the inference engine.
maxLength: 128
Output
text/event-streamErrors
AuthRequired
The caller is not authenticated.
InvalidRequest
The body failed validation.
ConfidentialUnavailable
requireConfidential was set but no provider could satisfy the attested-confidential tier (no verified+bound MDA chain, cdHash not in the known-good set, posture failed, or the ephemeral session handshake did not verify). The request was NOT downgraded; no prompt was sealed.
Similar lexicons
semantic matchLexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
dev.cocore.inference.submit
procedureSubmit an inference request for the authenticated requester. Builds a (paymentAuthorization, job) pair scoped to the configured exchange, publishes both to the requester's PDS, and returns the job/authorization URIs so the caller can poll for a receipt via `dev.cocore.inference.status`.