@appkit/llamacpp-cli 2.0.0 → 2.1.0
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 +271 -277
- package/dist/cli.js +133 -23
- package/dist/cli.js.map +1 -1
- package/dist/commands/admin/config.d.ts +1 -1
- package/dist/commands/admin/config.js +5 -5
- package/dist/commands/admin/config.js.map +1 -1
- package/dist/commands/admin/log-config.d.ts +11 -0
- package/dist/commands/admin/log-config.d.ts.map +1 -0
- package/dist/commands/admin/log-config.js +159 -0
- package/dist/commands/admin/log-config.js.map +1 -0
- package/dist/commands/admin/logs.d.ts +2 -3
- package/dist/commands/admin/logs.d.ts.map +1 -1
- package/dist/commands/admin/logs.js +6 -48
- package/dist/commands/admin/logs.js.map +1 -1
- package/dist/commands/admin/status.d.ts.map +1 -1
- package/dist/commands/admin/status.js +1 -0
- package/dist/commands/admin/status.js.map +1 -1
- package/dist/commands/config.d.ts +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +63 -196
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/create.d.ts +3 -2
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +24 -97
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/delete.d.ts.map +1 -1
- package/dist/commands/delete.js +7 -24
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/internal/server-wrapper.d.ts +15 -0
- package/dist/commands/internal/server-wrapper.d.ts.map +1 -0
- package/dist/commands/internal/server-wrapper.js +126 -0
- package/dist/commands/internal/server-wrapper.js.map +1 -0
- package/dist/commands/logs-all.d.ts +0 -2
- package/dist/commands/logs-all.d.ts.map +1 -1
- package/dist/commands/logs-all.js +1 -61
- package/dist/commands/logs-all.js.map +1 -1
- package/dist/commands/logs.d.ts +2 -5
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +104 -120
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/migrate-labels.d.ts +12 -0
- package/dist/commands/migrate-labels.d.ts.map +1 -0
- package/dist/commands/migrate-labels.js +160 -0
- package/dist/commands/migrate-labels.js.map +1 -0
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +2 -1
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/rm.d.ts.map +1 -1
- package/dist/commands/rm.js +22 -48
- package/dist/commands/rm.js.map +1 -1
- package/dist/commands/router/config.d.ts +1 -1
- package/dist/commands/router/config.js +6 -6
- package/dist/commands/router/config.js.map +1 -1
- package/dist/commands/router/logs.d.ts +2 -4
- package/dist/commands/router/logs.d.ts.map +1 -1
- package/dist/commands/router/logs.js +34 -189
- package/dist/commands/router/logs.js.map +1 -1
- package/dist/commands/router/status.d.ts.map +1 -1
- package/dist/commands/router/status.js +1 -0
- package/dist/commands/router/status.js.map +1 -1
- package/dist/commands/server-show.d.ts.map +1 -1
- package/dist/commands/server-show.js +3 -0
- package/dist/commands/server-show.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +21 -72
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +10 -26
- package/dist/commands/stop.js.map +1 -1
- package/dist/launchers/llamacpp-admin +8 -0
- package/dist/launchers/llamacpp-router +8 -0
- package/dist/launchers/llamacpp-server +8 -0
- package/dist/lib/admin-manager.d.ts +4 -0
- package/dist/lib/admin-manager.d.ts.map +1 -1
- package/dist/lib/admin-manager.js +42 -18
- package/dist/lib/admin-manager.js.map +1 -1
- package/dist/lib/admin-server.d.ts +48 -1
- package/dist/lib/admin-server.d.ts.map +1 -1
- package/dist/lib/admin-server.js +632 -238
- package/dist/lib/admin-server.js.map +1 -1
- package/dist/lib/config-generator.d.ts +1 -0
- package/dist/lib/config-generator.d.ts.map +1 -1
- package/dist/lib/config-generator.js +12 -5
- package/dist/lib/config-generator.js.map +1 -1
- package/dist/lib/keyboard-manager.d.ts +162 -0
- package/dist/lib/keyboard-manager.d.ts.map +1 -0
- package/dist/lib/keyboard-manager.js +247 -0
- package/dist/lib/keyboard-manager.js.map +1 -0
- package/dist/lib/label-migration.d.ts +65 -0
- package/dist/lib/label-migration.d.ts.map +1 -0
- package/dist/lib/label-migration.js +458 -0
- package/dist/lib/label-migration.js.map +1 -0
- package/dist/lib/launchctl-manager.d.ts +9 -0
- package/dist/lib/launchctl-manager.d.ts.map +1 -1
- package/dist/lib/launchctl-manager.js +65 -19
- package/dist/lib/launchctl-manager.js.map +1 -1
- package/dist/lib/log-management-service.d.ts +51 -0
- package/dist/lib/log-management-service.d.ts.map +1 -0
- package/dist/lib/log-management-service.js +124 -0
- package/dist/lib/log-management-service.js.map +1 -0
- package/dist/lib/log-workers.d.ts +70 -0
- package/dist/lib/log-workers.d.ts.map +1 -0
- package/dist/lib/log-workers.js +217 -0
- package/dist/lib/log-workers.js.map +1 -0
- package/dist/lib/model-downloader.d.ts +9 -1
- package/dist/lib/model-downloader.d.ts.map +1 -1
- package/dist/lib/model-downloader.js +98 -1
- package/dist/lib/model-downloader.js.map +1 -1
- package/dist/lib/model-management-service.d.ts +60 -0
- package/dist/lib/model-management-service.d.ts.map +1 -0
- package/dist/lib/model-management-service.js +246 -0
- package/dist/lib/model-management-service.js.map +1 -0
- package/dist/lib/model-management-service.test.d.ts +2 -0
- package/dist/lib/model-management-service.test.d.ts.map +1 -0
- package/dist/lib/model-management-service.test.js.map +1 -0
- package/dist/lib/model-scanner.d.ts +15 -3
- package/dist/lib/model-scanner.d.ts.map +1 -1
- package/dist/lib/model-scanner.js +174 -17
- package/dist/lib/model-scanner.js.map +1 -1
- package/dist/lib/openapi-spec.d.ts +1335 -0
- package/dist/lib/openapi-spec.d.ts.map +1 -0
- package/dist/lib/openapi-spec.js +1017 -0
- package/dist/lib/openapi-spec.js.map +1 -0
- package/dist/lib/router-logger.d.ts +1 -1
- package/dist/lib/router-logger.d.ts.map +1 -1
- package/dist/lib/router-logger.js +13 -11
- package/dist/lib/router-logger.js.map +1 -1
- package/dist/lib/router-manager.d.ts +4 -0
- package/dist/lib/router-manager.d.ts.map +1 -1
- package/dist/lib/router-manager.js +30 -18
- package/dist/lib/router-manager.js.map +1 -1
- package/dist/lib/router-server.d.ts.map +1 -1
- package/dist/lib/router-server.js +22 -12
- package/dist/lib/router-server.js.map +1 -1
- package/dist/lib/server-config-service.d.ts +51 -0
- package/dist/lib/server-config-service.d.ts.map +1 -0
- package/dist/lib/server-config-service.js +310 -0
- package/dist/lib/server-config-service.js.map +1 -0
- package/dist/lib/server-config-service.test.d.ts +2 -0
- package/dist/lib/server-config-service.test.d.ts.map +1 -0
- package/dist/lib/server-config-service.test.js.map +1 -0
- package/dist/lib/server-lifecycle-service.d.ts +172 -0
- package/dist/lib/server-lifecycle-service.d.ts.map +1 -0
- package/dist/lib/server-lifecycle-service.js +619 -0
- package/dist/lib/server-lifecycle-service.js.map +1 -0
- package/dist/lib/state-manager.d.ts +18 -1
- package/dist/lib/state-manager.d.ts.map +1 -1
- package/dist/lib/state-manager.js +51 -2
- package/dist/lib/state-manager.js.map +1 -1
- package/dist/lib/status-checker.d.ts +11 -4
- package/dist/lib/status-checker.d.ts.map +1 -1
- package/dist/lib/status-checker.js +34 -1
- package/dist/lib/status-checker.js.map +1 -1
- package/dist/lib/validation-service.d.ts +43 -0
- package/dist/lib/validation-service.d.ts.map +1 -0
- package/dist/lib/validation-service.js +112 -0
- package/dist/lib/validation-service.js.map +1 -0
- package/dist/lib/validation-service.test.d.ts +2 -0
- package/dist/lib/validation-service.test.d.ts.map +1 -0
- package/dist/lib/validation-service.test.js.map +1 -0
- package/dist/scripts/http-log-filter.sh +8 -0
- package/dist/tui/ConfigApp.d.ts.map +1 -1
- package/dist/tui/ConfigApp.js +222 -184
- package/dist/tui/ConfigApp.js.map +1 -1
- package/dist/tui/HistoricalMonitorApp.d.ts.map +1 -1
- package/dist/tui/HistoricalMonitorApp.js +12 -0
- package/dist/tui/HistoricalMonitorApp.js.map +1 -1
- package/dist/tui/ModelsApp.d.ts.map +1 -1
- package/dist/tui/ModelsApp.js +93 -17
- package/dist/tui/ModelsApp.js.map +1 -1
- package/dist/tui/MonitorApp.d.ts.map +1 -1
- package/dist/tui/MonitorApp.js +1 -3
- package/dist/tui/MonitorApp.js.map +1 -1
- package/dist/tui/MultiServerMonitorApp.d.ts +3 -3
- package/dist/tui/MultiServerMonitorApp.d.ts.map +1 -1
- package/dist/tui/MultiServerMonitorApp.js +724 -508
- package/dist/tui/MultiServerMonitorApp.js.map +1 -1
- package/dist/tui/RootNavigator.d.ts.map +1 -1
- package/dist/tui/RootNavigator.js +17 -1
- package/dist/tui/RootNavigator.js.map +1 -1
- package/dist/tui/RouterApp.d.ts +6 -0
- package/dist/tui/RouterApp.d.ts.map +1 -0
- package/dist/tui/RouterApp.js +928 -0
- package/dist/tui/RouterApp.js.map +1 -0
- package/dist/tui/SearchApp.d.ts.map +1 -1
- package/dist/tui/SearchApp.js +27 -6
- package/dist/tui/SearchApp.js.map +1 -1
- package/dist/tui/shared/modal-controller.d.ts +65 -0
- package/dist/tui/shared/modal-controller.d.ts.map +1 -0
- package/dist/tui/shared/modal-controller.js +625 -0
- package/dist/tui/shared/modal-controller.js.map +1 -0
- package/dist/tui/shared/overlay-utils.d.ts +7 -0
- package/dist/tui/shared/overlay-utils.d.ts.map +1 -0
- package/dist/tui/shared/overlay-utils.js +54 -0
- package/dist/tui/shared/overlay-utils.js.map +1 -0
- package/dist/types/admin-config.d.ts +15 -2
- package/dist/types/admin-config.d.ts.map +1 -1
- package/dist/types/model-info.d.ts +5 -0
- package/dist/types/model-info.d.ts.map +1 -1
- package/dist/types/router-config.d.ts +2 -2
- package/dist/types/router-config.d.ts.map +1 -1
- package/dist/types/server-config.d.ts +8 -0
- package/dist/types/server-config.d.ts.map +1 -1
- package/dist/types/server-config.js +25 -0
- package/dist/types/server-config.js.map +1 -1
- package/dist/utils/http-log-filter.d.ts +10 -0
- package/dist/utils/http-log-filter.d.ts.map +1 -0
- package/dist/utils/http-log-filter.js +84 -0
- package/dist/utils/http-log-filter.js.map +1 -0
- package/dist/utils/log-parser.d.ts.map +1 -1
- package/dist/utils/log-parser.js +7 -4
- package/dist/utils/log-parser.js.map +1 -1
- package/dist/utils/log-utils.d.ts +59 -4
- package/dist/utils/log-utils.d.ts.map +1 -1
- package/dist/utils/log-utils.js +150 -11
- package/dist/utils/log-utils.js.map +1 -1
- package/dist/utils/shard-utils.d.ts +72 -0
- package/dist/utils/shard-utils.d.ts.map +1 -0
- package/dist/utils/shard-utils.js +168 -0
- package/dist/utils/shard-utils.js.map +1 -0
- package/package.json +18 -4
- package/src/launchers/llamacpp-admin +8 -0
- package/src/launchers/llamacpp-router +8 -0
- package/src/launchers/llamacpp-server +8 -0
- package/web/dist/assets/index-Byhoy86V.css +1 -0
- package/web/dist/assets/index-HSrgvray.js +50 -0
- package/web/dist/index.html +2 -2
- package/web/dist/assets/index-Bin89Lwr.css +0 -1
- package/web/dist/assets/index-CVmonw3T.js +0 -17
|
@@ -39,6 +39,7 @@ const fs = __importStar(require("fs/promises"));
|
|
|
39
39
|
const path = __importStar(require("path"));
|
|
40
40
|
const file_utils_1 = require("../utils/file-utils");
|
|
41
41
|
const format_utils_1 = require("../utils/format-utils");
|
|
42
|
+
const shard_utils_1 = require("../utils/shard-utils");
|
|
42
43
|
class ModelScanner {
|
|
43
44
|
constructor(modelsDir, getModelsDirFn) {
|
|
44
45
|
this.modelsDir = modelsDir;
|
|
@@ -57,21 +58,65 @@ class ModelScanner {
|
|
|
57
58
|
return (0, file_utils_1.getModelsDir)();
|
|
58
59
|
}
|
|
59
60
|
/**
|
|
60
|
-
*
|
|
61
|
+
* Recursively scan a directory for GGUF files
|
|
62
|
+
*/
|
|
63
|
+
async scanDirectory(dir) {
|
|
64
|
+
const results = [];
|
|
65
|
+
try {
|
|
66
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
67
|
+
for (const entry of entries) {
|
|
68
|
+
const fullPath = path.join(dir, entry.name);
|
|
69
|
+
if (entry.isDirectory()) {
|
|
70
|
+
// Recursively scan subdirectories
|
|
71
|
+
const subFiles = await this.scanDirectory(fullPath);
|
|
72
|
+
results.push(...subFiles);
|
|
73
|
+
}
|
|
74
|
+
else if (entry.isFile() && entry.name.toLowerCase().endsWith('.gguf')) {
|
|
75
|
+
results.push(fullPath);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
// Directory not accessible, skip
|
|
81
|
+
}
|
|
82
|
+
return results;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Scan models directory for GGUF files (supports sharded models)
|
|
61
86
|
*/
|
|
62
87
|
async scanModels() {
|
|
63
88
|
const modelsDir = await this.getModelsDirectory();
|
|
64
89
|
try {
|
|
65
|
-
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
90
|
+
// Recursively find all GGUF files
|
|
91
|
+
const allGgufPaths = await this.scanDirectory(modelsDir);
|
|
92
|
+
// Group files: sharded models as single entries, single files as-is
|
|
93
|
+
const modelMap = new Map();
|
|
94
|
+
const processedShards = new Set();
|
|
95
|
+
for (const filePath of allGgufPaths) {
|
|
96
|
+
const filename = path.basename(filePath);
|
|
97
|
+
const shardInfo = (0, shard_utils_1.parseShardFilename)(filename);
|
|
98
|
+
if (shardInfo.isSharded && shardInfo.shardIndex === 1) {
|
|
99
|
+
// This is the first shard of a sharded model
|
|
100
|
+
const baseKey = `${path.dirname(filePath)}/${shardInfo.baseModelName}`;
|
|
101
|
+
if (!processedShards.has(baseKey)) {
|
|
102
|
+
const modelInfo = await this.getShardedModelInfo(filePath, shardInfo);
|
|
103
|
+
if (modelInfo) {
|
|
104
|
+
modelMap.set(baseKey, modelInfo);
|
|
105
|
+
processedShards.add(baseKey);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else if (!shardInfo.isSharded) {
|
|
110
|
+
// Single-file model (existing behavior)
|
|
111
|
+
const modelInfo = await this.getSingleFileModelInfo(filePath);
|
|
112
|
+
if (modelInfo) {
|
|
113
|
+
modelMap.set(filePath, modelInfo);
|
|
114
|
+
}
|
|
72
115
|
}
|
|
116
|
+
// Skip non-first shards (already grouped)
|
|
73
117
|
}
|
|
74
|
-
//
|
|
118
|
+
// Convert map to array and sort by modified date (newest first)
|
|
119
|
+
const models = Array.from(modelMap.values());
|
|
75
120
|
models.sort((a, b) => b.modified.getTime() - a.modified.getTime());
|
|
76
121
|
return models;
|
|
77
122
|
}
|
|
@@ -81,13 +126,113 @@ class ModelScanner {
|
|
|
81
126
|
}
|
|
82
127
|
}
|
|
83
128
|
/**
|
|
84
|
-
* Get
|
|
129
|
+
* Get info for a single-file (non-sharded) model
|
|
130
|
+
*/
|
|
131
|
+
async getSingleFileModelInfo(filePath) {
|
|
132
|
+
try {
|
|
133
|
+
const stats = await fs.stat(filePath);
|
|
134
|
+
const filename = path.basename(filePath);
|
|
135
|
+
return {
|
|
136
|
+
filename,
|
|
137
|
+
path: filePath,
|
|
138
|
+
size: stats.size,
|
|
139
|
+
sizeFormatted: (0, format_utils_1.formatBytes)(stats.size),
|
|
140
|
+
modified: stats.mtime,
|
|
141
|
+
exists: true,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get info for a sharded model (multiple files)
|
|
150
|
+
*/
|
|
151
|
+
async getShardedModelInfo(firstShardPath, shardInfo) {
|
|
152
|
+
try {
|
|
153
|
+
const directory = path.dirname(firstShardPath);
|
|
154
|
+
const allShards = await (0, shard_utils_1.findAllShards)(directory, shardInfo);
|
|
155
|
+
if (allShards.length === 0) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
// Validate completeness
|
|
159
|
+
const validation = (0, shard_utils_1.validateShardCompleteness)(allShards, shardInfo.shardCount || 0);
|
|
160
|
+
// Calculate total size and get latest modified time
|
|
161
|
+
const totalSize = await (0, shard_utils_1.calculateTotalShardSize)(allShards);
|
|
162
|
+
let latestModified = new Date(0);
|
|
163
|
+
for (const shardPath of allShards) {
|
|
164
|
+
try {
|
|
165
|
+
const stats = await fs.stat(shardPath);
|
|
166
|
+
if (stats.mtime > latestModified) {
|
|
167
|
+
latestModified = stats.mtime;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// Skip inaccessible shards
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
filename: path.basename(firstShardPath),
|
|
176
|
+
path: firstShardPath,
|
|
177
|
+
size: totalSize,
|
|
178
|
+
sizeFormatted: (0, format_utils_1.formatBytes)(totalSize),
|
|
179
|
+
modified: latestModified,
|
|
180
|
+
exists: validation.complete,
|
|
181
|
+
isSharded: true,
|
|
182
|
+
shardCount: shardInfo.shardCount,
|
|
183
|
+
shardIndex: 1,
|
|
184
|
+
shardPaths: allShards,
|
|
185
|
+
baseModelName: shardInfo.baseModelName,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get information about a specific model file (handles sharded models and base names)
|
|
85
194
|
*/
|
|
86
195
|
async getModelInfo(filename) {
|
|
87
196
|
const modelsDir = await this.getModelsDirectory();
|
|
88
|
-
|
|
197
|
+
let modelPath = path.join(modelsDir, filename);
|
|
198
|
+
// Check if it's a sharded model filename
|
|
199
|
+
const shardInfo = (0, shard_utils_1.parseShardFilename)(path.basename(modelPath));
|
|
200
|
+
if (shardInfo.isSharded) {
|
|
201
|
+
// For sharded models, return comprehensive info
|
|
202
|
+
return await this.getShardedModelInfo(modelPath, shardInfo);
|
|
203
|
+
}
|
|
204
|
+
// FIRST: Check if this is a base model name by scanning all models
|
|
205
|
+
// This handles the case where a directory exists with the same name as the base model name
|
|
206
|
+
const allModels = await this.scanModels();
|
|
207
|
+
for (const model of allModels) {
|
|
208
|
+
// Match by base model name (e.g., "DeepSeek-V2.5-IQ1_M")
|
|
209
|
+
if (model.baseModelName === filename) {
|
|
210
|
+
return model;
|
|
211
|
+
}
|
|
212
|
+
// Also match if user provides filename without extension
|
|
213
|
+
const filenameWithoutExt = model.filename.replace(/\.gguf$/i, '');
|
|
214
|
+
if (filenameWithoutExt === filename) {
|
|
215
|
+
return model;
|
|
216
|
+
}
|
|
217
|
+
// Exact filename match
|
|
218
|
+
if (model.filename === filename) {
|
|
219
|
+
return model;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// Not found in scanned models - try as a direct file path
|
|
89
223
|
try {
|
|
90
224
|
const stats = await fs.stat(modelPath);
|
|
225
|
+
// If it's a directory, not a valid model file
|
|
226
|
+
if (stats.isDirectory()) {
|
|
227
|
+
return {
|
|
228
|
+
filename,
|
|
229
|
+
path: modelPath,
|
|
230
|
+
size: 0,
|
|
231
|
+
sizeFormatted: '0 B',
|
|
232
|
+
modified: new Date(),
|
|
233
|
+
exists: false,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
91
236
|
return {
|
|
92
237
|
filename,
|
|
93
238
|
path: modelPath,
|
|
@@ -98,7 +243,7 @@ class ModelScanner {
|
|
|
98
243
|
};
|
|
99
244
|
}
|
|
100
245
|
catch (error) {
|
|
101
|
-
// File doesn't exist
|
|
246
|
+
// File doesn't exist - return non-existent file info
|
|
102
247
|
return {
|
|
103
248
|
filename,
|
|
104
249
|
path: modelPath,
|
|
@@ -117,7 +262,7 @@ class ModelScanner {
|
|
|
117
262
|
return modelInfo !== null && modelInfo.exists && modelInfo.size > 0;
|
|
118
263
|
}
|
|
119
264
|
/**
|
|
120
|
-
* Resolve a model filename to full path
|
|
265
|
+
* Resolve a model filename to full path (handles base model names for sharded models)
|
|
121
266
|
*/
|
|
122
267
|
async resolveModelPath(filename) {
|
|
123
268
|
// If already absolute path, return it
|
|
@@ -125,18 +270,30 @@ class ModelScanner {
|
|
|
125
270
|
return filename;
|
|
126
271
|
}
|
|
127
272
|
const modelsDir = await this.getModelsDirectory();
|
|
128
|
-
// Try
|
|
129
|
-
const modelPath = path.join(modelsDir, filename);
|
|
273
|
+
// Try direct match first
|
|
130
274
|
const modelInfo = await this.getModelInfo(filename);
|
|
131
275
|
if (modelInfo && modelInfo.exists) {
|
|
132
|
-
return
|
|
276
|
+
return modelInfo.path;
|
|
133
277
|
}
|
|
134
278
|
// Try adding .gguf extension
|
|
135
279
|
if (!filename.toLowerCase().endsWith('.gguf')) {
|
|
136
280
|
const withExtension = `${filename}.gguf`;
|
|
137
281
|
const modelInfoWithExt = await this.getModelInfo(withExtension);
|
|
138
282
|
if (modelInfoWithExt && modelInfoWithExt.exists) {
|
|
139
|
-
return path
|
|
283
|
+
return modelInfoWithExt.path;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// Try matching by base model name for sharded models
|
|
287
|
+
const allModels = await this.scanModels();
|
|
288
|
+
for (const model of allModels) {
|
|
289
|
+
// Match by base model name (e.g., "Model" matches "Model-00001-of-00009.gguf")
|
|
290
|
+
if (model.baseModelName === filename) {
|
|
291
|
+
return model.path;
|
|
292
|
+
}
|
|
293
|
+
// Also match if user provides filename without extension
|
|
294
|
+
const filenameWithoutExt = model.filename.replace(/\.gguf$/i, '');
|
|
295
|
+
if (filenameWithoutExt === filename) {
|
|
296
|
+
return model.path;
|
|
140
297
|
}
|
|
141
298
|
}
|
|
142
299
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-scanner.js","sourceRoot":"","sources":["../../src/lib/model-scanner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"model-scanner.js","sourceRoot":"","sources":["../../src/lib/model-scanner.ts"],"names":[],"mappings":"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"}
|