agent-orcha 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -28
- package/dist/lib/agents/agent-executor.d.ts.map +1 -1
- package/dist/lib/agents/agent-executor.js +23 -7
- package/dist/lib/agents/agent-executor.js.map +1 -1
- package/dist/lib/agents/react-loop.d.ts.map +1 -1
- package/dist/lib/agents/react-loop.js +27 -0
- package/dist/lib/agents/react-loop.js.map +1 -1
- package/dist/lib/functions/simple-function-wrapper.js +3 -3
- package/dist/lib/functions/simple-function-wrapper.js.map +1 -1
- package/dist/lib/knowledge/knowledge-store.d.ts +1 -1
- package/dist/lib/knowledge/knowledge-store.d.ts.map +1 -1
- package/dist/lib/knowledge/knowledge-store.js +25 -4
- package/dist/lib/knowledge/knowledge-store.js.map +1 -1
- package/dist/lib/knowledge/loaders/file-loaders.d.ts +0 -1
- package/dist/lib/knowledge/loaders/file-loaders.d.ts.map +1 -1
- package/dist/lib/knowledge/loaders/file-loaders.js +7 -15
- package/dist/lib/knowledge/loaders/file-loaders.js.map +1 -1
- package/dist/lib/knowledge/sqlite-store.d.ts.map +1 -1
- package/dist/lib/knowledge/sqlite-store.js +19 -10
- package/dist/lib/knowledge/sqlite-store.js.map +1 -1
- package/dist/lib/knowledge/types.d.ts +13 -13
- package/dist/lib/llm/index.d.ts +1 -1
- package/dist/lib/llm/index.d.ts.map +1 -1
- package/dist/lib/llm/index.js +1 -1
- package/dist/lib/llm/index.js.map +1 -1
- package/dist/lib/llm/llm-config.d.ts +51 -8
- package/dist/lib/llm/llm-config.d.ts.map +1 -1
- package/dist/lib/llm/llm-config.js +161 -17
- package/dist/lib/llm/llm-config.js.map +1 -1
- package/dist/lib/llm/llm-factory.d.ts +1 -2
- package/dist/lib/llm/llm-factory.d.ts.map +1 -1
- package/dist/lib/llm/llm-factory.js +41 -8
- package/dist/lib/llm/llm-factory.js.map +1 -1
- package/dist/lib/llm/providers/openai-chat-model.d.ts +10 -0
- package/dist/lib/llm/providers/openai-chat-model.d.ts.map +1 -1
- package/dist/lib/llm/providers/openai-chat-model.js +37 -5
- package/dist/lib/llm/providers/openai-chat-model.js.map +1 -1
- package/dist/lib/llm/providers/openai-embeddings.d.ts.map +1 -1
- package/dist/lib/llm/providers/openai-embeddings.js +41 -10
- package/dist/lib/llm/providers/openai-embeddings.js.map +1 -1
- package/dist/lib/local-llm/binary-manager.d.ts +66 -0
- package/dist/lib/local-llm/binary-manager.d.ts.map +1 -0
- package/dist/lib/local-llm/binary-manager.js +441 -0
- package/dist/lib/local-llm/binary-manager.js.map +1 -0
- package/dist/lib/local-llm/engine-interface.d.ts +47 -0
- package/dist/lib/local-llm/engine-interface.d.ts.map +1 -0
- package/dist/lib/local-llm/engine-interface.js +2 -0
- package/dist/lib/local-llm/engine-interface.js.map +1 -0
- package/dist/lib/local-llm/engine-registry.d.ts +20 -0
- package/dist/lib/local-llm/engine-registry.d.ts.map +1 -0
- package/dist/lib/local-llm/engine-registry.js +56 -0
- package/dist/lib/local-llm/engine-registry.js.map +1 -0
- package/dist/lib/local-llm/engines/llama-cpp-engine.d.ts +31 -0
- package/dist/lib/local-llm/engines/llama-cpp-engine.d.ts.map +1 -0
- package/dist/lib/local-llm/engines/llama-cpp-engine.js +164 -0
- package/dist/lib/local-llm/engines/llama-cpp-engine.js.map +1 -0
- package/dist/lib/local-llm/engines/mlx-serve-engine.d.ts +31 -0
- package/dist/lib/local-llm/engines/mlx-serve-engine.d.ts.map +1 -0
- package/dist/lib/local-llm/engines/mlx-serve-engine.js +161 -0
- package/dist/lib/local-llm/engines/mlx-serve-engine.js.map +1 -0
- package/dist/lib/local-llm/gguf-reader.d.ts +20 -0
- package/dist/lib/local-llm/gguf-reader.d.ts.map +1 -0
- package/dist/lib/local-llm/gguf-reader.js +190 -0
- package/dist/lib/local-llm/gguf-reader.js.map +1 -0
- package/dist/lib/local-llm/index.d.ts +9 -0
- package/dist/lib/local-llm/index.d.ts.map +1 -0
- package/dist/lib/local-llm/index.js +6 -0
- package/dist/lib/local-llm/index.js.map +1 -0
- package/dist/lib/local-llm/llama-server-process.d.ts +42 -0
- package/dist/lib/local-llm/llama-server-process.d.ts.map +1 -0
- package/dist/lib/local-llm/llama-server-process.js +237 -0
- package/dist/lib/local-llm/llama-server-process.js.map +1 -0
- package/dist/lib/local-llm/mlx-binary-manager.d.ts +33 -0
- package/dist/lib/local-llm/mlx-binary-manager.d.ts.map +1 -0
- package/dist/lib/local-llm/mlx-binary-manager.js +211 -0
- package/dist/lib/local-llm/mlx-binary-manager.js.map +1 -0
- package/dist/lib/local-llm/mlx-server-process.d.ts +26 -0
- package/dist/lib/local-llm/mlx-server-process.d.ts.map +1 -0
- package/dist/lib/local-llm/mlx-server-process.js +210 -0
- package/dist/lib/local-llm/mlx-server-process.js.map +1 -0
- package/dist/lib/local-llm/model-manager.d.ts +33 -0
- package/dist/lib/local-llm/model-manager.d.ts.map +1 -0
- package/dist/lib/local-llm/model-manager.js +591 -0
- package/dist/lib/local-llm/model-manager.js.map +1 -0
- package/dist/lib/local-llm/types.d.ts +51 -0
- package/dist/lib/local-llm/types.d.ts.map +1 -0
- package/dist/lib/local-llm/types.js +2 -0
- package/dist/lib/local-llm/types.js.map +1 -0
- package/dist/lib/logger.d.ts +2 -0
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +68 -5
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/orchestrator.d.ts +9 -0
- package/dist/lib/orchestrator.d.ts.map +1 -1
- package/dist/lib/orchestrator.js +151 -3
- package/dist/lib/orchestrator.js.map +1 -1
- package/dist/lib/sandbox/cdp-client.d.ts +2 -1
- package/dist/lib/sandbox/cdp-client.d.ts.map +1 -1
- package/dist/lib/sandbox/cdp-client.js +33 -7
- package/dist/lib/sandbox/cdp-client.js.map +1 -1
- package/dist/lib/sandbox/index.d.ts +1 -0
- package/dist/lib/sandbox/index.d.ts.map +1 -1
- package/dist/lib/sandbox/index.js +1 -0
- package/dist/lib/sandbox/index.js.map +1 -1
- package/dist/lib/sandbox/page-readiness.d.ts.map +1 -1
- package/dist/lib/sandbox/page-readiness.js +33 -0
- package/dist/lib/sandbox/page-readiness.js.map +1 -1
- package/dist/lib/sandbox/sandbox-browser.d.ts.map +1 -1
- package/dist/lib/sandbox/sandbox-browser.js +14 -1
- package/dist/lib/sandbox/sandbox-browser.js.map +1 -1
- package/dist/lib/sandbox/sandbox-container.d.ts +39 -0
- package/dist/lib/sandbox/sandbox-container.d.ts.map +1 -0
- package/dist/lib/sandbox/sandbox-container.js +176 -0
- package/dist/lib/sandbox/sandbox-container.js.map +1 -0
- package/dist/lib/sandbox/sandbox-file.d.ts.map +1 -1
- package/dist/lib/sandbox/sandbox-file.js +5 -4
- package/dist/lib/sandbox/sandbox-file.js.map +1 -1
- package/dist/lib/sandbox/sandbox-shell.d.ts +2 -1
- package/dist/lib/sandbox/sandbox-shell.d.ts.map +1 -1
- package/dist/lib/sandbox/sandbox-shell.js +42 -24
- package/dist/lib/sandbox/sandbox-shell.js.map +1 -1
- package/dist/lib/sandbox/sandbox-web.d.ts.map +1 -1
- package/dist/lib/sandbox/sandbox-web.js +27 -2
- package/dist/lib/sandbox/sandbox-web.js.map +1 -1
- package/dist/lib/sandbox/vision-browser.d.ts.map +1 -1
- package/dist/lib/sandbox/vision-browser.js +9 -0
- package/dist/lib/sandbox/vision-browser.js.map +1 -1
- package/dist/lib/sea/app-window.d.ts +7 -0
- package/dist/lib/sea/app-window.d.ts.map +1 -0
- package/dist/lib/sea/app-window.js +95 -0
- package/dist/lib/sea/app-window.js.map +1 -0
- package/dist/lib/sea/bootstrap.d.ts +18 -0
- package/dist/lib/sea/bootstrap.d.ts.map +1 -0
- package/dist/lib/sea/bootstrap.js +103 -0
- package/dist/lib/sea/bootstrap.js.map +1 -0
- package/dist/lib/sea/sqlite-vec-shim.d.ts +3 -0
- package/dist/lib/sea/sqlite-vec-shim.d.ts.map +1 -0
- package/dist/lib/sea/sqlite-vec-shim.js +10 -0
- package/dist/lib/sea/sqlite-vec-shim.js.map +1 -0
- package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts +1 -2
- package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts.map +1 -1
- package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js +7 -13
- package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-graph-schema.tool.d.ts.map +1 -1
- package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js +2 -4
- package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-search.tool.js +4 -4
- package/dist/lib/tools/built-in/knowledge-search.tool.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-sql.tool.d.ts.map +1 -1
- package/dist/lib/tools/built-in/knowledge-sql.tool.js +70 -37
- package/dist/lib/tools/built-in/knowledge-sql.tool.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-tools-factory.js +2 -2
- package/dist/lib/tools/built-in/knowledge-tools-factory.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts +1 -2
- package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts.map +1 -1
- package/dist/lib/tools/built-in/knowledge-traverse.tool.js +5 -11
- package/dist/lib/tools/built-in/knowledge-traverse.tool.js.map +1 -1
- package/dist/lib/tools/workspace/workspace-tools.d.ts.map +1 -1
- package/dist/lib/tools/workspace/workspace-tools.js +5 -4
- package/dist/lib/tools/workspace/workspace-tools.js.map +1 -1
- package/dist/lib/types/tool-factory.d.ts.map +1 -1
- package/dist/lib/types/tool-factory.js +9 -2
- package/dist/lib/types/tool-factory.js.map +1 -1
- package/dist/lib/utils/document-extract.d.ts +10 -0
- package/dist/lib/utils/document-extract.d.ts.map +1 -0
- package/dist/lib/utils/document-extract.js +149 -0
- package/dist/lib/utils/document-extract.js.map +1 -0
- package/dist/lib/workflows/react-workflow-executor.d.ts.map +1 -1
- package/dist/lib/workflows/react-workflow-executor.js +20 -14
- package/dist/lib/workflows/react-workflow-executor.js.map +1 -1
- package/dist/lib/workflows/types.d.ts +71 -45
- package/dist/lib/workflows/types.d.ts.map +1 -1
- package/dist/lib/workflows/types.js +10 -0
- package/dist/lib/workflows/types.js.map +1 -1
- package/dist/public/assets/logo.png +0 -0
- package/dist/public/chat.html +3 -78
- package/dist/public/index.html +3 -330
- package/dist/public/src/components/AgentComposer.js +132 -132
- package/dist/public/src/components/AgentsView.js +1231 -350
- package/dist/public/src/components/AppRoot.js +101 -39
- package/dist/public/src/components/GraphView.js +11 -13
- package/dist/public/src/components/IdeView.js +133 -98
- package/dist/public/src/components/KnowledgeView.js +94 -130
- package/dist/public/src/components/LlmView.js +15 -19
- package/dist/public/src/components/LocalLlmView.js +2440 -0
- package/dist/public/src/components/LogViewer.js +155 -0
- package/dist/public/src/components/McpView.js +41 -49
- package/dist/public/src/components/MonitorView.js +79 -126
- package/dist/public/src/components/NavBar.js +16 -26
- package/dist/public/src/components/StandaloneChat.js +136 -150
- package/dist/public/src/services/ApiService.js +196 -2
- package/dist/public/src/services/SessionStore.js +6 -3
- package/dist/public/src/services/StreamManager.js +183 -0
- package/dist/public/src/store.js +1 -1
- package/dist/public/src/utils/card.js +21 -0
- package/dist/public/src/utils/markdown.js +1 -7
- package/dist/public/styles.css +2777 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +7 -1
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/start.d.ts.map +1 -1
- package/dist/src/cli/commands/start.js +28 -5
- package/dist/src/cli/commands/start.js.map +1 -1
- package/dist/src/cli/index.js +13 -2
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/index.js +7 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/routes/agents.route.d.ts.map +1 -1
- package/dist/src/routes/agents.route.js +2 -0
- package/dist/src/routes/agents.route.js.map +1 -1
- package/dist/src/routes/chat.route.d.ts.map +1 -1
- package/dist/src/routes/chat.route.js +3 -2
- package/dist/src/routes/chat.route.js.map +1 -1
- package/dist/src/routes/llm.route.d.ts.map +1 -1
- package/dist/src/routes/llm.route.js +227 -7
- package/dist/src/routes/llm.route.js.map +1 -1
- package/dist/src/routes/local-llm.route.d.ts +3 -0
- package/dist/src/routes/local-llm.route.d.ts.map +1 -0
- package/dist/src/routes/local-llm.route.js +688 -0
- package/dist/src/routes/local-llm.route.js.map +1 -0
- package/dist/src/routes/logs.route.d.ts +3 -0
- package/dist/src/routes/logs.route.d.ts.map +1 -0
- package/dist/src/routes/logs.route.js +24 -0
- package/dist/src/routes/logs.route.js.map +1 -0
- package/dist/src/routes/vnc.route.d.ts +10 -1
- package/dist/src/routes/vnc.route.d.ts.map +1 -1
- package/dist/src/routes/vnc.route.js +37 -12
- package/dist/src/routes/vnc.route.js.map +1 -1
- package/dist/src/routes/workflows.route.d.ts.map +1 -1
- package/dist/src/routes/workflows.route.js +24 -0
- package/dist/src/routes/workflows.route.js.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +24 -2
- package/dist/src/server.js.map +1 -1
- package/dist/templates/agents/actor.agent.yaml +34 -0
- package/dist/templates/agents/architect.agent.yaml +0 -1
- package/dist/templates/agents/chatbot.agent.yaml +0 -1
- package/dist/templates/agents/corporate.agent.yaml +0 -1
- package/dist/templates/agents/functions.agent.yaml +29 -0
- package/dist/templates/agents/investment-analyst.agent.yaml +0 -1
- package/dist/templates/agents/music-librarian.agent.yaml +3 -27
- package/dist/templates/agents/network-security.agent.yaml +0 -1
- package/dist/templates/agents/transport-security.agent.yaml +0 -1
- package/dist/templates/agents/web-engineer.agent.yaml +3 -4
- package/dist/templates/agents/web-pilot.agent.yaml +0 -1
- package/dist/templates/knowledge/patient-records.knowledge.yaml +20 -0
- package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_0.pdf +0 -0
- package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_1.pdf +0 -0
- package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_10.pdf +0 -0
- package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_11.pdf +0 -0
- package/dist/templates/knowledge/web-docs.knowledge.yaml +1 -1
- package/dist/templates/llm.json +73 -10
- package/dist/templates/skills/orcha-builder/SKILL.md +56 -3
- package/dist/templates/workflows/example.workflow.yaml +27 -35
- package/dist/templates/workflows/react-example.workflow.yaml +14 -19
- package/dist/templates/workflows/team-chat.workflow.yaml +47 -0
- package/package.json +14 -6
- package/dist/public/src/components/SkillsView.js +0 -137
- package/dist/public/src/components/WorkflowsView.js +0 -568
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
import { execFileSync, spawnSync } from 'child_process';
|
|
2
|
+
import * as fs from 'fs/promises';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { createWriteStream, existsSync } from 'fs';
|
|
5
|
+
import { pipeline } from 'stream/promises';
|
|
6
|
+
import { Readable } from 'stream';
|
|
7
|
+
import { logger } from "../logger.js";
|
|
8
|
+
const BINARY_NAME = process.platform === 'win32' ? 'llama-server.exe' : 'llama-server';
|
|
9
|
+
const RELEASES_API = 'https://api.github.com/repos/ggml-org/llama.cpp/releases/latest';
|
|
10
|
+
let cachedGpu = null;
|
|
11
|
+
let cachedVersion = null;
|
|
12
|
+
let cachedIsSystem = null;
|
|
13
|
+
/**
|
|
14
|
+
* Detect GPU and select the best acceleration backend.
|
|
15
|
+
* - NVIDIA on Windows: CUDA (13.1 or 12.4 based on driver), Vulkan fallback for old drivers
|
|
16
|
+
* - NVIDIA on Linux: Vulkan (llama.cpp doesn't ship Linux CUDA builds)
|
|
17
|
+
* - AMD/Intel on Windows or Linux: Vulkan (universal GPU backend)
|
|
18
|
+
* - macOS: 'metal' (Metal is built into the macOS binary, but we tag it for runtime flag selection)
|
|
19
|
+
*/
|
|
20
|
+
export function detectGpu() {
|
|
21
|
+
if (cachedGpu)
|
|
22
|
+
return cachedGpu;
|
|
23
|
+
if (process.platform === 'darwin') {
|
|
24
|
+
cachedGpu = { accel: 'metal' };
|
|
25
|
+
return cachedGpu;
|
|
26
|
+
}
|
|
27
|
+
// Try NVIDIA first (nvidia-smi is available on both Windows and Linux)
|
|
28
|
+
const nvidia = detectNvidia();
|
|
29
|
+
if (nvidia) {
|
|
30
|
+
if (process.platform === 'linux') {
|
|
31
|
+
cachedGpu = { accel: 'vulkan', name: nvidia.name };
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// Windows: use CUDA if driver is new enough, otherwise Vulkan
|
|
35
|
+
if (nvidia.cudaVersion >= 13.1) {
|
|
36
|
+
cachedGpu = { accel: 'cuda-13.1', name: nvidia.name };
|
|
37
|
+
}
|
|
38
|
+
else if (nvidia.cudaVersion >= 12.4) {
|
|
39
|
+
cachedGpu = { accel: 'cuda-12.4', name: nvidia.name };
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
logger.warn(`[BinaryManager] NVIDIA CUDA driver ${nvidia.cudaVersion} < 12.4, using Vulkan`);
|
|
43
|
+
cachedGpu = { accel: 'vulkan', name: nvidia.name };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// No NVIDIA — check for any other GPU (AMD, Intel)
|
|
49
|
+
const gpuName = detectAnyGpu();
|
|
50
|
+
cachedGpu = gpuName ? { accel: 'vulkan', name: gpuName } : { accel: 'none' };
|
|
51
|
+
}
|
|
52
|
+
if (cachedGpu.accel !== 'none') {
|
|
53
|
+
logger.info(`[BinaryManager] Detected GPU: ${cachedGpu.name ?? 'unknown'} (${cachedGpu.accel})`);
|
|
54
|
+
}
|
|
55
|
+
return cachedGpu;
|
|
56
|
+
}
|
|
57
|
+
function detectNvidia() {
|
|
58
|
+
try {
|
|
59
|
+
const output = execFileSync('nvidia-smi', [], { encoding: 'utf-8', timeout: 10_000 });
|
|
60
|
+
const cudaMatch = output.match(/CUDA Version:\s*([\d.]+)/);
|
|
61
|
+
const cudaVersion = cudaMatch ? parseFloat(cudaMatch[1]) : 0;
|
|
62
|
+
let name;
|
|
63
|
+
try {
|
|
64
|
+
name = execFileSync('nvidia-smi', ['--query-gpu=name', '--format=csv,noheader'], {
|
|
65
|
+
encoding: 'utf-8', timeout: 5_000,
|
|
66
|
+
}).trim().split('\n')[0];
|
|
67
|
+
}
|
|
68
|
+
catch { /* display name is optional */ }
|
|
69
|
+
return { name, cudaVersion };
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** Query NVIDIA GPU VRAM via nvidia-smi. Returns null if unavailable. */
|
|
76
|
+
export function queryNvidiaVram() {
|
|
77
|
+
try {
|
|
78
|
+
const output = execFileSync('nvidia-smi', [
|
|
79
|
+
'--query-gpu=memory.total,memory.used,memory.free',
|
|
80
|
+
'--format=csv,noheader,nounits',
|
|
81
|
+
], { encoding: 'utf-8', timeout: 5_000 }).trim();
|
|
82
|
+
// First line = first GPU. Values are in MiB.
|
|
83
|
+
const firstGpu = output.split('\n')[0];
|
|
84
|
+
if (!firstGpu)
|
|
85
|
+
return null;
|
|
86
|
+
const parts = firstGpu.split(',').map(s => parseInt(s.trim(), 10));
|
|
87
|
+
if (parts.length < 3 || parts.some(isNaN))
|
|
88
|
+
return null;
|
|
89
|
+
const [totalMiB, usedMiB, freeMiB] = parts;
|
|
90
|
+
return {
|
|
91
|
+
totalBytes: totalMiB * 1024 * 1024,
|
|
92
|
+
usedBytes: usedMiB * 1024 * 1024,
|
|
93
|
+
freeBytes: freeMiB * 1024 * 1024,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function detectAnyGpu() {
|
|
101
|
+
try {
|
|
102
|
+
if (process.platform === 'win32') {
|
|
103
|
+
const output = execFileSync('powershell', ['-Command',
|
|
104
|
+
'Get-CimInstance Win32_VideoController | Select-Object -ExpandProperty Name',
|
|
105
|
+
], { encoding: 'utf-8', timeout: 10_000 }).trim();
|
|
106
|
+
// Filter out virtual/basic adapters that can't do GPU compute
|
|
107
|
+
const gpus = output.split('\n')
|
|
108
|
+
.map(l => l.trim())
|
|
109
|
+
.filter(l => l && !l.includes('Microsoft Basic') && !l.includes('Remote Desktop'));
|
|
110
|
+
return gpus[0] || null;
|
|
111
|
+
}
|
|
112
|
+
if (process.platform === 'linux') {
|
|
113
|
+
const output = execFileSync('lspci', [], { encoding: 'utf-8', timeout: 5_000 });
|
|
114
|
+
const match = output.match(/(?:VGA|3D|Display).*?:\s*(.+)/i);
|
|
115
|
+
return match ? match[1].trim() : null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch { /* detection failed */ }
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
function detectPlatform() {
|
|
122
|
+
const arch = process.arch;
|
|
123
|
+
const plat = process.platform;
|
|
124
|
+
if (plat === 'darwin')
|
|
125
|
+
return arch === 'arm64' ? 'macos-arm64' : 'macos-x64';
|
|
126
|
+
if (plat === 'win32')
|
|
127
|
+
return 'win-x64';
|
|
128
|
+
if (plat === 'linux')
|
|
129
|
+
return arch === 'arm64' ? 'linux-arm64' : 'linux-x64';
|
|
130
|
+
throw new Error(`Unsupported platform: ${plat}-${arch}`);
|
|
131
|
+
}
|
|
132
|
+
function getAssetPatterns(platform, gpu) {
|
|
133
|
+
switch (platform) {
|
|
134
|
+
case 'macos-arm64': return { main: 'bin-macos-arm64' };
|
|
135
|
+
case 'macos-x64': return { main: 'bin-macos-x64' };
|
|
136
|
+
case 'linux-arm64':
|
|
137
|
+
throw new Error('Local LLM is not available on ARM64 Linux (no official llama.cpp builds). Use native macOS for Metal GPU support, or x86_64 Linux with --gpus all for NVIDIA.');
|
|
138
|
+
case 'linux-x64': {
|
|
139
|
+
if (gpu.accel === 'vulkan')
|
|
140
|
+
return { main: 'bin-ubuntu-vulkan-x64' };
|
|
141
|
+
return { main: 'bin-ubuntu-x64' };
|
|
142
|
+
}
|
|
143
|
+
case 'win-x64': {
|
|
144
|
+
if (gpu.accel.startsWith('cuda')) {
|
|
145
|
+
const ver = gpu.accel.replace('cuda-', '');
|
|
146
|
+
return {
|
|
147
|
+
main: `bin-win-cuda-${ver}-x64`,
|
|
148
|
+
cudart: `cudart-llama-bin-win-cuda-${ver}-x64`,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
if (gpu.accel === 'vulkan')
|
|
152
|
+
return { main: 'bin-win-vulkan-x64' };
|
|
153
|
+
return { main: 'bin-win-cpu-x64' };
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function getBinaryDirName(platform, gpu) {
|
|
158
|
+
if (gpu.accel === 'none')
|
|
159
|
+
return platform;
|
|
160
|
+
switch (platform) {
|
|
161
|
+
case 'win-x64': return `win-${gpu.accel}-x64`;
|
|
162
|
+
case 'linux-x64': return `linux-${gpu.accel}-x64`;
|
|
163
|
+
default: return platform;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async function findFileRecursive(dir, name) {
|
|
167
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
168
|
+
for (const entry of entries) {
|
|
169
|
+
const fullPath = path.join(dir, entry.name);
|
|
170
|
+
if (entry.isFile() && entry.name === name)
|
|
171
|
+
return fullPath;
|
|
172
|
+
if (entry.isDirectory()) {
|
|
173
|
+
const found = await findFileRecursive(fullPath, name);
|
|
174
|
+
if (found)
|
|
175
|
+
return found;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Resolve the path to the llama-server binary.
|
|
182
|
+
*
|
|
183
|
+
* 1. Check if `llama-server` is on PATH (Docker / system install)
|
|
184
|
+
* 2. Check if already downloaded to `<baseDir>/.llama-server/<platform>/`
|
|
185
|
+
* 3. Download from GitHub releases (GPU-accelerated when NVIDIA/AMD/Intel GPU detected)
|
|
186
|
+
*/
|
|
187
|
+
export async function getBinaryPath(baseDir) {
|
|
188
|
+
// 1. Check PATH
|
|
189
|
+
try {
|
|
190
|
+
const cmd = process.platform === 'win32' ? 'where' : 'which';
|
|
191
|
+
const result = execFileSync(cmd, ['llama-server'], { encoding: 'utf-8' }).trim();
|
|
192
|
+
if (result) {
|
|
193
|
+
logger.info(`[BinaryManager] Using system llama-server: ${result.split('\n')[0]}`);
|
|
194
|
+
return result.split('\n')[0];
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch { /* not on PATH */ }
|
|
198
|
+
// 2. Check local download
|
|
199
|
+
const platform = detectPlatform();
|
|
200
|
+
const gpu = detectGpu();
|
|
201
|
+
const dirName = getBinaryDirName(platform, gpu);
|
|
202
|
+
const binDir = path.join(baseDir, '.llama-server', dirName);
|
|
203
|
+
const binPath = path.join(binDir, BINARY_NAME);
|
|
204
|
+
if (existsSync(binPath)) {
|
|
205
|
+
return binPath;
|
|
206
|
+
}
|
|
207
|
+
// 3. Download
|
|
208
|
+
await downloadBinary(binDir, platform, gpu);
|
|
209
|
+
return binPath;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Download an asset archive, extract it to a temp dir, and return the temp dir path.
|
|
213
|
+
*/
|
|
214
|
+
async function downloadAndExtract(destDir, asset) {
|
|
215
|
+
logger.info(`[BinaryManager] Downloading ${asset.name}...`);
|
|
216
|
+
await fs.mkdir(destDir, { recursive: true });
|
|
217
|
+
const archivePath = path.join(destDir, asset.name);
|
|
218
|
+
const dlRes = await fetch(asset.browser_download_url, { redirect: 'follow' });
|
|
219
|
+
if (!dlRes.ok || !dlRes.body)
|
|
220
|
+
throw new Error(`Download failed: ${dlRes.status}`);
|
|
221
|
+
const nodeStream = Readable.fromWeb(dlRes.body);
|
|
222
|
+
await pipeline(nodeStream, createWriteStream(archivePath));
|
|
223
|
+
const extractDir = path.join(destDir, `_extract_${Date.now()}`);
|
|
224
|
+
await fs.mkdir(extractDir, { recursive: true });
|
|
225
|
+
logger.info(`[BinaryManager] Extracting ${asset.name}...`);
|
|
226
|
+
if (asset.name.endsWith('.tar.gz')) {
|
|
227
|
+
execFileSync('tar', ['xzf', archivePath, '-C', extractDir]);
|
|
228
|
+
}
|
|
229
|
+
else if (asset.name.endsWith('.zip')) {
|
|
230
|
+
if (process.platform === 'win32') {
|
|
231
|
+
execFileSync('powershell', ['-Command', `Expand-Archive -Path "${archivePath}" -DestinationPath "${extractDir}" -Force`]);
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
execFileSync('unzip', ['-o', archivePath, '-d', extractDir]);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
await fs.unlink(archivePath).catch(() => { });
|
|
238
|
+
return extractDir;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Copy all files from srcDir (non-recursive — same directory only) to destDir.
|
|
242
|
+
*/
|
|
243
|
+
async function copyDirFiles(srcDir, destDir) {
|
|
244
|
+
const entries = await fs.readdir(srcDir, { withFileTypes: true });
|
|
245
|
+
for (const entry of entries) {
|
|
246
|
+
if (!entry.isFile())
|
|
247
|
+
continue;
|
|
248
|
+
const src = path.join(srcDir, entry.name);
|
|
249
|
+
const dest = path.join(destDir, entry.name);
|
|
250
|
+
await fs.rename(src, dest).catch(async () => {
|
|
251
|
+
await fs.copyFile(src, dest);
|
|
252
|
+
await fs.unlink(src);
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Recursively copy all files from srcDir (flattening nested directories) to destDir.
|
|
258
|
+
*/
|
|
259
|
+
async function copyAllFiles(srcDir, destDir) {
|
|
260
|
+
const entries = await fs.readdir(srcDir, { withFileTypes: true });
|
|
261
|
+
for (const entry of entries) {
|
|
262
|
+
const src = path.join(srcDir, entry.name);
|
|
263
|
+
if (entry.isDirectory()) {
|
|
264
|
+
await copyAllFiles(src, destDir);
|
|
265
|
+
}
|
|
266
|
+
else if (entry.isFile()) {
|
|
267
|
+
const dest = path.join(destDir, entry.name);
|
|
268
|
+
await fs.rename(src, dest).catch(async () => {
|
|
269
|
+
await fs.copyFile(src, dest);
|
|
270
|
+
await fs.unlink(src);
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
async function downloadBinary(destDir, platform, gpu) {
|
|
276
|
+
const res = await fetch(RELEASES_API);
|
|
277
|
+
if (!res.ok)
|
|
278
|
+
throw new Error(`GitHub API error: ${res.status}`);
|
|
279
|
+
const release = await res.json();
|
|
280
|
+
const patterns = getAssetPatterns(platform, gpu);
|
|
281
|
+
// Find main binary asset (exclude cudart runtime packages and NPU-specific builds)
|
|
282
|
+
const mainAsset = release.assets?.find((a) => a.name.includes(patterns.main) && !a.name.startsWith('cudart') && !a.name.includes('aclgraph'));
|
|
283
|
+
if (!mainAsset)
|
|
284
|
+
throw new Error(`No llama-server binary found for platform: ${platform}`);
|
|
285
|
+
// Download and extract main binary
|
|
286
|
+
const mainExtractDir = await downloadAndExtract(destDir, mainAsset);
|
|
287
|
+
const found = await findFileRecursive(mainExtractDir, BINARY_NAME);
|
|
288
|
+
if (!found)
|
|
289
|
+
throw new Error('llama-server binary not found in archive');
|
|
290
|
+
await copyDirFiles(path.dirname(found), destDir);
|
|
291
|
+
await fs.rm(mainExtractDir, { recursive: true, force: true });
|
|
292
|
+
// Download CUDA runtime DLLs alongside the binary
|
|
293
|
+
if (patterns.cudart) {
|
|
294
|
+
const cudartAsset = release.assets?.find((a) => a.name.includes(patterns.cudart));
|
|
295
|
+
if (cudartAsset) {
|
|
296
|
+
const cudartExtractDir = await downloadAndExtract(destDir, cudartAsset);
|
|
297
|
+
await copyAllFiles(cudartExtractDir, destDir);
|
|
298
|
+
await fs.rm(cudartExtractDir, { recursive: true, force: true });
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
logger.warn('[BinaryManager] CUDA runtime package not found — GPU acceleration may not work');
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
// Create short symlinks for versioned shared libs
|
|
305
|
+
// macOS: libmtmd.0.0.8219.dylib -> libmtmd.0.dylib
|
|
306
|
+
// Linux: libmtmd.so.0.0.8219 -> libmtmd.so.0
|
|
307
|
+
const destEntries = await fs.readdir(destDir);
|
|
308
|
+
for (const name of destEntries) {
|
|
309
|
+
let shortName = null;
|
|
310
|
+
const macMatch = name.match(/^(lib[\w-]+\.\d+)\.\d+\.\d+\.(dylib|so)$/);
|
|
311
|
+
if (macMatch) {
|
|
312
|
+
shortName = `${macMatch[1]}.${macMatch[2]}`;
|
|
313
|
+
}
|
|
314
|
+
const linuxMatch = name.match(/^(lib[\w-]+\.so\.\d+)\.\d+\.\d+$/);
|
|
315
|
+
if (linuxMatch) {
|
|
316
|
+
shortName = linuxMatch[1] ?? null;
|
|
317
|
+
}
|
|
318
|
+
if (!shortName || shortName === name)
|
|
319
|
+
continue;
|
|
320
|
+
const linkPath = path.join(destDir, shortName);
|
|
321
|
+
if (!existsSync(linkPath)) {
|
|
322
|
+
await fs.symlink(name, linkPath);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
// Make binaries and shared libs executable on Unix
|
|
326
|
+
if (process.platform !== 'win32') {
|
|
327
|
+
for (const name of destEntries) {
|
|
328
|
+
if (name.startsWith('_') || name.startsWith('.'))
|
|
329
|
+
continue;
|
|
330
|
+
await fs.chmod(path.join(destDir, name), 0o755).catch(() => { });
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
logger.info(`[BinaryManager] llama-server ready at ${path.join(destDir, BINARY_NAME)}`);
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Get the version string from the local llama-server binary without triggering a download.
|
|
337
|
+
* llama-server outputs version to stderr (mixed with GPU init logs), so we capture both streams.
|
|
338
|
+
*/
|
|
339
|
+
export function getBinaryVersion(baseDir) {
|
|
340
|
+
if (cachedVersion && cachedVersion.baseDir === baseDir)
|
|
341
|
+
return cachedVersion.value;
|
|
342
|
+
function parseVersion(binPath) {
|
|
343
|
+
try {
|
|
344
|
+
const result = spawnSync(binPath, ['--version'], { timeout: 5000, encoding: 'utf-8' });
|
|
345
|
+
const output = (result.stdout || '') + '\n' + (result.stderr || '');
|
|
346
|
+
const match = output.match(/version:\s*(.+)/i);
|
|
347
|
+
return match ? match[1].trim() : null;
|
|
348
|
+
}
|
|
349
|
+
catch {
|
|
350
|
+
return null;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
let version = null;
|
|
354
|
+
// Check system PATH first
|
|
355
|
+
try {
|
|
356
|
+
const cmd = process.platform === 'win32' ? 'where' : 'which';
|
|
357
|
+
const sysPath = execFileSync(cmd, ['llama-server'], { encoding: 'utf-8', timeout: 3000 }).trim().split('\n')[0];
|
|
358
|
+
if (sysPath)
|
|
359
|
+
version = parseVersion(sysPath);
|
|
360
|
+
}
|
|
361
|
+
catch { /* not on PATH */ }
|
|
362
|
+
if (version === null) {
|
|
363
|
+
// Check local binary
|
|
364
|
+
const platform = detectPlatform();
|
|
365
|
+
const gpu = detectGpu();
|
|
366
|
+
const binPath = path.join(baseDir, '.llama-server', getBinaryDirName(platform, gpu), BINARY_NAME);
|
|
367
|
+
if (existsSync(binPath)) {
|
|
368
|
+
version = parseVersion(binPath);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
cachedVersion = { baseDir, value: version };
|
|
372
|
+
return version;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Check if llama-server is a system install (on PATH) vs managed by us.
|
|
376
|
+
*/
|
|
377
|
+
export function isSystemBinary() {
|
|
378
|
+
if (cachedIsSystem !== null)
|
|
379
|
+
return cachedIsSystem;
|
|
380
|
+
try {
|
|
381
|
+
const cmd = process.platform === 'win32' ? 'where' : 'which';
|
|
382
|
+
execFileSync(cmd, ['llama-server'], { encoding: 'utf-8', timeout: 3000 });
|
|
383
|
+
cachedIsSystem = true;
|
|
384
|
+
}
|
|
385
|
+
catch {
|
|
386
|
+
cachedIsSystem = false;
|
|
387
|
+
}
|
|
388
|
+
return cachedIsSystem;
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Delete the current managed binary and re-download the latest release from GitHub.
|
|
392
|
+
*/
|
|
393
|
+
export async function updateBinary(baseDir) {
|
|
394
|
+
const platform = detectPlatform();
|
|
395
|
+
const gpu = detectGpu();
|
|
396
|
+
const dirName = getBinaryDirName(platform, gpu);
|
|
397
|
+
const binDir = path.join(baseDir, '.llama-server', dirName);
|
|
398
|
+
await fs.rm(binDir, { recursive: true, force: true });
|
|
399
|
+
await downloadBinary(binDir, platform, gpu);
|
|
400
|
+
// Invalidate caches so next call picks up the new binary
|
|
401
|
+
cachedVersion = null;
|
|
402
|
+
cachedIsSystem = null;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Check if a newer llama-server release is available on GitHub.
|
|
406
|
+
* Parses the local build number from version string (e.g., "8234 (abc123)")
|
|
407
|
+
* and compares with the latest GitHub release tag (e.g., "b8300").
|
|
408
|
+
*/
|
|
409
|
+
export async function checkForUpdate(baseDir) {
|
|
410
|
+
const version = getBinaryVersion(baseDir);
|
|
411
|
+
const currentBuild = version ? parseInt(version.match(/^(\d+)/)?.[1] || '', 10) || null : null;
|
|
412
|
+
try {
|
|
413
|
+
const res = await fetch(RELEASES_API);
|
|
414
|
+
if (!res.ok)
|
|
415
|
+
return { available: false, currentBuild, latestBuild: null, latestTag: null, publishedAt: null, daysNewer: null };
|
|
416
|
+
const release = await res.json();
|
|
417
|
+
const tag = release.tag_name; // e.g., "b8300"
|
|
418
|
+
const latestBuild = parseInt(tag?.replace(/^b/, '') || '', 10) || null;
|
|
419
|
+
const publishedAt = release.published_at || null;
|
|
420
|
+
let daysNewer = null;
|
|
421
|
+
if (publishedAt && currentBuild && latestBuild && latestBuild > currentBuild) {
|
|
422
|
+
daysNewer = Math.max(0, Math.floor((Date.now() - new Date(publishedAt).getTime()) / 86_400_000));
|
|
423
|
+
}
|
|
424
|
+
return {
|
|
425
|
+
available: !!(currentBuild && latestBuild && latestBuild > currentBuild),
|
|
426
|
+
currentBuild,
|
|
427
|
+
latestBuild,
|
|
428
|
+
latestTag: tag || null,
|
|
429
|
+
publishedAt,
|
|
430
|
+
daysNewer,
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
catch (err) {
|
|
434
|
+
logger.warn('[BinaryManager] Failed to check for updates:', err);
|
|
435
|
+
return { available: false, currentBuild, latestBuild: null, latestTag: null, publishedAt: null, daysNewer: null };
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
// Exported for testing — not part of the public API
|
|
439
|
+
export { getAssetPatterns as _getAssetPatterns, getBinaryDirName as _getBinaryDirName };
|
|
440
|
+
export function _resetGpuCache() { cachedGpu = null; cachedVersion = null; cachedIsSystem = null; }
|
|
441
|
+
//# sourceMappingURL=binary-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-manager.js","sourceRoot":"","sources":["../../../lib/local-llm/binary-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export interface EngineServerStatus {
|
|
2
|
+
running: boolean;
|
|
3
|
+
activeModel: string | null;
|
|
4
|
+
port: number | null;
|
|
5
|
+
contextSize: number | null;
|
|
6
|
+
memoryEstimate: {
|
|
7
|
+
modelBytes: number;
|
|
8
|
+
kvCacheBytes: number;
|
|
9
|
+
totalBytes: number;
|
|
10
|
+
} | null;
|
|
11
|
+
}
|
|
12
|
+
export interface EngineChatStatus extends EngineServerStatus {
|
|
13
|
+
supportsVision: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface EngineStatus {
|
|
16
|
+
engineName: string;
|
|
17
|
+
available: boolean;
|
|
18
|
+
chat: EngineChatStatus;
|
|
19
|
+
embedding: EngineServerStatus;
|
|
20
|
+
}
|
|
21
|
+
export interface LoadOptions {
|
|
22
|
+
contextSize?: number;
|
|
23
|
+
reasoningBudget?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface LocalEngine {
|
|
26
|
+
readonly engineName: string;
|
|
27
|
+
isAvailable(): boolean;
|
|
28
|
+
setBaseDir(dir: string): void;
|
|
29
|
+
loadChat(modelPath: string, opts?: LoadOptions): Promise<void>;
|
|
30
|
+
unloadChat(): Promise<void>;
|
|
31
|
+
swapChat(modelPath: string, opts?: LoadOptions): Promise<void>;
|
|
32
|
+
ensureRunningChat(modelName: string, opts?: LoadOptions): Promise<void>;
|
|
33
|
+
getChatStatus(): EngineChatStatus;
|
|
34
|
+
getChatBaseUrl(): string | null;
|
|
35
|
+
loadEmbedding(modelPath: string): Promise<void>;
|
|
36
|
+
unloadEmbedding(): Promise<void>;
|
|
37
|
+
ensureRunningEmbedding(modelName: string): Promise<void>;
|
|
38
|
+
getEmbeddingStatus(): EngineServerStatus;
|
|
39
|
+
getEmbeddingBaseUrl(): string | null;
|
|
40
|
+
getStatus(): EngineStatus;
|
|
41
|
+
killOrphans(): void;
|
|
42
|
+
getBinaryVersion(): string | null;
|
|
43
|
+
getBinarySource(): 'managed' | 'system' | null;
|
|
44
|
+
checkForUpdate(): Promise<any>;
|
|
45
|
+
updateBinary(): Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=engine-interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-interface.d.ts","sourceRoot":"","sources":["../../../lib/local-llm/engine-interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACzF;AAED,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,kBAAkB,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,WAAW,IAAI,OAAO,CAAC;IACvB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAG9B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,aAAa,IAAI,gBAAgB,CAAC;IAClC,cAAc,IAAI,MAAM,GAAG,IAAI,CAAC;IAGhC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,kBAAkB,IAAI,kBAAkB,CAAC;IACzC,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAAC;IAGrC,SAAS,IAAI,YAAY,CAAC;IAC1B,WAAW,IAAI,IAAI,CAAC;IAGpB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,IAAI,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC;IAC/C,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-interface.js","sourceRoot":"","sources":["../../../lib/local-llm/engine-interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { LocalEngine, EngineStatus } from './engine-interface.ts';
|
|
2
|
+
export declare class EngineRegistry {
|
|
3
|
+
private engines;
|
|
4
|
+
private _baseDir;
|
|
5
|
+
constructor();
|
|
6
|
+
register(engine: LocalEngine): void;
|
|
7
|
+
getEngine(name: string): LocalEngine | undefined;
|
|
8
|
+
getAvailableEngines(): LocalEngine[];
|
|
9
|
+
getAllEngines(): LocalEngine[];
|
|
10
|
+
getAllStatus(): Record<string, EngineStatus>;
|
|
11
|
+
setBaseDir(dir: string): void;
|
|
12
|
+
killAllOrphans(): void;
|
|
13
|
+
unloadAll(): Promise<void>;
|
|
14
|
+
resolveModelPath(modelName: string): Promise<{
|
|
15
|
+
filePath: string;
|
|
16
|
+
type: 'gguf' | 'mlx';
|
|
17
|
+
}>;
|
|
18
|
+
}
|
|
19
|
+
export declare const engineRegistry: EngineRegistry;
|
|
20
|
+
//# sourceMappingURL=engine-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-registry.d.ts","sourceRoot":"","sources":["../../../lib/local-llm/engine-registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEvE,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAAM;;IAOtB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAInC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIhD,mBAAmB,IAAI,WAAW,EAAE;IAIpC,aAAa,IAAI,WAAW,EAAE;IAI9B,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAQ5C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAO7B,cAAc,IAAI,IAAI;IAMhB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAO1B,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;KAAE,CAAC;CAM/F;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { LlamaCppEngine } from "./engines/llama-cpp-engine.js";
|
|
2
|
+
import { MlxServeEngine } from "./engines/mlx-serve-engine.js";
|
|
3
|
+
import { ModelManager } from "./model-manager.js";
|
|
4
|
+
export class EngineRegistry {
|
|
5
|
+
engines = new Map();
|
|
6
|
+
_baseDir = '';
|
|
7
|
+
constructor() {
|
|
8
|
+
this.register(new LlamaCppEngine());
|
|
9
|
+
this.register(new MlxServeEngine());
|
|
10
|
+
}
|
|
11
|
+
register(engine) {
|
|
12
|
+
this.engines.set(engine.engineName, engine);
|
|
13
|
+
}
|
|
14
|
+
getEngine(name) {
|
|
15
|
+
return this.engines.get(name);
|
|
16
|
+
}
|
|
17
|
+
getAvailableEngines() {
|
|
18
|
+
return [...this.engines.values()].filter(e => e.isAvailable());
|
|
19
|
+
}
|
|
20
|
+
getAllEngines() {
|
|
21
|
+
return [...this.engines.values()];
|
|
22
|
+
}
|
|
23
|
+
getAllStatus() {
|
|
24
|
+
const result = {};
|
|
25
|
+
for (const [name, engine] of this.engines) {
|
|
26
|
+
result[name] = engine.getStatus();
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
setBaseDir(dir) {
|
|
31
|
+
this._baseDir = dir;
|
|
32
|
+
for (const engine of this.engines.values()) {
|
|
33
|
+
engine.setBaseDir(dir);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
killAllOrphans() {
|
|
37
|
+
for (const engine of this.engines.values()) {
|
|
38
|
+
engine.killOrphans();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async unloadAll() {
|
|
42
|
+
for (const engine of this.engines.values()) {
|
|
43
|
+
await engine.unloadChat();
|
|
44
|
+
await engine.unloadEmbedding();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async resolveModelPath(modelName) {
|
|
48
|
+
const manager = new ModelManager(this._baseDir);
|
|
49
|
+
const result = await manager.findModelFile(modelName);
|
|
50
|
+
if (!result)
|
|
51
|
+
throw new Error(`Local model "${modelName}" not found. Download it first.`);
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export const engineRegistry = new EngineRegistry();
|
|
56
|
+
//# sourceMappingURL=engine-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-registry.js","sourceRoot":"","sources":["../../../lib/local-llm/engine-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,MAAM,OAAO,cAAc;IACjB,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IACzC,QAAQ,GAAG,EAAE,CAAC;IAEtB;QACE,IAAI,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,QAAQ,CAAC,MAAmB;QAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,mBAAmB;QACjB,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,YAAY;QACV,MAAM,MAAM,GAAiC,EAAE,CAAC;QAChD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QACpC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,cAAc;QACZ,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS;QACb,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;YAC1B,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,SAAiB;QACtC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,SAAS,iCAAiC,CAAC,CAAC;QACzF,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { LocalEngine, EngineChatStatus, EngineServerStatus, EngineStatus, LoadOptions } from '../engine-interface.ts';
|
|
2
|
+
export declare class LlamaCppEngine implements LocalEngine {
|
|
3
|
+
readonly engineName = "llama-cpp";
|
|
4
|
+
private _baseDir;
|
|
5
|
+
private chatServer;
|
|
6
|
+
private embeddingServer;
|
|
7
|
+
private _detectedContextSize;
|
|
8
|
+
private _memoryEstimate;
|
|
9
|
+
private _supportsVision;
|
|
10
|
+
setBaseDir(dir: string): void;
|
|
11
|
+
isAvailable(): boolean;
|
|
12
|
+
loadChat(modelPath: string, opts?: LoadOptions): Promise<void>;
|
|
13
|
+
unloadChat(): Promise<void>;
|
|
14
|
+
swapChat(modelPath: string, opts?: LoadOptions): Promise<void>;
|
|
15
|
+
ensureRunningChat(modelName: string, opts?: LoadOptions): Promise<void>;
|
|
16
|
+
getChatStatus(): EngineChatStatus;
|
|
17
|
+
getChatBaseUrl(): string | null;
|
|
18
|
+
loadEmbedding(modelPath: string): Promise<void>;
|
|
19
|
+
unloadEmbedding(): Promise<void>;
|
|
20
|
+
ensureRunningEmbedding(modelName: string): Promise<void>;
|
|
21
|
+
getEmbeddingStatus(): EngineServerStatus;
|
|
22
|
+
getEmbeddingBaseUrl(): string | null;
|
|
23
|
+
getStatus(): EngineStatus;
|
|
24
|
+
killOrphans(): void;
|
|
25
|
+
getBinaryVersion(): string | null;
|
|
26
|
+
getBinarySource(): 'managed' | 'system' | null;
|
|
27
|
+
checkForUpdate(): Promise<any>;
|
|
28
|
+
updateBinary(): Promise<void>;
|
|
29
|
+
private resolveModelPath;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=llama-cpp-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llama-cpp-engine.d.ts","sourceRoot":"","sources":["../../../../lib/local-llm/engines/llama-cpp-engine.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE3H,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,UAAU,eAAe;IAElC,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,eAAe,CAAiF;IACxG,OAAO,CAAC,eAAe,CAAS;IAEhC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B,WAAW,IAAI,OAAO;IAMhB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA8C9D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9D,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7E,aAAa,IAAI,gBAAgB;IAYjC,cAAc,IAAI,MAAM,GAAG,IAAI;IAMzB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAMhC,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9D,kBAAkB,IAAI,kBAAkB;IAWxC,mBAAmB,IAAI,MAAM,GAAG,IAAI;IAMpC,SAAS,IAAI,YAAY;IASzB,WAAW,IAAI,IAAI;IAMnB,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAIjC,eAAe,IAAI,SAAS,GAAG,QAAQ,GAAG,IAAI;IAMxC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;IAI9B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;YAMrB,gBAAgB;CAM/B"}
|