@arnilo/prism-provider-openai
v0.3.1
Published
OpenAI provider package for Prism.
Readme
@arnilo/prism-provider-openai
OpenAI provider package for Prism.
import { createOpenAIProviderPackage, listOpenAIModels } from "@arnilo/prism-provider-openai";
const models = await listOpenAIModels({ apiKey: "fake-openai-key" });
api.registerProviderPackage(createOpenAIProviderPackage({ apiKey: "fake-openai-key", models }));Exports:
createOpenAIProviderPackage({ models?, codexModels?, ... })createOpenAIResponsesProvider()createOpenAIRealtimeSession({ model, ownerId, apiKey?, webSocket?, caps?, redactor?, signal? })createOpenAICodexProvider()listOpenAIModels(),mapOpenAIModel(),defineOpenAIModel()openAIModels,openAICodexModelscreateOpenAICodexOAuthProvider(),openAICodexOAuthProvider
Security defaults:
- No network calls during import, setup, build, or default tests.
- No automatic environment, file, keychain, or shell credential lookup.
- API keys/access tokens are resolved per request from caller-supplied values or resolvers.
createOpenAICodexOAuthProvider()is Prism's only first-party subscription OAuth flow in 0.0.12; hosts explicitly invoke login and own optional storage. - Discovery errors redact API keys via
readBoundedResponseText+redactSecrets. - Codex OAuth device-code login polls with server
interval/expires_in, honorsslow_down, and acceptsOAuthLoginCallbacks.signalfor abort. - Live tests must stay opt-in behind
PRISM_LIVE_PROVIDER_TESTS=1plus fake-safe provider-specific env names.
Cache / reasoning / discovery:
prompt_cache_keyis sanitized + clamped to 64 chars fromcacheKey(orsessionId).prompt_cache_retentiononly emits"24h"forcacheRetention: "long"when the model declarescache.longRetention;"short"/"none"omit the field.Usage.cacheReadTokensis mapped from OpenAIinput_tokens_details.cached_tokens.reasoningmerges model + per-turncompat.reasoning(official Responses shape).listOpenAIModelsis caller-gated; setup never fetches.- Provider-owned headers (
content-type,authorization,x-client-request-id) win over caller headers. - Responses provider-hosted tools emit
tool_callwithauthority: "provider-hosted"; Prism records but never dispatches/replays them. Incomplete Responses streams self-resume with an opaque ≤4 KiBprevious_response_idcursor for at most 8 hops. - Realtime sessions require a stable
ownerId, use WebSocketAuthorization/OpenAI-Safety-Identifierheaders (never query credentials), bind tosession.created, and fail closed on disconnect or audio/byte/wall-time caps.
