@ai-sdk/cohere 4.0.0-canary.33 → 4.0.0-canary.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @ai-sdk/cohere
2
2
 
3
+ ## 4.0.0-canary.35
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [5463d0d]
8
+ - @ai-sdk/provider-utils@5.0.0-canary.32
9
+ - @ai-sdk/provider@4.0.0-canary.16
10
+
11
+ ## 4.0.0-canary.34
12
+
13
+ ### Patch Changes
14
+
15
+ - f2919d5: feat(provider/cohere): add support for passing images to Cohere models
16
+
3
17
  ## 4.0.0-canary.33
4
18
 
5
19
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ import { z } from 'zod/v4';
2
2
  import { ProviderV4, LanguageModelV4, EmbeddingModelV4, RerankingModelV4 } from '@ai-sdk/provider';
3
3
  import { FetchFunction } from '@ai-sdk/provider-utils';
4
4
 
5
- type CohereChatModelId = 'command-a-03-2025' | 'command-a-reasoning-08-2025' | 'command-r7b-12-2024' | 'command-r-plus-04-2024' | 'command-r-plus' | 'command-r-08-2024' | 'command-r-03-2024' | 'command-r' | 'command' | 'command-nightly' | 'command-light' | 'command-light-nightly' | (string & {});
5
+ type CohereChatModelId = 'command-a-03-2025' | 'command-a-reasoning-08-2025' | 'command-a-vision-07-2025' | 'command-r7b-12-2024' | 'command-r-plus-04-2024' | 'command-r-plus' | 'command-r-08-2024' | 'command-r-03-2024' | 'command-r' | 'command' | 'command-nightly' | 'command-light' | 'command-light-nightly' | (string & {});
6
6
  declare const cohereLanguageModelChatOptions: z.ZodObject<{
7
7
  thinking: z.ZodOptional<z.ZodObject<{
8
8
  type: z.ZodOptional<z.ZodEnum<{
package/dist/index.js CHANGED
@@ -16,7 +16,7 @@ import {
16
16
  createJsonResponseHandler,
17
17
  isCustomReasoning,
18
18
  mapReasoningToProviderBudget,
19
- parseProviderOptions,
19
+ parseProviderOptions as parseProviderOptions2,
20
20
  postJsonToApi,
21
21
  serializeModelOptions,
22
22
  WORKFLOW_SERIALIZE,
@@ -40,6 +40,14 @@ var cohereLanguageModelChatOptions = z.object({
40
40
  tokenBudget: z.number().optional()
41
41
  }).optional()
42
42
  });
43
+ var cohereImagePartProviderOptions = z.object({
44
+ /**
45
+ * Image fidelity level passed through as `image_url.detail` on the Cohere chat API.
46
+ *
47
+ * @see https://docs.cohere.com/docs/image-inputs
48
+ */
49
+ detail: z.enum(["auto", "low", "high"]).optional()
50
+ });
43
51
 
44
52
  // src/cohere-error.ts
45
53
  import { createJsonErrorResponseHandler } from "@ai-sdk/provider-utils";
@@ -151,7 +159,14 @@ function convertCohereUsage(tokens) {
151
159
  import {
152
160
  UnsupportedFunctionalityError as UnsupportedFunctionalityError2
153
161
  } from "@ai-sdk/provider";
154
- function convertToCohereChatPrompt(prompt) {
162
+ import {
163
+ convertToBase64,
164
+ getTopLevelMediaType,
165
+ parseProviderOptions,
166
+ resolveFullMediaType
167
+ } from "@ai-sdk/provider-utils";
168
+ async function convertToCohereChatPrompt(prompt) {
169
+ var _a;
155
170
  const messages = [];
156
171
  const documents = [];
157
172
  const warnings = [];
@@ -162,47 +177,74 @@ function convertToCohereChatPrompt(prompt) {
162
177
  break;
163
178
  }
164
179
  case "user": {
165
- messages.push({
166
- role: "user",
167
- content: content.map((part) => {
168
- switch (part.type) {
169
- case "text": {
170
- return part.text;
180
+ const userContentParts = [];
181
+ let hasImage = false;
182
+ for (const part of content) {
183
+ switch (part.type) {
184
+ case "text": {
185
+ if (part.text.length > 0) {
186
+ userContentParts.push({ type: "text", text: part.text });
171
187
  }
172
- case "file": {
173
- let textContent;
174
- switch (part.data.type) {
175
- case "reference": {
176
- throw new UnsupportedFunctionalityError2({
177
- functionality: "file parts with provider references"
178
- });
179
- }
180
- case "url": {
181
- throw new UnsupportedFunctionalityError2({
182
- functionality: "File URL data",
183
- message: "URLs should be downloaded by the AI SDK and not reach this point. This indicates a configuration issue."
184
- });
185
- }
186
- case "text": {
187
- textContent = part.data.text;
188
- break;
189
- }
190
- case "data": {
191
- textContent = typeof part.data.data === "string" ? part.data.data : new TextDecoder().decode(part.data.data);
192
- break;
193
- }
194
- }
195
- documents.push({
196
- data: {
197
- text: textContent,
198
- title: part.filename
188
+ break;
189
+ }
190
+ case "file": {
191
+ if (getTopLevelMediaType(part.mediaType) === "image") {
192
+ hasImage = true;
193
+ const url = buildImageUrl({ part });
194
+ const cohereOptions = (_a = await parseProviderOptions({
195
+ provider: "cohere",
196
+ providerOptions: part.providerOptions,
197
+ schema: cohereImagePartProviderOptions
198
+ })) != null ? _a : {};
199
+ userContentParts.push({
200
+ type: "image_url",
201
+ image_url: {
202
+ url,
203
+ ...cohereOptions.detail ? { detail: cohereOptions.detail } : {}
199
204
  }
200
205
  });
201
- return "";
206
+ break;
202
207
  }
208
+ let textContent;
209
+ switch (part.data.type) {
210
+ case "reference": {
211
+ throw new UnsupportedFunctionalityError2({
212
+ functionality: "file parts with provider references"
213
+ });
214
+ }
215
+ case "url": {
216
+ throw new UnsupportedFunctionalityError2({
217
+ functionality: "File URL data",
218
+ message: "URLs should be downloaded by the AI SDK and not reach this point. This indicates a configuration issue."
219
+ });
220
+ }
221
+ case "text": {
222
+ textContent = part.data.text;
223
+ break;
224
+ }
225
+ case "data": {
226
+ textContent = typeof part.data.data === "string" ? part.data.data : new TextDecoder().decode(part.data.data);
227
+ break;
228
+ }
229
+ }
230
+ documents.push({
231
+ data: {
232
+ text: textContent,
233
+ title: part.filename
234
+ }
235
+ });
236
+ break;
203
237
  }
204
- }).join("")
205
- });
238
+ }
239
+ }
240
+ if (hasImage) {
241
+ messages.push({ role: "user", content: userContentParts });
242
+ } else {
243
+ messages.push({
244
+ role: "user",
245
+ content: userContentParts.map((p) => p.type === "text" ? p.text : "").join("")
246
+ });
247
+ }
206
248
  break;
207
249
  }
208
250
  case "assistant": {
@@ -238,7 +280,7 @@ function convertToCohereChatPrompt(prompt) {
238
280
  case "tool": {
239
281
  messages.push(
240
282
  ...content.filter((toolResult) => toolResult.type !== "tool-approval-response").map((toolResult) => {
241
- var _a;
283
+ var _a2;
242
284
  const output = toolResult.output;
243
285
  let contentValue;
244
286
  switch (output.type) {
@@ -247,7 +289,7 @@ function convertToCohereChatPrompt(prompt) {
247
289
  contentValue = output.value;
248
290
  break;
249
291
  case "execution-denied":
250
- contentValue = (_a = output.reason) != null ? _a : "Tool call execution denied.";
292
+ contentValue = (_a2 = output.reason) != null ? _a2 : "Tool call execution denied.";
251
293
  break;
252
294
  case "content":
253
295
  case "json":
@@ -272,6 +314,26 @@ function convertToCohereChatPrompt(prompt) {
272
314
  }
273
315
  return { messages, documents, warnings };
274
316
  }
317
+ function buildImageUrl({ part }) {
318
+ switch (part.data.type) {
319
+ case "url": {
320
+ return part.data.url.toString();
321
+ }
322
+ case "data": {
323
+ return `data:${resolveFullMediaType({ part })};base64,${convertToBase64(part.data.data)}`;
324
+ }
325
+ case "reference": {
326
+ throw new UnsupportedFunctionalityError2({
327
+ functionality: "image file parts with provider references"
328
+ });
329
+ }
330
+ case "text": {
331
+ throw new UnsupportedFunctionalityError2({
332
+ functionality: "image file parts with text data"
333
+ });
334
+ }
335
+ }
336
+ }
275
337
 
276
338
  // src/map-cohere-finish-reason.ts
277
339
  function mapCohereFinishReason(finishReason) {
@@ -295,7 +357,7 @@ var CohereChatLanguageModel = class _CohereChatLanguageModel {
295
357
  constructor(modelId, config) {
296
358
  this.specificationVersion = "v4";
297
359
  this.supportedUrls = {
298
- // No URLs are supported.
360
+ "image/*": [/^https?:\/\/.*$/]
299
361
  };
300
362
  this.modelId = modelId;
301
363
  this.config = config;
@@ -330,7 +392,7 @@ var CohereChatLanguageModel = class _CohereChatLanguageModel {
330
392
  }) {
331
393
  var _a;
332
394
  const warnings = [];
333
- const cohereOptions = (_a = await parseProviderOptions({
395
+ const cohereOptions = (_a = await parseProviderOptions2({
334
396
  provider: "cohere",
335
397
  providerOptions,
336
398
  schema: cohereLanguageModelChatOptions
@@ -339,7 +401,7 @@ var CohereChatLanguageModel = class _CohereChatLanguageModel {
339
401
  messages: chatPrompt,
340
402
  documents: cohereDocuments,
341
403
  warnings: promptWarnings
342
- } = convertToCohereChatPrompt(prompt);
404
+ } = await convertToCohereChatPrompt(prompt);
343
405
  const {
344
406
  tools: cohereTools,
345
407
  toolChoice: cohereToolChoice,
@@ -829,7 +891,7 @@ import {
829
891
  import {
830
892
  combineHeaders as combineHeaders2,
831
893
  createJsonResponseHandler as createJsonResponseHandler2,
832
- parseProviderOptions as parseProviderOptions2,
894
+ parseProviderOptions as parseProviderOptions3,
833
895
  postJsonToApi as postJsonToApi2,
834
896
  serializeModelOptions as serializeModelOptions2,
835
897
  WORKFLOW_SERIALIZE as WORKFLOW_SERIALIZE2,
@@ -896,7 +958,7 @@ var CohereEmbeddingModel = class _CohereEmbeddingModel {
896
958
  providerOptions
897
959
  }) {
898
960
  var _a, _b, _c;
899
- const embeddingOptions = await parseProviderOptions2({
961
+ const embeddingOptions = await parseProviderOptions3({
900
962
  provider: "cohere",
901
963
  providerOptions,
902
964
  schema: cohereEmbeddingModelOptions
@@ -957,7 +1019,7 @@ var cohereTextEmbeddingResponseSchema = z5.object({
957
1019
  import {
958
1020
  combineHeaders as combineHeaders3,
959
1021
  createJsonResponseHandler as createJsonResponseHandler3,
960
- parseProviderOptions as parseProviderOptions3,
1022
+ parseProviderOptions as parseProviderOptions4,
961
1023
  postJsonToApi as postJsonToApi3
962
1024
  } from "@ai-sdk/provider-utils";
963
1025
 
@@ -1014,7 +1076,7 @@ var CohereRerankingModel = class {
1014
1076
  providerOptions
1015
1077
  }) {
1016
1078
  var _a;
1017
- const rerankingOptions = await parseProviderOptions3({
1079
+ const rerankingOptions = await parseProviderOptions4({
1018
1080
  provider: "cohere",
1019
1081
  providerOptions,
1020
1082
  schema: cohereRerankingModelOptionsSchema
@@ -1065,7 +1127,7 @@ var CohereRerankingModel = class {
1065
1127
  };
1066
1128
 
1067
1129
  // src/version.ts
1068
- var VERSION = true ? "4.0.0-canary.33" : "0.0.0-test";
1130
+ var VERSION = true ? "4.0.0-canary.35" : "0.0.0-test";
1069
1131
 
1070
1132
  // src/cohere-provider.ts
1071
1133
  function createCohere(options = {}) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cohere-provider.ts","../src/cohere-chat-language-model.ts","../src/cohere-chat-language-model-options.ts","../src/cohere-error.ts","../src/cohere-prepare-tools.ts","../src/convert-cohere-usage.ts","../src/convert-to-cohere-chat-prompt.ts","../src/map-cohere-finish-reason.ts","../src/cohere-embedding-model.ts","../src/cohere-embedding-model-options.ts","../src/reranking/cohere-reranking-model.ts","../src/reranking/cohere-reranking-api.ts","../src/reranking/cohere-reranking-model-options.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type EmbeddingModelV4,\n type LanguageModelV4,\n type RerankingModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { CohereChatLanguageModel } from './cohere-chat-language-model';\nimport type { CohereChatModelId } from './cohere-chat-language-model-options';\nimport { CohereEmbeddingModel } from './cohere-embedding-model';\nimport type { CohereRerankingModelId } from './reranking/cohere-reranking-model-options';\nimport { CohereRerankingModel } from './reranking/cohere-reranking-model';\nimport type { CohereEmbeddingModelId } from './cohere-embedding-model-options';\nimport { VERSION } from './version';\n\nexport interface CohereProvider extends ProviderV4 {\n (modelId: CohereChatModelId): LanguageModelV4;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: CohereChatModelId): LanguageModelV4;\n\n /**\n * Creates a model for text embeddings.\n */\n embedding(modelId: CohereEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for text embeddings.\n */\n embeddingModel(modelId: CohereEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embedding` instead.\n */\n textEmbedding(modelId: CohereEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: CohereEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for reranking.\n */\n reranking(modelId: CohereRerankingModelId): RerankingModelV4;\n\n /**\n * Creates a model for reranking.\n */\n rerankingModel(modelId: CohereRerankingModelId): RerankingModelV4;\n}\n\nexport interface CohereProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers.\n * The default prefix is `https://api.cohere.com/v2`.\n */\n baseURL?: string;\n\n /**\n * API key that is being send using the `Authorization` header.\n * It defaults to the `COHERE_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 * Optional function to generate a unique ID for each request.\n */\n generateId?: () => string;\n}\n\n/**\n * Create a Cohere AI provider instance.\n */\nexport function createCohere(\n options: CohereProviderSettings = {},\n): CohereProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? 'https://api.cohere.com/v2';\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'COHERE_API_KEY',\n description: 'Cohere',\n })}`,\n ...options.headers,\n },\n `ai-sdk/cohere/${VERSION}`,\n );\n\n const createChatModel = (modelId: CohereChatModelId) =>\n new CohereChatLanguageModel(modelId, {\n provider: 'cohere.chat',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n generateId: options.generateId ?? generateId,\n });\n\n const createEmbeddingModel = (modelId: CohereEmbeddingModelId) =>\n new CohereEmbeddingModel(modelId, {\n provider: 'cohere.textEmbedding',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createRerankingModel = (modelId: CohereRerankingModelId) =>\n new CohereRerankingModel(modelId, {\n provider: 'cohere.reranking',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: CohereChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Cohere model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId);\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = createChatModel;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.reranking = createRerankingModel;\n provider.rerankingModel = createRerankingModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\n/**\n * Default Cohere provider instance.\n */\nexport const cohere = createCohere();\n","import type {\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4FinishReason,\n LanguageModelV4GenerateResult,\n LanguageModelV4StreamPart,\n LanguageModelV4StreamResult,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n isCustomReasoning,\n mapReasoningToProviderBudget,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type InferSchema,\n type FetchFunction,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n cohereLanguageModelChatOptions,\n type CohereChatModelId,\n} from './cohere-chat-language-model-options';\nimport { cohereFailedResponseHandler } from './cohere-error';\nimport { prepareTools } from './cohere-prepare-tools';\nimport {\n convertCohereUsage,\n type CohereUsageTokens,\n} from './convert-cohere-usage';\nimport { convertToCohereChatPrompt } from './convert-to-cohere-chat-prompt';\nimport { mapCohereFinishReason } from './map-cohere-finish-reason';\n\ntype CohereChatConfig = {\n provider: string;\n baseURL: string;\n headers?: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n generateId: () => string;\n};\n\nexport class CohereChatLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n\n readonly modelId: CohereChatModelId;\n\n readonly supportedUrls = {\n // No URLs are supported.\n };\n\n private readonly config: CohereChatConfig;\n\n static [WORKFLOW_SERIALIZE](model: CohereChatLanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: CohereChatModelId;\n config: CohereChatConfig;\n }) {\n return new CohereChatLanguageModel(options.modelId, options.config);\n }\n\n constructor(modelId: CohereChatModelId, config: CohereChatConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\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 seed,\n reasoning,\n tools,\n toolChoice,\n providerOptions,\n }: LanguageModelV4CallOptions) {\n const warnings: SharedV4Warning[] = [];\n\n const cohereOptions =\n (await parseProviderOptions({\n provider: 'cohere',\n providerOptions,\n schema: cohereLanguageModelChatOptions,\n })) ?? {};\n\n const {\n messages: chatPrompt,\n documents: cohereDocuments,\n warnings: promptWarnings,\n } = convertToCohereChatPrompt(prompt);\n\n const {\n tools: cohereTools,\n toolChoice: cohereToolChoice,\n toolWarnings,\n } = prepareTools({ tools, toolChoice });\n\n warnings.push(...toolWarnings, ...promptWarnings);\n\n return {\n args: {\n // model id:\n model: this.modelId,\n\n // standardized settings:\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n max_tokens: maxOutputTokens,\n temperature,\n p: topP,\n k: topK,\n seed,\n stop_sequences: stopSequences,\n\n // response format:\n response_format:\n responseFormat?.type === 'json'\n ? { type: 'json_object', json_schema: responseFormat.schema }\n : undefined,\n\n // messages:\n messages: chatPrompt,\n\n // tools:\n tools: cohereTools,\n tool_choice: cohereToolChoice,\n\n // documents for RAG:\n ...(cohereDocuments.length > 0 && { documents: cohereDocuments }),\n\n // reasoning:\n ...resolveCohereThinking({\n reasoning,\n cohereOptions,\n warnings,\n }),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { args, warnings } = await this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/chat`,\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body: args,\n failedResponseHandler: cohereFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n cohereChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const content: Array<LanguageModelV4Content> = [];\n\n for (const item of response.message.content ?? []) {\n if (item.type === 'text' && item.text.length > 0) {\n content.push({ type: 'text', text: item.text });\n continue;\n }\n\n if (item.type === 'thinking' && item.thinking.length > 0) {\n content.push({ type: 'reasoning', text: item.thinking });\n continue;\n }\n }\n\n // citations:\n for (const citation of response.message.citations ?? []) {\n content.push({\n type: 'source',\n sourceType: 'document',\n id: this.config.generateId(),\n mediaType: 'text/plain',\n title: citation.sources[0]?.document?.title || 'Document',\n providerMetadata: {\n cohere: {\n start: citation.start,\n end: citation.end,\n text: citation.text,\n sources: citation.sources,\n ...(citation.type && { citationType: citation.type }),\n },\n },\n });\n }\n\n // tool calls:\n for (const toolCall of response.message.tool_calls ?? []) {\n content.push({\n type: 'tool-call' as const,\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n // Cohere sometimes returns `null` for tool call arguments for tools\n // defined as having no arguments.\n input: toolCall.function.arguments.replace(/^null$/, '{}'),\n });\n }\n\n return {\n content,\n finishReason: {\n unified: mapCohereFinishReason(response.finish_reason),\n raw: response.finish_reason ?? undefined,\n },\n usage: convertCohereUsage(response.usage.tokens),\n request: { body: args },\n response: {\n // TODO timestamp, model id\n id: response.generation_id ?? undefined,\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { args, warnings } = await this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat`,\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body: { ...args, stream: true },\n failedResponseHandler: cohereFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n cohereChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: CohereUsageTokens | undefined = undefined;\n\n let pendingToolCall: {\n id: string;\n name: string;\n arguments: string;\n hasFinished: boolean;\n } | null = null;\n\n let isActiveReasoning = false;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof cohereChatChunkSchema>>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n const type = value.type;\n\n switch (type) {\n case 'content-start': {\n if (value.delta.message.content.type === 'thinking') {\n controller.enqueue({\n type: 'reasoning-start',\n id: String(value.index),\n });\n isActiveReasoning = true;\n return;\n }\n\n controller.enqueue({\n type: 'text-start',\n id: String(value.index),\n });\n return;\n }\n\n case 'content-delta': {\n if ('thinking' in value.delta.message.content) {\n controller.enqueue({\n type: 'reasoning-delta',\n id: String(value.index),\n delta: value.delta.message.content.thinking,\n });\n return;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: String(value.index),\n delta: value.delta.message.content.text,\n });\n return;\n }\n\n case 'content-end': {\n if (isActiveReasoning) {\n controller.enqueue({\n type: 'reasoning-end',\n id: String(value.index),\n });\n isActiveReasoning = false;\n return;\n }\n\n controller.enqueue({\n type: 'text-end',\n id: String(value.index),\n });\n\n return;\n }\n\n case 'tool-call-start': {\n const toolId = value.delta.message.tool_calls.id;\n const toolName = value.delta.message.tool_calls.function.name;\n const initialArgs =\n value.delta.message.tool_calls.function.arguments;\n\n pendingToolCall = {\n id: toolId,\n name: toolName,\n arguments: initialArgs,\n hasFinished: false,\n };\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolId,\n toolName,\n });\n\n if (initialArgs.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolId,\n delta: initialArgs,\n });\n }\n return;\n }\n\n case 'tool-call-delta': {\n if (pendingToolCall && !pendingToolCall.hasFinished) {\n const argsDelta =\n value.delta.message.tool_calls.function.arguments;\n pendingToolCall.arguments += argsDelta;\n\n controller.enqueue({\n type: 'tool-input-delta',\n id: pendingToolCall.id,\n delta: argsDelta,\n });\n }\n return;\n }\n\n case 'tool-call-end': {\n if (pendingToolCall && !pendingToolCall.hasFinished) {\n controller.enqueue({\n type: 'tool-input-end',\n id: pendingToolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: pendingToolCall.id,\n toolName: pendingToolCall.name,\n input: JSON.stringify(\n JSON.parse(pendingToolCall.arguments?.trim() || '{}'),\n ),\n });\n\n pendingToolCall.hasFinished = true;\n pendingToolCall = null;\n }\n return;\n }\n\n case 'message-start': {\n controller.enqueue({\n type: 'response-metadata',\n id: value.id ?? undefined,\n });\n return;\n }\n\n case 'message-end': {\n finishReason = {\n unified: mapCohereFinishReason(value.delta.finish_reason),\n raw: value.delta.finish_reason,\n };\n usage = value.delta.usage.tokens;\n return;\n }\n\n default: {\n return;\n }\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertCohereUsage(usage),\n });\n },\n }),\n ),\n request: { body: { ...args, stream: true } },\n response: { headers: responseHeaders },\n };\n }\n}\n\nfunction resolveCohereThinking({\n reasoning,\n cohereOptions,\n warnings,\n}: {\n reasoning: LanguageModelV4CallOptions['reasoning'];\n cohereOptions: InferSchema<typeof cohereLanguageModelChatOptions>;\n warnings: SharedV4Warning[];\n}): { thinking?: { type: string; token_budget?: number } } {\n if (cohereOptions.thinking) {\n return {\n thinking: {\n type: cohereOptions.thinking.type ?? 'enabled',\n token_budget: cohereOptions.thinking.tokenBudget,\n },\n };\n }\n\n if (!isCustomReasoning(reasoning)) {\n return {};\n }\n\n if (reasoning === 'none') {\n return { thinking: { type: 'disabled' } };\n }\n\n const tokenBudget = mapReasoningToProviderBudget({\n reasoning,\n maxOutputTokens: 32768,\n maxReasoningBudget: 32768,\n warnings,\n });\n\n if (tokenBudget == null) {\n return {};\n }\n\n return { thinking: { type: 'enabled', token_budget: tokenBudget } };\n}\n\nconst cohereChatResponseSchema = z.object({\n generation_id: z.string().nullish(),\n message: z.object({\n role: z.string(),\n content: z\n .array(\n z.union([\n z.object({\n type: z.literal('text'),\n text: z.string(),\n }),\n z.object({\n type: z.literal('thinking'),\n thinking: z.string(),\n }),\n ]),\n )\n .nullish(),\n tool_plan: 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 citations: z\n .array(\n z.object({\n start: z.number(),\n end: z.number(),\n text: z.string(),\n sources: z.array(\n z.object({\n type: z.string().optional(),\n id: z.string().optional(),\n document: z.object({\n id: z.string().optional(),\n text: z.string(),\n title: z.string(),\n }),\n }),\n ),\n type: z.string().optional(),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string(),\n usage: z.object({\n billed_units: z.object({\n input_tokens: z.number(),\n output_tokens: z.number(),\n }),\n tokens: z.object({\n input_tokens: z.number(),\n output_tokens: z.number(),\n }),\n }),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst cohereChatChunkSchema = z.discriminatedUnion('type', [\n z.object({\n type: z.literal('citation-start'),\n }),\n z.object({\n type: z.literal('citation-end'),\n }),\n z.object({\n type: z.literal('content-start'),\n index: z.number(),\n delta: z.object({\n message: z.object({\n content: z.union([\n z.object({\n type: z.literal('text'),\n text: z.string(),\n }),\n z.object({\n type: z.literal('thinking'),\n thinking: z.string(),\n }),\n ]),\n }),\n }),\n }),\n z.object({\n type: z.literal('content-delta'),\n index: z.number(),\n delta: z.object({\n message: z.object({\n content: z.union([\n z.object({\n text: z.string(),\n }),\n z.object({\n thinking: z.string(),\n }),\n ]),\n }),\n }),\n }),\n z.object({\n type: z.literal('content-end'),\n index: z.number(),\n }),\n z.object({\n type: z.literal('message-start'),\n id: z.string().nullish(),\n }),\n z.object({\n type: z.literal('message-end'),\n delta: z.object({\n finish_reason: z.string(),\n usage: z.object({\n tokens: z.object({\n input_tokens: z.number(),\n output_tokens: z.number(),\n }),\n }),\n }),\n }),\n // https://docs.cohere.com/v2/docs/streaming#tool-use-stream-events-for-tool-calling\n z.object({\n type: z.literal('tool-plan-delta'),\n delta: z.object({\n message: z.object({\n tool_plan: z.string(),\n }),\n }),\n }),\n z.object({\n type: z.literal('tool-call-start'),\n delta: z.object({\n message: z.object({\n tool_calls: 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 }),\n }),\n // A single tool call's `arguments` stream in chunks and must be accumulated\n // in a string and so the full tool object info can only be parsed once we see\n // `tool-call-end`.\n z.object({\n type: z.literal('tool-call-delta'),\n delta: z.object({\n message: z.object({\n tool_calls: z.object({\n function: z.object({\n arguments: z.string(),\n }),\n }),\n }),\n }),\n }),\n z.object({\n type: z.literal('tool-call-end'),\n }),\n]);\n","import { z } from 'zod/v4';\n\n// https://docs.cohere.com/docs/models\nexport type CohereChatModelId =\n | 'command-a-03-2025'\n | 'command-a-reasoning-08-2025'\n | 'command-r7b-12-2024'\n | 'command-r-plus-04-2024'\n | 'command-r-plus'\n | 'command-r-08-2024'\n | 'command-r-03-2024'\n | 'command-r'\n | 'command'\n | 'command-nightly'\n | 'command-light'\n | 'command-light-nightly'\n | (string & {});\n\nexport const cohereLanguageModelChatOptions = z.object({\n /**\n * Configuration for reasoning features (optional)\n *\n * Can be set to an object with the two properties `type` and `tokenBudget`. `type` can be set to `'enabled'` or `'disabled'` (defaults to `'enabled'`).\n * `tokenBudget` is the maximum number of tokens the model can use for thinking, which must be set to a positive integer. The model will stop thinking if it reaches the thinking token budget and will proceed with the response\n *\n * @see https://docs.cohere.com/reference/chat#request.body.thinking\n */\n thinking: z\n .object({\n type: z.enum(['enabled', 'disabled']).optional(),\n tokenBudget: z.number().optional(),\n })\n .optional(),\n});\n\nexport type CohereLanguageModelChatOptions = z.infer<\n typeof cohereLanguageModelChatOptions\n>;\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst cohereErrorDataSchema = z.object({\n message: z.string(),\n});\n\nexport type CohereErrorData = z.infer<typeof cohereErrorDataSchema>;\n\nexport const cohereFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: cohereErrorDataSchema,\n errorToMessage: data => data.message,\n});\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4CallOptions,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { CohereToolChoice } from './cohere-chat-prompt';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV4CallOptions['tools'];\n toolChoice?: LanguageModelV4CallOptions['toolChoice'];\n}): {\n tools:\n | Array<{\n type: 'function';\n function: {\n name: string | undefined;\n description: string | undefined;\n parameters: unknown;\n };\n }>\n | undefined;\n toolChoice: CohereToolChoice;\n toolWarnings: SharedV4Warning[];\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: SharedV4Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const cohereTools: 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({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n } else {\n cohereTools.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: cohereTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n return { tools: cohereTools, toolChoice: undefined, toolWarnings };\n\n case 'none':\n return { tools: cohereTools, toolChoice: 'NONE', toolWarnings };\n\n case 'required':\n return { tools: cohereTools, toolChoice: 'REQUIRED', toolWarnings };\n\n case 'tool':\n return {\n tools: cohereTools.filter(\n tool => tool.function.name === toolChoice.toolName,\n ),\n toolChoice: 'REQUIRED',\n toolWarnings,\n };\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n","import type { LanguageModelV4Usage } from '@ai-sdk/provider';\n\nexport type CohereUsageTokens = {\n input_tokens: number;\n output_tokens: number;\n};\n\nexport function convertCohereUsage(\n tokens: CohereUsageTokens | undefined | null,\n): LanguageModelV4Usage {\n if (tokens == null) {\n return {\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 raw: undefined,\n };\n }\n\n const inputTokens = tokens.input_tokens;\n const outputTokens = tokens.output_tokens;\n\n return {\n inputTokens: {\n total: inputTokens,\n noCache: inputTokens,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: outputTokens,\n text: outputTokens,\n reasoning: undefined,\n },\n raw: tokens,\n };\n}\n","import {\n UnsupportedFunctionalityError,\n type SharedV4Warning,\n type LanguageModelV4Prompt,\n} from '@ai-sdk/provider';\nimport type {\n CohereAssistantMessage,\n CohereChatPrompt,\n} from './cohere-chat-prompt';\n\nexport function convertToCohereChatPrompt(prompt: LanguageModelV4Prompt): {\n messages: CohereChatPrompt;\n documents: Array<{\n data: { text: string; title?: string };\n }>;\n warnings: SharedV4Warning[];\n} {\n const messages: CohereChatPrompt = [];\n const documents: Array<{ data: { text: string; title?: string } }> = [];\n const warnings: SharedV4Warning[] = [];\n\n for (const { role, content } of prompt) {\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\n .map(part => {\n switch (part.type) {\n case 'text': {\n return part.text;\n }\n case 'file': {\n let textContent: string;\n\n switch (part.data.type) {\n case 'reference': {\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n }\n case 'url': {\n throw new UnsupportedFunctionalityError({\n functionality: 'File URL data',\n message:\n 'URLs should be downloaded by the AI SDK and not reach this point. This indicates a configuration issue.',\n });\n }\n case 'text': {\n textContent = part.data.text;\n break;\n }\n case 'data': {\n textContent =\n typeof part.data.data === 'string'\n ? part.data.data\n : new TextDecoder().decode(part.data.data);\n break;\n }\n }\n\n documents.push({\n data: {\n text: textContent,\n title: part.filename,\n },\n });\n\n return '';\n }\n }\n })\n .join(''),\n });\n break;\n }\n\n case 'assistant': {\n let text = '';\n const toolCalls: CohereAssistantMessage['tool_calls'] = [];\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' as const,\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content: toolCalls.length > 0 ? undefined : text,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n tool_plan: undefined,\n });\n\n break;\n }\n case 'tool': {\n messages.push(\n ...content\n .filter(toolResult => toolResult.type !== 'tool-approval-response')\n .map(toolResult => {\n const output = toolResult.output;\n\n let contentValue: string;\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool call execution denied.';\n break;\n case 'content':\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n }\n\n return {\n role: 'tool' as const,\n content: contentValue,\n tool_call_id: toolResult.toolCallId,\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, documents, warnings };\n}\n","import type { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapCohereFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV4FinishReason['unified'] {\n switch (finishReason) {\n case 'COMPLETE':\n case 'STOP_SEQUENCE':\n return 'stop';\n\n case 'MAX_TOKENS':\n return 'length';\n\n case 'ERROR':\n return 'error';\n\n case 'TOOL_CALL':\n return 'tool-calls';\n\n default:\n return 'other';\n }\n}\n","import {\n TooManyEmbeddingValuesForCallError,\n type EmbeddingModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n cohereEmbeddingModelOptions,\n type CohereEmbeddingModelId,\n} from './cohere-embedding-model-options';\nimport { cohereFailedResponseHandler } from './cohere-error';\n\ntype CohereEmbeddingConfig = {\n provider: string;\n baseURL: string;\n headers?: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n};\n\nexport class CohereEmbeddingModel implements EmbeddingModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: CohereEmbeddingModelId;\n\n readonly maxEmbeddingsPerCall = 96;\n readonly supportsParallelCalls = true;\n\n private readonly config: CohereEmbeddingConfig;\n\n static [WORKFLOW_SERIALIZE](model: CohereEmbeddingModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: CohereEmbeddingModelId;\n config: CohereEmbeddingConfig;\n }) {\n return new CohereEmbeddingModel(options.modelId, options.config);\n }\n\n constructor(modelId: CohereEmbeddingModelId, config: CohereEmbeddingConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EmbeddingModelV4['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>\n > {\n const embeddingOptions = await parseProviderOptions({\n provider: 'cohere',\n providerOptions,\n schema: cohereEmbeddingModelOptions,\n });\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 {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/embed`,\n headers: combineHeaders(this.config.headers?.(), headers),\n body: {\n model: this.modelId,\n // The AI SDK only supports 'float' embeddings. Note that the Cohere API\n // supports other embedding types, but they are not currently supported by the AI SDK.\n // https://docs.cohere.com/v2/reference/embed#request.body.embedding_types\n embedding_types: ['float'],\n texts: values,\n input_type: embeddingOptions?.inputType ?? 'search_query',\n truncate: embeddingOptions?.truncate,\n output_dimension: embeddingOptions?.outputDimension,\n },\n failedResponseHandler: cohereFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n cohereTextEmbeddingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n warnings: [],\n embeddings: response.embeddings.float,\n usage: { tokens: response.meta.billed_units.input_tokens },\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n}\n\n// minimal version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst cohereTextEmbeddingResponseSchema = z.object({\n embeddings: z.object({\n float: z.array(z.array(z.number())),\n }),\n meta: z.object({\n billed_units: z.object({\n input_tokens: z.number(),\n }),\n }),\n});\n","import { z } from 'zod/v4';\n\nexport type CohereEmbeddingModelId =\n | 'embed-english-v3.0'\n | 'embed-multilingual-v3.0'\n | 'embed-english-light-v3.0'\n | 'embed-multilingual-light-v3.0'\n | 'embed-english-v2.0'\n | 'embed-english-light-v2.0'\n | 'embed-multilingual-v2.0'\n | (string & {});\n\nexport const cohereEmbeddingModelOptions = z.object({\n /**\n * Specifies the type of input passed to the model. Default is `search_query`.\n *\n * - \"search_document\": Used for embeddings stored in a vector database for search use-cases.\n * - \"search_query\": Used for embeddings of search queries run against a vector DB to find relevant documents.\n * - \"classification\": Used for embeddings passed through a text classifier.\n * - \"clustering\": Used for embeddings run through a clustering algorithm.\n */\n inputType: z\n .enum(['search_document', 'search_query', 'classification', 'clustering'])\n .optional(),\n\n /**\n * Specifies how the API will handle inputs longer than the maximum token length.\n * Default is `END`.\n *\n * - \"NONE\": If selected, when the input exceeds the maximum input token length will return an error.\n * - \"START\": Will discard the start of the input until the remaining input is exactly the maximum input token length for the model.\n * - \"END\": Will discard the end of the input until the remaining input is exactly the maximum input token length for the model.\n */\n truncate: z.enum(['NONE', 'START', 'END']).optional(),\n\n /**\n * The number of dimensions of the output embedding.\n * Only available for `embed-v4.0` and newer models.\n *\n * Possible values are `256`, `512`, `1024`, and `1536`.\n * The default is `1536`.\n */\n outputDimension: z\n .union([z.literal(256), z.literal(512), z.literal(1024), z.literal(1536)])\n .optional(),\n});\n\nexport type CohereEmbeddingModelOptions = z.infer<\n typeof cohereEmbeddingModelOptions\n>;\n","import type { RerankingModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { cohereFailedResponseHandler } from '../cohere-error';\nimport {\n cohereRerankingResponseSchema,\n type CohereRerankingInput,\n} from './cohere-reranking-api';\nimport {\n cohereRerankingModelOptionsSchema,\n type CohereRerankingModelId,\n} from './cohere-reranking-model-options';\ntype CohereRerankingConfig = {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n};\n\nexport class CohereRerankingModel implements RerankingModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: CohereRerankingModelId;\n\n private readonly config: CohereRerankingConfig;\n\n constructor(modelId: CohereRerankingModelId, config: CohereRerankingConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n // current implementation is based on v2 of the API: https://docs.cohere.com/v2/reference/rerank\n async doRerank({\n documents,\n headers,\n query,\n topN,\n abortSignal,\n providerOptions,\n }: Parameters<RerankingModelV4['doRerank']>[0]): Promise<\n Awaited<ReturnType<RerankingModelV4['doRerank']>>\n > {\n const rerankingOptions = await parseProviderOptions({\n provider: 'cohere',\n providerOptions,\n schema: cohereRerankingModelOptionsSchema,\n });\n\n const warnings: SharedV4Warning[] = [];\n\n if (documents.type === 'object') {\n warnings.push({\n type: 'compatibility',\n feature: 'object documents',\n details: 'Object documents are converted to strings.',\n });\n }\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/rerank`,\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n model: this.modelId,\n query,\n documents:\n documents.type === 'text'\n ? documents.values\n : documents.values.map(value => JSON.stringify(value)),\n top_n: topN,\n max_tokens_per_doc: rerankingOptions?.maxTokensPerDoc,\n priority: rerankingOptions?.priority,\n } satisfies CohereRerankingInput,\n failedResponseHandler: cohereFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n cohereRerankingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n ranking: response.results.map(result => ({\n index: result.index,\n relevanceScore: result.relevance_score,\n })),\n warnings,\n response: {\n id: response.id ?? undefined,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n }\n}\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// https://docs.cohere.com/v2/reference/rerank\nexport type CohereRerankingInput = {\n model: string;\n query: string;\n documents: string[];\n top_n: number | undefined;\n max_tokens_per_doc: number | undefined;\n priority: number | undefined;\n};\n\nexport const cohereRerankingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n id: z.string().nullish(),\n results: z.array(\n z.object({\n index: z.number(),\n relevance_score: z.number(),\n }),\n ),\n meta: z.any(),\n }),\n ),\n);\n","import {\n lazySchema,\n zodSchema,\n type FlexibleSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// https://docs.cohere.com/docs/rerank\nexport type CohereRerankingModelId =\n | 'rerank-v3.5'\n | 'rerank-english-v3.0'\n | 'rerank-multilingual-v3.0'\n | (string & {});\n\nexport type CohereRerankingModelOptions = {\n /**\n * Long documents will be automatically truncated to the specified number of tokens.\n *\n * @default 4096\n */\n maxTokensPerDoc?: number;\n\n /**\n * The priority of the request.\n *\n * @default 0\n */\n priority?: number;\n};\n\nexport const cohereRerankingModelOptionsSchema: FlexibleSchema<CohereRerankingModelOptions> =\n lazySchema(() =>\n zodSchema(\n z.object({\n maxTokensPerDoc: z.number().optional(),\n priority: z.number().optional(),\n }),\n ),\n );\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["z","z","UnsupportedFunctionalityError","_a","_b","z","combineHeaders","createJsonResponseHandler","parseProviderOptions","postJsonToApi","serializeModelOptions","WORKFLOW_SERIALIZE","WORKFLOW_DESERIALIZE","z","z","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","parseProviderOptions","postJsonToApi","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","parseProviderOptions","postJsonToApi","z","lazySchema","zodSchema","z","parseProviderOptions","postJsonToApi","combineHeaders","createJsonResponseHandler","_a"]}
1
+ {"version":3,"sources":["../src/cohere-provider.ts","../src/cohere-chat-language-model.ts","../src/cohere-chat-language-model-options.ts","../src/cohere-error.ts","../src/cohere-prepare-tools.ts","../src/convert-cohere-usage.ts","../src/convert-to-cohere-chat-prompt.ts","../src/map-cohere-finish-reason.ts","../src/cohere-embedding-model.ts","../src/cohere-embedding-model-options.ts","../src/reranking/cohere-reranking-model.ts","../src/reranking/cohere-reranking-api.ts","../src/reranking/cohere-reranking-model-options.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type EmbeddingModelV4,\n type LanguageModelV4,\n type RerankingModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { CohereChatLanguageModel } from './cohere-chat-language-model';\nimport type { CohereChatModelId } from './cohere-chat-language-model-options';\nimport { CohereEmbeddingModel } from './cohere-embedding-model';\nimport type { CohereRerankingModelId } from './reranking/cohere-reranking-model-options';\nimport { CohereRerankingModel } from './reranking/cohere-reranking-model';\nimport type { CohereEmbeddingModelId } from './cohere-embedding-model-options';\nimport { VERSION } from './version';\n\nexport interface CohereProvider extends ProviderV4 {\n (modelId: CohereChatModelId): LanguageModelV4;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: CohereChatModelId): LanguageModelV4;\n\n /**\n * Creates a model for text embeddings.\n */\n embedding(modelId: CohereEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for text embeddings.\n */\n embeddingModel(modelId: CohereEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embedding` instead.\n */\n textEmbedding(modelId: CohereEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: CohereEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for reranking.\n */\n reranking(modelId: CohereRerankingModelId): RerankingModelV4;\n\n /**\n * Creates a model for reranking.\n */\n rerankingModel(modelId: CohereRerankingModelId): RerankingModelV4;\n}\n\nexport interface CohereProviderSettings {\n /**\n * Use a different URL prefix for API calls, e.g. to use proxy servers.\n * The default prefix is `https://api.cohere.com/v2`.\n */\n baseURL?: string;\n\n /**\n * API key that is being send using the `Authorization` header.\n * It defaults to the `COHERE_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 * Optional function to generate a unique ID for each request.\n */\n generateId?: () => string;\n}\n\n/**\n * Create a Cohere AI provider instance.\n */\nexport function createCohere(\n options: CohereProviderSettings = {},\n): CohereProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? 'https://api.cohere.com/v2';\n\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'COHERE_API_KEY',\n description: 'Cohere',\n })}`,\n ...options.headers,\n },\n `ai-sdk/cohere/${VERSION}`,\n );\n\n const createChatModel = (modelId: CohereChatModelId) =>\n new CohereChatLanguageModel(modelId, {\n provider: 'cohere.chat',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n generateId: options.generateId ?? generateId,\n });\n\n const createEmbeddingModel = (modelId: CohereEmbeddingModelId) =>\n new CohereEmbeddingModel(modelId, {\n provider: 'cohere.textEmbedding',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createRerankingModel = (modelId: CohereRerankingModelId) =>\n new CohereRerankingModel(modelId, {\n provider: 'cohere.reranking',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = function (modelId: CohereChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Cohere model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId);\n };\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = createChatModel;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.reranking = createRerankingModel;\n provider.rerankingModel = createRerankingModel;\n\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\n/**\n * Default Cohere provider instance.\n */\nexport const cohere = createCohere();\n","import type {\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4FinishReason,\n LanguageModelV4GenerateResult,\n LanguageModelV4StreamPart,\n LanguageModelV4StreamResult,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n isCustomReasoning,\n mapReasoningToProviderBudget,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type InferSchema,\n type FetchFunction,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n cohereLanguageModelChatOptions,\n type CohereChatModelId,\n} from './cohere-chat-language-model-options';\nimport { cohereFailedResponseHandler } from './cohere-error';\nimport { prepareTools } from './cohere-prepare-tools';\nimport {\n convertCohereUsage,\n type CohereUsageTokens,\n} from './convert-cohere-usage';\nimport { convertToCohereChatPrompt } from './convert-to-cohere-chat-prompt';\nimport { mapCohereFinishReason } from './map-cohere-finish-reason';\n\ntype CohereChatConfig = {\n provider: string;\n baseURL: string;\n headers?: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n generateId: () => string;\n};\n\nexport class CohereChatLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n\n readonly modelId: CohereChatModelId;\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'image/*': [/^https?:\\/\\/.*$/],\n };\n\n private readonly config: CohereChatConfig;\n\n static [WORKFLOW_SERIALIZE](model: CohereChatLanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: CohereChatModelId;\n config: CohereChatConfig;\n }) {\n return new CohereChatLanguageModel(options.modelId, options.config);\n }\n\n constructor(modelId: CohereChatModelId, config: CohereChatConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\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 seed,\n reasoning,\n tools,\n toolChoice,\n providerOptions,\n }: LanguageModelV4CallOptions) {\n const warnings: SharedV4Warning[] = [];\n\n const cohereOptions =\n (await parseProviderOptions({\n provider: 'cohere',\n providerOptions,\n schema: cohereLanguageModelChatOptions,\n })) ?? {};\n\n const {\n messages: chatPrompt,\n documents: cohereDocuments,\n warnings: promptWarnings,\n } = await convertToCohereChatPrompt(prompt);\n\n const {\n tools: cohereTools,\n toolChoice: cohereToolChoice,\n toolWarnings,\n } = prepareTools({ tools, toolChoice });\n\n warnings.push(...toolWarnings, ...promptWarnings);\n\n return {\n args: {\n // model id:\n model: this.modelId,\n\n // standardized settings:\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n max_tokens: maxOutputTokens,\n temperature,\n p: topP,\n k: topK,\n seed,\n stop_sequences: stopSequences,\n\n // response format:\n response_format:\n responseFormat?.type === 'json'\n ? { type: 'json_object', json_schema: responseFormat.schema }\n : undefined,\n\n // messages:\n messages: chatPrompt,\n\n // tools:\n tools: cohereTools,\n tool_choice: cohereToolChoice,\n\n // documents for RAG:\n ...(cohereDocuments.length > 0 && { documents: cohereDocuments }),\n\n // reasoning:\n ...resolveCohereThinking({\n reasoning,\n cohereOptions,\n warnings,\n }),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { args, warnings } = await this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/chat`,\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body: args,\n failedResponseHandler: cohereFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n cohereChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const content: Array<LanguageModelV4Content> = [];\n\n for (const item of response.message.content ?? []) {\n if (item.type === 'text' && item.text.length > 0) {\n content.push({ type: 'text', text: item.text });\n continue;\n }\n\n if (item.type === 'thinking' && item.thinking.length > 0) {\n content.push({ type: 'reasoning', text: item.thinking });\n continue;\n }\n }\n\n // citations:\n for (const citation of response.message.citations ?? []) {\n content.push({\n type: 'source',\n sourceType: 'document',\n id: this.config.generateId(),\n mediaType: 'text/plain',\n title: citation.sources[0]?.document?.title || 'Document',\n providerMetadata: {\n cohere: {\n start: citation.start,\n end: citation.end,\n text: citation.text,\n sources: citation.sources,\n ...(citation.type && { citationType: citation.type }),\n },\n },\n });\n }\n\n // tool calls:\n for (const toolCall of response.message.tool_calls ?? []) {\n content.push({\n type: 'tool-call' as const,\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n // Cohere sometimes returns `null` for tool call arguments for tools\n // defined as having no arguments.\n input: toolCall.function.arguments.replace(/^null$/, '{}'),\n });\n }\n\n return {\n content,\n finishReason: {\n unified: mapCohereFinishReason(response.finish_reason),\n raw: response.finish_reason ?? undefined,\n },\n usage: convertCohereUsage(response.usage.tokens),\n request: { body: args },\n response: {\n // TODO timestamp, model id\n id: response.generation_id ?? undefined,\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n };\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { args, warnings } = await this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat`,\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body: { ...args, stream: true },\n failedResponseHandler: cohereFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n cohereChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: CohereUsageTokens | undefined = undefined;\n\n let pendingToolCall: {\n id: string;\n name: string;\n arguments: string;\n hasFinished: boolean;\n } | null = null;\n\n let isActiveReasoning = false;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof cohereChatChunkSchema>>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n const type = value.type;\n\n switch (type) {\n case 'content-start': {\n if (value.delta.message.content.type === 'thinking') {\n controller.enqueue({\n type: 'reasoning-start',\n id: String(value.index),\n });\n isActiveReasoning = true;\n return;\n }\n\n controller.enqueue({\n type: 'text-start',\n id: String(value.index),\n });\n return;\n }\n\n case 'content-delta': {\n if ('thinking' in value.delta.message.content) {\n controller.enqueue({\n type: 'reasoning-delta',\n id: String(value.index),\n delta: value.delta.message.content.thinking,\n });\n return;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: String(value.index),\n delta: value.delta.message.content.text,\n });\n return;\n }\n\n case 'content-end': {\n if (isActiveReasoning) {\n controller.enqueue({\n type: 'reasoning-end',\n id: String(value.index),\n });\n isActiveReasoning = false;\n return;\n }\n\n controller.enqueue({\n type: 'text-end',\n id: String(value.index),\n });\n\n return;\n }\n\n case 'tool-call-start': {\n const toolId = value.delta.message.tool_calls.id;\n const toolName = value.delta.message.tool_calls.function.name;\n const initialArgs =\n value.delta.message.tool_calls.function.arguments;\n\n pendingToolCall = {\n id: toolId,\n name: toolName,\n arguments: initialArgs,\n hasFinished: false,\n };\n\n controller.enqueue({\n type: 'tool-input-start',\n id: toolId,\n toolName,\n });\n\n if (initialArgs.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolId,\n delta: initialArgs,\n });\n }\n return;\n }\n\n case 'tool-call-delta': {\n if (pendingToolCall && !pendingToolCall.hasFinished) {\n const argsDelta =\n value.delta.message.tool_calls.function.arguments;\n pendingToolCall.arguments += argsDelta;\n\n controller.enqueue({\n type: 'tool-input-delta',\n id: pendingToolCall.id,\n delta: argsDelta,\n });\n }\n return;\n }\n\n case 'tool-call-end': {\n if (pendingToolCall && !pendingToolCall.hasFinished) {\n controller.enqueue({\n type: 'tool-input-end',\n id: pendingToolCall.id,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallId: pendingToolCall.id,\n toolName: pendingToolCall.name,\n input: JSON.stringify(\n JSON.parse(pendingToolCall.arguments?.trim() || '{}'),\n ),\n });\n\n pendingToolCall.hasFinished = true;\n pendingToolCall = null;\n }\n return;\n }\n\n case 'message-start': {\n controller.enqueue({\n type: 'response-metadata',\n id: value.id ?? undefined,\n });\n return;\n }\n\n case 'message-end': {\n finishReason = {\n unified: mapCohereFinishReason(value.delta.finish_reason),\n raw: value.delta.finish_reason,\n };\n usage = value.delta.usage.tokens;\n return;\n }\n\n default: {\n return;\n }\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertCohereUsage(usage),\n });\n },\n }),\n ),\n request: { body: { ...args, stream: true } },\n response: { headers: responseHeaders },\n };\n }\n}\n\nfunction resolveCohereThinking({\n reasoning,\n cohereOptions,\n warnings,\n}: {\n reasoning: LanguageModelV4CallOptions['reasoning'];\n cohereOptions: InferSchema<typeof cohereLanguageModelChatOptions>;\n warnings: SharedV4Warning[];\n}): { thinking?: { type: string; token_budget?: number } } {\n if (cohereOptions.thinking) {\n return {\n thinking: {\n type: cohereOptions.thinking.type ?? 'enabled',\n token_budget: cohereOptions.thinking.tokenBudget,\n },\n };\n }\n\n if (!isCustomReasoning(reasoning)) {\n return {};\n }\n\n if (reasoning === 'none') {\n return { thinking: { type: 'disabled' } };\n }\n\n const tokenBudget = mapReasoningToProviderBudget({\n reasoning,\n maxOutputTokens: 32768,\n maxReasoningBudget: 32768,\n warnings,\n });\n\n if (tokenBudget == null) {\n return {};\n }\n\n return { thinking: { type: 'enabled', token_budget: tokenBudget } };\n}\n\nconst cohereChatResponseSchema = z.object({\n generation_id: z.string().nullish(),\n message: z.object({\n role: z.string(),\n content: z\n .array(\n z.union([\n z.object({\n type: z.literal('text'),\n text: z.string(),\n }),\n z.object({\n type: z.literal('thinking'),\n thinking: z.string(),\n }),\n ]),\n )\n .nullish(),\n tool_plan: 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 citations: z\n .array(\n z.object({\n start: z.number(),\n end: z.number(),\n text: z.string(),\n sources: z.array(\n z.object({\n type: z.string().optional(),\n id: z.string().optional(),\n document: z.object({\n id: z.string().optional(),\n text: z.string(),\n title: z.string(),\n }),\n }),\n ),\n type: z.string().optional(),\n }),\n )\n .nullish(),\n }),\n finish_reason: z.string(),\n usage: z.object({\n billed_units: z.object({\n input_tokens: z.number(),\n output_tokens: z.number(),\n }),\n tokens: z.object({\n input_tokens: z.number(),\n output_tokens: z.number(),\n }),\n }),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst cohereChatChunkSchema = z.discriminatedUnion('type', [\n z.object({\n type: z.literal('citation-start'),\n }),\n z.object({\n type: z.literal('citation-end'),\n }),\n z.object({\n type: z.literal('content-start'),\n index: z.number(),\n delta: z.object({\n message: z.object({\n content: z.union([\n z.object({\n type: z.literal('text'),\n text: z.string(),\n }),\n z.object({\n type: z.literal('thinking'),\n thinking: z.string(),\n }),\n ]),\n }),\n }),\n }),\n z.object({\n type: z.literal('content-delta'),\n index: z.number(),\n delta: z.object({\n message: z.object({\n content: z.union([\n z.object({\n text: z.string(),\n }),\n z.object({\n thinking: z.string(),\n }),\n ]),\n }),\n }),\n }),\n z.object({\n type: z.literal('content-end'),\n index: z.number(),\n }),\n z.object({\n type: z.literal('message-start'),\n id: z.string().nullish(),\n }),\n z.object({\n type: z.literal('message-end'),\n delta: z.object({\n finish_reason: z.string(),\n usage: z.object({\n tokens: z.object({\n input_tokens: z.number(),\n output_tokens: z.number(),\n }),\n }),\n }),\n }),\n // https://docs.cohere.com/v2/docs/streaming#tool-use-stream-events-for-tool-calling\n z.object({\n type: z.literal('tool-plan-delta'),\n delta: z.object({\n message: z.object({\n tool_plan: z.string(),\n }),\n }),\n }),\n z.object({\n type: z.literal('tool-call-start'),\n delta: z.object({\n message: z.object({\n tool_calls: 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 }),\n }),\n // A single tool call's `arguments` stream in chunks and must be accumulated\n // in a string and so the full tool object info can only be parsed once we see\n // `tool-call-end`.\n z.object({\n type: z.literal('tool-call-delta'),\n delta: z.object({\n message: z.object({\n tool_calls: z.object({\n function: z.object({\n arguments: z.string(),\n }),\n }),\n }),\n }),\n }),\n z.object({\n type: z.literal('tool-call-end'),\n }),\n]);\n","import { z } from 'zod/v4';\n\n// https://docs.cohere.com/docs/models\nexport type CohereChatModelId =\n | 'command-a-03-2025'\n | 'command-a-reasoning-08-2025'\n | 'command-a-vision-07-2025'\n | 'command-r7b-12-2024'\n | 'command-r-plus-04-2024'\n | 'command-r-plus'\n | 'command-r-08-2024'\n | 'command-r-03-2024'\n | 'command-r'\n | 'command'\n | 'command-nightly'\n | 'command-light'\n | 'command-light-nightly'\n | (string & {});\n\nexport const cohereLanguageModelChatOptions = z.object({\n /**\n * Configuration for reasoning features (optional)\n *\n * Can be set to an object with the two properties `type` and `tokenBudget`. `type` can be set to `'enabled'` or `'disabled'` (defaults to `'enabled'`).\n * `tokenBudget` is the maximum number of tokens the model can use for thinking, which must be set to a positive integer. The model will stop thinking if it reaches the thinking token budget and will proceed with the response\n *\n * @see https://docs.cohere.com/reference/chat#request.body.thinking\n */\n thinking: z\n .object({\n type: z.enum(['enabled', 'disabled']).optional(),\n tokenBudget: z.number().optional(),\n })\n .optional(),\n});\n\nexport type CohereLanguageModelChatOptions = z.infer<\n typeof cohereLanguageModelChatOptions\n>;\n\nexport const cohereImagePartProviderOptions = z.object({\n /**\n * Image fidelity level passed through as `image_url.detail` on the Cohere chat API.\n *\n * @see https://docs.cohere.com/docs/image-inputs\n */\n detail: z.enum(['auto', 'low', 'high']).optional(),\n});\n\nexport type CohereImagePartProviderOptions = z.infer<\n typeof cohereImagePartProviderOptions\n>;\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst cohereErrorDataSchema = z.object({\n message: z.string(),\n});\n\nexport type CohereErrorData = z.infer<typeof cohereErrorDataSchema>;\n\nexport const cohereFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: cohereErrorDataSchema,\n errorToMessage: data => data.message,\n});\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4CallOptions,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { CohereToolChoice } from './cohere-chat-prompt';\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV4CallOptions['tools'];\n toolChoice?: LanguageModelV4CallOptions['toolChoice'];\n}): {\n tools:\n | Array<{\n type: 'function';\n function: {\n name: string | undefined;\n description: string | undefined;\n parameters: unknown;\n };\n }>\n | undefined;\n toolChoice: CohereToolChoice;\n toolWarnings: SharedV4Warning[];\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: SharedV4Warning[] = [];\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined, toolWarnings };\n }\n\n const cohereTools: 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({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.id}`,\n });\n } else {\n cohereTools.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: cohereTools, toolChoice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n return { tools: cohereTools, toolChoice: undefined, toolWarnings };\n\n case 'none':\n return { tools: cohereTools, toolChoice: 'NONE', toolWarnings };\n\n case 'required':\n return { tools: cohereTools, toolChoice: 'REQUIRED', toolWarnings };\n\n case 'tool':\n return {\n tools: cohereTools.filter(\n tool => tool.function.name === toolChoice.toolName,\n ),\n toolChoice: 'REQUIRED',\n toolWarnings,\n };\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n","import type { LanguageModelV4Usage } from '@ai-sdk/provider';\n\nexport type CohereUsageTokens = {\n input_tokens: number;\n output_tokens: number;\n};\n\nexport function convertCohereUsage(\n tokens: CohereUsageTokens | undefined | null,\n): LanguageModelV4Usage {\n if (tokens == null) {\n return {\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 raw: undefined,\n };\n }\n\n const inputTokens = tokens.input_tokens;\n const outputTokens = tokens.output_tokens;\n\n return {\n inputTokens: {\n total: inputTokens,\n noCache: inputTokens,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: outputTokens,\n text: outputTokens,\n reasoning: undefined,\n },\n raw: tokens,\n };\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4FilePart,\n type LanguageModelV4Prompt,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n convertToBase64,\n getTopLevelMediaType,\n parseProviderOptions,\n resolveFullMediaType,\n} from '@ai-sdk/provider-utils';\nimport { cohereImagePartProviderOptions } from './cohere-chat-language-model-options';\nimport type {\n CohereAssistantMessage,\n CohereChatPrompt,\n CohereUserMessageContent,\n} from './cohere-chat-prompt';\n\nexport async function convertToCohereChatPrompt(\n prompt: LanguageModelV4Prompt,\n): Promise<{\n messages: CohereChatPrompt;\n documents: Array<{\n data: { text: string; title?: string };\n }>;\n warnings: SharedV4Warning[];\n}> {\n const messages: CohereChatPrompt = [];\n const documents: Array<{ data: { text: string; title?: string } }> = [];\n const warnings: SharedV4Warning[] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user': {\n const userContentParts: Array<CohereUserMessageContent> = [];\n let hasImage = false;\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n if (part.text.length > 0) {\n userContentParts.push({ type: 'text', text: part.text });\n }\n break;\n }\n case 'file': {\n if (getTopLevelMediaType(part.mediaType) === 'image') {\n hasImage = true;\n const url = buildImageUrl({ part });\n const cohereOptions =\n (await parseProviderOptions({\n provider: 'cohere',\n providerOptions: part.providerOptions,\n schema: cohereImagePartProviderOptions,\n })) ?? {};\n\n userContentParts.push({\n type: 'image_url',\n image_url: {\n url,\n ...(cohereOptions.detail\n ? { detail: cohereOptions.detail }\n : {}),\n },\n });\n break;\n }\n\n let textContent: string;\n switch (part.data.type) {\n case 'reference': {\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n }\n case 'url': {\n throw new UnsupportedFunctionalityError({\n functionality: 'File URL data',\n message:\n 'URLs should be downloaded by the AI SDK and not reach this point. This indicates a configuration issue.',\n });\n }\n case 'text': {\n textContent = part.data.text;\n break;\n }\n case 'data': {\n textContent =\n typeof part.data.data === 'string'\n ? part.data.data\n : new TextDecoder().decode(part.data.data);\n break;\n }\n }\n\n documents.push({\n data: {\n text: textContent,\n title: part.filename,\n },\n });\n break;\n }\n }\n }\n\n if (hasImage) {\n messages.push({ role: 'user', content: userContentParts });\n } else {\n messages.push({\n role: 'user',\n content: userContentParts\n .map(p => (p.type === 'text' ? p.text : ''))\n .join(''),\n });\n }\n break;\n }\n\n case 'assistant': {\n let text = '';\n const toolCalls: CohereAssistantMessage['tool_calls'] = [];\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' as const,\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input),\n },\n });\n break;\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content: toolCalls.length > 0 ? undefined : text,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n tool_plan: undefined,\n });\n\n break;\n }\n case 'tool': {\n messages.push(\n ...content\n .filter(toolResult => toolResult.type !== 'tool-approval-response')\n .map(toolResult => {\n const output = toolResult.output;\n\n let contentValue: string;\n switch (output.type) {\n case 'text':\n case 'error-text':\n contentValue = output.value;\n break;\n case 'execution-denied':\n contentValue = output.reason ?? 'Tool call execution denied.';\n break;\n case 'content':\n case 'json':\n case 'error-json':\n contentValue = JSON.stringify(output.value);\n break;\n }\n\n return {\n role: 'tool' as const,\n content: contentValue,\n tool_call_id: toolResult.toolCallId,\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, documents, warnings };\n}\n\nfunction buildImageUrl({ part }: { part: LanguageModelV4FilePart }): string {\n switch (part.data.type) {\n case 'url': {\n return part.data.url.toString();\n }\n case 'data': {\n return `data:${resolveFullMediaType({ part })};base64,${convertToBase64(part.data.data)}`;\n }\n case 'reference': {\n throw new UnsupportedFunctionalityError({\n functionality: 'image file parts with provider references',\n });\n }\n case 'text': {\n throw new UnsupportedFunctionalityError({\n functionality: 'image file parts with text data',\n });\n }\n }\n}\n","import type { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapCohereFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV4FinishReason['unified'] {\n switch (finishReason) {\n case 'COMPLETE':\n case 'STOP_SEQUENCE':\n return 'stop';\n\n case 'MAX_TOKENS':\n return 'length';\n\n case 'ERROR':\n return 'error';\n\n case 'TOOL_CALL':\n return 'tool-calls';\n\n default:\n return 'other';\n }\n}\n","import {\n TooManyEmbeddingValuesForCallError,\n type EmbeddingModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n cohereEmbeddingModelOptions,\n type CohereEmbeddingModelId,\n} from './cohere-embedding-model-options';\nimport { cohereFailedResponseHandler } from './cohere-error';\n\ntype CohereEmbeddingConfig = {\n provider: string;\n baseURL: string;\n headers?: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n};\n\nexport class CohereEmbeddingModel implements EmbeddingModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: CohereEmbeddingModelId;\n\n readonly maxEmbeddingsPerCall = 96;\n readonly supportsParallelCalls = true;\n\n private readonly config: CohereEmbeddingConfig;\n\n static [WORKFLOW_SERIALIZE](model: CohereEmbeddingModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: CohereEmbeddingModelId;\n config: CohereEmbeddingConfig;\n }) {\n return new CohereEmbeddingModel(options.modelId, options.config);\n }\n\n constructor(modelId: CohereEmbeddingModelId, config: CohereEmbeddingConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EmbeddingModelV4['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>\n > {\n const embeddingOptions = await parseProviderOptions({\n provider: 'cohere',\n providerOptions,\n schema: cohereEmbeddingModelOptions,\n });\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 {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/embed`,\n headers: combineHeaders(this.config.headers?.(), headers),\n body: {\n model: this.modelId,\n // The AI SDK only supports 'float' embeddings. Note that the Cohere API\n // supports other embedding types, but they are not currently supported by the AI SDK.\n // https://docs.cohere.com/v2/reference/embed#request.body.embedding_types\n embedding_types: ['float'],\n texts: values,\n input_type: embeddingOptions?.inputType ?? 'search_query',\n truncate: embeddingOptions?.truncate,\n output_dimension: embeddingOptions?.outputDimension,\n },\n failedResponseHandler: cohereFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n cohereTextEmbeddingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n warnings: [],\n embeddings: response.embeddings.float,\n usage: { tokens: response.meta.billed_units.input_tokens },\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n}\n\n// minimal version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst cohereTextEmbeddingResponseSchema = z.object({\n embeddings: z.object({\n float: z.array(z.array(z.number())),\n }),\n meta: z.object({\n billed_units: z.object({\n input_tokens: z.number(),\n }),\n }),\n});\n","import { z } from 'zod/v4';\n\nexport type CohereEmbeddingModelId =\n | 'embed-english-v3.0'\n | 'embed-multilingual-v3.0'\n | 'embed-english-light-v3.0'\n | 'embed-multilingual-light-v3.0'\n | 'embed-english-v2.0'\n | 'embed-english-light-v2.0'\n | 'embed-multilingual-v2.0'\n | (string & {});\n\nexport const cohereEmbeddingModelOptions = z.object({\n /**\n * Specifies the type of input passed to the model. Default is `search_query`.\n *\n * - \"search_document\": Used for embeddings stored in a vector database for search use-cases.\n * - \"search_query\": Used for embeddings of search queries run against a vector DB to find relevant documents.\n * - \"classification\": Used for embeddings passed through a text classifier.\n * - \"clustering\": Used for embeddings run through a clustering algorithm.\n */\n inputType: z\n .enum(['search_document', 'search_query', 'classification', 'clustering'])\n .optional(),\n\n /**\n * Specifies how the API will handle inputs longer than the maximum token length.\n * Default is `END`.\n *\n * - \"NONE\": If selected, when the input exceeds the maximum input token length will return an error.\n * - \"START\": Will discard the start of the input until the remaining input is exactly the maximum input token length for the model.\n * - \"END\": Will discard the end of the input until the remaining input is exactly the maximum input token length for the model.\n */\n truncate: z.enum(['NONE', 'START', 'END']).optional(),\n\n /**\n * The number of dimensions of the output embedding.\n * Only available for `embed-v4.0` and newer models.\n *\n * Possible values are `256`, `512`, `1024`, and `1536`.\n * The default is `1536`.\n */\n outputDimension: z\n .union([z.literal(256), z.literal(512), z.literal(1024), z.literal(1536)])\n .optional(),\n});\n\nexport type CohereEmbeddingModelOptions = z.infer<\n typeof cohereEmbeddingModelOptions\n>;\n","import type { RerankingModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { cohereFailedResponseHandler } from '../cohere-error';\nimport {\n cohereRerankingResponseSchema,\n type CohereRerankingInput,\n} from './cohere-reranking-api';\nimport {\n cohereRerankingModelOptionsSchema,\n type CohereRerankingModelId,\n} from './cohere-reranking-model-options';\ntype CohereRerankingConfig = {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n};\n\nexport class CohereRerankingModel implements RerankingModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: CohereRerankingModelId;\n\n private readonly config: CohereRerankingConfig;\n\n constructor(modelId: CohereRerankingModelId, config: CohereRerankingConfig) {\n this.modelId = modelId;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n // current implementation is based on v2 of the API: https://docs.cohere.com/v2/reference/rerank\n async doRerank({\n documents,\n headers,\n query,\n topN,\n abortSignal,\n providerOptions,\n }: Parameters<RerankingModelV4['doRerank']>[0]): Promise<\n Awaited<ReturnType<RerankingModelV4['doRerank']>>\n > {\n const rerankingOptions = await parseProviderOptions({\n provider: 'cohere',\n providerOptions,\n schema: cohereRerankingModelOptionsSchema,\n });\n\n const warnings: SharedV4Warning[] = [];\n\n if (documents.type === 'object') {\n warnings.push({\n type: 'compatibility',\n feature: 'object documents',\n details: 'Object documents are converted to strings.',\n });\n }\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/rerank`,\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n model: this.modelId,\n query,\n documents:\n documents.type === 'text'\n ? documents.values\n : documents.values.map(value => JSON.stringify(value)),\n top_n: topN,\n max_tokens_per_doc: rerankingOptions?.maxTokensPerDoc,\n priority: rerankingOptions?.priority,\n } satisfies CohereRerankingInput,\n failedResponseHandler: cohereFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n cohereRerankingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n ranking: response.results.map(result => ({\n index: result.index,\n relevanceScore: result.relevance_score,\n })),\n warnings,\n response: {\n id: response.id ?? undefined,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n }\n}\n","import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// https://docs.cohere.com/v2/reference/rerank\nexport type CohereRerankingInput = {\n model: string;\n query: string;\n documents: string[];\n top_n: number | undefined;\n max_tokens_per_doc: number | undefined;\n priority: number | undefined;\n};\n\nexport const cohereRerankingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n id: z.string().nullish(),\n results: z.array(\n z.object({\n index: z.number(),\n relevance_score: z.number(),\n }),\n ),\n meta: z.any(),\n }),\n ),\n);\n","import {\n lazySchema,\n zodSchema,\n type FlexibleSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// https://docs.cohere.com/docs/rerank\nexport type CohereRerankingModelId =\n | 'rerank-v3.5'\n | 'rerank-english-v3.0'\n | 'rerank-multilingual-v3.0'\n | (string & {});\n\nexport type CohereRerankingModelOptions = {\n /**\n * Long documents will be automatically truncated to the specified number of tokens.\n *\n * @default 4096\n */\n maxTokensPerDoc?: number;\n\n /**\n * The priority of the request.\n *\n * @default 0\n */\n priority?: number;\n};\n\nexport const cohereRerankingModelOptionsSchema: FlexibleSchema<CohereRerankingModelOptions> =\n lazySchema(() =>\n zodSchema(\n z.object({\n maxTokensPerDoc: z.number().optional(),\n priority: z.number().optional(),\n }),\n ),\n );\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["parseProviderOptions","z","z","UnsupportedFunctionalityError","UnsupportedFunctionalityError","_a","parseProviderOptions","_a","_b","z","combineHeaders","createJsonResponseHandler","parseProviderOptions","postJsonToApi","serializeModelOptions","WORKFLOW_SERIALIZE","WORKFLOW_DESERIALIZE","z","z","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","parseProviderOptions","postJsonToApi","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","parseProviderOptions","postJsonToApi","z","lazySchema","zodSchema","z","parseProviderOptions","postJsonToApi","combineHeaders","createJsonResponseHandler","_a"]}
@@ -108,6 +108,7 @@ and support structured data generation with [`Output`](/docs/reference/ai-sdk-co
108
108
  | ----------------------------- | ------------------- | ------------------- | ------------------- | ------------------- |
109
109
  | `command-a-03-2025` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
110
110
  | `command-a-reasoning-08-2025` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
111
+ | `command-a-vision-07-2025` | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
111
112
  | `command-r7b-12-2024` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
112
113
  | `command-r-plus-04-2024` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
113
114
  | `command-r-plus` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
@@ -126,6 +127,62 @@ and support structured data generation with [`Output`](/docs/reference/ai-sdk-co
126
127
  string if needed.
127
128
  </Note>
128
129
 
130
+ #### Image Inputs
131
+
132
+ Vision-capable Cohere models such as `command-a-vision-07-2025` accept image inputs as part of the message content. You can pass images as raw bytes, base64-encoded strings, or URLs:
133
+
134
+ ```ts
135
+ import { cohere } from '@ai-sdk/cohere';
136
+ import { generateText } from 'ai';
137
+ import { readFileSync } from 'node:fs';
138
+
139
+ const { text } = await generateText({
140
+ model: cohere('command-a-vision-07-2025'),
141
+ messages: [
142
+ {
143
+ role: 'user',
144
+ content: [
145
+ { type: 'text', text: 'Describe the image in detail.' },
146
+ {
147
+ type: 'file',
148
+ mediaType: 'image',
149
+ data: readFileSync('./data/comic-cat.png'),
150
+ },
151
+ ],
152
+ },
153
+ ],
154
+ });
155
+ ```
156
+
157
+ You can use the `cohere` provider option on a file part to set the [image input detail](https://docs.cohere.com/docs/image-inputs) to `high`, `low`, or `auto`:
158
+
159
+ ```ts highlight="2,16-18"
160
+ import { cohere } from '@ai-sdk/cohere';
161
+ import { generateText } from 'ai';
162
+
163
+ const { text } = await generateText({
164
+ model: cohere('command-a-vision-07-2025'),
165
+ messages: [
166
+ {
167
+ role: 'user',
168
+ content: [
169
+ { type: 'text', text: 'Describe the image in detail.' },
170
+ {
171
+ type: 'file',
172
+ mediaType: 'image',
173
+ data: 'https://github.com/vercel/ai/blob/main/examples/ai-functions/data/comic-cat.png?raw=true',
174
+
175
+ // Cohere specific options - image detail:
176
+ providerOptions: {
177
+ cohere: { detail: 'high' },
178
+ },
179
+ },
180
+ ],
181
+ },
182
+ ],
183
+ });
184
+ ```
185
+
129
186
  #### Reasoning
130
187
 
131
188
  Cohere has introduced reasoning with the `command-a-reasoning-08-2025` model. You can learn more at https://docs.cohere.com/docs/reasoning.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/cohere",
3
- "version": "4.0.0-canary.33",
3
+ "version": "4.0.0-canary.35",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -29,8 +29,8 @@
29
29
  }
30
30
  },
31
31
  "dependencies": {
32
- "@ai-sdk/provider": "4.0.0-canary.15",
33
- "@ai-sdk/provider-utils": "5.0.0-canary.31"
32
+ "@ai-sdk/provider": "4.0.0-canary.16",
33
+ "@ai-sdk/provider-utils": "5.0.0-canary.32"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/node": "20.17.24",
@@ -4,6 +4,7 @@ import { z } from 'zod/v4';
4
4
  export type CohereChatModelId =
5
5
  | 'command-a-03-2025'
6
6
  | 'command-a-reasoning-08-2025'
7
+ | 'command-a-vision-07-2025'
7
8
  | 'command-r7b-12-2024'
8
9
  | 'command-r-plus-04-2024'
9
10
  | 'command-r-plus'
@@ -36,3 +37,16 @@ export const cohereLanguageModelChatOptions = z.object({
36
37
  export type CohereLanguageModelChatOptions = z.infer<
37
38
  typeof cohereLanguageModelChatOptions
38
39
  >;
40
+
41
+ export const cohereImagePartProviderOptions = z.object({
42
+ /**
43
+ * Image fidelity level passed through as `image_url.detail` on the Cohere chat API.
44
+ *
45
+ * @see https://docs.cohere.com/docs/image-inputs
46
+ */
47
+ detail: z.enum(['auto', 'low', 'high']).optional(),
48
+ });
49
+
50
+ export type CohereImagePartProviderOptions = z.infer<
51
+ typeof cohereImagePartProviderOptions
52
+ >;
@@ -50,8 +50,8 @@ export class CohereChatLanguageModel implements LanguageModelV4 {
50
50
 
51
51
  readonly modelId: CohereChatModelId;
52
52
 
53
- readonly supportedUrls = {
54
- // No URLs are supported.
53
+ readonly supportedUrls: Record<string, RegExp[]> = {
54
+ 'image/*': [/^https?:\/\/.*$/],
55
55
  };
56
56
 
57
57
  private readonly config: CohereChatConfig;
@@ -108,7 +108,7 @@ export class CohereChatLanguageModel implements LanguageModelV4 {
108
108
  messages: chatPrompt,
109
109
  documents: cohereDocuments,
110
110
  warnings: promptWarnings,
111
- } = convertToCohereChatPrompt(prompt);
111
+ } = await convertToCohereChatPrompt(prompt);
112
112
 
113
113
  const {
114
114
  tools: cohereTools,
@@ -13,9 +13,16 @@ export interface CohereSystemMessage {
13
13
 
14
14
  export interface CohereUserMessage {
15
15
  role: 'user';
16
- content: string;
16
+ content: string | Array<CohereUserMessageContent>;
17
17
  }
18
18
 
19
+ export type CohereUserMessageContent =
20
+ | { type: 'text'; text: string }
21
+ | {
22
+ type: 'image_url';
23
+ image_url: { url: string; detail?: 'auto' | 'low' | 'high' };
24
+ };
25
+
19
26
  export interface CohereAssistantMessage {
20
27
  role: 'assistant';
21
28
  content: string | undefined;
@@ -1,20 +1,31 @@
1
1
  import {
2
2
  UnsupportedFunctionalityError,
3
- type SharedV4Warning,
3
+ type LanguageModelV4FilePart,
4
4
  type LanguageModelV4Prompt,
5
+ type SharedV4Warning,
5
6
  } from '@ai-sdk/provider';
7
+ import {
8
+ convertToBase64,
9
+ getTopLevelMediaType,
10
+ parseProviderOptions,
11
+ resolveFullMediaType,
12
+ } from '@ai-sdk/provider-utils';
13
+ import { cohereImagePartProviderOptions } from './cohere-chat-language-model-options';
6
14
  import type {
7
15
  CohereAssistantMessage,
8
16
  CohereChatPrompt,
17
+ CohereUserMessageContent,
9
18
  } from './cohere-chat-prompt';
10
19
 
11
- export function convertToCohereChatPrompt(prompt: LanguageModelV4Prompt): {
20
+ export async function convertToCohereChatPrompt(
21
+ prompt: LanguageModelV4Prompt,
22
+ ): Promise<{
12
23
  messages: CohereChatPrompt;
13
24
  documents: Array<{
14
25
  data: { text: string; title?: string };
15
26
  }>;
16
27
  warnings: SharedV4Warning[];
17
- } {
28
+ }> {
18
29
  const messages: CohereChatPrompt = [];
19
30
  const documents: Array<{ data: { text: string; title?: string } }> = [];
20
31
  const warnings: SharedV4Warning[] = [];
@@ -27,56 +38,88 @@ export function convertToCohereChatPrompt(prompt: LanguageModelV4Prompt): {
27
38
  }
28
39
 
29
40
  case 'user': {
30
- messages.push({
31
- role: 'user',
32
- content: content
33
- .map(part => {
34
- switch (part.type) {
35
- case 'text': {
36
- return part.text;
41
+ const userContentParts: Array<CohereUserMessageContent> = [];
42
+ let hasImage = false;
43
+
44
+ for (const part of content) {
45
+ switch (part.type) {
46
+ case 'text': {
47
+ if (part.text.length > 0) {
48
+ userContentParts.push({ type: 'text', text: part.text });
49
+ }
50
+ break;
51
+ }
52
+ case 'file': {
53
+ if (getTopLevelMediaType(part.mediaType) === 'image') {
54
+ hasImage = true;
55
+ const url = buildImageUrl({ part });
56
+ const cohereOptions =
57
+ (await parseProviderOptions({
58
+ provider: 'cohere',
59
+ providerOptions: part.providerOptions,
60
+ schema: cohereImagePartProviderOptions,
61
+ })) ?? {};
62
+
63
+ userContentParts.push({
64
+ type: 'image_url',
65
+ image_url: {
66
+ url,
67
+ ...(cohereOptions.detail
68
+ ? { detail: cohereOptions.detail }
69
+ : {}),
70
+ },
71
+ });
72
+ break;
73
+ }
74
+
75
+ let textContent: string;
76
+ switch (part.data.type) {
77
+ case 'reference': {
78
+ throw new UnsupportedFunctionalityError({
79
+ functionality: 'file parts with provider references',
80
+ });
37
81
  }
38
- case 'file': {
39
- let textContent: string;
40
-
41
- switch (part.data.type) {
42
- case 'reference': {
43
- throw new UnsupportedFunctionalityError({
44
- functionality: 'file parts with provider references',
45
- });
46
- }
47
- case 'url': {
48
- throw new UnsupportedFunctionalityError({
49
- functionality: 'File URL data',
50
- message:
51
- 'URLs should be downloaded by the AI SDK and not reach this point. This indicates a configuration issue.',
52
- });
53
- }
54
- case 'text': {
55
- textContent = part.data.text;
56
- break;
57
- }
58
- case 'data': {
59
- textContent =
60
- typeof part.data.data === 'string'
61
- ? part.data.data
62
- : new TextDecoder().decode(part.data.data);
63
- break;
64
- }
65
- }
66
-
67
- documents.push({
68
- data: {
69
- text: textContent,
70
- title: part.filename,
71
- },
82
+ case 'url': {
83
+ throw new UnsupportedFunctionalityError({
84
+ functionality: 'File URL data',
85
+ message:
86
+ 'URLs should be downloaded by the AI SDK and not reach this point. This indicates a configuration issue.',
72
87
  });
73
-
74
- return '';
88
+ }
89
+ case 'text': {
90
+ textContent = part.data.text;
91
+ break;
92
+ }
93
+ case 'data': {
94
+ textContent =
95
+ typeof part.data.data === 'string'
96
+ ? part.data.data
97
+ : new TextDecoder().decode(part.data.data);
98
+ break;
75
99
  }
76
100
  }
77
- })
78
- .join(''),
79
- });
101
+
102
+ documents.push({
103
+ data: {
104
+ text: textContent,
105
+ title: part.filename,
106
+ },
107
+ });
108
+ break;
109
+ }
110
+ }
111
+ }
112
+
113
+ if (hasImage) {
114
+ messages.push({ role: 'user', content: userContentParts });
115
+ } else {
116
+ messages.push({
117
+ role: 'user',
118
+ content: userContentParts
119
+ .map(p => (p.type === 'text' ? p.text : ''))
120
+ .join(''),
121
+ });
122
+ }
80
123
  break;
81
124
  }
82
125
 
@@ -155,3 +198,24 @@ export function convertToCohereChatPrompt(prompt: LanguageModelV4Prompt): {
155
198
 
156
199
  return { messages, documents, warnings };
157
200
  }
201
+
202
+ function buildImageUrl({ part }: { part: LanguageModelV4FilePart }): string {
203
+ switch (part.data.type) {
204
+ case 'url': {
205
+ return part.data.url.toString();
206
+ }
207
+ case 'data': {
208
+ return `data:${resolveFullMediaType({ part })};base64,${convertToBase64(part.data.data)}`;
209
+ }
210
+ case 'reference': {
211
+ throw new UnsupportedFunctionalityError({
212
+ functionality: 'image file parts with provider references',
213
+ });
214
+ }
215
+ case 'text': {
216
+ throw new UnsupportedFunctionalityError({
217
+ functionality: 'image file parts with text data',
218
+ });
219
+ }
220
+ }
221
+ }