@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/CHANGELOG.md +218 -4
- package/README.md +2 -0
- package/dist/index.js +143 -107
- package/dist/index.js.map +1 -1
- package/package.json +7 -9
- package/src/convert-to-perplexity-messages.ts +10 -1
- package/src/perplexity-language-model.ts +64 -3
- package/dist/index.d.mts +0 -44
- package/dist/index.mjs +0 -513
- package/dist/index.mjs.map +0 -1
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
|
package/dist/index.mjs.map
DELETED
|
@@ -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":[]}
|