@anvia/openai 0.1.1 → 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 CHANGED
@@ -1,6 +1,7 @@
1
1
  import { AudioGenerationModel, AudioGenerationRequest, AudioGenerationResponse } from '@anvia/core/audio-generation';
2
2
  import OpenAI$1, { OpenAI } from 'openai';
3
3
  import { StreamingCompletionModel, CompletionModelCapabilities, CompletionRequest, CompletionResponse, CompletionStreamEvent } from '@anvia/core/completion';
4
+ import { ModelListingClient, ModelList } from '@anvia/core';
4
5
  import { EmbeddingModel, Embedding } from '@anvia/core/embeddings';
5
6
  import { ImageGenerationModel, ImageGenerationRequest, ImageGenerationResponse } from '@anvia/core/image-generation';
6
7
  import { TranscriptionModel, TranscriptionRequest, TranscriptionResponse } from '@anvia/core/transcription';
@@ -15,12 +16,16 @@ declare class OpenAIAudioGenerationModel implements AudioGenerationModel {
15
16
  audioGeneration(request: AudioGenerationRequest): Promise<AudioGenerationResponse<unknown>>;
16
17
  }
17
18
 
19
+ type OpenAIChatCompletionModelOptions = {
20
+ preserveReasoningContent?: boolean | undefined;
21
+ };
18
22
  declare class OpenAIChatCompletionModel implements StreamingCompletionModel {
19
23
  private readonly client;
20
24
  readonly defaultModel: string;
25
+ private readonly options;
21
26
  readonly provider = "openai-chat";
22
27
  readonly capabilities: CompletionModelCapabilities;
23
- constructor(client: OpenAI, defaultModel?: string);
28
+ constructor(client: OpenAI, defaultModel?: string, options?: OpenAIChatCompletionModelOptions);
24
29
  completion(request: CompletionRequest): Promise<CompletionResponse>;
25
30
  streamCompletion(request: CompletionRequest): AsyncIterable<CompletionStreamEvent>;
26
31
  }
@@ -67,17 +72,20 @@ type OpenAIClientOptions = {
67
72
  baseUrl?: string | undefined;
68
73
  headers?: Record<string, string> | undefined;
69
74
  completionApi?: "responses" | "chat" | undefined;
75
+ preserveReasoningContent?: boolean | undefined;
70
76
  client?: OpenAI$1 | undefined;
71
77
  };
72
- declare class OpenAIClient {
78
+ declare class OpenAIClient implements ModelListingClient {
73
79
  readonly client: OpenAI$1;
74
80
  private readonly completionApi;
81
+ private readonly chatCompletionOptions;
75
82
  constructor(options?: OpenAIClientOptions);
76
83
  completionModel(model?: string): StreamingCompletionModel;
77
84
  embeddingModel(model?: string, options?: ProviderEmbeddingModelOptions): OpenAIEmbeddingModel;
78
85
  imageGenerationModel(model?: string): OpenAIImageGenerationModel;
79
86
  audioGenerationModel(model?: string): OpenAIAudioGenerationModel;
80
87
  transcriptionModel(model?: string): OpenAITranscriptionModel;
88
+ listModels(): Promise<ModelList>;
81
89
  }
82
90
 
83
91
  declare class OpenAIResponsesCompletionModel implements StreamingCompletionModel {
@@ -98,6 +106,7 @@ type index_OpenAIAudioGenerationModel = OpenAIAudioGenerationModel;
98
106
  declare const index_OpenAIAudioGenerationModel: typeof OpenAIAudioGenerationModel;
99
107
  type index_OpenAIChatCompletionModel = OpenAIChatCompletionModel;
100
108
  declare const index_OpenAIChatCompletionModel: typeof OpenAIChatCompletionModel;
109
+ type index_OpenAIChatCompletionModelOptions = OpenAIChatCompletionModelOptions;
101
110
  type index_OpenAIClient = OpenAIClient;
102
111
  declare const index_OpenAIClient: typeof OpenAIClient;
103
112
  type index_OpenAIClientOptions = OpenAIClientOptions;
@@ -114,7 +123,7 @@ declare const index_TTS_1: typeof TTS_1;
114
123
  declare const index_TTS_1_HD: typeof TTS_1_HD;
115
124
  declare const index_WHISPER_1: typeof WHISPER_1;
116
125
  declare namespace index {
117
- 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 };
118
127
  }
119
128
 
120
- 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(messageToChatMessages)
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
  }
@@ -382,6 +396,7 @@ function toolCallDelta(id, values) {
382
396
  }
383
397
 
384
398
  // src/openai/client.ts
399
+ import { ModelListingError } from "@anvia/core";
385
400
  import OpenAI from "openai";
386
401
 
387
402
  // src/openai/embedding.ts
@@ -921,8 +936,12 @@ function transcriptionText(response) {
921
936
  var OpenAIClient = class {
922
937
  client;
923
938
  completionApi;
939
+ chatCompletionOptions;
924
940
  constructor(options = {}) {
925
941
  this.completionApi = options.completionApi ?? (options.baseUrl === void 0 ? "responses" : "chat");
942
+ this.chatCompletionOptions = {
943
+ preserveReasoningContent: options.preserveReasoningContent ?? isMoonshotBaseUrl(options.baseUrl)
944
+ };
926
945
  this.client = options.client ?? new OpenAI({
927
946
  apiKey: requireApiKey(options.apiKey),
928
947
  baseURL: options.baseUrl,
@@ -930,7 +949,7 @@ var OpenAIClient = class {
930
949
  });
931
950
  }
932
951
  completionModel(model = "gpt-5") {
933
- 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);
934
953
  }
935
954
  embeddingModel(model = "text-embedding-3-small", options = {}) {
936
955
  return new OpenAIEmbeddingModel(this.client, model, options);
@@ -944,6 +963,15 @@ var OpenAIClient = class {
944
963
  transcriptionModel(model = WHISPER_1) {
945
964
  return new OpenAITranscriptionModel(this.client, model);
946
965
  }
966
+ async listModels() {
967
+ try {
968
+ const response = await this.client.models.list();
969
+ const data = (await collectModelsFromResponse(response)).map(toListedModel).filter(isListedModel);
970
+ return { data };
971
+ } catch (error) {
972
+ throw toModelListingError("OpenAI", error);
973
+ }
974
+ }
947
975
  };
948
976
  function requireApiKey(apiKey) {
949
977
  if (apiKey === void 0 || apiKey.length === 0) {
@@ -951,6 +979,83 @@ function requireApiKey(apiKey) {
951
979
  }
952
980
  return apiKey;
953
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
+ }
992
+ async function collectModelsFromResponse(response) {
993
+ if (isAsyncIterable(response)) {
994
+ const models = [];
995
+ for await (const model of response) {
996
+ models.push(model);
997
+ }
998
+ return models;
999
+ }
1000
+ if (Array.isArray(response)) {
1001
+ return response;
1002
+ }
1003
+ if (isObject(response) && Array.isArray(response.data)) {
1004
+ return response.data;
1005
+ }
1006
+ return [];
1007
+ }
1008
+ function toListedModel(model) {
1009
+ if (!isObject(model) || typeof model.id !== "string") {
1010
+ return void 0;
1011
+ }
1012
+ return {
1013
+ id: model.id,
1014
+ ...typeof model.name === "string" ? { name: model.name } : {},
1015
+ ...typeof model.description === "string" ? { description: model.description } : {},
1016
+ ...typeof model.type === "string" ? { type: model.type } : typeof model.object === "string" ? { type: model.object } : {},
1017
+ ...typeof model.created === "number" ? { createdAt: model.created } : {},
1018
+ ...typeof model.created_at === "number" ? { createdAt: model.created_at } : {},
1019
+ ...typeof model.owned_by === "string" ? { ownedBy: model.owned_by } : {},
1020
+ ...typeof model.context_length === "number" ? { contextLength: model.context_length } : {},
1021
+ ...typeof model.contextLength === "number" ? { contextLength: model.contextLength } : {}
1022
+ };
1023
+ }
1024
+ function isListedModel(model) {
1025
+ return model !== void 0;
1026
+ }
1027
+ function toModelListingError(provider, error) {
1028
+ if (error instanceof ModelListingError) {
1029
+ return error;
1030
+ }
1031
+ const statusCode = getStatusCode(error);
1032
+ return new ModelListingError(`${provider} model listing failed: ${getErrorMessage(error)}`, {
1033
+ provider,
1034
+ ...statusCode === void 0 ? {} : { statusCode },
1035
+ cause: error
1036
+ });
1037
+ }
1038
+ function getStatusCode(error) {
1039
+ if (!isObject(error)) {
1040
+ return void 0;
1041
+ }
1042
+ if (typeof error.status === "number") {
1043
+ return error.status;
1044
+ }
1045
+ if (typeof error.statusCode === "number") {
1046
+ return error.statusCode;
1047
+ }
1048
+ return void 0;
1049
+ }
1050
+ function getErrorMessage(error) {
1051
+ return error instanceof Error ? error.message : String(error);
1052
+ }
1053
+ function isObject(value) {
1054
+ return typeof value === "object" && value !== null;
1055
+ }
1056
+ function isAsyncIterable(value) {
1057
+ return isObject(value) && Symbol.asyncIterator in value;
1058
+ }
954
1059
  export {
955
1060
  DALL_E_2,
956
1061
  DALL_E_3,
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 { 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 {\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\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","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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anvia/openai",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "OpenAI provider adapter for Anvia.",
5
5
  "author": "anvia",
6
6
  "maintainer": "Indra Zulfi",
@@ -19,7 +19,7 @@
19
19
  },
20
20
  "dependencies": {
21
21
  "openai": "^6.36.0",
22
- "@anvia/core": "0.1.3"
22
+ "@anvia/core": "0.1.4"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@types/node": "^24.9.1",