@ai-sdk/perplexity 4.0.0-beta.3 → 4.0.0-beta.30

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/dist/index.mjs DELETED
@@ -1,513 +0,0 @@
1
- // src/perplexity-provider.ts
2
- import {
3
- NoSuchModelError
4
- } from "@ai-sdk/provider";
5
- import {
6
- generateId,
7
- loadApiKey,
8
- withoutTrailingSlash,
9
- withUserAgentSuffix
10
- } from "@ai-sdk/provider-utils";
11
-
12
- // src/perplexity-language-model.ts
13
- import {
14
- combineHeaders,
15
- createEventSourceResponseHandler,
16
- createJsonErrorResponseHandler,
17
- createJsonResponseHandler,
18
- postJsonToApi
19
- } from "@ai-sdk/provider-utils";
20
- import { z } from "zod/v4";
21
-
22
- // src/convert-perplexity-usage.ts
23
- function convertPerplexityUsage(usage) {
24
- var _a, _b, _c;
25
- if (usage == null) {
26
- return {
27
- inputTokens: {
28
- total: void 0,
29
- noCache: void 0,
30
- cacheRead: void 0,
31
- cacheWrite: void 0
32
- },
33
- outputTokens: {
34
- total: void 0,
35
- text: void 0,
36
- reasoning: void 0
37
- },
38
- raw: void 0
39
- };
40
- }
41
- const promptTokens = (_a = usage.prompt_tokens) != null ? _a : 0;
42
- const completionTokens = (_b = usage.completion_tokens) != null ? _b : 0;
43
- const reasoningTokens = (_c = usage.reasoning_tokens) != null ? _c : 0;
44
- return {
45
- inputTokens: {
46
- total: promptTokens,
47
- noCache: promptTokens,
48
- cacheRead: void 0,
49
- cacheWrite: void 0
50
- },
51
- outputTokens: {
52
- total: completionTokens,
53
- text: completionTokens - reasoningTokens,
54
- reasoning: reasoningTokens
55
- },
56
- raw: usage
57
- };
58
- }
59
-
60
- // src/convert-to-perplexity-messages.ts
61
- import {
62
- UnsupportedFunctionalityError
63
- } from "@ai-sdk/provider";
64
- import { convertUint8ArrayToBase64 } from "@ai-sdk/provider-utils";
65
- function convertToPerplexityMessages(prompt) {
66
- const messages = [];
67
- for (const { role, content } of prompt) {
68
- switch (role) {
69
- case "system": {
70
- messages.push({ role: "system", content });
71
- break;
72
- }
73
- case "user":
74
- case "assistant": {
75
- const hasMultipartContent = content.some(
76
- (part) => part.type === "file" && part.mediaType.startsWith("image/") || part.type === "file" && part.mediaType === "application/pdf"
77
- );
78
- const messageContent = content.map((part, index) => {
79
- var _a;
80
- switch (part.type) {
81
- case "text": {
82
- return {
83
- type: "text",
84
- text: part.text
85
- };
86
- }
87
- case "file": {
88
- if (part.mediaType === "application/pdf") {
89
- return part.data instanceof URL ? {
90
- type: "file_url",
91
- file_url: {
92
- url: part.data.toString()
93
- },
94
- file_name: part.filename
95
- } : {
96
- type: "file_url",
97
- file_url: {
98
- url: typeof part.data === "string" ? part.data : convertUint8ArrayToBase64(part.data)
99
- },
100
- file_name: part.filename || `document-${index}.pdf`
101
- };
102
- } else if (part.mediaType.startsWith("image/")) {
103
- return part.data instanceof URL ? {
104
- type: "image_url",
105
- image_url: {
106
- url: part.data.toString()
107
- }
108
- } : {
109
- type: "image_url",
110
- image_url: {
111
- url: `data:${(_a = part.mediaType) != null ? _a : "image/jpeg"};base64,${typeof part.data === "string" ? part.data : convertUint8ArrayToBase64(part.data)}`
112
- }
113
- };
114
- }
115
- }
116
- }
117
- }).filter(Boolean);
118
- messages.push({
119
- role,
120
- content: hasMultipartContent ? messageContent : messageContent.filter((part) => part.type === "text").map((part) => part.text).join("")
121
- });
122
- break;
123
- }
124
- case "tool": {
125
- throw new UnsupportedFunctionalityError({
126
- functionality: "Tool messages"
127
- });
128
- }
129
- default: {
130
- const _exhaustiveCheck = role;
131
- throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
132
- }
133
- }
134
- }
135
- return messages;
136
- }
137
-
138
- // src/map-perplexity-finish-reason.ts
139
- function mapPerplexityFinishReason(finishReason) {
140
- switch (finishReason) {
141
- case "stop":
142
- case "length":
143
- return finishReason;
144
- default:
145
- return "other";
146
- }
147
- }
148
-
149
- // src/perplexity-language-model.ts
150
- var PerplexityLanguageModel = class {
151
- constructor(modelId, config) {
152
- this.specificationVersion = "v4";
153
- this.provider = "perplexity";
154
- this.supportedUrls = {
155
- // No URLs are supported.
156
- };
157
- this.modelId = modelId;
158
- this.config = config;
159
- }
160
- getArgs({
161
- prompt,
162
- maxOutputTokens,
163
- temperature,
164
- topP,
165
- topK,
166
- frequencyPenalty,
167
- presencePenalty,
168
- stopSequences,
169
- responseFormat,
170
- seed,
171
- providerOptions
172
- }) {
173
- var _a;
174
- const warnings = [];
175
- if (topK != null) {
176
- warnings.push({ type: "unsupported", feature: "topK" });
177
- }
178
- if (stopSequences != null) {
179
- warnings.push({ type: "unsupported", feature: "stopSequences" });
180
- }
181
- if (seed != null) {
182
- warnings.push({ type: "unsupported", feature: "seed" });
183
- }
184
- return {
185
- args: {
186
- // model id:
187
- model: this.modelId,
188
- // standardized settings:
189
- frequency_penalty: frequencyPenalty,
190
- max_tokens: maxOutputTokens,
191
- presence_penalty: presencePenalty,
192
- temperature,
193
- top_k: topK,
194
- top_p: topP,
195
- // response format:
196
- response_format: (responseFormat == null ? void 0 : responseFormat.type) === "json" ? {
197
- type: "json_schema",
198
- json_schema: { schema: responseFormat.schema }
199
- } : void 0,
200
- // provider extensions
201
- ...(_a = providerOptions == null ? void 0 : providerOptions.perplexity) != null ? _a : {},
202
- // messages:
203
- messages: convertToPerplexityMessages(prompt)
204
- },
205
- warnings
206
- };
207
- }
208
- async doGenerate(options) {
209
- var _a, _b, _c, _d, _e, _f, _g;
210
- const { args: body, warnings } = this.getArgs(options);
211
- const {
212
- responseHeaders,
213
- value: response,
214
- rawValue: rawResponse
215
- } = await postJsonToApi({
216
- url: `${this.config.baseURL}/chat/completions`,
217
- headers: combineHeaders(this.config.headers(), options.headers),
218
- body,
219
- failedResponseHandler: createJsonErrorResponseHandler({
220
- errorSchema: perplexityErrorSchema,
221
- errorToMessage
222
- }),
223
- successfulResponseHandler: createJsonResponseHandler(
224
- perplexityResponseSchema
225
- ),
226
- abortSignal: options.abortSignal,
227
- fetch: this.config.fetch
228
- });
229
- const choice = response.choices[0];
230
- const content = [];
231
- const text = choice.message.content;
232
- if (text.length > 0) {
233
- content.push({ type: "text", text });
234
- }
235
- if (response.citations != null) {
236
- for (const url of response.citations) {
237
- content.push({
238
- type: "source",
239
- sourceType: "url",
240
- id: this.config.generateId(),
241
- url
242
- });
243
- }
244
- }
245
- return {
246
- content,
247
- finishReason: {
248
- unified: mapPerplexityFinishReason(choice.finish_reason),
249
- raw: (_a = choice.finish_reason) != null ? _a : void 0
250
- },
251
- usage: convertPerplexityUsage(response.usage),
252
- request: { body },
253
- response: {
254
- ...getResponseMetadata(response),
255
- headers: responseHeaders,
256
- body: rawResponse
257
- },
258
- warnings,
259
- providerMetadata: {
260
- perplexity: {
261
- images: (_c = (_b = response.images) == null ? void 0 : _b.map((image) => ({
262
- imageUrl: image.image_url,
263
- originUrl: image.origin_url,
264
- height: image.height,
265
- width: image.width
266
- }))) != null ? _c : null,
267
- usage: {
268
- citationTokens: (_e = (_d = response.usage) == null ? void 0 : _d.citation_tokens) != null ? _e : null,
269
- numSearchQueries: (_g = (_f = response.usage) == null ? void 0 : _f.num_search_queries) != null ? _g : null
270
- }
271
- }
272
- }
273
- };
274
- }
275
- async doStream(options) {
276
- const { args, warnings } = this.getArgs(options);
277
- const body = { ...args, stream: true };
278
- const { responseHeaders, value: response } = await postJsonToApi({
279
- url: `${this.config.baseURL}/chat/completions`,
280
- headers: combineHeaders(this.config.headers(), options.headers),
281
- body,
282
- failedResponseHandler: createJsonErrorResponseHandler({
283
- errorSchema: perplexityErrorSchema,
284
- errorToMessage
285
- }),
286
- successfulResponseHandler: createEventSourceResponseHandler(
287
- perplexityChunkSchema
288
- ),
289
- abortSignal: options.abortSignal,
290
- fetch: this.config.fetch
291
- });
292
- let finishReason = {
293
- unified: "other",
294
- raw: void 0
295
- };
296
- let usage = void 0;
297
- const providerMetadata = {
298
- perplexity: {
299
- usage: {
300
- citationTokens: null,
301
- numSearchQueries: null
302
- },
303
- images: null
304
- }
305
- };
306
- let isFirstChunk = true;
307
- let isActive = false;
308
- const self = this;
309
- return {
310
- stream: response.pipeThrough(
311
- new TransformStream({
312
- start(controller) {
313
- controller.enqueue({ type: "stream-start", warnings });
314
- },
315
- transform(chunk, controller) {
316
- var _a, _b, _c;
317
- if (options.includeRawChunks) {
318
- controller.enqueue({ type: "raw", rawValue: chunk.rawValue });
319
- }
320
- if (!chunk.success) {
321
- controller.enqueue({ type: "error", error: chunk.error });
322
- return;
323
- }
324
- const value = chunk.value;
325
- if (isFirstChunk) {
326
- controller.enqueue({
327
- type: "response-metadata",
328
- ...getResponseMetadata(value)
329
- });
330
- (_a = value.citations) == null ? void 0 : _a.forEach((url) => {
331
- controller.enqueue({
332
- type: "source",
333
- sourceType: "url",
334
- id: self.config.generateId(),
335
- url
336
- });
337
- });
338
- isFirstChunk = false;
339
- }
340
- if (value.usage != null) {
341
- usage = value.usage;
342
- providerMetadata.perplexity.usage = {
343
- citationTokens: (_b = value.usage.citation_tokens) != null ? _b : null,
344
- numSearchQueries: (_c = value.usage.num_search_queries) != null ? _c : null
345
- };
346
- }
347
- if (value.images != null) {
348
- providerMetadata.perplexity.images = value.images.map((image) => ({
349
- imageUrl: image.image_url,
350
- originUrl: image.origin_url,
351
- height: image.height,
352
- width: image.width
353
- }));
354
- }
355
- const choice = value.choices[0];
356
- if ((choice == null ? void 0 : choice.finish_reason) != null) {
357
- finishReason = {
358
- unified: mapPerplexityFinishReason(choice.finish_reason),
359
- raw: choice.finish_reason
360
- };
361
- }
362
- if ((choice == null ? void 0 : choice.delta) == null) {
363
- return;
364
- }
365
- const delta = choice.delta;
366
- const textContent = delta.content;
367
- if (textContent != null) {
368
- if (!isActive) {
369
- controller.enqueue({ type: "text-start", id: "0" });
370
- isActive = true;
371
- }
372
- controller.enqueue({
373
- type: "text-delta",
374
- id: "0",
375
- delta: textContent
376
- });
377
- }
378
- },
379
- flush(controller) {
380
- if (isActive) {
381
- controller.enqueue({ type: "text-end", id: "0" });
382
- }
383
- controller.enqueue({
384
- type: "finish",
385
- finishReason,
386
- usage: convertPerplexityUsage(usage),
387
- providerMetadata
388
- });
389
- }
390
- })
391
- ),
392
- request: { body },
393
- response: { headers: responseHeaders }
394
- };
395
- }
396
- };
397
- function getResponseMetadata({
398
- id,
399
- model,
400
- created
401
- }) {
402
- return {
403
- id,
404
- modelId: model,
405
- timestamp: new Date(created * 1e3)
406
- };
407
- }
408
- var perplexityUsageSchema = z.object({
409
- prompt_tokens: z.number(),
410
- completion_tokens: z.number(),
411
- total_tokens: z.number().nullish(),
412
- citation_tokens: z.number().nullish(),
413
- num_search_queries: z.number().nullish(),
414
- reasoning_tokens: z.number().nullish()
415
- });
416
- var perplexityImageSchema = z.object({
417
- image_url: z.string(),
418
- origin_url: z.string(),
419
- height: z.number(),
420
- width: z.number()
421
- });
422
- var perplexityResponseSchema = z.object({
423
- id: z.string(),
424
- created: z.number(),
425
- model: z.string(),
426
- choices: z.array(
427
- z.object({
428
- message: z.object({
429
- role: z.literal("assistant"),
430
- content: z.string()
431
- }),
432
- finish_reason: z.string().nullish()
433
- })
434
- ),
435
- citations: z.array(z.string()).nullish(),
436
- images: z.array(perplexityImageSchema).nullish(),
437
- usage: perplexityUsageSchema.nullish()
438
- });
439
- var perplexityChunkSchema = z.object({
440
- id: z.string(),
441
- created: z.number(),
442
- model: z.string(),
443
- choices: z.array(
444
- z.object({
445
- delta: z.object({
446
- role: z.literal("assistant"),
447
- content: z.string()
448
- }),
449
- finish_reason: z.string().nullish()
450
- })
451
- ),
452
- citations: z.array(z.string()).nullish(),
453
- images: z.array(perplexityImageSchema).nullish(),
454
- usage: perplexityUsageSchema.nullish()
455
- });
456
- var perplexityErrorSchema = z.object({
457
- error: z.object({
458
- code: z.number(),
459
- message: z.string().nullish(),
460
- type: z.string().nullish()
461
- })
462
- });
463
- var errorToMessage = (data) => {
464
- var _a, _b;
465
- return (_b = (_a = data.error.message) != null ? _a : data.error.type) != null ? _b : "unknown error";
466
- };
467
-
468
- // src/version.ts
469
- var VERSION = true ? "4.0.0-beta.3" : "0.0.0-test";
470
-
471
- // src/perplexity-provider.ts
472
- function createPerplexity(options = {}) {
473
- const getHeaders = () => withUserAgentSuffix(
474
- {
475
- Authorization: `Bearer ${loadApiKey({
476
- apiKey: options.apiKey,
477
- environmentVariableName: "PERPLEXITY_API_KEY",
478
- description: "Perplexity"
479
- })}`,
480
- ...options.headers
481
- },
482
- `ai-sdk/perplexity/${VERSION}`
483
- );
484
- const createLanguageModel = (modelId) => {
485
- var _a;
486
- return new PerplexityLanguageModel(modelId, {
487
- baseURL: withoutTrailingSlash(
488
- (_a = options.baseURL) != null ? _a : "https://api.perplexity.ai"
489
- ),
490
- headers: getHeaders,
491
- generateId,
492
- fetch: options.fetch
493
- });
494
- };
495
- const provider = (modelId) => createLanguageModel(modelId);
496
- provider.specificationVersion = "v4";
497
- provider.languageModel = createLanguageModel;
498
- provider.embeddingModel = (modelId) => {
499
- throw new NoSuchModelError({ modelId, modelType: "embeddingModel" });
500
- };
501
- provider.textEmbeddingModel = provider.embeddingModel;
502
- provider.imageModel = (modelId) => {
503
- throw new NoSuchModelError({ modelId, modelType: "imageModel" });
504
- };
505
- return provider;
506
- }
507
- var perplexity = createPerplexity();
508
- export {
509
- VERSION,
510
- createPerplexity,
511
- perplexity
512
- };
513
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
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 LanguageModelV4,\n NoSuchModelError,\n ProviderV4,\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 ProviderV4 {\n /**\n * Creates an Perplexity chat model for text generation.\n */\n (modelId: PerplexityLanguageModelId): LanguageModelV4;\n\n /**\n * Creates an Perplexity language model for text generation.\n */\n languageModel(modelId: PerplexityLanguageModelId): LanguageModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface PerplexityProviderSettings {\n /**\n * Base URL for the 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 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 = 'v4' 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 LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4FinishReason,\n LanguageModelV4GenerateResult,\n LanguageModelV4StreamPart,\n LanguageModelV4StreamResult,\n SharedV4Warning,\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 LanguageModelV4 {\n readonly specificationVersion = 'v4';\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 }: LanguageModelV4CallOptions) {\n const warnings: SharedV4Warning[] = [];\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: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\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<LanguageModelV4Content> = [];\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: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\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: LanguageModelV4FinishReason = {\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 LanguageModelV4StreamPart\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 { LanguageModelV4Usage } 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): LanguageModelV4Usage {\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 LanguageModelV4Prompt,\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: LanguageModelV4Prompt,\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 { LanguageModelV4FinishReason } from '@ai-sdk/provider';\n\nexport function mapPerplexityFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV4FinishReason['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":[]}