@ai-sdk/cohere 4.0.72 → 4.0.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @ai-sdk/cohere
2
2
 
3
+ ## 4.0.73
4
+
5
+ ### Patch Changes
6
+
7
+ - 7716e18: Support promises and synchronous or asynchronous callbacks in provider API key and token settings. Resolve credentials per authenticated request while preserving existing authentication behavior and synchronous credential serialization.
8
+
9
+ The experimental OpenAI Live `getServerWebSocketConfig()` method can now resolve asynchronously. Await its result before using the connection settings.
10
+
11
+ - Updated dependencies [7716e18]
12
+ - Updated dependencies [5c247e9]
13
+ - Updated dependencies [dcd2f8d]
14
+ - @ai-sdk/provider-utils@5.0.72
15
+ - @ai-sdk/provider@4.0.35
16
+
3
17
  ## 4.0.72
4
18
 
5
19
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { EmbeddingModelV4, LanguageModelV4, ProviderV4, RerankingModelV4 } from "@ai-sdk/provider";
2
- import { FetchFunction, InferSchema } from "@ai-sdk/provider-utils";
2
+ import { FetchFunction, InferSchema, Resolvable } from "@ai-sdk/provider-utils";
3
3
  //#region src/cohere-chat-language-model-options.d.ts
4
4
  type CohereChatModelId = 'command-a-03-2025' | 'command-a-reasoning-08-2025' | 'command-a-vision-07-2025' | 'command-r7b-12-2024' | 'command-r-plus-04-2024' | 'command-r-plus' | 'command-r-08-2024' | 'command-r-03-2024' | 'command-r' | 'command' | 'command-nightly' | 'command-light' | 'command-light-nightly' | (string & {});
5
5
  declare const cohereLanguageModelChatOptions: import("@ai-sdk/provider-utils").LazySchema<{
@@ -79,7 +79,7 @@ interface CohereProviderSettings {
79
79
  * API key that is being send using the `Authorization` header.
80
80
  * It defaults to the `COHERE_API_KEY` environment variable.
81
81
  */
82
- apiKey?: string;
82
+ apiKey?: Resolvable<string>;
83
83
  /**
84
84
  * Custom headers to include in the requests.
85
85
  */
@@ -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":";;;KAQY;cAgBC,iEAA8B;;;;;;KAqB/B,iCAAiC,mBACpC;;;KCtCG;KAMA;;;;;;EAMV;;;;;;EAOA;;;;KCpBU;cAUC,8DAA2B;;;;;;KA4D5B,8BAA8B,mBACjC;;;UCxDQ,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":";;;KAQY;cAgBC,iEAA8B;;;;;;KAqB/B,iCAAiC,mBACpC;;;KCtCG;KAMA;;;;;;EAMV;;;;;;EAOA;;;;KCpBU;cAUC,8DAA2B;;;;;;KA4D5B,8BAA8B,mBACjC;;;UCtDQ,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,SAAS;;;;EAKT,UAAU;;;;;EAMV,QAAQ;;;;EAKR;;;;;wBAMc,aACd,UAAS,yBACR;;;;qBAyEU,QAAM;;;qBCzKN"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { NoSuchModelError, TooManyEmbeddingValuesForCallError, UnsupportedFunctionalityError } from "@ai-sdk/provider";
2
- import { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE, combineHeaders, convertBase64ToUint8Array, convertToBase64, createEventSourceResponseHandler, createJsonErrorResponseHandler, createJsonResponseHandler, createNullLanguageModelUsage, generateId, getTopLevelMediaType, isCustomReasoning, lazySchema, loadApiKey, mapReasoningToProviderBudget, parseJSON, parseProviderOptions, postJsonToApi, resolveFullMediaType, serializeModelOptions, withUserAgentSuffix, withoutTrailingSlash, zodSchema } from "@ai-sdk/provider-utils";
2
+ import { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE, combineHeaders, convertBase64ToUint8Array, convertToBase64, createEventSourceResponseHandler, createJsonErrorResponseHandler, createJsonResponseHandler, createNullLanguageModelUsage, generateId, getTopLevelMediaType, isCustomReasoning, lazySchema, loadApiKey, mapReasoningToProviderBudget, parseJSON, parseProviderOptions, postJsonToApi, resolve, resolveFullMediaType, resolveWith, serializeModelOptions, withUserAgentSuffix, withoutTrailingSlash, zodSchema } from "@ai-sdk/provider-utils";
3
3
  import { z } from "zod/v4";
4
4
  //#region src/cohere-chat-language-model-options.ts
5
5
  const cohereLanguageModelChatOptions = lazySchema(() => zodSchema(z.object({
@@ -320,7 +320,7 @@ var CohereChatLanguageModel = class CohereChatLanguageModel {
320
320
  const { args, warnings } = await this.getArgs(options);
321
321
  const { responseHeaders, value: response, rawValue: rawResponse } = await postJsonToApi({
322
322
  url: `${this.config.baseURL}/chat`,
323
- headers: combineHeaders(this.config.headers?.(), options.headers),
323
+ headers: combineHeaders(await resolve(this.config.headers), options.headers),
324
324
  body: args,
325
325
  failedResponseHandler: cohereFailedResponseHandler,
326
326
  successfulResponseHandler: createJsonResponseHandler(cohereChatResponseSchema),
@@ -384,7 +384,7 @@ var CohereChatLanguageModel = class CohereChatLanguageModel {
384
384
  const { args, warnings } = await this.getArgs(options);
385
385
  const { responseHeaders, value: response } = await postJsonToApi({
386
386
  url: `${this.config.baseURL}/chat`,
387
- headers: combineHeaders(this.config.headers?.(), options.headers),
387
+ headers: combineHeaders(await resolve(this.config.headers), options.headers),
388
388
  body: {
389
389
  ...args,
390
390
  stream: true
@@ -767,7 +767,7 @@ var CohereEmbeddingModel = class CohereEmbeddingModel {
767
767
  });
768
768
  const { responseHeaders, value: response, rawValue } = await postJsonToApi({
769
769
  url: `${this.config.baseURL}/embed`,
770
- headers: combineHeaders(this.config.headers?.(), headers),
770
+ headers: combineHeaders(await resolve(this.config.headers), headers),
771
771
  body: {
772
772
  model: this.modelId,
773
773
  embedding_types: [embeddingType],
@@ -837,7 +837,7 @@ var CohereRerankingModel = class {
837
837
  });
838
838
  const { responseHeaders, value: response, rawValue } = await postJsonToApi({
839
839
  url: `${this.config.baseURL}/rerank`,
840
- headers: combineHeaders(this.config.headers(), headers),
840
+ headers: combineHeaders(await resolve(this.config.headers), headers),
841
841
  body: {
842
842
  model: this.modelId,
843
843
  query,
@@ -867,7 +867,7 @@ var CohereRerankingModel = class {
867
867
  };
868
868
  //#endregion
869
869
  //#region src/version.ts
870
- const VERSION = "4.0.72";
870
+ const VERSION = "4.0.73";
871
871
  //#endregion
872
872
  //#region src/cohere-provider.ts
873
873
  /**
@@ -875,14 +875,14 @@ const VERSION = "4.0.72";
875
875
  */
876
876
  function createCohere(options = {}) {
877
877
  const baseURL = withoutTrailingSlash(options.baseURL) ?? "https://api.cohere.com/v2";
878
- const getHeaders = () => withUserAgentSuffix({
878
+ const getHeaders = () => resolveWith(options.apiKey, (apiKey) => withUserAgentSuffix({
879
879
  Authorization: `Bearer ${loadApiKey({
880
- apiKey: options.apiKey,
880
+ apiKey,
881
881
  environmentVariableName: "COHERE_API_KEY",
882
882
  description: "Cohere"
883
883
  })}`,
884
884
  ...options.headers
885
- }, `ai-sdk-cohere/${VERSION}`);
885
+ }, `ai-sdk-cohere/${VERSION}`));
886
886
  const createChatModel = (modelId) => new CohereChatLanguageModel(modelId, {
887
887
  provider: "cohere.chat",
888
888
  baseURL,
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 {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { 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 = lazySchema(() =>\n zodSchema(\n 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 ),\n);\n\nexport type CohereLanguageModelChatOptions = InferSchema<\n typeof cohereLanguageModelChatOptions\n>;\n\nexport const cohereImagePartProviderOptions = lazySchema(() =>\n zodSchema(\n 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 ),\n);\n\nexport type CohereImagePartProviderOptions = InferSchema<\n typeof cohereImagePartProviderOptions\n>;\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n createJsonErrorResponseHandler,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst cohereErrorDataSchema = lazySchema(() =>\n zodSchema(\n z.object({\n message: z.string(),\n }),\n ),\n);\n\nexport type CohereErrorData = InferSchema<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 const cacheReadTokens = usage.cached_tokens ?? undefined;\n\n return {\n inputTokens: {\n total: inputTokens,\n noCache:\n cacheReadTokens != null ? inputTokens - cacheReadTokens : inputTokens,\n cacheRead: cacheReadTokens,\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 convertBase64ToUint8Array,\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 = new TextDecoder().decode(\n typeof part.data.data === 'string'\n ? convertBase64ToUint8Array(part.data.data)\n : part.data.data,\n );\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 lazySchema,\n zodSchema,\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 // A clean end without the provider's completion signal is interrupted.\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'interrupted',\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<InferSchema<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 return { thinking: { type: 'enabled', token_budget: tokenBudget } };\n}\n\n// Loose, nested objects included: the parsed value is returned as `usage.raw`.\nconst cohereUsageSchema = () =>\n 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 = lazySchema(() =>\n zodSchema(\n 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);\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 = lazySchema(() =>\n zodSchema(\n 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 ),\n);\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { 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 = lazySchema(() =>\n zodSchema(\n 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([\n 'search_document',\n 'search_query',\n 'classification',\n 'clustering',\n ])\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 ),\n);\n\nexport type CohereEmbeddingModelOptions = InferSchema<\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 dimensions,\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 ?? dimensions,\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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"}
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 {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { 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 = lazySchema(() =>\n zodSchema(\n 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 ),\n);\n\nexport type CohereLanguageModelChatOptions = InferSchema<\n typeof cohereLanguageModelChatOptions\n>;\n\nexport const cohereImagePartProviderOptions = lazySchema(() =>\n zodSchema(\n 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 ),\n);\n\nexport type CohereImagePartProviderOptions = InferSchema<\n typeof cohereImagePartProviderOptions\n>;\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n createJsonErrorResponseHandler,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nconst cohereErrorDataSchema = lazySchema(() =>\n zodSchema(\n z.object({\n message: z.string(),\n }),\n ),\n);\n\nexport type CohereErrorData = InferSchema<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 const cacheReadTokens = usage.cached_tokens ?? undefined;\n\n return {\n inputTokens: {\n total: inputTokens,\n noCache:\n cacheReadTokens != null ? inputTokens - cacheReadTokens : inputTokens,\n cacheRead: cacheReadTokens,\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 convertBase64ToUint8Array,\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 = new TextDecoder().decode(\n typeof part.data.data === 'string'\n ? convertBase64ToUint8Array(part.data.data)\n : part.data.data,\n );\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 resolve,\n type Resolvable,\n lazySchema,\n zodSchema,\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?: Resolvable<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(\n await resolve(this.config.headers),\n options.headers,\n ),\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(\n await resolve(this.config.headers),\n options.headers,\n ),\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 // A clean end without the provider's completion signal is interrupted.\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'interrupted',\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<InferSchema<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 return { thinking: { type: 'enabled', token_budget: tokenBudget } };\n}\n\n// Loose, nested objects included: the parsed value is returned as `usage.raw`.\nconst cohereUsageSchema = () =>\n 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 = lazySchema(() =>\n zodSchema(\n 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);\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 = lazySchema(() =>\n zodSchema(\n 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 ),\n);\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { 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 = lazySchema(() =>\n zodSchema(\n 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([\n 'search_document',\n 'search_query',\n 'classification',\n 'clustering',\n ])\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 ),\n);\n\nexport type CohereEmbeddingModelOptions = InferSchema<\n typeof cohereEmbeddingModelOptions\n>;\n","import {\n TooManyEmbeddingValuesForCallError,\n type EmbeddingModelV4,\n} from '@ai-sdk/provider';\nimport {\n resolve,\n type Resolvable,\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?: Resolvable<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 dimensions,\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(await resolve(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 ?? dimensions,\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 resolve,\n type Resolvable,\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: Resolvable<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(await resolve(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 resolveWith,\n type Resolvable,\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?: Resolvable<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 resolveWith(options.apiKey, apiKey =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey,\n environmentVariableName: 'COHERE_API_KEY',\n description: 'Cohere',\n })}`,\n ...options.headers,\n },\n `ai-sdk-cohere/${VERSION}`,\n ),\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":";;;;AAwBA,MAAa,iCAAiC,iBAC5C,UACE,EAAE,OAAO;;;;;;;;;AASP,UAAU,EACP,OAAO;CACN,MAAM,EAAE,KAAK,CAAC,WAAW,UAAU,CAAC,CAAC,CAAC,SAAS;CAC/C,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS;AACnC,CAAC,CAAC,CACD,SAAS,EACd,CAAC,CACH,CACF;AAMA,MAAa,iCAAiC,iBAC5C,UACE,EAAE,OAAO;;;;;;AAMP,QAAQ,EAAE,KAAK;CAAC;CAAQ;CAAO;AAAM,CAAC,CAAC,CAAC,SAAS,EACnD,CAAC,CACH,CACF;;;ACpDA,MAAM,wBAAwB,iBAC5B,UACE,EAAE,OAAO,EACP,SAAS,EAAE,OAAO,EACpB,CAAC,CACH,CACF;AAIA,MAAa,8BAA8B,+BAA+B;CACxE,aAAa;CACb,iBAAgB,SAAQ,KAAK;AAC/B,CAAC;;;ACdD,SAAgB,aAAa,EAC3B,OACA,cAiBA;CAEA,QAAQ,OAAO,SAAS,QAAQ,KAAA;CAEhC,MAAM,eAAkC,CAAC;CAEzC,IAAI,SAAS,MACX,OAAO;EAAE,OAAO,KAAA;EAAW,YAAY,KAAA;EAAW;CAAa;CAGjE,MAAM,cAOD,CAAC;CAEN,KAAK,MAAM,QAAQ,OACjB,IAAI,KAAK,SAAS,YAChB,aAAa,KAAK;EAChB,MAAM;EACN,SAAS,yBAAyB,KAAK;CACzC,CAAC;MAED,YAAY,KAAK;EACf,MAAM;EACN,UAAU;GACR,MAAM,KAAK;GACX,aAAa,KAAK;GAClB,YAAY,KAAK;EACnB;CACF,CAAC;CAIL,IAAI,cAAc,MAChB,OAAO;EAAE,OAAO;EAAa,YAAY,KAAA;EAAW;CAAa;CAGnE,MAAM,OAAO,WAAW;CAExB,QAAQ,MAAR;EACE,KAAK,QACH,OAAO;GAAE,OAAO;GAAa,YAAY,KAAA;GAAW;EAAa;EAEnE,KAAK,QACH,OAAO;GAAE,OAAO;GAAa,YAAY;GAAQ;EAAa;EAEhE,KAAK,YACH,OAAO;GAAE,OAAO;GAAa,YAAY;GAAY;EAAa;EAEpE,KAAK,QACH,OAAO;GACL,OAAO,YAAY,QACjB,SAAQ,KAAK,SAAS,SAAS,WAAW,QAC5C;GACA,YAAY;GACZ;EACF;EAEF,SAEE,MAAM,IAAI,8BAA8B,EACtC,eAAe,qBAAqBA,OACtC,CAAC;CAEL;AACF;;;ACjFA,SAAgB,mBACd,OACsB;CACtB,IAAI,SAAS,MACX,OAAO,6BAA6B;CAGtC,MAAM,SAAS,MAAM;CACrB,MAAM,cAAc,OAAO;CAC3B,MAAM,eAAe,OAAO;CAC5B,MAAM,kBAAkB,MAAM,iBAAiB,KAAA;CAE/C,OAAO;EACL,aAAa;GACX,OAAO;GACP,SACE,mBAAmB,OAAO,cAAc,kBAAkB;GAC5D,WAAW;GACX,YAAY,KAAA;EACd;EACA,cAAc;GACZ,OAAO;GACP,MAAM;GACN,WAAW,KAAA;EACb;EACA,KAAK;CACP;AACF;;;ACrBA,eAAsB,0BACpB,QAOC;CACD,MAAM,WAA6B,CAAC;CACpC,MAAM,YAA+D,CAAC;CACtE,MAAM,WAA8B,CAAC;CAErC,KAAK,MAAM,EAAE,MAAM,aAAa,QAC9B,QAAQ,MAAR;EACE,KAAK;GACH,SAAS,KAAK;IAAE,MAAM;IAAU;GAAQ,CAAC;GACzC;EAGF,KAAK,QAAQ;GACX,MAAM,mBAAoD,CAAC;GAC3D,IAAI,WAAW;GAEf,KAAK,MAAM,QAAQ,SACjB,QAAQ,KAAK,MAAb;IACE,KAAK;KACH,IAAI,KAAK,KAAK,SAAS,GACrB,iBAAiB,KAAK;MAAE,MAAM;MAAQ,MAAM,KAAK;KAAK,CAAC;KAEzD;IAEF,KAAK,QAAQ;KACX,IAAI,qBAAqB,KAAK,SAAS,MAAM,SAAS;MACpD,WAAW;MACX,MAAM,MAAM,cAAc,EAAE,KAAK,CAAC;MAClC,MAAM,gBACH,MAAM,qBAAqB;OAC1B,UAAU;OACV,iBAAiB,KAAK;OACtB,QAAQ;MACV,CAAC,KAAM,CAAC;MAEV,iBAAiB,KAAK;OACpB,MAAM;OACN,WAAW;QACT;QACA,GAAI,cAAc,SACd,EAAE,QAAQ,cAAc,OAAO,IAC/B,CAAC;OACP;MACF,CAAC;MACD;KACF;KAEA,IAAI;KACJ,QAAQ,KAAK,KAAK,MAAlB;MACE,KAAK,aACH,MAAM,IAAI,8BAA8B,EACtC,eAAe,sCACjB,CAAC;MAEH,KAAK,OACH,MAAM,IAAI,8BAA8B;OACtC,eAAe;OACf,SACE;MACJ,CAAC;MAEH,KAAK;OACH,cAAc,KAAK,KAAK;OACxB;MAEF,KAAK,QACH,cAAc,IAAI,YAAY,CAAC,CAAC,OAC9B,OAAO,KAAK,KAAK,SAAS,WACtB,0BAA0B,KAAK,KAAK,IAAI,IACxC,KAAK,KAAK,IAChB;KAGJ;KAEA,UAAU,KAAK,EACb,MAAM;MACJ,MAAM;MACN,OAAO,KAAK;KACd,EACF,CAAC;KACD;IACF;GACF;GAGF,IAAI,UACF,SAAS,KAAK;IAAE,MAAM;IAAQ,SAAS;GAAiB,CAAC;QAEzD,SAAS,KAAK;IACZ,MAAM;IACN,SAAS,iBACN,KAAI,MAAM,EAAE,SAAS,SAAS,EAAE,OAAO,EAAG,CAAC,CAC3C,KAAK,EAAE;GACZ,CAAC;GAEH;EACF;EAEA,KAAK,aAAa;GAChB,IAAI,OAAO;GACX,MAAM,YAAkD,CAAC;GAEzD,KAAK,MAAM,QAAQ,SACjB,QAAQ,KAAK,MAAb;IACE,KAAK;KACH,QAAQ,KAAK;KACb;IAEF,KAAK,aACH,UAAU,KAAK;KACb,IAAI,KAAK;KACT,MAAM;KACN,UAAU;MACR,MAAM,KAAK;MACX,WAAW,KAAK,UAAU,KAAK,KAAK;KACtC;IACF,CAAC;GAGL;GAGF,SAAS,KAAK;IACZ,MAAM;IACN,SAAS,UAAU,SAAS,IAAI,KAAA,IAAY;IAC5C,YAAY,UAAU,SAAS,IAAI,YAAY,KAAA;IAC/C,WAAW,KAAA;GACb,CAAC;GAED;EACF;EACA,KAAK;GACH,SAAS,KACP,GAAG,QACA,QAAO,eAAc,WAAW,SAAS,wBAAwB,CAAC,CAClE,KAAI,eAAc;IACjB,MAAM,SAAS,WAAW;IAE1B,IAAI;IACJ,QAAQ,OAAO,MAAf;KACE,KAAK;KACL,KAAK;MACH,eAAe,OAAO;MACtB;KACF,KAAK;MACH,eAAe,OAAO,UAAU;MAChC;KACF,KAAK;KACL,KAAK;KACL,KAAK,cACH,eAAe,KAAK,UAAU,OAAO,KAAK;IAE9C;IAEA,OAAO;KACL,MAAM;KACN,SAAS;KACT,cAAc,WAAW;IAC3B;GACF,CAAC,CACL;GAEA;EAEF,SAEE,MAAM,IAAI,MAAM,qBAAqBC,MAAkB;CAE3D;CAGF,OAAO;EAAE;EAAU;EAAW;CAAS;AACzC;AAEA,SAAS,cAAc,EAAE,QAAmD;CAC1E,QAAQ,KAAK,KAAK,MAAlB;EACE,KAAK,OACH,OAAO,KAAK,KAAK,IAAI,SAAS;EAEhC,KAAK,QACH,OAAO,QAAQ,qBAAqB,EAAE,KAAK,CAAC,EAAE,UAAU,gBAAgB,KAAK,KAAK,IAAI;EAExF,KAAK,aACH,MAAM,IAAI,8BAA8B,EACtC,eAAe,4CACjB,CAAC;EAEH,KAAK,QACH,MAAM,IAAI,8BAA8B,EACtC,eAAe,kCACjB,CAAC;CAEL;AACF;;;AC5NA,SAAgB,sBACd,cACwC;CACxC,QAAQ,cAAR;EACE,KAAK;EACL,KAAK,iBACH,OAAO;EAET,KAAK,cACH,OAAO;EAET,KAAK,SACH,OAAO;EAET,KAAK,aACH,OAAO;EAET,SACE,OAAO;CACX;AACF;;;AC2BA,IAAa,0BAAb,MAAa,wBAAmD;CAW9D,QAAQ,oBAAoB,OAAgC;EAC1D,OAAO,sBAAsB;GAC3B,SAAS,MAAM;GACf,QAAQ,MAAM;EAChB,CAAC;CACH;CAEA,QAAQ,sBAAsB,SAG3B;EACD,OAAO,IAAI,wBAAwB,QAAQ,SAAS,QAAQ,MAAM;CACpE;CAEA,YAAY,SAA4B,QAA0B;EAxBlC,KAAA,uBAAA;EAImB,KAAA,gBAAA,EACjD,WAAW,CAAC,iBAAiB,EAC/B;EAmBE,KAAK,UAAU;EACf,KAAK,SAAS;CAChB;CAEA,IAAI,WAAmB;EACrB,OAAO,KAAK,OAAO;CACrB;CAEA,MAAc,QAAQ,EACpB,QACA,iBACA,aACA,MACA,MACA,kBACA,iBACA,eACA,gBACA,MACA,WACA,OACA,YACA,mBAC6B;EAC7B,MAAM,WAA8B,CAAC;EAErC,MAAM,gBACH,MAAM,qBAAqB;GAC1B,UAAU;GACV;GACA,QAAQ;EACV,CAAC,KAAM,CAAC;EAEV,MAAM,EACJ,UAAU,YACV,WAAW,iBACX,UAAU,mBACR,MAAM,0BAA0B,MAAM;EAE1C,MAAM,EACJ,OAAO,aACP,YAAY,kBACZ,iBACE,aAAa;GAAE;GAAO;EAAW,CAAC;EAEtC,SAAS,KAAK,GAAG,cAAc,GAAG,cAAc;EAEhD,OAAO;GACL,MAAM;IAEJ,OAAO,KAAK;IAGZ,mBAAmB;IACnB,kBAAkB;IAClB,YAAY;IACZ;IACA,GAAG;IACH,GAAG;IACH;IACA,gBAAgB;IAGhB,iBACE,gBAAgB,SAAS,SACrB;KAAE,MAAM;KAAe,aAAa,eAAe;IAAO,IAC1D,KAAA;IAGN,UAAU;IAGV,OAAO;IACP,aAAa;IAGb,GAAI,gBAAgB,SAAS,KAAK,EAAE,WAAW,gBAAgB;IAG/D,GAAG,sBAAsB;KACvB;KACA;KACA;IACF,CAAC;GACH;GACA;EACF;CACF;CAEA,MAAM,WACJ,SACwC;EACxC,MAAM,EAAE,MAAM,aAAa,MAAM,KAAK,QAAQ,OAAO;EAErD,MAAM,EACJ,iBACA,OAAO,UACP,UAAU,gBACR,MAAM,cAAc;GACtB,KAAK,GAAG,KAAK,OAAO,QAAQ;GAC5B,SAAS,eACP,MAAM,QAAQ,KAAK,OAAO,OAAO,GACjC,QAAQ,OACV;GACA,MAAM;GACN,uBAAuB;GACvB,2BAA2B,0BACzB,wBACF;GACA,aAAa,QAAQ;GACrB,OAAO,KAAK,OAAO;EACrB,CAAC;EAED,MAAM,UAAyC,CAAC;EAEhD,KAAK,MAAM,QAAQ,SAAS,QAAQ,WAAW,CAAC,GAAG;GACjD,IAAI,KAAK,SAAS,UAAU,KAAK,KAAK,SAAS,GAAG;IAChD,QAAQ,KAAK;KAAE,MAAM;KAAQ,MAAM,KAAK;IAAK,CAAC;IAC9C;GACF;GAEA,IAAI,KAAK,SAAS,cAAc,KAAK,SAAS,SAAS,GAAG;IACxD,QAAQ,KAAK;KAAE,MAAM;KAAa,MAAM,KAAK;IAAS,CAAC;IACvD;GACF;EACF;EAGA,KAAK,MAAM,YAAY,SAAS,QAAQ,aAAa,CAAC,GACpD,QAAQ,KAAK;GACX,MAAM;GACN,YAAY;GACZ,IAAI,KAAK,OAAO,WAAW;GAC3B,WAAW;GACX,OAAO,SAAS,QAAQ,EAAE,EAAE,UAAU,SAAS;GAC/C,kBAAkB,EAChB,QAAQ;IACN,OAAO,SAAS;IAChB,KAAK,SAAS;IACd,MAAM,SAAS;IACf,SAAS,SAAS;IAClB,GAAI,SAAS,QAAQ,EAAE,cAAc,SAAS,KAAK;GACrD,EACF;EACF,CAAC;EAIH,KAAK,MAAM,YAAY,SAAS,QAAQ,cAAc,CAAC,GACrD,QAAQ,KAAK;GACX,MAAM;GACN,YAAY,SAAS;GACrB,UAAU,SAAS,SAAS;GAG5B,OAAO,SAAS,SAAS,UAAU,QAAQ,UAAU,IAAI;EAC3D,CAAC;EAGH,OAAO;GACL;GACA,cAAc;IACZ,SAAS,sBAAsB,SAAS,aAAa;IACrD,KAAK,SAAS,iBAAiB,KAAA;GACjC;GACA,OAAO,mBAAmB,SAAS,KAAK;GACxC,SAAS,EAAE,MAAM,KAAK;GACtB,UAAU;IAER,IAAI,SAAS,iBAAiB,KAAA;IAC9B,SAAS;IACT,MAAM;GACR;GACA;EACF;CACF;CAEA,MAAM,SACJ,SACsC;EACtC,MAAM,EAAE,MAAM,aAAa,MAAM,KAAK,QAAQ,OAAO;EAErD,MAAM,EAAE,iBAAiB,OAAO,aAAa,MAAM,cAAc;GAC/D,KAAK,GAAG,KAAK,OAAO,QAAQ;GAC5B,SAAS,eACP,MAAM,QAAQ,KAAK,OAAO,OAAO,GACjC,QAAQ,OACV;GACA,MAAM;IAAE,GAAG;IAAM,QAAQ;GAAK;GAC9B,uBAAuB;GACvB,2BAA2B,iCACzB,qBACF;GACA,aAAa,QAAQ;GACrB,OAAO,KAAK,OAAO;EACrB,CAAC;EAGD,IAAI,eAA4C;GAC9C,SAAS;GACT,KAAK,KAAA;EACP;EACA,IAAI,QAAiC,KAAA;EAErC,IAAI,kBAKO;EAEX,IAAI,oBAAoB;EAExB,OAAO;GACL,QAAQ,SAAS,YACf,IAAI,gBAGF;IACA,MAAM,YAAY;KAChB,WAAW,QAAQ;MAAE,MAAM;MAAgB;KAAS,CAAC;IACvD;IAEA,MAAM,UAAU,OAAO,YAAY;KACjC,IAAI,QAAQ,kBACV,WAAW,QAAQ;MAAE,MAAM;MAAO,UAAU,MAAM;KAAS,CAAC;KAI9D,IAAI,CAAC,MAAM,SAAS;MAClB,eAAe;OAAE,SAAS;OAAS,KAAK,KAAA;MAAU;MAClD,WAAW,QAAQ;OAAE,MAAM;OAAS,OAAO,MAAM;MAAM,CAAC;MACxD;KACF;KAEA,MAAM,QAAQ,MAAM;KAGpB,QAFa,MAAM,MAEnB;MACE,KAAK;OACH,IAAI,MAAM,MAAM,QAAQ,QAAQ,SAAS,YAAY;QACnD,WAAW,QAAQ;SACjB,MAAM;SACN,IAAI,OAAO,MAAM,KAAK;QACxB,CAAC;QACD,oBAAoB;QACpB;OACF;OAEA,WAAW,QAAQ;QACjB,MAAM;QACN,IAAI,OAAO,MAAM,KAAK;OACxB,CAAC;OACD;MAGF,KAAK;OACH,IAAI,cAAc,MAAM,MAAM,QAAQ,SAAS;QAC7C,WAAW,QAAQ;SACjB,MAAM;SACN,IAAI,OAAO,MAAM,KAAK;SACtB,OAAO,MAAM,MAAM,QAAQ,QAAQ;QACrC,CAAC;QACD;OACF;OAEA,WAAW,QAAQ;QACjB,MAAM;QACN,IAAI,OAAO,MAAM,KAAK;QACtB,OAAO,MAAM,MAAM,QAAQ,QAAQ;OACrC,CAAC;OACD;MAGF,KAAK;OACH,IAAI,mBAAmB;QACrB,WAAW,QAAQ;SACjB,MAAM;SACN,IAAI,OAAO,MAAM,KAAK;QACxB,CAAC;QACD,oBAAoB;QACpB;OACF;OAEA,WAAW,QAAQ;QACjB,MAAM;QACN,IAAI,OAAO,MAAM,KAAK;OACxB,CAAC;OAED;MAGF,KAAK,mBAAmB;OACtB,MAAM,SAAS,MAAM,MAAM,QAAQ,WAAW;OAC9C,MAAM,WAAW,MAAM,MAAM,QAAQ,WAAW,SAAS;OACzD,MAAM,cACJ,MAAM,MAAM,QAAQ,WAAW,SAAS;OAE1C,kBAAkB;QAChB,IAAI;QACJ,MAAM;QACN,WAAW;QACX,aAAa;OACf;OAEA,WAAW,QAAQ;QACjB,MAAM;QACN,IAAI;QACJ;OACF,CAAC;OAED,IAAI,YAAY,SAAS,GACvB,WAAW,QAAQ;QACjB,MAAM;QACN,IAAI;QACJ,OAAO;OACT,CAAC;OAEH;MACF;MAEA,KAAK;OACH,IAAI,mBAAmB,CAAC,gBAAgB,aAAa;QACnD,MAAM,YACJ,MAAM,MAAM,QAAQ,WAAW,SAAS;QAC1C,gBAAgB,aAAa;QAE7B,WAAW,QAAQ;SACjB,MAAM;SACN,IAAI,gBAAgB;SACpB,OAAO;QACT,CAAC;OACH;OACA;MAGF,KAAK;OACH,IAAI,mBAAmB,CAAC,gBAAgB,aAAa;QACnD,WAAW,QAAQ;SACjB,MAAM;SACN,IAAI,gBAAgB;QACtB,CAAC;QAED,WAAW,QAAQ;SACjB,MAAM;SACN,YAAY,gBAAgB;SAC5B,UAAU,gBAAgB;SAC1B,OAAO,KAAK,UACV,MAAM,UAAU,EACd,MAAM,gBAAgB,WAAW,KAAK,KAAK,KAC7C,CAAC,CACH;QACF,CAAC;QAED,gBAAgB,cAAc;QAC9B,kBAAkB;OACpB;OACA;MAGF,KAAK;OACH,WAAW,QAAQ;QACjB,MAAM;QACN,IAAI,MAAM,MAAM,KAAA;OAClB,CAAC;OACD;MAGF,KAAK;OACH,eAAe;QACb,SAAS,sBAAsB,MAAM,MAAM,aAAa;QACxD,KAAK,MAAM,MAAM;OACnB;OACA,QAAQ,MAAM,MAAM;OACpB;KAKJ;IACF;IAEA,MAAM,YAAY;KAChB,WAAW,QAAQ;MACjB,MAAM;MACN;MACA,OAAO,mBAAmB,KAAK;KACjC,CAAC;IACH;GACF,CAAC,CACH;GACA,SAAS,EAAE,MAAM;IAAE,GAAG;IAAM,QAAQ;GAAK,EAAE;GAC3C,UAAU,EAAE,SAAS,gBAAgB;EACvC;CACF;AACF;AAEA,SAAS,sBAAsB,EAC7B,WACA,eACA,YAKyD;CACzD,IAAI,cAAc,UAChB,OAAO,EACL,UAAU;EACR,MAAM,cAAc,SAAS,QAAQ;EACrC,cAAc,cAAc,SAAS;CACvC,EACF;CAGF,IAAI,CAAC,kBAAkB,SAAS,GAC9B,OAAO,CAAC;CAGV,IAAI,cAAc,QAChB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,EAAE;CAU1C,OAAO,EAAE,UAAU;EAAE,MAAM;EAAW,cAPlB,6BAA6B;GAC/C;GACA,iBAAiB;GACjB,oBAAoB;GACpB;EACF,CAE8D;CAAE,EAAE;AACpE;AAGA,MAAM,0BACJ,EAAE,YAAY;CACZ,cAAc,EACX,YAAY;EACX,cAAc,EAAE,OAAO;EACvB,eAAe,EAAE,OAAO;CAC1B,CAAC,CAAC,CACD,QAAQ;CACX,QAAQ,EAAE,YAAY;EACpB,cAAc,EAAE,OAAO;EACvB,eAAe,EAAE,OAAO;CAC1B,CAAC;CACD,eAAe,EAAE,OAAO,CAAC,CAAC,QAAQ;AACpC,CAAC;AAEH,MAAM,2BAA2B,iBAC/B,UACE,EAAE,OAAO;CACP,eAAe,EAAE,OAAO,CAAC,CAAC,QAAQ;CAClC,SAAS,EAAE,OAAO;EAChB,MAAM,EAAE,OAAO;EACf,SAAS,EACN,MACC,EAAE,MAAM,CACN,EAAE,OAAO;GACP,MAAM,EAAE,QAAQ,MAAM;GACtB,MAAM,EAAE,OAAO;EACjB,CAAC,GACD,EAAE,OAAO;GACP,MAAM,EAAE,QAAQ,UAAU;GAC1B,UAAU,EAAE,OAAO;EACrB,CAAC,CACH,CAAC,CACH,CAAC,CACA,QAAQ;EACX,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ;EAC9B,YAAY,EACT,MACC,EAAE,OAAO;GACP,IAAI,EAAE,OAAO;GACb,MAAM,EAAE,QAAQ,UAAU;GAC1B,UAAU,EAAE,OAAO;IACjB,MAAM,EAAE,OAAO;IACf,WAAW,EAAE,OAAO;GACtB,CAAC;EACH,CAAC,CACH,CAAC,CACA,QAAQ;EACX,WAAW,EACR,MACC,EAAE,OAAO;GACP,OAAO,EAAE,OAAO;GAChB,KAAK,EAAE,OAAO;GACd,MAAM,EAAE,OAAO;GACf,SAAS,EAAE,MACT,EAAE,OAAO;IACP,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS;IAC1B,IAAI,EAAE,OAAO,CAAC,CAAC,SAAS;IACxB,UAAU,EAAE,OAAO;KACjB,IAAI,EAAE,OAAO,CAAC,CAAC,SAAS;KACxB,MAAM,EAAE,OAAO;KACf,OAAO,EAAE,OAAO;IAClB,CAAC;GACH,CAAC,CACH;GACA,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS;EAC5B,CAAC,CACH,CAAC,CACA,QAAQ;CACb,CAAC;CACD,eAAe,EAAE,OAAO;CACxB,OAAO,kBAAkB;AAC3B,CAAC,CACH,CACF;AAIA,MAAM,wBAAwB,iBAC5B,UACE,EAAE,mBAAmB,QAAQ;CAC3B,EAAE,OAAO,EACP,MAAM,EAAE,QAAQ,gBAAgB,EAClC,CAAC;CACD,EAAE,OAAO,EACP,MAAM,EAAE,QAAQ,cAAc,EAChC,CAAC;CACD,EAAE,OAAO;EACP,MAAM,EAAE,QAAQ,eAAe;EAC/B,OAAO,EAAE,OAAO;EAChB,OAAO,EAAE,OAAO,EACd,SAAS,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,CACf,EAAE,OAAO;GACP,MAAM,EAAE,QAAQ,MAAM;GACtB,MAAM,EAAE,OAAO;EACjB,CAAC,GACD,EAAE,OAAO;GACP,MAAM,EAAE,QAAQ,UAAU;GAC1B,UAAU,EAAE,OAAO;EACrB,CAAC,CACH,CAAC,EACH,CAAC,EACH,CAAC;CACH,CAAC;CACD,EAAE,OAAO;EACP,MAAM,EAAE,QAAQ,eAAe;EAC/B,OAAO,EAAE,OAAO;EAChB,OAAO,EAAE,OAAO,EACd,SAAS,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,CACf,EAAE,OAAO,EACP,MAAM,EAAE,OAAO,EACjB,CAAC,GACD,EAAE,OAAO,EACP,UAAU,EAAE,OAAO,EACrB,CAAC,CACH,CAAC,EACH,CAAC,EACH,CAAC;CACH,CAAC;CACD,EAAE,OAAO;EACP,MAAM,EAAE,QAAQ,aAAa;EAC7B,OAAO,EAAE,OAAO;CAClB,CAAC;CACD,EAAE,OAAO;EACP,MAAM,EAAE,QAAQ,eAAe;EAC/B,IAAI,EAAE,OAAO,CAAC,CAAC,QAAQ;CACzB,CAAC;CACD,EAAE,OAAO;EACP,MAAM,EAAE,QAAQ,aAAa;EAC7B,OAAO,EAAE,OAAO;GACd,eAAe,EAAE,OAAO;GACxB,OAAO,kBAAkB;EAC3B,CAAC;CACH,CAAC;CAED,EAAE,OAAO;EACP,MAAM,EAAE,QAAQ,iBAAiB;EACjC,OAAO,EAAE,OAAO,EACd,SAAS,EAAE,OAAO,EAChB,WAAW,EAAE,OAAO,EACtB,CAAC,EACH,CAAC;CACH,CAAC;CACD,EAAE,OAAO;EACP,MAAM,EAAE,QAAQ,iBAAiB;EACjC,OAAO,EAAE,OAAO,EACd,SAAS,EAAE,OAAO,EAChB,YAAY,EAAE,OAAO;GACnB,IAAI,EAAE,OAAO;GACb,MAAM,EAAE,QAAQ,UAAU;GAC1B,UAAU,EAAE,OAAO;IACjB,MAAM,EAAE,OAAO;IACf,WAAW,EAAE,OAAO;GACtB,CAAC;EACH,CAAC,EACH,CAAC,EACH,CAAC;CACH,CAAC;CAID,EAAE,OAAO;EACP,MAAM,EAAE,QAAQ,iBAAiB;EACjC,OAAO,EAAE,OAAO,EACd,SAAS,EAAE,OAAO,EAChB,YAAY,EAAE,OAAO,EACnB,UAAU,EAAE,OAAO,EACjB,WAAW,EAAE,OAAO,EACtB,CAAC,EACH,CAAC,EACH,CAAC,EACH,CAAC;CACH,CAAC;CACD,EAAE,OAAO,EACP,MAAM,EAAE,QAAQ,eAAe,EACjC,CAAC;AACH,CAAC,CACH,CACF;;;AChqBA,MAAa,8BAA8B,iBACzC,UACE,EAAE,OAAO;;;;;;CAMP,eAAe,EACZ,KAAK;EAAC;EAAS;EAAQ;EAAS;EAAU;CAAS,CAAC,CAAC,CACrD,SAAS;;;;;;;;;CAUZ,WAAW,EACR,KAAK;EACJ;EACA;EACA;EACA;CACF,CAAC,CAAC,CACD,SAAS;;;;;;;;;CAUZ,UAAU,EAAE,KAAK;EAAC;EAAQ;EAAS;CAAK,CAAC,CAAC,CAAC,SAAS;;;;;;;;CASpD,iBAAiB,EACd,MAAM;EACL,EAAE,QAAQ,GAAG;EACb,EAAE,QAAQ,GAAG;EACb,EAAE,QAAQ,GAAG;EACb,EAAE,QAAQ,IAAI;EACd,EAAE,QAAQ,IAAI;EACd,EAAE,QAAQ,IAAI;CAChB,CAAC,CAAC,CACD,SAAS;AACd,CAAC,CACH,CACF;;;AC5CA,IAAa,uBAAb,MAAa,qBAAiD;CAS5D,QAAQ,oBAAoB,OAA6B;EACvD,OAAO,sBAAsB;GAC3B,SAAS,MAAM;GACf,QAAQ,MAAM;EAChB,CAAC;CACH;CAEA,QAAQ,sBAAsB,SAG3B;EACD,OAAO,IAAI,qBAAqB,QAAQ,SAAS,QAAQ,MAAM;CACjE;CAEA,YAAY,SAAiC,QAA+B;EAtB5C,KAAA,uBAAA;EAGA,KAAA,uBAAA;EACC,KAAA,wBAAA;EAmB/B,KAAK,UAAU;EACf,KAAK,SAAS;CAChB;CAEA,IAAI,WAAmB;EACrB,OAAO,KAAK,OAAO;CACrB;CAEA,MAAM,QAAQ,EACZ,QACA,YACA,SACA,aACA,mBAGA;EACA,MAAM,mBAAmB,MAAM,qBAAqB;GAClD,UAAU;GACV;GACA,QAAQ;EACV,CAAC;EACD,MAAM,gBAAgB,kBAAkB,iBAAiB;EAEzD,IAAI,OAAO,SAAS,KAAK,sBACvB,MAAM,IAAI,mCAAmC;GAC3C,UAAU,KAAK;GACf,SAAS,KAAK;GACd,sBAAsB,KAAK;GAC3B;EACF,CAAC;EAGH,MAAM,EACJ,iBACA,OAAO,UACP,aACE,MAAM,cAAc;GACtB,KAAK,GAAG,KAAK,OAAO,QAAQ;GAC5B,SAAS,eAAe,MAAM,QAAQ,KAAK,OAAO,OAAO,GAAG,OAAO;GACnE,MAAM;IACJ,OAAO,KAAK;IACZ,iBAAiB,CAAC,aAAa;IAC/B,OAAO;IACP,YAAY,kBAAkB,aAAa;IAC3C,UAAU,kBAAkB;IAC5B,kBAAkB,kBAAkB,mBAAmB;GACzD;GACA,uBAAuB;GACvB,2BAA2B,0BACzB,kCAAkC,aAAa,CACjD;GACA;GACA,OAAO,KAAK,OAAO;EACrB,CAAC;EAED,OAAO;GACL,UAAU,CAAC;GACX,YAAY,SAAS,WAAW;GAChC,OAAO,EAAE,QAAQ,SAAS,KAAK,aAAa,aAAa;GACzD,UAAU;IAAE,SAAS;IAAiB,MAAM;GAAS;EACvD;CACF;AACF;AAIA,MAAM,qCACJ,kBAEA,EAAE,OAAO;CACP,YAAY,EAAE,OAAO,GAClB,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,EAC9C,CAAC;CACD,MAAM,EAAE,OAAO,EACb,cAAc,EAAE,OAAO,EACrB,cAAc,EAAE,OAAO,EACzB,CAAC,EACH,CAAC;AACH,CAAC;;;ACzHH,MAAa,gCAAgC,iBAC3C,UACE,EAAE,OAAO;CACP,IAAI,EAAE,OAAO,CAAC,CAAC,QAAQ;CACvB,SAAS,EAAE,MACT,EAAE,OAAO;EACP,OAAO,EAAE,OAAO;EAChB,iBAAiB,EAAE,OAAO;CAC5B,CAAC,CACH;CACA,MAAM,EAAE,IAAI;AACd,CAAC,CACH,CACF;;;ACIA,MAAa,oCACX,iBACE,UACE,EAAE,OAAO;CACP,iBAAiB,EAAE,OAAO,CAAC,CAAC,SAAS;CACrC,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;AAChC,CAAC,CACH,CACF;;;ACZF,IAAa,uBAAb,MAA8D;CAM5D,YAAY,SAAiC,QAA+B;EAL5C,KAAA,uBAAA;EAM9B,KAAK,UAAU;EACf,KAAK,SAAS;CAChB;CAEA,IAAI,WAAmB;EACrB,OAAO,KAAK,OAAO;CACrB;CAGA,MAAM,SAAS,EACb,WACA,SACA,OACA,MACA,aACA,mBAGA;EACA,MAAM,mBAAmB,MAAM,qBAAqB;GAClD,UAAU;GACV;GACA,QAAQ;EACV,CAAC;EAED,MAAM,WAA8B,CAAC;EAErC,IAAI,UAAU,SAAS,UACrB,SAAS,KAAK;GACZ,MAAM;GACN,SAAS;GACT,SAAS;EACX,CAAC;EAGH,MAAM,EACJ,iBACA,OAAO,UACP,aACE,MAAM,cAAc;GACtB,KAAK,GAAG,KAAK,OAAO,QAAQ;GAC5B,SAAS,eAAe,MAAM,QAAQ,KAAK,OAAO,OAAO,GAAG,OAAO;GACnE,MAAM;IACJ,OAAO,KAAK;IACZ;IACA,WACE,UAAU,SAAS,SACf,UAAU,SACV,UAAU,OAAO,KAAI,UAAS,KAAK,UAAU,KAAK,CAAC;IACzD,OAAO;IACP,oBAAoB,kBAAkB;IACtC,UAAU,kBAAkB;GAC9B;GACA,uBAAuB;GACvB,2BAA2B,0BACzB,6BACF;GACA;GACA,OAAO,KAAK,OAAO;EACrB,CAAC;EAED,OAAO;GACL,SAAS,SAAS,QAAQ,KAAI,YAAW;IACvC,OAAO,OAAO;IACd,gBAAgB,OAAO;GACzB,EAAE;GACF;GACA,UAAU;IACR,IAAI,SAAS,MAAM,KAAA;IACnB,SAAS;IACT,MAAM;GACR;EACF;CACF;AACF;;;ACzGA,MAAa,UAAA;;;;;;AC8Fb,SAAgB,aACd,UAAkC,CAAC,GACnB;CAChB,MAAM,UACJ,qBAAqB,QAAQ,OAAO,KAAK;CAE3C,MAAM,mBACJ,YAAY,QAAQ,SAAQ,WAC1B,oBACE;EACE,eAAe,UAAU,WAAW;GAClC;GACA,yBAAyB;GACzB,aAAa;EACf,CAAC;EACD,GAAG,QAAQ;CACb,GACA,iBAAiB,SACnB,CACF;CAEF,MAAM,mBAAmB,YACvB,IAAI,wBAAwB,SAAS;EACnC,UAAU;EACV;EACA,SAAS;EACT,OAAO,QAAQ;EACf,YAAY,QAAQ,cAAc;CACpC,CAAC;CAEH,MAAM,wBAAwB,YAC5B,IAAI,qBAAqB,SAAS;EAChC,UAAU;EACV;EACA,SAAS;EACT,OAAO,QAAQ;CACjB,CAAC;CAEH,MAAM,wBAAwB,YAC5B,IAAI,qBAAqB,SAAS;EAChC,UAAU;EACV;EACA,SAAS;EACT,OAAO,QAAQ;CACjB,CAAC;CAEH,MAAM,WAAW,SAAU,SAA4B;EACrD,IAAI,YACF,MAAM,IAAI,MACR,kEACF;EAGF,OAAO,gBAAgB,OAAO;CAChC;CAEA,SAAS,uBAAuB;CAChC,SAAS,gBAAgB;CACzB,SAAS,YAAY;CACrB,SAAS,iBAAiB;CAC1B,SAAS,gBAAgB;CACzB,SAAS,qBAAqB;CAC9B,SAAS,YAAY;CACrB,SAAS,iBAAiB;CAE1B,SAAS,cAAc,YAAoB;EACzC,MAAM,IAAI,iBAAiB;GAAE;GAAS,WAAW;EAAa,CAAC;CACjE;CAEA,OAAO;AACT;;;;AAKA,MAAa,SAAS,aAAa"}
@@ -83,7 +83,11 @@ You can use the following optional settings to customize the Cohere provider ins
83
83
  Use a different URL prefix for API calls, e.g. to use proxy servers.
84
84
  The default prefix is `https://api.cohere.com/v2`.
85
85
 
86
- - **apiKey** _string_
86
+ - **apiKey** _string | PromiseLike&lt;string&gt; | (() =&gt; string | PromiseLike&lt;string&gt;)_
87
+
88
+ Pass a function to resolve credentials before each request, including when keys
89
+ rotate. The function can return a string or a promise. Credential caching and
90
+ refresh are managed by the function.
87
91
 
88
92
  API key that is being sent using the `Authorization` header.
89
93
  It defaults to the `COHERE_API_KEY` environment variable.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/cohere",
3
- "version": "4.0.72",
3
+ "version": "4.0.73",
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.34",
33
- "@ai-sdk/provider-utils": "5.0.71"
32
+ "@ai-sdk/provider": "4.0.35",
33
+ "@ai-sdk/provider-utils": "5.0.72"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@ai-sdk/test-server": "2.0.4",
@@ -9,6 +9,8 @@ import type {
9
9
  SharedV4Warning,
10
10
  } from '@ai-sdk/provider';
11
11
  import {
12
+ resolve,
13
+ type Resolvable,
12
14
  lazySchema,
13
15
  zodSchema,
14
16
  combineHeaders,
@@ -40,7 +42,7 @@ import { mapCohereFinishReason } from './map-cohere-finish-reason';
40
42
  type CohereChatConfig = {
41
43
  provider: string;
42
44
  baseURL: string;
43
- headers?: () => Record<string, string | undefined>;
45
+ headers?: Resolvable<Record<string, string | undefined>>;
44
46
  fetch?: FetchFunction;
45
47
  generateId: () => string;
46
48
  };
@@ -171,7 +173,10 @@ export class CohereChatLanguageModel implements LanguageModelV4 {
171
173
  rawValue: rawResponse,
172
174
  } = await postJsonToApi({
173
175
  url: `${this.config.baseURL}/chat`,
174
- headers: combineHeaders(this.config.headers?.(), options.headers),
176
+ headers: combineHeaders(
177
+ await resolve(this.config.headers),
178
+ options.headers,
179
+ ),
175
180
  body: args,
176
181
  failedResponseHandler: cohereFailedResponseHandler,
177
182
  successfulResponseHandler: createJsonResponseHandler(
@@ -252,7 +257,10 @@ export class CohereChatLanguageModel implements LanguageModelV4 {
252
257
 
253
258
  const { responseHeaders, value: response } = await postJsonToApi({
254
259
  url: `${this.config.baseURL}/chat`,
255
- headers: combineHeaders(this.config.headers?.(), options.headers),
260
+ headers: combineHeaders(
261
+ await resolve(this.config.headers),
262
+ options.headers,
263
+ ),
256
264
  body: { ...args, stream: true },
257
265
  failedResponseHandler: cohereFailedResponseHandler,
258
266
  successfulResponseHandler: createEventSourceResponseHandler(
@@ -3,6 +3,8 @@ import {
3
3
  type EmbeddingModelV4,
4
4
  } from '@ai-sdk/provider';
5
5
  import {
6
+ resolve,
7
+ type Resolvable,
6
8
  combineHeaders,
7
9
  createJsonResponseHandler,
8
10
  parseProviderOptions,
@@ -23,7 +25,7 @@ import { cohereFailedResponseHandler } from './cohere-error';
23
25
  type CohereEmbeddingConfig = {
24
26
  provider: string;
25
27
  baseURL: string;
26
- headers?: () => Record<string, string | undefined>;
28
+ headers?: Resolvable<Record<string, string | undefined>>;
27
29
  fetch?: FetchFunction;
28
30
  };
29
31
 
@@ -90,7 +92,7 @@ export class CohereEmbeddingModel implements EmbeddingModelV4 {
90
92
  rawValue,
91
93
  } = await postJsonToApi({
92
94
  url: `${this.config.baseURL}/embed`,
93
- headers: combineHeaders(this.config.headers?.(), headers),
95
+ headers: combineHeaders(await resolve(this.config.headers), headers),
94
96
  body: {
95
97
  model: this.modelId,
96
98
  embedding_types: [embeddingType],
@@ -6,6 +6,8 @@ import {
6
6
  type ProviderV4,
7
7
  } from '@ai-sdk/provider';
8
8
  import {
9
+ resolveWith,
10
+ type Resolvable,
9
11
  generateId,
10
12
  loadApiKey,
11
13
  withoutTrailingSlash,
@@ -70,7 +72,7 @@ export interface CohereProviderSettings {
70
72
  * API key that is being send using the `Authorization` header.
71
73
  * It defaults to the `COHERE_API_KEY` environment variable.
72
74
  */
73
- apiKey?: string;
75
+ apiKey?: Resolvable<string>;
74
76
 
75
77
  /**
76
78
  * Custom headers to include in the requests.
@@ -99,16 +101,18 @@ export function createCohere(
99
101
  withoutTrailingSlash(options.baseURL) ?? 'https://api.cohere.com/v2';
100
102
 
101
103
  const getHeaders = () =>
102
- withUserAgentSuffix(
103
- {
104
- Authorization: `Bearer ${loadApiKey({
105
- apiKey: options.apiKey,
106
- environmentVariableName: 'COHERE_API_KEY',
107
- description: 'Cohere',
108
- })}`,
109
- ...options.headers,
110
- },
111
- `ai-sdk-cohere/${VERSION}`,
104
+ resolveWith(options.apiKey, apiKey =>
105
+ withUserAgentSuffix(
106
+ {
107
+ Authorization: `Bearer ${loadApiKey({
108
+ apiKey,
109
+ environmentVariableName: 'COHERE_API_KEY',
110
+ description: 'Cohere',
111
+ })}`,
112
+ ...options.headers,
113
+ },
114
+ `ai-sdk-cohere/${VERSION}`,
115
+ ),
112
116
  );
113
117
 
114
118
  const createChatModel = (modelId: CohereChatModelId) =>
@@ -1,5 +1,7 @@
1
1
  import type { RerankingModelV4, SharedV4Warning } from '@ai-sdk/provider';
2
2
  import {
3
+ resolve,
4
+ type Resolvable,
3
5
  combineHeaders,
4
6
  createJsonResponseHandler,
5
7
  parseProviderOptions,
@@ -18,7 +20,7 @@ import {
18
20
  type CohereRerankingConfig = {
19
21
  provider: string;
20
22
  baseURL: string;
21
- headers: () => Record<string, string | undefined>;
23
+ headers: Resolvable<Record<string, string | undefined>>;
22
24
  fetch?: FetchFunction;
23
25
  };
24
26
 
@@ -70,7 +72,7 @@ export class CohereRerankingModel implements RerankingModelV4 {
70
72
  rawValue,
71
73
  } = await postJsonToApi({
72
74
  url: `${this.config.baseURL}/rerank`,
73
- headers: combineHeaders(this.config.headers(), headers),
75
+ headers: combineHeaders(await resolve(this.config.headers), headers),
74
76
  body: {
75
77
  model: this.modelId,
76
78
  query,