@wenathlan/saddle 1.8.18 → 2.0.3
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/Dockerfile +1346 -0
- package/README.md +33 -12
- package/alternatives.ts +1218 -0
- package/biome.json +153 -0
- package/boards.json +1517 -0
- package/compute.ts +3144 -0
- package/cores.json +1801 -0
- package/dist/acquisition.d.ts +359 -0
- package/dist/acquisition.d.ts.map +1 -0
- package/dist/acquisition.js +629 -0
- package/dist/acquisition.js.map +1 -0
- package/dist/alternatives.d.ts +509 -0
- package/dist/alternatives.d.ts.map +1 -0
- package/dist/alternatives.js +951 -0
- package/dist/alternatives.js.map +1 -0
- package/dist/automation.d.ts +426 -0
- package/dist/automation.d.ts.map +1 -0
- package/dist/automation.js +561 -0
- package/dist/automation.js.map +1 -0
- package/dist/browser.d.ts +562 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +1057 -0
- package/dist/browser.js.map +1 -0
- package/dist/capacitor.config.d.ts +13 -0
- package/dist/capacitor.config.d.ts.map +1 -0
- package/dist/capacitor.config.js +26 -0
- package/dist/capacitor.config.js.map +1 -0
- package/dist/cli.d.ts +17 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +111 -0
- package/dist/cli.js.map +1 -0
- package/dist/communication.d.ts +192 -0
- package/dist/communication.d.ts.map +1 -0
- package/dist/communication.js +418 -0
- package/dist/communication.js.map +1 -0
- package/dist/compute.d.ts +1161 -0
- package/dist/compute.d.ts.map +1 -0
- package/dist/compute.js +2273 -0
- package/dist/compute.js.map +1 -0
- package/dist/distribution.d.ts +529 -0
- package/dist/distribution.d.ts.map +1 -0
- package/dist/distribution.js +811 -0
- package/dist/distribution.js.map +1 -0
- package/dist/execution.d.ts +530 -0
- package/dist/execution.d.ts.map +1 -0
- package/dist/execution.js +761 -0
- package/dist/execution.js.map +1 -0
- package/dist/format.d.ts +19 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +60 -0
- package/dist/format.js.map +1 -0
- package/dist/foundation.d.ts +176 -0
- package/dist/foundation.d.ts.map +1 -0
- package/dist/foundation.js +309 -0
- package/dist/foundation.js.map +1 -0
- package/dist/index.d.ts +733 -123
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1018 -123
- package/dist/index.js.map +1 -1
- package/dist/integration.d.ts +236 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +236 -0
- package/dist/integration.js.map +1 -0
- package/dist/intelligence.d.ts +94 -0
- package/dist/intelligence.d.ts.map +1 -0
- package/dist/intelligence.js +145 -0
- package/dist/intelligence.js.map +1 -0
- package/dist/{isolation/contracts.d.ts → isolation.d.ts} +12 -1
- package/dist/isolation.d.ts.map +1 -0
- package/dist/{isolation/contracts.js → isolation.js} +13 -1
- package/dist/isolation.js.map +1 -0
- package/dist/media.d.ts +344 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +986 -0
- package/dist/media.js.map +1 -0
- package/dist/modes.d.ts +359 -0
- package/dist/modes.d.ts.map +1 -0
- package/dist/modes.js +134 -0
- package/dist/modes.js.map +1 -0
- package/dist/{library/public.d.ts → operations.d.ts} +15 -1
- package/dist/operations.d.ts.map +1 -0
- package/dist/{library/public.js → operations.js} +18 -7
- package/dist/operations.js.map +1 -0
- package/dist/orchestrator.d.ts +1339 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +4308 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/packager/targetcli.js +4 -22
- package/dist/performance.d.ts +416 -0
- package/dist/performance.d.ts.map +1 -0
- package/dist/performance.js +827 -0
- package/dist/performance.js.map +1 -0
- package/dist/quantum.d.ts +810 -0
- package/dist/quantum.d.ts.map +1 -0
- package/dist/quantum.js +2073 -0
- package/dist/quantum.js.map +1 -0
- package/dist/render.d.ts +381 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +1073 -0
- package/dist/render.js.map +1 -0
- package/dist/scheduler.d.ts +596 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +1259 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/security.d.ts +501 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +1170 -0
- package/dist/security.js.map +1 -0
- package/dist/server.d.ts +21 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/{server/node.js → server.js} +16 -2
- package/dist/server.js.map +1 -0
- package/dist/tiers.d.ts +1002 -0
- package/dist/tiers.d.ts.map +1 -0
- package/dist/tiers.js +2165 -0
- package/dist/tiers.js.map +1 -0
- package/dist/virtual.d.ts +641 -0
- package/dist/virtual.d.ts.map +1 -0
- package/dist/virtual.js +1285 -0
- package/dist/virtual.js.map +1 -0
- package/dist/virtualcpu.d.ts +316 -0
- package/dist/virtualcpu.d.ts.map +1 -0
- package/dist/virtualcpu.js +1180 -0
- package/dist/virtualcpu.js.map +1 -0
- package/dist/virtualgpu.d.ts +345 -0
- package/dist/virtualgpu.d.ts.map +1 -0
- package/dist/virtualgpu.js +1000 -0
- package/dist/virtualgpu.js.map +1 -0
- package/dist/virtualization.d.ts +607 -0
- package/dist/virtualization.d.ts.map +1 -0
- package/dist/virtualization.js +1187 -0
- package/dist/virtualization.js.map +1 -0
- package/dist/virtualmemory.d.ts +818 -0
- package/dist/virtualmemory.d.ts.map +1 -0
- package/dist/virtualmemory.js +1796 -0
- package/dist/virtualmemory.js.map +1 -0
- package/dist/webscrape.d.ts +720 -0
- package/dist/webscrape.d.ts.map +1 -0
- package/dist/webscrape.js +2697 -0
- package/dist/webscrape.js.map +1 -0
- package/docker.config +769 -0
- package/docs/CONVERSA.txt +1523 -0
- package/docs/alternatives.md +499 -0
- package/docs/architecture-1.8.19.md +76 -0
- package/docs/architecture-1.8.19.mmd +33 -0
- package/docs/architecture-1.8.19.png +0 -0
- package/docs/architecture.md +355 -0
- package/docs/brancharchive-2026-08-18.md +18 -0
- package/docs/browser.md +7 -0
- package/docs/consolidation.md +70 -0
- package/docs/e2ugh-engine.md +528 -0
- package/{dist/examples/localjob.js → docs/example-localjob.ts} +3 -3
- package/{dist/examples/publicapi.js → docs/example-publicapi.ts} +2 -2
- package/docs/hardware.md +342 -0
- package/docs/optimization.md +126 -0
- package/docs/performance.md +499 -0
- package/docs/planning.1.8.18.md +94 -0
- package/docs/planning.1.8.19.md +49 -0
- package/docs/releasenotes-1.8.19.md +35 -0
- package/docs/research-1.8.19-virtual-browser.md +27 -0
- package/docs/security.md +454 -0
- package/docs/todo-1.8.18.md +12 -0
- package/docs/todo-1.8.19.md +241 -0
- package/docs/viability.md +777 -0
- package/docs/virtualization.md +335 -0
- package/docs/web-duplicatecleanup.md +9 -0
- package/docs/web-ideas.md +106 -0
- package/docs/workflowimprovements-2026-08-19.md +70 -0
- package/gpumonitor.cpp +1543 -0
- package/gpus.json +2408 -0
- package/index.ts +1478 -0
- package/media.ts +1337 -0
- package/mttg.config +1549 -0
- package/orchestrator.ts +5462 -0
- package/package.json +304 -56
- package/passage.config +1331 -0
- package/performance.ts +1049 -0
- package/processors.json +2217 -0
- package/qemu.config +1062 -0
- package/qemubridge.py +1340 -0
- package/quantum.ts +2393 -0
- package/render.ts +1325 -0
- package/scheduler.ts +1600 -0
- package/security.ts +1449 -0
- package/tiers.ts +2871 -0
- package/tsconfig.json +29 -0
- package/virtualcpu.ts +1273 -0
- package/virtualgpu.ts +1181 -0
- package/virtualhardware.c +1011 -0
- package/virtualhardware.json +739 -0
- package/virtualization.ts +1628 -0
- package/virtualizationcore.cpp +4635 -0
- package/virtualmemory.ts +2303 -0
- package/vm.config.json +1910 -0
- package/{extension → web/extension}/manifest.json +1 -1
- package/web/readme.md +382 -0
- package/web/tsconfig.json +25 -0
- package/dist/adapters/forge.d.ts +0 -17
- package/dist/adapters/forge.d.ts.map +0 -1
- package/dist/adapters/forge.js +0 -19
- package/dist/adapters/forge.js.map +0 -1
- package/dist/adapters/forgejo.d.ts +0 -49
- package/dist/adapters/forgejo.d.ts.map +0 -1
- package/dist/adapters/forgejo.js +0 -8
- package/dist/adapters/forgejo.js.map +0 -1
- package/dist/adapters/github.d.ts +0 -12
- package/dist/adapters/github.d.ts.map +0 -1
- package/dist/adapters/github.js +0 -20
- package/dist/adapters/github.js.map +0 -1
- package/dist/adapters/gitlab.d.ts +0 -17
- package/dist/adapters/gitlab.d.ts.map +0 -1
- package/dist/adapters/gitlab.js +0 -10
- package/dist/adapters/gitlab.js.map +0 -1
- package/dist/adapters/huggingface.d.ts +0 -17
- package/dist/adapters/huggingface.d.ts.map +0 -1
- package/dist/adapters/huggingface.js +0 -6
- package/dist/adapters/huggingface.js.map +0 -1
- package/dist/adapters/socket.d.ts +0 -11
- package/dist/adapters/socket.d.ts.map +0 -1
- package/dist/adapters/socket.js +0 -17
- package/dist/adapters/socket.js.map +0 -1
- package/dist/adapters/transport.d.ts +0 -7
- package/dist/adapters/transport.d.ts.map +0 -1
- package/dist/adapters/transport.js +0 -36
- package/dist/adapters/transport.js.map +0 -1
- package/dist/ai/chunk.d.ts +0 -2
- package/dist/ai/chunk.d.ts.map +0 -1
- package/dist/ai/chunk.js +0 -36
- package/dist/ai/chunk.js.map +0 -1
- package/dist/ai/llmstxt.d.ts +0 -6
- package/dist/ai/llmstxt.d.ts.map +0 -1
- package/dist/ai/llmstxt.js +0 -12
- package/dist/ai/llmstxt.js.map +0 -1
- package/dist/ai/provenance.d.ts +0 -22
- package/dist/ai/provenance.d.ts.map +0 -1
- package/dist/ai/provenance.js +0 -25
- package/dist/ai/provenance.js.map +0 -1
- package/dist/ai/rag.d.ts +0 -26
- package/dist/ai/rag.d.ts.map +0 -1
- package/dist/ai/rag.js +0 -22
- package/dist/ai/rag.js.map +0 -1
- package/dist/ai/tokens.d.ts +0 -15
- package/dist/ai/tokens.d.ts.map +0 -1
- package/dist/ai/tokens.js +0 -9
- package/dist/ai/tokens.js.map +0 -1
- package/dist/api/auth.d.ts +0 -16
- package/dist/api/auth.d.ts.map +0 -1
- package/dist/api/auth.js +0 -19
- package/dist/api/auth.js.map +0 -1
- package/dist/api/contracts.d.ts +0 -28
- package/dist/api/contracts.d.ts.map +0 -1
- package/dist/api/contracts.js +0 -14
- package/dist/api/contracts.js.map +0 -1
- package/dist/api/control.d.ts +0 -10
- package/dist/api/control.d.ts.map +0 -1
- package/dist/api/control.js +0 -35
- package/dist/api/control.js.map +0 -1
- package/dist/api/http.d.ts +0 -7
- package/dist/api/http.d.ts.map +0 -1
- package/dist/api/http.js +0 -12
- package/dist/api/http.js.map +0 -1
- package/dist/api/rate.d.ts +0 -28
- package/dist/api/rate.d.ts.map +0 -1
- package/dist/api/rate.js +0 -36
- package/dist/api/rate.js.map +0 -1
- package/dist/api/security.d.ts +0 -12
- package/dist/api/security.d.ts.map +0 -1
- package/dist/api/security.js +0 -56
- package/dist/api/security.js.map +0 -1
- package/dist/api/service.d.ts +0 -5
- package/dist/api/service.d.ts.map +0 -1
- package/dist/api/service.js +0 -70
- package/dist/api/service.js.map +0 -1
- package/dist/apps/registry.d.ts +0 -33
- package/dist/apps/registry.d.ts.map +0 -1
- package/dist/apps/registry.js +0 -24
- package/dist/apps/registry.js.map +0 -1
- package/dist/binary/archive.d.ts +0 -27
- package/dist/binary/archive.d.ts.map +0 -1
- package/dist/binary/archive.js +0 -46
- package/dist/binary/archive.js.map +0 -1
- package/dist/binary/build.d.ts +0 -29
- package/dist/binary/build.d.ts.map +0 -1
- package/dist/binary/build.js +0 -17
- package/dist/binary/build.js.map +0 -1
- package/dist/binary/transform.d.ts +0 -70
- package/dist/binary/transform.d.ts.map +0 -1
- package/dist/binary/transform.js +0 -105
- package/dist/binary/transform.js.map +0 -1
- package/dist/bot/adapter.d.ts +0 -5
- package/dist/bot/adapter.d.ts.map +0 -1
- package/dist/bot/adapter.js +0 -11
- package/dist/bot/adapter.js.map +0 -1
- package/dist/bot/bot.d.ts +0 -28
- package/dist/bot/bot.d.ts.map +0 -1
- package/dist/bot/bot.js +0 -52
- package/dist/bot/bot.js.map +0 -1
- package/dist/bot/commands.d.ts +0 -8
- package/dist/bot/commands.d.ts.map +0 -1
- package/dist/bot/commands.js +0 -19
- package/dist/bot/commands.js.map +0 -1
- package/dist/bot/permissions.d.ts +0 -13
- package/dist/bot/permissions.d.ts.map +0 -1
- package/dist/bot/permissions.js +0 -16
- package/dist/bot/permissions.js.map +0 -1
- package/dist/browser/actions.d.ts +0 -33
- package/dist/browser/actions.d.ts.map +0 -1
- package/dist/browser/actions.js +0 -44
- package/dist/browser/actions.js.map +0 -1
- package/dist/browser/agent.d.ts +0 -21
- package/dist/browser/agent.d.ts.map +0 -1
- package/dist/browser/agent.js +0 -13
- package/dist/browser/agent.js.map +0 -1
- package/dist/browser/context.d.ts +0 -43
- package/dist/browser/context.d.ts.map +0 -1
- package/dist/browser/context.js +0 -54
- package/dist/browser/context.js.map +0 -1
- package/dist/browser/fingerprint.d.ts +0 -4
- package/dist/browser/fingerprint.d.ts.map +0 -1
- package/dist/browser/fingerprint.js +0 -12
- package/dist/browser/fingerprint.js.map +0 -1
- package/dist/browser/index.d.ts +0 -11
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -11
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/playwright.d.ts +0 -11
- package/dist/browser/playwright.d.ts.map +0 -1
- package/dist/browser/playwright.js +0 -24
- package/dist/browser/playwright.js.map +0 -1
- package/dist/browser/recorder.d.ts +0 -21
- package/dist/browser/recorder.d.ts.map +0 -1
- package/dist/browser/recorder.js +0 -58
- package/dist/browser/recorder.js.map +0 -1
- package/dist/browser/session.d.ts +0 -14
- package/dist/browser/session.d.ts.map +0 -1
- package/dist/browser/session.js +0 -21
- package/dist/browser/session.js.map +0 -1
- package/dist/browser/snapshot.d.ts +0 -69
- package/dist/browser/snapshot.d.ts.map +0 -1
- package/dist/browser/snapshot.js +0 -133
- package/dist/browser/snapshot.js.map +0 -1
- package/dist/captcha/contract.d.ts +0 -35
- package/dist/captcha/contract.d.ts.map +0 -1
- package/dist/captcha/contract.js +0 -17
- package/dist/captcha/contract.js.map +0 -1
- package/dist/captcha/evidence.d.ts +0 -10
- package/dist/captcha/evidence.d.ts.map +0 -1
- package/dist/captcha/evidence.js +0 -9
- package/dist/captcha/evidence.js.map +0 -1
- package/dist/captcha/guard.d.ts +0 -23
- package/dist/captcha/guard.d.ts.map +0 -1
- package/dist/captcha/guard.js +0 -12
- package/dist/captcha/guard.js.map +0 -1
- package/dist/cli/main.d.ts +0 -4
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -46
- package/dist/cli/main.js.map +0 -1
- package/dist/core/errors.d.ts +0 -84
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -54
- package/dist/core/errors.js.map +0 -1
- package/dist/core/events.d.ts +0 -9
- package/dist/core/events.d.ts.map +0 -1
- package/dist/core/events.js +0 -21
- package/dist/core/events.js.map +0 -1
- package/dist/core/hash.d.ts +0 -10
- package/dist/core/hash.d.ts.map +0 -1
- package/dist/core/hash.js +0 -82
- package/dist/core/hash.js.map +0 -1
- package/dist/core/ids.d.ts +0 -10
- package/dist/core/ids.d.ts.map +0 -1
- package/dist/core/ids.js +0 -15
- package/dist/core/ids.js.map +0 -1
- package/dist/delivery/manifest.d.ts +0 -35
- package/dist/delivery/manifest.d.ts.map +0 -1
- package/dist/delivery/manifest.js +0 -68
- package/dist/delivery/manifest.js.map +0 -1
- package/dist/deploy/index.d.ts +0 -6
- package/dist/deploy/index.d.ts.map +0 -1
- package/dist/deploy/index.js +0 -6
- package/dist/deploy/index.js.map +0 -1
- package/dist/dispatch/resumable.d.ts +0 -102
- package/dist/dispatch/resumable.d.ts.map +0 -1
- package/dist/dispatch/resumable.js +0 -64
- package/dist/dispatch/resumable.js.map +0 -1
- package/dist/dispatch/workflow.d.ts +0 -6
- package/dist/dispatch/workflow.d.ts.map +0 -1
- package/dist/dispatch/workflow.js +0 -37
- package/dist/dispatch/workflow.js.map +0 -1
- package/dist/domain/artifacts.d.ts +0 -12
- package/dist/domain/artifacts.d.ts.map +0 -1
- package/dist/domain/artifacts.js +0 -14
- package/dist/domain/artifacts.js.map +0 -1
- package/dist/domain/jobs.d.ts +0 -12
- package/dist/domain/jobs.d.ts.map +0 -1
- package/dist/domain/jobs.js +0 -20
- package/dist/domain/jobs.js.map +0 -1
- package/dist/domain/providers.d.ts +0 -10
- package/dist/domain/providers.d.ts.map +0 -1
- package/dist/domain/providers.js +0 -8
- package/dist/domain/providers.js.map +0 -1
- package/dist/domain/runtime.d.ts +0 -14
- package/dist/domain/runtime.d.ts.map +0 -1
- package/dist/domain/runtime.js +0 -10
- package/dist/domain/runtime.js.map +0 -1
- package/dist/domain/sessions.d.ts +0 -12
- package/dist/domain/sessions.d.ts.map +0 -1
- package/dist/domain/sessions.js +0 -57
- package/dist/domain/sessions.js.map +0 -1
- package/dist/examples/localjob.d.ts +0 -2
- package/dist/examples/localjob.d.ts.map +0 -1
- package/dist/examples/localjob.js.map +0 -1
- package/dist/examples/publicapi.d.ts +0 -2
- package/dist/examples/publicapi.d.ts.map +0 -1
- package/dist/examples/publicapi.js.map +0 -1
- package/dist/extension/build.d.ts +0 -9
- package/dist/extension/build.d.ts.map +0 -1
- package/dist/extension/build.js +0 -85
- package/dist/extension/build.js.map +0 -1
- package/dist/extension/content.d.ts +0 -6
- package/dist/extension/content.d.ts.map +0 -1
- package/dist/extension/content.js +0 -135
- package/dist/extension/content.js.map +0 -1
- package/dist/extension/index.d.ts +0 -7
- package/dist/extension/index.d.ts.map +0 -1
- package/dist/extension/index.js +0 -7
- package/dist/extension/index.js.map +0 -1
- package/dist/extension/pagebridge.d.ts +0 -6
- package/dist/extension/pagebridge.d.ts.map +0 -1
- package/dist/extension/pagebridge.js +0 -42
- package/dist/extension/pagebridge.js.map +0 -1
- package/dist/extension/permissions.d.ts +0 -26
- package/dist/extension/permissions.d.ts.map +0 -1
- package/dist/extension/permissions.js +0 -28
- package/dist/extension/permissions.js.map +0 -1
- package/dist/extension/popup.d.ts +0 -5
- package/dist/extension/popup.d.ts.map +0 -1
- package/dist/extension/popup.js +0 -26
- package/dist/extension/popup.js.map +0 -1
- package/dist/extension/protocol.d.ts +0 -58
- package/dist/extension/protocol.d.ts.map +0 -1
- package/dist/extension/protocol.js +0 -101
- package/dist/extension/protocol.js.map +0 -1
- package/dist/extension/serviceworker.d.ts +0 -25
- package/dist/extension/serviceworker.d.ts.map +0 -1
- package/dist/extension/serviceworker.js +0 -102
- package/dist/extension/serviceworker.js.map +0 -1
- package/dist/extension/worker.d.ts +0 -28
- package/dist/extension/worker.d.ts.map +0 -1
- package/dist/extension/worker.js +0 -22
- package/dist/extension/worker.js.map +0 -1
- package/dist/format/check.d.ts +0 -8
- package/dist/format/check.d.ts.map +0 -1
- package/dist/format/check.js +0 -38
- package/dist/format/check.js.map +0 -1
- package/dist/isolation/contracts.d.ts.map +0 -1
- package/dist/isolation/contracts.js.map +0 -1
- package/dist/library/public.d.ts.map +0 -1
- package/dist/library/public.js.map +0 -1
- package/dist/mcp/browser.d.ts +0 -9
- package/dist/mcp/browser.d.ts.map +0 -1
- package/dist/mcp/browser.js +0 -13
- package/dist/mcp/browser.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -35
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js +0 -40
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/transport.d.ts +0 -7
- package/dist/mcp/transport.d.ts.map +0 -1
- package/dist/mcp/transport.js +0 -17
- package/dist/mcp/transport.js.map +0 -1
- package/dist/memory/bridge.d.ts +0 -14
- package/dist/memory/bridge.d.ts.map +0 -1
- package/dist/memory/bridge.js +0 -16
- package/dist/memory/bridge.js.map +0 -1
- package/dist/memory/engine.d.ts +0 -38
- package/dist/memory/engine.d.ts.map +0 -1
- package/dist/memory/engine.js +0 -109
- package/dist/memory/engine.js.map +0 -1
- package/dist/memory/modes.d.ts +0 -43
- package/dist/memory/modes.d.ts.map +0 -1
- package/dist/memory/modes.js +0 -66
- package/dist/memory/modes.js.map +0 -1
- package/dist/memory/objects.d.ts +0 -21
- package/dist/memory/objects.d.ts.map +0 -1
- package/dist/memory/objects.js +0 -20
- package/dist/memory/objects.js.map +0 -1
- package/dist/memory/planner.d.ts +0 -66
- package/dist/memory/planner.d.ts.map +0 -1
- package/dist/memory/planner.js +0 -108
- package/dist/memory/planner.js.map +0 -1
- package/dist/memory/targets.d.ts +0 -78
- package/dist/memory/targets.d.ts.map +0 -1
- package/dist/memory/targets.js +0 -29
- package/dist/memory/targets.js.map +0 -1
- package/dist/memory/transforms.d.ts +0 -19
- package/dist/memory/transforms.d.ts.map +0 -1
- package/dist/memory/transforms.js +0 -14
- package/dist/memory/transforms.js.map +0 -1
- package/dist/modes/matrix.d.ts +0 -23
- package/dist/modes/matrix.d.ts.map +0 -1
- package/dist/modes/matrix.js +0 -18
- package/dist/modes/matrix.js.map +0 -1
- package/dist/modes/modes.d.ts +0 -33
- package/dist/modes/modes.d.ts.map +0 -1
- package/dist/modes/modes.js +0 -15
- package/dist/modes/modes.js.map +0 -1
- package/dist/modes/resolve.d.ts +0 -96
- package/dist/modes/resolve.d.ts.map +0 -1
- package/dist/modes/resolve.js +0 -48
- package/dist/modes/resolve.js.map +0 -1
- package/dist/observability/metrics.d.ts +0 -14
- package/dist/observability/metrics.d.ts.map +0 -1
- package/dist/observability/metrics.js +0 -18
- package/dist/observability/metrics.js.map +0 -1
- package/dist/packager/manifest.d.ts +0 -66
- package/dist/packager/manifest.d.ts.map +0 -1
- package/dist/packager/manifest.js +0 -94
- package/dist/packager/manifest.js.map +0 -1
- package/dist/packager/publish.d.ts +0 -51
- package/dist/packager/publish.d.ts.map +0 -1
- package/dist/packager/publish.js +0 -18
- package/dist/packager/publish.js.map +0 -1
- package/dist/packager/targetcli.d.ts +0 -7
- package/dist/packager/targetcli.d.ts.map +0 -1
- package/dist/packager/targetcli.js.map +0 -1
- package/dist/persistence/adapter.d.ts +0 -5
- package/dist/persistence/adapter.d.ts.map +0 -1
- package/dist/persistence/adapter.js +0 -11
- package/dist/persistence/adapter.js.map +0 -1
- package/dist/persistence/drizzle.d.ts +0 -2
- package/dist/persistence/drizzle.d.ts.map +0 -1
- package/dist/persistence/drizzle.js +0 -12
- package/dist/persistence/drizzle.js.map +0 -1
- package/dist/persistence/memory.d.ts +0 -2
- package/dist/persistence/memory.d.ts.map +0 -1
- package/dist/persistence/memory.js +0 -27
- package/dist/persistence/memory.js.map +0 -1
- package/dist/persistence/migrations.d.ts +0 -19
- package/dist/persistence/migrations.d.ts.map +0 -1
- package/dist/persistence/migrations.js +0 -13
- package/dist/persistence/migrations.js.map +0 -1
- package/dist/persistence/prisma.d.ts +0 -2
- package/dist/persistence/prisma.d.ts.map +0 -1
- package/dist/persistence/prisma.js +0 -25
- package/dist/persistence/prisma.js.map +0 -1
- package/dist/persistence/schema.d.ts +0 -63
- package/dist/persistence/schema.d.ts.map +0 -1
- package/dist/persistence/schema.js +0 -28
- package/dist/persistence/schema.js.map +0 -1
- package/dist/persistence/sql.d.ts +0 -3
- package/dist/persistence/sql.d.ts.map +0 -1
- package/dist/persistence/sql.js +0 -37
- package/dist/persistence/sql.js.map +0 -1
- package/dist/protocol/blocks.d.ts +0 -10
- package/dist/protocol/blocks.d.ts.map +0 -1
- package/dist/protocol/blocks.js +0 -26
- package/dist/protocol/blocks.js.map +0 -1
- package/dist/protocol/json.d.ts +0 -6
- package/dist/protocol/json.d.ts.map +0 -1
- package/dist/protocol/json.js +0 -6
- package/dist/protocol/json.js.map +0 -1
- package/dist/protocol/ndjson.d.ts +0 -3
- package/dist/protocol/ndjson.d.ts.map +0 -1
- package/dist/protocol/ndjson.js +0 -20
- package/dist/protocol/ndjson.js.map +0 -1
- package/dist/protocol/sse.d.ts +0 -7
- package/dist/protocol/sse.d.ts.map +0 -1
- package/dist/protocol/sse.js +0 -25
- package/dist/protocol/sse.js.map +0 -1
- package/dist/proxy/pool.d.ts +0 -9
- package/dist/proxy/pool.d.ts.map +0 -1
- package/dist/proxy/pool.js +0 -27
- package/dist/proxy/pool.js.map +0 -1
- package/dist/queue/idempotency.d.ts +0 -10
- package/dist/queue/idempotency.d.ts.map +0 -1
- package/dist/queue/idempotency.js +0 -13
- package/dist/queue/idempotency.js.map +0 -1
- package/dist/queue/persistent.d.ts +0 -14
- package/dist/queue/persistent.d.ts.map +0 -1
- package/dist/queue/persistent.js +0 -66
- package/dist/queue/persistent.js.map +0 -1
- package/dist/queue/queue.d.ts +0 -7
- package/dist/queue/queue.d.ts.map +0 -1
- package/dist/queue/queue.js +0 -55
- package/dist/queue/queue.js.map +0 -1
- package/dist/queue/saga.d.ts +0 -5
- package/dist/queue/saga.d.ts.map +0 -1
- package/dist/queue/saga.js +0 -20
- package/dist/queue/saga.js.map +0 -1
- package/dist/release/assets.d.ts +0 -144
- package/dist/release/assets.d.ts.map +0 -1
- package/dist/release/assets.js +0 -157
- package/dist/release/assets.js.map +0 -1
- package/dist/release/evidence.d.ts +0 -92
- package/dist/release/evidence.d.ts.map +0 -1
- package/dist/release/evidence.js +0 -148
- package/dist/release/evidence.js.map +0 -1
- package/dist/release/verify.d.ts +0 -12
- package/dist/release/verify.d.ts.map +0 -1
- package/dist/release/verify.js +0 -112
- package/dist/release/verify.js.map +0 -1
- package/dist/runners/chain.d.ts +0 -125
- package/dist/runners/chain.d.ts.map +0 -1
- package/dist/runners/chain.js +0 -95
- package/dist/runners/chain.js.map +0 -1
- package/dist/runners/health.d.ts +0 -36
- package/dist/runners/health.d.ts.map +0 -1
- package/dist/runners/health.js +0 -26
- package/dist/runners/health.js.map +0 -1
- package/dist/runners/heartbeat.d.ts +0 -23
- package/dist/runners/heartbeat.d.ts.map +0 -1
- package/dist/runners/heartbeat.js +0 -29
- package/dist/runners/heartbeat.js.map +0 -1
- package/dist/runners/inprocess.d.ts +0 -17
- package/dist/runners/inprocess.d.ts.map +0 -1
- package/dist/runners/inprocess.js +0 -20
- package/dist/runners/inprocess.js.map +0 -1
- package/dist/runners/scheduler.d.ts +0 -5
- package/dist/runners/scheduler.d.ts.map +0 -1
- package/dist/runners/scheduler.js +0 -19
- package/dist/runners/scheduler.js.map +0 -1
- package/dist/runtime/abort.d.ts +0 -8
- package/dist/runtime/abort.d.ts.map +0 -1
- package/dist/runtime/abort.js +0 -13
- package/dist/runtime/abort.js.map +0 -1
- package/dist/runtime/compatibility.d.ts +0 -37
- package/dist/runtime/compatibility.d.ts.map +0 -1
- package/dist/runtime/compatibility.js +0 -10
- package/dist/runtime/compatibility.js.map +0 -1
- package/dist/runtime/detect.d.ts +0 -13
- package/dist/runtime/detect.d.ts.map +0 -1
- package/dist/runtime/detect.js +0 -18
- package/dist/runtime/detect.js.map +0 -1
- package/dist/runtime/engine.d.ts +0 -20
- package/dist/runtime/engine.d.ts.map +0 -1
- package/dist/runtime/engine.js +0 -61
- package/dist/runtime/engine.js.map +0 -1
- package/dist/runtime/retry.d.ts +0 -19
- package/dist/runtime/retry.d.ts.map +0 -1
- package/dist/runtime/retry.js +0 -54
- package/dist/runtime/retry.js.map +0 -1
- package/dist/runtime/worker.d.ts +0 -10
- package/dist/runtime/worker.d.ts.map +0 -1
- package/dist/runtime/worker.js +0 -25
- package/dist/runtime/worker.js.map +0 -1
- package/dist/scrape/cache.d.ts +0 -45
- package/dist/scrape/cache.d.ts.map +0 -1
- package/dist/scrape/cache.js +0 -45
- package/dist/scrape/cache.js.map +0 -1
- package/dist/scrape/crawl.d.ts +0 -47
- package/dist/scrape/crawl.d.ts.map +0 -1
- package/dist/scrape/crawl.js +0 -114
- package/dist/scrape/crawl.js.map +0 -1
- package/dist/scrape/extract.d.ts +0 -63
- package/dist/scrape/extract.d.ts.map +0 -1
- package/dist/scrape/extract.js +0 -47
- package/dist/scrape/extract.js.map +0 -1
- package/dist/scrape/normalize.d.ts +0 -52
- package/dist/scrape/normalize.d.ts.map +0 -1
- package/dist/scrape/normalize.js +0 -102
- package/dist/scrape/normalize.js.map +0 -1
- package/dist/scrape/robots.d.ts +0 -37
- package/dist/scrape/robots.d.ts.map +0 -1
- package/dist/scrape/robots.js +0 -71
- package/dist/scrape/robots.js.map +0 -1
- package/dist/scrape/schema.d.ts +0 -23
- package/dist/scrape/schema.d.ts.map +0 -1
- package/dist/scrape/schema.js +0 -92
- package/dist/scrape/schema.js.map +0 -1
- package/dist/scrape/scraper.d.ts +0 -6
- package/dist/scrape/scraper.d.ts.map +0 -1
- package/dist/scrape/scraper.js +0 -46
- package/dist/scrape/scraper.js.map +0 -1
- package/dist/scrape/semantic.d.ts +0 -25
- package/dist/scrape/semantic.d.ts.map +0 -1
- package/dist/scrape/semantic.js +0 -27
- package/dist/scrape/semantic.js.map +0 -1
- package/dist/server/node.d.ts +0 -7
- package/dist/server/node.d.ts.map +0 -1
- package/dist/server/node.js.map +0 -1
- package/dist/sessions/file.d.ts +0 -25
- package/dist/sessions/file.d.ts.map +0 -1
- package/dist/sessions/file.js +0 -13
- package/dist/sessions/file.js.map +0 -1
- package/dist/sessions/replay.d.ts +0 -9
- package/dist/sessions/replay.d.ts.map +0 -1
- package/dist/sessions/replay.js +0 -70
- package/dist/sessions/replay.js.map +0 -1
- package/dist/sessions/store.d.ts +0 -25
- package/dist/sessions/store.d.ts.map +0 -1
- package/dist/sessions/store.js +0 -13
- package/dist/sessions/store.js.map +0 -1
- package/dist/storage/adapter.d.ts +0 -5
- package/dist/storage/adapter.d.ts.map +0 -1
- package/dist/storage/adapter.js +0 -11
- package/dist/storage/adapter.js.map +0 -1
- package/dist/storage/cache.d.ts +0 -23
- package/dist/storage/cache.d.ts.map +0 -1
- package/dist/storage/cache.js +0 -79
- package/dist/storage/cache.js.map +0 -1
- package/dist/storage/checksum.d.ts +0 -3
- package/dist/storage/checksum.d.ts.map +0 -1
- package/dist/storage/checksum.js +0 -19
- package/dist/storage/checksum.js.map +0 -1
- package/dist/storage/chunked.d.ts +0 -21
- package/dist/storage/chunked.d.ts.map +0 -1
- package/dist/storage/chunked.js +0 -67
- package/dist/storage/chunked.js.map +0 -1
- package/dist/storage/content.d.ts +0 -24
- package/dist/storage/content.d.ts.map +0 -1
- package/dist/storage/content.js +0 -44
- package/dist/storage/content.js.map +0 -1
- package/dist/storage/filehosting.d.ts +0 -2
- package/dist/storage/filehosting.d.ts.map +0 -1
- package/dist/storage/filehosting.js +0 -24
- package/dist/storage/filehosting.js.map +0 -1
- package/dist/storage/githubcontents.d.ts +0 -2
- package/dist/storage/githubcontents.d.ts.map +0 -1
- package/dist/storage/githubcontents.js +0 -29
- package/dist/storage/githubcontents.js.map +0 -1
- package/dist/storage/index.d.ts +0 -12
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js +0 -12
- package/dist/storage/index.js.map +0 -1
- package/dist/storage/local.d.ts +0 -2
- package/dist/storage/local.d.ts.map +0 -1
- package/dist/storage/local.js +0 -72
- package/dist/storage/local.js.map +0 -1
- package/dist/storage/memory.d.ts +0 -6
- package/dist/storage/memory.d.ts.map +0 -1
- package/dist/storage/memory.js +0 -36
- package/dist/storage/memory.js.map +0 -1
- package/dist/storage/pool.d.ts +0 -95
- package/dist/storage/pool.d.ts.map +0 -1
- package/dist/storage/pool.js +0 -202
- package/dist/storage/pool.js.map +0 -1
- package/dist/storage/s3compatible.d.ts +0 -3
- package/dist/storage/s3compatible.d.ts.map +0 -1
- package/dist/storage/s3compatible.js +0 -70
- package/dist/storage/s3compatible.js.map +0 -1
- package/dist/storage/sync.d.ts +0 -47
- package/dist/storage/sync.d.ts.map +0 -1
- package/dist/storage/sync.js +0 -75
- package/dist/storage/sync.js.map +0 -1
- package/dist/surfaces/adapters.d.ts +0 -97
- package/dist/surfaces/adapters.d.ts.map +0 -1
- package/dist/surfaces/adapters.js +0 -50
- package/dist/surfaces/adapters.js.map +0 -1
- package/dist/surfaces/controls.d.ts +0 -18
- package/dist/surfaces/controls.d.ts.map +0 -1
- package/dist/surfaces/controls.js +0 -45
- package/dist/surfaces/controls.js.map +0 -1
- package/dist/surfaces/manifest.d.ts +0 -68
- package/dist/surfaces/manifest.d.ts.map +0 -1
- package/dist/surfaces/manifest.js +0 -42
- package/dist/surfaces/manifest.js.map +0 -1
- package/dist/surfaces/n8n.d.ts +0 -25
- package/dist/surfaces/n8n.d.ts.map +0 -1
- package/dist/surfaces/n8n.js +0 -31
- package/dist/surfaces/n8n.js.map +0 -1
- package/dist/surfaces/operations.d.ts +0 -32
- package/dist/surfaces/operations.d.ts.map +0 -1
- package/dist/surfaces/operations.js +0 -53
- package/dist/surfaces/operations.js.map +0 -1
- package/dist/surfaces/requirements.d.ts +0 -29
- package/dist/surfaces/requirements.d.ts.map +0 -1
- package/dist/surfaces/requirements.js +0 -50
- package/dist/surfaces/requirements.js.map +0 -1
- package/dist/surfaces/targets.d.ts +0 -196
- package/dist/surfaces/targets.d.ts.map +0 -1
- package/dist/surfaces/targets.js +0 -27
- package/dist/surfaces/targets.js.map +0 -1
- package/dist/webhook/delivery.d.ts +0 -18
- package/dist/webhook/delivery.d.ts.map +0 -1
- package/dist/webhook/delivery.js +0 -36
- package/dist/webhook/delivery.js.map +0 -1
- package/dist/webhook/receiver.d.ts +0 -26
- package/dist/webhook/receiver.d.ts.map +0 -1
- package/dist/webhook/receiver.js +0 -24
- package/dist/webhook/receiver.js.map +0 -1
- package/dist/webhook/signature.d.ts +0 -3
- package/dist/webhook/signature.d.ts.map +0 -1
- package/dist/webhook/signature.js +0 -7
- package/dist/webhook/signature.js.map +0 -1
- package/dist/workflow/manifest.d.ts +0 -22
- package/dist/workflow/manifest.d.ts.map +0 -1
- package/dist/workflow/manifest.js +0 -21
- package/dist/workflow/manifest.js.map +0 -1
- package/dist/workflow/registry.d.ts +0 -7
- package/dist/workflow/registry.d.ts.map +0 -1
- package/dist/workflow/registry.js +0 -18
- package/dist/workflow/registry.js.map +0 -1
- package/dist/workflow/templates.d.ts +0 -6
- package/dist/workflow/templates.d.ts.map +0 -1
- package/dist/workflow/templates.js +0 -18
- package/dist/workflow/templates.js.map +0 -1
- package/dist/workflow/triggers.d.ts +0 -64
- package/dist/workflow/triggers.d.ts.map +0 -1
- package/dist/workflow/triggers.js +0 -99
- package/dist/workflow/triggers.js.map +0 -1
- /package/{extension/README.md → docs/extension.md} +0 -0
|
@@ -0,0 +1,1000 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* virtualgpu - physical gpu virtualization: passthrough, vgpu slicing, MIG
|
|
3
|
+
* layouts and the verified gpu identity bank.
|
|
4
|
+
*
|
|
5
|
+
* This module owns the physical side of gpu virtualization. It absorbs the
|
|
6
|
+
* gpu-passthrough module in full (vfio bind/unbind through driverctl with
|
|
7
|
+
* the new_id fallback, vbios rom dumping from sysfs, the Looking Glass B7
|
|
8
|
+
* IVshmem recipe, the NVIDIA vGPU profile-size formula, the vendor-reset
|
|
9
|
+
* family list and the Intel SR-IOV DKMS parameters), the v2 stub
|
|
10
|
+
* (nvmlMockEnv and the pciIds table, corrected against the v5 sources) and
|
|
11
|
+
* a TS mirror of the C++ virtualization core data: the vgpu slice profile
|
|
12
|
+
* table (B100-1Q through RX9070XT-4Q), the Blackwell MIG layout catalog
|
|
13
|
+
* with the 7c/192GB density validator, the static spec database (GB100,
|
|
14
|
+
* GB202, GB203, Navi48, Navi44) and the NVENC dual-engine throughput table.
|
|
15
|
+
*
|
|
16
|
+
* The verified bank embeds seven real identities confirmed on 2026-08-22
|
|
17
|
+
* against vendor pages, TechPowerUp and the PCI id databases: RTX 5090
|
|
18
|
+
* (10DE:2B85, 32 GB GDDR7), RTX PRO 6000 Blackwell (10DE:26B5, 96 GB GDDR7
|
|
19
|
+
* ECC, 24064 CUDA cores), B200 (10DE:2665, 192 GB HBM3e at 8 TB/s), H100
|
|
20
|
+
* (10DE:2330, 80 GB HBM3), A100 (10DE:20B0, 40 GB HBM2e), RX 9070 XT
|
|
21
|
+
* (1002:748E, 16 GB GDDR6) and Instinct MI350X (1002:75A0, 288 GB HBM3e).
|
|
22
|
+
* The legacy 10DE:2BB5 spelling for the RTX PRO 6000 found in the v4
|
|
23
|
+
* sources is wrong; the verified id is 26B5 and the divergence is recorded
|
|
24
|
+
* here for traceability.
|
|
25
|
+
*
|
|
26
|
+
* Data for the extra identities discovered in the Meta jsons (B100
|
|
27
|
+
* 10DE:2664, GB200 superchip, RTX 5070, RX 8900 XTX, Arc B770 and the RDNA
|
|
28
|
+
* APU family) stays in the json data files (gpus.json, processors.json);
|
|
29
|
+
* this module only ships the logic: the registry, the fluent builder, the
|
|
30
|
+
* factory and the registergpudata normalizer that turns a json record into
|
|
31
|
+
* a bank entry.
|
|
32
|
+
*
|
|
33
|
+
* Domain split: render.ts keeps the software identity stack (Mesa, the
|
|
34
|
+
* nvidia-smi); virtualmemory.ts keeps the guest MIG slicing profiles
|
|
35
|
+
* (1g.24gb, 2g.48gb, 4g.96gb) which this module imports to compose the
|
|
36
|
+
* complete catalog; virtualization.ts re-exports the passthrough helpers
|
|
37
|
+
* for the QEMU command line.
|
|
38
|
+
*
|
|
39
|
+
* Contexts (25): gpuerror, pciids, nvmlmockenv, virtualgpuspec, gpubank,
|
|
40
|
+
* smidriveranchor, bindvfio, unbindvfio, romdump, lookingglassb7,
|
|
41
|
+
* nvidiavgpuprofiles, vendorresetfamilies, intelsriovdkms, vgpuprofiles,
|
|
42
|
+
* miglayoutblackwell, validatedensity, composemigcatalog, gpustaticspecs,
|
|
43
|
+
* nvencdualengine, nvencsessiontable, nvencCanFit, gpuregistry,
|
|
44
|
+
* virtualgpubuilder, registergpudata, createvirtualgpu.
|
|
45
|
+
*
|
|
46
|
+
* Patterns: registry (gpuregistry), builder (virtualgpubuilder), factory
|
|
47
|
+
* (createvirtualgpu), normalizer (registergpudata).
|
|
48
|
+
* Rules: lowercase identifiers, english jsdoc, third person, no emoji,
|
|
49
|
+
* try/catch catcher on every fallible path, node:* built-ins only, and no
|
|
50
|
+
* hardcoded localhost address anywhere.
|
|
51
|
+
*/
|
|
52
|
+
import { execFileSync } from 'node:child_process';
|
|
53
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
54
|
+
import { dirname } from 'node:path';
|
|
55
|
+
import { MIGPROFILES } from './virtualmemory.js';
|
|
56
|
+
/** pci bdf (bus:device.function) validator: strict hex format only.
|
|
57
|
+
* blocks any shell metacharacter or path traversal. */
|
|
58
|
+
function issafebdf(value) {
|
|
59
|
+
return (typeof value === 'string' && /^[0-9a-fA-F]{4}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}\.[0-7]$/.test(value));
|
|
60
|
+
}
|
|
61
|
+
/** pci vendor:device id validator: strict hex format only. */
|
|
62
|
+
function issafevendordevice(value) {
|
|
63
|
+
return typeof value === 'string' && /^[0-9A-Fa-f]{4}:[0-9A-Fa-f]{4}$/.test(value);
|
|
64
|
+
}
|
|
65
|
+
/* ------------------------------------------------------------------ */
|
|
66
|
+
/* Section 1: errors */
|
|
67
|
+
/* ------------------------------------------------------------------ */
|
|
68
|
+
/** Error thrown by every virtualgpu subsystem with an optional cause chain. */
|
|
69
|
+
export class gpuerror extends Error {
|
|
70
|
+
/** Machine readable subsystem tag. */
|
|
71
|
+
subsystem;
|
|
72
|
+
constructor(message, options) {
|
|
73
|
+
super(message, options);
|
|
74
|
+
this.name = 'gpuerror';
|
|
75
|
+
this.subsystem = options?.subsystem ?? 'virtualgpu';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/* ------------------------------------------------------------------ */
|
|
79
|
+
/* Section 2: pci ids and nvml adapter (stub absorbed, data corrected) */
|
|
80
|
+
/* ------------------------------------------------------------------ */
|
|
81
|
+
/**
|
|
82
|
+
* Canonical PCI ids of the verified bank, keyed by registry name. The
|
|
83
|
+
* RTX PRO 6000 entry uses 26B5 as confirmed in the v5 research; the 2BB5
|
|
84
|
+
* value found in the v4 nested_gpu.json is a transcription error and is
|
|
85
|
+
* intentionally not reproduced.
|
|
86
|
+
*/
|
|
87
|
+
export const pciIds = {
|
|
88
|
+
rtx5090: '10DE:2B85',
|
|
89
|
+
rtxpro6000: '10DE:26B5',
|
|
90
|
+
b200: '10DE:2665',
|
|
91
|
+
h100: '10DE:2330',
|
|
92
|
+
a100: '10DE:20B0',
|
|
93
|
+
rx9070xt: '1002:748E',
|
|
94
|
+
mi350x: '1002:75A0',
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* NVIDIA driver and CUDA anchor shared by the smi-adapter header and the nvenc
|
|
98
|
+
* engine description (v2 anchor; supersedes the 560.35.03 and 580.82.07
|
|
99
|
+
* strings found in the older sources).
|
|
100
|
+
*/
|
|
101
|
+
export const smidriveranchor = {
|
|
102
|
+
driver: '575.57.08',
|
|
103
|
+
cuda: '12.9',
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Builds the NVML mock environment consumed by the virtual nvidia-smi adapter
|
|
107
|
+
* emulator and the nvml-unified-shim (their documented interface): FAKE_VRAM pins the reported memory in
|
|
108
|
+
* MiB and FAKE_MODEL pins the reported device name.
|
|
109
|
+
*/
|
|
110
|
+
export function nvmlMockEnv(vrammib, model) {
|
|
111
|
+
try {
|
|
112
|
+
if (!Number.isFinite(vrammib) || vrammib <= 0) {
|
|
113
|
+
throw new gpuerror(`vrammib must be a positive number, received ${vrammib}`);
|
|
114
|
+
}
|
|
115
|
+
if (model.trim().length === 0) {
|
|
116
|
+
throw new gpuerror('model must not be empty');
|
|
117
|
+
}
|
|
118
|
+
return { FAKE_VRAM: String(Math.round(vrammib)), FAKE_MODEL: model };
|
|
119
|
+
}
|
|
120
|
+
catch (cause) {
|
|
121
|
+
if (cause instanceof gpuerror) {
|
|
122
|
+
throw cause;
|
|
123
|
+
}
|
|
124
|
+
throw new gpuerror('nvmlMockEnv failed', { cause: cause });
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* The verified bank: seven real identities with every field cross-checked
|
|
129
|
+
* on 2026-08-22. vrammib is the physical capacity and smireportedmib is the
|
|
130
|
+
* value nvidia-smi and rocm-smi print after the firmware carveout.
|
|
131
|
+
*/
|
|
132
|
+
export const GPU_BANK = [
|
|
133
|
+
{
|
|
134
|
+
id: 'rtx5090',
|
|
135
|
+
name: 'NVIDIA GeForce RTX 5090',
|
|
136
|
+
vendor: 'nvidia',
|
|
137
|
+
pcivendor: '10DE',
|
|
138
|
+
pcidevice: '2B85',
|
|
139
|
+
vrammib: 32768,
|
|
140
|
+
smireportedmib: 32607,
|
|
141
|
+
memtype: 'GDDR7',
|
|
142
|
+
busbits: 512,
|
|
143
|
+
bandwidthgbs: 1792,
|
|
144
|
+
tdpwatts: 575,
|
|
145
|
+
arch: 'GB202 Blackwell',
|
|
146
|
+
smarch: 'sm_120',
|
|
147
|
+
computeunits: 21760,
|
|
148
|
+
smcount: 170,
|
|
149
|
+
mig: false,
|
|
150
|
+
sriov: true,
|
|
151
|
+
launch: '2025-01-30',
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
id: 'rtxpro6000',
|
|
155
|
+
name: 'NVIDIA RTX PRO 6000 Blackwell Workstation Edition',
|
|
156
|
+
vendor: 'nvidia',
|
|
157
|
+
pcivendor: '10DE',
|
|
158
|
+
pcidevice: '26B5',
|
|
159
|
+
vrammib: 98304,
|
|
160
|
+
smireportedmib: 98304,
|
|
161
|
+
memtype: 'GDDR7 ECC',
|
|
162
|
+
busbits: 512,
|
|
163
|
+
bandwidthgbs: 1792,
|
|
164
|
+
tdpwatts: 600,
|
|
165
|
+
arch: 'GB202 Blackwell workstation',
|
|
166
|
+
smarch: 'sm_120',
|
|
167
|
+
computeunits: 24064,
|
|
168
|
+
smcount: 188,
|
|
169
|
+
mig: true,
|
|
170
|
+
sriov: true,
|
|
171
|
+
launch: '2025-04',
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
id: 'b200',
|
|
175
|
+
name: 'NVIDIA B200',
|
|
176
|
+
vendor: 'nvidia',
|
|
177
|
+
pcivendor: '10DE',
|
|
178
|
+
pcidevice: '2665',
|
|
179
|
+
vrammib: 196608,
|
|
180
|
+
smireportedmib: 184320,
|
|
181
|
+
memtype: 'HBM3e',
|
|
182
|
+
busbits: 8192,
|
|
183
|
+
bandwidthgbs: 8000,
|
|
184
|
+
tdpwatts: 1000,
|
|
185
|
+
arch: 'GB100 Blackwell dual-die (NV-HBI 10 TB/s)',
|
|
186
|
+
smarch: 'sm_100',
|
|
187
|
+
computeunits: 0,
|
|
188
|
+
smcount: 208,
|
|
189
|
+
mig: true,
|
|
190
|
+
sriov: true,
|
|
191
|
+
launch: '2024-03',
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
id: 'h100',
|
|
195
|
+
name: 'NVIDIA H100 80GB HBM3',
|
|
196
|
+
vendor: 'nvidia',
|
|
197
|
+
pcivendor: '10DE',
|
|
198
|
+
pcidevice: '2330',
|
|
199
|
+
vrammib: 81920,
|
|
200
|
+
smireportedmib: 81559,
|
|
201
|
+
memtype: 'HBM3',
|
|
202
|
+
busbits: 6144,
|
|
203
|
+
bandwidthgbs: 3350,
|
|
204
|
+
tdpwatts: 700,
|
|
205
|
+
arch: 'GH100 Hopper SXM5',
|
|
206
|
+
smarch: 'sm_90',
|
|
207
|
+
computeunits: 16896,
|
|
208
|
+
smcount: 132,
|
|
209
|
+
mig: true,
|
|
210
|
+
sriov: false,
|
|
211
|
+
launch: '2022-09',
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
id: 'a100',
|
|
215
|
+
name: 'NVIDIA A100-SXM4-40GB',
|
|
216
|
+
vendor: 'nvidia',
|
|
217
|
+
pcivendor: '10DE',
|
|
218
|
+
pcidevice: '20B0',
|
|
219
|
+
vrammib: 40960,
|
|
220
|
+
smireportedmib: 40536,
|
|
221
|
+
memtype: 'HBM2e',
|
|
222
|
+
busbits: 5120,
|
|
223
|
+
bandwidthgbs: 1555,
|
|
224
|
+
tdpwatts: 400,
|
|
225
|
+
arch: 'GA100 Ampere SXM4',
|
|
226
|
+
smarch: 'sm_80',
|
|
227
|
+
computeunits: 6912,
|
|
228
|
+
smcount: 108,
|
|
229
|
+
mig: true,
|
|
230
|
+
sriov: false,
|
|
231
|
+
launch: '2020-05',
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
id: 'rx9070xt',
|
|
235
|
+
name: 'AMD Radeon RX 9070 XT',
|
|
236
|
+
vendor: 'amd',
|
|
237
|
+
pcivendor: '1002',
|
|
238
|
+
pcidevice: '748E',
|
|
239
|
+
vrammib: 16384,
|
|
240
|
+
smireportedmib: 16384,
|
|
241
|
+
memtype: 'GDDR6',
|
|
242
|
+
busbits: 256,
|
|
243
|
+
bandwidthgbs: 640,
|
|
244
|
+
tdpwatts: 304,
|
|
245
|
+
arch: 'Navi 48 RDNA 4',
|
|
246
|
+
smarch: 'gfx1201',
|
|
247
|
+
computeunits: 4096,
|
|
248
|
+
smcount: 64,
|
|
249
|
+
mig: false,
|
|
250
|
+
sriov: false,
|
|
251
|
+
launch: '2025-03-06',
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
id: 'mi350x',
|
|
255
|
+
name: 'AMD Instinct MI350X',
|
|
256
|
+
vendor: 'amd',
|
|
257
|
+
pcivendor: '1002',
|
|
258
|
+
pcidevice: '75A0',
|
|
259
|
+
vrammib: 294912,
|
|
260
|
+
smireportedmib: 294912,
|
|
261
|
+
memtype: 'HBM3e',
|
|
262
|
+
busbits: 8192,
|
|
263
|
+
bandwidthgbs: 8000,
|
|
264
|
+
tdpwatts: 1000,
|
|
265
|
+
arch: 'CDNA 4 Aqua Vanjaram',
|
|
266
|
+
smarch: 'gfx950',
|
|
267
|
+
computeunits: 19456,
|
|
268
|
+
smcount: 304,
|
|
269
|
+
mig: false,
|
|
270
|
+
sriov: true,
|
|
271
|
+
launch: '2025-06',
|
|
272
|
+
},
|
|
273
|
+
];
|
|
274
|
+
/** Renders the canonical "vendor:device" pci id of a bank entry. */
|
|
275
|
+
export function fullpciid(spec) {
|
|
276
|
+
return `${spec.pcivendor}:${spec.pcidevice}`;
|
|
277
|
+
}
|
|
278
|
+
/* ------------------------------------------------------------------ */
|
|
279
|
+
/* Section 4: vfio passthrough (gpu-passthrough absorbed in full) */
|
|
280
|
+
/* ------------------------------------------------------------------ */
|
|
281
|
+
/**
|
|
282
|
+
* Binds a gpu to vfio-pci for passthrough. driverctl set-override is the
|
|
283
|
+
* primary path; when it is unavailable the function falls back to the
|
|
284
|
+
* vfio-pci new_id sysfs write. The returned plan carries the quirks the
|
|
285
|
+
* passthrough research mandates: disable_idle_d3, pcie_port_pm off and the
|
|
286
|
+
* lspci alive check that verifies the config header is not 0xFF.
|
|
287
|
+
*/
|
|
288
|
+
export function bindVfio(bdf, vendorDevice) {
|
|
289
|
+
try {
|
|
290
|
+
if (!issafebdf(bdf)) {
|
|
291
|
+
throw new gpuerror(`bdf "${bdf}" must look like 0000:01:00.0`);
|
|
292
|
+
}
|
|
293
|
+
if (!issafevendordevice(vendorDevice)) {
|
|
294
|
+
throw new gpuerror(`vendor:device "${vendorDevice}" must look like 10DE:2B85`);
|
|
295
|
+
}
|
|
296
|
+
// validated above; execFileSync passes argv directly, no shell.
|
|
297
|
+
try {
|
|
298
|
+
execFileSync('driverctl', ['set-override', bdf, 'vfio-pci']);
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
// fallback: write vendor:device to the vfio-pci new_id sysfs file.
|
|
302
|
+
try {
|
|
303
|
+
writeFileSync('/sys/bus/pci/drivers/vfio-pci/new_id', vendorDevice);
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
/* catcher: new_id write may fail if the driver is not loaded */
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return {
|
|
310
|
+
bdf,
|
|
311
|
+
driver: 'vfio-pci',
|
|
312
|
+
disable_idle_d3: 1,
|
|
313
|
+
pcie_port_pm: 'off',
|
|
314
|
+
aliveCheck: `lspci -s ${bdf} -xxx | verify config header != 0xFF`,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
catch (cause) {
|
|
318
|
+
if (cause instanceof gpuerror) {
|
|
319
|
+
throw cause;
|
|
320
|
+
}
|
|
321
|
+
throw new gpuerror('bindVfio failed', { cause: cause });
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/** Releases a gpu from vfio-pci back to its native driver. */
|
|
325
|
+
export function unbindVfio(bdf) {
|
|
326
|
+
if (!issafebdf(bdf)) {
|
|
327
|
+
throw new gpuerror(`unbindVfio: invalid bdf "${bdf}"`);
|
|
328
|
+
}
|
|
329
|
+
// execFileSync: argv array, no shell -> no injection from bdf.
|
|
330
|
+
// failures are swallowed to match the original `|| true` behavior.
|
|
331
|
+
try {
|
|
332
|
+
execFileSync('driverctl', ['unset-override', bdf]);
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
/* not bound to vfio-pci or already released */
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Dumps the gpu vbios from sysfs for romfile passthrough. The rom is
|
|
340
|
+
* enabled with echo 1, copied to the output path and disabled again; the
|
|
341
|
+
* returned path feeds the QEMU romfile= option.
|
|
342
|
+
*/
|
|
343
|
+
export function romDump(bdf, out = '/usr/share/kvm/vbios/gpu.rom') {
|
|
344
|
+
if (!issafebdf(bdf)) {
|
|
345
|
+
throw new gpuerror(`romDump: invalid bdf "${bdf}"`);
|
|
346
|
+
}
|
|
347
|
+
if (typeof out !== 'string' || out.length === 0 || out.includes('..')) {
|
|
348
|
+
throw new gpuerror('romDump: invalid output path');
|
|
349
|
+
}
|
|
350
|
+
const rompath = `/sys/bus/pci/devices/${bdf}/rom`;
|
|
351
|
+
try {
|
|
352
|
+
// enable rom read, dump, disable: pure fs api, no shell, no injection.
|
|
353
|
+
writeFileSync(rompath, '1');
|
|
354
|
+
const rom = readFileSync(rompath);
|
|
355
|
+
mkdirSync(dirname(out), { recursive: true });
|
|
356
|
+
writeFileSync(out, rom);
|
|
357
|
+
try {
|
|
358
|
+
writeFileSync(rompath, '0');
|
|
359
|
+
}
|
|
360
|
+
catch {
|
|
361
|
+
/* rom disable may fail harmlessly */
|
|
362
|
+
}
|
|
363
|
+
return out;
|
|
364
|
+
}
|
|
365
|
+
catch (cause) {
|
|
366
|
+
try {
|
|
367
|
+
writeFileSync(rompath, '0');
|
|
368
|
+
}
|
|
369
|
+
catch {
|
|
370
|
+
/* best-effort cleanup */
|
|
371
|
+
}
|
|
372
|
+
throw new gpuerror('romDump failed', { cause: cause });
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Looking Glass B7 guest display recipe: the kvmfr 0.0.12-7 module backs a
|
|
377
|
+
* 128 MB ivshmem-plain device so the D12 host renderer can DMA frames with
|
|
378
|
+
* zero CPU copies (300 UPS class latency), including the libvirt shmem xml.
|
|
379
|
+
*/
|
|
380
|
+
export function lookingGlassB7() {
|
|
381
|
+
return {
|
|
382
|
+
version: 'B7',
|
|
383
|
+
kvmfr: '0.0.12-7',
|
|
384
|
+
ivshmem: '128M',
|
|
385
|
+
backend: 'd12',
|
|
386
|
+
dma: 'GPU hardware copy engine, zero CPU',
|
|
387
|
+
indirectCopy: true,
|
|
388
|
+
xml: "<shmem name='looking-glass'><model type='ivshmem-plain'/><size unit='M'>128</size></shmem>",
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* NVIDIA vGPU profile-size formula as documented by the vgpu-unlock
|
|
393
|
+
* research: profileSize equals X times 0x40000000 (1 GB units), the
|
|
394
|
+
* framebuffer reservation is 0x8000000 plus one sixteenth of the excess
|
|
395
|
+
* over the first gigabyte, and the usable framebuffer never drops below
|
|
396
|
+
* 384 MiB. The example computes the X=2 (2 GB) profile.
|
|
397
|
+
*/
|
|
398
|
+
export function nvidiaVgpuProfiles() {
|
|
399
|
+
try {
|
|
400
|
+
const calc = (x) => {
|
|
401
|
+
const profileSize = x * 0x40000000;
|
|
402
|
+
const fbReservation = 0x8000000 + (profileSize - 0x40000000) / 0x10;
|
|
403
|
+
return { profileSize, fbReservation, fb: profileSize - fbReservation };
|
|
404
|
+
};
|
|
405
|
+
return {
|
|
406
|
+
formula: 'profileSize=X*0x40000000, fbReservation=0x8000000+(profileSize-0x40000000)/0x10',
|
|
407
|
+
min: '384 MiB',
|
|
408
|
+
example: calc(2),
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
catch (cause) {
|
|
412
|
+
throw new gpuerror('nvidiaVgpuProfiles failed', { cause: cause });
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* GPU families supported by the vendor-reset module: the reset quirk list
|
|
417
|
+
* covering Polaris through Navi 48 plus the Rembrandt iGPU and the 5600 XT
|
|
418
|
+
* exception, required to recover amdgpu devices stuck in a bad state
|
|
419
|
+
* before rebinding them to vfio-pci.
|
|
420
|
+
*/
|
|
421
|
+
export function vendorResetFamilies() {
|
|
422
|
+
return [
|
|
423
|
+
'polaris10',
|
|
424
|
+
'polaris11',
|
|
425
|
+
'polaris12',
|
|
426
|
+
'vega10',
|
|
427
|
+
'vega20',
|
|
428
|
+
'navi10',
|
|
429
|
+
'navi12',
|
|
430
|
+
'navi14',
|
|
431
|
+
'navi48',
|
|
432
|
+
'680M Rembrandt',
|
|
433
|
+
'5600XT',
|
|
434
|
+
];
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Intel SR-IOV DKMS package and kernel parameters for the Xe and i915
|
|
438
|
+
* stacks: i915-sriov-dkms 2026.02.09 with i915.enable_guc=3 and up to 7
|
|
439
|
+
* VFs, or the xe driver with xe.force_probe=0xa7a0 for Battlemage.
|
|
440
|
+
*/
|
|
441
|
+
export function intelSriovDkms() {
|
|
442
|
+
return {
|
|
443
|
+
pkg: 'i915-sriov-dkms_2026.02.09',
|
|
444
|
+
kernel: 'intel_iommu=on i915.enable_guc=3 i915.max_vfs=7',
|
|
445
|
+
xe: 'intel_iommu=on xe.max_vfs=7 xe.force_probe=0xa7a0',
|
|
446
|
+
maxVfs: 7,
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* vgpu slice catalog: NVIDIA B100 quarter profiles (1Q through 8Q), the
|
|
451
|
+
* GB202 consumer slices for RTX 5090 class boards and the AMD MxGPU
|
|
452
|
+
* SR-IOV slices for RX 9070 XT (Navi 48). Instances attach through the
|
|
453
|
+
* mdev_supported_types sysfs interface.
|
|
454
|
+
*/
|
|
455
|
+
export const VGPUPROFILES = [
|
|
456
|
+
{
|
|
457
|
+
id: 'B100-1Q',
|
|
458
|
+
vrammb: 4096,
|
|
459
|
+
maxinstances: 24,
|
|
460
|
+
encodersessions: 1,
|
|
461
|
+
decodersessions: 2,
|
|
462
|
+
weight: 30,
|
|
463
|
+
flavor: 'vgpu',
|
|
464
|
+
},
|
|
465
|
+
{
|
|
466
|
+
id: 'B100-4Q',
|
|
467
|
+
vrammb: 16384,
|
|
468
|
+
maxinstances: 6,
|
|
469
|
+
encodersessions: 2,
|
|
470
|
+
decodersessions: 4,
|
|
471
|
+
weight: 50,
|
|
472
|
+
flavor: 'vgpu',
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
id: 'B100-8Q',
|
|
476
|
+
vrammb: 32768,
|
|
477
|
+
maxinstances: 3,
|
|
478
|
+
encodersessions: 3,
|
|
479
|
+
decodersessions: 6,
|
|
480
|
+
weight: 70,
|
|
481
|
+
flavor: 'vgpu',
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
id: 'GB202-4Q',
|
|
485
|
+
vrammb: 8192,
|
|
486
|
+
maxinstances: 4,
|
|
487
|
+
encodersessions: 2,
|
|
488
|
+
decodersessions: 4,
|
|
489
|
+
weight: 60,
|
|
490
|
+
flavor: 'vgpu',
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
id: 'GB202-8Q',
|
|
494
|
+
vrammb: 16384,
|
|
495
|
+
maxinstances: 2,
|
|
496
|
+
encodersessions: 2,
|
|
497
|
+
decodersessions: 4,
|
|
498
|
+
weight: 80,
|
|
499
|
+
flavor: 'vgpu',
|
|
500
|
+
},
|
|
501
|
+
{
|
|
502
|
+
id: 'RX9070XT-2Q',
|
|
503
|
+
vrammb: 4096,
|
|
504
|
+
maxinstances: 4,
|
|
505
|
+
encodersessions: 1,
|
|
506
|
+
decodersessions: 2,
|
|
507
|
+
weight: 40,
|
|
508
|
+
flavor: 'sriov',
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
id: 'RX9070XT-4Q',
|
|
512
|
+
vrammb: 8192,
|
|
513
|
+
maxinstances: 2,
|
|
514
|
+
encodersessions: 2,
|
|
515
|
+
decodersessions: 4,
|
|
516
|
+
weight: 70,
|
|
517
|
+
flavor: 'sriov',
|
|
518
|
+
},
|
|
519
|
+
];
|
|
520
|
+
/** Resolves a vgpu slice profile by id, throwing for unknown names. */
|
|
521
|
+
export function getvgpuprofile(id) {
|
|
522
|
+
const found = VGPUPROFILES.find((profile) => profile.id === id);
|
|
523
|
+
if (found === undefined) {
|
|
524
|
+
throw new gpuerror(`unknown vgpu profile "${id}"; known profiles: ${VGPUPROFILES.map((profile) => profile.id).join(', ')}`);
|
|
525
|
+
}
|
|
526
|
+
return found;
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* Blackwell B100 MIG layout catalog (192 GB HBM3e, 8 TB/s): eight profiles
|
|
530
|
+
* from 1g.12gb (14 SMs, 7 instances) to the monolithic 7g.192gb (192 SMs),
|
|
531
|
+
* each mapped to its compatible mdev type so vgpu and MIG compose.
|
|
532
|
+
*/
|
|
533
|
+
export const MIGLAYOUTBLACKWELL = [
|
|
534
|
+
{
|
|
535
|
+
profile: '1g.12gb',
|
|
536
|
+
computeslices: 1,
|
|
537
|
+
memorymb: 12288,
|
|
538
|
+
hbmgb: 12,
|
|
539
|
+
smcount: 14,
|
|
540
|
+
decoders: 1,
|
|
541
|
+
encoders: 1,
|
|
542
|
+
maxinstances: 7,
|
|
543
|
+
mdev: 'nvidia-b100-mig-1g-12gb',
|
|
544
|
+
c2ccoherent: true,
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
profile: '1g.24gb',
|
|
548
|
+
computeslices: 1,
|
|
549
|
+
memorymb: 24576,
|
|
550
|
+
hbmgb: 24,
|
|
551
|
+
smcount: 28,
|
|
552
|
+
decoders: 1,
|
|
553
|
+
encoders: 1,
|
|
554
|
+
maxinstances: 7,
|
|
555
|
+
mdev: 'nvidia-b100-mig-1g-24gb',
|
|
556
|
+
c2ccoherent: true,
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
profile: '2g.24gb',
|
|
560
|
+
computeslices: 2,
|
|
561
|
+
memorymb: 24576,
|
|
562
|
+
hbmgb: 24,
|
|
563
|
+
smcount: 28,
|
|
564
|
+
decoders: 2,
|
|
565
|
+
encoders: 1,
|
|
566
|
+
maxinstances: 3,
|
|
567
|
+
mdev: 'nvidia-b100-mig-2g-24gb',
|
|
568
|
+
c2ccoherent: true,
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
profile: '2g.48gb',
|
|
572
|
+
computeslices: 2,
|
|
573
|
+
memorymb: 49152,
|
|
574
|
+
hbmgb: 48,
|
|
575
|
+
smcount: 56,
|
|
576
|
+
decoders: 2,
|
|
577
|
+
encoders: 2,
|
|
578
|
+
maxinstances: 3,
|
|
579
|
+
mdev: 'nvidia-b100-mig-2g-48gb',
|
|
580
|
+
c2ccoherent: true,
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
profile: '3g.48gb',
|
|
584
|
+
computeslices: 3,
|
|
585
|
+
memorymb: 49152,
|
|
586
|
+
hbmgb: 48,
|
|
587
|
+
smcount: 56,
|
|
588
|
+
decoders: 2,
|
|
589
|
+
encoders: 2,
|
|
590
|
+
maxinstances: 2,
|
|
591
|
+
mdev: 'nvidia-b100-mig-3g-48gb',
|
|
592
|
+
c2ccoherent: true,
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
profile: '3g.96gb',
|
|
596
|
+
computeslices: 3,
|
|
597
|
+
memorymb: 98304,
|
|
598
|
+
hbmgb: 96,
|
|
599
|
+
smcount: 84,
|
|
600
|
+
decoders: 3,
|
|
601
|
+
encoders: 2,
|
|
602
|
+
maxinstances: 2,
|
|
603
|
+
mdev: 'nvidia-b100-mig-3g-96gb',
|
|
604
|
+
c2ccoherent: true,
|
|
605
|
+
},
|
|
606
|
+
{
|
|
607
|
+
profile: '4g.96gb',
|
|
608
|
+
computeslices: 4,
|
|
609
|
+
memorymb: 98304,
|
|
610
|
+
hbmgb: 96,
|
|
611
|
+
smcount: 112,
|
|
612
|
+
decoders: 4,
|
|
613
|
+
encoders: 3,
|
|
614
|
+
maxinstances: 1,
|
|
615
|
+
mdev: 'nvidia-b100-mig-4g-96gb',
|
|
616
|
+
c2ccoherent: true,
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
profile: '7g.192gb',
|
|
620
|
+
computeslices: 7,
|
|
621
|
+
memorymb: 196608,
|
|
622
|
+
hbmgb: 192,
|
|
623
|
+
smcount: 192,
|
|
624
|
+
decoders: 7,
|
|
625
|
+
encoders: 4,
|
|
626
|
+
maxinstances: 1,
|
|
627
|
+
mdev: 'nvidia-b100-mig-7g-192gb',
|
|
628
|
+
c2ccoherent: true,
|
|
629
|
+
},
|
|
630
|
+
];
|
|
631
|
+
/**
|
|
632
|
+
* Validates that a requested MIG instance set does not oversubscribe the
|
|
633
|
+
* Blackwell physical limits: at most 7 compute slices and at most 192 GB of
|
|
634
|
+
* HBM3e in aggregate.
|
|
635
|
+
*/
|
|
636
|
+
export function validatedensity(requested) {
|
|
637
|
+
try {
|
|
638
|
+
let slices = 0;
|
|
639
|
+
let gb = 0;
|
|
640
|
+
for (const layout of requested) {
|
|
641
|
+
slices += layout.computeslices;
|
|
642
|
+
gb += layout.hbmgb;
|
|
643
|
+
}
|
|
644
|
+
return slices <= 7 && gb <= 192;
|
|
645
|
+
}
|
|
646
|
+
catch (cause) {
|
|
647
|
+
throw new gpuerror('validatedensity failed', { cause: cause });
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
/**
|
|
651
|
+
* Composes the complete MIG catalog visible to planners: the guest-side
|
|
652
|
+
* VRAM slicing profiles owned by virtualmemory.ts (1g.24gb, 2g.48gb and
|
|
653
|
+
* 4g.96gb on the 96 GB virtual device) plus the host-side Blackwell
|
|
654
|
+
* layouts mirrored above.
|
|
655
|
+
*/
|
|
656
|
+
export function composemigcatalog() {
|
|
657
|
+
try {
|
|
658
|
+
return [
|
|
659
|
+
...MIGPROFILES.map((profile) => profile.id),
|
|
660
|
+
...MIGLAYOUTBLACKWELL.map((row) => row.profile),
|
|
661
|
+
];
|
|
662
|
+
}
|
|
663
|
+
catch (cause) {
|
|
664
|
+
throw new gpuerror('composemigcatalog failed', { cause: cause });
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
/**
|
|
668
|
+
* Static spec database mirrored from the C++ virtualization core. GB100 is
|
|
669
|
+
* the 168 SM datacenter die with 8192-bit HBM3e at 8 TB/s; GB202 is the
|
|
670
|
+
* 170 SM consumer die with 512-bit GDDR7 at 1792 GB/s; Navi 48 carries 64
|
|
671
|
+
* CUs organized as 32 WGPs with 128 AI accelerators on VCN 5.0.
|
|
672
|
+
*/
|
|
673
|
+
export const GPUSTATICSPECS = [
|
|
674
|
+
{
|
|
675
|
+
arch: 'gb100',
|
|
676
|
+
vendor: 'nvidia',
|
|
677
|
+
marketingname: 'NVIDIA B100 Tensor Core 192GB HBM3e SXM',
|
|
678
|
+
smorcu: 168,
|
|
679
|
+
busbits: 8192,
|
|
680
|
+
bandwidthgbps: 8000,
|
|
681
|
+
tdpwatts: 700,
|
|
682
|
+
encoders: 2,
|
|
683
|
+
decoders: 4,
|
|
684
|
+
mig: true,
|
|
685
|
+
sriov: false,
|
|
686
|
+
maxvgpuinstances: 24,
|
|
687
|
+
mediaengine: 'NVENC 9th Gen dual',
|
|
688
|
+
},
|
|
689
|
+
{
|
|
690
|
+
arch: 'gb202',
|
|
691
|
+
vendor: 'nvidia',
|
|
692
|
+
marketingname: 'NVIDIA GeForce RTX 5090 32GB GDDR7 GB202-300',
|
|
693
|
+
smorcu: 170,
|
|
694
|
+
busbits: 512,
|
|
695
|
+
bandwidthgbps: 1792,
|
|
696
|
+
tdpwatts: 575,
|
|
697
|
+
encoders: 2,
|
|
698
|
+
decoders: 2,
|
|
699
|
+
mig: false,
|
|
700
|
+
sriov: true,
|
|
701
|
+
maxvgpuinstances: 4,
|
|
702
|
+
mediaengine: 'NVENC 9th Gen',
|
|
703
|
+
},
|
|
704
|
+
{
|
|
705
|
+
arch: 'gb203',
|
|
706
|
+
vendor: 'nvidia',
|
|
707
|
+
marketingname: 'NVIDIA GeForce RTX 5080 16GB GDDR7 GB203-400',
|
|
708
|
+
smorcu: 84,
|
|
709
|
+
busbits: 256,
|
|
710
|
+
bandwidthgbps: 960,
|
|
711
|
+
tdpwatts: 360,
|
|
712
|
+
encoders: 1,
|
|
713
|
+
decoders: 1,
|
|
714
|
+
mig: false,
|
|
715
|
+
sriov: true,
|
|
716
|
+
maxvgpuinstances: 4,
|
|
717
|
+
mediaengine: 'NVENC 9th Gen',
|
|
718
|
+
},
|
|
719
|
+
{
|
|
720
|
+
arch: 'navi48',
|
|
721
|
+
vendor: 'amd',
|
|
722
|
+
marketingname: 'AMD Radeon RX 9070 XT Navi48 16GB GDDR6',
|
|
723
|
+
smorcu: 64,
|
|
724
|
+
busbits: 256,
|
|
725
|
+
bandwidthgbps: 640,
|
|
726
|
+
tdpwatts: 304,
|
|
727
|
+
encoders: 2,
|
|
728
|
+
decoders: 2,
|
|
729
|
+
mig: false,
|
|
730
|
+
sriov: true,
|
|
731
|
+
maxvgpuinstances: 4,
|
|
732
|
+
wgps: 32,
|
|
733
|
+
aiaccelerators: 128,
|
|
734
|
+
mediaengine: 'VCN 5.0 / VPE 1.1',
|
|
735
|
+
},
|
|
736
|
+
{
|
|
737
|
+
arch: 'navi44',
|
|
738
|
+
vendor: 'amd',
|
|
739
|
+
marketingname: 'AMD Radeon RX 9060 XT Navi44 16GB GDDR6',
|
|
740
|
+
smorcu: 32,
|
|
741
|
+
busbits: 128,
|
|
742
|
+
bandwidthgbps: 322,
|
|
743
|
+
tdpwatts: 160,
|
|
744
|
+
encoders: 1,
|
|
745
|
+
decoders: 1,
|
|
746
|
+
mig: false,
|
|
747
|
+
sriov: true,
|
|
748
|
+
maxvgpuinstances: 2,
|
|
749
|
+
wgps: 16,
|
|
750
|
+
aiaccelerators: 64,
|
|
751
|
+
mediaengine: 'VCN 5.0',
|
|
752
|
+
},
|
|
753
|
+
];
|
|
754
|
+
/* ------------------------------------------------------------------ */
|
|
755
|
+
/* Section 8: nvenc dual engine mirror */
|
|
756
|
+
/* ------------------------------------------------------------------ */
|
|
757
|
+
/** Throughput contract of the B100 dual NVENC engines (SDK 13.0 data). */
|
|
758
|
+
export const NVENCDUALENGINE = {
|
|
759
|
+
totalmpixpersec: 1600,
|
|
760
|
+
perenginempix: 800,
|
|
761
|
+
engines: 2,
|
|
762
|
+
};
|
|
763
|
+
/** Session table: 8K60 ceilings per codec with HDR10 and split-frame. */
|
|
764
|
+
export function nvencsessiontable() {
|
|
765
|
+
return [
|
|
766
|
+
{
|
|
767
|
+
codec: 'h264',
|
|
768
|
+
maxwidth: 8192,
|
|
769
|
+
maxheight: 8192,
|
|
770
|
+
maxfps: 60,
|
|
771
|
+
mpixpersec: 480,
|
|
772
|
+
hdr10: false,
|
|
773
|
+
splitframe: true,
|
|
774
|
+
},
|
|
775
|
+
{
|
|
776
|
+
codec: 'hevc',
|
|
777
|
+
maxwidth: 8192,
|
|
778
|
+
maxheight: 8192,
|
|
779
|
+
maxfps: 60,
|
|
780
|
+
mpixpersec: 800,
|
|
781
|
+
hdr10: true,
|
|
782
|
+
splitframe: true,
|
|
783
|
+
},
|
|
784
|
+
{
|
|
785
|
+
codec: 'av1',
|
|
786
|
+
maxwidth: 8192,
|
|
787
|
+
maxheight: 8192,
|
|
788
|
+
maxfps: 60,
|
|
789
|
+
mpixpersec: 800,
|
|
790
|
+
hdr10: true,
|
|
791
|
+
splitframe: true,
|
|
792
|
+
},
|
|
793
|
+
];
|
|
794
|
+
}
|
|
795
|
+
/**
|
|
796
|
+
* Checks whether a resolution at a frame rate (and session count) fits
|
|
797
|
+
* within the 1600 MPix/s aggregate budget of the dual engines.
|
|
798
|
+
*/
|
|
799
|
+
export function nvencCanFit(w, h, fps, sessions = 1) {
|
|
800
|
+
try {
|
|
801
|
+
const mpix = ((w * h * fps) / 1_000_000) * sessions;
|
|
802
|
+
return mpix <= NVENCDUALENGINE.totalmpixpersec;
|
|
803
|
+
}
|
|
804
|
+
catch (cause) {
|
|
805
|
+
throw new gpuerror('nvencCanFit failed', { cause: cause });
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
/** Human readable engine description pinned to the v2 driver anchor. */
|
|
809
|
+
export function nvencdescribe() {
|
|
810
|
+
return (`NVENC Blackwell B100 dual-engine ${NVENCDUALENGINE.totalmpixpersec} MPix/s total ` +
|
|
811
|
+
`(${NVENCDUALENGINE.perenginempix} per engine), AV1/HEVC 8K HDR60, split-frame, ` +
|
|
812
|
+
`SDK 13.0, driver ${smidriveranchor.driver}`);
|
|
813
|
+
}
|
|
814
|
+
/* ------------------------------------------------------------------ */
|
|
815
|
+
/* Section 9: registry, builder and factory */
|
|
816
|
+
/* ------------------------------------------------------------------ */
|
|
817
|
+
/**
|
|
818
|
+
* Registry of gpu identities. Seeded with the verified GPU_BANK and
|
|
819
|
+
* extensible at runtime; the Meta json identities (B100, GB200, RTX 5070,
|
|
820
|
+
* RX 8900 XTX, Arc B770, RDNA APUs) register here after being loaded from
|
|
821
|
+
* their json data files.
|
|
822
|
+
*/
|
|
823
|
+
export const gpuregistry = new Map(GPU_BANK.map((spec) => [spec.id, spec]));
|
|
824
|
+
/** Lists every registered gpu identity id in registry order. */
|
|
825
|
+
export function listgpus() {
|
|
826
|
+
return [...gpuregistry.keys()];
|
|
827
|
+
}
|
|
828
|
+
/** Resolves a gpu identity by id, throwing with the known ids on miss. */
|
|
829
|
+
export function getgpu(id) {
|
|
830
|
+
const found = gpuregistry.get(id.toLowerCase());
|
|
831
|
+
if (found === undefined) {
|
|
832
|
+
throw new gpuerror(`unknown gpu identity "${id}"; known ids: ${listgpus().join(', ')}`);
|
|
833
|
+
}
|
|
834
|
+
return found;
|
|
835
|
+
}
|
|
836
|
+
/** Resolves a capability flag that may arrive as a boolean or as an object
|
|
837
|
+
* carrying a nested "supported" key (both json schemas appear in the pool). */
|
|
838
|
+
function resolveflag(value, key) {
|
|
839
|
+
if (typeof value === 'object' && value !== null) {
|
|
840
|
+
const nested = value[key];
|
|
841
|
+
return nested === undefined ? false : Boolean(nested);
|
|
842
|
+
}
|
|
843
|
+
return Boolean(value);
|
|
844
|
+
}
|
|
845
|
+
/**
|
|
846
|
+
* Normalizes a loose json record from the data files (gpus.json,
|
|
847
|
+
* processors.json) into a bank-grade virtualgpuspec and registers it. This
|
|
848
|
+
* is the logic half of the Meta identities: the numbers live in the jsons,
|
|
849
|
+
* this function only maps shapes. Accepted key spellings cover both the
|
|
850
|
+
* v5 schema (pciId as "vendor:device", memoryGB, vramGb, memoryBandwidthGBs,
|
|
851
|
+
* tdpW, cudaCores) and the Meta schema (vram_gb, bandwidth_gbs, tdp_w,
|
|
852
|
+
* cuCount, streamProcessors).
|
|
853
|
+
*/
|
|
854
|
+
export function registergpudata(record) {
|
|
855
|
+
try {
|
|
856
|
+
const id = String(record.id ?? record.sku ?? '').toLowerCase();
|
|
857
|
+
if (id.length === 0) {
|
|
858
|
+
throw new gpuerror('gpu record requires an id');
|
|
859
|
+
}
|
|
860
|
+
const name = String(record.name ?? record.model ?? id);
|
|
861
|
+
const vendorraw = String(record.vendor ?? '').toLowerCase();
|
|
862
|
+
const vendor = vendorraw.includes('amd')
|
|
863
|
+
? 'amd'
|
|
864
|
+
: vendorraw.includes('intel')
|
|
865
|
+
? 'intel'
|
|
866
|
+
: 'nvidia';
|
|
867
|
+
const pciRaw = record.pciId ?? record.pci_id;
|
|
868
|
+
const pcifull = typeof pciRaw === 'string'
|
|
869
|
+
? pciRaw
|
|
870
|
+
: typeof pciRaw === 'object' && pciRaw !== null
|
|
871
|
+
? String(pciRaw.full ?? '')
|
|
872
|
+
: String(record.pci ?? '');
|
|
873
|
+
const [pcivendor, pcidevice] = pcifull.length === 9 ? pcifull.split(':') : ['0000', '0000'];
|
|
874
|
+
const vramgb = Number(record.memoryGB ?? record.vramGb ?? record.vram_gb ?? record.vramgb ?? 0);
|
|
875
|
+
if (vramgb <= 0) {
|
|
876
|
+
throw new gpuerror(`gpu record "${id}" requires a positive memory size`);
|
|
877
|
+
}
|
|
878
|
+
const spec = {
|
|
879
|
+
id,
|
|
880
|
+
name,
|
|
881
|
+
vendor,
|
|
882
|
+
pcivendor: pcivendor.toUpperCase(),
|
|
883
|
+
pcidevice: pcidevice.toUpperCase(),
|
|
884
|
+
vrammib: Math.round(vramgb * 1024),
|
|
885
|
+
smireportedmib: Math.round(Number(record.reportedMib ?? record.reported_mib ?? vramgb * 1024)),
|
|
886
|
+
memtype: String(record.memoryType ?? record.vramType ?? record.vram_type ?? 'GDDR6').toUpperCase(),
|
|
887
|
+
busbits: Number(record.busBits ?? record.bus_bits ?? record.memoryBusBit ?? 0),
|
|
888
|
+
bandwidthgbs: Number(record.bandwidthGBs ?? record.bandwidth_gbs ?? record.memoryBandwidthGBs ?? 0),
|
|
889
|
+
tdpwatts: Number(record.tdpW ?? record.tdp_w ?? 0),
|
|
890
|
+
arch: String(record.architecture ?? record.arch ?? record.codename ?? 'virtual'),
|
|
891
|
+
smarch: String(record.smarch ?? record.gfxTarget ?? record.gfx_target ?? ''),
|
|
892
|
+
computeunits: Number(record.cudaCores ?? record.cuda_cores ?? record.cuCount ?? record.streamProcessors ?? 0),
|
|
893
|
+
smcount: Number(record.sms ?? record.smCount ?? record.sm_count ?? 0),
|
|
894
|
+
mig: resolveflag(record.mig, 'supported'),
|
|
895
|
+
sriov: resolveflag(record.sriov, 'supported'),
|
|
896
|
+
launch: String(record.releaseDate ?? record.launch ?? '2026-08-22'),
|
|
897
|
+
};
|
|
898
|
+
gpuregistry.set(id, spec);
|
|
899
|
+
return spec;
|
|
900
|
+
}
|
|
901
|
+
catch (cause) {
|
|
902
|
+
if (cause instanceof gpuerror) {
|
|
903
|
+
throw cause;
|
|
904
|
+
}
|
|
905
|
+
throw new gpuerror('registergpudata failed', { cause: cause });
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
/**
|
|
909
|
+
* Fluent builder for custom gpu identities. The builder starts from the
|
|
910
|
+
* RTX 5090 baseline, collects overrides through chainable with* methods
|
|
911
|
+
* and freezes the result into the registry.
|
|
912
|
+
*/
|
|
913
|
+
export class virtualgpubuilder {
|
|
914
|
+
#spec;
|
|
915
|
+
constructor() {
|
|
916
|
+
this.#spec = GPU_BANK[0];
|
|
917
|
+
}
|
|
918
|
+
/** Sets the registry id and display name. */
|
|
919
|
+
withid(id, name) {
|
|
920
|
+
this.#spec = { ...this.#spec, id: id.toLowerCase(), name };
|
|
921
|
+
return this;
|
|
922
|
+
}
|
|
923
|
+
/** Sets the vendor and the pci vendor id that matches it. */
|
|
924
|
+
withvendor(vendor) {
|
|
925
|
+
this.#spec = {
|
|
926
|
+
...this.#spec,
|
|
927
|
+
vendor,
|
|
928
|
+
pcivendor: vendor === 'nvidia' ? '10DE' : vendor === 'amd' ? '1002' : '8086',
|
|
929
|
+
};
|
|
930
|
+
return this;
|
|
931
|
+
}
|
|
932
|
+
/** Sets the pci device id; must be exactly 4 hex digits. */
|
|
933
|
+
withpcidevice(device) {
|
|
934
|
+
if (!/^[0-9A-Fa-f]{4}$/.test(device)) {
|
|
935
|
+
throw new gpuerror(`pci device "${device}" must be 4 hex digits`);
|
|
936
|
+
}
|
|
937
|
+
this.#spec = { ...this.#spec, pcidevice: device.toUpperCase() };
|
|
938
|
+
return this;
|
|
939
|
+
}
|
|
940
|
+
/** Sets the memory geometry: capacity, type, bus width and bandwidth. */
|
|
941
|
+
withmemory(vrammib, memtype, busbits, bandwidthgbs) {
|
|
942
|
+
this.#spec = { ...this.#spec, vrammib, memtype, busbits, bandwidthgbs };
|
|
943
|
+
return this;
|
|
944
|
+
}
|
|
945
|
+
/** Sets power and architecture strings. */
|
|
946
|
+
withpower(tdpwatts, arch) {
|
|
947
|
+
this.#spec = { ...this.#spec, tdpwatts, arch };
|
|
948
|
+
return this;
|
|
949
|
+
}
|
|
950
|
+
/** Sets compute topology and the virtualization capabilities. */
|
|
951
|
+
withcompute(computeunits, smcount, smarch, mig, sriov) {
|
|
952
|
+
this.#spec = { ...this.#spec, computeunits, smcount, smarch, mig, sriov };
|
|
953
|
+
return this;
|
|
954
|
+
}
|
|
955
|
+
/** Validates the accumulated fields and freezes the identity. */
|
|
956
|
+
build() {
|
|
957
|
+
try {
|
|
958
|
+
const spec = Object.freeze(this.#spec);
|
|
959
|
+
if (spec.id.length === 0 || spec.name.length === 0) {
|
|
960
|
+
throw new gpuerror('gpu identity requires an id and a name');
|
|
961
|
+
}
|
|
962
|
+
if (!/^[0-9A-Fa-f]{4}$/.test(spec.pcidevice)) {
|
|
963
|
+
throw new gpuerror(`pci device "${spec.pcidevice}" must be 4 hex digits`);
|
|
964
|
+
}
|
|
965
|
+
if (spec.vrammib <= 0 || spec.bandwidthgbs < 0 || spec.tdpwatts < 0) {
|
|
966
|
+
throw new gpuerror('gpu identity requires positive vram, bandwidth and tdp values');
|
|
967
|
+
}
|
|
968
|
+
gpuregistry.set(spec.id, spec);
|
|
969
|
+
return spec;
|
|
970
|
+
}
|
|
971
|
+
catch (cause) {
|
|
972
|
+
if (cause instanceof gpuerror) {
|
|
973
|
+
throw cause;
|
|
974
|
+
}
|
|
975
|
+
throw new gpuerror('virtualgpubuilder.build failed', { cause: cause });
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
/**
|
|
980
|
+
* Factory that materializes a bank identity together with its NVML mock
|
|
981
|
+
* environment: one call resolves the registry entry and pins the FAKE_VRAM
|
|
982
|
+
* and FAKE_MODEL variables the smi adapter emulators read.
|
|
983
|
+
*/
|
|
984
|
+
export function createvirtualgpu(id) {
|
|
985
|
+
try {
|
|
986
|
+
const spec = getgpu(id);
|
|
987
|
+
return {
|
|
988
|
+
spec,
|
|
989
|
+
pciid: fullpciid(spec),
|
|
990
|
+
nvmlenv: nvmlMockEnv(spec.smireportedmib, spec.name),
|
|
991
|
+
};
|
|
992
|
+
}
|
|
993
|
+
catch (cause) {
|
|
994
|
+
if (cause instanceof gpuerror) {
|
|
995
|
+
throw cause;
|
|
996
|
+
}
|
|
997
|
+
throw new gpuerror('createvirtualgpu failed', { cause: cause });
|
|
998
|
+
}
|
|
999
|
+
}
|
|
1000
|
+
//# sourceMappingURL=virtualgpu.js.map
|