@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.
Files changed (47) hide show
  1. package/CHANGELOG.md +39 -1
  2. package/README.md +86 -681
  3. package/dist/cjs/constants.js +70 -0
  4. package/dist/cjs/constants.js.map +1 -0
  5. package/dist/cjs/core/config/perplexity-config.js.map +1 -0
  6. package/dist/cjs/core/config/revenium-config.js.map +1 -0
  7. package/dist/cjs/core/tracking/metering.js +86 -6
  8. package/dist/cjs/core/tracking/metering.js.map +1 -0
  9. package/dist/cjs/core/wrapper/perplexity-client.js +11 -1
  10. package/dist/cjs/core/wrapper/perplexity-client.js.map +1 -0
  11. package/dist/cjs/index.js +9 -4
  12. package/dist/cjs/index.js.map +1 -0
  13. package/dist/cjs/types/index.js +0 -15
  14. package/dist/cjs/types/index.js.map +1 -0
  15. package/dist/cjs/utils/logger.js.map +1 -0
  16. package/dist/esm/constants.js +67 -0
  17. package/dist/esm/constants.js.map +1 -0
  18. package/dist/esm/core/config/perplexity-config.js.map +1 -0
  19. package/dist/esm/core/config/revenium-config.js.map +1 -0
  20. package/dist/esm/core/tracking/metering.js +86 -6
  21. package/dist/esm/core/tracking/metering.js.map +1 -0
  22. package/dist/esm/core/wrapper/perplexity-client.js +11 -1
  23. package/dist/esm/core/wrapper/perplexity-client.js.map +1 -0
  24. package/dist/esm/index.js +4 -1
  25. package/dist/esm/index.js.map +1 -0
  26. package/dist/esm/types/index.js +1 -14
  27. package/dist/esm/types/index.js.map +1 -0
  28. package/dist/esm/utils/logger.js.map +1 -0
  29. package/dist/types/constants.d.ts +67 -0
  30. package/dist/types/constants.d.ts.map +1 -0
  31. package/dist/types/core/config/perplexity-config.d.ts.map +1 -0
  32. package/dist/types/core/config/revenium-config.d.ts.map +1 -0
  33. package/dist/types/core/tracking/metering.d.ts.map +1 -0
  34. package/dist/types/core/wrapper/perplexity-client.d.ts.map +1 -0
  35. package/dist/types/index.d.ts +2 -2
  36. package/dist/types/index.d.ts.map +1 -0
  37. package/dist/types/types/index.d.ts +3 -11
  38. package/dist/types/types/index.d.ts.map +1 -0
  39. package/dist/types/utils/logger.d.ts.map +1 -0
  40. package/examples/README.md +220 -221
  41. package/examples/advanced-features.ts +148 -0
  42. package/examples/basic.ts +16 -21
  43. package/examples/chat.ts +11 -25
  44. package/examples/getting_started.ts +64 -0
  45. package/examples/metadata.ts +33 -40
  46. package/examples/streaming.ts +6 -17
  47. 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
- PERPLEXITY_MODELS,
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
- console.log("Creating chat completion...");
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: PERPLEXITY_MODELS.SONAR_PRO,
33
+ model: "sonar-pro",
34
34
  maxTokens: 100,
35
+ usageMetadata,
35
36
  });
36
37
 
37
- console.log("\nResponse:");
38
- console.log("─────────────────────────────────────────");
39
- console.log(`Content: ${result.content}`);
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(`Transaction ID: ${result.transactionId}`);
42
- console.log(`\nToken Usage:`);
43
- console.log(` - Prompt Tokens: ${result.usage.promptTokens}`);
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: PERPLEXITY_MODELS.SONAR_PRO,
37
+ model: "sonar",
43
38
  maxTokens: 100,
44
39
  });
45
40
 
46
- console.log(`Assistant: ${response1.content}\n`);
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: PERPLEXITY_MODELS.SONAR_PRO,
65
- maxTokens: 100,
59
+ model: "sonar-pro",
60
+ maxTokens: 500,
66
61
  });
67
62
 
68
- console.log(`Assistant: ${response2.content}\n`);
63
+ console.log(`Assistant: ${response2.content}`);
69
64
 
70
- console.log("Summary:");
71
- console.log("─────────────────────────────────────────");
72
- console.log(`Total turns: 2`);
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);
@@ -1,28 +1,41 @@
1
1
  /**
2
2
  * Custom Metadata Example
3
- *
4
- * This example demonstrates how to pass custom metadata
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
- PERPLEXITY_MODELS,
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
- console.log("Initializing configurations...");
20
- const reveniumConfig = initializeReveniumFromEnv();
20
+ initializeReveniumFromEnv();
21
21
  initializePerplexityFromEnv();
22
- console.log("Configurations initialized\n");
23
22
 
24
- // Create a chat completion with custom metadata
25
- console.log("Creating chat completion with custom metadata...");
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: PERPLEXITY_MODELS.SONAR_PRO,
34
- maxTokens: 50,
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("\nResponse:");
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
- "Check your Revenium dashboard to see the metering data with custom metadata."
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
-
@@ -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: PERPLEXITY_MODELS.SONAR_PRO,
34
- maxTokens: 100,
27
+ model: "sonar-pro",
28
+ maxTokens: 200,
35
29
  });
36
30
 
37
- console.log("\nStreaming Response:");
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",
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/cjs/**/*.js",
25
- "dist/esm/**/*.js",
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
- "playground:basic": "node playground/basic.js",
44
- "playground:streaming": "node playground/streaming.js",
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": ">=16.0.0"
60
+ "node": ">=20.0.0"
65
61
  },
66
62
  "dependencies": {
67
63
  "dotenv": "^17.2.2",