@revenium/perplexity 2.0.4 → 2.0.5

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 (205) hide show
  1. package/CHANGELOG.md +32 -33
  2. package/README.md +120 -101
  3. package/SECURITY.md +34 -0
  4. package/dist/cjs/constants/models.js +38 -0
  5. package/dist/cjs/constants/models.js.map +1 -0
  6. package/dist/cjs/core/client/index.js +13 -0
  7. package/dist/cjs/core/client/index.js.map +1 -0
  8. package/dist/cjs/core/client/manager.js +85 -0
  9. package/dist/cjs/core/client/manager.js.map +1 -0
  10. package/dist/cjs/core/config/index.js +21 -0
  11. package/dist/cjs/core/config/index.js.map +1 -0
  12. package/dist/cjs/core/config/loader.js +48 -0
  13. package/dist/cjs/core/config/loader.js.map +1 -0
  14. package/dist/cjs/core/config/manager.js +77 -0
  15. package/dist/cjs/core/config/manager.js.map +1 -0
  16. package/dist/cjs/core/config/validator.js +45 -0
  17. package/dist/cjs/core/config/validator.js.map +1 -0
  18. package/dist/cjs/core/middleware/index.js +14 -0
  19. package/dist/cjs/core/middleware/index.js.map +1 -0
  20. package/dist/cjs/core/middleware/interfaces.js +94 -0
  21. package/dist/cjs/core/middleware/interfaces.js.map +1 -0
  22. package/dist/cjs/core/middleware/revenium-client.js +44 -0
  23. package/dist/cjs/core/middleware/revenium-client.js.map +1 -0
  24. package/dist/cjs/core/middleware/streaming-wrapper.js +80 -0
  25. package/dist/cjs/core/middleware/streaming-wrapper.js.map +1 -0
  26. package/dist/cjs/core/providers/detector.js +38 -0
  27. package/dist/cjs/core/providers/detector.js.map +1 -0
  28. package/dist/cjs/core/providers/index.js +14 -0
  29. package/dist/cjs/core/providers/index.js.map +1 -0
  30. package/dist/cjs/core/tracking/api-client.js +67 -0
  31. package/dist/cjs/core/tracking/api-client.js.map +1 -0
  32. package/dist/cjs/core/tracking/index.js +21 -0
  33. package/dist/cjs/core/tracking/index.js.map +1 -0
  34. package/dist/cjs/core/tracking/payload-builder.js +95 -0
  35. package/dist/cjs/core/tracking/payload-builder.js.map +1 -0
  36. package/dist/cjs/core/tracking/usage-tracker.js +83 -0
  37. package/dist/cjs/core/tracking/usage-tracker.js.map +1 -0
  38. package/dist/cjs/index.js +60 -59
  39. package/dist/cjs/index.js.map +1 -1
  40. package/dist/cjs/types/function-parameters.js +14 -0
  41. package/dist/cjs/types/function-parameters.js.map +1 -0
  42. package/dist/cjs/types/index.js +20 -1
  43. package/dist/cjs/types/index.js.map +1 -1
  44. package/dist/cjs/utils/constants.js +20 -0
  45. package/dist/cjs/utils/constants.js.map +1 -0
  46. package/dist/cjs/utils/error-handler.js +194 -0
  47. package/dist/cjs/utils/error-handler.js.map +1 -0
  48. package/dist/cjs/utils/metadata-builder.js +191 -0
  49. package/dist/cjs/utils/metadata-builder.js.map +1 -0
  50. package/dist/cjs/utils/stop-reason-mapper.js +74 -0
  51. package/dist/cjs/utils/stop-reason-mapper.js.map +1 -0
  52. package/dist/cjs/utils/transaction-id.js +19 -0
  53. package/dist/cjs/utils/transaction-id.js.map +1 -0
  54. package/dist/cjs/utils/url-builder.js +57 -0
  55. package/dist/cjs/utils/url-builder.js.map +1 -0
  56. package/dist/esm/constants/models.js +35 -0
  57. package/dist/esm/constants/models.js.map +1 -0
  58. package/dist/esm/core/client/index.js +5 -0
  59. package/dist/esm/core/client/index.js.map +1 -0
  60. package/dist/esm/core/client/manager.js +78 -0
  61. package/dist/esm/core/client/manager.js.map +1 -0
  62. package/dist/esm/core/config/index.js +11 -0
  63. package/dist/esm/core/config/index.js.map +1 -0
  64. package/dist/esm/core/config/loader.js +45 -0
  65. package/dist/esm/core/config/loader.js.map +1 -0
  66. package/dist/esm/core/config/manager.js +70 -0
  67. package/dist/esm/core/config/manager.js.map +1 -0
  68. package/dist/esm/core/config/validator.js +42 -0
  69. package/dist/esm/core/config/validator.js.map +1 -0
  70. package/dist/esm/core/middleware/index.js +7 -0
  71. package/dist/esm/core/middleware/index.js.map +1 -0
  72. package/dist/esm/core/middleware/interfaces.js +89 -0
  73. package/dist/esm/core/middleware/interfaces.js.map +1 -0
  74. package/dist/esm/core/middleware/revenium-client.js +37 -0
  75. package/dist/esm/core/middleware/revenium-client.js.map +1 -0
  76. package/dist/esm/core/middleware/streaming-wrapper.js +76 -0
  77. package/dist/esm/core/middleware/streaming-wrapper.js.map +1 -0
  78. package/dist/esm/core/providers/detector.js +34 -0
  79. package/dist/esm/core/providers/detector.js.map +1 -0
  80. package/dist/esm/core/providers/index.js +9 -0
  81. package/dist/esm/core/providers/index.js.map +1 -0
  82. package/dist/esm/core/tracking/api-client.js +64 -0
  83. package/dist/esm/core/tracking/api-client.js.map +1 -0
  84. package/dist/esm/core/tracking/index.js +13 -0
  85. package/dist/esm/core/tracking/index.js.map +1 -0
  86. package/dist/esm/core/tracking/payload-builder.js +92 -0
  87. package/dist/esm/core/tracking/payload-builder.js.map +1 -0
  88. package/dist/esm/core/tracking/usage-tracker.js +79 -0
  89. package/dist/esm/core/tracking/usage-tracker.js.map +1 -0
  90. package/dist/esm/index.js +46 -39
  91. package/dist/esm/index.js.map +1 -1
  92. package/dist/esm/types/function-parameters.js +13 -0
  93. package/dist/esm/types/function-parameters.js.map +1 -0
  94. package/dist/esm/types/index.js +6 -2
  95. package/dist/esm/types/index.js.map +1 -1
  96. package/dist/esm/utils/constants.js +17 -0
  97. package/dist/esm/utils/constants.js.map +1 -0
  98. package/dist/esm/utils/error-handler.js +182 -0
  99. package/dist/esm/utils/error-handler.js.map +1 -0
  100. package/dist/esm/utils/metadata-builder.js +183 -0
  101. package/dist/esm/utils/metadata-builder.js.map +1 -0
  102. package/dist/esm/utils/stop-reason-mapper.js +69 -0
  103. package/dist/esm/utils/stop-reason-mapper.js.map +1 -0
  104. package/dist/esm/utils/transaction-id.js +16 -0
  105. package/dist/esm/utils/transaction-id.js.map +1 -0
  106. package/dist/esm/utils/url-builder.js +53 -0
  107. package/dist/esm/utils/url-builder.js.map +1 -0
  108. package/dist/types/constants/models.d.ts +39 -0
  109. package/dist/types/constants/models.d.ts.map +1 -0
  110. package/dist/types/core/client/index.d.ts +5 -0
  111. package/dist/types/core/client/index.d.ts.map +1 -0
  112. package/dist/types/core/client/manager.d.ts +44 -0
  113. package/dist/types/core/client/manager.d.ts.map +1 -0
  114. package/dist/types/core/config/index.d.ts +10 -0
  115. package/dist/types/core/config/index.d.ts.map +1 -0
  116. package/dist/types/core/config/loader.d.ts +13 -0
  117. package/dist/types/core/config/loader.d.ts.map +1 -0
  118. package/dist/types/core/config/manager.d.ts +28 -0
  119. package/dist/types/core/config/manager.d.ts.map +1 -0
  120. package/dist/types/core/config/validator.d.ts +12 -0
  121. package/dist/types/core/config/validator.d.ts.map +1 -0
  122. package/dist/types/core/middleware/index.d.ts +7 -0
  123. package/dist/types/core/middleware/index.d.ts.map +1 -0
  124. package/dist/types/core/middleware/interfaces.d.ts +35 -0
  125. package/dist/types/core/middleware/interfaces.d.ts.map +1 -0
  126. package/dist/types/core/middleware/revenium-client.d.ts +25 -0
  127. package/dist/types/core/middleware/revenium-client.d.ts.map +1 -0
  128. package/dist/types/core/middleware/streaming-wrapper.d.ts +21 -0
  129. package/dist/types/core/middleware/streaming-wrapper.d.ts.map +1 -0
  130. package/dist/types/core/providers/detector.d.ts +24 -0
  131. package/dist/types/core/providers/detector.d.ts.map +1 -0
  132. package/dist/types/core/providers/index.d.ts +8 -0
  133. package/dist/types/core/providers/index.d.ts.map +1 -0
  134. package/dist/types/core/tracking/api-client.d.ts +17 -0
  135. package/dist/types/core/tracking/api-client.d.ts.map +1 -0
  136. package/dist/types/core/tracking/index.d.ts +11 -0
  137. package/dist/types/core/tracking/index.d.ts.map +1 -0
  138. package/dist/types/core/tracking/payload-builder.d.ts +24 -0
  139. package/dist/types/core/tracking/payload-builder.d.ts.map +1 -0
  140. package/dist/types/core/tracking/usage-tracker.d.ts +30 -0
  141. package/dist/types/core/tracking/usage-tracker.d.ts.map +1 -0
  142. package/dist/types/index.d.ts +56 -27
  143. package/dist/types/index.d.ts.map +1 -1
  144. package/dist/types/types/function-parameters.d.ts +185 -0
  145. package/dist/types/types/function-parameters.d.ts.map +1 -0
  146. package/dist/types/types/index.d.ts +108 -129
  147. package/dist/types/types/index.d.ts.map +1 -1
  148. package/dist/types/utils/constants.d.ts +9 -0
  149. package/dist/types/utils/constants.d.ts.map +1 -0
  150. package/dist/types/utils/error-handler.d.ts +95 -0
  151. package/dist/types/utils/error-handler.d.ts.map +1 -0
  152. package/dist/types/utils/metadata-builder.d.ts +65 -0
  153. package/dist/types/utils/metadata-builder.d.ts.map +1 -0
  154. package/dist/types/utils/stop-reason-mapper.d.ts +29 -0
  155. package/dist/types/utils/stop-reason-mapper.d.ts.map +1 -0
  156. package/dist/types/utils/transaction-id.d.ts +14 -0
  157. package/dist/types/utils/transaction-id.d.ts.map +1 -0
  158. package/dist/types/utils/url-builder.d.ts +22 -0
  159. package/dist/types/utils/url-builder.d.ts.map +1 -0
  160. package/examples/README.md +124 -220
  161. package/examples/advanced.ts +123 -0
  162. package/examples/basic.ts +32 -37
  163. package/examples/getting_started.ts +26 -49
  164. package/examples/metadata.ts +51 -48
  165. package/examples/stream.ts +53 -0
  166. package/package.json +9 -10
  167. package/dist/cjs/constants.js +0 -70
  168. package/dist/cjs/constants.js.map +0 -1
  169. package/dist/cjs/core/config/perplexity-config.js +0 -45
  170. package/dist/cjs/core/config/perplexity-config.js.map +0 -1
  171. package/dist/cjs/core/config/revenium-config.js +0 -80
  172. package/dist/cjs/core/config/revenium-config.js.map +0 -1
  173. package/dist/cjs/core/tracking/metering.js +0 -211
  174. package/dist/cjs/core/tracking/metering.js.map +0 -1
  175. package/dist/cjs/core/wrapper/perplexity-client.js +0 -187
  176. package/dist/cjs/core/wrapper/perplexity-client.js.map +0 -1
  177. package/dist/cjs/utils/logger.js +0 -23
  178. package/dist/cjs/utils/logger.js.map +0 -1
  179. package/dist/esm/constants.js +0 -67
  180. package/dist/esm/constants.js.map +0 -1
  181. package/dist/esm/core/config/perplexity-config.js +0 -40
  182. package/dist/esm/core/config/perplexity-config.js.map +0 -1
  183. package/dist/esm/core/config/revenium-config.js +0 -72
  184. package/dist/esm/core/config/revenium-config.js.map +0 -1
  185. package/dist/esm/core/tracking/metering.js +0 -206
  186. package/dist/esm/core/tracking/metering.js.map +0 -1
  187. package/dist/esm/core/wrapper/perplexity-client.js +0 -180
  188. package/dist/esm/core/wrapper/perplexity-client.js.map +0 -1
  189. package/dist/esm/utils/logger.js +0 -20
  190. package/dist/esm/utils/logger.js.map +0 -1
  191. package/dist/types/constants.d.ts +0 -67
  192. package/dist/types/constants.d.ts.map +0 -1
  193. package/dist/types/core/config/perplexity-config.d.ts +0 -24
  194. package/dist/types/core/config/perplexity-config.d.ts.map +0 -1
  195. package/dist/types/core/config/revenium-config.d.ts +0 -37
  196. package/dist/types/core/config/revenium-config.d.ts.map +0 -1
  197. package/dist/types/core/tracking/metering.d.ts +0 -31
  198. package/dist/types/core/tracking/metering.d.ts.map +0 -1
  199. package/dist/types/core/wrapper/perplexity-client.d.ts +0 -32
  200. package/dist/types/core/wrapper/perplexity-client.d.ts.map +0 -1
  201. package/dist/types/utils/logger.d.ts +0 -10
  202. package/dist/types/utils/logger.d.ts.map +0 -1
  203. package/examples/advanced-features.ts +0 -148
  204. package/examples/chat.ts +0 -73
  205. package/examples/streaming.ts +0 -50
@@ -1,206 +0,0 @@
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
- import { PERPLEXITY_PATTERNS, MIDDLEWARE_INFO } from "../../constants";
8
- /**
9
- * Generate a unique transaction ID
10
- */
11
- export function generateTransactionId() {
12
- return `txn_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
13
- }
14
- /**
15
- * Format timestamp to ISO string
16
- */
17
- function formatTimestamp(date) {
18
- return date.toISOString();
19
- }
20
- /**
21
- * Calculate duration in milliseconds
22
- */
23
- function calculateDuration(startTime, endTime) {
24
- return endTime.getTime() - startTime.getTime();
25
- }
26
- /**
27
- * Map Perplexity finish_reason to Revenium stopReason enum
28
- */
29
- function mapStopReason(finishReason) {
30
- if (!finishReason) {
31
- return "END";
32
- }
33
- const mapped = PERPLEXITY_PATTERNS.REVENIUM_STOP_REASON_MAP[finishReason];
34
- if (!mapped) {
35
- logger.info(`Unknown finish_reason '${finishReason}', defaulting to 'END'`);
36
- return "END";
37
- }
38
- return mapped;
39
- }
40
- /**
41
- * Sanitize metering data for debug logging by redacting sensitive fields
42
- *
43
- * SECURITY: Prevents exposure of PII and credentials in debug logs.
44
- * Redacts: subscriber.id, subscriber.email, subscriber.credential.value,
45
- * organizationId, subscriptionId, productId, traceId
46
- *
47
- * Per security best practices, debug logs should never contain:
48
- * - Personally Identifiable Information (PII)
49
- * - API keys or credentials
50
- * - Business-sensitive identifiers
51
- */
52
- function sanitizeMeteringData(data) {
53
- return {
54
- // Keep useful debugging info
55
- stopReason: data.stopReason,
56
- costType: data.costType,
57
- isStreamed: data.isStreamed,
58
- taskType: data.taskType,
59
- agent: data.agent,
60
- operationType: data.operationType,
61
- inputTokenCount: data.inputTokenCount,
62
- outputTokenCount: data.outputTokenCount,
63
- reasoningTokenCount: data.reasoningTokenCount,
64
- cacheCreationTokenCount: data.cacheCreationTokenCount,
65
- cacheReadTokenCount: data.cacheReadTokenCount,
66
- totalTokenCount: data.totalTokenCount,
67
- model: data.model,
68
- requestDuration: data.requestDuration,
69
- provider: data.provider,
70
- timeToFirstToken: data.timeToFirstToken,
71
- middlewareSource: data.middlewareSource,
72
- // Redact PII and sensitive identifiers
73
- organizationId: data.organizationId ? "[REDACTED]" : undefined,
74
- productId: data.productId ? "[REDACTED]" : undefined,
75
- subscriptionId: data.subscriptionId ? "[REDACTED]" : undefined,
76
- transactionId: data.transactionId ? "[REDACTED]" : undefined,
77
- traceId: data.traceId ? "[REDACTED]" : undefined,
78
- // Redact subscriber PII and credentials
79
- subscriber: data.subscriber
80
- ? {
81
- id: "[REDACTED]",
82
- email: "[REDACTED]",
83
- credential: data.subscriber.credential
84
- ? {
85
- name: data.subscriber.credential.name,
86
- value: "[REDACTED]",
87
- }
88
- : undefined,
89
- }
90
- : undefined,
91
- // Keep timestamps (not sensitive)
92
- requestTime: data.requestTime,
93
- responseTime: data.responseTime,
94
- completionStartTime: data.completionStartTime,
95
- // Redact quality score if present (could be business-sensitive)
96
- responseQualityScore: data.responseQualityScore !== undefined ? "[REDACTED]" : undefined,
97
- };
98
- }
99
- /**
100
- * Build metering data from request information
101
- */
102
- export function buildMeteringData(params) {
103
- const { model, startTime, endTime, inputTokens, outputTokens, totalTokens, reasoningTokens = 0, cachedTokens = 0, transactionId, isStreamed, stopReason, usageMetadata = {}, } = params;
104
- const config = getReveniumConfig();
105
- const agent = "perplexity";
106
- const costType = "TOKEN";
107
- const operationType = "CHAT";
108
- // Build subscriber information
109
- const subscriberId = usageMetadata.subscriber?.id ||
110
- usageMetadata.subscriberId ||
111
- `user-${generateTransactionId()}`;
112
- const subscriberEmail = usageMetadata.subscriber?.email ||
113
- usageMetadata.subscriberEmail ||
114
- `user@${agent}.ai`;
115
- const subscriberCredential = usageMetadata.subscriber?.credential ||
116
- (usageMetadata.subscriberCredentialName &&
117
- usageMetadata.subscriberCredential
118
- ? {
119
- name: usageMetadata.subscriberCredentialName,
120
- value: usageMetadata.subscriberCredential,
121
- }
122
- : {
123
- name: "default",
124
- value: "default-credential",
125
- });
126
- const subscriber = {
127
- id: subscriberId,
128
- email: subscriberEmail,
129
- credential: subscriberCredential,
130
- };
131
- // Build the payload in the exact order expected by Revenium API v2
132
- const payload = {
133
- stopReason: mapStopReason(stopReason), // Map finish_reason to Revenium enum
134
- costType: "AI", // Fixed value as per Google middleware
135
- isStreamed,
136
- taskType: usageMetadata.taskType || "AI", // Allow override from metadata
137
- agent: usageMetadata.agent || agent,
138
- operationType: usageMetadata.operationType || operationType,
139
- inputTokenCount: usageMetadata.inputTokenCount ?? inputTokens,
140
- outputTokenCount: usageMetadata.outputTokenCount ?? outputTokens,
141
- reasoningTokenCount: usageMetadata.reasoningTokenCount ?? reasoningTokens,
142
- cacheCreationTokenCount: usageMetadata.cacheCreationTokenCount ?? cachedTokens,
143
- cacheReadTokenCount: usageMetadata.cacheReadTokenCount ?? 0,
144
- totalTokenCount: usageMetadata.totalTokenCount ?? totalTokens,
145
- organizationId: usageMetadata.organizationId || "my-customers-name",
146
- productId: usageMetadata.productId || "free-trial",
147
- subscriber,
148
- model,
149
- transactionId: usageMetadata.transactionId || transactionId,
150
- responseTime: usageMetadata.responseTime || formatTimestamp(endTime),
151
- requestDuration: calculateDuration(startTime, endTime),
152
- provider: agent,
153
- requestTime: usageMetadata.requestTime || formatTimestamp(startTime),
154
- completionStartTime: usageMetadata.completionStartTime || formatTimestamp(endTime),
155
- timeToFirstToken: usageMetadata.timeToFirstToken || 0,
156
- middlewareSource: MIDDLEWARE_INFO.SOURCE,
157
- };
158
- // Add optional fields only if provided
159
- if (usageMetadata.traceId) {
160
- payload.traceId = usageMetadata.traceId;
161
- }
162
- if (usageMetadata.subscriptionId) {
163
- payload.subscriptionId = usageMetadata.subscriptionId;
164
- }
165
- if (usageMetadata.responseQualityScore !== undefined) {
166
- payload.responseQualityScore = usageMetadata.responseQualityScore;
167
- }
168
- return payload;
169
- }
170
- /**
171
- * Send metering data to Revenium
172
- */
173
- export async function sendMeteringData(meteringData) {
174
- if (!isReveniumEnabled()) {
175
- logger.debug("Revenium metering is disabled, skipping metering data");
176
- return;
177
- }
178
- const config = getReveniumConfig();
179
- if (!config) {
180
- logger.warn("Revenium configuration not initialized");
181
- return;
182
- }
183
- try {
184
- const url = `${config.meteringBaseUrl}/meter/v2/ai/completions`;
185
- logger.debug("Sending metering data to Revenium (sensitive fields redacted):", JSON.stringify(sanitizeMeteringData(meteringData), null, 2));
186
- const response = await fetch(url, {
187
- method: "POST",
188
- headers: {
189
- "Content-Type": "application/json",
190
- "x-api-key": config.meteringApiKey,
191
- accept: "application/json",
192
- },
193
- body: JSON.stringify(meteringData),
194
- });
195
- if (!response.ok) {
196
- const errorData = await response.text();
197
- logger.error(`Metering API request failed with status ${response.status}: ${errorData}`);
198
- return;
199
- }
200
- logger.info("Metering data sent successfully to Revenium");
201
- }
202
- catch (error) {
203
- logger.error("Error sending metering data:", error.message);
204
- }
205
- }
206
- //# sourceMappingURL=metering.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metering.js","sourceRoot":"","sources":["../../../../src/core/tracking/metering.ts"],"names":[],"mappings":"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"}
@@ -1,180 +0,0 @@
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
- let firstChunkTime = null;
135
- let timeToFirstToken = 0;
136
- try {
137
- for await (const chunk of stream) {
138
- // Capture time of first chunk
139
- if (!firstChunkTime) {
140
- firstChunkTime = new Date();
141
- timeToFirstToken = firstChunkTime.getTime() - startTime.getTime();
142
- }
143
- lastChunk = chunk;
144
- // Track usage if available in chunk
145
- if (chunk.usage) {
146
- inputTokens = chunk.usage.prompt_tokens || 0;
147
- outputTokens = chunk.usage.completion_tokens || 0;
148
- totalTokens = chunk.usage.total_tokens || 0;
149
- }
150
- yield chunk;
151
- }
152
- // Send metering data when stream completes
153
- const endTime = new Date();
154
- const finishReason = lastChunk?.choices?.[0]?.finish_reason || "END";
155
- const meteringData = buildMeteringData({
156
- model,
157
- startTime,
158
- endTime,
159
- inputTokens,
160
- outputTokens,
161
- totalTokens,
162
- transactionId,
163
- isStreamed: true,
164
- stopReason: finishReason,
165
- usageMetadata: {
166
- ...usageMetadata,
167
- timeToFirstToken,
168
- },
169
- });
170
- // Send metering data asynchronously (don't wait)
171
- sendMeteringData(meteringData).catch((error) => {
172
- logger.error("Failed to send metering data:", error);
173
- });
174
- }
175
- catch (error) {
176
- logger.error("Error in stream processing:", error.message);
177
- throw error;
178
- }
179
- }
180
- //# sourceMappingURL=perplexity-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"perplexity-client.js","sourceRoot":"","sources":["../../../../src/core/wrapper/perplexity-client.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,67 +0,0 @@
1
- /**
2
- * Configuration constants for Revenium Perplexity middleware
3
- * Centralizes all magic numbers and default values
4
- */
5
- /**
6
- * Middleware identification
7
- *
8
- * Per Revenium API spec (https://revenium.readme.io/reference/meter_ai_completion):
9
- * "middlewareSource: Identifier of the Revenium middleware package or SDK that
10
- * captured and submitted this AI completion metadata. This field is AUTOMATICALLY
11
- * SET by Revenium's middleware packages (e.g., 'revenium-openai-python',
12
- * 'revenium-anthropic-node')."
13
- */
14
- export declare const MIDDLEWARE_INFO: {
15
- /** Package name */
16
- readonly NAME: "@revenium/perplexity";
17
- /** Package version */
18
- readonly VERSION: "2.0.4";
19
- /** Full middleware source identifier for API tracking */
20
- readonly SOURCE: "@revenium/perplexity-2.0.4";
21
- };
22
- /**
23
- * Perplexity model patterns and API response mappings
24
- *
25
- * Per Revenium API spec (https://revenium.readme.io/reference/meter_ai_completion):
26
- * stopReason enum: "END", "END_SEQUENCE", "TIMEOUT", "TOKEN_LIMIT",
27
- * "COST_LIMIT", "COMPLETION_LIMIT", "ERROR", "CANCELLED"
28
- *
29
- * We map Perplexity's finish_reason values to these Revenium enums.
30
- * Only provider-reported values are mapped; middleware-level values
31
- * (TIMEOUT, COST_LIMIT, etc.) are not applicable to provider responses.
32
- */
33
- export declare const PERPLEXITY_PATTERNS: {
34
- /** Known Perplexity/OpenAI finish reasons */
35
- readonly FINISH_REASONS: {
36
- readonly STOP: "stop";
37
- readonly LENGTH: "length";
38
- readonly TOOL_CALLS: "tool_calls";
39
- readonly CONTENT_FILTER: "content_filter";
40
- readonly FUNCTION_CALL: "function_call";
41
- };
42
- /** Revenium stop reason mappings from Perplexity finish_reason to Revenium enum */
43
- readonly REVENIUM_STOP_REASON_MAP: {
44
- readonly stop: "END";
45
- readonly length: "TOKEN_LIMIT";
46
- readonly tool_calls: "END";
47
- readonly content_filter: "END";
48
- readonly function_call: "END";
49
- };
50
- };
51
- /**
52
- * Default configuration values
53
- */
54
- export declare const DEFAULT_CONFIG: {
55
- /** Default Revenium API base URL */
56
- readonly REVENIUM_BASE_URL: "https://api.revenium.ai";
57
- /** Default Perplexity API base URL */
58
- readonly PERPLEXITY_BASE_URL: "https://api.perplexity.ai";
59
- };
60
- /**
61
- * API endpoints
62
- */
63
- export declare const API_ENDPOINTS: {
64
- /** Revenium AI completions endpoint */
65
- readonly AI_COMPLETIONS: "/meter/v2/ai/completions";
66
- };
67
- //# sourceMappingURL=constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe;IAC1B,mBAAmB;;IAEnB,sBAAsB;;IAEtB,yDAAyD;;CAEjD,CAAC;AAEX;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB;IAC9B,6CAA6C;;;;;;;;IAS7C,mFAAmF;;;;;;;;CAQ3E,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB,oCAAoC;;IAGpC,sCAAsC;;CAE9B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,aAAa;IACxB,uCAAuC;;CAE/B,CAAC"}
@@ -1,24 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,37 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,31 +0,0 @@
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
@@ -1 +0,0 @@
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;AAG/D;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAsGD;;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,CA+Ff;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
@@ -1,32 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Simple logger utility
3
- */
4
- export declare const logger: {
5
- info: (...args: any[]) => void;
6
- warn: (...args: any[]) => void;
7
- error: (...args: any[]) => void;
8
- debug: (...args: any[]) => void;
9
- };
10
- //# sourceMappingURL=logger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,MAAM;oBACD,GAAG,EAAE;oBAGL,GAAG,EAAE;qBAGJ,GAAG,EAAE;qBAGL,GAAG,EAAE;CAKvB,CAAC"}