@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 +81 -12
- package/dist/client.d.ts +26 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +75 -1
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/otel.d.ts +37 -0
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +56 -0
- package/dist/otel.js.map +1 -1
- package/dist/routing-gate.d.ts +49 -0
- package/dist/routing-gate.d.ts.map +1 -0
- package/dist/routing-gate.js +118 -0
- package/dist/routing-gate.js.map +1 -0
- package/dist/routing-policy-cache.d.ts +77 -0
- package/dist/routing-policy-cache.d.ts.map +1 -0
- package/dist/routing-policy-cache.js +96 -0
- package/dist/routing-policy-cache.js.map +1 -0
- package/dist/routing.d.ts +156 -0
- package/dist/routing.d.ts.map +1 -0
- package/dist/routing.js +631 -0
- package/dist/routing.js.map +1 -0
- package/dist/task.d.ts +99 -0
- package/dist/task.d.ts.map +1 -0
- package/dist/task.js +104 -0
- package/dist/task.js.map +1 -0
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/task.d.ts
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK v2 task() context — BenchLytix Token Economy (Session 4)
|
|
3
|
+
*
|
|
4
|
+
* Correlates a unit of agent work to a single task_id so that:
|
|
5
|
+
* 1. Any MetrxbotClient calls made inside the block thread `X-Task-Id`
|
|
6
|
+
* on the gateway request — the gateway writes this onto `llm_events`
|
|
7
|
+
* (migration 056 column).
|
|
8
|
+
* 2. After the block completes, an outcome row is POSTed to
|
|
9
|
+
* /api/v1/tasks/:task_id/outcome (Session 3 endpoint) with the
|
|
10
|
+
* outcome the caller captured via `setOutcome`.
|
|
11
|
+
*
|
|
12
|
+
* Propagation is async-safe via Node's AsyncLocalStorage (Node >=18).
|
|
13
|
+
*
|
|
14
|
+
* Example::
|
|
15
|
+
*
|
|
16
|
+
* import { MetrxbotClient, task } from '@metrxbot/sdk';
|
|
17
|
+
* const client = new MetrxbotClient({ apiKey });
|
|
18
|
+
*
|
|
19
|
+
* await task(client, async (ctx) => {
|
|
20
|
+
* const res = await client.chat({ model: 'gpt-4o', messages: [...] });
|
|
21
|
+
* ctx.setOutcome({ success: true, value_microcents: 250_000 });
|
|
22
|
+
* return res;
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // gateway saw X-Task-Id = ctx.taskId on the chat request;
|
|
26
|
+
* // /api/v1/tasks/{ctx.taskId}/outcome POSTed afterwards.
|
|
27
|
+
*
|
|
28
|
+
* Design rules:
|
|
29
|
+
* - Never mask the user's thrown error with an outcome-submission error.
|
|
30
|
+
* - If the block throws and autoOutcomeOnError=true (default), a
|
|
31
|
+
* success:false outcome is best-effort posted with the error message
|
|
32
|
+
* folded into metadata.
|
|
33
|
+
* - If the block completes without calling setOutcome(), NO outcome is
|
|
34
|
+
* posted. The task_id was still correlated on any gateway calls via
|
|
35
|
+
* X-Task-Id, which is enough for observability-only usage.
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* BenchLytix category enum (mirrors packages/types/src/index.ts
|
|
39
|
+
* BenchLytixCategory). Duplicated locally so the SDK has no workspace
|
|
40
|
+
* dependency on @metrx/types. Server-side revalidates in Session 3.
|
|
41
|
+
*/
|
|
42
|
+
export type BenchLytixCategory = 'legal-summarization' | 'code-generation' | 'data-extraction' | 'customer-support' | 'meeting-summarization' | 'financial-analysis' | 'web-research' | 'content-generation' | 'classification' | 'multi-step-reasoning' | 'unmapped';
|
|
43
|
+
export interface TaskOutcome {
|
|
44
|
+
/** Did the unit of work succeed from the caller's POV? */
|
|
45
|
+
success: boolean;
|
|
46
|
+
/** Business value in microcents (divide by 10_000 for cents). */
|
|
47
|
+
value_microcents?: number;
|
|
48
|
+
/** Optional BenchLytix category tag — server revalidates. */
|
|
49
|
+
category?: BenchLytixCategory;
|
|
50
|
+
/** Arbitrary key/value metadata. */
|
|
51
|
+
metadata?: Record<string, unknown>;
|
|
52
|
+
/** Free-form notes string. */
|
|
53
|
+
notes?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface TaskOptions {
|
|
56
|
+
/**
|
|
57
|
+
* Override task_id. Default: crypto.randomUUID() (v4). Callers pass
|
|
58
|
+
* their own only when they already have a correlation key (e.g. a
|
|
59
|
+
* queue message id) they want to tie back to llm_events.
|
|
60
|
+
*/
|
|
61
|
+
taskId?: string;
|
|
62
|
+
/**
|
|
63
|
+
* When the block throws, auto-submit a success:false outcome.
|
|
64
|
+
* Default: true. The original error is always re-thrown regardless.
|
|
65
|
+
*/
|
|
66
|
+
autoOutcomeOnError?: boolean;
|
|
67
|
+
}
|
|
68
|
+
export interface TaskContext {
|
|
69
|
+
readonly taskId: string;
|
|
70
|
+
/** Record an outcome for this task. Overwrites any previous call. */
|
|
71
|
+
setOutcome(outcome: TaskOutcome): void;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Narrow contract for the outcome poster — lets `task()` be called with
|
|
75
|
+
* any object that knows how to submit outcomes. MetrxbotClient satisfies
|
|
76
|
+
* this via its `submitOutcome(taskId, outcome)` method (client.ts).
|
|
77
|
+
*/
|
|
78
|
+
export interface OutcomeSubmitter {
|
|
79
|
+
submitOutcome(taskId: string, outcome: TaskOutcome): Promise<unknown>;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Return the task_id of the currently-active task context, or undefined
|
|
83
|
+
* if not inside a task() block. Used by MetrxbotClient.buildHeaders to
|
|
84
|
+
* auto-inject X-Task-Id.
|
|
85
|
+
*/
|
|
86
|
+
export declare function currentTaskId(): string | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* Run `fn` inside a task context with auto-correlation + outcome.
|
|
89
|
+
*
|
|
90
|
+
* - The callback receives `{ taskId, setOutcome }`.
|
|
91
|
+
* - Any MetrxbotClient requests made inside receive X-Task-Id header
|
|
92
|
+
* automatically (via currentTaskId() lookup in buildHeaders).
|
|
93
|
+
* - If the callback throws, the original error is re-thrown. A
|
|
94
|
+
* best-effort failure outcome is posted first (unless disabled).
|
|
95
|
+
* - If the callback returns normally AND setOutcome was called, the
|
|
96
|
+
* outcome is posted before returning the result.
|
|
97
|
+
*/
|
|
98
|
+
export declare function task<T>(submitter: OutcomeSubmitter, fn: (ctx: TaskContext) => Promise<T>, opts?: TaskOptions): Promise<T>;
|
|
99
|
+
//# sourceMappingURL=task.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAKH;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAC1B,qBAAqB,GACrB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,uBAAuB,GACvB,oBAAoB,GACpB,cAAc,GACd,oBAAoB,GACpB,gBAAgB,GAChB,sBAAsB,GACtB,UAAU,CAAC;AAEf,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,OAAO,EAAE,OAAO,CAAC;IACjB,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;CACxC;AAQD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACvE;AAID;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,GAAG,SAAS,CAElD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,IAAI,CAAC,CAAC,EAC1B,SAAS,EAAE,gBAAgB,EAC3B,EAAE,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EACpC,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,CAAC,CAAC,CA+CZ"}
|
package/dist/task.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK v2 task() context — BenchLytix Token Economy (Session 4)
|
|
3
|
+
*
|
|
4
|
+
* Correlates a unit of agent work to a single task_id so that:
|
|
5
|
+
* 1. Any MetrxbotClient calls made inside the block thread `X-Task-Id`
|
|
6
|
+
* on the gateway request — the gateway writes this onto `llm_events`
|
|
7
|
+
* (migration 056 column).
|
|
8
|
+
* 2. After the block completes, an outcome row is POSTed to
|
|
9
|
+
* /api/v1/tasks/:task_id/outcome (Session 3 endpoint) with the
|
|
10
|
+
* outcome the caller captured via `setOutcome`.
|
|
11
|
+
*
|
|
12
|
+
* Propagation is async-safe via Node's AsyncLocalStorage (Node >=18).
|
|
13
|
+
*
|
|
14
|
+
* Example::
|
|
15
|
+
*
|
|
16
|
+
* import { MetrxbotClient, task } from '@metrxbot/sdk';
|
|
17
|
+
* const client = new MetrxbotClient({ apiKey });
|
|
18
|
+
*
|
|
19
|
+
* await task(client, async (ctx) => {
|
|
20
|
+
* const res = await client.chat({ model: 'gpt-4o', messages: [...] });
|
|
21
|
+
* ctx.setOutcome({ success: true, value_microcents: 250_000 });
|
|
22
|
+
* return res;
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // gateway saw X-Task-Id = ctx.taskId on the chat request;
|
|
26
|
+
* // /api/v1/tasks/{ctx.taskId}/outcome POSTed afterwards.
|
|
27
|
+
*
|
|
28
|
+
* Design rules:
|
|
29
|
+
* - Never mask the user's thrown error with an outcome-submission error.
|
|
30
|
+
* - If the block throws and autoOutcomeOnError=true (default), a
|
|
31
|
+
* success:false outcome is best-effort posted with the error message
|
|
32
|
+
* folded into metadata.
|
|
33
|
+
* - If the block completes without calling setOutcome(), NO outcome is
|
|
34
|
+
* posted. The task_id was still correlated on any gateway calls via
|
|
35
|
+
* X-Task-Id, which is enough for observability-only usage.
|
|
36
|
+
*/
|
|
37
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
38
|
+
import { randomUUID } from 'node:crypto';
|
|
39
|
+
const _storage = new AsyncLocalStorage();
|
|
40
|
+
/**
|
|
41
|
+
* Return the task_id of the currently-active task context, or undefined
|
|
42
|
+
* if not inside a task() block. Used by MetrxbotClient.buildHeaders to
|
|
43
|
+
* auto-inject X-Task-Id.
|
|
44
|
+
*/
|
|
45
|
+
export function currentTaskId() {
|
|
46
|
+
return _storage.getStore()?.taskId;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Run `fn` inside a task context with auto-correlation + outcome.
|
|
50
|
+
*
|
|
51
|
+
* - The callback receives `{ taskId, setOutcome }`.
|
|
52
|
+
* - Any MetrxbotClient requests made inside receive X-Task-Id header
|
|
53
|
+
* automatically (via currentTaskId() lookup in buildHeaders).
|
|
54
|
+
* - If the callback throws, the original error is re-thrown. A
|
|
55
|
+
* best-effort failure outcome is posted first (unless disabled).
|
|
56
|
+
* - If the callback returns normally AND setOutcome was called, the
|
|
57
|
+
* outcome is posted before returning the result.
|
|
58
|
+
*/
|
|
59
|
+
export async function task(submitter, fn, opts) {
|
|
60
|
+
const taskId = opts?.taskId ?? randomUUID();
|
|
61
|
+
const autoOutcomeOnError = opts?.autoOutcomeOnError !== false;
|
|
62
|
+
const state = { taskId, startedAt: Date.now() };
|
|
63
|
+
const ctx = {
|
|
64
|
+
taskId,
|
|
65
|
+
setOutcome(outcome) {
|
|
66
|
+
state.outcome = outcome;
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
let threw = false;
|
|
70
|
+
let error;
|
|
71
|
+
let result;
|
|
72
|
+
try {
|
|
73
|
+
result = await _storage.run(state, () => fn(ctx));
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
threw = true;
|
|
77
|
+
error = err;
|
|
78
|
+
}
|
|
79
|
+
if (threw) {
|
|
80
|
+
if (autoOutcomeOnError) {
|
|
81
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
82
|
+
try {
|
|
83
|
+
await submitter.submitOutcome(taskId, {
|
|
84
|
+
success: false,
|
|
85
|
+
metadata: {
|
|
86
|
+
...(state.outcome?.metadata ?? {}),
|
|
87
|
+
error: errMsg,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Swallow — never mask the caller's original exception with an
|
|
93
|
+
// outcome-submission failure. Transport errors are visible in
|
|
94
|
+
// the SDK's debug logger elsewhere.
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
if (state.outcome) {
|
|
100
|
+
await submitter.submitOutcome(taskId, state.outcome);
|
|
101
|
+
}
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=task.js.map
|
package/dist/task.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAoEzC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,EAAa,CAAC;AAEpD;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,QAAQ,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC;AACrC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,SAA2B,EAC3B,EAAoC,EACpC,IAAkB;IAElB,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,UAAU,EAAE,CAAC;IAC5C,MAAM,kBAAkB,GAAG,IAAI,EAAE,kBAAkB,KAAK,KAAK,CAAC;IAC9D,MAAM,KAAK,GAAc,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAE3D,MAAM,GAAG,GAAgB;QACvB,MAAM;QACN,UAAU,CAAC,OAAO;YAChB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAC1B,CAAC;KACF,CAAC;IAEF,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,KAAc,CAAC;IACnB,IAAI,MAAqB,CAAC;IAE1B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,GAAG,IAAI,CAAC;QACb,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE;oBACpC,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE;wBACR,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;wBAClC,KAAK,EAAE,MAAM;qBACd;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,+DAA+D;gBAC/D,8DAA8D;gBAC9D,oCAAoC;YACtC,CAAC;QACH,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,MAAW,CAAC;AACrB,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -6,6 +6,13 @@ export interface MetrxbotConfig {
|
|
|
6
6
|
apiKey: string;
|
|
7
7
|
/** Gateway URL (default: https://gateway.metrxbot.com) */
|
|
8
8
|
gatewayUrl?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Metrx REST API URL (default: https://metrxbot.com). Used for
|
|
11
|
+
* `submitOutcome()` which POSTs to `/api/v1/tasks/:task_id/outcome`
|
|
12
|
+
* on the web origin — this is separate from `gatewayUrl` (the LLM
|
|
13
|
+
* proxy edge).
|
|
14
|
+
*/
|
|
15
|
+
apiUrl?: string;
|
|
9
16
|
/** Default agent ID for all requests */
|
|
10
17
|
defaultAgentId?: string;
|
|
11
18
|
/** Default LLM provider (openai, anthropic, etc.) */
|
|
@@ -32,6 +39,13 @@ export interface RequestOptions {
|
|
|
32
39
|
providerKey?: string;
|
|
33
40
|
/** Force specific provider */
|
|
34
41
|
provider?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Explicit task_id override for this request. Normally unset — when
|
|
44
|
+
* the caller wraps work in `task()` the SDK auto-injects the current
|
|
45
|
+
* task's id via AsyncLocalStorage. Pass this only to override that
|
|
46
|
+
* or to correlate a standalone request.
|
|
47
|
+
*/
|
|
48
|
+
taskId?: string;
|
|
35
49
|
}
|
|
36
50
|
export interface ChatCompletionParams extends RequestOptions {
|
|
37
51
|
model: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IAEf,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,wCAAwC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,qDAAqD;IACrD,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAElB,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;IAEvB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|