@nordlys-labs/nordlys-ai-provider 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/nordlys-provider.ts","../src/nordlys-chat-language-model.ts","../src/convert-to-nordlys-chat-messages.ts","../src/get-response-metadata.ts","../src/map-nordlys-finish-reason.ts","../src/nordlys-chat-options.ts","../src/nordlys-error.ts","../src/nordlys-prepare-tools.ts"],"sourcesContent":["export type {\n NordlysProvider,\n NordlysProviderSettings,\n} from './nordlys-provider';\nexport { createNordlys, nordlys } from './nordlys-provider';\nexport type * from './nordlys-types';\n","import type {\n EmbeddingModelV3,\n LanguageModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport { NoSuchModelError } from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport { loadApiKey, withoutTrailingSlash } from '@ai-sdk/provider-utils';\nimport { NordlysChatLanguageModel } from './nordlys-chat-language-model';\n\nexport type NordlysChatModelId = string;\n\nexport interface NordlysProvider extends ProviderV3 {\n (modelId: string): LanguageModelV3;\n\n /**\n * Creates a model for text generation with Nordlys models.\n */\n languageModel: (modelId: string) => LanguageModelV3;\n\n /**\n * Creates a chat model with Nordlys models.\n */\n chat: (modelId: string) => LanguageModelV3;\n\n /**\n * Text embedding is not currently supported by the Nordlys provider.\n */\n embeddingModel: (modelId: string) => EmbeddingModelV3;\n}\n\nexport interface NordlysProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers.\n * The default prefix is your Nordlys API endpoint.\n */\n baseURL?: string;\n\n /**\n * API key for the Nordlys service.\n * It defaults to the `NORDLYS_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n * Create a Nordlys AI provider instance.\n */\nexport function createNordlys(\n options: NordlysProviderSettings = {}\n): NordlysProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://backend.mangoplant-a7a21605.swedencentral.azurecontainerapps.io/v1';\n\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'NORDLYS_API_KEY',\n description: 'Nordlys',\n })}`,\n 'Content-Type': 'application/json',\n ...options.headers,\n });\n\n const createChatModel = (modelId: string) =>\n new NordlysChatLanguageModel(modelId, {\n provider: 'nordlys.chat',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: string) {\n if (new.target) {\n throw new Error(\n 'The Nordlys model function cannot be called with the new keyword.'\n );\n }\n\n return createChatModel(modelId);\n };\n\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n provider.specificationVersion = 'v3' as const;\n\n return Object.freeze(provider);\n}\n\n/**\n * Default Nordlys provider instance.\n */\nexport const nordlys = createNordlys();\n","import {\n InvalidResponseDataError,\n type LanguageModelV3,\n type LanguageModelV3Content,\n type LanguageModelV3FinishReason,\n type LanguageModelV3Usage,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { convertToNordlysChatMessages } from './convert-to-nordlys-chat-messages';\nimport { getResponseMetadata } from './get-response-metadata';\nimport { mapNordlysFinishReason } from './map-nordlys-finish-reason';\nimport { nordlysProviderOptions } from './nordlys-chat-options';\nimport { nordlysFailedResponseHandler } from './nordlys-error';\nimport { prepareTools } from './nordlys-prepare-tools';\nimport type { NordlysChatCompletionRequest } from './nordlys-types';\n\ninterface NordlysChatConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n defaultProvider?: string;\n}\n\nconst nordlysChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z\n .array(\n z.object({\n message: z.object({\n role: z.enum(['assistant', '']).nullish(),\n content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n id: z.string().nullish(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n })\n )\n .nullish(),\n reasoning_content: z.string().optional(),\n generated_files: z\n .array(\n z.object({\n media_type: z.string(),\n data: z.string(),\n })\n )\n .optional(),\n }),\n index: z.number(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n })\n ),\n })\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n })\n )\n .optional(),\n usage: z\n .object({\n completion_tokens: z.number(),\n prompt_tokens: z.number(),\n total_tokens: z.number(),\n reasoning_tokens: z.number().optional(),\n cached_input_tokens: z.number().optional(),\n })\n .optional(),\n system_fingerprint: z.string().optional(),\n service_tier: z.string().optional(),\n provider: z.string().optional(),\n error: z\n .object({\n message: z.string(),\n type: z.string(),\n param: z.any().nullish(),\n code: z.any().nullish(),\n })\n .optional(),\n});\n\nconst nordlysChatChunkSchema = z.union([\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z\n .object({\n role: z.enum(['assistant', '']).nullish(),\n content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n type: z\n .union([z.literal('function'), z.literal('')])\n .nullish(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n })\n )\n .nullish(),\n reasoning_content: z.string().optional(),\n generated_files: z\n .array(\n z.object({\n media_type: z.string(),\n data: z.string(),\n })\n )\n .optional(),\n })\n .nullish(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n })\n ),\n })\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullish(),\n index: z.number(),\n })\n ),\n usage: z\n .object({\n completion_tokens: z.number(),\n prompt_tokens: z.number(),\n total_tokens: z.number(),\n reasoning_tokens: z.number().optional(),\n cached_input_tokens: z.number().optional(),\n })\n .optional(),\n provider: z.string().optional(),\n service_tier: z.string().optional(),\n system_fingerprint: z.string().optional(),\n }),\n z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n param: z.any().nullish(),\n code: z.any().nullish(),\n }),\n provider: z.string().optional(),\n }),\n]);\n\nexport class NordlysChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n readonly modelId: string;\n private readonly config: NordlysChatConfig;\n\n constructor(modelId: string, config: NordlysChatConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'application/pdf': [/^https:\\/\\/.*$/],\n };\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n providerOptions,\n tools,\n toolChoice,\n }: Parameters<LanguageModelV3['doGenerate']>[0]) {\n const warnings: SharedV3Warning[] = [];\n\n // Warn for unsupported settings\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n if (responseFormat != null) {\n warnings.push({ type: 'unsupported', feature: 'responseFormat' });\n }\n\n // Parse provider options with zod schema (flat, not nested)\n const result = nordlysProviderOptions.safeParse(providerOptions ?? {});\n const nordlysOptions = result.success ? result.data : {};\n\n // Use modelId from constructor (model is set when creating the model instance)\n\n const {\n tools: nordlysTools,\n toolChoice: nordlysToolChoice,\n toolWarnings,\n } = prepareTools({\n tools,\n toolChoice,\n });\n warnings.push(...toolWarnings);\n\n // Convert messages\n const { messages, warnings: messageWarnings } =\n convertToNordlysChatMessages({ prompt });\n warnings.push(...messageWarnings);\n\n // Standardized settings\n const standardizedArgs = {\n messages,\n model: this.modelId,\n max_tokens:\n typeof maxOutputTokens === 'number' ? maxOutputTokens : undefined,\n max_completion_tokens: nordlysOptions.max_completion_tokens,\n temperature,\n top_p: topP,\n stop: stopSequences,\n presence_penalty: presencePenalty,\n frequency_penalty: frequencyPenalty,\n user: nordlysOptions.user,\n tools: nordlysTools,\n tool_choice: nordlysToolChoice,\n };\n\n // Map new provider option fields\n const args: NordlysChatCompletionRequest = {\n ...standardizedArgs,\n ...(nordlysOptions.logit_bias\n ? { logit_bias: nordlysOptions.logit_bias }\n : {}),\n ...(nordlysOptions.audio ? { audio: nordlysOptions.audio } : {}),\n ...(nordlysOptions.logprobs !== undefined\n ? { logprobs: nordlysOptions.logprobs }\n : {}),\n ...(nordlysOptions.metadata ? { metadata: nordlysOptions.metadata } : {}),\n ...(nordlysOptions.modalities\n ? { modalities: nordlysOptions.modalities }\n : {}),\n ...(nordlysOptions.parallel_tool_calls !== undefined\n ? { parallel_tool_calls: nordlysOptions.parallel_tool_calls }\n : {}),\n ...(nordlysOptions.prediction\n ? { prediction: nordlysOptions.prediction }\n : {}),\n ...(nordlysOptions.reasoning_effort\n ? { reasoning_effort: nordlysOptions.reasoning_effort }\n : {}),\n ...(nordlysOptions.response_format\n ? { response_format: nordlysOptions.response_format }\n : {}),\n ...(nordlysOptions.seed !== undefined\n ? { seed: nordlysOptions.seed }\n : {}),\n ...(nordlysOptions.service_tier\n ? { service_tier: nordlysOptions.service_tier }\n : {}),\n ...(nordlysOptions.store !== undefined\n ? { store: nordlysOptions.store }\n : {}),\n ...(nordlysOptions.top_logprobs !== undefined\n ? { top_logprobs: nordlysOptions.top_logprobs }\n : {}),\n ...(nordlysOptions.web_search_options\n ? { web_search_options: nordlysOptions.web_search_options }\n : {}),\n };\n\n return {\n args,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV3['doGenerate']>[0]\n ): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>> {\n const { args: body, warnings } = await this.getArgs(options);\n\n const { responseHeaders, value, rawValue } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: nordlysFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n nordlysChatResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n if (!value) {\n throw new Error('Failed to parse Nordlys API response');\n }\n\n // Handle error responses\n if (value.error) {\n throw new Error(`Nordlys API Error: ${value.error.message}`);\n }\n\n if (!value.choices || value.choices.length === 0) {\n throw new Error('No choices returned from Nordlys API');\n }\n\n const choice = value.choices[0];\n const content: Array<LanguageModelV3Content> = [];\n\n if (choice.message?.content) {\n content.push({ type: 'text', text: choice.message.content });\n }\n\n if (choice.message?.reasoning_content) {\n content.push({\n type: 'reasoning',\n text: choice.message.reasoning_content,\n });\n }\n\n if (\n choice.message?.generated_files &&\n choice.message.generated_files.length > 0\n ) {\n for (const file of choice.message.generated_files) {\n content.push({\n type: 'file',\n mediaType: file.media_type,\n data: file.data,\n });\n }\n }\n\n if (choice.message?.tool_calls && choice.message.tool_calls.length > 0) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id || '',\n toolName: toolCall.function?.name || '',\n input: toolCall.function?.arguments || '{}',\n });\n }\n }\n\n // Extract usage information\n const {\n prompt_tokens,\n completion_tokens,\n reasoning_tokens,\n cached_input_tokens,\n } = value.usage ?? {};\n\n return {\n content,\n finishReason: choice.finish_reason\n ? mapNordlysFinishReason(choice.finish_reason)\n : { unified: 'stop', raw: undefined },\n usage:\n value.usage && prompt_tokens != null\n ? {\n inputTokens: {\n total: prompt_tokens,\n noCache:\n cached_input_tokens != null\n ? prompt_tokens - cached_input_tokens\n : undefined,\n cacheRead: cached_input_tokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completion_tokens,\n text:\n completion_tokens != null && reasoning_tokens != null\n ? completion_tokens - reasoning_tokens\n : undefined,\n reasoning: reasoning_tokens,\n },\n }\n : {\n inputTokens: {\n total: 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: { total: 0, text: undefined, reasoning: undefined },\n },\n providerMetadata: value.provider\n ? {\n nordlys: {\n provider: value.provider,\n service_tier: value.service_tier,\n system_fingerprint: value.system_fingerprint,\n },\n }\n : undefined,\n request: { body },\n response: {\n id: value.id ?? '',\n modelId: value.model ?? '',\n timestamp: new Date((value.created ?? 0) * 1000),\n headers: responseHeaders,\n body: rawValue,\n },\n warnings,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV3['doStream']>[0]\n ): Promise<Awaited<ReturnType<LanguageModelV3['doStream']>>> {\n const { args, warnings } = await this.getArgs(options);\n const body = {\n ...args,\n stream: true,\n stream_options: { include_usage: true },\n };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: nordlysFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n nordlysChatChunkSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n hasFinished: boolean;\n }> = [];\n\n const state: {\n finishReason: LanguageModelV3FinishReason;\n usage: LanguageModelV3Usage;\n isFirstChunk: boolean;\n isActiveText: boolean;\n provider: string | undefined;\n serviceTier: string | undefined;\n systemFingerprint: string | undefined;\n } = {\n finishReason: { unified: 'other', raw: undefined },\n usage: {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n },\n isFirstChunk: true,\n isActiveText: false,\n provider: undefined,\n serviceTier: undefined,\n systemFingerprint: undefined,\n };\n\n return {\n stream: response.pipeThrough(\n new TransformStream({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n async transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n state.finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n // Handle error responses\n if ('error' in value) {\n state.finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({\n type: 'error',\n error: new Error(value.error.message),\n });\n return;\n }\n\n if (state.isFirstChunk) {\n state.isFirstChunk = false;\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata({\n id: value.id ?? '',\n model: value.model ?? '',\n created: value.created ?? 0,\n }),\n });\n }\n\n if (value.usage != null) {\n state.usage.inputTokens.total =\n value.usage.prompt_tokens ?? undefined;\n state.usage.inputTokens.cacheRead =\n value.usage.cached_input_tokens ?? undefined;\n state.usage.inputTokens.noCache =\n value.usage.prompt_tokens != null &&\n value.usage.cached_input_tokens != null\n ? value.usage.prompt_tokens - value.usage.cached_input_tokens\n : undefined;\n state.usage.outputTokens.total =\n value.usage.completion_tokens ?? undefined;\n state.usage.outputTokens.reasoning =\n value.usage.reasoning_tokens ?? undefined;\n state.usage.outputTokens.text =\n value.usage.completion_tokens != null &&\n value.usage.reasoning_tokens != null\n ? value.usage.completion_tokens - value.usage.reasoning_tokens\n : undefined;\n }\n\n if (value.provider) {\n state.provider = value.provider;\n }\n\n if (value.service_tier) {\n state.serviceTier = value.service_tier;\n }\n\n if (value.system_fingerprint) {\n state.systemFingerprint = value.system_fingerprint;\n }\n\n const choice = value.choices[0];\n if (choice?.finish_reason != null) {\n state.finishReason = mapNordlysFinishReason(choice.finish_reason);\n }\n\n if (!choice?.delta) {\n return;\n }\n\n const delta = choice.delta;\n\n if (delta.content != null) {\n if (!state.isActiveText) {\n controller.enqueue({ type: 'text-start', id: 'text-1' });\n state.isActiveText = true;\n }\n controller.enqueue({\n type: 'text-delta',\n id: 'text-1',\n delta: delta.content,\n });\n }\n\n if (delta.reasoning_content != null) {\n controller.enqueue({\n type: 'reasoning-delta',\n id: 'reasoning-1',\n delta: delta.reasoning_content,\n });\n }\n\n if (\n delta.generated_files != null &&\n Array.isArray(delta.generated_files)\n ) {\n for (const file of delta.generated_files) {\n controller.enqueue({\n type: 'file',\n mediaType: file.media_type,\n data: file.data,\n });\n }\n }\n\n if (delta.tool_calls != null && Array.isArray(delta.tool_calls)) {\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index;\n\n // Tool call start. Nordlys returns all information except the arguments in the first chunk.\n if (toolCalls[index] == null) {\n if (\n toolCallDelta.type !== 'function' &&\n toolCallDelta.type !== ''\n ) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name,\n });\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null\n ) {\n // send delta if the argument text has already started:\n if (toolCall.function.arguments.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\n });\n }\n\n // check if tool call is complete\n // (some providers send the full tool call in one chunk):\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n\n continue;\n }\n\n // existing tool call, merge if not finished\n const toolCall = toolCalls[index];\n\n if (toolCall.hasFinished) {\n continue;\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function.arguments +=\n toolCallDelta.function?.arguments ?? '';\n }\n\n // send delta\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCallDelta.function.arguments ?? '',\n });\n\n // check if tool call is complete\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n }\n },\n flush(controller) {\n if (state.isActiveText) {\n controller.enqueue({ type: 'text-end', id: 'text-1' });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason: state.finishReason ?? {\n unified: 'stop',\n raw: undefined,\n },\n usage: state.usage ?? {\n inputTokens: {\n total: 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n providerMetadata:\n state.provider || state.serviceTier || state.systemFingerprint\n ? {\n nordlys: {\n provider: state.provider,\n service_tier: state.serviceTier,\n system_fingerprint: state.systemFingerprint,\n },\n }\n : undefined,\n });\n },\n })\n ),\n request: { body },\n response: {\n headers: responseHeaders,\n },\n };\n }\n}\n","// Converts generic chat messages to Nordlys API format\nimport type {\n LanguageModelV3Prompt,\n LanguageModelV3ToolResultPart,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport { UnsupportedFunctionalityError } from '@ai-sdk/provider';\nimport { convertToBase64 } from '@ai-sdk/provider-utils';\nimport type { NordlysChatCompletionMessage } from './nordlys-types';\n\nfunction convertToolOutput(\n output: LanguageModelV3ToolResultPart['output']\n): string {\n switch (output.type) {\n case 'text':\n case 'error-text':\n return output.value;\n case 'json':\n case 'error-json':\n return JSON.stringify(output.value);\n case 'content':\n return JSON.stringify(output.value);\n case 'execution-denied':\n return '';\n default:\n return '';\n }\n}\n\nexport function convertToNordlysChatMessages({\n prompt,\n systemMessageMode = 'system',\n}: {\n prompt: LanguageModelV3Prompt;\n systemMessageMode?: 'system' | 'developer' | 'remove';\n}): {\n messages: NordlysChatCompletionMessage[];\n warnings: Array<SharedV3Warning>;\n} {\n const messages: NordlysChatCompletionMessage[] = [];\n const warnings: Array<SharedV3Warning> = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n switch (systemMessageMode) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n case 'developer': {\n messages.push({ role: 'developer', content });\n break;\n }\n case 'remove': {\n warnings.push({\n type: 'other',\n message: 'system messages are removed for this model',\n });\n break;\n }\n default: {\n const _exhaustiveCheck: never = systemMessageMode;\n throw new Error(\n `Unsupported system message mode: ${_exhaustiveCheck}`\n );\n }\n }\n break;\n }\n case 'user': {\n if (content.length === 1 && content[0].type === 'text') {\n messages.push({ role: 'user', content: content[0].text });\n break;\n }\n messages.push({\n role: 'user',\n content: content.map((part, index) => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n case 'file': {\n if (part.mediaType?.startsWith('image/')) {\n const mediaType =\n part.mediaType === 'image/*'\n ? 'image/jpeg'\n : part.mediaType;\n return {\n type: 'image_url',\n image_url: {\n url:\n part.data instanceof URL\n ? part.data.toString()\n : `data:${mediaType};base64,${convertToBase64(part.data)}`,\n },\n };\n }\n if (\n part.mediaType &&\n (part.mediaType === 'audio/wav' ||\n part.mediaType === 'audio/mp3' ||\n part.mediaType === 'audio/mpeg')\n ) {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'audio file parts with URLs',\n });\n }\n return {\n type: 'input_audio',\n input_audio: {\n data: convertToBase64(part.data),\n format: part.mediaType === 'audio/wav' ? 'wav' : 'mp3',\n },\n };\n }\n if (part.mediaType && part.mediaType === 'application/pdf') {\n if (part.data instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'PDF file parts with URLs',\n });\n }\n return {\n type: 'file',\n file: {\n filename: part.filename ?? `part-${index}.pdf`,\n file_data: `data:application/pdf;base64,${convertToBase64(part.data)}`,\n },\n };\n }\n throw new UnsupportedFunctionalityError({\n functionality: `file part media type ${part.mediaType}`,\n });\n }\n default: {\n throw new Error(`Unsupported content part type`);\n }\n }\n }),\n });\n break;\n }\n case 'assistant': {\n const textParts: string[] = [];\n const reasoningParts: string[] = [];\n const generatedFiles: Array<{ media_type: string; data: string }> = [];\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n textParts.push(part.text);\n break;\n }\n case 'reasoning': {\n reasoningParts.push(part.text);\n break;\n }\n case 'file': {\n const dataString =\n typeof part.data === 'string'\n ? part.data\n : part.data instanceof URL\n ? (() => {\n throw new Error(\n 'URL data not supported for generated files'\n );\n })()\n : Buffer.from(part.data).toString('base64');\n\n generatedFiles.push({\n media_type: part.mediaType,\n data: dataString,\n });\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n }\n }\n\n const text = textParts.join('');\n const reasoning = reasoningParts.join('');\n\n const message: NordlysChatCompletionMessage = {\n role: 'assistant',\n content: text,\n ...(toolCalls.length > 0 && { tool_calls: toolCalls }),\n ...(reasoning && { reasoning_content: reasoning }),\n ...(generatedFiles.length > 0 && { generated_files: generatedFiles }),\n };\n\n messages.push(message);\n break;\n }\n case 'tool': {\n for (const toolResponse of content) {\n if (toolResponse.type === 'tool-result') {\n const contentValue = convertToolOutput(toolResponse.output);\n if (contentValue) {\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: contentValue,\n });\n }\n }\n }\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return { messages, warnings };\n}\n","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\n}\n","import type { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapNordlysFinishReason(\n reason?: string\n): LanguageModelV3FinishReason {\n switch (reason) {\n case 'stop':\n return { unified: 'stop', raw: reason };\n case 'length':\n return { unified: 'length', raw: reason };\n case 'content_filter':\n return { unified: 'content-filter', raw: reason };\n case 'tool_calls':\n return { unified: 'tool-calls', raw: reason };\n default:\n return { unified: 'other', raw: reason };\n }\n}\n","// Nordlys chat model options/types\n\nimport { z } from 'zod/v4';\n\n/**\n * Provider options for Nordlys chat models.\n */\nexport const nordlysProviderOptions = z.object({\n /**\n * Model name (required for API requests).\n */\n model: z.string().optional(),\n /**\n * Modify the likelihood of specified tokens appearing in the completion.\n */\n logit_bias: z.record(z.string(), z.number()).optional(),\n /**\n * Number of completions to generate for each prompt.\n */\n n: z.number().optional(),\n /**\n * Whether to stream responses.\n */\n stream: z.boolean().optional(),\n /**\n * Unique identifier representing your end-user.\n */\n user: z.string().optional(),\n /**\n * Audio parameter for chat completion.\n */\n audio: z\n .object({\n format: z.string().optional(),\n voice: z.string().optional(),\n })\n .optional(),\n /**\n * Whether to return log probabilities of the output tokens.\n */\n logprobs: z.boolean().optional(),\n /**\n * Maximum number of completion tokens.\n */\n max_completion_tokens: z.number().optional(),\n /**\n * Metadata for the request.\n */\n metadata: z.record(z.string(), z.string()).optional(),\n /**\n * Modalities for the request.\n */\n modalities: z.array(z.string()).optional(),\n /**\n * Whether to allow parallel tool calls.\n */\n parallel_tool_calls: z.boolean().optional(),\n /**\n * Prediction content parameter.\n */\n prediction: z\n .object({\n type: z.string().optional(),\n content: z\n .object({\n OfString: z.string().optional(),\n OfArrayOfContentParts: z\n .array(z.object({ type: z.literal('text'), text: z.string() }))\n .optional(),\n })\n .optional(),\n })\n .optional(),\n /**\n * Reasoning effort level.\n */\n reasoning_effort: z.string().optional(),\n /**\n * Response format parameter.\n */\n response_format: z\n .object({\n OfText: z.object({ type: z.string() }).optional(),\n OfJSONObject: z.object({ type: z.string() }).optional(),\n OfJSONSchema: z\n .object({\n type: z.string(),\n json_schema: z\n .object({\n name: z.string(),\n schema: z.unknown(),\n description: z.string().optional(),\n strict: z.boolean().optional(),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n /**\n * Seed for deterministic outputs.\n */\n seed: z.number().optional(),\n /**\n * Service tier to use.\n */\n service_tier: z.string().optional(),\n /**\n * Whether to store the conversation.\n */\n store: z.boolean().optional(),\n /**\n * Number of top logprobs to return.\n */\n top_logprobs: z.number().optional(),\n /**\n * Web search options.\n */\n web_search_options: z\n .object({\n search_context_size: z.string().optional(),\n user_location: z\n .object({\n type: z.string().optional(),\n approximate: z\n .object({\n city: z.string().optional(),\n country: z.string().optional(),\n region: z.string().optional(),\n timezone: z.string().optional(),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\n/**\n * Type for validated Nordlys provider options.\n */\nexport type NordlysProviderOptions = z.infer<typeof nordlysProviderOptions>;\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport const nordlysErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n param: z.any().nullish(),\n code: z.union([z.string(), z.number()]).nullish(),\n }),\n});\n\nexport type NordlysErrorData = z.infer<typeof nordlysErrorDataSchema>;\n\nexport const nordlysFailedResponseHandler: ReturnType<\n typeof createJsonErrorResponseHandler<NordlysErrorData>\n> = createJsonErrorResponseHandler({\n errorSchema: nordlysErrorDataSchema,\n errorToMessage: (data: NordlysErrorData) => data.error.message,\n});\n","import {\n type LanguageModelV3CallOptions,\n type SharedV3Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV3CallOptions['tools'];\n toolChoice?: LanguageModelV3CallOptions['toolChoice'];\n}): {\n tools:\n | undefined\n | Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n toolChoice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: SharedV3Warning[];\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n tools = tools?.length ? tools : undefined;\n\n const toolWarnings: SharedV3Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const openaiCompatTools: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }> = [];\n\n for (const tool of tools) {\n if (tool.type === 'provider') {\n toolWarnings.push({ type: 'unsupported', feature: `tool: ${tool.name}` });\n } else if (tool.type === 'function') {\n openaiCompatTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: openaiCompatTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: openaiCompatTools, toolChoice: type, toolWarnings };\n case 'tool':\n return {\n tools: openaiCompatTools,\n toolChoice: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACKA,IAAAA,mBAAiC;AAEjC,IAAAC,yBAAiD;;;ACPjD,IAAAC,mBAOO;AAEP,IAAAC,yBAOO;AACP,IAAAC,cAAkB;;;ACXlB,sBAA8C;AAC9C,4BAAgC;AAGhC,SAAS,kBACP,QACQ;AACR,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK;AAAA,IACL,KAAK;AACH,aAAO,OAAO;AAAA,IAChB,KAAK;AAAA,IACL,KAAK;AACH,aAAO,KAAK,UAAU,OAAO,KAAK;AAAA,IACpC,KAAK;AACH,aAAO,KAAK,UAAU,OAAO,KAAK;AAAA,IACpC,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA,oBAAoB;AACtB,GAME;AACA,QAAM,WAA2C,CAAC;AAClD,QAAM,WAAmC,CAAC;AAE1C,aAAW,EAAE,MAAM,QAAQ,KAAK,QAAQ;AACtC,YAAQ,MAAM;AAAA,MACZ,KAAK,UAAU;AACb,gBAAQ,mBAAmB;AAAA,UACzB,KAAK,UAAU;AACb,qBAAS,KAAK,EAAE,MAAM,UAAU,QAAQ,CAAC;AACzC;AAAA,UACF;AAAA,UACA,KAAK,aAAa;AAChB,qBAAS,KAAK,EAAE,MAAM,aAAa,QAAQ,CAAC;AAC5C;AAAA,UACF;AAAA,UACA,KAAK,UAAU;AACb,qBAAS,KAAK;AAAA,cACZ,MAAM;AAAA,cACN,SAAS;AAAA,YACX,CAAC;AACD;AAAA,UACF;AAAA,UACA,SAAS;AACP,kBAAM,mBAA0B;AAChC,kBAAM,IAAI;AAAA,cACR,oCAAoC,gBAAgB;AAAA,YACtD;AAAA,UACF;AAAA,QACF;AACA;AAAA,MACF;AAAA,MACA,KAAK,QAAQ;AACX,YAAI,QAAQ,WAAW,KAAK,QAAQ,CAAC,EAAE,SAAS,QAAQ;AACtD,mBAAS,KAAK,EAAE,MAAM,QAAQ,SAAS,QAAQ,CAAC,EAAE,KAAK,CAAC;AACxD;AAAA,QACF;AACA,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,QAAQ,IAAI,CAAC,MAAM,UAAU;AA7EhD;AA8EY,oBAAQ,KAAK,MAAM;AAAA,cACjB,KAAK,QAAQ;AACX,uBAAO,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK;AAAA,cACzC;AAAA,cACA,KAAK,QAAQ;AACX,qBAAI,UAAK,cAAL,mBAAgB,WAAW,WAAW;AACxC,wBAAM,YACJ,KAAK,cAAc,YACf,eACA,KAAK;AACX,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,WAAW;AAAA,sBACT,KACE,KAAK,gBAAgB,MACjB,KAAK,KAAK,SAAS,IACnB,QAAQ,SAAS,eAAW,uCAAgB,KAAK,IAAI,CAAC;AAAA,oBAC9D;AAAA,kBACF;AAAA,gBACF;AACA,oBACE,KAAK,cACJ,KAAK,cAAc,eAClB,KAAK,cAAc,eACnB,KAAK,cAAc,eACrB;AACA,sBAAI,KAAK,gBAAgB,KAAK;AAC5B,0BAAM,IAAI,8CAA8B;AAAA,sBACtC,eAAe;AAAA,oBACjB,CAAC;AAAA,kBACH;AACA,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,aAAa;AAAA,sBACX,UAAM,uCAAgB,KAAK,IAAI;AAAA,sBAC/B,QAAQ,KAAK,cAAc,cAAc,QAAQ;AAAA,oBACnD;AAAA,kBACF;AAAA,gBACF;AACA,oBAAI,KAAK,aAAa,KAAK,cAAc,mBAAmB;AAC1D,sBAAI,KAAK,gBAAgB,KAAK;AAC5B,0BAAM,IAAI,8CAA8B;AAAA,sBACtC,eAAe;AAAA,oBACjB,CAAC;AAAA,kBACH;AACA,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,MAAM;AAAA,sBACJ,WAAU,UAAK,aAAL,YAAiB,QAAQ,KAAK;AAAA,sBACxC,WAAW,mCAA+B,uCAAgB,KAAK,IAAI,CAAC;AAAA,oBACtE;AAAA,kBACF;AAAA,gBACF;AACA,sBAAM,IAAI,8CAA8B;AAAA,kBACtC,eAAe,wBAAwB,KAAK,SAAS;AAAA,gBACvD,CAAC;AAAA,cACH;AAAA,cACA,SAAS;AACP,sBAAM,IAAI,MAAM,+BAA+B;AAAA,cACjD;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AACD;AAAA,MACF;AAAA,MACA,KAAK,aAAa;AAChB,cAAM,YAAsB,CAAC;AAC7B,cAAM,iBAA2B,CAAC;AAClC,cAAM,iBAA8D,CAAC;AACrE,cAAM,YAID,CAAC;AAEN,mBAAW,QAAQ,SAAS;AAC1B,kBAAQ,KAAK,MAAM;AAAA,YACjB,KAAK,QAAQ;AACX,wBAAU,KAAK,KAAK,IAAI;AACxB;AAAA,YACF;AAAA,YACA,KAAK,aAAa;AAChB,6BAAe,KAAK,KAAK,IAAI;AAC7B;AAAA,YACF;AAAA,YACA,KAAK,QAAQ;AACX,oBAAM,aACJ,OAAO,KAAK,SAAS,WACjB,KAAK,OACL,KAAK,gBAAgB,OAClB,MAAM;AACL,sBAAM,IAAI;AAAA,kBACR;AAAA,gBACF;AAAA,cACF,GAAG,IACH,OAAO,KAAK,KAAK,IAAI,EAAE,SAAS,QAAQ;AAEhD,6BAAe,KAAK;AAAA,gBAClB,YAAY,KAAK;AAAA,gBACjB,MAAM;AAAA,cACR,CAAC;AACD;AAAA,YACF;AAAA,YACA,KAAK,aAAa;AAChB,wBAAU,KAAK;AAAA,gBACb,IAAI,KAAK;AAAA,gBACT,MAAM;AAAA,gBACN,UAAU;AAAA,kBACR,MAAM,KAAK;AAAA,kBACX,WAAW,KAAK,UAAU,KAAK,KAAK;AAAA,gBACtC;AAAA,cACF,CAAC;AACD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,cAAM,OAAO,UAAU,KAAK,EAAE;AAC9B,cAAM,YAAY,eAAe,KAAK,EAAE;AAExC,cAAM,UAAwC;AAAA,UAC5C,MAAM;AAAA,UACN,SAAS;AAAA,UACT,GAAI,UAAU,SAAS,KAAK,EAAE,YAAY,UAAU;AAAA,UACpD,GAAI,aAAa,EAAE,mBAAmB,UAAU;AAAA,UAChD,GAAI,eAAe,SAAS,KAAK,EAAE,iBAAiB,eAAe;AAAA,QACrE;AAEA,iBAAS,KAAK,OAAO;AACrB;AAAA,MACF;AAAA,MACA,KAAK,QAAQ;AACX,mBAAW,gBAAgB,SAAS;AAClC,cAAI,aAAa,SAAS,eAAe;AACvC,kBAAM,eAAe,kBAAkB,aAAa,MAAM;AAC1D,gBAAI,cAAc;AAChB,uBAAS,KAAK;AAAA,gBACZ,MAAM;AAAA,gBACN,cAAc,aAAa;AAAA,gBAC3B,SAAS;AAAA,cACX,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF;AACA;AAAA,MACF;AAAA,MACA,SAAS;AACP,cAAM,mBAA0B;AAChC,cAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,SAAS;AAC9B;;;ACxOO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SAAO;AAAA,IACL,IAAI,kBAAM;AAAA,IACV,SAAS,wBAAS;AAAA,IAClB,WAAW,WAAW,OAAO,IAAI,KAAK,UAAU,GAAI,IAAI;AAAA,EAC1D;AACF;;;ACZO,SAAS,uBACd,QAC6B;AAC7B,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO,EAAE,SAAS,QAAQ,KAAK,OAAO;AAAA,IACxC,KAAK;AACH,aAAO,EAAE,SAAS,UAAU,KAAK,OAAO;AAAA,IAC1C,KAAK;AACH,aAAO,EAAE,SAAS,kBAAkB,KAAK,OAAO;AAAA,IAClD,KAAK;AACH,aAAO,EAAE,SAAS,cAAc,KAAK,OAAO;AAAA,IAC9C;AACE,aAAO,EAAE,SAAS,SAAS,KAAK,OAAO;AAAA,EAC3C;AACF;;;ACfA,gBAAkB;AAKX,IAAM,yBAAyB,YAAE,OAAO;AAAA;AAAA;AAAA;AAAA,EAI7C,OAAO,YAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAI3B,YAAY,YAAE,OAAO,YAAE,OAAO,GAAG,YAAE,OAAO,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAItD,GAAG,YAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAIvB,QAAQ,YAAE,QAAQ,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAI7B,MAAM,YAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAI1B,OAAO,YACJ,OAAO;AAAA,IACN,QAAQ,YAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,OAAO,YAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,CAAC,EACA,SAAS;AAAA;AAAA;AAAA;AAAA,EAIZ,UAAU,YAAE,QAAQ,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAI/B,uBAAuB,YAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAI3C,UAAU,YAAE,OAAO,YAAE,OAAO,GAAG,YAAE,OAAO,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAIpD,YAAY,YAAE,MAAM,YAAE,OAAO,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAIzC,qBAAqB,YAAE,QAAQ,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAI1C,YAAY,YACT,OAAO;AAAA,IACN,MAAM,YAAE,OAAO,EAAE,SAAS;AAAA,IAC1B,SAAS,YACN,OAAO;AAAA,MACN,UAAU,YAAE,OAAO,EAAE,SAAS;AAAA,MAC9B,uBAAuB,YACpB,MAAM,YAAE,OAAO,EAAE,MAAM,YAAE,QAAQ,MAAM,GAAG,MAAM,YAAE,OAAO,EAAE,CAAC,CAAC,EAC7D,SAAS;AAAA,IACd,CAAC,EACA,SAAS;AAAA,EACd,CAAC,EACA,SAAS;AAAA;AAAA;AAAA;AAAA,EAIZ,kBAAkB,YAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAItC,iBAAiB,YACd,OAAO;AAAA,IACN,QAAQ,YAAE,OAAO,EAAE,MAAM,YAAE,OAAO,EAAE,CAAC,EAAE,SAAS;AAAA,IAChD,cAAc,YAAE,OAAO,EAAE,MAAM,YAAE,OAAO,EAAE,CAAC,EAAE,SAAS;AAAA,IACtD,cAAc,YACX,OAAO;AAAA,MACN,MAAM,YAAE,OAAO;AAAA,MACf,aAAa,YACV,OAAO;AAAA,QACN,MAAM,YAAE,OAAO;AAAA,QACf,QAAQ,YAAE,QAAQ;AAAA,QAClB,aAAa,YAAE,OAAO,EAAE,SAAS;AAAA,QACjC,QAAQ,YAAE,QAAQ,EAAE,SAAS;AAAA,MAC/B,CAAC,EACA,SAAS;AAAA,IACd,CAAC,EACA,SAAS;AAAA,EACd,CAAC,EACA,SAAS;AAAA;AAAA;AAAA;AAAA,EAIZ,MAAM,YAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAI1B,cAAc,YAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAIlC,OAAO,YAAE,QAAQ,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAI5B,cAAc,YAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAIlC,oBAAoB,YACjB,OAAO;AAAA,IACN,qBAAqB,YAAE,OAAO,EAAE,SAAS;AAAA,IACzC,eAAe,YACZ,OAAO;AAAA,MACN,MAAM,YAAE,OAAO,EAAE,SAAS;AAAA,MAC1B,aAAa,YACV,OAAO;AAAA,QACN,MAAM,YAAE,OAAO,EAAE,SAAS;AAAA,QAC1B,SAAS,YAAE,OAAO,EAAE,SAAS;AAAA,QAC7B,QAAQ,YAAE,OAAO,EAAE,SAAS;AAAA,QAC5B,UAAU,YAAE,OAAO,EAAE,SAAS;AAAA,MAChC,CAAC,EACA,SAAS;AAAA,IACd,CAAC,EACA,SAAS;AAAA,EACd,CAAC,EACA,SAAS;AACd,CAAC;;;ACxID,IAAAC,yBAA+C;AAC/C,iBAAkB;AAEX,IAAM,yBAAyB,aAAE,OAAO;AAAA,EAC7C,OAAO,aAAE,OAAO;AAAA,IACd,SAAS,aAAE,OAAO;AAAA,IAClB,MAAM,aAAE,OAAO,EAAE,QAAQ;AAAA,IACzB,OAAO,aAAE,IAAI,EAAE,QAAQ;AAAA,IACvB,MAAM,aAAE,MAAM,CAAC,aAAE,OAAO,GAAG,aAAE,OAAO,CAAC,CAAC,EAAE,QAAQ;AAAA,EAClD,CAAC;AACH,CAAC;AAIM,IAAM,mCAET,uDAA+B;AAAA,EACjC,aAAa;AAAA,EACb,gBAAgB,CAAC,SAA2B,KAAK,MAAM;AACzD,CAAC;;;ACnBD,IAAAC,mBAIO;AAEA,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAqBE;AAEA,WAAQ,+BAAO,UAAS,QAAQ;AAEhC,QAAM,eAAkC,CAAC;AAEzC,MAAI,SAAS,MAAM;AACjB,WAAO,EAAE,OAAO,QAAW,YAAY,QAAW,aAAa;AAAA,EACjE;AAEA,QAAM,oBAOD,CAAC;AAEN,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,SAAS,YAAY;AAC5B,mBAAa,KAAK,EAAE,MAAM,eAAe,SAAS,SAAS,KAAK,IAAI,GAAG,CAAC;AAAA,IAC1E,WAAW,KAAK,SAAS,YAAY;AACnC,wBAAkB,KAAK;AAAA,QACrB,MAAM;AAAA,QACN,UAAU;AAAA,UACR,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,YAAY,KAAK;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,cAAc,MAAM;AACtB,WAAO,EAAE,OAAO,mBAAmB,YAAY,QAAW,aAAa;AAAA,EACzE;AAEA,QAAM,OAAO,WAAW;AAExB,UAAQ,MAAM;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,EAAE,OAAO,mBAAmB,YAAY,MAAM,aAAa;AAAA,IACpE,KAAK;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,YAAY;AAAA,UACV,MAAM;AAAA,UACN,UAAU,EAAE,MAAM,WAAW,SAAS;AAAA,QACxC;AAAA,QACA;AAAA,MACF;AAAA,IACF,SAAS;AACP,YAAM,mBAA0B;AAChC,YAAM,IAAI,+CAA8B;AAAA,QACtC,eAAe,qBAAqB,gBAAgB;AAAA,MACtD,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;ANzDA,IAAM,4BAA4B,cAAE,OAAO;AAAA,EACzC,IAAI,cAAE,OAAO,EAAE,QAAQ;AAAA,EACvB,SAAS,cAAE,OAAO,EAAE,QAAQ;AAAA,EAC5B,OAAO,cAAE,OAAO,EAAE,QAAQ;AAAA,EAC1B,SAAS,cACN;AAAA,IACC,cAAE,OAAO;AAAA,MACP,SAAS,cAAE,OAAO;AAAA,QAChB,MAAM,cAAE,KAAK,CAAC,aAAa,EAAE,CAAC,EAAE,QAAQ;AAAA,QACxC,SAAS,cAAE,OAAO,EAAE,QAAQ;AAAA,QAC5B,YAAY,cACT;AAAA,UACC,cAAE,OAAO;AAAA,YACP,IAAI,cAAE,OAAO,EAAE,QAAQ;AAAA,YACvB,MAAM,cAAE,QAAQ,UAAU;AAAA,YAC1B,UAAU,cAAE,OAAO;AAAA,cACjB,MAAM,cAAE,OAAO;AAAA,cACf,WAAW,cAAE,OAAO;AAAA,YACtB,CAAC;AAAA,UACH,CAAC;AAAA,QACH,EACC,QAAQ;AAAA,QACX,mBAAmB,cAAE,OAAO,EAAE,SAAS;AAAA,QACvC,iBAAiB,cACd;AAAA,UACC,cAAE,OAAO;AAAA,YACP,YAAY,cAAE,OAAO;AAAA,YACrB,MAAM,cAAE,OAAO;AAAA,UACjB,CAAC;AAAA,QACH,EACC,SAAS;AAAA,MACd,CAAC;AAAA,MACD,OAAO,cAAE,OAAO;AAAA,MAChB,UAAU,cACP,OAAO;AAAA,QACN,SAAS,cACN;AAAA,UACC,cAAE,OAAO;AAAA,YACP,OAAO,cAAE,OAAO;AAAA,YAChB,SAAS,cAAE,OAAO;AAAA,YAClB,cAAc,cAAE;AAAA,cACd,cAAE,OAAO;AAAA,gBACP,OAAO,cAAE,OAAO;AAAA,gBAChB,SAAS,cAAE,OAAO;AAAA,cACpB,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACH,EACC,QAAQ;AAAA,MACb,CAAC,EACA,QAAQ;AAAA,MACX,eAAe,cAAE,OAAO,EAAE,QAAQ;AAAA,IACpC,CAAC;AAAA,EACH,EACC,SAAS;AAAA,EACZ,OAAO,cACJ,OAAO;AAAA,IACN,mBAAmB,cAAE,OAAO;AAAA,IAC5B,eAAe,cAAE,OAAO;AAAA,IACxB,cAAc,cAAE,OAAO;AAAA,IACvB,kBAAkB,cAAE,OAAO,EAAE,SAAS;AAAA,IACtC,qBAAqB,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3C,CAAC,EACA,SAAS;AAAA,EACZ,oBAAoB,cAAE,OAAO,EAAE,SAAS;AAAA,EACxC,cAAc,cAAE,OAAO,EAAE,SAAS;AAAA,EAClC,UAAU,cAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,OAAO,cACJ,OAAO;AAAA,IACN,SAAS,cAAE,OAAO;AAAA,IAClB,MAAM,cAAE,OAAO;AAAA,IACf,OAAO,cAAE,IAAI,EAAE,QAAQ;AAAA,IACvB,MAAM,cAAE,IAAI,EAAE,QAAQ;AAAA,EACxB,CAAC,EACA,SAAS;AACd,CAAC;AAED,IAAM,yBAAyB,cAAE,MAAM;AAAA,EACrC,cAAE,OAAO;AAAA,IACP,IAAI,cAAE,OAAO,EAAE,QAAQ;AAAA,IACvB,SAAS,cAAE,OAAO,EAAE,QAAQ;AAAA,IAC5B,OAAO,cAAE,OAAO,EAAE,QAAQ;AAAA,IAC1B,SAAS,cAAE;AAAA,MACT,cAAE,OAAO;AAAA,QACP,OAAO,cACJ,OAAO;AAAA,UACN,MAAM,cAAE,KAAK,CAAC,aAAa,EAAE,CAAC,EAAE,QAAQ;AAAA,UACxC,SAAS,cAAE,OAAO,EAAE,QAAQ;AAAA,UAC5B,YAAY,cACT;AAAA,YACC,cAAE,OAAO;AAAA,cACP,OAAO,cAAE,OAAO;AAAA,cAChB,IAAI,cAAE,OAAO,EAAE,QAAQ;AAAA,cACvB,MAAM,cACH,MAAM,CAAC,cAAE,QAAQ,UAAU,GAAG,cAAE,QAAQ,EAAE,CAAC,CAAC,EAC5C,QAAQ;AAAA,cACX,UAAU,cAAE,OAAO;AAAA,gBACjB,MAAM,cAAE,OAAO,EAAE,QAAQ;AAAA,gBACzB,WAAW,cAAE,OAAO,EAAE,QAAQ;AAAA,cAChC,CAAC;AAAA,YACH,CAAC;AAAA,UACH,EACC,QAAQ;AAAA,UACX,mBAAmB,cAAE,OAAO,EAAE,SAAS;AAAA,UACvC,iBAAiB,cACd;AAAA,YACC,cAAE,OAAO;AAAA,cACP,YAAY,cAAE,OAAO;AAAA,cACrB,MAAM,cAAE,OAAO;AAAA,YACjB,CAAC;AAAA,UACH,EACC,SAAS;AAAA,QACd,CAAC,EACA,QAAQ;AAAA,QACX,UAAU,cACP,OAAO;AAAA,UACN,SAAS,cACN;AAAA,YACC,cAAE,OAAO;AAAA,cACP,OAAO,cAAE,OAAO;AAAA,cAChB,SAAS,cAAE,OAAO;AAAA,cAClB,cAAc,cAAE;AAAA,gBACd,cAAE,OAAO;AAAA,kBACP,OAAO,cAAE,OAAO;AAAA,kBAChB,SAAS,cAAE,OAAO;AAAA,gBACpB,CAAC;AAAA,cACH;AAAA,YACF,CAAC;AAAA,UACH,EACC,QAAQ;AAAA,QACb,CAAC,EACA,QAAQ;AAAA,QACX,eAAe,cAAE,OAAO,EAAE,QAAQ;AAAA,QAClC,OAAO,cAAE,OAAO;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,IACA,OAAO,cACJ,OAAO;AAAA,MACN,mBAAmB,cAAE,OAAO;AAAA,MAC5B,eAAe,cAAE,OAAO;AAAA,MACxB,cAAc,cAAE,OAAO;AAAA,MACvB,kBAAkB,cAAE,OAAO,EAAE,SAAS;AAAA,MACtC,qBAAqB,cAAE,OAAO,EAAE,SAAS;AAAA,IAC3C,CAAC,EACA,SAAS;AAAA,IACZ,UAAU,cAAE,OAAO,EAAE,SAAS;AAAA,IAC9B,cAAc,cAAE,OAAO,EAAE,SAAS;AAAA,IAClC,oBAAoB,cAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,CAAC;AAAA,EACD,cAAE,OAAO;AAAA,IACP,OAAO,cAAE,OAAO;AAAA,MACd,SAAS,cAAE,OAAO;AAAA,MAClB,MAAM,cAAE,OAAO;AAAA,MACf,OAAO,cAAE,IAAI,EAAE,QAAQ;AAAA,MACvB,MAAM,cAAE,IAAI,EAAE,QAAQ;AAAA,IACxB,CAAC;AAAA,IACD,UAAU,cAAE,OAAO,EAAE,SAAS;AAAA,EAChC,CAAC;AACH,CAAC;AAEM,IAAM,2BAAN,MAA0D;AAAA,EAK/D,YAAY,SAAiB,QAA2B;AAJxD,SAAS,uBAAuB;AAahC,SAAS,gBAA0C;AAAA,MACjD,mBAAmB,CAAC,gBAAgB;AAAA,IACtC;AAVE,SAAK,UAAU;AACf,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAMA,MAAc,QAAQ;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAiD;AAC/C,UAAM,WAA8B,CAAC;AAGrC,QAAI,QAAQ,MAAM;AAChB,eAAS,KAAK,EAAE,MAAM,eAAe,SAAS,OAAO,CAAC;AAAA,IACxD;AACA,QAAI,kBAAkB,MAAM;AAC1B,eAAS,KAAK,EAAE,MAAM,eAAe,SAAS,iBAAiB,CAAC;AAAA,IAClE;AAGA,UAAM,SAAS,uBAAuB,UAAU,4CAAmB,CAAC,CAAC;AACrE,UAAM,iBAAiB,OAAO,UAAU,OAAO,OAAO,CAAC;AAIvD,UAAM;AAAA,MACJ,OAAO;AAAA,MACP,YAAY;AAAA,MACZ;AAAA,IACF,IAAI,aAAa;AAAA,MACf;AAAA,MACA;AAAA,IACF,CAAC;AACD,aAAS,KAAK,GAAG,YAAY;AAG7B,UAAM,EAAE,UAAU,UAAU,gBAAgB,IAC1C,6BAA6B,EAAE,OAAO,CAAC;AACzC,aAAS,KAAK,GAAG,eAAe;AAGhC,UAAM,mBAAmB;AAAA,MACvB;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,YACE,OAAO,oBAAoB,WAAW,kBAAkB;AAAA,MAC1D,uBAAuB,eAAe;AAAA,MACtC;AAAA,MACA,OAAO;AAAA,MACP,MAAM;AAAA,MACN,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,MAAM,eAAe;AAAA,MACrB,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAGA,UAAM,OAAqC;AAAA,MACzC,GAAG;AAAA,MACH,GAAI,eAAe,aACf,EAAE,YAAY,eAAe,WAAW,IACxC,CAAC;AAAA,MACL,GAAI,eAAe,QAAQ,EAAE,OAAO,eAAe,MAAM,IAAI,CAAC;AAAA,MAC9D,GAAI,eAAe,aAAa,SAC5B,EAAE,UAAU,eAAe,SAAS,IACpC,CAAC;AAAA,MACL,GAAI,eAAe,WAAW,EAAE,UAAU,eAAe,SAAS,IAAI,CAAC;AAAA,MACvE,GAAI,eAAe,aACf,EAAE,YAAY,eAAe,WAAW,IACxC,CAAC;AAAA,MACL,GAAI,eAAe,wBAAwB,SACvC,EAAE,qBAAqB,eAAe,oBAAoB,IAC1D,CAAC;AAAA,MACL,GAAI,eAAe,aACf,EAAE,YAAY,eAAe,WAAW,IACxC,CAAC;AAAA,MACL,GAAI,eAAe,mBACf,EAAE,kBAAkB,eAAe,iBAAiB,IACpD,CAAC;AAAA,MACL,GAAI,eAAe,kBACf,EAAE,iBAAiB,eAAe,gBAAgB,IAClD,CAAC;AAAA,MACL,GAAI,eAAe,SAAS,SACxB,EAAE,MAAM,eAAe,KAAK,IAC5B,CAAC;AAAA,MACL,GAAI,eAAe,eACf,EAAE,cAAc,eAAe,aAAa,IAC5C,CAAC;AAAA,MACL,GAAI,eAAe,UAAU,SACzB,EAAE,OAAO,eAAe,MAAM,IAC9B,CAAC;AAAA,MACL,GAAI,eAAe,iBAAiB,SAChC,EAAE,cAAc,eAAe,aAAa,IAC5C,CAAC;AAAA,MACL,GAAI,eAAe,qBACf,EAAE,oBAAoB,eAAe,mBAAmB,IACxD,CAAC;AAAA,IACP;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SAC6D;AArUjE;AAsUI,UAAM,EAAE,MAAM,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,OAAO;AAE3D,UAAM,EAAE,iBAAiB,OAAO,SAAS,IAAI,UAAM,sCAAc;AAAA,MAC/D,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,aAAS,uCAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D;AAAA,MACA,uBAAuB;AAAA,MACvB,+BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,sCAAsC;AAAA,IACxD;AAGA,QAAI,MAAM,OAAO;AACf,YAAM,IAAI,MAAM,sBAAsB,MAAM,MAAM,OAAO,EAAE;AAAA,IAC7D;AAEA,QAAI,CAAC,MAAM,WAAW,MAAM,QAAQ,WAAW,GAAG;AAChD,YAAM,IAAI,MAAM,sCAAsC;AAAA,IACxD;AAEA,UAAM,SAAS,MAAM,QAAQ,CAAC;AAC9B,UAAM,UAAyC,CAAC;AAEhD,SAAI,YAAO,YAAP,mBAAgB,SAAS;AAC3B,cAAQ,KAAK,EAAE,MAAM,QAAQ,MAAM,OAAO,QAAQ,QAAQ,CAAC;AAAA,IAC7D;AAEA,SAAI,YAAO,YAAP,mBAAgB,mBAAmB;AACrC,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM,OAAO,QAAQ;AAAA,MACvB,CAAC;AAAA,IACH;AAEA,UACE,YAAO,YAAP,mBAAgB,oBAChB,OAAO,QAAQ,gBAAgB,SAAS,GACxC;AACA,iBAAW,QAAQ,OAAO,QAAQ,iBAAiB;AACjD,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,WAAW,KAAK;AAAA,UAChB,MAAM,KAAK;AAAA,QACb,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAI,YAAO,YAAP,mBAAgB,eAAc,OAAO,QAAQ,WAAW,SAAS,GAAG;AACtE,iBAAW,YAAY,OAAO,QAAQ,YAAY;AAChD,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,YAAY,SAAS,MAAM;AAAA,UAC3B,YAAU,cAAS,aAAT,mBAAmB,SAAQ;AAAA,UACrC,SAAO,cAAS,aAAT,mBAAmB,cAAa;AAAA,QACzC,CAAC;AAAA,MACH;AAAA,IACF;AAGA,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,KAAI,WAAM,UAAN,YAAe,CAAC;AAEpB,WAAO;AAAA,MACL;AAAA,MACA,cAAc,OAAO,gBACjB,uBAAuB,OAAO,aAAa,IAC3C,EAAE,SAAS,QAAQ,KAAK,OAAU;AAAA,MACtC,OACE,MAAM,SAAS,iBAAiB,OAC5B;AAAA,QACE,aAAa;AAAA,UACX,OAAO;AAAA,UACP,SACE,uBAAuB,OACnB,gBAAgB,sBAChB;AAAA,UACN,WAAW;AAAA,UACX,YAAY;AAAA,QACd;AAAA,QACA,cAAc;AAAA,UACZ,OAAO;AAAA,UACP,MACE,qBAAqB,QAAQ,oBAAoB,OAC7C,oBAAoB,mBACpB;AAAA,UACN,WAAW;AAAA,QACb;AAAA,MACF,IACA;AAAA,QACE,aAAa;AAAA,UACX,OAAO;AAAA,UACP,SAAS;AAAA,UACT,WAAW;AAAA,UACX,YAAY;AAAA,QACd;AAAA,QACA,cAAc,EAAE,OAAO,GAAG,MAAM,QAAW,WAAW,OAAU;AAAA,MAClE;AAAA,MACN,kBAAkB,MAAM,WACpB;AAAA,QACE,SAAS;AAAA,UACP,UAAU,MAAM;AAAA,UAChB,cAAc,MAAM;AAAA,UACpB,oBAAoB,MAAM;AAAA,QAC5B;AAAA,MACF,IACA;AAAA,MACJ,SAAS,EAAE,KAAK;AAAA,MAChB,UAAU;AAAA,QACR,KAAI,WAAM,OAAN,YAAY;AAAA,QAChB,UAAS,WAAM,UAAN,YAAe;AAAA,QACxB,WAAW,IAAI,OAAM,WAAM,YAAN,YAAiB,KAAK,GAAI;AAAA,QAC/C,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SAC2D;AAC3D,UAAM,EAAE,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,OAAO;AACrD,UAAM,OAAO;AAAA,MACX,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,gBAAgB,EAAE,eAAe,KAAK;AAAA,IACxC;AAEA,UAAM,EAAE,iBAAiB,OAAO,SAAS,IAAI,UAAM,sCAAc;AAAA,MAC/D,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,aAAS,uCAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D;AAAA,MACA,uBAAuB;AAAA,MACvB,+BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,YAQD,CAAC;AAEN,UAAM,QAQF;AAAA,MACF,cAAc,EAAE,SAAS,SAAS,KAAK,OAAU;AAAA,MACjD,OAAO;AAAA,QACL,aAAa;AAAA,UACX,OAAO;AAAA,UACP,SAAS;AAAA,UACT,WAAW;AAAA,UACX,YAAY;AAAA,QACd;AAAA,QACA,cAAc;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,WAAW;AAAA,QACb;AAAA,MACF;AAAA,MACA,cAAc;AAAA,MACd,cAAc;AAAA,MACd,UAAU;AAAA,MACV,aAAa;AAAA,MACb,mBAAmB;AAAA,IACrB;AAEA,WAAO;AAAA,MACL,QAAQ,SAAS;AAAA,QACf,IAAI,gBAAgB;AAAA,UAClB,MAAM,YAAY;AAChB,uBAAW,QAAQ,EAAE,MAAM,gBAAgB,SAAS,CAAC;AAAA,UACvD;AAAA,UACA,MAAM,UAAU,OAAO,YAAY;AA3gB7C;AA6gBY,gBAAI,CAAC,MAAM,SAAS;AAClB,oBAAM,eAAe,EAAE,SAAS,SAAS,KAAK,OAAU;AACxD,yBAAW,QAAQ,EAAE,MAAM,SAAS,OAAO,MAAM,MAAM,CAAC;AACxD;AAAA,YACF;AAEA,kBAAM,QAAQ,MAAM;AAGpB,gBAAI,WAAW,OAAO;AACpB,oBAAM,eAAe,EAAE,SAAS,SAAS,KAAK,OAAU;AACxD,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,OAAO,IAAI,MAAM,MAAM,MAAM,OAAO;AAAA,cACtC,CAAC;AACD;AAAA,YACF;AAEA,gBAAI,MAAM,cAAc;AACtB,oBAAM,eAAe;AACrB,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,GAAG,oBAAoB;AAAA,kBACrB,KAAI,WAAM,OAAN,YAAY;AAAA,kBAChB,QAAO,WAAM,UAAN,YAAe;AAAA,kBACtB,UAAS,WAAM,YAAN,YAAiB;AAAA,gBAC5B,CAAC;AAAA,cACH,CAAC;AAAA,YACH;AAEA,gBAAI,MAAM,SAAS,MAAM;AACvB,oBAAM,MAAM,YAAY,SACtB,WAAM,MAAM,kBAAZ,YAA6B;AAC/B,oBAAM,MAAM,YAAY,aACtB,WAAM,MAAM,wBAAZ,YAAmC;AACrC,oBAAM,MAAM,YAAY,UACtB,MAAM,MAAM,iBAAiB,QAC7B,MAAM,MAAM,uBAAuB,OAC/B,MAAM,MAAM,gBAAgB,MAAM,MAAM,sBACxC;AACN,oBAAM,MAAM,aAAa,SACvB,WAAM,MAAM,sBAAZ,YAAiC;AACnC,oBAAM,MAAM,aAAa,aACvB,WAAM,MAAM,qBAAZ,YAAgC;AAClC,oBAAM,MAAM,aAAa,OACvB,MAAM,MAAM,qBAAqB,QACjC,MAAM,MAAM,oBAAoB,OAC5B,MAAM,MAAM,oBAAoB,MAAM,MAAM,mBAC5C;AAAA,YACR;AAEA,gBAAI,MAAM,UAAU;AAClB,oBAAM,WAAW,MAAM;AAAA,YACzB;AAEA,gBAAI,MAAM,cAAc;AACtB,oBAAM,cAAc,MAAM;AAAA,YAC5B;AAEA,gBAAI,MAAM,oBAAoB;AAC5B,oBAAM,oBAAoB,MAAM;AAAA,YAClC;AAEA,kBAAM,SAAS,MAAM,QAAQ,CAAC;AAC9B,iBAAI,iCAAQ,kBAAiB,MAAM;AACjC,oBAAM,eAAe,uBAAuB,OAAO,aAAa;AAAA,YAClE;AAEA,gBAAI,EAAC,iCAAQ,QAAO;AAClB;AAAA,YACF;AAEA,kBAAM,QAAQ,OAAO;AAErB,gBAAI,MAAM,WAAW,MAAM;AACzB,kBAAI,CAAC,MAAM,cAAc;AACvB,2BAAW,QAAQ,EAAE,MAAM,cAAc,IAAI,SAAS,CAAC;AACvD,sBAAM,eAAe;AAAA,cACvB;AACA,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,IAAI;AAAA,gBACJ,OAAO,MAAM;AAAA,cACf,CAAC;AAAA,YACH;AAEA,gBAAI,MAAM,qBAAqB,MAAM;AACnC,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,IAAI;AAAA,gBACJ,OAAO,MAAM;AAAA,cACf,CAAC;AAAA,YACH;AAEA,gBACE,MAAM,mBAAmB,QACzB,MAAM,QAAQ,MAAM,eAAe,GACnC;AACA,yBAAW,QAAQ,MAAM,iBAAiB;AACxC,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,WAAW,KAAK;AAAA,kBAChB,MAAM,KAAK;AAAA,gBACb,CAAC;AAAA,cACH;AAAA,YACF;AAEA,gBAAI,MAAM,cAAc,QAAQ,MAAM,QAAQ,MAAM,UAAU,GAAG;AAC/D,yBAAW,iBAAiB,MAAM,YAAY;AAC5C,sBAAM,QAAQ,cAAc;AAG5B,oBAAI,UAAU,KAAK,KAAK,MAAM;AAC5B,sBACE,cAAc,SAAS,cACvB,cAAc,SAAS,IACvB;AACA,0BAAM,IAAI,0CAAyB;AAAA,sBACjC,MAAM;AAAA,sBACN,SAAS;AAAA,oBACX,CAAC;AAAA,kBACH;AAEA,sBAAI,cAAc,MAAM,MAAM;AAC5B,0BAAM,IAAI,0CAAyB;AAAA,sBACjC,MAAM;AAAA,sBACN,SAAS;AAAA,oBACX,CAAC;AAAA,kBACH;AAEA,wBAAI,mBAAc,aAAd,mBAAwB,SAAQ,MAAM;AACxC,0BAAM,IAAI,0CAAyB;AAAA,sBACjC,MAAM;AAAA,sBACN,SAAS;AAAA,oBACX,CAAC;AAAA,kBACH;AAEA,6BAAW,QAAQ;AAAA,oBACjB,MAAM;AAAA,oBACN,IAAI,cAAc;AAAA,oBAClB,UAAU,cAAc,SAAS;AAAA,kBACnC,CAAC;AAED,4BAAU,KAAK,IAAI;AAAA,oBACjB,IAAI,cAAc;AAAA,oBAClB,MAAM;AAAA,oBACN,UAAU;AAAA,sBACR,MAAM,cAAc,SAAS;AAAA,sBAC7B,YAAW,mBAAc,SAAS,cAAvB,YAAoC;AAAA,oBACjD;AAAA,oBACA,aAAa;AAAA,kBACf;AAEA,wBAAMC,YAAW,UAAU,KAAK;AAEhC,wBACE,KAAAA,UAAS,aAAT,mBAAmB,SAAQ,UAC3B,KAAAA,UAAS,aAAT,mBAAmB,cAAa,MAChC;AAEA,wBAAIA,UAAS,SAAS,UAAU,SAAS,GAAG;AAC1C,iCAAW,QAAQ;AAAA,wBACjB,MAAM;AAAA,wBACN,IAAIA,UAAS;AAAA,wBACb,OAAOA,UAAS,SAAS;AAAA,sBAC3B,CAAC;AAAA,oBACH;AAIA,4BAAI,uCAAeA,UAAS,SAAS,SAAS,GAAG;AAC/C,iCAAW,QAAQ;AAAA,wBACjB,MAAM;AAAA,wBACN,IAAIA,UAAS;AAAA,sBACf,CAAC;AAED,iCAAW,QAAQ;AAAA,wBACjB,MAAM;AAAA,wBACN,aAAY,KAAAA,UAAS,OAAT,gBAAe,mCAAW;AAAA,wBACtC,UAAUA,UAAS,SAAS;AAAA,wBAC5B,OAAOA,UAAS,SAAS;AAAA,sBAC3B,CAAC;AACD,sBAAAA,UAAS,cAAc;AAAA,oBACzB;AAAA,kBACF;AAEA;AAAA,gBACF;AAGA,sBAAM,WAAW,UAAU,KAAK;AAEhC,oBAAI,SAAS,aAAa;AACxB;AAAA,gBACF;AAEA,sBAAI,mBAAc,aAAd,mBAAwB,cAAa,MAAM;AAC7C,2BAAS,SAAS,cAChB,yBAAc,aAAd,mBAAwB,cAAxB,YAAqC;AAAA,gBACzC;AAGA,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,IAAI,SAAS;AAAA,kBACb,QAAO,mBAAc,SAAS,cAAvB,YAAoC;AAAA,gBAC7C,CAAC;AAGD,sBACE,cAAS,aAAT,mBAAmB,SAAQ,UAC3B,cAAS,aAAT,mBAAmB,cAAa,YAChC,uCAAe,SAAS,SAAS,SAAS,GAC1C;AACA,6BAAW,QAAQ;AAAA,oBACjB,MAAM;AAAA,oBACN,IAAI,SAAS;AAAA,kBACf,CAAC;AAED,6BAAW,QAAQ;AAAA,oBACjB,MAAM;AAAA,oBACN,aAAY,cAAS,OAAT,gBAAe,mCAAW;AAAA,oBACtC,UAAU,SAAS,SAAS;AAAA,oBAC5B,OAAO,SAAS,SAAS;AAAA,kBAC3B,CAAC;AACD,2BAAS,cAAc;AAAA,gBACzB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA,MAAM,YAAY;AAnvB5B;AAovBY,gBAAI,MAAM,cAAc;AACtB,yBAAW,QAAQ,EAAE,MAAM,YAAY,IAAI,SAAS,CAAC;AAAA,YACvD;AAEA,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN,eAAc,WAAM,iBAAN,YAAsB;AAAA,gBAClC,SAAS;AAAA,gBACT,KAAK;AAAA,cACP;AAAA,cACA,QAAO,WAAM,UAAN,YAAe;AAAA,gBACpB,aAAa;AAAA,kBACX,OAAO;AAAA,kBACP,SAAS;AAAA,kBACT,WAAW;AAAA,kBACX,YAAY;AAAA,gBACd;AAAA,gBACA,cAAc;AAAA,kBACZ,OAAO;AAAA,kBACP,MAAM;AAAA,kBACN,WAAW;AAAA,gBACb;AAAA,cACF;AAAA,cACA,kBACE,MAAM,YAAY,MAAM,eAAe,MAAM,oBACzC;AAAA,gBACE,SAAS;AAAA,kBACP,UAAU,MAAM;AAAA,kBAChB,cAAc,MAAM;AAAA,kBACpB,oBAAoB,MAAM;AAAA,gBAC5B;AAAA,cACF,IACA;AAAA,YACR,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,SAAS,EAAE,KAAK;AAAA,MAChB,UAAU;AAAA,QACR,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;;;ADpuBO,SAAS,cACd,UAAmC,CAAC,GACnB;AA7DnB;AA8DE,QAAM,WACJ,sDAAqB,QAAQ,OAAO,MAApC,YACA;AAEF,QAAM,aAAa,OAAO;AAAA,IACxB,eAAe,cAAU,mCAAW;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC,CAAC;AAAA,IACF,gBAAgB;AAAA,IAChB,GAAG,QAAQ;AAAA,EACb;AAEA,QAAM,kBAAkB,CAAC,YACvB,IAAI,yBAAyB,SAAS;AAAA,IACpC,UAAU;AAAA,IACV;AAAA,IACA,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,WAAW,SAAU,SAAiB;AAC1C,QAAI,YAAY;AACd,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,WAAO,gBAAgB,OAAO;AAAA,EAChC;AAEA,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAEhB,WAAS,iBAAiB,CAAC,YAAoB;AAC7C,UAAM,IAAI,kCAAiB,EAAE,SAAS,WAAW,iBAAiB,CAAC;AAAA,EACrE;AAEA,WAAS,aAAa,CAAC,YAAoB;AACzC,UAAM,IAAI,kCAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,EACjE;AAEA,WAAS,uBAAuB;AAEhC,SAAO,OAAO,OAAO,QAAQ;AAC/B;AAKO,IAAM,UAAU,cAAc;","names":["import_provider","import_provider_utils","import_provider","import_provider_utils","import_zod","import_provider_utils","import_provider","toolCall"]}
@@ -0,0 +1,298 @@
1
+ import { ProviderV3, LanguageModelV3, EmbeddingModelV3 } from '@ai-sdk/provider';
2
+ import { FetchFunction } from '@ai-sdk/provider-utils';
3
+
4
+ interface NordlysProvider extends ProviderV3 {
5
+ (modelId: string): LanguageModelV3;
6
+ /**
7
+ * Creates a model for text generation with Nordlys models.
8
+ */
9
+ languageModel: (modelId: string) => LanguageModelV3;
10
+ /**
11
+ * Creates a chat model with Nordlys models.
12
+ */
13
+ chat: (modelId: string) => LanguageModelV3;
14
+ /**
15
+ * Text embedding is not currently supported by the Nordlys provider.
16
+ */
17
+ embeddingModel: (modelId: string) => EmbeddingModelV3;
18
+ }
19
+ interface NordlysProviderSettings {
20
+ /**
21
+ * Use a different URL prefix for API calls, e.g. to use proxy servers.
22
+ * The default prefix is your Nordlys API endpoint.
23
+ */
24
+ baseURL?: string;
25
+ /**
26
+ * API key for the Nordlys service.
27
+ * It defaults to the `NORDLYS_API_KEY` environment variable.
28
+ */
29
+ apiKey?: string;
30
+ /**
31
+ * Custom headers to include in the requests.
32
+ */
33
+ headers?: Record<string, string>;
34
+ /**
35
+ * Custom fetch implementation. You can use it as a middleware to intercept requests,
36
+ * or to provide a custom fetch implementation for e.g. testing.
37
+ */
38
+ fetch?: FetchFunction;
39
+ }
40
+ /**
41
+ * Create a Nordlys AI provider instance.
42
+ */
43
+ declare function createNordlys(options?: NordlysProviderSettings): NordlysProvider;
44
+ /**
45
+ * Default Nordlys provider instance.
46
+ */
47
+ declare const nordlys: NordlysProvider;
48
+
49
+ /**
50
+ * Request payload for Nordlys chat completion API.
51
+ */
52
+ interface NordlysChatCompletionRequest {
53
+ messages: NordlysChatCompletionMessage[];
54
+ model: string;
55
+ max_tokens?: number;
56
+ max_completion_tokens?: number;
57
+ temperature?: number;
58
+ top_p?: number;
59
+ n?: number;
60
+ stream?: boolean;
61
+ stop?: string | string[];
62
+ presence_penalty?: number;
63
+ frequency_penalty?: number;
64
+ logit_bias?: Record<string, number>;
65
+ user?: string;
66
+ audio?: V2ChatCompletionAudioParam;
67
+ logprobs?: boolean;
68
+ metadata?: SharedMetadata;
69
+ modalities?: string[];
70
+ parallel_tool_calls?: boolean;
71
+ prediction?: V2ChatCompletionPredictionContentParam;
72
+ reasoning_effort?: string;
73
+ response_format?: V2ChatCompletionNewParamsResponseFormatUnion;
74
+ seed?: number;
75
+ service_tier?: string;
76
+ store?: boolean;
77
+ top_logprobs?: number;
78
+ web_search_options?: V2ChatCompletionNewParamsWebSearchOptions;
79
+ stream_options?: V2ChatCompletionStreamOptionsParam;
80
+ tools?: Array<{
81
+ type: 'function';
82
+ function: {
83
+ name: string;
84
+ description?: string;
85
+ parameters: unknown;
86
+ };
87
+ }>;
88
+ tool_choice?: {
89
+ type: 'function';
90
+ function: {
91
+ name: string;
92
+ };
93
+ } | 'auto' | 'none' | 'required';
94
+ }
95
+ interface NordlysChatCompletionDeveloperMessage {
96
+ role: 'developer';
97
+ content: string;
98
+ }
99
+ /**
100
+ * All possible message types for Nordlys chat completion.
101
+ */
102
+ type NordlysChatCompletionMessage = NordlysChatCompletionSystemMessage | NordlysChatCompletionUserMessage | NordlysChatCompletionAssistantMessage | NordlysChatCompletionToolMessage | NordlysChatCompletionDeveloperMessage;
103
+ /**
104
+ * System message for Nordlys chat completion.
105
+ */
106
+ interface NordlysChatCompletionSystemMessage {
107
+ role: 'system';
108
+ content: string;
109
+ }
110
+ /**
111
+ * User message for Nordlys chat completion.
112
+ */
113
+ interface NordlysChatCompletionUserMessage {
114
+ role: 'user';
115
+ content: string | Array<NordlysChatCompletionContentPart>;
116
+ }
117
+ /**
118
+ * Content part for user messages.
119
+ */
120
+ type NordlysChatCompletionContentPart = {
121
+ type: 'text';
122
+ text: string;
123
+ } | {
124
+ type: 'image_url';
125
+ image_url: {
126
+ url: string;
127
+ };
128
+ } | {
129
+ type: 'input_audio';
130
+ input_audio: {
131
+ data: string;
132
+ format: 'wav' | 'mp3';
133
+ };
134
+ } | {
135
+ type: 'file';
136
+ file: {
137
+ filename: string;
138
+ file_data: string;
139
+ };
140
+ };
141
+ /**
142
+ * Assistant message for Nordlys chat completion.
143
+ */
144
+ interface NordlysChatCompletionAssistantMessage {
145
+ role: 'assistant';
146
+ content?: string | null;
147
+ tool_calls?: Array<NordlysChatCompletionMessageToolCall>;
148
+ reasoning_content?: string;
149
+ generated_files?: Array<{
150
+ media_type: string;
151
+ data: string;
152
+ }>;
153
+ }
154
+ /**
155
+ * Tool call for assistant messages.
156
+ */
157
+ interface NordlysChatCompletionMessageToolCall {
158
+ type: 'function';
159
+ id: string;
160
+ function: {
161
+ arguments: string;
162
+ name: string;
163
+ };
164
+ }
165
+ /**
166
+ * Tool message for Nordlys chat completion.
167
+ */
168
+ interface NordlysChatCompletionToolMessage {
169
+ role: 'tool';
170
+ content: string;
171
+ tool_call_id: string;
172
+ }
173
+ /**
174
+ * Response from Nordlys chat completion API.
175
+ */
176
+ interface NordlysChatCompletionResponse {
177
+ id: string;
178
+ object: string;
179
+ created: number;
180
+ model: string;
181
+ choices: Array<{
182
+ index: number;
183
+ message: NordlysChatCompletionAssistantMessage;
184
+ finish_reason: string | null;
185
+ }>;
186
+ usage?: NordlysChatCompletionUsage;
187
+ provider: string;
188
+ service_tier?: string;
189
+ system_fingerprint?: string;
190
+ }
191
+ /**
192
+ * Usage statistics for Nordlys chat completion API.
193
+ */
194
+ interface NordlysChatCompletionUsage {
195
+ prompt_tokens: number;
196
+ completion_tokens: number;
197
+ total_tokens: number;
198
+ reasoning_tokens?: number;
199
+ cached_input_tokens?: number;
200
+ }
201
+ /**
202
+ * Audio parameter for chat completion.
203
+ */
204
+ interface V2ChatCompletionAudioParam {
205
+ format?: string;
206
+ voice?: string;
207
+ }
208
+ /**
209
+ * Shared metadata for requests.
210
+ */
211
+ interface SharedMetadata {
212
+ [key: string]: string;
213
+ }
214
+ /**
215
+ * Prediction content parameter.
216
+ */
217
+ interface V2ChatCompletionPredictionContentParam {
218
+ type?: string;
219
+ content?: V2ChatCompletionPredictionContentContentUnionParam;
220
+ }
221
+ /**
222
+ * Prediction content union parameter.
223
+ */
224
+ interface V2ChatCompletionPredictionContentContentUnionParam {
225
+ OfString?: string;
226
+ OfArrayOfContentParts?: Array<{
227
+ type: 'text';
228
+ text: string;
229
+ }>;
230
+ }
231
+ /**
232
+ * Response format union parameter.
233
+ */
234
+ interface V2ChatCompletionNewParamsResponseFormatUnion {
235
+ OfText?: SharedResponseFormatTextParam;
236
+ OfJSONObject?: SharedResponseFormatJSONObjectParam;
237
+ OfJSONSchema?: SharedResponseFormatJSONSchemaParam;
238
+ }
239
+ /**
240
+ * Text response format parameter.
241
+ */
242
+ interface SharedResponseFormatTextParam {
243
+ type: string;
244
+ }
245
+ /**
246
+ * JSON object response format parameter.
247
+ */
248
+ interface SharedResponseFormatJSONObjectParam {
249
+ type: string;
250
+ }
251
+ /**
252
+ * JSON schema response format parameter.
253
+ */
254
+ interface SharedResponseFormatJSONSchemaParam {
255
+ type: string;
256
+ json_schema?: SharedResponseFormatJSONSchemaJSONSchemaParam;
257
+ }
258
+ /**
259
+ * JSON schema details parameter.
260
+ */
261
+ interface SharedResponseFormatJSONSchemaJSONSchemaParam {
262
+ name: string;
263
+ schema: unknown;
264
+ description?: string;
265
+ strict?: boolean;
266
+ }
267
+ /**
268
+ * Web search options parameter.
269
+ */
270
+ interface V2ChatCompletionNewParamsWebSearchOptions {
271
+ search_context_size?: string;
272
+ user_location?: V2ChatCompletionNewParamsWebSearchOptionsUserLocation;
273
+ }
274
+ /**
275
+ * User location for web search options.
276
+ */
277
+ interface V2ChatCompletionNewParamsWebSearchOptionsUserLocation {
278
+ type?: string;
279
+ approximate?: V2ChatCompletionNewParamsWebSearchOptionsUserLocationApproximate;
280
+ }
281
+ /**
282
+ * Approximate user location for web search options.
283
+ */
284
+ interface V2ChatCompletionNewParamsWebSearchOptionsUserLocationApproximate {
285
+ city?: string;
286
+ country?: string;
287
+ region?: string;
288
+ timezone?: string;
289
+ }
290
+ /**
291
+ * Stream options parameter.
292
+ */
293
+ interface V2ChatCompletionStreamOptionsParam {
294
+ include_usage?: boolean;
295
+ include_obfuscation?: boolean;
296
+ }
297
+
298
+ export { type NordlysChatCompletionAssistantMessage, type NordlysChatCompletionContentPart, type NordlysChatCompletionDeveloperMessage, type NordlysChatCompletionMessage, type NordlysChatCompletionMessageToolCall, type NordlysChatCompletionRequest, type NordlysChatCompletionResponse, type NordlysChatCompletionSystemMessage, type NordlysChatCompletionToolMessage, type NordlysChatCompletionUsage, type NordlysChatCompletionUserMessage, type NordlysProvider, type NordlysProviderSettings, type SharedMetadata, type SharedResponseFormatJSONObjectParam, type SharedResponseFormatJSONSchemaJSONSchemaParam, type SharedResponseFormatJSONSchemaParam, type SharedResponseFormatTextParam, type V2ChatCompletionAudioParam, type V2ChatCompletionNewParamsResponseFormatUnion, type V2ChatCompletionNewParamsWebSearchOptions, type V2ChatCompletionNewParamsWebSearchOptionsUserLocation, type V2ChatCompletionNewParamsWebSearchOptionsUserLocationApproximate, type V2ChatCompletionPredictionContentContentUnionParam, type V2ChatCompletionPredictionContentParam, type V2ChatCompletionStreamOptionsParam, createNordlys, nordlys };