@nordlys-labs/nordlys-ai-provider 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +102 -3
- package/dist/index.cjs +57 -35
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +111 -4
- package/dist/index.d.ts +111 -4
- package/dist/index.js +57 -35
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
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;
|
|
@@ -553,13 +560,14 @@ var nordlysChatChunkSchema = z3.union([
|
|
|
553
560
|
})
|
|
554
561
|
]);
|
|
555
562
|
var NordlysChatLanguageModel = class {
|
|
556
|
-
constructor(modelId, config) {
|
|
563
|
+
constructor(modelId, settings, config) {
|
|
557
564
|
this.specificationVersion = "v3";
|
|
558
565
|
this.supportedUrls = {
|
|
559
566
|
"application/pdf": [/^https:\/\/.*$/]
|
|
560
567
|
};
|
|
561
568
|
this.modelId = modelId;
|
|
562
569
|
this.config = config;
|
|
570
|
+
this.settings = settings;
|
|
563
571
|
}
|
|
564
572
|
get provider() {
|
|
565
573
|
return this.config.provider;
|
|
@@ -578,14 +586,28 @@ var NordlysChatLanguageModel = class {
|
|
|
578
586
|
tools,
|
|
579
587
|
toolChoice
|
|
580
588
|
}) {
|
|
589
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
581
590
|
const warnings = [];
|
|
582
|
-
|
|
591
|
+
const mergedMaxOutputTokens = maxOutputTokens != null ? maxOutputTokens : (_a = this.settings) == null ? void 0 : _a.maxOutputTokens;
|
|
592
|
+
const mergedTemperature = temperature != null ? temperature : (_b = this.settings) == null ? void 0 : _b.temperature;
|
|
593
|
+
const mergedTopP = topP != null ? topP : (_c = this.settings) == null ? void 0 : _c.topP;
|
|
594
|
+
const mergedTopK = topK != null ? topK : (_d = this.settings) == null ? void 0 : _d.topK;
|
|
595
|
+
const mergedFrequencyPenalty = frequencyPenalty != null ? frequencyPenalty : (_e = this.settings) == null ? void 0 : _e.frequencyPenalty;
|
|
596
|
+
const mergedPresencePenalty = presencePenalty != null ? presencePenalty : (_f = this.settings) == null ? void 0 : _f.presencePenalty;
|
|
597
|
+
const mergedStopSequences = stopSequences != null ? stopSequences : (_g = this.settings) == null ? void 0 : _g.stopSequences;
|
|
598
|
+
const mergedProviderOptions = {
|
|
599
|
+
...(_h = this.settings) == null ? void 0 : _h.providerOptions,
|
|
600
|
+
...providerOptions
|
|
601
|
+
};
|
|
602
|
+
if (mergedTopK != null) {
|
|
583
603
|
warnings.push({ type: "unsupported", feature: "topK" });
|
|
584
604
|
}
|
|
585
605
|
if (responseFormat != null) {
|
|
586
606
|
warnings.push({ type: "unsupported", feature: "responseFormat" });
|
|
587
607
|
}
|
|
588
|
-
const result = nordlysProviderOptions.safeParse(
|
|
608
|
+
const result = nordlysProviderOptions.safeParse(
|
|
609
|
+
mergedProviderOptions != null ? mergedProviderOptions : {}
|
|
610
|
+
);
|
|
589
611
|
const nordlysOptions = result.success ? result.data : {};
|
|
590
612
|
const {
|
|
591
613
|
tools: nordlysTools,
|
|
@@ -601,13 +623,13 @@ var NordlysChatLanguageModel = class {
|
|
|
601
623
|
const standardizedArgs = {
|
|
602
624
|
messages,
|
|
603
625
|
model: this.modelId,
|
|
604
|
-
max_tokens: typeof
|
|
626
|
+
max_tokens: typeof mergedMaxOutputTokens === "number" ? mergedMaxOutputTokens : void 0,
|
|
605
627
|
max_completion_tokens: nordlysOptions.max_completion_tokens,
|
|
606
|
-
temperature,
|
|
607
|
-
top_p:
|
|
608
|
-
stop:
|
|
609
|
-
presence_penalty:
|
|
610
|
-
frequency_penalty:
|
|
628
|
+
temperature: mergedTemperature,
|
|
629
|
+
top_p: mergedTopP,
|
|
630
|
+
stop: mergedStopSequences,
|
|
631
|
+
presence_penalty: mergedPresencePenalty,
|
|
632
|
+
frequency_penalty: mergedFrequencyPenalty,
|
|
611
633
|
user: nordlysOptions.user,
|
|
612
634
|
tools: nordlysTools,
|
|
613
635
|
tool_choice: nordlysToolChoice
|
|
@@ -995,7 +1017,7 @@ var NordlysChatLanguageModel = class {
|
|
|
995
1017
|
// src/nordlys-provider.ts
|
|
996
1018
|
function createNordlys(options = {}) {
|
|
997
1019
|
var _a;
|
|
998
|
-
const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : "https://
|
|
1020
|
+
const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : "https://api.nordlyslabs.com/v1";
|
|
999
1021
|
const getHeaders = () => ({
|
|
1000
1022
|
Authorization: `Bearer ${loadApiKey({
|
|
1001
1023
|
apiKey: options.apiKey,
|
|
@@ -1005,19 +1027,19 @@ function createNordlys(options = {}) {
|
|
|
1005
1027
|
"Content-Type": "application/json",
|
|
1006
1028
|
...options.headers
|
|
1007
1029
|
});
|
|
1008
|
-
const createChatModel = (modelId) => new NordlysChatLanguageModel(modelId, {
|
|
1030
|
+
const createChatModel = (modelId, settings) => new NordlysChatLanguageModel(modelId, settings, {
|
|
1009
1031
|
provider: "nordlys.chat",
|
|
1010
1032
|
baseURL,
|
|
1011
1033
|
headers: getHeaders,
|
|
1012
1034
|
fetch: options.fetch
|
|
1013
1035
|
});
|
|
1014
|
-
const provider = function(modelId) {
|
|
1036
|
+
const provider = function(modelId, settings) {
|
|
1015
1037
|
if (new.target) {
|
|
1016
1038
|
throw new Error(
|
|
1017
1039
|
"The Nordlys model function cannot be called with the new keyword."
|
|
1018
1040
|
);
|
|
1019
1041
|
}
|
|
1020
|
-
return createChatModel(modelId);
|
|
1042
|
+
return createChatModel(modelId, settings);
|
|
1021
1043
|
};
|
|
1022
1044
|
provider.languageModel = createChatModel;
|
|
1023
1045
|
provider.chat = createChatModel;
|
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';\n\nexport type NordlysChatModelId = string;\n\nexport interface NordlysProvider extends ProviderV3 {\n (modelId: string): LanguageModelV3;\n\n /**\n * Creates a model for text generation with Nordlys models.\n */\n languageModel: (modelId: string) => LanguageModelV3;\n\n /**\n * Creates a chat model with Nordlys models.\n */\n chat: (modelId: string) => LanguageModelV3;\n\n /**\n * Text embedding is not currently supported by the Nordlys provider.\n */\n embeddingModel: (modelId: string) => EmbeddingModelV3;\n}\n\nexport interface NordlysProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers.\n * The default prefix is your Nordlys API endpoint.\n */\n baseURL?: string;\n\n /**\n * API key for the Nordlys service.\n * It defaults to the `NORDLYS_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n * Create a Nordlys AI provider instance.\n */\nexport function createNordlys(\n options: NordlysProviderSettings = {}\n): NordlysProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://backend.mangoplant-a7a21605.swedencentral.azurecontainerapps.io/v1';\n\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'NORDLYS_API_KEY',\n description: 'Nordlys',\n })}`,\n 'Content-Type': 'application/json',\n ...options.headers,\n });\n\n const createChatModel = (modelId: string) =>\n new NordlysChatLanguageModel(modelId, {\n provider: 'nordlys.chat',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: string) {\n if (new.target) {\n throw new Error(\n 'The Nordlys model function cannot be called with the new keyword.'\n );\n }\n\n return createChatModel(modelId);\n };\n\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n provider.specificationVersion = 'v3' as const;\n\n return Object.freeze(provider);\n}\n\n/**\n * Default Nordlys provider instance.\n */\nexport const nordlys = createNordlys();\n","import {\n InvalidResponseDataError,\n type LanguageModelV3,\n type LanguageModelV3Content,\n type LanguageModelV3FinishReason,\n type LanguageModelV3Usage,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { convertToNordlysChatMessages } from './convert-to-nordlys-chat-messages';\nimport { getResponseMetadata } from './get-response-metadata';\nimport { mapNordlysFinishReason } from './map-nordlys-finish-reason';\nimport { nordlysProviderOptions } from './nordlys-chat-options';\nimport { nordlysFailedResponseHandler } from './nordlys-error';\nimport { prepareTools } from './nordlys-prepare-tools';\nimport type { NordlysChatCompletionRequest } from './nordlys-types';\n\ninterface NordlysChatConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n defaultProvider?: string;\n}\n\nconst nordlysChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z\n .array(\n z.object({\n message: z.object({\n role: z.enum(['assistant', '']).nullish(),\n content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n id: z.string().nullish(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n })\n )\n .nullish(),\n reasoning_content: z.string().optional(),\n generated_files: z\n .array(\n z.object({\n media_type: z.string(),\n data: z.string(),\n })\n )\n .optional(),\n }),\n index: z.number(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n })\n ),\n })\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n })\n )\n .optional(),\n usage: z\n .object({\n completion_tokens: z.number(),\n prompt_tokens: z.number(),\n total_tokens: z.number(),\n reasoning_tokens: z.number().optional(),\n cached_input_tokens: z.number().optional(),\n })\n .optional(),\n system_fingerprint: z.string().optional(),\n service_tier: z.string().optional(),\n provider: z.string().optional(),\n error: z\n .object({\n message: z.string(),\n type: z.string(),\n param: z.any().nullish(),\n code: z.any().nullish(),\n })\n .optional(),\n});\n\nconst nordlysChatChunkSchema = z.union([\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z\n .object({\n role: z.enum(['assistant', '']).nullish(),\n content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n type: z\n .union([z.literal('function'), z.literal('')])\n .nullish(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n })\n )\n .nullish(),\n reasoning_content: z.string().optional(),\n generated_files: z\n .array(\n z.object({\n media_type: z.string(),\n data: z.string(),\n })\n )\n .optional(),\n })\n .nullish(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n })\n ),\n })\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n index: z.number(),\n })\n ),\n usage: z\n .object({\n completion_tokens: z.number(),\n prompt_tokens: z.number(),\n total_tokens: z.number(),\n reasoning_tokens: z.number().optional(),\n cached_input_tokens: z.number().optional(),\n })\n .optional(),\n provider: z.string().optional(),\n service_tier: z.string().optional(),\n system_fingerprint: z.string().optional(),\n }),\n z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n param: z.any().nullish(),\n code: z.any().nullish(),\n }),\n provider: z.string().optional(),\n }),\n]);\n\nexport class NordlysChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n readonly modelId: string;\n private readonly config: NordlysChatConfig;\n\n constructor(modelId: string, config: NordlysChatConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'application/pdf': [/^https:\\/\\/.*$/],\n };\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n providerOptions,\n tools,\n toolChoice,\n }: Parameters<LanguageModelV3['doGenerate']>[0]) {\n const warnings: SharedV3Warning[] = [];\n\n // Warn for unsupported settings\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n if (responseFormat != null) {\n warnings.push({ type: 'unsupported', feature: 'responseFormat' });\n }\n\n // Parse provider options with zod schema (flat, not nested)\n const result = nordlysProviderOptions.safeParse(providerOptions ?? {});\n const nordlysOptions = result.success ? result.data : {};\n\n // Use modelId from constructor (model is set when creating the model instance)\n\n const {\n tools: nordlysTools,\n toolChoice: nordlysToolChoice,\n toolWarnings,\n } = prepareTools({\n tools,\n toolChoice,\n });\n warnings.push(...toolWarnings);\n\n // Convert messages\n const { messages, warnings: messageWarnings } =\n convertToNordlysChatMessages({ prompt });\n warnings.push(...messageWarnings);\n\n // Standardized settings\n const standardizedArgs = {\n messages,\n model: this.modelId,\n max_tokens:\n typeof maxOutputTokens === 'number' ? maxOutputTokens : undefined,\n max_completion_tokens: nordlysOptions.max_completion_tokens,\n temperature,\n top_p: topP,\n stop: stopSequences,\n presence_penalty: presencePenalty,\n frequency_penalty: frequencyPenalty,\n user: nordlysOptions.user,\n tools: nordlysTools,\n tool_choice: nordlysToolChoice,\n };\n\n // Map new provider option fields\n const args: NordlysChatCompletionRequest = {\n ...standardizedArgs,\n ...(nordlysOptions.logit_bias\n ? { logit_bias: nordlysOptions.logit_bias }\n : {}),\n ...(nordlysOptions.audio ? { audio: nordlysOptions.audio } : {}),\n ...(nordlysOptions.logprobs !== undefined\n ? { logprobs: nordlysOptions.logprobs }\n : {}),\n ...(nordlysOptions.metadata ? { metadata: nordlysOptions.metadata } : {}),\n ...(nordlysOptions.modalities\n ? { modalities: nordlysOptions.modalities }\n : {}),\n ...(nordlysOptions.parallel_tool_calls !== undefined\n ? { parallel_tool_calls: nordlysOptions.parallel_tool_calls }\n : {}),\n ...(nordlysOptions.prediction\n ? { prediction: nordlysOptions.prediction }\n : {}),\n ...(nordlysOptions.reasoning_effort\n ? { reasoning_effort: nordlysOptions.reasoning_effort }\n : {}),\n ...(nordlysOptions.response_format\n ? { response_format: nordlysOptions.response_format }\n : {}),\n ...(nordlysOptions.seed !== undefined\n ? { seed: nordlysOptions.seed }\n : {}),\n ...(nordlysOptions.service_tier\n ? { service_tier: nordlysOptions.service_tier }\n : {}),\n ...(nordlysOptions.store !== undefined\n ? { store: nordlysOptions.store }\n : {}),\n ...(nordlysOptions.top_logprobs !== undefined\n ? { top_logprobs: nordlysOptions.top_logprobs }\n : {}),\n ...(nordlysOptions.web_search_options\n ? { web_search_options: nordlysOptions.web_search_options }\n : {}),\n };\n\n return {\n args,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV3['doGenerate']>[0]\n ): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>> {\n const { args: body, warnings } = await this.getArgs(options);\n\n const { responseHeaders, value, rawValue } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: nordlysFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n nordlysChatResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n if (!value) {\n throw new Error('Failed to parse Nordlys API response');\n }\n\n // Handle error responses\n if (value.error) {\n throw new Error(`Nordlys API Error: ${value.error.message}`);\n }\n\n if (!value.choices || value.choices.length === 0) {\n throw new Error('No choices returned from Nordlys API');\n }\n\n const choice = value.choices[0];\n const content: Array<LanguageModelV3Content> = [];\n\n if (choice.message?.content) {\n content.push({ type: 'text', text: choice.message.content });\n }\n\n if (choice.message?.reasoning_content) {\n content.push({\n type: 'reasoning',\n text: choice.message.reasoning_content,\n });\n }\n\n if (\n choice.message?.generated_files &&\n choice.message.generated_files.length > 0\n ) {\n for (const file of choice.message.generated_files) {\n content.push({\n type: 'file',\n mediaType: file.media_type,\n data: file.data,\n });\n }\n }\n\n if (choice.message?.tool_calls && choice.message.tool_calls.length > 0) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id || '',\n toolName: toolCall.function?.name || '',\n input: toolCall.function?.arguments || '{}',\n });\n }\n }\n\n // Extract usage information\n const {\n prompt_tokens,\n completion_tokens,\n reasoning_tokens,\n cached_input_tokens,\n } = value.usage ?? {};\n\n return {\n content,\n finishReason: choice.finish_reason\n ? mapNordlysFinishReason(choice.finish_reason)\n : { unified: 'stop', raw: undefined },\n usage:\n value.usage && prompt_tokens != null\n ? {\n inputTokens: {\n total: prompt_tokens,\n noCache:\n cached_input_tokens != null\n ? prompt_tokens - cached_input_tokens\n : undefined,\n cacheRead: cached_input_tokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completion_tokens,\n text:\n completion_tokens != null && reasoning_tokens != null\n ? completion_tokens - reasoning_tokens\n : undefined,\n reasoning: reasoning_tokens,\n },\n }\n : {\n inputTokens: {\n total: 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: { total: 0, text: undefined, reasoning: undefined },\n },\n providerMetadata: value.provider\n ? {\n nordlys: {\n provider: value.provider,\n service_tier: value.service_tier,\n system_fingerprint: value.system_fingerprint,\n },\n }\n : undefined,\n request: { body },\n response: {\n id: value.id ?? '',\n modelId: value.model ?? '',\n timestamp: new Date((value.created ?? 0) * 1000),\n headers: responseHeaders,\n body: rawValue,\n },\n warnings,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV3['doStream']>[0]\n ): Promise<Awaited<ReturnType<LanguageModelV3['doStream']>>> {\n const { args, warnings } = await this.getArgs(options);\n const body = {\n ...args,\n stream: true,\n stream_options: { include_usage: true },\n };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: nordlysFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n nordlysChatChunkSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n hasFinished: boolean;\n }> = [];\n\n const state: {\n finishReason: LanguageModelV3FinishReason;\n usage: LanguageModelV3Usage;\n isFirstChunk: boolean;\n isActiveText: boolean;\n provider: string | undefined;\n serviceTier: string | undefined;\n systemFingerprint: string | undefined;\n } = {\n finishReason: { unified: 'other', raw: undefined },\n usage: {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n },\n isFirstChunk: true,\n isActiveText: false,\n provider: undefined,\n serviceTier: undefined,\n systemFingerprint: undefined,\n };\n\n return {\n stream: response.pipeThrough(\n new TransformStream({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n async transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n state.finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n // Handle error responses\n if ('error' in value) {\n state.finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({\n type: 'error',\n error: new Error(value.error.message),\n });\n return;\n }\n\n if (state.isFirstChunk) {\n state.isFirstChunk = false;\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata({\n id: value.id ?? '',\n model: value.model ?? '',\n created: value.created ?? 0,\n }),\n });\n }\n\n if (value.usage != null) {\n state.usage.inputTokens.total =\n value.usage.prompt_tokens ?? undefined;\n state.usage.inputTokens.cacheRead =\n value.usage.cached_input_tokens ?? undefined;\n state.usage.inputTokens.noCache =\n value.usage.prompt_tokens != null &&\n value.usage.cached_input_tokens != null\n ? value.usage.prompt_tokens - value.usage.cached_input_tokens\n : undefined;\n state.usage.outputTokens.total =\n value.usage.completion_tokens ?? undefined;\n state.usage.outputTokens.reasoning =\n value.usage.reasoning_tokens ?? undefined;\n state.usage.outputTokens.text =\n value.usage.completion_tokens != null &&\n value.usage.reasoning_tokens != null\n ? value.usage.completion_tokens - value.usage.reasoning_tokens\n : undefined;\n }\n\n if (value.provider) {\n state.provider = value.provider;\n }\n\n if (value.service_tier) {\n state.serviceTier = value.service_tier;\n }\n\n if (value.system_fingerprint) {\n state.systemFingerprint = value.system_fingerprint;\n }\n\n const choice = value.choices[0];\n if (choice?.finish_reason != null) {\n state.finishReason = mapNordlysFinishReason(choice.finish_reason);\n }\n\n if (!choice?.delta) {\n return;\n }\n\n const delta = choice.delta;\n\n if (delta.content != null) {\n if (!state.isActiveText) {\n controller.enqueue({ type: 'text-start', id: 'text-1' });\n state.isActiveText = true;\n }\n controller.enqueue({\n type: 'text-delta',\n id: 'text-1',\n delta: delta.content,\n });\n }\n\n if (delta.reasoning_content != null) {\n controller.enqueue({\n type: 'reasoning-delta',\n id: 'reasoning-1',\n delta: delta.reasoning_content,\n });\n }\n\n if (\n delta.generated_files != null &&\n Array.isArray(delta.generated_files)\n ) {\n for (const file of delta.generated_files) {\n controller.enqueue({\n type: 'file',\n mediaType: file.media_type,\n data: file.data,\n });\n }\n }\n\n if (delta.tool_calls != null && Array.isArray(delta.tool_calls)) {\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index;\n\n // Tool call start. Nordlys returns all information except the arguments in the first chunk.\n if (toolCalls[index] == null) {\n if (\n toolCallDelta.type !== 'function' &&\n toolCallDelta.type !== ''\n ) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name,\n });\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null\n ) {\n // send delta if the argument text has already started:\n if (toolCall.function.arguments.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\n });\n }\n\n // check if tool call is complete\n // (some providers send the full tool call in one chunk):\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n\n continue;\n }\n\n // existing tool call, merge if not finished\n const toolCall = toolCalls[index];\n\n if (toolCall.hasFinished) {\n continue;\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function.arguments +=\n toolCallDelta.function?.arguments ?? '';\n }\n\n // send delta\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCallDelta.function.arguments ?? '',\n });\n\n // check if tool call is complete\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n }\n },\n flush(controller) {\n if (state.isActiveText) {\n controller.enqueue({ type: 'text-end', id: 'text-1' });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason: state.finishReason ?? {\n unified: 'stop',\n raw: undefined,\n },\n usage: state.usage ?? {\n inputTokens: {\n total: 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n providerMetadata:\n state.provider || state.serviceTier || state.systemFingerprint\n ? {\n nordlys: {\n provider: state.provider,\n service_tier: state.serviceTier,\n system_fingerprint: state.systemFingerprint,\n },\n }\n : undefined,\n });\n },\n })\n ),\n request: { body },\n response: {\n headers: responseHeaders,\n },\n };\n }\n}\n","// Converts generic chat messages to Nordlys API format\nimport type {\n LanguageModelV3Prompt,\n LanguageModelV3ToolResultPart,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport { UnsupportedFunctionalityError } from '@ai-sdk/provider';\nimport { convertToBase64 } from '@ai-sdk/provider-utils';\nimport type { NordlysChatCompletionMessage } from './nordlys-types';\n\nfunction convertToolOutput(\n output: LanguageModelV3ToolResultPart['output']\n): string {\n switch (output.type) {\n case 'text':\n case 'error-text':\n return output.value;\n case 'json':\n case 'error-json':\n return JSON.stringify(output.value);\n case 'content':\n return JSON.stringify(output.value);\n case 'execution-denied':\n return '';\n default:\n return '';\n }\n}\n\nexport function convertToNordlysChatMessages({\n prompt,\n systemMessageMode = 'system',\n}: {\n prompt: LanguageModelV3Prompt;\n systemMessageMode?: 'system' | 'developer' | 'remove';\n}): {\n messages: NordlysChatCompletionMessage[];\n warnings: Array<SharedV3Warning>;\n} {\n const messages: NordlysChatCompletionMessage[] = [];\n const warnings: Array<SharedV3Warning> = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n switch (systemMessageMode) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n case 'developer': {\n messages.push({ role: 'developer', content });\n break;\n }\n case 'remove': {\n warnings.push({\n type: 'other',\n message: 'system messages are removed for this model',\n });\n break;\n }\n default: {\n const _exhaustiveCheck: never = systemMessageMode;\n throw new Error(\n `Unsupported system message mode: ${_exhaustiveCheck}`\n );\n }\n }\n break;\n }\n case 'user': {\n if (content.length === 1 && content[0].type === 'text') {\n messages.push({ role: 'user', content: content[0].text });\n break;\n }\n messages.push({\n role: 'user',\n content: content.map((part, index) => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n case 'file': {\n if (part.mediaType?.startsWith('image/')) {\n const mediaType =\n part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n return {\n type: 'image_url',\n image_url: {\n url:\n part.data instanceof URL\n ? part.data.toString()\n : `data:${mediaType};base64,${convertToBase64(part.data)}`,\n },\n };\n }\n if (\n part.mediaType &&\n (part.mediaType === 'audio/wav' ||\n part.mediaType === 'audio/mp3' ||\n part.mediaType === 'audio/mpeg')\n ) {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'audio file parts with URLs',\n });\n }\n return {\n type: 'input_audio',\n input_audio: {\n data: convertToBase64(part.data),\n format: part.mediaType === 'audio/wav' ? 'wav' : 'mp3',\n },\n };\n }\n if (part.mediaType && part.mediaType === 'application/pdf') {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'PDF file parts with URLs',\n });\n }\n return {\n type: 'file',\n file: {\n filename: part.filename ?? `part-${index}.pdf`,\n file_data: `data:application/pdf;base64,${convertToBase64(part.data)}`,\n },\n };\n }\n throw new UnsupportedFunctionalityError({\n functionality: `file part media type ${part.mediaType}`,\n });\n }\n default: {\n throw new Error(`Unsupported content part type`);\n }\n }\n }),\n });\n break;\n }\n case 'assistant': {\n const textParts: string[] = [];\n const reasoningParts: string[] = [];\n const generatedFiles: Array<{ media_type: string; data: string }> = [];\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n textParts.push(part.text);\n break;\n }\n case 'reasoning': {\n reasoningParts.push(part.text);\n break;\n }\n case 'file': {\n const dataString =\n typeof part.data === 'string'\n ? part.data\n : part.data instanceof URL\n ? (() => {\n throw new Error(\n 'URL data not supported for generated files'\n );\n })()\n : Buffer.from(part.data).toString('base64');\n\n generatedFiles.push({\n media_type: part.mediaType,\n data: dataString,\n });\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n }\n }\n\n const text = textParts.join('');\n const reasoning = reasoningParts.join('');\n\n const message: NordlysChatCompletionMessage = {\n role: 'assistant',\n content: text,\n ...(toolCalls.length > 0 && { tool_calls: toolCalls }),\n ...(reasoning && { reasoning_content: reasoning }),\n ...(generatedFiles.length > 0 && { generated_files: generatedFiles }),\n };\n\n messages.push(message);\n break;\n }\n case 'tool': {\n for (const toolResponse of content) {\n if (toolResponse.type === 'tool-result') {\n const contentValue = convertToolOutput(toolResponse.output);\n if (contentValue) {\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: contentValue,\n });\n }\n }\n }\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return { messages, warnings };\n}\n","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\n}\n","import type { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapNordlysFinishReason(\n reason?: string\n): LanguageModelV3FinishReason {\n switch (reason) {\n case 'stop':\n return { unified: 'stop', raw: reason };\n case 'length':\n return { unified: 'length', raw: reason };\n case 'content_filter':\n return { unified: 'content-filter', raw: reason };\n case 'tool_calls':\n return { unified: 'tool-calls', raw: reason };\n default:\n return { unified: 'other', raw: reason };\n }\n}\n","// Nordlys chat model options/types\n\nimport { z } from 'zod/v4';\n\n/**\n * Provider options for Nordlys chat models.\n */\nexport const nordlysProviderOptions = z.object({\n /**\n * Model name (required for API requests).\n */\n model: z.string().optional(),\n /**\n * Modify the likelihood of specified tokens appearing in the completion.\n */\n logit_bias: z.record(z.string(), z.number()).optional(),\n /**\n * Number of completions to generate for each prompt.\n */\n n: z.number().optional(),\n /**\n * Whether to stream responses.\n */\n stream: z.boolean().optional(),\n /**\n * Unique identifier representing your end-user.\n */\n user: z.string().optional(),\n /**\n * Audio parameter for chat completion.\n */\n audio: z\n .object({\n format: z.string().optional(),\n voice: z.string().optional(),\n })\n .optional(),\n /**\n * Whether to return log probabilities of the output tokens.\n */\n logprobs: z.boolean().optional(),\n /**\n * Maximum number of completion tokens.\n */\n max_completion_tokens: z.number().optional(),\n /**\n * Metadata for the request.\n */\n metadata: z.record(z.string(), z.string()).optional(),\n /**\n * Modalities for the request.\n */\n modalities: z.array(z.string()).optional(),\n /**\n * Whether to allow parallel tool calls.\n */\n parallel_tool_calls: z.boolean().optional(),\n /**\n * Prediction content parameter.\n */\n prediction: z\n .object({\n type: z.string().optional(),\n content: z\n .object({\n OfString: z.string().optional(),\n OfArrayOfContentParts: z\n .array(z.object({ type: z.literal('text'), text: z.string() }))\n .optional(),\n })\n .optional(),\n })\n .optional(),\n /**\n * Reasoning effort level.\n */\n reasoning_effort: z.string().optional(),\n /**\n * Response format parameter.\n */\n response_format: z\n .object({\n OfText: z.object({ type: z.string() }).optional(),\n OfJSONObject: z.object({ type: z.string() }).optional(),\n OfJSONSchema: z\n .object({\n type: z.string(),\n json_schema: z\n .object({\n name: z.string(),\n schema: z.unknown(),\n description: z.string().optional(),\n strict: z.boolean().optional(),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n /**\n * Seed for deterministic outputs.\n */\n seed: z.number().optional(),\n /**\n * Service tier to use.\n */\n service_tier: z.string().optional(),\n /**\n * Whether to store the conversation.\n */\n store: z.boolean().optional(),\n /**\n * Number of top logprobs to return.\n */\n top_logprobs: z.number().optional(),\n /**\n * Web search options.\n */\n web_search_options: z\n .object({\n search_context_size: z.string().optional(),\n user_location: z\n .object({\n type: z.string().optional(),\n approximate: z\n .object({\n city: z.string().optional(),\n country: z.string().optional(),\n region: z.string().optional(),\n timezone: z.string().optional(),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\n/**\n * Type for validated Nordlys provider options.\n */\nexport type NordlysProviderOptions = z.infer<typeof nordlysProviderOptions>;\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport const nordlysErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n param: z.any().nullish(),\n code: z.union([z.string(), z.number()]).nullish(),\n }),\n});\n\nexport type NordlysErrorData = z.infer<typeof nordlysErrorDataSchema>;\n\nexport const nordlysFailedResponseHandler: ReturnType<\n typeof createJsonErrorResponseHandler<NordlysErrorData>\n> = createJsonErrorResponseHandler({\n errorSchema: nordlysErrorDataSchema,\n errorToMessage: (data: NordlysErrorData) => data.error.message,\n});\n","import {\n type LanguageModelV3CallOptions,\n type SharedV3Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV3CallOptions['tools'];\n toolChoice?: LanguageModelV3CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: SharedV3Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV3Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const openaiCompatTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({ type: 'unsupported', feature: `tool: ${tool.name}` });\n } else if (tool.type === 'function') {\n openaiCompatTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: openaiCompatTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: openaiCompatTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: openaiCompatTools,\n toolChoice: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n"],"mappings":"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","names":["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 .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\n// Uses OpenAI compatible logic patterns but adds Nordlys-specific features (audio, PDF, developer role, reasoning, generated_files)\nimport type {\n LanguageModelV3Prompt,\n LanguageModelV3ToolResultPart,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport { UnsupportedFunctionalityError } from '@ai-sdk/provider';\nimport { convertToBase64 } from '@ai-sdk/provider-utils';\nimport type { NordlysChatCompletionMessage } from './nordlys-types';\n\n// Convert tool output using OpenAI compatible logic\nfunction convertToolOutput(\n output: LanguageModelV3ToolResultPart['output']\n): string {\n switch (output.type) {\n case 'text':\n case 'error-text':\n return output.value;\n case 'json':\n case 'error-json':\n case 'content':\n return JSON.stringify(output.value);\n case 'execution-denied':\n return output.reason ?? 'Tool execution denied.';\n default:\n return '';\n }\n}\n\nexport function convertToNordlysChatMessages({\n prompt,\n systemMessageMode = 'system',\n}: {\n prompt: LanguageModelV3Prompt;\n systemMessageMode?: 'system' | 'developer' | 'remove';\n}): {\n messages: NordlysChatCompletionMessage[];\n warnings: Array<SharedV3Warning>;\n} {\n const messages: NordlysChatCompletionMessage[] = [];\n const warnings: Array<SharedV3Warning> = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n switch (systemMessageMode) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n case 'developer': {\n messages.push({ role: 'developer', content });\n break;\n }\n case 'remove': {\n warnings.push({\n type: 'other',\n message: 'system messages are removed for this model',\n });\n break;\n }\n default: {\n const _exhaustiveCheck: never = systemMessageMode;\n throw new Error(\n `Unsupported system message mode: ${_exhaustiveCheck}`\n );\n }\n }\n break;\n }\n case 'user': {\n // Use OpenAI compatible logic: if single text part, use string content\n if (content.length === 1 && content[0].type === 'text') {\n messages.push({ role: 'user', content: content[0].text });\n break;\n }\n\n // Process content parts - use OpenAI compatible logic for images/text, add Nordlys-specific for audio/PDF\n messages.push({\n role: 'user',\n content: content.map((part, index) => {\n switch (part.type) {\n case 'text': {\n // OpenAI compatible logic\n return { type: 'text', text: part.text };\n }\n case 'file': {\n // Validate data exists\n if (part.data === undefined || part.data === null) {\n throw new Error(\n 'File part data is required but was undefined or null'\n );\n }\n\n // Handle images using OpenAI compatible logic (exact match)\n if (part.mediaType?.startsWith('image/')) {\n const mediaType =\n part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n // OpenAI compatible always calls convertToBase64 (handles strings, buffers, etc.)\n // Note: OpenAI compatible doesn't validate data existence, but we do for safety\n const url =\n part.data instanceof URL\n ? part.data.toString()\n : `data:${mediaType};base64,${convertToBase64(part.data)}`;\n\n return {\n type: 'image_url',\n image_url: { url },\n };\n }\n\n // Handle audio files (Nordlys-specific)\n if (\n part.mediaType &&\n (part.mediaType === 'audio/wav' ||\n part.mediaType === 'audio/mp3' ||\n part.mediaType === 'audio/mpeg')\n ) {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'audio file parts with URLs',\n });\n }\n\n const data =\n typeof part.data === 'string'\n ? part.data\n : convertToBase64(part.data);\n\n return {\n type: 'input_audio',\n input_audio: {\n data,\n format: (part.mediaType === 'audio/wav'\n ? 'wav'\n : 'mp3') as 'wav' | 'mp3',\n },\n };\n }\n\n // Handle PDF files (Nordlys-specific)\n if (part.mediaType && part.mediaType === 'application/pdf') {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'PDF file parts with URLs',\n });\n }\n\n const base64Data =\n typeof part.data === 'string'\n ? part.data\n : convertToBase64(part.data);\n\n return {\n type: 'file',\n file: {\n filename: part.filename ?? `part-${index}.pdf`,\n file_data: `data:application/pdf;base64,${base64Data}`,\n },\n };\n }\n\n throw new UnsupportedFunctionalityError({\n functionality: `file part media type ${part.mediaType}`,\n });\n }\n default: {\n throw new Error(`Unsupported content part type`);\n }\n }\n }),\n });\n break;\n }\n case 'assistant': {\n // Use OpenAI compatible logic for text and tool calls, add Nordlys-specific fields\n let text = '';\n const reasoningParts: string[] = [];\n const generatedFiles: Array<{ media_type: string; data: string }> = [];\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n // OpenAI compatible logic: concatenate text\n text += part.text;\n break;\n }\n case 'reasoning': {\n // Nordlys-specific: collect reasoning parts\n reasoningParts.push(part.text);\n break;\n }\n case 'file': {\n // Nordlys-specific: handle generated files\n const dataString =\n typeof part.data === 'string'\n ? part.data\n : part.data instanceof URL\n ? (() => {\n throw new Error(\n 'URL data not supported for generated files'\n );\n })()\n : Buffer.from(part.data).toString('base64');\n\n generatedFiles.push({\n media_type: part.mediaType ?? 'application/octet-stream',\n data: dataString,\n });\n break;\n }\n case 'tool-call': {\n // OpenAI compatible logic for tool calls\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n }\n }\n\n const reasoning = reasoningParts.join('');\n\n // Build message using OpenAI compatible structure + Nordlys-specific fields\n // OpenAI compatible uses: tool_calls: toolCalls.length > 0 ? toolCalls : void 0\n // We use spread operator which omits the field when empty (equivalent behavior)\n const message: NordlysChatCompletionMessage = {\n role: 'assistant',\n content: text,\n ...(toolCalls.length > 0 && { tool_calls: toolCalls }),\n ...(reasoning && { reasoning_content: reasoning }),\n ...(generatedFiles.length > 0 && { generated_files: generatedFiles }),\n };\n\n messages.push(message);\n break;\n }\n case 'tool': {\n // Use OpenAI compatible logic for tool messages\n // Note: We filter out empty tool results (Nordlys-specific behavior)\n for (const toolResponse of content) {\n if (toolResponse.type === 'tool-approval-response') {\n continue;\n }\n\n const contentValue = convertToolOutput(toolResponse.output);\n // Filter out empty tool results (original Nordlys behavior)\n if (contentValue) {\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: contentValue,\n });\n }\n }\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return { messages, warnings };\n}\n","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\n}\n","import type { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapNordlysFinishReason(\n reason?: string\n): LanguageModelV3FinishReason {\n switch (reason) {\n case 'stop':\n return { unified: 'stop', raw: reason };\n case 'length':\n return { unified: 'length', raw: reason };\n case 'content_filter':\n return { unified: 'content-filter', raw: reason };\n case 'tool_calls':\n return { unified: 'tool-calls', raw: reason };\n default:\n return { unified: 'other', raw: reason };\n }\n}\n","// Nordlys chat model options/types\n\nimport { z } from 'zod/v4';\n\n/**\n * Provider options for Nordlys chat models.\n */\nexport const nordlysProviderOptions = z.object({\n /**\n * Model name (required for API requests).\n */\n model: z.string().optional(),\n /**\n * Modify the likelihood of specified tokens appearing in the completion.\n */\n logit_bias: z.record(z.string(), z.number()).optional(),\n /**\n * Number of completions to generate for each prompt.\n */\n n: z.number().optional(),\n /**\n * Whether to stream responses.\n */\n stream: z.boolean().optional(),\n /**\n * Unique identifier representing your end-user.\n */\n user: z.string().optional(),\n /**\n * Audio parameter for chat completion.\n */\n audio: z\n .object({\n format: z.string().optional(),\n voice: z.string().optional(),\n })\n .optional(),\n /**\n * Whether to return log probabilities of the output tokens.\n */\n logprobs: z.boolean().optional(),\n /**\n * Maximum number of completion tokens.\n */\n max_completion_tokens: z.number().optional(),\n /**\n * Metadata for the request.\n */\n metadata: z.record(z.string(), z.string()).optional(),\n /**\n * Modalities for the request.\n */\n modalities: z.array(z.string()).optional(),\n /**\n * Whether to allow parallel tool calls.\n */\n parallel_tool_calls: z.boolean().optional(),\n /**\n * Prediction content parameter.\n */\n prediction: z\n .object({\n type: z.string().optional(),\n content: z\n .object({\n OfString: z.string().optional(),\n OfArrayOfContentParts: z\n .array(z.object({ type: z.literal('text'), text: z.string() }))\n .optional(),\n })\n .optional(),\n })\n .optional(),\n /**\n * Reasoning effort level.\n */\n reasoning_effort: z.string().optional(),\n /**\n * Response format parameter.\n */\n response_format: z\n .object({\n OfText: z.object({ type: z.string() }).optional(),\n OfJSONObject: z.object({ type: z.string() }).optional(),\n OfJSONSchema: z\n .object({\n type: z.string(),\n json_schema: z\n .object({\n name: z.string(),\n schema: z.unknown(),\n description: z.string().optional(),\n strict: z.boolean().optional(),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n /**\n * Seed for deterministic outputs.\n */\n seed: z.number().optional(),\n /**\n * Service tier to use.\n */\n service_tier: z.string().optional(),\n /**\n * Whether to store the conversation.\n */\n store: z.boolean().optional(),\n /**\n * Number of top logprobs to return.\n */\n top_logprobs: z.number().optional(),\n /**\n * Web search options.\n */\n web_search_options: z\n .object({\n search_context_size: z.string().optional(),\n user_location: z\n .object({\n type: z.string().optional(),\n approximate: z\n .object({\n city: z.string().optional(),\n country: z.string().optional(),\n region: z.string().optional(),\n timezone: z.string().optional(),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\n/**\n * Type for validated Nordlys provider options.\n */\nexport type NordlysProviderOptions = z.infer<typeof nordlysProviderOptions>;\n\n/**\n * Settings that can be set at model creation time.\n * These settings will be merged with call-level options, with call-level taking precedence.\n */\nexport interface NordlysChatSettings {\n /**\n * Temperature setting for the model.\n */\n temperature?: number;\n /**\n * Maximum number of output tokens.\n */\n maxOutputTokens?: number;\n /**\n * Top-p sampling parameter.\n */\n topP?: number;\n /**\n * Top-k sampling parameter.\n */\n topK?: number;\n /**\n * Frequency penalty.\n */\n frequencyPenalty?: number;\n /**\n * Presence penalty.\n */\n presencePenalty?: number;\n /**\n * Stop sequences.\n */\n stopSequences?: string[];\n /**\n * Provider-specific options.\n */\n providerOptions?: NordlysProviderOptions;\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport const nordlysErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n param: z.any().nullish(),\n code: z.union([z.string(), z.number()]).nullish(),\n }),\n});\n\nexport type NordlysErrorData = z.infer<typeof nordlysErrorDataSchema>;\n\nexport const nordlysFailedResponseHandler: ReturnType<\n typeof createJsonErrorResponseHandler<NordlysErrorData>\n> = createJsonErrorResponseHandler({\n errorSchema: nordlysErrorDataSchema,\n errorToMessage: (data: NordlysErrorData) => data.error.message,\n});\n","import {\n type LanguageModelV3CallOptions,\n type SharedV3Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV3CallOptions['tools'];\n toolChoice?: LanguageModelV3CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: SharedV3Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV3Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const openaiCompatTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({ type: 'unsupported', feature: `tool: ${tool.name}` });\n } else if (tool.type === 'function') {\n openaiCompatTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: openaiCompatTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: openaiCompatTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: openaiCompatTools,\n toolChoice: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n"],"mappings":"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","names":["z","_a","z","UnsupportedFunctionalityError","z","toolCall"]}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nordlys-labs/nordlys-ai-provider",
|
|
3
3
|
"author": "Nordlys",
|
|
4
|
-
"version": "0.1
|
|
4
|
+
"version": "0.2.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
|
-
"url": "git+https://github.com/
|
|
8
|
+
"url": "git+https://github.com/Nordlys-Labs/nordlys-ai-provider.git"
|
|
9
9
|
},
|
|
10
10
|
"main": "./dist/index.js",
|
|
11
11
|
"module": "./dist/index.mjs",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"vitest": "^4.0.16"
|
|
33
33
|
},
|
|
34
34
|
"bugs": {
|
|
35
|
-
"url": "https://github.com/
|
|
35
|
+
"url": "https://github.com/Nordlys-Labs/nordlys-ai-provider/issues"
|
|
36
36
|
},
|
|
37
37
|
"engines": {
|
|
38
38
|
"node": ">=18"
|