Buckets:
| import { AuthOptions, type ProviderAuthOption } from "../route/auth-options" | |
| import type { Route, RouteDefaultsInput } from "../route/client" | |
| import { ProviderID, type ModelID } from "../schema" | |
| import * as OpenAIChat from "../protocols/openai-chat" | |
| import * as OpenAIResponses from "../protocols/openai-responses" | |
| import { withOpenAIOptions, type OpenAIProviderOptionsInput } from "./openai-options" | |
| export type { OpenAIOptionsInput, OpenAIResponseIncludable } from "./openai-options" | |
| export const id = ProviderID.make("openai") | |
| export const routes = [OpenAIResponses.route, OpenAIResponses.webSocketRoute, OpenAIChat.route] | |
| // This provider facade wraps the lower-level Responses and Chat model factories | |
| // with OpenAI-specific conveniences: typed options, API-key sugar, env fallback, | |
| // and default option normalization. | |
| export type Config = RouteDefaultsInput & | |
| ProviderAuthOption<"optional"> & { | |
| readonly baseURL?: string | |
| readonly queryParams?: Record<string, string> | |
| readonly providerOptions?: OpenAIProviderOptionsInput | |
| } | |
| const auth = (options: ProviderAuthOption<"optional">) => AuthOptions.bearer(options, "OPENAI_API_KEY") | |
| const defaults = (input: Config) => { | |
| const { apiKey: _, auth: _auth, baseURL: _baseURL, queryParams: _queryParams, ...rest } = input | |
| return rest | |
| } | |
| const configuredRoute = <Body, Prepared>(route: Route<Body, Prepared>, input: Config) => | |
| route.with({ | |
| auth: auth(input), | |
| endpoint: { baseURL: input.baseURL, query: input.queryParams }, | |
| }) | |
| export const configure = (input: Config = {}) => { | |
| const responsesRoute = configuredRoute(OpenAIResponses.route, input) | |
| const responsesWebSocketRoute = configuredRoute(OpenAIResponses.webSocketRoute, input) | |
| const chatRoute = configuredRoute(OpenAIChat.route, input) | |
| const modelDefaults = defaults(input) | |
| const responses = (id: string | ModelID) => | |
| responsesRoute.with(withOpenAIOptions(id, modelDefaults, { textVerbosity: true })).model({ id }) | |
| const responsesWebSocket = (id: string | ModelID) => | |
| responsesWebSocketRoute.with(withOpenAIOptions(id, modelDefaults, { textVerbosity: true })).model({ id }) | |
| const chat = (id: string | ModelID) => chatRoute.with(withOpenAIOptions(id, modelDefaults)).model({ id }) | |
| return { | |
| id, | |
| model: responses, | |
| responses, | |
| responsesWebSocket, | |
| chat, | |
| configure, | |
| } | |
| } | |
| export const provider = configure() | |
| export const model = provider.model | |
| export const responses = provider.responses | |
| export const responsesWebSocket = provider.responsesWebSocket | |
| export const chat = provider.chat | |
Xet Storage Details
- Size:
- 2.57 kB
- Xet hash:
- 43031f1ae8583e0e82a268e3b4913edbe2b29aa2c9fe08ef905617632b6c3090
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.