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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -33,6 +33,15 @@ const { text } = await generateText({
33
33
  model: nordlys('nordlys/hypernova'),
34
34
  prompt: 'Explain quantum computing',
35
35
  });
36
+
37
+ // With model-level settings
38
+ const { text: creativeText } = await generateText({
39
+ model: nordlys('nordlys/hypernova', {
40
+ temperature: 0.9,
41
+ maxOutputTokens: 2000,
42
+ }),
43
+ prompt: 'Write a creative story',
44
+ });
36
45
  ```
37
46
 
38
47
  ## V3 Content Types
@@ -49,7 +58,7 @@ content.forEach((item) => {
49
58
  case 'text': console.log(item.text); break;
50
59
  case 'reasoning': console.log(item.text); break;
51
60
  case 'file': console.log(item.media_type, item.data); break;
52
- case 'tool-call': console.log(item.toolName, item.args); break;
61
+ case 'tool-call': console.log(item.toolName, item.input); break;
53
62
  }
54
63
  });
55
64
 
@@ -98,16 +107,91 @@ const { text } = await generateText({
98
107
 
99
108
  ## Configuration
100
109
 
110
+ ### Provider Configuration
111
+
101
112
  ```ts
102
113
  import { createNordlys } from '@nordlys-labs/nordlys-ai-provider';
103
114
 
104
- const nordlys = createNordlys({
115
+ // Default provider (uses NORDLYS_API_KEY env var)
116
+ const nordlys = createNordlys();
117
+
118
+ // Provider with explicit API key
119
+ const nordlysWithKey = createNordlys({
120
+ apiKey: 'your-api-key-here',
121
+ });
122
+
123
+ // Provider with custom base URL and API key
124
+ const customNordlys = createNordlys({
105
125
  baseURL: 'https://your-api.com/v1',
106
- apiKey: 'your-key', // or NORDLYS_API_KEY env var
126
+ apiKey: 'your-api-key-here',
107
127
  headers: { 'Custom-Header': 'value' },
108
128
  });
129
+
130
+ // Multiple providers with different API keys
131
+ const provider1 = createNordlys({ apiKey: 'key-for-user-1' });
132
+ const provider2 = createNordlys({ apiKey: 'key-for-user-2' });
133
+
134
+ // Use different providers for different models
135
+ const { text } = await generateText({
136
+ model: provider1('nordlys/hypernova'),
137
+ prompt: 'Hello',
138
+ });
109
139
  ```
110
140
 
141
+ **API Key Priority:**
142
+ 1. Explicit `apiKey` parameter in `createNordlys()`
143
+ 2. `NORDLYS_API_KEY` environment variable (if `apiKey` not provided)
144
+
145
+ ### Model Settings
146
+
147
+ You can pass settings when creating a model instance. These settings will be used as defaults for all calls, but can be overridden at call time:
148
+
149
+ ```ts
150
+ import { nordlys } from '@nordlys-labs/nordlys-ai-provider';
151
+ import { generateText } from 'ai';
152
+
153
+ // Create a model with default settings
154
+ const creativeModel = nordlys('nordlys/hypernova', {
155
+ temperature: 0.9,
156
+ topP: 0.95,
157
+ maxOutputTokens: 2000,
158
+ });
159
+
160
+ // Use the model (settings apply automatically)
161
+ const { text } = await generateText({
162
+ model: creativeModel,
163
+ prompt: 'Write a story',
164
+ });
165
+
166
+ // Override settings at call time (call-level takes precedence)
167
+ const { text: preciseText } = await generateText({
168
+ model: creativeModel,
169
+ prompt: 'Solve this math problem',
170
+ temperature: 0.1, // Overrides model-level temperature
171
+ });
172
+
173
+ // Settings can also be passed to languageModel and chat methods
174
+ const model1 = nordlys.languageModel('nordlys/hypernova', {
175
+ temperature: 0.7,
176
+ });
177
+
178
+ const model2 = nordlys.chat('nordlys/hypernova', {
179
+ temperature: 0.8,
180
+ maxOutputTokens: 1000,
181
+ });
182
+ ```
183
+
184
+ ### Available Settings
185
+
186
+ - `temperature?: number` - Sampling temperature
187
+ - `maxOutputTokens?: number` - Maximum tokens to generate
188
+ - `topP?: number` - Top-p sampling parameter
189
+ - `topK?: number` - Top-k sampling parameter (unsupported, will warn)
190
+ - `frequencyPenalty?: number` - Frequency penalty
191
+ - `presencePenalty?: number` - Presence penalty
192
+ - `stopSequences?: string[]` - Stop sequences
193
+ - `providerOptions?: NordlysProviderOptions` - Provider-specific options
194
+
111
195
  ## Multimodal
112
196
 
113
197
  ```ts
@@ -129,6 +213,7 @@ const { text } = await generateText({
129
213
  - Streaming with all event types
130
214
  - Multimodal inputs (images, audio, PDFs)
131
215
  - Enhanced usage tracking
216
+ - Model-level settings support
132
217
  - AI SDK standard error handling
133
218
  - Full TypeScript support
134
219
 
@@ -151,6 +236,20 @@ try {
151
236
 
152
237
  ## Environment
153
238
 
239
+ The API key can be provided via environment variable or explicitly when creating the provider:
240
+
154
241
  ```bash
242
+ # Set environment variable (used as fallback if apiKey not provided)
155
243
  export NORDLYS_API_KEY="your-api-key"
156
244
  ```
245
+
246
+ ```ts
247
+ // Or provide it explicitly when creating the provider
248
+ import { createNordlys } from '@nordlys-labs/nordlys-ai-provider';
249
+
250
+ const nordlys = createNordlys({
251
+ apiKey: process.env.NORDLYS_API_KEY, // Explicit API key takes precedence
252
+ });
253
+ ```
254
+
255
+ **Note:** If you provide an `apiKey` parameter to `createNordlys()`, it will override the `NORDLYS_API_KEY` environment variable for that provider instance.
package/dist/index.cjs CHANGED
@@ -569,13 +569,14 @@ var nordlysChatChunkSchema = import_zod2.z.union([
569
569
  })
570
570
  ]);
571
571
  var NordlysChatLanguageModel = class {
572
- constructor(modelId, config) {
572
+ constructor(modelId, settings, config) {
573
573
  this.specificationVersion = "v3";
574
574
  this.supportedUrls = {
575
575
  "application/pdf": [/^https:\/\/.*$/]
576
576
  };
577
577
  this.modelId = modelId;
578
578
  this.config = config;
579
+ this.settings = settings;
579
580
  }
580
581
  get provider() {
581
582
  return this.config.provider;
@@ -594,14 +595,28 @@ var NordlysChatLanguageModel = class {
594
595
  tools,
595
596
  toolChoice
596
597
  }) {
598
+ var _a, _b, _c, _d, _e, _f, _g, _h;
597
599
  const warnings = [];
598
- if (topK != null) {
600
+ const mergedMaxOutputTokens = maxOutputTokens != null ? maxOutputTokens : (_a = this.settings) == null ? void 0 : _a.maxOutputTokens;
601
+ const mergedTemperature = temperature != null ? temperature : (_b = this.settings) == null ? void 0 : _b.temperature;
602
+ const mergedTopP = topP != null ? topP : (_c = this.settings) == null ? void 0 : _c.topP;
603
+ const mergedTopK = topK != null ? topK : (_d = this.settings) == null ? void 0 : _d.topK;
604
+ const mergedFrequencyPenalty = frequencyPenalty != null ? frequencyPenalty : (_e = this.settings) == null ? void 0 : _e.frequencyPenalty;
605
+ const mergedPresencePenalty = presencePenalty != null ? presencePenalty : (_f = this.settings) == null ? void 0 : _f.presencePenalty;
606
+ const mergedStopSequences = stopSequences != null ? stopSequences : (_g = this.settings) == null ? void 0 : _g.stopSequences;
607
+ const mergedProviderOptions = {
608
+ ...(_h = this.settings) == null ? void 0 : _h.providerOptions,
609
+ ...providerOptions
610
+ };
611
+ if (mergedTopK != null) {
599
612
  warnings.push({ type: "unsupported", feature: "topK" });
600
613
  }
601
614
  if (responseFormat != null) {
602
615
  warnings.push({ type: "unsupported", feature: "responseFormat" });
603
616
  }
604
- const result = nordlysProviderOptions.safeParse(providerOptions != null ? providerOptions : {});
617
+ const result = nordlysProviderOptions.safeParse(
618
+ mergedProviderOptions != null ? mergedProviderOptions : {}
619
+ );
605
620
  const nordlysOptions = result.success ? result.data : {};
606
621
  const {
607
622
  tools: nordlysTools,
@@ -617,13 +632,13 @@ var NordlysChatLanguageModel = class {
617
632
  const standardizedArgs = {
618
633
  messages,
619
634
  model: this.modelId,
620
- max_tokens: typeof maxOutputTokens === "number" ? maxOutputTokens : void 0,
635
+ max_tokens: typeof mergedMaxOutputTokens === "number" ? mergedMaxOutputTokens : void 0,
621
636
  max_completion_tokens: nordlysOptions.max_completion_tokens,
622
- temperature,
623
- top_p: topP,
624
- stop: stopSequences,
625
- presence_penalty: presencePenalty,
626
- frequency_penalty: frequencyPenalty,
637
+ temperature: mergedTemperature,
638
+ top_p: mergedTopP,
639
+ stop: mergedStopSequences,
640
+ presence_penalty: mergedPresencePenalty,
641
+ frequency_penalty: mergedFrequencyPenalty,
627
642
  user: nordlysOptions.user,
628
643
  tools: nordlysTools,
629
644
  tool_choice: nordlysToolChoice
@@ -1021,19 +1036,19 @@ function createNordlys(options = {}) {
1021
1036
  "Content-Type": "application/json",
1022
1037
  ...options.headers
1023
1038
  });
1024
- const createChatModel = (modelId) => new NordlysChatLanguageModel(modelId, {
1039
+ const createChatModel = (modelId, settings) => new NordlysChatLanguageModel(modelId, settings, {
1025
1040
  provider: "nordlys.chat",
1026
1041
  baseURL,
1027
1042
  headers: getHeaders,
1028
1043
  fetch: options.fetch
1029
1044
  });
1030
- const provider = function(modelId) {
1045
+ const provider = function(modelId, settings) {
1031
1046
  if (new.target) {
1032
1047
  throw new Error(
1033
1048
  "The Nordlys model function cannot be called with the new keyword."
1034
1049
  );
1035
1050
  }
1036
- return createChatModel(modelId);
1051
+ return createChatModel(modelId, settings);
1037
1052
  };
1038
1053
  provider.languageModel = createChatModel;
1039
1054
  provider.chat = createChatModel;
@@ -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 {\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';\n\nexport type NordlysChatModelId = string;\n\nexport interface NordlysProvider extends ProviderV3 {\n (modelId: string): LanguageModelV3;\n\n /**\n * Creates a model for text generation with Nordlys models.\n */\n languageModel: (modelId: string) => LanguageModelV3;\n\n /**\n * Creates a chat model with Nordlys models.\n */\n chat: (modelId: string) => 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) =>\n new NordlysChatLanguageModel(modelId, {\n provider: 'nordlys.chat',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: string) {\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);\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 { nordlysProviderOptions } 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\n constructor(modelId: string, config: NordlysChatConfig) {\n this.modelId = modelId;\n this.config = config;\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 // Warn for unsupported settings\n if (topK != 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(providerOptions ?? {});\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 maxOutputTokens === 'number' ? maxOutputTokens : undefined,\n max_completion_tokens: nordlysOptions.max_completion_tokens,\n temperature,\n top_p: topP,\n stop: stopSequences,\n presence_penalty: presencePenalty,\n frequency_penalty: frequencyPenalty,\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","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) ??\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"]}