@ai-sdk/togetherai 3.0.40 → 3.0.42

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,24 @@
1
1
  # @ai-sdk/togetherai
2
2
 
3
+ ## 3.0.42
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [23eb659]
8
+ - Updated dependencies [aa45741]
9
+ - @ai-sdk/openai-compatible@3.0.41
10
+ - @ai-sdk/provider@4.0.9
11
+ - @ai-sdk/provider-utils@5.0.34
12
+
13
+ ## 3.0.41
14
+
15
+ ### Patch Changes
16
+
17
+ - ebf0bd5: fix(togetherai): forward JSON schemas for DeepSeek V4 Flash structured outputs
18
+ - Updated dependencies [90192f1]
19
+ - @ai-sdk/provider-utils@5.0.33
20
+ - @ai-sdk/openai-compatible@3.0.40
21
+
3
22
  ## 3.0.40
4
23
 
5
24
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -14,7 +14,7 @@ type TogetherAIRerankingModelOptions = {
14
14
  rankFields?: string[];
15
15
  };
16
16
 
17
- type TogetherAIChatModelId = 'meta-llama/Llama-3.3-70B-Instruct-Turbo' | 'meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo' | 'meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo' | 'meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo' | 'meta-llama/Meta-Llama-3-8B-Instruct-Turbo' | 'meta-llama/Meta-Llama-3-70B-Instruct-Turbo' | 'meta-llama/Llama-3.2-3B-Instruct-Turbo' | 'meta-llama/Meta-Llama-3-8B-Instruct-Lite' | 'meta-llama/Meta-Llama-3-70B-Instruct-Lite' | 'meta-llama/Llama-3-8b-chat-hf' | 'meta-llama/Llama-3-70b-chat-hf' | 'nvidia/Llama-3.1-Nemotron-70B-Instruct-HF' | 'Qwen/Qwen2.5-Coder-32B-Instruct' | 'Qwen/QwQ-32B-Preview' | 'microsoft/WizardLM-2-8x22B' | 'google/gemma-2-27b-it' | 'google/gemma-2-9b-it' | 'databricks/dbrx-instruct' | 'deepseek-ai/deepseek-llm-67b-chat' | 'deepseek-ai/DeepSeek-V3' | 'google/gemma-2b-it' | 'Gryphe/MythoMax-L2-13b' | 'meta-llama/Llama-2-13b-chat-hf' | 'mistralai/Mistral-7B-Instruct-v0.1' | 'mistralai/Mistral-7B-Instruct-v0.2' | 'mistralai/Mistral-7B-Instruct-v0.3' | 'mistralai/Mixtral-8x7B-Instruct-v0.1' | 'mistralai/Mixtral-8x22B-Instruct-v0.1' | 'NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO' | 'Qwen/Qwen2.5-7B-Instruct-Turbo' | 'Qwen/Qwen2.5-72B-Instruct-Turbo' | 'Qwen/Qwen2-72B-Instruct' | 'upstage/SOLAR-10.7B-Instruct-v1.0' | (string & {});
17
+ type TogetherAIChatModelId = 'meta-llama/Llama-3.3-70B-Instruct-Turbo' | 'meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo' | 'meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo' | 'meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo' | 'meta-llama/Meta-Llama-3-8B-Instruct-Turbo' | 'meta-llama/Meta-Llama-3-70B-Instruct-Turbo' | 'meta-llama/Llama-3.2-3B-Instruct-Turbo' | 'meta-llama/Meta-Llama-3-8B-Instruct-Lite' | 'meta-llama/Meta-Llama-3-70B-Instruct-Lite' | 'meta-llama/Llama-3-8b-chat-hf' | 'meta-llama/Llama-3-70b-chat-hf' | 'nvidia/Llama-3.1-Nemotron-70B-Instruct-HF' | 'Qwen/Qwen2.5-Coder-32B-Instruct' | 'Qwen/QwQ-32B-Preview' | 'microsoft/WizardLM-2-8x22B' | 'google/gemma-2-27b-it' | 'google/gemma-2-9b-it' | 'databricks/dbrx-instruct' | 'deepseek-ai/deepseek-llm-67b-chat' | 'deepseek-ai/DeepSeek-V3' | 'deepseek-ai/DeepSeek-V4-Flash-0731' | 'google/gemma-2b-it' | 'Gryphe/MythoMax-L2-13b' | 'meta-llama/Llama-2-13b-chat-hf' | 'mistralai/Mistral-7B-Instruct-v0.1' | 'mistralai/Mistral-7B-Instruct-v0.2' | 'mistralai/Mistral-7B-Instruct-v0.3' | 'mistralai/Mixtral-8x7B-Instruct-v0.1' | 'mistralai/Mixtral-8x22B-Instruct-v0.1' | 'NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO' | 'Qwen/Qwen2.5-7B-Instruct-Turbo' | 'Qwen/Qwen2.5-72B-Instruct-Turbo' | 'Qwen/Qwen2-72B-Instruct' | 'upstage/SOLAR-10.7B-Instruct-v1.0' | (string & {});
18
18
 
19
19
  type TogetherAICompletionModelId = 'meta-llama/Llama-2-70b-hf' | 'mistralai/Mistral-7B-v0.1' | 'mistralai/Mixtral-8x7B-v0.1' | 'Meta-Llama/Llama-Guard-7b' | 'codellama/CodeLlama-34b-Instruct-hf' | 'Qwen/Qwen2.5-Coder-32B-Instruct' | (string & {});
20
20
 
package/dist/index.js CHANGED
@@ -289,7 +289,7 @@ var togetheraiErrorSchema2 = z4.object({
289
289
  });
290
290
 
291
291
  // src/version.ts
292
- var VERSION = true ? "3.0.40" : "0.0.0-test";
292
+ var VERSION = true ? "3.0.42" : "0.0.0-test";
293
293
 
294
294
  // src/togetherai-provider.ts
295
295
  function loadDeprecatedApiKey() {
@@ -307,6 +307,9 @@ function loadDeprecatedApiKey() {
307
307
  }
308
308
  return key;
309
309
  }
310
+ function getModelStructuredOutputSupport(modelId) {
311
+ return modelId === "deepseek-ai/DeepSeek-V4-Flash-0731";
312
+ }
310
313
  function createTogetherAI(options = {}) {
311
314
  var _a;
312
315
  const baseURL = withoutTrailingSlash(
@@ -335,7 +338,8 @@ function createTogetherAI(options = {}) {
335
338
  const createChatModel = (modelId) => {
336
339
  return new OpenAICompatibleChatLanguageModel(modelId, {
337
340
  ...getCommonModelConfig("chat"),
338
- includeUsage: true
341
+ includeUsage: true,
342
+ supportsStructuredOutputs: getModelStructuredOutputSupport(modelId)
339
343
  });
340
344
  };
341
345
  const createCompletionModel = (modelId) => new OpenAICompatibleCompletionLanguageModel(modelId, {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/togetherai-provider.ts","../src/reranking/togetherai-reranking-model.ts","../src/reranking/togetherai-reranking-api.ts","../src/reranking/togetherai-reranking-model-options.ts","../src/togetherai-image-model.ts","../src/togetherai-image-model-options.ts","../src/version.ts"],"sourcesContent":["import {\n OpenAICompatibleChatLanguageModel,\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel,\n} from '@ai-sdk/openai-compatible';\nimport type {\n EmbeddingModelV4,\n ImageModelV4,\n LanguageModelV4,\n ProviderV4,\n RerankingModelV4,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { TogetherAIRerankingModel } from './reranking/togetherai-reranking-model';\nimport type { TogetherAIRerankingModelId } from './reranking/togetherai-reranking-model-options';\nimport type { TogetherAIChatModelId } from './togetherai-chat-options';\nimport type { TogetherAICompletionModelId } from './togetherai-completion-options';\nimport type { TogetherAIEmbeddingModelId } from './togetherai-embedding-options';\nimport { TogetherAIImageModel } from './togetherai-image-model';\nimport type { TogetherAIImageModelId } from './togetherai-image-settings';\nimport { VERSION } from './version';\n\nexport interface TogetherAIProviderSettings {\n /**\n * TogetherAI API key.\n */\n apiKey?: string;\n /**\n * Base URL for the API calls.\n */\n baseURL?: string;\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface TogetherAIProvider extends ProviderV4 {\n /**\n * Creates a model for text generation.\n */\n (modelId: TogetherAIChatModelId): LanguageModelV4;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: TogetherAIChatModelId): LanguageModelV4;\n\n /**\n * Creates a chat model for text generation.\n */\n languageModel(modelId: TogetherAIChatModelId): LanguageModelV4;\n\n /**\n * Creates a completion model for text generation.\n */\n completionModel(modelId: TogetherAICompletionModelId): LanguageModelV4;\n\n /**\n * Creates a text embedding model for text generation.\n */\n embeddingModel(modelId: TogetherAIEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: TogetherAIEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for image generation.\n */\n image(modelId: TogetherAIImageModelId): ImageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n imageModel(modelId: TogetherAIImageModelId): ImageModelV4;\n\n /**\n * Creates a model for reranking.\n */\n reranking(modelId: TogetherAIRerankingModelId): RerankingModelV4;\n\n /**\n * Creates a model for reranking.\n */\n rerankingModel(modelId: TogetherAIRerankingModelId): RerankingModelV4;\n}\n\nfunction loadDeprecatedApiKey(): string | undefined {\n if (typeof process === 'undefined') {\n return undefined;\n }\n // If the new env var is set, let loadApiKey handle it\n if (typeof process.env.TOGETHER_API_KEY === 'string') {\n return undefined;\n }\n const key = process.env.TOGETHER_AI_API_KEY;\n if (typeof key === 'string') {\n console.warn(\n 'TOGETHER_AI_API_KEY is deprecated and will be removed in a future release. Please use TOGETHER_API_KEY instead.',\n );\n }\n return key;\n}\n\nexport function createTogetherAI(\n options: TogetherAIProviderSettings = {},\n): TogetherAIProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.together.xyz/v1/',\n );\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey ?? loadDeprecatedApiKey(),\n environmentVariableName: 'TOGETHER_API_KEY',\n description: 'TogetherAI',\n })}`,\n ...options.headers,\n },\n `ai-sdk/togetherai/${VERSION}`,\n );\n\n interface CommonModelConfig {\n provider: string;\n url: ({ path }: { path: string }) => string;\n headers: () => Record<string, string>;\n fetch?: FetchFunction;\n }\n\n const getCommonModelConfig = (modelType: string): CommonModelConfig => ({\n provider: `togetherai.${modelType}`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createChatModel = (modelId: TogetherAIChatModelId) => {\n return new OpenAICompatibleChatLanguageModel(modelId, {\n ...getCommonModelConfig('chat'),\n includeUsage: true,\n });\n };\n\n const createCompletionModel = (modelId: TogetherAICompletionModelId) =>\n new OpenAICompatibleCompletionLanguageModel(modelId, {\n ...getCommonModelConfig('completion'),\n includeUsage: true,\n });\n\n const createEmbeddingModel = (modelId: TogetherAIEmbeddingModelId) =>\n new OpenAICompatibleEmbeddingModel(\n modelId,\n getCommonModelConfig('embedding'),\n );\n\n const createImageModel = (modelId: TogetherAIImageModelId) =>\n new TogetherAIImageModel(modelId, {\n ...getCommonModelConfig('image'),\n baseURL: baseURL ?? 'https://api.together.xyz/v1/',\n });\n\n const createRerankingModel = (modelId: TogetherAIRerankingModelId) =>\n new TogetherAIRerankingModel(modelId, {\n ...getCommonModelConfig('reranking'),\n baseURL: baseURL ?? 'https://api.together.xyz/v1/',\n });\n\n const provider = (modelId: TogetherAIChatModelId) => createChatModel(modelId);\n\n provider.specificationVersion = 'v4' as const;\n provider.completionModel = createCompletionModel;\n provider.languageModel = createChatModel;\n provider.chatModel = createChatModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n provider.reranking = createRerankingModel;\n provider.rerankingModel = createRerankingModel;\n\n return provider;\n}\n\nexport const togetherai = createTogetherAI();\n","import type { RerankingModelV4 } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport {\n togetheraiErrorSchema,\n togetheraiRerankingResponseSchema,\n type TogetherAIRerankingInput,\n} from './togetherai-reranking-api';\nimport {\n togetheraiRerankingModelOptionsSchema,\n type TogetherAIRerankingModelId,\n} from './togetherai-reranking-model-options';\ntype TogetherAIRerankingConfig = {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n};\n\nexport class TogetherAIRerankingModel implements RerankingModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: TogetherAIRerankingModelId;\n\n private readonly config: TogetherAIRerankingConfig;\n\n constructor(\n modelId: TogetherAIRerankingModelId,\n config: TogetherAIRerankingConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n // see https://docs.together.ai/reference/rerank-1\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: 'togetherai',\n providerOptions,\n schema: togetheraiRerankingModelOptionsSchema,\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 documents: documents.values,\n query,\n top_n: topN,\n rank_fields: rerankingOptions?.rankFields,\n return_documents: false, // reduce response size\n } satisfies TogetherAIRerankingInput,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: togetheraiErrorSchema,\n errorToMessage: data => data.error.message,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n togetheraiRerankingResponseSchema,\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 response: {\n id: response.id ?? undefined,\n modelId: response.model ?? undefined,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n }\n}\n","import type { JSONObject } from '@ai-sdk/provider';\nimport { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// https://docs.together.ai/reference/rerank-1\nexport type TogetherAIRerankingInput = {\n model: string;\n query: string;\n documents: JSONObject[] | string[];\n top_n: number | undefined;\n return_documents: boolean | undefined;\n rank_fields: string[] | undefined;\n};\n\nexport const togetheraiErrorSchema = lazySchema(() =>\n zodSchema(\n z.object({\n error: z.object({\n message: z.string(),\n }),\n }),\n ),\n);\n\nexport const togetheraiRerankingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n id: z.string().nullish(),\n model: z.string().nullish(),\n results: z.array(\n z.object({\n index: z.number(),\n relevance_score: z.number(),\n }),\n ),\n usage: z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n }),\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// see https://docs.together.ai/docs/serverless-models#rerank-models\nexport type TogetherAIRerankingModelId =\n | 'Salesforce/Llama-Rank-v1'\n | 'mixedbread-ai/Mxbai-Rerank-Large-V2'\n | (string & {});\n\nexport type TogetherAIRerankingModelOptions = {\n /**\n * List of keys in the JSON Object document to rank by.\n * Defaults to use all supplied keys for ranking.\n *\n * @example [\"title\", \"text\"]\n */\n rankFields?: string[];\n};\n\nexport const togetheraiRerankingModelOptionsSchema: FlexibleSchema<TogetherAIRerankingModelOptions> =\n lazySchema(() =>\n zodSchema(\n z.object({\n rankFields: z.array(z.string()).optional(),\n }),\n ),\n );\n","import type { ImageModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertImageModelFileToDataUri,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { togetheraiImageModelOptionsSchema } from './togetherai-image-model-options';\nimport type { TogetherAIImageModelId } from './togetherai-image-settings';\nimport { z } from 'zod/v4';\n\ninterface TogetherAIImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: () => Record<string, string>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class TogetherAIImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxImagesPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: TogetherAIImageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: TogetherAIImageModelId;\n config: TogetherAIImageModelConfig;\n }) {\n return new TogetherAIImageModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: TogetherAIImageModelId,\n private config: TogetherAIImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n size,\n seed,\n providerOptions,\n headers,\n abortSignal,\n files,\n mask,\n }: Parameters<ImageModelV4['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV4['doGenerate']>>\n > {\n const warnings: Array<SharedV4Warning> = [];\n\n if (mask != null) {\n throw new Error(\n 'Together AI does not support mask-based image editing. ' +\n 'Use FLUX Kontext models (e.g., black-forest-labs/FLUX.1-kontext-pro) ' +\n 'with a reference image and descriptive prompt instead.',\n );\n }\n\n if (size != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details:\n 'This model does not support the `aspectRatio` option. Use `size` instead.',\n });\n }\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n\n const togetheraiOptions = await parseProviderOptions({\n provider: 'togetherai',\n providerOptions,\n schema: togetheraiImageModelOptionsSchema,\n });\n\n // Handle image input from files\n let imageUrl: string | undefined;\n if (files != null && files.length > 0) {\n imageUrl = convertImageModelFileToDataUri(files[0]);\n\n if (files.length > 1) {\n warnings.push({\n type: 'other',\n message:\n 'Together AI only supports a single input image. Additional images are ignored.',\n });\n }\n }\n\n const splitSize = size?.split('x');\n // https://docs.together.ai/reference/post_images-generations\n const { value: response, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/images/generations`,\n headers: combineHeaders(this.config.headers?.(), headers),\n body: {\n model: this.modelId,\n prompt,\n ...(seed != null ? { seed } : {}),\n ...(n > 1 ? { n } : {}),\n ...(splitSize && {\n width: parseInt(splitSize[0]),\n height: parseInt(splitSize[1]),\n }),\n ...(imageUrl != null ? { image_url: imageUrl } : {}),\n response_format: 'base64',\n ...(togetheraiOptions ?? {}),\n },\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: togetheraiErrorSchema,\n errorToMessage: data => data.error.message,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n togetheraiImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n images: response.data.map(item => item.b64_json),\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\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 togetheraiImageResponseSchema = z.object({\n data: z.array(\n z.object({\n b64_json: z.string(),\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 togetheraiErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n }),\n});\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n/**\n * Provider options schema for Together AI image generation.\n */\nexport const togetheraiImageModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.looseObject({\n /**\n * Number of generation steps. Higher values can improve quality.\n */\n steps: z.number().nullish(),\n\n /**\n * Guidance scale for image generation.\n */\n guidance: z.number().nullish(),\n\n /**\n * Negative prompt to guide what to avoid.\n */\n negative_prompt: z.string().nullish(),\n\n /**\n * Disable the safety checker for image generation.\n * When true, the API will not reject images flagged as potentially NSFW.\n * Not available for Flux Schnell Free and Flux Pro models.\n */\n disable_safety_checker: z.boolean().nullish(),\n }),\n ),\n);\n\nexport type TogetherAIImageModelOptions = InferSchema<\n typeof togetheraiImageModelOptionsSchema\n>;\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["lazySchema","zodSchema","z","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","parseProviderOptions","postJsonToApi","lazySchema","zodSchema","z","z","parseProviderOptions","postJsonToApi","combineHeaders","createJsonErrorResponseHandler","togetheraiErrorSchema","createJsonResponseHandler","_a"]}
1
+ {"version":3,"sources":["../src/togetherai-provider.ts","../src/reranking/togetherai-reranking-model.ts","../src/reranking/togetherai-reranking-api.ts","../src/reranking/togetherai-reranking-model-options.ts","../src/togetherai-image-model.ts","../src/togetherai-image-model-options.ts","../src/version.ts"],"sourcesContent":["import {\n OpenAICompatibleChatLanguageModel,\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel,\n} from '@ai-sdk/openai-compatible';\nimport type {\n EmbeddingModelV4,\n ImageModelV4,\n LanguageModelV4,\n ProviderV4,\n RerankingModelV4,\n} from '@ai-sdk/provider';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { TogetherAIRerankingModel } from './reranking/togetherai-reranking-model';\nimport type { TogetherAIRerankingModelId } from './reranking/togetherai-reranking-model-options';\nimport type { TogetherAIChatModelId } from './togetherai-chat-options';\nimport type { TogetherAICompletionModelId } from './togetherai-completion-options';\nimport type { TogetherAIEmbeddingModelId } from './togetherai-embedding-options';\nimport { TogetherAIImageModel } from './togetherai-image-model';\nimport type { TogetherAIImageModelId } from './togetherai-image-settings';\nimport { VERSION } from './version';\n\nexport interface TogetherAIProviderSettings {\n /**\n * TogetherAI API key.\n */\n apiKey?: string;\n /**\n * Base URL for the API calls.\n */\n baseURL?: string;\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface TogetherAIProvider extends ProviderV4 {\n /**\n * Creates a model for text generation.\n */\n (modelId: TogetherAIChatModelId): LanguageModelV4;\n\n /**\n * Creates a chat model for text generation.\n */\n chatModel(modelId: TogetherAIChatModelId): LanguageModelV4;\n\n /**\n * Creates a chat model for text generation.\n */\n languageModel(modelId: TogetherAIChatModelId): LanguageModelV4;\n\n /**\n * Creates a completion model for text generation.\n */\n completionModel(modelId: TogetherAICompletionModelId): LanguageModelV4;\n\n /**\n * Creates a text embedding model for text generation.\n */\n embeddingModel(modelId: TogetherAIEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: TogetherAIEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for image generation.\n */\n image(modelId: TogetherAIImageModelId): ImageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n imageModel(modelId: TogetherAIImageModelId): ImageModelV4;\n\n /**\n * Creates a model for reranking.\n */\n reranking(modelId: TogetherAIRerankingModelId): RerankingModelV4;\n\n /**\n * Creates a model for reranking.\n */\n rerankingModel(modelId: TogetherAIRerankingModelId): RerankingModelV4;\n}\n\nfunction loadDeprecatedApiKey(): string | undefined {\n if (typeof process === 'undefined') {\n return undefined;\n }\n // If the new env var is set, let loadApiKey handle it\n if (typeof process.env.TOGETHER_API_KEY === 'string') {\n return undefined;\n }\n const key = process.env.TOGETHER_AI_API_KEY;\n if (typeof key === 'string') {\n console.warn(\n 'TOGETHER_AI_API_KEY is deprecated and will be removed in a future release. Please use TOGETHER_API_KEY instead.',\n );\n }\n return key;\n}\n\nexport function getModelStructuredOutputSupport(\n modelId: TogetherAIChatModelId,\n): boolean {\n return modelId === 'deepseek-ai/DeepSeek-V4-Flash-0731';\n}\n\nexport function createTogetherAI(\n options: TogetherAIProviderSettings = {},\n): TogetherAIProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.together.xyz/v1/',\n );\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey ?? loadDeprecatedApiKey(),\n environmentVariableName: 'TOGETHER_API_KEY',\n description: 'TogetherAI',\n })}`,\n ...options.headers,\n },\n `ai-sdk/togetherai/${VERSION}`,\n );\n\n interface CommonModelConfig {\n provider: string;\n url: ({ path }: { path: string }) => string;\n headers: () => Record<string, string>;\n fetch?: FetchFunction;\n }\n\n const getCommonModelConfig = (modelType: string): CommonModelConfig => ({\n provider: `togetherai.${modelType}`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createChatModel = (modelId: TogetherAIChatModelId) => {\n return new OpenAICompatibleChatLanguageModel(modelId, {\n ...getCommonModelConfig('chat'),\n includeUsage: true,\n supportsStructuredOutputs: getModelStructuredOutputSupport(modelId),\n });\n };\n\n const createCompletionModel = (modelId: TogetherAICompletionModelId) =>\n new OpenAICompatibleCompletionLanguageModel(modelId, {\n ...getCommonModelConfig('completion'),\n includeUsage: true,\n });\n\n const createEmbeddingModel = (modelId: TogetherAIEmbeddingModelId) =>\n new OpenAICompatibleEmbeddingModel(\n modelId,\n getCommonModelConfig('embedding'),\n );\n\n const createImageModel = (modelId: TogetherAIImageModelId) =>\n new TogetherAIImageModel(modelId, {\n ...getCommonModelConfig('image'),\n baseURL: baseURL ?? 'https://api.together.xyz/v1/',\n });\n\n const createRerankingModel = (modelId: TogetherAIRerankingModelId) =>\n new TogetherAIRerankingModel(modelId, {\n ...getCommonModelConfig('reranking'),\n baseURL: baseURL ?? 'https://api.together.xyz/v1/',\n });\n\n const provider = (modelId: TogetherAIChatModelId) => createChatModel(modelId);\n\n provider.specificationVersion = 'v4' as const;\n provider.completionModel = createCompletionModel;\n provider.languageModel = createChatModel;\n provider.chatModel = createChatModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n provider.reranking = createRerankingModel;\n provider.rerankingModel = createRerankingModel;\n\n return provider;\n}\n\nexport const togetherai = createTogetherAI();\n","import type { RerankingModelV4 } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport {\n togetheraiErrorSchema,\n togetheraiRerankingResponseSchema,\n type TogetherAIRerankingInput,\n} from './togetherai-reranking-api';\nimport {\n togetheraiRerankingModelOptionsSchema,\n type TogetherAIRerankingModelId,\n} from './togetherai-reranking-model-options';\ntype TogetherAIRerankingConfig = {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n};\n\nexport class TogetherAIRerankingModel implements RerankingModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: TogetherAIRerankingModelId;\n\n private readonly config: TogetherAIRerankingConfig;\n\n constructor(\n modelId: TogetherAIRerankingModelId,\n config: TogetherAIRerankingConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n // see https://docs.together.ai/reference/rerank-1\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: 'togetherai',\n providerOptions,\n schema: togetheraiRerankingModelOptionsSchema,\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 documents: documents.values,\n query,\n top_n: topN,\n rank_fields: rerankingOptions?.rankFields,\n return_documents: false, // reduce response size\n } satisfies TogetherAIRerankingInput,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: togetheraiErrorSchema,\n errorToMessage: data => data.error.message,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n togetheraiRerankingResponseSchema,\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 response: {\n id: response.id ?? undefined,\n modelId: response.model ?? undefined,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n }\n}\n","import type { JSONObject } from '@ai-sdk/provider';\nimport { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n// https://docs.together.ai/reference/rerank-1\nexport type TogetherAIRerankingInput = {\n model: string;\n query: string;\n documents: JSONObject[] | string[];\n top_n: number | undefined;\n return_documents: boolean | undefined;\n rank_fields: string[] | undefined;\n};\n\nexport const togetheraiErrorSchema = lazySchema(() =>\n zodSchema(\n z.object({\n error: z.object({\n message: z.string(),\n }),\n }),\n ),\n);\n\nexport const togetheraiRerankingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n id: z.string().nullish(),\n model: z.string().nullish(),\n results: z.array(\n z.object({\n index: z.number(),\n relevance_score: z.number(),\n }),\n ),\n usage: z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n }),\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// see https://docs.together.ai/docs/serverless-models#rerank-models\nexport type TogetherAIRerankingModelId =\n | 'Salesforce/Llama-Rank-v1'\n | 'mixedbread-ai/Mxbai-Rerank-Large-V2'\n | (string & {});\n\nexport type TogetherAIRerankingModelOptions = {\n /**\n * List of keys in the JSON Object document to rank by.\n * Defaults to use all supplied keys for ranking.\n *\n * @example [\"title\", \"text\"]\n */\n rankFields?: string[];\n};\n\nexport const togetheraiRerankingModelOptionsSchema: FlexibleSchema<TogetherAIRerankingModelOptions> =\n lazySchema(() =>\n zodSchema(\n z.object({\n rankFields: z.array(z.string()).optional(),\n }),\n ),\n );\n","import type { ImageModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertImageModelFileToDataUri,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { togetheraiImageModelOptionsSchema } from './togetherai-image-model-options';\nimport type { TogetherAIImageModelId } from './togetherai-image-settings';\nimport { z } from 'zod/v4';\n\ninterface TogetherAIImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: () => Record<string, string>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class TogetherAIImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxImagesPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: TogetherAIImageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: TogetherAIImageModelId;\n config: TogetherAIImageModelConfig;\n }) {\n return new TogetherAIImageModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: TogetherAIImageModelId,\n private config: TogetherAIImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n size,\n seed,\n providerOptions,\n headers,\n abortSignal,\n files,\n mask,\n }: Parameters<ImageModelV4['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV4['doGenerate']>>\n > {\n const warnings: Array<SharedV4Warning> = [];\n\n if (mask != null) {\n throw new Error(\n 'Together AI does not support mask-based image editing. ' +\n 'Use FLUX Kontext models (e.g., black-forest-labs/FLUX.1-kontext-pro) ' +\n 'with a reference image and descriptive prompt instead.',\n );\n }\n\n if (size != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'aspectRatio',\n details:\n 'This model does not support the `aspectRatio` option. Use `size` instead.',\n });\n }\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n\n const togetheraiOptions = await parseProviderOptions({\n provider: 'togetherai',\n providerOptions,\n schema: togetheraiImageModelOptionsSchema,\n });\n\n // Handle image input from files\n let imageUrl: string | undefined;\n if (files != null && files.length > 0) {\n imageUrl = convertImageModelFileToDataUri(files[0]);\n\n if (files.length > 1) {\n warnings.push({\n type: 'other',\n message:\n 'Together AI only supports a single input image. Additional images are ignored.',\n });\n }\n }\n\n const splitSize = size?.split('x');\n // https://docs.together.ai/reference/post_images-generations\n const { value: response, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/images/generations`,\n headers: combineHeaders(this.config.headers?.(), headers),\n body: {\n model: this.modelId,\n prompt,\n ...(seed != null ? { seed } : {}),\n ...(n > 1 ? { n } : {}),\n ...(splitSize && {\n width: parseInt(splitSize[0]),\n height: parseInt(splitSize[1]),\n }),\n ...(imageUrl != null ? { image_url: imageUrl } : {}),\n response_format: 'base64',\n ...(togetheraiOptions ?? {}),\n },\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: togetheraiErrorSchema,\n errorToMessage: data => data.error.message,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n togetheraiImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n images: response.data.map(item => item.b64_json),\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\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 togetheraiImageResponseSchema = z.object({\n data: z.array(\n z.object({\n b64_json: z.string(),\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 togetheraiErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n }),\n});\n","import {\n lazySchema,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\n/**\n * Provider options schema for Together AI image generation.\n */\nexport const togetheraiImageModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.looseObject({\n /**\n * Number of generation steps. Higher values can improve quality.\n */\n steps: z.number().nullish(),\n\n /**\n * Guidance scale for image generation.\n */\n guidance: z.number().nullish(),\n\n /**\n * Negative prompt to guide what to avoid.\n */\n negative_prompt: z.string().nullish(),\n\n /**\n * Disable the safety checker for image generation.\n * When true, the API will not reject images flagged as potentially NSFW.\n * Not available for Flux Schnell Free and Flux Pro models.\n */\n disable_safety_checker: z.boolean().nullish(),\n }),\n ),\n);\n\nexport type TogetherAIImageModelOptions = InferSchema<\n typeof togetheraiImageModelOptionsSchema\n>;\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["lazySchema","zodSchema","z","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","parseProviderOptions","postJsonToApi","lazySchema","zodSchema","z","z","parseProviderOptions","postJsonToApi","combineHeaders","createJsonErrorResponseHandler","togetheraiErrorSchema","createJsonResponseHandler","_a"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/togetherai",
3
- "version": "3.0.40",
3
+ "version": "3.0.42",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -29,9 +29,9 @@
29
29
  }
30
30
  },
31
31
  "dependencies": {
32
- "@ai-sdk/openai-compatible": "3.0.39",
33
- "@ai-sdk/provider": "4.0.8",
34
- "@ai-sdk/provider-utils": "5.0.32"
32
+ "@ai-sdk/openai-compatible": "3.0.41",
33
+ "@ai-sdk/provider": "4.0.9",
34
+ "@ai-sdk/provider-utils": "5.0.34"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@ai-sdk/test-server": "2.0.1",
@@ -20,6 +20,7 @@ export type TogetherAIChatModelId =
20
20
  | 'databricks/dbrx-instruct'
21
21
  | 'deepseek-ai/deepseek-llm-67b-chat'
22
22
  | 'deepseek-ai/DeepSeek-V3'
23
+ | 'deepseek-ai/DeepSeek-V4-Flash-0731'
23
24
  | 'google/gemma-2b-it'
24
25
  | 'Gryphe/MythoMax-L2-13b'
25
26
  | 'meta-llama/Llama-2-13b-chat-hf'
@@ -114,6 +114,12 @@ function loadDeprecatedApiKey(): string | undefined {
114
114
  return key;
115
115
  }
116
116
 
117
+ export function getModelStructuredOutputSupport(
118
+ modelId: TogetherAIChatModelId,
119
+ ): boolean {
120
+ return modelId === 'deepseek-ai/DeepSeek-V4-Flash-0731';
121
+ }
122
+
117
123
  export function createTogetherAI(
118
124
  options: TogetherAIProviderSettings = {},
119
125
  ): TogetherAIProvider {
@@ -151,6 +157,7 @@ export function createTogetherAI(
151
157
  return new OpenAICompatibleChatLanguageModel(modelId, {
152
158
  ...getCommonModelConfig('chat'),
153
159
  includeUsage: true,
160
+ supportsStructuredOutputs: getModelStructuredOutputSupport(modelId),
154
161
  });
155
162
  };
156
163