@rama-adi/watsonx-unofficial-ai-provider
Version:
Unofficial Watsonx provider for the Vercel AI SDK
1 lines • 94.6 kB
Source Map (JSON)
{"version":3,"sources":["../src/provider.ts","../src/models/chat-models/watsonx-chat-model.ts","../src/models/chat-models/watsonx-chat-finish-reason.ts","../src/models/chat-models/convert-to-watsonx-chat-messages.ts","../src/types/watsonx-response-schema.ts","../src/models/chat-models/watsonx-chat-model-settings.ts","../src/models/chat-models/watsonx-chat-schema.ts","../src/types/watsonx-common-schema.ts","../src/models/embedding-models/watsonx-embedding-model.ts","../src/models/completion-models/watsonx-completion-model.ts","../src/models/completion-models/convert-to-watsonx-completion.ts","../src/models/completion-models/watsonx-completion-schema.ts","../src/models/completion-models/watsonx-completion-finish-reason.ts","../src/models/embedding-models/watsonx-embedding-model-settings.ts","../src/models/completion-models/watsonx-completion-model-settings.ts"],"sourcesContent":["import type { EmbeddingModelV2, ProviderV2 } from '@ai-sdk/provider';\nimport {\n loadApiKey,\n loadOptionalSetting,\n loadSetting,\n withoutTrailingSlash,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { WatsonxChatModel } from './models/chat-models/watsonx-chat-model.ts';\nimport { WatsonxEmbeddingModel } from './models/embedding-models/watsonx-embedding-model.ts';\nimport type {\n WatsonxEmbeddingModelId,\n WatsonxEmbeddingModelIdFor,\n WatsonxEmbeddingSetting,\n} from './models/embedding-models/watsonx-embedding-model-settings.ts';\nimport type {\n WatsonxChatModelId,\n WatsonxChatModelIdFor,\n WatsonxChatSetting,\n} from './models/chat-models/watsonx-chat-model-settings.ts';\nimport { WatsonxCompletionModel } from './models/completion-models/watsonx-completion-model.ts';\nimport type {\n WatsonxCompletionModelId,\n WatsonxCompletionModelIdFor,\n WatsonxCompletionSetting,\n} from './models/completion-models/watsonx-completion-model-settings.ts';\nimport type { WatsonxCluster } from './types/watsonx-common-schema.ts';\n\nexport interface WatsonxProvider<C extends WatsonxCluster = WatsonxCluster>\n extends ProviderV2 {\n /*\n * Creates a new WatsonxChatLanguageModel instance with the specified model ID and optional settings.\n * This is the default function call syntax for the provider.\n */\n (\n modelId: WatsonxChatModelIdFor<C>,\n settings?: WatsonxChatSetting,\n ): WatsonxChatModel;\n\n /*\n * Creates a new WatsonxChatLanguageModel instance with the specified model ID and optional settings.\n * This is equivalent to calling the provider directly.\n */\n languageModel(\n modelId: WatsonxChatModelIdFor<C>,\n settings?: WatsonxChatSetting,\n ): WatsonxChatModel;\n\n /*\n * Creates a new WatsonxEmbeddingModel instance with the specified model ID and optional settings.\n */\n embedding(\n modelId: WatsonxEmbeddingModelIdFor<C>,\n settings?: WatsonxEmbeddingSetting,\n ): EmbeddingModelV2<string>;\n\n completion(\n modelId: WatsonxCompletionModelIdFor<C>,\n settings?: WatsonxCompletionSetting,\n ): WatsonxCompletionModel;\n\n textEmbeddingModel(\n modelId: WatsonxEmbeddingModelIdFor<C>,\n settings?: WatsonxEmbeddingSetting,\n ): EmbeddingModelV2<string>;\n\n textEmbedding(\n modelId: WatsonxEmbeddingModelIdFor<C>,\n settings?: WatsonxEmbeddingSetting,\n ): EmbeddingModelV2<string>;\n}\n\nexport interface WatsonxProviderSetting<C extends WatsonxCluster = WatsonxCluster> {\n /**\n The cluster which you host your watsonx AI project\n\n This uses the default IBM watsonx API URL (which is: https://{cluster url}.ml.cloud.ibm.com).\n\n Of course, you can always override it in clusterURL\n */\n cluster?: C;\n\n /**\n The Project ID that hosts your watsonx model\n\n Find it in the GUI here: https://{cluster}.dataplatform.cloud.ibm.com/projects/?context=wx click on your project > manage\n\n Of course, you can always override it in clusterURL\n */\n projectID?: string;\n\n /**\n Custom cluster URL\n */\n clusterURL?: string;\n\n /**\n Bearer token that is being send using the `Authorization` header.\n It defaults to the `MISTRAL_API_KEY` environment variable.\n\n The easiest way to obtain this token:\n\n https://cloud.ibm.com/docs/account?topic=account-iamtoken_from_apikey#iamtoken_from_apikey\n\n or via this cURL command:\n `curl -X POST 'https://iam.cloud.ibm.com/identity/token' -H 'Content-Type: application/x-www-form-urlencoded' -d 'grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=MY_APIKEY'`\n */\n bearerToken?: 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\nexport function createWatsonx<C extends WatsonxCluster = WatsonxCluster>(\n options: WatsonxProviderSetting<C> = {},\n): WatsonxProvider<C> {\n const clusterURL =\n loadOptionalSetting({\n settingValue: options.clusterURL,\n environmentVariableName: 'WATSONX_CLUSTER_URL',\n }) ??\n (() => {\n const cluster = loadSetting({\n settingValue: options.cluster,\n settingName: 'cluster',\n environmentVariableName: 'WATSONX_CLUSTER',\n description: 'The IBM watsonx Cluster',\n });\n return `${withoutTrailingSlash(`https://${cluster}.ml.cloud.ibm.com`)}/ml/v1`;\n })();\n\n const projectID = loadSetting({\n settingValue: options.projectID,\n settingName: 'projectID',\n environmentVariableName: 'WATSONX_PROJECT_ID',\n description: 'The IBM watsonx Project ID',\n });\n\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.bearerToken,\n environmentVariableName: 'WATSONX_BEARER_TOKEN',\n description: 'Watsonx',\n })}`,\n ...options.headers,\n });\n\n const createChatModel = (\n modelId: WatsonxChatModelId,\n settings: WatsonxChatSetting = {},\n ) =>\n new WatsonxChatModel(modelId, settings, {\n provider: 'watsonx.chat',\n clusterURL,\n projectID,\n headers: getHeaders,\n fetch: options.fetch,\n version: '2024-02-13',\n });\n\n const createEmbeddingModel = (\n modelId: WatsonxEmbeddingModelId,\n settings: WatsonxEmbeddingSetting = {},\n ) =>\n new WatsonxEmbeddingModel(modelId, settings, {\n provider: 'watsonx.embedding',\n clusterURL,\n projectID,\n headers: getHeaders,\n fetch: options.fetch,\n version: '2024-02-13',\n });\n\n const createCompletionModel = (\n modelId: WatsonxCompletionModelId,\n settings: WatsonxCompletionSetting = {},\n ) =>\n new WatsonxCompletionModel(modelId, settings, {\n provider: 'watsonx.completion',\n clusterURL,\n projectID,\n headers: getHeaders,\n fetch: options.fetch,\n version: '2024-02-13',\n });\n\n const provider = function (\n modelId: WatsonxChatModelIdFor<C>,\n settings?: WatsonxChatSetting,\n ) {\n if (new.target) {\n throw new Error(\n 'The watsonx model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n provider.languageModel = (\n modelId: WatsonxChatModelIdFor<C>,\n settings?: WatsonxChatSetting,\n ) => createChatModel(modelId, settings);\n provider.embedding = (\n modelId: WatsonxEmbeddingModelIdFor<C>,\n settings?: WatsonxEmbeddingSetting,\n ) => createEmbeddingModel(modelId, settings);\n provider.textEmbeddingModel = (\n modelId: WatsonxEmbeddingModelIdFor<C>,\n settings?: WatsonxEmbeddingSetting,\n ) => createEmbeddingModel(modelId, settings);\n provider.textEmbedding = (\n modelId: WatsonxEmbeddingModelIdFor<C>,\n settings?: WatsonxEmbeddingSetting,\n ) => createEmbeddingModel(modelId, settings);\n provider.completion = (\n modelId: WatsonxCompletionModelIdFor<C>,\n settings?: WatsonxCompletionSetting,\n ) => createCompletionModel(modelId, settings);\n\n // Required by ProviderV2 interface but not supported by watsonx\n provider.imageModel = () => {\n throw new Error('Image models are not supported by watsonx provider');\n };\n\n return provider as unknown as WatsonxProvider<C>;\n}\n\nexport const watsonx = createWatsonx();\n","import {\n UnsupportedFunctionalityError,\n InvalidResponseDataError,\n type LanguageModelV2,\n type LanguageModelV2CallOptions,\n type LanguageModelV2CallWarning,\n type LanguageModelV2Content,\n type LanguageModelV2FinishReason,\n type LanguageModelV2ResponseMetadata,\n type LanguageModelV2StreamPart,\n type LanguageModelV2Usage,\n type SharedV2Headers,\n} from '@ai-sdk/provider';\nimport {\n type ParseResult,\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { mapWatsonxChatFinishReason } from './watsonx-chat-finish-reason.ts';\nimport { convertToWatsonxChatMessages } from './convert-to-watsonx-chat-messages.ts';\nimport { watsonxFailedResponseHandler } from '../../types/watsonx-response-schema.ts';\nimport {\n FunctionCallingModelLists,\n type WatsonxChatConfig,\n type WatsonxChatModelId,\n type WatsonxChatSetting,\n} from './watsonx-chat-model-settings.ts';\nimport {\n watsonxChatChunkSchema,\n watsonxChatResponseSchema,\n} from './watsonx-chat-schema.ts';\n\nexport class WatsonxChatModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2' as const;\n readonly provider: string;\n readonly defaultObjectGenerationMode = 'tool' as const;\n readonly supportsImageUrls = false;\n readonly supportedUrls: Record<string, RegExp[]> = {};\n\n readonly modelId: WatsonxChatModelId;\n readonly settings: WatsonxChatSetting;\n private readonly config: WatsonxChatConfig;\n\n constructor(\n modelId: WatsonxChatModelId,\n settings: WatsonxChatSetting,\n config: WatsonxChatConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n this.provider = config.provider;\n }\n\n private sanityCheck(options: LanguageModelV2CallOptions) {\n if (\n options.tools?.length &&\n !Object.values(FunctionCallingModelLists).some((models) =>\n (models as readonly string[]).includes(this.modelId as any),\n )\n ) {\n throw new UnsupportedFunctionalityError({\n functionality: 'Tool calling',\n message: `The model ${this.modelId} does not support tool calling`,\n });\n }\n }\n\n private getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n tools,\n toolChoice,\n providerOptions,\n }: LanguageModelV2CallOptions) {\n const warnings: LanguageModelV2CallWarning[] = [];\n\n // checks for unsupported params\n if (topK != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'topK',\n });\n }\n\n // map framework stopSequences to API 'stop'\n\n const requestedN = providerOptions?.watsonx?.n;\n let nArg: number | undefined = undefined;\n if (typeof requestedN === 'number') {\n if (requestedN !== 1) {\n warnings.push({ type: 'unsupported-setting', setting: 'n' });\n }\n nArg = 1;\n }\n\n const topLogprobs = providerOptions?.watsonx?.topLogprobs;\n const topLogprobsNum =\n typeof topLogprobs === 'number' ? topLogprobs : undefined;\n const requestedLogprobs = providerOptions?.watsonx?.logprobs;\n const requestedLogprobsBool =\n typeof requestedLogprobs === 'boolean' ? requestedLogprobs : undefined;\n const requestedContext = providerOptions?.watsonx?.context;\n const requestedContextStr =\n typeof requestedContext === 'string' ? requestedContext : undefined;\n\n const baseArgs = {\n temperature,\n model_id: this.modelId,\n project_id: this.config.projectID,\n frequency_penalty: frequencyPenalty,\n // IBM watsonx prefers max_completion_tokens; max_tokens is deprecated\n ...(maxOutputTokens != null\n ? { max_completion_tokens: maxOutputTokens }\n : {}),\n presence_penalty: presencePenalty,\n top_p: topP,\n seed,\n messages: convertToWatsonxChatMessages(prompt),\n time_limit: providerOptions?.watsonx?.timeLimit,\n // OpenAPI optional parameters supported via providerOptions.watsonx\n ...(typeof providerOptions?.watsonx?.maxCompletionTokens === 'number'\n ? { max_completion_tokens: providerOptions.watsonx.maxCompletionTokens }\n : {}),\n ...(requestedLogprobsBool != null\n ? { logprobs: requestedLogprobsBool }\n : topLogprobsNum != null\n ? { logprobs: true }\n : {}),\n ...(topLogprobsNum != null ? { top_logprobs: topLogprobsNum } : {}),\n ...(providerOptions?.watsonx?.logitBias != null\n ? { logit_bias: providerOptions.watsonx.logitBias }\n : {}),\n ...(nArg != null ? { n: nArg } : {}),\n ...(providerOptions?.watsonx?.spaceId != null\n ? { space_id: providerOptions.watsonx.spaceId }\n : {}),\n ...(requestedContextStr != null ? { context: requestedContextStr } : {}),\n ...(stopSequences != null ? { stop: stopSequences } : {}),\n };\n\n if (responseFormat?.type === 'json') {\n return {\n args: {\n ...baseArgs,\n response_format: { type: 'json_object' },\n },\n warnings,\n };\n }\n\n if (tools && tools.length > 0) {\n const mappedTools = tools\n .filter((tool) => tool.type === 'function')\n .map((tool) => ({\n type: 'function' as const,\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n }));\n\n let tool_choice_option: 'auto' | undefined = undefined;\n let tool_choice:\n | { type: 'function'; function: { name: string } }\n | undefined = undefined;\n\n if (toolChoice?.type === 'tool') {\n tool_choice = {\n type: 'function',\n function: {\n name: toolChoice.toolName,\n },\n };\n } else if (toolChoice?.type === 'auto') {\n tool_choice_option = 'auto';\n } else if (toolChoice?.type === 'required') {\n if (mappedTools.length === 1) {\n tool_choice = {\n type: 'function',\n function: { name: mappedTools[0]!.function.name },\n };\n } else {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'toolChoice.required',\n });\n tool_choice_option = 'auto';\n }\n }\n\n return {\n args: {\n ...baseArgs,\n tools: mappedTools,\n tool_choice_option,\n tool_choice,\n },\n warnings,\n };\n }\n\n return {\n args: baseArgs,\n warnings,\n };\n }\n\n async doGenerate(options: LanguageModelV2CallOptions): Promise<{\n content: Array<LanguageModelV2Content>;\n finishReason: LanguageModelV2FinishReason;\n usage: LanguageModelV2Usage;\n warnings: Array<LanguageModelV2CallWarning>;\n request?: { body?: unknown };\n response?: LanguageModelV2ResponseMetadata & {\n headers?: SharedV2Headers;\n body?: unknown;\n };\n }> {\n this.sanityCheck(options);\n const { args, warnings } = this.getArgs(options);\n\n const { value: response, responseHeaders } = await postJsonToApi({\n url: `${this.config.clusterURL}/text/chat?version=${this.config.version}`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: watsonxFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n watsonxChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = response.choices[0];\n\n if (!choice) {\n throw new Error('No choice in response');\n }\n\n const content: Array<LanguageModelV2Content> = [];\n\n if (choice.message.content) {\n content.push({\n type: 'text' as const,\n text: choice.message.content,\n });\n }\n\n if (choice.message.tool_calls) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: 'tool-call' as const,\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n }\n }\n\n return {\n content,\n finishReason: mapWatsonxChatFinishReason(choice.finish_reason),\n usage: {\n inputTokens: response.usage.prompt_tokens,\n outputTokens: response.usage.completion_tokens,\n totalTokens: response.usage.total_tokens,\n },\n warnings,\n request: { body: args },\n response: {\n id: response.id,\n modelId: response.model_id,\n headers: responseHeaders,\n },\n };\n }\n\n async doStream(options: LanguageModelV2CallOptions): Promise<{\n stream: ReadableStream<LanguageModelV2StreamPart>;\n warnings: Array<LanguageModelV2CallWarning>;\n request?: { body?: unknown };\n response?: LanguageModelV2ResponseMetadata & {\n headers?: SharedV2Headers;\n body?: unknown;\n };\n }> {\n this.sanityCheck(options);\n const { args, warnings } = this.getArgs(options);\n const url = `${this.config.clusterURL}/text/chat_stream?version=${this.config.version}`;\n\n const body = { ...args };\n\n const { value: response, responseHeaders } = await postJsonToApi({\n url,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: watsonxFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n watsonxChatChunkSchema,\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 inputStarted: boolean;\n sent: boolean;\n }> = [];\n\n let finishReason: LanguageModelV2FinishReason = 'other';\n const usage: LanguageModelV2Usage = {\n inputTokens: Number.NaN,\n outputTokens: Number.NaN,\n totalTokens: Number.NaN,\n };\n\n let chunkNumber = 0;\n let textStarted = false;\n let textId: string | undefined;\n let watsonxResponseId: string | undefined;\n let trimLeadingSpace = false;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof watsonxChatChunkSchema>>,\n LanguageModelV2StreamPart\n >({\n transform(chunk, controller) {\n if (!chunk.success) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n chunkNumber++;\n const value = chunk.value;\n\n if (value.id) {\n watsonxResponseId = value.id;\n controller.enqueue({\n type: 'response-metadata',\n id: value.id,\n });\n }\n\n if (value.model_id) {\n controller.enqueue({\n type: 'response-metadata',\n modelId: value.model_id,\n });\n }\n\n if (value.usage != null) {\n usage.inputTokens = value.usage.prompt_tokens;\n usage.outputTokens = value.usage.completion_tokens;\n usage.totalTokens = value.usage.total_tokens;\n }\n\n const choice = value.choices[0];\n if (!choice) {\n return;\n }\n\n if (choice?.finish_reason != null) {\n finishReason = mapWatsonxChatFinishReason(choice.finish_reason);\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n const textContent = delta.content ?? '';\n\n // when there is a trailing assistant message, watsonx will send the\n // content of that message again. we skip this repeated content to\n // avoid duplication, e.g. in continuation mode.\n if (chunkNumber <= 2) {\n const messages = convertToWatsonxChatMessages(options.prompt);\n const lastMessage = messages[messages.length - 1];\n\n if (\n lastMessage?.role === 'assistant' &&\n lastMessage.content &&\n textContent === lastMessage.content.trimEnd()\n ) {\n // watsonx moves the trailing space from the prefix to the next chunk.\n // We trim the leading space to avoid duplication.\n if (textContent.length < lastMessage.content.length) {\n trimLeadingSpace = true;\n }\n\n // skip the repeated content:\n return;\n }\n }\n\n if (textContent != null && textContent !== '') {\n if (!textStarted) {\n textId = watsonxResponseId || generateId();\n controller.enqueue({\n type: 'text-start',\n id: textId,\n });\n textStarted = true;\n }\n\n controller.enqueue({\n type: 'text-delta',\n delta: trimLeadingSpace ? textContent.trimStart() : textContent,\n id: textId || generateId(),\n });\n\n trimLeadingSpace = false;\n }\n\n if (delta.tool_calls != null) {\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index ?? toolCalls.length - 1;\n\n // Tool call start. WatsonX returns all information except the arguments in the first chunk.\n if (toolCalls[index] == null) {\n if (toolCallDelta.type !== 'function') {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n\n const toolCallId = toolCallDelta.id ?? generateId();\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 toolCalls[index] = {\n id: toolCallId,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n inputStarted: false,\n sent: false,\n };\n\n const toolCall = toolCalls[index];\n\n if (toolCall == null) {\n throw new Error('Tool call is missing');\n }\n\n // check if tool call is complete (watsonx sends the full tool call in one chunk)\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n toolCall.inputStarted = true;\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCall.id,\n toolName: toolCall.function.name,\n });\n\n // send delta\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.function.arguments,\n });\n\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n\n // send tool call\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n\n toolCall.sent = true;\n }\n\n continue;\n }\n\n // existing tool call, merge (though watsonx typically sends complete tool calls)\n const toolCall = toolCalls[index];\n\n if (toolCall == null) {\n throw new Error('Tool call is missing');\n }\n\n if (!toolCall.inputStarted) {\n toolCall.inputStarted = true;\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCall.id,\n toolName: toolCall.function.name,\n });\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-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n\n toolCall.sent = true;\n }\n }\n }\n },\n\n flush(controller) {\n // Forward any unsent tool calls if finish reason is 'tool-calls'\n if (finishReason === 'tool-calls') {\n for (const toolCall of toolCalls) {\n if (toolCall && !toolCall.sent) {\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n // Coerce invalid arguments to an empty JSON object\n input: isParsableJson(toolCall.function.arguments)\n ? toolCall.function.arguments\n : '{}',\n });\n toolCall.sent = true;\n }\n }\n }\n\n if (textStarted) {\n controller.enqueue({\n type: 'text-end',\n id: textId || generateId(),\n });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\n });\n },\n }),\n ),\n warnings,\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n","import type { LanguageModelV2FinishReason } from '@ai-sdk/provider';\n\nexport function mapWatsonxChatFinishReason(\n reason: string | null | undefined,\n): LanguageModelV2FinishReason {\n switch (reason) {\n case 'stop':\n return 'stop';\n case 'length':\n return 'length';\n case 'tool_calls':\n return 'tool-calls';\n case 'time_limit':\n return 'other';\n case 'cancelled':\n return 'other';\n case 'error':\n return 'error';\n case null:\n case undefined:\n return 'unknown';\n default:\n return 'unknown';\n }\n}\n","import {\n type LanguageModelV2Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\nimport type { WatsonxPrompt } from './watsonx-chat-prompt.ts';\n\nexport function convertToWatsonxChatMessages(\n prompt: LanguageModelV2Prompt,\n): WatsonxPrompt {\n const messages: WatsonxPrompt = [];\n\n for (let i = 0; i < prompt.length; i++) {\n const { role, content } = prompt[i];\n const isLastMessage = i === prompt.length - 1;\n\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user': {\n messages.push({\n role: 'user',\n content: content.map((part) => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n case 'file': {\n // watsonx text chat does not document image/video URL parts; reject files\n throw new UnsupportedFunctionalityError({\n functionality:\n 'File content in user messages is not supported by watsonx text chat',\n });\n }\n }\n }),\n });\n break;\n }\n\n case 'assistant': {\n let text = '';\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 text += part.text;\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:\n typeof part.input === 'string'\n ? part.input\n : JSON.stringify(part.input),\n },\n });\n break;\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content: text,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n case 'tool': {\n for (const toolResponse of content) {\n let resultContent = '';\n\n switch (toolResponse.output.type) {\n case 'text':\n case 'error-text':\n resultContent = toolResponse.output.value;\n break;\n case 'json':\n case 'error-json':\n resultContent = JSON.stringify(toolResponse.output.value);\n break;\n case 'content':\n resultContent = JSON.stringify(toolResponse.output.value);\n break;\n }\n\n messages.push({\n role: 'tool',\n content: resultContent,\n tool_call_id: toolResponse.toolCallId,\n });\n }\n break;\n }\n default: {\n throw new Error(`Unsupported role: ${role}`);\n }\n }\n }\n\n return messages;\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport const watsonxErrorResponseSchema = z.object({\n errors: z.array(\n z.object({\n code: z.string(),\n message: z.string(),\n more_info: z.string(),\n }),\n ),\n trace: z.string(),\n status_code: z.number(),\n});\n\nexport const watsonxFailedResponseHandler: ReturnType<\n typeof createJsonErrorResponseHandler\n> = createJsonErrorResponseHandler({\n errorSchema: watsonxErrorResponseSchema,\n errorToMessage: (data) =>\n [\n 'watsonx API encountered error(s):',\n data.errors.map((e) => '- ' + e.message),\n 'Trace ID: ' + data.trace,\n ].join('\\n'),\n});\n","import type { z } from 'zod/v4';\nimport type {\n WatsonxCluster,\n watsonxModerationsSchema,\n} from '../../types/watsonx-common-schema.ts';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\n\n// <autogen watsonx-chat-model-ids>\n// ⚠️ WARNING: This section that is marked by the autogen ID of watsonx-chat-model-ids (top and bottom) is auto-generated.\n// Do not edit manually.\n// Generated on: 2025-08-14T04:02:59.203Z\n// Description: All of the supported models fetched from watsonx API by region. Only non-deprecated models are included.\n\n// Models here can be called from the /chat endpoint\n// and supports the `CoreMessage[]` type\nexport const ChatModelLists = {\n 'ca-tor': [\n 'ibm/granite-3-8b-instruct',\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-3-3-70b-instruct',\n ],\n 'jp-tok': [\n 'ibm/granite-3-8b-instruct',\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-3-3-70b-instruct',\n 'meta-llama/llama-4-maverick-17b-128e-instruct-fp8',\n 'meta-llama/llama-guard-3-11b-vision',\n 'mistralai/mistral-medium-2505',\n 'mistralai/mistral-small-3-1-24b-instruct-2503',\n ],\n 'eu-gb': [\n 'ibm/granite-3-8b-instruct',\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-3-3-70b-instruct',\n 'meta-llama/llama-4-maverick-17b-128e-instruct-fp8',\n ],\n 'eu-de': [\n 'ibm/granite-3-3-8b-instruct',\n 'ibm/granite-3-8b-instruct',\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-3-2-90b-vision-instruct',\n 'meta-llama/llama-3-3-70b-instruct',\n 'meta-llama/llama-4-maverick-17b-128e-instruct-fp8',\n 'mistralai/mistral-medium-2505',\n 'mistralai/mistral-small-3-1-24b-instruct-2503',\n ],\n 'us-south': [\n 'ibm/granite-3-2-8b-instruct',\n 'ibm/granite-3-3-8b-instruct',\n 'ibm/granite-3-8b-instruct',\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-3-2-90b-vision-instruct',\n 'meta-llama/llama-3-3-70b-instruct',\n 'meta-llama/llama-3-405b-instruct',\n 'meta-llama/llama-4-maverick-17b-128e-instruct-fp8',\n 'meta-llama/llama-guard-3-11b-vision',\n 'mistralai/mistral-medium-2505',\n 'mistralai/mistral-small-3-1-24b-instruct-2503',\n 'openai/gpt-oss-120b',\n ],\n 'au-syd': [\n 'ibm/granite-3-8b-instruct',\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-3-2-90b-vision-instruct',\n 'meta-llama/llama-guard-3-11b-vision',\n ],\n} as const;\n\nexport type WatsonxChatRegion = keyof typeof ChatModelLists;\n\n// Type generated from the object\nexport type WatsonxChatModelId =\n | (typeof ChatModelLists)[WatsonxChatRegion][number]\n | (string & {});\n\n// Region-specific helper type for IDE hinting based on chosen cluster\nexport type WatsonxChatModelIdFor<C extends WatsonxCluster> =\n | (typeof ChatModelLists)[C][number]\n | (string & {});\n\n// Vision model\nexport const VisionModelLists = {\n 'ca-tor': ['meta-llama/llama-3-2-11b-vision-instruct'],\n 'jp-tok': [\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-4-maverick-17b-128e-instruct-fp8',\n 'meta-llama/llama-guard-3-11b-vision',\n 'mistralai/mistral-medium-2505',\n 'mistralai/mistral-small-3-1-24b-instruct-2503',\n ],\n 'eu-gb': [\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-4-maverick-17b-128e-instruct-fp8',\n ],\n 'eu-de': [\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-3-2-90b-vision-instruct',\n 'meta-llama/llama-4-maverick-17b-128e-instruct-fp8',\n 'mistralai/mistral-medium-2505',\n 'mistralai/mistral-small-3-1-24b-instruct-2503',\n ],\n 'us-south': [\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-3-2-90b-vision-instruct',\n 'meta-llama/llama-4-maverick-17b-128e-instruct-fp8',\n 'meta-llama/llama-guard-3-11b-vision',\n 'mistralai/mistral-medium-2505',\n 'mistralai/mistral-small-3-1-24b-instruct-2503',\n ],\n 'au-syd': [\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-3-2-90b-vision-instruct',\n 'meta-llama/llama-guard-3-11b-vision',\n ],\n} as const;\n\n// Function calling model\nexport const FunctionCallingModelLists = {\n 'ca-tor': [\n 'ibm/granite-3-8b-instruct',\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-3-3-70b-instruct',\n ],\n 'jp-tok': [\n 'ibm/granite-3-8b-instruct',\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-3-3-70b-instruct',\n 'meta-llama/llama-4-maverick-17b-128e-instruct-fp8',\n 'mistralai/mistral-medium-2505',\n 'mistralai/mistral-small-3-1-24b-instruct-2503',\n ],\n 'eu-gb': [\n 'ibm/granite-3-8b-instruct',\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-3-3-70b-instruct',\n 'meta-llama/llama-4-maverick-17b-128e-instruct-fp8',\n ],\n 'eu-de': [\n 'ibm/granite-3-3-8b-instruct',\n 'ibm/granite-3-8b-instruct',\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-3-2-90b-vision-instruct',\n 'meta-llama/llama-3-3-70b-instruct',\n 'meta-llama/llama-4-maverick-17b-128e-instruct-fp8',\n 'mistralai/mistral-medium-2505',\n 'mistralai/mistral-small-3-1-24b-instruct-2503',\n ],\n 'us-south': [\n 'ibm/granite-3-2-8b-instruct',\n 'ibm/granite-3-3-8b-instruct',\n 'ibm/granite-3-8b-instruct',\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-3-2-90b-vision-instruct',\n 'meta-llama/llama-3-3-70b-instruct',\n 'meta-llama/llama-3-405b-instruct',\n 'meta-llama/llama-4-maverick-17b-128e-instruct-fp8',\n 'mistralai/mistral-medium-2505',\n 'mistralai/mistral-small-3-1-24b-instruct-2503',\n 'openai/gpt-oss-120b',\n ],\n 'au-syd': [\n 'ibm/granite-3-8b-instruct',\n 'meta-llama/llama-3-2-11b-vision-instruct',\n 'meta-llama/llama-3-2-90b-vision-instruct',\n ],\n} as const;\n// </autogen watsonx-chat-model-ids>\n\n// watsonx AI SDK provider chat settings\nexport type WatsonxChatConfig = {\n provider: string;\n clusterURL: string;\n projectID: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n version: string;\n};\n\n// watsonx specific settings parameters\nexport interface WatsonxChatSetting {\n moderations?: z.infer<typeof watsonxModerationsSchema>;\n}\n","import { z } from 'zod/v4';\nimport { systemDetailsSchema } from '../../types/watsonx-common-schema.ts';\n\nexport const watsonxChatChunkSchema = z.object({\n id: z.string().nullish(),\n model_id: z.string().nullish(),\n created: z.number().nullish(),\n choices: z.array(\n z.object({\n delta: z.object({\n role: z.enum(['assistant']).optional(),\n content: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().optional(),\n type: z.literal('function').nullish(),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n finish_reason: z\n .enum([\n 'stop',\n 'length',\n 'tool_calls',\n 'time_limit',\n 'cancelled',\n 'error',\n ])\n .nullish(),\n index: z.number(),\n }),\n ),\n model_version: z.string().nullish(),\n created_at: z.string().nullish(),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n })\n .nullish(),\n system: systemDetailsSchema,\n});\n\nexport const watsonxChatResponseSchema = z.object({\n id: z.string(),\n model_id: z.string(),\n created: z.number(),\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant'),\n content: z.string().nullish(),\n refusal: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n index: z.number(),\n finish_reason: z.enum([\n 'stop',\n 'length',\n 'tool_calls',\n 'time_limit',\n 'cancelled',\n 'error',\n ]),\n }),\n ),\n model_version: z.string().nullish(),\n created_at: z.string(),\n usage: z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n }),\n system: systemDetailsSchema,\n});\n","import { z } from 'zod/v4';\n\n// Common types shared across watsonx provider\nexport const WatsonxClusters = [\n 'ca-tor',\n 'jp-tok',\n 'eu-gb',\n 'eu-de',\n 'us-south',\n 'au-syd',\n] as const;\n\nexport type WatsonxCluster = (typeof WatsonxClusters)[number];\n\nexport const systemDetailsSchema = z\n .object({\n warnings: z\n .array(\n z.object({\n message: z.string().optional(),\n id: z.string().optional(),\n more_info: z.string().optional(),\n additional_properties: z.record(z.string(), z.unknown()).optional(),\n }),\n )\n .optional(),\n })\n .optional();\n\nexport const watsonxModerationsSchema = z\n .object({\n hap: z.object({\n input: z.object({\n enabled: z.boolean(),\n threshold: z.number().min(0).max(1),\n }),\n output: z.object({\n enabled: z.boolean(),\n threshold: z.number().min(0).max(1),\n }),\n mask: z.object({\n remove_entity_value: z.boolean(),\n }),\n }),\n pii: z.object({\n input: z.object({\n enabled: z.boolean(),\n }),\n output: z.object({\n enabled: z.boolean(),\n }),\n mask: z.object({\n remove_entity_value: z.boolean(),\n }),\n }),\n })\n .optional();\n","import {\n TooManyEmbeddingValuesForCallError,\n type EmbeddingModelV2,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { watsonxFailedResponseHandler } from '../../types/watsonx-response-schema.ts';\nimport type {\n WatsonxEmbeddingConfig,\n WatsonxEmbeddingModelId,\n WatsonxEmbeddingSetting,\n} from './watsonx-embedding-model-settings.ts';\nimport { systemDetailsSchema } from '../../types/watsonx-common-schema.ts';\n\nexport class WatsonxEmbeddingModel implements EmbeddingModelV2<string> {\n private readonly config: WatsonxEmbeddingConfig;\n\n readonly specificationVersion = 'v2';\n readonly modelId: WatsonxEmbeddingModelId;\n\n private readonly settings: WatsonxEmbeddingSetting;\n\n get provider(): string {\n return this.config.provider;\n }\n\n get maxEmbeddingsPerCall(): number {\n return this.settings.maxEmbeddingsPerCall ?? 32;\n }\n\n get supportsParallelCalls(): boolean {\n // Parallel calls are technically possible,\n // but I have been hitting rate limits and disable them for now.\n return this.settings.supportsParallelCalls ?? false;\n }\n\n constructor(\n modelId: WatsonxEmbeddingModelId,\n settings: WatsonxEmbeddingSetting,\n config: WatsonxEmbeddingConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n #WatsonxTextEmbeddingResponseSchema = z.object({\n model_id: z.string(),\n results: z.array(\n z.object({\n embedding: z.array(z.number()),\n input: z\n .object({\n text: z.string(),\n })\n .nullish(),\n }),\n ),\n created_at: z.string(),\n input_token_count: z.number(),\n system: systemDetailsSchema,\n });\n\n async doEmbed({\n values,\n abortSignal,\n headers,\n }: Parameters<EmbeddingModelV2<string>['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV2<string>['doEmbed']>>\n > {\n if (values.length > this.maxEmbeddingsPerCall) {\n throw new TooManyEmbeddingValuesForCallError({\n provider: this.provider,\n modelId: this.modelId,\n maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n values,\n });\n }\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.clusterURL}/text/embeddings?version=${this.config.version}`,\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n model_id: this.modelId,\n project_id: this.config.projectID,\n inputs: values,\n encoding_format: 'float',\n ...(this.settings.truncate_input_tokens != null ||\n this.settings.return_options != null\n ? {\n parameters: {\n ...(this.settings.truncate_input_tokens != null\n ? {\n truncate_input_tokens:\n this.settings.truncate_input_tokens,\n }\n : {}),\n ...(this.settings.return_options != null\n ? { return_options: this.settings.return_options }\n : {}),\n },\n }\n : {}),\n },\n failedResponseHandler: watsonxFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n this.#WatsonxTextEmbeddingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n return {\n embeddings: response.results.map((r) => r.embedding),\n usage: {\n tokens: response.input_token_count,\n },\n response: { headers: responseHeaders },\n };\n }\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV2,\n type LanguageModelV2CallOptions,\n type LanguageModelV2CallWarning,\n type LanguageModelV2FinishReason,\n type LanguageModelV2ResponseMetadata,\n type LanguageModelV2StreamPart,\n type LanguageModelV2Usage,\n type SharedV2Headers,\n} from '@ai-sdk/provider';\nimport {\n type ParseResult,\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n generateId,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { watsonxFailedResponseHandler } from '../../types/watsonx-response-schema.ts';\nimport { getResponseMetadata } from '../../utils/get-response-metadata.ts';\nimport type {\n WatsonxCompletionConfig,\n WatsonxCompletionModelId,\n WatsonxCompletionSetting,\n} from './watsonx-completion-model-settings.ts';\nimport { convertToWatsonxCompletion } from './convert-to-watsonx-completion.ts';\nimport {\n watsonxCompletionChunkSchema,\n watsonxCompletionResponseSchema,\n} from './watsonx-completion-schema.ts';\nimport { mapWatsonxCompletionFinishReason } from './watsonx-completion-finish-reason.ts';\n\nexport class WatsonxCompletionModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2' as const;\n readonly provider: string;\n readonly defaultObjectGenerationMode = undefined;\n readonly supportsImageUrls = false;\n readonly supportedUrls: Record<string, RegExp[]> = {};\n\n readonly modelId: WatsonxCompletionModelId;\n readonly settings: WatsonxCompletionSetting;\n private readonly config: WatsonxCompletionConfig;\n\n constructor(\n modelId: WatsonxCompletionModelId,\n settings: WatsonxCompletionSetting,\n config: WatsonxCompletionConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n this.provider = config.provider;\n }\n\n private getArgs(options: LanguageModelV2CallOptions): {\n args: any;\n warnings: LanguageModelV2CallWarning[];\n } {\n const {\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences: userStopSequences,\n responseFormat,\n seed,\n providerOptions,\n } = options;\n\n const warnings: LanguageModelV2CallWarning[] = [];\n\n if (responseFormat != null && responseFormat.type !== 'text') {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'responseFormat',\n });\n }\n\n const { prompt: completionPrompt, stopSequences } =\n convertToWatsonxCompletion({\n prompt,\n inputFormat: 'prompt',\n });\n\n const stop = [...(stopSequences ?? []), ...(userStopSequences ?? [])];\n\n // Reconstruct body to map with what watsonx expects\n const baseArgs: any = {\n model_id: this.modelId,\n project_id: this.config.projectID,\n input: completionPrompt,\n parameters: {\n // sampling & decoding\n decoding_method: this.settings.decodingMethod ?? 'greedy',\n temperature,\n top_p: topP,\n top_k: topK,\n // penalties and limits\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n max_new_tokens: maxOutputTokens ?? this.settings.maxNewTokens,\n min_new_tokens: this.settings.minNewTokens,\n // control & misc\n stop_sequences: stop,\n random_seed: seed,\n time_limit: providerOptions?.watsonx?.timeLimit,\n ...(this.settings.textgenLengthPenalty !== undefined\n ? {\n length_penalty: {\n decay_factor: this.settings.textgenLengthPenalty.decayFactor,\n start_index: this.settings.textgenLengthPenalty.startIndex,\n },\n }\n : {}),\n },\n return_options: {\n input_text: this.settings.returnOptions?.inputText ?? false,\n generated_tokens: this.settings.returnOptions?.generatedTokens ?? false,\n },\n };\n\n return { args: baseArgs, warnings };\n }\n\n async doGenerate(options: LanguageModelV2CallOptions): Promise<{\n content: Array<{ type: 'text'; text: string }>;\n finishReason: LanguageModelV2FinishReason;\n usage: LanguageModelV2Usage;\n warnings: Array<LanguageModelV2CallWarning>;\n request?: { body?: unknown };\n response?: LanguageModelV2ResponseMetadata & {\n headers?: SharedV2Headers;\n body?: unknown;\n };\n }> {\n const { args, warnings } = this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: `${this.config.clusterURL}/text/generation?version=${this.config.version}`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: watsonxFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n watsonxCompletionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n const choice = response.results[0];\n\n if (!choice) {\n throw new Error('No choice in response');\n }\n\n return {\n content: [\n {\n type: 'text' as const,\n text: choice.generated_text,\n },\n ],\n finishReason: mapWatsonxCompletionFinishReason(choice.stop_reason),\n usage: {\n inputTokens: response.usage?.prompt_tokens ?? NaN,\n outputTokens: response.usage?.completion_tokens ?? NaN,\n totalTokens:\n (response.usage?.prompt_tokens ?? 0) +\n (response.usage?.completion_tokens ?? 0),\n },\n warnings,\n request: { body: args },\n response: {\n id: generateId(),\n modelId: response.model_id,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n\n async doStream(options: LanguageModelV2CallOptions): Promise<{\n stream: ReadableStream<LanguageModelV2StreamPart>;\n warnings: Array<LanguageModelV2CallWarning>;\n request?: { body?: unknown };\n response?: LanguageModelV2ResponseMetadata & {\n headers?: SharedV2Headers;\n body?: unknown;\n };\n }> {\n const url = `${this.config.clusterURL}/text/generation_stream?version=${this.config.version}`;\n\n const { args, warnings } = this.getArgs(options);\n\n const body = {\n ...args,\n stream: true,\n };\n\n const { value: response, responseHeaders } = await postJsonToApi({\n url,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: watsonxFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n watsonxCompletionChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let finishReason: LanguageModelV2FinishReason = 'other';\n let usage: LanguageModelV2Usage = {\n inputTokens: Number.NaN,\n outputTokens: Number.NaN,\n totalTokens: Number.NaN,\n };\n let isFirstChunk = true;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof watsonxCompletionChunkSchema>>,\n LanguageModelV2StreamPart\n >({\n transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n // handle error chunks:\n if ('error' in value) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: value.error });\n return;\n }\n\n if (isFirstChunk) {\n isFirstChunk = false;\n controller.enqueue({\n type: 'response-metadata',\n id: value.id ?? generateId(),\n modelId: value.model_id ?? undefined,\n timestamp:\n value.created != null\n ? new Date(value.created * 1000)\n : undefined,\n });\n }\n\n if (value.usage != null) {\n usage = {\n inputTokens: value.usage.prompt_tokens,\n outputTokens: value.usage.completion_tokens,\n totalTokens:\n value.usage.prompt_tokens + value.usage.completion_tokens,\n };\n }\n\n const choice = value.results[0];\n\n if (choice?.stop_reason != null) {\n finishReason = mapWatsonxCompletionFinishReason(\n choice.stop_reason,\n );\n }\n\n if (choice?.generated_text != null) {\n controller.enqueue({\n type: 'text-delta',\n id: generateId(),\n delta: choice.generated_text,\n });\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\n });\n },\n }),\n ),\n warnings,\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n","import {\n InvalidPromptError,\n type LanguageModelV2Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function convertToWatsonxCompletion({\n prompt,\n inputFormat,\n user = 'user',\n assistant = 'assistant',\n}: {\n prompt: LanguageModelV2Prompt;\n inputFormat: 'prompt' | 'messages';\n user?: string;\n assistant?: string;\n}): {\n prompt: string;\n stopSequences?: string[];\n} {\n // When the user supplied a prompt input, we don't transform it:\n if (\n inputFormat === 'prompt' &&\n prompt.length === 1 &&\n prompt[0].role === 'user' &&\n prompt[0].content.length === 1 &&\n prompt[0].content[0].type === 'text'\n ) {\n return { prompt: prompt[0].content[0].text };\n }\n\n // otherwise transform to a chat message format:\n let text = '';\n\n // if first message is a system message, add it to the text:\n if (prompt[0].role === 'system') {\n text += `${prompt[0].content}\\n\\n`;\n prompt = prompt.slice(1);\n }\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n throw new InvalidPromptError({\n message: 'Unexpected system message in prompt: ${content}',\n prompt,\n });\n }\n\n case 'user': {\n const userMessage = content\n .map((part) => {\n switch (part.type) {\n case 'text': {\n return part.text;\n }\n case 'file': {\n throw new UnsupportedFunctionalityError({\n functionality: 'file',\n });\n }\n }\n })\n .join('');\n\n text += `${user}:\\n${userMessage}\\n\\n`;\n break;\n }\n\n case 'assistant': {\n const assistantMessage = content\n .map((part) => {\n switch (part.type) {\n case 'text': {\n return part.text;\n }\n case 'tool-call': {\n throw new UnsupportedFunctionalityError({\n functionality: 'tool-call messages',\n });\n }\n }\n })\n .join('');\n\n text += `${assistant}:\\n${assistantMessage}\\n\\n`;\n break;\n }\n\n case 'tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'tool messages',\n });\n }\n\n default: {\n throw new Error(`Unsupported role: ${role}`);\n }\n }\n }\n\n // Assistant message prefix:\n text += `${assistant}:\\n`;\n\n return {\n prompt: text,\n stopSequences: [`\\n${user}:`],\n };\n}\n","import { z } from 'zod/v4';\nimport {\n systemDetailsSchema,\n watsonxModerationsSchema,\n} from '../../types/watsonx-common-schema.ts';\n\nconst textgenTokenInfo = z.array(\n z.object({\n text: z.string(),\n logprob: z.number(),\n rank: z.number(),\n top_tokens: z.array(\n z.object({\n text: z.string(),\n logprob: z.number(),\n }),\n ),\n }),\n);\n\nexport const watsonxCompletionChunkSchema = z.object({\n id: z.string().nullish(),\n model_id: z.string().nullish(),\n created: z.number().nullish(),\n results: z.array(\n z.object({\n generated_text: z.string(),\n stop_reason: z.string(),\n generated_token_count: z.number().nullish(),\n input_token_count: z.number().nullish(),\n seed: z.number().nullish(),\n generated_tokens: textgenTokenInfo.optional(),\n input_tokens: textgenTokenInfo.optional(),\n moderations: watsonxModerationsSchema,\n }),\n ),\n model_version: z.string().nullish(),\n created_at: z.string().nullish(),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n })\n .nullish(),\n system: systemDetailsSchema,\n});\n\nexport const watsonxCompletionResponseSchema = z.object({\n id: z.string().nullish(),\n model_id: z.string(),\n model_version: z.string().nullish(),\n created_at: z.string(),\n results: z.array(\n z.object({\n generated_text: z.string(),\n stop_reason: z.string(),\n generated_token_count: z.number(),\n input_token_count: z.number(),\n seed: z.number().nullish(),\n generated_tokens: textgenTokenInfo.optional(),\n input_tokens: textgenTokenInfo.optional(),\n moderations: watsonxModerationsSchema,\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n })\n .nullish(),\n system: systemDetailsSchema,\n});\n","import type { LanguageModelV1FinishReason } from '@ai-sdk/provider';\n\nexport function mapWatsonxCompletionFinishReason(\n reason: string | null | undefined,\n): LanguageModelV1FinishReason {\n switch (reason) {\n case 'not_finished':\n return 'other';\n case 'max_tokens':\n case 'token_limit':\n return 'length';\n case 'eos_token':\n case 'stop_sequence':\n return 'stop';\n case 'cancelled':\n return 'stop';\n case 'time_limit':\n return 'unknown';\n case 'error':\n return 'error';\n case null:\n case undefined:\n return 'unknown';\n default:\n return 'unknown';\n }\n}\n","import type { FetchFunction } from '@ai-sdk/provider-utils';\nimport type { WatsonxCluster } from '../../types/watsonx-common-schema.ts';\n\n// <autogen watsonx-embedding-model-ids>\n// ⚠️ WARNING: This section that is marked by the autogen ID of watsonx-embedding-model-ids (top and bottom) is auto-generated.\n// Do not edit manually.\n// Generated on: 2025-08-14T04:02:59.204Z\n// Description: All of the supported embedding models fetched from watsonx API by region. Only non-deprecated models are included.\n\n// Models here can be called from the /chat endpoint\n// and supports the `CoreMessage[]` type\nexport const EmbedingModelLists = {\n 'ca-tor': [\n 'ibm/granite-embedding-278m-multilingual',\n 'ibm/slate-125m-english-rtrvr-v2',\n 'ibm/slate-30m-english-rtrvr-v2',\n 'intfloat/multilingual-e5-large',\n ],\n 'jp-tok': [\n 'ibm/granite-embedding-278m-multilingual',\n 'ibm/slate-125m-english-rtrvr-v2',\n 'ibm/slate-30m-english-rtrvr-v2',\n 'intfloat/multilingual-e5-large',\n 'sentence-transformers/all-minilm-l6-v2',\n ],\n 'eu-gb': [\n 'ibm/granite-embedding-278m-multilingual',\n 'ibm/slate-125m-english-rtrvr-v2',\n 'ibm/slate-30m-english-rtrvr-v2',\n 'intfloat/multilingual-e5-large',\n 'sentence-transformers/all-minilm-l6-v2',\n ],\n 'eu-de': [\n 'ibm/granite-embedding-278m-multilingual',\n 'ibm/slate-125m-english-rtrvr-v2',\n 'ibm/slate-30m-english-rtrvr-v2',\n 'intfloat/multilingual-e5-large',\n 'sentence-transformers/all-minilm-l6-v2',\n ],\n 'us-south': [\n 'ibm/granite-embedding-278m-multilingual',\n 'ibm/slate-125m-english-rtrvr-v2',\n 'ibm/slate-30m-english-rtrvr-v2',\n 'intfloat/multilingual-e5-large',\n 'sentence-transformers/all-minilm-l6-v2',\n ],\n 'au-syd': [\n 'ibm/slate-125m-english-rtrvr-v2',\n 'ibm/slate-30m-english-rtrvr-v2',\n 'intfloat/multilingual-e5-large',\n ],\n} as const;\n\nexport type WatsonxEmbeddingRegion = keyof typeof EmbedingModelLists;\n\n// Type generated from the object\nexport type WatsonxEmbeddingModelId =\n | (typeof EmbedingModelLists)[WatsonxEmbeddingRegion][number]\n | (string & {});\n\n// Region-specific helper type for IDE hinting based on chosen cluster\nexport type WatsonxEmbeddingModelIdFor<C extends WatsonxCluster> =\n | (typeof EmbedingModelLists)[C][number]\n | (string & {});\n\n// </autogen watsonx-embedding-model-ids>\n\n// watsonx AI SDK provider embedding settings\nexport type WatsonxEmbeddingConfig = {\n provider: string;\n clusterURL: string;\n projectID: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n version: string;\n};\n\nexport interface WatsonxEmbeddingSetting {\n /**\n Represents the maximum number of tokens accepted per input.\n This can be used to avoid requests failing due to input being longer than configured limits. If the text is truncated, then it truncates the end of the input (on the right),\n so the start of the input will remain the same.\n If this value exceeds the maximum sequence length (refer to the documentation to find this value for the model)\n then the call will fail if the total number of tokens exceeds the maximum sequence length.\n */\n truncate_input_tokens?: number;\n\n /**\n Maximum number of embeddings that can be requested in a single call.\n */\n maxEmbeddingsPerCall?: number;\n\n /**\n Whether the model supports parallel embedding calls.\n */\n supportsParallelCalls?: boolean;\n\n /**\n Include the input text in each of the results documents.\n */\n return_options?: {\n input_text?: boolean;\n };\n}\n","import type { z } from 'zod/v4';\nimport type {\n WatsonxCluster,\n watsonxModerationsSchema,\n} from '../../types/watsonx-common-schema.ts';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\n\n// <autogen watsonx-completion-model-ids>\n// ⚠️ WARNING: This section that is marked by the autogen ID of watsonx-completion-model-ids (top and bottom) is auto-generated.\n// Do not edit manually.\n// Generated on: 2025-08-14T04:02:59.211Z\n// Description: All of the supported completion models fetched from watsonx API by region. Only non-deprecated models are included.\n\n// Models here can be called from the /chat endpoint\n// and supports the `CoreMessage[]` type\nexport const CompletionModelLists = {\n 'ca-tor': [],\n 'jp-tok': [],\n 'eu-gb': [],\n 'eu-de': ['sdaia/allam-1-13b-instruct'],\n 'us-south': ['ibm/granite-8b-code-instruct'],\n 'au-syd': ['ibm/granite-8b-code-instruct'],\n} as const;\n\nexport type WatsonxCompletionRegion = keyof typeof CompletionModelLists;\n\n// Type generated from the object\nexport type WatsonxCompletionModelId =\n | (typeof CompletionModelLists)[WatsonxCompletionRegion][number]\n | (string & {});\n\n// Region-specific helper type for IDE hinting based on chosen cluster\nexport type WatsonxCompletionModelIdFor<C extends WatsonxCluster> =\n | (typeof CompletionModelLists)[C][number]\n | (string & {});\n\n// </autogen watsonx-completion-model-ids>\n\n// watsonx AI SDK provider chat settings\nexport type WatsonxCompletionConfig = {\n provider: string;\n clusterURL: string;\n projectID: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n version: string;\n};\n\n// watsonx specific settings parameters\nexport interface WatsonxCompletionSetting {\n moderations?: z.infer<typeof watsonxModerationsSchema>;\n decodingMethod?: 'sample' | 'greedy';\n returnInputText?: boolean;\n maxNewTokens?: number;\n minNewTokens?: number;\n returnOptions?: {\n inputText?: boolean;\n generatedTokens?: boolean;\n };\n textgenLengthPenalty?: {\n decayFactor?: number;\n startIndex?: number;\n };\n}\n"],"mappings":"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","names":["UnsupportedFunctionalityError","z","z","z","UnsupportedFunctionalityError","toolCall","combineHeaders","createJsonResponseHandler","postJsonToApi","z","z","postJsonToApi","combineHeaders","createJsonResponseHandler","combineHeaders","createEventSourceResponseHandler","createJsonResponseHandler","postJsonToApi","generateId","UnsupportedFunctionalityError","z","z","postJsonToApi","combineHeaders","createJsonResponseHandler","generateId","createEventSourceResponseHandler"]}