@anvia/openai 0.1.3 → 0.1.5
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/README.md +35 -0
- package/dist/index.d.ts +3 -10
- package/dist/index.js +13 -33
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -54,6 +54,41 @@ const model = client.completionModel("openai/gpt-5.2");
|
|
|
54
54
|
|
|
55
55
|
You can also force a specific completion API with `completionApi: "responses"` or `completionApi: "chat"`.
|
|
56
56
|
|
|
57
|
+
### Reasoning tool-call providers
|
|
58
|
+
|
|
59
|
+
Some OpenAI-compatible chat-completions providers return reasoning in provider-specific
|
|
60
|
+
fields while using normal tool calls. For example, Moonshot Kimi K2.6 returns
|
|
61
|
+
`reasoning_content` when thinking is enabled.
|
|
62
|
+
|
|
63
|
+
The chat-completions adapter preserves this reasoning in assistant history and sends it
|
|
64
|
+
back as `reasoning_content` on later turns. This matters after tool calls: providers
|
|
65
|
+
such as Moonshot can reject the next request if an assistant `tool_calls` message is
|
|
66
|
+
missing its prior `reasoning_content`.
|
|
67
|
+
|
|
68
|
+
For Moonshot Kimi K2.6 thinking mode:
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
const client = new OpenAIClient({
|
|
72
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
73
|
+
baseUrl: "https://api.moonshot.ai/v1",
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
const model = client.completionModel("kimi-k2.6");
|
|
77
|
+
|
|
78
|
+
const response = await model.completion({
|
|
79
|
+
chatHistory,
|
|
80
|
+
documents: [],
|
|
81
|
+
tools,
|
|
82
|
+
maxTokens: 16_000,
|
|
83
|
+
additionalParams: {
|
|
84
|
+
thinking: { type: "enabled", keep: "all" },
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Provider caveat: Moonshot rejects forced/specified `tool_choice` while thinking is
|
|
90
|
+
enabled. Let the model choose tools naturally when using Kimi thinking mode.
|
|
91
|
+
|
|
57
92
|
## Other Models
|
|
58
93
|
|
|
59
94
|
```ts
|
package/dist/index.d.ts
CHANGED
|
@@ -16,16 +16,12 @@ declare class OpenAIAudioGenerationModel implements AudioGenerationModel {
|
|
|
16
16
|
audioGeneration(request: AudioGenerationRequest): Promise<AudioGenerationResponse<unknown>>;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
type OpenAIChatCompletionModelOptions = {
|
|
20
|
-
preserveReasoningContent?: boolean | undefined;
|
|
21
|
-
};
|
|
22
19
|
declare class OpenAIChatCompletionModel implements StreamingCompletionModel {
|
|
23
20
|
private readonly client;
|
|
24
21
|
readonly defaultModel: string;
|
|
25
|
-
private readonly options;
|
|
26
22
|
readonly provider = "openai-chat";
|
|
27
23
|
readonly capabilities: CompletionModelCapabilities;
|
|
28
|
-
constructor(client: OpenAI, defaultModel?: string
|
|
24
|
+
constructor(client: OpenAI, defaultModel?: string);
|
|
29
25
|
completion(request: CompletionRequest): Promise<CompletionResponse>;
|
|
30
26
|
streamCompletion(request: CompletionRequest): AsyncIterable<CompletionStreamEvent>;
|
|
31
27
|
}
|
|
@@ -72,13 +68,11 @@ type OpenAIClientOptions = {
|
|
|
72
68
|
baseUrl?: string | undefined;
|
|
73
69
|
headers?: Record<string, string> | undefined;
|
|
74
70
|
completionApi?: "responses" | "chat" | undefined;
|
|
75
|
-
preserveReasoningContent?: boolean | undefined;
|
|
76
71
|
client?: OpenAI$1 | undefined;
|
|
77
72
|
};
|
|
78
73
|
declare class OpenAIClient implements ModelListingClient {
|
|
79
74
|
readonly client: OpenAI$1;
|
|
80
75
|
private readonly completionApi;
|
|
81
|
-
private readonly chatCompletionOptions;
|
|
82
76
|
constructor(options?: OpenAIClientOptions);
|
|
83
77
|
completionModel(model?: string): StreamingCompletionModel;
|
|
84
78
|
embeddingModel(model?: string, options?: ProviderEmbeddingModelOptions): OpenAIEmbeddingModel;
|
|
@@ -106,7 +100,6 @@ type index_OpenAIAudioGenerationModel = OpenAIAudioGenerationModel;
|
|
|
106
100
|
declare const index_OpenAIAudioGenerationModel: typeof OpenAIAudioGenerationModel;
|
|
107
101
|
type index_OpenAIChatCompletionModel = OpenAIChatCompletionModel;
|
|
108
102
|
declare const index_OpenAIChatCompletionModel: typeof OpenAIChatCompletionModel;
|
|
109
|
-
type index_OpenAIChatCompletionModelOptions = OpenAIChatCompletionModelOptions;
|
|
110
103
|
type index_OpenAIClient = OpenAIClient;
|
|
111
104
|
declare const index_OpenAIClient: typeof OpenAIClient;
|
|
112
105
|
type index_OpenAIClientOptions = OpenAIClientOptions;
|
|
@@ -123,7 +116,7 @@ declare const index_TTS_1: typeof TTS_1;
|
|
|
123
116
|
declare const index_TTS_1_HD: typeof TTS_1_HD;
|
|
124
117
|
declare const index_WHISPER_1: typeof WHISPER_1;
|
|
125
118
|
declare namespace index {
|
|
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,
|
|
119
|
+
export { index_DALL_E_2 as DALL_E_2, index_DALL_E_3 as DALL_E_3, index_GPT_IMAGE_1 as GPT_IMAGE_1, index_GPT_IMAGE_2 as GPT_IMAGE_2, index_OpenAIAudioGenerationModel as OpenAIAudioGenerationModel, index_OpenAIChatCompletionModel as OpenAIChatCompletionModel, index_OpenAIClient as OpenAIClient, type index_OpenAIClientOptions as OpenAIClientOptions, index_OpenAIEmbeddingModel as OpenAIEmbeddingModel, index_OpenAIImageGenerationModel as OpenAIImageGenerationModel, index_OpenAIResponsesCompletionModel as OpenAIResponsesCompletionModel, index_OpenAITranscriptionModel as OpenAITranscriptionModel, type index_ProviderEmbeddingModelOptions as ProviderEmbeddingModelOptions, index_TTS_1 as TTS_1, index_TTS_1_HD as TTS_1_HD, index_WHISPER_1 as WHISPER_1 };
|
|
127
120
|
}
|
|
128
121
|
|
|
129
|
-
export { DALL_E_2, DALL_E_3, GPT_IMAGE_1, GPT_IMAGE_2, OpenAIAudioGenerationModel, OpenAIChatCompletionModel,
|
|
122
|
+
export { DALL_E_2, DALL_E_3, GPT_IMAGE_1, GPT_IMAGE_2, OpenAIAudioGenerationModel, OpenAIChatCompletionModel, OpenAIClient, type OpenAIClientOptions, OpenAIEmbeddingModel, OpenAIImageGenerationModel, OpenAIResponsesCompletionModel, OpenAITranscriptionModel, type ProviderEmbeddingModelOptions, TTS_1, TTS_1_HD, WHISPER_1, index as openai };
|
package/dist/index.js
CHANGED
|
@@ -110,14 +110,12 @@ 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") {
|
|
114
114
|
this.client = client;
|
|
115
115
|
this.defaultModel = defaultModel;
|
|
116
|
-
this.options = options;
|
|
117
116
|
}
|
|
118
117
|
client;
|
|
119
118
|
defaultModel;
|
|
120
|
-
options;
|
|
121
119
|
provider = "openai-chat";
|
|
122
120
|
capabilities = {
|
|
123
121
|
streaming: true,
|
|
@@ -130,14 +128,14 @@ var OpenAIChatCompletionModel = class {
|
|
|
130
128
|
};
|
|
131
129
|
async completion(request) {
|
|
132
130
|
assertCompletionRequestSupported(this, request);
|
|
133
|
-
const params = toOpenAIChatCompletionParams(this.defaultModel, request
|
|
131
|
+
const params = toOpenAIChatCompletionParams(this.defaultModel, request);
|
|
134
132
|
const response = await this.client.chat.completions.create(params);
|
|
135
133
|
return fromOpenAIChatCompletionResponse(response);
|
|
136
134
|
}
|
|
137
135
|
async *streamCompletion(request) {
|
|
138
136
|
assertCompletionRequestSupported(this, request, { streaming: true });
|
|
139
137
|
const params = {
|
|
140
|
-
...toOpenAIChatCompletionParams(this.defaultModel, request
|
|
138
|
+
...toOpenAIChatCompletionParams(this.defaultModel, request),
|
|
141
139
|
stream: true
|
|
142
140
|
};
|
|
143
141
|
const streamOptions = isPlainObject(params.stream_options) ? params.stream_options : {};
|
|
@@ -150,12 +148,10 @@ var OpenAIChatCompletionModel = class {
|
|
|
150
148
|
}
|
|
151
149
|
}
|
|
152
150
|
};
|
|
153
|
-
function toOpenAIChatCompletionParams(defaultModel, request
|
|
151
|
+
function toOpenAIChatCompletionParams(defaultModel, request) {
|
|
154
152
|
const params = {
|
|
155
153
|
model: request.model ?? defaultModel,
|
|
156
|
-
messages: requestMessages(request).flatMap(
|
|
157
|
-
(message) => messageToChatMessages(message, options)
|
|
158
|
-
)
|
|
154
|
+
messages: requestMessages(request).flatMap(messageToChatMessages)
|
|
159
155
|
};
|
|
160
156
|
if (request.tools.length > 0) {
|
|
161
157
|
params.tools = request.tools.map(toolDefinitionToOpenAIChatCompletion);
|
|
@@ -193,13 +189,13 @@ function fromOpenAIChatCompletionResponse(response) {
|
|
|
193
189
|
const firstChoice = choices.find(isPlainObject);
|
|
194
190
|
const message = isPlainObject(firstChoice?.message) ? firstChoice.message : {};
|
|
195
191
|
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
|
-
}
|
|
200
192
|
if (typeof message.content === "string" && message.content.length > 0) {
|
|
201
193
|
choice.push(AssistantContent.text(message.content));
|
|
202
194
|
}
|
|
195
|
+
const reasoning = stringFrom(message.reasoning) ?? stringFrom(message.reasoning_content);
|
|
196
|
+
if (reasoning !== void 0 && reasoning.length > 0) {
|
|
197
|
+
choice.push(AssistantContent.reasoning(reasoning));
|
|
198
|
+
}
|
|
203
199
|
const toolCalls = Array.isArray(message.tool_calls) ? message.tool_calls : [];
|
|
204
200
|
for (const toolCall of toolCalls) {
|
|
205
201
|
if (!isPlainObject(toolCall)) {
|
|
@@ -283,7 +279,7 @@ function usageFromOpenAIChatCompletion(usage) {
|
|
|
283
279
|
cachedInputTokens: numberFrom(promptDetails.cached_tokens)
|
|
284
280
|
};
|
|
285
281
|
}
|
|
286
|
-
function messageToChatMessages(message
|
|
282
|
+
function messageToChatMessages(message) {
|
|
287
283
|
if (message.role === "system") {
|
|
288
284
|
return [{ role: "system", content: message.content }];
|
|
289
285
|
}
|
|
@@ -303,9 +299,7 @@ function messageToChatMessages(message, options = {}) {
|
|
|
303
299
|
return message.content.map(toolContentToChatMessage);
|
|
304
300
|
}
|
|
305
301
|
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");
|
|
302
|
+
const reasoning = message.content.flatMap((content) => content.type === "reasoning" ? [content.text] : []).filter((text2) => text2.length > 0).join("\n");
|
|
309
303
|
if (message.content.some((content) => content.type === "image")) {
|
|
310
304
|
throw new Error("OpenAI chat completions does not support image content in assistant history");
|
|
311
305
|
}
|
|
@@ -323,7 +317,7 @@ function messageToChatMessages(message, options = {}) {
|
|
|
323
317
|
if (text.length > 0) {
|
|
324
318
|
chatMessage.content = text;
|
|
325
319
|
}
|
|
326
|
-
if (
|
|
320
|
+
if (reasoning.length > 0) {
|
|
327
321
|
chatMessage.reasoning_content = reasoning;
|
|
328
322
|
}
|
|
329
323
|
if (toolCalls.length > 0) {
|
|
@@ -936,12 +930,8 @@ function transcriptionText(response) {
|
|
|
936
930
|
var OpenAIClient = class {
|
|
937
931
|
client;
|
|
938
932
|
completionApi;
|
|
939
|
-
chatCompletionOptions;
|
|
940
933
|
constructor(options = {}) {
|
|
941
934
|
this.completionApi = options.completionApi ?? (options.baseUrl === void 0 ? "responses" : "chat");
|
|
942
|
-
this.chatCompletionOptions = {
|
|
943
|
-
preserveReasoningContent: options.preserveReasoningContent ?? isMoonshotBaseUrl(options.baseUrl)
|
|
944
|
-
};
|
|
945
935
|
this.client = options.client ?? new OpenAI({
|
|
946
936
|
apiKey: requireApiKey(options.apiKey),
|
|
947
937
|
baseURL: options.baseUrl,
|
|
@@ -949,7 +939,7 @@ var OpenAIClient = class {
|
|
|
949
939
|
});
|
|
950
940
|
}
|
|
951
941
|
completionModel(model = "gpt-5") {
|
|
952
|
-
return this.completionApi === "chat" ? new OpenAIChatCompletionModel(this.client, model
|
|
942
|
+
return this.completionApi === "chat" ? new OpenAIChatCompletionModel(this.client, model) : new OpenAIResponsesCompletionModel(this.client, model);
|
|
953
943
|
}
|
|
954
944
|
embeddingModel(model = "text-embedding-3-small", options = {}) {
|
|
955
945
|
return new OpenAIEmbeddingModel(this.client, model, options);
|
|
@@ -979,16 +969,6 @@ function requireApiKey(apiKey) {
|
|
|
979
969
|
}
|
|
980
970
|
return apiKey;
|
|
981
971
|
}
|
|
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
972
|
async function collectModelsFromResponse(response) {
|
|
993
973
|
if (isAsyncIterable(response)) {
|
|
994
974
|
const models = [];
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/openai/index.ts","../src/utils.ts","../src/openai/audio-generation.ts","../src/openai/chat-completion.ts","../src/request-messages.ts","../src/openai/client.ts","../src/openai/embedding.ts","../src/openai/image-generation.ts","../src/openai/responses.ts","../src/openai/transcription.ts"],"sourcesContent":["export { OpenAIAudioGenerationModel, TTS_1, TTS_1_HD } from \"./audio-generation\";\nexport {\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"]}
|
|
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 reasoning = stringFrom(message.reasoning) ?? stringFrom(message.reasoning_content);\n if (reasoning !== undefined && reasoning.length > 0) {\n choice.push(AssistantContent.reasoning(reasoning));\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 const reasoning = message.content\n .flatMap((content) => (content.type === \"reasoning\" ? [content.text] : []))\n .filter((text) => text.length > 0)\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 (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 { OpenAIChatCompletionModel } from \"./chat-completion\";\nimport { OpenAIEmbeddingModel, type ProviderEmbeddingModelOptions } from \"./embedding\";\nimport { GPT_IMAGE_1, OpenAIImageGenerationModel } from \"./image-generation\";\nimport { OpenAIResponsesCompletionModel } from \"./responses\";\nimport { OpenAITranscriptionModel, WHISPER_1 } from \"./transcription\";\n\nexport type OpenAIClientOptions = {\n apiKey?: string | undefined;\n baseUrl?: string | undefined;\n headers?: Record<string, string> | undefined;\n completionApi?: \"responses\" | \"chat\" | undefined;\n client?: OpenAI | undefined;\n};\n\nexport class OpenAIClient implements ModelListingClient {\n readonly client: OpenAI;\n private readonly completionApi: \"responses\" | \"chat\";\n\n constructor(options: OpenAIClientOptions = {}) {\n this.completionApi =\n options.completionApi ?? (options.baseUrl === undefined ? \"responses\" : \"chat\");\n this.client =\n options.client ??\n new OpenAI({\n apiKey: requireApiKey(options.apiKey),\n baseURL: options.baseUrl,\n defaultHeaders: options.headers,\n });\n }\n\n completionModel(model = \"gpt-5\"): StreamingCompletionModel {\n return this.completionApi === \"chat\"\n ? new OpenAIChatCompletionModel(this.client, model)\n : new OpenAIResponsesCompletionModel(this.client, model);\n }\n\n embeddingModel(\n model = \"text-embedding-3-small\",\n options: ProviderEmbeddingModelOptions = {},\n ): OpenAIEmbeddingModel {\n return new OpenAIEmbeddingModel(this.client, model, options);\n }\n\n imageGenerationModel(model = GPT_IMAGE_1): OpenAIImageGenerationModel {\n return new OpenAIImageGenerationModel(this.client, model);\n }\n\n audioGenerationModel(model = TTS_1): OpenAIAudioGenerationModel {\n return new OpenAIAudioGenerationModel(this.client, model);\n }\n\n transcriptionModel(model = WHISPER_1): OpenAITranscriptionModel {\n return new OpenAITranscriptionModel(this.client, model);\n }\n\n async listModels(): Promise<ModelList> {\n try {\n const response = await this.client.models.list();\n const data = (await collectModelsFromResponse(response))\n .map(toListedModel)\n .filter(isListedModel);\n return { data };\n } catch (error) {\n throw toModelListingError(\"OpenAI\", error);\n }\n }\n}\n\nfunction requireApiKey(apiKey: string | undefined): string {\n if (apiKey === undefined || apiKey.length === 0) {\n throw new Error(\"Missing OpenAI credentials. Pass apiKey when constructing OpenAIClient.\");\n }\n\n return apiKey;\n}\n\nasync function collectModelsFromResponse(response: unknown): Promise<unknown[]> {\n if (isAsyncIterable(response)) {\n const models: unknown[] = [];\n for await (const model of response) {\n models.push(model);\n }\n return models;\n }\n\n if (Array.isArray(response)) {\n return response;\n }\n\n if (isObject(response) && Array.isArray(response.data)) {\n return response.data;\n }\n\n return [];\n}\n\nfunction toListedModel(model: unknown): ModelList[\"data\"][number] | undefined {\n if (!isObject(model) || typeof model.id !== \"string\") {\n return undefined;\n }\n\n return {\n id: model.id,\n ...(typeof model.name === \"string\" ? { name: model.name } : {}),\n ...(typeof model.description === \"string\" ? { description: model.description } : {}),\n ...(typeof model.type === \"string\"\n ? { type: model.type }\n : typeof model.object === \"string\"\n ? { type: model.object }\n : {}),\n ...(typeof model.created === \"number\" ? { createdAt: model.created } : {}),\n ...(typeof model.created_at === \"number\" ? { createdAt: model.created_at } : {}),\n ...(typeof model.owned_by === \"string\" ? { ownedBy: model.owned_by } : {}),\n ...(typeof model.context_length === \"number\" ? { contextLength: model.context_length } : {}),\n ...(typeof model.contextLength === \"number\" ? { contextLength: model.contextLength } : {}),\n };\n}\n\nfunction isListedModel(\n model: ModelList[\"data\"][number] | undefined,\n): model is ModelList[\"data\"][number] {\n return model !== undefined;\n}\n\nfunction toModelListingError(provider: string, error: unknown): ModelListingError {\n if (error instanceof ModelListingError) {\n return error;\n }\n\n const statusCode = getStatusCode(error);\n return new ModelListingError(`${provider} model listing failed: ${getErrorMessage(error)}`, {\n provider,\n ...(statusCode === undefined ? {} : { statusCode }),\n cause: error,\n });\n}\n\nfunction getStatusCode(error: unknown): number | undefined {\n if (!isObject(error)) {\n return undefined;\n }\n\n if (typeof error.status === \"number\") {\n return error.status;\n }\n\n if (typeof error.statusCode === \"number\") {\n return error.statusCode;\n }\n\n return undefined;\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return isObject(value) && Symbol.asyncIterator in value;\n}\n","import type { Embedding, EmbeddingModel } from \"@anvia/core/embeddings\";\nimport type OpenAI from \"openai\";\n\nexport type ProviderEmbeddingModelOptions = {\n dimensions?: number | undefined;\n user?: string | undefined;\n maxBatchSize?: number | undefined;\n};\n\nexport class OpenAIEmbeddingModel implements EmbeddingModel {\n readonly dimensions: number | undefined;\n readonly maxBatchSize: number;\n private readonly user: string | undefined;\n\n constructor(\n private readonly client: OpenAI,\n private readonly model: string,\n options: ProviderEmbeddingModelOptions = {},\n ) {\n this.dimensions = options.dimensions;\n this.maxBatchSize = options.maxBatchSize ?? 1024;\n this.user = options.user;\n }\n\n async embedTexts(texts: string[]): Promise<Embedding[]> {\n const embeddings: Embedding[] = [];\n for (let index = 0; index < texts.length; index += this.maxBatchSize) {\n const batch = texts.slice(index, index + this.maxBatchSize);\n embeddings.push(...(await this.embedBatch(batch)));\n }\n return embeddings;\n }\n\n private async embedBatch(texts: string[]): Promise<Embedding[]> {\n if (texts.length === 0) {\n return [];\n }\n\n const params: Record<string, unknown> = {\n model: this.model,\n input: texts,\n };\n if (this.dimensions !== undefined) {\n params.dimensions = this.dimensions;\n }\n if (this.user !== undefined) {\n params.user = this.user;\n }\n\n const response = await this.client.embeddings.create(params as never);\n const data = Array.isArray(response.data) ? response.data : [];\n if (data.length !== texts.length) {\n throw new Error(\n `Embedding response length ${data.length} did not match input length ${texts.length}`,\n );\n }\n\n return data\n .slice()\n .sort((left, right) => left.index - right.index)\n .map((item, index) => ({\n document: texts[index] as string,\n vector: item.embedding,\n }));\n }\n}\n","import { Buffer } from \"node:buffer\";\nimport type {\n GeneratedImage,\n ImageGenerationModel,\n ImageGenerationRequest,\n ImageGenerationResponse,\n} from \"@anvia/core/image-generation\";\nimport type { OpenAI } from \"openai\";\nimport { isPlainObject } from \"../utils\";\n\nexport const DALL_E_2 = \"dall-e-2\";\nexport const DALL_E_3 = \"dall-e-3\";\nexport const GPT_IMAGE_1 = \"gpt-image-1\";\nexport const GPT_IMAGE_2 = \"gpt-image-2\";\n\nexport class OpenAIImageGenerationModel implements ImageGenerationModel {\n readonly provider = \"openai\";\n\n constructor(\n private readonly client: OpenAI,\n readonly defaultModel = GPT_IMAGE_1,\n ) {}\n\n async imageGeneration(\n request: ImageGenerationRequest,\n ): Promise<ImageGenerationResponse<unknown>> {\n const params: Record<string, unknown> = {\n model: this.defaultModel,\n prompt: request.prompt,\n size: `${request.width}x${request.height}`,\n };\n\n if (this.defaultModel === DALL_E_2 || this.defaultModel === DALL_E_3) {\n params.response_format = \"b64_json\";\n }\n\n if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n const response = await this.client.images.generate(params as never);\n return imageResponseFromOpenAI(response);\n }\n}\n\nexport function imageResponseFromOpenAI(response: unknown): ImageGenerationResponse<unknown> {\n const raw = response as Record<string, unknown>;\n const mediaType = mediaTypeFromFormat(\n typeof raw.output_format === \"string\" ? raw.output_format : \"png\",\n );\n const images = (Array.isArray(raw.data) ? raw.data : []).flatMap((item): GeneratedImage[] => {\n if (!isPlainObject(item) || typeof item.b64_json !== \"string\") {\n return [];\n }\n return [{ data: new Uint8Array(Buffer.from(item.b64_json, \"base64\")), mediaType }];\n });\n\n const image = images[0]?.data;\n if (image === undefined) {\n throw new Error(\"OpenAI image generation response contained no base64 images.\");\n }\n\n return {\n image,\n images,\n mediaType,\n rawResponse: response,\n };\n}\n\nfunction mediaTypeFromFormat(format: string): string {\n if (format === \"jpeg\" || format === \"jpg\") {\n return \"image/jpeg\";\n }\n if (format === \"webp\") {\n return \"image/webp\";\n }\n return \"image/png\";\n}\n","import {\n AssistantContent,\n type AssistantContent as AssistantContentType,\n assertCompletionRequestSupported,\n type CompletionModelCapabilities,\n type CompletionRequest,\n type CompletionResponse,\n type CompletionStreamEvent,\n type DocumentContent,\n type ImageContent,\n type Message as MessageType,\n type Reasoning,\n type ReasoningContent,\n type StreamingCompletionModel,\n type ToolChoice,\n type ToolContent,\n type ToolDefinition,\n Usage,\n type UserContent,\n} from \"@anvia/core/completion\";\nimport type { OpenAI } from \"openai\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport { isPlainObject, numberFrom, parseJsonValue, schemaName, stringFrom } from \"../utils\";\n\ntype ResponsesCreateParams = Record<string, unknown>;\ntype ResponsesInputItem = Record<string, unknown>;\n\nexport class OpenAIResponsesCompletionModel implements StreamingCompletionModel {\n readonly provider = \"openai\";\n readonly capabilities: CompletionModelCapabilities = {\n streaming: true,\n tools: true,\n toolChoice: true,\n imageInput: true,\n documentInput: true,\n outputSchema: true,\n reasoning: true,\n };\n\n constructor(\n private readonly client: OpenAI,\n readonly defaultModel = \"gpt-5\",\n ) {}\n\n async completion(request: CompletionRequest): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this, request);\n const params = toOpenAIResponsesParams(this.defaultModel, request);\n const response = await this.client.responses.create(params as never);\n return fromOpenAIResponse(response);\n }\n\n async *streamCompletion(request: CompletionRequest): AsyncIterable<CompletionStreamEvent> {\n assertCompletionRequestSupported(this, request, { streaming: true });\n const params = { ...toOpenAIResponsesParams(this.defaultModel, request), stream: true };\n const stream = await this.client.responses.create(params as never);\n for await (const event of stream as unknown as AsyncIterable<unknown>) {\n const mapped = fromOpenAIStreamEvent(event);\n if (mapped !== undefined) {\n yield mapped;\n }\n }\n }\n}\n\nexport function toOpenAIResponsesParams(\n defaultModel: string,\n request: CompletionRequest,\n): ResponsesCreateParams {\n const params: ResponsesCreateParams = {\n model: request.model ?? defaultModel,\n input: requestMessages(request).flatMap(messageToResponsesInput),\n };\n\n if (request.instructions !== undefined) {\n params.instructions = request.instructions;\n }\n\n if (request.tools.length > 0) {\n params.tools = request.tools.map(toolDefinitionToOpenAI);\n }\n\n if (request.temperature !== undefined) {\n params.temperature = request.temperature;\n }\n\n if (request.maxTokens !== undefined) {\n params.max_output_tokens = request.maxTokens;\n }\n\n if (request.toolChoice !== undefined) {\n params.tool_choice = toolChoiceToOpenAI(request.toolChoice);\n }\n\n if (request.outputSchema !== undefined) {\n params.text = {\n format: {\n type: \"json_schema\",\n name: schemaName(request.outputSchema),\n strict: true,\n schema: request.outputSchema,\n },\n };\n }\n\n if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n return params;\n}\n\nfunction requestMessages(request: CompletionRequest): MessageType[] {\n return orderedRequestMessages(request);\n}\n\nexport function fromOpenAIResponse(response: unknown): CompletionResponse {\n const raw = response as Record<string, unknown>;\n const output = Array.isArray(raw.output) ? raw.output : [];\n const choice: AssistantContentType[] = [];\n\n for (const item of output) {\n if (!isPlainObject(item)) {\n continue;\n }\n\n if (item.type === \"message\") {\n choice.push(...messageOutputToAssistantContent(item));\n }\n\n if (item.type === \"function_call\") {\n const id = typeof item.id === \"string\" ? item.id : crypto.randomUUID();\n const callId = typeof item.call_id === \"string\" ? item.call_id : undefined;\n const name = typeof item.name === \"string\" ? item.name : \"\";\n const argsText = typeof item.arguments === \"string\" ? item.arguments : \"{}\";\n choice.push(AssistantContent.toolCall(id, name, parseJsonValue(argsText), callId));\n }\n\n if (item.type === \"reasoning\") {\n choice.push(reasoningItemToAssistantContent(item));\n }\n }\n\n const usageSource = isPlainObject(raw.usage) ? raw.usage : {};\n const inputTokens = numberFrom(usageSource.input_tokens);\n const outputTokens = numberFrom(usageSource.output_tokens);\n const totalTokens = numberFrom(usageSource.total_tokens) || inputTokens + outputTokens;\n const details = isPlainObject(usageSource.input_tokens_details)\n ? usageSource.input_tokens_details\n : {};\n\n const result: CompletionResponse = {\n choice,\n usage: {\n ...Usage.empty(),\n inputTokens,\n outputTokens,\n totalTokens,\n cachedInputTokens: numberFrom(details.cached_tokens),\n },\n rawResponse: response,\n };\n\n if (typeof raw.id === \"string\") {\n result.messageId = raw.id;\n }\n\n return result;\n}\n\nexport function fromOpenAIStreamEvent(event: unknown): CompletionStreamEvent | undefined {\n if (!isPlainObject(event) || typeof event.type !== \"string\") {\n return undefined;\n }\n\n if (event.type === \"response.output_text.delta\" || event.type === \"response.refusal.delta\") {\n return typeof event.delta === \"string\" ? { type: \"text_delta\", delta: event.delta } : undefined;\n }\n\n if (\n event.type === \"response.reasoning_text.delta\" ||\n event.type === \"response.reasoning_summary_text.delta\"\n ) {\n if (typeof event.delta !== \"string\") {\n return undefined;\n }\n const mapped: CompletionStreamEvent = { type: \"reasoning_delta\", delta: event.delta };\n const id = stringFrom(event.item_id);\n if (id !== undefined) {\n mapped.id = id;\n }\n if (event.type === \"response.reasoning_summary_text.delta\") {\n mapped.contentType = \"summary\";\n } else {\n mapped.contentType = \"text\";\n }\n return mapped;\n }\n\n if (event.type === \"response.output_item.added\" && isPlainObject(event.item)) {\n const item = event.item;\n if (item.type === \"function_call\") {\n return toolCallDelta(\n stringFrom(item.id) ?? stringFrom(event.item_id) ?? crypto.randomUUID(),\n {\n callId: stringFrom(item.call_id),\n name: stringFrom(item.name),\n argumentsDelta: typeof item.arguments === \"string\" ? item.arguments : undefined,\n },\n );\n }\n if (typeof item.id === \"string\") {\n return { type: \"message_id\", id: item.id };\n }\n }\n\n if (\n event.type === \"response.function_call_arguments.delta\" ||\n event.type === \"response.function_call_arguments.done\"\n ) {\n return toolCallDelta(\n stringFrom(event.item_id) ?? stringFrom(event.output_item_id) ?? crypto.randomUUID(),\n {\n argumentsDelta:\n typeof event.delta === \"string\"\n ? event.delta\n : typeof event.arguments === \"string\"\n ? event.arguments\n : undefined,\n },\n );\n }\n\n if (event.type === \"response.output_item.done\" && isPlainObject(event.item)) {\n const item = event.item;\n if (item.type === \"function_call\") {\n return {\n type: \"tool_call\",\n toolCall: AssistantContent.toolCall(\n stringFrom(item.id) ?? crypto.randomUUID(),\n stringFrom(item.name) ?? \"\",\n parseJsonValue(typeof item.arguments === \"string\" ? item.arguments : \"{}\"),\n stringFrom(item.call_id),\n ),\n };\n }\n }\n\n if (event.type === \"response.completed\" && isPlainObject(event.response)) {\n return {\n type: \"final\",\n response: fromOpenAIResponse(event.response),\n };\n }\n\n if (event.type === \"response.error\") {\n return { type: \"error\", error: event.error ?? event };\n }\n\n return undefined;\n}\n\nfunction messageToResponsesInput(message: MessageType): ResponsesInputItem[] {\n if (message.role === \"system\") {\n return [\n {\n role: \"system\",\n content: message.content,\n },\n ];\n }\n\n if (message.role === \"user\") {\n const inputContent: ResponsesInputItem[] = [];\n\n for (const content of message.content) {\n inputContent.push(...userContentToOpenAIResponsesParts(content));\n }\n\n if (inputContent.length === 1 && inputContent[0]?.type === \"input_text\") {\n return [{ role: \"user\", content: inputContent[0].text }];\n } else if (inputContent.length > 0) {\n return [{ role: \"user\", content: inputContent }];\n }\n\n return [];\n }\n\n if (message.role === \"tool\") {\n return message.content.map(toolContentToOpenAIResponsesItem);\n }\n\n const items: ResponsesInputItem[] = [];\n const text = message.content\n .flatMap((content) => (content.type === \"text\" ? [content.text] : []))\n .join(\"\\n\");\n if (text.length > 0) {\n items.push({ role: \"assistant\", content: text });\n }\n\n for (const content of message.content) {\n if (content.type === \"reasoning\" && content.id !== undefined) {\n items.push(reasoningToOpenAIInput(content));\n }\n if (content.type === \"tool_call\") {\n items.push({\n type: \"function_call\",\n id: content.id,\n call_id: content.callId ?? content.id,\n name: content.function.name,\n arguments: JSON.stringify(content.function.arguments ?? {}),\n });\n }\n if (content.type === \"image\") {\n throw new Error(\"OpenAI Responses does not support image content in assistant history\");\n }\n }\n\n return items;\n}\n\nfunction toolContentToOpenAIResponsesItem(content: ToolContent): ResponsesInputItem {\n return {\n type: \"function_call_output\",\n call_id: content.callId ?? content.id,\n output: content.content\n .map((item) => (item.type === \"text\" ? item.text : item.data))\n .join(\"\\n\"),\n };\n}\n\nfunction reasoningItemToAssistantContent(item: Record<string, unknown>): Reasoning {\n const content = reasoningContentFromOpenAIItem(item);\n const id = stringFrom(item.id);\n if (content.length === 0) {\n return AssistantContent.reasoning(\"\", id);\n }\n return AssistantContent.reasoningFromContent(content, id);\n}\n\nfunction reasoningContentFromOpenAIItem(item: Record<string, unknown>): ReasoningContent[] {\n const content: ReasoningContent[] = [];\n if (Array.isArray(item.content)) {\n for (const part of item.content) {\n if (!isPlainObject(part)) {\n continue;\n }\n if (part.type === \"reasoning_text\" && typeof part.text === \"string\") {\n content.push({ type: \"text\", text: part.text });\n }\n }\n }\n if (Array.isArray(item.summary)) {\n for (const summary of item.summary) {\n if (!isPlainObject(summary)) {\n continue;\n }\n if (typeof summary.text === \"string\") {\n content.push({ type: \"summary\", text: summary.text });\n }\n }\n }\n if (typeof item.encrypted_content === \"string\") {\n content.push({ type: \"encrypted\", data: item.encrypted_content });\n }\n return content;\n}\n\nfunction reasoningToOpenAIInput(reasoning: Reasoning): ResponsesInputItem {\n const item: ResponsesInputItem = {\n type: \"reasoning\",\n id: reasoning.id,\n summary:\n reasoning.content\n ?.filter((content): content is Extract<ReasoningContent, { type: \"summary\" }> => {\n return content.type === \"summary\";\n })\n .map((content) => ({ type: \"summary_text\", text: content.text })) ?? [],\n };\n const textContent = reasoning.content?.flatMap((content) =>\n content.type === \"text\" ? [{ type: \"reasoning_text\", text: content.text }] : [],\n );\n if (textContent !== undefined && textContent.length > 0) {\n item.content = textContent;\n }\n const encrypted = reasoning.content?.find((content) => content.type === \"encrypted\");\n if (encrypted?.type === \"encrypted\") {\n item.encrypted_content = encrypted.data;\n }\n return item;\n}\n\nfunction userContentToOpenAIResponsesParts(content: UserContent): ResponsesInputItem[] {\n if (content.type === \"text\") {\n return [{ type: \"input_text\", text: content.text }];\n }\n\n if (content.type === \"image\") {\n const part: ResponsesInputItem = { type: \"input_image\", image_url: imageUrl(content) };\n if (content.detail !== undefined) {\n part.detail = content.detail;\n }\n return [part];\n }\n\n if (content.type === \"document\") {\n return [documentToOpenAIResponsesPart(content)];\n }\n\n return [];\n}\n\nfunction imageUrl(image: ImageContent): string {\n if (image.source.type === \"url\") {\n return image.source.url;\n }\n\n return `data:${image.source.mediaType};base64,${image.source.data}`;\n}\n\nfunction documentToOpenAIResponsesPart(document: DocumentContent): ResponsesInputItem {\n if (document.source.type === \"text\") {\n return { type: \"input_text\", text: document.source.text };\n }\n\n if (document.source.mediaType !== \"application/pdf\") {\n throw new Error(`OpenAI Responses only supports PDF document attachments`);\n }\n\n if (document.source.type === \"url\") {\n return { type: \"input_file\", file_url: document.source.url };\n }\n\n return {\n type: \"input_file\",\n file_data: `data:${document.source.mediaType};base64,${document.source.data}`,\n filename: document.source.filename ?? \"document.pdf\",\n };\n}\n\nfunction toolDefinitionToOpenAI(tool: ToolDefinition): ResponsesInputItem {\n return {\n type: \"function\",\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n };\n}\n\nfunction toolChoiceToOpenAI(toolChoice: ToolChoice): unknown {\n if (toolChoice === \"auto\" || toolChoice === \"required\" || toolChoice === \"none\") {\n return toolChoice;\n }\n\n return {\n type: \"function\",\n name: toolChoice.name,\n };\n}\n\nfunction messageOutputToAssistantContent(item: Record<string, unknown>): AssistantContentType[] {\n const content = Array.isArray(item.content) ? item.content : [];\n return content.flatMap((part): AssistantContentType[] => {\n if (!isPlainObject(part)) {\n return [];\n }\n\n if (part.type === \"output_text\" && typeof part.text === \"string\") {\n return [AssistantContent.text(part.text)];\n }\n\n if (part.type === \"text\" && typeof part.text === \"string\") {\n return [AssistantContent.text(part.text)];\n }\n\n return [];\n });\n}\n\nfunction toolCallDelta(\n id: string,\n values: {\n callId?: string | undefined;\n name?: string | undefined;\n argumentsDelta?: string | undefined;\n },\n): CompletionStreamEvent {\n const event: CompletionStreamEvent = { type: \"tool_call_delta\", id };\n if (values.callId !== undefined) event.callId = values.callId;\n if (values.name !== undefined) event.name = values.name;\n if (values.argumentsDelta !== undefined) event.argumentsDelta = values.argumentsDelta;\n return event;\n}\n\nexport const openaiMessageHelpers = {\n messageToResponsesInput,\n toolDefinitionToOpenAI,\n};\n","import type {\n TranscriptionModel,\n TranscriptionRequest,\n TranscriptionResponse,\n} from \"@anvia/core/transcription\";\nimport type { OpenAI } from \"openai\";\nimport { toFile } from \"openai\";\nimport { isPlainObject } from \"../utils\";\n\nexport const WHISPER_1 = \"whisper-1\";\n\nexport class OpenAITranscriptionModel implements TranscriptionModel {\n readonly provider = \"openai\";\n\n constructor(\n private readonly client: OpenAI,\n readonly defaultModel = WHISPER_1,\n ) {}\n\n async transcription(request: TranscriptionRequest): Promise<TranscriptionResponse<unknown>> {\n const params: Record<string, unknown> = {\n model: this.defaultModel,\n file: await toFile(request.data, request.filename),\n };\n\n if (request.language !== undefined) params.language = request.language;\n if (request.prompt !== undefined) params.prompt = request.prompt;\n if (request.temperature !== undefined) params.temperature = request.temperature;\n if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n const response = await this.client.audio.transcriptions.create(params as never);\n return {\n text: transcriptionText(response),\n rawResponse: response,\n };\n }\n}\n\nexport function transcriptionText(response: unknown): string {\n if (typeof response === \"string\") {\n return response;\n }\n if (isPlainObject(response) && typeof response.text === \"string\") {\n return response.text;\n }\n throw new Error(\"OpenAI transcription response contained no text.\");\n}\n"],"mappings":"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","names":["text","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.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "OpenAI provider adapter for Anvia.",
|
|
5
5
|
"author": "anvia",
|
|
6
6
|
"maintainer": "Indra Zulfi",
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"openai": "^6.
|
|
22
|
-
"@anvia/core": "0.
|
|
21
|
+
"openai": "^6.37.0",
|
|
22
|
+
"@anvia/core": "0.2.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@types/node": "^24.9.1",
|