@revenium/perplexity 1.0.23 → 2.0.1

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 (123) hide show
  1. package/README.md +468 -364
  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 -16
  45. package/.env.example +0 -3
  46. package/dist/index.js +0 -19
  47. package/dist/interfaces/chatCompletionRequest.d.ts +0 -9
  48. package/dist/interfaces/chatCompletionRequest.js +0 -2
  49. package/dist/interfaces/credential.d.ts +0 -4
  50. package/dist/interfaces/credential.js +0 -2
  51. package/dist/interfaces/meteringRequest.d.ts +0 -13
  52. package/dist/interfaces/meteringRequest.js +0 -2
  53. package/dist/interfaces/meteringResponse.d.ts +0 -27
  54. package/dist/interfaces/meteringResponse.js +0 -2
  55. package/dist/interfaces/operation.d.ts +0 -4
  56. package/dist/interfaces/operation.js +0 -8
  57. package/dist/interfaces/subscriber.d.ts +0 -8
  58. package/dist/interfaces/subscriber.js +0 -2
  59. package/dist/interfaces/tokenCounts.d.ts +0 -7
  60. package/dist/interfaces/tokenCounts.js +0 -2
  61. package/dist/interfaces/usageMetadata.d.ts +0 -27
  62. package/dist/interfaces/usageMetadata.js +0 -2
  63. package/dist/middleware.d.ts +0 -22
  64. package/dist/middleware.js +0 -129
  65. package/dist/models/Logger.js +0 -35
  66. package/dist/models/Metering.d.ts +0 -9
  67. package/dist/models/Metering.js +0 -80
  68. package/dist/utils/calculateDurationMs.d.ts +0 -1
  69. package/dist/utils/calculateDurationMs.js +0 -6
  70. package/dist/utils/constants/constants.d.ts +0 -6
  71. package/dist/utils/constants/constants.js +0 -11
  72. package/dist/utils/constants/logLevels.d.ts +0 -1
  73. package/dist/utils/constants/logLevels.js +0 -4
  74. package/dist/utils/constants/messages.d.ts +0 -5
  75. package/dist/utils/constants/messages.js +0 -8
  76. package/dist/utils/constants/models.d.ts +0 -1
  77. package/dist/utils/constants/models.js +0 -21
  78. package/dist/utils/extractTokenCount.d.ts +0 -2
  79. package/dist/utils/extractTokenCount.js +0 -28
  80. package/dist/utils/formatTimeStamp.d.ts +0 -1
  81. package/dist/utils/formatTimeStamp.js +0 -6
  82. package/dist/utils/generateTransactionId.d.ts +0 -1
  83. package/dist/utils/generateTransactionId.js +0 -7
  84. package/dist/utils/index.d.ts +0 -6
  85. package/dist/utils/index.js +0 -23
  86. package/dist/utils/loadEnv.d.ts +0 -1
  87. package/dist/utils/loadEnv.js +0 -7
  88. package/dist/utils/safeExtract.d.ts +0 -29
  89. package/dist/utils/safeExtract.js +0 -67
  90. package/examples/basic.ts +0 -17
  91. package/examples/chat-completions.ts +0 -22
  92. package/examples/enhanced.ts +0 -20
  93. package/examples/metadata.ts +0 -43
  94. package/examples/streaming.ts +0 -24
  95. package/playground/basic.js +0 -17
  96. package/playground/chat-completions.js +0 -22
  97. package/playground/enhanced.js +0 -20
  98. package/playground/metadata.js +0 -43
  99. package/playground/streaming.js +0 -24
  100. package/src/index.ts +0 -4
  101. package/src/interfaces/chatCompletionRequest.ts +0 -10
  102. package/src/interfaces/credential.ts +0 -4
  103. package/src/interfaces/meteringRequest.ts +0 -14
  104. package/src/interfaces/meteringResponse.ts +0 -28
  105. package/src/interfaces/operation.ts +0 -4
  106. package/src/interfaces/subscriber.ts +0 -8
  107. package/src/interfaces/tokenCounts.ts +0 -7
  108. package/src/interfaces/usageMetadata.ts +0 -27
  109. package/src/middleware.ts +0 -157
  110. package/src/models/Logger.ts +0 -38
  111. package/src/models/Metering.ts +0 -114
  112. package/src/utils/calculateDurationMs.ts +0 -3
  113. package/src/utils/constants/constants.ts +0 -10
  114. package/src/utils/constants/logLevels.ts +0 -1
  115. package/src/utils/constants/messages.ts +0 -11
  116. package/src/utils/constants/models.ts +0 -20
  117. package/src/utils/extractTokenCount.ts +0 -26
  118. package/src/utils/formatTimestamp.ts +0 -3
  119. package/src/utils/generateTransactionId.ts +0 -5
  120. package/src/utils/index.ts +0 -39
  121. package/src/utils/loadEnv.ts +0 -8
  122. package/src/utils/safeExtract.ts +0 -67
  123. package/tsconfig.json +0 -15
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Revenium Configuration Module
3
+ * Manages Revenium metering configuration and initialization
4
+ */
5
+ import { logger } from "../../utils/logger";
6
+ let reveniumConfig = null;
7
+ /**
8
+ * Initialize Revenium configuration from environment variables
9
+ */
10
+ export function initializeReveniumFromEnv() {
11
+ const meteringApiKey = process.env.REVENIUM_METERING_API_KEY?.trim().replace(/^["']|["']$/g, "");
12
+ const meteringBaseUrl = process.env.REVENIUM_METERING_BASE_URL?.trim().replace(/^["']|["']$/g, "");
13
+ if (!meteringApiKey || !meteringBaseUrl) {
14
+ logger.warn("Revenium metering disabled: Missing REVENIUM_METERING_API_KEY or REVENIUM_METERING_BASE_URL");
15
+ reveniumConfig = {
16
+ meteringApiKey: "",
17
+ meteringBaseUrl: "",
18
+ enabled: false,
19
+ };
20
+ return reveniumConfig;
21
+ }
22
+ reveniumConfig = {
23
+ meteringApiKey,
24
+ meteringBaseUrl,
25
+ enabled: true,
26
+ };
27
+ logger.info("Revenium configuration initialized successfully");
28
+ logger.debug(`Metering Base URL: ${meteringBaseUrl}`);
29
+ return reveniumConfig;
30
+ }
31
+ /**
32
+ * Initialize Revenium configuration with custom values
33
+ */
34
+ export function initializeRevenium(config) {
35
+ reveniumConfig = {
36
+ ...config,
37
+ enabled: true,
38
+ };
39
+ logger.info("Revenium configuration initialized with custom config");
40
+ return reveniumConfig;
41
+ }
42
+ /**
43
+ * Get current Revenium configuration
44
+ */
45
+ export function getReveniumConfig() {
46
+ return reveniumConfig;
47
+ }
48
+ /**
49
+ * Check if Revenium is enabled
50
+ */
51
+ export function isReveniumEnabled() {
52
+ return reveniumConfig?.enabled ?? false;
53
+ }
54
+ /**
55
+ * Disable Revenium metering
56
+ */
57
+ export function disableRevenium() {
58
+ if (reveniumConfig) {
59
+ reveniumConfig.enabled = false;
60
+ logger.info("Revenium metering disabled");
61
+ }
62
+ }
63
+ /**
64
+ * Enable Revenium metering
65
+ */
66
+ export function enableRevenium() {
67
+ if (reveniumConfig) {
68
+ reveniumConfig.enabled = true;
69
+ logger.info("Revenium metering enabled");
70
+ }
71
+ }
72
+ //# sourceMappingURL=revenium-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revenium-config.js","sourceRoot":"","sources":["../../../../src/core/config/revenium-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ5C,IAAI,cAAc,GAA0B,IAAI,CAAC;AAEjD;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,EAAE,CAAC,OAAO,CAC1E,cAAc,EACd,EAAE,CACH,CAAC;IACF,MAAM,eAAe,GACnB,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAE7E,IAAI,CAAC,cAAc,IAAI,CAAC,eAAe,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CACT,6FAA6F,CAC9F,CAAC;QACF,cAAc,GAAG;YACf,cAAc,EAAE,EAAE;YAClB,eAAe,EAAE,EAAE;YACnB,OAAO,EAAE,KAAK;SACf,CAAC;QACF,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,cAAc,GAAG;QACf,cAAc;QACd,eAAe;QACf,OAAO,EAAE,IAAI;KACd,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAC/D,MAAM,CAAC,KAAK,CAAC,sBAAsB,eAAe,EAAE,CAAC,CAAC;IACtD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAGlC;IACC,cAAc,GAAG;QACf,GAAG,MAAM;QACT,OAAO,EAAE,IAAI;KACd,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IACrE,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,EAAE,OAAO,IAAI,KAAK,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,cAAc,EAAE,CAAC;QACnB,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,cAAc,EAAE,CAAC;QACnB,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Revenium Metering Module
3
+ * Handles tracking and sending metering data to Revenium
4
+ */
5
+ import { getReveniumConfig, isReveniumEnabled, } from "../config/revenium-config";
6
+ import { logger } from "../../utils/logger";
7
+ /**
8
+ * Generate a unique transaction ID
9
+ */
10
+ export function generateTransactionId() {
11
+ return `txn_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
12
+ }
13
+ /**
14
+ * Format timestamp to ISO string
15
+ */
16
+ function formatTimestamp(date) {
17
+ return date.toISOString();
18
+ }
19
+ /**
20
+ * Calculate duration in milliseconds
21
+ */
22
+ function calculateDuration(startTime, endTime) {
23
+ return endTime.getTime() - startTime.getTime();
24
+ }
25
+ /**
26
+ * Build metering data from request information
27
+ */
28
+ export function buildMeteringData(params) {
29
+ const { model, startTime, endTime, inputTokens, outputTokens, totalTokens, reasoningTokens = 0, cachedTokens = 0, transactionId, isStreamed, stopReason, usageMetadata = {}, } = params;
30
+ const config = getReveniumConfig();
31
+ const agent = "perplexity";
32
+ const costType = "TOKEN";
33
+ const operationType = "CHAT";
34
+ // Build subscriber information
35
+ const subscriberId = usageMetadata.subscriber?.id ||
36
+ usageMetadata.subscriberId ||
37
+ `user-${generateTransactionId()}`;
38
+ const subscriberEmail = usageMetadata.subscriber?.email ||
39
+ usageMetadata.subscriberEmail ||
40
+ `user@${agent}.ai`;
41
+ const subscriberCredential = usageMetadata.subscriber?.credential ||
42
+ (usageMetadata.subscriberCredentialName &&
43
+ usageMetadata.subscriberCredential
44
+ ? {
45
+ name: usageMetadata.subscriberCredentialName,
46
+ value: usageMetadata.subscriberCredential,
47
+ }
48
+ : {
49
+ name: "default",
50
+ value: "default-credential",
51
+ });
52
+ const subscriber = {
53
+ id: subscriberId,
54
+ email: subscriberEmail,
55
+ credential: subscriberCredential,
56
+ };
57
+ // Build the payload in the exact order expected by Revenium API v2
58
+ const payload = {
59
+ stopReason: "END",
60
+ costType: "AI", // Fixed value as per Google middleware
61
+ isStreamed,
62
+ taskType: "AI", // Fixed value as per Google middleware
63
+ agent: usageMetadata.agent || agent,
64
+ operationType: usageMetadata.operationType || operationType,
65
+ inputTokenCount: usageMetadata.inputTokenCount ?? inputTokens,
66
+ outputTokenCount: usageMetadata.outputTokenCount ?? outputTokens,
67
+ reasoningTokenCount: usageMetadata.reasoningTokenCount ?? reasoningTokens,
68
+ cacheCreationTokenCount: usageMetadata.cacheCreationTokenCount ?? cachedTokens,
69
+ cacheReadTokenCount: usageMetadata.cacheReadTokenCount ?? 0,
70
+ totalTokenCount: usageMetadata.totalTokenCount ?? totalTokens,
71
+ organizationId: usageMetadata.organizationId || "my-customers-name",
72
+ productId: usageMetadata.productId || "free-trial",
73
+ subscriber,
74
+ model,
75
+ transactionId: usageMetadata.transactionId || transactionId,
76
+ responseTime: usageMetadata.responseTime || formatTimestamp(endTime),
77
+ requestDuration: calculateDuration(startTime, endTime),
78
+ provider: agent,
79
+ requestTime: usageMetadata.requestTime || formatTimestamp(startTime),
80
+ completionStartTime: usageMetadata.completionStartTime || formatTimestamp(endTime),
81
+ timeToFirstToken: usageMetadata.timeToFirstToken || 0,
82
+ middleware_source: "node",
83
+ };
84
+ // Only add traceId if it's provided
85
+ if (usageMetadata.traceId) {
86
+ payload.traceId = usageMetadata.traceId;
87
+ }
88
+ return payload;
89
+ }
90
+ /**
91
+ * Send metering data to Revenium
92
+ */
93
+ export async function sendMeteringData(meteringData) {
94
+ if (!isReveniumEnabled()) {
95
+ logger.debug("Revenium metering is disabled, skipping metering data");
96
+ return;
97
+ }
98
+ const config = getReveniumConfig();
99
+ if (!config) {
100
+ logger.warn("Revenium configuration not initialized");
101
+ return;
102
+ }
103
+ try {
104
+ const url = `${config.meteringBaseUrl}/v2/ai/completions`;
105
+ logger.debug("Sending metering data to Revenium:", JSON.stringify(meteringData, null, 2));
106
+ const response = await fetch(url, {
107
+ method: "POST",
108
+ headers: {
109
+ "Content-Type": "application/json",
110
+ "x-api-key": config.meteringApiKey,
111
+ accept: "application/json",
112
+ },
113
+ body: JSON.stringify(meteringData),
114
+ });
115
+ if (!response.ok) {
116
+ const errorData = await response.text();
117
+ logger.error(`Metering API request failed with status ${response.status}: ${errorData}`);
118
+ return;
119
+ }
120
+ logger.info("Metering data sent successfully to Revenium");
121
+ }
122
+ catch (error) {
123
+ logger.error("Error sending metering data:", error.message);
124
+ }
125
+ }
126
+ //# sourceMappingURL=metering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metering.js","sourceRoot":"","sources":["../../../../src/core/tracking/metering.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Perplexity Client Wrapper
3
+ * Wraps Perplexity API calls with Revenium metering
4
+ */
5
+ import OpenAI from "openai";
6
+ import { getPerplexityConfig } from "../config/perplexity-config";
7
+ import { logger } from "../../utils/logger";
8
+ import { buildMeteringData, generateTransactionId, sendMeteringData, } from "../tracking/metering";
9
+ let perplexityClient = null;
10
+ /**
11
+ * Get or create Perplexity client
12
+ */
13
+ function getClient() {
14
+ if (!perplexityClient) {
15
+ const config = getPerplexityConfig();
16
+ if (!config) {
17
+ throw new Error("Perplexity configuration not initialized. Call initializePerplexityFromEnv() or initializePerplexity() first.");
18
+ }
19
+ perplexityClient = new OpenAI({
20
+ apiKey: config.apiKey,
21
+ baseURL: config.baseUrl,
22
+ });
23
+ logger.info("Perplexity client initialized successfully");
24
+ }
25
+ return perplexityClient;
26
+ }
27
+ /**
28
+ * Create a chat completion
29
+ */
30
+ export async function createChatCompletion(params) {
31
+ const client = getClient();
32
+ const transactionId = generateTransactionId();
33
+ const startTime = new Date();
34
+ try {
35
+ const { usageMetadata, ...requestParams } = params;
36
+ logger.info(`Creating chat completion with model: ${params.model}`);
37
+ const response = (await client.chat.completions.create({
38
+ model: requestParams.model,
39
+ messages: requestParams.messages,
40
+ max_tokens: requestParams.maxTokens,
41
+ temperature: requestParams.temperature,
42
+ top_p: requestParams.topP,
43
+ presence_penalty: requestParams.presencePenalty,
44
+ frequency_penalty: requestParams.frequencyPenalty,
45
+ stream: false,
46
+ }));
47
+ const endTime = new Date();
48
+ // Extract response data
49
+ const content = response.choices[0]?.message?.content || "";
50
+ const role = response.choices[0]?.message?.role || "assistant";
51
+ const finishReason = response.choices[0]?.finish_reason || null;
52
+ const usage = response.usage || {
53
+ prompt_tokens: 0,
54
+ completion_tokens: 0,
55
+ total_tokens: 0,
56
+ };
57
+ // Build and send metering data
58
+ const meteringData = buildMeteringData({
59
+ model: response.model,
60
+ startTime,
61
+ endTime,
62
+ inputTokens: usage.prompt_tokens,
63
+ outputTokens: usage.completion_tokens,
64
+ totalTokens: usage.total_tokens,
65
+ transactionId,
66
+ isStreamed: false,
67
+ stopReason: finishReason || "END",
68
+ usageMetadata,
69
+ });
70
+ // Send metering data asynchronously (don't wait)
71
+ sendMeteringData(meteringData).catch((error) => {
72
+ logger.error("Failed to send metering data:", error);
73
+ });
74
+ return {
75
+ content,
76
+ role,
77
+ finishReason,
78
+ usage: {
79
+ promptTokens: usage.prompt_tokens,
80
+ completionTokens: usage.completion_tokens,
81
+ totalTokens: usage.total_tokens,
82
+ },
83
+ model: response.model,
84
+ transactionId,
85
+ rawResponse: response,
86
+ };
87
+ }
88
+ catch (error) {
89
+ logger.error("Error in chat completion:", error.message);
90
+ throw error;
91
+ }
92
+ }
93
+ /**
94
+ * Create a streaming chat completion
95
+ */
96
+ export async function createStreamingChatCompletion(params) {
97
+ const client = getClient();
98
+ const transactionId = generateTransactionId();
99
+ const startTime = new Date();
100
+ try {
101
+ const { usageMetadata, ...requestParams } = params;
102
+ logger.info(`Creating streaming chat completion with model: ${params.model}`);
103
+ const stream = await client.chat.completions.create({
104
+ model: requestParams.model,
105
+ messages: requestParams.messages,
106
+ max_tokens: requestParams.maxTokens,
107
+ temperature: requestParams.temperature,
108
+ top_p: requestParams.topP,
109
+ presence_penalty: requestParams.presencePenalty,
110
+ frequency_penalty: requestParams.frequencyPenalty,
111
+ stream: true,
112
+ });
113
+ // Wrap the stream to track metering
114
+ const wrappedStream = wrapStream(stream, transactionId, params.model, startTime, usageMetadata);
115
+ return {
116
+ stream: wrappedStream,
117
+ transactionId,
118
+ model: params.model,
119
+ };
120
+ }
121
+ catch (error) {
122
+ logger.error("Error in streaming chat completion:", error.message);
123
+ throw error;
124
+ }
125
+ }
126
+ /**
127
+ * Wrap stream to track metering data
128
+ */
129
+ async function* wrapStream(stream, transactionId, model, startTime, usageMetadata) {
130
+ let lastChunk = null;
131
+ let inputTokens = 0;
132
+ let outputTokens = 0;
133
+ let totalTokens = 0;
134
+ try {
135
+ for await (const chunk of stream) {
136
+ lastChunk = chunk;
137
+ // Track usage if available in chunk
138
+ if (chunk.usage) {
139
+ inputTokens = chunk.usage.prompt_tokens || 0;
140
+ outputTokens = chunk.usage.completion_tokens || 0;
141
+ totalTokens = chunk.usage.total_tokens || 0;
142
+ }
143
+ yield chunk;
144
+ }
145
+ // Send metering data when stream completes
146
+ const endTime = new Date();
147
+ const finishReason = lastChunk?.choices?.[0]?.finish_reason || "END";
148
+ const meteringData = buildMeteringData({
149
+ model,
150
+ startTime,
151
+ endTime,
152
+ inputTokens,
153
+ outputTokens,
154
+ totalTokens,
155
+ transactionId,
156
+ isStreamed: true,
157
+ stopReason: finishReason,
158
+ usageMetadata,
159
+ });
160
+ // Send metering data asynchronously (don't wait)
161
+ sendMeteringData(meteringData).catch((error) => {
162
+ logger.error("Failed to send metering data:", error);
163
+ });
164
+ }
165
+ catch (error) {
166
+ logger.error("Error in stream processing:", error.message);
167
+ throw error;
168
+ }
169
+ }
170
+ //# sourceMappingURL=perplexity-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perplexity-client.js","sourceRoot":"","sources":["../../../../src/core/wrapper/perplexity-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Revenium Middleware for Perplexity
3
+ *
4
+ * A lightweight middleware that adds Revenium metering to Perplexity API calls.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import {
9
+ * initializeReveniumFromEnv,
10
+ * initializePerplexityFromEnv,
11
+ * createChatCompletion,
12
+ * } from '@revenium/perplexity';
13
+ *
14
+ * // Initialize configurations
15
+ * initializeReveniumFromEnv();
16
+ * initializePerplexityFromEnv();
17
+ *
18
+ * // Create a chat completion
19
+ * const result = await createChatCompletion({
20
+ * messages: [{ role: 'user', content: 'Hello!' }],
21
+ * model: 'sonar-pro',
22
+ * });
23
+ *
24
+ * console.log(result.content);
25
+ * ```
26
+ */
27
+ import { config } from "dotenv";
28
+ config();
29
+ // ============================================================================
30
+ // Configuration
31
+ // ============================================================================
32
+ export { initializeReveniumFromEnv, initializeRevenium, getReveniumConfig, isReveniumEnabled, disableRevenium, enableRevenium, } from "./core/config/revenium-config";
33
+ export { initializePerplexityFromEnv, initializePerplexity, getPerplexityConfig, } from "./core/config/perplexity-config";
34
+ // ============================================================================
35
+ // Core API
36
+ // ============================================================================
37
+ export { createChatCompletion, createStreamingChatCompletion, } from "./core/wrapper/perplexity-client";
38
+ export { generateTransactionId, buildMeteringData, sendMeteringData, } from "./core/tracking/metering";
39
+ export { PERPLEXITY_MODELS, DEFAULT_MODEL } from "./types";
40
+ // ============================================================================
41
+ // Utilities
42
+ // ============================================================================
43
+ export { logger } from "./utils/logger";
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,MAAM,EAAE,CAAC;AAET,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,cAAc,GAEf,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,EACpB,mBAAmB,GAEpB,MAAM,iCAAiC,CAAC;AAEzC,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,OAAO,EACL,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAoBlC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE3D,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * TypeScript Type Definitions for Perplexity Middleware
3
+ */
4
+ // ============================================================================
5
+ // Constants
6
+ // ============================================================================
7
+ export const PERPLEXITY_MODELS = {
8
+ // Sonar Models (Online)
9
+ SONAR: "sonar",
10
+ SONAR_PRO: "sonar-pro",
11
+ SONAR_REASONING: "sonar-reasoning",
12
+ // Chat Models (Offline)
13
+ LLAMA_3_1_SONAR_SMALL_128K_CHAT: "llama-3.1-sonar-small-128k-chat",
14
+ LLAMA_3_1_SONAR_LARGE_128K_CHAT: "llama-3.1-sonar-large-128k-chat",
15
+ LLAMA_3_1_SONAR_HUGE_128K_CHAT: "llama-3.1-sonar-huge-128k-chat",
16
+ };
17
+ export const DEFAULT_MODEL = PERPLEXITY_MODELS.SONAR_PRO;
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4LH,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,wBAAwB;IACxB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,eAAe,EAAE,iBAAiB;IAElC,wBAAwB;IACxB,+BAA+B,EAAE,iCAAiC;IAClE,+BAA+B,EAAE,iCAAiC;IAClE,8BAA8B,EAAE,gCAAgC;CACxD,CAAC;AAKX,MAAM,CAAC,MAAM,aAAa,GAAoB,iBAAiB,CAAC,SAAS,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Simple logger utility
3
+ */
4
+ export const logger = {
5
+ info: (...args) => {
6
+ console.log("[Revenium]", ...args);
7
+ },
8
+ warn: (...args) => {
9
+ console.warn("[Revenium Warning]", ...args);
10
+ },
11
+ error: (...args) => {
12
+ console.error("[Revenium Error]", ...args);
13
+ },
14
+ debug: (...args) => {
15
+ if (process.env.DEBUG === "true") {
16
+ console.log("[Revenium Debug]", ...args);
17
+ }
18
+ },
19
+ };
20
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;QACvB,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,CAAC;IACD,KAAK,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;QACxB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7C,CAAC;IACD,KAAK,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;QACxB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Perplexity Configuration Module
3
+ * Manages Perplexity API configuration
4
+ */
5
+ export interface PerplexityConfig {
6
+ apiKey: string;
7
+ baseUrl: string;
8
+ }
9
+ /**
10
+ * Initialize Perplexity configuration from environment variables
11
+ */
12
+ export declare function initializePerplexityFromEnv(): PerplexityConfig;
13
+ /**
14
+ * Initialize Perplexity configuration with custom values
15
+ */
16
+ export declare function initializePerplexity(config: {
17
+ apiKey: string;
18
+ baseUrl?: string;
19
+ }): PerplexityConfig;
20
+ /**
21
+ * Get current Perplexity configuration
22
+ */
23
+ export declare function getPerplexityConfig(): PerplexityConfig | null;
24
+ //# sourceMappingURL=perplexity-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perplexity-config.d.ts","sourceRoot":"","sources":["../../../../src/core/config/perplexity-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAID;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,gBAAgB,CAkB9D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,gBAAgB,CAQnB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAE7D"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Revenium Configuration Module
3
+ * Manages Revenium metering configuration and initialization
4
+ */
5
+ export interface ReveniumConfig {
6
+ meteringApiKey: string;
7
+ meteringBaseUrl: string;
8
+ enabled: boolean;
9
+ }
10
+ /**
11
+ * Initialize Revenium configuration from environment variables
12
+ */
13
+ export declare function initializeReveniumFromEnv(): ReveniumConfig;
14
+ /**
15
+ * Initialize Revenium configuration with custom values
16
+ */
17
+ export declare function initializeRevenium(config: {
18
+ meteringApiKey: string;
19
+ meteringBaseUrl: string;
20
+ }): ReveniumConfig;
21
+ /**
22
+ * Get current Revenium configuration
23
+ */
24
+ export declare function getReveniumConfig(): ReveniumConfig | null;
25
+ /**
26
+ * Check if Revenium is enabled
27
+ */
28
+ export declare function isReveniumEnabled(): boolean;
29
+ /**
30
+ * Disable Revenium metering
31
+ */
32
+ export declare function disableRevenium(): void;
33
+ /**
34
+ * Enable Revenium metering
35
+ */
36
+ export declare function enableRevenium(): void;
37
+ //# sourceMappingURL=revenium-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revenium-config.d.ts","sourceRoot":"","sources":["../../../../src/core/config/revenium-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB;AAID;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,cAAc,CA6B1D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,cAAc,CAQjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAEzD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Revenium Metering Module
3
+ * Handles tracking and sending metering data to Revenium
4
+ */
5
+ import type { MeteringData, UsageMetadata } from "../../types";
6
+ /**
7
+ * Generate a unique transaction ID
8
+ */
9
+ export declare function generateTransactionId(): string;
10
+ /**
11
+ * Build metering data from request information
12
+ */
13
+ export declare function buildMeteringData(params: {
14
+ model: string;
15
+ startTime: Date;
16
+ endTime: Date;
17
+ inputTokens: number;
18
+ outputTokens: number;
19
+ totalTokens: number;
20
+ reasoningTokens?: number;
21
+ cachedTokens?: number;
22
+ transactionId: string;
23
+ isStreamed: boolean;
24
+ stopReason: string;
25
+ usageMetadata?: UsageMetadata;
26
+ }): MeteringData;
27
+ /**
28
+ * Send metering data to Revenium
29
+ */
30
+ export declare function sendMeteringData(meteringData: MeteringData): Promise<void>;
31
+ //# sourceMappingURL=metering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metering.d.ts","sourceRoot":"","sources":["../../../../src/core/tracking/metering.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE/D;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAgBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,GAAG,YAAY,CAuFf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Perplexity Client Wrapper
3
+ * Wraps Perplexity API calls with Revenium metering
4
+ */
5
+ import type { PerplexityMessage, UsageMetadata, ChatCompletionResult, StreamingResult } from "../../types";
6
+ /**
7
+ * Create a chat completion
8
+ */
9
+ export declare function createChatCompletion(params: {
10
+ messages: PerplexityMessage[];
11
+ model: string;
12
+ maxTokens?: number;
13
+ temperature?: number;
14
+ topP?: number;
15
+ presencePenalty?: number;
16
+ frequencyPenalty?: number;
17
+ usageMetadata?: UsageMetadata;
18
+ }): Promise<ChatCompletionResult>;
19
+ /**
20
+ * Create a streaming chat completion
21
+ */
22
+ export declare function createStreamingChatCompletion(params: {
23
+ messages: PerplexityMessage[];
24
+ model: string;
25
+ maxTokens?: number;
26
+ temperature?: number;
27
+ topP?: number;
28
+ presencePenalty?: number;
29
+ frequencyPenalty?: number;
30
+ usageMetadata?: UsageMetadata;
31
+ }): Promise<StreamingResult>;
32
+ //# sourceMappingURL=perplexity-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perplexity-client.d.ts","sourceRoot":"","sources":["../../../../src/core/wrapper/perplexity-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,KAAK,EACV,iBAAiB,EAGjB,aAAa,EACb,oBAAoB,EACpB,eAAe,EAChB,MAAM,aAAa,CAAC;AA2BrB;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAqEhC;AAED;;GAEG;AACH,wBAAsB,6BAA6B,CAAC,MAAM,EAAE;IAC1D,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,GAAG,OAAO,CAAC,eAAe,CAAC,CAyC3B"}