@revenium/perplexity 2.0.3 → 2.0.4
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 +39 -1
- package/README.md +86 -681
- package/dist/cjs/constants.js +70 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/core/config/perplexity-config.js.map +1 -0
- package/dist/cjs/core/config/revenium-config.js.map +1 -0
- package/dist/cjs/core/tracking/metering.js +86 -6
- package/dist/cjs/core/tracking/metering.js.map +1 -0
- package/dist/cjs/core/wrapper/perplexity-client.js +11 -1
- package/dist/cjs/core/wrapper/perplexity-client.js.map +1 -0
- package/dist/cjs/index.js +9 -4
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/types/index.js +0 -15
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/esm/constants.js +67 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/core/config/perplexity-config.js.map +1 -0
- package/dist/esm/core/config/revenium-config.js.map +1 -0
- package/dist/esm/core/tracking/metering.js +86 -6
- package/dist/esm/core/tracking/metering.js.map +1 -0
- package/dist/esm/core/wrapper/perplexity-client.js +11 -1
- package/dist/esm/core/wrapper/perplexity-client.js.map +1 -0
- package/dist/esm/index.js +4 -1
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/types/index.js +1 -14
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/utils/logger.js.map +1 -0
- package/dist/types/constants.d.ts +67 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/core/config/perplexity-config.d.ts.map +1 -0
- package/dist/types/core/config/revenium-config.d.ts.map +1 -0
- package/dist/types/core/tracking/metering.d.ts.map +1 -0
- package/dist/types/core/wrapper/perplexity-client.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +3 -11
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/utils/logger.d.ts.map +1 -0
- package/examples/README.md +220 -221
- package/examples/advanced-features.ts +148 -0
- package/examples/basic.ts +16 -21
- package/examples/chat.ts +11 -25
- package/examples/getting_started.ts +64 -0
- package/examples/metadata.ts +33 -40
- package/examples/streaming.ts +6 -17
- package/package.json +7 -11
package/examples/basic.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Basic Chat Completion Example
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* This example demonstrates how to use the Perplexity middleware
|
|
5
5
|
* to create a simple chat completion with Revenium metering.
|
|
6
6
|
*/
|
|
@@ -9,20 +9,20 @@ import {
|
|
|
9
9
|
initializeReveniumFromEnv,
|
|
10
10
|
initializePerplexityFromEnv,
|
|
11
11
|
createChatCompletion,
|
|
12
|
-
|
|
12
|
+
UsageMetadata,
|
|
13
13
|
} from "../src";
|
|
14
14
|
|
|
15
15
|
async function main() {
|
|
16
|
-
console.log("Basic Chat Completion Example\n");
|
|
17
|
-
|
|
18
16
|
// Initialize configurations from environment variables
|
|
19
|
-
console.log("Initializing configurations...");
|
|
20
17
|
initializeReveniumFromEnv();
|
|
21
18
|
initializePerplexityFromEnv();
|
|
22
|
-
console.log("Configurations initialized\n");
|
|
23
19
|
|
|
24
|
-
// Create a simple chat completion
|
|
25
|
-
|
|
20
|
+
// Create a simple chat completion with basic metadata
|
|
21
|
+
const usageMetadata: UsageMetadata = {
|
|
22
|
+
subscriber: { id: "user-123" },
|
|
23
|
+
traceId: "session-abc",
|
|
24
|
+
};
|
|
25
|
+
|
|
26
26
|
const result = await createChatCompletion({
|
|
27
27
|
messages: [
|
|
28
28
|
{
|
|
@@ -30,26 +30,21 @@ async function main() {
|
|
|
30
30
|
content: "What is the capital of France? Answer in one sentence.",
|
|
31
31
|
},
|
|
32
32
|
],
|
|
33
|
-
model:
|
|
33
|
+
model: "sonar-pro",
|
|
34
34
|
maxTokens: 100,
|
|
35
|
+
usageMetadata,
|
|
35
36
|
});
|
|
36
37
|
|
|
37
|
-
|
|
38
|
-
console.log("
|
|
39
|
-
console.log(`
|
|
38
|
+
// Display essential results
|
|
39
|
+
console.log("\n✓ Chat Completion Successful");
|
|
40
|
+
console.log(`Response: ${result.content}`);
|
|
40
41
|
console.log(`Model: ${result.model}`);
|
|
41
|
-
console.log(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
console.log(` - Completion Tokens: ${result.usage.completionTokens}`);
|
|
45
|
-
console.log(` - Total Tokens: ${result.usage.totalTokens}`);
|
|
46
|
-
console.log("─────────────────────────────────────────\n");
|
|
47
|
-
|
|
48
|
-
console.log("Example completed successfully!");
|
|
42
|
+
console.log(
|
|
43
|
+
`Tokens Used: ${result.usage.totalTokens} (prompt: ${result.usage.promptTokens}, completion: ${result.usage.completionTokens})`
|
|
44
|
+
);
|
|
49
45
|
}
|
|
50
46
|
|
|
51
47
|
main().catch((error) => {
|
|
52
48
|
console.error("Error:", error.message);
|
|
53
49
|
process.exit(1);
|
|
54
50
|
});
|
|
55
|
-
|
package/examples/chat.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Multi-turn Chat Example
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* This example demonstrates how to have a multi-turn conversation
|
|
5
5
|
* with the Perplexity middleware.
|
|
6
6
|
*/
|
|
@@ -9,18 +9,13 @@ import {
|
|
|
9
9
|
initializeReveniumFromEnv,
|
|
10
10
|
initializePerplexityFromEnv,
|
|
11
11
|
createChatCompletion,
|
|
12
|
-
PERPLEXITY_MODELS,
|
|
13
12
|
type PerplexityMessage,
|
|
14
13
|
} from "../src";
|
|
15
14
|
|
|
16
15
|
async function main() {
|
|
17
|
-
console.log("Multi-turn Chat Example\n");
|
|
18
|
-
|
|
19
16
|
// Initialize configurations from environment variables
|
|
20
|
-
console.log("Initializing configurations...");
|
|
21
17
|
initializeReveniumFromEnv();
|
|
22
18
|
initializePerplexityFromEnv();
|
|
23
|
-
console.log("Configurations initialized\n");
|
|
24
19
|
|
|
25
20
|
// Start a conversation
|
|
26
21
|
const messages: PerplexityMessage[] = [
|
|
@@ -34,16 +29,16 @@ async function main() {
|
|
|
34
29
|
},
|
|
35
30
|
];
|
|
36
31
|
|
|
37
|
-
console.log("Turn 1
|
|
32
|
+
console.log("\n--- Turn 1 ---");
|
|
38
33
|
console.log("User: What is the capital of France?");
|
|
39
34
|
|
|
40
35
|
const response1 = await createChatCompletion({
|
|
41
36
|
messages,
|
|
42
|
-
model:
|
|
37
|
+
model: "sonar",
|
|
43
38
|
maxTokens: 100,
|
|
44
39
|
});
|
|
45
40
|
|
|
46
|
-
console.log(`Assistant: ${response1.content}
|
|
41
|
+
console.log(`Assistant: ${response1.content}`);
|
|
47
42
|
|
|
48
43
|
// Continue the conversation
|
|
49
44
|
messages.push({
|
|
@@ -56,32 +51,23 @@ async function main() {
|
|
|
56
51
|
content: "What is its population?",
|
|
57
52
|
});
|
|
58
53
|
|
|
59
|
-
console.log("Turn 2
|
|
54
|
+
console.log("\n--- Turn 2 ---");
|
|
60
55
|
console.log("User: What is its population?");
|
|
61
56
|
|
|
62
57
|
const response2 = await createChatCompletion({
|
|
63
58
|
messages,
|
|
64
|
-
model:
|
|
65
|
-
maxTokens:
|
|
59
|
+
model: "sonar-pro",
|
|
60
|
+
maxTokens: 500,
|
|
66
61
|
});
|
|
67
62
|
|
|
68
|
-
console.log(`Assistant: ${response2.content}
|
|
63
|
+
console.log(`Assistant: ${response2.content}`);
|
|
69
64
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
console.log(
|
|
73
|
-
console.log(`Transaction ID 1: ${response1.transactionId}`);
|
|
74
|
-
console.log(`Transaction ID 2: ${response2.transactionId}`);
|
|
75
|
-
console.log(
|
|
76
|
-
`Total tokens used: ${response1.usage.totalTokens + response2.usage.totalTokens}`
|
|
77
|
-
);
|
|
78
|
-
console.log("─────────────────────────────────────────\n");
|
|
79
|
-
|
|
80
|
-
console.log("Chat completed successfully!");
|
|
65
|
+
// Summary
|
|
66
|
+
const totalTokens = response1.usage.totalTokens + response2.usage.totalTokens;
|
|
67
|
+
console.log(`\n✓ Chat completed - Total tokens used: ${totalTokens}`);
|
|
81
68
|
}
|
|
82
69
|
|
|
83
70
|
main().catch((error) => {
|
|
84
71
|
console.error("Error:", error.message);
|
|
85
72
|
process.exit(1);
|
|
86
73
|
});
|
|
87
|
-
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Getting Started with Revenium Perplexity Middleware
|
|
3
|
+
*
|
|
4
|
+
* This is the simplest possible entry point for new users.
|
|
5
|
+
* Shows basic usage with all metadata options documented.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
initializeReveniumFromEnv,
|
|
10
|
+
initializePerplexityFromEnv,
|
|
11
|
+
createChatCompletion,
|
|
12
|
+
} from "../src";
|
|
13
|
+
|
|
14
|
+
async function main() {
|
|
15
|
+
// Initialize from environment variables (.env file)
|
|
16
|
+
initializeReveniumFromEnv();
|
|
17
|
+
initializePerplexityFromEnv();
|
|
18
|
+
|
|
19
|
+
// Create a simple chat completion
|
|
20
|
+
const result = await createChatCompletion({
|
|
21
|
+
messages: [
|
|
22
|
+
{
|
|
23
|
+
role: "user",
|
|
24
|
+
content: "What is artificial intelligence?",
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
model: "sonar-pro",
|
|
28
|
+
maxTokens: 500,
|
|
29
|
+
|
|
30
|
+
/* Optional: Add metadata for advanced tracking and analytics
|
|
31
|
+
usageMetadata: {
|
|
32
|
+
// User identification
|
|
33
|
+
subscriber: {
|
|
34
|
+
id: 'user-123',
|
|
35
|
+
email: 'user@example.com',
|
|
36
|
+
credential: {
|
|
37
|
+
name: 'api-key-prod',
|
|
38
|
+
value: 'key-abc-123'
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
// Organization & billing
|
|
43
|
+
organizationId: 'my-customers-name',
|
|
44
|
+
subscriptionId: 'plan-enterprise-2024',
|
|
45
|
+
|
|
46
|
+
// Product & task tracking
|
|
47
|
+
productId: 'my-product',
|
|
48
|
+
taskType: 'qa',
|
|
49
|
+
agent: 'customer-support',
|
|
50
|
+
|
|
51
|
+
// Session tracking
|
|
52
|
+
traceId: 'session-' + Date.now(),
|
|
53
|
+
|
|
54
|
+
// Quality metrics
|
|
55
|
+
responseQualityScore: 0.95
|
|
56
|
+
}
|
|
57
|
+
*/
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
console.log("Response:", result.content);
|
|
61
|
+
console.log("\nUsage:", result.usage);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
main().catch(console.error);
|
package/examples/metadata.ts
CHANGED
|
@@ -1,28 +1,41 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Custom Metadata Example
|
|
3
|
-
*
|
|
4
|
-
* This example demonstrates how to pass
|
|
5
|
-
* for tracking and metering purposes.
|
|
3
|
+
*
|
|
4
|
+
* This example demonstrates how to pass comprehensive metadata
|
|
5
|
+
* for enhanced tracking, analytics, and metering purposes.
|
|
6
|
+
*
|
|
7
|
+
* For complete metadata options and details, see:
|
|
8
|
+
* https://revenium.readme.io/reference/meter_ai_completion
|
|
6
9
|
*/
|
|
7
10
|
|
|
8
11
|
import {
|
|
9
12
|
initializeReveniumFromEnv,
|
|
10
13
|
initializePerplexityFromEnv,
|
|
11
14
|
createChatCompletion,
|
|
12
|
-
|
|
15
|
+
UsageMetadata,
|
|
13
16
|
} from "../src";
|
|
14
17
|
|
|
15
18
|
async function main() {
|
|
16
|
-
console.log("Custom Metadata Example\n");
|
|
17
|
-
|
|
18
19
|
// Initialize configurations from environment variables
|
|
19
|
-
|
|
20
|
-
const reveniumConfig = initializeReveniumFromEnv();
|
|
20
|
+
initializeReveniumFromEnv();
|
|
21
21
|
initializePerplexityFromEnv();
|
|
22
|
-
console.log("Configurations initialized\n");
|
|
23
22
|
|
|
24
|
-
// Create a chat completion with
|
|
25
|
-
|
|
23
|
+
// Create a chat completion with comprehensive metadata
|
|
24
|
+
const usageMetadata: UsageMetadata = {
|
|
25
|
+
subscriber: {
|
|
26
|
+
id: "user-123",
|
|
27
|
+
email: "metadata-user@example.com",
|
|
28
|
+
credential: {
|
|
29
|
+
name: "api-key",
|
|
30
|
+
value: "key-premium-abc123",
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
organizationId: "org-example",
|
|
34
|
+
productId: "product-premium",
|
|
35
|
+
agent: "calculator-bot-v1",
|
|
36
|
+
traceId: "trace-abc-123",
|
|
37
|
+
};
|
|
38
|
+
|
|
26
39
|
const result = await createChatCompletion({
|
|
27
40
|
messages: [
|
|
28
41
|
{
|
|
@@ -30,38 +43,19 @@ async function main() {
|
|
|
30
43
|
content: "What is 2 + 2?",
|
|
31
44
|
},
|
|
32
45
|
],
|
|
33
|
-
model:
|
|
34
|
-
maxTokens:
|
|
35
|
-
usageMetadata
|
|
36
|
-
subscriber: {
|
|
37
|
-
id: "user-123",
|
|
38
|
-
email: "user@example.com",
|
|
39
|
-
},
|
|
40
|
-
organizationId: "org-example",
|
|
41
|
-
productId: "product-premium",
|
|
42
|
-
traceId: "trace-abc-123",
|
|
43
|
-
},
|
|
46
|
+
model: "sonar-pro",
|
|
47
|
+
maxTokens: 200,
|
|
48
|
+
usageMetadata,
|
|
44
49
|
});
|
|
45
50
|
|
|
46
|
-
console.log("\
|
|
47
|
-
console.log(
|
|
48
|
-
console.log(`Content: ${result.content}`);
|
|
51
|
+
console.log("\n✓ Chat Completion Successful");
|
|
52
|
+
console.log(`Response: ${result.content}`);
|
|
49
53
|
console.log(`Model: ${result.model}`);
|
|
50
|
-
console.log(`Transaction ID: ${result.transactionId}`);
|
|
51
|
-
console.log(`\nToken Usage:`);
|
|
52
|
-
console.log(` - Prompt Tokens: ${result.usage.promptTokens}`);
|
|
53
|
-
console.log(` - Completion Tokens: ${result.usage.completionTokens}`);
|
|
54
|
-
console.log(` - Total Tokens: ${result.usage.totalTokens}`);
|
|
55
|
-
console.log("\nCustom Metadata:");
|
|
56
|
-
console.log(` - Subscriber ID: user-123`);
|
|
57
|
-
console.log(` - Organization ID: org-example`);
|
|
58
|
-
console.log(` - Product ID: product-premium`);
|
|
59
|
-
console.log(` - Trace ID: trace-abc-123`);
|
|
60
|
-
console.log("─────────────────────────────────────────\n");
|
|
61
|
-
|
|
62
|
-
console.log("Example completed successfully!");
|
|
63
54
|
console.log(
|
|
64
|
-
|
|
55
|
+
`Tokens Used: ${result.usage.totalTokens} (prompt: ${result.usage.promptTokens}, completion: ${result.usage.completionTokens})`
|
|
56
|
+
);
|
|
57
|
+
console.log(
|
|
58
|
+
"Metadata tracked: subscriber, organization, product, agent, trace"
|
|
65
59
|
);
|
|
66
60
|
}
|
|
67
61
|
|
|
@@ -69,4 +63,3 @@ main().catch((error) => {
|
|
|
69
63
|
console.error("Error:", error.message);
|
|
70
64
|
process.exit(1);
|
|
71
65
|
});
|
|
72
|
-
|
package/examples/streaming.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Streaming Chat Completion Example
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* This example demonstrates how to use streaming responses
|
|
5
5
|
* with the Perplexity middleware and Revenium metering.
|
|
6
6
|
*/
|
|
@@ -9,20 +9,14 @@ import {
|
|
|
9
9
|
initializeReveniumFromEnv,
|
|
10
10
|
initializePerplexityFromEnv,
|
|
11
11
|
createStreamingChatCompletion,
|
|
12
|
-
PERPLEXITY_MODELS,
|
|
13
12
|
} from "../src";
|
|
14
13
|
|
|
15
14
|
async function main() {
|
|
16
|
-
console.log("Streaming Chat Completion Example\n");
|
|
17
|
-
|
|
18
15
|
// Initialize configurations from environment variables
|
|
19
|
-
console.log("Initializing configurations...");
|
|
20
16
|
initializeReveniumFromEnv();
|
|
21
17
|
initializePerplexityFromEnv();
|
|
22
|
-
console.log("Configurations initialized\n");
|
|
23
18
|
|
|
24
19
|
// Create a streaming chat completion
|
|
25
|
-
console.log("Creating streaming chat completion...");
|
|
26
20
|
const result = await createStreamingChatCompletion({
|
|
27
21
|
messages: [
|
|
28
22
|
{
|
|
@@ -30,14 +24,12 @@ async function main() {
|
|
|
30
24
|
content: "Count from 1 to 5 slowly, one number per line.",
|
|
31
25
|
},
|
|
32
26
|
],
|
|
33
|
-
model:
|
|
34
|
-
maxTokens:
|
|
27
|
+
model: "sonar-pro",
|
|
28
|
+
maxTokens: 200,
|
|
35
29
|
});
|
|
36
30
|
|
|
37
|
-
console.log(
|
|
38
|
-
console.log("
|
|
39
|
-
console.log(`Transaction ID: ${result.transactionId}`);
|
|
40
|
-
console.log(`Model: ${result.model}\n`);
|
|
31
|
+
console.log(`\nModel: ${result.model}`);
|
|
32
|
+
console.log("Streaming response:\n");
|
|
41
33
|
|
|
42
34
|
// Process the stream
|
|
43
35
|
let fullContent = "";
|
|
@@ -49,13 +41,10 @@ async function main() {
|
|
|
49
41
|
}
|
|
50
42
|
}
|
|
51
43
|
|
|
52
|
-
console.log("\n
|
|
53
|
-
console.log(`\nFull Response: ${fullContent}`);
|
|
54
|
-
console.log("\nStreaming completed successfully!");
|
|
44
|
+
console.log("\n\n✓ Streaming completed");
|
|
55
45
|
}
|
|
56
46
|
|
|
57
47
|
main().catch((error) => {
|
|
58
48
|
console.error("Error:", error.message);
|
|
59
49
|
process.exit(1);
|
|
60
50
|
});
|
|
61
|
-
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@revenium/perplexity",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "NodeJS middleware for Perplexity AI API with Revenium metering",
|
|
5
5
|
"homepage": "https://github.com/revenium/revenium-middleware-perplexity-node#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -21,10 +21,8 @@
|
|
|
21
21
|
}
|
|
22
22
|
},
|
|
23
23
|
"files": [
|
|
24
|
-
"dist/
|
|
25
|
-
"
|
|
26
|
-
"dist/types/**/*.d.ts",
|
|
27
|
-
"examples/**/*",
|
|
24
|
+
"dist/",
|
|
25
|
+
"examples/",
|
|
28
26
|
"README.md",
|
|
29
27
|
"CHANGELOG.md",
|
|
30
28
|
"LICENSE"
|
|
@@ -36,15 +34,13 @@
|
|
|
36
34
|
"build:types": "tsc -p tsconfig.types.json",
|
|
37
35
|
"build": "npm run clean && npm run build:esm && npm run build:cjs && npm run build:types",
|
|
38
36
|
"prepublishOnly": "npm run build",
|
|
37
|
+
"example:getting-started": "tsx examples/getting_started.ts",
|
|
39
38
|
"example:basic": "tsx examples/basic.ts",
|
|
40
39
|
"example:streaming": "tsx examples/streaming.ts",
|
|
41
40
|
"example:chat": "tsx examples/chat.ts",
|
|
42
41
|
"example:metadata": "tsx examples/metadata.ts",
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"playground:chat": "node playground/chat.js",
|
|
46
|
-
"playground:metadata": "node playground/metadata.js",
|
|
47
|
-
"test": "npm run example:basic && npm run example:streaming && npm run example:chat && npm run example:metadata"
|
|
42
|
+
"example:advanced": "tsx examples/advanced-features.ts",
|
|
43
|
+
"test": "npm run example:getting-started && npm run example:basic && npm run example:streaming && npm run example:chat && npm run example:metadata && npm run example:advanced"
|
|
48
44
|
},
|
|
49
45
|
"keywords": [
|
|
50
46
|
"revenium",
|
|
@@ -61,7 +57,7 @@
|
|
|
61
57
|
"license": "MIT",
|
|
62
58
|
"type": "commonjs",
|
|
63
59
|
"engines": {
|
|
64
|
-
"node": ">=
|
|
60
|
+
"node": ">=20.0.0"
|
|
65
61
|
},
|
|
66
62
|
"dependencies": {
|
|
67
63
|
"dotenv": "^17.2.2",
|