@metrxbot/sdk 0.1.0 → 0.2.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.
package/README.md CHANGED
@@ -28,9 +28,7 @@ const client = new MetrxbotClient({
28
28
  ```typescript
29
29
  const response = await client.chat({
30
30
  model: 'gpt-4',
31
- messages: [
32
- { role: 'user', content: 'What is 2+2?' }
33
- ],
31
+ messages: [{ role: 'user', content: 'What is 2+2?' }],
34
32
  customerId: 'user-123', // optional, for tracking
35
33
  sessionId: 'session-456', // optional, for tracking
36
34
  });
@@ -45,9 +43,7 @@ console.log(`Latency: ${response._meta.latencyMs}ms`);
45
43
  ```typescript
46
44
  const stream = client.chatStream({
47
45
  model: 'gpt-4',
48
- messages: [
49
- { role: 'user', content: 'Write a haiku' }
50
- ]
46
+ messages: [{ role: 'user', content: 'Write a haiku' }],
51
47
  });
52
48
 
53
49
  for await (const chunk of stream) {
@@ -63,9 +59,7 @@ for await (const chunk of stream) {
63
59
  const response = await client.messages({
64
60
  model: 'claude-3-sonnet',
65
61
  max_tokens: 1024,
66
- messages: [
67
- { role: 'user', content: 'Hello, Claude!' }
68
- ]
62
+ messages: [{ role: 'user', content: 'Hello, Claude!' }],
69
63
  });
70
64
 
71
65
  console.log(response.content[0].text);
@@ -76,7 +70,7 @@ console.log(response.content[0].text);
76
70
  ```typescript
77
71
  const response = await client.embeddings({
78
72
  model: 'text-embedding-3-small',
79
- input: 'Hello world'
73
+ input: 'Hello world',
80
74
  });
81
75
 
82
76
  console.log(response.data[0].embedding);
@@ -94,7 +88,7 @@ console.log(health.version);
94
88
 
95
89
  ```typescript
96
90
  const models = await client.models();
97
- console.log(models.data.map(m => m.id));
91
+ console.log(models.data.map((m) => m.id));
98
92
  ```
99
93
 
100
94
  ## Configuration
@@ -160,7 +154,7 @@ import {
160
154
  try {
161
155
  const response = await client.chat({
162
156
  model: 'gpt-4',
163
- messages: [{ role: 'user', content: 'Hello' }]
157
+ messages: [{ role: 'user', content: 'Hello' }],
164
158
  });
165
159
  } catch (error) {
166
160
  if (error instanceof AuthenticationError) {
@@ -202,6 +196,81 @@ interface MetrxbotMeta {
202
196
  - Deno
203
197
  - Modern browsers (with native fetch support)
204
198
 
199
+ ## Cascade routing (v0.2.1, opt-in)
200
+
201
+ Delegate per-request model choice to Metrx **inside your own process** — your
202
+ provider keys never leave your environment, and prompt/output text is never
203
+ sent to Metrx (scores only).
204
+
205
+ ```ts
206
+ import { MetrxbotClient, runWithPolicy } from '@metrxbot/sdk';
207
+
208
+ const metrx = new MetrxbotClient({ apiKey: process.env.METRX_API_KEY! });
209
+
210
+ const r = await runWithPolicy(metrx, {
211
+ agentKey: 'ask_fundry',
212
+ input: prompt,
213
+ // Your own provider call — your client, your keys.
214
+ // model === undefined ⇒ call your own default (day-0 pass-through).
215
+ callModel: (model, input) => callAnthropic(model ?? DEFAULT_MODEL, input),
216
+ // Cross-family checker (required before shadow/cascade modes are enabled):
217
+ checkerCaller: (model, task) => callOpenAI(model!, task),
218
+ });
219
+ use(r.output);
220
+ // Attach r.requestId to your telemetry events (request_id field) so cost
221
+ // joins work: it links llm_events ↔ optimization_decisions ↔ quality.
222
+ ```
223
+
224
+ Behavior is controlled server-side per agent (`routing_policies`): with no
225
+ policy row every call is an exact pass-through. Modes advance
226
+ `pass_through → shadow_sample → cascade`, each gated by evidence. **Every
227
+ seam fails open** — no code path throws an error your own
228
+ `callModel(prodModel)` would not have thrown. Kill switches: server policy
229
+ `enabled=false`, env `METRX_ROUTING_DISABLED=true`, `min_sdk_version`.
230
+
231
+ Not supported in v1: streaming call sites (keep them on their original path).
232
+
233
+ ### Tagging telemetry via `ctx` (v0.2.1)
234
+
235
+ Both `callModel` and `checkerCaller` receive an optional third argument, a
236
+ `ModelCallContext`, on every provider call the router makes. It's purely
237
+ informational — the router serves exactly the same thing whether or not you
238
+ read it — but it lets your own instrumentation stamp routing tags on the
239
+ provider call so cascade cost SUMs join across
240
+ `llm_events ↔ optimization_decisions ↔ quality`, and skip the background
241
+ shadow candidate so it never lands on your cost dashboard.
242
+
243
+ ```ts
244
+ import { runWithPolicy, type ModelCallContext } from '@metrxbot/sdk';
245
+
246
+ const r = await runWithPolicy(metrx, {
247
+ agentKey: 'ask_fundry',
248
+ input: prompt,
249
+ callModel: (model, input, ctx?: ModelCallContext) => {
250
+ // Don't record the background shadow candidate — it's never served and
251
+ // would double-count on your cost dashboard.
252
+ const record = ctx?.phase !== 'shadow_candidate';
253
+ return callAnthropic(model ?? DEFAULT_MODEL, input, {
254
+ // Stamp the same request_id the decision/quality rows carry, plus the
255
+ // experiment id + arm, so your cost query joins on all three.
256
+ tags: record
257
+ ? {
258
+ request_id: ctx?.requestId,
259
+ experiment_id: ctx?.experimentId,
260
+ arm: ctx?.arm, // 'control' | 'treatment'
261
+ phase: ctx?.phase, // 'primary' | 'candidate' | 'escalation' | 'checker' | 'shadow_candidate'
262
+ }
263
+ : undefined,
264
+ });
265
+ },
266
+ checkerCaller: (model, task, ctx) => callOpenAI(model!, task), // ctx.phase === 'checker'
267
+ });
268
+ ```
269
+
270
+ `ctx` is optional and additive: existing two-arg `callModel`/`checkerCaller`
271
+ closures keep working unchanged (the extra argument is simply ignored).
272
+ `ctx.requestId` always equals `RunWithPolicyResult.requestId`.
273
+
205
274
  ## License
206
275
 
207
276
  MIT
package/dist/client.d.ts CHANGED
@@ -3,9 +3,17 @@
3
3
  * Main SDK client for interacting with the Metrx gateway
4
4
  */
5
5
  import { MetrxbotConfig, ChatCompletionParams, ChatCompletionResponse, EmbeddingsParams, EmbeddingsResponse, HealthResponse, MessagesParams, MessagesResponse, ModelsResponse, StreamChunk } from './types';
6
+ import { type TaskOutcome } from './task';
7
+ export interface SubmitOutcomeResponse {
8
+ outcome_id: string;
9
+ task_id: string;
10
+ source: 'sdk_asserted';
11
+ confidence_tier: 'human_verified';
12
+ }
6
13
  export declare class MetrxbotClient {
7
14
  private apiKey;
8
15
  private gatewayUrl;
16
+ private apiUrl;
9
17
  private defaultAgentId?;
10
18
  private defaultProvider?;
11
19
  private timeout;
@@ -46,6 +54,24 @@ export declare class MetrxbotClient {
46
54
  * Internal: Build request headers
47
55
  */
48
56
  private buildHeaders;
57
+ /**
58
+ * Submit an SDK-asserted outcome for a completed task. Calls
59
+ * `POST {apiUrl}/api/v1/tasks/:task_id/outcome` (Session 3 endpoint).
60
+ *
61
+ * Idempotent server-side via UNIQUE(org_id, source, reference_id);
62
+ * re-submitting with the same task_id updates rather than duplicates.
63
+ *
64
+ * Prefer calling this through `task()` which handles it automatically.
65
+ */
66
+ /**
67
+ * @internal Narrow credential accessor for the routing module (routing.ts).
68
+ * Not part of the public API surface — do not use in application code.
69
+ */
70
+ getRoutingCredentials(): {
71
+ apiUrl: string;
72
+ apiKey: string;
73
+ };
74
+ submitOutcome(taskId: string, outcome: TaskOutcome): Promise<SubmitOutcomeResponse>;
49
75
  /**
50
76
  * Internal: Extract metadata from response headers
51
77
  */
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,EAEd,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EAEd,WAAW,EACZ,MAAM,SAAS,CAAC;AAajB,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,cAAc;IAYlC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;IAIvC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;IAIvC;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IASzE;;OAEG;IACI,UAAU,CACf,MAAM,EAAE,oBAAoB,GAC3B,aAAa,CAAC,WAAW,CAAC;IAyD7B;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;IASjE;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IASvE;;OAEG;YACW,OAAO;IAsBrB;;OAEG;YACW,QAAQ;IAsCtB;;OAEG;IACH,OAAO,CAAC,YAAY;IA+BpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;YACW,mBAAmB;CAgClC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,EAEd,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EAEd,WAAW,EACZ,MAAM,SAAS,CAAC;AASjB,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAMzD,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,eAAe,EAAE,gBAAgB,CAAC;CACnC;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,cAAc;IAuBlC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;IAIvC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;IAIvC;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IASzE;;OAEG;IACI,UAAU,CAAC,MAAM,EAAE,oBAAoB,GAAG,aAAa,CAAC,WAAW,CAAC;IAyD3E;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIjE;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIvE;;OAEG;YACW,OAAO;IAsBrB;;OAEG;YACW,QAAQ;IAsCtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAwCpB;;;;;;;;OAQG;IACH;;;OAGG;IACH,qBAAqB,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAIrD,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAwCzF;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;YACW,mBAAmB;CAiClC"}
package/dist/client.js CHANGED
@@ -3,11 +3,14 @@
3
3
  * Main SDK client for interacting with the Metrx gateway
4
4
  */
5
5
  import { MetrxbotError, AuthenticationError, GatewayError, RateLimitError, TimeoutError, ValidationError, } from './errors';
6
+ import { currentTaskId } from './task';
6
7
  const DEFAULT_GATEWAY_URL = 'https://gateway.metrxbot.com';
8
+ const DEFAULT_API_URL = 'https://metrxbot.com';
7
9
  const DEFAULT_TIMEOUT = 30000; // 30 seconds
8
10
  export class MetrxbotClient {
9
11
  apiKey;
10
12
  gatewayUrl;
13
+ apiUrl;
11
14
  defaultAgentId;
12
15
  defaultProvider;
13
16
  timeout;
@@ -17,6 +20,17 @@ export class MetrxbotClient {
17
20
  }
18
21
  this.apiKey = config.apiKey;
19
22
  this.gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY_URL;
23
+ this.apiUrl = config.apiUrl || DEFAULT_API_URL;
24
+ // The apiUrl receives the Bearer API key on submitOutcome(). Reject
25
+ // plaintext http:// so a misconfigured SDK cannot leak credentials
26
+ // to an attacker-controlled origin. localhost/127.0.0.1 is allowed
27
+ // unencrypted to keep local dev ergonomics.
28
+ if (!/^https:\/\//i.test(this.apiUrl)) {
29
+ const isLocal = /^http:\/\/(localhost|127\.0\.0\.1)(:|\/|$)/i.test(this.apiUrl);
30
+ if (!isLocal) {
31
+ throw new ValidationError('apiUrl must use https:// (got: ' + this.apiUrl + ')');
32
+ }
33
+ }
20
34
  this.defaultAgentId = config.defaultAgentId;
21
35
  this.defaultProvider = config.defaultProvider;
22
36
  this.timeout = config.timeout || DEFAULT_TIMEOUT;
@@ -170,8 +184,67 @@ export class MetrxbotClient {
170
184
  if (provider) {
171
185
  headers['X-Provider'] = provider;
172
186
  }
187
+ // Session 4: task() AsyncLocalStorage → X-Task-Id. Explicit
188
+ // options.taskId always wins so advanced callers can override.
189
+ // Gateway reads this header and writes it to llm_events.task_id
190
+ // (migration 056).
191
+ const taskId = options?.taskId ?? currentTaskId();
192
+ if (taskId) {
193
+ headers['X-Task-Id'] = taskId;
194
+ }
173
195
  return headers;
174
196
  }
197
+ /**
198
+ * Submit an SDK-asserted outcome for a completed task. Calls
199
+ * `POST {apiUrl}/api/v1/tasks/:task_id/outcome` (Session 3 endpoint).
200
+ *
201
+ * Idempotent server-side via UNIQUE(org_id, source, reference_id);
202
+ * re-submitting with the same task_id updates rather than duplicates.
203
+ *
204
+ * Prefer calling this through `task()` which handles it automatically.
205
+ */
206
+ /**
207
+ * @internal Narrow credential accessor for the routing module (routing.ts).
208
+ * Not part of the public API surface — do not use in application code.
209
+ */
210
+ getRoutingCredentials() {
211
+ return { apiUrl: this.apiUrl, apiKey: this.apiKey };
212
+ }
213
+ async submitOutcome(taskId, outcome) {
214
+ if (!taskId || typeof taskId !== 'string') {
215
+ throw new ValidationError('taskId is required');
216
+ }
217
+ const url = `${this.apiUrl}/api/v1/tasks/${encodeURIComponent(taskId)}/outcome`;
218
+ const headers = {
219
+ 'Content-Type': 'application/json',
220
+ Authorization: `Bearer ${this.apiKey}`,
221
+ };
222
+ const controller = new AbortController();
223
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
224
+ let response;
225
+ try {
226
+ response = await fetch(url, {
227
+ method: 'POST',
228
+ headers,
229
+ body: JSON.stringify(outcome),
230
+ signal: controller.signal,
231
+ });
232
+ }
233
+ catch (error) {
234
+ if (error instanceof Error && error.name === 'AbortError') {
235
+ throw new TimeoutError(`Outcome submission timeout after ${this.timeout}ms`);
236
+ }
237
+ throw error;
238
+ }
239
+ finally {
240
+ clearTimeout(timeoutId);
241
+ }
242
+ if (!response.ok) {
243
+ await this.handleErrorResponse(response);
244
+ }
245
+ const body = (await response.json());
246
+ return body.data;
247
+ }
175
248
  /**
176
249
  * Internal: Extract metadata from response headers
177
250
  */
@@ -205,9 +278,10 @@ export class MetrxbotClient {
205
278
  throw new ValidationError(errorMessage, requestId);
206
279
  case 401:
207
280
  throw new AuthenticationError(errorMessage, requestId);
208
- case 429:
281
+ case 429: {
209
282
  const retryAfter = response.headers.get('Retry-After');
210
283
  throw new RateLimitError(errorMessage, retryAfter || undefined, requestId);
284
+ }
211
285
  case 502:
212
286
  case 504:
213
287
  throw new GatewayError(errorMessage, response.status, requestId);
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,7 +3,15 @@
3
3
  * TypeScript SDK for integrating with Metrx gateway
4
4
  */
5
5
  export { MetrxbotClient } from './client';
6
- export { MetrxbotSpanExporter } from './otel';
6
+ export type { SubmitOutcomeResponse } from './client';
7
+ export { task, currentTaskId } from './task';
8
+ export type { TaskContext, TaskOutcome, TaskOptions, OutcomeSubmitter, BenchLytixCategory, } from './task';
9
+ export { MetrxbotSpanExporter, MetrxbotSpanProcessor, METRX_TASK_ID_ATTR } from './otel';
10
+ export { runWithPolicy, routerFor, MetrxRouter, semverLt, SDK_VERSION } from './routing';
11
+ export type { ModelCaller, ModelCallContext, ModelCallResult, ClientJudge, RunWithPolicyOptions, RunWithPolicyResult, RouterConfig, } from './routing';
12
+ export type { RoutingPolicy } from './routing-policy-cache';
13
+ export { runValidators, parseScore } from './routing-gate';
14
+ export type { ValidatorConfig, GateOutcome } from './routing-gate';
7
15
  export type { MetrxbotConfig, MetrxbotMeta, RequestOptions, ChatCompletionParams, ChatCompletionResponse, ChatMessage, ChatChoice, StreamChunk, StreamChoice, MessagesParams, MessagesResponse, AnthropicMessage, AnthropicContent, MessageContent, EmbeddingsParams, EmbeddingsResponse, Embedding, HealthResponse, ModelsResponse, Model, APIError, OtelExporterConfig, } from './types';
8
16
  export { MetrxbotError, AuthenticationError, RateLimitError, GatewayError, ValidationError, TimeoutError, isMetrxbotError, } from './errors';
9
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAG9C,YAAY,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,WAAW,EACX,UAAU,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACT,cAAc,EACd,cAAc,EACd,KAAK,EACL,QAAQ,EACR,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,eAAe,GAChB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAGtD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC7C,YAAY,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,QAAQ,CAAC;AAKhB,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAKzF,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACzF,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,GACb,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGnE,YAAY,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,WAAW,EACX,UAAU,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACT,cAAc,EACd,cAAc,EACd,KAAK,EACL,QAAQ,EACR,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,eAAe,GAChB,MAAM,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -3,8 +3,17 @@
3
3
  * TypeScript SDK for integrating with Metrx gateway
4
4
  */
5
5
  export { MetrxbotClient } from './client';
6
- // OpenTelemetry Exporter
7
- export { MetrxbotSpanExporter } from './otel';
6
+ // Session 4: task() context + outcome correlation
7
+ export { task, currentTaskId } from './task';
8
+ // OpenTelemetry Exporter + task-correlation processor (Phase 2). Install the
9
+ // processor ALONGSIDE the exporter so task() ids survive BatchSpanProcessor's
10
+ // deferred flush (see MetrxbotSpanProcessor).
11
+ export { MetrxbotSpanExporter, MetrxbotSpanProcessor, METRX_TASK_ID_ATTR } from './otel';
12
+ // Cascade routing (Phase 1 S2 — docs/roi-engine-cascade-sdk-phase1-spec.md §5).
13
+ // Additive: existing telemetry API is untouched. Complete responses only —
14
+ // streaming call sites must stay on their original path.
15
+ export { runWithPolicy, routerFor, MetrxRouter, semverLt, SDK_VERSION } from './routing';
16
+ export { runValidators, parseScore } from './routing-gate';
8
17
  // Errors
9
18
  export { MetrxbotError, AuthenticationError, RateLimitError, GatewayError, ValidationError, TimeoutError, isMetrxbotError, } from './errors';
10
19
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,yBAAyB;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AA4B9C,SAAS;AACT,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,eAAe,GAChB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,kDAAkD;AAClD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAS7C,6EAA6E;AAC7E,8EAA8E;AAC9E,8CAA8C;AAC9C,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAEzF,gFAAgF;AAChF,2EAA2E;AAC3E,yDAAyD;AACzD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAWzF,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA6B3D,SAAS;AACT,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,eAAe,GAChB,MAAM,UAAU,CAAC"}
package/dist/otel.d.ts CHANGED
@@ -5,6 +5,12 @@
5
5
  * Uses duck typing to avoid @opentelemetry dependencies (zero-dependency SDK).
6
6
  */
7
7
  import type { OtelExporterConfig } from './types';
8
+ /**
9
+ * Span attribute carrying the Metrx task() correlation id. Stamped at span
10
+ * lifecycle time (in the task ALS context) by MetrxbotSpanProcessor and read by
11
+ * the exporter at flush time — see the "silent-zero-value-arms" note below.
12
+ */
13
+ export declare const METRX_TASK_ID_ATTR = "metrxbot.task_id";
8
14
  /**
9
15
  * Minimal SpanExporter interface (duck-typed from OpenTelemetry)
10
16
  */
@@ -111,5 +117,36 @@ export declare class MetrxbotSpanExporter implements SpanExporter {
111
117
  */
112
118
  private sendEvents;
113
119
  }
120
+ /**
121
+ * Minimal writable-span shape (duck-typed from OpenTelemetry's Span). onStart
122
+ * receives a live, writable span; setAttribute is the public API, but we also
123
+ * tolerate direct attribute mutation for exotic span implementations.
124
+ */
125
+ interface StartableSpan {
126
+ setAttribute?: (key: string, value: string) => void;
127
+ attributes?: Record<string, unknown>;
128
+ }
129
+ /**
130
+ * MetrxbotSpanProcessor — stamps the current task() id onto each span as it
131
+ * starts, WHILE the task AsyncLocalStorage context is still live.
132
+ *
133
+ * Why a processor (not just the exporter): under the default NodeSDK wiring
134
+ * (BatchSpanProcessor), the exporter's export() runs later on a flush timer,
135
+ * OUTSIDE the task context — so reading currentTaskId() there returns undefined
136
+ * for every span (the silent-zero-value-arms trap). onStart runs synchronously
137
+ * at span creation, inside the caller's context, so the id is captured onto the
138
+ * span and survives the deferred flush. Install it ALONGSIDE the exporter:
139
+ *
140
+ * provider.addSpanProcessor(new MetrxbotSpanProcessor());
141
+ * provider.addSpanProcessor(new BatchSpanProcessor(new MetrxbotSpanExporter({...})));
142
+ *
143
+ * No-op for spans started outside any task() (backward compatible).
144
+ */
145
+ export declare class MetrxbotSpanProcessor {
146
+ onStart(span: StartableSpan): void;
147
+ onEnd(): void;
148
+ shutdown(): Promise<void>;
149
+ forceFlush(): Promise<void>;
150
+ }
114
151
  export {};
115
152
  //# sourceMappingURL=otel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD;;GAEG;AACH,UAAU,YAAY;IACpB,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC1E,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACpB,QAAQ,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC;CACjD;AAED;;GAEG;AACH,KAAK,oBAAoB,GAAG,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;AAE3D;;GAEG;AACH,aAAK,gBAAgB;IACnB,OAAO,IAAI;IACX,MAAM,IAAI;CACX;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAoBD;;;;;GAKG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,cAAc,CAAS;gBAEnB,MAAM,EAAE,kBAAkB;IActC;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,oBAAoB,GAAG,IAAI;IA0BzE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAc/B;;OAEG;IACG,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD;;OAEG;IACH,OAAO,CAAC,cAAc;IA8DtB;;OAEG;IACH,OAAO,CAAC,SAAS;IA2BjB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,OAAO,CAAC,KAAK;IAeb;;OAEG;YACW,UAAU;IAiBxB;;OAEG;YACW,UAAU;CA8BzB"}
1
+ {"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"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"}
package/dist/otel.js CHANGED
@@ -4,6 +4,13 @@
4
4
  * Exports LLM-related spans to Metrx's event ingestion API.
5
5
  * Uses duck typing to avoid @opentelemetry dependencies (zero-dependency SDK).
6
6
  */
7
+ import { currentTaskId } from './task';
8
+ /**
9
+ * Span attribute carrying the Metrx task() correlation id. Stamped at span
10
+ * lifecycle time (in the task ALS context) by MetrxbotSpanProcessor and read by
11
+ * the exporter at flush time — see the "silent-zero-value-arms" note below.
12
+ */
13
+ export const METRX_TASK_ID_ATTR = 'metrxbot.task_id';
7
14
  /**
8
15
  * Export result status codes
9
16
  */
@@ -116,6 +123,17 @@ export class MetrxbotSpanExporter {
116
123
  trace_id: spanContext.traceId,
117
124
  span_id: spanContext.spanId,
118
125
  };
126
+ // Task correlation (Phase 2). PREFER the attribute stamped by
127
+ // MetrxbotSpanProcessor.onEnd (run synchronously at span.end(), INSIDE the
128
+ // task ALS context — correct under BatchSpanProcessor, the default NodeSDK
129
+ // wiring, where export() runs later on the flush timer OUTSIDE the context).
130
+ // Fall back to currentTaskId() so SimpleSpanProcessor / direct-export users
131
+ // (export() invoked in-context) still work with no processor installed.
132
+ const stamped = span.attributes?.[METRX_TASK_ID_ATTR];
133
+ const taskId = typeof stamped === 'string' && stamped ? stamped : currentTaskId();
134
+ if (taskId) {
135
+ event.task_id = taskId;
136
+ }
119
137
  // Add optional fields
120
138
  if (this.agentId) {
121
139
  event.agent_id = this.agentId;
@@ -246,4 +264,42 @@ export class MetrxbotSpanExporter {
246
264
  }
247
265
  }
248
266
  }
267
+ /**
268
+ * MetrxbotSpanProcessor — stamps the current task() id onto each span as it
269
+ * starts, WHILE the task AsyncLocalStorage context is still live.
270
+ *
271
+ * Why a processor (not just the exporter): under the default NodeSDK wiring
272
+ * (BatchSpanProcessor), the exporter's export() runs later on a flush timer,
273
+ * OUTSIDE the task context — so reading currentTaskId() there returns undefined
274
+ * for every span (the silent-zero-value-arms trap). onStart runs synchronously
275
+ * at span creation, inside the caller's context, so the id is captured onto the
276
+ * span and survives the deferred flush. Install it ALONGSIDE the exporter:
277
+ *
278
+ * provider.addSpanProcessor(new MetrxbotSpanProcessor());
279
+ * provider.addSpanProcessor(new BatchSpanProcessor(new MetrxbotSpanExporter({...})));
280
+ *
281
+ * No-op for spans started outside any task() (backward compatible).
282
+ */
283
+ export class MetrxbotSpanProcessor {
284
+ onStart(span) {
285
+ const taskId = currentTaskId();
286
+ if (!taskId)
287
+ return;
288
+ if (typeof span.setAttribute === 'function') {
289
+ span.setAttribute(METRX_TASK_ID_ATTR, taskId);
290
+ }
291
+ else if (span.attributes && typeof span.attributes === 'object') {
292
+ span.attributes[METRX_TASK_ID_ATTR] = taskId;
293
+ }
294
+ }
295
+ onEnd() {
296
+ // Span already carries the attribute from onStart; nothing to do at end.
297
+ }
298
+ async shutdown() {
299
+ // No buffered state — the exporter owns flushing.
300
+ }
301
+ async forceFlush() {
302
+ // No buffered state.
303
+ }
304
+ }
249
305
  //# sourceMappingURL=otel.js.map
package/dist/otel.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"otel.js","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"otel.js","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Confidence gate for the SDK cascade (spec §5.3): G1 structural validators
3
+ * (zero-cost floor) + G4 cheap checker call (the primary signal).
4
+ *
5
+ * Gate contract: any error or timeout inside the gate means ESCALATE — the
6
+ * gate fails toward quality, never toward serving an unchecked answer (F5).
7
+ */
8
+ import type { ModelCaller, ModelCallContext } from './routing';
9
+ export interface ValidatorConfig {
10
+ /** Output must JSON.parse. */
11
+ require_json?: boolean;
12
+ /** With require_json: these top-level fields must be present. */
13
+ required_fields?: string[];
14
+ min_length?: number;
15
+ max_length?: number;
16
+ /** Output must match this pattern (e.g. a citation marker). */
17
+ regex?: string;
18
+ }
19
+ export interface GateOutcome {
20
+ /** Composite score in [0,1]; 0 when a validator hard-fails. */
21
+ score: number;
22
+ /** True when the candidate answer may be served (score >= threshold). */
23
+ pass: boolean;
24
+ /** Why the gate escalated, for decision-row telemetry. */
25
+ reason?: string;
26
+ }
27
+ /** G1 — structural validators. Cheap, high-precision, low-recall. */
28
+ export declare function runValidators(output: string, config: ValidatorConfig | undefined): {
29
+ pass: boolean;
30
+ reason?: string;
31
+ };
32
+ /**
33
+ * G4 — cheap checker call via the customer-supplied checkerCaller.
34
+ * Throws on any failure (timeout, unparsable verdict) — the caller escalates.
35
+ */
36
+ export declare function runChecker(opts: {
37
+ checkerCaller: ModelCaller;
38
+ checkerModel: string;
39
+ input: unknown;
40
+ output: string;
41
+ rubric?: string;
42
+ timeoutMs: number;
43
+ /** v0.2.1: forwarded to the checkerCaller as its 3rd arg (phase: 'checker'). */
44
+ ctx?: ModelCallContext;
45
+ }): Promise<number>;
46
+ /** Extract {"score": x} from checker output, tolerating stray text. */
47
+ export declare function parseScore(text: string): number | null;
48
+ export declare function withTimeout<T>(promise: Promise<T>, ms: number, label: string): Promise<T>;
49
+ //# sourceMappingURL=routing-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing-gate.d.ts","sourceRoot":"","sources":["../src/routing-gate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,IAAI,EAAE,OAAO,CAAC;IACd,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,eAAe,GAAG,SAAS,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAuCpC;AAQD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,aAAa,EAAE,WAAW,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,GAAG,CAAC,EAAE,gBAAgB,CAAC;CACxB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBlB;AAED,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUtD;AAgBD,wBAAsB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAY/F"}