@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
@@ -1,80 +0,0 @@
1
- "use strict";
2
- /**
3
- * Revenium Configuration Module
4
- * Manages Revenium metering configuration and initialization
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.initializeReveniumFromEnv = initializeReveniumFromEnv;
8
- exports.initializeRevenium = initializeRevenium;
9
- exports.getReveniumConfig = getReveniumConfig;
10
- exports.isReveniumEnabled = isReveniumEnabled;
11
- exports.disableRevenium = disableRevenium;
12
- exports.enableRevenium = enableRevenium;
13
- const logger_1 = require("../../utils/logger");
14
- let reveniumConfig = null;
15
- /**
16
- * Initialize Revenium configuration from environment variables
17
- */
18
- function initializeReveniumFromEnv() {
19
- const meteringApiKey = process.env.REVENIUM_METERING_API_KEY?.trim().replace(/^["']|["']$/g, "");
20
- const meteringBaseUrl = process.env.REVENIUM_METERING_BASE_URL?.trim().replace(/^["']|["']$/g, "");
21
- if (!meteringApiKey || !meteringBaseUrl) {
22
- logger_1.logger.warn("Revenium metering disabled: Missing REVENIUM_METERING_API_KEY or REVENIUM_METERING_BASE_URL");
23
- reveniumConfig = {
24
- meteringApiKey: "",
25
- meteringBaseUrl: "",
26
- enabled: false,
27
- };
28
- return reveniumConfig;
29
- }
30
- reveniumConfig = {
31
- meteringApiKey,
32
- meteringBaseUrl,
33
- enabled: true,
34
- };
35
- logger_1.logger.info("Revenium configuration initialized successfully");
36
- logger_1.logger.debug(`Metering Base URL: ${meteringBaseUrl}`);
37
- return reveniumConfig;
38
- }
39
- /**
40
- * Initialize Revenium configuration with custom values
41
- */
42
- function initializeRevenium(config) {
43
- reveniumConfig = {
44
- ...config,
45
- enabled: true,
46
- };
47
- logger_1.logger.info("Revenium configuration initialized with custom config");
48
- return reveniumConfig;
49
- }
50
- /**
51
- * Get current Revenium configuration
52
- */
53
- function getReveniumConfig() {
54
- return reveniumConfig;
55
- }
56
- /**
57
- * Check if Revenium is enabled
58
- */
59
- function isReveniumEnabled() {
60
- return reveniumConfig?.enabled ?? false;
61
- }
62
- /**
63
- * Disable Revenium metering
64
- */
65
- function disableRevenium() {
66
- if (reveniumConfig) {
67
- reveniumConfig.enabled = false;
68
- logger_1.logger.info("Revenium metering disabled");
69
- }
70
- }
71
- /**
72
- * Enable Revenium metering
73
- */
74
- function enableRevenium() {
75
- if (reveniumConfig) {
76
- reveniumConfig.enabled = true;
77
- logger_1.logger.info("Revenium metering enabled");
78
- }
79
- }
80
- //# sourceMappingURL=revenium-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"revenium-config.js","sourceRoot":"","sources":["../../../../src/core/config/revenium-config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAeH,8DA6BC;AAKD,gDAWC;AAKD,8CAEC;AAKD,8CAEC;AAKD,0CAKC;AAKD,wCAKC;AA5FD,+CAA4C;AAQ5C,IAAI,cAAc,GAA0B,IAAI,CAAC;AAEjD;;GAEG;AACH,SAAgB,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,eAAM,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,eAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAC/D,eAAM,CAAC,KAAK,CAAC,sBAAsB,eAAe,EAAE,CAAC,CAAC;IACtD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,MAGlC;IACC,cAAc,GAAG;QACf,GAAG,MAAM;QACT,OAAO,EAAE,IAAI;KACd,CAAC;IAEF,eAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IACrE,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,cAAc,EAAE,OAAO,IAAI,KAAK,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe;IAC7B,IAAI,cAAc,EAAE,CAAC;QACnB,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC;QAC/B,eAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc;IAC5B,IAAI,cAAc,EAAE,CAAC;QACnB,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAC9B,eAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC"}
@@ -1,211 +0,0 @@
1
- "use strict";
2
- /**
3
- * Revenium Metering Module
4
- * Handles tracking and sending metering data to Revenium
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.generateTransactionId = generateTransactionId;
8
- exports.buildMeteringData = buildMeteringData;
9
- exports.sendMeteringData = sendMeteringData;
10
- const revenium_config_1 = require("../config/revenium-config");
11
- const logger_1 = require("../../utils/logger");
12
- const constants_1 = require("../../constants");
13
- /**
14
- * Generate a unique transaction ID
15
- */
16
- function generateTransactionId() {
17
- return `txn_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
18
- }
19
- /**
20
- * Format timestamp to ISO string
21
- */
22
- function formatTimestamp(date) {
23
- return date.toISOString();
24
- }
25
- /**
26
- * Calculate duration in milliseconds
27
- */
28
- function calculateDuration(startTime, endTime) {
29
- return endTime.getTime() - startTime.getTime();
30
- }
31
- /**
32
- * Map Perplexity finish_reason to Revenium stopReason enum
33
- */
34
- function mapStopReason(finishReason) {
35
- if (!finishReason) {
36
- return "END";
37
- }
38
- const mapped = constants_1.PERPLEXITY_PATTERNS.REVENIUM_STOP_REASON_MAP[finishReason];
39
- if (!mapped) {
40
- logger_1.logger.info(`Unknown finish_reason '${finishReason}', defaulting to 'END'`);
41
- return "END";
42
- }
43
- return mapped;
44
- }
45
- /**
46
- * Sanitize metering data for debug logging by redacting sensitive fields
47
- *
48
- * SECURITY: Prevents exposure of PII and credentials in debug logs.
49
- * Redacts: subscriber.id, subscriber.email, subscriber.credential.value,
50
- * organizationId, subscriptionId, productId, traceId
51
- *
52
- * Per security best practices, debug logs should never contain:
53
- * - Personally Identifiable Information (PII)
54
- * - API keys or credentials
55
- * - Business-sensitive identifiers
56
- */
57
- function sanitizeMeteringData(data) {
58
- return {
59
- // Keep useful debugging info
60
- stopReason: data.stopReason,
61
- costType: data.costType,
62
- isStreamed: data.isStreamed,
63
- taskType: data.taskType,
64
- agent: data.agent,
65
- operationType: data.operationType,
66
- inputTokenCount: data.inputTokenCount,
67
- outputTokenCount: data.outputTokenCount,
68
- reasoningTokenCount: data.reasoningTokenCount,
69
- cacheCreationTokenCount: data.cacheCreationTokenCount,
70
- cacheReadTokenCount: data.cacheReadTokenCount,
71
- totalTokenCount: data.totalTokenCount,
72
- model: data.model,
73
- requestDuration: data.requestDuration,
74
- provider: data.provider,
75
- timeToFirstToken: data.timeToFirstToken,
76
- middlewareSource: data.middlewareSource,
77
- // Redact PII and sensitive identifiers
78
- organizationId: data.organizationId ? "[REDACTED]" : undefined,
79
- productId: data.productId ? "[REDACTED]" : undefined,
80
- subscriptionId: data.subscriptionId ? "[REDACTED]" : undefined,
81
- transactionId: data.transactionId ? "[REDACTED]" : undefined,
82
- traceId: data.traceId ? "[REDACTED]" : undefined,
83
- // Redact subscriber PII and credentials
84
- subscriber: data.subscriber
85
- ? {
86
- id: "[REDACTED]",
87
- email: "[REDACTED]",
88
- credential: data.subscriber.credential
89
- ? {
90
- name: data.subscriber.credential.name,
91
- value: "[REDACTED]",
92
- }
93
- : undefined,
94
- }
95
- : undefined,
96
- // Keep timestamps (not sensitive)
97
- requestTime: data.requestTime,
98
- responseTime: data.responseTime,
99
- completionStartTime: data.completionStartTime,
100
- // Redact quality score if present (could be business-sensitive)
101
- responseQualityScore: data.responseQualityScore !== undefined ? "[REDACTED]" : undefined,
102
- };
103
- }
104
- /**
105
- * Build metering data from request information
106
- */
107
- function buildMeteringData(params) {
108
- const { model, startTime, endTime, inputTokens, outputTokens, totalTokens, reasoningTokens = 0, cachedTokens = 0, transactionId, isStreamed, stopReason, usageMetadata = {}, } = params;
109
- const config = (0, revenium_config_1.getReveniumConfig)();
110
- const agent = "perplexity";
111
- const costType = "TOKEN";
112
- const operationType = "CHAT";
113
- // Build subscriber information
114
- const subscriberId = usageMetadata.subscriber?.id ||
115
- usageMetadata.subscriberId ||
116
- `user-${generateTransactionId()}`;
117
- const subscriberEmail = usageMetadata.subscriber?.email ||
118
- usageMetadata.subscriberEmail ||
119
- `user@${agent}.ai`;
120
- const subscriberCredential = usageMetadata.subscriber?.credential ||
121
- (usageMetadata.subscriberCredentialName &&
122
- usageMetadata.subscriberCredential
123
- ? {
124
- name: usageMetadata.subscriberCredentialName,
125
- value: usageMetadata.subscriberCredential,
126
- }
127
- : {
128
- name: "default",
129
- value: "default-credential",
130
- });
131
- const subscriber = {
132
- id: subscriberId,
133
- email: subscriberEmail,
134
- credential: subscriberCredential,
135
- };
136
- // Build the payload in the exact order expected by Revenium API v2
137
- const payload = {
138
- stopReason: mapStopReason(stopReason), // Map finish_reason to Revenium enum
139
- costType: "AI", // Fixed value as per Google middleware
140
- isStreamed,
141
- taskType: usageMetadata.taskType || "AI", // Allow override from metadata
142
- agent: usageMetadata.agent || agent,
143
- operationType: usageMetadata.operationType || operationType,
144
- inputTokenCount: usageMetadata.inputTokenCount ?? inputTokens,
145
- outputTokenCount: usageMetadata.outputTokenCount ?? outputTokens,
146
- reasoningTokenCount: usageMetadata.reasoningTokenCount ?? reasoningTokens,
147
- cacheCreationTokenCount: usageMetadata.cacheCreationTokenCount ?? cachedTokens,
148
- cacheReadTokenCount: usageMetadata.cacheReadTokenCount ?? 0,
149
- totalTokenCount: usageMetadata.totalTokenCount ?? totalTokens,
150
- organizationId: usageMetadata.organizationId || "my-customers-name",
151
- productId: usageMetadata.productId || "free-trial",
152
- subscriber,
153
- model,
154
- transactionId: usageMetadata.transactionId || transactionId,
155
- responseTime: usageMetadata.responseTime || formatTimestamp(endTime),
156
- requestDuration: calculateDuration(startTime, endTime),
157
- provider: agent,
158
- requestTime: usageMetadata.requestTime || formatTimestamp(startTime),
159
- completionStartTime: usageMetadata.completionStartTime || formatTimestamp(endTime),
160
- timeToFirstToken: usageMetadata.timeToFirstToken || 0,
161
- middlewareSource: constants_1.MIDDLEWARE_INFO.SOURCE,
162
- };
163
- // Add optional fields only if provided
164
- if (usageMetadata.traceId) {
165
- payload.traceId = usageMetadata.traceId;
166
- }
167
- if (usageMetadata.subscriptionId) {
168
- payload.subscriptionId = usageMetadata.subscriptionId;
169
- }
170
- if (usageMetadata.responseQualityScore !== undefined) {
171
- payload.responseQualityScore = usageMetadata.responseQualityScore;
172
- }
173
- return payload;
174
- }
175
- /**
176
- * Send metering data to Revenium
177
- */
178
- async function sendMeteringData(meteringData) {
179
- if (!(0, revenium_config_1.isReveniumEnabled)()) {
180
- logger_1.logger.debug("Revenium metering is disabled, skipping metering data");
181
- return;
182
- }
183
- const config = (0, revenium_config_1.getReveniumConfig)();
184
- if (!config) {
185
- logger_1.logger.warn("Revenium configuration not initialized");
186
- return;
187
- }
188
- try {
189
- const url = `${config.meteringBaseUrl}/meter/v2/ai/completions`;
190
- logger_1.logger.debug("Sending metering data to Revenium (sensitive fields redacted):", JSON.stringify(sanitizeMeteringData(meteringData), null, 2));
191
- const response = await fetch(url, {
192
- method: "POST",
193
- headers: {
194
- "Content-Type": "application/json",
195
- "x-api-key": config.meteringApiKey,
196
- accept: "application/json",
197
- },
198
- body: JSON.stringify(meteringData),
199
- });
200
- if (!response.ok) {
201
- const errorData = await response.text();
202
- logger_1.logger.error(`Metering API request failed with status ${response.status}: ${errorData}`);
203
- return;
204
- }
205
- logger_1.logger.info("Metering data sent successfully to Revenium");
206
- }
207
- catch (error) {
208
- logger_1.logger.error("Error sending metering data:", error.message);
209
- }
210
- }
211
- //# sourceMappingURL=metering.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metering.js","sourceRoot":"","sources":["../../../../src/core/tracking/metering.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAaH,sDAEC;AAyGD,8CA4GC;AAKD,4CA4CC;AAnRD,+DAGmC;AACnC,+CAA4C;AAE5C,+CAAuE;AAEvE;;GAEG;AACH,SAAgB,qBAAqB;IACnC,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAU;IACjC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,SAAe,EAAE,OAAa;IACvD,OAAO,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,YAA2B;IAChD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GACV,+BAAmB,CAAC,wBAAwB,CAC1C,YAAyE,CAC1E,CAAC;IAEJ,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,eAAM,CAAC,IAAI,CAAC,0BAA0B,YAAY,wBAAwB,CAAC,CAAC;QAC5E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,oBAAoB,CAAC,IAAS;IACrC,OAAO;QACL,6BAA6B;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;QACrD,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QAEvC,uCAAuC;QACvC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QAC9D,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QACpD,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QAC9D,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QAC5D,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QAEhD,wCAAwC;QACxC,UAAU,EAAE,IAAI,CAAC,UAAU;YACzB,CAAC,CAAC;gBACE,EAAE,EAAE,YAAY;gBAChB,KAAK,EAAE,YAAY;gBACnB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU;oBACpC,CAAC,CAAC;wBACE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI;wBACrC,KAAK,EAAE,YAAY;qBACpB;oBACH,CAAC,CAAC,SAAS;aACd;YACH,CAAC,CAAC,SAAS;QAEb,kCAAkC;QAClC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAE7C,gEAAgE;QAChE,oBAAoB,EAClB,IAAI,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;KACrE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,MAajC;IACC,MAAM,EACJ,KAAK,EACL,SAAS,EACT,OAAO,EACP,WAAW,EACX,YAAY,EACZ,WAAW,EACX,eAAe,GAAG,CAAC,EACnB,YAAY,GAAG,CAAC,EAChB,aAAa,EACb,UAAU,EACV,UAAU,EACV,aAAa,GAAG,EAAE,GACnB,GAAG,MAAM,CAAC;IAEX,MAAM,MAAM,GAAG,IAAA,mCAAiB,GAAE,CAAC;IACnC,MAAM,KAAK,GAAG,YAAY,CAAC;IAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC;IACzB,MAAM,aAAa,GAAG,MAAM,CAAC;IAE7B,+BAA+B;IAC/B,MAAM,YAAY,GAChB,aAAa,CAAC,UAAU,EAAE,EAAE;QAC5B,aAAa,CAAC,YAAY;QAC1B,QAAQ,qBAAqB,EAAE,EAAE,CAAC;IAEpC,MAAM,eAAe,GACnB,aAAa,CAAC,UAAU,EAAE,KAAK;QAC/B,aAAa,CAAC,eAAe;QAC7B,QAAQ,KAAK,KAAK,CAAC;IAErB,MAAM,oBAAoB,GACxB,aAAa,CAAC,UAAU,EAAE,UAAU;QACpC,CAAC,aAAa,CAAC,wBAAwB;YACvC,aAAa,CAAC,oBAAoB;YAChC,CAAC,CAAC;gBACE,IAAI,EAAE,aAAa,CAAC,wBAAwB;gBAC5C,KAAK,EAAE,aAAa,CAAC,oBAAoB;aAC1C;YACH,CAAC,CAAC;gBACE,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,oBAAoB;aAC5B,CAAC,CAAC;IAET,MAAM,UAAU,GAAG;QACjB,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,eAAe;QACtB,UAAU,EAAE,oBAAoB;KACjC,CAAC;IAEF,mEAAmE;IACnE,MAAM,OAAO,GAAQ;QACnB,UAAU,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,qCAAqC;QAC5E,QAAQ,EAAE,IAAI,EAAE,uCAAuC;QACvD,UAAU;QACV,QAAQ,EAAE,aAAa,CAAC,QAAQ,IAAI,IAAI,EAAE,+BAA+B;QACzE,KAAK,EAAE,aAAa,CAAC,KAAK,IAAI,KAAK;QACnC,aAAa,EAAE,aAAa,CAAC,aAAa,IAAI,aAAa;QAC3D,eAAe,EAAE,aAAa,CAAC,eAAe,IAAI,WAAW;QAC7D,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,IAAI,YAAY;QAChE,mBAAmB,EAAE,aAAa,CAAC,mBAAmB,IAAI,eAAe;QACzE,uBAAuB,EACrB,aAAa,CAAC,uBAAuB,IAAI,YAAY;QACvD,mBAAmB,EAAE,aAAa,CAAC,mBAAmB,IAAI,CAAC;QAC3D,eAAe,EAAE,aAAa,CAAC,eAAe,IAAI,WAAW;QAC7D,cAAc,EAAE,aAAa,CAAC,cAAc,IAAI,mBAAmB;QACnE,SAAS,EAAE,aAAa,CAAC,SAAS,IAAI,YAAY;QAClD,UAAU;QACV,KAAK;QACL,aAAa,EAAE,aAAa,CAAC,aAAa,IAAI,aAAa;QAC3D,YAAY,EAAE,aAAa,CAAC,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC;QACpE,eAAe,EAAE,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC;QACtD,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,aAAa,CAAC,WAAW,IAAI,eAAe,CAAC,SAAS,CAAC;QACpE,mBAAmB,EACjB,aAAa,CAAC,mBAAmB,IAAI,eAAe,CAAC,OAAO,CAAC;QAC/D,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,IAAI,CAAC;QACrD,gBAAgB,EAAE,2BAAe,CAAC,MAAM;KACzC,CAAC;IAEF,uCAAuC;IACvC,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;IAC1C,CAAC;IAED,IAAI,aAAa,CAAC,cAAc,EAAE,CAAC;QACjC,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,cAAc,CAAC;IACxD,CAAC;IAED,IAAI,aAAa,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACrD,OAAO,CAAC,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC;IACpE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CACpC,YAA0B;IAE1B,IAAI,CAAC,IAAA,mCAAiB,GAAE,EAAE,CAAC;QACzB,eAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,mCAAiB,GAAE,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,eAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,eAAe,0BAA0B,CAAC;QAEhE,eAAM,CAAC,KAAK,CACV,gEAAgE,EAChE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAC5D,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,MAAM,CAAC,cAAc;gBAClC,MAAM,EAAE,kBAAkB;aAC3B;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;SACnC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,eAAM,CAAC,KAAK,CACV,2CAA2C,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAC3E,CAAC;YACF,OAAO;QACT,CAAC;QAED,eAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,eAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC"}
@@ -1,187 +0,0 @@
1
- "use strict";
2
- /**
3
- * Perplexity Client Wrapper
4
- * Wraps Perplexity API calls with Revenium metering
5
- */
6
- var __importDefault = (this && this.__importDefault) || function (mod) {
7
- return (mod && mod.__esModule) ? mod : { "default": mod };
8
- };
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.createChatCompletion = createChatCompletion;
11
- exports.createStreamingChatCompletion = createStreamingChatCompletion;
12
- const openai_1 = __importDefault(require("openai"));
13
- const perplexity_config_1 = require("../config/perplexity-config");
14
- const logger_1 = require("../../utils/logger");
15
- const metering_1 = require("../tracking/metering");
16
- let perplexityClient = null;
17
- /**
18
- * Get or create Perplexity client
19
- */
20
- function getClient() {
21
- if (!perplexityClient) {
22
- const config = (0, perplexity_config_1.getPerplexityConfig)();
23
- if (!config) {
24
- throw new Error("Perplexity configuration not initialized. Call initializePerplexityFromEnv() or initializePerplexity() first.");
25
- }
26
- perplexityClient = new openai_1.default({
27
- apiKey: config.apiKey,
28
- baseURL: config.baseUrl,
29
- });
30
- logger_1.logger.info("Perplexity client initialized successfully");
31
- }
32
- return perplexityClient;
33
- }
34
- /**
35
- * Create a chat completion
36
- */
37
- async function createChatCompletion(params) {
38
- const client = getClient();
39
- const transactionId = (0, metering_1.generateTransactionId)();
40
- const startTime = new Date();
41
- try {
42
- const { usageMetadata, ...requestParams } = params;
43
- logger_1.logger.info(`Creating chat completion with model: ${params.model}`);
44
- const response = (await client.chat.completions.create({
45
- model: requestParams.model,
46
- messages: requestParams.messages,
47
- max_tokens: requestParams.maxTokens,
48
- temperature: requestParams.temperature,
49
- top_p: requestParams.topP,
50
- presence_penalty: requestParams.presencePenalty,
51
- frequency_penalty: requestParams.frequencyPenalty,
52
- stream: false,
53
- }));
54
- const endTime = new Date();
55
- // Extract response data
56
- const content = response.choices[0]?.message?.content || "";
57
- const role = response.choices[0]?.message?.role || "assistant";
58
- const finishReason = response.choices[0]?.finish_reason || null;
59
- const usage = response.usage || {
60
- prompt_tokens: 0,
61
- completion_tokens: 0,
62
- total_tokens: 0,
63
- };
64
- // Build and send metering data
65
- const meteringData = (0, metering_1.buildMeteringData)({
66
- model: response.model,
67
- startTime,
68
- endTime,
69
- inputTokens: usage.prompt_tokens,
70
- outputTokens: usage.completion_tokens,
71
- totalTokens: usage.total_tokens,
72
- transactionId,
73
- isStreamed: false,
74
- stopReason: finishReason || "END",
75
- usageMetadata,
76
- });
77
- // Send metering data asynchronously (don't wait)
78
- (0, metering_1.sendMeteringData)(meteringData).catch((error) => {
79
- logger_1.logger.error("Failed to send metering data:", error);
80
- });
81
- return {
82
- content,
83
- role,
84
- finishReason,
85
- usage: {
86
- promptTokens: usage.prompt_tokens,
87
- completionTokens: usage.completion_tokens,
88
- totalTokens: usage.total_tokens,
89
- },
90
- model: response.model,
91
- transactionId,
92
- rawResponse: response,
93
- };
94
- }
95
- catch (error) {
96
- logger_1.logger.error("Error in chat completion:", error.message);
97
- throw error;
98
- }
99
- }
100
- /**
101
- * Create a streaming chat completion
102
- */
103
- async function createStreamingChatCompletion(params) {
104
- const client = getClient();
105
- const transactionId = (0, metering_1.generateTransactionId)();
106
- const startTime = new Date();
107
- try {
108
- const { usageMetadata, ...requestParams } = params;
109
- logger_1.logger.info(`Creating streaming chat completion with model: ${params.model}`);
110
- const stream = await client.chat.completions.create({
111
- model: requestParams.model,
112
- messages: requestParams.messages,
113
- max_tokens: requestParams.maxTokens,
114
- temperature: requestParams.temperature,
115
- top_p: requestParams.topP,
116
- presence_penalty: requestParams.presencePenalty,
117
- frequency_penalty: requestParams.frequencyPenalty,
118
- stream: true,
119
- });
120
- // Wrap the stream to track metering
121
- const wrappedStream = wrapStream(stream, transactionId, params.model, startTime, usageMetadata);
122
- return {
123
- stream: wrappedStream,
124
- transactionId,
125
- model: params.model,
126
- };
127
- }
128
- catch (error) {
129
- logger_1.logger.error("Error in streaming chat completion:", error.message);
130
- throw error;
131
- }
132
- }
133
- /**
134
- * Wrap stream to track metering data
135
- */
136
- async function* wrapStream(stream, transactionId, model, startTime, usageMetadata) {
137
- let lastChunk = null;
138
- let inputTokens = 0;
139
- let outputTokens = 0;
140
- let totalTokens = 0;
141
- let firstChunkTime = null;
142
- let timeToFirstToken = 0;
143
- try {
144
- for await (const chunk of stream) {
145
- // Capture time of first chunk
146
- if (!firstChunkTime) {
147
- firstChunkTime = new Date();
148
- timeToFirstToken = firstChunkTime.getTime() - startTime.getTime();
149
- }
150
- lastChunk = chunk;
151
- // Track usage if available in chunk
152
- if (chunk.usage) {
153
- inputTokens = chunk.usage.prompt_tokens || 0;
154
- outputTokens = chunk.usage.completion_tokens || 0;
155
- totalTokens = chunk.usage.total_tokens || 0;
156
- }
157
- yield chunk;
158
- }
159
- // Send metering data when stream completes
160
- const endTime = new Date();
161
- const finishReason = lastChunk?.choices?.[0]?.finish_reason || "END";
162
- const meteringData = (0, metering_1.buildMeteringData)({
163
- model,
164
- startTime,
165
- endTime,
166
- inputTokens,
167
- outputTokens,
168
- totalTokens,
169
- transactionId,
170
- isStreamed: true,
171
- stopReason: finishReason,
172
- usageMetadata: {
173
- ...usageMetadata,
174
- timeToFirstToken,
175
- },
176
- });
177
- // Send metering data asynchronously (don't wait)
178
- (0, metering_1.sendMeteringData)(meteringData).catch((error) => {
179
- logger_1.logger.error("Failed to send metering data:", error);
180
- });
181
- }
182
- catch (error) {
183
- logger_1.logger.error("Error in stream processing:", error.message);
184
- throw error;
185
- }
186
- }
187
- //# 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":";AAAA;;;GAGG;;;;;AA+CH,oDA8EC;AAKD,sEAkDC;AAlLD,oDAA4B;AAC5B,mEAAkE;AAClE,+CAA4C;AAC5C,mDAI8B;AAU9B,IAAI,gBAAgB,GAAkB,IAAI,CAAC;AAE3C;;GAEG;AACH,SAAS,SAAS;IAChB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,IAAA,uCAAmB,GAAE,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,+GAA+G,CAChH,CAAC;QACJ,CAAC;QAED,gBAAgB,GAAG,IAAI,gBAAM,CAAC;YAC5B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QAEH,eAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,oBAAoB,CAAC,MAS1C;IACC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,aAAa,GAAG,IAAA,gCAAqB,GAAE,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,GAAG,MAAM,CAAC;QAEnD,eAAM,CAAC,IAAI,CAAC,wCAAwC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAEpE,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACrD,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,QAAQ,EAAE,aAAa,CAAC,QAAQ;YAChC,UAAU,EAAE,aAAa,CAAC,SAAS;YACnC,WAAW,EAAE,aAAa,CAAC,WAAW;YACtC,KAAK,EAAE,aAAa,CAAC,IAAI;YACzB,gBAAgB,EAAE,aAAa,CAAC,eAAe;YAC/C,iBAAiB,EAAE,aAAa,CAAC,gBAAgB;YACjD,MAAM,EAAE,KAAK;SACd,CAAC,CAAuB,CAAC;QAE1B,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QAE3B,wBAAwB;QACxB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,IAAI,WAAW,CAAC;QAC/D,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,IAAI,IAAI,CAAC;QAChE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI;YAC9B,aAAa,EAAE,CAAC;YAChB,iBAAiB,EAAE,CAAC;YACpB,YAAY,EAAE,CAAC;SAChB,CAAC;QAEF,+BAA+B;QAC/B,MAAM,YAAY,GAAG,IAAA,4BAAiB,EAAC;YACrC,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,SAAS;YACT,OAAO;YACP,WAAW,EAAE,KAAK,CAAC,aAAa;YAChC,YAAY,EAAE,KAAK,CAAC,iBAAiB;YACrC,WAAW,EAAE,KAAK,CAAC,YAAY;YAC/B,aAAa;YACb,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,YAAY,IAAI,KAAK;YACjC,aAAa;SACd,CAAC,CAAC;QAEH,iDAAiD;QACjD,IAAA,2BAAgB,EAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7C,eAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,OAAO;YACP,IAAI;YACJ,YAAY;YACZ,KAAK,EAAE;gBACL,YAAY,EAAE,KAAK,CAAC,aAAa;gBACjC,gBAAgB,EAAE,KAAK,CAAC,iBAAiB;gBACzC,WAAW,EAAE,KAAK,CAAC,YAAY;aAChC;YACD,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,aAAa;YACb,WAAW,EAAE,QAAQ;SACtB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,eAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,6BAA6B,CAAC,MASnD;IACC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,aAAa,GAAG,IAAA,gCAAqB,GAAE,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,GAAG,MAAM,CAAC;QAEnD,eAAM,CAAC,IAAI,CACT,kDAAkD,MAAM,CAAC,KAAK,EAAE,CACjE,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAClD,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,QAAQ,EAAE,aAAa,CAAC,QAAQ;YAChC,UAAU,EAAE,aAAa,CAAC,SAAS;YACnC,WAAW,EAAE,aAAa,CAAC,WAAW;YACtC,KAAK,EAAE,aAAa,CAAC,IAAI;YACzB,gBAAgB,EAAE,aAAa,CAAC,eAAe;YAC/C,iBAAiB,EAAE,aAAa,CAAC,gBAAgB;YACjD,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QAEH,oCAAoC;QACpC,MAAM,aAAa,GAAG,UAAU,CAC9B,MAAa,EACb,aAAa,EACb,MAAM,CAAC,KAAK,EACZ,SAAS,EACT,aAAa,CACd,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,aAAa;YACb,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,eAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACnE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,SAAS,CAAC,CAAC,UAAU,CACxB,MAA0B,EAC1B,aAAqB,EACrB,KAAa,EACb,SAAe,EACf,aAA6B;IAE7B,IAAI,SAAS,GAAQ,IAAI,CAAC;IAC1B,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,cAAc,GAAgB,IAAI,CAAC;IACvC,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,8BAA8B;YAC9B,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;gBAC5B,gBAAgB,GAAG,cAAc,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;YACpE,CAAC;YAED,SAAS,GAAG,KAAK,CAAC;YAElB,oCAAoC;YACpC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;gBAC7C,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;gBAClD,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;YAC9C,CAAC;YAED,MAAM,KAA8B,CAAC;QACvC,CAAC;QAED,2CAA2C;QAC3C,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,IAAI,KAAK,CAAC;QAErE,MAAM,YAAY,GAAG,IAAA,4BAAiB,EAAC;YACrC,KAAK;YACL,SAAS;YACT,OAAO;YACP,WAAW;YACX,YAAY;YACZ,WAAW;YACX,aAAa;YACb,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,YAAY;YACxB,aAAa,EAAE;gBACb,GAAG,aAAa;gBAChB,gBAAgB;aACjB;SACF,CAAC,CAAC;QAEH,iDAAiD;QACjD,IAAA,2BAAgB,EAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7C,eAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,eAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -1,23 +0,0 @@
1
- "use strict";
2
- /**
3
- * Simple logger utility
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.logger = void 0;
7
- exports.logger = {
8
- info: (...args) => {
9
- console.log("[Revenium]", ...args);
10
- },
11
- warn: (...args) => {
12
- console.warn("[Revenium Warning]", ...args);
13
- },
14
- error: (...args) => {
15
- console.error("[Revenium Error]", ...args);
16
- },
17
- debug: (...args) => {
18
- if (process.env.DEBUG === "true") {
19
- console.log("[Revenium Debug]", ...args);
20
- }
21
- },
22
- };
23
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEU,QAAA,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 const MIDDLEWARE_INFO = {
15
- /** Package name */
16
- NAME: "@revenium/perplexity",
17
- /** Package version */
18
- VERSION: "2.0.4",
19
- /** Full middleware source identifier for API tracking */
20
- 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 const PERPLEXITY_PATTERNS = {
34
- /** Known Perplexity/OpenAI finish reasons */
35
- FINISH_REASONS: {
36
- STOP: "stop",
37
- LENGTH: "length",
38
- TOOL_CALLS: "tool_calls",
39
- CONTENT_FILTER: "content_filter",
40
- FUNCTION_CALL: "function_call",
41
- },
42
- /** Revenium stop reason mappings from Perplexity finish_reason to Revenium enum */
43
- REVENIUM_STOP_REASON_MAP: {
44
- stop: "END",
45
- length: "TOKEN_LIMIT",
46
- tool_calls: "END",
47
- content_filter: "END",
48
- function_call: "END",
49
- },
50
- };
51
- /**
52
- * Default configuration values
53
- */
54
- export const DEFAULT_CONFIG = {
55
- /** Default Revenium API base URL */
56
- REVENIUM_BASE_URL: "https://api.revenium.ai",
57
- /** Default Perplexity API base URL */
58
- PERPLEXITY_BASE_URL: "https://api.perplexity.ai",
59
- };
60
- /**
61
- * API endpoints
62
- */
63
- export const API_ENDPOINTS = {
64
- /** Revenium AI completions endpoint */
65
- AI_COMPLETIONS: "/meter/v2/ai/completions",
66
- };
67
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,mBAAmB;IACnB,IAAI,EAAE,sBAAsB;IAC5B,sBAAsB;IACtB,OAAO,EAAE,OAAO;IAChB,yDAAyD;IACzD,MAAM,EAAE,4BAA4B;CAC5B,CAAC;AAEX;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,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;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,oCAAoC;IACpC,iBAAiB,EAAE,yBAAyB;IAE5C,sCAAsC;IACtC,mBAAmB,EAAE,2BAA2B;CACxC,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,uCAAuC;IACvC,cAAc,EAAE,0BAA0B;CAClC,CAAC"}
@@ -1,40 +0,0 @@
1
- /**
2
- * Perplexity Configuration Module
3
- * Manages Perplexity API configuration
4
- */
5
- import { logger } from "../../utils/logger";
6
- let perplexityConfig = null;
7
- /**
8
- * Initialize Perplexity configuration from environment variables
9
- */
10
- export function initializePerplexityFromEnv() {
11
- const apiKey = process.env.PERPLEXITY_API_KEY;
12
- const baseUrl = process.env.PERPLEXITY_API_BASE_URL || "https://api.perplexity.ai";
13
- if (!apiKey) {
14
- throw new Error("PERPLEXITY_API_KEY environment variable is required but not set");
15
- }
16
- perplexityConfig = {
17
- apiKey,
18
- baseUrl,
19
- };
20
- logger.info("Perplexity configuration initialized successfully");
21
- return perplexityConfig;
22
- }
23
- /**
24
- * Initialize Perplexity configuration with custom values
25
- */
26
- export function initializePerplexity(config) {
27
- perplexityConfig = {
28
- apiKey: config.apiKey,
29
- baseUrl: config.baseUrl || "https://api.perplexity.ai",
30
- };
31
- logger.info("Perplexity configuration initialized with custom config");
32
- return perplexityConfig;
33
- }
34
- /**
35
- * Get current Perplexity configuration
36
- */
37
- export function getPerplexityConfig() {
38
- return perplexityConfig;
39
- }
40
- //# 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;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAO5C,IAAI,gBAAgB,GAA4B,IAAI,CAAC;AAErD;;GAEG;AACH,MAAM,UAAU,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,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAGpC;IACC,gBAAgB,GAAG;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,2BAA2B;KACvD,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}