@openinference/cli 1.2.0 → 1.4.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 +23 -14
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +51 -0
- package/dist/config.js.map +1 -1
- package/dist/hardware.d.ts +1 -0
- package/dist/hardware.d.ts.map +1 -1
- package/dist/hardware.js +1 -0
- package/dist/hardware.js.map +1 -1
- package/dist/index.js +51 -4
- package/dist/index.js.map +1 -1
- package/dist/manage.d.ts +13 -0
- package/dist/manage.d.ts.map +1 -1
- package/dist/manage.js +200 -0
- package/dist/manage.js.map +1 -1
- package/dist/ollama.d.ts +10 -0
- package/dist/ollama.d.ts.map +1 -1
- package/dist/ollama.js +56 -4
- package/dist/ollama.js.map +1 -1
- package/dist/recommend-run.d.ts.map +1 -1
- package/dist/recommend-run.js +6 -1
- package/dist/recommend-run.js.map +1 -1
- package/dist/recommend.d.ts +4 -2
- package/dist/recommend.d.ts.map +1 -1
- package/dist/recommend.js +7 -2
- package/dist/recommend.js.map +1 -1
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +41 -7
- package/dist/setup.js.map +1 -1
- package/dist/shell.d.ts.map +1 -1
- package/dist/shell.js +65 -11
- package/dist/shell.js.map +1 -1
- package/package.json +2 -2
package/dist/ollama.js
CHANGED
|
@@ -9,8 +9,11 @@ exports.ensureRemoteOllama = ensureRemoteOllama;
|
|
|
9
9
|
exports.pullModelHost = pullModelHost;
|
|
10
10
|
exports.pullModelRemote = pullModelRemote;
|
|
11
11
|
exports.isInferenceCrashError = isInferenceCrashError;
|
|
12
|
+
exports.classifyCrash = classifyCrash;
|
|
12
13
|
exports.verifyModel = verifyModel;
|
|
13
14
|
exports.listModelTags = listModelTags;
|
|
15
|
+
exports.modelSizeBytes = modelSizeBytes;
|
|
16
|
+
exports.deleteModel = deleteModel;
|
|
14
17
|
const node_child_process_1 = require("node:child_process");
|
|
15
18
|
const config_1 = require("./config");
|
|
16
19
|
const DEFAULT_URL = 'http://127.0.0.1:11434';
|
|
@@ -167,6 +170,27 @@ async function pullModelRemote(baseUrl, modelId) {
|
|
|
167
170
|
function isInferenceCrashError(msg) {
|
|
168
171
|
return /segmentation fault|process has terminated|out of memory|oom|cuda/i.test(msg);
|
|
169
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Turn a raw Ollama crash payload into an honest, specific message — instead of
|
|
175
|
+
* always blaming RAM. An OOM-kill (SIGKILL) and a segfault (SIGSEGV) have very
|
|
176
|
+
* different causes and fixes.
|
|
177
|
+
*/
|
|
178
|
+
function classifyCrash(text) {
|
|
179
|
+
const t = text.toLowerCase();
|
|
180
|
+
if (/signal: killed|out of memory|\boom\b|cannot allocate|bad_alloc/.test(t)) {
|
|
181
|
+
return ('Model crashed — the system ran out of memory (OOM-killed). ' +
|
|
182
|
+
'Pick a smaller model (e.g. smollm2:135m) or use a machine with more RAM.');
|
|
183
|
+
}
|
|
184
|
+
if (/cuda|rocm|hip error|gpu/.test(t)) {
|
|
185
|
+
return ('Model crashed on the GPU. Update your GPU driver, or run a smaller model on CPU.');
|
|
186
|
+
}
|
|
187
|
+
if (/segmentation fault|sigsegv|core dumped|process has terminated/.test(t)) {
|
|
188
|
+
return ('Model crashed (segmentation fault). This is often low memory, but a segfault ' +
|
|
189
|
+
'can also mean a CPU-compatibility issue or a corrupt/partial download. ' +
|
|
190
|
+
'Try re-pulling the model, or pick a smaller one (e.g. smollm2:135m).');
|
|
191
|
+
}
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
170
194
|
async function verifyModel(baseUrl, modelId) {
|
|
171
195
|
const url = resolveOllamaUrl(baseUrl);
|
|
172
196
|
console.log('Verifying model…');
|
|
@@ -183,10 +207,9 @@ async function verifyModel(baseUrl, modelId) {
|
|
|
183
207
|
});
|
|
184
208
|
if (!res.ok) {
|
|
185
209
|
const text = await res.text().catch(() => '');
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
}
|
|
210
|
+
const crash = classifyCrash(text);
|
|
211
|
+
if (crash)
|
|
212
|
+
throw new Error(`Model "${modelId}" — ${crash}`);
|
|
190
213
|
throw new Error(`Model verification failed: ${res.status} ${text}`);
|
|
191
214
|
}
|
|
192
215
|
const body = (await res.json());
|
|
@@ -203,4 +226,33 @@ async function listModelTags(ollamaUrl) {
|
|
|
203
226
|
const body = (await res.json());
|
|
204
227
|
return (body.models ?? []).map((m) => m.name).sort();
|
|
205
228
|
}
|
|
229
|
+
/** Bytes a model occupies on disk, or null if it isn't installed / can't be read. */
|
|
230
|
+
async function modelSizeBytes(baseUrl, modelId) {
|
|
231
|
+
const base = resolveOllamaUrl(baseUrl);
|
|
232
|
+
try {
|
|
233
|
+
const res = await fetch(`${base}/api/tags`, { signal: AbortSignal.timeout(15_000) });
|
|
234
|
+
if (!res.ok)
|
|
235
|
+
return null;
|
|
236
|
+
const body = (await res.json());
|
|
237
|
+
const hit = (body.models ?? []).find((m) => m.name === modelId || m.name === `${modelId}:latest`);
|
|
238
|
+
return hit?.size ?? null;
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/** Delete a model via the Ollama HTTP API (works for local CLI and remote/Docker). */
|
|
245
|
+
async function deleteModel(baseUrl, modelId) {
|
|
246
|
+
const base = resolveOllamaUrl(baseUrl);
|
|
247
|
+
const res = await fetch(`${base}/api/delete`, {
|
|
248
|
+
method: 'DELETE',
|
|
249
|
+
headers: { 'content-type': 'application/json' },
|
|
250
|
+
body: JSON.stringify({ name: modelId }),
|
|
251
|
+
signal: AbortSignal.timeout(30_000),
|
|
252
|
+
});
|
|
253
|
+
if (!res.ok) {
|
|
254
|
+
const text = await res.text().catch(() => '');
|
|
255
|
+
throw new Error(`Could not delete ${modelId} (${res.status}): ${text || res.statusText}`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
206
258
|
//# sourceMappingURL=ollama.js.map
|
package/dist/ollama.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":";;AAMA,4CAGC;AAED,8CAIC;AAED,gCAQC;AAED,sCAqCC;AAYD,0DAyBC;AAGD,gDAQC;AAED,sCAUC;AAKD,0CAmDC;AAED,sDAEC;AAED,
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommend-run.d.ts","sourceRoot":"","sources":["../src/recommend-run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"recommend-run.d.ts","sourceRoot":"","sources":["../src/recommend-run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM5D,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,wBAAgB,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG,IAAI,CAsBjE;AAED,wBAAgB,SAAS,CAAC,IAAI,GAAE,mBAAwB,GAAG,IAAI,CAE9D;AAED,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC"}
|
package/dist/recommend-run.js
CHANGED
|
@@ -7,13 +7,15 @@ const use_cases_1 = require("./use-cases");
|
|
|
7
7
|
Object.defineProperty(exports, "parseUseCaseArg", { enumerable: true, get: function () { return use_cases_1.parseUseCaseArg; } });
|
|
8
8
|
Object.defineProperty(exports, "useCaseLabel", { enumerable: true, get: function () { return use_cases_1.useCaseLabel; } });
|
|
9
9
|
const hardware_1 = require("./hardware");
|
|
10
|
+
const config_1 = require("./config");
|
|
10
11
|
const recommend_1 = require("./recommend");
|
|
11
12
|
const setup_1 = require("./setup");
|
|
12
13
|
function runRecommend(opts = {}) {
|
|
13
14
|
const hw = (0, hardware_1.detectHardware)();
|
|
14
15
|
const catalog = (0, recommend_1.loadCatalog)();
|
|
15
16
|
const useCase = opts.useCase ?? 'chat';
|
|
16
|
-
const
|
|
17
|
+
const crashed = (0, config_1.loadCrashedModels)();
|
|
18
|
+
const { pool, runnable } = (0, recommend_1.buildRecommendPool)(catalog, hw, useCase, opts.all, crashed);
|
|
17
19
|
const limit = opts.limit ?? 5;
|
|
18
20
|
const recs = (0, recommend_1.recommendTop)(runnable, hw.budgetGb, limit, useCase, hw.diskFreeGb, hw);
|
|
19
21
|
(0, setup_1.printRecommendPreview)(recs, hw, {
|
|
@@ -22,6 +24,9 @@ function runRecommend(opts = {}) {
|
|
|
22
24
|
runnableSize: runnable.length,
|
|
23
25
|
all: opts.all,
|
|
24
26
|
});
|
|
27
|
+
if (crashed.length > 0) {
|
|
28
|
+
console.log(` ${crashed.length} model(s) hidden because they crashed here — retry with \`oi pull <model>\`.\n`);
|
|
29
|
+
}
|
|
25
30
|
}
|
|
26
31
|
function runBrowse(opts = {}) {
|
|
27
32
|
runRecommend({ ...opts, limit: opts.limit ?? 20 });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommend-run.js","sourceRoot":"","sources":["../src/recommend-run.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"recommend-run.js","sourceRoot":"","sources":["../src/recommend-run.ts"],"names":[],"mappings":";;;AAaA,oCAsBC;AAED,8BAEC;AAtCD,2CAA4D;AAwCnD,gGAxCA,2BAAe,OAwCA;AAAE,6FAxCA,wBAAY,OAwCA;AAvCtC,yCAA4C;AAC5C,qCAA6C;AAC7C,2CAA4E;AAC5E,mCAAgD;AAQhD,SAAgB,YAAY,CAAC,OAA4B,EAAE;IACzD,MAAM,EAAE,GAAG,IAAA,yBAAc,GAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAA,uBAAW,GAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC;IACvC,MAAM,OAAO,GAAG,IAAA,0BAAiB,GAAE,CAAC;IACpC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAA,8BAAkB,EAAC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAEvF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAA,wBAAY,EAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAEpF,IAAA,6BAAqB,EAAC,IAAI,EAAE,EAAE,EAAE;QAC9B,OAAO;QACP,QAAQ,EAAE,IAAI,CAAC,MAAM;QACrB,YAAY,EAAE,QAAQ,CAAC,MAAM;QAC7B,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CACT,KAAK,OAAO,CAAC,MAAM,gFAAgF,CACpG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,SAAS,CAAC,OAA4B,EAAE;IACtD,YAAY,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;AACrD,CAAC"}
|
package/dist/recommend.d.ts
CHANGED
|
@@ -23,6 +23,8 @@ export type RecommendOptions = {
|
|
|
23
23
|
verifiedOnly?: boolean;
|
|
24
24
|
includeEmbed?: boolean;
|
|
25
25
|
hw?: HardwareProfile;
|
|
26
|
+
/** Model ids to drop (e.g. crashed on this machine). */
|
|
27
|
+
excludeIds?: string[];
|
|
26
28
|
};
|
|
27
29
|
export declare function loadCatalog(): CatalogModel[];
|
|
28
30
|
export declare function fitTier(needGb: number, budgetGb: number): FitTier | null;
|
|
@@ -34,10 +36,10 @@ export declare function fitsHardware(model: CatalogModel, hw: HardwareProfile):
|
|
|
34
36
|
export declare function filterRunnable(catalog: CatalogModel[], opts: RecommendOptions): CatalogModel[];
|
|
35
37
|
export declare function scoreModel(model: CatalogModel, budgetGb: number, useCase?: UseCaseId, hw?: HardwareProfile): Recommendation | null;
|
|
36
38
|
export declare function recommendTop(catalog: CatalogModel[], budgetGb: number, limit?: number, useCase?: UseCaseId, diskFreeGb?: number, hw?: HardwareProfile): Recommendation[];
|
|
37
|
-
export declare function buildRecommendPool(catalog: CatalogModel[], hw: HardwareProfile, useCase: UseCaseId, all?: boolean): {
|
|
39
|
+
export declare function buildRecommendPool(catalog: CatalogModel[], hw: HardwareProfile, useCase: UseCaseId, all?: boolean, excludeIds?: string[]): {
|
|
38
40
|
pool: CatalogModel[];
|
|
39
41
|
runnable: CatalogModel[];
|
|
40
42
|
};
|
|
41
43
|
/** All catalog models that fit RAM + disk (ignores use case). */
|
|
42
|
-
export declare function hardwareFittingModels(catalog: CatalogModel[], hw: HardwareProfile, all?: boolean): CatalogModel[];
|
|
44
|
+
export declare function hardwareFittingModels(catalog: CatalogModel[], hw: HardwareProfile, all?: boolean, excludeIds?: string[]): CatalogModel[];
|
|
43
45
|
//# sourceMappingURL=recommend.d.ts.map
|
package/dist/recommend.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../src/recommend.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;AAEtD,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG;IAC1C,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,EAAE,CAAC,EAAE,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../src/recommend.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;AAEtD,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG;IAC1C,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,EAAE,CAAC,EAAE,eAAe,CAAC;IACrB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAQF,wBAAgB,WAAW,IAAI,YAAY,EAAE,CAG5C;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAMxE;AAcD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAE7C;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,eAAe,GAAG,MAAM,CAM7E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,eAAe,GAAG,OAAO,GAAG,IAAI,CAYrF;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAC5B,OAAO,EAAE,YAAY,EAAE,EACvB,IAAI,EAAE,gBAAgB,GACrB,YAAY,EAAE,CAmBhB;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,SAAS,EACnB,EAAE,CAAC,EAAE,eAAe,GACnB,cAAc,GAAG,IAAI,CAWvB;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,YAAY,EAAE,EACvB,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAI,EACT,OAAO,CAAC,EAAE,SAAS,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,EAAE,CAAC,EAAE,eAAe,GACnB,cAAc,EAAE,CAWlB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,YAAY,EAAE,EACvB,EAAE,EAAE,eAAe,EACnB,OAAO,EAAE,SAAS,EAClB,GAAG,CAAC,EAAE,OAAO,EACb,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB;IAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;CAAE,CAmBpD;AAED,iEAAiE;AACjE,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,YAAY,EAAE,EACvB,EAAE,EAAE,eAAe,EACnB,GAAG,CAAC,EAAE,OAAO,EACb,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,YAAY,EAAE,CAahB"}
|
package/dist/recommend.js
CHANGED
|
@@ -76,7 +76,10 @@ function fitsHardware(model, hw) {
|
|
|
76
76
|
function filterRunnable(catalog, opts) {
|
|
77
77
|
const disk = opts.diskFreeGb ?? 0;
|
|
78
78
|
const hw = opts.hw;
|
|
79
|
+
const excluded = opts.excludeIds && opts.excludeIds.length ? new Set(opts.excludeIds) : null;
|
|
79
80
|
return catalog.filter((m) => {
|
|
81
|
+
if (excluded?.has(m.id))
|
|
82
|
+
return false;
|
|
80
83
|
if (!opts.includeEmbed && m.kind === 'embed')
|
|
81
84
|
return false;
|
|
82
85
|
if (opts.verifiedOnly && !m.verified)
|
|
@@ -118,7 +121,7 @@ function recommendTop(catalog, budgetGb, limit = 5, useCase, diskFreeGb, hw) {
|
|
|
118
121
|
scored.sort((a, b) => b.score - a.score);
|
|
119
122
|
return scored.slice(0, limit);
|
|
120
123
|
}
|
|
121
|
-
function buildRecommendPool(catalog, hw, useCase, all) {
|
|
124
|
+
function buildRecommendPool(catalog, hw, useCase, all, excludeIds) {
|
|
122
125
|
let pool = catalog.filter((m) => m.kind !== 'embed');
|
|
123
126
|
if (!all) {
|
|
124
127
|
const verified = pool.filter((m) => m.verified);
|
|
@@ -131,11 +134,12 @@ function buildRecommendPool(catalog, hw, useCase, all) {
|
|
|
131
134
|
diskFreeGb: hw.diskFreeGb,
|
|
132
135
|
includeEmbed: false,
|
|
133
136
|
hw,
|
|
137
|
+
excludeIds,
|
|
134
138
|
});
|
|
135
139
|
return { pool, runnable };
|
|
136
140
|
}
|
|
137
141
|
/** All catalog models that fit RAM + disk (ignores use case). */
|
|
138
|
-
function hardwareFittingModels(catalog, hw, all) {
|
|
142
|
+
function hardwareFittingModels(catalog, hw, all, excludeIds) {
|
|
139
143
|
let pool = catalog.filter((m) => m.kind !== 'embed');
|
|
140
144
|
if (!all) {
|
|
141
145
|
const verified = pool.filter((m) => m.verified);
|
|
@@ -147,6 +151,7 @@ function hardwareFittingModels(catalog, hw, all) {
|
|
|
147
151
|
diskFreeGb: hw.diskFreeGb,
|
|
148
152
|
includeEmbed: false,
|
|
149
153
|
hw,
|
|
154
|
+
excludeIds,
|
|
150
155
|
});
|
|
151
156
|
}
|
|
152
157
|
//# sourceMappingURL=recommend.js.map
|
package/dist/recommend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommend.js","sourceRoot":"","sources":["../src/recommend.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"recommend.js","sourceRoot":"","sources":["../src/recommend.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AASlD,OAAO,
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AASlD,OAAO,EAAoB,cAAc,EAA8B,MAAM,YAAY,CAAC;AA8B1F,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AAErB,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAkFF,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiLhE;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,cAAc,EAAE,EACtB,EAAE,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,EACrC,IAAI,EAAE;IAAE,OAAO,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAClF,IAAI,CAqBN"}
|
package/dist/setup.js
CHANGED
|
@@ -13,15 +13,15 @@ const use_cases_1 = require("./use-cases");
|
|
|
13
13
|
exports.WIZARD_PICK_COUNT = 15;
|
|
14
14
|
/** How many to show before the user asks for more. */
|
|
15
15
|
exports.WIZARD_SHOW_COUNT = 5;
|
|
16
|
-
async function resolvePool(catalog, hw, opts) {
|
|
16
|
+
async function resolvePool(catalog, hw, opts, excludeIds) {
|
|
17
17
|
const auto = Boolean(opts.yes);
|
|
18
18
|
const lockedUseCase = opts.useCase;
|
|
19
19
|
if (auto || opts.model) {
|
|
20
20
|
const useCase = lockedUseCase ?? 'chat';
|
|
21
|
-
let { pool, runnable } = (0, recommend_1.buildRecommendPool)(catalog, hw, useCase, opts.all);
|
|
21
|
+
let { pool, runnable } = (0, recommend_1.buildRecommendPool)(catalog, hw, useCase, opts.all, excludeIds);
|
|
22
22
|
let hardwareFallback = false;
|
|
23
23
|
if (runnable.length === 0) {
|
|
24
|
-
runnable = (0, recommend_1.hardwareFittingModels)(catalog, hw, opts.all);
|
|
24
|
+
runnable = (0, recommend_1.hardwareFittingModels)(catalog, hw, opts.all, excludeIds);
|
|
25
25
|
pool = runnable;
|
|
26
26
|
hardwareFallback = runnable.length > 0;
|
|
27
27
|
}
|
|
@@ -36,12 +36,12 @@ async function resolvePool(catalog, hw, opts) {
|
|
|
36
36
|
(0, prompt_1.printHardwareScan)(hw);
|
|
37
37
|
scanned = true;
|
|
38
38
|
}
|
|
39
|
-
let { pool, runnable } = (0, recommend_1.buildRecommendPool)(catalog, hw, useCase, opts.all);
|
|
39
|
+
let { pool, runnable } = (0, recommend_1.buildRecommendPool)(catalog, hw, useCase, opts.all, excludeIds);
|
|
40
40
|
let hardwareFallback = false;
|
|
41
41
|
console.log(` Use case: ${(0, use_cases_1.useCaseLabel)(useCase)}`);
|
|
42
42
|
console.log(` Catalog: ${pool.length} models for this goal`);
|
|
43
43
|
if (runnable.length === 0) {
|
|
44
|
-
const anyFit = (0, recommend_1.hardwareFittingModels)(catalog, hw, opts.all);
|
|
44
|
+
const anyFit = (0, recommend_1.hardwareFittingModels)(catalog, hw, opts.all, excludeIds);
|
|
45
45
|
if (anyFit.length > 0) {
|
|
46
46
|
console.log(` 0 models for this goal on your hardware, but ${anyFit.length} other small models fit.\n`);
|
|
47
47
|
const ok = lockedUseCase
|
|
@@ -84,7 +84,10 @@ async function runSetup(opts) {
|
|
|
84
84
|
const auto = Boolean(opts.yes);
|
|
85
85
|
const hw = (0, hardware_1.detectHardware)();
|
|
86
86
|
const catalog = (0, recommend_1.loadCatalog)();
|
|
87
|
-
|
|
87
|
+
// Models that crashed here before are dropped from recommendations so the
|
|
88
|
+
// wizard can't loop on the same broken pick. Explicit -m still overrides.
|
|
89
|
+
const crashed = (0, config_1.loadCrashedModels)();
|
|
90
|
+
const resolved = await resolvePool(catalog, hw, opts, crashed);
|
|
88
91
|
if (!resolved)
|
|
89
92
|
return;
|
|
90
93
|
const { useCase, runnable, hardwareFallback } = resolved;
|
|
@@ -126,6 +129,9 @@ async function runSetup(opts) {
|
|
|
126
129
|
throw new Error(`Model "${opts.model}" does not fit this machine.`);
|
|
127
130
|
chosen = { ...m, fit, score: 0 };
|
|
128
131
|
}
|
|
132
|
+
if (crashed.includes(chosen.id)) {
|
|
133
|
+
console.log(` Note: ${chosen.name} crashed here before — retrying because you asked for it.\n`);
|
|
134
|
+
}
|
|
129
135
|
if (!auto) {
|
|
130
136
|
console.log(` Using model: ${chosen.name} (${chosen.id})\n`);
|
|
131
137
|
cpuNote();
|
|
@@ -170,9 +176,22 @@ async function runSetup(opts) {
|
|
|
170
176
|
console.log(' Pick another model:\n'); // browse → loop
|
|
171
177
|
}
|
|
172
178
|
}
|
|
179
|
+
// Pre-flight disk check (fresh read — disk may have shrunk during this run).
|
|
180
|
+
if (chosen.sizeMb > 0) {
|
|
181
|
+
const freeGb = (0, hardware_1.detectDiskFreeGb)();
|
|
182
|
+
if (freeGb > 0 && !(0, hardware_1.fitsDisk)(chosen.sizeMb, freeGb)) {
|
|
183
|
+
const needGb = (chosen.sizeMb / 1024).toFixed(1);
|
|
184
|
+
throw new Error(`Not enough disk for ${chosen.name} (~${needGb} GB needed, ${freeGb} GB free). ` +
|
|
185
|
+
'Free up space or remove a model with `oi rm <model>`.');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Track whether the model was already on disk, so a failed test only ever
|
|
189
|
+
// cleans up a model *we* just pulled — never one the user already had.
|
|
190
|
+
let preexisting = false;
|
|
173
191
|
if (remote) {
|
|
174
192
|
console.log(' Connecting to Ollama…\n');
|
|
175
193
|
await (0, ollama_1.ensureRemoteOllama)(baseUrl);
|
|
194
|
+
preexisting = (await (0, ollama_1.listModelTags)(baseUrl).catch(() => [])).includes(chosen.id);
|
|
176
195
|
console.log(' Downloading model…\n');
|
|
177
196
|
await (0, ollama_1.pullModelRemote)(baseUrl, chosen.id);
|
|
178
197
|
}
|
|
@@ -189,11 +208,26 @@ async function runSetup(opts) {
|
|
|
189
208
|
}
|
|
190
209
|
console.log(' Starting Ollama…\n');
|
|
191
210
|
await (0, ollama_1.ensureHostOllamaRunning)(baseUrl);
|
|
211
|
+
preexisting = (await (0, ollama_1.listModelTags)(baseUrl).catch(() => [])).includes(chosen.id);
|
|
192
212
|
console.log(' Downloading model…\n');
|
|
193
213
|
await (0, ollama_1.pullModelHost)(chosen.id);
|
|
194
214
|
}
|
|
195
215
|
console.log(' Running a quick test…');
|
|
196
|
-
|
|
216
|
+
try {
|
|
217
|
+
await (0, ollama_1.verifyModel)(baseUrl, chosen.id);
|
|
218
|
+
}
|
|
219
|
+
catch (e) {
|
|
220
|
+
// Remember this model crashed here so we stop recommending it.
|
|
221
|
+
(0, config_1.recordCrashedModel)(chosen.id);
|
|
222
|
+
// The model pulled but won't run here — don't leave it eating disk.
|
|
223
|
+
if (!preexisting) {
|
|
224
|
+
await (0, ollama_1.deleteModel)(baseUrl, chosen.id).catch(() => { });
|
|
225
|
+
console.log(` Removed ${chosen.id} after the failed test (freed disk).\n`);
|
|
226
|
+
}
|
|
227
|
+
throw e;
|
|
228
|
+
}
|
|
229
|
+
// It worked — forget any past crash for this model.
|
|
230
|
+
(0, config_1.clearCrashedModel)(chosen.id);
|
|
197
231
|
const cfg = {
|
|
198
232
|
ollamaUrl: baseUrl,
|
|
199
233
|
model: chosen.id,
|
package/dist/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/shell.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":"AAwBA,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":"AAwBA,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAmbF,wBAAsB,QAAQ,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4ErE"}
|
package/dist/shell.js
CHANGED
|
@@ -27,11 +27,13 @@ const green = (s) => `\x1b[32m${s}\x1b[0m`;
|
|
|
27
27
|
const red = (s) => `\x1b[31m${s}\x1b[0m`;
|
|
28
28
|
const COMMANDS = [
|
|
29
29
|
{ name: '/setup', help: 'Pick a goal, scan hardware, install a model', group: 'Setup & models' },
|
|
30
|
+
{ name: '/search', args: '[query]', help: 'Search models (installed + available)', group: 'Setup & models' },
|
|
30
31
|
{ name: '/recommend', args: '[goal]', help: 'Best models for your hardware', group: 'Setup & models' },
|
|
31
|
-
{ name: '/
|
|
32
|
-
{ name: '/use', args: '<model>', help: 'Switch active model (
|
|
33
|
-
{ name: '/
|
|
34
|
-
{ name: '/
|
|
32
|
+
{ name: '/install', args: '<model>', help: 'Download a model', group: 'Setup & models' },
|
|
33
|
+
{ name: '/use', args: '<model>', help: 'Switch active model (installs if needed)', group: 'Setup & models' },
|
|
34
|
+
{ name: '/info', args: '<model>', help: 'Show details for a model', group: 'Setup & models' },
|
|
35
|
+
{ name: '/list', help: 'List installed models', group: 'Setup & models' },
|
|
36
|
+
{ name: '/remove', args: '<model>', help: 'Delete a model (frees disk)', group: 'Setup & models' },
|
|
35
37
|
{ name: '/storage', help: 'Where models are stored', group: 'Setup & models' },
|
|
36
38
|
{ name: '/config', help: 'Show model & connection settings', group: 'Setup & models' },
|
|
37
39
|
{ name: '/status', help: 'Show current setup', group: 'Session' },
|
|
@@ -83,7 +85,7 @@ function printWelcome() {
|
|
|
83
85
|
console.log(` Chatting with ${bold(cfg.modelName)} ${dim('· ' + (0, hardware_1.formatHardware)(hw))}`);
|
|
84
86
|
console.log('');
|
|
85
87
|
console.log(` ${dim('Ask anything below, or:')}`);
|
|
86
|
-
console.log(` ${brand('/
|
|
88
|
+
console.log(` ${brand('/list')} ${dim('see installed')} ${brand('/use <model>')} ${dim('switch')}`);
|
|
87
89
|
console.log(` ${brand('/status')} ${dim('your setup')} ${brand('/help')} ${dim('all commands')}`);
|
|
88
90
|
}
|
|
89
91
|
else {
|
|
@@ -118,7 +120,7 @@ function printHelp() {
|
|
|
118
120
|
}
|
|
119
121
|
console.log('');
|
|
120
122
|
console.log(` ${dim('goals:')} ${USE_CASE_IDS.join(' · ')}`);
|
|
121
|
-
console.log(dim(' Custom model? /
|
|
123
|
+
console.log(dim(' Custom model? /install or /use any tag from ollama.com/library'));
|
|
122
124
|
console.log(dim(' Anything that is not a /command is sent to the active model.'));
|
|
123
125
|
console.log('');
|
|
124
126
|
}
|
|
@@ -233,21 +235,50 @@ async function dispatch(raw, history, opts) {
|
|
|
233
235
|
(0, recommend_run_1.runBrowse)({ useCase, all: true });
|
|
234
236
|
return {};
|
|
235
237
|
}
|
|
238
|
+
case 'search':
|
|
239
|
+
case 'find':
|
|
240
|
+
await (0, manage_1.runSearch)(arg, { ollamaUrl: opts.ollamaUrl });
|
|
241
|
+
return {};
|
|
242
|
+
case 'info':
|
|
243
|
+
case 'show':
|
|
244
|
+
if (!arg) {
|
|
245
|
+
console.log('\n Usage: /info <model> (Tab to autocomplete)\n');
|
|
246
|
+
return {};
|
|
247
|
+
}
|
|
248
|
+
await (0, manage_1.runInfo)(arg, { ollamaUrl: opts.ollamaUrl });
|
|
249
|
+
return {};
|
|
236
250
|
case 'use':
|
|
237
251
|
if (!arg) {
|
|
238
252
|
console.log('\n Usage: /use <model> (Tab to autocomplete)\n');
|
|
239
253
|
return {};
|
|
240
254
|
}
|
|
241
255
|
await (0, manage_1.runUse)(arg, { ollamaUrl: opts.ollamaUrl, docker: opts.remote });
|
|
256
|
+
await refreshInstalled(opts);
|
|
242
257
|
return {};
|
|
258
|
+
case 'install':
|
|
243
259
|
case 'pull':
|
|
260
|
+
case 'add':
|
|
244
261
|
if (!arg) {
|
|
245
|
-
console.log('\n Usage: /
|
|
262
|
+
console.log('\n Usage: /install <model> (Tab to autocomplete)\n');
|
|
246
263
|
return {};
|
|
247
264
|
}
|
|
248
265
|
await (0, manage_1.runPull)(arg, { ollamaUrl: opts.ollamaUrl, docker: opts.remote });
|
|
266
|
+
await refreshInstalled(opts);
|
|
267
|
+
return {};
|
|
268
|
+
case 'remove':
|
|
269
|
+
case 'rm':
|
|
270
|
+
case 'uninstall':
|
|
271
|
+
case 'delete':
|
|
272
|
+
if (!arg) {
|
|
273
|
+
console.log('\n Usage: /remove <model> (Tab to autocomplete)\n');
|
|
274
|
+
return {};
|
|
275
|
+
}
|
|
276
|
+
await (0, manage_1.runRemove)(arg, { ollamaUrl: opts.ollamaUrl, docker: opts.remote });
|
|
277
|
+
await refreshInstalled(opts);
|
|
249
278
|
return {};
|
|
279
|
+
case 'list':
|
|
250
280
|
case 'models':
|
|
281
|
+
case 'ls':
|
|
251
282
|
await showModels(opts);
|
|
252
283
|
return {};
|
|
253
284
|
case 'storage':
|
|
@@ -293,10 +324,30 @@ function loadCatalogIds() {
|
|
|
293
324
|
}
|
|
294
325
|
return catalogIds;
|
|
295
326
|
}
|
|
327
|
+
// Installed models, cached for `/rm` completion. Refreshed after pulls/removes.
|
|
328
|
+
let installedTags = [];
|
|
329
|
+
async function refreshInstalled(opts) {
|
|
330
|
+
try {
|
|
331
|
+
installedTags = await (0, ollama_1.listModelTags)(opts.ollamaUrl);
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
installedTags = [];
|
|
335
|
+
}
|
|
336
|
+
}
|
|
296
337
|
function suggest(line) {
|
|
297
338
|
if (!line.startsWith('/'))
|
|
298
339
|
return [];
|
|
299
|
-
|
|
340
|
+
// /remove completes from models actually on disk, not the whole catalog.
|
|
341
|
+
const remove = /^(\/remove|\/rm|\/uninstall|\/delete)\s+(.*)$/.exec(line);
|
|
342
|
+
if (remove) {
|
|
343
|
+
const [, cmd, partial] = remove;
|
|
344
|
+
return installedTags
|
|
345
|
+
.filter((id) => id.startsWith(partial))
|
|
346
|
+
.slice(0, 7)
|
|
347
|
+
.map((id) => ({ value: `${cmd} ${id}`, label: id, submit: true }));
|
|
348
|
+
}
|
|
349
|
+
// /install, /use, /info complete from the catalog.
|
|
350
|
+
const model = /^(\/install|\/pull|\/add|\/use|\/info|\/show)\s+(.*)$/.exec(line);
|
|
300
351
|
if (model) {
|
|
301
352
|
const [, cmd, partial] = model;
|
|
302
353
|
const ids = loadCatalogIds();
|
|
@@ -304,9 +355,9 @@ function suggest(line) {
|
|
|
304
355
|
.filter((id) => id.startsWith(partial))
|
|
305
356
|
.slice(0, 7)
|
|
306
357
|
.map((id) => ({ value: `${cmd} ${id}`, label: id, submit: true }));
|
|
307
|
-
// Let the user
|
|
358
|
+
// Let the user install ANY Ollama tag, even if it's not in our catalog.
|
|
308
359
|
if (partial && !ids.includes(partial)) {
|
|
309
|
-
hits.push({ value: `${cmd} ${partial}`, label: partial, hint: '
|
|
360
|
+
hits.push({ value: `${cmd} ${partial}`, label: partial, hint: 'use this exact tag', submit: true });
|
|
310
361
|
}
|
|
311
362
|
return hits;
|
|
312
363
|
}
|
|
@@ -323,8 +374,9 @@ function suggest(line) {
|
|
|
323
374
|
// Once a command has a space/args, stop showing the command menu.
|
|
324
375
|
if (/\s/.test(line))
|
|
325
376
|
return [];
|
|
377
|
+
const ARG_CMDS = new Set(['/install', '/use', '/info', '/remove']);
|
|
326
378
|
return COMMANDS.filter((c) => c.name.startsWith(line)).map((c) => {
|
|
327
|
-
const needsArg =
|
|
379
|
+
const needsArg = ARG_CMDS.has(c.name);
|
|
328
380
|
return {
|
|
329
381
|
value: needsArg ? `${c.name} ` : c.name,
|
|
330
382
|
label: `${c.name}${c.args ? ' ' + c.args : ''}`,
|
|
@@ -356,6 +408,8 @@ function saveHistory(lines) {
|
|
|
356
408
|
}
|
|
357
409
|
async function runShell(opts = {}) {
|
|
358
410
|
printBanner();
|
|
411
|
+
// Seed installed-model list for /rm completion (best-effort, non-blocking on failure).
|
|
412
|
+
void refreshInstalled(opts);
|
|
359
413
|
const history = [];
|
|
360
414
|
const cmdHistory = loadHistory();
|
|
361
415
|
const reader = new linereader_1.LineReader({
|