@tensorcost/sdk 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/README.md +89 -1
  3. package/dist/circuit.d.ts +56 -0
  4. package/dist/circuit.d.ts.map +1 -0
  5. package/dist/circuit.js +93 -0
  6. package/dist/circuit.js.map +1 -0
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +17 -0
  9. package/dist/config.js.map +1 -1
  10. package/dist/errors.d.ts +67 -0
  11. package/dist/errors.d.ts.map +1 -0
  12. package/dist/errors.js +84 -0
  13. package/dist/errors.js.map +1 -0
  14. package/dist/index.d.ts +4 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +2 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/providers/anthropic.d.ts +17 -1
  19. package/dist/providers/anthropic.d.ts.map +1 -1
  20. package/dist/providers/anthropic.js +179 -20
  21. package/dist/providers/anthropic.js.map +1 -1
  22. package/dist/providers/openai.d.ts +19 -1
  23. package/dist/providers/openai.d.ts.map +1 -1
  24. package/dist/providers/openai.js +217 -20
  25. package/dist/providers/openai.js.map +1 -1
  26. package/dist/proxy-client.d.ts +64 -0
  27. package/dist/proxy-client.d.ts.map +1 -0
  28. package/dist/proxy-client.js +259 -0
  29. package/dist/proxy-client.js.map +1 -0
  30. package/dist/retry.d.ts +50 -0
  31. package/dist/retry.d.ts.map +1 -0
  32. package/dist/retry.js +80 -0
  33. package/dist/retry.js.map +1 -0
  34. package/dist/telemetry.d.ts +70 -0
  35. package/dist/telemetry.d.ts.map +1 -0
  36. package/dist/telemetry.js +41 -0
  37. package/dist/telemetry.js.map +1 -0
  38. package/dist/types.d.ts +61 -0
  39. package/dist/types.d.ts.map +1 -1
  40. package/dist/wrap.d.ts +4 -0
  41. package/dist/wrap.d.ts.map +1 -1
  42. package/dist/wrap.js +26 -2
  43. package/dist/wrap.js.map +1 -1
  44. package/package.json +1 -1
package/dist/types.d.ts CHANGED
@@ -5,6 +5,8 @@
5
5
  * the customer's client type, so most provider shapes are duck-typed
6
6
  * at runtime rather than expressed in TypeScript.
7
7
  */
8
+ import type { LifecycleEventCallback } from "./telemetry.js";
9
+ import type { RetryConfig } from "./retry.js";
8
10
  export type Provider = "openai" | "anthropic";
9
11
  export type Operation = "chat.completions" | "completions" | "messages";
10
12
  export type ObservationStatus = "success" | "error";
@@ -112,6 +114,59 @@ export interface WrapOptions {
112
114
  * Example: `https://proxy.tensorcost.com`
113
115
  */
114
116
  proxyUrl?: string;
117
+ /**
118
+ * Retry configuration. Applies to applied-mode proxy requests only.
119
+ * Observe-only telemetry posts do not retry (they are fire-and-forget).
120
+ *
121
+ * Defaults: maxAttempts=5, baseDelayMs=500, maxDelayMs=30 000.
122
+ * Set `maxAttempts: 1` to disable retries entirely.
123
+ */
124
+ retry?: Partial<RetryConfig>;
125
+ /**
126
+ * Timeout for non-streaming proxy requests, in milliseconds.
127
+ * Default: 60 000 (60s). Surfaces as `TensorCostTimeoutError` (kind: "total").
128
+ */
129
+ timeoutMs?: number;
130
+ /**
131
+ * Idle timeout for streaming proxy requests (no bytes received for N ms).
132
+ * Default: 30 000 (30s). Surfaces as `TensorCostTimeoutError` (kind: "idle").
133
+ */
134
+ idleTimeoutMs?: number;
135
+ /**
136
+ * Optional lifecycle event callback. Fires on `before_request`,
137
+ * `after_response`, `on_retry`, `on_error`, and `on_fallback`.
138
+ * The payload contains only request metadata — never prompt / completion
139
+ * content or credentials. Errors in the callback are swallowed.
140
+ */
141
+ onLifecycleEvent?: LifecycleEventCallback;
142
+ /**
143
+ * Fail-open circuit breaker for the proxy. When the proxy returns 5xx
144
+ * for `openThreshold` consecutive calls (default 3), the SDK routes
145
+ * subsequent calls directly to the upstream provider, bypassing the
146
+ * proxy. The circuit closes again after `closeThreshold` consecutive
147
+ * successful probe calls (default 5).
148
+ *
149
+ * Default: true (enabled). Set to false when running in-VPC with a
150
+ * sidecar proxy where direct-provider access is not available.
151
+ *
152
+ * When false, proxy 5xx errors surface as `TensorCostProxyError` with
153
+ * no automatic fallback.
154
+ *
155
+ * The fallback requires that the customer's provider SDK client has its
156
+ * original credentials intact (pre-wrap). If the client credentials are
157
+ * not available, the SDK throws `TensorCostProxyError` instead.
158
+ */
159
+ failOpenEnabled?: boolean;
160
+ /**
161
+ * Provider API key used for the fail-open direct-provider fallback.
162
+ * Only relevant when `failOpenEnabled=true` and `appliedMode=true`.
163
+ *
164
+ * In most cases the SDK reads the provider key directly from the wrapped
165
+ * client (client.apiKey), so this is not needed. Supply it explicitly if
166
+ * the client exposes the key under a non-standard property name, or if
167
+ * you are using the SDK in a context where the client's key is unavailable.
168
+ */
169
+ providerApiKey?: string;
115
170
  }
116
171
  export interface ResolvedConfig {
117
172
  apiKey: string;
@@ -139,5 +194,11 @@ export interface ResolvedConfig {
139
194
  * a config with `appliedMode=true` and `proxyUrl=null`.
140
195
  */
141
196
  proxyUrl: string | null;
197
+ retry: RetryConfig;
198
+ timeoutMs: number;
199
+ idleTimeoutMs: number;
200
+ onLifecycleEvent: LifecycleEventCallback | undefined;
201
+ failOpenEnabled: boolean;
202
+ providerApiKey: string | null;
142
203
  }
143
204
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG,kBAAkB,GAAG,aAAa,GAAG,UAAU,CAAC;AAExE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpD;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;;;OAKG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;OAIG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,kCAAkC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/wrap.d.ts CHANGED
@@ -10,6 +10,10 @@
10
10
  * two custom headers (`x-tc-provider-url`, `x-tc-provider-auth`) are
11
11
  * injected into `client.defaultHeaders`. The proxy handles per-request
12
12
  * routing decisions. Observe-only telemetry still fires post-call.
13
+ *
14
+ * Hardening (v0.4.0): applied-mode requests now go through the proxy-client
15
+ * module which adds retries, timeouts, typed errors, telemetry hooks, and
16
+ * the fail-open circuit breaker.
13
17
  */
14
18
  import type { WrapOptions } from "./types.js";
15
19
  export declare function wrap<T>(client: T, options?: WrapOptions): T;
@@ -1 +1 @@
1
- {"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../src/wrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAE,WAAgB,GAAG,CAAC,CAyC/D"}
1
+ {"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../src/wrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAE,WAAgB,GAAG,CAAC,CA+D/D"}
package/dist/wrap.js CHANGED
@@ -10,6 +10,10 @@
10
10
  * two custom headers (`x-tc-provider-url`, `x-tc-provider-auth`) are
11
11
  * injected into `client.defaultHeaders`. The proxy handles per-request
12
12
  * routing decisions. Observe-only telemetry still fires post-call.
13
+ *
14
+ * Hardening (v0.4.0): applied-mode requests now go through the proxy-client
15
+ * module which adds retries, timeouts, typed errors, telemetry hooks, and
16
+ * the fail-open circuit breaker.
13
17
  */
14
18
  import { resolveConfig } from "./config.js";
15
19
  import { ObservationTransport } from "./transport.js";
@@ -17,6 +21,7 @@ import { detectProvider } from "./providers/detect.js";
17
21
  import { installAppliedMode } from "./applied.js";
18
22
  import * as openaiProvider from "./providers/openai.js";
19
23
  import * as anthropicProvider from "./providers/anthropic.js";
24
+ import { CircuitBreaker } from "./circuit.js";
20
25
  export function wrap(client, options = {}) {
21
26
  // resolveConfig throws MissingConfigError when apiKey is absent, and
22
27
  // TensorCostConfigError when appliedMode=true with no proxyUrl.
@@ -37,11 +42,30 @@ export function wrap(client, options = {}) {
37
42
  if (config.appliedMode && config.proxyUrl !== null) {
38
43
  installAppliedMode(client, config.proxyUrl, provider);
39
44
  }
45
+ // One circuit breaker per wrap() call — shared across all requests
46
+ // dispatched through this client instance.
47
+ const circuit = new CircuitBreaker();
40
48
  if (provider === "openai") {
41
- openaiProvider.install(client, transport, config.tenantId, config.environment, config.connectionId);
49
+ openaiProvider.install(client, transport, config.tenantId, config.environment, config.connectionId, {
50
+ appliedMode: config.appliedMode,
51
+ proxyUrl: config.proxyUrl,
52
+ retry: config.retry,
53
+ timeoutMs: config.timeoutMs,
54
+ onLifecycleEvent: config.onLifecycleEvent,
55
+ failOpenEnabled: config.failOpenEnabled,
56
+ circuit,
57
+ });
42
58
  }
43
59
  else {
44
- anthropicProvider.install(client, transport, config.tenantId, config.environment, config.connectionId);
60
+ anthropicProvider.install(client, transport, config.tenantId, config.environment, config.connectionId, {
61
+ appliedMode: config.appliedMode,
62
+ proxyUrl: config.proxyUrl,
63
+ retry: config.retry,
64
+ timeoutMs: config.timeoutMs,
65
+ onLifecycleEvent: config.onLifecycleEvent,
66
+ failOpenEnabled: config.failOpenEnabled,
67
+ circuit,
68
+ });
45
69
  }
46
70
  return client;
47
71
  }
package/dist/wrap.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wrap.js","sourceRoot":"","sources":["../src/wrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,iBAAiB,MAAM,0BAA0B,CAAC;AAG9D,MAAM,UAAU,IAAI,CAAI,MAAS,EAAE,UAAuB,EAAE;IAC1D,qEAAqE;IACrE,gEAAgE;IAChE,mEAAmE;IACnE,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC;QACzC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAExC,mEAAmE;IACnE,wEAAwE;IACxE,oEAAoE;IACpE,oEAAoE;IACpE,oEAAoE;IACpE,2CAA2C;IAC3C,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACnD,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,cAAc,CAAC,OAAO,CACpB,MAAM,EACN,SAAS,EACT,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,YAAY,CACpB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,iBAAiB,CAAC,OAAO,CACvB,MAAM,EACN,SAAS,EACT,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,YAAY,CACpB,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"wrap.js","sourceRoot":"","sources":["../src/wrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,iBAAiB,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,UAAU,IAAI,CAAI,MAAS,EAAE,UAAuB,EAAE;IAC1D,qEAAqE;IACrE,gEAAgE;IAChE,mEAAmE;IACnE,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC;QACzC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAExC,mEAAmE;IACnE,wEAAwE;IACxE,oEAAoE;IACpE,oEAAoE;IACpE,oEAAoE;IACpE,2CAA2C;IAC3C,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACnD,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED,mEAAmE;IACnE,2CAA2C;IAC3C,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IAErC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,cAAc,CAAC,OAAO,CACpB,MAAM,EACN,SAAS,EACT,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,YAAY,EACnB;YACE,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,OAAO;SACR,CACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,iBAAiB,CAAC,OAAO,CACvB,MAAM,EACN,SAAS,EACT,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,YAAY,EACnB;YACE,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,OAAO;SACR,CACF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tensorcost/sdk",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "One-line wrapper SDK for TensorCost — fire-and-forget LLM observability for OpenAI and Anthropic clients.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",