@dexcost/sdk 0.2.0
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/LICENSE +21 -0
- package/README.md +210 -0
- package/dist/adapters/_netbytes.d.ts +31 -0
- package/dist/adapters/_netbytes.d.ts.map +1 -0
- package/dist/adapters/_netbytes.js +154 -0
- package/dist/adapters/_netbytes.js.map +1 -0
- package/dist/adapters/aws-lambda.d.ts +41 -0
- package/dist/adapters/aws-lambda.d.ts.map +1 -0
- package/dist/adapters/aws-lambda.js +65 -0
- package/dist/adapters/aws-lambda.js.map +1 -0
- package/dist/adapters/browser.d.ts +52 -0
- package/dist/adapters/browser.d.ts.map +1 -0
- package/dist/adapters/browser.js +127 -0
- package/dist/adapters/browser.js.map +1 -0
- package/dist/adapters/compute-wrap.d.ts +33 -0
- package/dist/adapters/compute-wrap.d.ts.map +1 -0
- package/dist/adapters/compute-wrap.js +188 -0
- package/dist/adapters/compute-wrap.js.map +1 -0
- package/dist/adapters/data/aws_lambda_pricing.json +61 -0
- package/dist/adapters/gpu-wrap.d.ts +31 -0
- package/dist/adapters/gpu-wrap.d.ts.map +1 -0
- package/dist/adapters/gpu-wrap.js +147 -0
- package/dist/adapters/gpu-wrap.js.map +1 -0
- package/dist/adapters/http.d.ts +58 -0
- package/dist/adapters/http.d.ts.map +1 -0
- package/dist/adapters/http.js +769 -0
- package/dist/adapters/http.js.map +1 -0
- package/dist/adapters/index.d.ts +11 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +12 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/network-accountant.d.ts +63 -0
- package/dist/adapters/network-accountant.d.ts.map +1 -0
- package/dist/adapters/network-accountant.js +153 -0
- package/dist/adapters/network-accountant.js.map +1 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +225 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/scanner.d.ts +39 -0
- package/dist/cli/scanner.d.ts.map +1 -0
- package/dist/cli/scanner.js +480 -0
- package/dist/cli/scanner.js.map +1 -0
- package/dist/clients.d.ts +54 -0
- package/dist/clients.d.ts.map +1 -0
- package/dist/clients.js +240 -0
- package/dist/clients.js.map +1 -0
- package/dist/cloud-detect.d.ts +96 -0
- package/dist/cloud-detect.d.ts.map +1 -0
- package/dist/cloud-detect.js +545 -0
- package/dist/cloud-detect.js.map +1 -0
- package/dist/core/auto-task.d.ts +20 -0
- package/dist/core/auto-task.d.ts.map +1 -0
- package/dist/core/auto-task.js +34 -0
- package/dist/core/auto-task.js.map +1 -0
- package/dist/core/cgroup-reader.d.ts +45 -0
- package/dist/core/cgroup-reader.d.ts.map +1 -0
- package/dist/core/cgroup-reader.js +124 -0
- package/dist/core/cgroup-reader.js.map +1 -0
- package/dist/core/cgroup-walker.d.ts +60 -0
- package/dist/core/cgroup-walker.d.ts.map +1 -0
- package/dist/core/cgroup-walker.js +166 -0
- package/dist/core/cgroup-walker.js.map +1 -0
- package/dist/core/compute-accountant.d.ts +51 -0
- package/dist/core/compute-accountant.d.ts.map +1 -0
- package/dist/core/compute-accountant.js +179 -0
- package/dist/core/compute-accountant.js.map +1 -0
- package/dist/core/compute-runtime.d.ts +42 -0
- package/dist/core/compute-runtime.d.ts.map +1 -0
- package/dist/core/compute-runtime.js +80 -0
- package/dist/core/compute-runtime.js.map +1 -0
- package/dist/core/config.d.ts +44 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +66 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/context.d.ts +76 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +91 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/fargate-metadata.d.ts +27 -0
- package/dist/core/fargate-metadata.d.ts.map +1 -0
- package/dist/core/fargate-metadata.js +102 -0
- package/dist/core/fargate-metadata.js.map +1 -0
- package/dist/core/gpu-accountant.d.ts +104 -0
- package/dist/core/gpu-accountant.d.ts.map +1 -0
- package/dist/core/gpu-accountant.js +383 -0
- package/dist/core/gpu-accountant.js.map +1 -0
- package/dist/core/gpu-runtime.d.ts +58 -0
- package/dist/core/gpu-runtime.d.ts.map +1 -0
- package/dist/core/gpu-runtime.js +131 -0
- package/dist/core/gpu-runtime.js.map +1 -0
- package/dist/core/heuristics.d.ts +74 -0
- package/dist/core/heuristics.d.ts.map +1 -0
- package/dist/core/heuristics.js +182 -0
- package/dist/core/heuristics.js.map +1 -0
- package/dist/core/models.d.ts +149 -0
- package/dist/core/models.d.ts.map +1 -0
- package/dist/core/models.js +226 -0
- package/dist/core/models.js.map +1 -0
- package/dist/core/nvml-reader.d.ts +114 -0
- package/dist/core/nvml-reader.d.ts.map +1 -0
- package/dist/core/nvml-reader.js +323 -0
- package/dist/core/nvml-reader.js.map +1 -0
- package/dist/core/session.d.ts +48 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +123 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/tracker.d.ts +364 -0
- package/dist/core/tracker.d.ts.map +1 -0
- package/dist/core/tracker.js +1073 -0
- package/dist/core/tracker.js.map +1 -0
- package/dist/data/compute_prices.json +180 -0
- package/dist/data/egress_prices.json +418 -0
- package/dist/data/gpu_prices.json +412 -0
- package/dist/data/service_prices.json +2595 -0
- package/dist/dev-console.d.ts +12 -0
- package/dist/dev-console.d.ts.map +1 -0
- package/dist/dev-console.js +60 -0
- package/dist/dev-console.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/instruments/anthropic.d.ts +26 -0
- package/dist/instruments/anthropic.d.ts.map +1 -0
- package/dist/instruments/anthropic.js +242 -0
- package/dist/instruments/anthropic.js.map +1 -0
- package/dist/instruments/bedrock.d.ts +29 -0
- package/dist/instruments/bedrock.d.ts.map +1 -0
- package/dist/instruments/bedrock.js +215 -0
- package/dist/instruments/bedrock.js.map +1 -0
- package/dist/instruments/cohere.d.ts +29 -0
- package/dist/instruments/cohere.d.ts.map +1 -0
- package/dist/instruments/cohere.js +237 -0
- package/dist/instruments/cohere.js.map +1 -0
- package/dist/instruments/gemini.d.ts +30 -0
- package/dist/instruments/gemini.d.ts.map +1 -0
- package/dist/instruments/gemini.js +247 -0
- package/dist/instruments/gemini.js.map +1 -0
- package/dist/instruments/index.d.ts +35 -0
- package/dist/instruments/index.d.ts.map +1 -0
- package/dist/instruments/index.js +54 -0
- package/dist/instruments/index.js.map +1 -0
- package/dist/instruments/mcp.d.ts +24 -0
- package/dist/instruments/mcp.d.ts.map +1 -0
- package/dist/instruments/mcp.js +459 -0
- package/dist/instruments/mcp.js.map +1 -0
- package/dist/instruments/openai.d.ts +26 -0
- package/dist/instruments/openai.d.ts.map +1 -0
- package/dist/instruments/openai.js +221 -0
- package/dist/instruments/openai.js.map +1 -0
- package/dist/instruments/vercel-ai.d.ts +28 -0
- package/dist/instruments/vercel-ai.d.ts.map +1 -0
- package/dist/instruments/vercel-ai.js +192 -0
- package/dist/instruments/vercel-ai.js.map +1 -0
- package/dist/integrations/langchain.d.ts +65 -0
- package/dist/integrations/langchain.d.ts.map +1 -0
- package/dist/integrations/langchain.js +165 -0
- package/dist/integrations/langchain.js.map +1 -0
- package/dist/middleware/express.d.ts +55 -0
- package/dist/middleware/express.d.ts.map +1 -0
- package/dist/middleware/express.js +101 -0
- package/dist/middleware/express.js.map +1 -0
- package/dist/middleware/index.d.ts +6 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +5 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/pricing/compute-pricing.d.ts +57 -0
- package/dist/pricing/compute-pricing.d.ts.map +1 -0
- package/dist/pricing/compute-pricing.js +627 -0
- package/dist/pricing/compute-pricing.js.map +1 -0
- package/dist/pricing/cost_map.json +37665 -0
- package/dist/pricing/egress-pricing.d.ts +55 -0
- package/dist/pricing/egress-pricing.d.ts.map +1 -0
- package/dist/pricing/egress-pricing.js +226 -0
- package/dist/pricing/egress-pricing.js.map +1 -0
- package/dist/pricing/engine.d.ts +24 -0
- package/dist/pricing/engine.d.ts.map +1 -0
- package/dist/pricing/engine.js +148 -0
- package/dist/pricing/engine.js.map +1 -0
- package/dist/pricing/gpu-pricing.d.ts +63 -0
- package/dist/pricing/gpu-pricing.d.ts.map +1 -0
- package/dist/pricing/gpu-pricing.js +484 -0
- package/dist/pricing/gpu-pricing.js.map +1 -0
- package/dist/pricing/rates.d.ts +17 -0
- package/dist/pricing/rates.d.ts.map +1 -0
- package/dist/pricing/rates.js +102 -0
- package/dist/pricing/rates.js.map +1 -0
- package/dist/pricing/service-catalog.d.ts +87 -0
- package/dist/pricing/service-catalog.d.ts.map +1 -0
- package/dist/pricing/service-catalog.js +406 -0
- package/dist/pricing/service-catalog.js.map +1 -0
- package/dist/schema/dexcost-event.v1.json +111 -0
- package/dist/schema/dexcost-task.v1.json +160 -0
- package/dist/schema/validate.d.ts +15 -0
- package/dist/schema/validate.d.ts.map +1 -0
- package/dist/schema/validate.js +87 -0
- package/dist/schema/validate.js.map +1 -0
- package/dist/security/redaction.d.ts +55 -0
- package/dist/security/redaction.d.ts.map +1 -0
- package/dist/security/redaction.js +144 -0
- package/dist/security/redaction.js.map +1 -0
- package/dist/transport/buffer.d.ts +117 -0
- package/dist/transport/buffer.d.ts.map +1 -0
- package/dist/transport/buffer.js +759 -0
- package/dist/transport/buffer.js.map +1 -0
- package/dist/transport/pusher.d.ts +89 -0
- package/dist/transport/pusher.d.ts.map +1 -0
- package/dist/transport/pusher.js +323 -0
- package/dist/transport/pusher.js.map +1 -0
- package/package.json +93 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Development mode console output for dexcost.
|
|
3
|
+
*
|
|
4
|
+
* When DEXCOST_ENV=development or environment: "development" is passed,
|
|
5
|
+
* every recorded event is printed to stderr with a formatted summary.
|
|
6
|
+
*/
|
|
7
|
+
import type { CostEvent, Task } from "./core/models.js";
|
|
8
|
+
export declare function isDevMode(): boolean;
|
|
9
|
+
export declare function enableDevMode(): void;
|
|
10
|
+
export declare function logEvent(event: CostEvent, taskType?: string): void;
|
|
11
|
+
export declare function logTaskComplete(task: Task): void;
|
|
12
|
+
//# sourceMappingURL=dev-console.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-console.d.ts","sourceRoot":"","sources":["../src/dev-console.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAIxD,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,GAAE,MAAW,GAAG,IAAI,CAiCtE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAYhD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Development mode console output for dexcost.
|
|
3
|
+
*
|
|
4
|
+
* When DEXCOST_ENV=development or environment: "development" is passed,
|
|
5
|
+
* every recorded event is printed to stderr with a formatted summary.
|
|
6
|
+
*/
|
|
7
|
+
let _devMode = false;
|
|
8
|
+
export function isDevMode() {
|
|
9
|
+
return _devMode;
|
|
10
|
+
}
|
|
11
|
+
export function enableDevMode() {
|
|
12
|
+
_devMode = true;
|
|
13
|
+
print("\x1b[36m[dexcost]\x1b[0m dev mode — cloud sync disabled");
|
|
14
|
+
}
|
|
15
|
+
export function logEvent(event, taskType = "") {
|
|
16
|
+
if (!_devMode)
|
|
17
|
+
return;
|
|
18
|
+
const cost = event.costUsd;
|
|
19
|
+
const taskTag = taskType ? ` \x1b[90m(task: ${taskType})\x1b[0m` : "";
|
|
20
|
+
if (event.eventType === "llm_call") {
|
|
21
|
+
const provider = event.provider ?? "?";
|
|
22
|
+
const model = event.model ?? "?";
|
|
23
|
+
const inTok = event.inputTokens ?? 0;
|
|
24
|
+
const outTok = event.outputTokens ?? 0;
|
|
25
|
+
const cached = event.cachedTokens ?? 0;
|
|
26
|
+
const retryTag = event.isRetry ? " \x1b[33m(retry)\x1b[0m" : "";
|
|
27
|
+
const cacheTag = cached > 0 ? ` cached: ${cached.toLocaleString()}` : "";
|
|
28
|
+
print(`\x1b[32m✓\x1b[0m llm_call ${provider}/${model} ` +
|
|
29
|
+
`${inTok.toLocaleString()} in / ${outTok.toLocaleString()} out${cacheTag} ` +
|
|
30
|
+
`$${cost}${retryTag}${taskTag}`);
|
|
31
|
+
}
|
|
32
|
+
else if (event.eventType === "external_cost" || event.eventType === "compute_cost") {
|
|
33
|
+
const service = event.serviceName ?? "unknown";
|
|
34
|
+
if (event.costConfidence === "unknown" || cost === 0) {
|
|
35
|
+
print(`\x1b[33m⚠\x1b[0m ${event.eventType} ${service} ` +
|
|
36
|
+
`$0.00 \x1b[33m(no rate configured)\x1b[0m${taskTag}`);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
print(`\x1b[32m✓\x1b[0m ${event.eventType} ${service} $${cost}${taskTag}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else if (event.eventType === "retry_marker") {
|
|
43
|
+
const reason = event.retryReason ?? "unknown";
|
|
44
|
+
print(`\x1b[33m↻\x1b[0m retry_marker reason: ${reason} $${cost}${taskTag}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function logTaskComplete(task) {
|
|
48
|
+
if (!_devMode)
|
|
49
|
+
return;
|
|
50
|
+
let retryInfo = "";
|
|
51
|
+
if (task.retryCount > 0) {
|
|
52
|
+
retryInfo = ` retries: ${task.retryCount} retry cost: $${task.retryCostUsd}`;
|
|
53
|
+
}
|
|
54
|
+
print(`\x1b[36m✓\x1b[0m task ${task.status} ${task.taskType} ` +
|
|
55
|
+
`total: $${task.totalCostUsd}${retryInfo}`);
|
|
56
|
+
}
|
|
57
|
+
function print(msg) {
|
|
58
|
+
process.stderr.write(`\x1b[36m[dexcost]\x1b[0m ${msg}\n`);
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=dev-console.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-console.js","sourceRoot":"","sources":["../src/dev-console.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dexcost TypeScript SDK — Agent Unit Economics for Node.js.
|
|
3
|
+
*
|
|
4
|
+
* Tracks LLM costs, non-LLM service fees, retry waste, and attributes
|
|
5
|
+
* them to customers, projects, and workflows.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { CostTracker } from 'dexcost';
|
|
10
|
+
*
|
|
11
|
+
* const tracker = new CostTracker();
|
|
12
|
+
* await tracker.track({ taskType: 'summarize', customerId: 'acme' }, async (task) => {
|
|
13
|
+
* task.recordLlmCall('openai', 'gpt-4o', 800, 150);
|
|
14
|
+
* task.recordCost('pdf_parser', 0.002);
|
|
15
|
+
* });
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export { CostTracker, TrackedTask } from "./core/tracker.js";
|
|
19
|
+
export type { TrackerOptions } from "./core/tracker.js";
|
|
20
|
+
export { init, getTracker, globalTrack as track, globalFlush as flush, globalClose as close, globalCloseAsync as closeAsync, setApiKey, } from "./core/tracker.js";
|
|
21
|
+
export { getCurrentTask, runWithTask, setContext, getContext, clearContext, } from "./core/context.js";
|
|
22
|
+
export type { DexcostContext } from "./core/context.js";
|
|
23
|
+
export { createTask, createCostEvent, taskToDict, eventToDict, taskFromDict, eventFromDict, } from "./core/models.js";
|
|
24
|
+
export type { Task, CostEvent, TaskStatus, EventType, CostConfidence, PricingSource, } from "./core/models.js";
|
|
25
|
+
export { validateApiKey, resolveConfig, InvalidAPIKeyError, } from "./core/config.js";
|
|
26
|
+
export type { KeyType, StorageMode, ResolvedConfig } from "./core/config.js";
|
|
27
|
+
export { createAutoTask, needsAutoTask } from "./core/auto-task.js";
|
|
28
|
+
export { isDevMode } from "./dev-console.js";
|
|
29
|
+
export { EventBuffer } from "./transport/buffer.js";
|
|
30
|
+
export { EventPusher } from "./transport/pusher.js";
|
|
31
|
+
export { redactDict, hashValue, enforceMetadataLimit, scrubUrl, } from "./security/redaction.js";
|
|
32
|
+
export { PricingEngine } from "./pricing/engine.js";
|
|
33
|
+
export type { CostResult } from "./pricing/engine.js";
|
|
34
|
+
export { RateRegistry } from "./pricing/rates.js";
|
|
35
|
+
export type { RateEntry } from "./pricing/rates.js";
|
|
36
|
+
export { RetryHeuristicEngine, TRANSIENT_ERRORS, ERROR_LIKELIHOODS } from "./core/heuristics.js";
|
|
37
|
+
export type { HeuristicMatch } from "./core/heuristics.js";
|
|
38
|
+
export { ALL_SUPPORTED_INSTRUMENTS } from "./instruments/index.js";
|
|
39
|
+
export type { InstrumentName } from "./instruments/index.js";
|
|
40
|
+
export { createExpressMiddleware } from "./middleware/express.js";
|
|
41
|
+
export type { ExpressMiddlewareOptions } from "./middleware/express.js";
|
|
42
|
+
export { SessionManager } from "./core/session.js";
|
|
43
|
+
export { ServiceCatalog } from "./pricing/service-catalog.js";
|
|
44
|
+
export type { ServiceEntry, CostExtractionResult } from "./pricing/service-catalog.js";
|
|
45
|
+
export { registerDomainRate, getDomainRates, clearDomainRates, trackHttp, untrackHttp, getRecordedEvents, clearRecordedEvents, getServiceCatalog, resetServiceCatalog, getSessionManager, trackBrowser, getBrowserEvents, clearBrowserEvents, lambdaCost, getSupportedRegions, } from "./adapters/index.js";
|
|
46
|
+
export type { TrackBrowserOptions, LambdaCostResult, LambdaCostDetails, } from "./adapters/index.js";
|
|
47
|
+
export { wrapLambdaHandler, wrapCloudRunHandler, wrapCloudFunctionsHandler, wrapAzureFunctionsHandler, wrapVercelHandler, } from "./adapters/compute-wrap.js";
|
|
48
|
+
export { wrapModalHandler, wrapRunpodHandler, wrapReplicateHandler, } from "./adapters/gpu-wrap.js";
|
|
49
|
+
export { DexcostCallbackHandler } from "./integrations/langchain.js";
|
|
50
|
+
export { validate } from "./schema/validate.js";
|
|
51
|
+
export { TrackedOpenAI, TrackedAnthropic } from "./clients.js";
|
|
52
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dexcost TypeScript SDK — Agent Unit Economics for Node.js.
|
|
3
|
+
*
|
|
4
|
+
* Tracks LLM costs, non-LLM service fees, retry waste, and attributes
|
|
5
|
+
* them to customers, projects, and workflows.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { CostTracker } from 'dexcost';
|
|
10
|
+
*
|
|
11
|
+
* const tracker = new CostTracker();
|
|
12
|
+
* await tracker.track({ taskType: 'summarize', customerId: 'acme' }, async (task) => {
|
|
13
|
+
* task.recordLlmCall('openai', 'gpt-4o', 800, 150);
|
|
14
|
+
* task.recordCost('pdf_parser', 0.002);
|
|
15
|
+
* });
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
// Core
|
|
19
|
+
export { CostTracker, TrackedTask } from "./core/tracker.js";
|
|
20
|
+
// Singleton / init pattern
|
|
21
|
+
export { init, getTracker, globalTrack as track, globalFlush as flush, globalClose as close, globalCloseAsync as closeAsync, setApiKey, } from "./core/tracker.js";
|
|
22
|
+
export { getCurrentTask, runWithTask, setContext, getContext, clearContext, } from "./core/context.js";
|
|
23
|
+
export { createTask, createCostEvent, taskToDict, eventToDict, taskFromDict, eventFromDict, } from "./core/models.js";
|
|
24
|
+
// Configuration / API-key validation
|
|
25
|
+
export { validateApiKey, resolveConfig, InvalidAPIKeyError, } from "./core/config.js";
|
|
26
|
+
// Auto-task
|
|
27
|
+
export { createAutoTask, needsAutoTask } from "./core/auto-task.js";
|
|
28
|
+
// Dev Mode
|
|
29
|
+
export { isDevMode } from "./dev-console.js";
|
|
30
|
+
// Transport
|
|
31
|
+
export { EventBuffer } from "./transport/buffer.js";
|
|
32
|
+
export { EventPusher } from "./transport/pusher.js";
|
|
33
|
+
// Security
|
|
34
|
+
export { redactDict, hashValue, enforceMetadataLimit, scrubUrl, } from "./security/redaction.js";
|
|
35
|
+
// Pricing
|
|
36
|
+
export { PricingEngine } from "./pricing/engine.js";
|
|
37
|
+
// Rate Registry
|
|
38
|
+
export { RateRegistry } from "./pricing/rates.js";
|
|
39
|
+
// Retry Heuristics
|
|
40
|
+
export { RetryHeuristicEngine, TRANSIENT_ERRORS, ERROR_LIKELIHOODS } from "./core/heuristics.js";
|
|
41
|
+
// Instruments
|
|
42
|
+
export { ALL_SUPPORTED_INSTRUMENTS } from "./instruments/index.js";
|
|
43
|
+
// Middleware
|
|
44
|
+
export { createExpressMiddleware } from "./middleware/express.js";
|
|
45
|
+
// Session
|
|
46
|
+
export { SessionManager } from "./core/session.js";
|
|
47
|
+
// Service Catalog
|
|
48
|
+
export { ServiceCatalog } from "./pricing/service-catalog.js";
|
|
49
|
+
// Adapters
|
|
50
|
+
export { registerDomainRate, getDomainRates, clearDomainRates, trackHttp, untrackHttp, getRecordedEvents, clearRecordedEvents, getServiceCatalog, resetServiceCatalog, getSessionManager, trackBrowser, getBrowserEvents, clearBrowserEvents, lambdaCost, getSupportedRegions, } from "./adapters/index.js";
|
|
51
|
+
// Compute handler wraps — serverless capture (Phase 1 compute foundation).
|
|
52
|
+
export { wrapLambdaHandler, wrapCloudRunHandler, wrapCloudFunctionsHandler, wrapAzureFunctionsHandler, wrapVercelHandler, } from "./adapters/compute-wrap.js";
|
|
53
|
+
// GPU handler wraps — serverless GPU capture (Phase 2 GPU foundation).
|
|
54
|
+
export { wrapModalHandler, wrapRunpodHandler, wrapReplicateHandler, } from "./adapters/gpu-wrap.js";
|
|
55
|
+
// Integrations
|
|
56
|
+
export { DexcostCallbackHandler } from "./integrations/langchain.js";
|
|
57
|
+
// Schema Validation
|
|
58
|
+
export { validate } from "./schema/validate.js";
|
|
59
|
+
// Client Wrappers
|
|
60
|
+
export { TrackedOpenAI, TrackedAnthropic } from "./clients.js";
|
|
61
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO;AACP,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG7D,2BAA2B;AAC3B,OAAO,EACL,IAAI,EACJ,UAAU,EACV,WAAW,IAAI,KAAK,EACpB,WAAW,IAAI,KAAK,EACpB,WAAW,IAAI,KAAK,EACpB,gBAAgB,IAAI,UAAU,EAC9B,SAAS,GACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,EACd,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,UAAU,EACV,eAAe,EACf,UAAU,EACV,WAAW,EACX,YAAY,EACZ,aAAa,GACd,MAAM,kBAAkB,CAAC;AAU1B,qCAAqC;AACrC,OAAO,EACL,cAAc,EACd,aAAa,EACb,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAG1B,YAAY;AACZ,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpE,WAAW;AACX,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,WAAW;AACX,OAAO,EACL,UAAU,EACV,SAAS,EACT,oBAAoB,EACpB,QAAQ,GACT,MAAM,yBAAyB,CAAC;AAEjC,UAAU;AACV,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,mBAAmB;AACnB,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGjG,cAAc;AACd,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,aAAa;AACb,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAGlE,UAAU;AACV,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAG9D,WAAW;AACX,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAO7B,2EAA2E;AAC3E,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAEpC,uEAAuE;AACvE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,eAAe;AACf,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,oBAAoB;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,kBAAkB;AAClB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic auto-instrumentation for dexcost TypeScript SDK.
|
|
3
|
+
*
|
|
4
|
+
* Monkey-patches `Anthropic.Messages.prototype.create` to automatically
|
|
5
|
+
* record cost events and aggregate token usage on the active task context.
|
|
6
|
+
*
|
|
7
|
+
* Supports both non-streaming and streaming responses.
|
|
8
|
+
*/
|
|
9
|
+
import type { EventBuffer } from "../transport/buffer.js";
|
|
10
|
+
import type { PricingEngine } from "../pricing/engine.js";
|
|
11
|
+
/** Test helper: inject a mock Messages class so tests avoid importing @anthropic-ai/sdk. */
|
|
12
|
+
export declare function _setMessagesClass(cls: any): void;
|
|
13
|
+
/** Test helper: reset to real module resolution. */
|
|
14
|
+
export declare function _resetMessagesClass(): void;
|
|
15
|
+
/**
|
|
16
|
+
* Patch `Anthropic.Messages.prototype.create` to record cost events.
|
|
17
|
+
*
|
|
18
|
+
* If `@anthropic-ai/sdk` is not installed and no mock class is injected, the
|
|
19
|
+
* dynamic import will throw and the function will reject.
|
|
20
|
+
*/
|
|
21
|
+
export declare function instrumentAnthropic(pricing: PricingEngine, buffer: EventBuffer): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Remove the monkey-patch and restore the original `create` method.
|
|
24
|
+
*/
|
|
25
|
+
export declare function uninstrumentAnthropic(): void;
|
|
26
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/instruments/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,sBAAsB,CAAC;AAYtE,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAEhD;AAED,oDAAoD;AACpD,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAmDf;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAW5C"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic auto-instrumentation for dexcost TypeScript SDK.
|
|
3
|
+
*
|
|
4
|
+
* Monkey-patches `Anthropic.Messages.prototype.create` to automatically
|
|
5
|
+
* record cost events and aggregate token usage on the active task context.
|
|
6
|
+
*
|
|
7
|
+
* Supports both non-streaming and streaming responses.
|
|
8
|
+
*/
|
|
9
|
+
import { randomUUID } from "node:crypto";
|
|
10
|
+
import { createCostEvent } from "../core/models.js";
|
|
11
|
+
import { getCurrentTask } from "../core/context.js";
|
|
12
|
+
import { createAutoTask } from "../core/auto-task.js";
|
|
13
|
+
import { registerInstrument } from "./index.js";
|
|
14
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
15
|
+
let _patched = false;
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
17
|
+
let _original = null;
|
|
18
|
+
let _messagesClass = null;
|
|
19
|
+
let _buffer = null;
|
|
20
|
+
let _pricing = null;
|
|
21
|
+
/** Test helper: inject a mock Messages class so tests avoid importing @anthropic-ai/sdk. */
|
|
22
|
+
export function _setMessagesClass(cls) {
|
|
23
|
+
_messagesClass = cls;
|
|
24
|
+
}
|
|
25
|
+
/** Test helper: reset to real module resolution. */
|
|
26
|
+
export function _resetMessagesClass() {
|
|
27
|
+
_messagesClass = null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Patch `Anthropic.Messages.prototype.create` to record cost events.
|
|
31
|
+
*
|
|
32
|
+
* If `@anthropic-ai/sdk` is not installed and no mock class is injected, the
|
|
33
|
+
* dynamic import will throw and the function will reject.
|
|
34
|
+
*/
|
|
35
|
+
export async function instrumentAnthropic(pricing, buffer) {
|
|
36
|
+
if (_patched)
|
|
37
|
+
return;
|
|
38
|
+
let MessagesProto;
|
|
39
|
+
if (_messagesClass) {
|
|
40
|
+
MessagesProto = _messagesClass.prototype;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// @anthropic-ai/sdk is an optional peer dependency; the dynamic import
|
|
44
|
+
// only succeeds at runtime if the user has installed it.
|
|
45
|
+
// @ts-ignore -- @anthropic-ai/sdk is an optional peer dependency
|
|
46
|
+
const anthropicModule = await import("@anthropic-ai/sdk");
|
|
47
|
+
const Anthropic = anthropicModule.default ?? anthropicModule;
|
|
48
|
+
MessagesProto = Anthropic.Messages.prototype;
|
|
49
|
+
}
|
|
50
|
+
_original = MessagesProto.create;
|
|
51
|
+
_buffer = buffer;
|
|
52
|
+
_pricing = pricing;
|
|
53
|
+
MessagesProto.create = async function (body, options) {
|
|
54
|
+
let task = getCurrentTask();
|
|
55
|
+
// Auto-create a task when no explicit task is active so LLM costs
|
|
56
|
+
// are never silently lost (mirrors Python create_auto_task).
|
|
57
|
+
if (!task) {
|
|
58
|
+
task = createAutoTask("anthropic.messages");
|
|
59
|
+
_buffer?.upsertTask(task);
|
|
60
|
+
}
|
|
61
|
+
const startTime = performance.now();
|
|
62
|
+
if (body?.stream) {
|
|
63
|
+
const rawStream = await _original.call(this, body, options);
|
|
64
|
+
return wrapStream(rawStream, task, startTime);
|
|
65
|
+
}
|
|
66
|
+
const response = await _original.call(this, body, options);
|
|
67
|
+
try {
|
|
68
|
+
const latencyMs = Math.round(performance.now() - startTime);
|
|
69
|
+
recordEvent(response, task, latencyMs);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// dexcost errors must never crash user code
|
|
73
|
+
}
|
|
74
|
+
return response;
|
|
75
|
+
};
|
|
76
|
+
_patched = true;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Remove the monkey-patch and restore the original `create` method.
|
|
80
|
+
*/
|
|
81
|
+
export function uninstrumentAnthropic() {
|
|
82
|
+
if (!_patched || !_original)
|
|
83
|
+
return;
|
|
84
|
+
if (_messagesClass) {
|
|
85
|
+
_messagesClass.prototype.create = _original;
|
|
86
|
+
}
|
|
87
|
+
_original = null;
|
|
88
|
+
_buffer = null;
|
|
89
|
+
_pricing = null;
|
|
90
|
+
_patched = false;
|
|
91
|
+
}
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
// Internal helpers
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
function recordEvent(response, task, latencyMs) {
|
|
96
|
+
if (!_buffer || !_pricing)
|
|
97
|
+
return;
|
|
98
|
+
const model = response?.model ?? "unknown";
|
|
99
|
+
const usage = response?.usage;
|
|
100
|
+
const hasUsage = usage != null;
|
|
101
|
+
const inputTokens = usage?.input_tokens ?? 0;
|
|
102
|
+
const outputTokens = usage?.output_tokens ?? 0;
|
|
103
|
+
const cachedTokens = usage?.cache_read_input_tokens ?? 0;
|
|
104
|
+
const cacheCreationTokens = usage?.cache_creation_input_tokens ?? 0;
|
|
105
|
+
let costUsd = 0;
|
|
106
|
+
let costConfidence = "estimated";
|
|
107
|
+
let pricingSource = "unknown";
|
|
108
|
+
if (hasUsage) {
|
|
109
|
+
const result = _pricing.getCost(model, inputTokens, outputTokens, cachedTokens, cacheCreationTokens);
|
|
110
|
+
costUsd = result.costUsd;
|
|
111
|
+
costConfidence = result.costConfidence;
|
|
112
|
+
pricingSource = result.pricingSource;
|
|
113
|
+
}
|
|
114
|
+
const details = {};
|
|
115
|
+
if (cacheCreationTokens > 0) {
|
|
116
|
+
details["cache_creation_input_tokens"] = cacheCreationTokens;
|
|
117
|
+
}
|
|
118
|
+
const event = createCostEvent({
|
|
119
|
+
eventId: randomUUID(),
|
|
120
|
+
taskId: task.taskId,
|
|
121
|
+
eventType: "llm_call",
|
|
122
|
+
costUsd,
|
|
123
|
+
costConfidence,
|
|
124
|
+
pricingSource,
|
|
125
|
+
provider: "anthropic",
|
|
126
|
+
model,
|
|
127
|
+
inputTokens,
|
|
128
|
+
outputTokens,
|
|
129
|
+
cachedTokens,
|
|
130
|
+
latencyMs,
|
|
131
|
+
isRetry: false,
|
|
132
|
+
details,
|
|
133
|
+
});
|
|
134
|
+
_buffer.addEvent(event);
|
|
135
|
+
task.llmCostUsd += costUsd;
|
|
136
|
+
task.totalCostUsd += costUsd;
|
|
137
|
+
task.totalInputTokens += inputTokens;
|
|
138
|
+
task.totalOutputTokens += outputTokens;
|
|
139
|
+
task.totalCachedTokens += cachedTokens;
|
|
140
|
+
_buffer.upsertTask(task);
|
|
141
|
+
}
|
|
142
|
+
function wrapStream(rawStream, task, startTime) {
|
|
143
|
+
let model = "unknown";
|
|
144
|
+
let inputTokens = 0;
|
|
145
|
+
let outputTokens = 0;
|
|
146
|
+
let cachedTokens = 0;
|
|
147
|
+
let cacheCreationTokens = 0;
|
|
148
|
+
let hasUsage = false;
|
|
149
|
+
let finalized = false;
|
|
150
|
+
return {
|
|
151
|
+
[Symbol.asyncIterator]() {
|
|
152
|
+
const iter = rawStream[Symbol.asyncIterator]();
|
|
153
|
+
return {
|
|
154
|
+
async next() {
|
|
155
|
+
const result = await iter.next();
|
|
156
|
+
if (result.done) {
|
|
157
|
+
if (finalized)
|
|
158
|
+
return result;
|
|
159
|
+
finalized = true;
|
|
160
|
+
try {
|
|
161
|
+
const latencyMs = Math.round(performance.now() - startTime);
|
|
162
|
+
if (hasUsage && _pricing && _buffer) {
|
|
163
|
+
const costResult = _pricing.getCost(model, inputTokens, outputTokens, cachedTokens, cacheCreationTokens);
|
|
164
|
+
const details = {};
|
|
165
|
+
if (cacheCreationTokens > 0) {
|
|
166
|
+
details["cache_creation_input_tokens"] = cacheCreationTokens;
|
|
167
|
+
}
|
|
168
|
+
const event = createCostEvent({
|
|
169
|
+
eventId: randomUUID(),
|
|
170
|
+
taskId: task.taskId,
|
|
171
|
+
eventType: "llm_call",
|
|
172
|
+
costUsd: costResult.costUsd,
|
|
173
|
+
costConfidence: costResult.costConfidence,
|
|
174
|
+
pricingSource: costResult.pricingSource,
|
|
175
|
+
provider: "anthropic",
|
|
176
|
+
model,
|
|
177
|
+
inputTokens,
|
|
178
|
+
outputTokens,
|
|
179
|
+
cachedTokens,
|
|
180
|
+
latencyMs,
|
|
181
|
+
isRetry: false,
|
|
182
|
+
details,
|
|
183
|
+
});
|
|
184
|
+
_buffer.addEvent(event);
|
|
185
|
+
task.llmCostUsd += costResult.costUsd;
|
|
186
|
+
task.totalCostUsd += costResult.costUsd;
|
|
187
|
+
task.totalInputTokens += inputTokens;
|
|
188
|
+
task.totalOutputTokens += outputTokens;
|
|
189
|
+
task.totalCachedTokens += cachedTokens;
|
|
190
|
+
_buffer.upsertTask(task);
|
|
191
|
+
}
|
|
192
|
+
else if (_buffer) {
|
|
193
|
+
const event = createCostEvent({
|
|
194
|
+
eventId: randomUUID(),
|
|
195
|
+
taskId: task.taskId,
|
|
196
|
+
eventType: "llm_call",
|
|
197
|
+
costUsd: 0,
|
|
198
|
+
costConfidence: "estimated",
|
|
199
|
+
pricingSource: "unknown",
|
|
200
|
+
provider: "anthropic",
|
|
201
|
+
model,
|
|
202
|
+
inputTokens: 0,
|
|
203
|
+
outputTokens: 0,
|
|
204
|
+
latencyMs,
|
|
205
|
+
isRetry: false,
|
|
206
|
+
});
|
|
207
|
+
_buffer.addEvent(event);
|
|
208
|
+
_buffer.upsertTask(task);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
// dexcost errors must never crash user code
|
|
213
|
+
}
|
|
214
|
+
return result;
|
|
215
|
+
}
|
|
216
|
+
const chunk = result.value;
|
|
217
|
+
// Anthropic streaming event types
|
|
218
|
+
if (chunk?.type === "message_start" && chunk?.message) {
|
|
219
|
+
if (chunk.message.model)
|
|
220
|
+
model = chunk.message.model;
|
|
221
|
+
if (chunk.message.usage) {
|
|
222
|
+
hasUsage = true;
|
|
223
|
+
inputTokens = chunk.message.usage.input_tokens ?? inputTokens;
|
|
224
|
+
cachedTokens =
|
|
225
|
+
chunk.message.usage.cache_read_input_tokens ?? cachedTokens;
|
|
226
|
+
cacheCreationTokens =
|
|
227
|
+
chunk.message.usage.cache_creation_input_tokens ?? cacheCreationTokens;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (chunk?.type === "message_delta" && chunk?.usage) {
|
|
231
|
+
hasUsage = true;
|
|
232
|
+
outputTokens = chunk.usage.output_tokens ?? outputTokens;
|
|
233
|
+
}
|
|
234
|
+
return result;
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
// Self-register so importing this module is enough to make the instrument available.
|
|
241
|
+
registerInstrument("anthropic", instrumentAnthropic, uninstrumentAnthropic);
|
|
242
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/instruments/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS Bedrock auto-instrumentation for dexcost TypeScript SDK.
|
|
3
|
+
*
|
|
4
|
+
* Monkey-patches `BedrockRuntimeClient.prototype.send` to capture
|
|
5
|
+
* InvokeModel and InvokeModelWithResponseStream commands, automatically
|
|
6
|
+
* recording cost events and aggregating token usage on the active task context.
|
|
7
|
+
*
|
|
8
|
+
* Token usage is parsed from the response body JSON and varies by model
|
|
9
|
+
* family (Anthropic, Amazon Titan, Meta Llama, Cohere, Mistral, AI21).
|
|
10
|
+
*/
|
|
11
|
+
import type { EventBuffer } from "../transport/buffer.js";
|
|
12
|
+
import type { PricingEngine } from "../pricing/engine.js";
|
|
13
|
+
/** Test helper: inject a mock BedrockRuntimeClient class so tests avoid importing @aws-sdk/client-bedrock-runtime. */
|
|
14
|
+
export declare function _setClientClass(cls: any): void;
|
|
15
|
+
/** Test helper: reset to real module resolution. */
|
|
16
|
+
export declare function _resetClientClass(): void;
|
|
17
|
+
/**
|
|
18
|
+
* Patch `BedrockRuntimeClient.prototype.send` to record cost events for
|
|
19
|
+
* InvokeModelCommand calls.
|
|
20
|
+
*
|
|
21
|
+
* If `@aws-sdk/client-bedrock-runtime` is not installed and no mock class is
|
|
22
|
+
* injected, the dynamic import will throw and the function will reject.
|
|
23
|
+
*/
|
|
24
|
+
export declare function instrumentBedrock(pricing: PricingEngine, buffer: EventBuffer): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Remove the monkey-patch and restore the original `send` method.
|
|
27
|
+
*/
|
|
28
|
+
export declare function uninstrumentBedrock(): void;
|
|
29
|
+
//# sourceMappingURL=bedrock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bedrock.d.ts","sourceRoot":"","sources":["../../src/instruments/bedrock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,sBAAsB,CAAC;AAYtE,sHAAsH;AACtH,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAE9C;AAED,oDAAoD;AACpD,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAoDf;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAW1C"}
|