@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 +32 -25
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +32 -25
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
|
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 (
|
|
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
|
|
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,${
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
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
|
-
}).
|
|
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().
|
|
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://
|
|
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,
|
package/dist/index.cjs.map
CHANGED
|
@@ -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
|
|
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 (
|
|
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
|
|
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,${
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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
|
-
}).
|
|
547
|
+
}).nullish(),
|
|
541
548
|
provider: z3.string().optional(),
|
|
542
549
|
service_tier: z3.string().optional(),
|
|
543
|
-
system_fingerprint: z3.string().
|
|
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://
|
|
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"]}
|