@telora/daemon 0.18.78 → 0.18.80
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/build-info.json +4 -3
- package/dist/backends/resolve.d.ts +19 -5
- package/dist/backends/resolve.d.ts.map +1 -1
- package/dist/backends/resolve.js +23 -37
- package/dist/backends/resolve.js.map +1 -1
- package/dist/directive/directive-dispatch.d.ts.map +1 -1
- package/dist/directive/directive-dispatch.js +2 -0
- package/dist/directive/directive-dispatch.js.map +1 -1
- package/dist/directive/directive-queue.d.ts +10 -0
- package/dist/directive/directive-queue.d.ts.map +1 -1
- package/dist/directive/directive-queue.js.map +1 -1
- package/dist/focus-executor.d.ts +57 -5
- package/dist/focus-executor.d.ts.map +1 -1
- package/dist/focus-executor.js +124 -21
- package/dist/focus-executor.js.map +1 -1
- package/dist/host-control/index.d.ts +3 -3
- package/dist/host-control/index.d.ts.map +1 -1
- package/dist/host-control/index.js +2 -2
- package/dist/host-control/index.js.map +1 -1
- package/dist/host-control/load.d.ts +30 -1
- package/dist/host-control/load.d.ts.map +1 -1
- package/dist/host-control/load.js +47 -6
- package/dist/host-control/load.js.map +1 -1
- package/dist/host-control/swap-manager.d.ts +38 -0
- package/dist/host-control/swap-manager.d.ts.map +1 -1
- package/dist/host-control/swap-manager.js +60 -0
- package/dist/host-control/swap-manager.js.map +1 -1
- package/dist/model-resolution.d.ts +60 -18
- package/dist/model-resolution.d.ts.map +1 -1
- package/dist/model-resolution.js +75 -19
- package/dist/model-resolution.js.map +1 -1
- package/dist/queries/local-models.d.ts +10 -0
- package/dist/queries/local-models.d.ts.map +1 -1
- package/dist/queries/local-models.js +2 -0
- package/dist/queries/local-models.js.map +1 -1
- package/dist/queries/schemas.d.ts +4 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +5 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/types/workflow.d.ts +13 -0
- package/dist/types/workflow.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* inside `ensureLoaded`) so Delivery 3 can replace the fixed `DEFAULT_MAX_SEQ_LENGTH`
|
|
20
20
|
* floor with a computed safe value without re-architecting this module.
|
|
21
21
|
*/
|
|
22
|
-
import { hostGet, hostPost, HostControlError, HOST_CONTROL_ERROR_UNREACHABLE } from './client.js';
|
|
22
|
+
import { hostGet, hostPost, hostRootFromBaseUrl, HostControlError, HOST_CONTROL_ERROR_UNREACHABLE } from './client.js';
|
|
23
23
|
import { readLoadableCatalog } from './catalog.js';
|
|
24
24
|
/**
|
|
25
25
|
* The control surface lives under `/v1` -- the SAME segment the stored baseUrl
|
|
@@ -30,6 +30,22 @@ import { readLoadableCatalog } from './catalog.js';
|
|
|
30
30
|
export const HOST_CONTROL_LOAD_PATH = '/load';
|
|
31
31
|
export const HOST_CONTROL_UNLOAD_PATH = '/unload';
|
|
32
32
|
export const HOST_CONTROL_STATUS_PATH = '/status';
|
|
33
|
+
/**
|
|
34
|
+
* The PRIMARY readiness endpoint, under the host ROOT (NOT `/v1`) -- the same
|
|
35
|
+
* `/api/...` control surface the catalog (`/api/models/local`) and sizing
|
|
36
|
+
* (`/api/system/hardware`) reads already live on. The live host (Unsloth Studio)
|
|
37
|
+
* reports readiness here as `{ status, active_model, active_requests }` and does
|
|
38
|
+
* NOT serve `/v1/status`. `getStatus` reads this FIRST and only falls back to the
|
|
39
|
+
* legacy OpenAI-style `/v1/status` (`HOST_CONTROL_STATUS_PATH`, appended to the
|
|
40
|
+
* `/v1` baseUrl) for hosts that expose that instead.
|
|
41
|
+
*
|
|
42
|
+
* Regression this closes: the readiness probe was pinned to `/v1/status` only.
|
|
43
|
+
* On a host that does not serve it, the probe failed, `normalizeStatus` read the
|
|
44
|
+
* absence as "nothing resident", `decideSwap` chose `load` for an ALREADY-resident
|
|
45
|
+
* model, and the readiness poll could never confirm -> a perpetual load-timeout
|
|
46
|
+
* that blocked every spawn for the focus.
|
|
47
|
+
*/
|
|
48
|
+
export const HOST_CONTROL_MONITOR_PATH = '/api/inference/monitor';
|
|
33
49
|
/**
|
|
34
50
|
* Default max sequence length for a load. Sized at the live-proven 16384, which
|
|
35
51
|
* clears codex's ~8k turn-1 context floor with headroom. NOTE: Delivery 3 will
|
|
@@ -84,8 +100,13 @@ function firstStringOrNull(obj, keys) {
|
|
|
84
100
|
}
|
|
85
101
|
return null;
|
|
86
102
|
}
|
|
87
|
-
/**
|
|
88
|
-
|
|
103
|
+
/**
|
|
104
|
+
* Candidate keys carrying the currently-loaded model id on a readiness body.
|
|
105
|
+
* `active_model`/`activeModel` come FIRST because the live `/api/inference/monitor`
|
|
106
|
+
* surface reports the resident model under `active_model`; the rest cover the
|
|
107
|
+
* legacy `/v1/status` shape.
|
|
108
|
+
*/
|
|
109
|
+
const STATUS_LOADED_KEYS = ['active_model', 'activeModel', 'model', 'id', 'loaded_model', 'loadedModel', 'model_id'];
|
|
89
110
|
/** Candidate keys carrying a readiness signal on a `/v1/status` body. */
|
|
90
111
|
const STATUS_READY_KEYS = ['status', 'state', 'ready'];
|
|
91
112
|
/**
|
|
@@ -171,10 +192,30 @@ export async function unloadModel(baseUrl, apiKey, unloadTimeoutMs = HOST_CONTRO
|
|
|
171
192
|
timeoutMs: unloadTimeoutMs,
|
|
172
193
|
});
|
|
173
194
|
}
|
|
174
|
-
/**
|
|
195
|
+
/**
|
|
196
|
+
* Read current host readiness, normalized to a typed shape. Reads the host-root
|
|
197
|
+
* `/api/inference/monitor` FIRST (the live control-surface readiness endpoint,
|
|
198
|
+
* peer of the `/api/...` catalog + sizing reads), then falls back to the legacy
|
|
199
|
+
* OpenAI-style `/v1/status` for hosts that only expose that.
|
|
200
|
+
*
|
|
201
|
+
* Fallback is keyed on the monitor endpoint ERRORING (absent / unreachable), NOT
|
|
202
|
+
* on an empty body: a host that answers `/api/inference/monitor` with HTTP 200 IS
|
|
203
|
+
* the control surface, so an empty body there means "nothing resident" and is
|
|
204
|
+
* trusted directly. Only a host that does not serve the endpoint at all (the GET
|
|
205
|
+
* throws) routes to the legacy probe. If BOTH fail the error propagates -- the
|
|
206
|
+
* caller skips the spawn for that tick rather than spawning against an unconfirmed
|
|
207
|
+
* model.
|
|
208
|
+
*/
|
|
175
209
|
export async function getStatus(baseUrl, apiKey) {
|
|
176
|
-
const
|
|
177
|
-
|
|
210
|
+
const monitorUrl = `${hostRootFromBaseUrl(baseUrl)}${HOST_CONTROL_MONITOR_PATH}`;
|
|
211
|
+
try {
|
|
212
|
+
return normalizeStatus(await hostGet(monitorUrl, { apiKey }));
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// Monitor endpoint absent/unreachable on this host -> legacy OpenAI-style probe.
|
|
216
|
+
const payload = await hostGet(controlUrl(baseUrl, HOST_CONTROL_STATUS_PATH), { apiKey });
|
|
217
|
+
return normalizeStatus(payload);
|
|
218
|
+
}
|
|
178
219
|
}
|
|
179
220
|
/**
|
|
180
221
|
* Resolve a chosen local_models `model` id to the host's `/v1/load` target by
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/host-control/load.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/host-control/load.ts"],"names":[],"mappings":"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"}
|
|
@@ -91,4 +91,42 @@ export declare function claimResidentHost(args: {
|
|
|
91
91
|
export declare function releaseHostByFocus(focusId: string): void;
|
|
92
92
|
/** Test-only: clear the per-host swap registry between cases. */
|
|
93
93
|
export declare function __resetHostSwapManager(): void;
|
|
94
|
+
/**
|
|
95
|
+
* Test-only: true when NO host entry references `focusId` (neither as a
|
|
96
|
+
* residency owner nor in the focus->root index). Lets a test assert the registry
|
|
97
|
+
* was fully reset after a failed/timed-out swap + teardown, without reaching into
|
|
98
|
+
* the private maps.
|
|
99
|
+
*/
|
|
100
|
+
export declare function __hostSwapRegistryHasFocus(focusId: string): boolean;
|
|
101
|
+
/** A resolved per-pass local-model binding: which model on which host. */
|
|
102
|
+
export interface HostPassBinding {
|
|
103
|
+
pass: 'coding' | 'review';
|
|
104
|
+
/** The resolved local model id (the host's served model id). */
|
|
105
|
+
modelId: string;
|
|
106
|
+
/** The host base URL the pass routes to (the GPU host). */
|
|
107
|
+
baseUrl: string;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* PURE: detect two DIFFERENT local models bound to passes that share one GPU
|
|
111
|
+
* host. Groups bindings by host ROOT (so `/v1`-suffixed vs root base URLs for the
|
|
112
|
+
* same host collapse together); a conflict exists when one root carries more than
|
|
113
|
+
* one distinct model id. Returns the offending root + the distinct models, or
|
|
114
|
+
* `{ conflict: false }`. No HTTP, no state -- unit-testable.
|
|
115
|
+
*/
|
|
116
|
+
export declare function detectSingleHostModelConflict(bindings: HostPassBinding[]): {
|
|
117
|
+
conflict: true;
|
|
118
|
+
root: string;
|
|
119
|
+
models: string[];
|
|
120
|
+
} | {
|
|
121
|
+
conflict: false;
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Process-level dedupe gate for the single-host conflict surfacing: returns true
|
|
125
|
+
* the FIRST time it is asked for a focus, false on every subsequent call within
|
|
126
|
+
* the run. Keeps a wedged conflict from re-escalating + re-logging every 30s
|
|
127
|
+
* poll while still raising it once so an operator sees it.
|
|
128
|
+
*/
|
|
129
|
+
export declare function shouldSurfaceHostConflictOnce(focusId: string): boolean;
|
|
130
|
+
/** Test-only: clear the per-focus conflict-surfacing dedupe set. */
|
|
131
|
+
export declare function __resetHostConflictSurfacing(): void;
|
|
94
132
|
//# sourceMappingURL=swap-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swap-manager.d.ts","sourceRoot":"","sources":["../../src/host-control/swap-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,8DAA8D;AAC9D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAY3D,6EAA6E;AAC7E,MAAM,MAAM,mBAAmB,GAC3B;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GACnB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAOxC,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAQD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;CACzC,GAAG,mBAAmB,CA8CtB;AAWD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;CAC7C,GAAG,mBAAmB,CAYtB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMxD;AAED,iEAAiE;AACjE,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C"}
|
|
1
|
+
{"version":3,"file":"swap-manager.d.ts","sourceRoot":"","sources":["../../src/host-control/swap-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,8DAA8D;AAC9D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAY3D,6EAA6E;AAC7E,MAAM,MAAM,mBAAmB,GAC3B;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GACnB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAOxC,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAQD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;CACzC,GAAG,mBAAmB,CA8CtB;AAWD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;CAC7C,GAAG,mBAAmB,CAYtB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMxD;AAED,iEAAiE;AACjE,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMnE;AAWD,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,eAAe,EAAE,GAEzB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,GAClD;IAAE,QAAQ,EAAE,KAAK,CAAA;CAAE,CAkBtB;AAKD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAItE;AAED,oEAAoE;AACpE,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD"}
|
|
@@ -153,4 +153,64 @@ export function __resetHostSwapManager() {
|
|
|
153
153
|
byRoot.clear();
|
|
154
154
|
rootByFocus.clear();
|
|
155
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Test-only: true when NO host entry references `focusId` (neither as a
|
|
158
|
+
* residency owner nor in the focus->root index). Lets a test assert the registry
|
|
159
|
+
* was fully reset after a failed/timed-out swap + teardown, without reaching into
|
|
160
|
+
* the private maps.
|
|
161
|
+
*/
|
|
162
|
+
export function __hostSwapRegistryHasFocus(focusId) {
|
|
163
|
+
if (rootByFocus.has(focusId))
|
|
164
|
+
return true;
|
|
165
|
+
for (const entry of byRoot.values()) {
|
|
166
|
+
if (entry.ownerFocusId === focusId)
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* PURE: detect two DIFFERENT local models bound to passes that share one GPU
|
|
173
|
+
* host. Groups bindings by host ROOT (so `/v1`-suffixed vs root base URLs for the
|
|
174
|
+
* same host collapse together); a conflict exists when one root carries more than
|
|
175
|
+
* one distinct model id. Returns the offending root + the distinct models, or
|
|
176
|
+
* `{ conflict: false }`. No HTTP, no state -- unit-testable.
|
|
177
|
+
*/
|
|
178
|
+
export function detectSingleHostModelConflict(bindings) {
|
|
179
|
+
const modelsByRoot = new Map();
|
|
180
|
+
for (const b of bindings) {
|
|
181
|
+
if (!b.modelId || !b.baseUrl)
|
|
182
|
+
continue;
|
|
183
|
+
const root = hostRootFromBaseUrl(b.baseUrl);
|
|
184
|
+
let set = modelsByRoot.get(root);
|
|
185
|
+
if (!set) {
|
|
186
|
+
set = new Set();
|
|
187
|
+
modelsByRoot.set(root, set);
|
|
188
|
+
}
|
|
189
|
+
set.add(b.modelId);
|
|
190
|
+
}
|
|
191
|
+
for (const [root, models] of modelsByRoot) {
|
|
192
|
+
if (models.size > 1) {
|
|
193
|
+
return { conflict: true, root, models: [...models] };
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return { conflict: false };
|
|
197
|
+
}
|
|
198
|
+
/** focusId set -- surfacing is raised at most once per focus per daemon run. */
|
|
199
|
+
const surfacedHostConflictFocuses = new Set();
|
|
200
|
+
/**
|
|
201
|
+
* Process-level dedupe gate for the single-host conflict surfacing: returns true
|
|
202
|
+
* the FIRST time it is asked for a focus, false on every subsequent call within
|
|
203
|
+
* the run. Keeps a wedged conflict from re-escalating + re-logging every 30s
|
|
204
|
+
* poll while still raising it once so an operator sees it.
|
|
205
|
+
*/
|
|
206
|
+
export function shouldSurfaceHostConflictOnce(focusId) {
|
|
207
|
+
if (surfacedHostConflictFocuses.has(focusId))
|
|
208
|
+
return false;
|
|
209
|
+
surfacedHostConflictFocuses.add(focusId);
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
212
|
+
/** Test-only: clear the per-focus conflict-surfacing dedupe set. */
|
|
213
|
+
export function __resetHostConflictSurfacing() {
|
|
214
|
+
surfacedHostConflictFocuses.clear();
|
|
215
|
+
}
|
|
156
216
|
//# sourceMappingURL=swap-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swap-manager.js","sourceRoot":"","sources":["../../src/host-control/swap-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"swap-manager.js","sourceRoot":"","sources":["../../src/host-control/swap-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,73 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Unified
|
|
2
|
+
* Unified per-pass model precedence -- the ONE place the daemon decides which
|
|
3
|
+
* model, engine, and local model a focus team launches under, applied
|
|
4
|
+
* identically at initial spawn AND at stage respawn.
|
|
3
5
|
*
|
|
4
|
-
*
|
|
5
|
-
* identically at initial spawn AND at stage respawn:
|
|
6
|
+
* There are THREE per-pass axes, and all three resolve under the SAME ordering:
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
-
* -> stage directive model
|
|
9
|
-
* -> CLI default (null = let the backend pick)
|
|
8
|
+
* Focus override -> Workflow stage directive -> Default
|
|
10
9
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
10
|
+
* - cloud model id (focus pipeline_config.model | directive.model | CLI default/null)
|
|
11
|
+
* - engine (focus engine_override.{pass} | directive.engine | product/org/global default)
|
|
12
|
+
* - local model (focus local_model_overrides.{pass} | directive.localModel | none/null)
|
|
13
|
+
*
|
|
14
|
+
* The workflow stage's directive is the source of truth for "how this stage
|
|
15
|
+
* thinks"; the focus selector is an explicit opt-in OVERRIDE. An unset focus
|
|
16
|
+
* axis means "inherit the per-stage workflow value" -- the focus is NOT pinning
|
|
17
|
+
* anything on that axis, so the stage value wins. An unset stage value in turn
|
|
18
|
+
* falls through to the axis default (null cloud model = let the backend pick;
|
|
19
|
+
* null local model = no local model; engine = product -> org -> global default).
|
|
16
20
|
*
|
|
17
21
|
* Engine-compat filtering (never pass a Claude id to a cloud Codex engine,
|
|
18
22
|
* route a local-Codex pass to its selected model) is applied by the callers
|
|
19
|
-
* BEFORE the
|
|
20
|
-
* selectPipelineModelForSpawn / selectDirectiveModelForSpawn, which null out
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
23
|
+
* BEFORE the inputs reach the cloud-model helper -- see focus-executor's
|
|
24
|
+
* selectPipelineModelForSpawn / selectDirectiveModelForSpawn, which null out an
|
|
25
|
+
* input the resolved backend cannot run. These helpers are the single, pure
|
|
26
|
+
* precedence steps every caller funnels through, so spawn and respawn can never
|
|
27
|
+
* diverge on ordering, and the precedence lives in exactly one module per the
|
|
28
|
+
* no-invisible-cascading principle.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* First non-empty trimmed candidate, or null. The shared precedence primitive:
|
|
32
|
+
* Focus > Workflow > Default is expressed as `firstPresent(focus, workflow,
|
|
33
|
+
* ...defaults)`. A blank/whitespace string is treated as "unset" so an empty
|
|
34
|
+
* override does not shadow the inherited value.
|
|
24
35
|
*/
|
|
36
|
+
export declare function firstPresent(...candidates: Array<string | null | undefined>): string | null;
|
|
25
37
|
/**
|
|
26
|
-
* Resolve the effective
|
|
38
|
+
* Resolve the effective CLOUD MODEL id from the focus override and the stage
|
|
27
39
|
* directive model, both already filtered for backend compatibility by the
|
|
28
|
-
* caller. Pure --
|
|
40
|
+
* caller. Pure -- Focus > Workflow > Default (null = let the backend pick).
|
|
29
41
|
*/
|
|
30
42
|
export declare function resolveTeamModel(focusOverrideModel: string | null | undefined, stageDirectiveModel: string | null | undefined): string | null;
|
|
43
|
+
/**
|
|
44
|
+
* Resolve the effective LOCAL MODEL ref (a `local_models` row id) from the focus
|
|
45
|
+
* per-pass override and the stage directive's localModel, under the SAME
|
|
46
|
+
* Focus > Workflow > Default ordering. Default is null -- no local model means
|
|
47
|
+
* the pass runs on the resolved engine's own default model. Pure + testable.
|
|
48
|
+
*/
|
|
49
|
+
export declare function resolveLocalModelRefPrecedence(focusOverrideLocalRef: string | null | undefined, stageDirectiveLocalRef: string | null | undefined): string | null;
|
|
50
|
+
/** Where a resolved engine id came from (always logged by the caller). */
|
|
51
|
+
export type EngineResolutionSource = 'focus-override' | 'stage-directive' | 'product-default' | 'org-default' | 'default';
|
|
52
|
+
/**
|
|
53
|
+
* Resolve the ENGINE id (and its source) for a pass under the unified
|
|
54
|
+
* precedence. The engine axis has the same Focus > Workflow head as the other
|
|
55
|
+
* two, then keeps the existing product -> org -> global default tail (so engine
|
|
56
|
+
* behavior is NOT regressed for focuses that never used a stage directive):
|
|
57
|
+
*
|
|
58
|
+
* Focus override -> Workflow stage -> Product default -> Org default -> Global
|
|
59
|
+
*
|
|
60
|
+
* Pure -- the registered-backend guard (never spawn on an unknown engine) stays
|
|
61
|
+
* in the caller (`resolveBackend`), which validates the returned candidate.
|
|
62
|
+
*/
|
|
63
|
+
export declare function resolveEngineId(args: {
|
|
64
|
+
focusOverrideEngine: string | null | undefined;
|
|
65
|
+
stageDirectiveEngine: string | null | undefined;
|
|
66
|
+
productDefault: string | null | undefined;
|
|
67
|
+
orgDefault: string | null | undefined;
|
|
68
|
+
globalDefault: string;
|
|
69
|
+
}): {
|
|
70
|
+
engineId: string;
|
|
71
|
+
source: EngineResolutionSource;
|
|
72
|
+
};
|
|
31
73
|
//# sourceMappingURL=model-resolution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-resolution.d.ts","sourceRoot":"","sources":["../src/model-resolution.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"model-resolution.d.ts","sourceRoot":"","sources":["../src/model-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,GAAG,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAC9C,MAAM,GAAG,IAAI,CAOf;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,kBAAkB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC7C,mBAAmB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC7C,MAAM,GAAG,IAAI,CAEf;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,qBAAqB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChD,sBAAsB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChD,MAAM,GAAG,IAAI,CAEf;AAED,0EAA0E;AAC1E,MAAM,MAAM,sBAAsB,GAC9B,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,aAAa,GACb,SAAS,CAAC;AAEd;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,mBAAmB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/C,oBAAoB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChD,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1C,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,CAUvD"}
|
package/dist/model-resolution.js
CHANGED
|
@@ -1,33 +1,89 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Unified
|
|
2
|
+
* Unified per-pass model precedence -- the ONE place the daemon decides which
|
|
3
|
+
* model, engine, and local model a focus team launches under, applied
|
|
4
|
+
* identically at initial spawn AND at stage respawn.
|
|
3
5
|
*
|
|
4
|
-
*
|
|
5
|
-
* identically at initial spawn AND at stage respawn:
|
|
6
|
+
* There are THREE per-pass axes, and all three resolve under the SAME ordering:
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
-
* -> stage directive model
|
|
9
|
-
* -> CLI default (null = let the backend pick)
|
|
8
|
+
* Focus override -> Workflow stage directive -> Default
|
|
10
9
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
10
|
+
* - cloud model id (focus pipeline_config.model | directive.model | CLI default/null)
|
|
11
|
+
* - engine (focus engine_override.{pass} | directive.engine | product/org/global default)
|
|
12
|
+
* - local model (focus local_model_overrides.{pass} | directive.localModel | none/null)
|
|
13
|
+
*
|
|
14
|
+
* The workflow stage's directive is the source of truth for "how this stage
|
|
15
|
+
* thinks"; the focus selector is an explicit opt-in OVERRIDE. An unset focus
|
|
16
|
+
* axis means "inherit the per-stage workflow value" -- the focus is NOT pinning
|
|
17
|
+
* anything on that axis, so the stage value wins. An unset stage value in turn
|
|
18
|
+
* falls through to the axis default (null cloud model = let the backend pick;
|
|
19
|
+
* null local model = no local model; engine = product -> org -> global default).
|
|
16
20
|
*
|
|
17
21
|
* Engine-compat filtering (never pass a Claude id to a cloud Codex engine,
|
|
18
22
|
* route a local-Codex pass to its selected model) is applied by the callers
|
|
19
|
-
* BEFORE the
|
|
20
|
-
* selectPipelineModelForSpawn / selectDirectiveModelForSpawn, which null out
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
23
|
+
* BEFORE the inputs reach the cloud-model helper -- see focus-executor's
|
|
24
|
+
* selectPipelineModelForSpawn / selectDirectiveModelForSpawn, which null out an
|
|
25
|
+
* input the resolved backend cannot run. These helpers are the single, pure
|
|
26
|
+
* precedence steps every caller funnels through, so spawn and respawn can never
|
|
27
|
+
* diverge on ordering, and the precedence lives in exactly one module per the
|
|
28
|
+
* no-invisible-cascading principle.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* First non-empty trimmed candidate, or null. The shared precedence primitive:
|
|
32
|
+
* Focus > Workflow > Default is expressed as `firstPresent(focus, workflow,
|
|
33
|
+
* ...defaults)`. A blank/whitespace string is treated as "unset" so an empty
|
|
34
|
+
* override does not shadow the inherited value.
|
|
24
35
|
*/
|
|
36
|
+
export function firstPresent(...candidates) {
|
|
37
|
+
for (const candidate of candidates) {
|
|
38
|
+
if (typeof candidate !== 'string')
|
|
39
|
+
continue;
|
|
40
|
+
const trimmed = candidate.trim();
|
|
41
|
+
if (trimmed.length > 0)
|
|
42
|
+
return trimmed;
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
25
46
|
/**
|
|
26
|
-
* Resolve the effective
|
|
47
|
+
* Resolve the effective CLOUD MODEL id from the focus override and the stage
|
|
27
48
|
* directive model, both already filtered for backend compatibility by the
|
|
28
|
-
* caller. Pure --
|
|
49
|
+
* caller. Pure -- Focus > Workflow > Default (null = let the backend pick).
|
|
29
50
|
*/
|
|
30
51
|
export function resolveTeamModel(focusOverrideModel, stageDirectiveModel) {
|
|
31
|
-
return focusOverrideModel
|
|
52
|
+
return firstPresent(focusOverrideModel, stageDirectiveModel);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Resolve the effective LOCAL MODEL ref (a `local_models` row id) from the focus
|
|
56
|
+
* per-pass override and the stage directive's localModel, under the SAME
|
|
57
|
+
* Focus > Workflow > Default ordering. Default is null -- no local model means
|
|
58
|
+
* the pass runs on the resolved engine's own default model. Pure + testable.
|
|
59
|
+
*/
|
|
60
|
+
export function resolveLocalModelRefPrecedence(focusOverrideLocalRef, stageDirectiveLocalRef) {
|
|
61
|
+
return firstPresent(focusOverrideLocalRef, stageDirectiveLocalRef);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Resolve the ENGINE id (and its source) for a pass under the unified
|
|
65
|
+
* precedence. The engine axis has the same Focus > Workflow head as the other
|
|
66
|
+
* two, then keeps the existing product -> org -> global default tail (so engine
|
|
67
|
+
* behavior is NOT regressed for focuses that never used a stage directive):
|
|
68
|
+
*
|
|
69
|
+
* Focus override -> Workflow stage -> Product default -> Org default -> Global
|
|
70
|
+
*
|
|
71
|
+
* Pure -- the registered-backend guard (never spawn on an unknown engine) stays
|
|
72
|
+
* in the caller (`resolveBackend`), which validates the returned candidate.
|
|
73
|
+
*/
|
|
74
|
+
export function resolveEngineId(args) {
|
|
75
|
+
const focus = firstPresent(args.focusOverrideEngine);
|
|
76
|
+
if (focus)
|
|
77
|
+
return { engineId: focus, source: 'focus-override' };
|
|
78
|
+
const stage = firstPresent(args.stageDirectiveEngine);
|
|
79
|
+
if (stage)
|
|
80
|
+
return { engineId: stage, source: 'stage-directive' };
|
|
81
|
+
const product = firstPresent(args.productDefault);
|
|
82
|
+
if (product)
|
|
83
|
+
return { engineId: product, source: 'product-default' };
|
|
84
|
+
const org = firstPresent(args.orgDefault);
|
|
85
|
+
if (org)
|
|
86
|
+
return { engineId: org, source: 'org-default' };
|
|
87
|
+
return { engineId: args.globalDefault, source: 'default' };
|
|
32
88
|
}
|
|
33
89
|
//# sourceMappingURL=model-resolution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-resolution.js","sourceRoot":"","sources":["../src/model-resolution.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"model-resolution.js","sourceRoot":"","sources":["../src/model-resolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAG,UAA4C;IAE/C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,SAAS;QAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,kBAA6C,EAC7C,mBAA8C;IAE9C,OAAO,YAAY,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,8BAA8B,CAC5C,qBAAgD,EAChD,sBAAiD;IAEjD,OAAO,YAAY,CAAC,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;AACrE,CAAC;AAUD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,IAM/B;IACC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACrD,IAAI,KAAK;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAChE,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACtD,IAAI,KAAK;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACjE,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAClD,IAAI,OAAO;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACrE,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,GAAG;QAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACzD,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC7D,CAAC"}
|
|
@@ -14,6 +14,16 @@ export interface LocalModelCoordinates {
|
|
|
14
14
|
model: string;
|
|
15
15
|
wireApi: string | null;
|
|
16
16
|
engine: string | null;
|
|
17
|
+
/**
|
|
18
|
+
* Host-control sizing hints (D3). The approximate resident weights size (MB)
|
|
19
|
+
* and the model's native context window (tokens), when the registry row
|
|
20
|
+
* carries them. Both null when unset -- the sizer then reserves no weights and
|
|
21
|
+
* clamps native context to the global ceiling (legacy behavior). These feed
|
|
22
|
+
* resolveSafeLoadOptions so a cold-GPU load reserves the weights before sizing
|
|
23
|
+
* the KV cache instead of over-allocating max_seq_length.
|
|
24
|
+
*/
|
|
25
|
+
modelSizeMb: number | null;
|
|
26
|
+
nativeContext: number | null;
|
|
17
27
|
}
|
|
18
28
|
/**
|
|
19
29
|
* Resolve a local_models row by id to its coordinates, org-scoped server-side.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-models.d.ts","sourceRoot":"","sources":["../../src/queries/local-models.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,0DAA0D;AAC1D,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"local-models.d.ts","sourceRoot":"","sources":["../../src/queries/local-models.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,0DAA0D;AAC1D,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;;;;;OAOG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAkB/F;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOtF;AAED,sDAAsD;AACtD,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAOtF;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED,6DAA6D;AAC7D,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-models.js","sourceRoot":"","sources":["../../src/queries/local-models.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,sCAAsC,GACvC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"local-models.js","sourceRoot":"","sources":["../../src/queries/local-models.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,sCAAsC,GACvC,MAAM,cAAc,CAAC;AAsBtB;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,YAAoB;IACtD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,wBAAwB,EACxB,wBAAwB,EACxB,EAAE,YAAY,EAAE,CACjB,CAAC;IACF,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;IAC5B,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;QAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI;QACxB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,IAAI;QAClC,aAAa,EAAE,CAAC,CAAC,aAAa,IAAI,IAAI;KACvC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,YAAoB;IAC5D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,+BAA+B,EAC/B,8BAA8B,EAC9B,EAAE,YAAY,EAAE,CACjB,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC;AAC/B,CAAC;AAaD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B;IAC/C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,uCAAuC,EACvC,sCAAsC,EACtC,EAAE,CACH,CAAC;IACF,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AAClG,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,OAAO,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAK7C;IACC,MAAM,OAAO,CAAC,kCAAkC,EAAE;QAChD,kBAAkB,EAAE,MAAM,CAAC,EAAE;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -417,6 +417,8 @@ export declare const LocalModelSchema: z.ZodObject<{
|
|
|
417
417
|
model: z.ZodString;
|
|
418
418
|
wireApi: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
419
419
|
engine: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
420
|
+
modelSizeMb: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
|
|
421
|
+
nativeContext: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
|
|
420
422
|
}, z.core.$loose>;
|
|
421
423
|
export declare const LocalModelResponseSchema: z.ZodObject<{
|
|
422
424
|
localModel: z.ZodNullable<z.ZodObject<{
|
|
@@ -426,6 +428,8 @@ export declare const LocalModelResponseSchema: z.ZodObject<{
|
|
|
426
428
|
model: z.ZodString;
|
|
427
429
|
wireApi: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
428
430
|
engine: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
431
|
+
modelSizeMb: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
|
|
432
|
+
nativeContext: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
|
|
429
433
|
}, z.core.$loose>>;
|
|
430
434
|
}, z.core.$loose>;
|
|
431
435
|
export declare const LocalModelSecretResponseSchema: z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/queries/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAetD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;iBAgBhB,CAAC;AAEjB,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;iBAE1B,CAAC;AAEjB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;iBAeb,CAAC;AAEjB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;iBAEtB,CAAC;AAIjB,eAAO,MAAM,iBAAiB;;;;;;;;;;;iBAWd,CAAC;AAEjB,eAAO,MAAM,mBAAmB;;;;;;iBAMhB,CAAC;AAEjB,eAAO,MAAM,6BAA6B;;;;;;;;iBAE1B,CAAC;AAuEjB,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAU1B,CAAC;AAEjB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMf,CAAC;AAEjB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAEzB,CAAC;AAEjB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmCb,CAAC;AAEjB,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAEvB,CAAC;AAEjB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoCd,CAAC;AAEjB,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAExB,CAAC;AAQjB,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/queries/schemas.ts"],"names":[],"mappings":"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"}
|
package/dist/queries/schemas.js
CHANGED
|
@@ -253,6 +253,11 @@ export const LocalModelSchema = z.object({
|
|
|
253
253
|
model: z.string(),
|
|
254
254
|
wireApi: nullableString.optional().default(null),
|
|
255
255
|
engine: nullableString.optional().default(null),
|
|
256
|
+
// Host-control sizing hints (D3): approximate weights size (MB) + native
|
|
257
|
+
// context (tokens). Null/absent => the sizer reserves no weights / clamps to
|
|
258
|
+
// the global ceiling (legacy behavior).
|
|
259
|
+
modelSizeMb: z.number().nullable().optional().default(null),
|
|
260
|
+
nativeContext: z.number().nullable().optional().default(null),
|
|
256
261
|
}).passthrough();
|
|
257
262
|
export const LocalModelResponseSchema = z.object({
|
|
258
263
|
// null => no such model in the org; the daemon falls back to engine default.
|