@apertis/ai-sdk-provider 1.0.0 → 1.1.1

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 CHANGED
@@ -79,15 +79,43 @@ const { text } = await generateText({
79
79
  });
80
80
  ```
81
81
 
82
+ ### Embeddings
83
+
84
+ Generate vector embeddings for semantic search and similarity:
85
+
86
+ ```typescript
87
+ import { apertis } from '@apertis/ai-sdk-provider';
88
+ import { embed, embedMany } from 'ai';
89
+
90
+ // Single embedding
91
+ const { embedding } = await embed({
92
+ model: apertis.textEmbeddingModel('text-embedding-3-small'),
93
+ value: 'Hello world',
94
+ });
95
+
96
+ // Multiple embeddings
97
+ const { embeddings } = await embedMany({
98
+ model: apertis.textEmbeddingModel('text-embedding-3-large', {
99
+ dimensions: 1024, // Optional: reduce dimensions
100
+ }),
101
+ values: ['Hello', 'World'],
102
+ });
103
+ ```
104
+
82
105
  ## Supported Models
83
106
 
84
107
  Any model available on Apertis AI, including:
85
108
 
109
+ ### Chat Models
86
110
  - `gpt-5.2`, `gpt-5.2-codex`, `gpt-5.1`
87
111
  - `claude-opus-4-5-20251101`, `claude-sonnet-4.5`, `claude-haiku-4.5`
88
112
  - `gemini-3-pro-preview`, `gemini-3-flash-preview`, `gemini-2.5-flash-preview`
89
113
  - And 470+ more models
90
114
 
115
+ ### Embedding Models
116
+ - `text-embedding-3-small`, `text-embedding-3-large`
117
+ - `text-embedding-ada-002`
118
+
91
119
  ## Provider Configuration
92
120
 
93
121
  ```typescript
@@ -100,6 +128,12 @@ const apertis = createApertis({
100
128
  });
101
129
  ```
102
130
 
131
+ ## What's New (v1.1.1)
132
+
133
+ - **ProviderV3 Interface** - Full implementation of `ProviderV3` specification
134
+ - **Embedding Models** - Support for embeddings via `apertis.textEmbeddingModel()`
135
+ - **Schema Fixes** - More flexible response parsing for Apertis API compatibility
136
+
103
137
  ## Breaking Changes (v1.0.0)
104
138
 
105
139
  - **Requires AI SDK 6+** - No longer compatible with AI SDK 5.x
package/dist/index.cjs CHANGED
@@ -26,7 +26,7 @@ __export(index_exports, {
26
26
  module.exports = __toCommonJS(index_exports);
27
27
 
28
28
  // src/apertis-provider.ts
29
- var import_provider_utils3 = require("@ai-sdk/provider-utils");
29
+ var import_provider_utils4 = require("@ai-sdk/provider-utils");
30
30
 
31
31
  // src/apertis-chat-language-model.ts
32
32
  var import_provider_utils2 = require("@ai-sdk/provider-utils");
@@ -50,7 +50,7 @@ var apertisFailedResponseHandler = (0, import_provider_utils.createJsonErrorResp
50
50
  // src/schemas/chat-response.ts
51
51
  var import_zod2 = require("zod");
52
52
  var openAIChatResponseSchema = import_zod2.z.object({
53
- id: import_zod2.z.string(),
53
+ id: import_zod2.z.string().optional(),
54
54
  object: import_zod2.z.literal("chat.completion").optional(),
55
55
  created: import_zod2.z.number().optional(),
56
56
  model: import_zod2.z.string().optional(),
@@ -82,7 +82,7 @@ var openAIChatResponseSchema = import_zod2.z.object({
82
82
  }).optional()
83
83
  });
84
84
  var openAIChatChunkSchema = import_zod2.z.object({
85
- id: import_zod2.z.string(),
85
+ id: import_zod2.z.string().optional(),
86
86
  object: import_zod2.z.literal("chat.completion.chunk").optional(),
87
87
  created: import_zod2.z.number().optional(),
88
88
  model: import_zod2.z.string().optional(),
@@ -480,12 +480,79 @@ var ApertisChatLanguageModel = class {
480
480
  }
481
481
  };
482
482
 
483
+ // src/apertis-embedding-model.ts
484
+ var import_provider_utils3 = require("@ai-sdk/provider-utils");
485
+
486
+ // src/schemas/embedding-response.ts
487
+ var import_zod3 = require("zod");
488
+ var openAIEmbeddingResponseSchema = import_zod3.z.object({
489
+ object: import_zod3.z.literal("list").optional(),
490
+ data: import_zod3.z.array(
491
+ import_zod3.z.object({
492
+ object: import_zod3.z.literal("embedding").optional(),
493
+ embedding: import_zod3.z.array(import_zod3.z.number()),
494
+ index: import_zod3.z.number()
495
+ })
496
+ ),
497
+ model: import_zod3.z.string().optional(),
498
+ usage: import_zod3.z.object({
499
+ prompt_tokens: import_zod3.z.number(),
500
+ total_tokens: import_zod3.z.number()
501
+ }).optional()
502
+ });
503
+
504
+ // src/apertis-embedding-model.ts
505
+ var ApertisEmbeddingModel = class {
506
+ constructor(modelId, settings, config) {
507
+ this.modelId = modelId;
508
+ this.settings = settings;
509
+ this.config = config;
510
+ this.maxEmbeddingsPerCall = settings.maxEmbeddingsPerCall ?? 2048;
511
+ this.supportsParallelCalls = settings.supportsParallelCalls ?? true;
512
+ }
513
+ specificationVersion = "v3";
514
+ maxEmbeddingsPerCall;
515
+ supportsParallelCalls;
516
+ get provider() {
517
+ return this.config.provider;
518
+ }
519
+ async doEmbed(options) {
520
+ const body = {
521
+ model: this.modelId,
522
+ input: options.values,
523
+ encoding_format: "float"
524
+ };
525
+ if (this.settings.dimensions !== void 0) {
526
+ body.dimensions = this.settings.dimensions;
527
+ }
528
+ if (this.settings.user !== void 0) {
529
+ body.user = this.settings.user;
530
+ }
531
+ const { value: response } = await (0, import_provider_utils3.postJsonToApi)({
532
+ url: `${this.config.baseURL}/embeddings`,
533
+ headers: this.config.headers(),
534
+ body,
535
+ failedResponseHandler: apertisFailedResponseHandler,
536
+ successfulResponseHandler: (0, import_provider_utils3.createJsonResponseHandler)(
537
+ openAIEmbeddingResponseSchema
538
+ ),
539
+ fetch: this.config.fetch,
540
+ abortSignal: options.abortSignal
541
+ });
542
+ return {
543
+ embeddings: response.data.map((item) => item.embedding),
544
+ usage: response.usage ? { tokens: response.usage.prompt_tokens } : void 0,
545
+ warnings: []
546
+ };
547
+ }
548
+ };
549
+
483
550
  // src/apertis-provider.ts
484
551
  function createApertis(options = {}) {
485
- const baseURL = (0, import_provider_utils3.withoutTrailingSlash)(options.baseURL) ?? "https://api.apertis.ai/v1";
552
+ const baseURL = (0, import_provider_utils4.withoutTrailingSlash)(options.baseURL) ?? "https://api.apertis.ai/v1";
486
553
  const getHeaders = () => ({
487
554
  ...options.headers,
488
- Authorization: `Bearer ${(0, import_provider_utils3.loadApiKey)({
555
+ Authorization: `Bearer ${(0, import_provider_utils4.loadApiKey)({
489
556
  apiKey: options.apiKey,
490
557
  environmentVariableName: "APERTIS_API_KEY",
491
558
  description: "Apertis API key"
@@ -498,11 +565,23 @@ function createApertis(options = {}) {
498
565
  headers: getHeaders,
499
566
  fetch: options.fetch
500
567
  });
568
+ const createEmbeddingModel = (modelId, settings = {}) => new ApertisEmbeddingModel(modelId, settings, {
569
+ provider: "apertis.embedding",
570
+ baseURL,
571
+ headers: getHeaders,
572
+ fetch: options.fetch
573
+ });
501
574
  const provider = Object.assign(
502
575
  (modelId, settings) => createChatModel(modelId, settings),
503
576
  {
577
+ specificationVersion: "v3",
504
578
  chat: createChatModel,
505
- languageModel: createChatModel
579
+ languageModel: (modelId) => createChatModel(modelId),
580
+ embeddingModel: (modelId) => createEmbeddingModel(modelId),
581
+ textEmbeddingModel: createEmbeddingModel,
582
+ imageModel: () => {
583
+ throw new Error("Image models are not supported by Apertis");
584
+ }
506
585
  }
507
586
  );
508
587
  return provider;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/apertis-provider.ts","../src/apertis-chat-language-model.ts","../src/apertis-error.ts","../src/schemas/chat-response.ts","../src/utils/map-finish-reason.ts","../src/utils/convert-to-openai-messages.ts","../src/utils/convert-to-openai-tools.ts"],"sourcesContent":["export {\n createApertis,\n apertis,\n type ApertisProvider,\n} from \"./apertis-provider\";\nexport type {\n ApertisProviderSettings,\n ApertisChatSettings,\n ApertisModelId,\n} from \"./apertis-chat-settings\";\n","import type { LanguageModelV3 } from \"@ai-sdk/provider\";\nimport { loadApiKey, withoutTrailingSlash } from \"@ai-sdk/provider-utils\";\nimport { ApertisChatLanguageModel } from \"./apertis-chat-language-model\";\nimport type {\n ApertisChatSettings,\n ApertisModelId,\n ApertisProviderSettings,\n} from \"./apertis-chat-settings\";\n\nexport interface ApertisProvider {\n /**\n * Creates a chat model for text generation.\n */\n (modelId: ApertisModelId, settings?: ApertisChatSettings): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation.\n */\n chat(\n modelId: ApertisModelId,\n settings?: ApertisChatSettings,\n ): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation (alias for languageModel).\n */\n languageModel(\n modelId: ApertisModelId,\n settings?: ApertisChatSettings,\n ): LanguageModelV3;\n}\n\nexport function createApertis(\n options: ApertisProviderSettings = {},\n): ApertisProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? \"https://api.apertis.ai/v1\";\n\n const getHeaders = () => ({\n ...options.headers,\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"APERTIS_API_KEY\",\n description: \"Apertis API key\",\n })}`,\n \"Content-Type\": \"application/json\",\n });\n\n const createChatModel = (\n modelId: ApertisModelId,\n settings: ApertisChatSettings = {},\n ): LanguageModelV3 =>\n new ApertisChatLanguageModel(modelId, settings, {\n provider: \"apertis.chat\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider: ApertisProvider = Object.assign(\n (modelId: ApertisModelId, settings?: ApertisChatSettings) =>\n createChatModel(modelId, settings),\n {\n chat: createChatModel,\n languageModel: createChatModel,\n },\n );\n\n return provider;\n}\n\n/**\n * Default Apertis provider instance.\n */\nexport const apertis = createApertis();\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3FunctionTool,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n LanguageModelV3Usage,\n SharedV3Warning,\n} from \"@ai-sdk/provider\";\nimport {\n type ParseResult,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport type { ApertisChatSettings } from \"./apertis-chat-settings\";\nimport { apertisFailedResponseHandler } from \"./apertis-error\";\nimport {\n type OpenAIChatChunk,\n openAIChatChunkSchema,\n openAIChatResponseSchema,\n} from \"./schemas/chat-response\";\nimport {\n convertToOpenAIMessages,\n convertToOpenAIToolChoice,\n convertToOpenAITools,\n mapApertisFinishReason,\n} from \"./utils\";\n\nexport interface ApertisChatConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: typeof fetch;\n}\n\nexport class ApertisChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = \"v3\" as const;\n\n /**\n * Supported URL patterns for different media types.\n * Supports HTTP(S) image URLs for direct URL passing.\n */\n readonly supportedUrls: Record<string, RegExp[]> = {\n \"image/*\": [/^https?:\\/\\/.+$/],\n };\n\n constructor(\n readonly modelId: string,\n private readonly settings: ApertisChatSettings,\n private readonly config: ApertisChatConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const body = this.buildRequestBody(options, false);\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n openAIChatResponseSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n const choice = response.choices[0];\n\n // Build V3 content array\n const content: LanguageModelV3Content[] = [];\n\n // Add text content if present\n if (choice.message.content) {\n content.push({\n type: \"text\",\n text: choice.message.content,\n });\n }\n\n // Add tool calls if present\n if (choice.message.tool_calls) {\n for (const tc of choice.message.tool_calls) {\n content.push({\n type: \"tool-call\",\n toolCallId: tc.id,\n toolName: tc.function.name,\n input: tc.function.arguments,\n });\n }\n }\n\n return {\n content,\n finishReason: mapApertisFinishReason(choice.finish_reason),\n usage: {\n inputTokens: {\n total: response.usage?.prompt_tokens ?? 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: response.usage?.completion_tokens ?? 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n warnings: [],\n request: { body },\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const body = this.buildRequestBody(options, true);\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n openAIChatChunkSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n const toolCallBuffers: Map<\n number,\n { id: string; name: string; arguments: string }\n > = new Map();\n\n let textId: string | null = null;\n\n const transformStream = new TransformStream<\n ParseResult<OpenAIChatChunk>,\n LanguageModelV3StreamPart\n >({\n transform(parseResult, controller) {\n // Skip failed parse results\n if (!parseResult.success) {\n return;\n }\n\n const chunk = parseResult.value;\n const choice = chunk.choices[0];\n\n if (!choice) return;\n\n // Handle text delta with start/delta/end pattern\n if (choice.delta.content) {\n if (!textId) {\n textId = generateId();\n controller.enqueue({\n type: \"text-start\",\n id: textId,\n });\n }\n controller.enqueue({\n type: \"text-delta\",\n id: textId,\n delta: choice.delta.content,\n });\n }\n\n // Handle tool calls\n if (choice.delta.tool_calls) {\n for (const tc of choice.delta.tool_calls) {\n let buffer = toolCallBuffers.get(tc.index);\n\n if (!buffer) {\n buffer = { id: tc.id ?? generateId(), name: \"\", arguments: \"\" };\n toolCallBuffers.set(tc.index, buffer);\n }\n\n if (tc.id) buffer.id = tc.id;\n if (tc.function?.name) buffer.name += tc.function.name;\n if (tc.function?.arguments)\n buffer.arguments += tc.function.arguments;\n }\n }\n\n // Handle finish\n if (choice.finish_reason) {\n // End text stream if started\n if (textId) {\n controller.enqueue({\n type: \"text-end\",\n id: textId,\n });\n }\n\n // Emit completed tool calls (only those with valid names)\n for (const [, buffer] of toolCallBuffers) {\n if (buffer.name) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: buffer.id,\n toolName: buffer.name,\n input: buffer.arguments,\n });\n }\n }\n // Clear buffers after emitting\n toolCallBuffers.clear();\n\n controller.enqueue({\n type: \"finish\",\n finishReason: mapApertisFinishReason(choice.finish_reason),\n usage: {\n inputTokens: {\n total: chunk.usage?.prompt_tokens ?? 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: chunk.usage?.completion_tokens ?? 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n });\n }\n },\n flush(controller) {\n // End text stream if started but not ended\n if (textId) {\n controller.enqueue({\n type: \"text-end\",\n id: textId,\n });\n }\n\n // Emit any remaining buffered tool calls when stream closes early\n for (const [, buffer] of toolCallBuffers) {\n if (buffer.name) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: buffer.id,\n toolName: buffer.name,\n input: buffer.arguments,\n });\n }\n }\n },\n });\n\n return {\n stream: response.pipeThrough(transformStream),\n request: { body },\n };\n }\n\n private buildRequestBody(\n options: LanguageModelV3CallOptions,\n stream: boolean,\n ) {\n // Extract function tools from options.tools\n const tools = this.filterFunctionTools(options.tools);\n\n // Determine response format\n const responseFormat =\n options.responseFormat?.type === \"json\"\n ? { type: \"json_object\" as const }\n : undefined;\n\n const body: Record<string, unknown> = {\n model: this.modelId,\n messages: convertToOpenAIMessages(options.prompt),\n stream,\n };\n\n // Only add defined optional fields to avoid sending undefined to API\n if (stream) body.stream_options = { include_usage: true };\n if (options.temperature !== undefined)\n body.temperature = options.temperature;\n if (options.maxOutputTokens !== undefined)\n body.max_tokens = options.maxOutputTokens;\n if (options.topP !== undefined) body.top_p = options.topP;\n if (options.frequencyPenalty !== undefined)\n body.frequency_penalty = options.frequencyPenalty;\n if (options.presencePenalty !== undefined)\n body.presence_penalty = options.presencePenalty;\n if (options.stopSequences !== undefined) body.stop = options.stopSequences;\n if (options.seed !== undefined) body.seed = options.seed;\n\n const convertedTools = convertToOpenAITools(tools);\n if (convertedTools !== undefined) body.tools = convertedTools;\n\n const convertedToolChoice = convertToOpenAIToolChoice(options.toolChoice);\n if (convertedToolChoice !== undefined)\n body.tool_choice = convertedToolChoice;\n\n if (responseFormat !== undefined) body.response_format = responseFormat;\n if (this.settings.user !== undefined) body.user = this.settings.user;\n if (this.settings.logprobs !== undefined)\n body.logprobs = this.settings.logprobs;\n if (this.settings.topLogprobs !== undefined)\n body.top_logprobs = this.settings.topLogprobs;\n\n return body;\n }\n\n private filterFunctionTools(\n tools: LanguageModelV3CallOptions[\"tools\"],\n ): LanguageModelV3FunctionTool[] | undefined {\n if (!tools) return undefined;\n return tools.filter(\n (tool): tool is LanguageModelV3FunctionTool => tool.type === \"function\",\n );\n }\n}\n","import { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\n\nconst apertisErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().optional(),\n code: z.string().nullable().optional(),\n param: z.string().nullable().optional(),\n }),\n});\n\nexport type ApertisErrorData = z.infer<typeof apertisErrorSchema>;\n\nexport const apertisFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: apertisErrorSchema,\n errorToMessage: (error) => error.error.message,\n});\n","import { z } from \"zod\";\n\nexport const openAIChatResponseSchema = z.object({\n id: z.string(),\n object: z.literal(\"chat.completion\").optional(),\n created: z.number().optional(),\n model: z.string().optional(),\n choices: z.array(\n z.object({\n index: z.number(),\n message: z.object({\n role: z.literal(\"assistant\"),\n content: z.string().nullable(),\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal(\"function\"),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable(),\n logprobs: z.any().nullable().optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number().optional(),\n })\n .optional(),\n});\n\nexport type OpenAIChatResponse = z.infer<typeof openAIChatResponseSchema>;\n\nexport const openAIChatChunkSchema = z.object({\n id: z.string(),\n object: z.literal(\"chat.completion.chunk\").optional(),\n created: z.number().optional(),\n model: z.string().optional(),\n choices: z.array(\n z.object({\n index: z.number(),\n delta: z.object({\n role: z.literal(\"assistant\").optional(),\n content: z.string().nullable().optional(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().optional(),\n type: z.literal(\"function\").optional(),\n function: z\n .object({\n name: z.string().optional(),\n arguments: z.string().optional(),\n })\n .optional(),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable().optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n })\n .nullish(),\n});\n\nexport type OpenAIChatChunk = z.infer<typeof openAIChatChunkSchema>;\n","import type { LanguageModelV3FinishReason } from \"@ai-sdk/provider\";\n\nexport function mapApertisFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV3FinishReason {\n const raw = finishReason ?? undefined;\n\n switch (finishReason) {\n case \"stop\":\n return { unified: \"stop\", raw };\n case \"length\":\n return { unified: \"length\", raw };\n case \"tool_calls\":\n return { unified: \"tool-calls\", raw };\n case \"content_filter\":\n return { unified: \"content-filter\", raw };\n default:\n return { unified: \"other\", raw };\n }\n}\n","import type { LanguageModelV3Prompt } from \"@ai-sdk/provider\";\n\nexport type OpenAIMessage =\n | { role: \"system\"; content: string }\n | { role: \"user\"; content: string | OpenAIContentPart[] }\n | { role: \"assistant\"; content: string | null; tool_calls?: OpenAIToolCall[] }\n | { role: \"tool\"; tool_call_id: string; content: string };\n\nexport type OpenAIContentPart =\n | { type: \"text\"; text: string }\n | {\n type: \"image_url\";\n image_url: { url: string; detail?: \"auto\" | \"low\" | \"high\" };\n };\n\nexport type OpenAIToolCall = {\n id: string;\n type: \"function\";\n function: { name: string; arguments: string };\n};\n\nexport function convertToOpenAIMessages(\n prompt: LanguageModelV3Prompt,\n): OpenAIMessage[] {\n const messages: OpenAIMessage[] = [];\n\n for (const message of prompt) {\n switch (message.role) {\n case \"system\":\n // V3 system messages have content as string directly\n messages.push({ role: \"system\", content: message.content });\n break;\n\n case \"user\":\n messages.push({\n role: \"user\",\n content: message.content.map((part): OpenAIContentPart => {\n switch (part.type) {\n case \"text\":\n return { type: \"text\", text: part.text };\n case \"file\": {\n // V3 uses 'file' type with mediaType for images\n if (part.mediaType?.startsWith(\"image/\")) {\n let url: string;\n if (part.data instanceof URL) {\n url = part.data.toString();\n } else if (typeof part.data === \"string\") {\n // Assume it's a URL string or base64\n if (\n part.data.startsWith(\"http://\") ||\n part.data.startsWith(\"https://\")\n ) {\n url = part.data;\n } else {\n // Base64 encoded string\n url = `data:${part.mediaType};base64,${part.data}`;\n }\n } else {\n // Uint8Array\n url = `data:${part.mediaType};base64,${Buffer.from(part.data).toString(\"base64\")}`;\n }\n return {\n type: \"image_url\",\n image_url: { url },\n };\n }\n throw new Error(\n `Unsupported file type: ${part.mediaType}. Only image/* is supported.`,\n );\n }\n default:\n throw new Error(\n `Unsupported user content part type: ${(part as { type: string }).type}`,\n );\n }\n }),\n });\n break;\n\n case \"assistant\": {\n const textContent = message.content\n .filter((p) => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\");\n\n const toolCalls = message.content\n .filter((p) => p.type === \"tool-call\")\n .map((tc) => {\n // V3 uses 'input' instead of 'args'\n let arguments_str = \"{}\";\n try {\n arguments_str =\n typeof tc.input === \"string\"\n ? tc.input\n : JSON.stringify(tc.input);\n } catch {\n arguments_str = \"{}\";\n }\n return {\n id: tc.toolCallId,\n type: \"function\" as const,\n function: { name: tc.toolName, arguments: arguments_str },\n };\n });\n\n messages.push({\n role: \"assistant\",\n content: textContent || null,\n ...(toolCalls.length > 0 ? { tool_calls: toolCalls } : {}),\n });\n break;\n }\n\n case \"tool\":\n for (const result of message.content) {\n if (result.type !== \"tool-result\") continue;\n\n // V3 uses 'output' instead of 'result'\n let content = \"{}\";\n const output = result.output;\n\n if (typeof output === \"string\") {\n content = output;\n } else if (Array.isArray(output)) {\n // Output can be an array of content parts\n const textParts = output\n .filter((p) => p.type === \"text\")\n .map((p) => p.text);\n content = textParts.join(\"\");\n } else {\n try {\n content = JSON.stringify(output);\n } catch {\n content = \"{}\";\n }\n }\n\n messages.push({\n role: \"tool\",\n tool_call_id: result.toolCallId,\n content,\n });\n }\n break;\n }\n }\n\n return messages;\n}\n","import type {\n LanguageModelV3FunctionTool,\n LanguageModelV3ToolChoice,\n} from \"@ai-sdk/provider\";\n\nexport type OpenAITool = {\n type: \"function\";\n function: {\n name: string;\n description?: string;\n parameters: Record<string, unknown>;\n };\n};\n\nexport type OpenAIToolChoice =\n | \"none\"\n | \"auto\"\n | \"required\"\n | { type: \"function\"; function: { name: string } };\n\nexport function convertToOpenAITools(\n tools: LanguageModelV3FunctionTool[] | undefined,\n): OpenAITool[] | undefined {\n if (!tools || tools.length === 0) return undefined;\n\n return tools.map((tool) => ({\n type: \"function\" as const,\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema as Record<string, unknown>,\n },\n }));\n}\n\nexport function convertToOpenAIToolChoice(\n toolChoice: LanguageModelV3ToolChoice | undefined,\n): OpenAIToolChoice | undefined {\n if (!toolChoice) return undefined;\n\n switch (toolChoice.type) {\n case \"none\":\n return \"none\";\n case \"auto\":\n return \"auto\";\n case \"required\":\n return \"required\";\n case \"tool\":\n if (!toolChoice.toolName) return undefined;\n return {\n type: \"function\",\n function: { name: toolChoice.toolName },\n };\n default:\n return undefined;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,IAAAA,yBAAiD;;;ACWjD,IAAAC,yBAMO;;;AClBP,4BAA+C;AAC/C,iBAAkB;AAElB,IAAM,qBAAqB,aAAE,OAAO;AAAA,EAClC,OAAO,aAAE,OAAO;AAAA,IACd,SAAS,aAAE,OAAO;AAAA,IAClB,MAAM,aAAE,OAAO,EAAE,SAAS;AAAA,IAC1B,MAAM,aAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IACrC,OAAO,aAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,CAAC;AACH,CAAC;AAIM,IAAM,mCAA+B,sDAA+B;AAAA,EACzE,aAAa;AAAA,EACb,gBAAgB,CAAC,UAAU,MAAM,MAAM;AACzC,CAAC;;;ACjBD,IAAAC,cAAkB;AAEX,IAAM,2BAA2B,cAAE,OAAO;AAAA,EAC/C,IAAI,cAAE,OAAO;AAAA,EACb,QAAQ,cAAE,QAAQ,iBAAiB,EAAE,SAAS;AAAA,EAC9C,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,OAAO,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,SAAS,cAAE;AAAA,IACT,cAAE,OAAO;AAAA,MACP,OAAO,cAAE,OAAO;AAAA,MAChB,SAAS,cAAE,OAAO;AAAA,QAChB,MAAM,cAAE,QAAQ,WAAW;AAAA,QAC3B,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,QAC7B,YAAY,cACT;AAAA,UACC,cAAE,OAAO;AAAA,YACP,IAAI,cAAE,OAAO;AAAA,YACb,MAAM,cAAE,QAAQ,UAAU;AAAA,YAC1B,UAAU,cAAE,OAAO;AAAA,cACjB,MAAM,cAAE,OAAO;AAAA,cACf,WAAW,cAAE,OAAO;AAAA,YACtB,CAAC;AAAA,UACH,CAAC;AAAA,QACH,EACC,SAAS;AAAA,MACd,CAAC;AAAA,MACD,eAAe,cAAE,OAAO,EAAE,SAAS;AAAA,MACnC,UAAU,cAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EACA,OAAO,cACJ,OAAO;AAAA,IACN,eAAe,cAAE,OAAO;AAAA,IACxB,mBAAmB,cAAE,OAAO;AAAA,IAC5B,cAAc,cAAE,OAAO,EAAE,SAAS;AAAA,EACpC,CAAC,EACA,SAAS;AACd,CAAC;AAIM,IAAM,wBAAwB,cAAE,OAAO;AAAA,EAC5C,IAAI,cAAE,OAAO;AAAA,EACb,QAAQ,cAAE,QAAQ,uBAAuB,EAAE,SAAS;AAAA,EACpD,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,OAAO,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,SAAS,cAAE;AAAA,IACT,cAAE,OAAO;AAAA,MACP,OAAO,cAAE,OAAO;AAAA,MAChB,OAAO,cAAE,OAAO;AAAA,QACd,MAAM,cAAE,QAAQ,WAAW,EAAE,SAAS;AAAA,QACtC,SAAS,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,QACxC,YAAY,cACT;AAAA,UACC,cAAE,OAAO;AAAA,YACP,OAAO,cAAE,OAAO;AAAA,YAChB,IAAI,cAAE,OAAO,EAAE,SAAS;AAAA,YACxB,MAAM,cAAE,QAAQ,UAAU,EAAE,SAAS;AAAA,YACrC,UAAU,cACP,OAAO;AAAA,cACN,MAAM,cAAE,OAAO,EAAE,SAAS;AAAA,cAC1B,WAAW,cAAE,OAAO,EAAE,SAAS;AAAA,YACjC,CAAC,EACA,SAAS;AAAA,UACd,CAAC;AAAA,QACH,EACC,SAAS;AAAA,MACd,CAAC;AAAA,MACD,eAAe,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAChD,CAAC;AAAA,EACH;AAAA,EACA,OAAO,cACJ,OAAO;AAAA,IACN,eAAe,cAAE,OAAO;AAAA,IACxB,mBAAmB,cAAE,OAAO;AAAA,EAC9B,CAAC,EACA,QAAQ;AACb,CAAC;;;AC3EM,SAAS,uBACd,cAC6B;AAC7B,QAAM,MAAM,gBAAgB;AAE5B,UAAQ,cAAc;AAAA,IACpB,KAAK;AACH,aAAO,EAAE,SAAS,QAAQ,IAAI;AAAA,IAChC,KAAK;AACH,aAAO,EAAE,SAAS,UAAU,IAAI;AAAA,IAClC,KAAK;AACH,aAAO,EAAE,SAAS,cAAc,IAAI;AAAA,IACtC,KAAK;AACH,aAAO,EAAE,SAAS,kBAAkB,IAAI;AAAA,IAC1C;AACE,aAAO,EAAE,SAAS,SAAS,IAAI;AAAA,EACnC;AACF;;;ACEO,SAAS,wBACd,QACiB;AACjB,QAAM,WAA4B,CAAC;AAEnC,aAAW,WAAW,QAAQ;AAC5B,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK;AAEH,iBAAS,KAAK,EAAE,MAAM,UAAU,SAAS,QAAQ,QAAQ,CAAC;AAC1D;AAAA,MAEF,KAAK;AACH,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,QAAQ,QAAQ,IAAI,CAAC,SAA4B;AACxD,oBAAQ,KAAK,MAAM;AAAA,cACjB,KAAK;AACH,uBAAO,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK;AAAA,cACzC,KAAK,QAAQ;AAEX,oBAAI,KAAK,WAAW,WAAW,QAAQ,GAAG;AACxC,sBAAI;AACJ,sBAAI,KAAK,gBAAgB,KAAK;AAC5B,0BAAM,KAAK,KAAK,SAAS;AAAA,kBAC3B,WAAW,OAAO,KAAK,SAAS,UAAU;AAExC,wBACE,KAAK,KAAK,WAAW,SAAS,KAC9B,KAAK,KAAK,WAAW,UAAU,GAC/B;AACA,4BAAM,KAAK;AAAA,oBACb,OAAO;AAEL,4BAAM,QAAQ,KAAK,SAAS,WAAW,KAAK,IAAI;AAAA,oBAClD;AAAA,kBACF,OAAO;AAEL,0BAAM,QAAQ,KAAK,SAAS,WAAW,OAAO,KAAK,KAAK,IAAI,EAAE,SAAS,QAAQ,CAAC;AAAA,kBAClF;AACA,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,WAAW,EAAE,IAAI;AAAA,kBACnB;AAAA,gBACF;AACA,sBAAM,IAAI;AAAA,kBACR,0BAA0B,KAAK,SAAS;AAAA,gBAC1C;AAAA,cACF;AAAA,cACA;AACE,sBAAM,IAAI;AAAA,kBACR,uCAAwC,KAA0B,IAAI;AAAA,gBACxE;AAAA,YACJ;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AACD;AAAA,MAEF,KAAK,aAAa;AAChB,cAAM,cAAc,QAAQ,QACzB,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,EAC/B,IAAI,CAAC,MAAM,EAAE,IAAI,EACjB,KAAK,EAAE;AAEV,cAAM,YAAY,QAAQ,QACvB,OAAO,CAAC,MAAM,EAAE,SAAS,WAAW,EACpC,IAAI,CAAC,OAAO;AAEX,cAAI,gBAAgB;AACpB,cAAI;AACF,4BACE,OAAO,GAAG,UAAU,WAChB,GAAG,QACH,KAAK,UAAU,GAAG,KAAK;AAAA,UAC/B,QAAQ;AACN,4BAAgB;AAAA,UAClB;AACA,iBAAO;AAAA,YACL,IAAI,GAAG;AAAA,YACP,MAAM;AAAA,YACN,UAAU,EAAE,MAAM,GAAG,UAAU,WAAW,cAAc;AAAA,UAC1D;AAAA,QACF,CAAC;AAEH,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,eAAe;AAAA,UACxB,GAAI,UAAU,SAAS,IAAI,EAAE,YAAY,UAAU,IAAI,CAAC;AAAA,QAC1D,CAAC;AACD;AAAA,MACF;AAAA,MAEA,KAAK;AACH,mBAAW,UAAU,QAAQ,SAAS;AACpC,cAAI,OAAO,SAAS,cAAe;AAGnC,cAAI,UAAU;AACd,gBAAM,SAAS,OAAO;AAEtB,cAAI,OAAO,WAAW,UAAU;AAC9B,sBAAU;AAAA,UACZ,WAAW,MAAM,QAAQ,MAAM,GAAG;AAEhC,kBAAM,YAAY,OACf,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,EAC/B,IAAI,CAAC,MAAM,EAAE,IAAI;AACpB,sBAAU,UAAU,KAAK,EAAE;AAAA,UAC7B,OAAO;AACL,gBAAI;AACF,wBAAU,KAAK,UAAU,MAAM;AAAA,YACjC,QAAQ;AACN,wBAAU;AAAA,YACZ;AAAA,UACF;AAEA,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,cAAc,OAAO;AAAA,YACrB;AAAA,UACF,CAAC;AAAA,QACH;AACA;AAAA,IACJ;AAAA,EACF;AAEA,SAAO;AACT;;;AChIO,SAAS,qBACd,OAC0B;AAC1B,MAAI,CAAC,SAAS,MAAM,WAAW,EAAG,QAAO;AAEzC,SAAO,MAAM,IAAI,CAAC,UAAU;AAAA,IAC1B,MAAM;AAAA,IACN,UAAU;AAAA,MACR,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,YAAY,KAAK;AAAA,IACnB;AAAA,EACF,EAAE;AACJ;AAEO,SAAS,0BACd,YAC8B;AAC9B,MAAI,CAAC,WAAY,QAAO;AAExB,UAAQ,WAAW,MAAM;AAAA,IACvB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,UAAI,CAAC,WAAW,SAAU,QAAO;AACjC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,EAAE,MAAM,WAAW,SAAS;AAAA,MACxC;AAAA,IACF;AACE,aAAO;AAAA,EACX;AACF;;;ALhBO,IAAM,2BAAN,MAA0D;AAAA,EAW/D,YACW,SACQ,UACA,QACjB;AAHS;AACQ;AACA;AAAA,EAChB;AAAA,EAdM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvB,gBAA0C;AAAA,IACjD,WAAW,CAAC,iBAAiB;AAAA,EAC/B;AAAA,EAQA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,MAAM,WACJ,SACwC;AACxC,UAAM,OAAO,KAAK,iBAAiB,SAAS,KAAK;AAEjD,UAAM,EAAE,OAAO,SAAS,IAAI,UAAM,sCAAc;AAAA,MAC9C,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,SAAS,KAAK,OAAO,QAAQ;AAAA,MAC7B;AAAA,MACA,uBAAuB;AAAA,MACvB,+BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,OAAO,KAAK,OAAO;AAAA,MACnB,aAAa,QAAQ;AAAA,IACvB,CAAC;AAED,UAAM,SAAS,SAAS,QAAQ,CAAC;AAGjC,UAAM,UAAoC,CAAC;AAG3C,QAAI,OAAO,QAAQ,SAAS;AAC1B,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM,OAAO,QAAQ;AAAA,MACvB,CAAC;AAAA,IACH;AAGA,QAAI,OAAO,QAAQ,YAAY;AAC7B,iBAAW,MAAM,OAAO,QAAQ,YAAY;AAC1C,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,YAAY,GAAG;AAAA,UACf,UAAU,GAAG,SAAS;AAAA,UACtB,OAAO,GAAG,SAAS;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA,cAAc,uBAAuB,OAAO,aAAa;AAAA,MACzD,OAAO;AAAA,QACL,aAAa;AAAA,UACX,OAAO,SAAS,OAAO,iBAAiB;AAAA,UACxC,SAAS;AAAA,UACT,WAAW;AAAA,UACX,YAAY;AAAA,QACd;AAAA,QACA,cAAc;AAAA,UACZ,OAAO,SAAS,OAAO,qBAAqB;AAAA,UAC5C,MAAM;AAAA,UACN,WAAW;AAAA,QACb;AAAA,MACF;AAAA,MACA,UAAU,CAAC;AAAA,MACX,SAAS,EAAE,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SACsC;AACtC,UAAM,OAAO,KAAK,iBAAiB,SAAS,IAAI;AAEhD,UAAM,EAAE,OAAO,SAAS,IAAI,UAAM,sCAAc;AAAA,MAC9C,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,SAAS,KAAK,OAAO,QAAQ;AAAA,MAC7B;AAAA,MACA,uBAAuB;AAAA,MACvB,+BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,OAAO,KAAK,OAAO;AAAA,MACnB,aAAa,QAAQ;AAAA,IACvB,CAAC;AAED,UAAM,kBAGF,oBAAI,IAAI;AAEZ,QAAI,SAAwB;AAE5B,UAAM,kBAAkB,IAAI,gBAG1B;AAAA,MACA,UAAU,aAAa,YAAY;AAEjC,YAAI,CAAC,YAAY,SAAS;AACxB;AAAA,QACF;AAEA,cAAM,QAAQ,YAAY;AAC1B,cAAM,SAAS,MAAM,QAAQ,CAAC;AAE9B,YAAI,CAAC,OAAQ;AAGb,YAAI,OAAO,MAAM,SAAS;AACxB,cAAI,CAAC,QAAQ;AACX,yBAAS,mCAAW;AACpB,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN,IAAI;AAAA,YACN,CAAC;AAAA,UACH;AACA,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,IAAI;AAAA,YACJ,OAAO,OAAO,MAAM;AAAA,UACtB,CAAC;AAAA,QACH;AAGA,YAAI,OAAO,MAAM,YAAY;AAC3B,qBAAW,MAAM,OAAO,MAAM,YAAY;AACxC,gBAAI,SAAS,gBAAgB,IAAI,GAAG,KAAK;AAEzC,gBAAI,CAAC,QAAQ;AACX,uBAAS,EAAE,IAAI,GAAG,UAAM,mCAAW,GAAG,MAAM,IAAI,WAAW,GAAG;AAC9D,8BAAgB,IAAI,GAAG,OAAO,MAAM;AAAA,YACtC;AAEA,gBAAI,GAAG,GAAI,QAAO,KAAK,GAAG;AAC1B,gBAAI,GAAG,UAAU,KAAM,QAAO,QAAQ,GAAG,SAAS;AAClD,gBAAI,GAAG,UAAU;AACf,qBAAO,aAAa,GAAG,SAAS;AAAA,UACpC;AAAA,QACF;AAGA,YAAI,OAAO,eAAe;AAExB,cAAI,QAAQ;AACV,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN,IAAI;AAAA,YACN,CAAC;AAAA,UACH;AAGA,qBAAW,CAAC,EAAE,MAAM,KAAK,iBAAiB;AACxC,gBAAI,OAAO,MAAM;AACf,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,YAAY,OAAO;AAAA,gBACnB,UAAU,OAAO;AAAA,gBACjB,OAAO,OAAO;AAAA,cAChB,CAAC;AAAA,YACH;AAAA,UACF;AAEA,0BAAgB,MAAM;AAEtB,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,cAAc,uBAAuB,OAAO,aAAa;AAAA,YACzD,OAAO;AAAA,cACL,aAAa;AAAA,gBACX,OAAO,MAAM,OAAO,iBAAiB;AAAA,gBACrC,SAAS;AAAA,gBACT,WAAW;AAAA,gBACX,YAAY;AAAA,cACd;AAAA,cACA,cAAc;AAAA,gBACZ,OAAO,MAAM,OAAO,qBAAqB;AAAA,gBACzC,MAAM;AAAA,gBACN,WAAW;AAAA,cACb;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,MAAM,YAAY;AAEhB,YAAI,QAAQ;AACV,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,IAAI;AAAA,UACN,CAAC;AAAA,QACH;AAGA,mBAAW,CAAC,EAAE,MAAM,KAAK,iBAAiB;AACxC,cAAI,OAAO,MAAM;AACf,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN,YAAY,OAAO;AAAA,cACnB,UAAU,OAAO;AAAA,cACjB,OAAO,OAAO;AAAA,YAChB,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL,QAAQ,SAAS,YAAY,eAAe;AAAA,MAC5C,SAAS,EAAE,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEQ,iBACN,SACA,QACA;AAEA,UAAM,QAAQ,KAAK,oBAAoB,QAAQ,KAAK;AAGpD,UAAM,iBACJ,QAAQ,gBAAgB,SAAS,SAC7B,EAAE,MAAM,cAAuB,IAC/B;AAEN,UAAM,OAAgC;AAAA,MACpC,OAAO,KAAK;AAAA,MACZ,UAAU,wBAAwB,QAAQ,MAAM;AAAA,MAChD;AAAA,IACF;AAGA,QAAI,OAAQ,MAAK,iBAAiB,EAAE,eAAe,KAAK;AACxD,QAAI,QAAQ,gBAAgB;AAC1B,WAAK,cAAc,QAAQ;AAC7B,QAAI,QAAQ,oBAAoB;AAC9B,WAAK,aAAa,QAAQ;AAC5B,QAAI,QAAQ,SAAS,OAAW,MAAK,QAAQ,QAAQ;AACrD,QAAI,QAAQ,qBAAqB;AAC/B,WAAK,oBAAoB,QAAQ;AACnC,QAAI,QAAQ,oBAAoB;AAC9B,WAAK,mBAAmB,QAAQ;AAClC,QAAI,QAAQ,kBAAkB,OAAW,MAAK,OAAO,QAAQ;AAC7D,QAAI,QAAQ,SAAS,OAAW,MAAK,OAAO,QAAQ;AAEpD,UAAM,iBAAiB,qBAAqB,KAAK;AACjD,QAAI,mBAAmB,OAAW,MAAK,QAAQ;AAE/C,UAAM,sBAAsB,0BAA0B,QAAQ,UAAU;AACxE,QAAI,wBAAwB;AAC1B,WAAK,cAAc;AAErB,QAAI,mBAAmB,OAAW,MAAK,kBAAkB;AACzD,QAAI,KAAK,SAAS,SAAS,OAAW,MAAK,OAAO,KAAK,SAAS;AAChE,QAAI,KAAK,SAAS,aAAa;AAC7B,WAAK,WAAW,KAAK,SAAS;AAChC,QAAI,KAAK,SAAS,gBAAgB;AAChC,WAAK,eAAe,KAAK,SAAS;AAEpC,WAAO;AAAA,EACT;AAAA,EAEQ,oBACN,OAC2C;AAC3C,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,MAAM;AAAA,MACX,CAAC,SAA8C,KAAK,SAAS;AAAA,IAC/D;AAAA,EACF;AACF;;;ADtSO,SAAS,cACd,UAAmC,CAAC,GACnB;AACjB,QAAM,cACJ,6CAAqB,QAAQ,OAAO,KAAK;AAE3C,QAAM,aAAa,OAAO;AAAA,IACxB,GAAG,QAAQ;AAAA,IACX,eAAe,cAAU,mCAAW;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC,CAAC;AAAA,IACF,gBAAgB;AAAA,EAClB;AAEA,QAAM,kBAAkB,CACtB,SACA,WAAgC,CAAC,MAEjC,IAAI,yBAAyB,SAAS,UAAU;AAAA,IAC9C,UAAU;AAAA,IACV;AAAA,IACA,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,WAA4B,OAAO;AAAA,IACvC,CAAC,SAAyB,aACxB,gBAAgB,SAAS,QAAQ;AAAA,IACnC;AAAA,MACE,MAAM;AAAA,MACN,eAAe;AAAA,IACjB;AAAA,EACF;AAEA,SAAO;AACT;AAKO,IAAM,UAAU,cAAc;","names":["import_provider_utils","import_provider_utils","import_zod"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/apertis-provider.ts","../src/apertis-chat-language-model.ts","../src/apertis-error.ts","../src/schemas/chat-response.ts","../src/utils/map-finish-reason.ts","../src/utils/convert-to-openai-messages.ts","../src/utils/convert-to-openai-tools.ts","../src/apertis-embedding-model.ts","../src/schemas/embedding-response.ts"],"sourcesContent":["export {\n createApertis,\n apertis,\n type ApertisProvider,\n} from \"./apertis-provider\";\n\n// Chat model exports\nexport type {\n ApertisProviderSettings,\n ApertisChatSettings,\n ApertisModelId,\n} from \"./apertis-chat-settings\";\n\n// Embedding model exports\nexport type {\n ApertisEmbeddingSettings,\n ApertisEmbeddingModelId,\n} from \"./apertis-embedding-settings\";\n","import type {\n EmbeddingModelV3,\n LanguageModelV3,\n ProviderV3,\n} from \"@ai-sdk/provider\";\nimport { loadApiKey, withoutTrailingSlash } from \"@ai-sdk/provider-utils\";\nimport { ApertisChatLanguageModel } from \"./apertis-chat-language-model\";\nimport type {\n ApertisChatSettings,\n ApertisModelId,\n ApertisProviderSettings,\n} from \"./apertis-chat-settings\";\nimport { ApertisEmbeddingModel } from \"./apertis-embedding-model\";\nimport type {\n ApertisEmbeddingModelId,\n ApertisEmbeddingSettings,\n} from \"./apertis-embedding-settings\";\n\nexport interface ApertisProvider extends ProviderV3 {\n /**\n * Creates a chat model for text generation.\n * Default call creates a chat model.\n */\n (modelId: ApertisModelId, settings?: ApertisChatSettings): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation.\n */\n chat(\n modelId: ApertisModelId,\n settings?: ApertisChatSettings,\n ): LanguageModelV3;\n\n /**\n * Creates a language model (alias for chat).\n * Required by ProviderV3 interface.\n */\n languageModel(modelId: string): LanguageModelV3;\n\n /**\n * Creates an embedding model.\n * Required by ProviderV3 interface.\n */\n embeddingModel(modelId: string): EmbeddingModelV3;\n\n /**\n * Creates a text embedding model.\n */\n textEmbeddingModel(\n modelId: ApertisEmbeddingModelId,\n settings?: ApertisEmbeddingSettings,\n ): EmbeddingModelV3;\n\n /**\n * Image models are not supported by Apertis.\n * Required by ProviderV3 interface.\n */\n imageModel(modelId: string): never;\n}\n\nexport function createApertis(\n options: ApertisProviderSettings = {},\n): ApertisProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? \"https://api.apertis.ai/v1\";\n\n const getHeaders = () => ({\n ...options.headers,\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"APERTIS_API_KEY\",\n description: \"Apertis API key\",\n })}`,\n \"Content-Type\": \"application/json\",\n });\n\n const createChatModel = (\n modelId: ApertisModelId,\n settings: ApertisChatSettings = {},\n ): LanguageModelV3 =>\n new ApertisChatLanguageModel(modelId, settings, {\n provider: \"apertis.chat\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createEmbeddingModel = (\n modelId: ApertisEmbeddingModelId,\n settings: ApertisEmbeddingSettings = {},\n ): EmbeddingModelV3 =>\n new ApertisEmbeddingModel(modelId, settings, {\n provider: \"apertis.embedding\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider: ApertisProvider = Object.assign(\n (modelId: ApertisModelId, settings?: ApertisChatSettings) =>\n createChatModel(modelId, settings),\n {\n specificationVersion: \"v3\" as const,\n chat: createChatModel,\n languageModel: (modelId: string) => createChatModel(modelId),\n embeddingModel: (modelId: string) => createEmbeddingModel(modelId),\n textEmbeddingModel: createEmbeddingModel,\n imageModel: (): never => {\n throw new Error(\"Image models are not supported by Apertis\");\n },\n },\n );\n\n return provider;\n}\n\n/**\n * Default Apertis provider instance.\n */\nexport const apertis = createApertis();\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3FunctionTool,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n LanguageModelV3Usage,\n SharedV3Warning,\n} from \"@ai-sdk/provider\";\nimport {\n type ParseResult,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport type { ApertisChatSettings } from \"./apertis-chat-settings\";\nimport { apertisFailedResponseHandler } from \"./apertis-error\";\nimport {\n type OpenAIChatChunk,\n openAIChatChunkSchema,\n openAIChatResponseSchema,\n} from \"./schemas/chat-response\";\nimport {\n convertToOpenAIMessages,\n convertToOpenAIToolChoice,\n convertToOpenAITools,\n mapApertisFinishReason,\n} from \"./utils\";\n\nexport interface ApertisChatConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: typeof fetch;\n}\n\nexport class ApertisChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = \"v3\" as const;\n\n /**\n * Supported URL patterns for different media types.\n * Supports HTTP(S) image URLs for direct URL passing.\n */\n readonly supportedUrls: Record<string, RegExp[]> = {\n \"image/*\": [/^https?:\\/\\/.+$/],\n };\n\n constructor(\n readonly modelId: string,\n private readonly settings: ApertisChatSettings,\n private readonly config: ApertisChatConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const body = this.buildRequestBody(options, false);\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n openAIChatResponseSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n const choice = response.choices[0];\n\n // Build V3 content array\n const content: LanguageModelV3Content[] = [];\n\n // Add text content if present\n if (choice.message.content) {\n content.push({\n type: \"text\",\n text: choice.message.content,\n });\n }\n\n // Add tool calls if present\n if (choice.message.tool_calls) {\n for (const tc of choice.message.tool_calls) {\n content.push({\n type: \"tool-call\",\n toolCallId: tc.id,\n toolName: tc.function.name,\n input: tc.function.arguments,\n });\n }\n }\n\n return {\n content,\n finishReason: mapApertisFinishReason(choice.finish_reason),\n usage: {\n inputTokens: {\n total: response.usage?.prompt_tokens ?? 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: response.usage?.completion_tokens ?? 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n warnings: [],\n request: { body },\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const body = this.buildRequestBody(options, true);\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n openAIChatChunkSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n const toolCallBuffers: Map<\n number,\n { id: string; name: string; arguments: string }\n > = new Map();\n\n let textId: string | null = null;\n\n const transformStream = new TransformStream<\n ParseResult<OpenAIChatChunk>,\n LanguageModelV3StreamPart\n >({\n transform(parseResult, controller) {\n // Skip failed parse results\n if (!parseResult.success) {\n return;\n }\n\n const chunk = parseResult.value;\n const choice = chunk.choices[0];\n\n if (!choice) return;\n\n // Handle text delta with start/delta/end pattern\n if (choice.delta.content) {\n if (!textId) {\n textId = generateId();\n controller.enqueue({\n type: \"text-start\",\n id: textId,\n });\n }\n controller.enqueue({\n type: \"text-delta\",\n id: textId,\n delta: choice.delta.content,\n });\n }\n\n // Handle tool calls\n if (choice.delta.tool_calls) {\n for (const tc of choice.delta.tool_calls) {\n let buffer = toolCallBuffers.get(tc.index);\n\n if (!buffer) {\n buffer = { id: tc.id ?? generateId(), name: \"\", arguments: \"\" };\n toolCallBuffers.set(tc.index, buffer);\n }\n\n if (tc.id) buffer.id = tc.id;\n if (tc.function?.name) buffer.name += tc.function.name;\n if (tc.function?.arguments)\n buffer.arguments += tc.function.arguments;\n }\n }\n\n // Handle finish\n if (choice.finish_reason) {\n // End text stream if started\n if (textId) {\n controller.enqueue({\n type: \"text-end\",\n id: textId,\n });\n }\n\n // Emit completed tool calls (only those with valid names)\n for (const [, buffer] of toolCallBuffers) {\n if (buffer.name) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: buffer.id,\n toolName: buffer.name,\n input: buffer.arguments,\n });\n }\n }\n // Clear buffers after emitting\n toolCallBuffers.clear();\n\n controller.enqueue({\n type: \"finish\",\n finishReason: mapApertisFinishReason(choice.finish_reason),\n usage: {\n inputTokens: {\n total: chunk.usage?.prompt_tokens ?? 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: chunk.usage?.completion_tokens ?? 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n });\n }\n },\n flush(controller) {\n // End text stream if started but not ended\n if (textId) {\n controller.enqueue({\n type: \"text-end\",\n id: textId,\n });\n }\n\n // Emit any remaining buffered tool calls when stream closes early\n for (const [, buffer] of toolCallBuffers) {\n if (buffer.name) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: buffer.id,\n toolName: buffer.name,\n input: buffer.arguments,\n });\n }\n }\n },\n });\n\n return {\n stream: response.pipeThrough(transformStream),\n request: { body },\n };\n }\n\n private buildRequestBody(\n options: LanguageModelV3CallOptions,\n stream: boolean,\n ) {\n // Extract function tools from options.tools\n const tools = this.filterFunctionTools(options.tools);\n\n // Determine response format\n const responseFormat =\n options.responseFormat?.type === \"json\"\n ? { type: \"json_object\" as const }\n : undefined;\n\n const body: Record<string, unknown> = {\n model: this.modelId,\n messages: convertToOpenAIMessages(options.prompt),\n stream,\n };\n\n // Only add defined optional fields to avoid sending undefined to API\n if (stream) body.stream_options = { include_usage: true };\n if (options.temperature !== undefined)\n body.temperature = options.temperature;\n if (options.maxOutputTokens !== undefined)\n body.max_tokens = options.maxOutputTokens;\n if (options.topP !== undefined) body.top_p = options.topP;\n if (options.frequencyPenalty !== undefined)\n body.frequency_penalty = options.frequencyPenalty;\n if (options.presencePenalty !== undefined)\n body.presence_penalty = options.presencePenalty;\n if (options.stopSequences !== undefined) body.stop = options.stopSequences;\n if (options.seed !== undefined) body.seed = options.seed;\n\n const convertedTools = convertToOpenAITools(tools);\n if (convertedTools !== undefined) body.tools = convertedTools;\n\n const convertedToolChoice = convertToOpenAIToolChoice(options.toolChoice);\n if (convertedToolChoice !== undefined)\n body.tool_choice = convertedToolChoice;\n\n if (responseFormat !== undefined) body.response_format = responseFormat;\n if (this.settings.user !== undefined) body.user = this.settings.user;\n if (this.settings.logprobs !== undefined)\n body.logprobs = this.settings.logprobs;\n if (this.settings.topLogprobs !== undefined)\n body.top_logprobs = this.settings.topLogprobs;\n\n return body;\n }\n\n private filterFunctionTools(\n tools: LanguageModelV3CallOptions[\"tools\"],\n ): LanguageModelV3FunctionTool[] | undefined {\n if (!tools) return undefined;\n return tools.filter(\n (tool): tool is LanguageModelV3FunctionTool => tool.type === \"function\",\n );\n }\n}\n","import { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\n\nconst apertisErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().optional(),\n code: z.string().nullable().optional(),\n param: z.string().nullable().optional(),\n }),\n});\n\nexport type ApertisErrorData = z.infer<typeof apertisErrorSchema>;\n\nexport const apertisFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: apertisErrorSchema,\n errorToMessage: (error) => error.error.message,\n});\n","import { z } from \"zod\";\n\nexport const openAIChatResponseSchema = z.object({\n id: z.string().optional(),\n object: z.literal(\"chat.completion\").optional(),\n created: z.number().optional(),\n model: z.string().optional(),\n choices: z.array(\n z.object({\n index: z.number(),\n message: z.object({\n role: z.literal(\"assistant\"),\n content: z.string().nullable(),\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal(\"function\"),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable(),\n logprobs: z.any().nullable().optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number().optional(),\n })\n .optional(),\n});\n\nexport type OpenAIChatResponse = z.infer<typeof openAIChatResponseSchema>;\n\nexport const openAIChatChunkSchema = z.object({\n id: z.string().optional(),\n object: z.literal(\"chat.completion.chunk\").optional(),\n created: z.number().optional(),\n model: z.string().optional(),\n choices: z.array(\n z.object({\n index: z.number(),\n delta: z.object({\n role: z.literal(\"assistant\").optional(),\n content: z.string().nullable().optional(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().optional(),\n type: z.literal(\"function\").optional(),\n function: z\n .object({\n name: z.string().optional(),\n arguments: z.string().optional(),\n })\n .optional(),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable().optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n })\n .nullish(),\n});\n\nexport type OpenAIChatChunk = z.infer<typeof openAIChatChunkSchema>;\n","import type { LanguageModelV3FinishReason } from \"@ai-sdk/provider\";\n\nexport function mapApertisFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV3FinishReason {\n const raw = finishReason ?? undefined;\n\n switch (finishReason) {\n case \"stop\":\n return { unified: \"stop\", raw };\n case \"length\":\n return { unified: \"length\", raw };\n case \"tool_calls\":\n return { unified: \"tool-calls\", raw };\n case \"content_filter\":\n return { unified: \"content-filter\", raw };\n default:\n return { unified: \"other\", raw };\n }\n}\n","import type { LanguageModelV3Prompt } from \"@ai-sdk/provider\";\n\nexport type OpenAIMessage =\n | { role: \"system\"; content: string }\n | { role: \"user\"; content: string | OpenAIContentPart[] }\n | { role: \"assistant\"; content: string | null; tool_calls?: OpenAIToolCall[] }\n | { role: \"tool\"; tool_call_id: string; content: string };\n\nexport type OpenAIContentPart =\n | { type: \"text\"; text: string }\n | {\n type: \"image_url\";\n image_url: { url: string; detail?: \"auto\" | \"low\" | \"high\" };\n };\n\nexport type OpenAIToolCall = {\n id: string;\n type: \"function\";\n function: { name: string; arguments: string };\n};\n\nexport function convertToOpenAIMessages(\n prompt: LanguageModelV3Prompt,\n): OpenAIMessage[] {\n const messages: OpenAIMessage[] = [];\n\n for (const message of prompt) {\n switch (message.role) {\n case \"system\":\n // V3 system messages have content as string directly\n messages.push({ role: \"system\", content: message.content });\n break;\n\n case \"user\":\n messages.push({\n role: \"user\",\n content: message.content.map((part): OpenAIContentPart => {\n switch (part.type) {\n case \"text\":\n return { type: \"text\", text: part.text };\n case \"file\": {\n // V3 uses 'file' type with mediaType for images\n if (part.mediaType?.startsWith(\"image/\")) {\n let url: string;\n if (part.data instanceof URL) {\n url = part.data.toString();\n } else if (typeof part.data === \"string\") {\n // Assume it's a URL string or base64\n if (\n part.data.startsWith(\"http://\") ||\n part.data.startsWith(\"https://\")\n ) {\n url = part.data;\n } else {\n // Base64 encoded string\n url = `data:${part.mediaType};base64,${part.data}`;\n }\n } else {\n // Uint8Array\n url = `data:${part.mediaType};base64,${Buffer.from(part.data).toString(\"base64\")}`;\n }\n return {\n type: \"image_url\",\n image_url: { url },\n };\n }\n throw new Error(\n `Unsupported file type: ${part.mediaType}. Only image/* is supported.`,\n );\n }\n default:\n throw new Error(\n `Unsupported user content part type: ${(part as { type: string }).type}`,\n );\n }\n }),\n });\n break;\n\n case \"assistant\": {\n const textContent = message.content\n .filter((p) => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\");\n\n const toolCalls = message.content\n .filter((p) => p.type === \"tool-call\")\n .map((tc) => {\n // V3 uses 'input' instead of 'args'\n let arguments_str = \"{}\";\n try {\n arguments_str =\n typeof tc.input === \"string\"\n ? tc.input\n : JSON.stringify(tc.input);\n } catch {\n arguments_str = \"{}\";\n }\n return {\n id: tc.toolCallId,\n type: \"function\" as const,\n function: { name: tc.toolName, arguments: arguments_str },\n };\n });\n\n messages.push({\n role: \"assistant\",\n content: textContent || null,\n ...(toolCalls.length > 0 ? { tool_calls: toolCalls } : {}),\n });\n break;\n }\n\n case \"tool\":\n for (const result of message.content) {\n if (result.type !== \"tool-result\") continue;\n\n // V3 uses 'output' instead of 'result'\n let content = \"{}\";\n const output = result.output;\n\n if (typeof output === \"string\") {\n content = output;\n } else if (Array.isArray(output)) {\n // Output can be an array of content parts\n const textParts = output\n .filter((p) => p.type === \"text\")\n .map((p) => p.text);\n content = textParts.join(\"\");\n } else {\n try {\n content = JSON.stringify(output);\n } catch {\n content = \"{}\";\n }\n }\n\n messages.push({\n role: \"tool\",\n tool_call_id: result.toolCallId,\n content,\n });\n }\n break;\n }\n }\n\n return messages;\n}\n","import type {\n LanguageModelV3FunctionTool,\n LanguageModelV3ToolChoice,\n} from \"@ai-sdk/provider\";\n\nexport type OpenAITool = {\n type: \"function\";\n function: {\n name: string;\n description?: string;\n parameters: Record<string, unknown>;\n };\n};\n\nexport type OpenAIToolChoice =\n | \"none\"\n | \"auto\"\n | \"required\"\n | { type: \"function\"; function: { name: string } };\n\nexport function convertToOpenAITools(\n tools: LanguageModelV3FunctionTool[] | undefined,\n): OpenAITool[] | undefined {\n if (!tools || tools.length === 0) return undefined;\n\n return tools.map((tool) => ({\n type: \"function\" as const,\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema as Record<string, unknown>,\n },\n }));\n}\n\nexport function convertToOpenAIToolChoice(\n toolChoice: LanguageModelV3ToolChoice | undefined,\n): OpenAIToolChoice | undefined {\n if (!toolChoice) return undefined;\n\n switch (toolChoice.type) {\n case \"none\":\n return \"none\";\n case \"auto\":\n return \"auto\";\n case \"required\":\n return \"required\";\n case \"tool\":\n if (!toolChoice.toolName) return undefined;\n return {\n type: \"function\",\n function: { name: toolChoice.toolName },\n };\n default:\n return undefined;\n }\n}\n","import type {\n EmbeddingModelV3,\n EmbeddingModelV3CallOptions,\n EmbeddingModelV3Result,\n} from \"@ai-sdk/provider\";\nimport {\n createJsonResponseHandler,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport type {\n ApertisEmbeddingModelId,\n ApertisEmbeddingSettings,\n} from \"./apertis-embedding-settings\";\nimport { apertisFailedResponseHandler } from \"./apertis-error\";\nimport { openAIEmbeddingResponseSchema } from \"./schemas/embedding-response\";\n\nexport interface ApertisEmbeddingConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: typeof fetch;\n}\n\nexport class ApertisEmbeddingModel implements EmbeddingModelV3 {\n readonly specificationVersion = \"v3\" as const;\n\n readonly maxEmbeddingsPerCall: number;\n readonly supportsParallelCalls: boolean;\n\n constructor(\n readonly modelId: ApertisEmbeddingModelId,\n private readonly settings: ApertisEmbeddingSettings,\n private readonly config: ApertisEmbeddingConfig,\n ) {\n this.maxEmbeddingsPerCall = settings.maxEmbeddingsPerCall ?? 2048;\n this.supportsParallelCalls = settings.supportsParallelCalls ?? true;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doEmbed(\n options: EmbeddingModelV3CallOptions,\n ): Promise<EmbeddingModelV3Result> {\n const body: Record<string, unknown> = {\n model: this.modelId,\n input: options.values,\n encoding_format: \"float\",\n };\n\n // Add optional parameters\n if (this.settings.dimensions !== undefined) {\n body.dimensions = this.settings.dimensions;\n }\n if (this.settings.user !== undefined) {\n body.user = this.settings.user;\n }\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/embeddings`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n openAIEmbeddingResponseSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n return {\n embeddings: response.data.map((item) => item.embedding),\n usage: response.usage\n ? { tokens: response.usage.prompt_tokens }\n : undefined,\n warnings: [],\n };\n }\n}\n","import { z } from \"zod\";\n\nexport const openAIEmbeddingResponseSchema = z.object({\n object: z.literal(\"list\").optional(),\n data: z.array(\n z.object({\n object: z.literal(\"embedding\").optional(),\n embedding: z.array(z.number()),\n index: z.number(),\n }),\n ),\n model: z.string().optional(),\n usage: z\n .object({\n prompt_tokens: z.number(),\n total_tokens: z.number(),\n })\n .optional(),\n});\n\nexport type OpenAIEmbeddingResponse = z.infer<\n typeof openAIEmbeddingResponseSchema\n>;\n"],"mappings":"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","names":["import_provider_utils","import_provider_utils","import_zod","import_provider_utils","import_zod"]}
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { LanguageModelV3 } from '@ai-sdk/provider';
1
+ import { ProviderV3, LanguageModelV3, EmbeddingModelV3 } from '@ai-sdk/provider';
2
2
 
3
3
  type ApertisModelId = "gpt-5.2" | "gpt-5.2-codex" | "gpt-5.1" | "claude-opus-4-5-20251101" | "claude-sonnet-4.5" | "claude-haiku-4.5" | "gemini-3-pro-preview" | "gemini-3-flash-preview" | "gemini-2.5-flash-preview" | (string & {});
4
4
  interface ApertisProviderSettings {
@@ -36,9 +36,31 @@ interface ApertisChatSettings {
36
36
  topLogprobs?: number;
37
37
  }
38
38
 
39
- interface ApertisProvider {
39
+ interface ApertisEmbeddingSettings {
40
+ /**
41
+ * Override the maximum number of embeddings per call.
42
+ */
43
+ maxEmbeddingsPerCall?: number;
44
+ /**
45
+ * Override the parallelism of embedding calls.
46
+ */
47
+ supportsParallelCalls?: boolean;
48
+ /**
49
+ * The number of dimensions the resulting output embeddings should have.
50
+ * Only supported in text-embedding-3 and later models.
51
+ */
52
+ dimensions?: number;
53
+ /**
54
+ * A unique identifier representing your end-user.
55
+ */
56
+ user?: string;
57
+ }
58
+ type ApertisEmbeddingModelId = "text-embedding-3-small" | "text-embedding-3-large" | "text-embedding-ada-002" | (string & {});
59
+
60
+ interface ApertisProvider extends ProviderV3 {
40
61
  /**
41
62
  * Creates a chat model for text generation.
63
+ * Default call creates a chat model.
42
64
  */
43
65
  (modelId: ApertisModelId, settings?: ApertisChatSettings): LanguageModelV3;
44
66
  /**
@@ -46,9 +68,24 @@ interface ApertisProvider {
46
68
  */
47
69
  chat(modelId: ApertisModelId, settings?: ApertisChatSettings): LanguageModelV3;
48
70
  /**
49
- * Creates a chat model for text generation (alias for languageModel).
71
+ * Creates a language model (alias for chat).
72
+ * Required by ProviderV3 interface.
73
+ */
74
+ languageModel(modelId: string): LanguageModelV3;
75
+ /**
76
+ * Creates an embedding model.
77
+ * Required by ProviderV3 interface.
78
+ */
79
+ embeddingModel(modelId: string): EmbeddingModelV3;
80
+ /**
81
+ * Creates a text embedding model.
82
+ */
83
+ textEmbeddingModel(modelId: ApertisEmbeddingModelId, settings?: ApertisEmbeddingSettings): EmbeddingModelV3;
84
+ /**
85
+ * Image models are not supported by Apertis.
86
+ * Required by ProviderV3 interface.
50
87
  */
51
- languageModel(modelId: ApertisModelId, settings?: ApertisChatSettings): LanguageModelV3;
88
+ imageModel(modelId: string): never;
52
89
  }
53
90
  declare function createApertis(options?: ApertisProviderSettings): ApertisProvider;
54
91
  /**
@@ -56,4 +93,4 @@ declare function createApertis(options?: ApertisProviderSettings): ApertisProvid
56
93
  */
57
94
  declare const apertis: ApertisProvider;
58
95
 
59
- export { type ApertisChatSettings, type ApertisModelId, type ApertisProvider, type ApertisProviderSettings, apertis, createApertis };
96
+ export { type ApertisChatSettings, type ApertisEmbeddingModelId, type ApertisEmbeddingSettings, type ApertisModelId, type ApertisProvider, type ApertisProviderSettings, apertis, createApertis };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { LanguageModelV3 } from '@ai-sdk/provider';
1
+ import { ProviderV3, LanguageModelV3, EmbeddingModelV3 } from '@ai-sdk/provider';
2
2
 
3
3
  type ApertisModelId = "gpt-5.2" | "gpt-5.2-codex" | "gpt-5.1" | "claude-opus-4-5-20251101" | "claude-sonnet-4.5" | "claude-haiku-4.5" | "gemini-3-pro-preview" | "gemini-3-flash-preview" | "gemini-2.5-flash-preview" | (string & {});
4
4
  interface ApertisProviderSettings {
@@ -36,9 +36,31 @@ interface ApertisChatSettings {
36
36
  topLogprobs?: number;
37
37
  }
38
38
 
39
- interface ApertisProvider {
39
+ interface ApertisEmbeddingSettings {
40
+ /**
41
+ * Override the maximum number of embeddings per call.
42
+ */
43
+ maxEmbeddingsPerCall?: number;
44
+ /**
45
+ * Override the parallelism of embedding calls.
46
+ */
47
+ supportsParallelCalls?: boolean;
48
+ /**
49
+ * The number of dimensions the resulting output embeddings should have.
50
+ * Only supported in text-embedding-3 and later models.
51
+ */
52
+ dimensions?: number;
53
+ /**
54
+ * A unique identifier representing your end-user.
55
+ */
56
+ user?: string;
57
+ }
58
+ type ApertisEmbeddingModelId = "text-embedding-3-small" | "text-embedding-3-large" | "text-embedding-ada-002" | (string & {});
59
+
60
+ interface ApertisProvider extends ProviderV3 {
40
61
  /**
41
62
  * Creates a chat model for text generation.
63
+ * Default call creates a chat model.
42
64
  */
43
65
  (modelId: ApertisModelId, settings?: ApertisChatSettings): LanguageModelV3;
44
66
  /**
@@ -46,9 +68,24 @@ interface ApertisProvider {
46
68
  */
47
69
  chat(modelId: ApertisModelId, settings?: ApertisChatSettings): LanguageModelV3;
48
70
  /**
49
- * Creates a chat model for text generation (alias for languageModel).
71
+ * Creates a language model (alias for chat).
72
+ * Required by ProviderV3 interface.
73
+ */
74
+ languageModel(modelId: string): LanguageModelV3;
75
+ /**
76
+ * Creates an embedding model.
77
+ * Required by ProviderV3 interface.
78
+ */
79
+ embeddingModel(modelId: string): EmbeddingModelV3;
80
+ /**
81
+ * Creates a text embedding model.
82
+ */
83
+ textEmbeddingModel(modelId: ApertisEmbeddingModelId, settings?: ApertisEmbeddingSettings): EmbeddingModelV3;
84
+ /**
85
+ * Image models are not supported by Apertis.
86
+ * Required by ProviderV3 interface.
50
87
  */
51
- languageModel(modelId: ApertisModelId, settings?: ApertisChatSettings): LanguageModelV3;
88
+ imageModel(modelId: string): never;
52
89
  }
53
90
  declare function createApertis(options?: ApertisProviderSettings): ApertisProvider;
54
91
  /**
@@ -56,4 +93,4 @@ declare function createApertis(options?: ApertisProviderSettings): ApertisProvid
56
93
  */
57
94
  declare const apertis: ApertisProvider;
58
95
 
59
- export { type ApertisChatSettings, type ApertisModelId, type ApertisProvider, type ApertisProviderSettings, apertis, createApertis };
96
+ export { type ApertisChatSettings, type ApertisEmbeddingModelId, type ApertisEmbeddingSettings, type ApertisModelId, type ApertisProvider, type ApertisProviderSettings, apertis, createApertis };
package/dist/index.js CHANGED
@@ -28,7 +28,7 @@ var apertisFailedResponseHandler = createJsonErrorResponseHandler({
28
28
  // src/schemas/chat-response.ts
29
29
  import { z as z2 } from "zod";
30
30
  var openAIChatResponseSchema = z2.object({
31
- id: z2.string(),
31
+ id: z2.string().optional(),
32
32
  object: z2.literal("chat.completion").optional(),
33
33
  created: z2.number().optional(),
34
34
  model: z2.string().optional(),
@@ -60,7 +60,7 @@ var openAIChatResponseSchema = z2.object({
60
60
  }).optional()
61
61
  });
62
62
  var openAIChatChunkSchema = z2.object({
63
- id: z2.string(),
63
+ id: z2.string().optional(),
64
64
  object: z2.literal("chat.completion.chunk").optional(),
65
65
  created: z2.number().optional(),
66
66
  model: z2.string().optional(),
@@ -458,6 +458,76 @@ var ApertisChatLanguageModel = class {
458
458
  }
459
459
  };
460
460
 
461
+ // src/apertis-embedding-model.ts
462
+ import {
463
+ createJsonResponseHandler as createJsonResponseHandler2,
464
+ postJsonToApi as postJsonToApi2
465
+ } from "@ai-sdk/provider-utils";
466
+
467
+ // src/schemas/embedding-response.ts
468
+ import { z as z3 } from "zod";
469
+ var openAIEmbeddingResponseSchema = z3.object({
470
+ object: z3.literal("list").optional(),
471
+ data: z3.array(
472
+ z3.object({
473
+ object: z3.literal("embedding").optional(),
474
+ embedding: z3.array(z3.number()),
475
+ index: z3.number()
476
+ })
477
+ ),
478
+ model: z3.string().optional(),
479
+ usage: z3.object({
480
+ prompt_tokens: z3.number(),
481
+ total_tokens: z3.number()
482
+ }).optional()
483
+ });
484
+
485
+ // src/apertis-embedding-model.ts
486
+ var ApertisEmbeddingModel = class {
487
+ constructor(modelId, settings, config) {
488
+ this.modelId = modelId;
489
+ this.settings = settings;
490
+ this.config = config;
491
+ this.maxEmbeddingsPerCall = settings.maxEmbeddingsPerCall ?? 2048;
492
+ this.supportsParallelCalls = settings.supportsParallelCalls ?? true;
493
+ }
494
+ specificationVersion = "v3";
495
+ maxEmbeddingsPerCall;
496
+ supportsParallelCalls;
497
+ get provider() {
498
+ return this.config.provider;
499
+ }
500
+ async doEmbed(options) {
501
+ const body = {
502
+ model: this.modelId,
503
+ input: options.values,
504
+ encoding_format: "float"
505
+ };
506
+ if (this.settings.dimensions !== void 0) {
507
+ body.dimensions = this.settings.dimensions;
508
+ }
509
+ if (this.settings.user !== void 0) {
510
+ body.user = this.settings.user;
511
+ }
512
+ const { value: response } = await postJsonToApi2({
513
+ url: `${this.config.baseURL}/embeddings`,
514
+ headers: this.config.headers(),
515
+ body,
516
+ failedResponseHandler: apertisFailedResponseHandler,
517
+ successfulResponseHandler: createJsonResponseHandler2(
518
+ openAIEmbeddingResponseSchema
519
+ ),
520
+ fetch: this.config.fetch,
521
+ abortSignal: options.abortSignal
522
+ });
523
+ return {
524
+ embeddings: response.data.map((item) => item.embedding),
525
+ usage: response.usage ? { tokens: response.usage.prompt_tokens } : void 0,
526
+ warnings: []
527
+ };
528
+ }
529
+ };
530
+
461
531
  // src/apertis-provider.ts
462
532
  function createApertis(options = {}) {
463
533
  const baseURL = withoutTrailingSlash(options.baseURL) ?? "https://api.apertis.ai/v1";
@@ -476,11 +546,23 @@ function createApertis(options = {}) {
476
546
  headers: getHeaders,
477
547
  fetch: options.fetch
478
548
  });
549
+ const createEmbeddingModel = (modelId, settings = {}) => new ApertisEmbeddingModel(modelId, settings, {
550
+ provider: "apertis.embedding",
551
+ baseURL,
552
+ headers: getHeaders,
553
+ fetch: options.fetch
554
+ });
479
555
  const provider = Object.assign(
480
556
  (modelId, settings) => createChatModel(modelId, settings),
481
557
  {
558
+ specificationVersion: "v3",
482
559
  chat: createChatModel,
483
- languageModel: createChatModel
560
+ languageModel: (modelId) => createChatModel(modelId),
561
+ embeddingModel: (modelId) => createEmbeddingModel(modelId),
562
+ textEmbeddingModel: createEmbeddingModel,
563
+ imageModel: () => {
564
+ throw new Error("Image models are not supported by Apertis");
565
+ }
484
566
  }
485
567
  );
486
568
  return provider;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/apertis-provider.ts","../src/apertis-chat-language-model.ts","../src/apertis-error.ts","../src/schemas/chat-response.ts","../src/utils/map-finish-reason.ts","../src/utils/convert-to-openai-messages.ts","../src/utils/convert-to-openai-tools.ts"],"sourcesContent":["import type { LanguageModelV3 } from \"@ai-sdk/provider\";\nimport { loadApiKey, withoutTrailingSlash } from \"@ai-sdk/provider-utils\";\nimport { ApertisChatLanguageModel } from \"./apertis-chat-language-model\";\nimport type {\n ApertisChatSettings,\n ApertisModelId,\n ApertisProviderSettings,\n} from \"./apertis-chat-settings\";\n\nexport interface ApertisProvider {\n /**\n * Creates a chat model for text generation.\n */\n (modelId: ApertisModelId, settings?: ApertisChatSettings): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation.\n */\n chat(\n modelId: ApertisModelId,\n settings?: ApertisChatSettings,\n ): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation (alias for languageModel).\n */\n languageModel(\n modelId: ApertisModelId,\n settings?: ApertisChatSettings,\n ): LanguageModelV3;\n}\n\nexport function createApertis(\n options: ApertisProviderSettings = {},\n): ApertisProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? \"https://api.apertis.ai/v1\";\n\n const getHeaders = () => ({\n ...options.headers,\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"APERTIS_API_KEY\",\n description: \"Apertis API key\",\n })}`,\n \"Content-Type\": \"application/json\",\n });\n\n const createChatModel = (\n modelId: ApertisModelId,\n settings: ApertisChatSettings = {},\n ): LanguageModelV3 =>\n new ApertisChatLanguageModel(modelId, settings, {\n provider: \"apertis.chat\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider: ApertisProvider = Object.assign(\n (modelId: ApertisModelId, settings?: ApertisChatSettings) =>\n createChatModel(modelId, settings),\n {\n chat: createChatModel,\n languageModel: createChatModel,\n },\n );\n\n return provider;\n}\n\n/**\n * Default Apertis provider instance.\n */\nexport const apertis = createApertis();\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3FunctionTool,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n LanguageModelV3Usage,\n SharedV3Warning,\n} from \"@ai-sdk/provider\";\nimport {\n type ParseResult,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport type { ApertisChatSettings } from \"./apertis-chat-settings\";\nimport { apertisFailedResponseHandler } from \"./apertis-error\";\nimport {\n type OpenAIChatChunk,\n openAIChatChunkSchema,\n openAIChatResponseSchema,\n} from \"./schemas/chat-response\";\nimport {\n convertToOpenAIMessages,\n convertToOpenAIToolChoice,\n convertToOpenAITools,\n mapApertisFinishReason,\n} from \"./utils\";\n\nexport interface ApertisChatConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: typeof fetch;\n}\n\nexport class ApertisChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = \"v3\" as const;\n\n /**\n * Supported URL patterns for different media types.\n * Supports HTTP(S) image URLs for direct URL passing.\n */\n readonly supportedUrls: Record<string, RegExp[]> = {\n \"image/*\": [/^https?:\\/\\/.+$/],\n };\n\n constructor(\n readonly modelId: string,\n private readonly settings: ApertisChatSettings,\n private readonly config: ApertisChatConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const body = this.buildRequestBody(options, false);\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n openAIChatResponseSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n const choice = response.choices[0];\n\n // Build V3 content array\n const content: LanguageModelV3Content[] = [];\n\n // Add text content if present\n if (choice.message.content) {\n content.push({\n type: \"text\",\n text: choice.message.content,\n });\n }\n\n // Add tool calls if present\n if (choice.message.tool_calls) {\n for (const tc of choice.message.tool_calls) {\n content.push({\n type: \"tool-call\",\n toolCallId: tc.id,\n toolName: tc.function.name,\n input: tc.function.arguments,\n });\n }\n }\n\n return {\n content,\n finishReason: mapApertisFinishReason(choice.finish_reason),\n usage: {\n inputTokens: {\n total: response.usage?.prompt_tokens ?? 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: response.usage?.completion_tokens ?? 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n warnings: [],\n request: { body },\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const body = this.buildRequestBody(options, true);\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n openAIChatChunkSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n const toolCallBuffers: Map<\n number,\n { id: string; name: string; arguments: string }\n > = new Map();\n\n let textId: string | null = null;\n\n const transformStream = new TransformStream<\n ParseResult<OpenAIChatChunk>,\n LanguageModelV3StreamPart\n >({\n transform(parseResult, controller) {\n // Skip failed parse results\n if (!parseResult.success) {\n return;\n }\n\n const chunk = parseResult.value;\n const choice = chunk.choices[0];\n\n if (!choice) return;\n\n // Handle text delta with start/delta/end pattern\n if (choice.delta.content) {\n if (!textId) {\n textId = generateId();\n controller.enqueue({\n type: \"text-start\",\n id: textId,\n });\n }\n controller.enqueue({\n type: \"text-delta\",\n id: textId,\n delta: choice.delta.content,\n });\n }\n\n // Handle tool calls\n if (choice.delta.tool_calls) {\n for (const tc of choice.delta.tool_calls) {\n let buffer = toolCallBuffers.get(tc.index);\n\n if (!buffer) {\n buffer = { id: tc.id ?? generateId(), name: \"\", arguments: \"\" };\n toolCallBuffers.set(tc.index, buffer);\n }\n\n if (tc.id) buffer.id = tc.id;\n if (tc.function?.name) buffer.name += tc.function.name;\n if (tc.function?.arguments)\n buffer.arguments += tc.function.arguments;\n }\n }\n\n // Handle finish\n if (choice.finish_reason) {\n // End text stream if started\n if (textId) {\n controller.enqueue({\n type: \"text-end\",\n id: textId,\n });\n }\n\n // Emit completed tool calls (only those with valid names)\n for (const [, buffer] of toolCallBuffers) {\n if (buffer.name) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: buffer.id,\n toolName: buffer.name,\n input: buffer.arguments,\n });\n }\n }\n // Clear buffers after emitting\n toolCallBuffers.clear();\n\n controller.enqueue({\n type: \"finish\",\n finishReason: mapApertisFinishReason(choice.finish_reason),\n usage: {\n inputTokens: {\n total: chunk.usage?.prompt_tokens ?? 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: chunk.usage?.completion_tokens ?? 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n });\n }\n },\n flush(controller) {\n // End text stream if started but not ended\n if (textId) {\n controller.enqueue({\n type: \"text-end\",\n id: textId,\n });\n }\n\n // Emit any remaining buffered tool calls when stream closes early\n for (const [, buffer] of toolCallBuffers) {\n if (buffer.name) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: buffer.id,\n toolName: buffer.name,\n input: buffer.arguments,\n });\n }\n }\n },\n });\n\n return {\n stream: response.pipeThrough(transformStream),\n request: { body },\n };\n }\n\n private buildRequestBody(\n options: LanguageModelV3CallOptions,\n stream: boolean,\n ) {\n // Extract function tools from options.tools\n const tools = this.filterFunctionTools(options.tools);\n\n // Determine response format\n const responseFormat =\n options.responseFormat?.type === \"json\"\n ? { type: \"json_object\" as const }\n : undefined;\n\n const body: Record<string, unknown> = {\n model: this.modelId,\n messages: convertToOpenAIMessages(options.prompt),\n stream,\n };\n\n // Only add defined optional fields to avoid sending undefined to API\n if (stream) body.stream_options = { include_usage: true };\n if (options.temperature !== undefined)\n body.temperature = options.temperature;\n if (options.maxOutputTokens !== undefined)\n body.max_tokens = options.maxOutputTokens;\n if (options.topP !== undefined) body.top_p = options.topP;\n if (options.frequencyPenalty !== undefined)\n body.frequency_penalty = options.frequencyPenalty;\n if (options.presencePenalty !== undefined)\n body.presence_penalty = options.presencePenalty;\n if (options.stopSequences !== undefined) body.stop = options.stopSequences;\n if (options.seed !== undefined) body.seed = options.seed;\n\n const convertedTools = convertToOpenAITools(tools);\n if (convertedTools !== undefined) body.tools = convertedTools;\n\n const convertedToolChoice = convertToOpenAIToolChoice(options.toolChoice);\n if (convertedToolChoice !== undefined)\n body.tool_choice = convertedToolChoice;\n\n if (responseFormat !== undefined) body.response_format = responseFormat;\n if (this.settings.user !== undefined) body.user = this.settings.user;\n if (this.settings.logprobs !== undefined)\n body.logprobs = this.settings.logprobs;\n if (this.settings.topLogprobs !== undefined)\n body.top_logprobs = this.settings.topLogprobs;\n\n return body;\n }\n\n private filterFunctionTools(\n tools: LanguageModelV3CallOptions[\"tools\"],\n ): LanguageModelV3FunctionTool[] | undefined {\n if (!tools) return undefined;\n return tools.filter(\n (tool): tool is LanguageModelV3FunctionTool => tool.type === \"function\",\n );\n }\n}\n","import { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\n\nconst apertisErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().optional(),\n code: z.string().nullable().optional(),\n param: z.string().nullable().optional(),\n }),\n});\n\nexport type ApertisErrorData = z.infer<typeof apertisErrorSchema>;\n\nexport const apertisFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: apertisErrorSchema,\n errorToMessage: (error) => error.error.message,\n});\n","import { z } from \"zod\";\n\nexport const openAIChatResponseSchema = z.object({\n id: z.string(),\n object: z.literal(\"chat.completion\").optional(),\n created: z.number().optional(),\n model: z.string().optional(),\n choices: z.array(\n z.object({\n index: z.number(),\n message: z.object({\n role: z.literal(\"assistant\"),\n content: z.string().nullable(),\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal(\"function\"),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable(),\n logprobs: z.any().nullable().optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number().optional(),\n })\n .optional(),\n});\n\nexport type OpenAIChatResponse = z.infer<typeof openAIChatResponseSchema>;\n\nexport const openAIChatChunkSchema = z.object({\n id: z.string(),\n object: z.literal(\"chat.completion.chunk\").optional(),\n created: z.number().optional(),\n model: z.string().optional(),\n choices: z.array(\n z.object({\n index: z.number(),\n delta: z.object({\n role: z.literal(\"assistant\").optional(),\n content: z.string().nullable().optional(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().optional(),\n type: z.literal(\"function\").optional(),\n function: z\n .object({\n name: z.string().optional(),\n arguments: z.string().optional(),\n })\n .optional(),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable().optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n })\n .nullish(),\n});\n\nexport type OpenAIChatChunk = z.infer<typeof openAIChatChunkSchema>;\n","import type { LanguageModelV3FinishReason } from \"@ai-sdk/provider\";\n\nexport function mapApertisFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV3FinishReason {\n const raw = finishReason ?? undefined;\n\n switch (finishReason) {\n case \"stop\":\n return { unified: \"stop\", raw };\n case \"length\":\n return { unified: \"length\", raw };\n case \"tool_calls\":\n return { unified: \"tool-calls\", raw };\n case \"content_filter\":\n return { unified: \"content-filter\", raw };\n default:\n return { unified: \"other\", raw };\n }\n}\n","import type { LanguageModelV3Prompt } from \"@ai-sdk/provider\";\n\nexport type OpenAIMessage =\n | { role: \"system\"; content: string }\n | { role: \"user\"; content: string | OpenAIContentPart[] }\n | { role: \"assistant\"; content: string | null; tool_calls?: OpenAIToolCall[] }\n | { role: \"tool\"; tool_call_id: string; content: string };\n\nexport type OpenAIContentPart =\n | { type: \"text\"; text: string }\n | {\n type: \"image_url\";\n image_url: { url: string; detail?: \"auto\" | \"low\" | \"high\" };\n };\n\nexport type OpenAIToolCall = {\n id: string;\n type: \"function\";\n function: { name: string; arguments: string };\n};\n\nexport function convertToOpenAIMessages(\n prompt: LanguageModelV3Prompt,\n): OpenAIMessage[] {\n const messages: OpenAIMessage[] = [];\n\n for (const message of prompt) {\n switch (message.role) {\n case \"system\":\n // V3 system messages have content as string directly\n messages.push({ role: \"system\", content: message.content });\n break;\n\n case \"user\":\n messages.push({\n role: \"user\",\n content: message.content.map((part): OpenAIContentPart => {\n switch (part.type) {\n case \"text\":\n return { type: \"text\", text: part.text };\n case \"file\": {\n // V3 uses 'file' type with mediaType for images\n if (part.mediaType?.startsWith(\"image/\")) {\n let url: string;\n if (part.data instanceof URL) {\n url = part.data.toString();\n } else if (typeof part.data === \"string\") {\n // Assume it's a URL string or base64\n if (\n part.data.startsWith(\"http://\") ||\n part.data.startsWith(\"https://\")\n ) {\n url = part.data;\n } else {\n // Base64 encoded string\n url = `data:${part.mediaType};base64,${part.data}`;\n }\n } else {\n // Uint8Array\n url = `data:${part.mediaType};base64,${Buffer.from(part.data).toString(\"base64\")}`;\n }\n return {\n type: \"image_url\",\n image_url: { url },\n };\n }\n throw new Error(\n `Unsupported file type: ${part.mediaType}. Only image/* is supported.`,\n );\n }\n default:\n throw new Error(\n `Unsupported user content part type: ${(part as { type: string }).type}`,\n );\n }\n }),\n });\n break;\n\n case \"assistant\": {\n const textContent = message.content\n .filter((p) => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\");\n\n const toolCalls = message.content\n .filter((p) => p.type === \"tool-call\")\n .map((tc) => {\n // V3 uses 'input' instead of 'args'\n let arguments_str = \"{}\";\n try {\n arguments_str =\n typeof tc.input === \"string\"\n ? tc.input\n : JSON.stringify(tc.input);\n } catch {\n arguments_str = \"{}\";\n }\n return {\n id: tc.toolCallId,\n type: \"function\" as const,\n function: { name: tc.toolName, arguments: arguments_str },\n };\n });\n\n messages.push({\n role: \"assistant\",\n content: textContent || null,\n ...(toolCalls.length > 0 ? { tool_calls: toolCalls } : {}),\n });\n break;\n }\n\n case \"tool\":\n for (const result of message.content) {\n if (result.type !== \"tool-result\") continue;\n\n // V3 uses 'output' instead of 'result'\n let content = \"{}\";\n const output = result.output;\n\n if (typeof output === \"string\") {\n content = output;\n } else if (Array.isArray(output)) {\n // Output can be an array of content parts\n const textParts = output\n .filter((p) => p.type === \"text\")\n .map((p) => p.text);\n content = textParts.join(\"\");\n } else {\n try {\n content = JSON.stringify(output);\n } catch {\n content = \"{}\";\n }\n }\n\n messages.push({\n role: \"tool\",\n tool_call_id: result.toolCallId,\n content,\n });\n }\n break;\n }\n }\n\n return messages;\n}\n","import type {\n LanguageModelV3FunctionTool,\n LanguageModelV3ToolChoice,\n} from \"@ai-sdk/provider\";\n\nexport type OpenAITool = {\n type: \"function\";\n function: {\n name: string;\n description?: string;\n parameters: Record<string, unknown>;\n };\n};\n\nexport type OpenAIToolChoice =\n | \"none\"\n | \"auto\"\n | \"required\"\n | { type: \"function\"; function: { name: string } };\n\nexport function convertToOpenAITools(\n tools: LanguageModelV3FunctionTool[] | undefined,\n): OpenAITool[] | undefined {\n if (!tools || tools.length === 0) return undefined;\n\n return tools.map((tool) => ({\n type: \"function\" as const,\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema as Record<string, unknown>,\n },\n }));\n}\n\nexport function convertToOpenAIToolChoice(\n toolChoice: LanguageModelV3ToolChoice | undefined,\n): OpenAIToolChoice | undefined {\n if (!toolChoice) return undefined;\n\n switch (toolChoice.type) {\n case \"none\":\n return \"none\";\n case \"auto\":\n return \"auto\";\n case \"required\":\n return \"required\";\n case \"tool\":\n if (!toolChoice.toolName) return undefined;\n return {\n type: \"function\",\n function: { name: toolChoice.toolName },\n };\n default:\n return undefined;\n }\n}\n"],"mappings":"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","names":["z"]}
1
+ {"version":3,"sources":["../src/apertis-provider.ts","../src/apertis-chat-language-model.ts","../src/apertis-error.ts","../src/schemas/chat-response.ts","../src/utils/map-finish-reason.ts","../src/utils/convert-to-openai-messages.ts","../src/utils/convert-to-openai-tools.ts","../src/apertis-embedding-model.ts","../src/schemas/embedding-response.ts"],"sourcesContent":["import type {\n EmbeddingModelV3,\n LanguageModelV3,\n ProviderV3,\n} from \"@ai-sdk/provider\";\nimport { loadApiKey, withoutTrailingSlash } from \"@ai-sdk/provider-utils\";\nimport { ApertisChatLanguageModel } from \"./apertis-chat-language-model\";\nimport type {\n ApertisChatSettings,\n ApertisModelId,\n ApertisProviderSettings,\n} from \"./apertis-chat-settings\";\nimport { ApertisEmbeddingModel } from \"./apertis-embedding-model\";\nimport type {\n ApertisEmbeddingModelId,\n ApertisEmbeddingSettings,\n} from \"./apertis-embedding-settings\";\n\nexport interface ApertisProvider extends ProviderV3 {\n /**\n * Creates a chat model for text generation.\n * Default call creates a chat model.\n */\n (modelId: ApertisModelId, settings?: ApertisChatSettings): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation.\n */\n chat(\n modelId: ApertisModelId,\n settings?: ApertisChatSettings,\n ): LanguageModelV3;\n\n /**\n * Creates a language model (alias for chat).\n * Required by ProviderV3 interface.\n */\n languageModel(modelId: string): LanguageModelV3;\n\n /**\n * Creates an embedding model.\n * Required by ProviderV3 interface.\n */\n embeddingModel(modelId: string): EmbeddingModelV3;\n\n /**\n * Creates a text embedding model.\n */\n textEmbeddingModel(\n modelId: ApertisEmbeddingModelId,\n settings?: ApertisEmbeddingSettings,\n ): EmbeddingModelV3;\n\n /**\n * Image models are not supported by Apertis.\n * Required by ProviderV3 interface.\n */\n imageModel(modelId: string): never;\n}\n\nexport function createApertis(\n options: ApertisProviderSettings = {},\n): ApertisProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? \"https://api.apertis.ai/v1\";\n\n const getHeaders = () => ({\n ...options.headers,\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"APERTIS_API_KEY\",\n description: \"Apertis API key\",\n })}`,\n \"Content-Type\": \"application/json\",\n });\n\n const createChatModel = (\n modelId: ApertisModelId,\n settings: ApertisChatSettings = {},\n ): LanguageModelV3 =>\n new ApertisChatLanguageModel(modelId, settings, {\n provider: \"apertis.chat\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createEmbeddingModel = (\n modelId: ApertisEmbeddingModelId,\n settings: ApertisEmbeddingSettings = {},\n ): EmbeddingModelV3 =>\n new ApertisEmbeddingModel(modelId, settings, {\n provider: \"apertis.embedding\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider: ApertisProvider = Object.assign(\n (modelId: ApertisModelId, settings?: ApertisChatSettings) =>\n createChatModel(modelId, settings),\n {\n specificationVersion: \"v3\" as const,\n chat: createChatModel,\n languageModel: (modelId: string) => createChatModel(modelId),\n embeddingModel: (modelId: string) => createEmbeddingModel(modelId),\n textEmbeddingModel: createEmbeddingModel,\n imageModel: (): never => {\n throw new Error(\"Image models are not supported by Apertis\");\n },\n },\n );\n\n return provider;\n}\n\n/**\n * Default Apertis provider instance.\n */\nexport const apertis = createApertis();\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3FunctionTool,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n LanguageModelV3Usage,\n SharedV3Warning,\n} from \"@ai-sdk/provider\";\nimport {\n type ParseResult,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport type { ApertisChatSettings } from \"./apertis-chat-settings\";\nimport { apertisFailedResponseHandler } from \"./apertis-error\";\nimport {\n type OpenAIChatChunk,\n openAIChatChunkSchema,\n openAIChatResponseSchema,\n} from \"./schemas/chat-response\";\nimport {\n convertToOpenAIMessages,\n convertToOpenAIToolChoice,\n convertToOpenAITools,\n mapApertisFinishReason,\n} from \"./utils\";\n\nexport interface ApertisChatConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: typeof fetch;\n}\n\nexport class ApertisChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = \"v3\" as const;\n\n /**\n * Supported URL patterns for different media types.\n * Supports HTTP(S) image URLs for direct URL passing.\n */\n readonly supportedUrls: Record<string, RegExp[]> = {\n \"image/*\": [/^https?:\\/\\/.+$/],\n };\n\n constructor(\n readonly modelId: string,\n private readonly settings: ApertisChatSettings,\n private readonly config: ApertisChatConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const body = this.buildRequestBody(options, false);\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n openAIChatResponseSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n const choice = response.choices[0];\n\n // Build V3 content array\n const content: LanguageModelV3Content[] = [];\n\n // Add text content if present\n if (choice.message.content) {\n content.push({\n type: \"text\",\n text: choice.message.content,\n });\n }\n\n // Add tool calls if present\n if (choice.message.tool_calls) {\n for (const tc of choice.message.tool_calls) {\n content.push({\n type: \"tool-call\",\n toolCallId: tc.id,\n toolName: tc.function.name,\n input: tc.function.arguments,\n });\n }\n }\n\n return {\n content,\n finishReason: mapApertisFinishReason(choice.finish_reason),\n usage: {\n inputTokens: {\n total: response.usage?.prompt_tokens ?? 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: response.usage?.completion_tokens ?? 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n warnings: [],\n request: { body },\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const body = this.buildRequestBody(options, true);\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n openAIChatChunkSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n const toolCallBuffers: Map<\n number,\n { id: string; name: string; arguments: string }\n > = new Map();\n\n let textId: string | null = null;\n\n const transformStream = new TransformStream<\n ParseResult<OpenAIChatChunk>,\n LanguageModelV3StreamPart\n >({\n transform(parseResult, controller) {\n // Skip failed parse results\n if (!parseResult.success) {\n return;\n }\n\n const chunk = parseResult.value;\n const choice = chunk.choices[0];\n\n if (!choice) return;\n\n // Handle text delta with start/delta/end pattern\n if (choice.delta.content) {\n if (!textId) {\n textId = generateId();\n controller.enqueue({\n type: \"text-start\",\n id: textId,\n });\n }\n controller.enqueue({\n type: \"text-delta\",\n id: textId,\n delta: choice.delta.content,\n });\n }\n\n // Handle tool calls\n if (choice.delta.tool_calls) {\n for (const tc of choice.delta.tool_calls) {\n let buffer = toolCallBuffers.get(tc.index);\n\n if (!buffer) {\n buffer = { id: tc.id ?? generateId(), name: \"\", arguments: \"\" };\n toolCallBuffers.set(tc.index, buffer);\n }\n\n if (tc.id) buffer.id = tc.id;\n if (tc.function?.name) buffer.name += tc.function.name;\n if (tc.function?.arguments)\n buffer.arguments += tc.function.arguments;\n }\n }\n\n // Handle finish\n if (choice.finish_reason) {\n // End text stream if started\n if (textId) {\n controller.enqueue({\n type: \"text-end\",\n id: textId,\n });\n }\n\n // Emit completed tool calls (only those with valid names)\n for (const [, buffer] of toolCallBuffers) {\n if (buffer.name) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: buffer.id,\n toolName: buffer.name,\n input: buffer.arguments,\n });\n }\n }\n // Clear buffers after emitting\n toolCallBuffers.clear();\n\n controller.enqueue({\n type: \"finish\",\n finishReason: mapApertisFinishReason(choice.finish_reason),\n usage: {\n inputTokens: {\n total: chunk.usage?.prompt_tokens ?? 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: chunk.usage?.completion_tokens ?? 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n });\n }\n },\n flush(controller) {\n // End text stream if started but not ended\n if (textId) {\n controller.enqueue({\n type: \"text-end\",\n id: textId,\n });\n }\n\n // Emit any remaining buffered tool calls when stream closes early\n for (const [, buffer] of toolCallBuffers) {\n if (buffer.name) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: buffer.id,\n toolName: buffer.name,\n input: buffer.arguments,\n });\n }\n }\n },\n });\n\n return {\n stream: response.pipeThrough(transformStream),\n request: { body },\n };\n }\n\n private buildRequestBody(\n options: LanguageModelV3CallOptions,\n stream: boolean,\n ) {\n // Extract function tools from options.tools\n const tools = this.filterFunctionTools(options.tools);\n\n // Determine response format\n const responseFormat =\n options.responseFormat?.type === \"json\"\n ? { type: \"json_object\" as const }\n : undefined;\n\n const body: Record<string, unknown> = {\n model: this.modelId,\n messages: convertToOpenAIMessages(options.prompt),\n stream,\n };\n\n // Only add defined optional fields to avoid sending undefined to API\n if (stream) body.stream_options = { include_usage: true };\n if (options.temperature !== undefined)\n body.temperature = options.temperature;\n if (options.maxOutputTokens !== undefined)\n body.max_tokens = options.maxOutputTokens;\n if (options.topP !== undefined) body.top_p = options.topP;\n if (options.frequencyPenalty !== undefined)\n body.frequency_penalty = options.frequencyPenalty;\n if (options.presencePenalty !== undefined)\n body.presence_penalty = options.presencePenalty;\n if (options.stopSequences !== undefined) body.stop = options.stopSequences;\n if (options.seed !== undefined) body.seed = options.seed;\n\n const convertedTools = convertToOpenAITools(tools);\n if (convertedTools !== undefined) body.tools = convertedTools;\n\n const convertedToolChoice = convertToOpenAIToolChoice(options.toolChoice);\n if (convertedToolChoice !== undefined)\n body.tool_choice = convertedToolChoice;\n\n if (responseFormat !== undefined) body.response_format = responseFormat;\n if (this.settings.user !== undefined) body.user = this.settings.user;\n if (this.settings.logprobs !== undefined)\n body.logprobs = this.settings.logprobs;\n if (this.settings.topLogprobs !== undefined)\n body.top_logprobs = this.settings.topLogprobs;\n\n return body;\n }\n\n private filterFunctionTools(\n tools: LanguageModelV3CallOptions[\"tools\"],\n ): LanguageModelV3FunctionTool[] | undefined {\n if (!tools) return undefined;\n return tools.filter(\n (tool): tool is LanguageModelV3FunctionTool => tool.type === \"function\",\n );\n }\n}\n","import { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\n\nconst apertisErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().optional(),\n code: z.string().nullable().optional(),\n param: z.string().nullable().optional(),\n }),\n});\n\nexport type ApertisErrorData = z.infer<typeof apertisErrorSchema>;\n\nexport const apertisFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: apertisErrorSchema,\n errorToMessage: (error) => error.error.message,\n});\n","import { z } from \"zod\";\n\nexport const openAIChatResponseSchema = z.object({\n id: z.string().optional(),\n object: z.literal(\"chat.completion\").optional(),\n created: z.number().optional(),\n model: z.string().optional(),\n choices: z.array(\n z.object({\n index: z.number(),\n message: z.object({\n role: z.literal(\"assistant\"),\n content: z.string().nullable(),\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal(\"function\"),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable(),\n logprobs: z.any().nullable().optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number().optional(),\n })\n .optional(),\n});\n\nexport type OpenAIChatResponse = z.infer<typeof openAIChatResponseSchema>;\n\nexport const openAIChatChunkSchema = z.object({\n id: z.string().optional(),\n object: z.literal(\"chat.completion.chunk\").optional(),\n created: z.number().optional(),\n model: z.string().optional(),\n choices: z.array(\n z.object({\n index: z.number(),\n delta: z.object({\n role: z.literal(\"assistant\").optional(),\n content: z.string().nullable().optional(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().optional(),\n type: z.literal(\"function\").optional(),\n function: z\n .object({\n name: z.string().optional(),\n arguments: z.string().optional(),\n })\n .optional(),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable().optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n })\n .nullish(),\n});\n\nexport type OpenAIChatChunk = z.infer<typeof openAIChatChunkSchema>;\n","import type { LanguageModelV3FinishReason } from \"@ai-sdk/provider\";\n\nexport function mapApertisFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV3FinishReason {\n const raw = finishReason ?? undefined;\n\n switch (finishReason) {\n case \"stop\":\n return { unified: \"stop\", raw };\n case \"length\":\n return { unified: \"length\", raw };\n case \"tool_calls\":\n return { unified: \"tool-calls\", raw };\n case \"content_filter\":\n return { unified: \"content-filter\", raw };\n default:\n return { unified: \"other\", raw };\n }\n}\n","import type { LanguageModelV3Prompt } from \"@ai-sdk/provider\";\n\nexport type OpenAIMessage =\n | { role: \"system\"; content: string }\n | { role: \"user\"; content: string | OpenAIContentPart[] }\n | { role: \"assistant\"; content: string | null; tool_calls?: OpenAIToolCall[] }\n | { role: \"tool\"; tool_call_id: string; content: string };\n\nexport type OpenAIContentPart =\n | { type: \"text\"; text: string }\n | {\n type: \"image_url\";\n image_url: { url: string; detail?: \"auto\" | \"low\" | \"high\" };\n };\n\nexport type OpenAIToolCall = {\n id: string;\n type: \"function\";\n function: { name: string; arguments: string };\n};\n\nexport function convertToOpenAIMessages(\n prompt: LanguageModelV3Prompt,\n): OpenAIMessage[] {\n const messages: OpenAIMessage[] = [];\n\n for (const message of prompt) {\n switch (message.role) {\n case \"system\":\n // V3 system messages have content as string directly\n messages.push({ role: \"system\", content: message.content });\n break;\n\n case \"user\":\n messages.push({\n role: \"user\",\n content: message.content.map((part): OpenAIContentPart => {\n switch (part.type) {\n case \"text\":\n return { type: \"text\", text: part.text };\n case \"file\": {\n // V3 uses 'file' type with mediaType for images\n if (part.mediaType?.startsWith(\"image/\")) {\n let url: string;\n if (part.data instanceof URL) {\n url = part.data.toString();\n } else if (typeof part.data === \"string\") {\n // Assume it's a URL string or base64\n if (\n part.data.startsWith(\"http://\") ||\n part.data.startsWith(\"https://\")\n ) {\n url = part.data;\n } else {\n // Base64 encoded string\n url = `data:${part.mediaType};base64,${part.data}`;\n }\n } else {\n // Uint8Array\n url = `data:${part.mediaType};base64,${Buffer.from(part.data).toString(\"base64\")}`;\n }\n return {\n type: \"image_url\",\n image_url: { url },\n };\n }\n throw new Error(\n `Unsupported file type: ${part.mediaType}. Only image/* is supported.`,\n );\n }\n default:\n throw new Error(\n `Unsupported user content part type: ${(part as { type: string }).type}`,\n );\n }\n }),\n });\n break;\n\n case \"assistant\": {\n const textContent = message.content\n .filter((p) => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\");\n\n const toolCalls = message.content\n .filter((p) => p.type === \"tool-call\")\n .map((tc) => {\n // V3 uses 'input' instead of 'args'\n let arguments_str = \"{}\";\n try {\n arguments_str =\n typeof tc.input === \"string\"\n ? tc.input\n : JSON.stringify(tc.input);\n } catch {\n arguments_str = \"{}\";\n }\n return {\n id: tc.toolCallId,\n type: \"function\" as const,\n function: { name: tc.toolName, arguments: arguments_str },\n };\n });\n\n messages.push({\n role: \"assistant\",\n content: textContent || null,\n ...(toolCalls.length > 0 ? { tool_calls: toolCalls } : {}),\n });\n break;\n }\n\n case \"tool\":\n for (const result of message.content) {\n if (result.type !== \"tool-result\") continue;\n\n // V3 uses 'output' instead of 'result'\n let content = \"{}\";\n const output = result.output;\n\n if (typeof output === \"string\") {\n content = output;\n } else if (Array.isArray(output)) {\n // Output can be an array of content parts\n const textParts = output\n .filter((p) => p.type === \"text\")\n .map((p) => p.text);\n content = textParts.join(\"\");\n } else {\n try {\n content = JSON.stringify(output);\n } catch {\n content = \"{}\";\n }\n }\n\n messages.push({\n role: \"tool\",\n tool_call_id: result.toolCallId,\n content,\n });\n }\n break;\n }\n }\n\n return messages;\n}\n","import type {\n LanguageModelV3FunctionTool,\n LanguageModelV3ToolChoice,\n} from \"@ai-sdk/provider\";\n\nexport type OpenAITool = {\n type: \"function\";\n function: {\n name: string;\n description?: string;\n parameters: Record<string, unknown>;\n };\n};\n\nexport type OpenAIToolChoice =\n | \"none\"\n | \"auto\"\n | \"required\"\n | { type: \"function\"; function: { name: string } };\n\nexport function convertToOpenAITools(\n tools: LanguageModelV3FunctionTool[] | undefined,\n): OpenAITool[] | undefined {\n if (!tools || tools.length === 0) return undefined;\n\n return tools.map((tool) => ({\n type: \"function\" as const,\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema as Record<string, unknown>,\n },\n }));\n}\n\nexport function convertToOpenAIToolChoice(\n toolChoice: LanguageModelV3ToolChoice | undefined,\n): OpenAIToolChoice | undefined {\n if (!toolChoice) return undefined;\n\n switch (toolChoice.type) {\n case \"none\":\n return \"none\";\n case \"auto\":\n return \"auto\";\n case \"required\":\n return \"required\";\n case \"tool\":\n if (!toolChoice.toolName) return undefined;\n return {\n type: \"function\",\n function: { name: toolChoice.toolName },\n };\n default:\n return undefined;\n }\n}\n","import type {\n EmbeddingModelV3,\n EmbeddingModelV3CallOptions,\n EmbeddingModelV3Result,\n} from \"@ai-sdk/provider\";\nimport {\n createJsonResponseHandler,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport type {\n ApertisEmbeddingModelId,\n ApertisEmbeddingSettings,\n} from \"./apertis-embedding-settings\";\nimport { apertisFailedResponseHandler } from \"./apertis-error\";\nimport { openAIEmbeddingResponseSchema } from \"./schemas/embedding-response\";\n\nexport interface ApertisEmbeddingConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: typeof fetch;\n}\n\nexport class ApertisEmbeddingModel implements EmbeddingModelV3 {\n readonly specificationVersion = \"v3\" as const;\n\n readonly maxEmbeddingsPerCall: number;\n readonly supportsParallelCalls: boolean;\n\n constructor(\n readonly modelId: ApertisEmbeddingModelId,\n private readonly settings: ApertisEmbeddingSettings,\n private readonly config: ApertisEmbeddingConfig,\n ) {\n this.maxEmbeddingsPerCall = settings.maxEmbeddingsPerCall ?? 2048;\n this.supportsParallelCalls = settings.supportsParallelCalls ?? true;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doEmbed(\n options: EmbeddingModelV3CallOptions,\n ): Promise<EmbeddingModelV3Result> {\n const body: Record<string, unknown> = {\n model: this.modelId,\n input: options.values,\n encoding_format: \"float\",\n };\n\n // Add optional parameters\n if (this.settings.dimensions !== undefined) {\n body.dimensions = this.settings.dimensions;\n }\n if (this.settings.user !== undefined) {\n body.user = this.settings.user;\n }\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/embeddings`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n openAIEmbeddingResponseSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n return {\n embeddings: response.data.map((item) => item.embedding),\n usage: response.usage\n ? { tokens: response.usage.prompt_tokens }\n : undefined,\n warnings: [],\n };\n }\n}\n","import { z } from \"zod\";\n\nexport const openAIEmbeddingResponseSchema = z.object({\n object: z.literal(\"list\").optional(),\n data: z.array(\n z.object({\n object: z.literal(\"embedding\").optional(),\n embedding: z.array(z.number()),\n index: z.number(),\n }),\n ),\n model: z.string().optional(),\n usage: z\n .object({\n prompt_tokens: z.number(),\n total_tokens: z.number(),\n })\n .optional(),\n});\n\nexport type OpenAIEmbeddingResponse = z.infer<\n typeof openAIEmbeddingResponseSchema\n>;\n"],"mappings":";AAKA,SAAS,YAAY,4BAA4B;;;ACOjD;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;AClBP,SAAS,sCAAsC;AAC/C,SAAS,SAAS;AAElB,IAAM,qBAAqB,EAAE,OAAO;AAAA,EAClC,OAAO,EAAE,OAAO;AAAA,IACd,SAAS,EAAE,OAAO;AAAA,IAClB,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,IAC1B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IACrC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,CAAC;AACH,CAAC;AAIM,IAAM,+BAA+B,+BAA+B;AAAA,EACzE,aAAa;AAAA,EACb,gBAAgB,CAAC,UAAU,MAAM,MAAM;AACzC,CAAC;;;ACjBD,SAAS,KAAAA,UAAS;AAEX,IAAM,2BAA2BA,GAAE,OAAO;AAAA,EAC/C,IAAIA,GAAE,OAAO,EAAE,SAAS;AAAA,EACxB,QAAQA,GAAE,QAAQ,iBAAiB,EAAE,SAAS;AAAA,EAC9C,SAASA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,SAASA,GAAE;AAAA,IACTA,GAAE,OAAO;AAAA,MACP,OAAOA,GAAE,OAAO;AAAA,MAChB,SAASA,GAAE,OAAO;AAAA,QAChB,MAAMA,GAAE,QAAQ,WAAW;AAAA,QAC3B,SAASA,GAAE,OAAO,EAAE,SAAS;AAAA,QAC7B,YAAYA,GACT;AAAA,UACCA,GAAE,OAAO;AAAA,YACP,IAAIA,GAAE,OAAO;AAAA,YACb,MAAMA,GAAE,QAAQ,UAAU;AAAA,YAC1B,UAAUA,GAAE,OAAO;AAAA,cACjB,MAAMA,GAAE,OAAO;AAAA,cACf,WAAWA,GAAE,OAAO;AAAA,YACtB,CAAC;AAAA,UACH,CAAC;AAAA,QACH,EACC,SAAS;AAAA,MACd,CAAC;AAAA,MACD,eAAeA,GAAE,OAAO,EAAE,SAAS;AAAA,MACnC,UAAUA,GAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EACA,OAAOA,GACJ,OAAO;AAAA,IACN,eAAeA,GAAE,OAAO;AAAA,IACxB,mBAAmBA,GAAE,OAAO;AAAA,IAC5B,cAAcA,GAAE,OAAO,EAAE,SAAS;AAAA,EACpC,CAAC,EACA,SAAS;AACd,CAAC;AAIM,IAAM,wBAAwBA,GAAE,OAAO;AAAA,EAC5C,IAAIA,GAAE,OAAO,EAAE,SAAS;AAAA,EACxB,QAAQA,GAAE,QAAQ,uBAAuB,EAAE,SAAS;AAAA,EACpD,SAASA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,SAASA,GAAE;AAAA,IACTA,GAAE,OAAO;AAAA,MACP,OAAOA,GAAE,OAAO;AAAA,MAChB,OAAOA,GAAE,OAAO;AAAA,QACd,MAAMA,GAAE,QAAQ,WAAW,EAAE,SAAS;AAAA,QACtC,SAASA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,QACxC,YAAYA,GACT;AAAA,UACCA,GAAE,OAAO;AAAA,YACP,OAAOA,GAAE,OAAO;AAAA,YAChB,IAAIA,GAAE,OAAO,EAAE,SAAS;AAAA,YACxB,MAAMA,GAAE,QAAQ,UAAU,EAAE,SAAS;AAAA,YACrC,UAAUA,GACP,OAAO;AAAA,cACN,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,cAC1B,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA,YACjC,CAAC,EACA,SAAS;AAAA,UACd,CAAC;AAAA,QACH,EACC,SAAS;AAAA,MACd,CAAC;AAAA,MACD,eAAeA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAChD,CAAC;AAAA,EACH;AAAA,EACA,OAAOA,GACJ,OAAO;AAAA,IACN,eAAeA,GAAE,OAAO;AAAA,IACxB,mBAAmBA,GAAE,OAAO;AAAA,EAC9B,CAAC,EACA,QAAQ;AACb,CAAC;;;AC3EM,SAAS,uBACd,cAC6B;AAC7B,QAAM,MAAM,gBAAgB;AAE5B,UAAQ,cAAc;AAAA,IACpB,KAAK;AACH,aAAO,EAAE,SAAS,QAAQ,IAAI;AAAA,IAChC,KAAK;AACH,aAAO,EAAE,SAAS,UAAU,IAAI;AAAA,IAClC,KAAK;AACH,aAAO,EAAE,SAAS,cAAc,IAAI;AAAA,IACtC,KAAK;AACH,aAAO,EAAE,SAAS,kBAAkB,IAAI;AAAA,IAC1C;AACE,aAAO,EAAE,SAAS,SAAS,IAAI;AAAA,EACnC;AACF;;;ACEO,SAAS,wBACd,QACiB;AACjB,QAAM,WAA4B,CAAC;AAEnC,aAAW,WAAW,QAAQ;AAC5B,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK;AAEH,iBAAS,KAAK,EAAE,MAAM,UAAU,SAAS,QAAQ,QAAQ,CAAC;AAC1D;AAAA,MAEF,KAAK;AACH,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,QAAQ,QAAQ,IAAI,CAAC,SAA4B;AACxD,oBAAQ,KAAK,MAAM;AAAA,cACjB,KAAK;AACH,uBAAO,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK;AAAA,cACzC,KAAK,QAAQ;AAEX,oBAAI,KAAK,WAAW,WAAW,QAAQ,GAAG;AACxC,sBAAI;AACJ,sBAAI,KAAK,gBAAgB,KAAK;AAC5B,0BAAM,KAAK,KAAK,SAAS;AAAA,kBAC3B,WAAW,OAAO,KAAK,SAAS,UAAU;AAExC,wBACE,KAAK,KAAK,WAAW,SAAS,KAC9B,KAAK,KAAK,WAAW,UAAU,GAC/B;AACA,4BAAM,KAAK;AAAA,oBACb,OAAO;AAEL,4BAAM,QAAQ,KAAK,SAAS,WAAW,KAAK,IAAI;AAAA,oBAClD;AAAA,kBACF,OAAO;AAEL,0BAAM,QAAQ,KAAK,SAAS,WAAW,OAAO,KAAK,KAAK,IAAI,EAAE,SAAS,QAAQ,CAAC;AAAA,kBAClF;AACA,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,WAAW,EAAE,IAAI;AAAA,kBACnB;AAAA,gBACF;AACA,sBAAM,IAAI;AAAA,kBACR,0BAA0B,KAAK,SAAS;AAAA,gBAC1C;AAAA,cACF;AAAA,cACA;AACE,sBAAM,IAAI;AAAA,kBACR,uCAAwC,KAA0B,IAAI;AAAA,gBACxE;AAAA,YACJ;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AACD;AAAA,MAEF,KAAK,aAAa;AAChB,cAAM,cAAc,QAAQ,QACzB,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,EAC/B,IAAI,CAAC,MAAM,EAAE,IAAI,EACjB,KAAK,EAAE;AAEV,cAAM,YAAY,QAAQ,QACvB,OAAO,CAAC,MAAM,EAAE,SAAS,WAAW,EACpC,IAAI,CAAC,OAAO;AAEX,cAAI,gBAAgB;AACpB,cAAI;AACF,4BACE,OAAO,GAAG,UAAU,WAChB,GAAG,QACH,KAAK,UAAU,GAAG,KAAK;AAAA,UAC/B,QAAQ;AACN,4BAAgB;AAAA,UAClB;AACA,iBAAO;AAAA,YACL,IAAI,GAAG;AAAA,YACP,MAAM;AAAA,YACN,UAAU,EAAE,MAAM,GAAG,UAAU,WAAW,cAAc;AAAA,UAC1D;AAAA,QACF,CAAC;AAEH,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,eAAe;AAAA,UACxB,GAAI,UAAU,SAAS,IAAI,EAAE,YAAY,UAAU,IAAI,CAAC;AAAA,QAC1D,CAAC;AACD;AAAA,MACF;AAAA,MAEA,KAAK;AACH,mBAAW,UAAU,QAAQ,SAAS;AACpC,cAAI,OAAO,SAAS,cAAe;AAGnC,cAAI,UAAU;AACd,gBAAM,SAAS,OAAO;AAEtB,cAAI,OAAO,WAAW,UAAU;AAC9B,sBAAU;AAAA,UACZ,WAAW,MAAM,QAAQ,MAAM,GAAG;AAEhC,kBAAM,YAAY,OACf,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,EAC/B,IAAI,CAAC,MAAM,EAAE,IAAI;AACpB,sBAAU,UAAU,KAAK,EAAE;AAAA,UAC7B,OAAO;AACL,gBAAI;AACF,wBAAU,KAAK,UAAU,MAAM;AAAA,YACjC,QAAQ;AACN,wBAAU;AAAA,YACZ;AAAA,UACF;AAEA,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,cAAc,OAAO;AAAA,YACrB;AAAA,UACF,CAAC;AAAA,QACH;AACA;AAAA,IACJ;AAAA,EACF;AAEA,SAAO;AACT;;;AChIO,SAAS,qBACd,OAC0B;AAC1B,MAAI,CAAC,SAAS,MAAM,WAAW,EAAG,QAAO;AAEzC,SAAO,MAAM,IAAI,CAAC,UAAU;AAAA,IAC1B,MAAM;AAAA,IACN,UAAU;AAAA,MACR,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,YAAY,KAAK;AAAA,IACnB;AAAA,EACF,EAAE;AACJ;AAEO,SAAS,0BACd,YAC8B;AAC9B,MAAI,CAAC,WAAY,QAAO;AAExB,UAAQ,WAAW,MAAM;AAAA,IACvB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,UAAI,CAAC,WAAW,SAAU,QAAO;AACjC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,EAAE,MAAM,WAAW,SAAS;AAAA,MACxC;AAAA,IACF;AACE,aAAO;AAAA,EACX;AACF;;;ALhBO,IAAM,2BAAN,MAA0D;AAAA,EAW/D,YACW,SACQ,UACA,QACjB;AAHS;AACQ;AACA;AAAA,EAChB;AAAA,EAdM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvB,gBAA0C;AAAA,IACjD,WAAW,CAAC,iBAAiB;AAAA,EAC/B;AAAA,EAQA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,MAAM,WACJ,SACwC;AACxC,UAAM,OAAO,KAAK,iBAAiB,SAAS,KAAK;AAEjD,UAAM,EAAE,OAAO,SAAS,IAAI,MAAM,cAAc;AAAA,MAC9C,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,SAAS,KAAK,OAAO,QAAQ;AAAA,MAC7B;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,OAAO,KAAK,OAAO;AAAA,MACnB,aAAa,QAAQ;AAAA,IACvB,CAAC;AAED,UAAM,SAAS,SAAS,QAAQ,CAAC;AAGjC,UAAM,UAAoC,CAAC;AAG3C,QAAI,OAAO,QAAQ,SAAS;AAC1B,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM,OAAO,QAAQ;AAAA,MACvB,CAAC;AAAA,IACH;AAGA,QAAI,OAAO,QAAQ,YAAY;AAC7B,iBAAW,MAAM,OAAO,QAAQ,YAAY;AAC1C,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,YAAY,GAAG;AAAA,UACf,UAAU,GAAG,SAAS;AAAA,UACtB,OAAO,GAAG,SAAS;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA,cAAc,uBAAuB,OAAO,aAAa;AAAA,MACzD,OAAO;AAAA,QACL,aAAa;AAAA,UACX,OAAO,SAAS,OAAO,iBAAiB;AAAA,UACxC,SAAS;AAAA,UACT,WAAW;AAAA,UACX,YAAY;AAAA,QACd;AAAA,QACA,cAAc;AAAA,UACZ,OAAO,SAAS,OAAO,qBAAqB;AAAA,UAC5C,MAAM;AAAA,UACN,WAAW;AAAA,QACb;AAAA,MACF;AAAA,MACA,UAAU,CAAC;AAAA,MACX,SAAS,EAAE,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SACsC;AACtC,UAAM,OAAO,KAAK,iBAAiB,SAAS,IAAI;AAEhD,UAAM,EAAE,OAAO,SAAS,IAAI,MAAM,cAAc;AAAA,MAC9C,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,SAAS,KAAK,OAAO,QAAQ;AAAA,MAC7B;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,OAAO,KAAK,OAAO;AAAA,MACnB,aAAa,QAAQ;AAAA,IACvB,CAAC;AAED,UAAM,kBAGF,oBAAI,IAAI;AAEZ,QAAI,SAAwB;AAE5B,UAAM,kBAAkB,IAAI,gBAG1B;AAAA,MACA,UAAU,aAAa,YAAY;AAEjC,YAAI,CAAC,YAAY,SAAS;AACxB;AAAA,QACF;AAEA,cAAM,QAAQ,YAAY;AAC1B,cAAM,SAAS,MAAM,QAAQ,CAAC;AAE9B,YAAI,CAAC,OAAQ;AAGb,YAAI,OAAO,MAAM,SAAS;AACxB,cAAI,CAAC,QAAQ;AACX,qBAAS,WAAW;AACpB,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN,IAAI;AAAA,YACN,CAAC;AAAA,UACH;AACA,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,IAAI;AAAA,YACJ,OAAO,OAAO,MAAM;AAAA,UACtB,CAAC;AAAA,QACH;AAGA,YAAI,OAAO,MAAM,YAAY;AAC3B,qBAAW,MAAM,OAAO,MAAM,YAAY;AACxC,gBAAI,SAAS,gBAAgB,IAAI,GAAG,KAAK;AAEzC,gBAAI,CAAC,QAAQ;AACX,uBAAS,EAAE,IAAI,GAAG,MAAM,WAAW,GAAG,MAAM,IAAI,WAAW,GAAG;AAC9D,8BAAgB,IAAI,GAAG,OAAO,MAAM;AAAA,YACtC;AAEA,gBAAI,GAAG,GAAI,QAAO,KAAK,GAAG;AAC1B,gBAAI,GAAG,UAAU,KAAM,QAAO,QAAQ,GAAG,SAAS;AAClD,gBAAI,GAAG,UAAU;AACf,qBAAO,aAAa,GAAG,SAAS;AAAA,UACpC;AAAA,QACF;AAGA,YAAI,OAAO,eAAe;AAExB,cAAI,QAAQ;AACV,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN,IAAI;AAAA,YACN,CAAC;AAAA,UACH;AAGA,qBAAW,CAAC,EAAE,MAAM,KAAK,iBAAiB;AACxC,gBAAI,OAAO,MAAM;AACf,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,YAAY,OAAO;AAAA,gBACnB,UAAU,OAAO;AAAA,gBACjB,OAAO,OAAO;AAAA,cAChB,CAAC;AAAA,YACH;AAAA,UACF;AAEA,0BAAgB,MAAM;AAEtB,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,cAAc,uBAAuB,OAAO,aAAa;AAAA,YACzD,OAAO;AAAA,cACL,aAAa;AAAA,gBACX,OAAO,MAAM,OAAO,iBAAiB;AAAA,gBACrC,SAAS;AAAA,gBACT,WAAW;AAAA,gBACX,YAAY;AAAA,cACd;AAAA,cACA,cAAc;AAAA,gBACZ,OAAO,MAAM,OAAO,qBAAqB;AAAA,gBACzC,MAAM;AAAA,gBACN,WAAW;AAAA,cACb;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,MAAM,YAAY;AAEhB,YAAI,QAAQ;AACV,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,IAAI;AAAA,UACN,CAAC;AAAA,QACH;AAGA,mBAAW,CAAC,EAAE,MAAM,KAAK,iBAAiB;AACxC,cAAI,OAAO,MAAM;AACf,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN,YAAY,OAAO;AAAA,cACnB,UAAU,OAAO;AAAA,cACjB,OAAO,OAAO;AAAA,YAChB,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL,QAAQ,SAAS,YAAY,eAAe;AAAA,MAC5C,SAAS,EAAE,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEQ,iBACN,SACA,QACA;AAEA,UAAM,QAAQ,KAAK,oBAAoB,QAAQ,KAAK;AAGpD,UAAM,iBACJ,QAAQ,gBAAgB,SAAS,SAC7B,EAAE,MAAM,cAAuB,IAC/B;AAEN,UAAM,OAAgC;AAAA,MACpC,OAAO,KAAK;AAAA,MACZ,UAAU,wBAAwB,QAAQ,MAAM;AAAA,MAChD;AAAA,IACF;AAGA,QAAI,OAAQ,MAAK,iBAAiB,EAAE,eAAe,KAAK;AACxD,QAAI,QAAQ,gBAAgB;AAC1B,WAAK,cAAc,QAAQ;AAC7B,QAAI,QAAQ,oBAAoB;AAC9B,WAAK,aAAa,QAAQ;AAC5B,QAAI,QAAQ,SAAS,OAAW,MAAK,QAAQ,QAAQ;AACrD,QAAI,QAAQ,qBAAqB;AAC/B,WAAK,oBAAoB,QAAQ;AACnC,QAAI,QAAQ,oBAAoB;AAC9B,WAAK,mBAAmB,QAAQ;AAClC,QAAI,QAAQ,kBAAkB,OAAW,MAAK,OAAO,QAAQ;AAC7D,QAAI,QAAQ,SAAS,OAAW,MAAK,OAAO,QAAQ;AAEpD,UAAM,iBAAiB,qBAAqB,KAAK;AACjD,QAAI,mBAAmB,OAAW,MAAK,QAAQ;AAE/C,UAAM,sBAAsB,0BAA0B,QAAQ,UAAU;AACxE,QAAI,wBAAwB;AAC1B,WAAK,cAAc;AAErB,QAAI,mBAAmB,OAAW,MAAK,kBAAkB;AACzD,QAAI,KAAK,SAAS,SAAS,OAAW,MAAK,OAAO,KAAK,SAAS;AAChE,QAAI,KAAK,SAAS,aAAa;AAC7B,WAAK,WAAW,KAAK,SAAS;AAChC,QAAI,KAAK,SAAS,gBAAgB;AAChC,WAAK,eAAe,KAAK,SAAS;AAEpC,WAAO;AAAA,EACT;AAAA,EAEQ,oBACN,OAC2C;AAC3C,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,MAAM;AAAA,MACX,CAAC,SAA8C,KAAK,SAAS;AAAA,IAC/D;AAAA,EACF;AACF;;;AMjUA;AAAA,EACE,6BAAAC;AAAA,EACA,iBAAAC;AAAA,OACK;;;ACRP,SAAS,KAAAC,UAAS;AAEX,IAAM,gCAAgCA,GAAE,OAAO;AAAA,EACpD,QAAQA,GAAE,QAAQ,MAAM,EAAE,SAAS;AAAA,EACnC,MAAMA,GAAE;AAAA,IACNA,GAAE,OAAO;AAAA,MACP,QAAQA,GAAE,QAAQ,WAAW,EAAE,SAAS;AAAA,MACxC,WAAWA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,MAC7B,OAAOA,GAAE,OAAO;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EACA,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,OAAOA,GACJ,OAAO;AAAA,IACN,eAAeA,GAAE,OAAO;AAAA,IACxB,cAAcA,GAAE,OAAO;AAAA,EACzB,CAAC,EACA,SAAS;AACd,CAAC;;;ADKM,IAAM,wBAAN,MAAwD;AAAA,EAM7D,YACW,SACQ,UACA,QACjB;AAHS;AACQ;AACA;AAEjB,SAAK,uBAAuB,SAAS,wBAAwB;AAC7D,SAAK,wBAAwB,SAAS,yBAAyB;AAAA,EACjE;AAAA,EAZS,uBAAuB;AAAA,EAEvB;AAAA,EACA;AAAA,EAWT,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,MAAM,QACJ,SACiC;AACjC,UAAM,OAAgC;AAAA,MACpC,OAAO,KAAK;AAAA,MACZ,OAAO,QAAQ;AAAA,MACf,iBAAiB;AAAA,IACnB;AAGA,QAAI,KAAK,SAAS,eAAe,QAAW;AAC1C,WAAK,aAAa,KAAK,SAAS;AAAA,IAClC;AACA,QAAI,KAAK,SAAS,SAAS,QAAW;AACpC,WAAK,OAAO,KAAK,SAAS;AAAA,IAC5B;AAEA,UAAM,EAAE,OAAO,SAAS,IAAI,MAAMC,eAAc;AAAA,MAC9C,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,SAAS,KAAK,OAAO,QAAQ;AAAA,MAC7B;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2BC;AAAA,QACzB;AAAA,MACF;AAAA,MACA,OAAO,KAAK,OAAO;AAAA,MACnB,aAAa,QAAQ;AAAA,IACvB,CAAC;AAED,WAAO;AAAA,MACL,YAAY,SAAS,KAAK,IAAI,CAAC,SAAS,KAAK,SAAS;AAAA,MACtD,OAAO,SAAS,QACZ,EAAE,QAAQ,SAAS,MAAM,cAAc,IACvC;AAAA,MACJ,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AACF;;;APnBO,SAAS,cACd,UAAmC,CAAC,GACnB;AACjB,QAAM,UACJ,qBAAqB,QAAQ,OAAO,KAAK;AAE3C,QAAM,aAAa,OAAO;AAAA,IACxB,GAAG,QAAQ;AAAA,IACX,eAAe,UAAU,WAAW;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC,CAAC;AAAA,IACF,gBAAgB;AAAA,EAClB;AAEA,QAAM,kBAAkB,CACtB,SACA,WAAgC,CAAC,MAEjC,IAAI,yBAAyB,SAAS,UAAU;AAAA,IAC9C,UAAU;AAAA,IACV;AAAA,IACA,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,uBAAuB,CAC3B,SACA,WAAqC,CAAC,MAEtC,IAAI,sBAAsB,SAAS,UAAU;AAAA,IAC3C,UAAU;AAAA,IACV;AAAA,IACA,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,WAA4B,OAAO;AAAA,IACvC,CAAC,SAAyB,aACxB,gBAAgB,SAAS,QAAQ;AAAA,IACnC;AAAA,MACE,sBAAsB;AAAA,MACtB,MAAM;AAAA,MACN,eAAe,CAAC,YAAoB,gBAAgB,OAAO;AAAA,MAC3D,gBAAgB,CAAC,YAAoB,qBAAqB,OAAO;AAAA,MACjE,oBAAoB;AAAA,MACpB,YAAY,MAAa;AACvB,cAAM,IAAI,MAAM,2CAA2C;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAKO,IAAM,UAAU,cAAc;","names":["z","createJsonResponseHandler","postJsonToApi","z","postJsonToApi","createJsonResponseHandler"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apertis/ai-sdk-provider",
3
- "version": "1.0.0",
3
+ "version": "1.1.1",
4
4
  "description": "Apertis AI provider for Vercel AI SDK",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {