@nordlys-labs/nordlys-ai-provider 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -38,17 +38,17 @@ var import_zod2 = require("zod");
38
38
  var import_provider = require("@ai-sdk/provider");
39
39
  var import_provider_utils = require("@ai-sdk/provider-utils");
40
40
  function convertToolOutput(output) {
41
+ var _a;
41
42
  switch (output.type) {
42
43
  case "text":
43
44
  case "error-text":
44
45
  return output.value;
45
46
  case "json":
46
47
  case "error-json":
47
- return JSON.stringify(output.value);
48
48
  case "content":
49
49
  return JSON.stringify(output.value);
50
50
  case "execution-denied":
51
- return "";
51
+ return (_a = output.reason) != null ? _a : "Tool execution denied.";
52
52
  default:
53
53
  return "";
54
54
  }
@@ -57,6 +57,7 @@ function convertToNordlysChatMessages({
57
57
  prompt,
58
58
  systemMessageMode = "system"
59
59
  }) {
60
+ var _a;
60
61
  const messages = [];
61
62
  const warnings = [];
62
63
  for (const { role, content } of prompt) {
@@ -95,19 +96,23 @@ function convertToNordlysChatMessages({
95
96
  messages.push({
96
97
  role: "user",
97
98
  content: content.map((part, index) => {
98
- var _a, _b;
99
+ var _a2, _b;
99
100
  switch (part.type) {
100
101
  case "text": {
101
102
  return { type: "text", text: part.text };
102
103
  }
103
104
  case "file": {
104
- if ((_a = part.mediaType) == null ? void 0 : _a.startsWith("image/")) {
105
+ if (part.data === void 0 || part.data === null) {
106
+ throw new Error(
107
+ "File part data is required but was undefined or null"
108
+ );
109
+ }
110
+ if ((_a2 = part.mediaType) == null ? void 0 : _a2.startsWith("image/")) {
105
111
  const mediaType = part.mediaType === "image/*" ? "image/jpeg" : part.mediaType;
112
+ const url = part.data instanceof URL ? part.data.toString() : `data:${mediaType};base64,${(0, import_provider_utils.convertToBase64)(part.data)}`;
106
113
  return {
107
114
  type: "image_url",
108
- image_url: {
109
- url: part.data instanceof URL ? part.data.toString() : `data:${mediaType};base64,${(0, import_provider_utils.convertToBase64)(part.data)}`
110
- }
115
+ image_url: { url }
111
116
  };
112
117
  }
113
118
  if (part.mediaType && (part.mediaType === "audio/wav" || part.mediaType === "audio/mp3" || part.mediaType === "audio/mpeg")) {
@@ -116,10 +121,11 @@ function convertToNordlysChatMessages({
116
121
  functionality: "audio file parts with URLs"
117
122
  });
118
123
  }
124
+ const data = typeof part.data === "string" ? part.data : (0, import_provider_utils.convertToBase64)(part.data);
119
125
  return {
120
126
  type: "input_audio",
121
127
  input_audio: {
122
- data: (0, import_provider_utils.convertToBase64)(part.data),
128
+ data,
123
129
  format: part.mediaType === "audio/wav" ? "wav" : "mp3"
124
130
  }
125
131
  };
@@ -130,11 +136,12 @@ function convertToNordlysChatMessages({
130
136
  functionality: "PDF file parts with URLs"
131
137
  });
132
138
  }
139
+ const base64Data = typeof part.data === "string" ? part.data : (0, import_provider_utils.convertToBase64)(part.data);
133
140
  return {
134
141
  type: "file",
135
142
  file: {
136
143
  filename: (_b = part.filename) != null ? _b : `part-${index}.pdf`,
137
- file_data: `data:application/pdf;base64,${(0, import_provider_utils.convertToBase64)(part.data)}`
144
+ file_data: `data:application/pdf;base64,${base64Data}`
138
145
  }
139
146
  };
140
147
  }
@@ -151,14 +158,14 @@ function convertToNordlysChatMessages({
151
158
  break;
152
159
  }
153
160
  case "assistant": {
154
- const textParts = [];
161
+ let text = "";
155
162
  const reasoningParts = [];
156
163
  const generatedFiles = [];
157
164
  const toolCalls = [];
158
165
  for (const part of content) {
159
166
  switch (part.type) {
160
167
  case "text": {
161
- textParts.push(part.text);
168
+ text += part.text;
162
169
  break;
163
170
  }
164
171
  case "reasoning": {
@@ -172,7 +179,7 @@ function convertToNordlysChatMessages({
172
179
  );
173
180
  })() : Buffer.from(part.data).toString("base64");
174
181
  generatedFiles.push({
175
- media_type: part.mediaType,
182
+ media_type: (_a = part.mediaType) != null ? _a : "application/octet-stream",
176
183
  data: dataString
177
184
  });
178
185
  break;
@@ -190,7 +197,6 @@ function convertToNordlysChatMessages({
190
197
  }
191
198
  }
192
199
  }
193
- const text = textParts.join("");
194
200
  const reasoning = reasoningParts.join("");
195
201
  const message = {
196
202
  role: "assistant",
@@ -204,15 +210,16 @@ function convertToNordlysChatMessages({
204
210
  }
205
211
  case "tool": {
206
212
  for (const toolResponse of content) {
207
- if (toolResponse.type === "tool-result") {
208
- const contentValue = convertToolOutput(toolResponse.output);
209
- if (contentValue) {
210
- messages.push({
211
- role: "tool",
212
- tool_call_id: toolResponse.toolCallId,
213
- content: contentValue
214
- });
215
- }
213
+ if (toolResponse.type === "tool-approval-response") {
214
+ continue;
215
+ }
216
+ const contentValue = convertToolOutput(toolResponse.output);
217
+ if (contentValue) {
218
+ messages.push({
219
+ role: "tool",
220
+ tool_call_id: toolResponse.toolCallId,
221
+ content: contentValue
222
+ });
216
223
  }
217
224
  }
218
225
  break;
@@ -553,10 +560,10 @@ var nordlysChatChunkSchema = import_zod2.z.union([
553
560
  total_tokens: import_zod2.z.number(),
554
561
  reasoning_tokens: import_zod2.z.number().optional(),
555
562
  cached_input_tokens: import_zod2.z.number().optional()
556
- }).optional(),
563
+ }).nullish(),
557
564
  provider: import_zod2.z.string().optional(),
558
565
  service_tier: import_zod2.z.string().optional(),
559
- system_fingerprint: import_zod2.z.string().optional()
566
+ system_fingerprint: import_zod2.z.string().nullish()
560
567
  }),
561
568
  import_zod2.z.object({
562
569
  error: import_zod2.z.object({
@@ -1026,7 +1033,7 @@ var NordlysChatLanguageModel = class {
1026
1033
  // src/nordlys-provider.ts
1027
1034
  function createNordlys(options = {}) {
1028
1035
  var _a;
1029
- const baseURL = (_a = (0, import_provider_utils4.withoutTrailingSlash)(options.baseURL)) != null ? _a : "https://backend.mangoplant-a7a21605.swedencentral.azurecontainerapps.io/v1";
1036
+ const baseURL = (_a = (0, import_provider_utils4.withoutTrailingSlash)(options.baseURL)) != null ? _a : "https://api.nordlyslabs.com/v1";
1030
1037
  const getHeaders = () => ({
1031
1038
  Authorization: `Bearer ${(0, import_provider_utils4.loadApiKey)({
1032
1039
  apiKey: options.apiKey,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/nordlys-provider.ts","../src/nordlys-chat-language-model.ts","../src/convert-to-nordlys-chat-messages.ts","../src/get-response-metadata.ts","../src/map-nordlys-finish-reason.ts","../src/nordlys-chat-options.ts","../src/nordlys-error.ts","../src/nordlys-prepare-tools.ts"],"sourcesContent":["export type { NordlysChatSettings } from './nordlys-chat-options';\nexport type {\n NordlysProvider,\n NordlysProviderSettings,\n} from './nordlys-provider';\nexport { createNordlys, nordlys } from './nordlys-provider';\nexport type * from './nordlys-types';\n","import type {\n EmbeddingModelV3,\n LanguageModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport { NoSuchModelError } from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport { loadApiKey, withoutTrailingSlash } from '@ai-sdk/provider-utils';\nimport { NordlysChatLanguageModel } from './nordlys-chat-language-model';\nimport type { NordlysChatSettings } from './nordlys-chat-options';\n\nexport type NordlysChatModelId = string;\n\nexport interface NordlysProvider extends ProviderV3 {\n (modelId: string, settings?: NordlysChatSettings): LanguageModelV3;\n\n /**\n * Creates a model for text generation with Nordlys models.\n */\n languageModel: (\n modelId: string,\n settings?: NordlysChatSettings\n ) => LanguageModelV3;\n\n /**\n * Creates a chat model with Nordlys models.\n */\n chat: (modelId: string, settings?: NordlysChatSettings) => LanguageModelV3;\n\n /**\n * Text embedding is not currently supported by the Nordlys provider.\n */\n embeddingModel: (modelId: string) => EmbeddingModelV3;\n}\n\nexport interface NordlysProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers.\n * The default prefix is your Nordlys API endpoint.\n */\n baseURL?: string;\n\n /**\n * API key for the Nordlys service.\n * It defaults to the `NORDLYS_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n * Create a Nordlys AI provider instance.\n */\nexport function createNordlys(\n options: NordlysProviderSettings = {}\n): NordlysProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://backend.mangoplant-a7a21605.swedencentral.azurecontainerapps.io/v1';\n\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'NORDLYS_API_KEY',\n description: 'Nordlys',\n })}`,\n 'Content-Type': 'application/json',\n ...options.headers,\n });\n\n const createChatModel = (modelId: string, settings?: NordlysChatSettings) =>\n new NordlysChatLanguageModel(modelId, settings, {\n provider: 'nordlys.chat',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: string, settings?: NordlysChatSettings) {\n if (new.target) {\n throw new Error(\n 'The Nordlys model function cannot be called with the new keyword.'\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n provider.specificationVersion = 'v3' as const;\n\n return Object.freeze(provider);\n}\n\n/**\n * Default Nordlys provider instance.\n */\nexport const nordlys = createNordlys();\n","import {\n InvalidResponseDataError,\n type LanguageModelV3,\n type LanguageModelV3Content,\n type LanguageModelV3FinishReason,\n type LanguageModelV3Usage,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { convertToNordlysChatMessages } from './convert-to-nordlys-chat-messages';\nimport { getResponseMetadata } from './get-response-metadata';\nimport { mapNordlysFinishReason } from './map-nordlys-finish-reason';\nimport {\n type NordlysChatSettings,\n nordlysProviderOptions,\n} from './nordlys-chat-options';\nimport { nordlysFailedResponseHandler } from './nordlys-error';\nimport { prepareTools } from './nordlys-prepare-tools';\nimport type { NordlysChatCompletionRequest } from './nordlys-types';\n\ninterface NordlysChatConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n defaultProvider?: string;\n}\n\nconst nordlysChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z\n .array(\n z.object({\n message: z.object({\n role: z.enum(['assistant', '']).nullish(),\n content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n id: z.string().nullish(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n })\n )\n .nullish(),\n reasoning_content: z.string().optional(),\n generated_files: z\n .array(\n z.object({\n media_type: z.string(),\n data: z.string(),\n })\n )\n .optional(),\n }),\n index: z.number(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n })\n ),\n })\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n })\n )\n .optional(),\n usage: z\n .object({\n completion_tokens: z.number(),\n prompt_tokens: z.number(),\n total_tokens: z.number(),\n reasoning_tokens: z.number().optional(),\n cached_input_tokens: z.number().optional(),\n })\n .optional(),\n system_fingerprint: z.string().optional(),\n service_tier: z.string().optional(),\n provider: z.string().optional(),\n error: z\n .object({\n message: z.string(),\n type: z.string(),\n param: z.any().nullish(),\n code: z.any().nullish(),\n })\n .optional(),\n});\n\nconst nordlysChatChunkSchema = z.union([\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z\n .object({\n role: z.enum(['assistant', '']).nullish(),\n content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n type: z\n .union([z.literal('function'), z.literal('')])\n .nullish(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n })\n )\n .nullish(),\n reasoning_content: z.string().optional(),\n generated_files: z\n .array(\n z.object({\n media_type: z.string(),\n data: z.string(),\n })\n )\n .optional(),\n })\n .nullish(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n })\n ),\n })\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n index: z.number(),\n })\n ),\n usage: z\n .object({\n completion_tokens: z.number(),\n prompt_tokens: z.number(),\n total_tokens: z.number(),\n reasoning_tokens: z.number().optional(),\n cached_input_tokens: z.number().optional(),\n })\n .optional(),\n provider: z.string().optional(),\n service_tier: z.string().optional(),\n system_fingerprint: z.string().optional(),\n }),\n z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n param: z.any().nullish(),\n code: z.any().nullish(),\n }),\n provider: z.string().optional(),\n }),\n]);\n\nexport class NordlysChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n readonly modelId: string;\n private readonly config: NordlysChatConfig;\n private readonly settings?: NordlysChatSettings;\n\n constructor(\n modelId: string,\n settings: NordlysChatSettings | undefined,\n config: NordlysChatConfig\n ) {\n this.modelId = modelId;\n this.config = config;\n this.settings = settings;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'application/pdf': [/^https:\\/\\/.*$/],\n };\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n providerOptions,\n tools,\n toolChoice,\n }: Parameters<LanguageModelV3['doGenerate']>[0]) {\n const warnings: SharedV3Warning[] = [];\n\n // Merge model-level settings with call-level options (call-level takes precedence)\n const mergedMaxOutputTokens =\n maxOutputTokens ?? this.settings?.maxOutputTokens;\n const mergedTemperature = temperature ?? this.settings?.temperature;\n const mergedTopP = topP ?? this.settings?.topP;\n const mergedTopK = topK ?? this.settings?.topK;\n const mergedFrequencyPenalty =\n frequencyPenalty ?? this.settings?.frequencyPenalty;\n const mergedPresencePenalty =\n presencePenalty ?? this.settings?.presencePenalty;\n const mergedStopSequences = stopSequences ?? this.settings?.stopSequences;\n const mergedProviderOptions = {\n ...this.settings?.providerOptions,\n ...providerOptions,\n };\n\n // Warn for unsupported settings\n if (mergedTopK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n if (responseFormat != null) {\n warnings.push({ type: 'unsupported', feature: 'responseFormat' });\n }\n\n // Parse provider options with zod schema (flat, not nested)\n const result = nordlysProviderOptions.safeParse(\n mergedProviderOptions ?? {}\n );\n const nordlysOptions = result.success ? result.data : {};\n\n // Use modelId from constructor (model is set when creating the model instance)\n\n const {\n tools: nordlysTools,\n toolChoice: nordlysToolChoice,\n toolWarnings,\n } = prepareTools({\n tools,\n toolChoice,\n });\n warnings.push(...toolWarnings);\n\n // Convert messages\n const { messages, warnings: messageWarnings } =\n convertToNordlysChatMessages({ prompt });\n warnings.push(...messageWarnings);\n\n // Standardized settings\n const standardizedArgs = {\n messages,\n model: this.modelId,\n max_tokens:\n typeof mergedMaxOutputTokens === 'number'\n ? mergedMaxOutputTokens\n : undefined,\n max_completion_tokens: nordlysOptions.max_completion_tokens,\n temperature: mergedTemperature,\n top_p: mergedTopP,\n stop: mergedStopSequences,\n presence_penalty: mergedPresencePenalty,\n frequency_penalty: mergedFrequencyPenalty,\n user: nordlysOptions.user,\n tools: nordlysTools,\n tool_choice: nordlysToolChoice,\n };\n\n // Map new provider option fields\n const args: NordlysChatCompletionRequest = {\n ...standardizedArgs,\n ...(nordlysOptions.logit_bias\n ? { logit_bias: nordlysOptions.logit_bias }\n : {}),\n ...(nordlysOptions.audio ? { audio: nordlysOptions.audio } : {}),\n ...(nordlysOptions.logprobs !== undefined\n ? { logprobs: nordlysOptions.logprobs }\n : {}),\n ...(nordlysOptions.metadata ? { metadata: nordlysOptions.metadata } : {}),\n ...(nordlysOptions.modalities\n ? { modalities: nordlysOptions.modalities }\n : {}),\n ...(nordlysOptions.parallel_tool_calls !== undefined\n ? { parallel_tool_calls: nordlysOptions.parallel_tool_calls }\n : {}),\n ...(nordlysOptions.prediction\n ? { prediction: nordlysOptions.prediction }\n : {}),\n ...(nordlysOptions.reasoning_effort\n ? { reasoning_effort: nordlysOptions.reasoning_effort }\n : {}),\n ...(nordlysOptions.response_format\n ? { response_format: nordlysOptions.response_format }\n : {}),\n ...(nordlysOptions.seed !== undefined\n ? { seed: nordlysOptions.seed }\n : {}),\n ...(nordlysOptions.service_tier\n ? { service_tier: nordlysOptions.service_tier }\n : {}),\n ...(nordlysOptions.store !== undefined\n ? { store: nordlysOptions.store }\n : {}),\n ...(nordlysOptions.top_logprobs !== undefined\n ? { top_logprobs: nordlysOptions.top_logprobs }\n : {}),\n ...(nordlysOptions.web_search_options\n ? { web_search_options: nordlysOptions.web_search_options }\n : {}),\n };\n\n return {\n args,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV3['doGenerate']>[0]\n ): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>> {\n const { args: body, warnings } = await this.getArgs(options);\n\n const { responseHeaders, value, rawValue } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: nordlysFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n nordlysChatResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n if (!value) {\n throw new Error('Failed to parse Nordlys API response');\n }\n\n // Handle error responses\n if (value.error) {\n throw new Error(`Nordlys API Error: ${value.error.message}`);\n }\n\n if (!value.choices || value.choices.length === 0) {\n throw new Error('No choices returned from Nordlys API');\n }\n\n const choice = value.choices[0];\n const content: Array<LanguageModelV3Content> = [];\n\n if (choice.message?.content) {\n content.push({ type: 'text', text: choice.message.content });\n }\n\n if (choice.message?.reasoning_content) {\n content.push({\n type: 'reasoning',\n text: choice.message.reasoning_content,\n });\n }\n\n if (\n choice.message?.generated_files &&\n choice.message.generated_files.length > 0\n ) {\n for (const file of choice.message.generated_files) {\n content.push({\n type: 'file',\n mediaType: file.media_type,\n data: file.data,\n });\n }\n }\n\n if (choice.message?.tool_calls && choice.message.tool_calls.length > 0) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id || '',\n toolName: toolCall.function?.name || '',\n input: toolCall.function?.arguments || '{}',\n });\n }\n }\n\n // Extract usage information\n const {\n prompt_tokens,\n completion_tokens,\n reasoning_tokens,\n cached_input_tokens,\n } = value.usage ?? {};\n\n return {\n content,\n finishReason: choice.finish_reason\n ? mapNordlysFinishReason(choice.finish_reason)\n : { unified: 'stop', raw: undefined },\n usage:\n value.usage && prompt_tokens != null\n ? {\n inputTokens: {\n total: prompt_tokens,\n noCache:\n cached_input_tokens != null\n ? prompt_tokens - cached_input_tokens\n : undefined,\n cacheRead: cached_input_tokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completion_tokens,\n text:\n completion_tokens != null && reasoning_tokens != null\n ? completion_tokens - reasoning_tokens\n : undefined,\n reasoning: reasoning_tokens,\n },\n }\n : {\n inputTokens: {\n total: 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: { total: 0, text: undefined, reasoning: undefined },\n },\n providerMetadata: value.provider\n ? {\n nordlys: {\n provider: value.provider,\n service_tier: value.service_tier,\n system_fingerprint: value.system_fingerprint,\n },\n }\n : undefined,\n request: { body },\n response: {\n id: value.id ?? '',\n modelId: value.model ?? '',\n timestamp: new Date((value.created ?? 0) * 1000),\n headers: responseHeaders,\n body: rawValue,\n },\n warnings,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV3['doStream']>[0]\n ): Promise<Awaited<ReturnType<LanguageModelV3['doStream']>>> {\n const { args, warnings } = await this.getArgs(options);\n const body = {\n ...args,\n stream: true,\n stream_options: { include_usage: true },\n };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: nordlysFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n nordlysChatChunkSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n hasFinished: boolean;\n }> = [];\n\n const state: {\n finishReason: LanguageModelV3FinishReason;\n usage: LanguageModelV3Usage;\n isFirstChunk: boolean;\n isActiveText: boolean;\n provider: string | undefined;\n serviceTier: string | undefined;\n systemFingerprint: string | undefined;\n } = {\n finishReason: { unified: 'other', raw: undefined },\n usage: {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n },\n isFirstChunk: true,\n isActiveText: false,\n provider: undefined,\n serviceTier: undefined,\n systemFingerprint: undefined,\n };\n\n return {\n stream: response.pipeThrough(\n new TransformStream({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n async transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n state.finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n // Handle error responses\n if ('error' in value) {\n state.finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({\n type: 'error',\n error: new Error(value.error.message),\n });\n return;\n }\n\n if (state.isFirstChunk) {\n state.isFirstChunk = false;\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata({\n id: value.id ?? '',\n model: value.model ?? '',\n created: value.created ?? 0,\n }),\n });\n }\n\n if (value.usage != null) {\n state.usage.inputTokens.total =\n value.usage.prompt_tokens ?? undefined;\n state.usage.inputTokens.cacheRead =\n value.usage.cached_input_tokens ?? undefined;\n state.usage.inputTokens.noCache =\n value.usage.prompt_tokens != null &&\n value.usage.cached_input_tokens != null\n ? value.usage.prompt_tokens - value.usage.cached_input_tokens\n : undefined;\n state.usage.outputTokens.total =\n value.usage.completion_tokens ?? undefined;\n state.usage.outputTokens.reasoning =\n value.usage.reasoning_tokens ?? undefined;\n state.usage.outputTokens.text =\n value.usage.completion_tokens != null &&\n value.usage.reasoning_tokens != null\n ? value.usage.completion_tokens - value.usage.reasoning_tokens\n : undefined;\n }\n\n if (value.provider) {\n state.provider = value.provider;\n }\n\n if (value.service_tier) {\n state.serviceTier = value.service_tier;\n }\n\n if (value.system_fingerprint) {\n state.systemFingerprint = value.system_fingerprint;\n }\n\n const choice = value.choices[0];\n if (choice?.finish_reason != null) {\n state.finishReason = mapNordlysFinishReason(choice.finish_reason);\n }\n\n if (!choice?.delta) {\n return;\n }\n\n const delta = choice.delta;\n\n if (delta.content != null) {\n if (!state.isActiveText) {\n controller.enqueue({ type: 'text-start', id: 'text-1' });\n state.isActiveText = true;\n }\n controller.enqueue({\n type: 'text-delta',\n id: 'text-1',\n delta: delta.content,\n });\n }\n\n if (delta.reasoning_content != null) {\n controller.enqueue({\n type: 'reasoning-delta',\n id: 'reasoning-1',\n delta: delta.reasoning_content,\n });\n }\n\n if (\n delta.generated_files != null &&\n Array.isArray(delta.generated_files)\n ) {\n for (const file of delta.generated_files) {\n controller.enqueue({\n type: 'file',\n mediaType: file.media_type,\n data: file.data,\n });\n }\n }\n\n if (delta.tool_calls != null && Array.isArray(delta.tool_calls)) {\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index;\n\n // Tool call start. Nordlys returns all information except the arguments in the first chunk.\n if (toolCalls[index] == null) {\n if (\n toolCallDelta.type !== 'function' &&\n toolCallDelta.type !== ''\n ) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name,\n });\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null\n ) {\n // send delta if the argument text has already started:\n if (toolCall.function.arguments.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\n });\n }\n\n // check if tool call is complete\n // (some providers send the full tool call in one chunk):\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n\n continue;\n }\n\n // existing tool call, merge if not finished\n const toolCall = toolCalls[index];\n\n if (toolCall.hasFinished) {\n continue;\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function.arguments +=\n toolCallDelta.function?.arguments ?? '';\n }\n\n // send delta\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCallDelta.function.arguments ?? '',\n });\n\n // check if tool call is complete\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n }\n },\n flush(controller) {\n if (state.isActiveText) {\n controller.enqueue({ type: 'text-end', id: 'text-1' });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason: state.finishReason ?? {\n unified: 'stop',\n raw: undefined,\n },\n usage: state.usage ?? {\n inputTokens: {\n total: 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n providerMetadata:\n state.provider || state.serviceTier || state.systemFingerprint\n ? {\n nordlys: {\n provider: state.provider,\n service_tier: state.serviceTier,\n system_fingerprint: state.systemFingerprint,\n },\n }\n : undefined,\n });\n },\n })\n ),\n request: { body },\n response: {\n headers: responseHeaders,\n },\n };\n }\n}\n","// Converts generic chat messages to Nordlys API format\nimport type {\n LanguageModelV3Prompt,\n LanguageModelV3ToolResultPart,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport { UnsupportedFunctionalityError } from '@ai-sdk/provider';\nimport { convertToBase64 } from '@ai-sdk/provider-utils';\nimport type { NordlysChatCompletionMessage } from './nordlys-types';\n\nfunction convertToolOutput(\n output: LanguageModelV3ToolResultPart['output']\n): string {\n switch (output.type) {\n case 'text':\n case 'error-text':\n return output.value;\n case 'json':\n case 'error-json':\n return JSON.stringify(output.value);\n case 'content':\n return JSON.stringify(output.value);\n case 'execution-denied':\n return '';\n default:\n return '';\n }\n}\n\nexport function convertToNordlysChatMessages({\n prompt,\n systemMessageMode = 'system',\n}: {\n prompt: LanguageModelV3Prompt;\n systemMessageMode?: 'system' | 'developer' | 'remove';\n}): {\n messages: NordlysChatCompletionMessage[];\n warnings: Array<SharedV3Warning>;\n} {\n const messages: NordlysChatCompletionMessage[] = [];\n const warnings: Array<SharedV3Warning> = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n switch (systemMessageMode) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n case 'developer': {\n messages.push({ role: 'developer', content });\n break;\n }\n case 'remove': {\n warnings.push({\n type: 'other',\n message: 'system messages are removed for this model',\n });\n break;\n }\n default: {\n const _exhaustiveCheck: never = systemMessageMode;\n throw new Error(\n `Unsupported system message mode: ${_exhaustiveCheck}`\n );\n }\n }\n break;\n }\n case 'user': {\n if (content.length === 1 && content[0].type === 'text') {\n messages.push({ role: 'user', content: content[0].text });\n break;\n }\n messages.push({\n role: 'user',\n content: content.map((part, index) => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n case 'file': {\n if (part.mediaType?.startsWith('image/')) {\n const mediaType =\n part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n return {\n type: 'image_url',\n image_url: {\n url:\n part.data instanceof URL\n ? part.data.toString()\n : `data:${mediaType};base64,${convertToBase64(part.data)}`,\n },\n };\n }\n if (\n part.mediaType &&\n (part.mediaType === 'audio/wav' ||\n part.mediaType === 'audio/mp3' ||\n part.mediaType === 'audio/mpeg')\n ) {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'audio file parts with URLs',\n });\n }\n return {\n type: 'input_audio',\n input_audio: {\n data: convertToBase64(part.data),\n format: part.mediaType === 'audio/wav' ? 'wav' : 'mp3',\n },\n };\n }\n if (part.mediaType && part.mediaType === 'application/pdf') {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'PDF file parts with URLs',\n });\n }\n return {\n type: 'file',\n file: {\n filename: part.filename ?? `part-${index}.pdf`,\n file_data: `data:application/pdf;base64,${convertToBase64(part.data)}`,\n },\n };\n }\n throw new UnsupportedFunctionalityError({\n functionality: `file part media type ${part.mediaType}`,\n });\n }\n default: {\n throw new Error(`Unsupported content part type`);\n }\n }\n }),\n });\n break;\n }\n case 'assistant': {\n const textParts: string[] = [];\n const reasoningParts: string[] = [];\n const generatedFiles: Array<{ media_type: string; data: string }> = [];\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n textParts.push(part.text);\n break;\n }\n case 'reasoning': {\n reasoningParts.push(part.text);\n break;\n }\n case 'file': {\n const dataString =\n typeof part.data === 'string'\n ? part.data\n : part.data instanceof URL\n ? (() => {\n throw new Error(\n 'URL data not supported for generated files'\n );\n })()\n : Buffer.from(part.data).toString('base64');\n\n generatedFiles.push({\n media_type: part.mediaType,\n data: dataString,\n });\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n }\n }\n\n const text = textParts.join('');\n const reasoning = reasoningParts.join('');\n\n const message: NordlysChatCompletionMessage = {\n role: 'assistant',\n content: text,\n ...(toolCalls.length > 0 && { tool_calls: toolCalls }),\n ...(reasoning && { reasoning_content: reasoning }),\n ...(generatedFiles.length > 0 && { generated_files: generatedFiles }),\n };\n\n messages.push(message);\n break;\n }\n case 'tool': {\n for (const toolResponse of content) {\n if (toolResponse.type === 'tool-result') {\n const contentValue = convertToolOutput(toolResponse.output);\n if (contentValue) {\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: contentValue,\n });\n }\n }\n }\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return { messages, warnings };\n}\n","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\n}\n","import type { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapNordlysFinishReason(\n reason?: string\n): LanguageModelV3FinishReason {\n switch (reason) {\n case 'stop':\n return { unified: 'stop', raw: reason };\n case 'length':\n return { unified: 'length', raw: reason };\n case 'content_filter':\n return { unified: 'content-filter', raw: reason };\n case 'tool_calls':\n return { unified: 'tool-calls', raw: reason };\n default:\n return { unified: 'other', raw: reason };\n }\n}\n","// Nordlys chat model options/types\n\nimport { z } from 'zod/v4';\n\n/**\n * Provider options for Nordlys chat models.\n */\nexport const nordlysProviderOptions = z.object({\n /**\n * Model name (required for API requests).\n */\n model: z.string().optional(),\n /**\n * Modify the likelihood of specified tokens appearing in the completion.\n */\n logit_bias: z.record(z.string(), z.number()).optional(),\n /**\n * Number of completions to generate for each prompt.\n */\n n: z.number().optional(),\n /**\n * Whether to stream responses.\n */\n stream: z.boolean().optional(),\n /**\n * Unique identifier representing your end-user.\n */\n user: z.string().optional(),\n /**\n * Audio parameter for chat completion.\n */\n audio: z\n .object({\n format: z.string().optional(),\n voice: z.string().optional(),\n })\n .optional(),\n /**\n * Whether to return log probabilities of the output tokens.\n */\n logprobs: z.boolean().optional(),\n /**\n * Maximum number of completion tokens.\n */\n max_completion_tokens: z.number().optional(),\n /**\n * Metadata for the request.\n */\n metadata: z.record(z.string(), z.string()).optional(),\n /**\n * Modalities for the request.\n */\n modalities: z.array(z.string()).optional(),\n /**\n * Whether to allow parallel tool calls.\n */\n parallel_tool_calls: z.boolean().optional(),\n /**\n * Prediction content parameter.\n */\n prediction: z\n .object({\n type: z.string().optional(),\n content: z\n .object({\n OfString: z.string().optional(),\n OfArrayOfContentParts: z\n .array(z.object({ type: z.literal('text'), text: z.string() }))\n .optional(),\n })\n .optional(),\n })\n .optional(),\n /**\n * Reasoning effort level.\n */\n reasoning_effort: z.string().optional(),\n /**\n * Response format parameter.\n */\n response_format: z\n .object({\n OfText: z.object({ type: z.string() }).optional(),\n OfJSONObject: z.object({ type: z.string() }).optional(),\n OfJSONSchema: z\n .object({\n type: z.string(),\n json_schema: z\n .object({\n name: z.string(),\n schema: z.unknown(),\n description: z.string().optional(),\n strict: z.boolean().optional(),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n /**\n * Seed for deterministic outputs.\n */\n seed: z.number().optional(),\n /**\n * Service tier to use.\n */\n service_tier: z.string().optional(),\n /**\n * Whether to store the conversation.\n */\n store: z.boolean().optional(),\n /**\n * Number of top logprobs to return.\n */\n top_logprobs: z.number().optional(),\n /**\n * Web search options.\n */\n web_search_options: z\n .object({\n search_context_size: z.string().optional(),\n user_location: z\n .object({\n type: z.string().optional(),\n approximate: z\n .object({\n city: z.string().optional(),\n country: z.string().optional(),\n region: z.string().optional(),\n timezone: z.string().optional(),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\n/**\n * Type for validated Nordlys provider options.\n */\nexport type NordlysProviderOptions = z.infer<typeof nordlysProviderOptions>;\n\n/**\n * Settings that can be set at model creation time.\n * These settings will be merged with call-level options, with call-level taking precedence.\n */\nexport interface NordlysChatSettings {\n /**\n * Temperature setting for the model.\n */\n temperature?: number;\n /**\n * Maximum number of output tokens.\n */\n maxOutputTokens?: number;\n /**\n * Top-p sampling parameter.\n */\n topP?: number;\n /**\n * Top-k sampling parameter.\n */\n topK?: number;\n /**\n * Frequency penalty.\n */\n frequencyPenalty?: number;\n /**\n * Presence penalty.\n */\n presencePenalty?: number;\n /**\n * Stop sequences.\n */\n stopSequences?: string[];\n /**\n * Provider-specific options.\n */\n providerOptions?: NordlysProviderOptions;\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport const nordlysErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n param: z.any().nullish(),\n code: z.union([z.string(), z.number()]).nullish(),\n }),\n});\n\nexport type NordlysErrorData = z.infer<typeof nordlysErrorDataSchema>;\n\nexport const nordlysFailedResponseHandler: ReturnType<\n typeof createJsonErrorResponseHandler<NordlysErrorData>\n> = createJsonErrorResponseHandler({\n errorSchema: nordlysErrorDataSchema,\n errorToMessage: (data: NordlysErrorData) => data.error.message,\n});\n","import {\n type LanguageModelV3CallOptions,\n type SharedV3Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV3CallOptions['tools'];\n toolChoice?: LanguageModelV3CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: SharedV3Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV3Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const openaiCompatTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({ type: 'unsupported', feature: `tool: ${tool.name}` });\n } else if (tool.type === 'function') {\n openaiCompatTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: openaiCompatTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: openaiCompatTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: openaiCompatTools,\n toolChoice: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n"],"mappings":"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","names":["import_provider","import_provider_utils","import_provider","import_provider_utils","import_zod","import_provider_utils","import_provider","toolCall"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/nordlys-provider.ts","../src/nordlys-chat-language-model.ts","../src/convert-to-nordlys-chat-messages.ts","../src/get-response-metadata.ts","../src/map-nordlys-finish-reason.ts","../src/nordlys-chat-options.ts","../src/nordlys-error.ts","../src/nordlys-prepare-tools.ts"],"sourcesContent":["export type { NordlysChatSettings } from './nordlys-chat-options';\nexport type {\n NordlysProvider,\n NordlysProviderSettings,\n} from './nordlys-provider';\nexport { createNordlys, nordlys } from './nordlys-provider';\nexport type * from './nordlys-types';\n","import type {\n EmbeddingModelV3,\n LanguageModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport { NoSuchModelError } from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport { loadApiKey, withoutTrailingSlash } from '@ai-sdk/provider-utils';\nimport { NordlysChatLanguageModel } from './nordlys-chat-language-model';\nimport type { NordlysChatSettings } from './nordlys-chat-options';\n\nexport type NordlysChatModelId = string;\n\nexport interface NordlysProvider extends ProviderV3 {\n (modelId: string, settings?: NordlysChatSettings): LanguageModelV3;\n\n /**\n * Creates a model for text generation with Nordlys models.\n */\n languageModel: (\n modelId: string,\n settings?: NordlysChatSettings\n ) => LanguageModelV3;\n\n /**\n * Creates a chat model with Nordlys models.\n */\n chat: (modelId: string, settings?: NordlysChatSettings) => LanguageModelV3;\n\n /**\n * Text embedding is not currently supported by the Nordlys provider.\n */\n embeddingModel: (modelId: string) => EmbeddingModelV3;\n}\n\nexport interface NordlysProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers.\n * The default prefix is your Nordlys API endpoint.\n */\n baseURL?: string;\n\n /**\n * API key for the Nordlys service.\n * It defaults to the `NORDLYS_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n * Create a Nordlys AI provider instance.\n */\nexport function createNordlys(\n options: NordlysProviderSettings = {}\n): NordlysProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? 'https://api.nordlyslabs.com/v1';\n\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'NORDLYS_API_KEY',\n description: 'Nordlys',\n })}`,\n 'Content-Type': 'application/json',\n ...options.headers,\n });\n\n const createChatModel = (modelId: string, settings?: NordlysChatSettings) =>\n new NordlysChatLanguageModel(modelId, settings, {\n provider: 'nordlys.chat',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: string, settings?: NordlysChatSettings) {\n if (new.target) {\n throw new Error(\n 'The Nordlys model function cannot be called with the new keyword.'\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n provider.specificationVersion = 'v3' as const;\n\n return Object.freeze(provider);\n}\n\n/**\n * Default Nordlys provider instance.\n */\nexport const nordlys = createNordlys();\n","import {\n InvalidResponseDataError,\n type LanguageModelV3,\n type LanguageModelV3Content,\n type LanguageModelV3FinishReason,\n type LanguageModelV3Usage,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { convertToNordlysChatMessages } from './convert-to-nordlys-chat-messages';\nimport { getResponseMetadata } from './get-response-metadata';\nimport { mapNordlysFinishReason } from './map-nordlys-finish-reason';\nimport {\n type NordlysChatSettings,\n nordlysProviderOptions,\n} from './nordlys-chat-options';\nimport { nordlysFailedResponseHandler } from './nordlys-error';\nimport { prepareTools } from './nordlys-prepare-tools';\nimport type { NordlysChatCompletionRequest } from './nordlys-types';\n\ninterface NordlysChatConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n defaultProvider?: string;\n}\n\nconst nordlysChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z\n .array(\n z.object({\n message: z.object({\n role: z.enum(['assistant', '']).nullish(),\n content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n id: z.string().nullish(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n })\n )\n .nullish(),\n reasoning_content: z.string().optional(),\n generated_files: z\n .array(\n z.object({\n media_type: z.string(),\n data: z.string(),\n })\n )\n .optional(),\n }),\n index: z.number(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n })\n ),\n })\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n })\n )\n .optional(),\n usage: z\n .object({\n completion_tokens: z.number(),\n prompt_tokens: z.number(),\n total_tokens: z.number(),\n reasoning_tokens: z.number().optional(),\n cached_input_tokens: z.number().optional(),\n })\n .optional(),\n system_fingerprint: z.string().optional(),\n service_tier: z.string().optional(),\n provider: z.string().optional(),\n error: z\n .object({\n message: z.string(),\n type: z.string(),\n param: z.any().nullish(),\n code: z.any().nullish(),\n })\n .optional(),\n});\n\nconst nordlysChatChunkSchema = z.union([\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z\n .object({\n role: z.enum(['assistant', '']).nullish(),\n content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n type: z\n .union([z.literal('function'), z.literal('')])\n .nullish(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n })\n )\n .nullish(),\n reasoning_content: z.string().optional(),\n generated_files: z\n .array(\n z.object({\n media_type: z.string(),\n data: z.string(),\n })\n )\n .optional(),\n })\n .nullish(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n })\n ),\n })\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n index: z.number(),\n })\n ),\n usage: z\n .object({\n completion_tokens: z.number(),\n prompt_tokens: z.number(),\n total_tokens: z.number(),\n reasoning_tokens: z.number().optional(),\n cached_input_tokens: z.number().optional(),\n })\n .nullish(),\n provider: z.string().optional(),\n service_tier: z.string().optional(),\n system_fingerprint: z.string().nullish(),\n }),\n z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n param: z.any().nullish(),\n code: z.any().nullish(),\n }),\n provider: z.string().optional(),\n }),\n]);\n\nexport class NordlysChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n readonly modelId: string;\n private readonly config: NordlysChatConfig;\n private readonly settings?: NordlysChatSettings;\n\n constructor(\n modelId: string,\n settings: NordlysChatSettings | undefined,\n config: NordlysChatConfig\n ) {\n this.modelId = modelId;\n this.config = config;\n this.settings = settings;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'application/pdf': [/^https:\\/\\/.*$/],\n };\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n providerOptions,\n tools,\n toolChoice,\n }: Parameters<LanguageModelV3['doGenerate']>[0]) {\n const warnings: SharedV3Warning[] = [];\n\n // Merge model-level settings with call-level options (call-level takes precedence)\n const mergedMaxOutputTokens =\n maxOutputTokens ?? this.settings?.maxOutputTokens;\n const mergedTemperature = temperature ?? this.settings?.temperature;\n const mergedTopP = topP ?? this.settings?.topP;\n const mergedTopK = topK ?? this.settings?.topK;\n const mergedFrequencyPenalty =\n frequencyPenalty ?? this.settings?.frequencyPenalty;\n const mergedPresencePenalty =\n presencePenalty ?? this.settings?.presencePenalty;\n const mergedStopSequences = stopSequences ?? this.settings?.stopSequences;\n const mergedProviderOptions = {\n ...this.settings?.providerOptions,\n ...providerOptions,\n };\n\n // Warn for unsupported settings\n if (mergedTopK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n if (responseFormat != null) {\n warnings.push({ type: 'unsupported', feature: 'responseFormat' });\n }\n\n // Parse provider options with zod schema (flat, not nested)\n const result = nordlysProviderOptions.safeParse(\n mergedProviderOptions ?? {}\n );\n const nordlysOptions = result.success ? result.data : {};\n\n // Use modelId from constructor (model is set when creating the model instance)\n\n const {\n tools: nordlysTools,\n toolChoice: nordlysToolChoice,\n toolWarnings,\n } = prepareTools({\n tools,\n toolChoice,\n });\n warnings.push(...toolWarnings);\n\n // Convert messages\n const { messages, warnings: messageWarnings } =\n convertToNordlysChatMessages({ prompt });\n warnings.push(...messageWarnings);\n\n // Standardized settings\n const standardizedArgs = {\n messages,\n model: this.modelId,\n max_tokens:\n typeof mergedMaxOutputTokens === 'number'\n ? mergedMaxOutputTokens\n : undefined,\n max_completion_tokens: nordlysOptions.max_completion_tokens,\n temperature: mergedTemperature,\n top_p: mergedTopP,\n stop: mergedStopSequences,\n presence_penalty: mergedPresencePenalty,\n frequency_penalty: mergedFrequencyPenalty,\n user: nordlysOptions.user,\n tools: nordlysTools,\n tool_choice: nordlysToolChoice,\n };\n\n // Map new provider option fields\n const args: NordlysChatCompletionRequest = {\n ...standardizedArgs,\n ...(nordlysOptions.logit_bias\n ? { logit_bias: nordlysOptions.logit_bias }\n : {}),\n ...(nordlysOptions.audio ? { audio: nordlysOptions.audio } : {}),\n ...(nordlysOptions.logprobs !== undefined\n ? { logprobs: nordlysOptions.logprobs }\n : {}),\n ...(nordlysOptions.metadata ? { metadata: nordlysOptions.metadata } : {}),\n ...(nordlysOptions.modalities\n ? { modalities: nordlysOptions.modalities }\n : {}),\n ...(nordlysOptions.parallel_tool_calls !== undefined\n ? { parallel_tool_calls: nordlysOptions.parallel_tool_calls }\n : {}),\n ...(nordlysOptions.prediction\n ? { prediction: nordlysOptions.prediction }\n : {}),\n ...(nordlysOptions.reasoning_effort\n ? { reasoning_effort: nordlysOptions.reasoning_effort }\n : {}),\n ...(nordlysOptions.response_format\n ? { response_format: nordlysOptions.response_format }\n : {}),\n ...(nordlysOptions.seed !== undefined\n ? { seed: nordlysOptions.seed }\n : {}),\n ...(nordlysOptions.service_tier\n ? { service_tier: nordlysOptions.service_tier }\n : {}),\n ...(nordlysOptions.store !== undefined\n ? { store: nordlysOptions.store }\n : {}),\n ...(nordlysOptions.top_logprobs !== undefined\n ? { top_logprobs: nordlysOptions.top_logprobs }\n : {}),\n ...(nordlysOptions.web_search_options\n ? { web_search_options: nordlysOptions.web_search_options }\n : {}),\n };\n\n return {\n args,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV3['doGenerate']>[0]\n ): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>> {\n const { args: body, warnings } = await this.getArgs(options);\n\n const { responseHeaders, value, rawValue } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: nordlysFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n nordlysChatResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n if (!value) {\n throw new Error('Failed to parse Nordlys API response');\n }\n\n // Handle error responses\n if (value.error) {\n throw new Error(`Nordlys API Error: ${value.error.message}`);\n }\n\n if (!value.choices || value.choices.length === 0) {\n throw new Error('No choices returned from Nordlys API');\n }\n\n const choice = value.choices[0];\n const content: Array<LanguageModelV3Content> = [];\n\n if (choice.message?.content) {\n content.push({ type: 'text', text: choice.message.content });\n }\n\n if (choice.message?.reasoning_content) {\n content.push({\n type: 'reasoning',\n text: choice.message.reasoning_content,\n });\n }\n\n if (\n choice.message?.generated_files &&\n choice.message.generated_files.length > 0\n ) {\n for (const file of choice.message.generated_files) {\n content.push({\n type: 'file',\n mediaType: file.media_type,\n data: file.data,\n });\n }\n }\n\n if (choice.message?.tool_calls && choice.message.tool_calls.length > 0) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id || '',\n toolName: toolCall.function?.name || '',\n input: toolCall.function?.arguments || '{}',\n });\n }\n }\n\n // Extract usage information\n const {\n prompt_tokens,\n completion_tokens,\n reasoning_tokens,\n cached_input_tokens,\n } = value.usage ?? {};\n\n return {\n content,\n finishReason: choice.finish_reason\n ? mapNordlysFinishReason(choice.finish_reason)\n : { unified: 'stop', raw: undefined },\n usage:\n value.usage && prompt_tokens != null\n ? {\n inputTokens: {\n total: prompt_tokens,\n noCache:\n cached_input_tokens != null\n ? prompt_tokens - cached_input_tokens\n : undefined,\n cacheRead: cached_input_tokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completion_tokens,\n text:\n completion_tokens != null && reasoning_tokens != null\n ? completion_tokens - reasoning_tokens\n : undefined,\n reasoning: reasoning_tokens,\n },\n }\n : {\n inputTokens: {\n total: 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: { total: 0, text: undefined, reasoning: undefined },\n },\n providerMetadata: value.provider\n ? {\n nordlys: {\n provider: value.provider,\n service_tier: value.service_tier,\n system_fingerprint: value.system_fingerprint,\n },\n }\n : undefined,\n request: { body },\n response: {\n id: value.id ?? '',\n modelId: value.model ?? '',\n timestamp: new Date((value.created ?? 0) * 1000),\n headers: responseHeaders,\n body: rawValue,\n },\n warnings,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV3['doStream']>[0]\n ): Promise<Awaited<ReturnType<LanguageModelV3['doStream']>>> {\n const { args, warnings } = await this.getArgs(options);\n const body = {\n ...args,\n stream: true,\n stream_options: { include_usage: true },\n };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: nordlysFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n nordlysChatChunkSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n hasFinished: boolean;\n }> = [];\n\n const state: {\n finishReason: LanguageModelV3FinishReason;\n usage: LanguageModelV3Usage;\n isFirstChunk: boolean;\n isActiveText: boolean;\n provider: string | undefined;\n serviceTier: string | undefined;\n systemFingerprint: string | undefined;\n } = {\n finishReason: { unified: 'other', raw: undefined },\n usage: {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n },\n isFirstChunk: true,\n isActiveText: false,\n provider: undefined,\n serviceTier: undefined,\n systemFingerprint: undefined,\n };\n\n return {\n stream: response.pipeThrough(\n new TransformStream({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n async transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n state.finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n // Handle error responses\n if ('error' in value) {\n state.finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({\n type: 'error',\n error: new Error(value.error.message),\n });\n return;\n }\n\n if (state.isFirstChunk) {\n state.isFirstChunk = false;\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata({\n id: value.id ?? '',\n model: value.model ?? '',\n created: value.created ?? 0,\n }),\n });\n }\n\n if (value.usage != null) {\n state.usage.inputTokens.total =\n value.usage.prompt_tokens ?? undefined;\n state.usage.inputTokens.cacheRead =\n value.usage.cached_input_tokens ?? undefined;\n state.usage.inputTokens.noCache =\n value.usage.prompt_tokens != null &&\n value.usage.cached_input_tokens != null\n ? value.usage.prompt_tokens - value.usage.cached_input_tokens\n : undefined;\n state.usage.outputTokens.total =\n value.usage.completion_tokens ?? undefined;\n state.usage.outputTokens.reasoning =\n value.usage.reasoning_tokens ?? undefined;\n state.usage.outputTokens.text =\n value.usage.completion_tokens != null &&\n value.usage.reasoning_tokens != null\n ? value.usage.completion_tokens - value.usage.reasoning_tokens\n : undefined;\n }\n\n if (value.provider) {\n state.provider = value.provider;\n }\n\n if (value.service_tier) {\n state.serviceTier = value.service_tier;\n }\n\n if (value.system_fingerprint) {\n state.systemFingerprint = value.system_fingerprint;\n }\n\n const choice = value.choices[0];\n if (choice?.finish_reason != null) {\n state.finishReason = mapNordlysFinishReason(choice.finish_reason);\n }\n\n if (!choice?.delta) {\n return;\n }\n\n const delta = choice.delta;\n\n if (delta.content != null) {\n if (!state.isActiveText) {\n controller.enqueue({ type: 'text-start', id: 'text-1' });\n state.isActiveText = true;\n }\n controller.enqueue({\n type: 'text-delta',\n id: 'text-1',\n delta: delta.content,\n });\n }\n\n if (delta.reasoning_content != null) {\n controller.enqueue({\n type: 'reasoning-delta',\n id: 'reasoning-1',\n delta: delta.reasoning_content,\n });\n }\n\n if (\n delta.generated_files != null &&\n Array.isArray(delta.generated_files)\n ) {\n for (const file of delta.generated_files) {\n controller.enqueue({\n type: 'file',\n mediaType: file.media_type,\n data: file.data,\n });\n }\n }\n\n if (delta.tool_calls != null && Array.isArray(delta.tool_calls)) {\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index;\n\n // Tool call start. Nordlys returns all information except the arguments in the first chunk.\n if (toolCalls[index] == null) {\n if (\n toolCallDelta.type !== 'function' &&\n toolCallDelta.type !== ''\n ) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name,\n });\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null\n ) {\n // send delta if the argument text has already started:\n if (toolCall.function.arguments.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\n });\n }\n\n // check if tool call is complete\n // (some providers send the full tool call in one chunk):\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n\n continue;\n }\n\n // existing tool call, merge if not finished\n const toolCall = toolCalls[index];\n\n if (toolCall.hasFinished) {\n continue;\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function.arguments +=\n toolCallDelta.function?.arguments ?? '';\n }\n\n // send delta\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCallDelta.function.arguments ?? '',\n });\n\n // check if tool call is complete\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n }\n },\n flush(controller) {\n if (state.isActiveText) {\n controller.enqueue({ type: 'text-end', id: 'text-1' });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason: state.finishReason ?? {\n unified: 'stop',\n raw: undefined,\n },\n usage: state.usage ?? {\n inputTokens: {\n total: 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n providerMetadata:\n state.provider || state.serviceTier || state.systemFingerprint\n ? {\n nordlys: {\n provider: state.provider,\n service_tier: state.serviceTier,\n system_fingerprint: state.systemFingerprint,\n },\n }\n : undefined,\n });\n },\n })\n ),\n request: { body },\n response: {\n headers: responseHeaders,\n },\n };\n }\n}\n","// Converts generic chat messages to Nordlys API format\n// Uses OpenAI compatible logic patterns but adds Nordlys-specific features (audio, PDF, developer role, reasoning, generated_files)\nimport type {\n LanguageModelV3Prompt,\n LanguageModelV3ToolResultPart,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport { UnsupportedFunctionalityError } from '@ai-sdk/provider';\nimport { convertToBase64 } from '@ai-sdk/provider-utils';\nimport type { NordlysChatCompletionMessage } from './nordlys-types';\n\n// Convert tool output using OpenAI compatible logic\nfunction convertToolOutput(\n output: LanguageModelV3ToolResultPart['output']\n): string {\n switch (output.type) {\n case 'text':\n case 'error-text':\n return output.value;\n case 'json':\n case 'error-json':\n case 'content':\n return JSON.stringify(output.value);\n case 'execution-denied':\n return output.reason ?? 'Tool execution denied.';\n default:\n return '';\n }\n}\n\nexport function convertToNordlysChatMessages({\n prompt,\n systemMessageMode = 'system',\n}: {\n prompt: LanguageModelV3Prompt;\n systemMessageMode?: 'system' | 'developer' | 'remove';\n}): {\n messages: NordlysChatCompletionMessage[];\n warnings: Array<SharedV3Warning>;\n} {\n const messages: NordlysChatCompletionMessage[] = [];\n const warnings: Array<SharedV3Warning> = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n switch (systemMessageMode) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n case 'developer': {\n messages.push({ role: 'developer', content });\n break;\n }\n case 'remove': {\n warnings.push({\n type: 'other',\n message: 'system messages are removed for this model',\n });\n break;\n }\n default: {\n const _exhaustiveCheck: never = systemMessageMode;\n throw new Error(\n `Unsupported system message mode: ${_exhaustiveCheck}`\n );\n }\n }\n break;\n }\n case 'user': {\n // Use OpenAI compatible logic: if single text part, use string content\n if (content.length === 1 && content[0].type === 'text') {\n messages.push({ role: 'user', content: content[0].text });\n break;\n }\n\n // Process content parts - use OpenAI compatible logic for images/text, add Nordlys-specific for audio/PDF\n messages.push({\n role: 'user',\n content: content.map((part, index) => {\n switch (part.type) {\n case 'text': {\n // OpenAI compatible logic\n return { type: 'text', text: part.text };\n }\n case 'file': {\n // Validate data exists\n if (part.data === undefined || part.data === null) {\n throw new Error(\n 'File part data is required but was undefined or null'\n );\n }\n\n // Handle images using OpenAI compatible logic (exact match)\n if (part.mediaType?.startsWith('image/')) {\n const mediaType =\n part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n // OpenAI compatible always calls convertToBase64 (handles strings, buffers, etc.)\n // Note: OpenAI compatible doesn't validate data existence, but we do for safety\n const url =\n part.data instanceof URL\n ? part.data.toString()\n : `data:${mediaType};base64,${convertToBase64(part.data)}`;\n\n return {\n type: 'image_url',\n image_url: { url },\n };\n }\n\n // Handle audio files (Nordlys-specific)\n if (\n part.mediaType &&\n (part.mediaType === 'audio/wav' ||\n part.mediaType === 'audio/mp3' ||\n part.mediaType === 'audio/mpeg')\n ) {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'audio file parts with URLs',\n });\n }\n\n const data =\n typeof part.data === 'string'\n ? part.data\n : convertToBase64(part.data);\n\n return {\n type: 'input_audio',\n input_audio: {\n data,\n format: (part.mediaType === 'audio/wav'\n ? 'wav'\n : 'mp3') as 'wav' | 'mp3',\n },\n };\n }\n\n // Handle PDF files (Nordlys-specific)\n if (part.mediaType && part.mediaType === 'application/pdf') {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'PDF file parts with URLs',\n });\n }\n\n const base64Data =\n typeof part.data === 'string'\n ? part.data\n : convertToBase64(part.data);\n\n return {\n type: 'file',\n file: {\n filename: part.filename ?? `part-${index}.pdf`,\n file_data: `data:application/pdf;base64,${base64Data}`,\n },\n };\n }\n\n throw new UnsupportedFunctionalityError({\n functionality: `file part media type ${part.mediaType}`,\n });\n }\n default: {\n throw new Error(`Unsupported content part type`);\n }\n }\n }),\n });\n break;\n }\n case 'assistant': {\n // Use OpenAI compatible logic for text and tool calls, add Nordlys-specific fields\n let text = '';\n const reasoningParts: string[] = [];\n const generatedFiles: Array<{ media_type: string; data: string }> = [];\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n // OpenAI compatible logic: concatenate text\n text += part.text;\n break;\n }\n case 'reasoning': {\n // Nordlys-specific: collect reasoning parts\n reasoningParts.push(part.text);\n break;\n }\n case 'file': {\n // Nordlys-specific: handle generated files\n const dataString =\n typeof part.data === 'string'\n ? part.data\n : part.data instanceof URL\n ? (() => {\n throw new Error(\n 'URL data not supported for generated files'\n );\n })()\n : Buffer.from(part.data).toString('base64');\n\n generatedFiles.push({\n media_type: part.mediaType ?? 'application/octet-stream',\n data: dataString,\n });\n break;\n }\n case 'tool-call': {\n // OpenAI compatible logic for tool calls\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n }\n }\n\n const reasoning = reasoningParts.join('');\n\n // Build message using OpenAI compatible structure + Nordlys-specific fields\n // OpenAI compatible uses: tool_calls: toolCalls.length > 0 ? toolCalls : void 0\n // We use spread operator which omits the field when empty (equivalent behavior)\n const message: NordlysChatCompletionMessage = {\n role: 'assistant',\n content: text,\n ...(toolCalls.length > 0 && { tool_calls: toolCalls }),\n ...(reasoning && { reasoning_content: reasoning }),\n ...(generatedFiles.length > 0 && { generated_files: generatedFiles }),\n };\n\n messages.push(message);\n break;\n }\n case 'tool': {\n // Use OpenAI compatible logic for tool messages\n // Note: We filter out empty tool results (Nordlys-specific behavior)\n for (const toolResponse of content) {\n if (toolResponse.type === 'tool-approval-response') {\n continue;\n }\n\n const contentValue = convertToolOutput(toolResponse.output);\n // Filter out empty tool results (original Nordlys behavior)\n if (contentValue) {\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: contentValue,\n });\n }\n }\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return { messages, warnings };\n}\n","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\n}\n","import type { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapNordlysFinishReason(\n reason?: string\n): LanguageModelV3FinishReason {\n switch (reason) {\n case 'stop':\n return { unified: 'stop', raw: reason };\n case 'length':\n return { unified: 'length', raw: reason };\n case 'content_filter':\n return { unified: 'content-filter', raw: reason };\n case 'tool_calls':\n return { unified: 'tool-calls', raw: reason };\n default:\n return { unified: 'other', raw: reason };\n }\n}\n","// Nordlys chat model options/types\n\nimport { z } from 'zod/v4';\n\n/**\n * Provider options for Nordlys chat models.\n */\nexport const nordlysProviderOptions = z.object({\n /**\n * Model name (required for API requests).\n */\n model: z.string().optional(),\n /**\n * Modify the likelihood of specified tokens appearing in the completion.\n */\n logit_bias: z.record(z.string(), z.number()).optional(),\n /**\n * Number of completions to generate for each prompt.\n */\n n: z.number().optional(),\n /**\n * Whether to stream responses.\n */\n stream: z.boolean().optional(),\n /**\n * Unique identifier representing your end-user.\n */\n user: z.string().optional(),\n /**\n * Audio parameter for chat completion.\n */\n audio: z\n .object({\n format: z.string().optional(),\n voice: z.string().optional(),\n })\n .optional(),\n /**\n * Whether to return log probabilities of the output tokens.\n */\n logprobs: z.boolean().optional(),\n /**\n * Maximum number of completion tokens.\n */\n max_completion_tokens: z.number().optional(),\n /**\n * Metadata for the request.\n */\n metadata: z.record(z.string(), z.string()).optional(),\n /**\n * Modalities for the request.\n */\n modalities: z.array(z.string()).optional(),\n /**\n * Whether to allow parallel tool calls.\n */\n parallel_tool_calls: z.boolean().optional(),\n /**\n * Prediction content parameter.\n */\n prediction: z\n .object({\n type: z.string().optional(),\n content: z\n .object({\n OfString: z.string().optional(),\n OfArrayOfContentParts: z\n .array(z.object({ type: z.literal('text'), text: z.string() }))\n .optional(),\n })\n .optional(),\n })\n .optional(),\n /**\n * Reasoning effort level.\n */\n reasoning_effort: z.string().optional(),\n /**\n * Response format parameter.\n */\n response_format: z\n .object({\n OfText: z.object({ type: z.string() }).optional(),\n OfJSONObject: z.object({ type: z.string() }).optional(),\n OfJSONSchema: z\n .object({\n type: z.string(),\n json_schema: z\n .object({\n name: z.string(),\n schema: z.unknown(),\n description: z.string().optional(),\n strict: z.boolean().optional(),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n /**\n * Seed for deterministic outputs.\n */\n seed: z.number().optional(),\n /**\n * Service tier to use.\n */\n service_tier: z.string().optional(),\n /**\n * Whether to store the conversation.\n */\n store: z.boolean().optional(),\n /**\n * Number of top logprobs to return.\n */\n top_logprobs: z.number().optional(),\n /**\n * Web search options.\n */\n web_search_options: z\n .object({\n search_context_size: z.string().optional(),\n user_location: z\n .object({\n type: z.string().optional(),\n approximate: z\n .object({\n city: z.string().optional(),\n country: z.string().optional(),\n region: z.string().optional(),\n timezone: z.string().optional(),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\n/**\n * Type for validated Nordlys provider options.\n */\nexport type NordlysProviderOptions = z.infer<typeof nordlysProviderOptions>;\n\n/**\n * Settings that can be set at model creation time.\n * These settings will be merged with call-level options, with call-level taking precedence.\n */\nexport interface NordlysChatSettings {\n /**\n * Temperature setting for the model.\n */\n temperature?: number;\n /**\n * Maximum number of output tokens.\n */\n maxOutputTokens?: number;\n /**\n * Top-p sampling parameter.\n */\n topP?: number;\n /**\n * Top-k sampling parameter.\n */\n topK?: number;\n /**\n * Frequency penalty.\n */\n frequencyPenalty?: number;\n /**\n * Presence penalty.\n */\n presencePenalty?: number;\n /**\n * Stop sequences.\n */\n stopSequences?: string[];\n /**\n * Provider-specific options.\n */\n providerOptions?: NordlysProviderOptions;\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport const nordlysErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n param: z.any().nullish(),\n code: z.union([z.string(), z.number()]).nullish(),\n }),\n});\n\nexport type NordlysErrorData = z.infer<typeof nordlysErrorDataSchema>;\n\nexport const nordlysFailedResponseHandler: ReturnType<\n typeof createJsonErrorResponseHandler<NordlysErrorData>\n> = createJsonErrorResponseHandler({\n errorSchema: nordlysErrorDataSchema,\n errorToMessage: (data: NordlysErrorData) => data.error.message,\n});\n","import {\n type LanguageModelV3CallOptions,\n type SharedV3Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV3CallOptions['tools'];\n toolChoice?: LanguageModelV3CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: SharedV3Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV3Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const openaiCompatTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({ type: 'unsupported', feature: `tool: ${tool.name}` });\n } else if (tool.type === 'function') {\n openaiCompatTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: openaiCompatTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: openaiCompatTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: openaiCompatTools,\n toolChoice: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n"],"mappings":"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","names":["import_provider","import_provider_utils","import_provider","import_provider_utils","import_zod","_a","import_provider_utils","import_provider","toolCall"]}
package/dist/index.js CHANGED
@@ -20,17 +20,17 @@ import { z as z3 } from "zod";
20
20
  import { UnsupportedFunctionalityError } from "@ai-sdk/provider";
21
21
  import { convertToBase64 } from "@ai-sdk/provider-utils";
22
22
  function convertToolOutput(output) {
23
+ var _a;
23
24
  switch (output.type) {
24
25
  case "text":
25
26
  case "error-text":
26
27
  return output.value;
27
28
  case "json":
28
29
  case "error-json":
29
- return JSON.stringify(output.value);
30
30
  case "content":
31
31
  return JSON.stringify(output.value);
32
32
  case "execution-denied":
33
- return "";
33
+ return (_a = output.reason) != null ? _a : "Tool execution denied.";
34
34
  default:
35
35
  return "";
36
36
  }
@@ -39,6 +39,7 @@ function convertToNordlysChatMessages({
39
39
  prompt,
40
40
  systemMessageMode = "system"
41
41
  }) {
42
+ var _a;
42
43
  const messages = [];
43
44
  const warnings = [];
44
45
  for (const { role, content } of prompt) {
@@ -77,19 +78,23 @@ function convertToNordlysChatMessages({
77
78
  messages.push({
78
79
  role: "user",
79
80
  content: content.map((part, index) => {
80
- var _a, _b;
81
+ var _a2, _b;
81
82
  switch (part.type) {
82
83
  case "text": {
83
84
  return { type: "text", text: part.text };
84
85
  }
85
86
  case "file": {
86
- if ((_a = part.mediaType) == null ? void 0 : _a.startsWith("image/")) {
87
+ if (part.data === void 0 || part.data === null) {
88
+ throw new Error(
89
+ "File part data is required but was undefined or null"
90
+ );
91
+ }
92
+ if ((_a2 = part.mediaType) == null ? void 0 : _a2.startsWith("image/")) {
87
93
  const mediaType = part.mediaType === "image/*" ? "image/jpeg" : part.mediaType;
94
+ const url = part.data instanceof URL ? part.data.toString() : `data:${mediaType};base64,${convertToBase64(part.data)}`;
88
95
  return {
89
96
  type: "image_url",
90
- image_url: {
91
- url: part.data instanceof URL ? part.data.toString() : `data:${mediaType};base64,${convertToBase64(part.data)}`
92
- }
97
+ image_url: { url }
93
98
  };
94
99
  }
95
100
  if (part.mediaType && (part.mediaType === "audio/wav" || part.mediaType === "audio/mp3" || part.mediaType === "audio/mpeg")) {
@@ -98,10 +103,11 @@ function convertToNordlysChatMessages({
98
103
  functionality: "audio file parts with URLs"
99
104
  });
100
105
  }
106
+ const data = typeof part.data === "string" ? part.data : convertToBase64(part.data);
101
107
  return {
102
108
  type: "input_audio",
103
109
  input_audio: {
104
- data: convertToBase64(part.data),
110
+ data,
105
111
  format: part.mediaType === "audio/wav" ? "wav" : "mp3"
106
112
  }
107
113
  };
@@ -112,11 +118,12 @@ function convertToNordlysChatMessages({
112
118
  functionality: "PDF file parts with URLs"
113
119
  });
114
120
  }
121
+ const base64Data = typeof part.data === "string" ? part.data : convertToBase64(part.data);
115
122
  return {
116
123
  type: "file",
117
124
  file: {
118
125
  filename: (_b = part.filename) != null ? _b : `part-${index}.pdf`,
119
- file_data: `data:application/pdf;base64,${convertToBase64(part.data)}`
126
+ file_data: `data:application/pdf;base64,${base64Data}`
120
127
  }
121
128
  };
122
129
  }
@@ -133,14 +140,14 @@ function convertToNordlysChatMessages({
133
140
  break;
134
141
  }
135
142
  case "assistant": {
136
- const textParts = [];
143
+ let text = "";
137
144
  const reasoningParts = [];
138
145
  const generatedFiles = [];
139
146
  const toolCalls = [];
140
147
  for (const part of content) {
141
148
  switch (part.type) {
142
149
  case "text": {
143
- textParts.push(part.text);
150
+ text += part.text;
144
151
  break;
145
152
  }
146
153
  case "reasoning": {
@@ -154,7 +161,7 @@ function convertToNordlysChatMessages({
154
161
  );
155
162
  })() : Buffer.from(part.data).toString("base64");
156
163
  generatedFiles.push({
157
- media_type: part.mediaType,
164
+ media_type: (_a = part.mediaType) != null ? _a : "application/octet-stream",
158
165
  data: dataString
159
166
  });
160
167
  break;
@@ -172,7 +179,6 @@ function convertToNordlysChatMessages({
172
179
  }
173
180
  }
174
181
  }
175
- const text = textParts.join("");
176
182
  const reasoning = reasoningParts.join("");
177
183
  const message = {
178
184
  role: "assistant",
@@ -186,15 +192,16 @@ function convertToNordlysChatMessages({
186
192
  }
187
193
  case "tool": {
188
194
  for (const toolResponse of content) {
189
- if (toolResponse.type === "tool-result") {
190
- const contentValue = convertToolOutput(toolResponse.output);
191
- if (contentValue) {
192
- messages.push({
193
- role: "tool",
194
- tool_call_id: toolResponse.toolCallId,
195
- content: contentValue
196
- });
197
- }
195
+ if (toolResponse.type === "tool-approval-response") {
196
+ continue;
197
+ }
198
+ const contentValue = convertToolOutput(toolResponse.output);
199
+ if (contentValue) {
200
+ messages.push({
201
+ role: "tool",
202
+ tool_call_id: toolResponse.toolCallId,
203
+ content: contentValue
204
+ });
198
205
  }
199
206
  }
200
207
  break;
@@ -537,10 +544,10 @@ var nordlysChatChunkSchema = z3.union([
537
544
  total_tokens: z3.number(),
538
545
  reasoning_tokens: z3.number().optional(),
539
546
  cached_input_tokens: z3.number().optional()
540
- }).optional(),
547
+ }).nullish(),
541
548
  provider: z3.string().optional(),
542
549
  service_tier: z3.string().optional(),
543
- system_fingerprint: z3.string().optional()
550
+ system_fingerprint: z3.string().nullish()
544
551
  }),
545
552
  z3.object({
546
553
  error: z3.object({
@@ -1010,7 +1017,7 @@ var NordlysChatLanguageModel = class {
1010
1017
  // src/nordlys-provider.ts
1011
1018
  function createNordlys(options = {}) {
1012
1019
  var _a;
1013
- const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : "https://backend.mangoplant-a7a21605.swedencentral.azurecontainerapps.io/v1";
1020
+ const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : "https://api.nordlyslabs.com/v1";
1014
1021
  const getHeaders = () => ({
1015
1022
  Authorization: `Bearer ${loadApiKey({
1016
1023
  apiKey: options.apiKey,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/nordlys-provider.ts","../src/nordlys-chat-language-model.ts","../src/convert-to-nordlys-chat-messages.ts","../src/get-response-metadata.ts","../src/map-nordlys-finish-reason.ts","../src/nordlys-chat-options.ts","../src/nordlys-error.ts","../src/nordlys-prepare-tools.ts"],"sourcesContent":["import type {\n EmbeddingModelV3,\n LanguageModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport { NoSuchModelError } from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport { loadApiKey, withoutTrailingSlash } from '@ai-sdk/provider-utils';\nimport { NordlysChatLanguageModel } from './nordlys-chat-language-model';\nimport type { NordlysChatSettings } from './nordlys-chat-options';\n\nexport type NordlysChatModelId = string;\n\nexport interface NordlysProvider extends ProviderV3 {\n (modelId: string, settings?: NordlysChatSettings): LanguageModelV3;\n\n /**\n * Creates a model for text generation with Nordlys models.\n */\n languageModel: (\n modelId: string,\n settings?: NordlysChatSettings\n ) => LanguageModelV3;\n\n /**\n * Creates a chat model with Nordlys models.\n */\n chat: (modelId: string, settings?: NordlysChatSettings) => LanguageModelV3;\n\n /**\n * Text embedding is not currently supported by the Nordlys provider.\n */\n embeddingModel: (modelId: string) => EmbeddingModelV3;\n}\n\nexport interface NordlysProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers.\n * The default prefix is your Nordlys API endpoint.\n */\n baseURL?: string;\n\n /**\n * API key for the Nordlys service.\n * It defaults to the `NORDLYS_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n * Create a Nordlys AI provider instance.\n */\nexport function createNordlys(\n options: NordlysProviderSettings = {}\n): NordlysProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://backend.mangoplant-a7a21605.swedencentral.azurecontainerapps.io/v1';\n\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'NORDLYS_API_KEY',\n description: 'Nordlys',\n })}`,\n 'Content-Type': 'application/json',\n ...options.headers,\n });\n\n const createChatModel = (modelId: string, settings?: NordlysChatSettings) =>\n new NordlysChatLanguageModel(modelId, settings, {\n provider: 'nordlys.chat',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: string, settings?: NordlysChatSettings) {\n if (new.target) {\n throw new Error(\n 'The Nordlys model function cannot be called with the new keyword.'\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n provider.specificationVersion = 'v3' as const;\n\n return Object.freeze(provider);\n}\n\n/**\n * Default Nordlys provider instance.\n */\nexport const nordlys = createNordlys();\n","import {\n InvalidResponseDataError,\n type LanguageModelV3,\n type LanguageModelV3Content,\n type LanguageModelV3FinishReason,\n type LanguageModelV3Usage,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { convertToNordlysChatMessages } from './convert-to-nordlys-chat-messages';\nimport { getResponseMetadata } from './get-response-metadata';\nimport { mapNordlysFinishReason } from './map-nordlys-finish-reason';\nimport {\n type NordlysChatSettings,\n nordlysProviderOptions,\n} from './nordlys-chat-options';\nimport { nordlysFailedResponseHandler } from './nordlys-error';\nimport { prepareTools } from './nordlys-prepare-tools';\nimport type { NordlysChatCompletionRequest } from './nordlys-types';\n\ninterface NordlysChatConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n defaultProvider?: string;\n}\n\nconst nordlysChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z\n .array(\n z.object({\n message: z.object({\n role: z.enum(['assistant', '']).nullish(),\n content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n id: z.string().nullish(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n })\n )\n .nullish(),\n reasoning_content: z.string().optional(),\n generated_files: z\n .array(\n z.object({\n media_type: z.string(),\n data: z.string(),\n })\n )\n .optional(),\n }),\n index: z.number(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n })\n ),\n })\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n })\n )\n .optional(),\n usage: z\n .object({\n completion_tokens: z.number(),\n prompt_tokens: z.number(),\n total_tokens: z.number(),\n reasoning_tokens: z.number().optional(),\n cached_input_tokens: z.number().optional(),\n })\n .optional(),\n system_fingerprint: z.string().optional(),\n service_tier: z.string().optional(),\n provider: z.string().optional(),\n error: z\n .object({\n message: z.string(),\n type: z.string(),\n param: z.any().nullish(),\n code: z.any().nullish(),\n })\n .optional(),\n});\n\nconst nordlysChatChunkSchema = z.union([\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z\n .object({\n role: z.enum(['assistant', '']).nullish(),\n content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n type: z\n .union([z.literal('function'), z.literal('')])\n .nullish(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n })\n )\n .nullish(),\n reasoning_content: z.string().optional(),\n generated_files: z\n .array(\n z.object({\n media_type: z.string(),\n data: z.string(),\n })\n )\n .optional(),\n })\n .nullish(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n })\n ),\n })\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n index: z.number(),\n })\n ),\n usage: z\n .object({\n completion_tokens: z.number(),\n prompt_tokens: z.number(),\n total_tokens: z.number(),\n reasoning_tokens: z.number().optional(),\n cached_input_tokens: z.number().optional(),\n })\n .optional(),\n provider: z.string().optional(),\n service_tier: z.string().optional(),\n system_fingerprint: z.string().optional(),\n }),\n z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n param: z.any().nullish(),\n code: z.any().nullish(),\n }),\n provider: z.string().optional(),\n }),\n]);\n\nexport class NordlysChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n readonly modelId: string;\n private readonly config: NordlysChatConfig;\n private readonly settings?: NordlysChatSettings;\n\n constructor(\n modelId: string,\n settings: NordlysChatSettings | undefined,\n config: NordlysChatConfig\n ) {\n this.modelId = modelId;\n this.config = config;\n this.settings = settings;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'application/pdf': [/^https:\\/\\/.*$/],\n };\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n providerOptions,\n tools,\n toolChoice,\n }: Parameters<LanguageModelV3['doGenerate']>[0]) {\n const warnings: SharedV3Warning[] = [];\n\n // Merge model-level settings with call-level options (call-level takes precedence)\n const mergedMaxOutputTokens =\n maxOutputTokens ?? this.settings?.maxOutputTokens;\n const mergedTemperature = temperature ?? this.settings?.temperature;\n const mergedTopP = topP ?? this.settings?.topP;\n const mergedTopK = topK ?? this.settings?.topK;\n const mergedFrequencyPenalty =\n frequencyPenalty ?? this.settings?.frequencyPenalty;\n const mergedPresencePenalty =\n presencePenalty ?? this.settings?.presencePenalty;\n const mergedStopSequences = stopSequences ?? this.settings?.stopSequences;\n const mergedProviderOptions = {\n ...this.settings?.providerOptions,\n ...providerOptions,\n };\n\n // Warn for unsupported settings\n if (mergedTopK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n if (responseFormat != null) {\n warnings.push({ type: 'unsupported', feature: 'responseFormat' });\n }\n\n // Parse provider options with zod schema (flat, not nested)\n const result = nordlysProviderOptions.safeParse(\n mergedProviderOptions ?? {}\n );\n const nordlysOptions = result.success ? result.data : {};\n\n // Use modelId from constructor (model is set when creating the model instance)\n\n const {\n tools: nordlysTools,\n toolChoice: nordlysToolChoice,\n toolWarnings,\n } = prepareTools({\n tools,\n toolChoice,\n });\n warnings.push(...toolWarnings);\n\n // Convert messages\n const { messages, warnings: messageWarnings } =\n convertToNordlysChatMessages({ prompt });\n warnings.push(...messageWarnings);\n\n // Standardized settings\n const standardizedArgs = {\n messages,\n model: this.modelId,\n max_tokens:\n typeof mergedMaxOutputTokens === 'number'\n ? mergedMaxOutputTokens\n : undefined,\n max_completion_tokens: nordlysOptions.max_completion_tokens,\n temperature: mergedTemperature,\n top_p: mergedTopP,\n stop: mergedStopSequences,\n presence_penalty: mergedPresencePenalty,\n frequency_penalty: mergedFrequencyPenalty,\n user: nordlysOptions.user,\n tools: nordlysTools,\n tool_choice: nordlysToolChoice,\n };\n\n // Map new provider option fields\n const args: NordlysChatCompletionRequest = {\n ...standardizedArgs,\n ...(nordlysOptions.logit_bias\n ? { logit_bias: nordlysOptions.logit_bias }\n : {}),\n ...(nordlysOptions.audio ? { audio: nordlysOptions.audio } : {}),\n ...(nordlysOptions.logprobs !== undefined\n ? { logprobs: nordlysOptions.logprobs }\n : {}),\n ...(nordlysOptions.metadata ? { metadata: nordlysOptions.metadata } : {}),\n ...(nordlysOptions.modalities\n ? { modalities: nordlysOptions.modalities }\n : {}),\n ...(nordlysOptions.parallel_tool_calls !== undefined\n ? { parallel_tool_calls: nordlysOptions.parallel_tool_calls }\n : {}),\n ...(nordlysOptions.prediction\n ? { prediction: nordlysOptions.prediction }\n : {}),\n ...(nordlysOptions.reasoning_effort\n ? { reasoning_effort: nordlysOptions.reasoning_effort }\n : {}),\n ...(nordlysOptions.response_format\n ? { response_format: nordlysOptions.response_format }\n : {}),\n ...(nordlysOptions.seed !== undefined\n ? { seed: nordlysOptions.seed }\n : {}),\n ...(nordlysOptions.service_tier\n ? { service_tier: nordlysOptions.service_tier }\n : {}),\n ...(nordlysOptions.store !== undefined\n ? { store: nordlysOptions.store }\n : {}),\n ...(nordlysOptions.top_logprobs !== undefined\n ? { top_logprobs: nordlysOptions.top_logprobs }\n : {}),\n ...(nordlysOptions.web_search_options\n ? { web_search_options: nordlysOptions.web_search_options }\n : {}),\n };\n\n return {\n args,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV3['doGenerate']>[0]\n ): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>> {\n const { args: body, warnings } = await this.getArgs(options);\n\n const { responseHeaders, value, rawValue } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: nordlysFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n nordlysChatResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n if (!value) {\n throw new Error('Failed to parse Nordlys API response');\n }\n\n // Handle error responses\n if (value.error) {\n throw new Error(`Nordlys API Error: ${value.error.message}`);\n }\n\n if (!value.choices || value.choices.length === 0) {\n throw new Error('No choices returned from Nordlys API');\n }\n\n const choice = value.choices[0];\n const content: Array<LanguageModelV3Content> = [];\n\n if (choice.message?.content) {\n content.push({ type: 'text', text: choice.message.content });\n }\n\n if (choice.message?.reasoning_content) {\n content.push({\n type: 'reasoning',\n text: choice.message.reasoning_content,\n });\n }\n\n if (\n choice.message?.generated_files &&\n choice.message.generated_files.length > 0\n ) {\n for (const file of choice.message.generated_files) {\n content.push({\n type: 'file',\n mediaType: file.media_type,\n data: file.data,\n });\n }\n }\n\n if (choice.message?.tool_calls && choice.message.tool_calls.length > 0) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id || '',\n toolName: toolCall.function?.name || '',\n input: toolCall.function?.arguments || '{}',\n });\n }\n }\n\n // Extract usage information\n const {\n prompt_tokens,\n completion_tokens,\n reasoning_tokens,\n cached_input_tokens,\n } = value.usage ?? {};\n\n return {\n content,\n finishReason: choice.finish_reason\n ? mapNordlysFinishReason(choice.finish_reason)\n : { unified: 'stop', raw: undefined },\n usage:\n value.usage && prompt_tokens != null\n ? {\n inputTokens: {\n total: prompt_tokens,\n noCache:\n cached_input_tokens != null\n ? prompt_tokens - cached_input_tokens\n : undefined,\n cacheRead: cached_input_tokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completion_tokens,\n text:\n completion_tokens != null && reasoning_tokens != null\n ? completion_tokens - reasoning_tokens\n : undefined,\n reasoning: reasoning_tokens,\n },\n }\n : {\n inputTokens: {\n total: 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: { total: 0, text: undefined, reasoning: undefined },\n },\n providerMetadata: value.provider\n ? {\n nordlys: {\n provider: value.provider,\n service_tier: value.service_tier,\n system_fingerprint: value.system_fingerprint,\n },\n }\n : undefined,\n request: { body },\n response: {\n id: value.id ?? '',\n modelId: value.model ?? '',\n timestamp: new Date((value.created ?? 0) * 1000),\n headers: responseHeaders,\n body: rawValue,\n },\n warnings,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV3['doStream']>[0]\n ): Promise<Awaited<ReturnType<LanguageModelV3['doStream']>>> {\n const { args, warnings } = await this.getArgs(options);\n const body = {\n ...args,\n stream: true,\n stream_options: { include_usage: true },\n };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: nordlysFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n nordlysChatChunkSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n hasFinished: boolean;\n }> = [];\n\n const state: {\n finishReason: LanguageModelV3FinishReason;\n usage: LanguageModelV3Usage;\n isFirstChunk: boolean;\n isActiveText: boolean;\n provider: string | undefined;\n serviceTier: string | undefined;\n systemFingerprint: string | undefined;\n } = {\n finishReason: { unified: 'other', raw: undefined },\n usage: {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n },\n isFirstChunk: true,\n isActiveText: false,\n provider: undefined,\n serviceTier: undefined,\n systemFingerprint: undefined,\n };\n\n return {\n stream: response.pipeThrough(\n new TransformStream({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n async transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n state.finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n // Handle error responses\n if ('error' in value) {\n state.finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({\n type: 'error',\n error: new Error(value.error.message),\n });\n return;\n }\n\n if (state.isFirstChunk) {\n state.isFirstChunk = false;\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata({\n id: value.id ?? '',\n model: value.model ?? '',\n created: value.created ?? 0,\n }),\n });\n }\n\n if (value.usage != null) {\n state.usage.inputTokens.total =\n value.usage.prompt_tokens ?? undefined;\n state.usage.inputTokens.cacheRead =\n value.usage.cached_input_tokens ?? undefined;\n state.usage.inputTokens.noCache =\n value.usage.prompt_tokens != null &&\n value.usage.cached_input_tokens != null\n ? value.usage.prompt_tokens - value.usage.cached_input_tokens\n : undefined;\n state.usage.outputTokens.total =\n value.usage.completion_tokens ?? undefined;\n state.usage.outputTokens.reasoning =\n value.usage.reasoning_tokens ?? undefined;\n state.usage.outputTokens.text =\n value.usage.completion_tokens != null &&\n value.usage.reasoning_tokens != null\n ? value.usage.completion_tokens - value.usage.reasoning_tokens\n : undefined;\n }\n\n if (value.provider) {\n state.provider = value.provider;\n }\n\n if (value.service_tier) {\n state.serviceTier = value.service_tier;\n }\n\n if (value.system_fingerprint) {\n state.systemFingerprint = value.system_fingerprint;\n }\n\n const choice = value.choices[0];\n if (choice?.finish_reason != null) {\n state.finishReason = mapNordlysFinishReason(choice.finish_reason);\n }\n\n if (!choice?.delta) {\n return;\n }\n\n const delta = choice.delta;\n\n if (delta.content != null) {\n if (!state.isActiveText) {\n controller.enqueue({ type: 'text-start', id: 'text-1' });\n state.isActiveText = true;\n }\n controller.enqueue({\n type: 'text-delta',\n id: 'text-1',\n delta: delta.content,\n });\n }\n\n if (delta.reasoning_content != null) {\n controller.enqueue({\n type: 'reasoning-delta',\n id: 'reasoning-1',\n delta: delta.reasoning_content,\n });\n }\n\n if (\n delta.generated_files != null &&\n Array.isArray(delta.generated_files)\n ) {\n for (const file of delta.generated_files) {\n controller.enqueue({\n type: 'file',\n mediaType: file.media_type,\n data: file.data,\n });\n }\n }\n\n if (delta.tool_calls != null && Array.isArray(delta.tool_calls)) {\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index;\n\n // Tool call start. Nordlys returns all information except the arguments in the first chunk.\n if (toolCalls[index] == null) {\n if (\n toolCallDelta.type !== 'function' &&\n toolCallDelta.type !== ''\n ) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name,\n });\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null\n ) {\n // send delta if the argument text has already started:\n if (toolCall.function.arguments.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\n });\n }\n\n // check if tool call is complete\n // (some providers send the full tool call in one chunk):\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n\n continue;\n }\n\n // existing tool call, merge if not finished\n const toolCall = toolCalls[index];\n\n if (toolCall.hasFinished) {\n continue;\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function.arguments +=\n toolCallDelta.function?.arguments ?? '';\n }\n\n // send delta\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCallDelta.function.arguments ?? '',\n });\n\n // check if tool call is complete\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n }\n },\n flush(controller) {\n if (state.isActiveText) {\n controller.enqueue({ type: 'text-end', id: 'text-1' });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason: state.finishReason ?? {\n unified: 'stop',\n raw: undefined,\n },\n usage: state.usage ?? {\n inputTokens: {\n total: 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n providerMetadata:\n state.provider || state.serviceTier || state.systemFingerprint\n ? {\n nordlys: {\n provider: state.provider,\n service_tier: state.serviceTier,\n system_fingerprint: state.systemFingerprint,\n },\n }\n : undefined,\n });\n },\n })\n ),\n request: { body },\n response: {\n headers: responseHeaders,\n },\n };\n }\n}\n","// Converts generic chat messages to Nordlys API format\nimport type {\n LanguageModelV3Prompt,\n LanguageModelV3ToolResultPart,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport { UnsupportedFunctionalityError } from '@ai-sdk/provider';\nimport { convertToBase64 } from '@ai-sdk/provider-utils';\nimport type { NordlysChatCompletionMessage } from './nordlys-types';\n\nfunction convertToolOutput(\n output: LanguageModelV3ToolResultPart['output']\n): string {\n switch (output.type) {\n case 'text':\n case 'error-text':\n return output.value;\n case 'json':\n case 'error-json':\n return JSON.stringify(output.value);\n case 'content':\n return JSON.stringify(output.value);\n case 'execution-denied':\n return '';\n default:\n return '';\n }\n}\n\nexport function convertToNordlysChatMessages({\n prompt,\n systemMessageMode = 'system',\n}: {\n prompt: LanguageModelV3Prompt;\n systemMessageMode?: 'system' | 'developer' | 'remove';\n}): {\n messages: NordlysChatCompletionMessage[];\n warnings: Array<SharedV3Warning>;\n} {\n const messages: NordlysChatCompletionMessage[] = [];\n const warnings: Array<SharedV3Warning> = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n switch (systemMessageMode) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n case 'developer': {\n messages.push({ role: 'developer', content });\n break;\n }\n case 'remove': {\n warnings.push({\n type: 'other',\n message: 'system messages are removed for this model',\n });\n break;\n }\n default: {\n const _exhaustiveCheck: never = systemMessageMode;\n throw new Error(\n `Unsupported system message mode: ${_exhaustiveCheck}`\n );\n }\n }\n break;\n }\n case 'user': {\n if (content.length === 1 && content[0].type === 'text') {\n messages.push({ role: 'user', content: content[0].text });\n break;\n }\n messages.push({\n role: 'user',\n content: content.map((part, index) => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n case 'file': {\n if (part.mediaType?.startsWith('image/')) {\n const mediaType =\n part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n return {\n type: 'image_url',\n image_url: {\n url:\n part.data instanceof URL\n ? part.data.toString()\n : `data:${mediaType};base64,${convertToBase64(part.data)}`,\n },\n };\n }\n if (\n part.mediaType &&\n (part.mediaType === 'audio/wav' ||\n part.mediaType === 'audio/mp3' ||\n part.mediaType === 'audio/mpeg')\n ) {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'audio file parts with URLs',\n });\n }\n return {\n type: 'input_audio',\n input_audio: {\n data: convertToBase64(part.data),\n format: part.mediaType === 'audio/wav' ? 'wav' : 'mp3',\n },\n };\n }\n if (part.mediaType && part.mediaType === 'application/pdf') {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'PDF file parts with URLs',\n });\n }\n return {\n type: 'file',\n file: {\n filename: part.filename ?? `part-${index}.pdf`,\n file_data: `data:application/pdf;base64,${convertToBase64(part.data)}`,\n },\n };\n }\n throw new UnsupportedFunctionalityError({\n functionality: `file part media type ${part.mediaType}`,\n });\n }\n default: {\n throw new Error(`Unsupported content part type`);\n }\n }\n }),\n });\n break;\n }\n case 'assistant': {\n const textParts: string[] = [];\n const reasoningParts: string[] = [];\n const generatedFiles: Array<{ media_type: string; data: string }> = [];\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n textParts.push(part.text);\n break;\n }\n case 'reasoning': {\n reasoningParts.push(part.text);\n break;\n }\n case 'file': {\n const dataString =\n typeof part.data === 'string'\n ? part.data\n : part.data instanceof URL\n ? (() => {\n throw new Error(\n 'URL data not supported for generated files'\n );\n })()\n : Buffer.from(part.data).toString('base64');\n\n generatedFiles.push({\n media_type: part.mediaType,\n data: dataString,\n });\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n }\n }\n\n const text = textParts.join('');\n const reasoning = reasoningParts.join('');\n\n const message: NordlysChatCompletionMessage = {\n role: 'assistant',\n content: text,\n ...(toolCalls.length > 0 && { tool_calls: toolCalls }),\n ...(reasoning && { reasoning_content: reasoning }),\n ...(generatedFiles.length > 0 && { generated_files: generatedFiles }),\n };\n\n messages.push(message);\n break;\n }\n case 'tool': {\n for (const toolResponse of content) {\n if (toolResponse.type === 'tool-result') {\n const contentValue = convertToolOutput(toolResponse.output);\n if (contentValue) {\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: contentValue,\n });\n }\n }\n }\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return { messages, warnings };\n}\n","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\n}\n","import type { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapNordlysFinishReason(\n reason?: string\n): LanguageModelV3FinishReason {\n switch (reason) {\n case 'stop':\n return { unified: 'stop', raw: reason };\n case 'length':\n return { unified: 'length', raw: reason };\n case 'content_filter':\n return { unified: 'content-filter', raw: reason };\n case 'tool_calls':\n return { unified: 'tool-calls', raw: reason };\n default:\n return { unified: 'other', raw: reason };\n }\n}\n","// Nordlys chat model options/types\n\nimport { z } from 'zod/v4';\n\n/**\n * Provider options for Nordlys chat models.\n */\nexport const nordlysProviderOptions = z.object({\n /**\n * Model name (required for API requests).\n */\n model: z.string().optional(),\n /**\n * Modify the likelihood of specified tokens appearing in the completion.\n */\n logit_bias: z.record(z.string(), z.number()).optional(),\n /**\n * Number of completions to generate for each prompt.\n */\n n: z.number().optional(),\n /**\n * Whether to stream responses.\n */\n stream: z.boolean().optional(),\n /**\n * Unique identifier representing your end-user.\n */\n user: z.string().optional(),\n /**\n * Audio parameter for chat completion.\n */\n audio: z\n .object({\n format: z.string().optional(),\n voice: z.string().optional(),\n })\n .optional(),\n /**\n * Whether to return log probabilities of the output tokens.\n */\n logprobs: z.boolean().optional(),\n /**\n * Maximum number of completion tokens.\n */\n max_completion_tokens: z.number().optional(),\n /**\n * Metadata for the request.\n */\n metadata: z.record(z.string(), z.string()).optional(),\n /**\n * Modalities for the request.\n */\n modalities: z.array(z.string()).optional(),\n /**\n * Whether to allow parallel tool calls.\n */\n parallel_tool_calls: z.boolean().optional(),\n /**\n * Prediction content parameter.\n */\n prediction: z\n .object({\n type: z.string().optional(),\n content: z\n .object({\n OfString: z.string().optional(),\n OfArrayOfContentParts: z\n .array(z.object({ type: z.literal('text'), text: z.string() }))\n .optional(),\n })\n .optional(),\n })\n .optional(),\n /**\n * Reasoning effort level.\n */\n reasoning_effort: z.string().optional(),\n /**\n * Response format parameter.\n */\n response_format: z\n .object({\n OfText: z.object({ type: z.string() }).optional(),\n OfJSONObject: z.object({ type: z.string() }).optional(),\n OfJSONSchema: z\n .object({\n type: z.string(),\n json_schema: z\n .object({\n name: z.string(),\n schema: z.unknown(),\n description: z.string().optional(),\n strict: z.boolean().optional(),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n /**\n * Seed for deterministic outputs.\n */\n seed: z.number().optional(),\n /**\n * Service tier to use.\n */\n service_tier: z.string().optional(),\n /**\n * Whether to store the conversation.\n */\n store: z.boolean().optional(),\n /**\n * Number of top logprobs to return.\n */\n top_logprobs: z.number().optional(),\n /**\n * Web search options.\n */\n web_search_options: z\n .object({\n search_context_size: z.string().optional(),\n user_location: z\n .object({\n type: z.string().optional(),\n approximate: z\n .object({\n city: z.string().optional(),\n country: z.string().optional(),\n region: z.string().optional(),\n timezone: z.string().optional(),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\n/**\n * Type for validated Nordlys provider options.\n */\nexport type NordlysProviderOptions = z.infer<typeof nordlysProviderOptions>;\n\n/**\n * Settings that can be set at model creation time.\n * These settings will be merged with call-level options, with call-level taking precedence.\n */\nexport interface NordlysChatSettings {\n /**\n * Temperature setting for the model.\n */\n temperature?: number;\n /**\n * Maximum number of output tokens.\n */\n maxOutputTokens?: number;\n /**\n * Top-p sampling parameter.\n */\n topP?: number;\n /**\n * Top-k sampling parameter.\n */\n topK?: number;\n /**\n * Frequency penalty.\n */\n frequencyPenalty?: number;\n /**\n * Presence penalty.\n */\n presencePenalty?: number;\n /**\n * Stop sequences.\n */\n stopSequences?: string[];\n /**\n * Provider-specific options.\n */\n providerOptions?: NordlysProviderOptions;\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport const nordlysErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n param: z.any().nullish(),\n code: z.union([z.string(), z.number()]).nullish(),\n }),\n});\n\nexport type NordlysErrorData = z.infer<typeof nordlysErrorDataSchema>;\n\nexport const nordlysFailedResponseHandler: ReturnType<\n typeof createJsonErrorResponseHandler<NordlysErrorData>\n> = createJsonErrorResponseHandler({\n errorSchema: nordlysErrorDataSchema,\n errorToMessage: (data: NordlysErrorData) => data.error.message,\n});\n","import {\n type LanguageModelV3CallOptions,\n type SharedV3Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV3CallOptions['tools'];\n toolChoice?: LanguageModelV3CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: SharedV3Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV3Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const openaiCompatTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({ type: 'unsupported', feature: `tool: ${tool.name}` });\n } else if (tool.type === 'function') {\n openaiCompatTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: openaiCompatTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: openaiCompatTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: openaiCompatTools,\n toolChoice: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n"],"mappings":"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","names":["z","z","UnsupportedFunctionalityError","z","toolCall"]}
1
+ {"version":3,"sources":["../src/nordlys-provider.ts","../src/nordlys-chat-language-model.ts","../src/convert-to-nordlys-chat-messages.ts","../src/get-response-metadata.ts","../src/map-nordlys-finish-reason.ts","../src/nordlys-chat-options.ts","../src/nordlys-error.ts","../src/nordlys-prepare-tools.ts"],"sourcesContent":["import type {\n EmbeddingModelV3,\n LanguageModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport { NoSuchModelError } from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport { loadApiKey, withoutTrailingSlash } from '@ai-sdk/provider-utils';\nimport { NordlysChatLanguageModel } from './nordlys-chat-language-model';\nimport type { NordlysChatSettings } from './nordlys-chat-options';\n\nexport type NordlysChatModelId = string;\n\nexport interface NordlysProvider extends ProviderV3 {\n (modelId: string, settings?: NordlysChatSettings): LanguageModelV3;\n\n /**\n * Creates a model for text generation with Nordlys models.\n */\n languageModel: (\n modelId: string,\n settings?: NordlysChatSettings\n ) => LanguageModelV3;\n\n /**\n * Creates a chat model with Nordlys models.\n */\n chat: (modelId: string, settings?: NordlysChatSettings) => LanguageModelV3;\n\n /**\n * Text embedding is not currently supported by the Nordlys provider.\n */\n embeddingModel: (modelId: string) => EmbeddingModelV3;\n}\n\nexport interface NordlysProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers.\n * The default prefix is your Nordlys API endpoint.\n */\n baseURL?: string;\n\n /**\n * API key for the Nordlys service.\n * It defaults to the `NORDLYS_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n * Create a Nordlys AI provider instance.\n */\nexport function createNordlys(\n options: NordlysProviderSettings = {}\n): NordlysProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? 'https://api.nordlyslabs.com/v1';\n\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'NORDLYS_API_KEY',\n description: 'Nordlys',\n })}`,\n 'Content-Type': 'application/json',\n ...options.headers,\n });\n\n const createChatModel = (modelId: string, settings?: NordlysChatSettings) =>\n new NordlysChatLanguageModel(modelId, settings, {\n provider: 'nordlys.chat',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: string, settings?: NordlysChatSettings) {\n if (new.target) {\n throw new Error(\n 'The Nordlys model function cannot be called with the new keyword.'\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n provider.specificationVersion = 'v3' as const;\n\n return Object.freeze(provider);\n}\n\n/**\n * Default Nordlys provider instance.\n */\nexport const nordlys = createNordlys();\n","import {\n InvalidResponseDataError,\n type LanguageModelV3,\n type LanguageModelV3Content,\n type LanguageModelV3FinishReason,\n type LanguageModelV3Usage,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { convertToNordlysChatMessages } from './convert-to-nordlys-chat-messages';\nimport { getResponseMetadata } from './get-response-metadata';\nimport { mapNordlysFinishReason } from './map-nordlys-finish-reason';\nimport {\n type NordlysChatSettings,\n nordlysProviderOptions,\n} from './nordlys-chat-options';\nimport { nordlysFailedResponseHandler } from './nordlys-error';\nimport { prepareTools } from './nordlys-prepare-tools';\nimport type { NordlysChatCompletionRequest } from './nordlys-types';\n\ninterface NordlysChatConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n defaultProvider?: string;\n}\n\nconst nordlysChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z\n .array(\n z.object({\n message: z.object({\n role: z.enum(['assistant', '']).nullish(),\n content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n id: z.string().nullish(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n })\n )\n .nullish(),\n reasoning_content: z.string().optional(),\n generated_files: z\n .array(\n z.object({\n media_type: z.string(),\n data: z.string(),\n })\n )\n .optional(),\n }),\n index: z.number(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n })\n ),\n })\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n })\n )\n .optional(),\n usage: z\n .object({\n completion_tokens: z.number(),\n prompt_tokens: z.number(),\n total_tokens: z.number(),\n reasoning_tokens: z.number().optional(),\n cached_input_tokens: z.number().optional(),\n })\n .optional(),\n system_fingerprint: z.string().optional(),\n service_tier: z.string().optional(),\n provider: z.string().optional(),\n error: z\n .object({\n message: z.string(),\n type: z.string(),\n param: z.any().nullish(),\n code: z.any().nullish(),\n })\n .optional(),\n});\n\nconst nordlysChatChunkSchema = z.union([\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z\n .object({\n role: z.enum(['assistant', '']).nullish(),\n content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n type: z\n .union([z.literal('function'), z.literal('')])\n .nullish(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n })\n )\n .nullish(),\n reasoning_content: z.string().optional(),\n generated_files: z\n .array(\n z.object({\n media_type: z.string(),\n data: z.string(),\n })\n )\n .optional(),\n })\n .nullish(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n })\n ),\n })\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n index: z.number(),\n })\n ),\n usage: z\n .object({\n completion_tokens: z.number(),\n prompt_tokens: z.number(),\n total_tokens: z.number(),\n reasoning_tokens: z.number().optional(),\n cached_input_tokens: z.number().optional(),\n })\n .nullish(),\n provider: z.string().optional(),\n service_tier: z.string().optional(),\n system_fingerprint: z.string().nullish(),\n }),\n z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n param: z.any().nullish(),\n code: z.any().nullish(),\n }),\n provider: z.string().optional(),\n }),\n]);\n\nexport class NordlysChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n readonly modelId: string;\n private readonly config: NordlysChatConfig;\n private readonly settings?: NordlysChatSettings;\n\n constructor(\n modelId: string,\n settings: NordlysChatSettings | undefined,\n config: NordlysChatConfig\n ) {\n this.modelId = modelId;\n this.config = config;\n this.settings = settings;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'application/pdf': [/^https:\\/\\/.*$/],\n };\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n providerOptions,\n tools,\n toolChoice,\n }: Parameters<LanguageModelV3['doGenerate']>[0]) {\n const warnings: SharedV3Warning[] = [];\n\n // Merge model-level settings with call-level options (call-level takes precedence)\n const mergedMaxOutputTokens =\n maxOutputTokens ?? this.settings?.maxOutputTokens;\n const mergedTemperature = temperature ?? this.settings?.temperature;\n const mergedTopP = topP ?? this.settings?.topP;\n const mergedTopK = topK ?? this.settings?.topK;\n const mergedFrequencyPenalty =\n frequencyPenalty ?? this.settings?.frequencyPenalty;\n const mergedPresencePenalty =\n presencePenalty ?? this.settings?.presencePenalty;\n const mergedStopSequences = stopSequences ?? this.settings?.stopSequences;\n const mergedProviderOptions = {\n ...this.settings?.providerOptions,\n ...providerOptions,\n };\n\n // Warn for unsupported settings\n if (mergedTopK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n if (responseFormat != null) {\n warnings.push({ type: 'unsupported', feature: 'responseFormat' });\n }\n\n // Parse provider options with zod schema (flat, not nested)\n const result = nordlysProviderOptions.safeParse(\n mergedProviderOptions ?? {}\n );\n const nordlysOptions = result.success ? result.data : {};\n\n // Use modelId from constructor (model is set when creating the model instance)\n\n const {\n tools: nordlysTools,\n toolChoice: nordlysToolChoice,\n toolWarnings,\n } = prepareTools({\n tools,\n toolChoice,\n });\n warnings.push(...toolWarnings);\n\n // Convert messages\n const { messages, warnings: messageWarnings } =\n convertToNordlysChatMessages({ prompt });\n warnings.push(...messageWarnings);\n\n // Standardized settings\n const standardizedArgs = {\n messages,\n model: this.modelId,\n max_tokens:\n typeof mergedMaxOutputTokens === 'number'\n ? mergedMaxOutputTokens\n : undefined,\n max_completion_tokens: nordlysOptions.max_completion_tokens,\n temperature: mergedTemperature,\n top_p: mergedTopP,\n stop: mergedStopSequences,\n presence_penalty: mergedPresencePenalty,\n frequency_penalty: mergedFrequencyPenalty,\n user: nordlysOptions.user,\n tools: nordlysTools,\n tool_choice: nordlysToolChoice,\n };\n\n // Map new provider option fields\n const args: NordlysChatCompletionRequest = {\n ...standardizedArgs,\n ...(nordlysOptions.logit_bias\n ? { logit_bias: nordlysOptions.logit_bias }\n : {}),\n ...(nordlysOptions.audio ? { audio: nordlysOptions.audio } : {}),\n ...(nordlysOptions.logprobs !== undefined\n ? { logprobs: nordlysOptions.logprobs }\n : {}),\n ...(nordlysOptions.metadata ? { metadata: nordlysOptions.metadata } : {}),\n ...(nordlysOptions.modalities\n ? { modalities: nordlysOptions.modalities }\n : {}),\n ...(nordlysOptions.parallel_tool_calls !== undefined\n ? { parallel_tool_calls: nordlysOptions.parallel_tool_calls }\n : {}),\n ...(nordlysOptions.prediction\n ? { prediction: nordlysOptions.prediction }\n : {}),\n ...(nordlysOptions.reasoning_effort\n ? { reasoning_effort: nordlysOptions.reasoning_effort }\n : {}),\n ...(nordlysOptions.response_format\n ? { response_format: nordlysOptions.response_format }\n : {}),\n ...(nordlysOptions.seed !== undefined\n ? { seed: nordlysOptions.seed }\n : {}),\n ...(nordlysOptions.service_tier\n ? { service_tier: nordlysOptions.service_tier }\n : {}),\n ...(nordlysOptions.store !== undefined\n ? { store: nordlysOptions.store }\n : {}),\n ...(nordlysOptions.top_logprobs !== undefined\n ? { top_logprobs: nordlysOptions.top_logprobs }\n : {}),\n ...(nordlysOptions.web_search_options\n ? { web_search_options: nordlysOptions.web_search_options }\n : {}),\n };\n\n return {\n args,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV3['doGenerate']>[0]\n ): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>> {\n const { args: body, warnings } = await this.getArgs(options);\n\n const { responseHeaders, value, rawValue } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: nordlysFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n nordlysChatResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n if (!value) {\n throw new Error('Failed to parse Nordlys API response');\n }\n\n // Handle error responses\n if (value.error) {\n throw new Error(`Nordlys API Error: ${value.error.message}`);\n }\n\n if (!value.choices || value.choices.length === 0) {\n throw new Error('No choices returned from Nordlys API');\n }\n\n const choice = value.choices[0];\n const content: Array<LanguageModelV3Content> = [];\n\n if (choice.message?.content) {\n content.push({ type: 'text', text: choice.message.content });\n }\n\n if (choice.message?.reasoning_content) {\n content.push({\n type: 'reasoning',\n text: choice.message.reasoning_content,\n });\n }\n\n if (\n choice.message?.generated_files &&\n choice.message.generated_files.length > 0\n ) {\n for (const file of choice.message.generated_files) {\n content.push({\n type: 'file',\n mediaType: file.media_type,\n data: file.data,\n });\n }\n }\n\n if (choice.message?.tool_calls && choice.message.tool_calls.length > 0) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id || '',\n toolName: toolCall.function?.name || '',\n input: toolCall.function?.arguments || '{}',\n });\n }\n }\n\n // Extract usage information\n const {\n prompt_tokens,\n completion_tokens,\n reasoning_tokens,\n cached_input_tokens,\n } = value.usage ?? {};\n\n return {\n content,\n finishReason: choice.finish_reason\n ? mapNordlysFinishReason(choice.finish_reason)\n : { unified: 'stop', raw: undefined },\n usage:\n value.usage && prompt_tokens != null\n ? {\n inputTokens: {\n total: prompt_tokens,\n noCache:\n cached_input_tokens != null\n ? prompt_tokens - cached_input_tokens\n : undefined,\n cacheRead: cached_input_tokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completion_tokens,\n text:\n completion_tokens != null && reasoning_tokens != null\n ? completion_tokens - reasoning_tokens\n : undefined,\n reasoning: reasoning_tokens,\n },\n }\n : {\n inputTokens: {\n total: 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: { total: 0, text: undefined, reasoning: undefined },\n },\n providerMetadata: value.provider\n ? {\n nordlys: {\n provider: value.provider,\n service_tier: value.service_tier,\n system_fingerprint: value.system_fingerprint,\n },\n }\n : undefined,\n request: { body },\n response: {\n id: value.id ?? '',\n modelId: value.model ?? '',\n timestamp: new Date((value.created ?? 0) * 1000),\n headers: responseHeaders,\n body: rawValue,\n },\n warnings,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV3['doStream']>[0]\n ): Promise<Awaited<ReturnType<LanguageModelV3['doStream']>>> {\n const { args, warnings } = await this.getArgs(options);\n const body = {\n ...args,\n stream: true,\n stream_options: { include_usage: true },\n };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: nordlysFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n nordlysChatChunkSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n hasFinished: boolean;\n }> = [];\n\n const state: {\n finishReason: LanguageModelV3FinishReason;\n usage: LanguageModelV3Usage;\n isFirstChunk: boolean;\n isActiveText: boolean;\n provider: string | undefined;\n serviceTier: string | undefined;\n systemFingerprint: string | undefined;\n } = {\n finishReason: { unified: 'other', raw: undefined },\n usage: {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n },\n isFirstChunk: true,\n isActiveText: false,\n provider: undefined,\n serviceTier: undefined,\n systemFingerprint: undefined,\n };\n\n return {\n stream: response.pipeThrough(\n new TransformStream({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n async transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n state.finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n // Handle error responses\n if ('error' in value) {\n state.finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({\n type: 'error',\n error: new Error(value.error.message),\n });\n return;\n }\n\n if (state.isFirstChunk) {\n state.isFirstChunk = false;\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata({\n id: value.id ?? '',\n model: value.model ?? '',\n created: value.created ?? 0,\n }),\n });\n }\n\n if (value.usage != null) {\n state.usage.inputTokens.total =\n value.usage.prompt_tokens ?? undefined;\n state.usage.inputTokens.cacheRead =\n value.usage.cached_input_tokens ?? undefined;\n state.usage.inputTokens.noCache =\n value.usage.prompt_tokens != null &&\n value.usage.cached_input_tokens != null\n ? value.usage.prompt_tokens - value.usage.cached_input_tokens\n : undefined;\n state.usage.outputTokens.total =\n value.usage.completion_tokens ?? undefined;\n state.usage.outputTokens.reasoning =\n value.usage.reasoning_tokens ?? undefined;\n state.usage.outputTokens.text =\n value.usage.completion_tokens != null &&\n value.usage.reasoning_tokens != null\n ? value.usage.completion_tokens - value.usage.reasoning_tokens\n : undefined;\n }\n\n if (value.provider) {\n state.provider = value.provider;\n }\n\n if (value.service_tier) {\n state.serviceTier = value.service_tier;\n }\n\n if (value.system_fingerprint) {\n state.systemFingerprint = value.system_fingerprint;\n }\n\n const choice = value.choices[0];\n if (choice?.finish_reason != null) {\n state.finishReason = mapNordlysFinishReason(choice.finish_reason);\n }\n\n if (!choice?.delta) {\n return;\n }\n\n const delta = choice.delta;\n\n if (delta.content != null) {\n if (!state.isActiveText) {\n controller.enqueue({ type: 'text-start', id: 'text-1' });\n state.isActiveText = true;\n }\n controller.enqueue({\n type: 'text-delta',\n id: 'text-1',\n delta: delta.content,\n });\n }\n\n if (delta.reasoning_content != null) {\n controller.enqueue({\n type: 'reasoning-delta',\n id: 'reasoning-1',\n delta: delta.reasoning_content,\n });\n }\n\n if (\n delta.generated_files != null &&\n Array.isArray(delta.generated_files)\n ) {\n for (const file of delta.generated_files) {\n controller.enqueue({\n type: 'file',\n mediaType: file.media_type,\n data: file.data,\n });\n }\n }\n\n if (delta.tool_calls != null && Array.isArray(delta.tool_calls)) {\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index;\n\n // Tool call start. Nordlys returns all information except the arguments in the first chunk.\n if (toolCalls[index] == null) {\n if (\n toolCallDelta.type !== 'function' &&\n toolCallDelta.type !== ''\n ) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name,\n });\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null\n ) {\n // send delta if the argument text has already started:\n if (toolCall.function.arguments.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\n });\n }\n\n // check if tool call is complete\n // (some providers send the full tool call in one chunk):\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n\n continue;\n }\n\n // existing tool call, merge if not finished\n const toolCall = toolCalls[index];\n\n if (toolCall.hasFinished) {\n continue;\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function.arguments +=\n toolCallDelta.function?.arguments ?? '';\n }\n\n // send delta\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCallDelta.function.arguments ?? '',\n });\n\n // check if tool call is complete\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n }\n },\n flush(controller) {\n if (state.isActiveText) {\n controller.enqueue({ type: 'text-end', id: 'text-1' });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason: state.finishReason ?? {\n unified: 'stop',\n raw: undefined,\n },\n usage: state.usage ?? {\n inputTokens: {\n total: 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n providerMetadata:\n state.provider || state.serviceTier || state.systemFingerprint\n ? {\n nordlys: {\n provider: state.provider,\n service_tier: state.serviceTier,\n system_fingerprint: state.systemFingerprint,\n },\n }\n : undefined,\n });\n },\n })\n ),\n request: { body },\n response: {\n headers: responseHeaders,\n },\n };\n }\n}\n","// Converts generic chat messages to Nordlys API format\n// Uses OpenAI compatible logic patterns but adds Nordlys-specific features (audio, PDF, developer role, reasoning, generated_files)\nimport type {\n LanguageModelV3Prompt,\n LanguageModelV3ToolResultPart,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport { UnsupportedFunctionalityError } from '@ai-sdk/provider';\nimport { convertToBase64 } from '@ai-sdk/provider-utils';\nimport type { NordlysChatCompletionMessage } from './nordlys-types';\n\n// Convert tool output using OpenAI compatible logic\nfunction convertToolOutput(\n output: LanguageModelV3ToolResultPart['output']\n): string {\n switch (output.type) {\n case 'text':\n case 'error-text':\n return output.value;\n case 'json':\n case 'error-json':\n case 'content':\n return JSON.stringify(output.value);\n case 'execution-denied':\n return output.reason ?? 'Tool execution denied.';\n default:\n return '';\n }\n}\n\nexport function convertToNordlysChatMessages({\n prompt,\n systemMessageMode = 'system',\n}: {\n prompt: LanguageModelV3Prompt;\n systemMessageMode?: 'system' | 'developer' | 'remove';\n}): {\n messages: NordlysChatCompletionMessage[];\n warnings: Array<SharedV3Warning>;\n} {\n const messages: NordlysChatCompletionMessage[] = [];\n const warnings: Array<SharedV3Warning> = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n switch (systemMessageMode) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n case 'developer': {\n messages.push({ role: 'developer', content });\n break;\n }\n case 'remove': {\n warnings.push({\n type: 'other',\n message: 'system messages are removed for this model',\n });\n break;\n }\n default: {\n const _exhaustiveCheck: never = systemMessageMode;\n throw new Error(\n `Unsupported system message mode: ${_exhaustiveCheck}`\n );\n }\n }\n break;\n }\n case 'user': {\n // Use OpenAI compatible logic: if single text part, use string content\n if (content.length === 1 && content[0].type === 'text') {\n messages.push({ role: 'user', content: content[0].text });\n break;\n }\n\n // Process content parts - use OpenAI compatible logic for images/text, add Nordlys-specific for audio/PDF\n messages.push({\n role: 'user',\n content: content.map((part, index) => {\n switch (part.type) {\n case 'text': {\n // OpenAI compatible logic\n return { type: 'text', text: part.text };\n }\n case 'file': {\n // Validate data exists\n if (part.data === undefined || part.data === null) {\n throw new Error(\n 'File part data is required but was undefined or null'\n );\n }\n\n // Handle images using OpenAI compatible logic (exact match)\n if (part.mediaType?.startsWith('image/')) {\n const mediaType =\n part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n // OpenAI compatible always calls convertToBase64 (handles strings, buffers, etc.)\n // Note: OpenAI compatible doesn't validate data existence, but we do for safety\n const url =\n part.data instanceof URL\n ? part.data.toString()\n : `data:${mediaType};base64,${convertToBase64(part.data)}`;\n\n return {\n type: 'image_url',\n image_url: { url },\n };\n }\n\n // Handle audio files (Nordlys-specific)\n if (\n part.mediaType &&\n (part.mediaType === 'audio/wav' ||\n part.mediaType === 'audio/mp3' ||\n part.mediaType === 'audio/mpeg')\n ) {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'audio file parts with URLs',\n });\n }\n\n const data =\n typeof part.data === 'string'\n ? part.data\n : convertToBase64(part.data);\n\n return {\n type: 'input_audio',\n input_audio: {\n data,\n format: (part.mediaType === 'audio/wav'\n ? 'wav'\n : 'mp3') as 'wav' | 'mp3',\n },\n };\n }\n\n // Handle PDF files (Nordlys-specific)\n if (part.mediaType && part.mediaType === 'application/pdf') {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'PDF file parts with URLs',\n });\n }\n\n const base64Data =\n typeof part.data === 'string'\n ? part.data\n : convertToBase64(part.data);\n\n return {\n type: 'file',\n file: {\n filename: part.filename ?? `part-${index}.pdf`,\n file_data: `data:application/pdf;base64,${base64Data}`,\n },\n };\n }\n\n throw new UnsupportedFunctionalityError({\n functionality: `file part media type ${part.mediaType}`,\n });\n }\n default: {\n throw new Error(`Unsupported content part type`);\n }\n }\n }),\n });\n break;\n }\n case 'assistant': {\n // Use OpenAI compatible logic for text and tool calls, add Nordlys-specific fields\n let text = '';\n const reasoningParts: string[] = [];\n const generatedFiles: Array<{ media_type: string; data: string }> = [];\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n // OpenAI compatible logic: concatenate text\n text += part.text;\n break;\n }\n case 'reasoning': {\n // Nordlys-specific: collect reasoning parts\n reasoningParts.push(part.text);\n break;\n }\n case 'file': {\n // Nordlys-specific: handle generated files\n const dataString =\n typeof part.data === 'string'\n ? part.data\n : part.data instanceof URL\n ? (() => {\n throw new Error(\n 'URL data not supported for generated files'\n );\n })()\n : Buffer.from(part.data).toString('base64');\n\n generatedFiles.push({\n media_type: part.mediaType ?? 'application/octet-stream',\n data: dataString,\n });\n break;\n }\n case 'tool-call': {\n // OpenAI compatible logic for tool calls\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n }\n }\n\n const reasoning = reasoningParts.join('');\n\n // Build message using OpenAI compatible structure + Nordlys-specific fields\n // OpenAI compatible uses: tool_calls: toolCalls.length > 0 ? toolCalls : void 0\n // We use spread operator which omits the field when empty (equivalent behavior)\n const message: NordlysChatCompletionMessage = {\n role: 'assistant',\n content: text,\n ...(toolCalls.length > 0 && { tool_calls: toolCalls }),\n ...(reasoning && { reasoning_content: reasoning }),\n ...(generatedFiles.length > 0 && { generated_files: generatedFiles }),\n };\n\n messages.push(message);\n break;\n }\n case 'tool': {\n // Use OpenAI compatible logic for tool messages\n // Note: We filter out empty tool results (Nordlys-specific behavior)\n for (const toolResponse of content) {\n if (toolResponse.type === 'tool-approval-response') {\n continue;\n }\n\n const contentValue = convertToolOutput(toolResponse.output);\n // Filter out empty tool results (original Nordlys behavior)\n if (contentValue) {\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: contentValue,\n });\n }\n }\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return { messages, warnings };\n}\n","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\n}\n","import type { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapNordlysFinishReason(\n reason?: string\n): LanguageModelV3FinishReason {\n switch (reason) {\n case 'stop':\n return { unified: 'stop', raw: reason };\n case 'length':\n return { unified: 'length', raw: reason };\n case 'content_filter':\n return { unified: 'content-filter', raw: reason };\n case 'tool_calls':\n return { unified: 'tool-calls', raw: reason };\n default:\n return { unified: 'other', raw: reason };\n }\n}\n","// Nordlys chat model options/types\n\nimport { z } from 'zod/v4';\n\n/**\n * Provider options for Nordlys chat models.\n */\nexport const nordlysProviderOptions = z.object({\n /**\n * Model name (required for API requests).\n */\n model: z.string().optional(),\n /**\n * Modify the likelihood of specified tokens appearing in the completion.\n */\n logit_bias: z.record(z.string(), z.number()).optional(),\n /**\n * Number of completions to generate for each prompt.\n */\n n: z.number().optional(),\n /**\n * Whether to stream responses.\n */\n stream: z.boolean().optional(),\n /**\n * Unique identifier representing your end-user.\n */\n user: z.string().optional(),\n /**\n * Audio parameter for chat completion.\n */\n audio: z\n .object({\n format: z.string().optional(),\n voice: z.string().optional(),\n })\n .optional(),\n /**\n * Whether to return log probabilities of the output tokens.\n */\n logprobs: z.boolean().optional(),\n /**\n * Maximum number of completion tokens.\n */\n max_completion_tokens: z.number().optional(),\n /**\n * Metadata for the request.\n */\n metadata: z.record(z.string(), z.string()).optional(),\n /**\n * Modalities for the request.\n */\n modalities: z.array(z.string()).optional(),\n /**\n * Whether to allow parallel tool calls.\n */\n parallel_tool_calls: z.boolean().optional(),\n /**\n * Prediction content parameter.\n */\n prediction: z\n .object({\n type: z.string().optional(),\n content: z\n .object({\n OfString: z.string().optional(),\n OfArrayOfContentParts: z\n .array(z.object({ type: z.literal('text'), text: z.string() }))\n .optional(),\n })\n .optional(),\n })\n .optional(),\n /**\n * Reasoning effort level.\n */\n reasoning_effort: z.string().optional(),\n /**\n * Response format parameter.\n */\n response_format: z\n .object({\n OfText: z.object({ type: z.string() }).optional(),\n OfJSONObject: z.object({ type: z.string() }).optional(),\n OfJSONSchema: z\n .object({\n type: z.string(),\n json_schema: z\n .object({\n name: z.string(),\n schema: z.unknown(),\n description: z.string().optional(),\n strict: z.boolean().optional(),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n /**\n * Seed for deterministic outputs.\n */\n seed: z.number().optional(),\n /**\n * Service tier to use.\n */\n service_tier: z.string().optional(),\n /**\n * Whether to store the conversation.\n */\n store: z.boolean().optional(),\n /**\n * Number of top logprobs to return.\n */\n top_logprobs: z.number().optional(),\n /**\n * Web search options.\n */\n web_search_options: z\n .object({\n search_context_size: z.string().optional(),\n user_location: z\n .object({\n type: z.string().optional(),\n approximate: z\n .object({\n city: z.string().optional(),\n country: z.string().optional(),\n region: z.string().optional(),\n timezone: z.string().optional(),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\n/**\n * Type for validated Nordlys provider options.\n */\nexport type NordlysProviderOptions = z.infer<typeof nordlysProviderOptions>;\n\n/**\n * Settings that can be set at model creation time.\n * These settings will be merged with call-level options, with call-level taking precedence.\n */\nexport interface NordlysChatSettings {\n /**\n * Temperature setting for the model.\n */\n temperature?: number;\n /**\n * Maximum number of output tokens.\n */\n maxOutputTokens?: number;\n /**\n * Top-p sampling parameter.\n */\n topP?: number;\n /**\n * Top-k sampling parameter.\n */\n topK?: number;\n /**\n * Frequency penalty.\n */\n frequencyPenalty?: number;\n /**\n * Presence penalty.\n */\n presencePenalty?: number;\n /**\n * Stop sequences.\n */\n stopSequences?: string[];\n /**\n * Provider-specific options.\n */\n providerOptions?: NordlysProviderOptions;\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport const nordlysErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n param: z.any().nullish(),\n code: z.union([z.string(), z.number()]).nullish(),\n }),\n});\n\nexport type NordlysErrorData = z.infer<typeof nordlysErrorDataSchema>;\n\nexport const nordlysFailedResponseHandler: ReturnType<\n typeof createJsonErrorResponseHandler<NordlysErrorData>\n> = createJsonErrorResponseHandler({\n errorSchema: nordlysErrorDataSchema,\n errorToMessage: (data: NordlysErrorData) => data.error.message,\n});\n","import {\n type LanguageModelV3CallOptions,\n type SharedV3Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV3CallOptions['tools'];\n toolChoice?: LanguageModelV3CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: SharedV3Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV3Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const openaiCompatTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({ type: 'unsupported', feature: `tool: ${tool.name}` });\n } else if (tool.type === 'function') {\n openaiCompatTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: openaiCompatTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: openaiCompatTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: openaiCompatTools,\n toolChoice: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n"],"mappings":"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","names":["z","_a","z","UnsupportedFunctionalityError","z","toolCall"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nordlys-labs/nordlys-ai-provider",
3
3
  "author": "Nordlys",
4
- "version": "0.2.0",
4
+ "version": "0.2.2",
5
5
  "type": "module",
6
6
  "repository": {
7
7
  "type": "git",