@ai-sdk/cohere 4.0.54 → 4.0.55

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,16 @@
1
1
  # @ai-sdk/cohere
2
2
 
3
+ ## 4.0.55
4
+
5
+ ### Patch Changes
6
+
7
+ - 5440b3a: Allow 768 and 2048 in the Cohere embedding `outputDimension` option for Embed 5 models.
8
+ - f17f0ce: feat(cohere): support selecting embedding formats
9
+ - Updated dependencies [2959d35]
10
+ - Updated dependencies [59116e6]
11
+ - @ai-sdk/provider@4.0.22
12
+ - @ai-sdk/provider-utils@5.0.54
13
+
3
14
  ## 4.0.54
4
15
 
5
16
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -34,6 +34,13 @@ type CohereRerankingModelOptions = {
34
34
  //#region src/cohere-embedding-model-options.d.ts
35
35
  type CohereEmbeddingModelId = 'embed-english-v3.0' | 'embed-multilingual-v3.0' | 'embed-english-light-v3.0' | 'embed-multilingual-light-v3.0' | 'embed-english-v2.0' | 'embed-english-light-v2.0' | 'embed-multilingual-v2.0' | (string & {});
36
36
  declare const cohereEmbeddingModelOptions: z.ZodObject<{
37
+ embeddingType: z.ZodOptional<z.ZodEnum<{
38
+ float: "float";
39
+ int8: "int8";
40
+ uint8: "uint8";
41
+ binary: "binary";
42
+ ubinary: "ubinary";
43
+ }>>;
37
44
  inputType: z.ZodOptional<z.ZodEnum<{
38
45
  search_document: "search_document";
39
46
  search_query: "search_query";
@@ -45,7 +52,7 @@ declare const cohereEmbeddingModelOptions: z.ZodObject<{
45
52
  START: "START";
46
53
  END: "END";
47
54
  }>>;
48
- outputDimension: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<256>, z.ZodLiteral<512>, z.ZodLiteral<1024>, z.ZodLiteral<1536>]>>;
55
+ outputDimension: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<256>, z.ZodLiteral<512>, z.ZodLiteral<768>, z.ZodLiteral<1024>, z.ZodLiteral<1536>, z.ZodLiteral<2048>]>>;
49
56
  }, z.core.$strip>;
50
57
  type CohereEmbeddingModelOptions = z.infer<typeof cohereEmbeddingModelOptions>;
51
58
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/cohere-chat-language-model-options.ts","../src/reranking/cohere-reranking-model-options.ts","../src/cohere-embedding-model-options.ts","../src/cohere-provider.ts","../src/version.ts"],"mappings":";;;;KAGY;cAgBC,gCAA8B,EAAA;;;;;;;;GAezC,EAAA,KAAA;KAEU,iCAAiC,EAAE,aACtC;;;KC7BG;KAMA;;;;;;EAMV;;;;;;EAOA;;;;KCzBU;cAUC,6BAA2B,EAAA;;;;;;;;;;;;;GAiCtC,EAAA,KAAA;KAEU,8BAA8B,EAAE,aACnC;;;UC1BQ,uBAAuB;GACrC,SAAS,oBAAoB;;;;EAK9B,cAAc,SAAS,oBAAoB;;;;EAK3C,UAAU,SAAS,yBAAyB;;;;EAK5C,eAAe,SAAS,yBAAyB;;;;EAKjD,cAAc,SAAS,yBAAyB;;;;EAKhD,mBAAmB,SAAS,yBAAyB;;;;EAKrD,UAAU,SAAS,yBAAyB;;;;EAK5C,eAAe,SAAS,yBAAyB;;UAGlC;;;;;EAKf;;;;;EAMA;;;;EAKA,UAAU;;;;;EAMV,QAAQ;;;;EAKR;;;;;wBAMc,aACd,UAAS,yBACR;;;;qBAuEU,QAAM;;;qBCrKN"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/cohere-chat-language-model-options.ts","../src/reranking/cohere-reranking-model-options.ts","../src/cohere-embedding-model-options.ts","../src/cohere-provider.ts","../src/version.ts"],"mappings":";;;;KAGY;cAgBC,gCAA8B,EAAA;;;;;;;;GAezC,EAAA,KAAA;KAEU,iCAAiC,EAAE,aACtC;;;KC7BG;KAMA;;;;;;EAMV;;;;;;EAOA;;;;KCzBU;cAUC,6BAA2B,EAAA;;;;;;;;;;;;;;;;;;;;GAiDtC,EAAA,KAAA;KAEU,8BAA8B,EAAE,aACnC;;;UC1CQ,uBAAuB;GACrC,SAAS,oBAAoB;;;;EAK9B,cAAc,SAAS,oBAAoB;;;;EAK3C,UAAU,SAAS,yBAAyB;;;;EAK5C,eAAe,SAAS,yBAAyB;;;;EAKjD,cAAc,SAAS,yBAAyB;;;;EAKhD,mBAAmB,SAAS,yBAAyB;;;;EAKrD,UAAU,SAAS,yBAAyB;;;;EAK5C,eAAe,SAAS,yBAAyB;;UAGlC;;;;;EAKf;;;;;EAMA;;;;EAKA,UAAU;;;;;EAMV,QAAQ;;;;EAKR;;;;;wBAMc,aACd,UAAS,yBACR;;;;qBAuEU,QAAM;;;qBCrKN"}
package/dist/index.js CHANGED
@@ -676,6 +676,18 @@ const cohereChatChunkSchema = z.discriminatedUnion("type", [
676
676
  //#endregion
677
677
  //#region src/cohere-embedding-model-options.ts
678
678
  const cohereEmbeddingModelOptions = z.object({
679
+ /**
680
+ * The format of the returned embedding. Defaults to `float`.
681
+ * Non-float formats require Embed v3.0 or newer.
682
+ * Binary formats contain packed bytes, not individual vector dimensions.
683
+ */
684
+ embeddingType: z.enum([
685
+ "float",
686
+ "int8",
687
+ "uint8",
688
+ "binary",
689
+ "ubinary"
690
+ ]).optional(),
679
691
  /**
680
692
  * Specifies the type of input passed to the model. Default is `search_query`.
681
693
  *
@@ -707,14 +719,16 @@ const cohereEmbeddingModelOptions = z.object({
707
719
  * The number of dimensions of the output embedding.
708
720
  * Only available for `embed-v4.0` and newer models.
709
721
  *
710
- * Possible values are `256`, `512`, `1024`, and `1536`.
711
- * The default is `1536`.
722
+ * Embed v4.0 supports `256`, `512`, `1024`, and `1536` (default).
723
+ * Embed v5.0 Pro and Fast also support `768` and `2048` (default).
712
724
  */
713
725
  outputDimension: z.union([
714
726
  z.literal(256),
715
727
  z.literal(512),
728
+ z.literal(768),
716
729
  z.literal(1024),
717
- z.literal(1536)
730
+ z.literal(1536),
731
+ z.literal(2048)
718
732
  ]).optional()
719
733
  });
720
734
  //#endregion
@@ -745,6 +759,7 @@ var CohereEmbeddingModel = class CohereEmbeddingModel {
745
759
  providerOptions,
746
760
  schema: cohereEmbeddingModelOptions
747
761
  });
762
+ const embeddingType = embeddingOptions?.embeddingType ?? "float";
748
763
  if (values.length > this.maxEmbeddingsPerCall) throw new TooManyEmbeddingValuesForCallError({
749
764
  provider: this.provider,
750
765
  modelId: this.modelId,
@@ -756,20 +771,20 @@ var CohereEmbeddingModel = class CohereEmbeddingModel {
756
771
  headers: combineHeaders(this.config.headers?.(), headers),
757
772
  body: {
758
773
  model: this.modelId,
759
- embedding_types: ["float"],
774
+ embedding_types: [embeddingType],
760
775
  texts: values,
761
776
  input_type: embeddingOptions?.inputType ?? "search_query",
762
777
  truncate: embeddingOptions?.truncate,
763
778
  output_dimension: embeddingOptions?.outputDimension
764
779
  },
765
780
  failedResponseHandler: cohereFailedResponseHandler,
766
- successfulResponseHandler: createJsonResponseHandler(cohereTextEmbeddingResponseSchema),
781
+ successfulResponseHandler: createJsonResponseHandler(cohereTextEmbeddingResponseSchema(embeddingType)),
767
782
  abortSignal,
768
783
  fetch: this.config.fetch
769
784
  });
770
785
  return {
771
786
  warnings: [],
772
- embeddings: response.embeddings.float,
787
+ embeddings: response.embeddings[embeddingType],
773
788
  usage: { tokens: response.meta.billed_units.input_tokens },
774
789
  response: {
775
790
  headers: responseHeaders,
@@ -778,8 +793,8 @@ var CohereEmbeddingModel = class CohereEmbeddingModel {
778
793
  };
779
794
  }
780
795
  };
781
- const cohereTextEmbeddingResponseSchema = z.object({
782
- embeddings: z.object({ float: z.array(z.array(z.number())) }),
796
+ const cohereTextEmbeddingResponseSchema = (embeddingType) => z.object({
797
+ embeddings: z.object({ [embeddingType]: z.array(z.array(z.number())) }),
783
798
  meta: z.object({ billed_units: z.object({ input_tokens: z.number() }) })
784
799
  });
785
800
  //#endregion
@@ -853,7 +868,7 @@ var CohereRerankingModel = class {
853
868
  };
854
869
  //#endregion
855
870
  //#region src/version.ts
856
- const VERSION = "4.0.54";
871
+ const VERSION = "4.0.55";
857
872
  //#endregion
858
873
  //#region src/cohere-provider.ts
859
874
  /**
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_exhaustiveCheck","_exhaustiveCheck"],"sources":["../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-chat-language-model.ts","../src/cohere-embedding-model-options.ts","../src/cohere-embedding-model.ts","../src/reranking/cohere-reranking-api.ts","../src/reranking/cohere-reranking-model-options.ts","../src/reranking/cohere-reranking-model.ts","../src/version.ts","../src/cohere-provider.ts"],"sourcesContent":["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';\nimport { createNullLanguageModelUsage } from '@ai-sdk/provider-utils';\n\nexport type CohereUsageTokens = {\n input_tokens: number;\n output_tokens: number;\n};\n\nexport type CohereUsage = {\n billed_units?: CohereUsageTokens | null;\n tokens: CohereUsageTokens;\n cached_tokens?: number | null;\n};\n\nexport function convertCohereUsage(\n usage: CohereUsage | undefined | null,\n): LanguageModelV4Usage {\n if (usage == null) {\n return createNullLanguageModelUsage();\n }\n\n const tokens = usage.tokens;\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: usage,\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 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 parseJSON,\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 { convertCohereUsage, type CohereUsage } 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),\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: CohereUsage | 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 async 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 await parseJSON({\n text: pendingToolCall.arguments?.trim() || '{}',\n }),\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;\n return;\n }\n\n default: {\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\n// Loose, nested objects included: the parsed value is returned as `usage.raw`.\nconst cohereUsageSchema = z.looseObject({\n billed_units: z\n .looseObject({\n input_tokens: z.number(),\n output_tokens: z.number(),\n })\n .nullish(),\n tokens: z.looseObject({\n input_tokens: z.number(),\n output_tokens: z.number(),\n }),\n cached_tokens: z.number().nullish(),\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: cohereUsageSchema,\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: cohereUsageSchema,\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\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 {\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 { 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","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","// 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","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"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["_exhaustiveCheck","_exhaustiveCheck"],"sources":["../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-chat-language-model.ts","../src/cohere-embedding-model-options.ts","../src/cohere-embedding-model.ts","../src/reranking/cohere-reranking-api.ts","../src/reranking/cohere-reranking-model-options.ts","../src/reranking/cohere-reranking-model.ts","../src/version.ts","../src/cohere-provider.ts"],"sourcesContent":["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';\nimport { createNullLanguageModelUsage } from '@ai-sdk/provider-utils';\n\nexport type CohereUsageTokens = {\n input_tokens: number;\n output_tokens: number;\n};\n\nexport type CohereUsage = {\n billed_units?: CohereUsageTokens | null;\n tokens: CohereUsageTokens;\n cached_tokens?: number | null;\n};\n\nexport function convertCohereUsage(\n usage: CohereUsage | undefined | null,\n): LanguageModelV4Usage {\n if (usage == null) {\n return createNullLanguageModelUsage();\n }\n\n const tokens = usage.tokens;\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: usage,\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 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 parseJSON,\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 { convertCohereUsage, type CohereUsage } 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),\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: CohereUsage | 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 async 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 await parseJSON({\n text: pendingToolCall.arguments?.trim() || '{}',\n }),\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;\n return;\n }\n\n default: {\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\n// Loose, nested objects included: the parsed value is returned as `usage.raw`.\nconst cohereUsageSchema = z.looseObject({\n billed_units: z\n .looseObject({\n input_tokens: z.number(),\n output_tokens: z.number(),\n })\n .nullish(),\n tokens: z.looseObject({\n input_tokens: z.number(),\n output_tokens: z.number(),\n }),\n cached_tokens: z.number().nullish(),\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: cohereUsageSchema,\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: cohereUsageSchema,\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\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 * The format of the returned embedding. Defaults to `float`.\n * Non-float formats require Embed v3.0 or newer.\n * Binary formats contain packed bytes, not individual vector dimensions.\n */\n embeddingType: z\n .enum(['float', 'int8', 'uint8', 'binary', 'ubinary'])\n .optional(),\n\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 * Embed v4.0 supports `256`, `512`, `1024`, and `1536` (default).\n * Embed v5.0 Pro and Fast also support `768` and `2048` (default).\n */\n outputDimension: z\n .union([\n z.literal(256),\n z.literal(512),\n z.literal(768),\n z.literal(1024),\n z.literal(1536),\n z.literal(2048),\n ])\n .optional(),\n});\n\nexport type CohereEmbeddingModelOptions = z.infer<\n typeof cohereEmbeddingModelOptions\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 type CohereEmbeddingModelOptions,\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 const embeddingType = embeddingOptions?.embeddingType ?? 'float';\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 embedding_types: [embeddingType],\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(embeddingType),\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n warnings: [],\n embeddings: response.embeddings[embeddingType],\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 = (\n embeddingType: NonNullable<CohereEmbeddingModelOptions['embeddingType']>,\n) =>\n z.object({\n embeddings: z.object({\n [embeddingType]: 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 { 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","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","// 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","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"],"mappings":"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"}
@@ -246,6 +246,31 @@ const { embedding } = await embed({
246
246
 
247
247
  The following provider options are available:
248
248
 
249
+ - **embeddingType** _'float' | 'int8' | 'uint8' | 'binary' | 'ubinary'_
250
+
251
+ Selects one embedding format per call. Defaults to `float`, preserving the
252
+ existing behavior. Non-float formats require Embed v3.0 or newer. For example:
253
+
254
+ ```ts
255
+ const { embedding } = await embed({
256
+ model: cohere.embedding('embed-v4.0'),
257
+ value: 'sunny day at the beach',
258
+ providerOptions: {
259
+ cohere: {
260
+ embeddingType: 'int8',
261
+ } satisfies CohereEmbeddingModelOptions,
262
+ },
263
+ });
264
+ ```
265
+
266
+ The selected format is returned in `embedding` (or `embeddings` for
267
+ `embedMany`) as number arrays. The provider returns the values without
268
+ converting or unpacking them. `binary` and `ubinary` contain packed bytes:
269
+ each number represents eight dimensions. Use a binary-aware vector database
270
+ or unpack the bits before comparing vectors; do not pass packed bytes directly
271
+ to `cosineSimilarity`. Compressed formats can affect retrieval quality, and
272
+ compact storage requires an appropriate database representation.
273
+
249
274
  - **inputType** _'search_document' | 'search_query' | 'classification' | 'clustering'_
250
275
 
251
276
  Specifies the type of input passed to the model. Default is `search_query`.
@@ -254,6 +279,13 @@ The following provider options are available:
254
279
  - `classification`: Used for embeddings passed through a text classifier.
255
280
  - `clustering`: Used for embeddings run through a clustering algorithm.
256
281
 
282
+ - **outputDimension** _256 | 512 | 768 | 1024 | 1536 | 2048_
283
+
284
+ The number of dimensions of the output embedding. Available for Embed v4.0
285
+ and newer models. Embed v4.0 supports `256`, `512`, `1024`, and `1536`
286
+ (default). Embed v5.0 Pro and Fast also support `768` and `2048` (default).
287
+ When omitted, the API uses the model's default dimension.
288
+
257
289
  - **truncate** _'NONE' | 'START' | 'END'_
258
290
 
259
291
  Specifies how the API will handle inputs longer than the maximum token length.
@@ -264,15 +296,18 @@ The following provider options are available:
264
296
 
265
297
  ### Model Capabilities
266
298
 
267
- | Model | Embedding Dimensions |
268
- | ------------------------------- | -------------------- |
269
- | `embed-english-v3.0` | 1024 |
270
- | `embed-multilingual-v3.0` | 1024 |
271
- | `embed-english-light-v3.0` | 384 |
272
- | `embed-multilingual-light-v3.0` | 384 |
273
- | `embed-english-v2.0` | 4096 |
274
- | `embed-english-light-v2.0` | 1024 |
275
- | `embed-multilingual-v2.0` | 768 |
299
+ | Model | Embedding Dimensions |
300
+ | ------------------------------- | ----------------------------------------- |
301
+ | `embed-v5.0-pro` | 256, 512, 768, 1024, 1536, 2048 (default) |
302
+ | `embed-v5.0-fast` | 256, 512, 768, 1024, 1536, 2048 (default) |
303
+ | `embed-v4.0` | 256, 512, 1024, 1536 (default) |
304
+ | `embed-english-v3.0` | 1024 |
305
+ | `embed-multilingual-v3.0` | 1024 |
306
+ | `embed-english-light-v3.0` | 384 |
307
+ | `embed-multilingual-light-v3.0` | 384 |
308
+ | `embed-english-v2.0` | 4096 |
309
+ | `embed-english-light-v2.0` | 1024 |
310
+ | `embed-multilingual-v2.0` | 768 |
276
311
 
277
312
  ## Reranking Models
278
313
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/cohere",
3
- "version": "4.0.54",
3
+ "version": "4.0.55",
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.21",
33
- "@ai-sdk/provider-utils": "5.0.53"
32
+ "@ai-sdk/provider": "4.0.22",
33
+ "@ai-sdk/provider-utils": "5.0.54"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@ai-sdk/test-server": "2.0.3",
@@ -11,6 +11,15 @@ export type CohereEmbeddingModelId =
11
11
  | (string & {});
12
12
 
13
13
  export const cohereEmbeddingModelOptions = z.object({
14
+ /**
15
+ * The format of the returned embedding. Defaults to `float`.
16
+ * Non-float formats require Embed v3.0 or newer.
17
+ * Binary formats contain packed bytes, not individual vector dimensions.
18
+ */
19
+ embeddingType: z
20
+ .enum(['float', 'int8', 'uint8', 'binary', 'ubinary'])
21
+ .optional(),
22
+
14
23
  /**
15
24
  * Specifies the type of input passed to the model. Default is `search_query`.
16
25
  *
@@ -37,11 +46,18 @@ export const cohereEmbeddingModelOptions = z.object({
37
46
  * The number of dimensions of the output embedding.
38
47
  * Only available for `embed-v4.0` and newer models.
39
48
  *
40
- * Possible values are `256`, `512`, `1024`, and `1536`.
41
- * The default is `1536`.
49
+ * Embed v4.0 supports `256`, `512`, `1024`, and `1536` (default).
50
+ * Embed v5.0 Pro and Fast also support `768` and `2048` (default).
42
51
  */
43
52
  outputDimension: z
44
- .union([z.literal(256), z.literal(512), z.literal(1024), z.literal(1536)])
53
+ .union([
54
+ z.literal(256),
55
+ z.literal(512),
56
+ z.literal(768),
57
+ z.literal(1024),
58
+ z.literal(1536),
59
+ z.literal(2048),
60
+ ])
45
61
  .optional(),
46
62
  });
47
63
 
@@ -16,6 +16,7 @@ import { z } from 'zod/v4';
16
16
  import {
17
17
  cohereEmbeddingModelOptions,
18
18
  type CohereEmbeddingModelId,
19
+ type CohereEmbeddingModelOptions,
19
20
  } from './cohere-embedding-model-options';
20
21
  import { cohereFailedResponseHandler } from './cohere-error';
21
22
 
@@ -71,6 +72,7 @@ export class CohereEmbeddingModel implements EmbeddingModelV4 {
71
72
  providerOptions,
72
73
  schema: cohereEmbeddingModelOptions,
73
74
  });
75
+ const embeddingType = embeddingOptions?.embeddingType ?? 'float';
74
76
 
75
77
  if (values.length > this.maxEmbeddingsPerCall) {
76
78
  throw new TooManyEmbeddingValuesForCallError({
@@ -90,10 +92,7 @@ export class CohereEmbeddingModel implements EmbeddingModelV4 {
90
92
  headers: combineHeaders(this.config.headers?.(), headers),
91
93
  body: {
92
94
  model: this.modelId,
93
- // The AI SDK only supports 'float' embeddings. Note that the Cohere API
94
- // supports other embedding types, but they are not currently supported by the AI SDK.
95
- // https://docs.cohere.com/v2/reference/embed#request.body.embedding_types
96
- embedding_types: ['float'],
95
+ embedding_types: [embeddingType],
97
96
  texts: values,
98
97
  input_type: embeddingOptions?.inputType ?? 'search_query',
99
98
  truncate: embeddingOptions?.truncate,
@@ -101,7 +100,7 @@ export class CohereEmbeddingModel implements EmbeddingModelV4 {
101
100
  },
102
101
  failedResponseHandler: cohereFailedResponseHandler,
103
102
  successfulResponseHandler: createJsonResponseHandler(
104
- cohereTextEmbeddingResponseSchema,
103
+ cohereTextEmbeddingResponseSchema(embeddingType),
105
104
  ),
106
105
  abortSignal,
107
106
  fetch: this.config.fetch,
@@ -109,7 +108,7 @@ export class CohereEmbeddingModel implements EmbeddingModelV4 {
109
108
 
110
109
  return {
111
110
  warnings: [],
112
- embeddings: response.embeddings.float,
111
+ embeddings: response.embeddings[embeddingType],
113
112
  usage: { tokens: response.meta.billed_units.input_tokens },
114
113
  response: { headers: responseHeaders, body: rawValue },
115
114
  };
@@ -118,13 +117,16 @@ export class CohereEmbeddingModel implements EmbeddingModelV4 {
118
117
 
119
118
  // minimal version of the schema, focussed on what is needed for the implementation
120
119
  // this approach limits breakages when the API changes and increases efficiency
121
- const cohereTextEmbeddingResponseSchema = z.object({
122
- embeddings: z.object({
123
- float: z.array(z.array(z.number())),
124
- }),
125
- meta: z.object({
126
- billed_units: z.object({
127
- input_tokens: z.number(),
120
+ const cohereTextEmbeddingResponseSchema = (
121
+ embeddingType: NonNullable<CohereEmbeddingModelOptions['embeddingType']>,
122
+ ) =>
123
+ z.object({
124
+ embeddings: z.object({
125
+ [embeddingType]: z.array(z.array(z.number())),
128
126
  }),
129
- }),
130
- });
127
+ meta: z.object({
128
+ billed_units: z.object({
129
+ input_tokens: z.number(),
130
+ }),
131
+ }),
132
+ });