@revenium/perplexity 2.1.1 → 2.1.2
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.
- package/.env.example +1 -1
- package/CHANGELOG.md +38 -15
- package/README.md +51 -0
- package/dist/cjs/core/tracking/tool-api-client.js +62 -0
- package/dist/cjs/core/tracking/tool-api-client.js.map +1 -0
- package/dist/cjs/core/tracking/tool-context.js +23 -0
- package/dist/cjs/core/tracking/tool-context.js.map +1 -0
- package/dist/cjs/core/tracking/tool-tracker.js +122 -0
- package/dist/cjs/core/tracking/tool-tracker.js.map +1 -0
- package/dist/cjs/index.js +12 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/index.js +1 -0
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/tool-metering.js +3 -0
- package/dist/cjs/types/tool-metering.js.map +1 -0
- package/dist/esm/core/tracking/tool-api-client.js +59 -0
- package/dist/esm/core/tracking/tool-api-client.js.map +1 -0
- package/dist/esm/core/tracking/tool-context.js +17 -0
- package/dist/esm/core/tracking/tool-context.js.map +1 -0
- package/dist/esm/core/tracking/tool-tracker.js +118 -0
- package/dist/esm/core/tracking/tool-tracker.js.map +1 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/types/tool-metering.js +2 -0
- package/dist/esm/types/tool-metering.js.map +1 -0
- package/dist/types/core/tracking/tool-api-client.d.ts +3 -0
- package/dist/types/core/tracking/tool-api-client.d.ts.map +1 -0
- package/dist/types/core/tracking/tool-context.d.ts +6 -0
- package/dist/types/core/tracking/tool-context.d.ts.map +1 -0
- package/dist/types/core/tracking/tool-tracker.d.ts +4 -0
- package/dist/types/core/tracking/tool-tracker.d.ts.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +1 -0
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/types/tool-metering.d.ts +47 -0
- package/dist/types/types/tool-metering.d.ts.map +1 -0
- package/package.json +11 -4
package/.env.example
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -5,30 +5,49 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [2.1.2] - 2026-02-19
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Tool metering support (meterTool, reportToolCall, setToolContext)
|
|
15
|
+
- outputFields feature for automatic result extraction
|
|
16
|
+
- Fetch timeout to sendToolEvent
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- Remove dead response.text() in sendToolEvent
|
|
21
|
+
|
|
22
|
+
## [2.1.1] - 2026-02-06
|
|
9
23
|
|
|
10
24
|
### Added
|
|
11
25
|
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
26
|
+
- Summary printer with human and JSON output formats
|
|
27
|
+
- Region detection from AWS, Azure, GCP environment variables
|
|
28
|
+
- Credential alias configuration support
|
|
29
|
+
- Trace name and trace type validation
|
|
30
|
+
- Retry number tracking
|
|
31
|
+
|
|
32
|
+
## [2.1.0] - 2026-01-21
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
|
|
36
|
+
- Updated credential sanitization patterns from 8 to 13 patterns
|
|
37
|
+
- Enhanced security with additional credential types:
|
|
38
|
+
- Anthropic API keys (sk-ant-\*)
|
|
20
39
|
- AWS access keys (AKIA\*)
|
|
21
40
|
- GitHub tokens (ghp*\*, ghs*\*)
|
|
22
41
|
- JWT tokens (eyJ*.eyJ*.\*)
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
-
|
|
42
|
+
- Generic secrets pattern
|
|
43
|
+
- Improved regex patterns for better credential detection
|
|
44
|
+
- Fixed password regex to properly handle quoted values
|
|
45
|
+
- Consistent character class patterns across all credential types
|
|
26
46
|
|
|
27
47
|
### Security
|
|
28
48
|
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
- Prompt capture is opt-in (disabled by default) for privacy
|
|
49
|
+
- Enhanced credential sanitization to cover more API key formats
|
|
50
|
+
- Improved detection of sensitive data in prompts and responses
|
|
32
51
|
|
|
33
52
|
## [2.0.9] - 2026-01-06
|
|
34
53
|
|
|
@@ -115,6 +134,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
115
134
|
- Background processing for non-blocking tracking
|
|
116
135
|
- Debug logging support
|
|
117
136
|
|
|
137
|
+
[2.1.2]: https://github.com/revenium/revenium-middleware-perplexity-node/releases/tag/v2.1.2
|
|
138
|
+
[2.1.1]: https://github.com/revenium/revenium-middleware-perplexity-node/releases/tag/v2.1.1
|
|
139
|
+
[2.1.0]: https://github.com/revenium/revenium-middleware-perplexity-node/releases/tag/v2.1.0
|
|
140
|
+
[2.0.9]: https://github.com/revenium/revenium-middleware-perplexity-node/releases/tag/v2.0.9
|
|
118
141
|
[2.0.8]: https://github.com/revenium/revenium-middleware-perplexity-node/releases/tag/v2.0.8
|
|
119
142
|
[2.0.4]: https://github.com/revenium/revenium-middleware-perplexity-node/releases/tag/v2.0.4
|
|
120
143
|
[2.0.3]: https://github.com/revenium/revenium-middleware-perplexity-node/releases/tag/v2.0.3
|
package/README.md
CHANGED
|
@@ -443,6 +443,57 @@ Initialize({
|
|
|
443
443
|
|
|
444
444
|
**For complete API documentation and usage examples, see [`examples/README.md`](https://github.com/revenium/revenium-middleware-perplexity-node/blob/HEAD/examples/README.md).**
|
|
445
445
|
|
|
446
|
+
## Tool Metering
|
|
447
|
+
|
|
448
|
+
Track execution of custom tools and external API calls with automatic timing, error handling, and metadata collection.
|
|
449
|
+
|
|
450
|
+
### Quick Example
|
|
451
|
+
|
|
452
|
+
```typescript
|
|
453
|
+
import { meterTool, setToolContext } from "@revenium/perplexity";
|
|
454
|
+
|
|
455
|
+
// Set context once (propagates to all tool calls)
|
|
456
|
+
setToolContext({
|
|
457
|
+
agent: "my-agent",
|
|
458
|
+
traceId: "session-123"
|
|
459
|
+
});
|
|
460
|
+
|
|
461
|
+
// Wrap tool execution
|
|
462
|
+
const result = await meterTool("weather-api", async () => {
|
|
463
|
+
return await fetch("https://api.example.com/weather");
|
|
464
|
+
}, {
|
|
465
|
+
operation: "get_forecast",
|
|
466
|
+
outputFields: ["temperature", "humidity"]
|
|
467
|
+
});
|
|
468
|
+
// Automatically extracts temperature & humidity from result
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
### Functions
|
|
472
|
+
|
|
473
|
+
**meterTool(toolId, fn, metadata?)**
|
|
474
|
+
- Wraps a function with automatic metering
|
|
475
|
+
- Captures duration, success/failure, and errors
|
|
476
|
+
- Returns function result unchanged
|
|
477
|
+
|
|
478
|
+
**reportToolCall(toolId, report)**
|
|
479
|
+
- Manually report a tool call that was already executed
|
|
480
|
+
- Useful when wrapping isn't possible
|
|
481
|
+
|
|
482
|
+
**Context Management**
|
|
483
|
+
- `setToolContext(ctx)` - Set context for all subsequent tool calls
|
|
484
|
+
- `getToolContext()` - Get current context
|
|
485
|
+
- `clearToolContext()` - Clear context
|
|
486
|
+
- `runWithToolContext(ctx, fn)` - Run function with scoped context
|
|
487
|
+
|
|
488
|
+
### Metadata Options
|
|
489
|
+
|
|
490
|
+
| Field | Description |
|
|
491
|
+
|-------|-------------|
|
|
492
|
+
| `operation` | Tool operation name (e.g., "search", "scrape") |
|
|
493
|
+
| `outputFields` | Array of field names to auto-extract from result |
|
|
494
|
+
| `usageMetadata` | Custom metrics (e.g., tokens, results count) |
|
|
495
|
+
| `agent`, `traceId`, etc. | Context fields (inherited from setToolContext) |
|
|
496
|
+
|
|
446
497
|
## Configuration Options
|
|
447
498
|
|
|
448
499
|
### Environment Variables
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendToolEvent = sendToolEvent;
|
|
4
|
+
const index_js_1 = require("../config/index.js");
|
|
5
|
+
const url_builder_js_1 = require("../../utils/url-builder.js");
|
|
6
|
+
const DEFAULT_REVENIUM_BASE_URL = "https://api.revenium.ai";
|
|
7
|
+
const TOOL_EVENTS_ENDPOINT = "/tool/events";
|
|
8
|
+
async function sendToolEvent(payload) {
|
|
9
|
+
const config = (0, index_js_1.getConfig)();
|
|
10
|
+
const logger = (0, index_js_1.getLogger)();
|
|
11
|
+
if (!config) {
|
|
12
|
+
logger.warn("Revenium configuration not found, skipping tool event tracking");
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (!config.reveniumApiKey) {
|
|
16
|
+
logger.warn("Revenium API key not configured, skipping tool event tracking");
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const url = (0, url_builder_js_1.buildReveniumUrl)(config.reveniumBaseUrl || DEFAULT_REVENIUM_BASE_URL, TOOL_EVENTS_ENDPOINT);
|
|
20
|
+
logger.debug("Sending tool event to Revenium", {
|
|
21
|
+
url,
|
|
22
|
+
toolId: payload.toolId,
|
|
23
|
+
transactionId: payload.transactionId,
|
|
24
|
+
operation: payload.operation,
|
|
25
|
+
durationMs: payload.durationMs,
|
|
26
|
+
success: payload.success,
|
|
27
|
+
});
|
|
28
|
+
const controller = new AbortController();
|
|
29
|
+
const timeoutId = setTimeout(() => controller.abort(), 10000);
|
|
30
|
+
const response = await fetch(url, {
|
|
31
|
+
method: "POST",
|
|
32
|
+
headers: {
|
|
33
|
+
"Content-Type": "application/json",
|
|
34
|
+
Accept: "application/json",
|
|
35
|
+
"x-api-key": config.reveniumApiKey,
|
|
36
|
+
},
|
|
37
|
+
body: JSON.stringify(payload),
|
|
38
|
+
signal: controller.signal,
|
|
39
|
+
}).finally(() => clearTimeout(timeoutId));
|
|
40
|
+
logger.debug("Tool event response", {
|
|
41
|
+
status: response.status,
|
|
42
|
+
statusText: response.statusText,
|
|
43
|
+
transactionId: payload.transactionId,
|
|
44
|
+
toolId: payload.toolId,
|
|
45
|
+
});
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
const responseText = await response.text();
|
|
48
|
+
logger.error("Tool event API error", {
|
|
49
|
+
status: response.status,
|
|
50
|
+
statusText: response.statusText,
|
|
51
|
+
body: responseText,
|
|
52
|
+
transactionId: payload.transactionId,
|
|
53
|
+
toolId: payload.toolId,
|
|
54
|
+
});
|
|
55
|
+
throw new Error(`Revenium tool event API error: ${response.status} ${response.statusText}`);
|
|
56
|
+
}
|
|
57
|
+
logger.debug("Tool event sent successfully", {
|
|
58
|
+
transactionId: payload.transactionId,
|
|
59
|
+
toolId: payload.toolId,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=tool-api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-api-client.js","sourceRoot":"","sources":["../../../../src/core/tracking/tool-api-client.ts"],"names":[],"mappings":";;AAOA,sCAiEC;AAvED,iDAA0D;AAC1D,+DAA8D;AAE9D,MAAM,yBAAyB,GAAG,yBAAyB,CAAC;AAC5D,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAErC,KAAK,UAAU,aAAa,CAAC,OAAyB;IAC3D,MAAM,MAAM,GAAG,IAAA,oBAAS,GAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAA,oBAAS,GAAE,CAAC;IAE3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;QAC9E,OAAO;IACT,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAC7E,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,IAAA,iCAAgB,EAC1B,MAAM,CAAC,eAAe,IAAI,yBAAyB,EACnD,oBAAoB,CACrB,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE;QAC7C,GAAG;QACH,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAM,CAAC,CAAC;IAE/D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;YAC1B,WAAW,EAAE,MAAM,CAAC,cAAc;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAC7B,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IAE1C,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE;QAClC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;YACnC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,IAAI,EAAE,YAAY;YAClB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;QAC3C,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setToolContext = setToolContext;
|
|
4
|
+
exports.getToolContext = getToolContext;
|
|
5
|
+
exports.clearToolContext = clearToolContext;
|
|
6
|
+
exports.runWithToolContext = runWithToolContext;
|
|
7
|
+
const async_hooks_1 = require("async_hooks");
|
|
8
|
+
const contextStorage = new async_hooks_1.AsyncLocalStorage();
|
|
9
|
+
function setToolContext(ctx) {
|
|
10
|
+
const current = contextStorage.getStore() ?? {};
|
|
11
|
+
contextStorage.enterWith({ ...current, ...ctx });
|
|
12
|
+
}
|
|
13
|
+
function getToolContext() {
|
|
14
|
+
return contextStorage.getStore() ?? {};
|
|
15
|
+
}
|
|
16
|
+
function clearToolContext() {
|
|
17
|
+
contextStorage.enterWith({});
|
|
18
|
+
}
|
|
19
|
+
function runWithToolContext(ctx, fn) {
|
|
20
|
+
const merged = { ...getToolContext(), ...ctx };
|
|
21
|
+
return contextStorage.run(merged, fn);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=tool-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-context.js","sourceRoot":"","sources":["../../../../src/core/tracking/tool-context.ts"],"names":[],"mappings":";;AAKA,wCAGC;AAED,wCAEC;AAED,4CAEC;AAED,gDAMC;AAxBD,6CAAgD;AAGhD,MAAM,cAAc,GAAG,IAAI,+BAAiB,EAAe,CAAC;AAE5D,SAAgB,cAAc,CAAC,GAAgB;IAC7C,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChD,cAAc,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,cAAc;IAC5B,OAAO,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,SAAgB,gBAAgB;IAC9B,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,SAAgB,kBAAkB,CAChC,GAAgB,EAChB,EAAwB;IAExB,MAAM,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;IAC/C,OAAO,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.meterTool = meterTool;
|
|
4
|
+
exports.reportToolCall = reportToolCall;
|
|
5
|
+
const crypto_1 = require("crypto");
|
|
6
|
+
const tool_context_js_1 = require("./tool-context.js");
|
|
7
|
+
const tool_api_client_js_1 = require("./tool-api-client.js");
|
|
8
|
+
const index_js_1 = require("../config/index.js");
|
|
9
|
+
const MIDDLEWARE_SOURCE = "revenium-perplexity-node";
|
|
10
|
+
function isPromise(value) {
|
|
11
|
+
return value !== null && typeof value === "object" && typeof value.then === "function";
|
|
12
|
+
}
|
|
13
|
+
function extractOutputFields(result, fields) {
|
|
14
|
+
if (typeof result !== "object" || result === null) {
|
|
15
|
+
return {};
|
|
16
|
+
}
|
|
17
|
+
const extracted = {};
|
|
18
|
+
for (const field of fields) {
|
|
19
|
+
if (field in result) {
|
|
20
|
+
extracted[field] = result[field];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return extracted;
|
|
24
|
+
}
|
|
25
|
+
function buildToolEventPayload(toolId, durationMs, success, metadata, errorMessage) {
|
|
26
|
+
const context = (0, tool_context_js_1.getToolContext)();
|
|
27
|
+
const transactionId = metadata?.transactionId ?? context.transactionId ?? (0, crypto_1.randomUUID)();
|
|
28
|
+
return {
|
|
29
|
+
transactionId,
|
|
30
|
+
toolId,
|
|
31
|
+
operation: metadata?.operation,
|
|
32
|
+
durationMs,
|
|
33
|
+
success,
|
|
34
|
+
timestamp: new Date().toISOString(),
|
|
35
|
+
errorMessage,
|
|
36
|
+
usageMetadata: metadata?.usageMetadata,
|
|
37
|
+
agent: metadata?.agent ?? context.agent,
|
|
38
|
+
organizationName: metadata?.organizationName ?? context.organizationName,
|
|
39
|
+
productName: metadata?.productName ?? context.productName,
|
|
40
|
+
subscriberCredential: metadata?.subscriberCredential ?? context.subscriberCredential,
|
|
41
|
+
workflowId: metadata?.workflowId ?? context.workflowId,
|
|
42
|
+
traceId: metadata?.traceId ?? context.traceId,
|
|
43
|
+
middlewareSource: MIDDLEWARE_SOURCE,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function dispatchToolEvent(payload) {
|
|
47
|
+
const logger = (0, index_js_1.getLogger)();
|
|
48
|
+
(0, tool_api_client_js_1.sendToolEvent)(payload)
|
|
49
|
+
.then(() => {
|
|
50
|
+
logger.debug("Tool event sent successfully", {
|
|
51
|
+
transactionId: payload.transactionId,
|
|
52
|
+
toolId: payload.toolId,
|
|
53
|
+
});
|
|
54
|
+
})
|
|
55
|
+
.catch((error) => {
|
|
56
|
+
logger.warn("Failed to send tool event", {
|
|
57
|
+
transactionId: payload.transactionId,
|
|
58
|
+
toolId: payload.toolId,
|
|
59
|
+
error: error instanceof Error ? error.message : String(error),
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function meterTool(toolId, fn, metadata) {
|
|
64
|
+
const startTime = performance.now();
|
|
65
|
+
const handleSuccess = (result) => {
|
|
66
|
+
const durationMs = Math.round(performance.now() - startTime);
|
|
67
|
+
let finalMetadata = metadata;
|
|
68
|
+
if (metadata?.outputFields && metadata.outputFields.length > 0) {
|
|
69
|
+
const extracted = extractOutputFields(result, metadata.outputFields);
|
|
70
|
+
finalMetadata = {
|
|
71
|
+
...metadata,
|
|
72
|
+
usageMetadata: {
|
|
73
|
+
...metadata.usageMetadata,
|
|
74
|
+
...extracted,
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const payload = buildToolEventPayload(toolId, durationMs, true, finalMetadata);
|
|
79
|
+
dispatchToolEvent(payload);
|
|
80
|
+
return result;
|
|
81
|
+
};
|
|
82
|
+
const handleError = (error) => {
|
|
83
|
+
const durationMs = Math.round(performance.now() - startTime);
|
|
84
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
85
|
+
const payload = buildToolEventPayload(toolId, durationMs, false, metadata, errorMessage);
|
|
86
|
+
dispatchToolEvent(payload);
|
|
87
|
+
throw error;
|
|
88
|
+
};
|
|
89
|
+
try {
|
|
90
|
+
const result = fn();
|
|
91
|
+
if (isPromise(result)) {
|
|
92
|
+
return result.then(handleSuccess, handleError);
|
|
93
|
+
}
|
|
94
|
+
return Promise.resolve(handleSuccess(result));
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
return Promise.reject(handleError(error));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function reportToolCall(toolId, report) {
|
|
101
|
+
const context = (0, tool_context_js_1.getToolContext)();
|
|
102
|
+
const transactionId = report.transactionId ?? context.transactionId ?? (0, crypto_1.randomUUID)();
|
|
103
|
+
const payload = {
|
|
104
|
+
transactionId,
|
|
105
|
+
toolId,
|
|
106
|
+
operation: report.operation,
|
|
107
|
+
durationMs: report.durationMs,
|
|
108
|
+
success: report.success,
|
|
109
|
+
timestamp: report.timestamp ?? new Date().toISOString(),
|
|
110
|
+
errorMessage: report.errorMessage,
|
|
111
|
+
usageMetadata: report.usageMetadata,
|
|
112
|
+
agent: report.agent ?? context.agent,
|
|
113
|
+
organizationName: report.organizationName ?? context.organizationName,
|
|
114
|
+
productName: report.productName ?? context.productName,
|
|
115
|
+
subscriberCredential: report.subscriberCredential ?? context.subscriberCredential,
|
|
116
|
+
workflowId: report.workflowId ?? context.workflowId,
|
|
117
|
+
traceId: report.traceId ?? context.traceId,
|
|
118
|
+
middlewareSource: MIDDLEWARE_SOURCE,
|
|
119
|
+
};
|
|
120
|
+
dispatchToolEvent(payload);
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=tool-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-tracker.js","sourceRoot":"","sources":["../../../../src/core/tracking/tool-tracker.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getProviderMetadata = exports.detectProvider = exports.trackUsageAsync = exports.StreamingWrapper = exports.CompletionsInterface = exports.ChatInterface = exports.ReveniumPerplexity = exports.Configure = exports.Reset = exports.IsInitialized = exports.GetClient = exports.Initialize = void 0;
|
|
3
|
+
exports.runWithToolContext = exports.clearToolContext = exports.getToolContext = exports.setToolContext = exports.reportToolCall = exports.meterTool = exports.getProviderMetadata = exports.detectProvider = exports.trackUsageAsync = exports.StreamingWrapper = exports.CompletionsInterface = exports.ChatInterface = exports.ReveniumPerplexity = exports.Configure = exports.Reset = exports.IsInitialized = exports.GetClient = exports.Initialize = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Main API
|
|
6
6
|
*/
|
|
@@ -29,4 +29,15 @@ Object.defineProperty(exports, "trackUsageAsync", { enumerable: true, get: funct
|
|
|
29
29
|
var index_js_4 = require("./core/providers/index.js");
|
|
30
30
|
Object.defineProperty(exports, "detectProvider", { enumerable: true, get: function () { return index_js_4.detectProvider; } });
|
|
31
31
|
Object.defineProperty(exports, "getProviderMetadata", { enumerable: true, get: function () { return index_js_4.getProviderMetadata; } });
|
|
32
|
+
/**
|
|
33
|
+
* Tool metering functions
|
|
34
|
+
*/
|
|
35
|
+
var tool_tracker_js_1 = require("./core/tracking/tool-tracker.js");
|
|
36
|
+
Object.defineProperty(exports, "meterTool", { enumerable: true, get: function () { return tool_tracker_js_1.meterTool; } });
|
|
37
|
+
Object.defineProperty(exports, "reportToolCall", { enumerable: true, get: function () { return tool_tracker_js_1.reportToolCall; } });
|
|
38
|
+
var tool_context_js_1 = require("./core/tracking/tool-context.js");
|
|
39
|
+
Object.defineProperty(exports, "setToolContext", { enumerable: true, get: function () { return tool_context_js_1.setToolContext; } });
|
|
40
|
+
Object.defineProperty(exports, "getToolContext", { enumerable: true, get: function () { return tool_context_js_1.getToolContext; } });
|
|
41
|
+
Object.defineProperty(exports, "clearToolContext", { enumerable: true, get: function () { return tool_context_js_1.clearToolContext; } });
|
|
42
|
+
Object.defineProperty(exports, "runWithToolContext", { enumerable: true, get: function () { return tool_context_js_1.runWithToolContext; } });
|
|
32
43
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AA+BA;;GAEG;AACH,mDAMgC;AAL9B,sGAAA,UAAU,OAAA;AACV,qGAAA,SAAS,OAAA;AACT,yGAAA,aAAa,OAAA;AACb,iGAAA,KAAK,OAAA;AACL,qGAAA,SAAS,OAAA;AAGX;;GAEG;AACH,uDAKoC;AAJlC,8GAAA,kBAAkB,OAAA;AAClB,yGAAA,aAAa,OAAA;AACb,gHAAA,oBAAoB,OAAA;AACpB,4GAAA,gBAAgB,OAAA;AAGlB;;GAEG;AACH,qDAA2D;AAAlD,2GAAA,eAAe,OAAA;AAExB;;GAEG;AACH,sDAAgF;AAAvE,0GAAA,cAAc,OAAA;AAAE,+GAAA,mBAAmB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AA+BA;;GAEG;AACH,mDAMgC;AAL9B,sGAAA,UAAU,OAAA;AACV,qGAAA,SAAS,OAAA;AACT,yGAAA,aAAa,OAAA;AACb,iGAAA,KAAK,OAAA;AACL,qGAAA,SAAS,OAAA;AAGX;;GAEG;AACH,uDAKoC;AAJlC,8GAAA,kBAAkB,OAAA;AAClB,yGAAA,aAAa,OAAA;AACb,gHAAA,oBAAoB,OAAA;AACpB,4GAAA,gBAAgB,OAAA;AAGlB;;GAEG;AACH,qDAA2D;AAAlD,2GAAA,eAAe,OAAA;AAExB;;GAEG;AACH,sDAAgF;AAAvE,0GAAA,cAAc,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAY5C;;GAEG;AACH,mEAGyC;AAFvC,4GAAA,SAAS,OAAA;AACT,iHAAA,cAAc,OAAA;AAGhB,mEAKyC;AAJvC,iHAAA,cAAc,OAAA;AACd,iHAAA,cAAc,OAAA;AACd,mHAAA,gBAAgB,OAAA;AAChB,qHAAA,kBAAkB,OAAA"}
|
package/dist/cjs/types/index.js
CHANGED
|
@@ -22,4 +22,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
23
|
// Re-export function parameter types
|
|
24
24
|
__exportStar(require("./function-parameters.js"), exports);
|
|
25
|
+
__exportStar(require("./tool-metering.js"), exports);
|
|
25
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;AAEH,qCAAqC;AACrC,2DAAyC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;AAEH,qCAAqC;AACrC,2DAAyC;AAyLzC,qDAAmC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-metering.js","sourceRoot":"","sources":["../../../src/types/tool-metering.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { getConfig, getLogger } from "../config/index.js";
|
|
2
|
+
import { buildReveniumUrl } from "../../utils/url-builder.js";
|
|
3
|
+
const DEFAULT_REVENIUM_BASE_URL = "https://api.revenium.ai";
|
|
4
|
+
const TOOL_EVENTS_ENDPOINT = "/tool/events";
|
|
5
|
+
export async function sendToolEvent(payload) {
|
|
6
|
+
const config = getConfig();
|
|
7
|
+
const logger = getLogger();
|
|
8
|
+
if (!config) {
|
|
9
|
+
logger.warn("Revenium configuration not found, skipping tool event tracking");
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
if (!config.reveniumApiKey) {
|
|
13
|
+
logger.warn("Revenium API key not configured, skipping tool event tracking");
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const url = buildReveniumUrl(config.reveniumBaseUrl || DEFAULT_REVENIUM_BASE_URL, TOOL_EVENTS_ENDPOINT);
|
|
17
|
+
logger.debug("Sending tool event to Revenium", {
|
|
18
|
+
url,
|
|
19
|
+
toolId: payload.toolId,
|
|
20
|
+
transactionId: payload.transactionId,
|
|
21
|
+
operation: payload.operation,
|
|
22
|
+
durationMs: payload.durationMs,
|
|
23
|
+
success: payload.success,
|
|
24
|
+
});
|
|
25
|
+
const controller = new AbortController();
|
|
26
|
+
const timeoutId = setTimeout(() => controller.abort(), 10000);
|
|
27
|
+
const response = await fetch(url, {
|
|
28
|
+
method: "POST",
|
|
29
|
+
headers: {
|
|
30
|
+
"Content-Type": "application/json",
|
|
31
|
+
Accept: "application/json",
|
|
32
|
+
"x-api-key": config.reveniumApiKey,
|
|
33
|
+
},
|
|
34
|
+
body: JSON.stringify(payload),
|
|
35
|
+
signal: controller.signal,
|
|
36
|
+
}).finally(() => clearTimeout(timeoutId));
|
|
37
|
+
logger.debug("Tool event response", {
|
|
38
|
+
status: response.status,
|
|
39
|
+
statusText: response.statusText,
|
|
40
|
+
transactionId: payload.transactionId,
|
|
41
|
+
toolId: payload.toolId,
|
|
42
|
+
});
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
const responseText = await response.text();
|
|
45
|
+
logger.error("Tool event API error", {
|
|
46
|
+
status: response.status,
|
|
47
|
+
statusText: response.statusText,
|
|
48
|
+
body: responseText,
|
|
49
|
+
transactionId: payload.transactionId,
|
|
50
|
+
toolId: payload.toolId,
|
|
51
|
+
});
|
|
52
|
+
throw new Error(`Revenium tool event API error: ${response.status} ${response.statusText}`);
|
|
53
|
+
}
|
|
54
|
+
logger.debug("Tool event sent successfully", {
|
|
55
|
+
transactionId: payload.transactionId,
|
|
56
|
+
toolId: payload.toolId,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=tool-api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-api-client.js","sourceRoot":"","sources":["../../../../src/core/tracking/tool-api-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,MAAM,yBAAyB,GAAG,yBAAyB,CAAC;AAC5D,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAyB;IAC3D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;QAC9E,OAAO;IACT,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAC7E,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,gBAAgB,CAC1B,MAAM,CAAC,eAAe,IAAI,yBAAyB,EACnD,oBAAoB,CACrB,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE;QAC7C,GAAG;QACH,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAM,CAAC,CAAC;IAE/D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;YAC1B,WAAW,EAAE,MAAM,CAAC,cAAc;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAC7B,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IAE1C,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE;QAClC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;YACnC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,IAAI,EAAE,YAAY;YAClB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;QAC3C,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
2
|
+
const contextStorage = new AsyncLocalStorage();
|
|
3
|
+
export function setToolContext(ctx) {
|
|
4
|
+
const current = contextStorage.getStore() ?? {};
|
|
5
|
+
contextStorage.enterWith({ ...current, ...ctx });
|
|
6
|
+
}
|
|
7
|
+
export function getToolContext() {
|
|
8
|
+
return contextStorage.getStore() ?? {};
|
|
9
|
+
}
|
|
10
|
+
export function clearToolContext() {
|
|
11
|
+
contextStorage.enterWith({});
|
|
12
|
+
}
|
|
13
|
+
export function runWithToolContext(ctx, fn) {
|
|
14
|
+
const merged = { ...getToolContext(), ...ctx };
|
|
15
|
+
return contextStorage.run(merged, fn);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=tool-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-context.js","sourceRoot":"","sources":["../../../../src/core/tracking/tool-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,cAAc,GAAG,IAAI,iBAAiB,EAAe,CAAC;AAE5D,MAAM,UAAU,cAAc,CAAC,GAAgB;IAC7C,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChD,cAAc,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,GAAgB,EAChB,EAAwB;IAExB,MAAM,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;IAC/C,OAAO,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { randomUUID } from "crypto";
|
|
2
|
+
import { getToolContext } from "./tool-context.js";
|
|
3
|
+
import { sendToolEvent } from "./tool-api-client.js";
|
|
4
|
+
import { getLogger } from "../config/index.js";
|
|
5
|
+
const MIDDLEWARE_SOURCE = "revenium-perplexity-node";
|
|
6
|
+
function isPromise(value) {
|
|
7
|
+
return value !== null && typeof value === "object" && typeof value.then === "function";
|
|
8
|
+
}
|
|
9
|
+
function extractOutputFields(result, fields) {
|
|
10
|
+
if (typeof result !== "object" || result === null) {
|
|
11
|
+
return {};
|
|
12
|
+
}
|
|
13
|
+
const extracted = {};
|
|
14
|
+
for (const field of fields) {
|
|
15
|
+
if (field in result) {
|
|
16
|
+
extracted[field] = result[field];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return extracted;
|
|
20
|
+
}
|
|
21
|
+
function buildToolEventPayload(toolId, durationMs, success, metadata, errorMessage) {
|
|
22
|
+
const context = getToolContext();
|
|
23
|
+
const transactionId = metadata?.transactionId ?? context.transactionId ?? randomUUID();
|
|
24
|
+
return {
|
|
25
|
+
transactionId,
|
|
26
|
+
toolId,
|
|
27
|
+
operation: metadata?.operation,
|
|
28
|
+
durationMs,
|
|
29
|
+
success,
|
|
30
|
+
timestamp: new Date().toISOString(),
|
|
31
|
+
errorMessage,
|
|
32
|
+
usageMetadata: metadata?.usageMetadata,
|
|
33
|
+
agent: metadata?.agent ?? context.agent,
|
|
34
|
+
organizationName: metadata?.organizationName ?? context.organizationName,
|
|
35
|
+
productName: metadata?.productName ?? context.productName,
|
|
36
|
+
subscriberCredential: metadata?.subscriberCredential ?? context.subscriberCredential,
|
|
37
|
+
workflowId: metadata?.workflowId ?? context.workflowId,
|
|
38
|
+
traceId: metadata?.traceId ?? context.traceId,
|
|
39
|
+
middlewareSource: MIDDLEWARE_SOURCE,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function dispatchToolEvent(payload) {
|
|
43
|
+
const logger = getLogger();
|
|
44
|
+
sendToolEvent(payload)
|
|
45
|
+
.then(() => {
|
|
46
|
+
logger.debug("Tool event sent successfully", {
|
|
47
|
+
transactionId: payload.transactionId,
|
|
48
|
+
toolId: payload.toolId,
|
|
49
|
+
});
|
|
50
|
+
})
|
|
51
|
+
.catch((error) => {
|
|
52
|
+
logger.warn("Failed to send tool event", {
|
|
53
|
+
transactionId: payload.transactionId,
|
|
54
|
+
toolId: payload.toolId,
|
|
55
|
+
error: error instanceof Error ? error.message : String(error),
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
export function meterTool(toolId, fn, metadata) {
|
|
60
|
+
const startTime = performance.now();
|
|
61
|
+
const handleSuccess = (result) => {
|
|
62
|
+
const durationMs = Math.round(performance.now() - startTime);
|
|
63
|
+
let finalMetadata = metadata;
|
|
64
|
+
if (metadata?.outputFields && metadata.outputFields.length > 0) {
|
|
65
|
+
const extracted = extractOutputFields(result, metadata.outputFields);
|
|
66
|
+
finalMetadata = {
|
|
67
|
+
...metadata,
|
|
68
|
+
usageMetadata: {
|
|
69
|
+
...metadata.usageMetadata,
|
|
70
|
+
...extracted,
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const payload = buildToolEventPayload(toolId, durationMs, true, finalMetadata);
|
|
75
|
+
dispatchToolEvent(payload);
|
|
76
|
+
return result;
|
|
77
|
+
};
|
|
78
|
+
const handleError = (error) => {
|
|
79
|
+
const durationMs = Math.round(performance.now() - startTime);
|
|
80
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
81
|
+
const payload = buildToolEventPayload(toolId, durationMs, false, metadata, errorMessage);
|
|
82
|
+
dispatchToolEvent(payload);
|
|
83
|
+
throw error;
|
|
84
|
+
};
|
|
85
|
+
try {
|
|
86
|
+
const result = fn();
|
|
87
|
+
if (isPromise(result)) {
|
|
88
|
+
return result.then(handleSuccess, handleError);
|
|
89
|
+
}
|
|
90
|
+
return Promise.resolve(handleSuccess(result));
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
return Promise.reject(handleError(error));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
export function reportToolCall(toolId, report) {
|
|
97
|
+
const context = getToolContext();
|
|
98
|
+
const transactionId = report.transactionId ?? context.transactionId ?? randomUUID();
|
|
99
|
+
const payload = {
|
|
100
|
+
transactionId,
|
|
101
|
+
toolId,
|
|
102
|
+
operation: report.operation,
|
|
103
|
+
durationMs: report.durationMs,
|
|
104
|
+
success: report.success,
|
|
105
|
+
timestamp: report.timestamp ?? new Date().toISOString(),
|
|
106
|
+
errorMessage: report.errorMessage,
|
|
107
|
+
usageMetadata: report.usageMetadata,
|
|
108
|
+
agent: report.agent ?? context.agent,
|
|
109
|
+
organizationName: report.organizationName ?? context.organizationName,
|
|
110
|
+
productName: report.productName ?? context.productName,
|
|
111
|
+
subscriberCredential: report.subscriberCredential ?? context.subscriberCredential,
|
|
112
|
+
workflowId: report.workflowId ?? context.workflowId,
|
|
113
|
+
traceId: report.traceId ?? context.traceId,
|
|
114
|
+
middlewareSource: MIDDLEWARE_SOURCE,
|
|
115
|
+
};
|
|
116
|
+
dispatchToolEvent(payload);
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=tool-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-tracker.js","sourceRoot":"","sources":["../../../../src/core/tracking/tool-tracker.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -14,4 +14,9 @@ export { trackUsageAsync } from "./core/tracking/index.js";
|
|
|
14
14
|
* Provider detection functions
|
|
15
15
|
*/
|
|
16
16
|
export { detectProvider, getProviderMetadata } from "./core/providers/index.js";
|
|
17
|
+
/**
|
|
18
|
+
* Tool metering functions
|
|
19
|
+
*/
|
|
20
|
+
export { meterTool, reportToolCall, } from "./core/tracking/tool-tracker.js";
|
|
21
|
+
export { setToolContext, getToolContext, clearToolContext, runWithToolContext, } from "./core/tracking/tool-context.js";
|
|
17
22
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AA+BA;;GAEG;AACH,OAAO,EACL,UAAU,EACV,SAAS,EACT,aAAa,EACb,KAAK,EACL,SAAS,GACV,MAAM,wBAAwB,CAAC;AAEhC;;GAEG;AACH,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AAEpC;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AA+BA;;GAEG;AACH,OAAO,EACL,UAAU,EACV,SAAS,EACT,aAAa,EACb,KAAK,EACL,SAAS,GACV,MAAM,wBAAwB,CAAC;AAEhC;;GAEG;AACH,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AAEpC;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAYhF;;GAEG;AACH,OAAO,EACL,SAAS,EACT,cAAc,GACf,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,iCAAiC,CAAC"}
|
package/dist/esm/types/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qCAAqC;AACrC,cAAc,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qCAAqC;AACrC,cAAc,0BAA0B,CAAC;AAyLzC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-metering.js","sourceRoot":"","sources":["../../../src/types/tool-metering.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-api-client.d.ts","sourceRoot":"","sources":["../../../../src/core/tracking/tool-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAOhE,wBAAsB,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiE5E"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ToolContext } from "../../types/tool-metering.js";
|
|
2
|
+
export declare function setToolContext(ctx: ToolContext): void;
|
|
3
|
+
export declare function getToolContext(): ToolContext;
|
|
4
|
+
export declare function clearToolContext(): void;
|
|
5
|
+
export declare function runWithToolContext<T>(ctx: ToolContext, fn: () => T | Promise<T>): T | Promise<T>;
|
|
6
|
+
//# sourceMappingURL=tool-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-context.d.ts","sourceRoot":"","sources":["../../../../src/core/tracking/tool-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAI3D,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAGrD;AAED,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,GAAG,EAAE,WAAW,EAChB,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGhB"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ToolMetadata, ToolCallReport } from "../../types/tool-metering.js";
|
|
2
|
+
export declare function meterTool<T>(toolId: string, fn: () => T | Promise<T>, metadata?: ToolMetadata): Promise<T>;
|
|
3
|
+
export declare function reportToolCall(toolId: string, report: ToolCallReport): void;
|
|
4
|
+
//# sourceMappingURL=tool-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-tracker.d.ts","sourceRoot":"","sources":["../../../../src/core/tracking/tool-tracker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAoB,MAAM,8BAA8B,CAAC;AAwE9F,wBAAgB,SAAS,CAAC,CAAC,EACzB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EACxB,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,CAAC,CAAC,CA0CZ;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAuB3E"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -25,4 +25,13 @@ export { trackUsageAsync } from "./core/tracking/index.js";
|
|
|
25
25
|
* Provider detection functions
|
|
26
26
|
*/
|
|
27
27
|
export { detectProvider, getProviderMetadata } from "./core/providers/index.js";
|
|
28
|
+
/**
|
|
29
|
+
* Tool metering types
|
|
30
|
+
*/
|
|
31
|
+
export type { ToolContext, ToolMetadata, ToolEventPayload, ToolCallReport, } from "./types/tool-metering.js";
|
|
32
|
+
/**
|
|
33
|
+
* Tool metering functions
|
|
34
|
+
*/
|
|
35
|
+
export { meterTool, reportToolCall, } from "./core/tracking/tool-tracker.js";
|
|
36
|
+
export { setToolContext, getToolContext, clearToolContext, runWithToolContext, } from "./core/tracking/tool-context.js";
|
|
28
37
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,YAAY,EACV,cAAc,EACd,aAAa,EACb,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,eAAe,EACf,YAAY,GACb,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,GACb,MAAM,gCAAgC,CAAC;AAExC;;GAEG;AACH,OAAO,EACL,UAAU,EACV,SAAS,EACT,aAAa,EACb,KAAK,EACL,SAAS,GACV,MAAM,wBAAwB,CAAC;AAEhC;;GAEG;AACH,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AAEpC;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,YAAY,EACV,cAAc,EACd,aAAa,EACb,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,eAAe,EACf,YAAY,GACb,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,GACb,MAAM,gCAAgC,CAAC;AAExC;;GAEG;AACH,OAAO,EACL,UAAU,EACV,SAAS,EACT,aAAa,EACb,KAAK,EACL,SAAS,GACV,MAAM,wBAAwB,CAAC;AAEhC;;GAEG;AACH,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AAEpC;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhF;;GAEG;AACH,YAAY,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAElC;;GAEG;AACH,OAAO,EACL,SAAS,EACT,cAAc,GACf,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,iCAAiC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export interface ToolContext {
|
|
2
|
+
agent?: string;
|
|
3
|
+
organizationName?: string;
|
|
4
|
+
productName?: string;
|
|
5
|
+
subscriberCredential?: string;
|
|
6
|
+
workflowId?: string;
|
|
7
|
+
traceId?: string;
|
|
8
|
+
transactionId?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ToolMetadata extends ToolContext {
|
|
11
|
+
operation?: string;
|
|
12
|
+
outputFields?: string[];
|
|
13
|
+
usageMetadata?: Record<string, unknown>;
|
|
14
|
+
}
|
|
15
|
+
export interface ToolEventPayload {
|
|
16
|
+
transactionId: string;
|
|
17
|
+
toolId: string;
|
|
18
|
+
operation?: string;
|
|
19
|
+
durationMs: number;
|
|
20
|
+
success: boolean;
|
|
21
|
+
timestamp: string;
|
|
22
|
+
errorMessage?: string;
|
|
23
|
+
usageMetadata?: Record<string, unknown>;
|
|
24
|
+
agent?: string;
|
|
25
|
+
organizationName?: string;
|
|
26
|
+
productName?: string;
|
|
27
|
+
subscriberCredential?: string;
|
|
28
|
+
workflowId?: string;
|
|
29
|
+
traceId?: string;
|
|
30
|
+
middlewareSource: string;
|
|
31
|
+
}
|
|
32
|
+
export interface ToolCallReport {
|
|
33
|
+
operation?: string;
|
|
34
|
+
durationMs: number;
|
|
35
|
+
success: boolean;
|
|
36
|
+
errorMessage?: string;
|
|
37
|
+
usageMetadata?: Record<string, unknown>;
|
|
38
|
+
agent?: string;
|
|
39
|
+
organizationName?: string;
|
|
40
|
+
productName?: string;
|
|
41
|
+
subscriberCredential?: string;
|
|
42
|
+
workflowId?: string;
|
|
43
|
+
traceId?: string;
|
|
44
|
+
transactionId?: string;
|
|
45
|
+
timestamp?: string;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=tool-metering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-metering.d.ts","sourceRoot":"","sources":["../../../src/types/tool-metering.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@revenium/perplexity",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"description": "NodeJS middleware for Perplexity AI API with Revenium metering",
|
|
5
5
|
"homepage": "https://github.com/revenium/revenium-middleware-perplexity-node#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -46,8 +46,12 @@
|
|
|
46
46
|
"example:metadata": "npx tsx examples/metadata.ts",
|
|
47
47
|
"example:advanced": "npx tsx examples/advanced.ts",
|
|
48
48
|
"example:stream": "npx tsx examples/stream.ts",
|
|
49
|
-
"
|
|
50
|
-
"
|
|
49
|
+
"test": "jest",
|
|
50
|
+
"test:unit": "jest --testPathPatterns=tests/unit",
|
|
51
|
+
"test:integration": "jest --testPathPatterns=tests/integration --passWithNoTests",
|
|
52
|
+
"test:performance": "jest --testPathPatterns=tests/performance --passWithNoTests",
|
|
53
|
+
"test:watch": "jest --watch",
|
|
54
|
+
"test:coverage": "jest --coverage"
|
|
51
55
|
},
|
|
52
56
|
"keywords": [
|
|
53
57
|
"revenium",
|
|
@@ -72,8 +76,11 @@
|
|
|
72
76
|
"uuid": "^13.0.0"
|
|
73
77
|
},
|
|
74
78
|
"devDependencies": {
|
|
79
|
+
"@jest/globals": "^30.2.0",
|
|
80
|
+
"@types/jest": "^30.0.0",
|
|
75
81
|
"@types/node": "^24.7.1",
|
|
76
|
-
"
|
|
82
|
+
"jest": "^30.2.0",
|
|
83
|
+
"ts-jest": "^29.4.6",
|
|
77
84
|
"tsx": "^4.19.2",
|
|
78
85
|
"typescript": "^5.9.2"
|
|
79
86
|
},
|