@anvia/openai 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +10 -3
- package/dist/index.js +36 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -16,12 +16,16 @@ declare class OpenAIAudioGenerationModel implements AudioGenerationModel {
|
|
|
16
16
|
audioGeneration(request: AudioGenerationRequest): Promise<AudioGenerationResponse<unknown>>;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
type OpenAIChatCompletionModelOptions = {
|
|
20
|
+
preserveReasoningContent?: boolean | undefined;
|
|
21
|
+
};
|
|
19
22
|
declare class OpenAIChatCompletionModel implements StreamingCompletionModel {
|
|
20
23
|
private readonly client;
|
|
21
24
|
readonly defaultModel: string;
|
|
25
|
+
private readonly options;
|
|
22
26
|
readonly provider = "openai-chat";
|
|
23
27
|
readonly capabilities: CompletionModelCapabilities;
|
|
24
|
-
constructor(client: OpenAI, defaultModel?: string);
|
|
28
|
+
constructor(client: OpenAI, defaultModel?: string, options?: OpenAIChatCompletionModelOptions);
|
|
25
29
|
completion(request: CompletionRequest): Promise<CompletionResponse>;
|
|
26
30
|
streamCompletion(request: CompletionRequest): AsyncIterable<CompletionStreamEvent>;
|
|
27
31
|
}
|
|
@@ -68,11 +72,13 @@ type OpenAIClientOptions = {
|
|
|
68
72
|
baseUrl?: string | undefined;
|
|
69
73
|
headers?: Record<string, string> | undefined;
|
|
70
74
|
completionApi?: "responses" | "chat" | undefined;
|
|
75
|
+
preserveReasoningContent?: boolean | undefined;
|
|
71
76
|
client?: OpenAI$1 | undefined;
|
|
72
77
|
};
|
|
73
78
|
declare class OpenAIClient implements ModelListingClient {
|
|
74
79
|
readonly client: OpenAI$1;
|
|
75
80
|
private readonly completionApi;
|
|
81
|
+
private readonly chatCompletionOptions;
|
|
76
82
|
constructor(options?: OpenAIClientOptions);
|
|
77
83
|
completionModel(model?: string): StreamingCompletionModel;
|
|
78
84
|
embeddingModel(model?: string, options?: ProviderEmbeddingModelOptions): OpenAIEmbeddingModel;
|
|
@@ -100,6 +106,7 @@ type index_OpenAIAudioGenerationModel = OpenAIAudioGenerationModel;
|
|
|
100
106
|
declare const index_OpenAIAudioGenerationModel: typeof OpenAIAudioGenerationModel;
|
|
101
107
|
type index_OpenAIChatCompletionModel = OpenAIChatCompletionModel;
|
|
102
108
|
declare const index_OpenAIChatCompletionModel: typeof OpenAIChatCompletionModel;
|
|
109
|
+
type index_OpenAIChatCompletionModelOptions = OpenAIChatCompletionModelOptions;
|
|
103
110
|
type index_OpenAIClient = OpenAIClient;
|
|
104
111
|
declare const index_OpenAIClient: typeof OpenAIClient;
|
|
105
112
|
type index_OpenAIClientOptions = OpenAIClientOptions;
|
|
@@ -116,7 +123,7 @@ declare const index_TTS_1: typeof TTS_1;
|
|
|
116
123
|
declare const index_TTS_1_HD: typeof TTS_1_HD;
|
|
117
124
|
declare const index_WHISPER_1: typeof WHISPER_1;
|
|
118
125
|
declare namespace index {
|
|
119
|
-
export { index_DALL_E_2 as DALL_E_2, index_DALL_E_3 as DALL_E_3, index_GPT_IMAGE_1 as GPT_IMAGE_1, index_GPT_IMAGE_2 as GPT_IMAGE_2, index_OpenAIAudioGenerationModel as OpenAIAudioGenerationModel, index_OpenAIChatCompletionModel as OpenAIChatCompletionModel, index_OpenAIClient as OpenAIClient, type index_OpenAIClientOptions as OpenAIClientOptions, index_OpenAIEmbeddingModel as OpenAIEmbeddingModel, index_OpenAIImageGenerationModel as OpenAIImageGenerationModel, index_OpenAIResponsesCompletionModel as OpenAIResponsesCompletionModel, index_OpenAITranscriptionModel as OpenAITranscriptionModel, type index_ProviderEmbeddingModelOptions as ProviderEmbeddingModelOptions, index_TTS_1 as TTS_1, index_TTS_1_HD as TTS_1_HD, index_WHISPER_1 as WHISPER_1 };
|
|
126
|
+
export { index_DALL_E_2 as DALL_E_2, index_DALL_E_3 as DALL_E_3, index_GPT_IMAGE_1 as GPT_IMAGE_1, index_GPT_IMAGE_2 as GPT_IMAGE_2, index_OpenAIAudioGenerationModel as OpenAIAudioGenerationModel, index_OpenAIChatCompletionModel as OpenAIChatCompletionModel, type index_OpenAIChatCompletionModelOptions as OpenAIChatCompletionModelOptions, index_OpenAIClient as OpenAIClient, type index_OpenAIClientOptions as OpenAIClientOptions, index_OpenAIEmbeddingModel as OpenAIEmbeddingModel, index_OpenAIImageGenerationModel as OpenAIImageGenerationModel, index_OpenAIResponsesCompletionModel as OpenAIResponsesCompletionModel, index_OpenAITranscriptionModel as OpenAITranscriptionModel, type index_ProviderEmbeddingModelOptions as ProviderEmbeddingModelOptions, index_TTS_1 as TTS_1, index_TTS_1_HD as TTS_1_HD, index_WHISPER_1 as WHISPER_1 };
|
|
120
127
|
}
|
|
121
128
|
|
|
122
|
-
export { DALL_E_2, DALL_E_3, GPT_IMAGE_1, GPT_IMAGE_2, OpenAIAudioGenerationModel, OpenAIChatCompletionModel, OpenAIClient, type OpenAIClientOptions, OpenAIEmbeddingModel, OpenAIImageGenerationModel, OpenAIResponsesCompletionModel, OpenAITranscriptionModel, type ProviderEmbeddingModelOptions, TTS_1, TTS_1_HD, WHISPER_1, index as openai };
|
|
129
|
+
export { DALL_E_2, DALL_E_3, GPT_IMAGE_1, GPT_IMAGE_2, OpenAIAudioGenerationModel, OpenAIChatCompletionModel, type OpenAIChatCompletionModelOptions, OpenAIClient, type OpenAIClientOptions, OpenAIEmbeddingModel, OpenAIImageGenerationModel, OpenAIResponsesCompletionModel, OpenAITranscriptionModel, type ProviderEmbeddingModelOptions, TTS_1, TTS_1_HD, WHISPER_1, index as openai };
|
package/dist/index.js
CHANGED
|
@@ -110,12 +110,14 @@ function orderedRequestMessages(request, options = {}) {
|
|
|
110
110
|
|
|
111
111
|
// src/openai/chat-completion.ts
|
|
112
112
|
var OpenAIChatCompletionModel = class {
|
|
113
|
-
constructor(client, defaultModel = "openai/gpt-5.2") {
|
|
113
|
+
constructor(client, defaultModel = "openai/gpt-5.2", options = {}) {
|
|
114
114
|
this.client = client;
|
|
115
115
|
this.defaultModel = defaultModel;
|
|
116
|
+
this.options = options;
|
|
116
117
|
}
|
|
117
118
|
client;
|
|
118
119
|
defaultModel;
|
|
120
|
+
options;
|
|
119
121
|
provider = "openai-chat";
|
|
120
122
|
capabilities = {
|
|
121
123
|
streaming: true,
|
|
@@ -128,14 +130,14 @@ var OpenAIChatCompletionModel = class {
|
|
|
128
130
|
};
|
|
129
131
|
async completion(request) {
|
|
130
132
|
assertCompletionRequestSupported(this, request);
|
|
131
|
-
const params = toOpenAIChatCompletionParams(this.defaultModel, request);
|
|
133
|
+
const params = toOpenAIChatCompletionParams(this.defaultModel, request, this.options);
|
|
132
134
|
const response = await this.client.chat.completions.create(params);
|
|
133
135
|
return fromOpenAIChatCompletionResponse(response);
|
|
134
136
|
}
|
|
135
137
|
async *streamCompletion(request) {
|
|
136
138
|
assertCompletionRequestSupported(this, request, { streaming: true });
|
|
137
139
|
const params = {
|
|
138
|
-
...toOpenAIChatCompletionParams(this.defaultModel, request),
|
|
140
|
+
...toOpenAIChatCompletionParams(this.defaultModel, request, this.options),
|
|
139
141
|
stream: true
|
|
140
142
|
};
|
|
141
143
|
const streamOptions = isPlainObject(params.stream_options) ? params.stream_options : {};
|
|
@@ -148,10 +150,12 @@ var OpenAIChatCompletionModel = class {
|
|
|
148
150
|
}
|
|
149
151
|
}
|
|
150
152
|
};
|
|
151
|
-
function toOpenAIChatCompletionParams(defaultModel, request) {
|
|
153
|
+
function toOpenAIChatCompletionParams(defaultModel, request, options = {}) {
|
|
152
154
|
const params = {
|
|
153
155
|
model: request.model ?? defaultModel,
|
|
154
|
-
messages: requestMessages(request).flatMap(
|
|
156
|
+
messages: requestMessages(request).flatMap(
|
|
157
|
+
(message) => messageToChatMessages(message, options)
|
|
158
|
+
)
|
|
155
159
|
};
|
|
156
160
|
if (request.tools.length > 0) {
|
|
157
161
|
params.tools = request.tools.map(toolDefinitionToOpenAIChatCompletion);
|
|
@@ -189,6 +193,10 @@ function fromOpenAIChatCompletionResponse(response) {
|
|
|
189
193
|
const firstChoice = choices.find(isPlainObject);
|
|
190
194
|
const message = isPlainObject(firstChoice?.message) ? firstChoice.message : {};
|
|
191
195
|
const choice = [];
|
|
196
|
+
const reasoning = stringFrom(message.reasoning_content) ?? stringFrom(message.reasoning);
|
|
197
|
+
if (reasoning !== void 0 && reasoning.length > 0) {
|
|
198
|
+
choice.push(AssistantContent.reasoning(reasoning));
|
|
199
|
+
}
|
|
192
200
|
if (typeof message.content === "string" && message.content.length > 0) {
|
|
193
201
|
choice.push(AssistantContent.text(message.content));
|
|
194
202
|
}
|
|
@@ -275,7 +283,7 @@ function usageFromOpenAIChatCompletion(usage) {
|
|
|
275
283
|
cachedInputTokens: numberFrom(promptDetails.cached_tokens)
|
|
276
284
|
};
|
|
277
285
|
}
|
|
278
|
-
function messageToChatMessages(message) {
|
|
286
|
+
function messageToChatMessages(message, options = {}) {
|
|
279
287
|
if (message.role === "system") {
|
|
280
288
|
return [{ role: "system", content: message.content }];
|
|
281
289
|
}
|
|
@@ -295,11 +303,14 @@ function messageToChatMessages(message) {
|
|
|
295
303
|
return message.content.map(toolContentToChatMessage);
|
|
296
304
|
}
|
|
297
305
|
const text = message.content.flatMap((content) => content.type === "text" ? [content.text] : []).join("\n");
|
|
306
|
+
const reasoning = message.content.flatMap(
|
|
307
|
+
(content) => content.type === "reasoning" && content.text.length > 0 ? [content.text] : []
|
|
308
|
+
).join("\n");
|
|
298
309
|
if (message.content.some((content) => content.type === "image")) {
|
|
299
310
|
throw new Error("OpenAI chat completions does not support image content in assistant history");
|
|
300
311
|
}
|
|
301
312
|
const toolCalls = message.content.filter((content) => content.type === "tool_call").map((content) => ({
|
|
302
|
-
id: content.id,
|
|
313
|
+
id: content.callId ?? content.id,
|
|
303
314
|
type: "function",
|
|
304
315
|
function: {
|
|
305
316
|
name: content.function.name,
|
|
@@ -312,6 +323,9 @@ function messageToChatMessages(message) {
|
|
|
312
323
|
if (text.length > 0) {
|
|
313
324
|
chatMessage.content = text;
|
|
314
325
|
}
|
|
326
|
+
if (options.preserveReasoningContent === true && reasoning.length > 0) {
|
|
327
|
+
chatMessage.reasoning_content = reasoning;
|
|
328
|
+
}
|
|
315
329
|
if (toolCalls.length > 0) {
|
|
316
330
|
chatMessage.tool_calls = toolCalls;
|
|
317
331
|
}
|
|
@@ -922,8 +936,12 @@ function transcriptionText(response) {
|
|
|
922
936
|
var OpenAIClient = class {
|
|
923
937
|
client;
|
|
924
938
|
completionApi;
|
|
939
|
+
chatCompletionOptions;
|
|
925
940
|
constructor(options = {}) {
|
|
926
941
|
this.completionApi = options.completionApi ?? (options.baseUrl === void 0 ? "responses" : "chat");
|
|
942
|
+
this.chatCompletionOptions = {
|
|
943
|
+
preserveReasoningContent: options.preserveReasoningContent ?? isMoonshotBaseUrl(options.baseUrl)
|
|
944
|
+
};
|
|
927
945
|
this.client = options.client ?? new OpenAI({
|
|
928
946
|
apiKey: requireApiKey(options.apiKey),
|
|
929
947
|
baseURL: options.baseUrl,
|
|
@@ -931,7 +949,7 @@ var OpenAIClient = class {
|
|
|
931
949
|
});
|
|
932
950
|
}
|
|
933
951
|
completionModel(model = "gpt-5") {
|
|
934
|
-
return this.completionApi === "chat" ? new OpenAIChatCompletionModel(this.client, model) : new OpenAIResponsesCompletionModel(this.client, model);
|
|
952
|
+
return this.completionApi === "chat" ? new OpenAIChatCompletionModel(this.client, model, this.chatCompletionOptions) : new OpenAIResponsesCompletionModel(this.client, model);
|
|
935
953
|
}
|
|
936
954
|
embeddingModel(model = "text-embedding-3-small", options = {}) {
|
|
937
955
|
return new OpenAIEmbeddingModel(this.client, model, options);
|
|
@@ -961,6 +979,16 @@ function requireApiKey(apiKey) {
|
|
|
961
979
|
}
|
|
962
980
|
return apiKey;
|
|
963
981
|
}
|
|
982
|
+
function isMoonshotBaseUrl(baseUrl) {
|
|
983
|
+
if (baseUrl === void 0) {
|
|
984
|
+
return false;
|
|
985
|
+
}
|
|
986
|
+
try {
|
|
987
|
+
return new URL(baseUrl).hostname.endsWith("moonshot.ai");
|
|
988
|
+
} catch {
|
|
989
|
+
return baseUrl.includes("moonshot.ai");
|
|
990
|
+
}
|
|
991
|
+
}
|
|
964
992
|
async function collectModelsFromResponse(response) {
|
|
965
993
|
if (isAsyncIterable(response)) {
|
|
966
994
|
const models = [];
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/openai/index.ts","../src/utils.ts","../src/openai/audio-generation.ts","../src/openai/chat-completion.ts","../src/request-messages.ts","../src/openai/client.ts","../src/openai/embedding.ts","../src/openai/image-generation.ts","../src/openai/responses.ts","../src/openai/transcription.ts"],"sourcesContent":["export { OpenAIAudioGenerationModel, TTS_1, TTS_1_HD } from \"./audio-generation\";\nexport { OpenAIChatCompletionModel } from \"./chat-completion\";\nexport { OpenAIClient, type OpenAIClientOptions } from \"./client\";\nexport { OpenAIEmbeddingModel, type ProviderEmbeddingModelOptions } from \"./embedding\";\nexport {\n DALL_E_2,\n DALL_E_3,\n GPT_IMAGE_1,\n GPT_IMAGE_2,\n OpenAIImageGenerationModel,\n} from \"./image-generation\";\nexport { OpenAIResponsesCompletionModel } from \"./responses\";\nexport { OpenAITranscriptionModel, WHISPER_1 } from \"./transcription\";\n","import type { JsonObject, JsonValue } from \"@anvia/core/completion\";\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function numberFrom(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n\nexport function stringFrom(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nexport function parseJsonValue(text: string): JsonValue {\n try {\n return JSON.parse(text) as JsonValue;\n } catch {\n return text;\n }\n}\n\nexport function schemaName(schema: JsonObject): string {\n return typeof schema.title === \"string\" ? schema.title : \"response_schema\";\n}\n","import type {\n AudioGenerationModel,\n AudioGenerationRequest,\n AudioGenerationResponse,\n} from \"@anvia/core/audio-generation\";\nimport type { OpenAI } from \"openai\";\nimport { isPlainObject } from \"../utils\";\n\nexport const TTS_1 = \"tts-1\";\nexport const TTS_1_HD = \"tts-1-hd\";\n\nexport class OpenAIAudioGenerationModel implements AudioGenerationModel {\n readonly provider = \"openai\";\n\n constructor(\n private readonly client: OpenAI,\n readonly defaultModel = TTS_1,\n ) {}\n\n async audioGeneration(\n request: AudioGenerationRequest,\n ): Promise<AudioGenerationResponse<unknown>> {\n const params: Record<string, unknown> = {\n model: this.defaultModel,\n input: request.text,\n voice: request.voice,\n speed: request.speed,\n };\n\n if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n const response = await this.client.audio.speech.create(params as never);\n return {\n audio: new Uint8Array(await response.arrayBuffer()),\n mediaType: mediaTypeFromFormat(params.response_format),\n rawResponse: response,\n };\n }\n}\n\nfunction mediaTypeFromFormat(format: unknown): string {\n if (format === \"wav\") return \"audio/wav\";\n if (format === \"flac\") return \"audio/flac\";\n if (format === \"opus\") return \"audio/opus\";\n if (format === \"aac\") return \"audio/aac\";\n if (format === \"pcm\") return \"audio/pcm\";\n return \"audio/mpeg\";\n}\n","import {\n AssistantContent,\n type AssistantContent as AssistantContentType,\n assertCompletionRequestSupported,\n type CompletionModelCapabilities,\n type CompletionRequest,\n type CompletionResponse,\n type CompletionStreamEvent,\n type DocumentContent,\n type ImageContent,\n type Message as MessageType,\n type StreamingCompletionModel,\n type ToolChoice,\n type ToolContent,\n type ToolDefinition,\n Usage,\n type UserContent,\n} from \"@anvia/core/completion\";\nimport type { OpenAI } from \"openai\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport { isPlainObject, numberFrom, parseJsonValue, schemaName, stringFrom } from \"../utils\";\n\ntype ChatCompletionParams = Record<string, unknown>;\ntype ChatMessage = Record<string, unknown>;\n\nexport class OpenAIChatCompletionModel implements StreamingCompletionModel {\n readonly provider = \"openai-chat\";\n readonly capabilities: CompletionModelCapabilities = {\n streaming: true,\n tools: true,\n toolChoice: true,\n imageInput: true,\n documentInput: false,\n outputSchema: true,\n reasoning: true,\n };\n\n constructor(\n private readonly client: OpenAI,\n readonly defaultModel = \"openai/gpt-5.2\",\n ) {}\n\n async completion(request: CompletionRequest): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this, request);\n const params = toOpenAIChatCompletionParams(this.defaultModel, request);\n const response = await this.client.chat.completions.create(params as never);\n return fromOpenAIChatCompletionResponse(response);\n }\n\n async *streamCompletion(request: CompletionRequest): AsyncIterable<CompletionStreamEvent> {\n assertCompletionRequestSupported(this, request, { streaming: true });\n const params: ChatCompletionParams = {\n ...toOpenAIChatCompletionParams(this.defaultModel, request),\n stream: true,\n };\n const streamOptions = isPlainObject(params.stream_options) ? params.stream_options : {};\n params.stream_options = { ...streamOptions, include_usage: true };\n const stream = await this.client.chat.completions.create(params as never);\n for await (const chunk of stream as unknown as AsyncIterable<unknown>) {\n for (const event of fromOpenAIChatCompletionStreamChunk(chunk)) {\n yield event;\n }\n }\n }\n}\n\nexport function toOpenAIChatCompletionParams(\n defaultModel: string,\n request: CompletionRequest,\n): ChatCompletionParams {\n const params: ChatCompletionParams = {\n model: request.model ?? defaultModel,\n messages: requestMessages(request).flatMap(messageToChatMessages),\n };\n\n if (request.tools.length > 0) {\n params.tools = request.tools.map(toolDefinitionToOpenAIChatCompletion);\n }\n\n if (request.temperature !== undefined) {\n params.temperature = request.temperature;\n }\n\n if (request.maxTokens !== undefined) {\n params.max_tokens = request.maxTokens;\n }\n\n if (request.toolChoice !== undefined) {\n params.tool_choice = toolChoiceToOpenAIChatCompletion(request.toolChoice);\n }\n\n if (request.outputSchema !== undefined) {\n params.response_format = {\n type: \"json_schema\",\n json_schema: {\n name: schemaName(request.outputSchema),\n strict: true,\n schema: request.outputSchema,\n },\n };\n }\n\n if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n return params;\n}\n\nfunction requestMessages(request: CompletionRequest): MessageType[] {\n return orderedRequestMessages(request, { includeInstructionsAsSystem: true });\n}\n\nexport function fromOpenAIChatCompletionResponse(response: unknown): CompletionResponse {\n const raw = response as Record<string, unknown>;\n const choices = Array.isArray(raw.choices) ? raw.choices : [];\n const firstChoice = choices.find(isPlainObject);\n const message = isPlainObject(firstChoice?.message) ? firstChoice.message : {};\n const choice: AssistantContentType[] = [];\n\n if (typeof message.content === \"string\" && message.content.length > 0) {\n choice.push(AssistantContent.text(message.content));\n }\n\n const toolCalls = Array.isArray(message.tool_calls) ? message.tool_calls : [];\n for (const toolCall of toolCalls) {\n if (!isPlainObject(toolCall)) {\n continue;\n }\n\n const fn = isPlainObject(toolCall.function) ? toolCall.function : {};\n const id = typeof toolCall.id === \"string\" ? toolCall.id : crypto.randomUUID();\n const name = typeof fn.name === \"string\" ? fn.name : \"\";\n const argsText = typeof fn.arguments === \"string\" ? fn.arguments : \"{}\";\n choice.push(AssistantContent.toolCall(id, name, parseJsonValue(argsText)));\n }\n\n const result: CompletionResponse = {\n choice,\n usage: usageFromOpenAIChatCompletion(raw.usage),\n rawResponse: response,\n };\n\n if (typeof raw.id === \"string\") {\n result.messageId = raw.id;\n }\n\n return result;\n}\n\nexport function fromOpenAIChatCompletionStreamChunk(chunk: unknown): CompletionStreamEvent[] {\n if (!isPlainObject(chunk)) {\n return [];\n }\n\n const events: CompletionStreamEvent[] = [];\n const choices = Array.isArray(chunk.choices) ? chunk.choices : [];\n for (const choice of choices) {\n if (!isPlainObject(choice) || !isPlainObject(choice.delta)) {\n continue;\n }\n\n const delta = choice.delta;\n if (typeof delta.content === \"string\" && delta.content.length > 0) {\n events.push({ type: \"text_delta\", delta: delta.content });\n }\n\n const reasoning = stringFrom(delta.reasoning) ?? stringFrom(delta.reasoning_content);\n if (reasoning !== undefined && reasoning.length > 0) {\n events.push({ type: \"reasoning_delta\", delta: reasoning });\n }\n\n const toolCalls = Array.isArray(delta.tool_calls) ? delta.tool_calls : [];\n for (const toolCall of toolCalls) {\n if (!isPlainObject(toolCall)) {\n continue;\n }\n const fn = isPlainObject(toolCall.function) ? toolCall.function : {};\n const index = numberFrom(toolCall.index);\n const id = `tool_${index}`;\n events.push(\n toolCallDelta(id, {\n callId: stringFrom(toolCall.id),\n name: stringFrom(fn.name),\n argumentsDelta: stringFrom(fn.arguments),\n }),\n );\n }\n }\n\n if (typeof chunk.id === \"string\") {\n events.push({ type: \"message_id\", id: chunk.id });\n }\n\n if (isPlainObject(chunk.usage)) {\n const response: CompletionResponse = {\n choice: [],\n usage: usageFromOpenAIChatCompletion(chunk.usage),\n rawResponse: chunk,\n };\n if (typeof chunk.id === \"string\") {\n response.messageId = chunk.id;\n }\n events.push({ type: \"final\", response });\n }\n\n return events;\n}\n\nfunction usageFromOpenAIChatCompletion(usage: unknown): Usage {\n const usageSource = isPlainObject(usage) ? usage : {};\n const promptDetails = isPlainObject(usageSource.prompt_tokens_details)\n ? usageSource.prompt_tokens_details\n : {};\n\n return {\n ...Usage.empty(),\n inputTokens: numberFrom(usageSource.prompt_tokens),\n outputTokens: numberFrom(usageSource.completion_tokens),\n totalTokens: numberFrom(usageSource.total_tokens),\n cachedInputTokens: numberFrom(promptDetails.cached_tokens),\n };\n}\n\nfunction messageToChatMessages(message: MessageType): ChatMessage[] {\n if (message.role === \"system\") {\n return [{ role: \"system\", content: message.content }];\n }\n\n if (message.role === \"user\") {\n const contentParts: ChatMessage[] = [];\n\n for (const content of message.content) {\n contentParts.push(...userContentToChatParts(content));\n }\n\n if (contentParts.length === 1 && contentParts[0]?.type === \"text\") {\n return [{ role: \"user\", content: contentParts[0].text }];\n } else if (contentParts.length > 0) {\n return [{ role: \"user\", content: contentParts }];\n }\n\n return [];\n }\n\n if (message.role === \"tool\") {\n return message.content.map(toolContentToChatMessage);\n }\n\n const text = message.content\n .flatMap((content) => (content.type === \"text\" ? [content.text] : []))\n .join(\"\\n\");\n if (message.content.some((content) => content.type === \"image\")) {\n throw new Error(\"OpenAI chat completions does not support image content in assistant history\");\n }\n const toolCalls = message.content\n .filter((content) => content.type === \"tool_call\")\n .map((content) => ({\n id: content.id,\n type: \"function\",\n function: {\n name: content.function.name,\n arguments: JSON.stringify(content.function.arguments ?? {}),\n },\n }));\n\n const chatMessage: ChatMessage = {\n role: \"assistant\",\n };\n if (text.length > 0) {\n chatMessage.content = text;\n }\n if (toolCalls.length > 0) {\n chatMessage.tool_calls = toolCalls;\n }\n\n return [chatMessage];\n}\n\nfunction toolContentToChatMessage(content: ToolContent): ChatMessage {\n return {\n role: \"tool\",\n tool_call_id: content.callId ?? content.id,\n content: content.content\n .map((item) => (item.type === \"text\" ? item.text : item.data))\n .join(\"\\n\"),\n };\n}\n\nfunction userContentToChatParts(content: UserContent): ChatMessage[] {\n if (content.type === \"text\") {\n return [{ type: \"text\", text: content.text }];\n }\n\n if (content.type === \"image\") {\n const image_url: ChatMessage = { url: imageUrl(content) };\n if (content.detail !== undefined) {\n image_url.detail = content.detail;\n }\n return [{ type: \"image_url\", image_url }];\n }\n\n if (content.type === \"document\") {\n return documentToChatParts(content);\n }\n\n return [];\n}\n\nfunction imageUrl(image: ImageContent): string {\n if (image.source.type === \"url\") {\n return image.source.url;\n }\n\n return `data:${image.source.mediaType};base64,${image.source.data}`;\n}\n\nfunction documentToChatParts(document: DocumentContent): ChatMessage[] {\n if (document.source.type === \"text\") {\n return [{ type: \"text\", text: document.source.text }];\n }\n\n throw new Error(\"OpenAI chat completions does not support file document attachments\");\n}\n\nfunction toolDefinitionToOpenAIChatCompletion(tool: ToolDefinition): ChatMessage {\n return {\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n };\n}\n\nfunction toolChoiceToOpenAIChatCompletion(toolChoice: ToolChoice): unknown {\n if (toolChoice === \"auto\" || toolChoice === \"required\" || toolChoice === \"none\") {\n return toolChoice;\n }\n\n return {\n type: \"function\",\n function: {\n name: toolChoice.name,\n },\n };\n}\n\nfunction toolCallDelta(\n id: string,\n values: {\n callId?: string | undefined;\n name?: string | undefined;\n argumentsDelta?: string | undefined;\n },\n): CompletionStreamEvent {\n const event: CompletionStreamEvent = { type: \"tool_call_delta\", id };\n if (values.callId !== undefined) event.callId = values.callId;\n if (values.name !== undefined) event.name = values.name;\n if (values.argumentsDelta !== undefined) event.argumentsDelta = values.argumentsDelta;\n return event;\n}\n\nexport const openAIChatCompletionMessageHelpers = {\n messageToChatMessages,\n toolDefinitionToOpenAIChatCompletion,\n};\n","import {\n type CompletionRequest,\n Message,\n type Message as MessageType,\n normalizeDocuments,\n} from \"@anvia/core/completion\";\n\nexport type OrderedRequestMessagesOptions = {\n includeInstructionsAsSystem?: boolean;\n};\n\nexport function orderedRequestMessages(\n request: CompletionRequest,\n options: OrderedRequestMessagesOptions = {},\n): MessageType[] {\n const messages: MessageType[] = [];\n if (options.includeInstructionsAsSystem === true && request.instructions !== undefined) {\n messages.push(Message.system(request.instructions));\n }\n messages.push(...request.chatHistory.filter((message) => message.role === \"system\"));\n const documents = normalizeDocuments(request.documents);\n if (documents !== undefined) {\n messages.push(documents);\n }\n messages.push(...request.chatHistory.filter((message) => message.role !== \"system\"));\n return messages;\n}\n","import { type ModelList, type ModelListingClient, ModelListingError } from \"@anvia/core\";\nimport type { StreamingCompletionModel } from \"@anvia/core/completion\";\nimport OpenAI from \"openai\";\nimport { OpenAIAudioGenerationModel, TTS_1 } from \"./audio-generation\";\nimport { OpenAIChatCompletionModel } from \"./chat-completion\";\nimport { OpenAIEmbeddingModel, type ProviderEmbeddingModelOptions } from \"./embedding\";\nimport { GPT_IMAGE_1, OpenAIImageGenerationModel } from \"./image-generation\";\nimport { OpenAIResponsesCompletionModel } from \"./responses\";\nimport { OpenAITranscriptionModel, WHISPER_1 } from \"./transcription\";\n\nexport type OpenAIClientOptions = {\n apiKey?: string | undefined;\n baseUrl?: string | undefined;\n headers?: Record<string, string> | undefined;\n completionApi?: \"responses\" | \"chat\" | undefined;\n client?: OpenAI | undefined;\n};\n\nexport class OpenAIClient implements ModelListingClient {\n readonly client: OpenAI;\n private readonly completionApi: \"responses\" | \"chat\";\n\n constructor(options: OpenAIClientOptions = {}) {\n this.completionApi =\n options.completionApi ?? (options.baseUrl === undefined ? \"responses\" : \"chat\");\n this.client =\n options.client ??\n new OpenAI({\n apiKey: requireApiKey(options.apiKey),\n baseURL: options.baseUrl,\n defaultHeaders: options.headers,\n });\n }\n\n completionModel(model = \"gpt-5\"): StreamingCompletionModel {\n return this.completionApi === \"chat\"\n ? new OpenAIChatCompletionModel(this.client, model)\n : new OpenAIResponsesCompletionModel(this.client, model);\n }\n\n embeddingModel(\n model = \"text-embedding-3-small\",\n options: ProviderEmbeddingModelOptions = {},\n ): OpenAIEmbeddingModel {\n return new OpenAIEmbeddingModel(this.client, model, options);\n }\n\n imageGenerationModel(model = GPT_IMAGE_1): OpenAIImageGenerationModel {\n return new OpenAIImageGenerationModel(this.client, model);\n }\n\n audioGenerationModel(model = TTS_1): OpenAIAudioGenerationModel {\n return new OpenAIAudioGenerationModel(this.client, model);\n }\n\n transcriptionModel(model = WHISPER_1): OpenAITranscriptionModel {\n return new OpenAITranscriptionModel(this.client, model);\n }\n\n async listModels(): Promise<ModelList> {\n try {\n const response = await this.client.models.list();\n const data = (await collectModelsFromResponse(response))\n .map(toListedModel)\n .filter(isListedModel);\n return { data };\n } catch (error) {\n throw toModelListingError(\"OpenAI\", error);\n }\n }\n}\n\nfunction requireApiKey(apiKey: string | undefined): string {\n if (apiKey === undefined || apiKey.length === 0) {\n throw new Error(\"Missing OpenAI credentials. Pass apiKey when constructing OpenAIClient.\");\n }\n\n return apiKey;\n}\n\nasync function collectModelsFromResponse(response: unknown): Promise<unknown[]> {\n if (isAsyncIterable(response)) {\n const models: unknown[] = [];\n for await (const model of response) {\n models.push(model);\n }\n return models;\n }\n\n if (Array.isArray(response)) {\n return response;\n }\n\n if (isObject(response) && Array.isArray(response.data)) {\n return response.data;\n }\n\n return [];\n}\n\nfunction toListedModel(model: unknown): ModelList[\"data\"][number] | undefined {\n if (!isObject(model) || typeof model.id !== \"string\") {\n return undefined;\n }\n\n return {\n id: model.id,\n ...(typeof model.name === \"string\" ? { name: model.name } : {}),\n ...(typeof model.description === \"string\" ? { description: model.description } : {}),\n ...(typeof model.type === \"string\"\n ? { type: model.type }\n : typeof model.object === \"string\"\n ? { type: model.object }\n : {}),\n ...(typeof model.created === \"number\" ? { createdAt: model.created } : {}),\n ...(typeof model.created_at === \"number\" ? { createdAt: model.created_at } : {}),\n ...(typeof model.owned_by === \"string\" ? { ownedBy: model.owned_by } : {}),\n ...(typeof model.context_length === \"number\" ? { contextLength: model.context_length } : {}),\n ...(typeof model.contextLength === \"number\" ? { contextLength: model.contextLength } : {}),\n };\n}\n\nfunction isListedModel(\n model: ModelList[\"data\"][number] | undefined,\n): model is ModelList[\"data\"][number] {\n return model !== undefined;\n}\n\nfunction toModelListingError(provider: string, error: unknown): ModelListingError {\n if (error instanceof ModelListingError) {\n return error;\n }\n\n const statusCode = getStatusCode(error);\n return new ModelListingError(`${provider} model listing failed: ${getErrorMessage(error)}`, {\n provider,\n ...(statusCode === undefined ? {} : { statusCode }),\n cause: error,\n });\n}\n\nfunction getStatusCode(error: unknown): number | undefined {\n if (!isObject(error)) {\n return undefined;\n }\n\n if (typeof error.status === \"number\") {\n return error.status;\n }\n\n if (typeof error.statusCode === \"number\") {\n return error.statusCode;\n }\n\n return undefined;\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return isObject(value) && Symbol.asyncIterator in value;\n}\n","import type { Embedding, EmbeddingModel } from \"@anvia/core/embeddings\";\nimport type OpenAI from \"openai\";\n\nexport type ProviderEmbeddingModelOptions = {\n dimensions?: number | undefined;\n user?: string | undefined;\n maxBatchSize?: number | undefined;\n};\n\nexport class OpenAIEmbeddingModel implements EmbeddingModel {\n readonly dimensions: number | undefined;\n readonly maxBatchSize: number;\n private readonly user: string | undefined;\n\n constructor(\n private readonly client: OpenAI,\n private readonly model: string,\n options: ProviderEmbeddingModelOptions = {},\n ) {\n this.dimensions = options.dimensions;\n this.maxBatchSize = options.maxBatchSize ?? 1024;\n this.user = options.user;\n }\n\n async embedTexts(texts: string[]): Promise<Embedding[]> {\n const embeddings: Embedding[] = [];\n for (let index = 0; index < texts.length; index += this.maxBatchSize) {\n const batch = texts.slice(index, index + this.maxBatchSize);\n embeddings.push(...(await this.embedBatch(batch)));\n }\n return embeddings;\n }\n\n private async embedBatch(texts: string[]): Promise<Embedding[]> {\n if (texts.length === 0) {\n return [];\n }\n\n const params: Record<string, unknown> = {\n model: this.model,\n input: texts,\n };\n if (this.dimensions !== undefined) {\n params.dimensions = this.dimensions;\n }\n if (this.user !== undefined) {\n params.user = this.user;\n }\n\n const response = await this.client.embeddings.create(params as never);\n const data = Array.isArray(response.data) ? response.data : [];\n if (data.length !== texts.length) {\n throw new Error(\n `Embedding response length ${data.length} did not match input length ${texts.length}`,\n );\n }\n\n return data\n .slice()\n .sort((left, right) => left.index - right.index)\n .map((item, index) => ({\n document: texts[index] as string,\n vector: item.embedding,\n }));\n }\n}\n","import { Buffer } from \"node:buffer\";\nimport type {\n GeneratedImage,\n ImageGenerationModel,\n ImageGenerationRequest,\n ImageGenerationResponse,\n} from \"@anvia/core/image-generation\";\nimport type { OpenAI } from \"openai\";\nimport { isPlainObject } from \"../utils\";\n\nexport const DALL_E_2 = \"dall-e-2\";\nexport const DALL_E_3 = \"dall-e-3\";\nexport const GPT_IMAGE_1 = \"gpt-image-1\";\nexport const GPT_IMAGE_2 = \"gpt-image-2\";\n\nexport class OpenAIImageGenerationModel implements ImageGenerationModel {\n readonly provider = \"openai\";\n\n constructor(\n private readonly client: OpenAI,\n readonly defaultModel = GPT_IMAGE_1,\n ) {}\n\n async imageGeneration(\n request: ImageGenerationRequest,\n ): Promise<ImageGenerationResponse<unknown>> {\n const params: Record<string, unknown> = {\n model: this.defaultModel,\n prompt: request.prompt,\n size: `${request.width}x${request.height}`,\n };\n\n if (this.defaultModel === DALL_E_2 || this.defaultModel === DALL_E_3) {\n params.response_format = \"b64_json\";\n }\n\n if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n const response = await this.client.images.generate(params as never);\n return imageResponseFromOpenAI(response);\n }\n}\n\nexport function imageResponseFromOpenAI(response: unknown): ImageGenerationResponse<unknown> {\n const raw = response as Record<string, unknown>;\n const mediaType = mediaTypeFromFormat(\n typeof raw.output_format === \"string\" ? raw.output_format : \"png\",\n );\n const images = (Array.isArray(raw.data) ? raw.data : []).flatMap((item): GeneratedImage[] => {\n if (!isPlainObject(item) || typeof item.b64_json !== \"string\") {\n return [];\n }\n return [{ data: new Uint8Array(Buffer.from(item.b64_json, \"base64\")), mediaType }];\n });\n\n const image = images[0]?.data;\n if (image === undefined) {\n throw new Error(\"OpenAI image generation response contained no base64 images.\");\n }\n\n return {\n image,\n images,\n mediaType,\n rawResponse: response,\n };\n}\n\nfunction mediaTypeFromFormat(format: string): string {\n if (format === \"jpeg\" || format === \"jpg\") {\n return \"image/jpeg\";\n }\n if (format === \"webp\") {\n return \"image/webp\";\n }\n return \"image/png\";\n}\n","import {\n AssistantContent,\n type AssistantContent as AssistantContentType,\n assertCompletionRequestSupported,\n type CompletionModelCapabilities,\n type CompletionRequest,\n type CompletionResponse,\n type CompletionStreamEvent,\n type DocumentContent,\n type ImageContent,\n type Message as MessageType,\n type Reasoning,\n type ReasoningContent,\n type StreamingCompletionModel,\n type ToolChoice,\n type ToolContent,\n type ToolDefinition,\n Usage,\n type UserContent,\n} from \"@anvia/core/completion\";\nimport type { OpenAI } from \"openai\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport { isPlainObject, numberFrom, parseJsonValue, schemaName, stringFrom } from \"../utils\";\n\ntype ResponsesCreateParams = Record<string, unknown>;\ntype ResponsesInputItem = Record<string, unknown>;\n\nexport class OpenAIResponsesCompletionModel implements StreamingCompletionModel {\n readonly provider = \"openai\";\n readonly capabilities: CompletionModelCapabilities = {\n streaming: true,\n tools: true,\n toolChoice: true,\n imageInput: true,\n documentInput: true,\n outputSchema: true,\n reasoning: true,\n };\n\n constructor(\n private readonly client: OpenAI,\n readonly defaultModel = \"gpt-5\",\n ) {}\n\n async completion(request: CompletionRequest): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this, request);\n const params = toOpenAIResponsesParams(this.defaultModel, request);\n const response = await this.client.responses.create(params as never);\n return fromOpenAIResponse(response);\n }\n\n async *streamCompletion(request: CompletionRequest): AsyncIterable<CompletionStreamEvent> {\n assertCompletionRequestSupported(this, request, { streaming: true });\n const params = { ...toOpenAIResponsesParams(this.defaultModel, request), stream: true };\n const stream = await this.client.responses.create(params as never);\n for await (const event of stream as unknown as AsyncIterable<unknown>) {\n const mapped = fromOpenAIStreamEvent(event);\n if (mapped !== undefined) {\n yield mapped;\n }\n }\n }\n}\n\nexport function toOpenAIResponsesParams(\n defaultModel: string,\n request: CompletionRequest,\n): ResponsesCreateParams {\n const params: ResponsesCreateParams = {\n model: request.model ?? defaultModel,\n input: requestMessages(request).flatMap(messageToResponsesInput),\n };\n\n if (request.instructions !== undefined) {\n params.instructions = request.instructions;\n }\n\n if (request.tools.length > 0) {\n params.tools = request.tools.map(toolDefinitionToOpenAI);\n }\n\n if (request.temperature !== undefined) {\n params.temperature = request.temperature;\n }\n\n if (request.maxTokens !== undefined) {\n params.max_output_tokens = request.maxTokens;\n }\n\n if (request.toolChoice !== undefined) {\n params.tool_choice = toolChoiceToOpenAI(request.toolChoice);\n }\n\n if (request.outputSchema !== undefined) {\n params.text = {\n format: {\n type: \"json_schema\",\n name: schemaName(request.outputSchema),\n strict: true,\n schema: request.outputSchema,\n },\n };\n }\n\n if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n return params;\n}\n\nfunction requestMessages(request: CompletionRequest): MessageType[] {\n return orderedRequestMessages(request);\n}\n\nexport function fromOpenAIResponse(response: unknown): CompletionResponse {\n const raw = response as Record<string, unknown>;\n const output = Array.isArray(raw.output) ? raw.output : [];\n const choice: AssistantContentType[] = [];\n\n for (const item of output) {\n if (!isPlainObject(item)) {\n continue;\n }\n\n if (item.type === \"message\") {\n choice.push(...messageOutputToAssistantContent(item));\n }\n\n if (item.type === \"function_call\") {\n const id = typeof item.id === \"string\" ? item.id : crypto.randomUUID();\n const callId = typeof item.call_id === \"string\" ? item.call_id : undefined;\n const name = typeof item.name === \"string\" ? item.name : \"\";\n const argsText = typeof item.arguments === \"string\" ? item.arguments : \"{}\";\n choice.push(AssistantContent.toolCall(id, name, parseJsonValue(argsText), callId));\n }\n\n if (item.type === \"reasoning\") {\n choice.push(reasoningItemToAssistantContent(item));\n }\n }\n\n const usageSource = isPlainObject(raw.usage) ? raw.usage : {};\n const inputTokens = numberFrom(usageSource.input_tokens);\n const outputTokens = numberFrom(usageSource.output_tokens);\n const totalTokens = numberFrom(usageSource.total_tokens) || inputTokens + outputTokens;\n const details = isPlainObject(usageSource.input_tokens_details)\n ? usageSource.input_tokens_details\n : {};\n\n const result: CompletionResponse = {\n choice,\n usage: {\n ...Usage.empty(),\n inputTokens,\n outputTokens,\n totalTokens,\n cachedInputTokens: numberFrom(details.cached_tokens),\n },\n rawResponse: response,\n };\n\n if (typeof raw.id === \"string\") {\n result.messageId = raw.id;\n }\n\n return result;\n}\n\nexport function fromOpenAIStreamEvent(event: unknown): CompletionStreamEvent | undefined {\n if (!isPlainObject(event) || typeof event.type !== \"string\") {\n return undefined;\n }\n\n if (event.type === \"response.output_text.delta\" || event.type === \"response.refusal.delta\") {\n return typeof event.delta === \"string\" ? { type: \"text_delta\", delta: event.delta } : undefined;\n }\n\n if (\n event.type === \"response.reasoning_text.delta\" ||\n event.type === \"response.reasoning_summary_text.delta\"\n ) {\n if (typeof event.delta !== \"string\") {\n return undefined;\n }\n const mapped: CompletionStreamEvent = { type: \"reasoning_delta\", delta: event.delta };\n const id = stringFrom(event.item_id);\n if (id !== undefined) {\n mapped.id = id;\n }\n if (event.type === \"response.reasoning_summary_text.delta\") {\n mapped.contentType = \"summary\";\n } else {\n mapped.contentType = \"text\";\n }\n return mapped;\n }\n\n if (event.type === \"response.output_item.added\" && isPlainObject(event.item)) {\n const item = event.item;\n if (item.type === \"function_call\") {\n return toolCallDelta(\n stringFrom(item.id) ?? stringFrom(event.item_id) ?? crypto.randomUUID(),\n {\n callId: stringFrom(item.call_id),\n name: stringFrom(item.name),\n argumentsDelta: typeof item.arguments === \"string\" ? item.arguments : undefined,\n },\n );\n }\n if (typeof item.id === \"string\") {\n return { type: \"message_id\", id: item.id };\n }\n }\n\n if (\n event.type === \"response.function_call_arguments.delta\" ||\n event.type === \"response.function_call_arguments.done\"\n ) {\n return toolCallDelta(\n stringFrom(event.item_id) ?? stringFrom(event.output_item_id) ?? crypto.randomUUID(),\n {\n argumentsDelta:\n typeof event.delta === \"string\"\n ? event.delta\n : typeof event.arguments === \"string\"\n ? event.arguments\n : undefined,\n },\n );\n }\n\n if (event.type === \"response.output_item.done\" && isPlainObject(event.item)) {\n const item = event.item;\n if (item.type === \"function_call\") {\n return {\n type: \"tool_call\",\n toolCall: AssistantContent.toolCall(\n stringFrom(item.id) ?? crypto.randomUUID(),\n stringFrom(item.name) ?? \"\",\n parseJsonValue(typeof item.arguments === \"string\" ? item.arguments : \"{}\"),\n stringFrom(item.call_id),\n ),\n };\n }\n }\n\n if (event.type === \"response.completed\" && isPlainObject(event.response)) {\n return {\n type: \"final\",\n response: fromOpenAIResponse(event.response),\n };\n }\n\n if (event.type === \"response.error\") {\n return { type: \"error\", error: event.error ?? event };\n }\n\n return undefined;\n}\n\nfunction messageToResponsesInput(message: MessageType): ResponsesInputItem[] {\n if (message.role === \"system\") {\n return [\n {\n role: \"system\",\n content: message.content,\n },\n ];\n }\n\n if (message.role === \"user\") {\n const inputContent: ResponsesInputItem[] = [];\n\n for (const content of message.content) {\n inputContent.push(...userContentToOpenAIResponsesParts(content));\n }\n\n if (inputContent.length === 1 && inputContent[0]?.type === \"input_text\") {\n return [{ role: \"user\", content: inputContent[0].text }];\n } else if (inputContent.length > 0) {\n return [{ role: \"user\", content: inputContent }];\n }\n\n return [];\n }\n\n if (message.role === \"tool\") {\n return message.content.map(toolContentToOpenAIResponsesItem);\n }\n\n const items: ResponsesInputItem[] = [];\n const text = message.content\n .flatMap((content) => (content.type === \"text\" ? [content.text] : []))\n .join(\"\\n\");\n if (text.length > 0) {\n items.push({ role: \"assistant\", content: text });\n }\n\n for (const content of message.content) {\n if (content.type === \"reasoning\" && content.id !== undefined) {\n items.push(reasoningToOpenAIInput(content));\n }\n if (content.type === \"tool_call\") {\n items.push({\n type: \"function_call\",\n id: content.id,\n call_id: content.callId ?? content.id,\n name: content.function.name,\n arguments: JSON.stringify(content.function.arguments ?? {}),\n });\n }\n if (content.type === \"image\") {\n throw new Error(\"OpenAI Responses does not support image content in assistant history\");\n }\n }\n\n return items;\n}\n\nfunction toolContentToOpenAIResponsesItem(content: ToolContent): ResponsesInputItem {\n return {\n type: \"function_call_output\",\n call_id: content.callId ?? content.id,\n output: content.content\n .map((item) => (item.type === \"text\" ? item.text : item.data))\n .join(\"\\n\"),\n };\n}\n\nfunction reasoningItemToAssistantContent(item: Record<string, unknown>): Reasoning {\n const content = reasoningContentFromOpenAIItem(item);\n const id = stringFrom(item.id);\n if (content.length === 0) {\n return AssistantContent.reasoning(\"\", id);\n }\n return AssistantContent.reasoningFromContent(content, id);\n}\n\nfunction reasoningContentFromOpenAIItem(item: Record<string, unknown>): ReasoningContent[] {\n const content: ReasoningContent[] = [];\n if (Array.isArray(item.content)) {\n for (const part of item.content) {\n if (!isPlainObject(part)) {\n continue;\n }\n if (part.type === \"reasoning_text\" && typeof part.text === \"string\") {\n content.push({ type: \"text\", text: part.text });\n }\n }\n }\n if (Array.isArray(item.summary)) {\n for (const summary of item.summary) {\n if (!isPlainObject(summary)) {\n continue;\n }\n if (typeof summary.text === \"string\") {\n content.push({ type: \"summary\", text: summary.text });\n }\n }\n }\n if (typeof item.encrypted_content === \"string\") {\n content.push({ type: \"encrypted\", data: item.encrypted_content });\n }\n return content;\n}\n\nfunction reasoningToOpenAIInput(reasoning: Reasoning): ResponsesInputItem {\n const item: ResponsesInputItem = {\n type: \"reasoning\",\n id: reasoning.id,\n summary:\n reasoning.content\n ?.filter((content): content is Extract<ReasoningContent, { type: \"summary\" }> => {\n return content.type === \"summary\";\n })\n .map((content) => ({ type: \"summary_text\", text: content.text })) ?? [],\n };\n const textContent = reasoning.content?.flatMap((content) =>\n content.type === \"text\" ? [{ type: \"reasoning_text\", text: content.text }] : [],\n );\n if (textContent !== undefined && textContent.length > 0) {\n item.content = textContent;\n }\n const encrypted = reasoning.content?.find((content) => content.type === \"encrypted\");\n if (encrypted?.type === \"encrypted\") {\n item.encrypted_content = encrypted.data;\n }\n return item;\n}\n\nfunction userContentToOpenAIResponsesParts(content: UserContent): ResponsesInputItem[] {\n if (content.type === \"text\") {\n return [{ type: \"input_text\", text: content.text }];\n }\n\n if (content.type === \"image\") {\n const part: ResponsesInputItem = { type: \"input_image\", image_url: imageUrl(content) };\n if (content.detail !== undefined) {\n part.detail = content.detail;\n }\n return [part];\n }\n\n if (content.type === \"document\") {\n return [documentToOpenAIResponsesPart(content)];\n }\n\n return [];\n}\n\nfunction imageUrl(image: ImageContent): string {\n if (image.source.type === \"url\") {\n return image.source.url;\n }\n\n return `data:${image.source.mediaType};base64,${image.source.data}`;\n}\n\nfunction documentToOpenAIResponsesPart(document: DocumentContent): ResponsesInputItem {\n if (document.source.type === \"text\") {\n return { type: \"input_text\", text: document.source.text };\n }\n\n if (document.source.mediaType !== \"application/pdf\") {\n throw new Error(`OpenAI Responses only supports PDF document attachments`);\n }\n\n if (document.source.type === \"url\") {\n return { type: \"input_file\", file_url: document.source.url };\n }\n\n return {\n type: \"input_file\",\n file_data: `data:${document.source.mediaType};base64,${document.source.data}`,\n filename: document.source.filename ?? \"document.pdf\",\n };\n}\n\nfunction toolDefinitionToOpenAI(tool: ToolDefinition): ResponsesInputItem {\n return {\n type: \"function\",\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n };\n}\n\nfunction toolChoiceToOpenAI(toolChoice: ToolChoice): unknown {\n if (toolChoice === \"auto\" || toolChoice === \"required\" || toolChoice === \"none\") {\n return toolChoice;\n }\n\n return {\n type: \"function\",\n name: toolChoice.name,\n };\n}\n\nfunction messageOutputToAssistantContent(item: Record<string, unknown>): AssistantContentType[] {\n const content = Array.isArray(item.content) ? item.content : [];\n return content.flatMap((part): AssistantContentType[] => {\n if (!isPlainObject(part)) {\n return [];\n }\n\n if (part.type === \"output_text\" && typeof part.text === \"string\") {\n return [AssistantContent.text(part.text)];\n }\n\n if (part.type === \"text\" && typeof part.text === \"string\") {\n return [AssistantContent.text(part.text)];\n }\n\n return [];\n });\n}\n\nfunction toolCallDelta(\n id: string,\n values: {\n callId?: string | undefined;\n name?: string | undefined;\n argumentsDelta?: string | undefined;\n },\n): CompletionStreamEvent {\n const event: CompletionStreamEvent = { type: \"tool_call_delta\", id };\n if (values.callId !== undefined) event.callId = values.callId;\n if (values.name !== undefined) event.name = values.name;\n if (values.argumentsDelta !== undefined) event.argumentsDelta = values.argumentsDelta;\n return event;\n}\n\nexport const openaiMessageHelpers = {\n messageToResponsesInput,\n toolDefinitionToOpenAI,\n};\n","import type {\n TranscriptionModel,\n TranscriptionRequest,\n TranscriptionResponse,\n} from \"@anvia/core/transcription\";\nimport type { OpenAI } from \"openai\";\nimport { toFile } from \"openai\";\nimport { isPlainObject } from \"../utils\";\n\nexport const WHISPER_1 = \"whisper-1\";\n\nexport class OpenAITranscriptionModel implements TranscriptionModel {\n readonly provider = \"openai\";\n\n constructor(\n private readonly client: OpenAI,\n readonly defaultModel = WHISPER_1,\n ) {}\n\n async transcription(request: TranscriptionRequest): Promise<TranscriptionResponse<unknown>> {\n const params: Record<string, unknown> = {\n model: this.defaultModel,\n file: await toFile(request.data, request.filename),\n };\n\n if (request.language !== undefined) params.language = request.language;\n if (request.prompt !== undefined) params.prompt = request.prompt;\n if (request.temperature !== undefined) params.temperature = request.temperature;\n if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n const response = await this.client.audio.transcriptions.create(params as never);\n return {\n text: transcriptionText(response),\n rawResponse: response,\n };\n }\n}\n\nexport function transcriptionText(response: unknown): string {\n if (typeof response === \"string\") {\n return response;\n }\n if (isPlainObject(response) && typeof response.text === \"string\") {\n return response.text;\n }\n throw new Error(\"OpenAI transcription response contained no text.\");\n}\n"],"mappings":"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","names":["Buffer","mediaTypeFromFormat","Buffer","AssistantContent","assertCompletionRequestSupported","Usage","assertCompletionRequestSupported","requestMessages","AssistantContent","Usage","toolCallDelta","imageUrl"]}
|
|
1
|
+
{"version":3,"sources":["../src/openai/index.ts","../src/utils.ts","../src/openai/audio-generation.ts","../src/openai/chat-completion.ts","../src/request-messages.ts","../src/openai/client.ts","../src/openai/embedding.ts","../src/openai/image-generation.ts","../src/openai/responses.ts","../src/openai/transcription.ts"],"sourcesContent":["export { OpenAIAudioGenerationModel, TTS_1, TTS_1_HD } from \"./audio-generation\";\nexport {\n OpenAIChatCompletionModel,\n type OpenAIChatCompletionModelOptions,\n} from \"./chat-completion\";\nexport { OpenAIClient, type OpenAIClientOptions } from \"./client\";\nexport { OpenAIEmbeddingModel, type ProviderEmbeddingModelOptions } from \"./embedding\";\nexport {\n DALL_E_2,\n DALL_E_3,\n GPT_IMAGE_1,\n GPT_IMAGE_2,\n OpenAIImageGenerationModel,\n} from \"./image-generation\";\nexport { OpenAIResponsesCompletionModel } from \"./responses\";\nexport { OpenAITranscriptionModel, WHISPER_1 } from \"./transcription\";\n","import type { JsonObject, JsonValue } from \"@anvia/core/completion\";\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function numberFrom(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n\nexport function stringFrom(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nexport function parseJsonValue(text: string): JsonValue {\n try {\n return JSON.parse(text) as JsonValue;\n } catch {\n return text;\n }\n}\n\nexport function schemaName(schema: JsonObject): string {\n return typeof schema.title === \"string\" ? schema.title : \"response_schema\";\n}\n","import type {\n AudioGenerationModel,\n AudioGenerationRequest,\n AudioGenerationResponse,\n} from \"@anvia/core/audio-generation\";\nimport type { OpenAI } from \"openai\";\nimport { isPlainObject } from \"../utils\";\n\nexport const TTS_1 = \"tts-1\";\nexport const TTS_1_HD = \"tts-1-hd\";\n\nexport class OpenAIAudioGenerationModel implements AudioGenerationModel {\n readonly provider = \"openai\";\n\n constructor(\n private readonly client: OpenAI,\n readonly defaultModel = TTS_1,\n ) {}\n\n async audioGeneration(\n request: AudioGenerationRequest,\n ): Promise<AudioGenerationResponse<unknown>> {\n const params: Record<string, unknown> = {\n model: this.defaultModel,\n input: request.text,\n voice: request.voice,\n speed: request.speed,\n };\n\n if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n const response = await this.client.audio.speech.create(params as never);\n return {\n audio: new Uint8Array(await response.arrayBuffer()),\n mediaType: mediaTypeFromFormat(params.response_format),\n rawResponse: response,\n };\n }\n}\n\nfunction mediaTypeFromFormat(format: unknown): string {\n if (format === \"wav\") return \"audio/wav\";\n if (format === \"flac\") return \"audio/flac\";\n if (format === \"opus\") return \"audio/opus\";\n if (format === \"aac\") return \"audio/aac\";\n if (format === \"pcm\") return \"audio/pcm\";\n return \"audio/mpeg\";\n}\n","import {\n AssistantContent,\n type AssistantContent as AssistantContentType,\n assertCompletionRequestSupported,\n type CompletionModelCapabilities,\n type CompletionRequest,\n type CompletionResponse,\n type CompletionStreamEvent,\n type DocumentContent,\n type ImageContent,\n type Message as MessageType,\n type StreamingCompletionModel,\n type ToolChoice,\n type ToolContent,\n type ToolDefinition,\n Usage,\n type UserContent,\n} from \"@anvia/core/completion\";\nimport type { OpenAI } from \"openai\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport { isPlainObject, numberFrom, parseJsonValue, schemaName, stringFrom } from \"../utils\";\n\ntype ChatCompletionParams = Record<string, unknown>;\ntype ChatMessage = Record<string, unknown>;\n\nexport type OpenAIChatCompletionModelOptions = {\n preserveReasoningContent?: boolean | undefined;\n};\n\nexport class OpenAIChatCompletionModel implements StreamingCompletionModel {\n readonly provider = \"openai-chat\";\n readonly capabilities: CompletionModelCapabilities = {\n streaming: true,\n tools: true,\n toolChoice: true,\n imageInput: true,\n documentInput: false,\n outputSchema: true,\n reasoning: true,\n };\n\n constructor(\n private readonly client: OpenAI,\n readonly defaultModel = \"openai/gpt-5.2\",\n private readonly options: OpenAIChatCompletionModelOptions = {},\n ) {}\n\n async completion(request: CompletionRequest): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this, request);\n const params = toOpenAIChatCompletionParams(this.defaultModel, request, this.options);\n const response = await this.client.chat.completions.create(params as never);\n return fromOpenAIChatCompletionResponse(response);\n }\n\n async *streamCompletion(request: CompletionRequest): AsyncIterable<CompletionStreamEvent> {\n assertCompletionRequestSupported(this, request, { streaming: true });\n const params: ChatCompletionParams = {\n ...toOpenAIChatCompletionParams(this.defaultModel, request, this.options),\n stream: true,\n };\n const streamOptions = isPlainObject(params.stream_options) ? params.stream_options : {};\n params.stream_options = { ...streamOptions, include_usage: true };\n const stream = await this.client.chat.completions.create(params as never);\n for await (const chunk of stream as unknown as AsyncIterable<unknown>) {\n for (const event of fromOpenAIChatCompletionStreamChunk(chunk)) {\n yield event;\n }\n }\n }\n}\n\nexport function toOpenAIChatCompletionParams(\n defaultModel: string,\n request: CompletionRequest,\n options: OpenAIChatCompletionModelOptions = {},\n): ChatCompletionParams {\n const params: ChatCompletionParams = {\n model: request.model ?? defaultModel,\n messages: requestMessages(request).flatMap((message) =>\n messageToChatMessages(message, options),\n ),\n };\n\n if (request.tools.length > 0) {\n params.tools = request.tools.map(toolDefinitionToOpenAIChatCompletion);\n }\n\n if (request.temperature !== undefined) {\n params.temperature = request.temperature;\n }\n\n if (request.maxTokens !== undefined) {\n params.max_tokens = request.maxTokens;\n }\n\n if (request.toolChoice !== undefined) {\n params.tool_choice = toolChoiceToOpenAIChatCompletion(request.toolChoice);\n }\n\n if (request.outputSchema !== undefined) {\n params.response_format = {\n type: \"json_schema\",\n json_schema: {\n name: schemaName(request.outputSchema),\n strict: true,\n schema: request.outputSchema,\n },\n };\n }\n\n if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n return params;\n}\n\nfunction requestMessages(request: CompletionRequest): MessageType[] {\n return orderedRequestMessages(request, { includeInstructionsAsSystem: true });\n}\n\nexport function fromOpenAIChatCompletionResponse(response: unknown): CompletionResponse {\n const raw = response as Record<string, unknown>;\n const choices = Array.isArray(raw.choices) ? raw.choices : [];\n const firstChoice = choices.find(isPlainObject);\n const message = isPlainObject(firstChoice?.message) ? firstChoice.message : {};\n const choice: AssistantContentType[] = [];\n\n const reasoning = stringFrom(message.reasoning_content) ?? stringFrom(message.reasoning);\n if (reasoning !== undefined && reasoning.length > 0) {\n choice.push(AssistantContent.reasoning(reasoning));\n }\n\n if (typeof message.content === \"string\" && message.content.length > 0) {\n choice.push(AssistantContent.text(message.content));\n }\n\n const toolCalls = Array.isArray(message.tool_calls) ? message.tool_calls : [];\n for (const toolCall of toolCalls) {\n if (!isPlainObject(toolCall)) {\n continue;\n }\n\n const fn = isPlainObject(toolCall.function) ? toolCall.function : {};\n const id = typeof toolCall.id === \"string\" ? toolCall.id : crypto.randomUUID();\n const name = typeof fn.name === \"string\" ? fn.name : \"\";\n const argsText = typeof fn.arguments === \"string\" ? fn.arguments : \"{}\";\n choice.push(AssistantContent.toolCall(id, name, parseJsonValue(argsText)));\n }\n\n const result: CompletionResponse = {\n choice,\n usage: usageFromOpenAIChatCompletion(raw.usage),\n rawResponse: response,\n };\n\n if (typeof raw.id === \"string\") {\n result.messageId = raw.id;\n }\n\n return result;\n}\n\nexport function fromOpenAIChatCompletionStreamChunk(chunk: unknown): CompletionStreamEvent[] {\n if (!isPlainObject(chunk)) {\n return [];\n }\n\n const events: CompletionStreamEvent[] = [];\n const choices = Array.isArray(chunk.choices) ? chunk.choices : [];\n for (const choice of choices) {\n if (!isPlainObject(choice) || !isPlainObject(choice.delta)) {\n continue;\n }\n\n const delta = choice.delta;\n if (typeof delta.content === \"string\" && delta.content.length > 0) {\n events.push({ type: \"text_delta\", delta: delta.content });\n }\n\n const reasoning = stringFrom(delta.reasoning) ?? stringFrom(delta.reasoning_content);\n if (reasoning !== undefined && reasoning.length > 0) {\n events.push({ type: \"reasoning_delta\", delta: reasoning });\n }\n\n const toolCalls = Array.isArray(delta.tool_calls) ? delta.tool_calls : [];\n for (const toolCall of toolCalls) {\n if (!isPlainObject(toolCall)) {\n continue;\n }\n const fn = isPlainObject(toolCall.function) ? toolCall.function : {};\n const index = numberFrom(toolCall.index);\n const id = `tool_${index}`;\n events.push(\n toolCallDelta(id, {\n callId: stringFrom(toolCall.id),\n name: stringFrom(fn.name),\n argumentsDelta: stringFrom(fn.arguments),\n }),\n );\n }\n }\n\n if (typeof chunk.id === \"string\") {\n events.push({ type: \"message_id\", id: chunk.id });\n }\n\n if (isPlainObject(chunk.usage)) {\n const response: CompletionResponse = {\n choice: [],\n usage: usageFromOpenAIChatCompletion(chunk.usage),\n rawResponse: chunk,\n };\n if (typeof chunk.id === \"string\") {\n response.messageId = chunk.id;\n }\n events.push({ type: \"final\", response });\n }\n\n return events;\n}\n\nfunction usageFromOpenAIChatCompletion(usage: unknown): Usage {\n const usageSource = isPlainObject(usage) ? usage : {};\n const promptDetails = isPlainObject(usageSource.prompt_tokens_details)\n ? usageSource.prompt_tokens_details\n : {};\n\n return {\n ...Usage.empty(),\n inputTokens: numberFrom(usageSource.prompt_tokens),\n outputTokens: numberFrom(usageSource.completion_tokens),\n totalTokens: numberFrom(usageSource.total_tokens),\n cachedInputTokens: numberFrom(promptDetails.cached_tokens),\n };\n}\n\nfunction messageToChatMessages(\n message: MessageType,\n options: OpenAIChatCompletionModelOptions = {},\n): ChatMessage[] {\n if (message.role === \"system\") {\n return [{ role: \"system\", content: message.content }];\n }\n\n if (message.role === \"user\") {\n const contentParts: ChatMessage[] = [];\n\n for (const content of message.content) {\n contentParts.push(...userContentToChatParts(content));\n }\n\n if (contentParts.length === 1 && contentParts[0]?.type === \"text\") {\n return [{ role: \"user\", content: contentParts[0].text }];\n } else if (contentParts.length > 0) {\n return [{ role: \"user\", content: contentParts }];\n }\n\n return [];\n }\n\n if (message.role === \"tool\") {\n return message.content.map(toolContentToChatMessage);\n }\n\n const text = message.content\n .flatMap((content) => (content.type === \"text\" ? [content.text] : []))\n .join(\"\\n\");\n const reasoning = message.content\n .flatMap((content) =>\n content.type === \"reasoning\" && content.text.length > 0 ? [content.text] : [],\n )\n .join(\"\\n\");\n if (message.content.some((content) => content.type === \"image\")) {\n throw new Error(\"OpenAI chat completions does not support image content in assistant history\");\n }\n const toolCalls = message.content\n .filter((content) => content.type === \"tool_call\")\n .map((content) => ({\n id: content.callId ?? content.id,\n type: \"function\",\n function: {\n name: content.function.name,\n arguments: JSON.stringify(content.function.arguments ?? {}),\n },\n }));\n\n const chatMessage: ChatMessage = {\n role: \"assistant\",\n };\n if (text.length > 0) {\n chatMessage.content = text;\n }\n if (options.preserveReasoningContent === true && reasoning.length > 0) {\n chatMessage.reasoning_content = reasoning;\n }\n if (toolCalls.length > 0) {\n chatMessage.tool_calls = toolCalls;\n }\n\n return [chatMessage];\n}\n\nfunction toolContentToChatMessage(content: ToolContent): ChatMessage {\n return {\n role: \"tool\",\n tool_call_id: content.callId ?? content.id,\n content: content.content\n .map((item) => (item.type === \"text\" ? item.text : item.data))\n .join(\"\\n\"),\n };\n}\n\nfunction userContentToChatParts(content: UserContent): ChatMessage[] {\n if (content.type === \"text\") {\n return [{ type: \"text\", text: content.text }];\n }\n\n if (content.type === \"image\") {\n const image_url: ChatMessage = { url: imageUrl(content) };\n if (content.detail !== undefined) {\n image_url.detail = content.detail;\n }\n return [{ type: \"image_url\", image_url }];\n }\n\n if (content.type === \"document\") {\n return documentToChatParts(content);\n }\n\n return [];\n}\n\nfunction imageUrl(image: ImageContent): string {\n if (image.source.type === \"url\") {\n return image.source.url;\n }\n\n return `data:${image.source.mediaType};base64,${image.source.data}`;\n}\n\nfunction documentToChatParts(document: DocumentContent): ChatMessage[] {\n if (document.source.type === \"text\") {\n return [{ type: \"text\", text: document.source.text }];\n }\n\n throw new Error(\"OpenAI chat completions does not support file document attachments\");\n}\n\nfunction toolDefinitionToOpenAIChatCompletion(tool: ToolDefinition): ChatMessage {\n return {\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n };\n}\n\nfunction toolChoiceToOpenAIChatCompletion(toolChoice: ToolChoice): unknown {\n if (toolChoice === \"auto\" || toolChoice === \"required\" || toolChoice === \"none\") {\n return toolChoice;\n }\n\n return {\n type: \"function\",\n function: {\n name: toolChoice.name,\n },\n };\n}\n\nfunction toolCallDelta(\n id: string,\n values: {\n callId?: string | undefined;\n name?: string | undefined;\n argumentsDelta?: string | undefined;\n },\n): CompletionStreamEvent {\n const event: CompletionStreamEvent = { type: \"tool_call_delta\", id };\n if (values.callId !== undefined) event.callId = values.callId;\n if (values.name !== undefined) event.name = values.name;\n if (values.argumentsDelta !== undefined) event.argumentsDelta = values.argumentsDelta;\n return event;\n}\n\nexport const openAIChatCompletionMessageHelpers = {\n messageToChatMessages,\n toolDefinitionToOpenAIChatCompletion,\n};\n","import {\n type CompletionRequest,\n Message,\n type Message as MessageType,\n normalizeDocuments,\n} from \"@anvia/core/completion\";\n\nexport type OrderedRequestMessagesOptions = {\n includeInstructionsAsSystem?: boolean;\n};\n\nexport function orderedRequestMessages(\n request: CompletionRequest,\n options: OrderedRequestMessagesOptions = {},\n): MessageType[] {\n const messages: MessageType[] = [];\n if (options.includeInstructionsAsSystem === true && request.instructions !== undefined) {\n messages.push(Message.system(request.instructions));\n }\n messages.push(...request.chatHistory.filter((message) => message.role === \"system\"));\n const documents = normalizeDocuments(request.documents);\n if (documents !== undefined) {\n messages.push(documents);\n }\n messages.push(...request.chatHistory.filter((message) => message.role !== \"system\"));\n return messages;\n}\n","import { type ModelList, type ModelListingClient, ModelListingError } from \"@anvia/core\";\nimport type { StreamingCompletionModel } from \"@anvia/core/completion\";\nimport OpenAI from \"openai\";\nimport { OpenAIAudioGenerationModel, TTS_1 } from \"./audio-generation\";\nimport {\n OpenAIChatCompletionModel,\n type OpenAIChatCompletionModelOptions,\n} from \"./chat-completion\";\nimport { OpenAIEmbeddingModel, type ProviderEmbeddingModelOptions } from \"./embedding\";\nimport { GPT_IMAGE_1, OpenAIImageGenerationModel } from \"./image-generation\";\nimport { OpenAIResponsesCompletionModel } from \"./responses\";\nimport { OpenAITranscriptionModel, WHISPER_1 } from \"./transcription\";\n\nexport type OpenAIClientOptions = {\n apiKey?: string | undefined;\n baseUrl?: string | undefined;\n headers?: Record<string, string> | undefined;\n completionApi?: \"responses\" | \"chat\" | undefined;\n preserveReasoningContent?: boolean | undefined;\n client?: OpenAI | undefined;\n};\n\nexport class OpenAIClient implements ModelListingClient {\n readonly client: OpenAI;\n private readonly completionApi: \"responses\" | \"chat\";\n private readonly chatCompletionOptions: OpenAIChatCompletionModelOptions;\n\n constructor(options: OpenAIClientOptions = {}) {\n this.completionApi =\n options.completionApi ?? (options.baseUrl === undefined ? \"responses\" : \"chat\");\n this.chatCompletionOptions = {\n preserveReasoningContent:\n options.preserveReasoningContent ?? isMoonshotBaseUrl(options.baseUrl),\n };\n this.client =\n options.client ??\n new OpenAI({\n apiKey: requireApiKey(options.apiKey),\n baseURL: options.baseUrl,\n defaultHeaders: options.headers,\n });\n }\n\n completionModel(model = \"gpt-5\"): StreamingCompletionModel {\n return this.completionApi === \"chat\"\n ? new OpenAIChatCompletionModel(this.client, model, this.chatCompletionOptions)\n : new OpenAIResponsesCompletionModel(this.client, model);\n }\n\n embeddingModel(\n model = \"text-embedding-3-small\",\n options: ProviderEmbeddingModelOptions = {},\n ): OpenAIEmbeddingModel {\n return new OpenAIEmbeddingModel(this.client, model, options);\n }\n\n imageGenerationModel(model = GPT_IMAGE_1): OpenAIImageGenerationModel {\n return new OpenAIImageGenerationModel(this.client, model);\n }\n\n audioGenerationModel(model = TTS_1): OpenAIAudioGenerationModel {\n return new OpenAIAudioGenerationModel(this.client, model);\n }\n\n transcriptionModel(model = WHISPER_1): OpenAITranscriptionModel {\n return new OpenAITranscriptionModel(this.client, model);\n }\n\n async listModels(): Promise<ModelList> {\n try {\n const response = await this.client.models.list();\n const data = (await collectModelsFromResponse(response))\n .map(toListedModel)\n .filter(isListedModel);\n return { data };\n } catch (error) {\n throw toModelListingError(\"OpenAI\", error);\n }\n }\n}\n\nfunction requireApiKey(apiKey: string | undefined): string {\n if (apiKey === undefined || apiKey.length === 0) {\n throw new Error(\"Missing OpenAI credentials. Pass apiKey when constructing OpenAIClient.\");\n }\n\n return apiKey;\n}\n\nfunction isMoonshotBaseUrl(baseUrl: string | undefined): boolean {\n if (baseUrl === undefined) {\n return false;\n }\n\n try {\n return new URL(baseUrl).hostname.endsWith(\"moonshot.ai\");\n } catch {\n return baseUrl.includes(\"moonshot.ai\");\n }\n}\n\nasync function collectModelsFromResponse(response: unknown): Promise<unknown[]> {\n if (isAsyncIterable(response)) {\n const models: unknown[] = [];\n for await (const model of response) {\n models.push(model);\n }\n return models;\n }\n\n if (Array.isArray(response)) {\n return response;\n }\n\n if (isObject(response) && Array.isArray(response.data)) {\n return response.data;\n }\n\n return [];\n}\n\nfunction toListedModel(model: unknown): ModelList[\"data\"][number] | undefined {\n if (!isObject(model) || typeof model.id !== \"string\") {\n return undefined;\n }\n\n return {\n id: model.id,\n ...(typeof model.name === \"string\" ? { name: model.name } : {}),\n ...(typeof model.description === \"string\" ? { description: model.description } : {}),\n ...(typeof model.type === \"string\"\n ? { type: model.type }\n : typeof model.object === \"string\"\n ? { type: model.object }\n : {}),\n ...(typeof model.created === \"number\" ? { createdAt: model.created } : {}),\n ...(typeof model.created_at === \"number\" ? { createdAt: model.created_at } : {}),\n ...(typeof model.owned_by === \"string\" ? { ownedBy: model.owned_by } : {}),\n ...(typeof model.context_length === \"number\" ? { contextLength: model.context_length } : {}),\n ...(typeof model.contextLength === \"number\" ? { contextLength: model.contextLength } : {}),\n };\n}\n\nfunction isListedModel(\n model: ModelList[\"data\"][number] | undefined,\n): model is ModelList[\"data\"][number] {\n return model !== undefined;\n}\n\nfunction toModelListingError(provider: string, error: unknown): ModelListingError {\n if (error instanceof ModelListingError) {\n return error;\n }\n\n const statusCode = getStatusCode(error);\n return new ModelListingError(`${provider} model listing failed: ${getErrorMessage(error)}`, {\n provider,\n ...(statusCode === undefined ? {} : { statusCode }),\n cause: error,\n });\n}\n\nfunction getStatusCode(error: unknown): number | undefined {\n if (!isObject(error)) {\n return undefined;\n }\n\n if (typeof error.status === \"number\") {\n return error.status;\n }\n\n if (typeof error.statusCode === \"number\") {\n return error.statusCode;\n }\n\n return undefined;\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return isObject(value) && Symbol.asyncIterator in value;\n}\n","import type { Embedding, EmbeddingModel } from \"@anvia/core/embeddings\";\nimport type OpenAI from \"openai\";\n\nexport type ProviderEmbeddingModelOptions = {\n dimensions?: number | undefined;\n user?: string | undefined;\n maxBatchSize?: number | undefined;\n};\n\nexport class OpenAIEmbeddingModel implements EmbeddingModel {\n readonly dimensions: number | undefined;\n readonly maxBatchSize: number;\n private readonly user: string | undefined;\n\n constructor(\n private readonly client: OpenAI,\n private readonly model: string,\n options: ProviderEmbeddingModelOptions = {},\n ) {\n this.dimensions = options.dimensions;\n this.maxBatchSize = options.maxBatchSize ?? 1024;\n this.user = options.user;\n }\n\n async embedTexts(texts: string[]): Promise<Embedding[]> {\n const embeddings: Embedding[] = [];\n for (let index = 0; index < texts.length; index += this.maxBatchSize) {\n const batch = texts.slice(index, index + this.maxBatchSize);\n embeddings.push(...(await this.embedBatch(batch)));\n }\n return embeddings;\n }\n\n private async embedBatch(texts: string[]): Promise<Embedding[]> {\n if (texts.length === 0) {\n return [];\n }\n\n const params: Record<string, unknown> = {\n model: this.model,\n input: texts,\n };\n if (this.dimensions !== undefined) {\n params.dimensions = this.dimensions;\n }\n if (this.user !== undefined) {\n params.user = this.user;\n }\n\n const response = await this.client.embeddings.create(params as never);\n const data = Array.isArray(response.data) ? response.data : [];\n if (data.length !== texts.length) {\n throw new Error(\n `Embedding response length ${data.length} did not match input length ${texts.length}`,\n );\n }\n\n return data\n .slice()\n .sort((left, right) => left.index - right.index)\n .map((item, index) => ({\n document: texts[index] as string,\n vector: item.embedding,\n }));\n }\n}\n","import { Buffer } from \"node:buffer\";\nimport type {\n GeneratedImage,\n ImageGenerationModel,\n ImageGenerationRequest,\n ImageGenerationResponse,\n} from \"@anvia/core/image-generation\";\nimport type { OpenAI } from \"openai\";\nimport { isPlainObject } from \"../utils\";\n\nexport const DALL_E_2 = \"dall-e-2\";\nexport const DALL_E_3 = \"dall-e-3\";\nexport const GPT_IMAGE_1 = \"gpt-image-1\";\nexport const GPT_IMAGE_2 = \"gpt-image-2\";\n\nexport class OpenAIImageGenerationModel implements ImageGenerationModel {\n readonly provider = \"openai\";\n\n constructor(\n private readonly client: OpenAI,\n readonly defaultModel = GPT_IMAGE_1,\n ) {}\n\n async imageGeneration(\n request: ImageGenerationRequest,\n ): Promise<ImageGenerationResponse<unknown>> {\n const params: Record<string, unknown> = {\n model: this.defaultModel,\n prompt: request.prompt,\n size: `${request.width}x${request.height}`,\n };\n\n if (this.defaultModel === DALL_E_2 || this.defaultModel === DALL_E_3) {\n params.response_format = \"b64_json\";\n }\n\n if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n const response = await this.client.images.generate(params as never);\n return imageResponseFromOpenAI(response);\n }\n}\n\nexport function imageResponseFromOpenAI(response: unknown): ImageGenerationResponse<unknown> {\n const raw = response as Record<string, unknown>;\n const mediaType = mediaTypeFromFormat(\n typeof raw.output_format === \"string\" ? raw.output_format : \"png\",\n );\n const images = (Array.isArray(raw.data) ? raw.data : []).flatMap((item): GeneratedImage[] => {\n if (!isPlainObject(item) || typeof item.b64_json !== \"string\") {\n return [];\n }\n return [{ data: new Uint8Array(Buffer.from(item.b64_json, \"base64\")), mediaType }];\n });\n\n const image = images[0]?.data;\n if (image === undefined) {\n throw new Error(\"OpenAI image generation response contained no base64 images.\");\n }\n\n return {\n image,\n images,\n mediaType,\n rawResponse: response,\n };\n}\n\nfunction mediaTypeFromFormat(format: string): string {\n if (format === \"jpeg\" || format === \"jpg\") {\n return \"image/jpeg\";\n }\n if (format === \"webp\") {\n return \"image/webp\";\n }\n return \"image/png\";\n}\n","import {\n AssistantContent,\n type AssistantContent as AssistantContentType,\n assertCompletionRequestSupported,\n type CompletionModelCapabilities,\n type CompletionRequest,\n type CompletionResponse,\n type CompletionStreamEvent,\n type DocumentContent,\n type ImageContent,\n type Message as MessageType,\n type Reasoning,\n type ReasoningContent,\n type StreamingCompletionModel,\n type ToolChoice,\n type ToolContent,\n type ToolDefinition,\n Usage,\n type UserContent,\n} from \"@anvia/core/completion\";\nimport type { OpenAI } from \"openai\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport { isPlainObject, numberFrom, parseJsonValue, schemaName, stringFrom } from \"../utils\";\n\ntype ResponsesCreateParams = Record<string, unknown>;\ntype ResponsesInputItem = Record<string, unknown>;\n\nexport class OpenAIResponsesCompletionModel implements StreamingCompletionModel {\n readonly provider = \"openai\";\n readonly capabilities: CompletionModelCapabilities = {\n streaming: true,\n tools: true,\n toolChoice: true,\n imageInput: true,\n documentInput: true,\n outputSchema: true,\n reasoning: true,\n };\n\n constructor(\n private readonly client: OpenAI,\n readonly defaultModel = \"gpt-5\",\n ) {}\n\n async completion(request: CompletionRequest): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this, request);\n const params = toOpenAIResponsesParams(this.defaultModel, request);\n const response = await this.client.responses.create(params as never);\n return fromOpenAIResponse(response);\n }\n\n async *streamCompletion(request: CompletionRequest): AsyncIterable<CompletionStreamEvent> {\n assertCompletionRequestSupported(this, request, { streaming: true });\n const params = { ...toOpenAIResponsesParams(this.defaultModel, request), stream: true };\n const stream = await this.client.responses.create(params as never);\n for await (const event of stream as unknown as AsyncIterable<unknown>) {\n const mapped = fromOpenAIStreamEvent(event);\n if (mapped !== undefined) {\n yield mapped;\n }\n }\n }\n}\n\nexport function toOpenAIResponsesParams(\n defaultModel: string,\n request: CompletionRequest,\n): ResponsesCreateParams {\n const params: ResponsesCreateParams = {\n model: request.model ?? defaultModel,\n input: requestMessages(request).flatMap(messageToResponsesInput),\n };\n\n if (request.instructions !== undefined) {\n params.instructions = request.instructions;\n }\n\n if (request.tools.length > 0) {\n params.tools = request.tools.map(toolDefinitionToOpenAI);\n }\n\n if (request.temperature !== undefined) {\n params.temperature = request.temperature;\n }\n\n if (request.maxTokens !== undefined) {\n params.max_output_tokens = request.maxTokens;\n }\n\n if (request.toolChoice !== undefined) {\n params.tool_choice = toolChoiceToOpenAI(request.toolChoice);\n }\n\n if (request.outputSchema !== undefined) {\n params.text = {\n format: {\n type: \"json_schema\",\n name: schemaName(request.outputSchema),\n strict: true,\n schema: request.outputSchema,\n },\n };\n }\n\n if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n return params;\n}\n\nfunction requestMessages(request: CompletionRequest): MessageType[] {\n return orderedRequestMessages(request);\n}\n\nexport function fromOpenAIResponse(response: unknown): CompletionResponse {\n const raw = response as Record<string, unknown>;\n const output = Array.isArray(raw.output) ? raw.output : [];\n const choice: AssistantContentType[] = [];\n\n for (const item of output) {\n if (!isPlainObject(item)) {\n continue;\n }\n\n if (item.type === \"message\") {\n choice.push(...messageOutputToAssistantContent(item));\n }\n\n if (item.type === \"function_call\") {\n const id = typeof item.id === \"string\" ? item.id : crypto.randomUUID();\n const callId = typeof item.call_id === \"string\" ? item.call_id : undefined;\n const name = typeof item.name === \"string\" ? item.name : \"\";\n const argsText = typeof item.arguments === \"string\" ? item.arguments : \"{}\";\n choice.push(AssistantContent.toolCall(id, name, parseJsonValue(argsText), callId));\n }\n\n if (item.type === \"reasoning\") {\n choice.push(reasoningItemToAssistantContent(item));\n }\n }\n\n const usageSource = isPlainObject(raw.usage) ? raw.usage : {};\n const inputTokens = numberFrom(usageSource.input_tokens);\n const outputTokens = numberFrom(usageSource.output_tokens);\n const totalTokens = numberFrom(usageSource.total_tokens) || inputTokens + outputTokens;\n const details = isPlainObject(usageSource.input_tokens_details)\n ? usageSource.input_tokens_details\n : {};\n\n const result: CompletionResponse = {\n choice,\n usage: {\n ...Usage.empty(),\n inputTokens,\n outputTokens,\n totalTokens,\n cachedInputTokens: numberFrom(details.cached_tokens),\n },\n rawResponse: response,\n };\n\n if (typeof raw.id === \"string\") {\n result.messageId = raw.id;\n }\n\n return result;\n}\n\nexport function fromOpenAIStreamEvent(event: unknown): CompletionStreamEvent | undefined {\n if (!isPlainObject(event) || typeof event.type !== \"string\") {\n return undefined;\n }\n\n if (event.type === \"response.output_text.delta\" || event.type === \"response.refusal.delta\") {\n return typeof event.delta === \"string\" ? { type: \"text_delta\", delta: event.delta } : undefined;\n }\n\n if (\n event.type === \"response.reasoning_text.delta\" ||\n event.type === \"response.reasoning_summary_text.delta\"\n ) {\n if (typeof event.delta !== \"string\") {\n return undefined;\n }\n const mapped: CompletionStreamEvent = { type: \"reasoning_delta\", delta: event.delta };\n const id = stringFrom(event.item_id);\n if (id !== undefined) {\n mapped.id = id;\n }\n if (event.type === \"response.reasoning_summary_text.delta\") {\n mapped.contentType = \"summary\";\n } else {\n mapped.contentType = \"text\";\n }\n return mapped;\n }\n\n if (event.type === \"response.output_item.added\" && isPlainObject(event.item)) {\n const item = event.item;\n if (item.type === \"function_call\") {\n return toolCallDelta(\n stringFrom(item.id) ?? stringFrom(event.item_id) ?? crypto.randomUUID(),\n {\n callId: stringFrom(item.call_id),\n name: stringFrom(item.name),\n argumentsDelta: typeof item.arguments === \"string\" ? item.arguments : undefined,\n },\n );\n }\n if (typeof item.id === \"string\") {\n return { type: \"message_id\", id: item.id };\n }\n }\n\n if (\n event.type === \"response.function_call_arguments.delta\" ||\n event.type === \"response.function_call_arguments.done\"\n ) {\n return toolCallDelta(\n stringFrom(event.item_id) ?? stringFrom(event.output_item_id) ?? crypto.randomUUID(),\n {\n argumentsDelta:\n typeof event.delta === \"string\"\n ? event.delta\n : typeof event.arguments === \"string\"\n ? event.arguments\n : undefined,\n },\n );\n }\n\n if (event.type === \"response.output_item.done\" && isPlainObject(event.item)) {\n const item = event.item;\n if (item.type === \"function_call\") {\n return {\n type: \"tool_call\",\n toolCall: AssistantContent.toolCall(\n stringFrom(item.id) ?? crypto.randomUUID(),\n stringFrom(item.name) ?? \"\",\n parseJsonValue(typeof item.arguments === \"string\" ? item.arguments : \"{}\"),\n stringFrom(item.call_id),\n ),\n };\n }\n }\n\n if (event.type === \"response.completed\" && isPlainObject(event.response)) {\n return {\n type: \"final\",\n response: fromOpenAIResponse(event.response),\n };\n }\n\n if (event.type === \"response.error\") {\n return { type: \"error\", error: event.error ?? event };\n }\n\n return undefined;\n}\n\nfunction messageToResponsesInput(message: MessageType): ResponsesInputItem[] {\n if (message.role === \"system\") {\n return [\n {\n role: \"system\",\n content: message.content,\n },\n ];\n }\n\n if (message.role === \"user\") {\n const inputContent: ResponsesInputItem[] = [];\n\n for (const content of message.content) {\n inputContent.push(...userContentToOpenAIResponsesParts(content));\n }\n\n if (inputContent.length === 1 && inputContent[0]?.type === \"input_text\") {\n return [{ role: \"user\", content: inputContent[0].text }];\n } else if (inputContent.length > 0) {\n return [{ role: \"user\", content: inputContent }];\n }\n\n return [];\n }\n\n if (message.role === \"tool\") {\n return message.content.map(toolContentToOpenAIResponsesItem);\n }\n\n const items: ResponsesInputItem[] = [];\n const text = message.content\n .flatMap((content) => (content.type === \"text\" ? [content.text] : []))\n .join(\"\\n\");\n if (text.length > 0) {\n items.push({ role: \"assistant\", content: text });\n }\n\n for (const content of message.content) {\n if (content.type === \"reasoning\" && content.id !== undefined) {\n items.push(reasoningToOpenAIInput(content));\n }\n if (content.type === \"tool_call\") {\n items.push({\n type: \"function_call\",\n id: content.id,\n call_id: content.callId ?? content.id,\n name: content.function.name,\n arguments: JSON.stringify(content.function.arguments ?? {}),\n });\n }\n if (content.type === \"image\") {\n throw new Error(\"OpenAI Responses does not support image content in assistant history\");\n }\n }\n\n return items;\n}\n\nfunction toolContentToOpenAIResponsesItem(content: ToolContent): ResponsesInputItem {\n return {\n type: \"function_call_output\",\n call_id: content.callId ?? content.id,\n output: content.content\n .map((item) => (item.type === \"text\" ? item.text : item.data))\n .join(\"\\n\"),\n };\n}\n\nfunction reasoningItemToAssistantContent(item: Record<string, unknown>): Reasoning {\n const content = reasoningContentFromOpenAIItem(item);\n const id = stringFrom(item.id);\n if (content.length === 0) {\n return AssistantContent.reasoning(\"\", id);\n }\n return AssistantContent.reasoningFromContent(content, id);\n}\n\nfunction reasoningContentFromOpenAIItem(item: Record<string, unknown>): ReasoningContent[] {\n const content: ReasoningContent[] = [];\n if (Array.isArray(item.content)) {\n for (const part of item.content) {\n if (!isPlainObject(part)) {\n continue;\n }\n if (part.type === \"reasoning_text\" && typeof part.text === \"string\") {\n content.push({ type: \"text\", text: part.text });\n }\n }\n }\n if (Array.isArray(item.summary)) {\n for (const summary of item.summary) {\n if (!isPlainObject(summary)) {\n continue;\n }\n if (typeof summary.text === \"string\") {\n content.push({ type: \"summary\", text: summary.text });\n }\n }\n }\n if (typeof item.encrypted_content === \"string\") {\n content.push({ type: \"encrypted\", data: item.encrypted_content });\n }\n return content;\n}\n\nfunction reasoningToOpenAIInput(reasoning: Reasoning): ResponsesInputItem {\n const item: ResponsesInputItem = {\n type: \"reasoning\",\n id: reasoning.id,\n summary:\n reasoning.content\n ?.filter((content): content is Extract<ReasoningContent, { type: \"summary\" }> => {\n return content.type === \"summary\";\n })\n .map((content) => ({ type: \"summary_text\", text: content.text })) ?? [],\n };\n const textContent = reasoning.content?.flatMap((content) =>\n content.type === \"text\" ? [{ type: \"reasoning_text\", text: content.text }] : [],\n );\n if (textContent !== undefined && textContent.length > 0) {\n item.content = textContent;\n }\n const encrypted = reasoning.content?.find((content) => content.type === \"encrypted\");\n if (encrypted?.type === \"encrypted\") {\n item.encrypted_content = encrypted.data;\n }\n return item;\n}\n\nfunction userContentToOpenAIResponsesParts(content: UserContent): ResponsesInputItem[] {\n if (content.type === \"text\") {\n return [{ type: \"input_text\", text: content.text }];\n }\n\n if (content.type === \"image\") {\n const part: ResponsesInputItem = { type: \"input_image\", image_url: imageUrl(content) };\n if (content.detail !== undefined) {\n part.detail = content.detail;\n }\n return [part];\n }\n\n if (content.type === \"document\") {\n return [documentToOpenAIResponsesPart(content)];\n }\n\n return [];\n}\n\nfunction imageUrl(image: ImageContent): string {\n if (image.source.type === \"url\") {\n return image.source.url;\n }\n\n return `data:${image.source.mediaType};base64,${image.source.data}`;\n}\n\nfunction documentToOpenAIResponsesPart(document: DocumentContent): ResponsesInputItem {\n if (document.source.type === \"text\") {\n return { type: \"input_text\", text: document.source.text };\n }\n\n if (document.source.mediaType !== \"application/pdf\") {\n throw new Error(`OpenAI Responses only supports PDF document attachments`);\n }\n\n if (document.source.type === \"url\") {\n return { type: \"input_file\", file_url: document.source.url };\n }\n\n return {\n type: \"input_file\",\n file_data: `data:${document.source.mediaType};base64,${document.source.data}`,\n filename: document.source.filename ?? \"document.pdf\",\n };\n}\n\nfunction toolDefinitionToOpenAI(tool: ToolDefinition): ResponsesInputItem {\n return {\n type: \"function\",\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n };\n}\n\nfunction toolChoiceToOpenAI(toolChoice: ToolChoice): unknown {\n if (toolChoice === \"auto\" || toolChoice === \"required\" || toolChoice === \"none\") {\n return toolChoice;\n }\n\n return {\n type: \"function\",\n name: toolChoice.name,\n };\n}\n\nfunction messageOutputToAssistantContent(item: Record<string, unknown>): AssistantContentType[] {\n const content = Array.isArray(item.content) ? item.content : [];\n return content.flatMap((part): AssistantContentType[] => {\n if (!isPlainObject(part)) {\n return [];\n }\n\n if (part.type === \"output_text\" && typeof part.text === \"string\") {\n return [AssistantContent.text(part.text)];\n }\n\n if (part.type === \"text\" && typeof part.text === \"string\") {\n return [AssistantContent.text(part.text)];\n }\n\n return [];\n });\n}\n\nfunction toolCallDelta(\n id: string,\n values: {\n callId?: string | undefined;\n name?: string | undefined;\n argumentsDelta?: string | undefined;\n },\n): CompletionStreamEvent {\n const event: CompletionStreamEvent = { type: \"tool_call_delta\", id };\n if (values.callId !== undefined) event.callId = values.callId;\n if (values.name !== undefined) event.name = values.name;\n if (values.argumentsDelta !== undefined) event.argumentsDelta = values.argumentsDelta;\n return event;\n}\n\nexport const openaiMessageHelpers = {\n messageToResponsesInput,\n toolDefinitionToOpenAI,\n};\n","import type {\n TranscriptionModel,\n TranscriptionRequest,\n TranscriptionResponse,\n} from \"@anvia/core/transcription\";\nimport type { OpenAI } from \"openai\";\nimport { toFile } from \"openai\";\nimport { isPlainObject } from \"../utils\";\n\nexport const WHISPER_1 = \"whisper-1\";\n\nexport class OpenAITranscriptionModel implements TranscriptionModel {\n readonly provider = \"openai\";\n\n constructor(\n private readonly client: OpenAI,\n readonly defaultModel = WHISPER_1,\n ) {}\n\n async transcription(request: TranscriptionRequest): Promise<TranscriptionResponse<unknown>> {\n const params: Record<string, unknown> = {\n model: this.defaultModel,\n file: await toFile(request.data, request.filename),\n };\n\n if (request.language !== undefined) params.language = request.language;\n if (request.prompt !== undefined) params.prompt = request.prompt;\n if (request.temperature !== undefined) params.temperature = request.temperature;\n if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n const response = await this.client.audio.transcriptions.create(params as never);\n return {\n text: transcriptionText(response),\n rawResponse: response,\n };\n }\n}\n\nexport function transcriptionText(response: unknown): string {\n if (typeof response === \"string\") {\n return response;\n }\n if (isPlainObject(response) && typeof response.text === \"string\") {\n return response.text;\n }\n throw new Error(\"OpenAI transcription response contained no text.\");\n}\n"],"mappings":"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","names":["Buffer","mediaTypeFromFormat","Buffer","AssistantContent","assertCompletionRequestSupported","Usage","assertCompletionRequestSupported","requestMessages","AssistantContent","Usage","toolCallDelta","imageUrl"]}
|