@mcoda/mswarm 0.1.135-codali.2 → 0.1.135-codali.6
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/dist/vendor/codali/cli/TerminalCommand.d.ts.map +1 -1
- package/dist/vendor/codali/cli/TerminalCommand.js +4 -2
- package/dist/vendor/codali/cli/TerminalCredentials.js +2 -2
- package/dist/vendor/codali/eval/TerminalWorkflowCorpus.d.ts +1 -1
- package/dist/vendor/codali/eval/TerminalWorkflowCorpus.js +2 -2
- package/dist/vendor/codali/providers/ConfiguredModelScope.d.ts +1 -0
- package/dist/vendor/codali/providers/ConfiguredModelScope.d.ts.map +1 -1
- package/dist/vendor/codali/providers/ConfiguredModelScope.js +4 -0
- package/dist/vendor/codali/providers/ConfiguredProvider.d.ts +2 -0
- package/dist/vendor/codali/providers/ConfiguredProvider.d.ts.map +1 -1
- package/dist/vendor/codali/providers/ConfiguredProvider.js +16 -3
- package/dist/vendor/codali/providers/ProviderTypes.d.ts +2 -0
- package/dist/vendor/codali/providers/ProviderTypes.d.ts.map +1 -1
- package/dist/vendor/codali/providers/RequestUsage.d.ts +11 -0
- package/dist/vendor/codali/providers/RequestUsage.d.ts.map +1 -0
- package/dist/vendor/codali/providers/RequestUsage.js +33 -0
- package/dist/vendor/codali/runtime/SessionController.d.ts +1 -0
- package/dist/vendor/codali/runtime/SessionController.d.ts.map +1 -1
- package/dist/vendor/codali/runtime/SessionController.js +121 -20
- package/dist/vendor/codali/runtime/UsageReconciliation.d.ts +28 -0
- package/dist/vendor/codali/runtime/UsageReconciliation.d.ts.map +1 -0
- package/dist/vendor/codali/runtime/UsageReconciliation.js +68 -0
- package/dist/vendor/codali/runtime/VerificationCommand.d.ts +2 -0
- package/dist/vendor/codali/runtime/VerificationCommand.d.ts.map +1 -1
- package/dist/vendor/codali/runtime/VerificationCommand.js +28 -0
- package/dist/vendor/codali/session/AtomicState.d.ts.map +1 -1
- package/dist/vendor/codali/session/AtomicState.js +15 -1
- package/dist/vendor/codali/session/SessionStoragePath.d.ts.map +1 -1
- package/dist/vendor/codali/session/SessionStoragePath.js +28 -16
- package/dist/vendor/codali/tools/shell/AsyncProcess.d.ts +3 -0
- package/dist/vendor/codali/tools/shell/AsyncProcess.d.ts.map +1 -1
- package/dist/vendor/codali/tools/shell/AsyncProcess.js +1 -1
- package/dist/vendor/codali/tools/shell/HostToolchain.d.ts.map +1 -1
- package/dist/vendor/codali/tools/shell/HostToolchain.js +4 -2
- package/dist/vendor/codali/tools/shell/IsolatedExecutor.d.ts.map +1 -1
- package/dist/vendor/codali/tools/shell/IsolatedExecutor.js +5 -1
- package/package.json +3 -3
- package/scripts/media_gpu_lock.py +2 -2
- package/scripts/native_load_guard.py +257 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalCommand.d.ts","sourceRoot":"","sources":["../../src/cli/TerminalCommand.ts"],"names":[],"mappings":"AAKA,OAAO,EAA2E,KAAK,WAAW,EAA4B,KAAK,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAEzM,OAAO,EAAkB,KAAK,iBAAiB,EAAyB,MAAM,kCAAkC,CAAC;AAMjH,OAAO,EAAkC,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAI1F,OAAO,EAA2D,KAAK,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAOnI,UAAU,SAAS;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CAAE;AAC1U,MAAM,WAAW,YAAY;IAAG,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAAE;AAC9E,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,EAAE,KAAG,SAmBvD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAU,aAAa,MAAM,EAAE,UAAS;IAAE,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,sBAAsB,CAAC,CAAA;CAAO,KAAG,OAAO,CAAC,2BAA2B,CAqD5K,CAAC;AAOF,eAAO,MAAM,cAAc,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBzF,CAAC;AAEF,qBAAa,eAAe;WACb,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;mBAUnD,OAAO;
|
|
1
|
+
{"version":3,"file":"TerminalCommand.d.ts","sourceRoot":"","sources":["../../src/cli/TerminalCommand.ts"],"names":[],"mappings":"AAKA,OAAO,EAA2E,KAAK,WAAW,EAA4B,KAAK,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAEzM,OAAO,EAAkB,KAAK,iBAAiB,EAAyB,MAAM,kCAAkC,CAAC;AAMjH,OAAO,EAAkC,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAI1F,OAAO,EAA2D,KAAK,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAOnI,UAAU,SAAS;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CAAE;AAC1U,MAAM,WAAW,YAAY;IAAG,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAAE;AAC9E,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,EAAE,KAAG,SAmBvD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAU,aAAa,MAAM,EAAE,UAAS;IAAE,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,sBAAsB,CAAC,CAAA;CAAO,KAAG,OAAO,CAAC,2BAA2B,CAqD5K,CAAC;AAOF,eAAO,MAAM,cAAc,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBzF,CAAC;AAEF,qBAAa,eAAe;WACb,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;mBAUnD,OAAO;CAoI7B"}
|
|
@@ -378,8 +378,10 @@ export class TerminalCommand {
|
|
|
378
378
|
output(HELP);
|
|
379
379
|
else if (name === "/status")
|
|
380
380
|
output(controller.status());
|
|
381
|
-
else if (name === "/usage")
|
|
382
|
-
|
|
381
|
+
else if (name === "/usage") {
|
|
382
|
+
const reconciliation = await controller.reconcileUsage();
|
|
383
|
+
output({ session: controller.usageSnapshot(), reconciliation, server: await usageFor(resolved) });
|
|
384
|
+
}
|
|
383
385
|
else if (name === "/permissions") {
|
|
384
386
|
if (value === "clear")
|
|
385
387
|
await controller.clearPermissionGrants();
|
|
@@ -81,9 +81,9 @@ export const readTerminalCredential = async (fromStdin) => {
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
};
|
|
84
|
-
process.stderr.write("mSwarm API key: ");
|
|
85
84
|
process.stdin.setRawMode(true);
|
|
86
|
-
process.stdin.resume();
|
|
87
85
|
process.stdin.on("data", onData);
|
|
86
|
+
process.stdin.resume();
|
|
87
|
+
process.stderr.write("mSwarm API key: ");
|
|
88
88
|
});
|
|
89
89
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TerminalCorpusTask } from "./TerminalTaskCorpus.js";
|
|
2
|
-
export declare const TERMINAL_WORKFLOW_CORPUS_VERSION = "terminal-workflows-
|
|
2
|
+
export declare const TERMINAL_WORKFLOW_CORPUS_VERSION = "terminal-workflows-v3";
|
|
3
3
|
export declare function terminalWorkflowCorpus(): TerminalCorpusTask[];
|
|
4
4
|
export declare const terminalWorkflowCorpusHash: () => string;
|
|
5
5
|
export declare const terminalWorkflowCorpusDefinition: () => {
|
|
@@ -32,7 +32,7 @@ const coding = [
|
|
|
32
32
|
files: { "src/headers.mjs": "export const normalizeHeaders = entries => Object.fromEntries(entries);\n", "src/task.mjs": "export const buildRequest=(entries,body)=>({headers:Object.fromEntries(entries),body});\n" },
|
|
33
33
|
reference: { "src/headers.mjs": "export function normalizeHeaders(entries){const out=Object.create(null);for(const [raw,value]of entries){if(typeof raw!=='string'||typeof value!=='string')throw new TypeError('strings');const name=raw.replace(/^[ \\t]+|[ \\t]+$/g,'').toLowerCase();if(!/^[!#$%&'*+.^_`|~0-9a-z-]+$/.test(name)||/[\\r\\n]/.test(value))throw new TypeError('header');const v=value.replace(/^[ \\t]+|[ \\t]+$/g,'');out[name]=Object.hasOwn(out,name)?out[name]+', '+v:v;}return out;}\n", "src/task.mjs": "import {normalizeHeaders} from './headers.mjs';\nexport const buildRequest=(entries,body)=>({headers:normalizeHeaders(entries),body});\n" },
|
|
34
34
|
smoke: "assert.equal(m.buildRequest([['X-Id','a'],[' x-ID ','b']],null).headers['x-id'],'a, b');",
|
|
35
|
-
checks: "const {normalizeHeaders}=await import('./src/headers.mjs');const body={};const h=m.buildRequest(Object.freeze([Object.freeze(['__proto__','ok'])]),body);assert.equal(Object.getPrototypeOf(h.headers),null);assert.equal(h.headers.__proto__,'ok');assert.equal(h.body,body);assert.equal(normalizeHeaders([['X',' a\\t'],['x','']]).x,'a, ');for(const name of ['','a:b','a b','é','\\nx'])assert.throws(()=>normalizeHeaders([[name,'x']])
|
|
35
|
+
checks: "const {normalizeHeaders}=await import('./src/headers.mjs');const body={};const h=m.buildRequest(Object.freeze([Object.freeze(['__proto__','ok'])]),body);assert.equal(Object.getPrototypeOf(h.headers),null);assert.equal(h.headers.__proto__,'ok');assert.equal(h.body,body);assert.equal(normalizeHeaders([['X',' a\\t'],['x','']]).x,'a, ');for(const name of ['','a:b','a b','é','\\nx'])assert.throws(()=>normalizeHeaders([[name,'x']]));for(const v of ['a\\nb','a\\rb'])assert.throws(()=>normalizeHeaders([['x',v]]));",
|
|
36
36
|
},
|
|
37
37
|
{
|
|
38
38
|
id: "async-worker-pool",
|
|
@@ -81,7 +81,7 @@ const reports = [
|
|
|
81
81
|
files: { "src/cache.mjs": "const values=new Map();\nexport const get=(tenant,user)=>values.get(user);\nexport const set=(tenant,user,value)=>values.set(user,value);\n", "src/profile.mjs": "import {get} from './cache.mjs';\nexport const profile=(ctx,user)=>get(ctx.tenant,user);\n", "src/update.mjs": "import {set} from './cache.mjs';\nexport const update=(ctx,user,value)=>set(ctx.tenant,user,value);\n" },
|
|
82
82
|
expected: { owner: "src/cache.mjs", callers: ["src/profile.mjs", "src/update.mjs"], isolation: "unsafe", cause: "tenant-omitted", remedy: "include-tenant-and-user" } },
|
|
83
83
|
];
|
|
84
|
-
export const TERMINAL_WORKFLOW_CORPUS_VERSION = "terminal-workflows-
|
|
84
|
+
export const TERMINAL_WORKFLOW_CORPUS_VERSION = "terminal-workflows-v3";
|
|
85
85
|
export function terminalWorkflowCorpus() {
|
|
86
86
|
const common = (id) => ({ "package.json": JSON.stringify({ name: `workflow-${id}`, private: true, type: "module", scripts: { test: "node --test test/task.test.mjs" } }, null, 2) + "\n", "USER_NOTES.txt": `User-owned ${id} notes. Preserve byte for byte.\n` });
|
|
87
87
|
const tasks = coding.map(item => ({ id: item.id, family: "multi-file", variant: 1, split: "held-out",
|
|
@@ -33,6 +33,7 @@ export declare class ConfiguredModelScope {
|
|
|
33
33
|
private readonly limits;
|
|
34
34
|
private readonly stop;
|
|
35
35
|
private readonly pending;
|
|
36
|
+
private readonly invocationIds;
|
|
36
37
|
private toolCalls;
|
|
37
38
|
private readonly usage;
|
|
38
39
|
readonly id: `${string}-${string}-${string}-${string}-${string}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfiguredModelScope.d.ts","sourceRoot":"","sources":["../../src/providers/ConfiguredModelScope.ts"],"names":[],"mappings":"AACA,OAAO,EAAwD,KAAK,WAAW,EAAE,KAAK,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC5J,OAAO,EAA4C,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAClI,OAAO,KAAK,EAAE,QAAQ,EAAqC,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAErG,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IACnF,SAAS,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;CAC1C;AACD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzC,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAED,oFAAoF;AACpF,eAAO,MAAM,kBAAkB,GAAI,QAAQ,aAAa,KAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAQ/G,CAAC;AAEF,iFAAiF;AACjF,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2L;IACnN,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IACpD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2H;IACjJ,QAAQ,CAAC,EAAE,sDAAgB;gBAEf,QAAQ,EAAE,2BAA2B,EAAE,OAAO,GAAE;QAC1D,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACrI,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;KAC3C;IAWN,IAAI,MAAM,IAAI,WAAW,CAAmC;IAC5D,IAAI,UAAU,IAAI,MAAM,CAA+B;IACvD,IAAI,MAAM,IAAI,WAAW,CAA4C;IACrE,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO;IAClD,MAAM;;;;;;;;IACN,IAAI,SAAS,IAAI,MAAM,CAA2B;IAClD,WAAW,IAAI,IAAI;IASnB,MAAM,CAAC,OAAO,EAAE,MAAM;;;;IACtB,QAAQ,IAAI,gBAAgB;IAC5B,KAAK,IAAI,IAAI;IAEb,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ;YAKrB,QAAQ;
|
|
1
|
+
{"version":3,"file":"ConfiguredModelScope.d.ts","sourceRoot":"","sources":["../../src/providers/ConfiguredModelScope.ts"],"names":[],"mappings":"AACA,OAAO,EAAwD,KAAK,WAAW,EAAE,KAAK,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC5J,OAAO,EAA4C,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAClI,OAAO,KAAK,EAAE,QAAQ,EAAqC,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAErG,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IACnF,SAAS,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;CAC1C;AACD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzC,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAED,oFAAoF;AACpF,eAAO,MAAM,kBAAkB,GAAI,QAAQ,aAAa,KAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAQ/G,CAAC;AAEF,iFAAiF;AACjF,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2L;IACnN,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IACpD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2H;IACjJ,QAAQ,CAAC,EAAE,sDAAgB;gBAEf,QAAQ,EAAE,2BAA2B,EAAE,OAAO,GAAE;QAC1D,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACrI,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;KAC3C;IAWN,IAAI,MAAM,IAAI,WAAW,CAAmC;IAC5D,IAAI,UAAU,IAAI,MAAM,CAA+B;IACvD,IAAI,MAAM,IAAI,WAAW,CAA4C;IACrE,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO;IAClD,MAAM;;;;;;;;IACN,IAAI,SAAS,IAAI,MAAM,CAA2B;IAClD,WAAW,IAAI,IAAI;IASnB,MAAM,CAAC,OAAO,EAAE,MAAM;;;;IACtB,QAAQ,IAAI,gBAAgB;IAC5B,KAAK,IAAI,IAAI;IAEb,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ;YAKrB,QAAQ;CA4CvB"}
|
|
@@ -20,6 +20,7 @@ export class ConfiguredModelScope {
|
|
|
20
20
|
constructor(resolved, options = {}) {
|
|
21
21
|
this.controller = new AbortController();
|
|
22
22
|
this.pending = new Map();
|
|
23
|
+
this.invocationIds = new Set();
|
|
23
24
|
this.toolCalls = 0;
|
|
24
25
|
this.usage = { modelCalls: 0, inputTokens: 0, outputTokens: 0, totalTokens: 0, estimated: false, pendingCalls: 0 };
|
|
25
26
|
this.id = randomUUID();
|
|
@@ -70,10 +71,13 @@ export class ConfiguredModelScope {
|
|
|
70
71
|
effort: this.options.effort,
|
|
71
72
|
beforeRequest: async (route, bounded) => {
|
|
72
73
|
linked.signal.throwIfAborted();
|
|
74
|
+
if (this.invocationIds.has(route.id))
|
|
75
|
+
throw new Error("Model requestId has already been used in this scope; use a new UUID for each inference attempt");
|
|
73
76
|
const reservation = Math.ceil(JSON.stringify([bounded.messages, bounded.tools]).length / 3) + (bounded.maxTokens ?? this.limits.maxOutputTokens);
|
|
74
77
|
if (this.usage.modelCalls >= this.limits.maxModelCalls || this.usage.totalTokens + reservation > this.limits.maxTotalTokens)
|
|
75
78
|
throw new Error("Shared model budget exhausted");
|
|
76
79
|
invocation = route;
|
|
80
|
+
this.invocationIds.add(route.id);
|
|
77
81
|
this.usage.modelCalls++;
|
|
78
82
|
this.usage.totalTokens += reservation;
|
|
79
83
|
this.pending.set(route.id, reservation);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type OrchestrationProvider, type ResolvedOrchestrationConfig, type ModelOperation, type EffortLevel } from "../config/OrchestrationConfig.js";
|
|
2
|
+
import { type RequestUsageReceipt } from "./RequestUsage.js";
|
|
2
3
|
import type { Provider, ProviderRequest, ProviderResponse } from "./ProviderTypes.js";
|
|
3
4
|
export interface CatalogEntry {
|
|
4
5
|
id: string;
|
|
@@ -36,6 +37,7 @@ export declare class ModelServiceClient {
|
|
|
36
37
|
}): Promise<unknown>;
|
|
37
38
|
catalog(signal?: AbortSignal, refresh?: boolean): Promise<CatalogEntry[]>;
|
|
38
39
|
usage(signal?: AbortSignal): Promise<unknown>;
|
|
40
|
+
requestUsage(requestId: string, signal?: AbortSignal): Promise<RequestUsageReceipt>;
|
|
39
41
|
/** The proxy and selected node must both advertise this transport contract.
|
|
40
42
|
* A model's supports_reasoning flag alone says nothing about request forwarding. */
|
|
41
43
|
requireNativeReasoning(modelId: string, parameters: string[], signal?: AbortSignal): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfiguredProvider.d.ts","sourceRoot":"","sources":["../../src/providers/ConfiguredProvider.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkB,KAAK,qBAAqB,EAAE,KAAK,2BAA2B,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"ConfiguredProvider.d.ts","sourceRoot":"","sources":["../../src/providers/ConfiguredProvider.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkB,KAAK,qBAAqB,EAAE,KAAK,2BAA2B,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAGvK,OAAO,EAAqB,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEhF,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AACD,oFAAoF;AACpF,MAAM,WAAW,kBAAkB;IAAG,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CAAE;AACxF,eAAO,MAAM,oBAAoB,GAAI,SAAQ,kBAAuB,KAAG,kBAMtE,CAAC;AAOF,2FAA2F;AAC3F,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,OAAO,EAAE,MAAM;CAC5B;AAED,eAAO,MAAM,kBAAkB,GAAU,UAAU,qBAAqB,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAiBpG,CAAC;AAEF,qBAAa,kBAAkB;IAGjB,QAAQ,CAAC,QAAQ,EAAE,qBAAqB;IAAE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAF1F,OAAO,CAAC,KAAK,CAAC,CAA4D;IAC1E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;gBACvB,QAAQ,EAAE,qBAAqB,EAAmB,kBAAkB,CAAC,EAAE,MAAM,YAAA,EAAE,MAAM,CAAC,EAAE,kBAAkB;IAI/H,OAAO,CAAC,UAAU;IAEZ,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBhI,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAqBvE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAK7C,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAOzF;wFACoF;IAC9E,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBzG;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACrH,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClD;AACD,qBAAa,kBAAmB,YAAW,QAAQ;IAMrC,QAAQ,CAAC,QAAQ,EAAE,2BAA2B;IAAE,QAAQ,CAAC,OAAO;IAAW,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL/G,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,iBAAiB,QAAQ;IAClC,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmC;gBAC1C,QAAQ,EAAE,2BAA2B,EAAW,OAAO,SAAS,EAAmB,OAAO,GAAE;QAC/G,MAAM,CAAC,EAAE,kBAAkB,CAAC;QAC5B,yFAAyF;QACzF,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACzF,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACtF;IASN,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB;IAOxC,MAAM,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,YAAY,UAAQ;;;;;;IAiB5E,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA0BpE"}
|
|
@@ -5,6 +5,7 @@ import { resolveCredential } from "../runcontext/CredentialFile.js";
|
|
|
5
5
|
import { resolveBinding } from "../config/OrchestrationConfig.js";
|
|
6
6
|
import { OpenAiCompatibleProvider } from "./OpenAiCompatibleProvider.js";
|
|
7
7
|
import { ModelServiceError } from "./ModelServiceError.js";
|
|
8
|
+
import { parseRequestUsage } from "./RequestUsage.js";
|
|
8
9
|
import { registerSecretValue } from "../runtime/SecretRedaction.js";
|
|
9
10
|
export const normalizeModelCaller = (caller = {}) => {
|
|
10
11
|
const clientIdentity = caller.clientIdentity?.trim();
|
|
@@ -134,6 +135,14 @@ export class ModelServiceClient {
|
|
|
134
135
|
return { available: false };
|
|
135
136
|
return this.json(this.provider.usageUrl ?? new URL("/v1/swarm/runtime/usage-limits", this.provider.baseUrl).toString(), { signal });
|
|
136
137
|
}
|
|
138
|
+
async requestUsage(requestId, signal) {
|
|
139
|
+
if (this.provider.adapter !== "mswarm")
|
|
140
|
+
throw new Error("Provider has no authenticated request receipt contract");
|
|
141
|
+
if (!/^[a-f0-9]{8}-[a-f0-9]{4}-[1-8][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/i.test(requestId))
|
|
142
|
+
throw new Error("Invalid request UUID");
|
|
143
|
+
const url = new URL(`/v1/swarm/self-hosted/requests/${encodeURIComponent(requestId)}/receipts`, this.provider.baseUrl);
|
|
144
|
+
return parseRequestUsage(requestId, await this.json(url.href, { signal, timeoutMs: 10000 }));
|
|
145
|
+
}
|
|
137
146
|
/** The proxy and selected node must both advertise this transport contract.
|
|
138
147
|
* A model's supports_reasoning flag alone says nothing about request forwarding. */
|
|
139
148
|
async requireNativeReasoning(modelId, parameters, signal) {
|
|
@@ -212,8 +221,12 @@ export class ConfiguredProvider {
|
|
|
212
221
|
}
|
|
213
222
|
async generate(request) {
|
|
214
223
|
request.signal?.throwIfAborted();
|
|
224
|
+
const requestId = request.requestId ?? randomUUID();
|
|
225
|
+
if (typeof requestId !== "string" || !/^[a-f0-9]{8}-[a-f0-9]{4}-[1-8][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/i.test(requestId)) {
|
|
226
|
+
throw new Error("Model requestId must be a UUID for this inference attempt");
|
|
227
|
+
}
|
|
215
228
|
const { id, model, provider, actual } = await this.select("chat.completions", request.signal, !!request.tools?.length);
|
|
216
|
-
const invocation = { id:
|
|
229
|
+
const invocation = { id: requestId, binding: this.binding, configHash: this.resolved.hash, modelId: id, catalogId: model.catalogId, backend: actual.backend, host: model.host };
|
|
217
230
|
const nativeReasoning = this.options.effort ? model.reasoning?.[this.options.effort] : undefined;
|
|
218
231
|
if (nativeReasoning)
|
|
219
232
|
invocation.nativeReasoningRequest = { ...nativeReasoning };
|
|
@@ -223,12 +236,12 @@ export class ConfiguredProvider {
|
|
|
223
236
|
const inputEstimate = Math.ceil(JSON.stringify([request.messages, request.tools]).length / 3);
|
|
224
237
|
if (inputEstimate + maxTokens > Math.min(model.contextWindow, actual.contextWindow ?? model.contextWindow))
|
|
225
238
|
throw new Error("Context budget exceeded; checkpoint and compact before continuing");
|
|
226
|
-
const bounded = { ...request, maxTokens, stream: request.stream === true && model.supportsStreaming === true };
|
|
239
|
+
const bounded = { ...request, requestId, maxTokens, stream: request.stream === true && model.supportsStreaming === true };
|
|
227
240
|
await this.options.beforeRequest?.(invocation, bounded);
|
|
228
241
|
const adapter = new OpenAiCompatibleProvider({
|
|
229
242
|
model: model.catalogId, baseUrl: provider.baseUrl, apiKey: this.credentials[model.provider] ?? await providerCredential(provider), timeoutMs: 300000,
|
|
230
243
|
supportsStreaming: model.supportsStreaming ?? true, supportsTools: model.supportsTools,
|
|
231
|
-
headers: provider.adapter === "mswarm" ? modelCallerHeaders(this.caller) : undefined, retryTransient: false,
|
|
244
|
+
headers: provider.adapter === "mswarm" ? { ...modelCallerHeaders(this.caller), "x-request-id": requestId } : undefined, retryTransient: false,
|
|
232
245
|
extraBody: nativeReasoning,
|
|
233
246
|
});
|
|
234
247
|
const result = await adapter.generate(bounded);
|
|
@@ -52,6 +52,8 @@ export interface ProviderUsage {
|
|
|
52
52
|
totalTokens?: number;
|
|
53
53
|
}
|
|
54
54
|
export interface ProviderRequest {
|
|
55
|
+
/** Unique UUID for this inference attempt, retained by the caller for accounting. */
|
|
56
|
+
requestId?: string;
|
|
55
57
|
signal?: AbortSignal;
|
|
56
58
|
messages: ProviderMessage[];
|
|
57
59
|
tools?: ProviderToolDefinition[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderTypes.d.ts","sourceRoot":"","sources":["../../src/providers/ProviderTypes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProviderTypes.d.ts","sourceRoot":"","sources":["../../src/providers/ProviderTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ProviderUsage } from "./ProviderTypes.js";
|
|
2
|
+
export interface RequestUsageReceipt {
|
|
3
|
+
requestId: string;
|
|
4
|
+
complete: boolean;
|
|
5
|
+
invocationIds: string[];
|
|
6
|
+
usage?: Required<ProviderUsage>;
|
|
7
|
+
reason?: string;
|
|
8
|
+
}
|
|
9
|
+
/** A partial page, active attempt or absent counter cannot settle a reservation. */
|
|
10
|
+
export declare function parseRequestUsage(requestId: string, payload: unknown): RequestUsageReceipt;
|
|
11
|
+
//# sourceMappingURL=RequestUsage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequestUsage.d.ts","sourceRoot":"","sources":["../../src/providers/RequestUsage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,mBAAmB,CAuB1F"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** A partial page, active attempt or absent counter cannot settle a reservation. */
|
|
2
|
+
export function parseRequestUsage(requestId, payload) {
|
|
3
|
+
const value = payload;
|
|
4
|
+
if (!value || value.schema_version !== 1 || value.client_request_id !== requestId ||
|
|
5
|
+
typeof value.truncated !== "boolean" || !Array.isArray(value.invocations) ||
|
|
6
|
+
value.invocations.length === 0 || value.invocations.length > 16)
|
|
7
|
+
throw new Error("Invalid request usage receipt");
|
|
8
|
+
const ids = new Set();
|
|
9
|
+
let complete = !value.truncated;
|
|
10
|
+
const usage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
|
|
11
|
+
const valid = (n) => Number.isSafeInteger(n) && n >= 0;
|
|
12
|
+
for (const item of value.invocations) {
|
|
13
|
+
const row = item;
|
|
14
|
+
if (!row || typeof row.id !== "string" || !row.id || row.id.length > 256 || ids.has(row.id) ||
|
|
15
|
+
row.operation !== "chat.completions" || !["reserved", "queued", "leased", "started", "success", "failed", "timeout"].includes(String(row.status))) {
|
|
16
|
+
throw new Error("Invalid request usage invocation");
|
|
17
|
+
}
|
|
18
|
+
ids.add(row.id);
|
|
19
|
+
const tokens = row.usage;
|
|
20
|
+
if (!["success", "failed", "timeout"].includes(String(row.status)) || !tokens ||
|
|
21
|
+
!valid(tokens.prompt_tokens) || !valid(tokens.completion_tokens) || !valid(tokens.total_tokens) ||
|
|
22
|
+
tokens.total_tokens < tokens.prompt_tokens + tokens.completion_tokens) {
|
|
23
|
+
complete = false;
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
usage.inputTokens += tokens.prompt_tokens;
|
|
27
|
+
usage.outputTokens += tokens.completion_tokens;
|
|
28
|
+
usage.totalTokens += tokens.total_tokens;
|
|
29
|
+
}
|
|
30
|
+
if (!Object.values(usage).every(valid))
|
|
31
|
+
throw new Error("Request usage exceeds safe accounting bounds");
|
|
32
|
+
return { requestId, complete, invocationIds: [...ids], ...(complete ? { usage } : { reason: "Server receipt is incomplete, active, or has unreported usage" }) };
|
|
33
|
+
}
|
|
@@ -102,6 +102,7 @@ export declare class SessionController {
|
|
|
102
102
|
get busy(): boolean;
|
|
103
103
|
status(): Record<string, unknown>;
|
|
104
104
|
usageSnapshot(): SessionUsage;
|
|
105
|
+
reconcileUsage(): Promise<Record<string, unknown>>;
|
|
105
106
|
mediaStore(): MediaJobStore;
|
|
106
107
|
private workspaceLedger;
|
|
107
108
|
artifacts(): Promise<Record<string, unknown>[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionController.d.ts","sourceRoot":"","sources":["../../src/runtime/SessionController.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,KAAK,EAAE,SAAS,EAAY,MAAM,yBAAyB,CAAC;AAInE,OAAO,KAAK,EAAE,QAAQ,EAAsD,MAAM,+BAA+B,CAAC;AAClH,OAAO,EAAwD,KAAK,WAAW,EAAE,KAAK,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC5J,OAAO,EAAE,cAAc,EAA8D,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"SessionController.d.ts","sourceRoot":"","sources":["../../src/runtime/SessionController.ts"],"names":[],"mappings":"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"}
|