@ai-sdk/perplexity 3.0.9 → 3.0.10

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,11 @@
1
1
  # @ai-sdk/perplexity
2
2
 
3
+ ## 3.0.10
4
+
5
+ ### Patch Changes
6
+
7
+ - 2b8369d: chore: add docs to package dist
8
+
3
9
  ## 3.0.9
4
10
 
5
11
  ### Patch Changes
package/dist/index.js CHANGED
@@ -479,7 +479,7 @@ var errorToMessage = (data) => {
479
479
  };
480
480
 
481
481
  // src/version.ts
482
- var VERSION = true ? "3.0.9" : "0.0.0-test";
482
+ var VERSION = true ? "3.0.10" : "0.0.0-test";
483
483
 
484
484
  // src/perplexity-provider.ts
485
485
  function createPerplexity(options = {}) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/perplexity-provider.ts","../src/perplexity-language-model.ts","../src/convert-perplexity-usage.ts","../src/convert-to-perplexity-messages.ts","../src/map-perplexity-finish-reason.ts","../src/version.ts"],"sourcesContent":["export { createPerplexity, perplexity } from './perplexity-provider';\nexport type {\n PerplexityProvider,\n PerplexityProviderSettings,\n} from './perplexity-provider';\nexport { VERSION } from './version';\n","import {\n LanguageModelV3,\n NoSuchModelError,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { PerplexityLanguageModel } from './perplexity-language-model';\nimport { PerplexityLanguageModelId } from './perplexity-language-model-options';\nimport { VERSION } from './version';\n\nexport interface PerplexityProvider extends ProviderV3 {\n /**\nCreates an Perplexity chat model for text generation.\n */\n (modelId: PerplexityLanguageModelId): LanguageModelV3;\n\n /**\nCreates an Perplexity language model for text generation.\n */\n languageModel(modelId: PerplexityLanguageModelId): LanguageModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface PerplexityProviderSettings {\n /**\nBase URL for the perplexity API calls.\n */\n baseURL?: string;\n\n /**\nAPI key for authenticating requests.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor 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 createLanguageModel = (modelId: PerplexityLanguageModelId) => {\n return new PerplexityLanguageModel(modelId, {\n baseURL: withoutTrailingSlash(\n options.baseURL ?? 'https://api.perplexity.ai',\n )!,\n headers: getHeaders,\n generateId,\n fetch: options.fetch,\n });\n };\n\n const provider = (modelId: PerplexityLanguageModelId) =>\n createLanguageModel(modelId);\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createLanguageModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\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 LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n ParseResult,\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { convertPerplexityUsage } from './convert-perplexity-usage';\nimport { convertToPerplexityMessages } from './convert-to-perplexity-messages';\nimport { mapPerplexityFinishReason } from './map-perplexity-finish-reason';\nimport { PerplexityLanguageModelId } from './perplexity-language-model-options';\n\ntype PerplexityChatConfig = {\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n generateId: () => string;\n fetch?: FetchFunction;\n};\n\nexport class PerplexityLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n readonly provider = 'perplexity';\n\n readonly modelId: PerplexityLanguageModelId;\n\n private readonly config: PerplexityChatConfig;\n\n constructor(\n modelId: PerplexityLanguageModelId,\n config: PerplexityChatConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n // No URLs are supported.\n };\n\n private getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n providerOptions,\n }: LanguageModelV3CallOptions) {\n const warnings: SharedV3Warning[] = [];\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n if (stopSequences != null) {\n warnings.push({ type: 'unsupported', feature: 'stopSequences' });\n }\n\n if (seed != null) {\n warnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n return {\n args: {\n // model id:\n model: this.modelId,\n\n // standardized settings:\n frequency_penalty: frequencyPenalty,\n max_tokens: maxOutputTokens,\n presence_penalty: presencePenalty,\n temperature,\n top_k: topK,\n top_p: topP,\n\n // response format:\n response_format:\n responseFormat?.type === 'json'\n ? {\n type: 'json_schema',\n json_schema: { schema: responseFormat.schema },\n }\n : undefined,\n\n // provider extensions\n ...(providerOptions?.perplexity ?? {}),\n\n // messages:\n messages: convertToPerplexityMessages(prompt),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const { args: body, warnings } = this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n perplexityResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = response.choices[0];\n const content: Array<LanguageModelV3Content> = [];\n\n // text content:\n const text = choice.message.content;\n if (text.length > 0) {\n content.push({ type: 'text', text });\n }\n\n // sources:\n if (response.citations != null) {\n for (const url of response.citations) {\n content.push({\n type: 'source',\n sourceType: 'url',\n id: this.config.generateId(),\n url,\n });\n }\n }\n\n return {\n content,\n finishReason: {\n unified: mapPerplexityFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\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: {\n perplexity: {\n images:\n response.images?.map(image => ({\n imageUrl: image.image_url,\n originUrl: image.origin_url,\n height: image.height,\n width: image.width,\n })) ?? null,\n usage: {\n citationTokens: response.usage?.citation_tokens ?? null,\n numSearchQueries: response.usage?.num_search_queries ?? null,\n },\n },\n },\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const { args, warnings } = this.getArgs(options);\n\n const body = { ...args, stream: true };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage,\n }),\n successfulResponseHandler: createEventSourceResponseHandler(\n perplexityChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage:\n | {\n prompt_tokens: number | undefined;\n completion_tokens: number | undefined;\n reasoning_tokens?: number | null | undefined;\n }\n | undefined = undefined;\n\n const providerMetadata: {\n perplexity: {\n usage: {\n citationTokens: number | null;\n numSearchQueries: number | null;\n };\n images: Array<{\n imageUrl: string;\n originUrl: string;\n height: number;\n width: number;\n }> | null;\n };\n } = {\n perplexity: {\n usage: {\n citationTokens: null,\n numSearchQueries: null,\n },\n images: null,\n },\n };\n let isFirstChunk = true;\n let isActive = false;\n\n const self = this;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof perplexityChunkSchema>>,\n LanguageModelV3StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n // Emit raw chunk if requested (before anything else)\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n if (!chunk.success) {\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n if (isFirstChunk) {\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value),\n });\n\n value.citations?.forEach(url => {\n controller.enqueue({\n type: 'source',\n sourceType: 'url',\n id: self.config.generateId(),\n url,\n });\n });\n\n isFirstChunk = false;\n }\n\n if (value.usage != null) {\n usage = value.usage;\n\n providerMetadata.perplexity.usage = {\n citationTokens: value.usage.citation_tokens ?? null,\n numSearchQueries: value.usage.num_search_queries ?? null,\n };\n }\n\n if (value.images != null) {\n providerMetadata.perplexity.images = value.images.map(image => ({\n imageUrl: image.image_url,\n originUrl: image.origin_url,\n height: image.height,\n width: image.width,\n }));\n }\n\n const choice = value.choices[0];\n if (choice?.finish_reason != null) {\n finishReason = {\n unified: mapPerplexityFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n const textContent = delta.content;\n\n if (textContent != null) {\n if (!isActive) {\n controller.enqueue({ type: 'text-start', id: '0' });\n isActive = true;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: '0',\n delta: textContent,\n });\n }\n },\n\n flush(controller) {\n if (isActive) {\n controller.enqueue({ type: 'text-end', id: '0' });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertPerplexityUsage(usage),\n providerMetadata,\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n\nfunction getResponseMetadata({\n id,\n model,\n created,\n}: {\n id: string;\n created: number;\n model: string;\n}) {\n return {\n id,\n modelId: model,\n timestamp: new Date(created * 1000),\n };\n}\n\nconst perplexityUsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number().nullish(),\n citation_tokens: z.number().nullish(),\n num_search_queries: z.number().nullish(),\n reasoning_tokens: z.number().nullish(),\n});\n\nexport const perplexityImageSchema = z.object({\n image_url: z.string(),\n origin_url: z.string(),\n height: z.number(),\n width: z.number(),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst perplexityResponseSchema = z.object({\n id: z.string(),\n created: z.number(),\n model: z.string(),\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant'),\n content: z.string(),\n }),\n finish_reason: z.string().nullish(),\n }),\n ),\n citations: z.array(z.string()).nullish(),\n images: z.array(perplexityImageSchema).nullish(),\n usage: perplexityUsageSchema.nullish(),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst perplexityChunkSchema = z.object({\n id: z.string(),\n created: z.number(),\n model: z.string(),\n choices: z.array(\n z.object({\n delta: z.object({\n role: z.literal('assistant'),\n content: z.string(),\n }),\n finish_reason: z.string().nullish(),\n }),\n ),\n citations: z.array(z.string()).nullish(),\n images: z.array(perplexityImageSchema).nullish(),\n usage: perplexityUsageSchema.nullish(),\n});\n\nexport const perplexityErrorSchema = z.object({\n error: z.object({\n code: z.number(),\n message: z.string().nullish(),\n type: z.string().nullish(),\n }),\n});\n\nexport type PerplexityErrorData = z.infer<typeof perplexityErrorSchema>;\n\nconst errorToMessage = (data: PerplexityErrorData) => {\n return data.error.message ?? data.error.type ?? 'unknown error';\n};\n","import { LanguageModelV3Usage } from '@ai-sdk/provider';\n\nexport function convertPerplexityUsage(\n usage:\n | {\n prompt_tokens?: number | null | undefined;\n completion_tokens?: number | null | undefined;\n reasoning_tokens?: number | null | undefined;\n }\n | undefined\n | null,\n): LanguageModelV3Usage {\n if (usage == null) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n raw: undefined,\n };\n }\n\n const promptTokens = usage.prompt_tokens ?? 0;\n const completionTokens = usage.completion_tokens ?? 0;\n const reasoningTokens = usage.reasoning_tokens ?? 0;\n\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens,\n },\n raw: usage,\n };\n}\n","import {\n LanguageModelV3Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n PerplexityMessageContent,\n PerplexityPrompt,\n} from './perplexity-language-model-prompt';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\n\nexport function convertToPerplexityMessages(\n prompt: LanguageModelV3Prompt,\n): PerplexityPrompt {\n const messages: PerplexityPrompt = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user':\n case 'assistant': {\n const hasMultipartContent = content.some(\n part =>\n (part.type === 'file' && part.mediaType.startsWith('image/')) ||\n (part.type === 'file' && part.mediaType === 'application/pdf'),\n );\n\n const messageContent = content\n .map((part, index) => {\n switch (part.type) {\n case 'text': {\n return {\n type: 'text',\n text: part.text,\n };\n }\n case 'file': {\n if (part.mediaType === 'application/pdf') {\n return part.data instanceof URL\n ? {\n type: 'file_url',\n file_url: {\n url: part.data.toString(),\n },\n file_name: part.filename,\n }\n : {\n type: 'file_url',\n file_url: {\n url:\n typeof part.data === 'string'\n ? part.data\n : convertUint8ArrayToBase64(part.data),\n },\n file_name: part.filename || `document-${index}.pdf`,\n };\n } else if (part.mediaType.startsWith('image/')) {\n return part.data instanceof URL\n ? {\n type: 'image_url',\n image_url: {\n url: part.data.toString(),\n },\n }\n : {\n type: 'image_url',\n image_url: {\n url: `data:${part.mediaType ?? 'image/jpeg'};base64,${\n typeof part.data === 'string'\n ? part.data\n : convertUint8ArrayToBase64(part.data)\n }`,\n },\n };\n }\n }\n }\n })\n .filter(Boolean) as PerplexityMessageContent[];\n messages.push({\n role,\n content: hasMultipartContent\n ? messageContent\n : messageContent\n .filter(part => part.type === 'text')\n .map(part => part.text)\n .join(''),\n });\n break;\n }\n case 'tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'Tool messages',\n });\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapPerplexityFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV3FinishReason['unified'] {\n switch (finishReason) {\n case 'stop':\n case 'length':\n return finishReason;\n default:\n return 'other';\n }\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["import_provider","import_provider_utils","import_provider_utils"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/perplexity-provider.ts","../src/perplexity-language-model.ts","../src/convert-perplexity-usage.ts","../src/convert-to-perplexity-messages.ts","../src/map-perplexity-finish-reason.ts","../src/version.ts"],"sourcesContent":["export { createPerplexity, perplexity } from './perplexity-provider';\nexport type {\n PerplexityProvider,\n PerplexityProviderSettings,\n} from './perplexity-provider';\nexport { VERSION } from './version';\n","import {\n LanguageModelV3,\n NoSuchModelError,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { PerplexityLanguageModel } from './perplexity-language-model';\nimport { PerplexityLanguageModelId } from './perplexity-language-model-options';\nimport { VERSION } from './version';\n\nexport interface PerplexityProvider extends ProviderV3 {\n /**\nCreates an Perplexity chat model for text generation.\n */\n (modelId: PerplexityLanguageModelId): LanguageModelV3;\n\n /**\nCreates an Perplexity language model for text generation.\n */\n languageModel(modelId: PerplexityLanguageModelId): LanguageModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface PerplexityProviderSettings {\n /**\nBase URL for the perplexity API calls.\n */\n baseURL?: string;\n\n /**\nAPI key for authenticating requests.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor 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 createLanguageModel = (modelId: PerplexityLanguageModelId) => {\n return new PerplexityLanguageModel(modelId, {\n baseURL: withoutTrailingSlash(\n options.baseURL ?? 'https://api.perplexity.ai',\n )!,\n headers: getHeaders,\n generateId,\n fetch: options.fetch,\n });\n };\n\n const provider = (modelId: PerplexityLanguageModelId) =>\n createLanguageModel(modelId);\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createLanguageModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\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 LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n ParseResult,\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { convertPerplexityUsage } from './convert-perplexity-usage';\nimport { convertToPerplexityMessages } from './convert-to-perplexity-messages';\nimport { mapPerplexityFinishReason } from './map-perplexity-finish-reason';\nimport { PerplexityLanguageModelId } from './perplexity-language-model-options';\n\ntype PerplexityChatConfig = {\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n generateId: () => string;\n fetch?: FetchFunction;\n};\n\nexport class PerplexityLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n readonly provider = 'perplexity';\n\n readonly modelId: PerplexityLanguageModelId;\n\n private readonly config: PerplexityChatConfig;\n\n constructor(\n modelId: PerplexityLanguageModelId,\n config: PerplexityChatConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n // No URLs are supported.\n };\n\n private getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n providerOptions,\n }: LanguageModelV3CallOptions) {\n const warnings: SharedV3Warning[] = [];\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n if (stopSequences != null) {\n warnings.push({ type: 'unsupported', feature: 'stopSequences' });\n }\n\n if (seed != null) {\n warnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n return {\n args: {\n // model id:\n model: this.modelId,\n\n // standardized settings:\n frequency_penalty: frequencyPenalty,\n max_tokens: maxOutputTokens,\n presence_penalty: presencePenalty,\n temperature,\n top_k: topK,\n top_p: topP,\n\n // response format:\n response_format:\n responseFormat?.type === 'json'\n ? {\n type: 'json_schema',\n json_schema: { schema: responseFormat.schema },\n }\n : undefined,\n\n // provider extensions\n ...(providerOptions?.perplexity ?? {}),\n\n // messages:\n messages: convertToPerplexityMessages(prompt),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const { args: body, warnings } = this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n perplexityResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = response.choices[0];\n const content: Array<LanguageModelV3Content> = [];\n\n // text content:\n const text = choice.message.content;\n if (text.length > 0) {\n content.push({ type: 'text', text });\n }\n\n // sources:\n if (response.citations != null) {\n for (const url of response.citations) {\n content.push({\n type: 'source',\n sourceType: 'url',\n id: this.config.generateId(),\n url,\n });\n }\n }\n\n return {\n content,\n finishReason: {\n unified: mapPerplexityFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\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: {\n perplexity: {\n images:\n response.images?.map(image => ({\n imageUrl: image.image_url,\n originUrl: image.origin_url,\n height: image.height,\n width: image.width,\n })) ?? null,\n usage: {\n citationTokens: response.usage?.citation_tokens ?? null,\n numSearchQueries: response.usage?.num_search_queries ?? null,\n },\n },\n },\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const { args, warnings } = this.getArgs(options);\n\n const body = { ...args, stream: true };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage,\n }),\n successfulResponseHandler: createEventSourceResponseHandler(\n perplexityChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage:\n | {\n prompt_tokens: number | undefined;\n completion_tokens: number | undefined;\n reasoning_tokens?: number | null | undefined;\n }\n | undefined = undefined;\n\n const providerMetadata: {\n perplexity: {\n usage: {\n citationTokens: number | null;\n numSearchQueries: number | null;\n };\n images: Array<{\n imageUrl: string;\n originUrl: string;\n height: number;\n width: number;\n }> | null;\n };\n } = {\n perplexity: {\n usage: {\n citationTokens: null,\n numSearchQueries: null,\n },\n images: null,\n },\n };\n let isFirstChunk = true;\n let isActive = false;\n\n const self = this;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof perplexityChunkSchema>>,\n LanguageModelV3StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n // Emit raw chunk if requested (before anything else)\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n if (!chunk.success) {\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n if (isFirstChunk) {\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value),\n });\n\n value.citations?.forEach(url => {\n controller.enqueue({\n type: 'source',\n sourceType: 'url',\n id: self.config.generateId(),\n url,\n });\n });\n\n isFirstChunk = false;\n }\n\n if (value.usage != null) {\n usage = value.usage;\n\n providerMetadata.perplexity.usage = {\n citationTokens: value.usage.citation_tokens ?? null,\n numSearchQueries: value.usage.num_search_queries ?? null,\n };\n }\n\n if (value.images != null) {\n providerMetadata.perplexity.images = value.images.map(image => ({\n imageUrl: image.image_url,\n originUrl: image.origin_url,\n height: image.height,\n width: image.width,\n }));\n }\n\n const choice = value.choices[0];\n if (choice?.finish_reason != null) {\n finishReason = {\n unified: mapPerplexityFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n const textContent = delta.content;\n\n if (textContent != null) {\n if (!isActive) {\n controller.enqueue({ type: 'text-start', id: '0' });\n isActive = true;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: '0',\n delta: textContent,\n });\n }\n },\n\n flush(controller) {\n if (isActive) {\n controller.enqueue({ type: 'text-end', id: '0' });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertPerplexityUsage(usage),\n providerMetadata,\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n\nfunction getResponseMetadata({\n id,\n model,\n created,\n}: {\n id: string;\n created: number;\n model: string;\n}) {\n return {\n id,\n modelId: model,\n timestamp: new Date(created * 1000),\n };\n}\n\nconst perplexityUsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number().nullish(),\n citation_tokens: z.number().nullish(),\n num_search_queries: z.number().nullish(),\n reasoning_tokens: z.number().nullish(),\n});\n\nexport const perplexityImageSchema = z.object({\n image_url: z.string(),\n origin_url: z.string(),\n height: z.number(),\n width: z.number(),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst perplexityResponseSchema = z.object({\n id: z.string(),\n created: z.number(),\n model: z.string(),\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant'),\n content: z.string(),\n }),\n finish_reason: z.string().nullish(),\n }),\n ),\n citations: z.array(z.string()).nullish(),\n images: z.array(perplexityImageSchema).nullish(),\n usage: perplexityUsageSchema.nullish(),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst perplexityChunkSchema = z.object({\n id: z.string(),\n created: z.number(),\n model: z.string(),\n choices: z.array(\n z.object({\n delta: z.object({\n role: z.literal('assistant'),\n content: z.string(),\n }),\n finish_reason: z.string().nullish(),\n }),\n ),\n citations: z.array(z.string()).nullish(),\n images: z.array(perplexityImageSchema).nullish(),\n usage: perplexityUsageSchema.nullish(),\n});\n\nexport const perplexityErrorSchema = z.object({\n error: z.object({\n code: z.number(),\n message: z.string().nullish(),\n type: z.string().nullish(),\n }),\n});\n\nexport type PerplexityErrorData = z.infer<typeof perplexityErrorSchema>;\n\nconst errorToMessage = (data: PerplexityErrorData) => {\n return data.error.message ?? data.error.type ?? 'unknown error';\n};\n","import { LanguageModelV3Usage } from '@ai-sdk/provider';\n\nexport function convertPerplexityUsage(\n usage:\n | {\n prompt_tokens?: number | null | undefined;\n completion_tokens?: number | null | undefined;\n reasoning_tokens?: number | null | undefined;\n }\n | undefined\n | null,\n): LanguageModelV3Usage {\n if (usage == null) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n raw: undefined,\n };\n }\n\n const promptTokens = usage.prompt_tokens ?? 0;\n const completionTokens = usage.completion_tokens ?? 0;\n const reasoningTokens = usage.reasoning_tokens ?? 0;\n\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens,\n },\n raw: usage,\n };\n}\n","import {\n LanguageModelV3Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n PerplexityMessageContent,\n PerplexityPrompt,\n} from './perplexity-language-model-prompt';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\n\nexport function convertToPerplexityMessages(\n prompt: LanguageModelV3Prompt,\n): PerplexityPrompt {\n const messages: PerplexityPrompt = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user':\n case 'assistant': {\n const hasMultipartContent = content.some(\n part =>\n (part.type === 'file' && part.mediaType.startsWith('image/')) ||\n (part.type === 'file' && part.mediaType === 'application/pdf'),\n );\n\n const messageContent = content\n .map((part, index) => {\n switch (part.type) {\n case 'text': {\n return {\n type: 'text',\n text: part.text,\n };\n }\n case 'file': {\n if (part.mediaType === 'application/pdf') {\n return part.data instanceof URL\n ? {\n type: 'file_url',\n file_url: {\n url: part.data.toString(),\n },\n file_name: part.filename,\n }\n : {\n type: 'file_url',\n file_url: {\n url:\n typeof part.data === 'string'\n ? part.data\n : convertUint8ArrayToBase64(part.data),\n },\n file_name: part.filename || `document-${index}.pdf`,\n };\n } else if (part.mediaType.startsWith('image/')) {\n return part.data instanceof URL\n ? {\n type: 'image_url',\n image_url: {\n url: part.data.toString(),\n },\n }\n : {\n type: 'image_url',\n image_url: {\n url: `data:${part.mediaType ?? 'image/jpeg'};base64,${\n typeof part.data === 'string'\n ? part.data\n : convertUint8ArrayToBase64(part.data)\n }`,\n },\n };\n }\n }\n }\n })\n .filter(Boolean) as PerplexityMessageContent[];\n messages.push({\n role,\n content: hasMultipartContent\n ? messageContent\n : messageContent\n .filter(part => part.type === 'text')\n .map(part => part.text)\n .join(''),\n });\n break;\n }\n case 'tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'Tool messages',\n });\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapPerplexityFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV3FinishReason['unified'] {\n switch (finishReason) {\n case 'stop':\n case 'length':\n return finishReason;\n default:\n return 'other';\n }\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["import_provider","import_provider_utils","import_provider_utils"]}
package/dist/index.mjs CHANGED
@@ -466,7 +466,7 @@ var errorToMessage = (data) => {
466
466
  };
467
467
 
468
468
  // src/version.ts
469
- var VERSION = true ? "3.0.9" : "0.0.0-test";
469
+ var VERSION = true ? "3.0.10" : "0.0.0-test";
470
470
 
471
471
  // src/perplexity-provider.ts
472
472
  function createPerplexity(options = {}) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/perplexity-provider.ts","../src/perplexity-language-model.ts","../src/convert-perplexity-usage.ts","../src/convert-to-perplexity-messages.ts","../src/map-perplexity-finish-reason.ts","../src/version.ts"],"sourcesContent":["import {\n LanguageModelV3,\n NoSuchModelError,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { PerplexityLanguageModel } from './perplexity-language-model';\nimport { PerplexityLanguageModelId } from './perplexity-language-model-options';\nimport { VERSION } from './version';\n\nexport interface PerplexityProvider extends ProviderV3 {\n /**\nCreates an Perplexity chat model for text generation.\n */\n (modelId: PerplexityLanguageModelId): LanguageModelV3;\n\n /**\nCreates an Perplexity language model for text generation.\n */\n languageModel(modelId: PerplexityLanguageModelId): LanguageModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface PerplexityProviderSettings {\n /**\nBase URL for the perplexity API calls.\n */\n baseURL?: string;\n\n /**\nAPI key for authenticating requests.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor 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 createLanguageModel = (modelId: PerplexityLanguageModelId) => {\n return new PerplexityLanguageModel(modelId, {\n baseURL: withoutTrailingSlash(\n options.baseURL ?? 'https://api.perplexity.ai',\n )!,\n headers: getHeaders,\n generateId,\n fetch: options.fetch,\n });\n };\n\n const provider = (modelId: PerplexityLanguageModelId) =>\n createLanguageModel(modelId);\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createLanguageModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\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 LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n ParseResult,\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { convertPerplexityUsage } from './convert-perplexity-usage';\nimport { convertToPerplexityMessages } from './convert-to-perplexity-messages';\nimport { mapPerplexityFinishReason } from './map-perplexity-finish-reason';\nimport { PerplexityLanguageModelId } from './perplexity-language-model-options';\n\ntype PerplexityChatConfig = {\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n generateId: () => string;\n fetch?: FetchFunction;\n};\n\nexport class PerplexityLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n readonly provider = 'perplexity';\n\n readonly modelId: PerplexityLanguageModelId;\n\n private readonly config: PerplexityChatConfig;\n\n constructor(\n modelId: PerplexityLanguageModelId,\n config: PerplexityChatConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n // No URLs are supported.\n };\n\n private getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n providerOptions,\n }: LanguageModelV3CallOptions) {\n const warnings: SharedV3Warning[] = [];\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n if (stopSequences != null) {\n warnings.push({ type: 'unsupported', feature: 'stopSequences' });\n }\n\n if (seed != null) {\n warnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n return {\n args: {\n // model id:\n model: this.modelId,\n\n // standardized settings:\n frequency_penalty: frequencyPenalty,\n max_tokens: maxOutputTokens,\n presence_penalty: presencePenalty,\n temperature,\n top_k: topK,\n top_p: topP,\n\n // response format:\n response_format:\n responseFormat?.type === 'json'\n ? {\n type: 'json_schema',\n json_schema: { schema: responseFormat.schema },\n }\n : undefined,\n\n // provider extensions\n ...(providerOptions?.perplexity ?? {}),\n\n // messages:\n messages: convertToPerplexityMessages(prompt),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const { args: body, warnings } = this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n perplexityResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = response.choices[0];\n const content: Array<LanguageModelV3Content> = [];\n\n // text content:\n const text = choice.message.content;\n if (text.length > 0) {\n content.push({ type: 'text', text });\n }\n\n // sources:\n if (response.citations != null) {\n for (const url of response.citations) {\n content.push({\n type: 'source',\n sourceType: 'url',\n id: this.config.generateId(),\n url,\n });\n }\n }\n\n return {\n content,\n finishReason: {\n unified: mapPerplexityFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\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: {\n perplexity: {\n images:\n response.images?.map(image => ({\n imageUrl: image.image_url,\n originUrl: image.origin_url,\n height: image.height,\n width: image.width,\n })) ?? null,\n usage: {\n citationTokens: response.usage?.citation_tokens ?? null,\n numSearchQueries: response.usage?.num_search_queries ?? null,\n },\n },\n },\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const { args, warnings } = this.getArgs(options);\n\n const body = { ...args, stream: true };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage,\n }),\n successfulResponseHandler: createEventSourceResponseHandler(\n perplexityChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage:\n | {\n prompt_tokens: number | undefined;\n completion_tokens: number | undefined;\n reasoning_tokens?: number | null | undefined;\n }\n | undefined = undefined;\n\n const providerMetadata: {\n perplexity: {\n usage: {\n citationTokens: number | null;\n numSearchQueries: number | null;\n };\n images: Array<{\n imageUrl: string;\n originUrl: string;\n height: number;\n width: number;\n }> | null;\n };\n } = {\n perplexity: {\n usage: {\n citationTokens: null,\n numSearchQueries: null,\n },\n images: null,\n },\n };\n let isFirstChunk = true;\n let isActive = false;\n\n const self = this;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof perplexityChunkSchema>>,\n LanguageModelV3StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n // Emit raw chunk if requested (before anything else)\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n if (!chunk.success) {\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n if (isFirstChunk) {\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value),\n });\n\n value.citations?.forEach(url => {\n controller.enqueue({\n type: 'source',\n sourceType: 'url',\n id: self.config.generateId(),\n url,\n });\n });\n\n isFirstChunk = false;\n }\n\n if (value.usage != null) {\n usage = value.usage;\n\n providerMetadata.perplexity.usage = {\n citationTokens: value.usage.citation_tokens ?? null,\n numSearchQueries: value.usage.num_search_queries ?? null,\n };\n }\n\n if (value.images != null) {\n providerMetadata.perplexity.images = value.images.map(image => ({\n imageUrl: image.image_url,\n originUrl: image.origin_url,\n height: image.height,\n width: image.width,\n }));\n }\n\n const choice = value.choices[0];\n if (choice?.finish_reason != null) {\n finishReason = {\n unified: mapPerplexityFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n const textContent = delta.content;\n\n if (textContent != null) {\n if (!isActive) {\n controller.enqueue({ type: 'text-start', id: '0' });\n isActive = true;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: '0',\n delta: textContent,\n });\n }\n },\n\n flush(controller) {\n if (isActive) {\n controller.enqueue({ type: 'text-end', id: '0' });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertPerplexityUsage(usage),\n providerMetadata,\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n\nfunction getResponseMetadata({\n id,\n model,\n created,\n}: {\n id: string;\n created: number;\n model: string;\n}) {\n return {\n id,\n modelId: model,\n timestamp: new Date(created * 1000),\n };\n}\n\nconst perplexityUsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number().nullish(),\n citation_tokens: z.number().nullish(),\n num_search_queries: z.number().nullish(),\n reasoning_tokens: z.number().nullish(),\n});\n\nexport const perplexityImageSchema = z.object({\n image_url: z.string(),\n origin_url: z.string(),\n height: z.number(),\n width: z.number(),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst perplexityResponseSchema = z.object({\n id: z.string(),\n created: z.number(),\n model: z.string(),\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant'),\n content: z.string(),\n }),\n finish_reason: z.string().nullish(),\n }),\n ),\n citations: z.array(z.string()).nullish(),\n images: z.array(perplexityImageSchema).nullish(),\n usage: perplexityUsageSchema.nullish(),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst perplexityChunkSchema = z.object({\n id: z.string(),\n created: z.number(),\n model: z.string(),\n choices: z.array(\n z.object({\n delta: z.object({\n role: z.literal('assistant'),\n content: z.string(),\n }),\n finish_reason: z.string().nullish(),\n }),\n ),\n citations: z.array(z.string()).nullish(),\n images: z.array(perplexityImageSchema).nullish(),\n usage: perplexityUsageSchema.nullish(),\n});\n\nexport const perplexityErrorSchema = z.object({\n error: z.object({\n code: z.number(),\n message: z.string().nullish(),\n type: z.string().nullish(),\n }),\n});\n\nexport type PerplexityErrorData = z.infer<typeof perplexityErrorSchema>;\n\nconst errorToMessage = (data: PerplexityErrorData) => {\n return data.error.message ?? data.error.type ?? 'unknown error';\n};\n","import { LanguageModelV3Usage } from '@ai-sdk/provider';\n\nexport function convertPerplexityUsage(\n usage:\n | {\n prompt_tokens?: number | null | undefined;\n completion_tokens?: number | null | undefined;\n reasoning_tokens?: number | null | undefined;\n }\n | undefined\n | null,\n): LanguageModelV3Usage {\n if (usage == null) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n raw: undefined,\n };\n }\n\n const promptTokens = usage.prompt_tokens ?? 0;\n const completionTokens = usage.completion_tokens ?? 0;\n const reasoningTokens = usage.reasoning_tokens ?? 0;\n\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens,\n },\n raw: usage,\n };\n}\n","import {\n LanguageModelV3Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n PerplexityMessageContent,\n PerplexityPrompt,\n} from './perplexity-language-model-prompt';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\n\nexport function convertToPerplexityMessages(\n prompt: LanguageModelV3Prompt,\n): PerplexityPrompt {\n const messages: PerplexityPrompt = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user':\n case 'assistant': {\n const hasMultipartContent = content.some(\n part =>\n (part.type === 'file' && part.mediaType.startsWith('image/')) ||\n (part.type === 'file' && part.mediaType === 'application/pdf'),\n );\n\n const messageContent = content\n .map((part, index) => {\n switch (part.type) {\n case 'text': {\n return {\n type: 'text',\n text: part.text,\n };\n }\n case 'file': {\n if (part.mediaType === 'application/pdf') {\n return part.data instanceof URL\n ? {\n type: 'file_url',\n file_url: {\n url: part.data.toString(),\n },\n file_name: part.filename,\n }\n : {\n type: 'file_url',\n file_url: {\n url:\n typeof part.data === 'string'\n ? part.data\n : convertUint8ArrayToBase64(part.data),\n },\n file_name: part.filename || `document-${index}.pdf`,\n };\n } else if (part.mediaType.startsWith('image/')) {\n return part.data instanceof URL\n ? {\n type: 'image_url',\n image_url: {\n url: part.data.toString(),\n },\n }\n : {\n type: 'image_url',\n image_url: {\n url: `data:${part.mediaType ?? 'image/jpeg'};base64,${\n typeof part.data === 'string'\n ? part.data\n : convertUint8ArrayToBase64(part.data)\n }`,\n },\n };\n }\n }\n }\n })\n .filter(Boolean) as PerplexityMessageContent[];\n messages.push({\n role,\n content: hasMultipartContent\n ? messageContent\n : messageContent\n .filter(part => part.type === 'text')\n .map(part => part.text)\n .join(''),\n });\n break;\n }\n case 'tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'Tool messages',\n });\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapPerplexityFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV3FinishReason['unified'] {\n switch (finishReason) {\n case 'stop':\n case 'length':\n return finishReason;\n default:\n return 'other';\n }\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/perplexity-provider.ts","../src/perplexity-language-model.ts","../src/convert-perplexity-usage.ts","../src/convert-to-perplexity-messages.ts","../src/map-perplexity-finish-reason.ts","../src/version.ts"],"sourcesContent":["import {\n LanguageModelV3,\n NoSuchModelError,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { PerplexityLanguageModel } from './perplexity-language-model';\nimport { PerplexityLanguageModelId } from './perplexity-language-model-options';\nimport { VERSION } from './version';\n\nexport interface PerplexityProvider extends ProviderV3 {\n /**\nCreates an Perplexity chat model for text generation.\n */\n (modelId: PerplexityLanguageModelId): LanguageModelV3;\n\n /**\nCreates an Perplexity language model for text generation.\n */\n languageModel(modelId: PerplexityLanguageModelId): LanguageModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface PerplexityProviderSettings {\n /**\nBase URL for the perplexity API calls.\n */\n baseURL?: string;\n\n /**\nAPI key for authenticating requests.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor 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 createLanguageModel = (modelId: PerplexityLanguageModelId) => {\n return new PerplexityLanguageModel(modelId, {\n baseURL: withoutTrailingSlash(\n options.baseURL ?? 'https://api.perplexity.ai',\n )!,\n headers: getHeaders,\n generateId,\n fetch: options.fetch,\n });\n };\n\n const provider = (modelId: PerplexityLanguageModelId) =>\n createLanguageModel(modelId);\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createLanguageModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\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 LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n ParseResult,\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { convertPerplexityUsage } from './convert-perplexity-usage';\nimport { convertToPerplexityMessages } from './convert-to-perplexity-messages';\nimport { mapPerplexityFinishReason } from './map-perplexity-finish-reason';\nimport { PerplexityLanguageModelId } from './perplexity-language-model-options';\n\ntype PerplexityChatConfig = {\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n generateId: () => string;\n fetch?: FetchFunction;\n};\n\nexport class PerplexityLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n readonly provider = 'perplexity';\n\n readonly modelId: PerplexityLanguageModelId;\n\n private readonly config: PerplexityChatConfig;\n\n constructor(\n modelId: PerplexityLanguageModelId,\n config: PerplexityChatConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n }\n\n readonly supportedUrls: Record<string, RegExp[]> = {\n // No URLs are supported.\n };\n\n private getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n providerOptions,\n }: LanguageModelV3CallOptions) {\n const warnings: SharedV3Warning[] = [];\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n if (stopSequences != null) {\n warnings.push({ type: 'unsupported', feature: 'stopSequences' });\n }\n\n if (seed != null) {\n warnings.push({ type: 'unsupported', feature: 'seed' });\n }\n\n return {\n args: {\n // model id:\n model: this.modelId,\n\n // standardized settings:\n frequency_penalty: frequencyPenalty,\n max_tokens: maxOutputTokens,\n presence_penalty: presencePenalty,\n temperature,\n top_k: topK,\n top_p: topP,\n\n // response format:\n response_format:\n responseFormat?.type === 'json'\n ? {\n type: 'json_schema',\n json_schema: { schema: responseFormat.schema },\n }\n : undefined,\n\n // provider extensions\n ...(providerOptions?.perplexity ?? {}),\n\n // messages:\n messages: convertToPerplexityMessages(prompt),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const { args: body, warnings } = this.getArgs(options);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n perplexityResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = response.choices[0];\n const content: Array<LanguageModelV3Content> = [];\n\n // text content:\n const text = choice.message.content;\n if (text.length > 0) {\n content.push({ type: 'text', text });\n }\n\n // sources:\n if (response.citations != null) {\n for (const url of response.citations) {\n content.push({\n type: 'source',\n sourceType: 'url',\n id: this.config.generateId(),\n url,\n });\n }\n }\n\n return {\n content,\n finishReason: {\n unified: mapPerplexityFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\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: {\n perplexity: {\n images:\n response.images?.map(image => ({\n imageUrl: image.image_url,\n originUrl: image.origin_url,\n height: image.height,\n width: image.width,\n })) ?? null,\n usage: {\n citationTokens: response.usage?.citation_tokens ?? null,\n numSearchQueries: response.usage?.num_search_queries ?? null,\n },\n },\n },\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const { args, warnings } = this.getArgs(options);\n\n const body = { ...args, stream: true };\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage,\n }),\n successfulResponseHandler: createEventSourceResponseHandler(\n perplexityChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n let finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage:\n | {\n prompt_tokens: number | undefined;\n completion_tokens: number | undefined;\n reasoning_tokens?: number | null | undefined;\n }\n | undefined = undefined;\n\n const providerMetadata: {\n perplexity: {\n usage: {\n citationTokens: number | null;\n numSearchQueries: number | null;\n };\n images: Array<{\n imageUrl: string;\n originUrl: string;\n height: number;\n width: number;\n }> | null;\n };\n } = {\n perplexity: {\n usage: {\n citationTokens: null,\n numSearchQueries: null,\n },\n images: null,\n },\n };\n let isFirstChunk = true;\n let isActive = false;\n\n const self = this;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof perplexityChunkSchema>>,\n LanguageModelV3StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n\n transform(chunk, controller) {\n // Emit raw chunk if requested (before anything else)\n if (options.includeRawChunks) {\n controller.enqueue({ type: 'raw', rawValue: chunk.rawValue });\n }\n\n if (!chunk.success) {\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n if (isFirstChunk) {\n controller.enqueue({\n type: 'response-metadata',\n ...getResponseMetadata(value),\n });\n\n value.citations?.forEach(url => {\n controller.enqueue({\n type: 'source',\n sourceType: 'url',\n id: self.config.generateId(),\n url,\n });\n });\n\n isFirstChunk = false;\n }\n\n if (value.usage != null) {\n usage = value.usage;\n\n providerMetadata.perplexity.usage = {\n citationTokens: value.usage.citation_tokens ?? null,\n numSearchQueries: value.usage.num_search_queries ?? null,\n };\n }\n\n if (value.images != null) {\n providerMetadata.perplexity.images = value.images.map(image => ({\n imageUrl: image.image_url,\n originUrl: image.origin_url,\n height: image.height,\n width: image.width,\n }));\n }\n\n const choice = value.choices[0];\n if (choice?.finish_reason != null) {\n finishReason = {\n unified: mapPerplexityFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n const textContent = delta.content;\n\n if (textContent != null) {\n if (!isActive) {\n controller.enqueue({ type: 'text-start', id: '0' });\n isActive = true;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: '0',\n delta: textContent,\n });\n }\n },\n\n flush(controller) {\n if (isActive) {\n controller.enqueue({ type: 'text-end', id: '0' });\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage: convertPerplexityUsage(usage),\n providerMetadata,\n });\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n }\n}\n\nfunction getResponseMetadata({\n id,\n model,\n created,\n}: {\n id: string;\n created: number;\n model: string;\n}) {\n return {\n id,\n modelId: model,\n timestamp: new Date(created * 1000),\n };\n}\n\nconst perplexityUsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number().nullish(),\n citation_tokens: z.number().nullish(),\n num_search_queries: z.number().nullish(),\n reasoning_tokens: z.number().nullish(),\n});\n\nexport const perplexityImageSchema = z.object({\n image_url: z.string(),\n origin_url: z.string(),\n height: z.number(),\n width: z.number(),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst perplexityResponseSchema = z.object({\n id: z.string(),\n created: z.number(),\n model: z.string(),\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant'),\n content: z.string(),\n }),\n finish_reason: z.string().nullish(),\n }),\n ),\n citations: z.array(z.string()).nullish(),\n images: z.array(perplexityImageSchema).nullish(),\n usage: perplexityUsageSchema.nullish(),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst perplexityChunkSchema = z.object({\n id: z.string(),\n created: z.number(),\n model: z.string(),\n choices: z.array(\n z.object({\n delta: z.object({\n role: z.literal('assistant'),\n content: z.string(),\n }),\n finish_reason: z.string().nullish(),\n }),\n ),\n citations: z.array(z.string()).nullish(),\n images: z.array(perplexityImageSchema).nullish(),\n usage: perplexityUsageSchema.nullish(),\n});\n\nexport const perplexityErrorSchema = z.object({\n error: z.object({\n code: z.number(),\n message: z.string().nullish(),\n type: z.string().nullish(),\n }),\n});\n\nexport type PerplexityErrorData = z.infer<typeof perplexityErrorSchema>;\n\nconst errorToMessage = (data: PerplexityErrorData) => {\n return data.error.message ?? data.error.type ?? 'unknown error';\n};\n","import { LanguageModelV3Usage } from '@ai-sdk/provider';\n\nexport function convertPerplexityUsage(\n usage:\n | {\n prompt_tokens?: number | null | undefined;\n completion_tokens?: number | null | undefined;\n reasoning_tokens?: number | null | undefined;\n }\n | undefined\n | null,\n): LanguageModelV3Usage {\n if (usage == null) {\n return {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n raw: undefined,\n };\n }\n\n const promptTokens = usage.prompt_tokens ?? 0;\n const completionTokens = usage.completion_tokens ?? 0;\n const reasoningTokens = usage.reasoning_tokens ?? 0;\n\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens,\n },\n raw: usage,\n };\n}\n","import {\n LanguageModelV3Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n PerplexityMessageContent,\n PerplexityPrompt,\n} from './perplexity-language-model-prompt';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\n\nexport function convertToPerplexityMessages(\n prompt: LanguageModelV3Prompt,\n): PerplexityPrompt {\n const messages: PerplexityPrompt = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user':\n case 'assistant': {\n const hasMultipartContent = content.some(\n part =>\n (part.type === 'file' && part.mediaType.startsWith('image/')) ||\n (part.type === 'file' && part.mediaType === 'application/pdf'),\n );\n\n const messageContent = content\n .map((part, index) => {\n switch (part.type) {\n case 'text': {\n return {\n type: 'text',\n text: part.text,\n };\n }\n case 'file': {\n if (part.mediaType === 'application/pdf') {\n return part.data instanceof URL\n ? {\n type: 'file_url',\n file_url: {\n url: part.data.toString(),\n },\n file_name: part.filename,\n }\n : {\n type: 'file_url',\n file_url: {\n url:\n typeof part.data === 'string'\n ? part.data\n : convertUint8ArrayToBase64(part.data),\n },\n file_name: part.filename || `document-${index}.pdf`,\n };\n } else if (part.mediaType.startsWith('image/')) {\n return part.data instanceof URL\n ? {\n type: 'image_url',\n image_url: {\n url: part.data.toString(),\n },\n }\n : {\n type: 'image_url',\n image_url: {\n url: `data:${part.mediaType ?? 'image/jpeg'};base64,${\n typeof part.data === 'string'\n ? part.data\n : convertUint8ArrayToBase64(part.data)\n }`,\n },\n };\n }\n }\n }\n })\n .filter(Boolean) as PerplexityMessageContent[];\n messages.push({\n role,\n content: hasMultipartContent\n ? messageContent\n : messageContent\n .filter(part => part.type === 'text')\n .map(part => part.text)\n .join(''),\n });\n break;\n }\n case 'tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'Tool messages',\n });\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapPerplexityFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV3FinishReason['unified'] {\n switch (finishReason) {\n case 'stop':\n case 'length':\n return finishReason;\n default:\n return 'other';\n }\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":[]}
@@ -0,0 +1,196 @@
1
+ ---
2
+ title: Perplexity
3
+ description: Learn how to use Perplexity's Sonar API with the AI SDK.
4
+ ---
5
+
6
+ # Perplexity Provider
7
+
8
+ The [Perplexity](https://sonar.perplexity.ai) provider offers access to Sonar API - a language model that uniquely combines real-time web search with natural language processing. Each response is grounded in current web data and includes detailed citations, making it ideal for research, fact-checking, and obtaining up-to-date information.
9
+
10
+ API keys can be obtained from the [Perplexity Platform](https://docs.perplexity.ai).
11
+
12
+ ## Setup
13
+
14
+ The Perplexity provider is available via the `@ai-sdk/perplexity` module. You can install it with:
15
+
16
+ <Tabs items={['pnpm', 'npm', 'yarn', 'bun']}>
17
+ <Tab>
18
+ <Snippet text="pnpm add @ai-sdk/perplexity" dark />
19
+ </Tab>
20
+ <Tab>
21
+ <Snippet text="npm install @ai-sdk/perplexity" dark />
22
+ </Tab>
23
+ <Tab>
24
+ <Snippet text="yarn add @ai-sdk/perplexity" dark />
25
+ </Tab>
26
+
27
+ <Tab>
28
+ <Snippet text="bun add @ai-sdk/perplexity" dark />
29
+ </Tab>
30
+ </Tabs>
31
+
32
+ ## Provider Instance
33
+
34
+ You can import the default provider instance `perplexity` from `@ai-sdk/perplexity`:
35
+
36
+ ```ts
37
+ import { perplexity } from '@ai-sdk/perplexity';
38
+ ```
39
+
40
+ For custom configuration, you can import `createPerplexity` and create a provider instance with your settings:
41
+
42
+ ```ts
43
+ import { createPerplexity } from '@ai-sdk/perplexity';
44
+
45
+ const perplexity = createPerplexity({
46
+ apiKey: process.env.PERPLEXITY_API_KEY ?? '',
47
+ });
48
+ ```
49
+
50
+ You can use the following optional settings to customize the Perplexity provider instance:
51
+
52
+ - **baseURL** _string_
53
+
54
+ Use a different URL prefix for API calls.
55
+ The default prefix is `https://api.perplexity.ai`.
56
+
57
+ - **apiKey** _string_
58
+
59
+ API key that is being sent using the `Authorization` header. It defaults to
60
+ the `PERPLEXITY_API_KEY` environment variable.
61
+
62
+ - **headers** _Record&lt;string,string&gt;_
63
+
64
+ Custom headers to include in the requests.
65
+
66
+ - **fetch** _(input: RequestInfo, init?: RequestInit) => Promise&lt;Response&gt;_
67
+
68
+ Custom [fetch](https://developer.mozilla.org/en-US/docs/Web/API/fetch) implementation.
69
+
70
+ ## Language Models
71
+
72
+ You can create Perplexity models using a provider instance:
73
+
74
+ ```ts
75
+ import { perplexity } from '@ai-sdk/perplexity';
76
+ import { generateText } from 'ai';
77
+
78
+ const { text } = await generateText({
79
+ model: perplexity('sonar-pro'),
80
+ prompt: 'What are the latest developments in quantum computing?',
81
+ });
82
+ ```
83
+
84
+ ### Sources
85
+
86
+ Websites that have been used to generate the response are included in the `sources` property of the result:
87
+
88
+ ```ts
89
+ import { perplexity } from '@ai-sdk/perplexity';
90
+ import { generateText } from 'ai';
91
+
92
+ const { text, sources } = await generateText({
93
+ model: perplexity('sonar-pro'),
94
+ prompt: 'What are the latest developments in quantum computing?',
95
+ });
96
+
97
+ console.log(sources);
98
+ ```
99
+
100
+ ### Provider Options & Metadata
101
+
102
+ The Perplexity provider includes additional metadata in the response through `providerMetadata`.
103
+ Additional configuration options are available through `providerOptions`.
104
+
105
+ ```ts
106
+ const result = await generateText({
107
+ model: perplexity('sonar-pro'),
108
+ prompt: 'What are the latest developments in quantum computing?',
109
+ providerOptions: {
110
+ perplexity: {
111
+ return_images: true, // Enable image responses (Tier-2 Perplexity users only)
112
+ },
113
+ },
114
+ });
115
+
116
+ console.log(result.providerMetadata);
117
+ // Example output:
118
+ // {
119
+ // perplexity: {
120
+ // usage: { citationTokens: 5286, numSearchQueries: 1 },
121
+ // images: [
122
+ // { imageUrl: "https://example.com/image1.jpg", originUrl: "https://elsewhere.com/page1", height: 1280, width: 720 },
123
+ // { imageUrl: "https://example.com/image2.jpg", originUrl: "https://elsewhere.com/page2", height: 1280, width: 720 }
124
+ // ]
125
+ // },
126
+ // }
127
+ ```
128
+
129
+ The metadata includes:
130
+
131
+ - `usage`: Object containing `citationTokens` and `numSearchQueries` metrics
132
+ - `images`: Array of image URLs when `return_images` is enabled (Tier-2 users only)
133
+
134
+ You can enable image responses by setting `return_images: true` in the provider options. This feature is only available to Perplexity Tier-2 users and above.
135
+
136
+ ### PDF Support
137
+
138
+ The Perplexity provider supports reading PDF files.
139
+ You can pass PDF files as part of the message content using the `file` type:
140
+
141
+ ```ts
142
+ const result = await generateText({
143
+ model: perplexity('sonar-pro'),
144
+ messages: [
145
+ {
146
+ role: 'user',
147
+ content: [
148
+ {
149
+ type: 'text',
150
+ text: 'What is this document about?',
151
+ },
152
+ {
153
+ type: 'file',
154
+ data: fs.readFileSync('./data/ai.pdf'),
155
+ mediaType: 'application/pdf',
156
+ filename: 'ai.pdf', // optional
157
+ },
158
+ ],
159
+ },
160
+ ],
161
+ });
162
+ ```
163
+
164
+ You can also pass the URL of a PDF:
165
+
166
+ ```ts
167
+ {
168
+ type: 'file',
169
+ data: new URL('https://example.com/document.pdf'),
170
+ mediaType: 'application/pdf',
171
+ filename: 'document.pdf', // optional
172
+ }
173
+ ```
174
+
175
+ The model will have access to the contents of the PDF file and
176
+ respond to questions about it.
177
+
178
+ <Note>
179
+ For more details about Perplexity's capabilities, see the [Perplexity chat
180
+ completion docs](https://docs.perplexity.ai/api-reference/chat-completions).
181
+ </Note>
182
+
183
+ ## Model Capabilities
184
+
185
+ | Model | Image Input | Object Generation | Tool Usage | Tool Streaming |
186
+ | --------------------- | ------------------- | ------------------- | ------------------- | ------------------- |
187
+ | `sonar-deep-research` | <Cross size={18} /> | <Check size={18} /> | <Cross size={18} /> | <Cross size={18} /> |
188
+ | `sonar-reasoning-pro` | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> | <Cross size={18} /> |
189
+ | `sonar-reasoning` | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> | <Cross size={18} /> |
190
+ | `sonar-pro` | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> | <Cross size={18} /> |
191
+ | `sonar` | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> | <Cross size={18} /> |
192
+
193
+ <Note>
194
+ Please see the [Perplexity docs](https://docs.perplexity.ai) for detailed API
195
+ documentation and the latest updates.
196
+ </Note>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/perplexity",
3
- "version": "3.0.9",
3
+ "version": "3.0.10",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -8,10 +8,14 @@
8
8
  "types": "./dist/index.d.ts",
9
9
  "files": [
10
10
  "dist/**/*",
11
+ "docs/**/*",
11
12
  "src",
12
13
  "CHANGELOG.md",
13
14
  "README.md"
14
15
  ],
16
+ "directories": {
17
+ "doc": "./docs"
18
+ },
15
19
  "exports": {
16
20
  "./package.json": "./package.json",
17
21
  ".": {
@@ -55,7 +59,7 @@
55
59
  "scripts": {
56
60
  "build": "pnpm clean && tsup --tsconfig tsconfig.build.json",
57
61
  "build:watch": "pnpm clean && tsup --watch",
58
- "clean": "del-cli dist *.tsbuildinfo",
62
+ "clean": "del-cli dist docs *.tsbuildinfo",
59
63
  "lint": "eslint \"./**/*.ts*\"",
60
64
  "type-check": "tsc --build",
61
65
  "prettier-check": "prettier --check \"./**/*.ts*\"",