@atomic-chat/core 0.13.2 → 0.13.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/cli/main.d.ts +1 -1
- package/dist/core/atomic-core.d.ts +3 -1
- package/dist/core/atomic-core.js +1 -0
- package/dist/core/atomic-core.js.map +1 -1
- package/dist/core/create.js +6 -0
- package/dist/core/create.js.map +1 -1
- package/dist/core/prism.d.ts +2 -0
- package/dist/core/prism.js +1 -0
- package/dist/core/prism.js.map +1 -1
- package/dist/core/public-server.js +3 -2
- package/dist/core/public-server.js.map +1 -1
- package/dist/core/tensorrt-llm.d.ts +169 -0
- package/dist/core/tensorrt-llm.js +428 -0
- package/dist/core/tensorrt-llm.js.map +1 -0
- package/dist/core/types.d.ts +16 -0
- package/dist/core/types.js.map +1 -1
- package/dist/decision/process.d.ts +4 -0
- package/dist/decision/process.js +10 -1
- package/dist/decision/process.js.map +1 -1
- package/dist/diffusion/args.d.ts +3 -2
- package/dist/diffusion/args.js +21 -4
- package/dist/diffusion/args.js.map +1 -1
- package/dist/diffusion/compat.d.ts +1 -1
- package/dist/diffusion/compat.js +6 -2
- package/dist/diffusion/compat.js.map +1 -1
- package/dist/diffusion/jobs.js +4 -0
- package/dist/diffusion/jobs.js.map +1 -1
- package/dist/diffusion/tracker.d.ts +6 -0
- package/dist/diffusion/tracker.js +11 -0
- package/dist/diffusion/tracker.js.map +1 -1
- package/dist/diffusion/validate.js +2 -2
- package/dist/diffusion/validate.js.map +1 -1
- package/dist/diffusion/workflow.d.ts +8 -2
- package/dist/diffusion/workflow.js +13 -5
- package/dist/diffusion/workflow.js.map +1 -1
- package/dist/downloads/downloader.d.ts +22 -0
- package/dist/downloads/downloader.js +57 -2
- package/dist/downloads/downloader.js.map +1 -1
- package/dist/downloads/segmented.d.ts +40 -0
- package/dist/downloads/segmented.js +170 -0
- package/dist/downloads/segmented.js.map +1 -0
- package/dist/embedding/process.d.ts +4 -0
- package/dist/embedding/process.js +10 -1
- package/dist/embedding/process.js.map +1 -1
- package/dist/models/compatibility/inspect.d.ts +11 -2
- package/dist/models/compatibility/inspect.js +44 -13
- package/dist/models/compatibility/inspect.js.map +1 -1
- package/dist/models/compatibility/service.d.ts +3 -0
- package/dist/models/compatibility/service.js +1 -0
- package/dist/models/compatibility/service.js.map +1 -1
- package/dist/models/gguf/tensors.d.ts +1 -0
- package/dist/models/gguf/tensors.js +4 -1
- package/dist/models/gguf/tensors.js.map +1 -1
- package/dist/runtime/managed-text/adapter.d.ts +17 -0
- package/dist/runtime/managed-text/adapter.js.map +1 -1
- package/dist/runtime/managed-text/lifecycle.d.ts +8 -0
- package/dist/runtime/managed-text/lifecycle.js +38 -1
- package/dist/runtime/managed-text/lifecycle.js.map +1 -1
- package/dist/runtime/managed-text/readiness.d.ts +21 -1
- package/dist/runtime/managed-text/readiness.js +64 -0
- package/dist/runtime/managed-text/readiness.js.map +1 -1
- package/dist/runtime/shared/ports.d.ts +10 -0
- package/dist/runtime/shared/ports.js +30 -0
- package/dist/runtime/shared/ports.js.map +1 -1
- package/dist/runtime/tensorrt-llm/adapter.d.ts +1 -4
- package/dist/runtime/tensorrt-llm/adapter.js +28 -11
- package/dist/runtime/tensorrt-llm/adapter.js.map +1 -1
- package/dist/runtime/tensorrt-llm/check.js +1 -0
- package/dist/runtime/tensorrt-llm/check.js.map +1 -1
- package/dist/runtime/tensorrt-llm/compatibility.d.ts +30 -6
- package/dist/runtime/tensorrt-llm/compatibility.js +41 -9
- package/dist/runtime/tensorrt-llm/compatibility.js.map +1 -1
- package/dist/runtime/tensorrt-llm/cuda-graphs.d.ts +32 -0
- package/dist/runtime/tensorrt-llm/cuda-graphs.js +33 -0
- package/dist/runtime/tensorrt-llm/cuda-graphs.js.map +1 -0
- package/dist/runtime/tensorrt-llm/delete.d.ts +15 -0
- package/dist/runtime/tensorrt-llm/delete.js +60 -0
- package/dist/runtime/tensorrt-llm/delete.js.map +1 -0
- package/dist/runtime/tensorrt-llm/engine.js +11 -5
- package/dist/runtime/tensorrt-llm/engine.js.map +1 -1
- package/dist/runtime/tensorrt-llm/guest-files.d.ts +8 -0
- package/dist/runtime/tensorrt-llm/guest-files.js +49 -0
- package/dist/runtime/tensorrt-llm/guest-files.js.map +1 -0
- package/dist/runtime/tensorrt-llm/kv-cache.d.ts +16 -0
- package/dist/runtime/tensorrt-llm/kv-cache.js +21 -1
- package/dist/runtime/tensorrt-llm/kv-cache.js.map +1 -1
- package/dist/runtime/tensorrt-llm/location.d.ts +20 -0
- package/dist/runtime/tensorrt-llm/location.js +48 -0
- package/dist/runtime/tensorrt-llm/location.js.map +1 -0
- package/dist/runtime/tensorrt-llm/model-dir.d.ts +38 -0
- package/dist/runtime/tensorrt-llm/model-dir.js +137 -0
- package/dist/runtime/tensorrt-llm/model-dir.js.map +1 -0
- package/dist/runtime/tensorrt-llm/quant-format.d.ts +65 -0
- package/dist/runtime/tensorrt-llm/quant-format.js +189 -0
- package/dist/runtime/tensorrt-llm/quant-format.js.map +1 -0
- package/dist/runtime/tensorrt-llm/registry.d.ts +26 -0
- package/dist/runtime/tensorrt-llm/registry.js +68 -0
- package/dist/runtime/tensorrt-llm/registry.js.map +1 -0
- package/dist/runtime/tensorrt-llm/runtime.d.ts +130 -0
- package/dist/runtime/tensorrt-llm/runtime.js +395 -0
- package/dist/runtime/tensorrt-llm/runtime.js.map +1 -0
- package/dist/server/control/router.js +1 -1
- package/dist/server/control/router.js.map +1 -1
- package/dist/server/control/types.d.ts +5 -1
- package/dist/server/control/types.js.map +1 -1
- package/dist/server/public/gates.d.ts +6 -1
- package/dist/server/public/gates.js +7 -3
- package/dist/server/public/gates.js.map +1 -1
- package/dist/server/public/index.d.ts +1 -0
- package/dist/server/public/index.js +9 -6
- package/dist/server/public/index.js.map +1 -1
- package/dist/server/public/types.d.ts +7 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composition of the `tensorrt-llm` provider for `create.ts` (task 2.14): offered only on Linux, on
|
|
3
|
+
* the managed-text lifecycle built over the core's one Docker executor and journal — the startup
|
|
4
|
+
* handle the managed environment (task 2.6) wires, reconciles and hands its setup and removal too,
|
|
5
|
+
* never a second pair — the desktop deployment, this scope's managed paths,
|
|
6
|
+
* `selinuxDataRoot = <data>`, and the public server's live trusted-hosts array.
|
|
7
|
+
*
|
|
8
|
+
* What it shares with the managed environment rather than duplicating: the installation records
|
|
9
|
+
* (`InstallationStore`, the one reader of that format), the Linux machine (`LinuxHost`, which is the
|
|
10
|
+
* `ATOMIC_MANAGED_TEST_HOST` stand-in machine in the e2e suite, so that hook is read in one place),
|
|
11
|
+
* and, the other way round, `unloadEngineSessions`: a removal of the engine holds its loads off and
|
|
12
|
+
* unloads its loaded model first, through `tensorrtLlmSessionUnloader` and the facade's own unload.
|
|
13
|
+
*
|
|
14
|
+
* `wireTensorrtLlmModelCheck` (task 2.16) composes `POST /models/tensorrt-llm/check`'s deps
|
|
15
|
+
* separately from the runtime above: it shares the installation records, the descriptor provider and
|
|
16
|
+
* `LinuxHost.probeDeps`, but deliberately never touches `containers`/Docker (`check.ts`'s own file
|
|
17
|
+
* banner explains why) and is offered even when the runtime itself would refuse every load.
|
|
18
|
+
*
|
|
19
|
+
* `tensorrtLlmModelDeleter` (task 2.24) is `DELETE /models/tensorrt-llm/:id`: the same hold-and-unload
|
|
20
|
+
* through the facade as the engine removal's unloader, for one model, then its files.
|
|
21
|
+
*/
|
|
22
|
+
import { AtomicCoreError } from '../contracts/index.js';
|
|
23
|
+
import { RECONCILE_BUDGET_MS, RECONCILE_CALL_TIMEOUT_MS, RECONCILE_STARTUP_STOP_TIMEOUT_SECONDS, createDockerExec, guestRealpath, reconcileExecutions, } from '../runtime/container/index.js';
|
|
24
|
+
import { guestProbeDeps, localhostForwardingError, parseWslConfig, TENSORRT_LLM_ENGINE_ID, } from '../runtime/environment/index.js';
|
|
25
|
+
import { ManagedTextAdapterRegistry, ManagedTextLifecycle, createDesktopManagedDeployment, createWslManagedDeployment, } from '../runtime/managed-text/index.js';
|
|
26
|
+
import { TensorrtLlmModelRegistry, TensorrtLlmRuntime, checkTensorrtLlmModel, containerPlatformFor, deleteTensorrtLlmModelFiles, guestModelFiles, guestModelsRoot, linuxModelLocation, probeTensorrtLlmGpus, probeTensorrtLlmGpusAndMemory, probeTensorrtLlmHost, readTensorrtLlmModel, resolveReadyInstallation, tensorrtLlmAdapter, windowsModelLocation, } from '../runtime/tensorrt-llm/index.js';
|
|
27
|
+
import { ensureGuestScope, guestScopePaths, WSL_LOCALHOST_MOUNT, } from '../runtime/wsl/index.js';
|
|
28
|
+
/** The recorded distribution and its transport; null before the import. */
|
|
29
|
+
async function windowsDistribution(context) {
|
|
30
|
+
const record = await context.records.read();
|
|
31
|
+
return record === null ? null : { record, transport: context.wsl.distribution(record.distribution.name) };
|
|
32
|
+
}
|
|
33
|
+
async function windowsGuest(context, layout) {
|
|
34
|
+
const record = await context.records.read();
|
|
35
|
+
if (record === null)
|
|
36
|
+
return null;
|
|
37
|
+
const name = record.distribution.name;
|
|
38
|
+
const key = await context.scopeKey();
|
|
39
|
+
return {
|
|
40
|
+
record,
|
|
41
|
+
transport: context.wsl.distribution(name),
|
|
42
|
+
key,
|
|
43
|
+
paths: guestScopePaths(layout.managed, name, key, context.mount),
|
|
44
|
+
modelsRoot: (context.mount ?? WSL_LOCALHOST_MOUNT).hostPath(name, guestModelsRoot(key)),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const notImported = () => new AtomicCoreError('MANAGED_ADAPTER_UNAVAILABLE', 'TensorRT-LLM runs in Atomic Chat’s WSL distribution, which is not set up on this computer yet.');
|
|
48
|
+
/** Windows on x64 only: no WSL GPU path for ARM (spec `tensorrt-llm-desktop`). */
|
|
49
|
+
const windowsX64 = (platform, arch, context) => platform === 'win32' && arch === 'x64' && context !== undefined;
|
|
50
|
+
/** The provider, or null where it is not offered: everywhere but Linux and Windows x64. */
|
|
51
|
+
export function wireTensorrtLlm(options) {
|
|
52
|
+
if (options.windows !== undefined && windowsX64(options.platform, options.arch, options.windows)) {
|
|
53
|
+
return wireWindowsTensorrtLlm(options, options.windows);
|
|
54
|
+
}
|
|
55
|
+
if (options.platform !== 'linux')
|
|
56
|
+
return null;
|
|
57
|
+
const adapters = new ManagedTextAdapterRegistry();
|
|
58
|
+
adapters.register(tensorrtLlmAdapter);
|
|
59
|
+
const deployment = createDesktopManagedDeployment();
|
|
60
|
+
/** The lifecycle and the executor it was built over: the load path's probe asks the same one. */
|
|
61
|
+
let built = null;
|
|
62
|
+
// Asked at every load, through the handle: a host with no docker CLI when core started gets one
|
|
63
|
+
// from the setup's privileged step, and the next load finds it (the handle wires it then).
|
|
64
|
+
const lifecycle = async () => {
|
|
65
|
+
if (built !== null)
|
|
66
|
+
return built.lifecycle;
|
|
67
|
+
const containers = await options.containers.resolve();
|
|
68
|
+
if (containers === null)
|
|
69
|
+
return null;
|
|
70
|
+
// Two loads that raced here built nothing twice: the first to resume assigns, the second reuses.
|
|
71
|
+
built ??= {
|
|
72
|
+
exec: containers.exec,
|
|
73
|
+
lifecycle: new ManagedTextLifecycle({
|
|
74
|
+
provider: 'tensorrt-llm',
|
|
75
|
+
adapters,
|
|
76
|
+
exec: containers.exec,
|
|
77
|
+
deployment,
|
|
78
|
+
journal: containers.journal,
|
|
79
|
+
paths: options.layout.managed,
|
|
80
|
+
instanceId: options.instanceId,
|
|
81
|
+
scope: options.scope,
|
|
82
|
+
allowedHosts: options.trustedHosts,
|
|
83
|
+
selinuxDataRoot: options.layout.root,
|
|
84
|
+
emit: options.emit,
|
|
85
|
+
log: options.log,
|
|
86
|
+
...(options.containerUser === null ? {} : { containerUser: options.containerUser }),
|
|
87
|
+
}),
|
|
88
|
+
};
|
|
89
|
+
return built.lifecycle;
|
|
90
|
+
};
|
|
91
|
+
const platform = containerPlatformFor(options.arch);
|
|
92
|
+
return new TensorrtLlmRuntime({
|
|
93
|
+
lifecycle,
|
|
94
|
+
readyInstallation: () => resolveReadyInstallation({
|
|
95
|
+
installations: options.installations,
|
|
96
|
+
descriptors: options.descriptors,
|
|
97
|
+
platform,
|
|
98
|
+
}),
|
|
99
|
+
// Probed fresh at every load, never read off the environment snapshot: that view is only as new
|
|
100
|
+
// as the last setup or removal probe (and empty after a restart), while a card can disappear
|
|
101
|
+
// between two loads (spec "Выбранная карта исчезла"). An unanswered `docker info` refuses the load.
|
|
102
|
+
// Through the lifecycle's own executor: `TensorrtLlmRuntime` asks for host facts only once the
|
|
103
|
+
// lifecycle resolved, so it is always there (final review T-288 removed a dead fallback).
|
|
104
|
+
hostFacts: () => probeTensorrtLlmHost({
|
|
105
|
+
exec: options.host.probeDeps.exec,
|
|
106
|
+
docker: built.exec,
|
|
107
|
+
nvidiaSmi: 'nvidia-smi',
|
|
108
|
+
readFile: options.host.probeDeps.readFile,
|
|
109
|
+
}),
|
|
110
|
+
model: (modelId) => readTensorrtLlmModel(options.layout.provider('tensorrt-llm').modelsDir, modelId),
|
|
111
|
+
settings: options.settings,
|
|
112
|
+
...(options.claimGpu ? { claimGpu: options.claimGpu } : {}),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The Windows provider (change `add-tensorrt-llm-windows`, tasks 2.6–2.8): the same lifecycle and
|
|
117
|
+
* runtime as Linux, over the WSL guest — the core's one executor (the guest's docker, from the handle),
|
|
118
|
+
* this scope's folder in the guest for heartbeats, caches and the watchdog, the WSL deployment (a port
|
|
119
|
+
* Docker picks, forwarding checked), `realpath` in the guest, uid 1000 for the container, the
|
|
120
|
+
* distribution held while a model loads or is loaded; the host facts of a load read in the guest
|
|
121
|
+
* (its `nvidia-smi`, the VM's memory); models under the scope's guest root.
|
|
122
|
+
*/
|
|
123
|
+
function wireWindowsTensorrtLlm(options, context) {
|
|
124
|
+
const adapters = new ManagedTextAdapterRegistry();
|
|
125
|
+
adapters.register(tensorrtLlmAdapter);
|
|
126
|
+
let built = null;
|
|
127
|
+
const lifecycle = async () => {
|
|
128
|
+
if (built !== null)
|
|
129
|
+
return built.lifecycle;
|
|
130
|
+
const guest = await windowsGuest(context, options.layout);
|
|
131
|
+
if (guest === null)
|
|
132
|
+
throw notImported();
|
|
133
|
+
const containers = await options.containers.resolve();
|
|
134
|
+
if (containers === null)
|
|
135
|
+
return null;
|
|
136
|
+
await ensureGuestScope(guest.transport, guest.key);
|
|
137
|
+
const deployment = windowsDeployment(context, guest, containers.exec);
|
|
138
|
+
const name = guest.record.distribution.name;
|
|
139
|
+
built ??= {
|
|
140
|
+
exec: containers.exec,
|
|
141
|
+
guest,
|
|
142
|
+
lifecycle: new ManagedTextLifecycle({
|
|
143
|
+
provider: 'tensorrt-llm',
|
|
144
|
+
adapters,
|
|
145
|
+
exec: containers.exec,
|
|
146
|
+
deployment,
|
|
147
|
+
journal: containers.journal,
|
|
148
|
+
paths: guest.paths,
|
|
149
|
+
instanceId: options.instanceId,
|
|
150
|
+
scope: options.scope,
|
|
151
|
+
allowedHosts: options.trustedHosts,
|
|
152
|
+
// SELinux is not enforcing in Atomic Chat's Ubuntu guest; never used, but must be in the guest.
|
|
153
|
+
selinuxDataRoot: guest.paths.root,
|
|
154
|
+
emit: options.emit,
|
|
155
|
+
log: options.log,
|
|
156
|
+
createContainerDeps: { realpath: guestRealpath(guest.transport) },
|
|
157
|
+
containerUser: { uid: 1000, gid: 1000 },
|
|
158
|
+
keeper: context.keeper(name),
|
|
159
|
+
}),
|
|
160
|
+
};
|
|
161
|
+
return built.lifecycle;
|
|
162
|
+
};
|
|
163
|
+
const platform = containerPlatformFor(options.arch);
|
|
164
|
+
return new TensorrtLlmRuntime({
|
|
165
|
+
lifecycle,
|
|
166
|
+
readyInstallation: () => resolveReadyInstallation({
|
|
167
|
+
installations: options.installations,
|
|
168
|
+
descriptors: options.descriptors,
|
|
169
|
+
platform,
|
|
170
|
+
}),
|
|
171
|
+
hostFacts: () => {
|
|
172
|
+
const current = built;
|
|
173
|
+
const deps = guestProbeDeps(current.guest.transport);
|
|
174
|
+
return probeTensorrtLlmHost({
|
|
175
|
+
exec: deps.exec,
|
|
176
|
+
docker: current.exec,
|
|
177
|
+
nvidiaSmi: 'nvidia-smi',
|
|
178
|
+
readFile: deps.readFile,
|
|
179
|
+
});
|
|
180
|
+
},
|
|
181
|
+
model: async (modelId) => {
|
|
182
|
+
const guest = await windowsGuest(context, options.layout);
|
|
183
|
+
if (guest === null)
|
|
184
|
+
throw notImported();
|
|
185
|
+
return readTensorrtLlmModel(guest.modelsRoot, modelId);
|
|
186
|
+
},
|
|
187
|
+
settings: options.settings,
|
|
188
|
+
...(options.claimGpu ? { claimGpu: options.claimGpu } : {}),
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* The WSL deployment of one guest (task 2.7): its mounts through the context's mount, the engine probed
|
|
193
|
+
* inside the guest as root, and the forwarding error built from `.wslconfig` as it reads at that moment.
|
|
194
|
+
*/
|
|
195
|
+
export function windowsDeployment(context, guest, exec) {
|
|
196
|
+
return createWslManagedDeployment({
|
|
197
|
+
distribution: guest.record.distribution.name,
|
|
198
|
+
...(context.mount === undefined ? {} : { mount: context.mount }),
|
|
199
|
+
exec,
|
|
200
|
+
runInGuest: (argv) => guest.transport.exec(argv, { user: 'root', timeoutMs: 10_000 }),
|
|
201
|
+
forwardingError: async () => localhostForwardingError(parseWslConfig(await context.host.probeDeps.readWslConfig().catch(() => null))),
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
/** The retried reconcile's executor where the wired one already is the guest's (Windows). */
|
|
205
|
+
export const wiredExec = (wired) => wired.exec;
|
|
206
|
+
/**
|
|
207
|
+
* `GET /models/tensorrt-llm/location` (change `add-tensorrt-llm-windows`, task 2.8): `<data>/tensorrt-llm/models`
|
|
208
|
+
* on Linux; the scope's folder in the WSL guest on Windows (`MANAGED_ADAPTER_UNAVAILABLE` before the import).
|
|
209
|
+
*/
|
|
210
|
+
export function tensorrtLlmModelLocation(platform, layout, windows) {
|
|
211
|
+
if (platform === 'win32' && windows !== undefined) {
|
|
212
|
+
return () => windowsModelLocation({
|
|
213
|
+
records: windows.records,
|
|
214
|
+
scopeKey: windows.scopeKey,
|
|
215
|
+
transport: (name) => windows.wsl.distribution(name),
|
|
216
|
+
volumeFreeBytes: (path) => windows.host.freeDiskBytes(path),
|
|
217
|
+
...(windows.mount === undefined ? {} : { mount: windows.mount }),
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
return () => linuxModelLocation(layout.provider('tensorrt-llm').modelsDir);
|
|
221
|
+
}
|
|
222
|
+
/** The `tensorrt-llm` model registry: the data folder's root on Linux, the guest root (once it exists) on Windows. */
|
|
223
|
+
export function tensorrtLlmModelRegistry(platform, layout, windows) {
|
|
224
|
+
if (platform === 'win32' && windows !== undefined) {
|
|
225
|
+
return new TensorrtLlmModelRegistry(async () => (await windowsGuest(windows, layout))?.modelsRoot ?? null);
|
|
226
|
+
}
|
|
227
|
+
return new TensorrtLlmModelRegistry(layout.provider('tensorrt-llm').modelsDir);
|
|
228
|
+
}
|
|
229
|
+
/** `windowsModelFiles` bound to one context and layout: the deleter's `windowsFiles` on Windows. */
|
|
230
|
+
export function windowsModelFilesFor(windows, layout) {
|
|
231
|
+
return () => windowsModelFiles(windows, layout);
|
|
232
|
+
}
|
|
233
|
+
/** Windows: where a model's files and caches are, and how to size and remove them (in the guest). */
|
|
234
|
+
export async function windowsModelFiles(windows, layout) {
|
|
235
|
+
const guest = await windowsGuest(windows, layout);
|
|
236
|
+
if (guest === null)
|
|
237
|
+
throw notImported();
|
|
238
|
+
return { paths: guest.paths, files: guestModelFiles(guest.transport, windows.mount) };
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* `POST /models/tensorrt-llm/check` (task 2.16): `null` off Linux, where the provider is not offered
|
|
242
|
+
* at all. Available even when the engine is not installed yet — the check falls back to the latest
|
|
243
|
+
* cached descriptor itself (`check.ts`) — and never asks Docker anything, unlike `wireTensorrtLlm`'s
|
|
244
|
+
* own `hostFacts` above.
|
|
245
|
+
*/
|
|
246
|
+
export function wireTensorrtLlmModelCheck(platform, options) {
|
|
247
|
+
const windows = options.windows;
|
|
248
|
+
if (windows !== undefined && windowsX64(platform, options.arch ?? 'x64', windows)) {
|
|
249
|
+
return (body) => checkTensorrtLlmModel(body, {
|
|
250
|
+
installations: options.installations,
|
|
251
|
+
descriptors: options.descriptors,
|
|
252
|
+
// The guest's cards and the WSL VM's memory once the distribution exists (design D11); before
|
|
253
|
+
// that, the cards Windows sees, with no memory to compare against.
|
|
254
|
+
hostFacts: async () => {
|
|
255
|
+
const guest = await windowsDistribution(windows);
|
|
256
|
+
if (guest === null) {
|
|
257
|
+
const gpus = await probeTensorrtLlmGpus({
|
|
258
|
+
exec: windows.host.probeDeps.exec,
|
|
259
|
+
nvidiaSmi: `${windows.host.probeDeps.systemRoot}\\System32\\nvidia-smi.exe`,
|
|
260
|
+
});
|
|
261
|
+
return { gpus, memory: { availableBytes: 0, totalBytes: 0 } };
|
|
262
|
+
}
|
|
263
|
+
const deps = guestProbeDeps(guest.transport);
|
|
264
|
+
return probeTensorrtLlmGpusAndMemory({
|
|
265
|
+
exec: deps.exec,
|
|
266
|
+
nvidiaSmi: 'nvidia-smi',
|
|
267
|
+
readFile: deps.readFile,
|
|
268
|
+
});
|
|
269
|
+
},
|
|
270
|
+
settings: options.settings,
|
|
271
|
+
wslVm: async () => ({
|
|
272
|
+
memory_setting: parseWslConfig(await windows.host.probeDeps.readWslConfig().catch(() => null))
|
|
273
|
+
.memory,
|
|
274
|
+
}),
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
if (platform !== 'linux')
|
|
278
|
+
return null;
|
|
279
|
+
return (body) => checkTensorrtLlmModel(body, {
|
|
280
|
+
installations: options.installations,
|
|
281
|
+
descriptors: options.descriptors,
|
|
282
|
+
hostFacts: () => probeTensorrtLlmGpusAndMemory({
|
|
283
|
+
exec: options.host.probeDeps.exec,
|
|
284
|
+
nvidiaSmi: 'nvidia-smi',
|
|
285
|
+
readFile: options.host.probeDeps.readFile,
|
|
286
|
+
}),
|
|
287
|
+
settings: options.settings,
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* What GPU residency must see of the containers a previous core left (task 2.15; carry-forward from
|
|
292
|
+
* 2.12/2.14): startup reconcile could not confirm them stopped — the stop went unconfirmed, a docker
|
|
293
|
+
* call failed, or its time budget ran out — so they may still be running and holding a GPU. Which one
|
|
294
|
+
* is not recorded, so each holds every card, as `stop-unconfirmed`, under its engine id and container
|
|
295
|
+
* id, with the remedy a refusal names. Evicting one runs the reconcile again, bounded like the startup
|
|
296
|
+
* one (a short deadline per docker call, a short `--time`, a total budget), over this scope's journal
|
|
297
|
+
* only — this instance's own records are never touched — and it is released only once Docker confirms
|
|
298
|
+
* it gone.
|
|
299
|
+
*/
|
|
300
|
+
export function leftoverContainers(options) {
|
|
301
|
+
let latest = null;
|
|
302
|
+
const unresolved = (result) => [
|
|
303
|
+
...result.unconfirmed,
|
|
304
|
+
...result.failed,
|
|
305
|
+
...result.skipped,
|
|
306
|
+
];
|
|
307
|
+
const boundedExec = options.exec ??
|
|
308
|
+
((wired) => createDockerExec({
|
|
309
|
+
dockerPath: wired.dockerPath,
|
|
310
|
+
dockerConfigDir: options.dockerConfigDir,
|
|
311
|
+
timeoutMs: RECONCILE_CALL_TIMEOUT_MS,
|
|
312
|
+
}));
|
|
313
|
+
const retry = async (wired) => {
|
|
314
|
+
const budget = new AbortController();
|
|
315
|
+
const budgetMs = options.budgetMs ?? RECONCILE_BUDGET_MS;
|
|
316
|
+
if (budgetMs <= 0)
|
|
317
|
+
budget.abort();
|
|
318
|
+
const timer = setTimeout(() => budget.abort(), Math.max(budgetMs, 0));
|
|
319
|
+
timer.unref?.();
|
|
320
|
+
try {
|
|
321
|
+
return await reconcileExecutions(wired.journal, options.instanceId, boundedExec(wired), options.log, RECONCILE_STARTUP_STOP_TIMEOUT_SECONDS, budget.signal);
|
|
322
|
+
}
|
|
323
|
+
finally {
|
|
324
|
+
clearTimeout(timer);
|
|
325
|
+
}
|
|
326
|
+
};
|
|
327
|
+
return () => {
|
|
328
|
+
const wired = options.containers.current();
|
|
329
|
+
if (wired === null)
|
|
330
|
+
return [];
|
|
331
|
+
return unresolved(latest ?? wired.reconciled).map((record) => ({
|
|
332
|
+
provider: record.engine_id,
|
|
333
|
+
model_id: record.container_id,
|
|
334
|
+
cards: 'all',
|
|
335
|
+
auxiliary: false,
|
|
336
|
+
state: 'stop-unconfirmed',
|
|
337
|
+
remedy: `Start Docker, or remove container ${record.container_id} yourself ` +
|
|
338
|
+
`(docker rm -f ${record.container_id}); the next load retries the stop.`,
|
|
339
|
+
evict: async () => {
|
|
340
|
+
latest = await retry(wired);
|
|
341
|
+
if (unresolved(latest).some((left) => left.container_id === record.container_id)) {
|
|
342
|
+
throw new Error(`Docker did not confirm container ${record.container_id} stopped.`);
|
|
343
|
+
}
|
|
344
|
+
},
|
|
345
|
+
}));
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* The managed environment's `unloadEngineSessions` (spec "Удаление при загруженной модели"): before
|
|
350
|
+
* a removal touches the engine's image, loads of `tensorrt-llm` are held off (`holdOffLoads`) and
|
|
351
|
+
* every model holding a card is unloaded with its container's stop confirmed — through the facade's
|
|
352
|
+
* own `unload`, as a client's unload or GPU residency would, so each model's cross-process claim is
|
|
353
|
+
* released and a load still pending is cancelled rather than queued behind (final review M-1). The
|
|
354
|
+
* hold lasts until the removal calls `release`. An unconfirmed stop rejects with
|
|
355
|
+
* `MANAGED_STOP_UNCONFIRMED`, which fails the removal with nothing removed, and lifts the hold at
|
|
356
|
+
* once. `runtime` and `sessions` are read at removal time: the provider is registered after the
|
|
357
|
+
* environment is wired, and the facade after both.
|
|
358
|
+
*/
|
|
359
|
+
export function tensorrtLlmSessionUnloader(runtime, sessions) {
|
|
360
|
+
return async (engineId) => {
|
|
361
|
+
if (engineId !== TENSORRT_LLM_ENGINE_ID)
|
|
362
|
+
return { unloaded: 0 };
|
|
363
|
+
const provider = runtime();
|
|
364
|
+
if (!(provider instanceof TensorrtLlmRuntime))
|
|
365
|
+
return { unloaded: 0 };
|
|
366
|
+
const release = provider.holdOffLoads();
|
|
367
|
+
try {
|
|
368
|
+
const facade = sessions();
|
|
369
|
+
const models = provider.residentModels();
|
|
370
|
+
for (const modelId of models) {
|
|
371
|
+
facade.cancelLoad(TENSORRT_LLM_ENGINE_ID, modelId);
|
|
372
|
+
const result = await facade.unload(TENSORRT_LLM_ENGINE_ID, modelId);
|
|
373
|
+
if (!result.success) {
|
|
374
|
+
throw new AtomicCoreError('MANAGED_STOP_UNCONFIRMED', result.error ?? `The unload of ${modelId} failed.`, modelId);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
return { unloaded: models.length, release };
|
|
378
|
+
}
|
|
379
|
+
catch (error) {
|
|
380
|
+
release();
|
|
381
|
+
throw error;
|
|
382
|
+
}
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* `DELETE /models/tensorrt-llm/:id` (task 2.24, design D12a, spec `tensorrt-llm-models` "Модель
|
|
387
|
+
* удаляется через core"). The id must be one the registry lists — exactly, never percent-decoded or
|
|
388
|
+
* resolved as a path — else `MODEL_NOT_FOUND`: a client's wrong id is an error, not a success. Loads
|
|
389
|
+
* of that model are held off for the whole deletion; a load in flight is cancelled and the model
|
|
390
|
+
* unloaded through the facade, as a client's unload would be, so its cross-process claim is released.
|
|
391
|
+
* Only once Docker confirmed the stop are the files touched; an unconfirmed stop rejects with
|
|
392
|
+
* `MANAGED_STOP_UNCONFIRMED` and removes nothing.
|
|
393
|
+
*/
|
|
394
|
+
export function tensorrtLlmModelDeleter(options) {
|
|
395
|
+
return async (modelId) => {
|
|
396
|
+
const provider = options.runtime();
|
|
397
|
+
if (!(provider instanceof TensorrtLlmRuntime)) {
|
|
398
|
+
throw new AtomicCoreError('PROVIDER_NOT_FOUND', 'tensorrt-llm is not available in this build.', TENSORRT_LLM_ENGINE_ID);
|
|
399
|
+
}
|
|
400
|
+
const model = (await options.registry.list()).find((entry) => entry.id === modelId);
|
|
401
|
+
if (model === undefined) {
|
|
402
|
+
throw new AtomicCoreError('MODEL_NOT_FOUND', `No tensorrt-llm model has the id '${modelId}'.`, modelId);
|
|
403
|
+
}
|
|
404
|
+
const release = provider.holdOffModel(modelId);
|
|
405
|
+
try {
|
|
406
|
+
const facade = options.sessions();
|
|
407
|
+
const cancelled = facade.cancelLoad(TENSORRT_LLM_ENGINE_ID, modelId);
|
|
408
|
+
const result = await facade.unload(TENSORRT_LLM_ENGINE_ID, modelId);
|
|
409
|
+
if (!result.success || provider.residentModels().includes(modelId)) {
|
|
410
|
+
throw new AtomicCoreError('MANAGED_STOP_UNCONFIRMED', result.error ?? `The container of ${modelId} did not confirm its stop; nothing was deleted.`, modelId);
|
|
411
|
+
}
|
|
412
|
+
const guest = options.windowsFiles === undefined ? null : await options.windowsFiles();
|
|
413
|
+
const files = guest === null
|
|
414
|
+
? await deleteTensorrtLlmModelFiles(options.paths, model)
|
|
415
|
+
: await deleteTensorrtLlmModelFiles(guest.paths, model, guest.files);
|
|
416
|
+
return {
|
|
417
|
+
model_id: modelId,
|
|
418
|
+
was_loaded: cancelled || result.was_loaded === true,
|
|
419
|
+
freed_bytes: files.freedBytes,
|
|
420
|
+
engine_caches_removed: files.engineCachesRemoved,
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
finally {
|
|
424
|
+
release();
|
|
425
|
+
}
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
//# sourceMappingURL=tensorrt-llm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tensorrt-llm.js","sourceRoot":"","sources":["../../src/core/tensorrt-llm.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -44,6 +44,22 @@ export interface AtomicCoreOptions {
|
|
|
44
44
|
* system directories (`/usr/bin`, `/usr/local/bin`, `/bin`), never `PATH`; `null` means none.
|
|
45
45
|
*/
|
|
46
46
|
dockerPath?: string | null;
|
|
47
|
+
/**
|
|
48
|
+
* The host's keyring for the public API (a terminal that hands every client its own key), read for
|
|
49
|
+
* every request: a client must present one of these, and a revoked key is refused on the next
|
|
50
|
+
* request. An empty list refuses every client; `undefined` keeps `server.api_key`.
|
|
51
|
+
*/
|
|
52
|
+
publicApiKeys?: () => readonly string[] | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Parallel byte-range streams for a hash-pinned file of at least 32 MiB (at most 4); one when
|
|
55
|
+
* unset. A server without ranges falls back to one stream.
|
|
56
|
+
*/
|
|
57
|
+
downloadStreams?: number;
|
|
58
|
+
/**
|
|
59
|
+
* How long reading a remote GGUF header for a model check may take in all (a terminal that must not
|
|
60
|
+
* hang on a slow or broken mirror); past it the check goes on without the header. Unset waits.
|
|
61
|
+
*/
|
|
62
|
+
remoteGgufTimeoutMs?: number;
|
|
47
63
|
fetch?: typeof fetch;
|
|
48
64
|
env?: NodeJS.ProcessEnv;
|
|
49
65
|
/** 'owner' takes the instance lock; 'auto' is the same today — attaching is the CLI's job. */
|
package/dist/core/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AA0FA,MAAM,CAAC,MAAM,cAAc,GAAoB,mBAAmB,CAAA"}
|
|
@@ -64,4 +64,8 @@ export interface SpawnDecisionDeps {
|
|
|
64
64
|
}
|
|
65
65
|
/** The error for a process that died before it was ready: the engine's own last lines in the details. */
|
|
66
66
|
export declare function earlyExitError(exit: ExitInfo, tail: readonly string[]): AtomicCoreError;
|
|
67
|
+
/**
|
|
68
|
+
* Start the decision model, on another port when the one picked was taken before the engine could
|
|
69
|
+
* bind it (`retryOnTakenPort`): an exit while loading that says so is that race, not the model.
|
|
70
|
+
*/
|
|
67
71
|
export declare function spawnDecisionServer(spec: DecisionServerSpec, deps: SpawnDecisionDeps): Promise<DecisionProcessHandle>;
|
package/dist/decision/process.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
import { randomBytes } from 'node:crypto';
|
|
13
13
|
import { dirname } from 'node:path';
|
|
14
14
|
import { AtomicCoreError } from '../contracts/index.js';
|
|
15
|
-
import { backendOutputReporter, buildProcessEnv, discoverCudaPaths, nodeCudaProbeEnv, randomFreePort, spawnManaged, } from '../runtime/shared/index.js';
|
|
15
|
+
import { backendOutputReporter, buildProcessEnv, discoverCudaPaths, exitedOnTakenPort, nodeCudaProbeEnv, randomFreePort, retryOnTakenPort, spawnManaged, } from '../runtime/shared/index.js';
|
|
16
16
|
import { buildDecisionArgs, buildUpstreamDecisionArgs, commandSummary, decisionEnv, DECISION_HOST, withoutDecisionEnv, } from './args.js';
|
|
17
17
|
import { UPSTREAM_DECISION_DEFAULT_CTX } from './model-facts.js';
|
|
18
18
|
import { checkReadiness, READINESS_REQUEST_TIMEOUT_MS } from './readiness.js';
|
|
@@ -39,7 +39,16 @@ function describeExit(exit) {
|
|
|
39
39
|
export function earlyExitError(exit, tail) {
|
|
40
40
|
return new AtomicCoreError('MODEL_LOAD_FAILED', `The decision model exited with ${describeExit(exit)} while loading.`, tail.slice(-20).join('\n') || undefined);
|
|
41
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Start the decision model, on another port when the one picked was taken before the engine could
|
|
44
|
+
* bind it (`retryOnTakenPort`): an exit while loading that says so is that race, not the model.
|
|
45
|
+
*/
|
|
42
46
|
export async function spawnDecisionServer(spec, deps) {
|
|
47
|
+
return retryOnTakenPort(() => spawnDecisionServerOnce(spec, deps), (error) => error instanceof AtomicCoreError &&
|
|
48
|
+
error.code === 'MODEL_LOAD_FAILED' &&
|
|
49
|
+
exitedOnTakenPort(error.details), (attempt) => deps.log?.('warn', `the decision model's port was taken while it started; retrying (${attempt})`));
|
|
50
|
+
}
|
|
51
|
+
async function spawnDecisionServerOnce(spec, deps) {
|
|
43
52
|
const platform = deps.platform ?? process.platform;
|
|
44
53
|
const baseEnv = withoutDecisionEnv(deps.env ?? process.env);
|
|
45
54
|
const log = deps.log ?? (() => { });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/decision/process.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/decision/process.ts"],"names":[],"mappings":"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"}
|
package/dist/diffusion/args.d.ts
CHANGED
|
@@ -85,8 +85,9 @@ export declare const VIDEO_VAE_TILING_PIXEL_FRAMES: number;
|
|
|
85
85
|
/**
|
|
86
86
|
* The `POST /sdcpp/v1/img_gen` body. The whole batch goes in one request; guidance is split the way
|
|
87
87
|
* sd.cpp expects (CFG → `txt_cfg`, FLUX distilled → `distilled_guidance`). Only set keys are sent,
|
|
88
|
-
* so the server's own defaults apply to the rest.
|
|
89
|
-
*
|
|
88
|
+
* so the server's own defaults apply to the rest. `custom_sigmas` goes in when the family ships a
|
|
89
|
+
* fixed schedule for exactly this many steps (Qwen Image 2.1 Turbo). The workflow decides which
|
|
90
|
+
* images go in. sd.cpp resizes the init image to `width`×`height` itself, which is how Upscale works.
|
|
90
91
|
*
|
|
91
92
|
* sd.cpp reads integers with `is_number_integer()` and floats with `is_number()`, so `1` for a
|
|
92
93
|
* `cfgScale` of 1.0 is accepted (checked in its `common.cpp`).
|
package/dist/diffusion/args.js
CHANGED
|
@@ -152,11 +152,24 @@ export const VAE_TILING_AREA = 1024 * 1024;
|
|
|
152
152
|
* about 2 GB of that, the point past which a single-graph decode stops being safe anywhere.
|
|
153
153
|
*/
|
|
154
154
|
export const VIDEO_VAE_TILING_PIXEL_FRAMES = VAE_TILING_AREA * 8;
|
|
155
|
+
/**
|
|
156
|
+
* A distilled family's fixed schedule as sd.cpp takes it, or undefined when the request asks for
|
|
157
|
+
* another step count and sd.cpp builds its own. The catalog lists one sigma per step; sd.cpp runs
|
|
158
|
+
* `custom_sigmas.length - 1` steps (`GenerationRequest` in its `src/pipeline/request.cpp`), so the
|
|
159
|
+
* closing 0 is appended here. Without it the last step never runs and the output keeps the noise of
|
|
160
|
+
* the last listed sigma.
|
|
161
|
+
*/
|
|
162
|
+
function customSigmas(defaults, steps) {
|
|
163
|
+
if (defaults.sigmas === undefined || defaults.sigmas.length !== steps)
|
|
164
|
+
return undefined;
|
|
165
|
+
return [...defaults.sigmas, 0];
|
|
166
|
+
}
|
|
155
167
|
/**
|
|
156
168
|
* The `POST /sdcpp/v1/img_gen` body. The whole batch goes in one request; guidance is split the way
|
|
157
169
|
* sd.cpp expects (CFG → `txt_cfg`, FLUX distilled → `distilled_guidance`). Only set keys are sent,
|
|
158
|
-
* so the server's own defaults apply to the rest.
|
|
159
|
-
*
|
|
170
|
+
* so the server's own defaults apply to the rest. `custom_sigmas` goes in when the family ships a
|
|
171
|
+
* fixed schedule for exactly this many steps (Qwen Image 2.1 Turbo). The workflow decides which
|
|
172
|
+
* images go in. sd.cpp resizes the init image to `width`×`height` itself, which is how Upscale works.
|
|
160
173
|
*
|
|
161
174
|
* sd.cpp reads integers with `is_number_integer()` and floats with `is_number()`, so `1` for a
|
|
162
175
|
* `cfgScale` of 1.0 is accepted (checked in its `common.cpp`).
|
|
@@ -173,6 +186,9 @@ export function buildImgGenRequest(request, defaults, seed, inputs) {
|
|
|
173
186
|
const shift = request.flowShift ?? defaults.flowShift;
|
|
174
187
|
if (shift !== undefined)
|
|
175
188
|
sampleParams['flow_shift'] = shift;
|
|
189
|
+
const sigmas = customSigmas(defaults, request.steps);
|
|
190
|
+
if (sigmas !== undefined)
|
|
191
|
+
sampleParams['custom_sigmas'] = sigmas;
|
|
176
192
|
sampleParams['guidance'] = guidance;
|
|
177
193
|
const body = {
|
|
178
194
|
prompt: request.prompt,
|
|
@@ -218,8 +234,9 @@ export function buildVidGenRequest(request, defaults, seed, inputs, tiling) {
|
|
|
218
234
|
const shift = request.flowShift ?? defaults.flowShift;
|
|
219
235
|
if (shift !== undefined)
|
|
220
236
|
sampleParams['flow_shift'] = shift;
|
|
221
|
-
|
|
222
|
-
|
|
237
|
+
const sigmas = customSigmas(defaults, request.steps);
|
|
238
|
+
if (sigmas !== undefined)
|
|
239
|
+
sampleParams['custom_sigmas'] = sigmas;
|
|
223
240
|
sampleParams['guidance'] = guidance;
|
|
224
241
|
const video = defaults.video;
|
|
225
242
|
const body = {
|