@revenium/perplexity 1.0.25 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +443 -568
  2. package/dist/cjs/core/config/perplexity-config.js +45 -0
  3. package/dist/cjs/core/config/perplexity-config.js.map +1 -0
  4. package/dist/cjs/core/config/revenium-config.js +80 -0
  5. package/dist/cjs/core/config/revenium-config.js.map +1 -0
  6. package/dist/cjs/core/tracking/metering.js +131 -0
  7. package/dist/cjs/core/tracking/metering.js.map +1 -0
  8. package/dist/cjs/core/wrapper/perplexity-client.js +177 -0
  9. package/dist/cjs/core/wrapper/perplexity-client.js.map +1 -0
  10. package/dist/cjs/index.js +64 -0
  11. package/dist/cjs/index.js.map +1 -0
  12. package/dist/cjs/types/index.js +21 -0
  13. package/dist/cjs/types/index.js.map +1 -0
  14. package/dist/cjs/utils/logger.js +23 -0
  15. package/dist/cjs/utils/logger.js.map +1 -0
  16. package/dist/esm/core/config/perplexity-config.js +40 -0
  17. package/dist/esm/core/config/perplexity-config.js.map +1 -0
  18. package/dist/esm/core/config/revenium-config.js +72 -0
  19. package/dist/esm/core/config/revenium-config.js.map +1 -0
  20. package/dist/esm/core/tracking/metering.js +126 -0
  21. package/dist/esm/core/tracking/metering.js.map +1 -0
  22. package/dist/esm/core/wrapper/perplexity-client.js +170 -0
  23. package/dist/esm/core/wrapper/perplexity-client.js.map +1 -0
  24. package/dist/esm/index.js +44 -0
  25. package/dist/esm/index.js.map +1 -0
  26. package/dist/esm/types/index.js +18 -0
  27. package/dist/esm/types/index.js.map +1 -0
  28. package/dist/esm/utils/logger.js +20 -0
  29. package/dist/esm/utils/logger.js.map +1 -0
  30. package/dist/types/core/config/perplexity-config.d.ts +24 -0
  31. package/dist/types/core/config/perplexity-config.d.ts.map +1 -0
  32. package/dist/types/core/config/revenium-config.d.ts +37 -0
  33. package/dist/types/core/config/revenium-config.d.ts.map +1 -0
  34. package/dist/types/core/tracking/metering.d.ts +31 -0
  35. package/dist/types/core/tracking/metering.d.ts.map +1 -0
  36. package/dist/types/core/wrapper/perplexity-client.d.ts +32 -0
  37. package/dist/types/core/wrapper/perplexity-client.d.ts.map +1 -0
  38. package/dist/types/index.d.ts +34 -0
  39. package/dist/types/index.d.ts.map +1 -0
  40. package/dist/types/types/index.d.ts +159 -0
  41. package/dist/types/types/index.d.ts.map +1 -0
  42. package/dist/types/utils/logger.d.ts +10 -0
  43. package/dist/types/utils/logger.d.ts.map +1 -0
  44. package/package.json +36 -31
  45. package/.env.example +0 -3
  46. package/dist/interfaces/meteringResponse.d.ts +0 -28
  47. package/dist/interfaces/meteringResponse.js +0 -2
  48. package/dist/models/Metering.js +0 -83
  49. package/dist/v1/perplexityV1.service.js +0 -166
  50. package/dist/v2/perplexityV2.service.js +0 -178
  51. package/examples/v1/basic.ts +0 -50
  52. package/examples/v1/chat.ts +0 -40
  53. package/examples/v1/metadata.ts +0 -49
  54. package/examples/v1/streaming.ts +0 -44
  55. package/examples/v2/basic.ts +0 -49
  56. package/examples/v2/chat.ts +0 -60
  57. package/examples/v2/metadata.ts +0 -71
  58. package/examples/v2/streaming.ts +0 -61
  59. package/playground/v1/basic.js +0 -50
  60. package/playground/v1/chat.js +0 -46
  61. package/playground/v1/metadata.js +0 -50
  62. package/playground/v1/streaming.js +0 -44
  63. package/playground/v2/basic.js +0 -49
  64. package/playground/v2/chat.js +0 -72
  65. package/playground/v2/metadata.js +0 -76
  66. package/playground/v2/streaming.js +0 -67
  67. package/src/index.ts +0 -17
  68. package/src/interfaces/chatCompletionRequest.ts +0 -15
  69. package/src/interfaces/credential.ts +0 -4
  70. package/src/interfaces/meteringRequest.ts +0 -14
  71. package/src/interfaces/meteringResponse.ts +0 -29
  72. package/src/interfaces/operation.ts +0 -4
  73. package/src/interfaces/perplexityResponse.ts +0 -63
  74. package/src/interfaces/perplexityStreaming.ts +0 -56
  75. package/src/interfaces/subscriber.ts +0 -8
  76. package/src/interfaces/tokenCounts.ts +0 -7
  77. package/src/interfaces/usageMetadata.ts +0 -27
  78. package/src/models/Logger.ts +0 -38
  79. package/src/models/Metering.ts +0 -121
  80. package/src/utils/calculateDurationMs.ts +0 -3
  81. package/src/utils/constants/constants.ts +0 -10
  82. package/src/utils/constants/logLevels.ts +0 -1
  83. package/src/utils/constants/messages.ts +0 -11
  84. package/src/utils/constants/models.ts +0 -20
  85. package/src/utils/constants/perplexityModels.ts +0 -71
  86. package/src/utils/extractTokenCount.ts +0 -26
  87. package/src/utils/formatTimestamp.ts +0 -3
  88. package/src/utils/generateTransactionId.ts +0 -5
  89. package/src/utils/index.ts +0 -39
  90. package/src/utils/loadEnv.ts +0 -8
  91. package/src/utils/safeExtract.ts +0 -67
  92. package/src/v1/perplexityV1.controller.ts +0 -164
  93. package/src/v1/perplexityV1.service.ts +0 -230
  94. package/src/v2/perplexityV2.controller.ts +0 -219
  95. package/src/v2/perplexityV2.service.ts +0 -260
  96. package/tsconfig.json +0 -15
@@ -1,178 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.PerplexityV2Service = void 0;
7
- const openai_1 = __importDefault(require("openai"));
8
- const Logger_1 = require("../models/Logger");
9
- const Metering_1 = require("../models/Metering");
10
- const generateTransactionId_1 = require("../utils/generateTransactionId");
11
- const operation_1 = require("../interfaces/operation");
12
- const utils_1 = require("../utils");
13
- class PerplexityV2Service {
14
- constructor() {
15
- this.working = true;
16
- this.client = new openai_1.default({
17
- apiKey: utils_1.PERPLEXITY_API_KEY,
18
- baseURL: utils_1.PERPLEXITY_API_BASE_URL,
19
- });
20
- Logger_1.logger.info(`${utils_1.PERPLEXITY_CLIENT_INITIALIZED_MESSAGE} (V2)`);
21
- }
22
- async createChatCompletion(params, model) {
23
- var _a, _b, _c;
24
- const transactionId = (0, generateTransactionId_1.generateTransactionId)();
25
- const startTime = Date.now();
26
- try {
27
- const { usageMetadata, ...openaiParams } = params;
28
- const requestParams = {
29
- ...openaiParams,
30
- model,
31
- };
32
- const result = (await this.client.chat.completions.create({
33
- ...requestParams,
34
- stream: false,
35
- }));
36
- const endTime = Date.now();
37
- const processingTime = endTime - startTime;
38
- // Build V2 enhanced response format (following OpenAI Responses API)
39
- const perplexityV2Response = {
40
- id: result.id,
41
- object: "chat.completion",
42
- created: result.created,
43
- model: result.model,
44
- choices: result.choices,
45
- usage: {
46
- prompt_tokens: ((_a = result.usage) === null || _a === void 0 ? void 0 : _a.prompt_tokens) || 0,
47
- completion_tokens: ((_b = result.usage) === null || _b === void 0 ? void 0 : _b.completion_tokens) || 0,
48
- total_tokens: ((_c = result.usage) === null || _c === void 0 ? void 0 : _c.total_tokens) || 0,
49
- },
50
- metadata: {
51
- transactionId,
52
- processingTime,
53
- version: "v2",
54
- },
55
- };
56
- // Send metering data (modernized approach)
57
- await this.sendMeteringData(transactionId, model, operation_1.IOperationType.CHAT, {
58
- inputTokenCount: perplexityV2Response.usage.prompt_tokens,
59
- outputTokenCount: perplexityV2Response.usage.completion_tokens,
60
- totalTokenCount: perplexityV2Response.usage.total_tokens,
61
- }, processingTime, usageMetadata);
62
- return perplexityV2Response;
63
- }
64
- catch (error) {
65
- Logger_1.logger.error("Error in Perplexity V2 chat completion:", error);
66
- throw error;
67
- }
68
- }
69
- async createStreamingCompletion(params, model) {
70
- const transactionId = (0, generateTransactionId_1.generateTransactionId)();
71
- const startTime = Date.now();
72
- try {
73
- const { usageMetadata, ...openaiParams } = params;
74
- const requestParams = {
75
- ...openaiParams,
76
- model,
77
- };
78
- const stream = await this.client.chat.completions.create({
79
- ...requestParams,
80
- stream: true,
81
- });
82
- const wrappedStream = this.wrapStreamV2(stream, transactionId, model, startTime, usageMetadata);
83
- return {
84
- id: transactionId,
85
- object: "chat.completion.chunk",
86
- stream: wrappedStream,
87
- metadata: {
88
- transactionId,
89
- startTime,
90
- version: "v2",
91
- },
92
- };
93
- }
94
- catch (error) {
95
- Logger_1.logger.error("Error in Perplexity V2 streaming:", error);
96
- throw error;
97
- }
98
- }
99
- async *wrapStreamV2(stream, transactionId, model, startTime, usageMetadata) {
100
- let lastChunk = null;
101
- try {
102
- for await (const chunk of stream) {
103
- lastChunk = chunk;
104
- // Transform to V2 format (following OpenAI Responses API)
105
- const v2Chunk = {
106
- id: chunk.id,
107
- object: "chat.completion.chunk",
108
- created: chunk.created,
109
- model: chunk.model,
110
- choices: chunk.choices,
111
- usage: chunk.usage
112
- ? {
113
- prompt_tokens: chunk.usage.prompt_tokens || 0,
114
- completion_tokens: chunk.usage.completion_tokens || 0,
115
- total_tokens: chunk.usage.total_tokens || 0,
116
- }
117
- : undefined,
118
- };
119
- yield v2Chunk;
120
- }
121
- // Send metering data when stream completes
122
- const endTime = Date.now();
123
- const processingTime = endTime - startTime;
124
- if (lastChunk === null || lastChunk === void 0 ? void 0 : lastChunk.usage) {
125
- await this.sendMeteringData(transactionId, model, operation_1.IOperationType.CHAT, {
126
- inputTokenCount: lastChunk.usage.prompt_tokens || 0,
127
- outputTokenCount: lastChunk.usage.completion_tokens || 0,
128
- totalTokenCount: lastChunk.usage.total_tokens || 0,
129
- }, processingTime, usageMetadata);
130
- }
131
- }
132
- catch (error) {
133
- Logger_1.logger.error("Error in Perplexity V2 stream processing:", error);
134
- throw error;
135
- }
136
- }
137
- async sendMeteringData(transactionId, model, operationType, usageData, processingTime, customMetadata) {
138
- if (!this.working) {
139
- Logger_1.logger.warning("Metering is not working. Check your configuration.");
140
- return;
141
- }
142
- try {
143
- const startTime = new Date(Date.now() - processingTime);
144
- const endTime = new Date();
145
- const metering = new Metering_1.Metering(utils_1.REVENIUM_METERING_API_KEY !== null && utils_1.REVENIUM_METERING_API_KEY !== void 0 ? utils_1.REVENIUM_METERING_API_KEY : "", utils_1.REVENIUM_METERING_BASE_URL !== null && utils_1.REVENIUM_METERING_BASE_URL !== void 0 ? utils_1.REVENIUM_METERING_BASE_URL : "");
146
- // Convert IUsageMetadata to ITokenCounts for metering
147
- const tokenCounts = {
148
- inputTokens: usageData.inputTokenCount || 0,
149
- outputTokens: usageData.outputTokenCount || 0,
150
- totalTokens: usageData.totalTokenCount || 0,
151
- };
152
- // Combine custom metadata with transaction ID (token counts are handled separately)
153
- const combinedMetadata = {
154
- ...customMetadata,
155
- transactionId,
156
- };
157
- // Use the same approach as V1 but with V2 enhancements
158
- const meteringData = metering.createMetering({
159
- modelName: model,
160
- endTime,
161
- startTime,
162
- operationType,
163
- stopReason: "END",
164
- tokenCounts,
165
- usageMetadata: combinedMetadata,
166
- }, false);
167
- await metering.sendMeteringData(meteringData);
168
- Logger_1.logger.info("V2 Metering data sent successfully.");
169
- }
170
- catch (error) {
171
- Logger_1.logger.error("Error sending V2 metering data:", error);
172
- }
173
- }
174
- setWorking(working) {
175
- this.working = working;
176
- }
177
- }
178
- exports.PerplexityV2Service = PerplexityV2Service;
@@ -1,50 +0,0 @@
1
- import { PerplexityV1Controller } from "../../src/index";
2
-
3
- const basicV1Example = async () => {
4
- console.log("=".repeat(50));
5
- console.log(
6
- "šŸ”„ Perplexity V1 Basic Example (Compatible with current middleware)"
7
- );
8
- console.log("=".repeat(50));
9
-
10
- try {
11
- const controller = new PerplexityV1Controller();
12
-
13
- // Basic chat completion
14
- const result = await controller.createChat([
15
- "What is artificial intelligence and how does it work?",
16
- ]);
17
-
18
- console.log("šŸ“ Response:");
19
- console.log(result.responses[0].text);
20
-
21
- console.log("\nšŸ“Š Usage Metadata:");
22
- console.log(`Input tokens: ${result.usageMetadata.inputTokenCount}`);
23
- console.log(`Output tokens: ${result.usageMetadata.outputTokenCount}`);
24
- console.log(`Total tokens: ${result.usageMetadata.totalTokenCount}`);
25
-
26
- console.log("\nšŸ”§ Model Info:");
27
- console.log(`Model: ${result.modelVersion}`);
28
- console.log(`Transaction ID: ${result.transactionId}`);
29
-
30
- // Test model capabilities
31
- console.log("\nšŸŽÆ Model Capabilities:");
32
- const models = controller.getAvailableModels();
33
- console.log(`Available models: ${models.slice(0, 3).join(", ")}...`);
34
-
35
- const supportsChat = controller.supportsCapability("sonar-pro", "chat");
36
- const supportsStreaming = controller.supportsCapability(
37
- "sonar-pro",
38
- "streaming"
39
- );
40
- const supportsOnline = controller.supportsCapability("sonar-pro", "online");
41
-
42
- console.log(
43
- `Sonar-pro capabilities: chat=${supportsChat}, streaming=${supportsStreaming}, online=${supportsOnline}`
44
- );
45
- } catch (error) {
46
- console.error("āŒ Error:", error);
47
- }
48
- };
49
-
50
- basicV1Example();
@@ -1,40 +0,0 @@
1
- import { PerplexityV1Controller } from "../../src/index";
2
-
3
- const chatV1Example = async () => {
4
- console.log("=".repeat(50));
5
- console.log("šŸ’¬ Perplexity V1 Multi-turn Chat Example");
6
- console.log("=".repeat(50));
7
-
8
- try {
9
- const controller = new PerplexityV1Controller();
10
-
11
- // Multi-turn conversation using message objects
12
- const messages = [
13
- { role: "user", content: "What are the benefits of renewable energy?" },
14
- { role: "assistant", content: "Renewable energy offers several key benefits including environmental sustainability, reduced greenhouse gas emissions, and long-term cost savings." },
15
- { role: "user", content: "Can you elaborate on the cost savings aspect?" }
16
- ];
17
-
18
- const result = await controller.createChat(messages, "sonar-pro");
19
-
20
- console.log("šŸ“ Multi-turn Chat Response:");
21
- console.log(result.responses[0].text);
22
-
23
- console.log("\nšŸ“Š Usage Statistics:");
24
- console.log(`Input tokens: ${result.usageMetadata.inputTokenCount}`);
25
- console.log(`Output tokens: ${result.usageMetadata.outputTokenCount}`);
26
- console.log(`Total tokens: ${result.usageMetadata.totalTokenCount}`);
27
-
28
- console.log("\nšŸ”§ Model Information:");
29
- const modelInfo = controller.getModelInfo("sonar-pro");
30
- console.log(`Model: ${modelInfo.model}`);
31
- console.log(`Version: ${modelInfo.version}`);
32
- console.log(`Context Window: ${modelInfo.contextWindow} tokens`);
33
- console.log(`Capabilities:`, modelInfo.capabilities);
34
-
35
- } catch (error) {
36
- console.error("āŒ Error:", error);
37
- }
38
- };
39
-
40
- chatV1Example();
@@ -1,49 +0,0 @@
1
- import { PerplexityV1Controller, IUsageMetadata } from "../../src/index";
2
-
3
- const metadataV1Example = async () => {
4
- console.log("=".repeat(50));
5
- console.log("šŸ“Š Perplexity V1 Custom Metadata Example");
6
- console.log("=".repeat(50));
7
-
8
- try {
9
- const controller = new PerplexityV1Controller();
10
-
11
- // Custom metadata for tracking
12
- const customMetadata: IUsageMetadata = {
13
- traceId: "trace-12345",
14
- taskType: "research-query",
15
- subscriberEmail: "user@example.com",
16
- subscriberId: "user-456",
17
- organizationId: "org-789",
18
- agent: "perplexity-v1-demo",
19
- };
20
-
21
- const result = await controller.createChat([
22
- "Explain quantum computing in simple terms"
23
- ], "sonar-pro", customMetadata);
24
-
25
- console.log("šŸ“ Response:");
26
- console.log(result.responses[0].text);
27
-
28
- console.log("\nšŸ“Š Usage Metadata:");
29
- console.log(`Input tokens: ${result.usageMetadata.inputTokenCount}`);
30
- console.log(`Output tokens: ${result.usageMetadata.outputTokenCount}`);
31
- console.log(`Total tokens: ${result.usageMetadata.totalTokenCount}`);
32
-
33
- console.log("\nšŸ·ļø Custom Metadata Sent:");
34
- console.log(`Trace ID: ${customMetadata.traceId}`);
35
- console.log(`Task Type: ${customMetadata.taskType}`);
36
- console.log(`Subscriber: ${customMetadata.subscriberEmail}`);
37
- console.log(`Organization: ${customMetadata.organizationId}`);
38
- console.log(`Agent: ${customMetadata.agent}`);
39
-
40
- console.log("\nšŸ”§ Transaction Info:");
41
- console.log(`Model: ${result.modelVersion}`);
42
- console.log(`Transaction ID: ${result.transactionId}`);
43
-
44
- } catch (error) {
45
- console.error("āŒ Error:", error);
46
- }
47
- };
48
-
49
- metadataV1Example();
@@ -1,44 +0,0 @@
1
- import { PerplexityV1Controller } from "../../src/index";
2
-
3
- const streamingV1Example = async () => {
4
- console.log("=".repeat(50));
5
- console.log(
6
- "🌊 Perplexity V1 Streaming Example (Compatible with current middleware)"
7
- );
8
- console.log("=".repeat(50));
9
-
10
- try {
11
- const controller = new PerplexityV1Controller();
12
-
13
- // Streaming chat completion
14
- const result = await controller.createStreaming(
15
- [
16
- "Write a short story about a robot learning to paint. Make it creative and engaging.",
17
- ],
18
- "sonar-pro"
19
- );
20
-
21
- console.log("šŸ“ Streaming Response:");
22
- console.log("-".repeat(30));
23
-
24
- let fullResponse = "";
25
- for await (const chunk of result.stream) {
26
- const content = chunk.choices?.[0]?.delta?.content || "";
27
- if (content) {
28
- process.stdout.write(content);
29
- fullResponse += content;
30
- }
31
- }
32
-
33
- console.log("\n" + "-".repeat(30));
34
- console.log(
35
- `\nšŸ“Š Total response length: ${fullResponse.length} characters`
36
- );
37
- console.log(`šŸ”§ Model: ${result.modelVersion}`);
38
- console.log(`šŸ†” Transaction ID: ${result.transactionId}`);
39
- } catch (error) {
40
- console.error("āŒ Error:", error);
41
- }
42
- };
43
-
44
- streamingV1Example();
@@ -1,49 +0,0 @@
1
- import { PerplexityV2Controller } from "../../src/index";
2
-
3
- const basicV2Example = async () => {
4
- console.log("=".repeat(50));
5
- console.log(
6
- "šŸš€ Perplexity V2 Basic Example (Enhanced Response Format - OpenAI Responses API)"
7
- );
8
- console.log("=".repeat(50));
9
-
10
- try {
11
- const controller = new PerplexityV2Controller();
12
-
13
- // Basic chat completion with V2 enhanced response
14
- const result = await controller.createChat([
15
- "What is artificial intelligence and how does it work?",
16
- ]);
17
-
18
- console.log("šŸ“ Response:");
19
- console.log(result.choices[0].message.content);
20
-
21
- console.log("\nšŸ“Š Enhanced Usage Info (V2):");
22
- console.log(`Prompt tokens: ${result.usage.prompt_tokens}`);
23
- console.log(`Completion tokens: ${result.usage.completion_tokens}`);
24
- console.log(`Total tokens: ${result.usage.total_tokens}`);
25
-
26
- console.log("\nšŸ”§ Enhanced Metadata (V2):");
27
- console.log(`ID: ${result.id}`);
28
- console.log(`Object: ${result.object}`);
29
- console.log(`Created: ${new Date(result.created * 1000).toISOString()}`);
30
- console.log(`Model: ${result.model}`);
31
- console.log(`Transaction ID: ${result.metadata.transactionId}`);
32
- console.log(`Processing Time: ${result.metadata.processingTime}ms`);
33
- console.log(`Version: ${result.metadata.version}`);
34
-
35
- // Test V2 enhanced features
36
- console.log("\nšŸŽÆ V2 Enhanced Features:");
37
- const modelInfo = controller.getModelInfo("sonar-pro");
38
- console.log(`Enhanced Model Info:`, modelInfo);
39
-
40
- const recommendation = controller.getRecommendedModel("online-search");
41
- console.log(
42
- `Recommended for online search: ${recommendation.model} - ${recommendation.reason}`
43
- );
44
- } catch (error) {
45
- console.error("āŒ Error:", error);
46
- }
47
- };
48
-
49
- basicV2Example();
@@ -1,60 +0,0 @@
1
- import { PerplexityV2Controller } from "../../src/index";
2
-
3
- const chatV2Example = async () => {
4
- console.log("=".repeat(50));
5
- console.log("šŸ’¬ Perplexity V2 Enhanced Chat Example (OpenAI Responses API)");
6
- console.log("=".repeat(50));
7
-
8
- try {
9
- const controller = new PerplexityV2Controller();
10
-
11
- // Multi-turn conversation with V2 enhanced features
12
- const messages = [
13
- { role: "user", content: "What are the latest developments in renewable energy technology?" },
14
- { role: "assistant", content: "Recent developments include improved solar panel efficiency, advanced battery storage systems, and offshore wind technology innovations." },
15
- { role: "user", content: "Tell me more about the battery storage improvements" }
16
- ];
17
-
18
- const result = await controller.createChat(messages, "sonar-pro");
19
-
20
- console.log("šŸ“ V2 Enhanced Chat Response:");
21
- console.log(result.choices[0].message.content);
22
-
23
- console.log("\nšŸ“Š V2 Enhanced Usage Statistics:");
24
- console.log(`Prompt tokens: ${result.usage.prompt_tokens}`);
25
- console.log(`Completion tokens: ${result.usage.completion_tokens}`);
26
- console.log(`Total tokens: ${result.usage.total_tokens}`);
27
-
28
- console.log("\nšŸ”§ V2 Enhanced Response Metadata:");
29
- console.log(`ID: ${result.id}`);
30
- console.log(`Object: ${result.object}`);
31
- console.log(`Created: ${new Date(result.created * 1000).toISOString()}`);
32
- console.log(`Model: ${result.model}`);
33
- console.log(`Finish Reason: ${result.choices[0].finish_reason}`);
34
- console.log(`Processing Time: ${result.metadata.processingTime}ms`);
35
- console.log(`Transaction ID: ${result.metadata.transactionId}`);
36
- console.log(`Version: ${result.metadata.version}`);
37
-
38
- // V2 Enhanced Features
39
- console.log("\nšŸš€ V2 Enhanced Model Features:");
40
- const modelInfo = controller.getModelInfo("sonar-pro");
41
- console.log(`Enhanced: ${modelInfo.enhanced}`);
42
- console.log(`Response Format: ${modelInfo.responseFormat}`);
43
-
44
- const performance = controller.getModelPerformance("sonar-pro");
45
- console.log(`Estimated Latency: ${performance.estimatedLatency}`);
46
- console.log(`Cost Tier: ${performance.costTier}`);
47
-
48
- // Model recommendations
49
- console.log("\nšŸŽÆ V2 Model Recommendations:");
50
- const onlineRec = controller.getRecommendedModel("online-search");
51
- const offlineRec = controller.getRecommendedModel("offline-chat");
52
- console.log(`For online search: ${onlineRec.model} - ${onlineRec.reason}`);
53
- console.log(`For offline chat: ${offlineRec.model} - ${offlineRec.reason}`);
54
-
55
- } catch (error) {
56
- console.error("āŒ Error:", error);
57
- }
58
- };
59
-
60
- chatV2Example();
@@ -1,71 +0,0 @@
1
- import { PerplexityV2Controller, IUsageMetadata } from "../../src/index";
2
-
3
- const metadataV2Example = async () => {
4
- console.log("=".repeat(50));
5
- console.log("šŸ“Š Perplexity V2 Enhanced Metadata Example (OpenAI Responses API)");
6
- console.log("=".repeat(50));
7
-
8
- try {
9
- const controller = new PerplexityV2Controller();
10
-
11
- // Enhanced custom metadata for V2
12
- const customMetadata: IUsageMetadata = {
13
- traceId: "trace-v2-67890",
14
- taskType: "advanced-research",
15
- subscriberEmail: "researcher@example.com",
16
- subscriberId: "user-v2-123",
17
- organizationId: "org-v2-456",
18
- agent: "perplexity-v2-enhanced",
19
- responseQualityScore: 0.95,
20
- operationType: "chat-completion",
21
- };
22
-
23
- const result = await controller.createChat([
24
- "Provide a comprehensive analysis of the impact of artificial intelligence on modern healthcare systems"
25
- ], "sonar-pro", customMetadata);
26
-
27
- console.log("šŸ“ V2 Enhanced Response:");
28
- console.log(result.choices[0].message.content);
29
-
30
- console.log("\nšŸ“Š V2 Enhanced Usage Statistics:");
31
- console.log(`Prompt tokens: ${result.usage.prompt_tokens}`);
32
- console.log(`Completion tokens: ${result.usage.completion_tokens}`);
33
- console.log(`Total tokens: ${result.usage.total_tokens}`);
34
-
35
- console.log("\nšŸ”§ V2 Enhanced Response Structure:");
36
- console.log(`ID: ${result.id}`);
37
- console.log(`Object: ${result.object}`);
38
- console.log(`Created: ${new Date(result.created * 1000).toISOString()}`);
39
- console.log(`Model: ${result.model}`);
40
- console.log(`Choice Index: ${result.choices[0].index}`);
41
- console.log(`Message Role: ${result.choices[0].message.role}`);
42
- console.log(`Finish Reason: ${result.choices[0].finish_reason}`);
43
-
44
- console.log("\nšŸ·ļø V2 Enhanced Metadata:");
45
- console.log(`Transaction ID: ${result.metadata.transactionId}`);
46
- console.log(`Processing Time: ${result.metadata.processingTime}ms`);
47
- console.log(`Version: ${result.metadata.version}`);
48
-
49
- console.log("\nšŸ“‹ Custom Metadata Sent:");
50
- console.log(`Trace ID: ${customMetadata.traceId}`);
51
- console.log(`Task Type: ${customMetadata.taskType}`);
52
- console.log(`Subscriber: ${customMetadata.subscriberEmail}`);
53
- console.log(`Organization: ${customMetadata.organizationId}`);
54
- console.log(`Agent: ${customMetadata.agent}`);
55
- console.log(`Quality Score: ${customMetadata.responseQualityScore}`);
56
- console.log(`Operation Type: ${customMetadata.operationType}`);
57
-
58
- // V2 Enhanced Analytics
59
- console.log("\nšŸ“ˆ V2 Enhanced Analytics:");
60
- const performance = controller.getModelPerformance("sonar-pro");
61
- console.log(`Context Window: ${performance.contextWindow} tokens`);
62
- console.log(`Online Capabilities: ${performance.online}`);
63
- console.log(`Estimated Latency: ${performance.estimatedLatency}`);
64
- console.log(`Cost Tier: ${performance.costTier}`);
65
-
66
- } catch (error) {
67
- console.error("āŒ Error:", error);
68
- }
69
- };
70
-
71
- metadataV2Example();
@@ -1,61 +0,0 @@
1
- import { PerplexityV2Controller } from "../../src/index";
2
-
3
- const streamingV2Example = async () => {
4
- console.log("=".repeat(50));
5
- console.log("🌊 Perplexity V2 Streaming Example (Enhanced Response Format)");
6
- console.log("=".repeat(50));
7
-
8
- try {
9
- const controller = new PerplexityV2Controller();
10
-
11
- // Streaming chat completion with V2 enhanced response
12
- const result = await controller.createStreaming([
13
- "Write a detailed explanation of how machine learning algorithms work, including examples."
14
- ], "sonar-pro");
15
-
16
- console.log("šŸ“ V2 Streaming Response:");
17
- console.log("-".repeat(30));
18
-
19
- let fullResponse = "";
20
- let chunkCount = 0;
21
- let lastUsage: any = null;
22
-
23
- for await (const chunk of result.stream) {
24
- chunkCount++;
25
- const content = chunk.choices?.[0]?.delta?.content || "";
26
-
27
- if (content) {
28
- process.stdout.write(content);
29
- fullResponse += content;
30
- }
31
-
32
- // Capture usage data from the last chunk
33
- if (chunk.usage) {
34
- lastUsage = chunk.usage;
35
- }
36
- }
37
-
38
- console.log("\n" + "-".repeat(30));
39
- console.log(`\nšŸ“Š V2 Enhanced Streaming Stats:`);
40
- console.log(`Total chunks received: ${chunkCount}`);
41
- console.log(`Response length: ${fullResponse.length} characters`);
42
-
43
- if (lastUsage) {
44
- console.log(`Prompt tokens: ${lastUsage.prompt_tokens}`);
45
- console.log(`Completion tokens: ${lastUsage.completion_tokens}`);
46
- console.log(`Total tokens: ${lastUsage.total_tokens}`);
47
- }
48
-
49
- console.log(`\nšŸ”§ V2 Metadata:`);
50
- console.log(`Stream ID: ${result.id}`);
51
- console.log(`Object: ${result.object}`);
52
- console.log(`Transaction ID: ${result.metadata.transactionId}`);
53
- console.log(`Start Time: ${new Date(result.metadata.startTime).toISOString()}`);
54
- console.log(`Version: ${result.metadata.version}`);
55
-
56
- } catch (error) {
57
- console.error("āŒ Error:", error);
58
- }
59
- };
60
-
61
- streamingV2Example();
@@ -1,50 +0,0 @@
1
- import { PerplexityV1Controller } from "@revenium/perplexity";
2
-
3
- const basicV1Example = async () => {
4
- console.log("=".repeat(50));
5
- console.log(
6
- "šŸ”„ Perplexity V1 Basic Example (JavaScript - @revenium/perplexity)"
7
- );
8
- console.log("=".repeat(50));
9
-
10
- try {
11
- const controller = new PerplexityV1Controller();
12
-
13
- // Basic chat completion
14
- const result = await controller.createChat([
15
- "What is artificial intelligence and how does it work?",
16
- ]);
17
-
18
- console.log("šŸ“ Response:");
19
- console.log(result.responses[0].text);
20
-
21
- console.log("\nšŸ“Š Usage Metadata:");
22
- console.log(`Input tokens: ${result.usageMetadata.inputTokenCount}`);
23
- console.log(`Output tokens: ${result.usageMetadata.outputTokenCount}`);
24
- console.log(`Total tokens: ${result.usageMetadata.totalTokenCount}`);
25
-
26
- console.log("\nšŸ”§ Model Info:");
27
- console.log(`Model: ${result.modelVersion}`);
28
- console.log(`Transaction ID: ${result.transactionId}`);
29
-
30
- // Test model capabilities
31
- console.log("\nšŸŽÆ Model Capabilities:");
32
- const models = controller.getAvailableModels();
33
- console.log(`Available models: ${models.slice(0, 3).join(", ")}...`);
34
-
35
- const supportsChat = controller.supportsCapability("sonar-pro", "chat");
36
- const supportsStreaming = controller.supportsCapability(
37
- "sonar-pro",
38
- "streaming"
39
- );
40
- const supportsOnline = controller.supportsCapability("sonar-pro", "online");
41
-
42
- console.log(
43
- `Sonar-pro capabilities: chat=${supportsChat}, streaming=${supportsStreaming}, online=${supportsOnline}`
44
- );
45
- } catch (error) {
46
- console.error("āŒ Error:", error);
47
- }
48
- };
49
-
50
- basicV1Example();