@openinference/cli 0.3.0 → 1.0.2
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 +74 -0
- package/data/models.json +643 -120
- package/dist/chat.d.ts.map +1 -1
- package/dist/chat.js +1 -5
- package/dist/chat.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -1
- package/dist/config.js.map +1 -1
- package/dist/data/models.json +643 -120
- package/dist/hardware.d.ts +5 -0
- package/dist/hardware.d.ts.map +1 -1
- package/dist/hardware.js +57 -4
- package/dist/hardware.js.map +1 -1
- package/dist/index.js +125 -53
- package/dist/index.js.map +1 -1
- package/dist/manage.d.ts +11 -0
- package/dist/manage.d.ts.map +1 -0
- package/dist/manage.js +118 -0
- package/dist/manage.js.map +1 -0
- package/dist/ollama.d.ts +1 -0
- package/dist/ollama.d.ts.map +1 -1
- package/dist/ollama.js +12 -3
- package/dist/ollama.js.map +1 -1
- package/dist/prompt.d.ts +16 -0
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +129 -11
- package/dist/prompt.js.map +1 -1
- package/dist/recommend-run.d.ts +6 -4
- package/dist/recommend-run.d.ts.map +1 -1
- package/dist/recommend-run.js +20 -25
- package/dist/recommend-run.js.map +1 -1
- package/dist/recommend.d.ts +20 -1
- package/dist/recommend.d.ts.map +1 -1
- package/dist/recommend.js +68 -22
- package/dist/recommend.js.map +1 -1
- package/dist/setup.d.ts +12 -4
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +141 -58
- package/dist/setup.js.map +1 -1
- package/dist/start.d.ts +2 -2
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +4 -9
- package/dist/start.js.map +1 -1
- package/dist/use-cases.d.ts +17 -0
- package/dist/use-cases.d.ts.map +1 -0
- package/dist/use-cases.js +120 -0
- package/dist/use-cases.js.map +1 -0
- package/package.json +8 -2
package/dist/hardware.d.ts
CHANGED
|
@@ -5,9 +5,14 @@ export type HardwareProfile = {
|
|
|
5
5
|
hasGpu: boolean;
|
|
6
6
|
gpuName: string | null;
|
|
7
7
|
platform: NodeJS.Platform;
|
|
8
|
+
osLabel: string;
|
|
9
|
+
diskFreeGb: number;
|
|
8
10
|
/** Usable memory budget for model weights (GB). */
|
|
9
11
|
budgetGb: number;
|
|
10
12
|
};
|
|
11
13
|
export declare function detectHardware(): HardwareProfile;
|
|
12
14
|
export declare function formatHardware(hw: HardwareProfile): string;
|
|
15
|
+
export declare function ollamaModelsPath(): string;
|
|
16
|
+
/** Model fits if download size + reserve fits on disk. Tighter reserve on small disks. */
|
|
17
|
+
export declare function fitsDisk(modelSizeMb: number, diskFreeGb: number): boolean;
|
|
13
18
|
//# sourceMappingURL=hardware.d.ts.map
|
package/dist/hardware.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hardware.d.ts","sourceRoot":"","sources":["../src/hardware.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;
|
|
1
|
+
{"version":3,"file":"hardware.d.ts","sourceRoot":"","sources":["../src/hardware.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAsEF,wBAAgB,cAAc,IAAI,eAAe,CAmBhD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,eAAe,GAAG,MAAM,CAK1D;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,0FAA0F;AAC1F,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAKzE"}
|
package/dist/hardware.js
CHANGED
|
@@ -5,7 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.detectHardware = detectHardware;
|
|
7
7
|
exports.formatHardware = formatHardware;
|
|
8
|
+
exports.ollamaModelsPath = ollamaModelsPath;
|
|
9
|
+
exports.fitsDisk = fitsDisk;
|
|
10
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
11
|
const node_os_1 = __importDefault(require("node:os"));
|
|
12
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
13
|
const node_child_process_1 = require("node:child_process");
|
|
10
14
|
function roundGb(bytes) {
|
|
11
15
|
return Math.round((bytes / 1024 ** 3) * 10) / 10;
|
|
@@ -33,15 +37,51 @@ function detectVram() {
|
|
|
33
37
|
return { vramGb: 0, name: null };
|
|
34
38
|
}
|
|
35
39
|
}
|
|
40
|
+
function detectDiskFreeGb() {
|
|
41
|
+
const home = node_os_1.default.homedir();
|
|
42
|
+
if (process.platform === 'win32') {
|
|
43
|
+
const drive = node_path_1.default.parse(home).root || 'C:\\';
|
|
44
|
+
const ps = (0, node_child_process_1.spawnSync)('powershell', ['-NoProfile', '-Command', `(Get-PSDrive -Name '${drive.replace(':\\', '')}').Free`], { encoding: 'utf8', timeout: 8000, windowsHide: true });
|
|
45
|
+
if (ps.status === 0 && ps.stdout?.trim()) {
|
|
46
|
+
const bytes = parseInt(ps.stdout.trim(), 10);
|
|
47
|
+
if (!Number.isNaN(bytes))
|
|
48
|
+
return roundGb(bytes);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
const st = node_fs_1.default.statfsSync(home);
|
|
53
|
+
return roundGb(st.bfree * st.bsize);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function osLabel() {
|
|
60
|
+
const type = node_os_1.default.type();
|
|
61
|
+
const rel = node_os_1.default.release();
|
|
62
|
+
if (type === 'Windows_NT')
|
|
63
|
+
return `Windows ${rel}`;
|
|
64
|
+
if (type === 'Darwin')
|
|
65
|
+
return `macOS ${rel}`;
|
|
66
|
+
return `${type} ${rel}`;
|
|
67
|
+
}
|
|
68
|
+
function memoryBudgetGb(ramGb, hasGpu, vramGb) {
|
|
69
|
+
// Scale OS reserve for small cloud VMs (e.g. AWS 4 GB → reports ~3.7 GB)
|
|
70
|
+
const headroom = ramGb <= 4 ? 1.2 : ramGb <= 6 ? 2 : ramGb <= 8 ? 2.5 : 4;
|
|
71
|
+
const ramBudget = Math.max(0.35, ramGb - headroom);
|
|
72
|
+
if (hasGpu && vramGb > 0) {
|
|
73
|
+
const vramBudget = Math.max(0, vramGb - 0.5);
|
|
74
|
+
return Math.max(vramBudget, ramBudget * 0.6);
|
|
75
|
+
}
|
|
76
|
+
return ramBudget;
|
|
77
|
+
}
|
|
36
78
|
function detectHardware() {
|
|
37
79
|
const ramGb = roundGb(node_os_1.default.totalmem());
|
|
38
80
|
const cpuCores = node_os_1.default.cpus().length;
|
|
39
81
|
const { vramGb, name } = detectVram();
|
|
40
82
|
const hasGpu = vramGb > 0;
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
const ramBudget = Math.max(0, ramGb - osHeadroom);
|
|
44
|
-
const budgetGb = hasGpu ? Math.max(vramBudget, ramBudget * 0.6) : ramBudget;
|
|
83
|
+
const diskFreeGb = detectDiskFreeGb();
|
|
84
|
+
const budgetGb = memoryBudgetGb(ramGb, hasGpu, vramGb);
|
|
45
85
|
return {
|
|
46
86
|
ramGb,
|
|
47
87
|
cpuCores,
|
|
@@ -49,6 +89,8 @@ function detectHardware() {
|
|
|
49
89
|
hasGpu,
|
|
50
90
|
gpuName: name,
|
|
51
91
|
platform: process.platform,
|
|
92
|
+
osLabel: osLabel(),
|
|
93
|
+
diskFreeGb,
|
|
52
94
|
budgetGb: Math.round(budgetGb * 10) / 10,
|
|
53
95
|
};
|
|
54
96
|
}
|
|
@@ -58,4 +100,15 @@ function formatHardware(hw) {
|
|
|
58
100
|
: 'CPU inference';
|
|
59
101
|
return `${hw.ramGb} GB RAM · ${hw.cpuCores} cores · ${gpu}`;
|
|
60
102
|
}
|
|
103
|
+
function ollamaModelsPath() {
|
|
104
|
+
return node_path_1.default.join(node_os_1.default.homedir(), '.ollama', 'models');
|
|
105
|
+
}
|
|
106
|
+
/** Model fits if download size + reserve fits on disk. Tighter reserve on small disks. */
|
|
107
|
+
function fitsDisk(modelSizeMb, diskFreeGb) {
|
|
108
|
+
if (diskFreeGb <= 0)
|
|
109
|
+
return true;
|
|
110
|
+
const reserveGb = diskFreeGb < 15 ? 0.8 : 2;
|
|
111
|
+
const needGb = modelSizeMb / 1024 + reserveGb;
|
|
112
|
+
return diskFreeGb >= needGb;
|
|
113
|
+
}
|
|
61
114
|
//# sourceMappingURL=hardware.js.map
|
package/dist/hardware.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hardware.js","sourceRoot":"","sources":["../src/hardware.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"hardware.js","sourceRoot":"","sources":["../src/hardware.ts"],"names":[],"mappings":";;;;;AAsFA,wCAmBC;AAED,wCAKC;AAED,4CAEC;AAGD,4BAKC;AA5HD,sDAAyB;AACzB,sDAAyB;AACzB,0DAA6B;AAC7B,2DAA+C;AAe/C,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAA,8BAAS,EAAC,YAAY,EAAE,CAAC,+BAA+B,EAAE,+BAA+B,CAAC,EAAE;YACpG,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE;YAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC1E,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;QACjD,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,IAAI,GAAG,iBAAE,CAAC,OAAO,EAAE,CAAC;IAE1B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,mBAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC;QAC9C,MAAM,EAAE,GAAG,IAAA,8BAAS,EAClB,YAAY,EACZ,CAAC,YAAY,EAAE,UAAU,EAAE,uBAAuB,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,EACpF,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CACvD,CAAC;QACF,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,iBAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,OAAO,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,OAAO;IACd,MAAM,IAAI,GAAG,iBAAE,CAAC,IAAI,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,iBAAE,CAAC,OAAO,EAAE,CAAC;IACzB,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,WAAW,GAAG,EAAE,CAAC;IACnD,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,GAAG,EAAE,CAAC;IAC7C,OAAO,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,MAAe,EAAE,MAAc;IACpE,yEAAyE;IACzE,MAAM,QAAQ,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC;IAEnD,IAAI,MAAM,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,GAAG,GAAG,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,iBAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,iBAAE,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;IAC1B,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvD,OAAO;QACL,KAAK;QACL,QAAQ;QACR,MAAM;QACN,MAAM;QACN,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,EAAE;QAClB,UAAU;QACV,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,GAAG,EAAE;KACzC,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAAC,EAAmB;IAChD,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM;QACnB,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,IAAI,KAAK,KAAK,EAAE,CAAC,MAAM,WAAW;QACjD,CAAC,CAAC,eAAe,CAAC;IACpB,OAAO,GAAG,EAAE,CAAC,KAAK,aAAa,EAAE,CAAC,QAAQ,YAAY,GAAG,EAAE,CAAC;AAC9D,CAAC;AAED,SAAgB,gBAAgB;IAC9B,OAAO,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,0FAA0F;AAC1F,SAAgB,QAAQ,CAAC,WAAmB,EAAE,UAAkB;IAC9D,IAAI,UAAU,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,SAAS,GAAG,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C,OAAO,UAAU,IAAI,MAAM,CAAC;AAC9B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,9 @@ const start_1 = require("./start");
|
|
|
7
7
|
const recommend_run_1 = require("./recommend-run");
|
|
8
8
|
const chat_1 = require("./chat");
|
|
9
9
|
const chat_repl_1 = require("./chat-repl");
|
|
10
|
+
const manage_1 = require("./manage");
|
|
11
|
+
const use_cases_1 = require("./use-cases");
|
|
12
|
+
const hardware_1 = require("./hardware");
|
|
10
13
|
const program = new commander_1.Command();
|
|
11
14
|
function fail(e) {
|
|
12
15
|
const msg = e instanceof Error ? e.message : String(e);
|
|
@@ -15,60 +18,65 @@ function fail(e) {
|
|
|
15
18
|
}
|
|
16
19
|
const urlOption = {
|
|
17
20
|
flags: '--ollama-url <url>',
|
|
18
|
-
description: '
|
|
21
|
+
description: 'Ollama API URL (default: $OLLAMA_URL, saved config, or localhost)',
|
|
19
22
|
};
|
|
20
23
|
const dockerOption = {
|
|
21
24
|
flags: '--docker',
|
|
22
|
-
description: '
|
|
25
|
+
description: 'remote Ollama over HTTP (no local install)',
|
|
23
26
|
};
|
|
27
|
+
const setupOptions = [
|
|
28
|
+
{ flags: '-y, --yes', description: 'skip wizard — auto-pick best model and install' },
|
|
29
|
+
{ flags: '-m, --model <id>', description: 'use a specific model tag' },
|
|
30
|
+
{
|
|
31
|
+
flags: '--use-case <id>',
|
|
32
|
+
description: 'goal: coding | chat | pdfs | writing | image | research',
|
|
33
|
+
},
|
|
34
|
+
{ flags: '--all', description: 'include unverified catalog tags' },
|
|
35
|
+
{ flags: '--skip-install', description: 'do not install Ollama if missing' },
|
|
36
|
+
dockerOption,
|
|
37
|
+
urlOption,
|
|
38
|
+
];
|
|
39
|
+
function attachSetupOptions(cmd) {
|
|
40
|
+
for (const o of setupOptions) {
|
|
41
|
+
cmd.option(o.flags, o.description);
|
|
42
|
+
}
|
|
43
|
+
return cmd;
|
|
44
|
+
}
|
|
45
|
+
function setupFlags(opts) {
|
|
46
|
+
const useCase = (0, recommend_run_1.parseUseCaseArg)(opts.useCase);
|
|
47
|
+
return {
|
|
48
|
+
yes: Boolean(opts.yes),
|
|
49
|
+
model: opts.model,
|
|
50
|
+
useCase,
|
|
51
|
+
all: Boolean(opts.all),
|
|
52
|
+
skipInstall: Boolean(opts.skipInstall),
|
|
53
|
+
docker: Boolean(opts.docker),
|
|
54
|
+
ollamaUrl: opts.ollamaUrl,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
24
57
|
program
|
|
25
58
|
.name('oi')
|
|
26
|
-
.description('OpenInference —
|
|
27
|
-
.version('0.
|
|
28
|
-
program
|
|
59
|
+
.description('OpenInference — find, install, and chat with local open-source models')
|
|
60
|
+
.version('1.0.2');
|
|
61
|
+
const startCmd = program
|
|
29
62
|
.command('start', { isDefault: true })
|
|
30
|
-
.description('
|
|
31
|
-
.option('-m, --model <id>', 'use a specific model tag')
|
|
32
|
-
.option('--choose', 'pick from 5 recommendations instead of auto-select')
|
|
63
|
+
.description('Wizard: use case → scan → pick → confirm → install → chat')
|
|
33
64
|
.option('--force', 'run setup again even if already configured')
|
|
34
|
-
.option('--no-chat', 'setup only, do not open chat after')
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
.option(urlOption.flags, urlOption.description)
|
|
38
|
-
.action(async (opts) => {
|
|
65
|
+
.option('--no-chat', 'setup only, do not open chat after');
|
|
66
|
+
attachSetupOptions(startCmd);
|
|
67
|
+
startCmd.action(async (opts) => {
|
|
39
68
|
try {
|
|
40
|
-
await (0, start_1.runStart)({
|
|
41
|
-
model: opts.model,
|
|
42
|
-
choose: opts.choose,
|
|
43
|
-
force: opts.force,
|
|
44
|
-
chat: opts.chat,
|
|
45
|
-
skipInstall: opts.skipInstall,
|
|
46
|
-
docker: opts.docker,
|
|
47
|
-
ollamaUrl: opts.ollamaUrl,
|
|
48
|
-
});
|
|
69
|
+
await (0, start_1.runStart)({ ...setupFlags(opts), force: Boolean(opts.force), chat: opts.chat });
|
|
49
70
|
}
|
|
50
71
|
catch (e) {
|
|
51
72
|
fail(e);
|
|
52
73
|
}
|
|
53
74
|
});
|
|
54
|
-
program
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
.option('-m, --model <id>', 'use a specific model tag')
|
|
58
|
-
.option('--choose', 'pick from 5 recommendations')
|
|
59
|
-
.option('--skip-install', 'do not install local runtime if missing')
|
|
60
|
-
.option(dockerOption.flags, dockerOption.description)
|
|
61
|
-
.option(urlOption.flags, urlOption.description)
|
|
62
|
-
.action(async (opts) => {
|
|
75
|
+
const setupCmd = program.command('setup').description('Wizard without opening chat');
|
|
76
|
+
attachSetupOptions(setupCmd);
|
|
77
|
+
setupCmd.action(async (opts) => {
|
|
63
78
|
try {
|
|
64
|
-
await (0, start_1.runStart)({
|
|
65
|
-
model: opts.model,
|
|
66
|
-
choose: opts.choose,
|
|
67
|
-
chat: false,
|
|
68
|
-
skipInstall: opts.skipInstall,
|
|
69
|
-
docker: opts.docker,
|
|
70
|
-
ollamaUrl: opts.ollamaUrl,
|
|
71
|
-
});
|
|
79
|
+
await (0, start_1.runStart)({ ...setupFlags(opts), chat: false });
|
|
72
80
|
}
|
|
73
81
|
catch (e) {
|
|
74
82
|
fail(e);
|
|
@@ -76,13 +84,58 @@ program
|
|
|
76
84
|
});
|
|
77
85
|
program
|
|
78
86
|
.command('recommend')
|
|
79
|
-
.description('Preview
|
|
80
|
-
.option('-n, --limit <n>', 'number of
|
|
81
|
-
.option('--
|
|
87
|
+
.description('Preview recommendations (no install)')
|
|
88
|
+
.option('-n, --limit <n>', 'number of results', '10')
|
|
89
|
+
.option('--use-case <id>', 'coding | chat | pdfs | writing | image | research')
|
|
90
|
+
.option('--all', 'full catalog')
|
|
82
91
|
.action((opts) => {
|
|
83
92
|
try {
|
|
84
|
-
const n = Math.min(Math.max(parseInt(opts.limit, 10) ||
|
|
85
|
-
(0, recommend_run_1.runRecommend)({ limit: n, all: opts.all });
|
|
93
|
+
const n = Math.min(Math.max(parseInt(opts.limit, 10) || 10, 1), 25);
|
|
94
|
+
(0, recommend_run_1.runRecommend)({ limit: n, all: opts.all, useCase: (0, recommend_run_1.parseUseCaseArg)(opts.useCase) });
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
fail(e);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
program
|
|
101
|
+
.command('browse')
|
|
102
|
+
.description('Browse catalog picks for your hardware and use case')
|
|
103
|
+
.option('--use-case <id>', 'coding | chat | pdfs | writing | image | research')
|
|
104
|
+
.option('--all', 'full catalog')
|
|
105
|
+
.action((opts) => {
|
|
106
|
+
try {
|
|
107
|
+
(0, recommend_run_1.runBrowse)({ all: opts.all, useCase: (0, recommend_run_1.parseUseCaseArg)(opts.useCase) });
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
fail(e);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
program
|
|
114
|
+
.command('use <model>')
|
|
115
|
+
.description('Switch active model (pulls first if needed)')
|
|
116
|
+
.option(urlOption.flags, urlOption.description)
|
|
117
|
+
.option('--docker', 'remote Ollama')
|
|
118
|
+
.action(async (model, opts) => {
|
|
119
|
+
try {
|
|
120
|
+
await (0, manage_1.runUse)(model, { ollamaUrl: opts.ollamaUrl, docker: opts.docker });
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
fail(e);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
program
|
|
127
|
+
.command('pull <model>')
|
|
128
|
+
.description('Download a model without switching')
|
|
129
|
+
.option('--default', 'also set as active model')
|
|
130
|
+
.option(urlOption.flags, urlOption.description)
|
|
131
|
+
.option('--docker', 'remote Ollama')
|
|
132
|
+
.action(async (model, opts) => {
|
|
133
|
+
try {
|
|
134
|
+
await (0, manage_1.runPull)(model, {
|
|
135
|
+
ollamaUrl: opts.ollamaUrl,
|
|
136
|
+
docker: opts.docker,
|
|
137
|
+
setDefault: Boolean(opts.default),
|
|
138
|
+
});
|
|
86
139
|
}
|
|
87
140
|
catch (e) {
|
|
88
141
|
fail(e);
|
|
@@ -90,10 +143,11 @@ program
|
|
|
90
143
|
});
|
|
91
144
|
program
|
|
92
145
|
.command('chat [message]')
|
|
93
|
-
.description('Chat with
|
|
94
|
-
.option('-
|
|
146
|
+
.description('Chat with active model (no message = interactive)')
|
|
147
|
+
.option('-y, --yes', 'if setup needed, skip wizard')
|
|
148
|
+
.option('-m, --model <id>', 'override model for this session')
|
|
95
149
|
.option(urlOption.flags, urlOption.description)
|
|
96
|
-
.option('--docker', 'remote
|
|
150
|
+
.option('--docker', 'remote Ollama')
|
|
97
151
|
.action(async (message, opts) => {
|
|
98
152
|
try {
|
|
99
153
|
const chatOpts = {
|
|
@@ -103,8 +157,12 @@ program
|
|
|
103
157
|
};
|
|
104
158
|
if (!message?.trim()) {
|
|
105
159
|
if (!(0, config_1.loadConfig)() && !opts.model) {
|
|
106
|
-
console.log('\n Not set up yet.
|
|
107
|
-
await (0, start_1.runStart)({ chat: false, ollamaUrl: opts.ollamaUrl, docker: opts.docker });
|
|
160
|
+
console.log('\n Not set up yet. Starting setup wizard…\n');
|
|
161
|
+
await (0, start_1.runStart)({ chat: false, yes: opts.yes, ollamaUrl: opts.ollamaUrl, docker: opts.docker });
|
|
162
|
+
}
|
|
163
|
+
if (!(0, config_1.loadConfig)() && !opts.model) {
|
|
164
|
+
console.log(' Setup not complete. Run `oi` to finish.\n');
|
|
165
|
+
return;
|
|
108
166
|
}
|
|
109
167
|
await (0, chat_repl_1.runChatRepl)(chatOpts);
|
|
110
168
|
return;
|
|
@@ -129,7 +187,18 @@ program
|
|
|
129
187
|
}
|
|
130
188
|
console.log('\n Models on this computer:\n');
|
|
131
189
|
names.forEach((n) => console.log(` ${n}`));
|
|
132
|
-
console.log(
|
|
190
|
+
console.log(`\n Stored under: ${(0, hardware_1.ollamaModelsPath)()}\n`);
|
|
191
|
+
}
|
|
192
|
+
catch (e) {
|
|
193
|
+
fail(e);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
program
|
|
197
|
+
.command('storage')
|
|
198
|
+
.description('Where models are stored and what is downloaded')
|
|
199
|
+
.action(async () => {
|
|
200
|
+
try {
|
|
201
|
+
await (0, manage_1.runStorage)();
|
|
133
202
|
}
|
|
134
203
|
catch (e) {
|
|
135
204
|
fail(e);
|
|
@@ -145,9 +214,12 @@ program
|
|
|
145
214
|
return;
|
|
146
215
|
}
|
|
147
216
|
console.log('\n OpenInference\n');
|
|
148
|
-
console.log(` Model:
|
|
149
|
-
|
|
150
|
-
|
|
217
|
+
console.log(` Model: ${cfg.modelName} (${cfg.model})`);
|
|
218
|
+
if (cfg.useCase)
|
|
219
|
+
console.log(` Use case: ${(0, use_cases_1.useCaseLabel)(cfg.useCase)}`);
|
|
220
|
+
console.log(` Since: ${new Date(cfg.setupAt).toLocaleDateString()}`);
|
|
221
|
+
console.log(` Storage: ${(0, hardware_1.ollamaModelsPath)()}\n`);
|
|
222
|
+
console.log(' Run `oi` to chat · `oi use <model>` to switch\n');
|
|
151
223
|
});
|
|
152
224
|
program.parse();
|
|
153
225
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,qCAAsC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/manage.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function runUse(modelId: string, opts: {
|
|
2
|
+
ollamaUrl?: string;
|
|
3
|
+
docker?: boolean;
|
|
4
|
+
}): Promise<void>;
|
|
5
|
+
export declare function runPull(modelId: string, opts: {
|
|
6
|
+
ollamaUrl?: string;
|
|
7
|
+
docker?: boolean;
|
|
8
|
+
setDefault?: boolean;
|
|
9
|
+
}): Promise<void>;
|
|
10
|
+
export declare function runStorage(): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=manage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manage.d.ts","sourceRoot":"","sources":["../src/manage.ts"],"names":[],"mappings":"AAYA,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB3G;AAED,wBAAsB,OAAO,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GACnE,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA2BhD"}
|
package/dist/manage.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.runUse = runUse;
|
|
37
|
+
exports.runPull = runPull;
|
|
38
|
+
exports.runStorage = runStorage;
|
|
39
|
+
const config_1 = require("./config");
|
|
40
|
+
const recommend_1 = require("./recommend");
|
|
41
|
+
const hardware_1 = require("./hardware");
|
|
42
|
+
const ollama_1 = require("./ollama");
|
|
43
|
+
async function runUse(modelId, opts) {
|
|
44
|
+
const catalog = (0, recommend_1.loadCatalog)();
|
|
45
|
+
const entry = catalog.find((m) => m.id === modelId);
|
|
46
|
+
const name = entry?.name ?? modelId;
|
|
47
|
+
const base = (0, ollama_1.resolveOllamaUrl)(opts.ollamaUrl);
|
|
48
|
+
if (!(await (0, ollama_1.pingOllama)(base))) {
|
|
49
|
+
if (opts.docker)
|
|
50
|
+
throw new Error(`Ollama not reachable at ${base}`);
|
|
51
|
+
await (0, ollama_1.ensureHostOllamaRunning)(base);
|
|
52
|
+
}
|
|
53
|
+
const installed = await (0, ollama_1.listModelTags)(base);
|
|
54
|
+
const has = installed.some((t) => t === modelId || t.startsWith(`${modelId}:`));
|
|
55
|
+
if (!has) {
|
|
56
|
+
console.log(`\n ${modelId} is not downloaded yet. Pulling…\n`);
|
|
57
|
+
if (opts.docker)
|
|
58
|
+
await (0, ollama_1.pullModelRemote)(base, modelId);
|
|
59
|
+
else
|
|
60
|
+
await (0, ollama_1.pullModelHost)(modelId);
|
|
61
|
+
}
|
|
62
|
+
(0, config_1.setActiveModel)(modelId, name);
|
|
63
|
+
console.log(`\n ✓ Active model: ${name} (${modelId})\n`);
|
|
64
|
+
}
|
|
65
|
+
async function runPull(modelId, opts) {
|
|
66
|
+
const base = (0, ollama_1.resolveOllamaUrl)(opts.ollamaUrl);
|
|
67
|
+
const catalog = (0, recommend_1.loadCatalog)();
|
|
68
|
+
const entry = catalog.find((m) => m.id === modelId);
|
|
69
|
+
if (entry) {
|
|
70
|
+
const hw = (0, hardware_1.detectHardware)();
|
|
71
|
+
if (entry.ramGb > hw.budgetGb) {
|
|
72
|
+
console.log(`\n Warning: ${entry.name} may not fit (~${entry.ramGb} GB needed, ~${hw.budgetGb} GB available).\n`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (opts.docker)
|
|
76
|
+
await (0, ollama_1.pullModelRemote)(base, modelId);
|
|
77
|
+
else {
|
|
78
|
+
if (!(await (0, ollama_1.pingOllama)(base)))
|
|
79
|
+
await (0, ollama_1.ensureHostOllamaRunning)(base);
|
|
80
|
+
await (0, ollama_1.pullModelHost)(modelId);
|
|
81
|
+
}
|
|
82
|
+
if (opts.setDefault) {
|
|
83
|
+
(0, config_1.setActiveModel)(modelId, entry?.name ?? modelId);
|
|
84
|
+
console.log(`\n ✓ Downloaded and set as active: ${entry?.name ?? modelId}\n`);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
console.log(`\n ✓ Downloaded: ${modelId}\n`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async function runStorage() {
|
|
91
|
+
const { ollamaModelsPath } = await Promise.resolve().then(() => __importStar(require('./hardware')));
|
|
92
|
+
const cfg = (0, config_1.loadConfig)();
|
|
93
|
+
const base = (0, ollama_1.resolveOllamaUrl)(cfg?.ollamaUrl);
|
|
94
|
+
console.log('\n OpenInference — model storage\n');
|
|
95
|
+
console.log(' Models are stored by Ollama, not OpenInference.\n');
|
|
96
|
+
console.log(` Default path: ${ollamaModelsPath()}\n`);
|
|
97
|
+
if (await (0, ollama_1.pingOllama)(base)) {
|
|
98
|
+
const tags = await (0, ollama_1.listModelTags)(base);
|
|
99
|
+
if (tags.length === 0) {
|
|
100
|
+
console.log(' No models downloaded yet. Run: oi\n');
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
console.log(' Downloaded on this machine:\n');
|
|
104
|
+
tags.forEach((t) => console.log(` ${t}`));
|
|
105
|
+
console.log('');
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
console.log(' Ollama is not running — start it with `oi` or open the Ollama app.\n');
|
|
110
|
+
}
|
|
111
|
+
if (cfg) {
|
|
112
|
+
console.log(` Active model: ${cfg.modelName} (${cfg.model})`);
|
|
113
|
+
if (cfg.useCase)
|
|
114
|
+
console.log(` Use case: ${cfg.useCase}`);
|
|
115
|
+
console.log('');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=manage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manage.js","sourceRoot":"","sources":["../src/manage.ts"],"names":[],"mappings":"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"}
|
package/dist/ollama.d.ts
CHANGED
|
@@ -11,4 +11,5 @@ export declare function pullModelHost(modelId: string): Promise<void>;
|
|
|
11
11
|
/** Pull via Ollama HTTP API (for Docker / VM where `ollama` CLI is not on PATH). */
|
|
12
12
|
export declare function pullModelRemote(baseUrl: string, modelId: string): Promise<void>;
|
|
13
13
|
export declare function verifyModel(baseUrl: string, modelId: string): Promise<void>;
|
|
14
|
+
export declare function listModelTags(ollamaUrl?: string): Promise<string[]>;
|
|
14
15
|
//# sourceMappingURL=ollama.d.ts.map
|
package/dist/ollama.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"AAKA,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAI3C;AAED,wBAAsB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQnE;AAED,wBAAgB,aAAa,IAAI,IAAI,CAqCpC;AAWD,2DAA2D;AAC3D,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB5E;AAED,yEAAyE;AACzE,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQvE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU5D;AAID,oFAAoF;AACpF,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDrF;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBjF"}
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../src/ollama.ts"],"names":[],"mappings":"AAKA,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAI3C;AAED,wBAAsB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQnE;AAED,wBAAgB,aAAa,IAAI,IAAI,CAqCpC;AAWD,2DAA2D;AAC3D,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB5E;AAED,yEAAyE;AACzE,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQvE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU5D;AAID,oFAAoF;AACpF,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDrF;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBjF;AAMD,wBAAsB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAMzE"}
|
package/dist/ollama.js
CHANGED
|
@@ -9,6 +9,7 @@ exports.ensureRemoteOllama = ensureRemoteOllama;
|
|
|
9
9
|
exports.pullModelHost = pullModelHost;
|
|
10
10
|
exports.pullModelRemote = pullModelRemote;
|
|
11
11
|
exports.verifyModel = verifyModel;
|
|
12
|
+
exports.listModelTags = listModelTags;
|
|
12
13
|
const node_child_process_1 = require("node:child_process");
|
|
13
14
|
const config_1 = require("./config");
|
|
14
15
|
const DEFAULT_URL = 'http://127.0.0.1:11434';
|
|
@@ -48,16 +49,16 @@ function installOllama() {
|
|
|
48
49
|
}
|
|
49
50
|
return;
|
|
50
51
|
}
|
|
51
|
-
if (process.platform === 'linux') {
|
|
52
|
+
if (process.platform === 'linux' || process.platform === 'darwin') {
|
|
52
53
|
const sh = (0, node_child_process_1.spawnSync)('sh', ['-c', 'curl -fsSL https://ollama.com/install.sh | sh'], {
|
|
53
54
|
stdio: 'inherit',
|
|
54
55
|
});
|
|
55
56
|
if (sh.status !== 0) {
|
|
56
|
-
throw new Error('Could not install Ollama automatically.
|
|
57
|
+
throw new Error('Could not install Ollama automatically. Install from https://ollama.com/download then run `oi` again.');
|
|
57
58
|
}
|
|
58
59
|
return;
|
|
59
60
|
}
|
|
60
|
-
throw new Error('Automatic Ollama install supports
|
|
61
|
+
throw new Error('Automatic Ollama install supports Windows, macOS, and Linux. Install from https://ollama.com');
|
|
61
62
|
}
|
|
62
63
|
function spawnDetached(command, args) {
|
|
63
64
|
const child = (0, node_child_process_1.spawn)(command, args, {
|
|
@@ -186,4 +187,12 @@ async function verifyModel(baseUrl, modelId) {
|
|
|
186
187
|
function sleep(ms) {
|
|
187
188
|
return new Promise((r) => setTimeout(r, ms));
|
|
188
189
|
}
|
|
190
|
+
async function listModelTags(ollamaUrl) {
|
|
191
|
+
const base = resolveOllamaUrl(ollamaUrl);
|
|
192
|
+
const res = await fetch(`${base}/api/tags`, { signal: AbortSignal.timeout(15_000) });
|
|
193
|
+
if (!res.ok)
|
|
194
|
+
throw new Error(`Could not list models (${res.status})`);
|
|
195
|
+
const body = (await res.json());
|
|
196
|
+
return (body.models ?? []).map((m) => m.name).sort();
|
|
197
|
+
}
|
|
189
198
|
//# sourceMappingURL=ollama.js.map
|