@ai-sdk/perplexity 5.0.0 → 5.0.2

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,20 @@
1
1
  # @ai-sdk/perplexity
2
2
 
3
+ ## 5.0.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [e3605f6]
8
+ - Updated dependencies [525efc5]
9
+ - @ai-sdk/provider-utils@5.0.50
10
+ - @ai-sdk/provider@4.0.19
11
+
12
+ ## 5.0.1
13
+
14
+ ### Patch Changes
15
+
16
+ - 6da8aa0: Accept `null` fields in Agent API stream events, such as `contents: null` on `response.reasoning.fetch_url_results` when no URLs were fetched. Previously these events failed validation and errored the stream.
17
+
3
18
  ## 5.0.0
4
19
 
5
20
  ### Major Changes
package/dist/index.js CHANGED
@@ -393,24 +393,24 @@ var perplexityAgentResponseSchema = z2.looseObject({
393
393
  });
394
394
  var perplexityAgentChunkSchema = z2.looseObject({
395
395
  type: z2.string(),
396
- sequence_number: z2.number().optional(),
397
- response: perplexityAgentResponseSchema.optional(),
398
- item: perplexityOutputItemSchema.optional(),
399
- output_index: z2.number().optional(),
400
- item_id: z2.string().optional(),
401
- content_index: z2.number().optional(),
402
- delta: z2.string().optional(),
403
- text: z2.string().optional(),
404
- thought: z2.string().optional(),
405
- queries: z2.array(z2.string()).optional(),
406
- urls: z2.array(z2.string()).optional(),
407
- results: z2.array(perplexitySearchResultSchema).optional(),
408
- contents: z2.array(perplexityFetchedContentSchema).optional(),
396
+ sequence_number: z2.number().nullish(),
397
+ response: perplexityAgentResponseSchema.nullish(),
398
+ item: perplexityOutputItemSchema.nullish(),
399
+ output_index: z2.number().nullish(),
400
+ item_id: z2.string().nullish(),
401
+ content_index: z2.number().nullish(),
402
+ delta: z2.string().nullish(),
403
+ text: z2.string().nullish(),
404
+ thought: z2.string().nullish(),
405
+ queries: z2.array(z2.string()).nullish(),
406
+ urls: z2.array(z2.string()).nullish(),
407
+ results: z2.array(perplexitySearchResultSchema).nullish(),
408
+ contents: z2.array(perplexityFetchedContentSchema).nullish(),
409
409
  error: z2.looseObject({
410
- code: z2.string().optional(),
410
+ code: z2.string().nullish(),
411
411
  message: z2.string(),
412
- type: z2.string().optional()
413
- }).optional()
412
+ type: z2.string().nullish()
413
+ }).nullish()
414
414
  });
415
415
  var perplexityErrorSchema = z2.looseObject({
416
416
  error: z2.union([
@@ -932,7 +932,7 @@ var PerplexityLanguageModel = class _PerplexityLanguageModel {
932
932
  const value = chunk.value;
933
933
  const getTextId = (itemId, outputIndex, contentIndex = 0) => {
934
934
  const id = itemId ?? String(outputIndex ?? "text");
935
- return contentIndex === 0 ? id : `${id}:${contentIndex}`;
935
+ return contentIndex == null || contentIndex === 0 ? id : `${id}:${contentIndex}`;
936
936
  };
937
937
  const emitTextDelta = (id, delta) => {
938
938
  let state = textStates.get(id);
@@ -1338,7 +1338,7 @@ var perplexityEmbeddingResponseSchema = z4.object({
1338
1338
  });
1339
1339
 
1340
1340
  // src/version.ts
1341
- var VERSION = true ? "5.0.0" : "0.0.0-test";
1341
+ var VERSION = true ? "5.0.2" : "0.0.0-test";
1342
1342
 
1343
1343
  // src/perplexity-provider.ts
1344
1344
  function createPerplexity(options = {}) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/perplexity-provider.ts","../src/perplexity-embedding-model.ts","../src/perplexity-embedding-model-options.ts","../src/perplexity-language-model.ts","../src/convert-perplexity-usage.ts","../src/convert-to-perplexity-input.ts","../src/map-perplexity-finish-reason.ts","../src/perplexity-agent-api.ts","../src/perplexity-language-model-options.ts","../src/perplexity-prepare-tools.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type LanguageModelV4,\n type EmbeddingModelV4,\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 { PerplexityEmbeddingModel } from './perplexity-embedding-model';\nimport type { PerplexityEmbeddingModelId } from './perplexity-embedding-model-options';\nimport { PerplexityLanguageModel } from './perplexity-language-model';\nimport type { PerplexityLanguageModelId } from './perplexity-options';\nimport { VERSION } from './version';\n\nexport interface PerplexityProvider extends ProviderV4 {\n /**\n * Creates a Perplexity Agent API model or preset for text generation.\n */\n (modelId: PerplexityLanguageModelId): LanguageModelV4;\n\n /**\n * Creates a Perplexity Agent API model or preset for text generation.\n */\n languageModel(modelId: PerplexityLanguageModelId): LanguageModelV4;\n\n /**\n * Creates a Perplexity model for text embeddings.\n */\n embedding(modelId: PerplexityEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a Perplexity model for text embeddings.\n */\n embeddingModel(modelId: PerplexityEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: PerplexityEmbeddingModelId): EmbeddingModelV4;\n}\n\nexport interface PerplexityProviderSettings {\n /**\n * Base URL for Perplexity API calls.\n */\n baseURL?: string;\n\n /**\n * API key for authenticating requests.\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\nexport function createPerplexity(\n options: PerplexityProviderSettings = {},\n): PerplexityProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'PERPLEXITY_API_KEY',\n description: 'Perplexity',\n })}`,\n ...options.headers,\n },\n `ai-sdk/perplexity/${VERSION}`,\n );\n\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.perplexity.ai',\n )!;\n\n const createLanguageModel = (modelId: PerplexityLanguageModelId) => {\n return new PerplexityLanguageModel(modelId, {\n baseURL,\n headers: getHeaders,\n generateId,\n fetch: options.fetch,\n });\n };\n\n const createEmbeddingModel = (modelId: PerplexityEmbeddingModelId) =>\n new PerplexityEmbeddingModel(modelId, {\n provider: 'perplexity.embedding',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = (modelId: PerplexityLanguageModelId) =>\n createLanguageModel(modelId);\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = createLanguageModel;\n\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const perplexity = createPerplexity();\n","import {\n TooManyEmbeddingValuesForCallError,\n type EmbeddingModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n perplexityEmbeddingModelOptions,\n type PerplexityEmbeddingModelId,\n} from './perplexity-embedding-model-options';\nimport {\n perplexityErrorSchema,\n perplexityErrorToMessage,\n} from './perplexity-language-model';\n\ntype PerplexityEmbeddingConfig = {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n};\n\nexport class PerplexityEmbeddingModel implements EmbeddingModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: PerplexityEmbeddingModelId;\n // https://docs.perplexity.ai/docs/embeddings/standard-embeddings\n readonly maxEmbeddingsPerCall = 512;\n readonly supportsParallelCalls = true;\n\n private readonly config: PerplexityEmbeddingConfig;\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: PerplexityEmbeddingModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: PerplexityEmbeddingModelId;\n config: PerplexityEmbeddingConfig;\n }) {\n return new PerplexityEmbeddingModel(options.modelId, options.config);\n }\n\n constructor(\n modelId: PerplexityEmbeddingModelId,\n config: PerplexityEmbeddingConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n }\n\n async doEmbed({\n values,\n abortSignal,\n headers,\n providerOptions,\n }: Parameters<EmbeddingModelV4['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>\n > {\n if (values.length > this.maxEmbeddingsPerCall) {\n throw new TooManyEmbeddingValuesForCallError({\n provider: this.provider,\n modelId: this.modelId,\n maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n values,\n });\n }\n\n const perplexityOptions =\n (await parseProviderOptions({\n provider: 'perplexity',\n providerOptions,\n schema: perplexityEmbeddingModelOptions,\n })) ?? {};\n\n // Perplexity only returns quantized (base64-encoded) embeddings.\n const encodingFormat = perplexityOptions.encodingFormat ?? 'base64_int8';\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/v1/embeddings`,\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n model: this.modelId,\n input: values,\n dimensions: perplexityOptions.dimensions,\n encoding_format: encodingFormat,\n },\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage: perplexityErrorToMessage,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n perplexityEmbeddingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n const cost = response.usage?.cost;\n\n return {\n embeddings: response.data.map(item =>\n decodeEmbedding(item.embedding, encodingFormat),\n ),\n usage: response.usage\n ? { tokens: response.usage.prompt_tokens }\n : undefined,\n providerMetadata: cost\n ? {\n perplexity: {\n cost: {\n inputCost: cost.input_cost ?? null,\n totalCost: cost.total_cost ?? null,\n currency: cost.currency ?? null,\n },\n },\n }\n : undefined,\n response: { headers: responseHeaders, body: rawValue },\n warnings: [],\n };\n }\n}\n\n/**\n * Decodes a base64-encoded Perplexity embedding into a numeric vector.\n * For `base64_int8` the bytes are reinterpreted as signed int8 values;\n * for `base64_binary` the raw unsigned bytes (packed bits) are returned.\n */\nfunction decodeEmbedding(\n base64: string,\n encodingFormat: 'base64_int8' | 'base64_binary',\n): number[] {\n const bytes = convertBase64ToUint8Array(base64);\n\n if (encodingFormat === 'base64_int8') {\n const int8 = new Int8Array(\n bytes.buffer,\n bytes.byteOffset,\n bytes.byteLength,\n );\n return Array.from(int8);\n }\n\n return Array.from(bytes);\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 perplexityEmbeddingResponseSchema = z.object({\n data: z.array(z.object({ embedding: z.string() })),\n usage: z\n .object({\n prompt_tokens: z.number(),\n cost: z\n .object({\n input_cost: z.number().nullish(),\n total_cost: z.number().nullish(),\n currency: z.string().nullish(),\n })\n .nullish(),\n })\n .nullish(),\n});\n","import { z } from 'zod/v4';\n\n// https://docs.perplexity.ai/docs/embeddings/quickstart\nexport type PerplexityEmbeddingModelId =\n | 'pplx-embed-v1-0.6b'\n | 'pplx-embed-v1-4b'\n | (string & {});\n\nexport const perplexityEmbeddingModelOptions = z.object({\n /**\n * The number of dimensions the resulting output embeddings should have\n * (Matryoshka truncation). Ranges from 128 up to the model's full size\n * (1024 for 0.6b models, 2560 for 4b models).\n */\n dimensions: z.number().int().positive().optional(),\n\n /**\n * The quantized encoding format returned by the API. Perplexity does not\n * return floating point embeddings; values are decoded to numbers:\n * - `base64_int8` (default): signed int8 values, compare via cosine similarity.\n * - `base64_binary`: packed bits per byte (0-255), compare via Hamming distance.\n */\n encodingFormat: z.enum(['base64_int8', 'base64_binary']).optional(),\n});\n\nexport type PerplexityEmbeddingModelOptions = z.infer<\n typeof perplexityEmbeddingModelOptions\n>;\n","import {\n APICallError,\n type LanguageModelV4,\n type LanguageModelV4CallOptions,\n type LanguageModelV4Content,\n type LanguageModelV4FinishReason,\n type LanguageModelV4GenerateResult,\n type LanguageModelV4StreamPart,\n type LanguageModelV4StreamResult,\n type SharedV4ProviderMetadata,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n createLanguageModelResponseMetadata,\n isCustomReasoning,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE,\n type FetchFunction,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport type { z } from 'zod/v4';\nimport { convertPerplexityUsage } from './convert-perplexity-usage';\nimport { convertToPerplexityInput } from './convert-to-perplexity-input';\nimport { mapPerplexityFinishReason } from './map-perplexity-finish-reason';\nimport {\n perplexityAgentChunkSchema,\n perplexityAgentResponseSchema,\n perplexityErrorSchema,\n perplexityErrorToMessage,\n type PerplexityAgentTool,\n type perplexityOutputItemSchema,\n type perplexitySearchResultSchema,\n type perplexityUsageSchema,\n} from './perplexity-agent-api';\nimport { perplexityLanguageModelOptions } from './perplexity-language-model-options';\nimport type {\n PerplexityAgentPreset,\n PerplexityLanguageModelId,\n} from './perplexity-options';\nimport { preparePerplexityTools } from './perplexity-prepare-tools';\n\ntype PerplexityAgentConfig = {\n baseURL: string;\n headers?: () => Record<string, string | undefined>;\n generateId: () => string;\n fetch?: FetchFunction;\n};\n\ntype PerplexityOutputItem = z.infer<typeof perplexityOutputItemSchema>;\ntype PerplexitySearchResult = z.infer<typeof perplexitySearchResultSchema>;\ntype PerplexityUsage = z.infer<typeof perplexityUsageSchema>;\ntype PerplexityUrlSource = Extract<\n LanguageModelV4Content,\n { type: 'source'; sourceType: 'url' }\n>;\n\nconst presetIds = new Set<PerplexityAgentPreset>([\n 'fast',\n 'low',\n 'medium',\n 'high',\n 'xhigh',\n]);\n\nfunction getModelSelection(modelId: PerplexityLanguageModelId): {\n model?: string;\n preset?: PerplexityAgentPreset;\n} {\n if (presetIds.has(modelId as PerplexityAgentPreset)) {\n return { preset: modelId as PerplexityAgentPreset };\n }\n\n return { model: modelId };\n}\n\nfunction getResponseMetadata(response: {\n id?: string | null;\n model?: string | null;\n created_at?: number | null;\n}) {\n return createLanguageModelResponseMetadata({\n id: response.id,\n model: response.model,\n created: response.created_at,\n });\n}\n\nfunction getProviderMetadata(\n usage: PerplexityUsage | null | undefined,\n): SharedV4ProviderMetadata {\n const cost = usage?.cost;\n const numSearchQueries = usage?.tool_calls_details\n ? Object.entries(usage.tool_calls_details)\n .filter(([name]) => name.includes('search'))\n .reduce((total, [, details]) => total + (details.invocation ?? 0), 0)\n : null;\n\n return {\n perplexity: {\n usage: {\n citationTokens: null,\n numSearchQueries,\n },\n images: null,\n cost:\n cost == null\n ? null\n : {\n inputTokensCost: cost.input_cost ?? null,\n outputTokensCost: cost.output_cost ?? null,\n requestCost: null,\n totalCost: cost.total_cost ?? null,\n currency: cost.currency ?? null,\n cacheCreationCost: cost.cache_creation_cost ?? null,\n cacheReadCost: cost.cache_read_cost ?? null,\n toolCallsCost: cost.tool_calls_cost ?? null,\n },\n toolCalls:\n usage?.tool_calls_details == null\n ? null\n : Object.fromEntries(\n Object.entries(usage.tool_calls_details).map(\n ([name, details]) => [\n name,\n { invocation: details.invocation ?? null },\n ],\n ),\n ),\n },\n };\n}\n\nfunction createSource(\n result: PerplexitySearchResult,\n generateId: () => string,\n): PerplexityUrlSource {\n return {\n type: 'source',\n sourceType: 'url',\n id: result.id == null ? generateId() : String(result.id),\n url: result.url,\n title: result.title,\n providerMetadata: {\n perplexity: {\n resultId: result.id ?? null,\n snippet: result.snippet ?? null,\n date: result.date ?? null,\n lastUpdated: result.last_updated ?? null,\n source: result.source ?? null,\n },\n },\n };\n}\n\nfunction hasSearchResultId(source: PerplexityUrlSource): boolean {\n return typeof source.providerMetadata?.perplexity?.resultId === 'number';\n}\n\nfunction getSearchResults(item: PerplexityOutputItem) {\n return item.type === 'search_results' ? (item.results ?? []) : [];\n}\n\nfunction getFetchedSources(item: PerplexityOutputItem) {\n return item.type === 'fetch_url_results' ? (item.contents ?? []) : [];\n}\n\nexport class PerplexityLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n readonly provider = 'perplexity';\n\n readonly modelId: PerplexityLanguageModelId;\n\n private readonly config: PerplexityAgentConfig;\n\n static [WORKFLOW_SERIALIZE](model: PerplexityLanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: PerplexityLanguageModelId;\n config: PerplexityAgentConfig;\n }) {\n return new PerplexityLanguageModel(options.modelId, options.config);\n }\n\n constructor(\n modelId: PerplexityLanguageModelId,\n config: PerplexityAgentConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'image/*': [/^https?:\\/\\/.*$/],\n };\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n reasoning,\n responseFormat,\n seed,\n providerOptions,\n tools,\n toolChoice,\n }: LanguageModelV4CallOptions) {\n const warnings: SharedV4Warning[] = [];\n\n const perplexityOptions =\n (await parseProviderOptions({\n provider: 'perplexity',\n providerOptions,\n schema: perplexityLanguageModelOptions,\n })) ?? {};\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n if (frequencyPenalty != null) {\n warnings.push({ type: 'unsupported', feature: 'frequencyPenalty' });\n }\n if (presencePenalty != null) {\n warnings.push({ type: 'unsupported', feature: 'presencePenalty' });\n }\n if (stopSequences != null) {\n warnings.push({ type: 'unsupported', feature: 'stopSequences' });\n }\n if (seed != null) {\n warnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n const { tools: nativeTools, ...agentOptions } = perplexityOptions;\n\n const modelSelection = getModelSelection(this.modelId);\n\n const { input, warnings: inputWarnings } = convertToPerplexityInput(prompt);\n warnings.push(...inputWarnings);\n\n const { tools: functionTools, warnings: toolWarnings } =\n preparePerplexityTools({ tools, toolChoice });\n warnings.push(...toolWarnings);\n\n const agentTools = [\n ...((nativeTools ?? []) as PerplexityAgentTool[]),\n ...functionTools,\n ];\n\n let reasoningConfig = agentOptions.reasoning;\n if (reasoningConfig == null && isCustomReasoning(reasoning)) {\n if (reasoning === 'none') {\n warnings.push({\n type: 'unsupported',\n feature: 'reasoning \"none\"',\n });\n } else {\n reasoningConfig = { effort: reasoning };\n }\n }\n\n const body: Record<string, unknown> = {\n ...agentOptions,\n ...modelSelection,\n input,\n max_output_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n reasoning: reasoningConfig,\n response_format:\n responseFormat?.type === 'json' && responseFormat.schema != null\n ? {\n type: 'json_schema',\n json_schema: {\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n schema: responseFormat.schema,\n strict: true,\n },\n }\n : undefined,\n tools: agentTools.length > 0 ? agentTools : undefined,\n };\n\n if (responseFormat?.type === 'json' && responseFormat.schema == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'JSON response format without a schema',\n });\n }\n\n return { args: body, warnings };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { args: body, warnings } = await this.getArgs(options);\n\n const url = `${this.config.baseURL}/v1/agent`;\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url,\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage: perplexityErrorToMessage,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n perplexityAgentResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n if (response.error != null || response.status === 'failed') {\n throw new APICallError({\n message: response.error?.message ?? 'Perplexity response failed',\n url,\n requestBodyValues: body,\n statusCode: 400,\n responseHeaders,\n responseBody: rawResponse as string,\n isRetryable: false,\n });\n }\n\n const content: LanguageModelV4Content[] = [];\n const sourceIndexesByUrl = new Map<string, number>();\n let hasFunctionCall = false;\n\n const addSource = (source: PerplexityUrlSource) => {\n const existingIndex = sourceIndexesByUrl.get(source.url);\n if (existingIndex == null) {\n sourceIndexesByUrl.set(source.url, content.length);\n content.push(source);\n } else if (\n hasSearchResultId(source) &&\n !hasSearchResultId(content[existingIndex] as PerplexityUrlSource)\n ) {\n content[existingIndex] = source;\n }\n };\n\n for (const item of response.output) {\n if (item.type === 'message') {\n for (const part of item.content ?? []) {\n if (part.type === 'output_text' && part.text != null) {\n content.push({ type: 'text', text: part.text });\n }\n for (const annotation of part.annotations ?? []) {\n if (annotation.url != null) {\n addSource({\n type: 'source',\n sourceType: 'url',\n id: this.config.generateId(),\n url: annotation.url,\n title: annotation.title,\n });\n }\n }\n }\n } else if (item.type === 'search_results') {\n for (const result of getSearchResults(item)) {\n addSource(createSource(result, this.config.generateId));\n }\n } else if (item.type === 'fetch_url_results') {\n for (const result of getFetchedSources(item)) {\n addSource({\n type: 'source',\n sourceType: 'url',\n id: this.config.generateId(),\n url: result.url,\n title: result.title,\n providerMetadata: {\n perplexity: { snippet: result.snippet ?? null },\n },\n });\n }\n } else if (\n item.type === 'function_call' &&\n item.call_id != null &&\n item.name != null &&\n item.arguments != null\n ) {\n hasFunctionCall = true;\n content.push({\n type: 'tool-call',\n toolCallId: item.call_id,\n toolName: item.name,\n input: item.arguments,\n providerMetadata: {\n perplexity: {\n itemId: item.id ?? null,\n ...(item.thought_signature != null && {\n thoughtSignature: item.thought_signature,\n }),\n },\n },\n });\n }\n }\n\n const finishReason = response.incomplete_details?.reason ?? response.status;\n\n return {\n content,\n finishReason: {\n unified: mapPerplexityFinishReason({\n status: response.status,\n incompleteReason: response.incomplete_details?.reason,\n hasFunctionCall,\n }),\n raw: finishReason,\n },\n usage: convertPerplexityUsage(response.usage),\n request: { body },\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n providerMetadata: getProviderMetadata(response.usage),\n };\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { args, warnings } = await this.getArgs(options);\n const body = { ...args, stream: true };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/v1/agent`,\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage: perplexityErrorToMessage,\n }),\n successfulResponseHandler: createEventSourceResponseHandler(\n perplexityAgentChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: PerplexityUsage | undefined;\n let hasFunctionCall = false;\n let hasResponseMetadata = false;\n let activeReasoningId: string | undefined;\n const textStates = new Map<string, { text: string; ended: boolean }>();\n const emittedSourceUrls = new Set<string>();\n const pendingSourcesByUrl = new Map<string, PerplexityUrlSource>();\n const seenFunctionCalls = new Set<string>();\n const generateId = this.config.generateId;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof perplexityAgentChunkSchema>>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n 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\n const getTextId = (\n itemId: string | null | undefined,\n outputIndex: number | undefined,\n contentIndex = 0,\n ) => {\n const id = itemId ?? String(outputIndex ?? 'text');\n return contentIndex === 0 ? id : `${id}:${contentIndex}`;\n };\n\n const emitTextDelta = (id: string, delta: string) => {\n let state = textStates.get(id);\n if (state?.ended) {\n return;\n }\n if (state == null) {\n state = { text: '', ended: false };\n textStates.set(id, state);\n controller.enqueue({ type: 'text-start', id });\n }\n state.text += delta;\n controller.enqueue({ type: 'text-delta', id, delta });\n };\n\n const finishText = (id: string, text: string | undefined) => {\n const state = textStates.get(id);\n if (state?.ended) {\n return;\n }\n // Terminal output can contain text for which no delta arrived,\n // or the remainder of a partially streamed content part.\n const emittedText = state?.text ?? '';\n if (\n text != null &&\n text.startsWith(emittedText) &&\n text.length > emittedText.length\n ) {\n emitTextDelta(id, text.slice(emittedText.length));\n }\n const finalState = textStates.get(id);\n if (finalState != null) {\n finalState.ended = true;\n controller.enqueue({ type: 'text-end', id });\n }\n };\n\n const finishOutputText = (\n item: PerplexityOutputItem,\n outputIndex?: number,\n ) => {\n if (item.type === 'message') {\n for (const [contentIndex, part] of (\n item.content ?? []\n ).entries()) {\n if (part.type === 'output_text') {\n finishText(\n getTextId(item.id, outputIndex, contentIndex),\n part.text,\n );\n }\n }\n }\n };\n\n const emitSource = (source: PerplexityUrlSource) => {\n if (emittedSourceUrls.has(source.url)) {\n return;\n }\n\n if (hasSearchResultId(source)) {\n pendingSourcesByUrl.delete(source.url);\n emittedSourceUrls.add(source.url);\n controller.enqueue(source);\n } else if (!pendingSourcesByUrl.has(source.url)) {\n // A later search result can supply the citation ID. Delay\n // sources without one rather than emitting a duplicate update.\n pendingSourcesByUrl.set(source.url, source);\n }\n };\n\n const emitReasoningThought = (thought: string | undefined) => {\n if (activeReasoningId != null && thought != null) {\n controller.enqueue({\n type: 'reasoning-delta',\n id: activeReasoningId,\n delta: thought,\n });\n }\n };\n\n const emitFunctionCall = (item: PerplexityOutputItem) => {\n if (\n item.type !== 'function_call' ||\n item.call_id == null ||\n item.name == null ||\n item.arguments == null ||\n seenFunctionCalls.has(item.call_id)\n ) {\n return;\n }\n seenFunctionCalls.add(item.call_id);\n hasFunctionCall = true;\n controller.enqueue({\n type: 'tool-input-start',\n id: item.call_id,\n toolName: item.name,\n });\n controller.enqueue({\n type: 'tool-input-delta',\n id: item.call_id,\n delta: item.arguments,\n });\n controller.enqueue({ type: 'tool-input-end', id: item.call_id });\n controller.enqueue({\n type: 'tool-call',\n toolCallId: item.call_id,\n toolName: item.name,\n input: item.arguments,\n providerMetadata: {\n perplexity: {\n itemId: item.id ?? null,\n ...(item.thought_signature != null && {\n thoughtSignature: item.thought_signature,\n }),\n },\n },\n });\n };\n\n const emitOutputSources = (item: PerplexityOutputItem) => {\n if (item.type === 'message') {\n for (const part of item.content ?? []) {\n for (const annotation of part.annotations ?? []) {\n if (annotation.url != null) {\n emitSource({\n type: 'source',\n sourceType: 'url',\n id: generateId(),\n url: annotation.url,\n title: annotation.title,\n });\n }\n }\n }\n }\n for (const result of getSearchResults(item)) {\n emitSource(createSource(result, generateId));\n }\n for (const result of getFetchedSources(item)) {\n emitSource({\n type: 'source',\n sourceType: 'url',\n id: generateId(),\n url: result.url,\n title: result.title,\n providerMetadata: {\n perplexity: { snippet: result.snippet ?? null },\n },\n });\n }\n };\n\n switch (value.type) {\n case 'response.created':\n case 'response.in_progress': {\n if (!hasResponseMetadata && value.response != null) {\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value.response),\n });\n hasResponseMetadata = true;\n }\n break;\n }\n\n case 'response.output_text.delta': {\n if (value.delta != null) {\n emitTextDelta(\n getTextId(\n value.item_id,\n value.output_index,\n value.content_index,\n ),\n value.delta,\n );\n }\n break;\n }\n\n case 'response.output_text.done': {\n finishText(\n getTextId(\n value.item_id,\n value.output_index,\n value.content_index,\n ),\n value.text,\n );\n break;\n }\n\n case 'response.reasoning.started': {\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n }\n activeReasoningId = `reasoning-${\n value.sequence_number ?? generateId()\n }`;\n controller.enqueue({\n type: 'reasoning-start',\n id: activeReasoningId,\n });\n emitReasoningThought(value.thought);\n break;\n }\n\n case 'response.reasoning.search_queries':\n case 'response.reasoning.fetch_url_queries': {\n emitReasoningThought(value.thought);\n break;\n }\n\n case 'response.reasoning.search_results': {\n emitReasoningThought(value.thought);\n for (const result of value.results ?? []) {\n emitSource(createSource(result, generateId));\n }\n break;\n }\n\n case 'response.reasoning.fetch_url_results': {\n emitReasoningThought(value.thought);\n for (const result of value.contents ?? []) {\n emitSource({\n type: 'source',\n sourceType: 'url',\n id: generateId(),\n url: result.url,\n title: result.title,\n providerMetadata: {\n perplexity: { snippet: result.snippet ?? null },\n },\n });\n }\n break;\n }\n\n case 'response.reasoning.stopped': {\n emitReasoningThought(value.thought);\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n activeReasoningId = undefined;\n }\n break;\n }\n\n case 'response.output_item.done': {\n if (value.item != null) {\n finishOutputText(value.item, value.output_index);\n emitOutputSources(value.item);\n emitFunctionCall(value.item);\n }\n break;\n }\n\n case 'response.completed':\n case 'response.incomplete': {\n if (value.response != null) {\n if (!hasResponseMetadata) {\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value.response),\n });\n hasResponseMetadata = true;\n }\n for (const [\n outputIndex,\n item,\n ] of value.response.output.entries()) {\n finishOutputText(item, outputIndex);\n emitOutputSources(item);\n emitFunctionCall(item);\n }\n usage = value.response.usage ?? undefined;\n const rawFinishReason =\n value.response.incomplete_details?.reason ??\n value.response.status;\n finishReason = {\n unified: mapPerplexityFinishReason({\n status: value.response.status,\n incompleteReason:\n value.response.incomplete_details?.reason,\n hasFunctionCall,\n }),\n raw: rawFinishReason,\n };\n }\n break;\n }\n\n case 'response.failed': {\n finishReason = { unified: 'error', raw: 'failed' };\n controller.enqueue({\n type: 'error',\n error: value.error ?? new Error('Perplexity response failed'),\n });\n break;\n }\n }\n },\n\n flush(controller) {\n for (const source of pendingSourcesByUrl.values()) {\n controller.enqueue(source);\n }\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n }\n for (const [id, state] of textStates) {\n if (!state.ended) {\n controller.enqueue({ type: 'text-end', id });\n }\n }\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertPerplexityUsage(usage),\n providerMetadata: getProviderMetadata(usage),\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n\nexport {\n perplexityErrorSchema,\n perplexityErrorToMessage,\n} from './perplexity-agent-api';\nexport type { PerplexityErrorData } from './perplexity-agent-api';\n","import type { JSONObject, LanguageModelV4Usage } from '@ai-sdk/provider';\nimport { createNullLanguageModelUsage } from '@ai-sdk/provider-utils';\n\nexport function convertPerplexityUsage(\n usage:\n | {\n input_tokens?: number | null;\n output_tokens?: number | null;\n total_tokens?: number | null;\n input_tokens_details?: {\n cached_tokens?: number | null;\n cache_creation_input_tokens?: number | null;\n cache_read_input_tokens?: number | null;\n } | null;\n output_tokens_details?: {\n reasoning_tokens?: number | null;\n } | null;\n [key: string]: unknown;\n }\n | undefined\n | null,\n): LanguageModelV4Usage {\n if (usage == null) {\n return createNullLanguageModelUsage();\n }\n\n const inputTokens = usage.input_tokens ?? 0;\n const outputTokens = usage.output_tokens ?? 0;\n const cacheReadTokens =\n usage.input_tokens_details?.cache_read_input_tokens ??\n usage.input_tokens_details?.cached_tokens ??\n 0;\n const cacheWriteTokens =\n usage.input_tokens_details?.cache_creation_input_tokens ?? 0;\n const reasoningTokens = usage.output_tokens_details?.reasoning_tokens ?? 0;\n\n return {\n inputTokens: {\n total: inputTokens,\n noCache: Math.max(0, inputTokens - cacheReadTokens - cacheWriteTokens),\n cacheRead: cacheReadTokens,\n cacheWrite: cacheWriteTokens,\n },\n outputTokens: {\n total: outputTokens,\n text: Math.max(0, outputTokens - reasoningTokens),\n reasoning: reasoningTokens,\n },\n raw: usage as JSONObject,\n };\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4Prompt,\n type LanguageModelV4ToolResultOutput,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n convertUint8ArrayToBase64,\n getTopLevelMediaType,\n resolveFullMediaType,\n} from '@ai-sdk/provider-utils';\nimport type {\n PerplexityAgentInput,\n PerplexityAgentInputContent,\n} from './perplexity-language-model-prompt';\n\nfunction serializeToolOutput(output: LanguageModelV4ToolResultOutput): string {\n switch (output.type) {\n case 'text':\n case 'error-text':\n return output.value;\n case 'json':\n case 'error-json':\n return JSON.stringify(output.value);\n case 'execution-denied':\n return output.reason ?? 'Tool call execution denied.';\n case 'content': {\n if (output.value.some(part => part.type !== 'text')) {\n throw new UnsupportedFunctionalityError({\n functionality: 'file and custom tool result content',\n });\n }\n return output.value\n .map(part => (part.type === 'text' ? part.text : ''))\n .join('');\n }\n default: {\n const _exhaustiveCheck: never = output;\n throw new Error(`Unsupported tool output: ${_exhaustiveCheck}`);\n }\n }\n}\n\nfunction getThoughtSignature(\n providerOptions:\n | Record<string, Record<string, unknown> | undefined>\n | undefined,\n): string | undefined {\n const thoughtSignature = providerOptions?.perplexity?.thoughtSignature;\n return typeof thoughtSignature === 'string' ? thoughtSignature : undefined;\n}\n\nexport function convertToPerplexityInput(prompt: LanguageModelV4Prompt): {\n input: PerplexityAgentInput;\n warnings: SharedV4Warning[];\n} {\n const input: PerplexityAgentInput = [];\n const warnings: SharedV4Warning[] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n input.push({ type: 'message', role: 'system', content });\n break;\n }\n\n case 'user': {\n const convertedContent: PerplexityAgentInputContent[] = content.map(\n part => {\n switch (part.type) {\n case 'text':\n return { type: 'input_text', text: part.text };\n case 'file': {\n if (getTopLevelMediaType(part.mediaType) !== 'image') {\n throw new UnsupportedFunctionalityError({\n functionality: `file part media type ${part.mediaType}`,\n });\n }\n\n switch (part.data.type) {\n case 'url':\n return {\n type: 'input_image',\n image_url: part.data.url.toString(),\n };\n case 'data':\n return {\n type: 'input_image',\n image_url: `data:${resolveFullMediaType({ part })};base64,${\n typeof part.data.data === 'string'\n ? part.data.data\n : convertUint8ArrayToBase64(part.data.data)\n }`,\n };\n case 'reference':\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n case 'text':\n throw new UnsupportedFunctionalityError({\n functionality: 'text file parts',\n });\n }\n }\n }\n },\n );\n\n const isTextOnly = convertedContent.every(\n part => part.type === 'input_text',\n );\n input.push({\n type: 'message',\n role: 'user',\n content: isTextOnly\n ? convertedContent\n .map(part => (part.type === 'input_text' ? part.text : ''))\n .join('')\n : convertedContent,\n });\n break;\n }\n\n case 'assistant': {\n const text = content\n .filter(part => part.type === 'text')\n .map(part => part.text)\n .join('');\n\n if (text.length > 0) {\n input.push({ type: 'message', role: 'assistant', content: text });\n }\n\n for (const part of content) {\n switch (part.type) {\n case 'text':\n break;\n case 'tool-call':\n input.push({\n type: 'function_call',\n call_id: part.toolCallId,\n name: part.toolName,\n arguments: JSON.stringify(part.input ?? {}),\n thought_signature: getThoughtSignature(part.providerOptions),\n });\n break;\n case 'tool-result':\n input.push({\n type: 'function_call_output',\n call_id: part.toolCallId,\n name: part.toolName,\n output: serializeToolOutput(part.output),\n thought_signature: getThoughtSignature(part.providerOptions),\n });\n break;\n case 'reasoning':\n warnings.push({\n type: 'unsupported',\n feature: 'reasoning content in prompt',\n });\n break;\n case 'file':\n case 'reasoning-file':\n case 'custom':\n throw new UnsupportedFunctionalityError({\n functionality: `assistant ${part.type} parts`,\n });\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(\n `Unsupported assistant part: ${_exhaustiveCheck}`,\n );\n }\n }\n }\n break;\n }\n\n case 'tool': {\n for (const part of content) {\n if (part.type === 'tool-approval-response') {\n throw new UnsupportedFunctionalityError({\n functionality: 'tool approval responses',\n });\n }\n\n input.push({\n type: 'function_call_output',\n call_id: part.toolCallId,\n name: part.toolName,\n output: serializeToolOutput(part.output),\n thought_signature: getThoughtSignature(part.providerOptions),\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return { input, warnings };\n}\n","import type { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapPerplexityFinishReason({\n status,\n incompleteReason,\n hasFunctionCall,\n}: {\n status: string | null | undefined;\n incompleteReason: string | null | undefined;\n hasFunctionCall: boolean;\n}): LanguageModelV4FinishReason['unified'] {\n switch (incompleteReason) {\n case 'max_output_tokens':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n }\n\n switch (status) {\n case 'completed':\n return hasFunctionCall ? 'tool-calls' : 'stop';\n case 'requires_action':\n return 'tool-calls';\n case 'failed':\n return 'error';\n case 'cancelled':\n case 'queued':\n case 'in_progress':\n default:\n return hasFunctionCall ? 'tool-calls' : 'other';\n }\n}\n","import type { JSONSchema7 } from '@ai-sdk/provider';\nimport { z } from 'zod/v4';\n\nexport type PerplexityAgentTool =\n | {\n type: 'function';\n name: string;\n description?: string;\n parameters: JSONSchema7;\n strict?: boolean;\n }\n | ({ type: string } & Record<string, unknown>);\n\nexport const perplexitySearchResultSchema = z.looseObject({\n id: z.number().optional(),\n title: z.string(),\n url: z.string(),\n snippet: z.string().optional(),\n date: z.string().nullish(),\n last_updated: z.string().nullish(),\n source: z.string().optional(),\n});\n\nconst perplexityFetchedContentSchema = z.looseObject({\n title: z.string(),\n url: z.string(),\n snippet: z.string().optional(),\n});\n\nconst perplexityContentPartSchema = z.looseObject({\n type: z.string(),\n text: z.string().optional(),\n annotations: z\n .array(\n z.looseObject({\n type: z.string().optional(),\n url: z.string().optional(),\n title: z.string().optional(),\n }),\n )\n .nullish(),\n});\n\nconst handledOutputTypes = [\n 'message',\n 'search_results',\n 'fetch_url_results',\n 'function_call',\n];\n\nexport const perplexityOutputItemSchema = z.union([\n z.looseObject({\n type: z.literal('message'),\n id: z.string().nullish(),\n content: z.array(perplexityContentPartSchema).nullish(),\n }),\n z.looseObject({\n type: z.literal('search_results'),\n results: z.array(perplexitySearchResultSchema).nullish(),\n }),\n z.looseObject({\n type: z.literal('fetch_url_results'),\n contents: z.array(perplexityFetchedContentSchema).nullish(),\n }),\n z.looseObject({\n type: z.literal('function_call'),\n id: z.string().nullish(),\n call_id: z.string().nullish(),\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n thought_signature: z.string().nullish(),\n }),\n // Native tool traces remain available in raw responses and raw stream chunks.\n // Their fields (e.g. finance_results.results) have different shapes. Do not\n // validate them as search results, or let malformed handled items fall back.\n z\n .object({\n type: z.string().refine(type => !handledOutputTypes.includes(type)),\n })\n .transform(() => ({ type: 'unhandled' as const })),\n]);\n\nconst perplexityCostSchema = z.looseObject({\n currency: z.string().optional(),\n input_cost: z.number().optional(),\n output_cost: z.number().optional(),\n total_cost: z.number().optional(),\n cache_creation_cost: z.number().nullish(),\n cache_read_cost: z.number().nullish(),\n tool_calls_cost: z.number().nullish(),\n});\n\nexport const perplexityUsageSchema = z.looseObject({\n input_tokens: z.number(),\n output_tokens: z.number(),\n total_tokens: z.number(),\n input_tokens_details: z\n .looseObject({\n cached_tokens: z.number().optional(),\n cache_creation_input_tokens: z.number().optional(),\n cache_read_input_tokens: z.number().optional(),\n })\n .nullish(),\n output_tokens_details: z\n .looseObject({\n reasoning_tokens: z.number().optional(),\n })\n .nullish(),\n tool_calls_details: z\n .record(\n z.string(),\n z.looseObject({\n invocation: z.number().optional(),\n }),\n )\n .nullish(),\n cost: perplexityCostSchema.nullish(),\n});\n\nexport const perplexityAgentResponseSchema = z.looseObject({\n id: z.string(),\n created_at: z.number(),\n model: z.string(),\n object: z.literal('response'),\n output: z.array(perplexityOutputItemSchema),\n status: z.string(),\n incomplete_details: z\n .looseObject({\n reason: z.string(),\n })\n .nullish(),\n error: z\n .looseObject({\n code: z.string().optional(),\n message: z.string(),\n type: z.string().optional(),\n })\n .nullish(),\n usage: perplexityUsageSchema.nullish(),\n});\n\nexport const perplexityAgentChunkSchema = z.looseObject({\n type: z.string(),\n sequence_number: z.number().optional(),\n response: perplexityAgentResponseSchema.optional(),\n item: perplexityOutputItemSchema.optional(),\n output_index: z.number().optional(),\n item_id: z.string().optional(),\n content_index: z.number().optional(),\n delta: z.string().optional(),\n text: z.string().optional(),\n thought: z.string().optional(),\n queries: z.array(z.string()).optional(),\n urls: z.array(z.string()).optional(),\n results: z.array(perplexitySearchResultSchema).optional(),\n contents: z.array(perplexityFetchedContentSchema).optional(),\n error: z\n .looseObject({\n code: z.string().optional(),\n message: z.string(),\n type: z.string().optional(),\n })\n .optional(),\n});\n\nexport const perplexityErrorSchema = z.looseObject({\n error: z\n .union([\n z.string(),\n z.looseObject({\n code: z.union([z.string(), z.number()]).optional(),\n message: z.string().nullish(),\n type: z.string().nullish(),\n }),\n ])\n .optional(),\n detail: z\n .union([\n z.string(),\n z.array(\n z.looseObject({\n msg: z.string(),\n }),\n ),\n ])\n .optional(),\n message: z.string().optional(),\n});\n\nexport type PerplexityErrorData = z.infer<typeof perplexityErrorSchema>;\n\nexport function perplexityErrorToMessage(data: PerplexityErrorData): string {\n if (typeof data.error === 'string') {\n return data.error;\n }\n if (data.error != null) {\n return data.error.message ?? data.error.type ?? 'unknown error';\n }\n if (typeof data.detail === 'string') {\n return data.detail;\n }\n if (Array.isArray(data.detail)) {\n return data.detail.map(detail => detail.msg).join(', ');\n }\n return data.message ?? 'unknown error';\n}\n","import { z } from 'zod/v4';\n\nconst userLocationSchema = z.looseObject({\n latitude: z.number().optional(),\n longitude: z.number().optional(),\n country: z.string().optional(),\n city: z.string().optional(),\n region: z.string().optional(),\n});\n\nconst webSearchFiltersSchema = z.looseObject({\n search_domain_filter: z.array(z.string()).optional(),\n search_recency_filter: z\n .enum(['hour', 'day', 'week', 'month', 'year'])\n .optional(),\n search_after_date_filter: z.string().optional(),\n search_before_date_filter: z.string().optional(),\n last_updated_after_filter: z.string().optional(),\n last_updated_before_filter: z.string().optional(),\n});\n\nconst webSearchToolSchema = z.looseObject({\n type: z.literal('web_search'),\n filters: webSearchFiltersSchema.optional(),\n max_results: z.number().int().positive().optional(),\n max_tokens: z.number().optional(),\n max_tokens_per_page: z.number().optional(),\n search_context_size: z.enum(['low', 'medium', 'high']).optional(),\n user_location: userLocationSchema.optional(),\n});\n\nconst nativeToolSchema = z.union([\n webSearchToolSchema,\n z.looseObject({\n type: z.literal('fetch_url'),\n max_urls: z.number().optional(),\n }),\n z.looseObject({ type: z.literal('people_search') }),\n z.looseObject({ type: z.literal('finance_search') }),\n z.looseObject({ type: z.literal('sandbox') }),\n z.looseObject({\n type: z.literal('mcp'),\n server_label: z.string(),\n server_url: z.string(),\n allowed_tools: z.array(z.string()).optional(),\n authorization: z.string().optional(),\n defer_loading: z.boolean().optional(),\n headers: z.record(z.string(), z.string()).optional(),\n }),\n z.looseObject({\n type: z.literal('connector'),\n id: z.string(),\n server_label: z.string(),\n server_description: z.string().optional(),\n allowed_tools: z.array(z.string()).optional(),\n }),\n]);\n\nexport const perplexityLanguageModelOptions = z.looseObject({\n /** Top-level Agent API instructions. */\n instructions: z.string().optional(),\n\n /**\n * Native Agent API tools. AI SDK function tools can also be supplied through\n * the top-level `tools` option on `generateText` and `streamText`.\n */\n tools: z.array(nativeToolSchema).optional(),\n\n /** A fallback model list for Agent API routing. */\n models: z.array(z.string()).optional(),\n\n /** Maximum number of agentic steps. */\n max_steps: z.number().int().positive().optional(),\n\n /** Maximum number of native tool calls. */\n max_tool_calls: z.number().int().nonnegative().optional(),\n\n /** Continue a conversation from an earlier Agent API response. */\n previous_response_id: z.string().optional(),\n\n /**\n * Whether the response can be retrieved later. Setting this to false does\n * not disable persistence or prevent previous_response_id continuations.\n */\n store: z.boolean().optional(),\n\n /** Preferred response language as an ISO 639-1 language code. */\n language_preference: z.string().optional(),\n\n /** Agent API reasoning configuration. */\n reasoning: z\n .looseObject({\n effort: z.enum(['minimal', 'low', 'medium', 'high', 'xhigh']).optional(),\n })\n .optional(),\n\n /** Agent API skill configuration. */\n skills: z\n .array(\n z.union([\n z.looseObject({\n type: z.literal('builtin'),\n name: z.enum([\n 'office',\n 'office/docx',\n 'office/pdf',\n 'office/pptx',\n 'office/xlsx',\n ]),\n }),\n z.looseObject({\n type: z.literal('inline'),\n name: z.string(),\n description: z.string(),\n instructions: z.string(),\n }),\n ]),\n )\n .optional(),\n});\n\nexport type PerplexityLanguageModelOptions = z.infer<\n typeof perplexityLanguageModelOptions\n>;\n","import type {\n LanguageModelV4CallOptions,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { PerplexityAgentTool } from './perplexity-agent-api';\n\nexport function preparePerplexityTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV4CallOptions['tools'];\n toolChoice: LanguageModelV4CallOptions['toolChoice'];\n}): {\n tools: PerplexityAgentTool[];\n warnings: SharedV4Warning[];\n} {\n const preparedTools: PerplexityAgentTool[] = [];\n const warnings: SharedV4Warning[] = [];\n\n for (const tool of tools ?? []) {\n if (tool.type === 'provider') {\n warnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.name}`,\n });\n continue;\n }\n\n preparedTools.push({\n type: 'function',\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n strict: tool.strict,\n });\n }\n\n if (toolChoice != null && toolChoice.type !== 'auto') {\n warnings.push({\n type: 'unsupported',\n feature: 'toolChoice',\n details:\n 'The Perplexity Agent API currently selects tools automatically.',\n });\n }\n\n return { tools: preparedTools, warnings };\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":["combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","parseProviderOptions","postJsonToApi","serializeModelOptions","WORKFLOW_DESERIALIZE","WORKFLOW_SERIALIZE","z","z","z","generateId","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","parseProviderOptions","postJsonToApi","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","z"]}
1
+ {"version":3,"sources":["../src/perplexity-provider.ts","../src/perplexity-embedding-model.ts","../src/perplexity-embedding-model-options.ts","../src/perplexity-language-model.ts","../src/convert-perplexity-usage.ts","../src/convert-to-perplexity-input.ts","../src/map-perplexity-finish-reason.ts","../src/perplexity-agent-api.ts","../src/perplexity-language-model-options.ts","../src/perplexity-prepare-tools.ts","../src/version.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type LanguageModelV4,\n type EmbeddingModelV4,\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 { PerplexityEmbeddingModel } from './perplexity-embedding-model';\nimport type { PerplexityEmbeddingModelId } from './perplexity-embedding-model-options';\nimport { PerplexityLanguageModel } from './perplexity-language-model';\nimport type { PerplexityLanguageModelId } from './perplexity-options';\nimport { VERSION } from './version';\n\nexport interface PerplexityProvider extends ProviderV4 {\n /**\n * Creates a Perplexity Agent API model or preset for text generation.\n */\n (modelId: PerplexityLanguageModelId): LanguageModelV4;\n\n /**\n * Creates a Perplexity Agent API model or preset for text generation.\n */\n languageModel(modelId: PerplexityLanguageModelId): LanguageModelV4;\n\n /**\n * Creates a Perplexity model for text embeddings.\n */\n embedding(modelId: PerplexityEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a Perplexity model for text embeddings.\n */\n embeddingModel(modelId: PerplexityEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: PerplexityEmbeddingModelId): EmbeddingModelV4;\n}\n\nexport interface PerplexityProviderSettings {\n /**\n * Base URL for Perplexity API calls.\n */\n baseURL?: string;\n\n /**\n * API key for authenticating requests.\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\nexport function createPerplexity(\n options: PerplexityProviderSettings = {},\n): PerplexityProvider {\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'PERPLEXITY_API_KEY',\n description: 'Perplexity',\n })}`,\n ...options.headers,\n },\n `ai-sdk/perplexity/${VERSION}`,\n );\n\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.perplexity.ai',\n )!;\n\n const createLanguageModel = (modelId: PerplexityLanguageModelId) => {\n return new PerplexityLanguageModel(modelId, {\n baseURL,\n headers: getHeaders,\n generateId,\n fetch: options.fetch,\n });\n };\n\n const createEmbeddingModel = (modelId: PerplexityEmbeddingModelId) =>\n new PerplexityEmbeddingModel(modelId, {\n provider: 'perplexity.embedding',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider = (modelId: PerplexityLanguageModelId) =>\n createLanguageModel(modelId);\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = createLanguageModel;\n\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n return provider;\n}\n\nexport const perplexity = createPerplexity();\n","import {\n TooManyEmbeddingValuesForCallError,\n type EmbeddingModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport {\n perplexityEmbeddingModelOptions,\n type PerplexityEmbeddingModelId,\n} from './perplexity-embedding-model-options';\nimport {\n perplexityErrorSchema,\n perplexityErrorToMessage,\n} from './perplexity-language-model';\n\ntype PerplexityEmbeddingConfig = {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n};\n\nexport class PerplexityEmbeddingModel implements EmbeddingModelV4 {\n readonly specificationVersion = 'v4';\n readonly modelId: PerplexityEmbeddingModelId;\n // https://docs.perplexity.ai/docs/embeddings/standard-embeddings\n readonly maxEmbeddingsPerCall = 512;\n readonly supportsParallelCalls = true;\n\n private readonly config: PerplexityEmbeddingConfig;\n\n get provider(): string {\n return this.config.provider;\n }\n\n static [WORKFLOW_SERIALIZE](model: PerplexityEmbeddingModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: PerplexityEmbeddingModelId;\n config: PerplexityEmbeddingConfig;\n }) {\n return new PerplexityEmbeddingModel(options.modelId, options.config);\n }\n\n constructor(\n modelId: PerplexityEmbeddingModelId,\n config: PerplexityEmbeddingConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n }\n\n async doEmbed({\n values,\n abortSignal,\n headers,\n providerOptions,\n }: Parameters<EmbeddingModelV4['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>\n > {\n if (values.length > this.maxEmbeddingsPerCall) {\n throw new TooManyEmbeddingValuesForCallError({\n provider: this.provider,\n modelId: this.modelId,\n maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n values,\n });\n }\n\n const perplexityOptions =\n (await parseProviderOptions({\n provider: 'perplexity',\n providerOptions,\n schema: perplexityEmbeddingModelOptions,\n })) ?? {};\n\n // Perplexity only returns quantized (base64-encoded) embeddings.\n const encodingFormat = perplexityOptions.encodingFormat ?? 'base64_int8';\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/v1/embeddings`,\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n model: this.modelId,\n input: values,\n dimensions: perplexityOptions.dimensions,\n encoding_format: encodingFormat,\n },\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage: perplexityErrorToMessage,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n perplexityEmbeddingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n const cost = response.usage?.cost;\n\n return {\n embeddings: response.data.map(item =>\n decodeEmbedding(item.embedding, encodingFormat),\n ),\n usage: response.usage\n ? { tokens: response.usage.prompt_tokens }\n : undefined,\n providerMetadata: cost\n ? {\n perplexity: {\n cost: {\n inputCost: cost.input_cost ?? null,\n totalCost: cost.total_cost ?? null,\n currency: cost.currency ?? null,\n },\n },\n }\n : undefined,\n response: { headers: responseHeaders, body: rawValue },\n warnings: [],\n };\n }\n}\n\n/**\n * Decodes a base64-encoded Perplexity embedding into a numeric vector.\n * For `base64_int8` the bytes are reinterpreted as signed int8 values;\n * for `base64_binary` the raw unsigned bytes (packed bits) are returned.\n */\nfunction decodeEmbedding(\n base64: string,\n encodingFormat: 'base64_int8' | 'base64_binary',\n): number[] {\n const bytes = convertBase64ToUint8Array(base64);\n\n if (encodingFormat === 'base64_int8') {\n const int8 = new Int8Array(\n bytes.buffer,\n bytes.byteOffset,\n bytes.byteLength,\n );\n return Array.from(int8);\n }\n\n return Array.from(bytes);\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 perplexityEmbeddingResponseSchema = z.object({\n data: z.array(z.object({ embedding: z.string() })),\n usage: z\n .object({\n prompt_tokens: z.number(),\n cost: z\n .object({\n input_cost: z.number().nullish(),\n total_cost: z.number().nullish(),\n currency: z.string().nullish(),\n })\n .nullish(),\n })\n .nullish(),\n});\n","import { z } from 'zod/v4';\n\n// https://docs.perplexity.ai/docs/embeddings/quickstart\nexport type PerplexityEmbeddingModelId =\n | 'pplx-embed-v1-0.6b'\n | 'pplx-embed-v1-4b'\n | (string & {});\n\nexport const perplexityEmbeddingModelOptions = z.object({\n /**\n * The number of dimensions the resulting output embeddings should have\n * (Matryoshka truncation). Ranges from 128 up to the model's full size\n * (1024 for 0.6b models, 2560 for 4b models).\n */\n dimensions: z.number().int().positive().optional(),\n\n /**\n * The quantized encoding format returned by the API. Perplexity does not\n * return floating point embeddings; values are decoded to numbers:\n * - `base64_int8` (default): signed int8 values, compare via cosine similarity.\n * - `base64_binary`: packed bits per byte (0-255), compare via Hamming distance.\n */\n encodingFormat: z.enum(['base64_int8', 'base64_binary']).optional(),\n});\n\nexport type PerplexityEmbeddingModelOptions = z.infer<\n typeof perplexityEmbeddingModelOptions\n>;\n","import {\n APICallError,\n type LanguageModelV4,\n type LanguageModelV4CallOptions,\n type LanguageModelV4Content,\n type LanguageModelV4FinishReason,\n type LanguageModelV4GenerateResult,\n type LanguageModelV4StreamPart,\n type LanguageModelV4StreamResult,\n type SharedV4ProviderMetadata,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n createLanguageModelResponseMetadata,\n isCustomReasoning,\n parseProviderOptions,\n postJsonToApi,\n serializeModelOptions,\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE,\n type FetchFunction,\n type ParseResult,\n} from '@ai-sdk/provider-utils';\nimport type { z } from 'zod/v4';\nimport { convertPerplexityUsage } from './convert-perplexity-usage';\nimport { convertToPerplexityInput } from './convert-to-perplexity-input';\nimport { mapPerplexityFinishReason } from './map-perplexity-finish-reason';\nimport {\n perplexityAgentChunkSchema,\n perplexityAgentResponseSchema,\n perplexityErrorSchema,\n perplexityErrorToMessage,\n type PerplexityAgentTool,\n type perplexityOutputItemSchema,\n type perplexitySearchResultSchema,\n type perplexityUsageSchema,\n} from './perplexity-agent-api';\nimport { perplexityLanguageModelOptions } from './perplexity-language-model-options';\nimport type {\n PerplexityAgentPreset,\n PerplexityLanguageModelId,\n} from './perplexity-options';\nimport { preparePerplexityTools } from './perplexity-prepare-tools';\n\ntype PerplexityAgentConfig = {\n baseURL: string;\n headers?: () => Record<string, string | undefined>;\n generateId: () => string;\n fetch?: FetchFunction;\n};\n\ntype PerplexityOutputItem = z.infer<typeof perplexityOutputItemSchema>;\ntype PerplexitySearchResult = z.infer<typeof perplexitySearchResultSchema>;\ntype PerplexityUsage = z.infer<typeof perplexityUsageSchema>;\ntype PerplexityUrlSource = Extract<\n LanguageModelV4Content,\n { type: 'source'; sourceType: 'url' }\n>;\n\nconst presetIds = new Set<PerplexityAgentPreset>([\n 'fast',\n 'low',\n 'medium',\n 'high',\n 'xhigh',\n]);\n\nfunction getModelSelection(modelId: PerplexityLanguageModelId): {\n model?: string;\n preset?: PerplexityAgentPreset;\n} {\n if (presetIds.has(modelId as PerplexityAgentPreset)) {\n return { preset: modelId as PerplexityAgentPreset };\n }\n\n return { model: modelId };\n}\n\nfunction getResponseMetadata(response: {\n id?: string | null;\n model?: string | null;\n created_at?: number | null;\n}) {\n return createLanguageModelResponseMetadata({\n id: response.id,\n model: response.model,\n created: response.created_at,\n });\n}\n\nfunction getProviderMetadata(\n usage: PerplexityUsage | null | undefined,\n): SharedV4ProviderMetadata {\n const cost = usage?.cost;\n const numSearchQueries = usage?.tool_calls_details\n ? Object.entries(usage.tool_calls_details)\n .filter(([name]) => name.includes('search'))\n .reduce((total, [, details]) => total + (details.invocation ?? 0), 0)\n : null;\n\n return {\n perplexity: {\n usage: {\n citationTokens: null,\n numSearchQueries,\n },\n images: null,\n cost:\n cost == null\n ? null\n : {\n inputTokensCost: cost.input_cost ?? null,\n outputTokensCost: cost.output_cost ?? null,\n requestCost: null,\n totalCost: cost.total_cost ?? null,\n currency: cost.currency ?? null,\n cacheCreationCost: cost.cache_creation_cost ?? null,\n cacheReadCost: cost.cache_read_cost ?? null,\n toolCallsCost: cost.tool_calls_cost ?? null,\n },\n toolCalls:\n usage?.tool_calls_details == null\n ? null\n : Object.fromEntries(\n Object.entries(usage.tool_calls_details).map(\n ([name, details]) => [\n name,\n { invocation: details.invocation ?? null },\n ],\n ),\n ),\n },\n };\n}\n\nfunction createSource(\n result: PerplexitySearchResult,\n generateId: () => string,\n): PerplexityUrlSource {\n return {\n type: 'source',\n sourceType: 'url',\n id: result.id == null ? generateId() : String(result.id),\n url: result.url,\n title: result.title,\n providerMetadata: {\n perplexity: {\n resultId: result.id ?? null,\n snippet: result.snippet ?? null,\n date: result.date ?? null,\n lastUpdated: result.last_updated ?? null,\n source: result.source ?? null,\n },\n },\n };\n}\n\nfunction hasSearchResultId(source: PerplexityUrlSource): boolean {\n return typeof source.providerMetadata?.perplexity?.resultId === 'number';\n}\n\nfunction getSearchResults(item: PerplexityOutputItem) {\n return item.type === 'search_results' ? (item.results ?? []) : [];\n}\n\nfunction getFetchedSources(item: PerplexityOutputItem) {\n return item.type === 'fetch_url_results' ? (item.contents ?? []) : [];\n}\n\nexport class PerplexityLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n readonly provider = 'perplexity';\n\n readonly modelId: PerplexityLanguageModelId;\n\n private readonly config: PerplexityAgentConfig;\n\n static [WORKFLOW_SERIALIZE](model: PerplexityLanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: PerplexityLanguageModelId;\n config: PerplexityAgentConfig;\n }) {\n return new PerplexityLanguageModel(options.modelId, options.config);\n }\n\n constructor(\n modelId: PerplexityLanguageModelId,\n config: PerplexityAgentConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n 'image/*': [/^https?:\\/\\/.*$/],\n };\n\n private async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n reasoning,\n responseFormat,\n seed,\n providerOptions,\n tools,\n toolChoice,\n }: LanguageModelV4CallOptions) {\n const warnings: SharedV4Warning[] = [];\n\n const perplexityOptions =\n (await parseProviderOptions({\n provider: 'perplexity',\n providerOptions,\n schema: perplexityLanguageModelOptions,\n })) ?? {};\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n if (frequencyPenalty != null) {\n warnings.push({ type: 'unsupported', feature: 'frequencyPenalty' });\n }\n if (presencePenalty != null) {\n warnings.push({ type: 'unsupported', feature: 'presencePenalty' });\n }\n if (stopSequences != null) {\n warnings.push({ type: 'unsupported', feature: 'stopSequences' });\n }\n if (seed != null) {\n warnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n const { tools: nativeTools, ...agentOptions } = perplexityOptions;\n\n const modelSelection = getModelSelection(this.modelId);\n\n const { input, warnings: inputWarnings } = convertToPerplexityInput(prompt);\n warnings.push(...inputWarnings);\n\n const { tools: functionTools, warnings: toolWarnings } =\n preparePerplexityTools({ tools, toolChoice });\n warnings.push(...toolWarnings);\n\n const agentTools = [\n ...((nativeTools ?? []) as PerplexityAgentTool[]),\n ...functionTools,\n ];\n\n let reasoningConfig = agentOptions.reasoning;\n if (reasoningConfig == null && isCustomReasoning(reasoning)) {\n if (reasoning === 'none') {\n warnings.push({\n type: 'unsupported',\n feature: 'reasoning \"none\"',\n });\n } else {\n reasoningConfig = { effort: reasoning };\n }\n }\n\n const body: Record<string, unknown> = {\n ...agentOptions,\n ...modelSelection,\n input,\n max_output_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n reasoning: reasoningConfig,\n response_format:\n responseFormat?.type === 'json' && responseFormat.schema != null\n ? {\n type: 'json_schema',\n json_schema: {\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n schema: responseFormat.schema,\n strict: true,\n },\n }\n : undefined,\n tools: agentTools.length > 0 ? agentTools : undefined,\n };\n\n if (responseFormat?.type === 'json' && responseFormat.schema == null) {\n warnings.push({\n type: 'unsupported',\n feature: 'JSON response format without a schema',\n });\n }\n\n return { args: body, warnings };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { args: body, warnings } = await this.getArgs(options);\n\n const url = `${this.config.baseURL}/v1/agent`;\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url,\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage: perplexityErrorToMessage,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n perplexityAgentResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n if (response.error != null || response.status === 'failed') {\n throw new APICallError({\n message: response.error?.message ?? 'Perplexity response failed',\n url,\n requestBodyValues: body,\n statusCode: 400,\n responseHeaders,\n responseBody: rawResponse as string,\n isRetryable: false,\n });\n }\n\n const content: LanguageModelV4Content[] = [];\n const sourceIndexesByUrl = new Map<string, number>();\n let hasFunctionCall = false;\n\n const addSource = (source: PerplexityUrlSource) => {\n const existingIndex = sourceIndexesByUrl.get(source.url);\n if (existingIndex == null) {\n sourceIndexesByUrl.set(source.url, content.length);\n content.push(source);\n } else if (\n hasSearchResultId(source) &&\n !hasSearchResultId(content[existingIndex] as PerplexityUrlSource)\n ) {\n content[existingIndex] = source;\n }\n };\n\n for (const item of response.output) {\n if (item.type === 'message') {\n for (const part of item.content ?? []) {\n if (part.type === 'output_text' && part.text != null) {\n content.push({ type: 'text', text: part.text });\n }\n for (const annotation of part.annotations ?? []) {\n if (annotation.url != null) {\n addSource({\n type: 'source',\n sourceType: 'url',\n id: this.config.generateId(),\n url: annotation.url,\n title: annotation.title,\n });\n }\n }\n }\n } else if (item.type === 'search_results') {\n for (const result of getSearchResults(item)) {\n addSource(createSource(result, this.config.generateId));\n }\n } else if (item.type === 'fetch_url_results') {\n for (const result of getFetchedSources(item)) {\n addSource({\n type: 'source',\n sourceType: 'url',\n id: this.config.generateId(),\n url: result.url,\n title: result.title,\n providerMetadata: {\n perplexity: { snippet: result.snippet ?? null },\n },\n });\n }\n } else if (\n item.type === 'function_call' &&\n item.call_id != null &&\n item.name != null &&\n item.arguments != null\n ) {\n hasFunctionCall = true;\n content.push({\n type: 'tool-call',\n toolCallId: item.call_id,\n toolName: item.name,\n input: item.arguments,\n providerMetadata: {\n perplexity: {\n itemId: item.id ?? null,\n ...(item.thought_signature != null && {\n thoughtSignature: item.thought_signature,\n }),\n },\n },\n });\n }\n }\n\n const finishReason = response.incomplete_details?.reason ?? response.status;\n\n return {\n content,\n finishReason: {\n unified: mapPerplexityFinishReason({\n status: response.status,\n incompleteReason: response.incomplete_details?.reason,\n hasFunctionCall,\n }),\n raw: finishReason,\n },\n usage: convertPerplexityUsage(response.usage),\n request: { body },\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse,\n },\n warnings,\n providerMetadata: getProviderMetadata(response.usage),\n };\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { args, warnings } = await this.getArgs(options);\n const body = { ...args, stream: true };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/v1/agent`,\n headers: combineHeaders(this.config.headers?.(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage: perplexityErrorToMessage,\n }),\n successfulResponseHandler: createEventSourceResponseHandler(\n perplexityAgentChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let finishReason: LanguageModelV4FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: PerplexityUsage | undefined;\n let hasFunctionCall = false;\n let hasResponseMetadata = false;\n let activeReasoningId: string | undefined;\n const textStates = new Map<string, { text: string; ended: boolean }>();\n const emittedSourceUrls = new Set<string>();\n const pendingSourcesByUrl = new Map<string, PerplexityUrlSource>();\n const seenFunctionCalls = new Set<string>();\n const generateId = this.config.generateId;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof perplexityAgentChunkSchema>>,\n LanguageModelV4StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n 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\n const getTextId = (\n itemId: string | null | undefined,\n outputIndex: number | null | undefined,\n contentIndex: number | null | undefined = 0,\n ) => {\n const id = itemId ?? String(outputIndex ?? 'text');\n return contentIndex == null || contentIndex === 0\n ? id\n : `${id}:${contentIndex}`;\n };\n\n const emitTextDelta = (id: string, delta: string) => {\n let state = textStates.get(id);\n if (state?.ended) {\n return;\n }\n if (state == null) {\n state = { text: '', ended: false };\n textStates.set(id, state);\n controller.enqueue({ type: 'text-start', id });\n }\n state.text += delta;\n controller.enqueue({ type: 'text-delta', id, delta });\n };\n\n const finishText = (\n id: string,\n text: string | null | undefined,\n ) => {\n const state = textStates.get(id);\n if (state?.ended) {\n return;\n }\n // Terminal output can contain text for which no delta arrived,\n // or the remainder of a partially streamed content part.\n const emittedText = state?.text ?? '';\n if (\n text != null &&\n text.startsWith(emittedText) &&\n text.length > emittedText.length\n ) {\n emitTextDelta(id, text.slice(emittedText.length));\n }\n const finalState = textStates.get(id);\n if (finalState != null) {\n finalState.ended = true;\n controller.enqueue({ type: 'text-end', id });\n }\n };\n\n const finishOutputText = (\n item: PerplexityOutputItem,\n outputIndex?: number | null,\n ) => {\n if (item.type === 'message') {\n for (const [contentIndex, part] of (\n item.content ?? []\n ).entries()) {\n if (part.type === 'output_text') {\n finishText(\n getTextId(item.id, outputIndex, contentIndex),\n part.text,\n );\n }\n }\n }\n };\n\n const emitSource = (source: PerplexityUrlSource) => {\n if (emittedSourceUrls.has(source.url)) {\n return;\n }\n\n if (hasSearchResultId(source)) {\n pendingSourcesByUrl.delete(source.url);\n emittedSourceUrls.add(source.url);\n controller.enqueue(source);\n } else if (!pendingSourcesByUrl.has(source.url)) {\n // A later search result can supply the citation ID. Delay\n // sources without one rather than emitting a duplicate update.\n pendingSourcesByUrl.set(source.url, source);\n }\n };\n\n const emitReasoningThought = (\n thought: string | null | undefined,\n ) => {\n if (activeReasoningId != null && thought != null) {\n controller.enqueue({\n type: 'reasoning-delta',\n id: activeReasoningId,\n delta: thought,\n });\n }\n };\n\n const emitFunctionCall = (item: PerplexityOutputItem) => {\n if (\n item.type !== 'function_call' ||\n item.call_id == null ||\n item.name == null ||\n item.arguments == null ||\n seenFunctionCalls.has(item.call_id)\n ) {\n return;\n }\n seenFunctionCalls.add(item.call_id);\n hasFunctionCall = true;\n controller.enqueue({\n type: 'tool-input-start',\n id: item.call_id,\n toolName: item.name,\n });\n controller.enqueue({\n type: 'tool-input-delta',\n id: item.call_id,\n delta: item.arguments,\n });\n controller.enqueue({ type: 'tool-input-end', id: item.call_id });\n controller.enqueue({\n type: 'tool-call',\n toolCallId: item.call_id,\n toolName: item.name,\n input: item.arguments,\n providerMetadata: {\n perplexity: {\n itemId: item.id ?? null,\n ...(item.thought_signature != null && {\n thoughtSignature: item.thought_signature,\n }),\n },\n },\n });\n };\n\n const emitOutputSources = (item: PerplexityOutputItem) => {\n if (item.type === 'message') {\n for (const part of item.content ?? []) {\n for (const annotation of part.annotations ?? []) {\n if (annotation.url != null) {\n emitSource({\n type: 'source',\n sourceType: 'url',\n id: generateId(),\n url: annotation.url,\n title: annotation.title,\n });\n }\n }\n }\n }\n for (const result of getSearchResults(item)) {\n emitSource(createSource(result, generateId));\n }\n for (const result of getFetchedSources(item)) {\n emitSource({\n type: 'source',\n sourceType: 'url',\n id: generateId(),\n url: result.url,\n title: result.title,\n providerMetadata: {\n perplexity: { snippet: result.snippet ?? null },\n },\n });\n }\n };\n\n switch (value.type) {\n case 'response.created':\n case 'response.in_progress': {\n if (!hasResponseMetadata && value.response != null) {\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value.response),\n });\n hasResponseMetadata = true;\n }\n break;\n }\n\n case 'response.output_text.delta': {\n if (value.delta != null) {\n emitTextDelta(\n getTextId(\n value.item_id,\n value.output_index,\n value.content_index,\n ),\n value.delta,\n );\n }\n break;\n }\n\n case 'response.output_text.done': {\n finishText(\n getTextId(\n value.item_id,\n value.output_index,\n value.content_index,\n ),\n value.text,\n );\n break;\n }\n\n case 'response.reasoning.started': {\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n }\n activeReasoningId = `reasoning-${\n value.sequence_number ?? generateId()\n }`;\n controller.enqueue({\n type: 'reasoning-start',\n id: activeReasoningId,\n });\n emitReasoningThought(value.thought);\n break;\n }\n\n case 'response.reasoning.search_queries':\n case 'response.reasoning.fetch_url_queries': {\n emitReasoningThought(value.thought);\n break;\n }\n\n case 'response.reasoning.search_results': {\n emitReasoningThought(value.thought);\n for (const result of value.results ?? []) {\n emitSource(createSource(result, generateId));\n }\n break;\n }\n\n case 'response.reasoning.fetch_url_results': {\n emitReasoningThought(value.thought);\n for (const result of value.contents ?? []) {\n emitSource({\n type: 'source',\n sourceType: 'url',\n id: generateId(),\n url: result.url,\n title: result.title,\n providerMetadata: {\n perplexity: { snippet: result.snippet ?? null },\n },\n });\n }\n break;\n }\n\n case 'response.reasoning.stopped': {\n emitReasoningThought(value.thought);\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n activeReasoningId = undefined;\n }\n break;\n }\n\n case 'response.output_item.done': {\n if (value.item != null) {\n finishOutputText(value.item, value.output_index);\n emitOutputSources(value.item);\n emitFunctionCall(value.item);\n }\n break;\n }\n\n case 'response.completed':\n case 'response.incomplete': {\n if (value.response != null) {\n if (!hasResponseMetadata) {\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value.response),\n });\n hasResponseMetadata = true;\n }\n for (const [\n outputIndex,\n item,\n ] of value.response.output.entries()) {\n finishOutputText(item, outputIndex);\n emitOutputSources(item);\n emitFunctionCall(item);\n }\n usage = value.response.usage ?? undefined;\n const rawFinishReason =\n value.response.incomplete_details?.reason ??\n value.response.status;\n finishReason = {\n unified: mapPerplexityFinishReason({\n status: value.response.status,\n incompleteReason:\n value.response.incomplete_details?.reason,\n hasFunctionCall,\n }),\n raw: rawFinishReason,\n };\n }\n break;\n }\n\n case 'response.failed': {\n finishReason = { unified: 'error', raw: 'failed' };\n controller.enqueue({\n type: 'error',\n error: value.error ?? new Error('Perplexity response failed'),\n });\n break;\n }\n }\n },\n\n flush(controller) {\n for (const source of pendingSourcesByUrl.values()) {\n controller.enqueue(source);\n }\n if (activeReasoningId != null) {\n controller.enqueue({\n type: 'reasoning-end',\n id: activeReasoningId,\n });\n }\n for (const [id, state] of textStates) {\n if (!state.ended) {\n controller.enqueue({ type: 'text-end', id });\n }\n }\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertPerplexityUsage(usage),\n providerMetadata: getProviderMetadata(usage),\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n\nexport {\n perplexityErrorSchema,\n perplexityErrorToMessage,\n} from './perplexity-agent-api';\nexport type { PerplexityErrorData } from './perplexity-agent-api';\n","import type { JSONObject, LanguageModelV4Usage } from '@ai-sdk/provider';\nimport { createNullLanguageModelUsage } from '@ai-sdk/provider-utils';\n\nexport function convertPerplexityUsage(\n usage:\n | {\n input_tokens?: number | null;\n output_tokens?: number | null;\n total_tokens?: number | null;\n input_tokens_details?: {\n cached_tokens?: number | null;\n cache_creation_input_tokens?: number | null;\n cache_read_input_tokens?: number | null;\n } | null;\n output_tokens_details?: {\n reasoning_tokens?: number | null;\n } | null;\n [key: string]: unknown;\n }\n | undefined\n | null,\n): LanguageModelV4Usage {\n if (usage == null) {\n return createNullLanguageModelUsage();\n }\n\n const inputTokens = usage.input_tokens ?? 0;\n const outputTokens = usage.output_tokens ?? 0;\n const cacheReadTokens =\n usage.input_tokens_details?.cache_read_input_tokens ??\n usage.input_tokens_details?.cached_tokens ??\n 0;\n const cacheWriteTokens =\n usage.input_tokens_details?.cache_creation_input_tokens ?? 0;\n const reasoningTokens = usage.output_tokens_details?.reasoning_tokens ?? 0;\n\n return {\n inputTokens: {\n total: inputTokens,\n noCache: Math.max(0, inputTokens - cacheReadTokens - cacheWriteTokens),\n cacheRead: cacheReadTokens,\n cacheWrite: cacheWriteTokens,\n },\n outputTokens: {\n total: outputTokens,\n text: Math.max(0, outputTokens - reasoningTokens),\n reasoning: reasoningTokens,\n },\n raw: usage as JSONObject,\n };\n}\n","import {\n UnsupportedFunctionalityError,\n type LanguageModelV4Prompt,\n type LanguageModelV4ToolResultOutput,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n convertUint8ArrayToBase64,\n getTopLevelMediaType,\n resolveFullMediaType,\n} from '@ai-sdk/provider-utils';\nimport type {\n PerplexityAgentInput,\n PerplexityAgentInputContent,\n} from './perplexity-language-model-prompt';\n\nfunction serializeToolOutput(output: LanguageModelV4ToolResultOutput): string {\n switch (output.type) {\n case 'text':\n case 'error-text':\n return output.value;\n case 'json':\n case 'error-json':\n return JSON.stringify(output.value);\n case 'execution-denied':\n return output.reason ?? 'Tool call execution denied.';\n case 'content': {\n if (output.value.some(part => part.type !== 'text')) {\n throw new UnsupportedFunctionalityError({\n functionality: 'file and custom tool result content',\n });\n }\n return output.value\n .map(part => (part.type === 'text' ? part.text : ''))\n .join('');\n }\n default: {\n const _exhaustiveCheck: never = output;\n throw new Error(`Unsupported tool output: ${_exhaustiveCheck}`);\n }\n }\n}\n\nfunction getThoughtSignature(\n providerOptions:\n | Record<string, Record<string, unknown> | undefined>\n | undefined,\n): string | undefined {\n const thoughtSignature = providerOptions?.perplexity?.thoughtSignature;\n return typeof thoughtSignature === 'string' ? thoughtSignature : undefined;\n}\n\nexport function convertToPerplexityInput(prompt: LanguageModelV4Prompt): {\n input: PerplexityAgentInput;\n warnings: SharedV4Warning[];\n} {\n const input: PerplexityAgentInput = [];\n const warnings: SharedV4Warning[] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n input.push({ type: 'message', role: 'system', content });\n break;\n }\n\n case 'user': {\n const convertedContent: PerplexityAgentInputContent[] = content.map(\n part => {\n switch (part.type) {\n case 'text':\n return { type: 'input_text', text: part.text };\n case 'file': {\n if (getTopLevelMediaType(part.mediaType) !== 'image') {\n throw new UnsupportedFunctionalityError({\n functionality: `file part media type ${part.mediaType}`,\n });\n }\n\n switch (part.data.type) {\n case 'url':\n return {\n type: 'input_image',\n image_url: part.data.url.toString(),\n };\n case 'data':\n return {\n type: 'input_image',\n image_url: `data:${resolveFullMediaType({ part })};base64,${\n typeof part.data.data === 'string'\n ? part.data.data\n : convertUint8ArrayToBase64(part.data.data)\n }`,\n };\n case 'reference':\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n case 'text':\n throw new UnsupportedFunctionalityError({\n functionality: 'text file parts',\n });\n }\n }\n }\n },\n );\n\n const isTextOnly = convertedContent.every(\n part => part.type === 'input_text',\n );\n input.push({\n type: 'message',\n role: 'user',\n content: isTextOnly\n ? convertedContent\n .map(part => (part.type === 'input_text' ? part.text : ''))\n .join('')\n : convertedContent,\n });\n break;\n }\n\n case 'assistant': {\n const text = content\n .filter(part => part.type === 'text')\n .map(part => part.text)\n .join('');\n\n if (text.length > 0) {\n input.push({ type: 'message', role: 'assistant', content: text });\n }\n\n for (const part of content) {\n switch (part.type) {\n case 'text':\n break;\n case 'tool-call':\n input.push({\n type: 'function_call',\n call_id: part.toolCallId,\n name: part.toolName,\n arguments: JSON.stringify(part.input ?? {}),\n thought_signature: getThoughtSignature(part.providerOptions),\n });\n break;\n case 'tool-result':\n input.push({\n type: 'function_call_output',\n call_id: part.toolCallId,\n name: part.toolName,\n output: serializeToolOutput(part.output),\n thought_signature: getThoughtSignature(part.providerOptions),\n });\n break;\n case 'reasoning':\n warnings.push({\n type: 'unsupported',\n feature: 'reasoning content in prompt',\n });\n break;\n case 'file':\n case 'reasoning-file':\n case 'custom':\n throw new UnsupportedFunctionalityError({\n functionality: `assistant ${part.type} parts`,\n });\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(\n `Unsupported assistant part: ${_exhaustiveCheck}`,\n );\n }\n }\n }\n break;\n }\n\n case 'tool': {\n for (const part of content) {\n if (part.type === 'tool-approval-response') {\n throw new UnsupportedFunctionalityError({\n functionality: 'tool approval responses',\n });\n }\n\n input.push({\n type: 'function_call_output',\n call_id: part.toolCallId,\n name: part.toolName,\n output: serializeToolOutput(part.output),\n thought_signature: getThoughtSignature(part.providerOptions),\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return { input, warnings };\n}\n","import type { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapPerplexityFinishReason({\n status,\n incompleteReason,\n hasFunctionCall,\n}: {\n status: string | null | undefined;\n incompleteReason: string | null | undefined;\n hasFunctionCall: boolean;\n}): LanguageModelV4FinishReason['unified'] {\n switch (incompleteReason) {\n case 'max_output_tokens':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n }\n\n switch (status) {\n case 'completed':\n return hasFunctionCall ? 'tool-calls' : 'stop';\n case 'requires_action':\n return 'tool-calls';\n case 'failed':\n return 'error';\n case 'cancelled':\n case 'queued':\n case 'in_progress':\n default:\n return hasFunctionCall ? 'tool-calls' : 'other';\n }\n}\n","import type { JSONSchema7 } from '@ai-sdk/provider';\nimport { z } from 'zod/v4';\n\nexport type PerplexityAgentTool =\n | {\n type: 'function';\n name: string;\n description?: string;\n parameters: JSONSchema7;\n strict?: boolean;\n }\n | ({ type: string } & Record<string, unknown>);\n\nexport const perplexitySearchResultSchema = z.looseObject({\n id: z.number().optional(),\n title: z.string(),\n url: z.string(),\n snippet: z.string().optional(),\n date: z.string().nullish(),\n last_updated: z.string().nullish(),\n source: z.string().optional(),\n});\n\nconst perplexityFetchedContentSchema = z.looseObject({\n title: z.string(),\n url: z.string(),\n snippet: z.string().optional(),\n});\n\nconst perplexityContentPartSchema = z.looseObject({\n type: z.string(),\n text: z.string().optional(),\n annotations: z\n .array(\n z.looseObject({\n type: z.string().optional(),\n url: z.string().optional(),\n title: z.string().optional(),\n }),\n )\n .nullish(),\n});\n\nconst handledOutputTypes = [\n 'message',\n 'search_results',\n 'fetch_url_results',\n 'function_call',\n];\n\nexport const perplexityOutputItemSchema = z.union([\n z.looseObject({\n type: z.literal('message'),\n id: z.string().nullish(),\n content: z.array(perplexityContentPartSchema).nullish(),\n }),\n z.looseObject({\n type: z.literal('search_results'),\n results: z.array(perplexitySearchResultSchema).nullish(),\n }),\n z.looseObject({\n type: z.literal('fetch_url_results'),\n contents: z.array(perplexityFetchedContentSchema).nullish(),\n }),\n z.looseObject({\n type: z.literal('function_call'),\n id: z.string().nullish(),\n call_id: z.string().nullish(),\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n thought_signature: z.string().nullish(),\n }),\n // Native tool traces remain available in raw responses and raw stream chunks.\n // Their fields (e.g. finance_results.results) have different shapes. Do not\n // validate them as search results, or let malformed handled items fall back.\n z\n .object({\n type: z.string().refine(type => !handledOutputTypes.includes(type)),\n })\n .transform(() => ({ type: 'unhandled' as const })),\n]);\n\nconst perplexityCostSchema = z.looseObject({\n currency: z.string().optional(),\n input_cost: z.number().optional(),\n output_cost: z.number().optional(),\n total_cost: z.number().optional(),\n cache_creation_cost: z.number().nullish(),\n cache_read_cost: z.number().nullish(),\n tool_calls_cost: z.number().nullish(),\n});\n\nexport const perplexityUsageSchema = z.looseObject({\n input_tokens: z.number(),\n output_tokens: z.number(),\n total_tokens: z.number(),\n input_tokens_details: z\n .looseObject({\n cached_tokens: z.number().optional(),\n cache_creation_input_tokens: z.number().optional(),\n cache_read_input_tokens: z.number().optional(),\n })\n .nullish(),\n output_tokens_details: z\n .looseObject({\n reasoning_tokens: z.number().optional(),\n })\n .nullish(),\n tool_calls_details: z\n .record(\n z.string(),\n z.looseObject({\n invocation: z.number().optional(),\n }),\n )\n .nullish(),\n cost: perplexityCostSchema.nullish(),\n});\n\nexport const perplexityAgentResponseSchema = z.looseObject({\n id: z.string(),\n created_at: z.number(),\n model: z.string(),\n object: z.literal('response'),\n output: z.array(perplexityOutputItemSchema),\n status: z.string(),\n incomplete_details: z\n .looseObject({\n reason: z.string(),\n })\n .nullish(),\n error: z\n .looseObject({\n code: z.string().optional(),\n message: z.string(),\n type: z.string().optional(),\n })\n .nullish(),\n usage: perplexityUsageSchema.nullish(),\n});\n\nexport const perplexityAgentChunkSchema = z.looseObject({\n type: z.string(),\n sequence_number: z.number().nullish(),\n response: perplexityAgentResponseSchema.nullish(),\n item: perplexityOutputItemSchema.nullish(),\n output_index: z.number().nullish(),\n item_id: z.string().nullish(),\n content_index: z.number().nullish(),\n delta: z.string().nullish(),\n text: z.string().nullish(),\n thought: z.string().nullish(),\n queries: z.array(z.string()).nullish(),\n urls: z.array(z.string()).nullish(),\n results: z.array(perplexitySearchResultSchema).nullish(),\n contents: z.array(perplexityFetchedContentSchema).nullish(),\n error: z\n .looseObject({\n code: z.string().nullish(),\n message: z.string(),\n type: z.string().nullish(),\n })\n .nullish(),\n});\n\nexport const perplexityErrorSchema = z.looseObject({\n error: z\n .union([\n z.string(),\n z.looseObject({\n code: z.union([z.string(), z.number()]).optional(),\n message: z.string().nullish(),\n type: z.string().nullish(),\n }),\n ])\n .optional(),\n detail: z\n .union([\n z.string(),\n z.array(\n z.looseObject({\n msg: z.string(),\n }),\n ),\n ])\n .optional(),\n message: z.string().optional(),\n});\n\nexport type PerplexityErrorData = z.infer<typeof perplexityErrorSchema>;\n\nexport function perplexityErrorToMessage(data: PerplexityErrorData): string {\n if (typeof data.error === 'string') {\n return data.error;\n }\n if (data.error != null) {\n return data.error.message ?? data.error.type ?? 'unknown error';\n }\n if (typeof data.detail === 'string') {\n return data.detail;\n }\n if (Array.isArray(data.detail)) {\n return data.detail.map(detail => detail.msg).join(', ');\n }\n return data.message ?? 'unknown error';\n}\n","import { z } from 'zod/v4';\n\nconst userLocationSchema = z.looseObject({\n latitude: z.number().optional(),\n longitude: z.number().optional(),\n country: z.string().optional(),\n city: z.string().optional(),\n region: z.string().optional(),\n});\n\nconst webSearchFiltersSchema = z.looseObject({\n search_domain_filter: z.array(z.string()).optional(),\n search_recency_filter: z\n .enum(['hour', 'day', 'week', 'month', 'year'])\n .optional(),\n search_after_date_filter: z.string().optional(),\n search_before_date_filter: z.string().optional(),\n last_updated_after_filter: z.string().optional(),\n last_updated_before_filter: z.string().optional(),\n});\n\nconst webSearchToolSchema = z.looseObject({\n type: z.literal('web_search'),\n filters: webSearchFiltersSchema.optional(),\n max_results: z.number().int().positive().optional(),\n max_tokens: z.number().optional(),\n max_tokens_per_page: z.number().optional(),\n search_context_size: z.enum(['low', 'medium', 'high']).optional(),\n user_location: userLocationSchema.optional(),\n});\n\nconst nativeToolSchema = z.union([\n webSearchToolSchema,\n z.looseObject({\n type: z.literal('fetch_url'),\n max_urls: z.number().optional(),\n }),\n z.looseObject({ type: z.literal('people_search') }),\n z.looseObject({ type: z.literal('finance_search') }),\n z.looseObject({ type: z.literal('sandbox') }),\n z.looseObject({\n type: z.literal('mcp'),\n server_label: z.string(),\n server_url: z.string(),\n allowed_tools: z.array(z.string()).optional(),\n authorization: z.string().optional(),\n defer_loading: z.boolean().optional(),\n headers: z.record(z.string(), z.string()).optional(),\n }),\n z.looseObject({\n type: z.literal('connector'),\n id: z.string(),\n server_label: z.string(),\n server_description: z.string().optional(),\n allowed_tools: z.array(z.string()).optional(),\n }),\n]);\n\nexport const perplexityLanguageModelOptions = z.looseObject({\n /** Top-level Agent API instructions. */\n instructions: z.string().optional(),\n\n /**\n * Native Agent API tools. AI SDK function tools can also be supplied through\n * the top-level `tools` option on `generateText` and `streamText`.\n */\n tools: z.array(nativeToolSchema).optional(),\n\n /** A fallback model list for Agent API routing. */\n models: z.array(z.string()).optional(),\n\n /** Maximum number of agentic steps. */\n max_steps: z.number().int().positive().optional(),\n\n /** Maximum number of native tool calls. */\n max_tool_calls: z.number().int().nonnegative().optional(),\n\n /** Continue a conversation from an earlier Agent API response. */\n previous_response_id: z.string().optional(),\n\n /**\n * Whether the response can be retrieved later. Setting this to false does\n * not disable persistence or prevent previous_response_id continuations.\n */\n store: z.boolean().optional(),\n\n /** Preferred response language as an ISO 639-1 language code. */\n language_preference: z.string().optional(),\n\n /** Agent API reasoning configuration. */\n reasoning: z\n .looseObject({\n effort: z.enum(['minimal', 'low', 'medium', 'high', 'xhigh']).optional(),\n })\n .optional(),\n\n /** Agent API skill configuration. */\n skills: z\n .array(\n z.union([\n z.looseObject({\n type: z.literal('builtin'),\n name: z.enum([\n 'office',\n 'office/docx',\n 'office/pdf',\n 'office/pptx',\n 'office/xlsx',\n ]),\n }),\n z.looseObject({\n type: z.literal('inline'),\n name: z.string(),\n description: z.string(),\n instructions: z.string(),\n }),\n ]),\n )\n .optional(),\n});\n\nexport type PerplexityLanguageModelOptions = z.infer<\n typeof perplexityLanguageModelOptions\n>;\n","import type {\n LanguageModelV4CallOptions,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { PerplexityAgentTool } from './perplexity-agent-api';\n\nexport function preparePerplexityTools({\n tools,\n toolChoice,\n}: {\n tools: LanguageModelV4CallOptions['tools'];\n toolChoice: LanguageModelV4CallOptions['toolChoice'];\n}): {\n tools: PerplexityAgentTool[];\n warnings: SharedV4Warning[];\n} {\n const preparedTools: PerplexityAgentTool[] = [];\n const warnings: SharedV4Warning[] = [];\n\n for (const tool of tools ?? []) {\n if (tool.type === 'provider') {\n warnings.push({\n type: 'unsupported',\n feature: `provider-defined tool ${tool.name}`,\n });\n continue;\n }\n\n preparedTools.push({\n type: 'function',\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n strict: tool.strict,\n });\n }\n\n if (toolChoice != null && toolChoice.type !== 'auto') {\n warnings.push({\n type: 'unsupported',\n feature: 'toolChoice',\n details:\n 'The Perplexity Agent API currently selects tools automatically.',\n });\n }\n\n return { tools: preparedTools, warnings };\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":["combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","parseProviderOptions","postJsonToApi","serializeModelOptions","WORKFLOW_DESERIALIZE","WORKFLOW_SERIALIZE","z","z","z","generateId","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","parseProviderOptions","postJsonToApi","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","z"]}
@@ -70,8 +70,13 @@ const { text } = await generateText({
70
70
  ```
71
71
 
72
72
  The Agent API provides the `fast`, `low`, `medium`, `high`, and `xhigh`
73
- presets. You can also pass an Agent API model ID directly, such as
74
- `perplexity/sonar`.
73
+ presets. To select a model directly, pass its Agent API model ID, for example
74
+ `perplexity('perplexity/sonar')`.
75
+
76
+ These examples call Perplexity directly using `PERPLEXITY_API_KEY`. Passing a
77
+ plain model string such as `model: 'perplexity/sonar'` to `generateText` or
78
+ `streamText` uses the [AI Gateway](/providers/ai-sdk-providers/ai-gateway),
79
+ which has its own model catalog and authentication.
75
80
 
76
81
  Version 5 uses the Agent API exclusively. Legacy Sonar model IDs and provider
77
82
  options are not mapped; see [Migrating from v4 Sonar to v5 Agent
@@ -281,11 +286,11 @@ parts are not supported.
281
286
  options, or emit migration warnings at runtime.
282
287
  </Note>
283
288
 
284
- <Warning>
289
+ <Note type="warning">
285
290
  Perplexity supports Sonar Chat Completions only until September 27, 2026.
286
291
  Upgrade language-generation applications to the Agent API before that date;
287
292
  staying on version 4 does not preserve service after the Sonar shutdown.
288
- </Warning>
293
+ </Note>
289
294
 
290
295
  Replace each Sonar model ID with an Agent API preset or direct Agent API model
291
296
  ID. These presets are suggested starting points, not equivalent aliases: a
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/perplexity",
3
- "version": "5.0.0",
3
+ "version": "5.0.2",
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.18",
33
- "@ai-sdk/provider-utils": "5.0.49"
32
+ "@ai-sdk/provider": "4.0.19",
33
+ "@ai-sdk/provider-utils": "5.0.50"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@ai-sdk/test-server": "2.0.2",
@@ -141,26 +141,26 @@ export const perplexityAgentResponseSchema = z.looseObject({
141
141
 
142
142
  export const perplexityAgentChunkSchema = z.looseObject({
143
143
  type: z.string(),
144
- sequence_number: z.number().optional(),
145
- response: perplexityAgentResponseSchema.optional(),
146
- item: perplexityOutputItemSchema.optional(),
147
- output_index: z.number().optional(),
148
- item_id: z.string().optional(),
149
- content_index: z.number().optional(),
150
- delta: z.string().optional(),
151
- text: z.string().optional(),
152
- thought: z.string().optional(),
153
- queries: z.array(z.string()).optional(),
154
- urls: z.array(z.string()).optional(),
155
- results: z.array(perplexitySearchResultSchema).optional(),
156
- contents: z.array(perplexityFetchedContentSchema).optional(),
144
+ sequence_number: z.number().nullish(),
145
+ response: perplexityAgentResponseSchema.nullish(),
146
+ item: perplexityOutputItemSchema.nullish(),
147
+ output_index: z.number().nullish(),
148
+ item_id: z.string().nullish(),
149
+ content_index: z.number().nullish(),
150
+ delta: z.string().nullish(),
151
+ text: z.string().nullish(),
152
+ thought: z.string().nullish(),
153
+ queries: z.array(z.string()).nullish(),
154
+ urls: z.array(z.string()).nullish(),
155
+ results: z.array(perplexitySearchResultSchema).nullish(),
156
+ contents: z.array(perplexityFetchedContentSchema).nullish(),
157
157
  error: z
158
158
  .looseObject({
159
- code: z.string().optional(),
159
+ code: z.string().nullish(),
160
160
  message: z.string(),
161
- type: z.string().optional(),
161
+ type: z.string().nullish(),
162
162
  })
163
- .optional(),
163
+ .nullish(),
164
164
  });
165
165
 
166
166
  export const perplexityErrorSchema = z.looseObject({
@@ -504,11 +504,13 @@ export class PerplexityLanguageModel implements LanguageModelV4 {
504
504
 
505
505
  const getTextId = (
506
506
  itemId: string | null | undefined,
507
- outputIndex: number | undefined,
508
- contentIndex = 0,
507
+ outputIndex: number | null | undefined,
508
+ contentIndex: number | null | undefined = 0,
509
509
  ) => {
510
510
  const id = itemId ?? String(outputIndex ?? 'text');
511
- return contentIndex === 0 ? id : `${id}:${contentIndex}`;
511
+ return contentIndex == null || contentIndex === 0
512
+ ? id
513
+ : `${id}:${contentIndex}`;
512
514
  };
513
515
 
514
516
  const emitTextDelta = (id: string, delta: string) => {
@@ -525,7 +527,10 @@ export class PerplexityLanguageModel implements LanguageModelV4 {
525
527
  controller.enqueue({ type: 'text-delta', id, delta });
526
528
  };
527
529
 
528
- const finishText = (id: string, text: string | undefined) => {
530
+ const finishText = (
531
+ id: string,
532
+ text: string | null | undefined,
533
+ ) => {
529
534
  const state = textStates.get(id);
530
535
  if (state?.ended) {
531
536
  return;
@@ -549,7 +554,7 @@ export class PerplexityLanguageModel implements LanguageModelV4 {
549
554
 
550
555
  const finishOutputText = (
551
556
  item: PerplexityOutputItem,
552
- outputIndex?: number,
557
+ outputIndex?: number | null,
553
558
  ) => {
554
559
  if (item.type === 'message') {
555
560
  for (const [contentIndex, part] of (
@@ -581,7 +586,9 @@ export class PerplexityLanguageModel implements LanguageModelV4 {
581
586
  }
582
587
  };
583
588
 
584
- const emitReasoningThought = (thought: string | undefined) => {
589
+ const emitReasoningThought = (
590
+ thought: string | null | undefined,
591
+ ) => {
585
592
  if (activeReasoningId != null && thought != null) {
586
593
  controller.enqueue({
587
594
  type: 'reasoning-delta',