@revenium/perplexity 2.0.4 → 2.0.6

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 (200) hide show
  1. package/CHANGELOG.md +113 -98
  2. package/LICENSE +21 -21
  3. package/README.md +292 -271
  4. package/SECURITY.md +34 -0
  5. package/dist/cjs/core/client/index.js +13 -0
  6. package/dist/cjs/core/client/index.js.map +1 -0
  7. package/dist/cjs/core/client/manager.js +88 -0
  8. package/dist/cjs/core/client/manager.js.map +1 -0
  9. package/dist/cjs/core/config/index.js +21 -0
  10. package/dist/cjs/core/config/index.js.map +1 -0
  11. package/dist/cjs/core/config/loader.js +48 -0
  12. package/dist/cjs/core/config/loader.js.map +1 -0
  13. package/dist/cjs/core/config/manager.js +77 -0
  14. package/dist/cjs/core/config/manager.js.map +1 -0
  15. package/dist/cjs/core/config/validator.js +47 -0
  16. package/dist/cjs/core/config/validator.js.map +1 -0
  17. package/dist/cjs/core/middleware/index.js +14 -0
  18. package/dist/cjs/core/middleware/index.js.map +1 -0
  19. package/dist/cjs/core/middleware/interfaces.js +94 -0
  20. package/dist/cjs/core/middleware/interfaces.js.map +1 -0
  21. package/dist/cjs/core/middleware/revenium-client.js +44 -0
  22. package/dist/cjs/core/middleware/revenium-client.js.map +1 -0
  23. package/dist/cjs/core/middleware/streaming-wrapper.js +80 -0
  24. package/dist/cjs/core/middleware/streaming-wrapper.js.map +1 -0
  25. package/dist/cjs/core/providers/detector.js +38 -0
  26. package/dist/cjs/core/providers/detector.js.map +1 -0
  27. package/dist/cjs/core/providers/index.js +14 -0
  28. package/dist/cjs/core/providers/index.js.map +1 -0
  29. package/dist/cjs/core/tracking/api-client.js +67 -0
  30. package/dist/cjs/core/tracking/api-client.js.map +1 -0
  31. package/dist/cjs/core/tracking/index.js +21 -0
  32. package/dist/cjs/core/tracking/index.js.map +1 -0
  33. package/dist/cjs/core/tracking/payload-builder.js +95 -0
  34. package/dist/cjs/core/tracking/payload-builder.js.map +1 -0
  35. package/dist/cjs/core/tracking/usage-tracker.js +83 -0
  36. package/dist/cjs/core/tracking/usage-tracker.js.map +1 -0
  37. package/dist/cjs/index.js +55 -59
  38. package/dist/cjs/index.js.map +1 -1
  39. package/dist/cjs/types/function-parameters.js +14 -0
  40. package/dist/cjs/types/function-parameters.js.map +1 -0
  41. package/dist/cjs/types/index.js +20 -1
  42. package/dist/cjs/types/index.js.map +1 -1
  43. package/dist/cjs/utils/constants.js +20 -0
  44. package/dist/cjs/utils/constants.js.map +1 -0
  45. package/dist/cjs/utils/error-handler.js +194 -0
  46. package/dist/cjs/utils/error-handler.js.map +1 -0
  47. package/dist/cjs/utils/metadata-builder.js +191 -0
  48. package/dist/cjs/utils/metadata-builder.js.map +1 -0
  49. package/dist/cjs/utils/stop-reason-mapper.js +74 -0
  50. package/dist/cjs/utils/stop-reason-mapper.js.map +1 -0
  51. package/dist/cjs/utils/transaction-id.js +19 -0
  52. package/dist/cjs/utils/transaction-id.js.map +1 -0
  53. package/dist/cjs/utils/url-builder.js +57 -0
  54. package/dist/cjs/utils/url-builder.js.map +1 -0
  55. package/dist/esm/core/client/index.js +5 -0
  56. package/dist/esm/core/client/index.js.map +1 -0
  57. package/dist/esm/core/client/manager.js +81 -0
  58. package/dist/esm/core/client/manager.js.map +1 -0
  59. package/dist/esm/core/config/index.js +11 -0
  60. package/dist/esm/core/config/index.js.map +1 -0
  61. package/dist/esm/core/config/loader.js +45 -0
  62. package/dist/esm/core/config/loader.js.map +1 -0
  63. package/dist/esm/core/config/manager.js +70 -0
  64. package/dist/esm/core/config/manager.js.map +1 -0
  65. package/dist/esm/core/config/validator.js +44 -0
  66. package/dist/esm/core/config/validator.js.map +1 -0
  67. package/dist/esm/core/middleware/index.js +7 -0
  68. package/dist/esm/core/middleware/index.js.map +1 -0
  69. package/dist/esm/core/middleware/interfaces.js +89 -0
  70. package/dist/esm/core/middleware/interfaces.js.map +1 -0
  71. package/dist/esm/core/middleware/revenium-client.js +37 -0
  72. package/dist/esm/core/middleware/revenium-client.js.map +1 -0
  73. package/dist/esm/core/middleware/streaming-wrapper.js +76 -0
  74. package/dist/esm/core/middleware/streaming-wrapper.js.map +1 -0
  75. package/dist/esm/core/providers/detector.js +34 -0
  76. package/dist/esm/core/providers/detector.js.map +1 -0
  77. package/dist/esm/core/providers/index.js +9 -0
  78. package/dist/esm/core/providers/index.js.map +1 -0
  79. package/dist/esm/core/tracking/api-client.js +64 -0
  80. package/dist/esm/core/tracking/api-client.js.map +1 -0
  81. package/dist/esm/core/tracking/index.js +13 -0
  82. package/dist/esm/core/tracking/index.js.map +1 -0
  83. package/dist/esm/core/tracking/payload-builder.js +92 -0
  84. package/dist/esm/core/tracking/payload-builder.js.map +1 -0
  85. package/dist/esm/core/tracking/usage-tracker.js +79 -0
  86. package/dist/esm/core/tracking/usage-tracker.js.map +1 -0
  87. package/dist/esm/index.js +42 -39
  88. package/dist/esm/index.js.map +1 -1
  89. package/dist/esm/types/function-parameters.js +13 -0
  90. package/dist/esm/types/function-parameters.js.map +1 -0
  91. package/dist/esm/types/index.js +6 -2
  92. package/dist/esm/types/index.js.map +1 -1
  93. package/dist/esm/utils/constants.js +17 -0
  94. package/dist/esm/utils/constants.js.map +1 -0
  95. package/dist/esm/utils/error-handler.js +182 -0
  96. package/dist/esm/utils/error-handler.js.map +1 -0
  97. package/dist/esm/utils/metadata-builder.js +183 -0
  98. package/dist/esm/utils/metadata-builder.js.map +1 -0
  99. package/dist/esm/utils/stop-reason-mapper.js +69 -0
  100. package/dist/esm/utils/stop-reason-mapper.js.map +1 -0
  101. package/dist/esm/utils/transaction-id.js +16 -0
  102. package/dist/esm/utils/transaction-id.js.map +1 -0
  103. package/dist/esm/utils/url-builder.js +53 -0
  104. package/dist/esm/utils/url-builder.js.map +1 -0
  105. package/dist/types/core/client/index.d.ts +5 -0
  106. package/dist/types/core/client/index.d.ts.map +1 -0
  107. package/dist/types/core/client/manager.d.ts +44 -0
  108. package/dist/types/core/client/manager.d.ts.map +1 -0
  109. package/dist/types/core/config/index.d.ts +10 -0
  110. package/dist/types/core/config/index.d.ts.map +1 -0
  111. package/dist/types/core/config/loader.d.ts +13 -0
  112. package/dist/types/core/config/loader.d.ts.map +1 -0
  113. package/dist/types/core/config/manager.d.ts +28 -0
  114. package/dist/types/core/config/manager.d.ts.map +1 -0
  115. package/dist/types/core/config/validator.d.ts +12 -0
  116. package/dist/types/core/config/validator.d.ts.map +1 -0
  117. package/dist/types/core/middleware/index.d.ts +7 -0
  118. package/dist/types/core/middleware/index.d.ts.map +1 -0
  119. package/dist/types/core/middleware/interfaces.d.ts +35 -0
  120. package/dist/types/core/middleware/interfaces.d.ts.map +1 -0
  121. package/dist/types/core/middleware/revenium-client.d.ts +25 -0
  122. package/dist/types/core/middleware/revenium-client.d.ts.map +1 -0
  123. package/dist/types/core/middleware/streaming-wrapper.d.ts +21 -0
  124. package/dist/types/core/middleware/streaming-wrapper.d.ts.map +1 -0
  125. package/dist/types/core/providers/detector.d.ts +24 -0
  126. package/dist/types/core/providers/detector.d.ts.map +1 -0
  127. package/dist/types/core/providers/index.d.ts +8 -0
  128. package/dist/types/core/providers/index.d.ts.map +1 -0
  129. package/dist/types/core/tracking/api-client.d.ts +17 -0
  130. package/dist/types/core/tracking/api-client.d.ts.map +1 -0
  131. package/dist/types/core/tracking/index.d.ts +11 -0
  132. package/dist/types/core/tracking/index.d.ts.map +1 -0
  133. package/dist/types/core/tracking/payload-builder.d.ts +24 -0
  134. package/dist/types/core/tracking/payload-builder.d.ts.map +1 -0
  135. package/dist/types/core/tracking/usage-tracker.d.ts +30 -0
  136. package/dist/types/core/tracking/usage-tracker.d.ts.map +1 -0
  137. package/dist/types/index.d.ts +50 -26
  138. package/dist/types/index.d.ts.map +1 -1
  139. package/dist/types/types/function-parameters.d.ts +185 -0
  140. package/dist/types/types/function-parameters.d.ts.map +1 -0
  141. package/dist/types/types/index.d.ts +108 -129
  142. package/dist/types/types/index.d.ts.map +1 -1
  143. package/dist/types/utils/constants.d.ts +9 -0
  144. package/dist/types/utils/constants.d.ts.map +1 -0
  145. package/dist/types/utils/error-handler.d.ts +95 -0
  146. package/dist/types/utils/error-handler.d.ts.map +1 -0
  147. package/dist/types/utils/metadata-builder.d.ts +65 -0
  148. package/dist/types/utils/metadata-builder.d.ts.map +1 -0
  149. package/dist/types/utils/stop-reason-mapper.d.ts +29 -0
  150. package/dist/types/utils/stop-reason-mapper.d.ts.map +1 -0
  151. package/dist/types/utils/transaction-id.d.ts +14 -0
  152. package/dist/types/utils/transaction-id.d.ts.map +1 -0
  153. package/dist/types/utils/url-builder.d.ts +22 -0
  154. package/dist/types/utils/url-builder.d.ts.map +1 -0
  155. package/examples/README.md +226 -322
  156. package/examples/advanced.ts +123 -0
  157. package/examples/basic.ts +45 -50
  158. package/examples/getting_started.ts +41 -64
  159. package/examples/metadata.ts +68 -65
  160. package/examples/stream.ts +53 -0
  161. package/package.json +72 -72
  162. package/dist/cjs/constants.js +0 -70
  163. package/dist/cjs/constants.js.map +0 -1
  164. package/dist/cjs/core/config/perplexity-config.js +0 -45
  165. package/dist/cjs/core/config/perplexity-config.js.map +0 -1
  166. package/dist/cjs/core/config/revenium-config.js +0 -80
  167. package/dist/cjs/core/config/revenium-config.js.map +0 -1
  168. package/dist/cjs/core/tracking/metering.js +0 -211
  169. package/dist/cjs/core/tracking/metering.js.map +0 -1
  170. package/dist/cjs/core/wrapper/perplexity-client.js +0 -187
  171. package/dist/cjs/core/wrapper/perplexity-client.js.map +0 -1
  172. package/dist/cjs/utils/logger.js +0 -23
  173. package/dist/cjs/utils/logger.js.map +0 -1
  174. package/dist/esm/constants.js +0 -67
  175. package/dist/esm/constants.js.map +0 -1
  176. package/dist/esm/core/config/perplexity-config.js +0 -40
  177. package/dist/esm/core/config/perplexity-config.js.map +0 -1
  178. package/dist/esm/core/config/revenium-config.js +0 -72
  179. package/dist/esm/core/config/revenium-config.js.map +0 -1
  180. package/dist/esm/core/tracking/metering.js +0 -206
  181. package/dist/esm/core/tracking/metering.js.map +0 -1
  182. package/dist/esm/core/wrapper/perplexity-client.js +0 -180
  183. package/dist/esm/core/wrapper/perplexity-client.js.map +0 -1
  184. package/dist/esm/utils/logger.js +0 -20
  185. package/dist/esm/utils/logger.js.map +0 -1
  186. package/dist/types/constants.d.ts +0 -67
  187. package/dist/types/constants.d.ts.map +0 -1
  188. package/dist/types/core/config/perplexity-config.d.ts +0 -24
  189. package/dist/types/core/config/perplexity-config.d.ts.map +0 -1
  190. package/dist/types/core/config/revenium-config.d.ts +0 -37
  191. package/dist/types/core/config/revenium-config.d.ts.map +0 -1
  192. package/dist/types/core/tracking/metering.d.ts +0 -31
  193. package/dist/types/core/tracking/metering.d.ts.map +0 -1
  194. package/dist/types/core/wrapper/perplexity-client.d.ts +0 -32
  195. package/dist/types/core/wrapper/perplexity-client.d.ts.map +0 -1
  196. package/dist/types/utils/logger.d.ts +0 -10
  197. package/dist/types/utils/logger.d.ts.map +0 -1
  198. package/examples/advanced-features.ts +0 -148
  199. package/examples/chat.ts +0 -73
  200. package/examples/streaming.ts +0 -50
package/examples/basic.ts CHANGED
@@ -1,50 +1,45 @@
1
- /**
2
- * Basic Chat Completion Example
3
- *
4
- * This example demonstrates how to use the Perplexity middleware
5
- * to create a simple chat completion with Revenium metering.
6
- */
7
-
8
- import {
9
- initializeReveniumFromEnv,
10
- initializePerplexityFromEnv,
11
- createChatCompletion,
12
- UsageMetadata,
13
- } from "../src";
14
-
15
- async function main() {
16
- // Initialize configurations from environment variables
17
- initializeReveniumFromEnv();
18
- initializePerplexityFromEnv();
19
-
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
- const result = await createChatCompletion({
27
- messages: [
28
- {
29
- role: "user",
30
- content: "What is the capital of France? Answer in one sentence.",
31
- },
32
- ],
33
- model: "sonar-pro",
34
- maxTokens: 100,
35
- usageMetadata,
36
- });
37
-
38
- // Display essential results
39
- console.log("\n✓ Chat Completion Successful");
40
- console.log(`Response: ${result.content}`);
41
- console.log(`Model: ${result.model}`);
42
- console.log(
43
- `Tokens Used: ${result.usage.totalTokens} (prompt: ${result.usage.promptTokens}, completion: ${result.usage.completionTokens})`
44
- );
45
- }
46
-
47
- main().catch((error) => {
48
- console.error("Error:", error.message);
49
- process.exit(1);
50
- });
1
+ /**
2
+ * Basic Example
3
+ * Demonstrates basic usage of Revenium Perplexity middleware.
4
+ */
5
+
6
+ import { Initialize, GetClient, UsageMetadata } from "@revenium/perplexity";
7
+
8
+ async function main() {
9
+ // Initialize middleware
10
+ Initialize();
11
+
12
+ // Get client
13
+ const client = GetClient();
14
+ const metadata: UsageMetadata = {
15
+ organizationId: "org-basic-demo",
16
+ productId: "prod-perplexity-basic",
17
+ };
18
+
19
+ // Create chat completion
20
+ const response = await client
21
+ .chat()
22
+ .completions()
23
+ .create(
24
+ {
25
+ model: "sonar-pro",
26
+ messages: [
27
+ {
28
+ role: "user",
29
+ content:
30
+ "Say hello in Spanish and explain why Spanish is a beautiful language in 2-3 sentences.",
31
+ },
32
+ ],
33
+ max_tokens: 1000,
34
+ },
35
+ metadata
36
+ );
37
+
38
+ // Display response
39
+ if (response.choices.length > 0) {
40
+ console.log(`Assistant: ${response.choices[0].message.content}`);
41
+ }
42
+ console.log("\nUsage data sent to Revenium! Check your dashboard");
43
+ }
44
+
45
+ main().catch(console.error);
@@ -1,64 +1,41 @@
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
+ /**
2
+ * Getting Started with Revenium Perplexity Middleware
3
+ *
4
+ * This example shows the new Initialize/GetClient pattern.
5
+ */
6
+
7
+ import { Initialize, GetClient, UsageMetadata } from "@revenium/perplexity";
8
+
9
+ async function main() {
10
+ Initialize();
11
+
12
+ // Get client
13
+ const client = GetClient();
14
+ const metadata: UsageMetadata = {
15
+ organizationId: "org-getting-started",
16
+ productId: "prod-perplexity-getting-started",
17
+ };
18
+
19
+ // Create a simple chat completion
20
+ const response = await client
21
+ .chat()
22
+ .completions()
23
+ .create(
24
+ {
25
+ model: "sonar-pro",
26
+ messages: [
27
+ {
28
+ role: "user",
29
+ content: "What is artificial intelligence?",
30
+ },
31
+ ],
32
+ max_tokens: 500,
33
+ },
34
+ metadata
35
+ );
36
+
37
+ console.log("Assistant:", response.choices[0]?.message?.content);
38
+ console.log("\nUsage:", response.usage);
39
+ }
40
+
41
+ main().catch(console.error);
@@ -1,65 +1,68 @@
1
- /**
2
- * Custom Metadata Example
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
9
- */
10
-
11
- import {
12
- initializeReveniumFromEnv,
13
- initializePerplexityFromEnv,
14
- createChatCompletion,
15
- UsageMetadata,
16
- } from "../src";
17
-
18
- async function main() {
19
- // Initialize configurations from environment variables
20
- initializeReveniumFromEnv();
21
- initializePerplexityFromEnv();
22
-
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
-
39
- const result = await createChatCompletion({
40
- messages: [
41
- {
42
- role: "user",
43
- content: "What is 2 + 2?",
44
- },
45
- ],
46
- model: "sonar-pro",
47
- maxTokens: 200,
48
- usageMetadata,
49
- });
50
-
51
- console.log("\n✓ Chat Completion Successful");
52
- console.log(`Response: ${result.content}`);
53
- console.log(`Model: ${result.model}`);
54
- console.log(
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"
59
- );
60
- }
61
-
62
- main().catch((error) => {
63
- console.error("Error:", error.message);
64
- process.exit(1);
65
- });
1
+ /**
2
+ * Metadata Example
3
+ * Demonstrates advanced metadata usage with Revenium Perplexity middleware.
4
+ */
5
+
6
+ import { Initialize, GetClient, UsageMetadata } from "@revenium/perplexity";
7
+
8
+ async function main() {
9
+ // Initialize middleware
10
+ Initialize();
11
+
12
+ // Get client
13
+ const client = GetClient();
14
+
15
+ // Optional metadata for advanced reporting, lineage tracking, and cost allocation
16
+ const metadata: UsageMetadata = {
17
+ // Organization & billing
18
+ organizationId: "org-metadata-demo",
19
+ subscriptionId: "plan-premium-2025",
20
+
21
+ // Product & task tracking
22
+ productId: "ai-assistant",
23
+ taskType: "explanation-request",
24
+ agent: "perplexity-metadata-chat-node",
25
+
26
+ // Session tracking
27
+ traceId: "session-" + Date.now(),
28
+
29
+ // Quality metrics
30
+ responseQualityScore: 0.95, // 0.0-1.0 scale
31
+
32
+ // User tracking
33
+ subscriber: {
34
+ id: "user-12345",
35
+ email: "developer@company.com",
36
+ credential: {
37
+ name: "api-key-prod",
38
+ value: "key-abc-123",
39
+ },
40
+ },
41
+ };
42
+
43
+ const response = await client
44
+ .chat()
45
+ .completions()
46
+ .create(
47
+ {
48
+ model: "sonar-pro",
49
+ messages: [
50
+ {
51
+ role: "user",
52
+ content:
53
+ "Say hello in Spanish and explain why Spanish is a beautiful language in 2-3 sentences.",
54
+ },
55
+ ],
56
+ max_tokens: 1000,
57
+ },
58
+ metadata
59
+ );
60
+
61
+ // Display response
62
+ if (response.choices.length > 0) {
63
+ console.log(`Assistant: ${response.choices[0].message.content}`);
64
+ }
65
+ console.log("\nUsage data sent to Revenium! Check your dashboard");
66
+ }
67
+
68
+ main().catch(console.error);
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Streaming Example with Revenium Perplexity Middleware (New Go-Aligned API)
3
+ *
4
+ * This example shows how to use streaming with the new API.
5
+ */
6
+
7
+ import { Initialize, GetClient } from "@revenium/perplexity";
8
+
9
+ async function main() {
10
+ // Initialize from environment variables
11
+ Initialize();
12
+
13
+ // Get client
14
+ const client = GetClient();
15
+
16
+ console.log("Streaming response:\n");
17
+
18
+ // Create a streaming chat completion
19
+ const stream = await client
20
+ .chat()
21
+ .completions()
22
+ .createStreaming(
23
+ {
24
+ model: "sonar-pro",
25
+ messages: [
26
+ {
27
+ role: "user",
28
+ content: "Write a short poem about AI",
29
+ },
30
+ ],
31
+ max_tokens: 200,
32
+ },
33
+ {
34
+ // Optional metadata
35
+ organizationId: "my-customers-name",
36
+ productId: "my-product",
37
+ subscriber: {
38
+ id: "user-123",
39
+ email: "user@example.com",
40
+ },
41
+ }
42
+ );
43
+
44
+ // Process stream
45
+ for await (const chunk of stream) {
46
+ const content = chunk.choices[0]?.delta?.content || "";
47
+ process.stdout.write(content);
48
+ }
49
+
50
+ console.log("\n\nUsage data sent to Revenium! Check your dashboard");
51
+ }
52
+
53
+ main().catch(console.error);
package/package.json CHANGED
@@ -1,72 +1,72 @@
1
- {
2
- "name": "@revenium/perplexity",
3
- "version": "2.0.4",
4
- "description": "NodeJS middleware for Perplexity AI API with Revenium metering",
5
- "homepage": "https://github.com/revenium/revenium-middleware-perplexity-node#readme",
6
- "bugs": {
7
- "url": "https://github.com/revenium/revenium-middleware-perplexity-node/issues"
8
- },
9
- "repository": {
10
- "type": "git",
11
- "url": "git+https://github.com/revenium/revenium-middleware-perplexity-node.git"
12
- },
13
- "main": "dist/cjs/index.js",
14
- "module": "dist/esm/index.js",
15
- "types": "dist/types/index.d.ts",
16
- "exports": {
17
- ".": {
18
- "import": "./dist/esm/index.js",
19
- "require": "./dist/cjs/index.js",
20
- "types": "./dist/types/index.d.ts"
21
- }
22
- },
23
- "files": [
24
- "dist/",
25
- "examples/",
26
- "README.md",
27
- "CHANGELOG.md",
28
- "LICENSE"
29
- ],
30
- "scripts": {
31
- "clean": "rm -rf dist",
32
- "build:esm": "tsc -p tsconfig.esm.json",
33
- "build:cjs": "tsc -p tsconfig.cjs.json",
34
- "build:types": "tsc -p tsconfig.types.json",
35
- "build": "npm run clean && npm run build:esm && npm run build:cjs && npm run build:types",
36
- "prepublishOnly": "npm run build",
37
- "example:getting-started": "tsx examples/getting_started.ts",
38
- "example:basic": "tsx examples/basic.ts",
39
- "example:streaming": "tsx examples/streaming.ts",
40
- "example:chat": "tsx examples/chat.ts",
41
- "example:metadata": "tsx examples/metadata.ts",
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"
44
- },
45
- "keywords": [
46
- "revenium",
47
- "middleware",
48
- "perplexity",
49
- "ai",
50
- "chat",
51
- "completion",
52
- "metering",
53
- "monitoring",
54
- "typescript"
55
- ],
56
- "author": "Revenium",
57
- "license": "MIT",
58
- "type": "commonjs",
59
- "engines": {
60
- "node": ">=20.0.0"
61
- },
62
- "dependencies": {
63
- "dotenv": "^17.2.2",
64
- "openai": "^5.23.1",
65
- "tsx": "^4.19.2",
66
- "typescript": "^5.9.2",
67
- "uuid": "^13.0.0"
68
- },
69
- "devDependencies": {
70
- "@types/node": "^24.7.1"
71
- }
72
- }
1
+ {
2
+ "name": "@revenium/perplexity",
3
+ "version": "2.0.6",
4
+ "description": "NodeJS middleware for Perplexity AI API with Revenium metering",
5
+ "homepage": "https://github.com/revenium/revenium-middleware-perplexity-node#readme",
6
+ "bugs": {
7
+ "url": "https://github.com/revenium/revenium-middleware-perplexity-node/issues"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/revenium/revenium-middleware-perplexity-node.git"
12
+ },
13
+ "main": "dist/cjs/index.js",
14
+ "module": "dist/esm/index.js",
15
+ "types": "dist/types/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "import": "./dist/esm/index.js",
19
+ "require": "./dist/cjs/index.js",
20
+ "types": "./dist/types/index.d.ts"
21
+ }
22
+ },
23
+ "files": [
24
+ "dist/",
25
+ "examples/",
26
+ "README.md",
27
+ "CHANGELOG.md",
28
+ "LICENSE",
29
+ "SECURITY.md"
30
+ ],
31
+ "scripts": {
32
+ "clean": "rm -rf dist",
33
+ "build:esm": "tsc -p tsconfig.esm.json",
34
+ "build:cjs": "tsc -p tsconfig.cjs.json",
35
+ "build:types": "tsc -p tsconfig.types.json",
36
+ "build": "npm run build:esm && npm run build:cjs && npm run build:types",
37
+ "prepublishOnly": "npm run build",
38
+ "example:getting-started": "npx tsx examples/getting_started.ts",
39
+ "example:basic": "npx tsx examples/basic.ts",
40
+ "example:metadata": "npx tsx examples/metadata.ts",
41
+ "example:advanced": "npx tsx examples/advanced.ts",
42
+ "example:stream": "npx tsx examples/stream.ts",
43
+ "test": "npm run example:getting-started && npm run example:stream"
44
+ },
45
+ "keywords": [
46
+ "revenium",
47
+ "middleware",
48
+ "perplexity",
49
+ "ai",
50
+ "chat",
51
+ "completion",
52
+ "metering",
53
+ "monitoring",
54
+ "typescript"
55
+ ],
56
+ "author": "Revenium",
57
+ "license": "MIT",
58
+ "type": "commonjs",
59
+ "engines": {
60
+ "node": ">=20.0.0"
61
+ },
62
+ "dependencies": {
63
+ "dotenv": "^17.2.2",
64
+ "openai": "^5.23.1",
65
+ "tsx": "^4.19.2",
66
+ "typescript": "^5.9.2",
67
+ "uuid": "^13.0.0"
68
+ },
69
+ "devDependencies": {
70
+ "@types/node": "^24.7.1"
71
+ }
72
+ }
@@ -1,70 +0,0 @@
1
- "use strict";
2
- /**
3
- * Configuration constants for Revenium Perplexity middleware
4
- * Centralizes all magic numbers and default values
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.API_ENDPOINTS = exports.DEFAULT_CONFIG = exports.PERPLEXITY_PATTERNS = exports.MIDDLEWARE_INFO = void 0;
8
- /**
9
- * Middleware identification
10
- *
11
- * Per Revenium API spec (https://revenium.readme.io/reference/meter_ai_completion):
12
- * "middlewareSource: Identifier of the Revenium middleware package or SDK that
13
- * captured and submitted this AI completion metadata. This field is AUTOMATICALLY
14
- * SET by Revenium's middleware packages (e.g., 'revenium-openai-python',
15
- * 'revenium-anthropic-node')."
16
- */
17
- exports.MIDDLEWARE_INFO = {
18
- /** Package name */
19
- NAME: "@revenium/perplexity",
20
- /** Package version */
21
- VERSION: "2.0.4",
22
- /** Full middleware source identifier for API tracking */
23
- SOURCE: "@revenium/perplexity-2.0.4",
24
- };
25
- /**
26
- * Perplexity model patterns and API response mappings
27
- *
28
- * Per Revenium API spec (https://revenium.readme.io/reference/meter_ai_completion):
29
- * stopReason enum: "END", "END_SEQUENCE", "TIMEOUT", "TOKEN_LIMIT",
30
- * "COST_LIMIT", "COMPLETION_LIMIT", "ERROR", "CANCELLED"
31
- *
32
- * We map Perplexity's finish_reason values to these Revenium enums.
33
- * Only provider-reported values are mapped; middleware-level values
34
- * (TIMEOUT, COST_LIMIT, etc.) are not applicable to provider responses.
35
- */
36
- exports.PERPLEXITY_PATTERNS = {
37
- /** Known Perplexity/OpenAI finish reasons */
38
- FINISH_REASONS: {
39
- STOP: "stop",
40
- LENGTH: "length",
41
- TOOL_CALLS: "tool_calls",
42
- CONTENT_FILTER: "content_filter",
43
- FUNCTION_CALL: "function_call",
44
- },
45
- /** Revenium stop reason mappings from Perplexity finish_reason to Revenium enum */
46
- REVENIUM_STOP_REASON_MAP: {
47
- stop: "END",
48
- length: "TOKEN_LIMIT",
49
- tool_calls: "END",
50
- content_filter: "END",
51
- function_call: "END",
52
- },
53
- };
54
- /**
55
- * Default configuration values
56
- */
57
- exports.DEFAULT_CONFIG = {
58
- /** Default Revenium API base URL */
59
- REVENIUM_BASE_URL: "https://api.revenium.ai",
60
- /** Default Perplexity API base URL */
61
- PERPLEXITY_BASE_URL: "https://api.perplexity.ai",
62
- };
63
- /**
64
- * API endpoints
65
- */
66
- exports.API_ENDPOINTS = {
67
- /** Revenium AI completions endpoint */
68
- AI_COMPLETIONS: "/meter/v2/ai/completions",
69
- };
70
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;;;;;;;GAQG;AACU,QAAA,eAAe,GAAG;IAC7B,mBAAmB;IACnB,IAAI,EAAE,sBAAsB;IAC5B,sBAAsB;IACtB,OAAO,EAAE,OAAO;IAChB,yDAAyD;IACzD,MAAM,EAAE,4BAA4B;CAC5B,CAAC;AAEX;;;;;;;;;;GAUG;AACU,QAAA,mBAAmB,GAAG;IACjC,6CAA6C;IAC7C,cAAc,EAAE;QACd,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,YAAY;QACxB,cAAc,EAAE,gBAAgB;QAChC,aAAa,EAAE,eAAe;KACtB;IAEV,mFAAmF;IACnF,wBAAwB,EAAE;QACxB,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,aAAa;QACrB,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,KAAK;KACZ;CACF,CAAC;AAEX;;GAEG;AACU,QAAA,cAAc,GAAG;IAC5B,oCAAoC;IACpC,iBAAiB,EAAE,yBAAyB;IAE5C,sCAAsC;IACtC,mBAAmB,EAAE,2BAA2B;CACxC,CAAC;AAEX;;GAEG;AACU,QAAA,aAAa,GAAG;IAC3B,uCAAuC;IACvC,cAAc,EAAE,0BAA0B;CAClC,CAAC"}
@@ -1,45 +0,0 @@
1
- "use strict";
2
- /**
3
- * Perplexity Configuration Module
4
- * Manages Perplexity API configuration
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.initializePerplexityFromEnv = initializePerplexityFromEnv;
8
- exports.initializePerplexity = initializePerplexity;
9
- exports.getPerplexityConfig = getPerplexityConfig;
10
- const logger_1 = require("../../utils/logger");
11
- let perplexityConfig = null;
12
- /**
13
- * Initialize Perplexity configuration from environment variables
14
- */
15
- function initializePerplexityFromEnv() {
16
- const apiKey = process.env.PERPLEXITY_API_KEY;
17
- const baseUrl = process.env.PERPLEXITY_API_BASE_URL || "https://api.perplexity.ai";
18
- if (!apiKey) {
19
- throw new Error("PERPLEXITY_API_KEY environment variable is required but not set");
20
- }
21
- perplexityConfig = {
22
- apiKey,
23
- baseUrl,
24
- };
25
- logger_1.logger.info("Perplexity configuration initialized successfully");
26
- return perplexityConfig;
27
- }
28
- /**
29
- * Initialize Perplexity configuration with custom values
30
- */
31
- function initializePerplexity(config) {
32
- perplexityConfig = {
33
- apiKey: config.apiKey,
34
- baseUrl: config.baseUrl || "https://api.perplexity.ai",
35
- };
36
- logger_1.logger.info("Perplexity configuration initialized with custom config");
37
- return perplexityConfig;
38
- }
39
- /**
40
- * Get current Perplexity configuration
41
- */
42
- function getPerplexityConfig() {
43
- return perplexityConfig;
44
- }
45
- //# sourceMappingURL=perplexity-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"perplexity-config.js","sourceRoot":"","sources":["../../../../src/core/config/perplexity-config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAcH,kEAkBC;AAKD,oDAWC;AAKD,kDAEC;AArDD,+CAA4C;AAO5C,IAAI,gBAAgB,GAA4B,IAAI,CAAC;AAErD;;GAEG;AACH,SAAgB,2BAA2B;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC9C,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,2BAA2B,CAAC;IAErE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,iEAAiE,CAClE,CAAC;IACJ,CAAC;IAED,gBAAgB,GAAG;QACjB,MAAM;QACN,OAAO;KACR,CAAC;IAEF,eAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,MAGpC;IACC,gBAAgB,GAAG;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,2BAA2B;KACvD,CAAC;IAEF,eAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IACjC,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}