@openinference/cli 0.3.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.
Files changed (47) hide show
  1. package/data/models.json +1259 -0
  2. package/dist/chat-repl.d.ts +3 -0
  3. package/dist/chat-repl.d.ts.map +1 -0
  4. package/dist/chat-repl.js +35 -0
  5. package/dist/chat-repl.js.map +1 -0
  6. package/dist/chat.d.ts +9 -0
  7. package/dist/chat.d.ts.map +1 -0
  8. package/dist/chat.js +51 -0
  9. package/dist/chat.js.map +1 -0
  10. package/dist/config.d.ts +11 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +32 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/data/models.json +1259 -0
  15. package/dist/hardware.d.ts +13 -0
  16. package/dist/hardware.d.ts.map +1 -0
  17. package/dist/hardware.js +61 -0
  18. package/dist/hardware.js.map +1 -0
  19. package/dist/index.d.ts +3 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +153 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/ollama.d.ts +14 -0
  24. package/dist/ollama.d.ts.map +1 -0
  25. package/dist/ollama.js +189 -0
  26. package/dist/ollama.js.map +1 -0
  27. package/dist/prompt.d.ts +4 -0
  28. package/dist/prompt.d.ts.map +1 -0
  29. package/dist/prompt.js +44 -0
  30. package/dist/prompt.js.map +1 -0
  31. package/dist/recommend-run.d.ts +9 -0
  32. package/dist/recommend-run.d.ts.map +1 -0
  33. package/dist/recommend-run.js +34 -0
  34. package/dist/recommend-run.js.map +1 -0
  35. package/dist/recommend.d.ts +20 -0
  36. package/dist/recommend.d.ts.map +1 -0
  37. package/dist/recommend.js +71 -0
  38. package/dist/recommend.js.map +1 -0
  39. package/dist/setup.d.ts +13 -0
  40. package/dist/setup.d.ts.map +1 -0
  41. package/dist/setup.js +119 -0
  42. package/dist/setup.js.map +1 -0
  43. package/dist/start.d.ts +13 -0
  44. package/dist/start.d.ts.map +1 -0
  45. package/dist/start.js +32 -0
  46. package/dist/start.js.map +1 -0
  47. package/package.json +33 -0
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadCatalog = loadCatalog;
7
+ exports.fitTier = fitTier;
8
+ exports.fitLabel = fitLabel;
9
+ exports.recommendTop = recommendTop;
10
+ const node_fs_1 = __importDefault(require("node:fs"));
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ function modelsPath() {
13
+ const nextToDist = node_path_1.default.join(__dirname, 'data', 'models.json');
14
+ if (node_fs_1.default.existsSync(nextToDist))
15
+ return nextToDist;
16
+ return node_path_1.default.join(__dirname, '..', 'data', 'models.json');
17
+ }
18
+ function loadCatalog() {
19
+ const raw = node_fs_1.default.readFileSync(modelsPath(), 'utf8');
20
+ return JSON.parse(raw);
21
+ }
22
+ function fitTier(needGb, budgetGb) {
23
+ if (needGb > budgetGb)
24
+ return null;
25
+ const ratio = needGb / budgetGb;
26
+ if (ratio <= 0.55)
27
+ return 'perfect';
28
+ if (ratio <= 0.82)
29
+ return 'good';
30
+ return 'marginal';
31
+ }
32
+ const FIT_POINTS = {
33
+ perfect: 100,
34
+ good: 72,
35
+ marginal: 45,
36
+ };
37
+ const FIT_LABEL = {
38
+ perfect: 'perfect',
39
+ good: 'good',
40
+ marginal: 'marginal',
41
+ };
42
+ function fitLabel(fit) {
43
+ return FIT_LABEL[fit];
44
+ }
45
+ function recommendTop(catalog, budgetGb, limit = 5) {
46
+ const chatCatalog = catalog.filter((m) => m.kind !== 'embed');
47
+ const scored = [];
48
+ for (const model of chatCatalog) {
49
+ const fit = fitTier(model.ramGb, budgetGb);
50
+ if (!fit)
51
+ continue;
52
+ const score = FIT_POINTS[fit] + model.quality * 0.35;
53
+ scored.push({ ...model, fit, score });
54
+ }
55
+ scored.sort((a, b) => b.score - a.score);
56
+ if (scored.length >= limit)
57
+ return scored.slice(0, limit);
58
+ // Fill with smallest runnable models if budget is very tight
59
+ const extra = chatCatalog
60
+ .filter((m) => m.ramGb <= budgetGb)
61
+ .filter((m) => !scored.some((s) => s.id === m.id))
62
+ .sort((a, b) => a.ramGb - b.ramGb)
63
+ .slice(0, limit - scored.length)
64
+ .map((m) => ({
65
+ ...m,
66
+ fit: fitTier(m.ramGb, budgetGb) ?? 'marginal',
67
+ score: (fitTier(m.ramGb, budgetGb) ? FIT_POINTS[fitTier(m.ramGb, budgetGb)] : 40) + m.quality * 0.35,
68
+ }));
69
+ return [...scored, ...extra].slice(0, limit);
70
+ }
71
+ //# sourceMappingURL=recommend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommend.js","sourceRoot":"","sources":["../src/recommend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type SetupOptions = {
2
+ yes?: boolean;
3
+ model?: string;
4
+ skipInstall?: boolean;
5
+ docker?: boolean;
6
+ ollamaUrl?: string;
7
+ /** Beginner mode: minimal output, no jargon */
8
+ quick?: boolean;
9
+ /** Show 5 models and let user pick */
10
+ choose?: boolean;
11
+ };
12
+ export declare function runSetup(opts: SetupOptions): Promise<void>;
13
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sCAAsC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkHhE"}
package/dist/setup.js ADDED
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runSetup = runSetup;
4
+ const recommend_1 = require("./recommend");
5
+ const hardware_1 = require("./hardware");
6
+ const config_1 = require("./config");
7
+ const prompt_1 = require("./prompt");
8
+ const ollama_1 = require("./ollama");
9
+ async function runSetup(opts) {
10
+ const remote = Boolean(opts.docker);
11
+ const baseUrl = (0, ollama_1.resolveOllamaUrl)(opts.ollamaUrl);
12
+ const quick = Boolean(opts.quick) && !opts.choose;
13
+ const interactive = Boolean(opts.choose) || (!opts.yes && !opts.model && !quick);
14
+ if (quick) {
15
+ console.log('\n OpenInference — setting up local AI on your computer\n');
16
+ console.log(' This takes a few minutes the first time. We will:\n');
17
+ console.log(' • find the best open-source model for your hardware');
18
+ console.log(' • install what you need (no account required)');
19
+ console.log(' • download the model and run a quick test\n');
20
+ }
21
+ else {
22
+ console.log('\n OpenInference — local model setup\n');
23
+ if (remote)
24
+ console.log(` Remote runtime at ${baseUrl}\n`);
25
+ }
26
+ const hw = (0, hardware_1.detectHardware)();
27
+ if (!quick) {
28
+ console.log(` System: ${(0, hardware_1.formatHardware)(hw)}`);
29
+ console.log(` Memory budget for models: ~${hw.budgetGb} GB\n`);
30
+ }
31
+ else {
32
+ console.log(` Detected: ${(0, hardware_1.formatHardware)(hw)}\n`);
33
+ }
34
+ const catalog = (0, recommend_1.loadCatalog)();
35
+ const chatVerified = catalog.filter((m) => m.kind !== 'embed' && m.verified);
36
+ const pool = chatVerified.length >= 3 ? chatVerified : catalog.filter((m) => m.kind !== 'embed');
37
+ if (!quick) {
38
+ console.log(` Scoring ${pool.length} open-source models for your hardware…\n`);
39
+ }
40
+ else {
41
+ console.log(' Finding the best model for you…\n');
42
+ }
43
+ const recs = (0, recommend_1.recommendTop)(pool, hw.budgetGb, 5);
44
+ if (recs.length === 0) {
45
+ throw new Error(`No models fit this computer (~${hw.budgetGb} GB free for AI). Try freeing RAM or use a machine with more memory.`);
46
+ }
47
+ if (interactive) {
48
+ console.log(' Top 5 models for your machine:\n');
49
+ (0, prompt_1.printRecommendations)(recs);
50
+ }
51
+ let chosen;
52
+ if (opts.model) {
53
+ const fromRecs = recs.find((r) => r.id === opts.model);
54
+ if (fromRecs) {
55
+ chosen = fromRecs;
56
+ }
57
+ else {
58
+ const m = catalog.find((c) => c.id === opts.model);
59
+ if (!m)
60
+ throw new Error(`Model "${opts.model}" not found in catalog.`);
61
+ const fit = (0, recommend_1.fitTier)(m.ramGb, hw.budgetGb);
62
+ if (!fit)
63
+ throw new Error(`Model "${opts.model}" does not fit this machine.`);
64
+ chosen = { ...m, fit, score: 0 };
65
+ }
66
+ if (!quick)
67
+ console.log(`Using --model ${chosen.id}\n`);
68
+ }
69
+ else if (opts.yes || quick) {
70
+ chosen = recs[0];
71
+ console.log(` → ${chosen.name} (best match for your computer)\n`);
72
+ }
73
+ else {
74
+ chosen = await (0, prompt_1.pickRecommendation)(recs);
75
+ console.log(`\nSelected: ${chosen.name} (${chosen.id})\n`);
76
+ }
77
+ if (chosen.fit === 'marginal' && !quick) {
78
+ console.log(' Note: this model is a tight fit — it may run slowly.\n');
79
+ }
80
+ if (remote) {
81
+ console.log(' Connecting to AI runtime…\n');
82
+ await (0, ollama_1.ensureRemoteOllama)(baseUrl);
83
+ console.log(' Downloading model…\n');
84
+ await (0, ollama_1.pullModelRemote)(baseUrl, chosen.id);
85
+ }
86
+ else {
87
+ const needsInstall = !opts.skipInstall && !(await (0, ollama_1.pingOllama)(baseUrl)) && !(0, ollama_1.isOllamaInstalled)();
88
+ if (needsInstall) {
89
+ console.log(' Installing local AI runtime (one-time)…\n');
90
+ (0, ollama_1.installOllama)();
91
+ if (!(0, ollama_1.isOllamaInstalled)()) {
92
+ throw new Error('Install finished but the runtime was not found. Restart your terminal and run `oi` again.');
93
+ }
94
+ }
95
+ else if (!opts.skipInstall && !(0, ollama_1.isOllamaInstalled)() && !(await (0, ollama_1.pingOllama)(baseUrl))) {
96
+ throw new Error('Local AI runtime not found. Run `oi` again to install it.');
97
+ }
98
+ if (!quick)
99
+ console.log(' Starting runtime…\n');
100
+ await (0, ollama_1.ensureHostOllamaRunning)(baseUrl);
101
+ console.log(' Downloading model…\n');
102
+ await (0, ollama_1.pullModelHost)(chosen.id);
103
+ }
104
+ if (!quick)
105
+ console.log(' Running test…');
106
+ await (0, ollama_1.verifyModel)(baseUrl, chosen.id);
107
+ (0, config_1.saveConfig)({
108
+ ollamaUrl: baseUrl,
109
+ model: chosen.id,
110
+ modelName: chosen.name,
111
+ setupAt: new Date().toISOString(),
112
+ });
113
+ console.log('\n ✓ Ready — you can use open-source AI on this computer.\n');
114
+ if (!quick) {
115
+ console.log(` Model: ${chosen.name}`);
116
+ console.log(` Config: ~/.openinference/config.json\n`);
117
+ }
118
+ }
119
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type SetupOptions } from './setup';
2
+ export type StartOptions = SetupOptions & {
3
+ /** Re-run setup even if config exists */
4
+ force?: boolean;
5
+ /** After setup, open chat (default true) */
6
+ chat?: boolean;
7
+ };
8
+ /**
9
+ * The beginner path: one command — auto-pick model, install, download, chat.
10
+ * If already set up, jumps straight to chat.
11
+ */
12
+ export declare function runStart(opts?: StartOptions): Promise<void>;
13
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAEtD,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG;IACxC,yCAAyC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBrE"}
package/dist/start.js ADDED
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runStart = runStart;
4
+ const config_1 = require("./config");
5
+ const chat_repl_1 = require("./chat-repl");
6
+ const setup_1 = require("./setup");
7
+ /**
8
+ * The beginner path: one command — auto-pick model, install, download, chat.
9
+ * If already set up, jumps straight to chat.
10
+ */
11
+ async function runStart(opts = {}) {
12
+ const existing = (0, config_1.loadConfig)();
13
+ const openChat = opts.chat !== false;
14
+ if (existing && !opts.force && !opts.model) {
15
+ console.log('\n OpenInference — local AI\n');
16
+ console.log(` Using ${existing.modelName} on this computer.\n`);
17
+ if (openChat)
18
+ await (0, chat_repl_1.runChatRepl)({ ollamaUrl: opts.ollamaUrl, remote: opts.docker });
19
+ return;
20
+ }
21
+ await (0, setup_1.runSetup)({
22
+ ...opts,
23
+ yes: !opts.choose && !opts.model,
24
+ quick: !opts.choose,
25
+ choose: opts.choose,
26
+ });
27
+ if (openChat) {
28
+ console.log(' You can chat now — type a question below.\n');
29
+ await (0, chat_repl_1.runChatRepl)({ ollamaUrl: opts.ollamaUrl, remote: opts.docker });
30
+ }
31
+ }
32
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":";;AAeA,4BAsBC;AArCD,qCAAsC;AACtC,2CAA0C;AAC1C,mCAAsD;AAStD;;;GAGG;AACI,KAAK,UAAU,QAAQ,CAAC,OAAqB,EAAE;IACpD,MAAM,QAAQ,GAAG,IAAA,mBAAU,GAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC;IAErC,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,SAAS,sBAAsB,CAAC,CAAC;QACjE,IAAI,QAAQ;YAAE,MAAM,IAAA,uBAAW,EAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACpF,OAAO;IACT,CAAC;IAED,MAAM,IAAA,gBAAQ,EAAC;QACb,GAAG,IAAI;QACP,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK;QAChC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;IAEH,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,MAAM,IAAA,uBAAW,EAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@openinference/cli",
3
+ "version": "0.3.0",
4
+ "description": "OpenInference CLI — local model setup and gateway tools",
5
+ "license": "MIT",
6
+ "bin": {
7
+ "oi": "./dist/index.js"
8
+ },
9
+ "main": "./dist/index.js",
10
+ "files": [
11
+ "dist",
12
+ "data"
13
+ ],
14
+ "scripts": {
15
+ "build": "node scripts/build-catalog.mjs && tsc && node -e \"require('fs').cpSync('data','dist/data',{recursive:true})\"",
16
+ "catalog": "node scripts/build-catalog.mjs",
17
+ "dev": "tsc --watch",
18
+ "typecheck": "tsc --noEmit"
19
+ },
20
+ "engines": {
21
+ "node": ">=18"
22
+ },
23
+ "dependencies": {
24
+ "commander": "^12.1.0"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^20.14.0",
28
+ "typescript": "^5.4.5"
29
+ },
30
+ "publishConfig": {
31
+ "access": "public"
32
+ }
33
+ }