@tensorcost/sdk 0.3.1 → 0.6.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/CHANGELOG.md +74 -0
- package/README.md +65 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +22 -0
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +20 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +22 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/anthropic.d.ts +2 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +104 -12
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/bedrock.d.ts +48 -0
- package/dist/providers/bedrock.d.ts.map +1 -0
- package/dist/providers/bedrock.js +293 -0
- package/dist/providers/bedrock.js.map +1 -0
- package/dist/providers/detect.d.ts +9 -3
- package/dist/providers/detect.d.ts.map +1 -1
- package/dist/providers/detect.js +39 -6
- package/dist/providers/detect.js.map +1 -1
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +2 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts +2 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +158 -14
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/vertex.d.ts +14 -0
- package/dist/providers/vertex.d.ts.map +1 -0
- package/dist/providers/vertex.js +167 -0
- package/dist/providers/vertex.js.map +1 -0
- package/dist/proxy-client.d.ts +24 -0
- package/dist/proxy-client.d.ts.map +1 -1
- package/dist/proxy-client.js +66 -1
- package/dist/proxy-client.js.map +1 -1
- package/dist/transport.d.ts +3 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +9 -2
- package/dist/transport.js.map +1 -1
- package/dist/types.d.ts +108 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/wrap.d.ts +8 -0
- package/dist/wrap.d.ts.map +1 -1
- package/dist/wrap.js +38 -3
- package/dist/wrap.js.map +1 -1
- package/package.json +17 -2
package/dist/proxy-client.js
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
* message so the provider wrapper can activate the direct-provider
|
|
30
30
|
* fallback.
|
|
31
31
|
*/
|
|
32
|
-
import { TensorCostError, TensorCostNetworkError, TensorCostTimeoutError, TensorCostProxyError, TensorCostQuotaError, TensorCostProviderError, } from "./errors.js";
|
|
32
|
+
import { TensorCostError, TensorCostNetworkError, TensorCostTimeoutError, TensorCostProxyError, TensorCostQuotaError, TensorCostProviderError, TensorCostRunBudgetExceededError, } from "./errors.js";
|
|
33
33
|
import { DEFAULT_RETRY_CONFIG, computeDelay, retryAfterMs, sleep, } from "./retry.js";
|
|
34
34
|
import { emitEvent } from "./telemetry.js";
|
|
35
35
|
const PROXY_CHAT_PATH = "/api/inference-proxy/v1/chat/completions";
|
|
@@ -61,6 +61,12 @@ export async function proxyRequest(opts) {
|
|
|
61
61
|
if (opts.environment) {
|
|
62
62
|
headers["x-tc-environment"] = opts.environment;
|
|
63
63
|
}
|
|
64
|
+
if (opts.agentId) {
|
|
65
|
+
headers["x-tc-agent-id"] = opts.agentId;
|
|
66
|
+
}
|
|
67
|
+
if (opts.workflowId) {
|
|
68
|
+
headers["x-tc-workflow-id"] = opts.workflowId;
|
|
69
|
+
}
|
|
64
70
|
let lastError = null;
|
|
65
71
|
for (let attempt = 0; attempt < retryConfig.maxAttempts; attempt++) {
|
|
66
72
|
const elapsedMs = Date.now() - callStart;
|
|
@@ -238,6 +244,47 @@ export async function proxyRequest(opts) {
|
|
|
238
244
|
});
|
|
239
245
|
throw tcErr;
|
|
240
246
|
}
|
|
247
|
+
// 403 with our own budget code — the run hit its spend cap.
|
|
248
|
+
//
|
|
249
|
+
// Checked before the generic 4xx arm because it is NOT a provider
|
|
250
|
+
// error and, critically, must not lead to the direct-provider
|
|
251
|
+
// fallback. The body is read defensively: a 403 that is not ours
|
|
252
|
+
// (e.g. an auth failure) falls through to the generic arm below.
|
|
253
|
+
if (resp.status === 403) {
|
|
254
|
+
let code;
|
|
255
|
+
let detail;
|
|
256
|
+
try {
|
|
257
|
+
const parsed = (await resp.clone().json());
|
|
258
|
+
const errObj = parsed?.["error"];
|
|
259
|
+
if (errObj && typeof errObj["code"] === "string") {
|
|
260
|
+
code = errObj["code"];
|
|
261
|
+
detail = errObj;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
/* non-JSON 403 — fall through to the generic 4xx arm */
|
|
266
|
+
}
|
|
267
|
+
if (code === "RUN_BUDGET_EXCEEDED") {
|
|
268
|
+
const numOrNull = (v) => typeof v === "number" ? v : null;
|
|
269
|
+
const tcErr = new TensorCostRunBudgetExceededError(typeof detail?.["message"] === "string"
|
|
270
|
+
? `tensorcost: ${detail["message"]}`
|
|
271
|
+
: "tensorcost: agent run spend cap reached", typeof detail?.["workflow_id"] === "string" ? detail["workflow_id"] : null, numOrNull(detail?.["cap_cents"]), numOrNull(detail?.["spent_cents"]), { status: 403, requestId, attempt: attempt + 1 });
|
|
272
|
+
// Not a circuit failure — the proxy is healthy and answered
|
|
273
|
+
// correctly. Counting this would eventually trip the breaker and
|
|
274
|
+
// route the customer straight past their own cap.
|
|
275
|
+
emitEvent(opts.onLifecycleEvent, {
|
|
276
|
+
kind: "on_error",
|
|
277
|
+
provider: opts.provider,
|
|
278
|
+
model: opts.model,
|
|
279
|
+
operation: opts.operation,
|
|
280
|
+
attemptNumber: attempt + 1,
|
|
281
|
+
elapsedMs: Date.now() - callStart,
|
|
282
|
+
errorClass: tcErr.constructor.name,
|
|
283
|
+
status: 403,
|
|
284
|
+
});
|
|
285
|
+
throw tcErr;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
241
288
|
// 4xx (not 429) — provider error forwarded by the proxy. Non-retriable.
|
|
242
289
|
const tcErr = new TensorCostProviderError(`tensorcost: upstream provider returned ${resp.status}`, { status: resp.status, requestId, attempt: attempt + 1 });
|
|
243
290
|
emitEvent(opts.onLifecycleEvent, {
|
|
@@ -255,5 +302,23 @@ export async function proxyRequest(opts) {
|
|
|
255
302
|
// Should be unreachable — every loop arm either returns or throws.
|
|
256
303
|
throw lastError ?? new TensorCostProxyError("tensorcost: max attempts reached");
|
|
257
304
|
}
|
|
305
|
+
/**
|
|
306
|
+
* Should a failed proxy attempt fall back to calling the provider
|
|
307
|
+
* directly?
|
|
308
|
+
*
|
|
309
|
+
* The applied-mode fail-open contract exists so that TensorCost being
|
|
310
|
+
* down never takes the customer's inference down with it. Every transport
|
|
311
|
+
* failure — timeout, network error, 5xx, open circuit — is therefore a
|
|
312
|
+
* "go around us" signal and returns true.
|
|
313
|
+
*
|
|
314
|
+
* A run-budget refusal is the one case where the proxy is healthy and the
|
|
315
|
+
* refusal IS the product. Falling back there would issue the provider call
|
|
316
|
+
* anyway and turn a hard cap into a log line, which is precisely the
|
|
317
|
+
* failure mode the cap was built to eliminate. So it returns false and the
|
|
318
|
+
* error propagates to the caller.
|
|
319
|
+
*/
|
|
320
|
+
export function shouldFallBackToProvider(err) {
|
|
321
|
+
return !(err instanceof TensorCostRunBudgetExceededError);
|
|
322
|
+
}
|
|
258
323
|
export { TensorCostError };
|
|
259
324
|
//# sourceMappingURL=proxy-client.js.map
|
package/dist/proxy-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-client.js","sourceRoot":"","sources":["../src/proxy-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"proxy-client.js","sourceRoot":"","sources":["../src/proxy-client.ts"],"names":[],"mappings":"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"}
|
package/dist/transport.d.ts
CHANGED
|
@@ -23,6 +23,8 @@ import type { Observation } from "./types.js";
|
|
|
23
23
|
export interface TransportOptions {
|
|
24
24
|
baseUrl: string;
|
|
25
25
|
apiKey: string;
|
|
26
|
+
/** Required for token exchange against current inference-proxy DTO. */
|
|
27
|
+
tenantId?: string | null;
|
|
26
28
|
timeoutMs?: number;
|
|
27
29
|
failOpen?: boolean;
|
|
28
30
|
/** Optional fetch override for testing. Defaults to global fetch. */
|
|
@@ -31,6 +33,7 @@ export interface TransportOptions {
|
|
|
31
33
|
export declare class ObservationTransport {
|
|
32
34
|
private readonly baseUrl;
|
|
33
35
|
private readonly apiKey;
|
|
36
|
+
private readonly tenantId;
|
|
34
37
|
private readonly timeoutMs;
|
|
35
38
|
private readonly failOpen;
|
|
36
39
|
private readonly fetchImpl;
|
package/dist/transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAQ9C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAOD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IAEzC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,UAAU,CAA2B;IAC7C,wEAAwE;IACxE,OAAO,CAAC,aAAa,CAAgC;gBAEzC,IAAI,EAAE,gBAAgB;
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAQ9C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAOD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IAEzC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,UAAU,CAA2B;IAC7C,wEAAwE;IACxE,OAAO,CAAC,aAAa,CAAgC;gBAEzC,IAAI,EAAE,gBAAgB;IASlC;;;;OAIG;IACH,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;YAqBtB,OAAO;YAqCP,QAAQ;YAiBR,aAAa;CA+C5B;AAED,eAAO,MAAM,QAAQ;;;CAGpB,CAAC"}
|
package/dist/transport.js
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* (the default) and surfaced via console.warn. The customer's call
|
|
20
20
|
* site never sees an exception.
|
|
21
21
|
*/
|
|
22
|
-
const SDK_VERSION = "tensorcost-node/0.
|
|
22
|
+
const SDK_VERSION = "tensorcost-node/0.6.0";
|
|
23
23
|
const TOKEN_REFRESH_LEEWAY_MS = 60_000;
|
|
24
24
|
const DEFAULT_TOKEN_LIFETIME_MS = 15 * 60_000;
|
|
25
25
|
const MAX_QUEUE_DEPTH = 1024;
|
|
@@ -32,6 +32,7 @@ export class ObservationTransport {
|
|
|
32
32
|
this.tokenInflight = null;
|
|
33
33
|
this.baseUrl = opts.baseUrl.replace(/\/+$/, "");
|
|
34
34
|
this.apiKey = opts.apiKey;
|
|
35
|
+
this.tenantId = opts.tenantId ?? null;
|
|
35
36
|
this.timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
36
37
|
this.failOpen = opts.failOpen ?? true;
|
|
37
38
|
this.fetchImpl = opts.fetchImpl ?? globalThis.fetch.bind(globalThis);
|
|
@@ -108,6 +109,9 @@ export class ObservationTransport {
|
|
|
108
109
|
return this.tokenInflight;
|
|
109
110
|
}
|
|
110
111
|
async exchangeToken() {
|
|
112
|
+
if (!this.tenantId) {
|
|
113
|
+
throw new Error("tensorcost: tenant_id required for token exchange (pass tenantId to wrap() or set TENSORCOST_TENANT_ID)");
|
|
114
|
+
}
|
|
111
115
|
const url = `${this.baseUrl}/api/inference-proxy/sdk-token/exchange`;
|
|
112
116
|
const controller = new AbortController();
|
|
113
117
|
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
@@ -118,7 +122,10 @@ export class ObservationTransport {
|
|
|
118
122
|
"Content-Type": "application/json",
|
|
119
123
|
"User-Agent": SDK_VERSION,
|
|
120
124
|
},
|
|
121
|
-
body: JSON.stringify({
|
|
125
|
+
body: JSON.stringify({
|
|
126
|
+
tenant_id: this.tenantId,
|
|
127
|
+
sdk_long_lived_token: this.apiKey,
|
|
128
|
+
}),
|
|
122
129
|
signal: controller.signal,
|
|
123
130
|
});
|
|
124
131
|
if (!resp.ok) {
|
package/dist/transport.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAC5C,MAAM,uBAAuB,GAAG,MAAM,CAAC;AACvC,MAAM,yBAAyB,GAAG,EAAE,GAAG,MAAM,CAAC;AAC9C,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,kBAAkB,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { LifecycleEventCallback } from "./telemetry.js";
|
|
9
9
|
import type { RetryConfig } from "./retry.js";
|
|
10
|
-
export type Provider = "openai" | "anthropic";
|
|
11
|
-
export type Operation = "chat.completions" | "completions" | "messages";
|
|
10
|
+
export type Provider = "openai" | "anthropic" | "bedrock" | "vertex";
|
|
11
|
+
export type Operation = "chat.completions" | "completions" | "messages" | "bedrock.invoke_model" | "bedrock.converse" | "bedrock.invoke_model_stream" | "bedrock.converse_stream" | "vertex.generate_content" | "vertex.generate_content_stream";
|
|
12
12
|
export type ObservationStatus = "success" | "error";
|
|
13
13
|
/**
|
|
14
14
|
* Wire shape posted to `POST /api/proxy/observation`. Mirrors the
|
|
@@ -47,6 +47,54 @@ export interface Observation {
|
|
|
47
47
|
* did not set `environment`.
|
|
48
48
|
*/
|
|
49
49
|
connection_id?: string;
|
|
50
|
+
/**
|
|
51
|
+
* SDK metadata bag. Merged from wrap-time defaults and per-call
|
|
52
|
+
* withMeta() overrides. The backend stores this verbatim in
|
|
53
|
+
* trace_span.metadata; two well-known keys are indexed for
|
|
54
|
+
* group-by queries:
|
|
55
|
+
* - deployment — git SHA, CI run id, or any operator marker
|
|
56
|
+
* - prompt_template_id — per-call-site template name/version
|
|
57
|
+
*/
|
|
58
|
+
metadata?: Record<string, unknown>;
|
|
59
|
+
/**
|
|
60
|
+
* Per-agent-run cost attribution — agent identity. Optional. Stamped
|
|
61
|
+
* onto the observation envelope when the SDK was constructed with
|
|
62
|
+
* `wrap(client, { agentId: '...' })`, or overridden per-call via
|
|
63
|
+
* `.withMeta({ agentId: '...' })`. Forwarded verbatim by
|
|
64
|
+
* inference-proxy-service's ObservationService onto the Kafka/event-bus
|
|
65
|
+
* envelope; ai-service writes it straight into
|
|
66
|
+
* `ai.ai_spend_events.agent_id` (migration 011 — the column has existed
|
|
67
|
+
* since April 2026 as `agent_id text -- populated by tag propagation
|
|
68
|
+
* (post-MVP)`; this is that propagation).
|
|
69
|
+
*
|
|
70
|
+
* A stable identifier for the *kind* of agent making calls (e.g.
|
|
71
|
+
* "code-review-agent", "support-triage-bot") — set once per wrapped
|
|
72
|
+
* client is the common case, hence the wrap-time default.
|
|
73
|
+
*
|
|
74
|
+
* Unlike `environment` / `connection_id`, this is NOT stored in the
|
|
75
|
+
* `metadata` JSONB bag — it is a dedicated indexed column
|
|
76
|
+
* (`spend_events_tenant_agent_time` partial index), so it is threaded
|
|
77
|
+
* through as its own top-level envelope field the same way
|
|
78
|
+
* `environment` / `connection_id` are.
|
|
79
|
+
*/
|
|
80
|
+
agent_id?: string;
|
|
81
|
+
/**
|
|
82
|
+
* Per-agent-run cost attribution — run identity. Optional. Same
|
|
83
|
+
* plumbing as `agent_id` (see above), landing in
|
|
84
|
+
* `ai.ai_spend_events.workflow_id`.
|
|
85
|
+
*
|
|
86
|
+
* A unique identifier for ONE execution of an agent (e.g. a session id,
|
|
87
|
+
* a job id) — this almost always varies call-to-call within a single
|
|
88
|
+
* wrapped client's lifetime, so the primary way to set it is per-call
|
|
89
|
+
* via `.withMeta({ workflowId: '...' })` rather than at `wrap()` time.
|
|
90
|
+
* A wrap-time default is still supported for the case where one
|
|
91
|
+
* process = one run (e.g. a short-lived batch job).
|
|
92
|
+
*
|
|
93
|
+
* "Cost of one agent run" is defined as
|
|
94
|
+
* `SUM(total_cost_cents) WHERE tenant_id = ? AND workflow_id = ? AND
|
|
95
|
+
* superseded_at IS NULL` — see ai-service's `agent-runs` module.
|
|
96
|
+
*/
|
|
97
|
+
workflow_id?: string;
|
|
50
98
|
}
|
|
51
99
|
export interface WrapOptions {
|
|
52
100
|
/** Long-lived TensorCost API key. Falls back to `TENSORCOST_API_KEY`. */
|
|
@@ -167,6 +215,56 @@ export interface WrapOptions {
|
|
|
167
215
|
* you are using the SDK in a context where the client's key is unavailable.
|
|
168
216
|
*/
|
|
169
217
|
providerApiKey?: string;
|
|
218
|
+
/**
|
|
219
|
+
* Deployment identifier stamped on every observation from this wrapped
|
|
220
|
+
* client. Typically a git SHA, CI run id, or a human-readable release
|
|
221
|
+
* label like `"2026-05-28-hotfix"`.
|
|
222
|
+
*
|
|
223
|
+
* Stored as `metadata.deployment` in the trace_span row. The dashboard's
|
|
224
|
+
* "Group by deployment" view buckets spans by this value so Priya can
|
|
225
|
+
* answer "did my latest deploy change cost?".
|
|
226
|
+
*
|
|
227
|
+
* Falls back to `TENSORCOST_DEPLOYMENT` env var. Leave unset if you don't
|
|
228
|
+
* use deployment-level cost attribution.
|
|
229
|
+
*/
|
|
230
|
+
deployment?: string;
|
|
231
|
+
/**
|
|
232
|
+
* Default prompt-template identifier for every call made through this
|
|
233
|
+
* client. Stored as `metadata.prompt_template_id` on each observation.
|
|
234
|
+
*
|
|
235
|
+
* Per-call overrides are available via `.withMeta({ promptTemplateId })`.
|
|
236
|
+
* The per-call value wins over this wrap-time default.
|
|
237
|
+
*
|
|
238
|
+
* Falls back to `TENSORCOST_PROMPT_TEMPLATE_ID` env var.
|
|
239
|
+
*/
|
|
240
|
+
promptTemplateId?: string;
|
|
241
|
+
/**
|
|
242
|
+
* Stable identifier for the kind of agent making calls through this
|
|
243
|
+
* client (e.g. "code-review-agent"). Stamped on every observation as
|
|
244
|
+
* the top-level `agent_id` field — NOT the metadata bag — and lands in
|
|
245
|
+
* `ai.ai_spend_events.agent_id`.
|
|
246
|
+
*
|
|
247
|
+
* Per-call overrides are available via `.withMeta({ agentId })` on the
|
|
248
|
+
* OpenAI and Anthropic wrappers. Bedrock has no per-call hook (Smithy
|
|
249
|
+
* middleware is registered once at wrap() time), so for Bedrock this
|
|
250
|
+
* wrap-time value is the only way to set `agent_id`.
|
|
251
|
+
*
|
|
252
|
+
* Falls back to `TENSORCOST_AGENT_ID` env var.
|
|
253
|
+
*/
|
|
254
|
+
agentId?: string;
|
|
255
|
+
/**
|
|
256
|
+
* Identifier for ONE execution of an agent (a run/session id). Stamped
|
|
257
|
+
* on every observation as the top-level `workflow_id` field and lands
|
|
258
|
+
* in `ai.ai_spend_events.workflow_id`.
|
|
259
|
+
*
|
|
260
|
+
* Because a run id almost always changes between calls, the primary
|
|
261
|
+
* way to set this is per-call via `.withMeta({ workflowId })`. This
|
|
262
|
+
* wrap-time default exists for the one-process-per-run case (batch
|
|
263
|
+
* jobs, Bedrock clients with no per-call hook).
|
|
264
|
+
*
|
|
265
|
+
* Falls back to `TENSORCOST_WORKFLOW_ID` env var.
|
|
266
|
+
*/
|
|
267
|
+
workflowId?: string;
|
|
170
268
|
}
|
|
171
269
|
export interface ResolvedConfig {
|
|
172
270
|
apiKey: string;
|
|
@@ -200,5 +298,13 @@ export interface ResolvedConfig {
|
|
|
200
298
|
onLifecycleEvent: LifecycleEventCallback | undefined;
|
|
201
299
|
failOpenEnabled: boolean;
|
|
202
300
|
providerApiKey: string | null;
|
|
301
|
+
/** Resolved deployment tag. `null` when not configured. */
|
|
302
|
+
deployment: string | null;
|
|
303
|
+
/** Resolved default prompt-template id. `null` when not configured. */
|
|
304
|
+
promptTemplateId: string | null;
|
|
305
|
+
/** Resolved wrap-time agent id default. `null` when not configured. */
|
|
306
|
+
agentId: string | null;
|
|
307
|
+
/** Resolved wrap-time workflow (run) id default. `null` when not configured. */
|
|
308
|
+
workflowId: string | null;
|
|
203
309
|
}
|
|
204
310
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/wrap.d.ts
CHANGED
|
@@ -14,6 +14,14 @@
|
|
|
14
14
|
* Hardening (v0.4.0): applied-mode requests now go through the proxy-client
|
|
15
15
|
* module which adds retries, timeouts, typed errors, telemetry hooks, and
|
|
16
16
|
* the fail-open circuit breaker.
|
|
17
|
+
*
|
|
18
|
+
* Bedrock (v0.4.0): observe-only. Applied mode is not supported for Bedrock —
|
|
19
|
+
* wrap(bedrockClient, { appliedMode: true }) throws TensorCostConfigError.
|
|
20
|
+
*
|
|
21
|
+
* Vertex (v0.6.0): observe-only. Applied mode is not supported for Vertex —
|
|
22
|
+
* wrap(vertexClient, { appliedMode: true }) throws TensorCostConfigError.
|
|
23
|
+
* The method wrappers on client.models intercept generate_content calls
|
|
24
|
+
* transparently.
|
|
17
25
|
*/
|
|
18
26
|
import type { WrapOptions } from "./types.js";
|
|
19
27
|
export declare function wrap<T>(client: T, options?: WrapOptions): T;
|
package/dist/wrap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../src/wrap.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../src/wrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAYH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAE,WAAgB,GAAG,CAAC,CAsH/D"}
|
package/dist/wrap.js
CHANGED
|
@@ -14,13 +14,24 @@
|
|
|
14
14
|
* Hardening (v0.4.0): applied-mode requests now go through the proxy-client
|
|
15
15
|
* module which adds retries, timeouts, typed errors, telemetry hooks, and
|
|
16
16
|
* the fail-open circuit breaker.
|
|
17
|
+
*
|
|
18
|
+
* Bedrock (v0.4.0): observe-only. Applied mode is not supported for Bedrock —
|
|
19
|
+
* wrap(bedrockClient, { appliedMode: true }) throws TensorCostConfigError.
|
|
20
|
+
*
|
|
21
|
+
* Vertex (v0.6.0): observe-only. Applied mode is not supported for Vertex —
|
|
22
|
+
* wrap(vertexClient, { appliedMode: true }) throws TensorCostConfigError.
|
|
23
|
+
* The method wrappers on client.models intercept generate_content calls
|
|
24
|
+
* transparently.
|
|
17
25
|
*/
|
|
18
26
|
import { resolveConfig } from "./config.js";
|
|
27
|
+
import { TensorCostConfigError } from "./config.js";
|
|
19
28
|
import { ObservationTransport } from "./transport.js";
|
|
20
29
|
import { detectProvider } from "./providers/detect.js";
|
|
21
30
|
import { installAppliedMode } from "./applied.js";
|
|
22
31
|
import * as openaiProvider from "./providers/openai.js";
|
|
23
32
|
import * as anthropicProvider from "./providers/anthropic.js";
|
|
33
|
+
import * as bedrockProvider from "./providers/bedrock.js";
|
|
34
|
+
import * as vertexProvider from "./providers/vertex.js";
|
|
24
35
|
import { CircuitBreaker } from "./circuit.js";
|
|
25
36
|
export function wrap(client, options = {}) {
|
|
26
37
|
// resolveConfig throws MissingConfigError when apiKey is absent, and
|
|
@@ -30,9 +41,26 @@ export function wrap(client, options = {}) {
|
|
|
30
41
|
const transport = new ObservationTransport({
|
|
31
42
|
baseUrl: config.baseUrl,
|
|
32
43
|
apiKey: config.apiKey,
|
|
44
|
+
tenantId: config.tenantId,
|
|
33
45
|
failOpen: config.failOpen,
|
|
34
46
|
});
|
|
35
47
|
const provider = detectProvider(client);
|
|
48
|
+
// Bedrock does not support applied mode. SigV4 signing happens inside
|
|
49
|
+
// the AWS SDK before our middleware can intercept the request, and the
|
|
50
|
+
// signed URL/headers are region-specific. Fail loudly here rather than
|
|
51
|
+
// silently ignoring the option — the customer almost certainly made a
|
|
52
|
+
// configuration mistake.
|
|
53
|
+
if (provider === "bedrock" && config.appliedMode) {
|
|
54
|
+
throw new TensorCostConfigError("TensorCost applied mode is not supported for AWS Bedrock clients. " +
|
|
55
|
+
"Bedrock uses SigV4 signing that cannot be intercepted at the proxy layer. " +
|
|
56
|
+
"Remove { appliedMode: true } or use an OpenAI / Anthropic client instead.");
|
|
57
|
+
}
|
|
58
|
+
if (provider === "vertex" && config.appliedMode) {
|
|
59
|
+
throw new TensorCostConfigError("TensorCost applied mode is not supported for Google Vertex AI clients. " +
|
|
60
|
+
"Vertex uses Application Default Credentials and Google-managed transport " +
|
|
61
|
+
"that cannot be intercepted at the proxy layer. Remove { appliedMode: true } " +
|
|
62
|
+
"or use an OpenAI / Anthropic client instead.");
|
|
63
|
+
}
|
|
36
64
|
// Applied mode: redirect the client to the proxy before installing
|
|
37
65
|
// the observe-only wrappers. Order matters — installAppliedMode mutates
|
|
38
66
|
// baseURL and defaultHeaders, and the provider wrappers capture the
|
|
@@ -54,9 +82,9 @@ export function wrap(client, options = {}) {
|
|
|
54
82
|
onLifecycleEvent: config.onLifecycleEvent,
|
|
55
83
|
failOpenEnabled: config.failOpenEnabled,
|
|
56
84
|
circuit,
|
|
57
|
-
});
|
|
85
|
+
}, config.deployment, config.promptTemplateId, config.agentId, config.workflowId);
|
|
58
86
|
}
|
|
59
|
-
else {
|
|
87
|
+
else if (provider === "anthropic") {
|
|
60
88
|
anthropicProvider.install(client, transport, config.tenantId, config.environment, config.connectionId, {
|
|
61
89
|
appliedMode: config.appliedMode,
|
|
62
90
|
proxyUrl: config.proxyUrl,
|
|
@@ -65,7 +93,14 @@ export function wrap(client, options = {}) {
|
|
|
65
93
|
onLifecycleEvent: config.onLifecycleEvent,
|
|
66
94
|
failOpenEnabled: config.failOpenEnabled,
|
|
67
95
|
circuit,
|
|
68
|
-
});
|
|
96
|
+
}, config.deployment, config.promptTemplateId, config.agentId, config.workflowId);
|
|
97
|
+
}
|
|
98
|
+
else if (provider === "bedrock") {
|
|
99
|
+
bedrockProvider.install(client, transport, config.tenantId, config.environment, config.connectionId, config.deployment, config.promptTemplateId, config.agentId, config.workflowId);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// provider === "vertex"
|
|
103
|
+
vertexProvider.install(client, transport, config.tenantId, config.environment, config.connectionId, config.deployment, config.promptTemplateId, config.agentId, config.workflowId);
|
|
69
104
|
}
|
|
70
105
|
return client;
|
|
71
106
|
}
|
package/dist/wrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap.js","sourceRoot":"","sources":["../src/wrap.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wrap.js","sourceRoot":"","sources":["../src/wrap.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tensorcost/sdk",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "One-line wrapper SDK for TensorCost — fire-and-forget LLM observability for OpenAI and
|
|
3
|
+
"version": "0.6.0",
|
|
4
|
+
"description": "One-line wrapper SDK for TensorCost — fire-and-forget LLM observability for OpenAI, Anthropic, AWS Bedrock, and Google Vertex AI clients.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.js",
|
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
"CHANGELOG.md",
|
|
20
20
|
"LICENSE"
|
|
21
21
|
],
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"access": "public"
|
|
24
|
+
},
|
|
22
25
|
"engines": {
|
|
23
26
|
"node": ">=18.0.0"
|
|
24
27
|
},
|
|
@@ -26,6 +29,10 @@
|
|
|
26
29
|
"llm",
|
|
27
30
|
"openai",
|
|
28
31
|
"anthropic",
|
|
32
|
+
"bedrock",
|
|
33
|
+
"vertex",
|
|
34
|
+
"google",
|
|
35
|
+
"aws",
|
|
29
36
|
"observability",
|
|
30
37
|
"cost",
|
|
31
38
|
"tensorcost"
|
|
@@ -39,6 +46,14 @@
|
|
|
39
46
|
"test": "vitest run --coverage",
|
|
40
47
|
"lint": "echo 'no lint configured'"
|
|
41
48
|
},
|
|
49
|
+
"peerDependencies": {
|
|
50
|
+
"@aws-sdk/client-bedrock-runtime": "^3.0.0"
|
|
51
|
+
},
|
|
52
|
+
"peerDependenciesMeta": {
|
|
53
|
+
"@aws-sdk/client-bedrock-runtime": {
|
|
54
|
+
"optional": true
|
|
55
|
+
}
|
|
56
|
+
},
|
|
42
57
|
"devDependencies": {
|
|
43
58
|
"@types/node": "^22.0.0",
|
|
44
59
|
"@vitest/coverage-v8": "^2.1",
|