@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/setup.js
CHANGED
|
@@ -1,56 +1,116 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WIZARD_PICK_COUNT = void 0;
|
|
3
4
|
exports.runSetup = runSetup;
|
|
5
|
+
exports.printRecommendPreview = printRecommendPreview;
|
|
4
6
|
const recommend_1 = require("./recommend");
|
|
5
7
|
const hardware_1 = require("./hardware");
|
|
6
8
|
const config_1 = require("./config");
|
|
7
9
|
const prompt_1 = require("./prompt");
|
|
8
10
|
const ollama_1 = require("./ollama");
|
|
11
|
+
const use_cases_1 = require("./use-cases");
|
|
12
|
+
exports.WIZARD_PICK_COUNT = 10;
|
|
13
|
+
async function resolvePool(catalog, hw, opts) {
|
|
14
|
+
const auto = Boolean(opts.yes);
|
|
15
|
+
const lockedUseCase = opts.useCase;
|
|
16
|
+
if (auto || opts.model) {
|
|
17
|
+
const useCase = lockedUseCase ?? 'chat';
|
|
18
|
+
let { pool, runnable } = (0, recommend_1.buildRecommendPool)(catalog, hw, useCase, opts.all);
|
|
19
|
+
let hardwareFallback = false;
|
|
20
|
+
if (runnable.length === 0) {
|
|
21
|
+
runnable = (0, recommend_1.hardwareFittingModels)(catalog, hw, opts.all);
|
|
22
|
+
pool = runnable;
|
|
23
|
+
hardwareFallback = runnable.length > 0;
|
|
24
|
+
}
|
|
25
|
+
return { useCase, pool, runnable, hardwareFallback };
|
|
26
|
+
}
|
|
27
|
+
let scanned = false;
|
|
28
|
+
while (true) {
|
|
29
|
+
const useCase = lockedUseCase ?? (await (0, use_cases_1.pickUseCase)());
|
|
30
|
+
if (!lockedUseCase)
|
|
31
|
+
console.log(`\n → ${(0, use_cases_1.useCaseLabel)(useCase)}\n`);
|
|
32
|
+
if (!scanned) {
|
|
33
|
+
(0, prompt_1.printHardwareScan)(hw);
|
|
34
|
+
scanned = true;
|
|
35
|
+
}
|
|
36
|
+
let { pool, runnable } = (0, recommend_1.buildRecommendPool)(catalog, hw, useCase, opts.all);
|
|
37
|
+
let hardwareFallback = false;
|
|
38
|
+
console.log(` Use case: ${(0, use_cases_1.useCaseLabel)(useCase)}`);
|
|
39
|
+
console.log(` Catalog: ${pool.length} models for this goal`);
|
|
40
|
+
if (runnable.length === 0) {
|
|
41
|
+
const anyFit = (0, recommend_1.hardwareFittingModels)(catalog, hw, opts.all);
|
|
42
|
+
if (anyFit.length > 0) {
|
|
43
|
+
console.log(` 0 models for this goal on your hardware, but ${anyFit.length} other small models fit.\n`);
|
|
44
|
+
const ok = lockedUseCase
|
|
45
|
+
? true
|
|
46
|
+
: await (0, prompt_1.askYesNo)(' Show small models that fit anyway? (Y/n): ', true);
|
|
47
|
+
if (ok) {
|
|
48
|
+
runnable = anyFit;
|
|
49
|
+
pool = anyFit;
|
|
50
|
+
hardwareFallback = true;
|
|
51
|
+
}
|
|
52
|
+
else if (!lockedUseCase) {
|
|
53
|
+
console.log('\n Pick another use case:\n');
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
(0, prompt_1.printTooSmallHelp)(hw);
|
|
62
|
+
if (lockedUseCase)
|
|
63
|
+
return null;
|
|
64
|
+
const retry = await (0, prompt_1.askYesNo)(' Try a different use case? (Y/n): ', true);
|
|
65
|
+
if (retry) {
|
|
66
|
+
console.log('');
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
console.log(` ${runnable.length} models fit your hardware\n`);
|
|
74
|
+
}
|
|
75
|
+
return { useCase, pool, runnable, hardwareFallback };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
9
78
|
async function runSetup(opts) {
|
|
10
79
|
const remote = Boolean(opts.docker);
|
|
11
80
|
const baseUrl = (0, ollama_1.resolveOllamaUrl)(opts.ollamaUrl);
|
|
12
|
-
const
|
|
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
|
-
}
|
|
81
|
+
const auto = Boolean(opts.yes);
|
|
26
82
|
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
83
|
const catalog = (0, recommend_1.loadCatalog)();
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
84
|
+
const resolved = await resolvePool(catalog, hw, opts);
|
|
85
|
+
if (!resolved)
|
|
86
|
+
return;
|
|
87
|
+
const { useCase, runnable, hardwareFallback } = resolved;
|
|
88
|
+
if (auto) {
|
|
89
|
+
console.log('\n OpenInference — quick setup (-y)\n');
|
|
90
|
+
(0, prompt_1.printHardwareResults)(hw);
|
|
91
|
+
console.log(` Use case: ${(0, use_cases_1.useCaseLabel)(useCase)}\n`);
|
|
39
92
|
}
|
|
40
|
-
|
|
41
|
-
|
|
93
|
+
const recs = (0, recommend_1.recommendTop)(runnable, hw.budgetGb, exports.WIZARD_PICK_COUNT, useCase, hw.diskFreeGb);
|
|
94
|
+
const picks = recs.length > 0
|
|
95
|
+
? recs
|
|
96
|
+
: runnable
|
|
97
|
+
.map((m) => (0, recommend_1.scoreModel)(m, hw.budgetGb, useCase))
|
|
98
|
+
.filter((r) => r !== null)
|
|
99
|
+
.sort((a, b) => b.score - a.score)
|
|
100
|
+
.slice(0, exports.WIZARD_PICK_COUNT);
|
|
101
|
+
if (picks.length === 0) {
|
|
102
|
+
(0, prompt_1.printTooSmallHelp)(hw);
|
|
103
|
+
return;
|
|
42
104
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
console.log(' Top 5 models for your machine:\n');
|
|
49
|
-
(0, prompt_1.printRecommendations)(recs);
|
|
105
|
+
if (!auto && !opts.model) {
|
|
106
|
+
(0, prompt_1.printWizardRecommendations)(picks, runnable.length, {
|
|
107
|
+
fallback: hardwareFallback,
|
|
108
|
+
useCaseLabel: (0, use_cases_1.useCaseLabel)(useCase),
|
|
109
|
+
});
|
|
50
110
|
}
|
|
51
111
|
let chosen;
|
|
52
112
|
if (opts.model) {
|
|
53
|
-
const fromRecs =
|
|
113
|
+
const fromRecs = picks.find((r) => r.id === opts.model);
|
|
54
114
|
if (fromRecs) {
|
|
55
115
|
chosen = fromRecs;
|
|
56
116
|
}
|
|
@@ -63,57 +123,80 @@ async function runSetup(opts) {
|
|
|
63
123
|
throw new Error(`Model "${opts.model}" does not fit this machine.`);
|
|
64
124
|
chosen = { ...m, fit, score: 0 };
|
|
65
125
|
}
|
|
66
|
-
if (!
|
|
67
|
-
console.log(`Using
|
|
126
|
+
if (!auto)
|
|
127
|
+
console.log(` Using model: ${chosen.name} (${chosen.id})\n`);
|
|
68
128
|
}
|
|
69
|
-
else if (
|
|
70
|
-
chosen =
|
|
71
|
-
console.log(` → ${chosen.name} (best match
|
|
129
|
+
else if (auto) {
|
|
130
|
+
chosen = picks[0];
|
|
131
|
+
console.log(` → ${chosen.name} (best match)\n`);
|
|
72
132
|
}
|
|
73
133
|
else {
|
|
74
|
-
chosen = await (0, prompt_1.pickRecommendation)(
|
|
75
|
-
console.log(`\
|
|
134
|
+
chosen = await (0, prompt_1.pickRecommendation)(picks);
|
|
135
|
+
console.log(`\n Selected: ${chosen.name}\n`);
|
|
76
136
|
}
|
|
77
|
-
if (chosen.fit === 'marginal' && !
|
|
137
|
+
if (chosen.fit === 'marginal' && !auto) {
|
|
78
138
|
console.log(' Note: this model is a tight fit — it may run slowly.\n');
|
|
79
139
|
}
|
|
140
|
+
const needsOllama = !remote && !opts.skipInstall && !(await (0, ollama_1.pingOllama)(baseUrl)) && !(0, ollama_1.isOllamaInstalled)();
|
|
141
|
+
if (!auto) {
|
|
142
|
+
const ok = await (0, prompt_1.confirmInstall)({
|
|
143
|
+
modelName: chosen.name,
|
|
144
|
+
sizeMb: chosen.sizeMb,
|
|
145
|
+
needsOllama,
|
|
146
|
+
});
|
|
147
|
+
if (!ok)
|
|
148
|
+
return;
|
|
149
|
+
console.log('');
|
|
150
|
+
}
|
|
80
151
|
if (remote) {
|
|
81
|
-
console.log(' Connecting to
|
|
152
|
+
console.log(' Connecting to Ollama…\n');
|
|
82
153
|
await (0, ollama_1.ensureRemoteOllama)(baseUrl);
|
|
83
154
|
console.log(' Downloading model…\n');
|
|
84
155
|
await (0, ollama_1.pullModelRemote)(baseUrl, chosen.id);
|
|
85
156
|
}
|
|
86
157
|
else {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
console.log(' Installing local AI runtime (one-time)…\n');
|
|
158
|
+
if (needsOllama) {
|
|
159
|
+
console.log(' Installing Ollama…\n');
|
|
90
160
|
(0, ollama_1.installOllama)();
|
|
91
161
|
if (!(0, ollama_1.isOllamaInstalled)()) {
|
|
92
|
-
throw new Error('Install finished but
|
|
162
|
+
throw new Error('Install finished but Ollama was not found. Restart your terminal and run `oi` again.');
|
|
93
163
|
}
|
|
94
164
|
}
|
|
95
165
|
else if (!opts.skipInstall && !(0, ollama_1.isOllamaInstalled)() && !(await (0, ollama_1.pingOllama)(baseUrl))) {
|
|
96
|
-
throw new Error('
|
|
166
|
+
throw new Error('Ollama not found. Run `oi` again to install it.');
|
|
97
167
|
}
|
|
98
|
-
|
|
99
|
-
console.log(' Starting runtime…\n');
|
|
168
|
+
console.log(' Starting Ollama…\n');
|
|
100
169
|
await (0, ollama_1.ensureHostOllamaRunning)(baseUrl);
|
|
101
170
|
console.log(' Downloading model…\n');
|
|
102
171
|
await (0, ollama_1.pullModelHost)(chosen.id);
|
|
103
172
|
}
|
|
104
|
-
|
|
105
|
-
console.log(' Running test…');
|
|
173
|
+
console.log(' Running a quick test…');
|
|
106
174
|
await (0, ollama_1.verifyModel)(baseUrl, chosen.id);
|
|
107
|
-
|
|
175
|
+
const cfg = {
|
|
108
176
|
ollamaUrl: baseUrl,
|
|
109
177
|
model: chosen.id,
|
|
110
178
|
modelName: chosen.name,
|
|
179
|
+
useCase,
|
|
111
180
|
setupAt: new Date().toISOString(),
|
|
112
|
-
}
|
|
181
|
+
};
|
|
182
|
+
(0, config_1.saveConfig)(cfg);
|
|
113
183
|
console.log('\n ✓ Ready — you can use open-source AI on this computer.\n');
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
184
|
+
console.log(` Model: ${chosen.name}`);
|
|
185
|
+
console.log(` Stored: ${(0, hardware_1.ollamaModelsPath)()}`);
|
|
186
|
+
console.log(` Config: ~/.openinference/config.json\n`);
|
|
187
|
+
}
|
|
188
|
+
function printRecommendPreview(recs, hw, meta) {
|
|
189
|
+
console.log('\n OpenInference — model recommendations\n');
|
|
190
|
+
(0, prompt_1.printHardwareResults)(hw);
|
|
191
|
+
console.log(` Use case: ${(0, use_cases_1.useCaseLabel)(meta.useCase)}`);
|
|
192
|
+
console.log(` ${meta.poolSize} models for this goal · ${meta.runnableSize} fit your hardware` +
|
|
193
|
+
`${meta.all ? '' : ' (verified tags preferred; use --all for full catalog)'}\n`);
|
|
194
|
+
if (recs.length === 0) {
|
|
195
|
+
console.log(' No models fit this machine. Try: oi browse --use-case chat\n');
|
|
196
|
+
return;
|
|
117
197
|
}
|
|
198
|
+
console.log(` Top ${recs.length}:\n`);
|
|
199
|
+
(0, prompt_1.printRecommendations)(recs);
|
|
200
|
+
console.log(' Run `oi` for the setup wizard, or `oi -y` to auto-install the top pick.\n');
|
|
118
201
|
}
|
|
119
202
|
//# sourceMappingURL=setup.js.map
|
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":";;;AAkIA,4BAwHC;AAED,sDAmBC;AA9QD,2CAOqB;AACrB,yCAA8D;AAC9D,qCAAwD;AACxD,qCASkB;AAClB,qCAUkB;AAClB,2CAKqB;AAER,QAAA,iBAAiB,GAAG,EAAE,CAAC;AAmBpC,KAAK,UAAU,WAAW,CACxB,OAAuC,EACvC,EAAqC,EACrC,IAAkB;IAElB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;IAEnC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,aAAa,IAAI,MAAM,CAAC;QACxC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAA,8BAAkB,EAAC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5E,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,GAAG,IAAA,iCAAqB,EAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACxD,IAAI,GAAG,QAAQ,CAAC;YAChB,gBAAgB,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,aAAa,IAAI,CAAC,MAAM,IAAA,uBAAW,GAAE,CAAC,CAAC;QACvD,IAAI,CAAC,aAAa;YAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAA,wBAAY,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEpE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAA,0BAAiB,EAAC,EAAE,CAAC,CAAC;YACtB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAA,8BAAkB,EAAC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5E,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAE7B,OAAO,CAAC,GAAG,CAAC,eAAe,IAAA,wBAAY,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,MAAM,uBAAuB,CAAC,CAAC;QAE9D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAA,iCAAqB,EAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,kDAAkD,MAAM,CAAC,MAAM,4BAA4B,CAAC,CAAC;gBACzG,MAAM,EAAE,GAAG,aAAa;oBACtB,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,MAAM,IAAA,iBAAQ,EAAC,8CAA8C,EAAE,IAAI,CAAC,CAAC;gBACzE,IAAI,EAAE,EAAE,CAAC;oBACP,QAAQ,GAAG,MAAM,CAAC;oBAClB,IAAI,GAAG,MAAM,CAAC;oBACd,gBAAgB,GAAG,IAAI,CAAC;gBAC1B,CAAC;qBAAM,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC1B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;oBAC5C,SAAS;gBACX,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAA,0BAAiB,EAAC,EAAE,CAAC,CAAC;gBACtB,IAAI,aAAa;oBAAE,OAAO,IAAI,CAAC;gBAC/B,MAAM,KAAK,GAAG,MAAM,IAAA,iBAAQ,EAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC;gBAC1E,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChB,SAAS;gBACX,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,MAAM,6BAA6B,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IACvD,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,IAAkB;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAA,yBAAgB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE/B,MAAM,EAAE,GAAG,IAAA,yBAAc,GAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAA,uBAAW,GAAE,CAAC;IAE9B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,QAAQ;QAAE,OAAO;IAEtB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC;IAEzD,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,IAAA,6BAAoB,EAAC,EAAE,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,eAAe,IAAA,wBAAY,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,IAAI,GAAG,IAAA,wBAAY,EAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,yBAAiB,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;IAC5F,MAAM,KAAK,GACT,IAAI,CAAC,MAAM,GAAG,CAAC;QACb,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,QAAQ;aACL,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,sBAAU,EAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;aAC/C,MAAM,CAAC,CAAC,CAAC,EAAuB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;aAC9C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,KAAK,CAAC,CAAC,EAAE,yBAAiB,CAAC,CAAC;IAErC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,IAAA,0BAAiB,EAAC,EAAE,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACzB,IAAA,mCAA0B,EAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE;YACjD,QAAQ,EAAE,gBAAgB;YAC1B,YAAY,EAAE,IAAA,wBAAY,EAAC,OAAO,CAAC;SACpC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAsB,CAAC;IAE3B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,QAAQ,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,yBAAyB,CAAC,CAAC;YACvE,MAAM,GAAG,GAAG,IAAA,mBAAO,EAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,8BAA8B,CAAC,CAAC;YAC9E,MAAM,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;SAAM,IAAI,IAAI,EAAE,CAAC;QAChB,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,IAAI,iBAAiB,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,IAAA,2BAAkB,EAAC,KAAK,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,MAAM,CAAC,GAAG,KAAK,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,WAAW,GACf,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,IAAA,mBAAU,EAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAA,0BAAiB,GAAE,CAAC;IAEvF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,EAAE,GAAG,MAAM,IAAA,uBAAc,EAAC;YAC9B,SAAS,EAAE,MAAM,CAAC,IAAI;YACtB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,WAAW;SACZ,CAAC,CAAC;QACH,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,MAAM,IAAA,2BAAkB,EAAC,OAAO,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,MAAM,IAAA,wBAAe,EAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACtC,IAAA,sBAAa,GAAE,CAAC;YAChB,IAAI,CAAC,IAAA,0BAAiB,GAAE,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,sFAAsF,CACvF,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAA,0BAAiB,GAAE,IAAI,CAAC,CAAC,MAAM,IAAA,mBAAU,EAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACrF,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,MAAM,IAAA,gCAAuB,EAAC,OAAO,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,MAAM,IAAA,sBAAa,EAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,MAAM,IAAA,oBAAW,EAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAEtC,MAAM,GAAG,GAAgB;QACvB,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,MAAM,CAAC,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC,IAAI;QACtB,OAAO;QACP,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAClC,CAAC;IACF,IAAA,mBAAU,EAAC,GAAG,CAAC,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAA,2BAAgB,GAAE,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;AAC3D,CAAC;AAED,SAAgB,qBAAqB,CACnC,IAAsB,EACtB,EAAqC,EACrC,IAAmF;IAEnF,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,IAAA,6BAAoB,EAAC,EAAE,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,eAAe,IAAA,wBAAY,EAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CACT,KAAK,IAAI,CAAC,QAAQ,2BAA2B,IAAI,CAAC,YAAY,oBAAoB;QAChF,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wDAAwD,IAAI,CAClF,CAAC;IACF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;QAC9E,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;IACvC,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;AAC7F,CAAC"}
|
package/dist/start.d.ts
CHANGED
|
@@ -6,8 +6,8 @@ export type StartOptions = SetupOptions & {
|
|
|
6
6
|
chat?: boolean;
|
|
7
7
|
};
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
* If already set up, jumps straight to chat.
|
|
9
|
+
* Default: interactive wizard (scan → pick → confirm → install → chat).
|
|
10
|
+
* Use -y to skip prompts. If already set up, jumps straight to chat.
|
|
11
11
|
*/
|
|
12
12
|
export declare function runStart(opts?: StartOptions): Promise<void>;
|
|
13
13
|
//# sourceMappingURL=start.d.ts.map
|
package/dist/start.d.ts.map
CHANGED
|
@@ -1 +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,
|
|
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,CAiBrE"}
|
package/dist/start.js
CHANGED
|
@@ -5,8 +5,8 @@ const config_1 = require("./config");
|
|
|
5
5
|
const chat_repl_1 = require("./chat-repl");
|
|
6
6
|
const setup_1 = require("./setup");
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
* If already set up, jumps straight to chat.
|
|
8
|
+
* Default: interactive wizard (scan → pick → confirm → install → chat).
|
|
9
|
+
* Use -y to skip prompts. If already set up, jumps straight to chat.
|
|
10
10
|
*/
|
|
11
11
|
async function runStart(opts = {}) {
|
|
12
12
|
const existing = (0, config_1.loadConfig)();
|
|
@@ -18,13 +18,8 @@ async function runStart(opts = {}) {
|
|
|
18
18
|
await (0, chat_repl_1.runChatRepl)({ ollamaUrl: opts.ollamaUrl, remote: opts.docker });
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
21
|
-
await (0, setup_1.runSetup)(
|
|
22
|
-
|
|
23
|
-
yes: !opts.choose && !opts.model,
|
|
24
|
-
quick: !opts.choose,
|
|
25
|
-
choose: opts.choose,
|
|
26
|
-
});
|
|
27
|
-
if (openChat) {
|
|
21
|
+
await (0, setup_1.runSetup)(opts);
|
|
22
|
+
if (openChat && (0, config_1.loadConfig)()) {
|
|
28
23
|
console.log(' You can chat now — type a question below.\n');
|
|
29
24
|
await (0, chat_repl_1.runChatRepl)({ ollamaUrl: opts.ollamaUrl, remote: opts.docker });
|
|
30
25
|
}
|
package/dist/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":";;AAeA,
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":";;AAeA,4BAiBC;AAhCD,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,IAAI,CAAC,CAAC;IAErB,IAAI,QAAQ,IAAI,IAAA,mBAAU,GAAE,EAAE,CAAC;QAC7B,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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CatalogModel } from './recommend';
|
|
2
|
+
export type UseCaseId = 'coding' | 'chat' | 'pdfs' | 'writing' | 'image' | 'research';
|
|
3
|
+
export type UseCase = {
|
|
4
|
+
id: UseCaseId;
|
|
5
|
+
label: string;
|
|
6
|
+
description: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const USE_CASES: UseCase[];
|
|
9
|
+
export declare function useCaseLabel(id: UseCaseId): string;
|
|
10
|
+
/** Match catalog `categories` (from build) or fall back to useCase string. */
|
|
11
|
+
export declare function modelMatchesUseCase(model: CatalogModel, useCase: UseCaseId): boolean;
|
|
12
|
+
export declare function filterByUseCase(models: CatalogModel[], useCase: UseCaseId): CatalogModel[];
|
|
13
|
+
export declare function parseUseCaseArg(raw?: string): UseCaseId | undefined;
|
|
14
|
+
export declare function pickUseCase(): Promise<UseCaseId>;
|
|
15
|
+
/** Boost score when model categories align with the user's goal. */
|
|
16
|
+
export declare function useCaseScoreBoost(model: CatalogModel, useCase: UseCaseId): number;
|
|
17
|
+
//# sourceMappingURL=use-cases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-cases.d.ts","sourceRoot":"","sources":["../src/use-cases.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAEtF,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,SAAS,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,OAAO,EAO9B,CAAC;AAIF,wBAAgB,YAAY,CAAC,EAAE,EAAE,SAAS,GAAG,MAAM,CAElD;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAiBpF;AAuBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,SAAS,GAAG,YAAY,EAAE,CAE1F;AAED,wBAAgB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAMnE;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC,CAuBtD;AAED,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,GAAG,MAAM,CAejF"}
|
|
@@ -0,0 +1,120 @@
|
|
|
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.USE_CASES = void 0;
|
|
7
|
+
exports.useCaseLabel = useCaseLabel;
|
|
8
|
+
exports.modelMatchesUseCase = modelMatchesUseCase;
|
|
9
|
+
exports.filterByUseCase = filterByUseCase;
|
|
10
|
+
exports.parseUseCaseArg = parseUseCaseArg;
|
|
11
|
+
exports.pickUseCase = pickUseCase;
|
|
12
|
+
exports.useCaseScoreBoost = useCaseScoreBoost;
|
|
13
|
+
const node_readline_1 = __importDefault(require("node:readline"));
|
|
14
|
+
exports.USE_CASES = [
|
|
15
|
+
{ id: 'coding', label: 'Coding', description: 'Write, debug, and explain code' },
|
|
16
|
+
{ id: 'chat', label: 'General Chat', description: 'Everyday questions and conversation' },
|
|
17
|
+
{ id: 'pdfs', label: 'Reading PDFs', description: 'Summarize documents and long text' },
|
|
18
|
+
{ id: 'writing', label: 'Writing', description: 'Draft emails, posts, and copy' },
|
|
19
|
+
{ id: 'image', label: 'Image / Vision', description: 'Describe and understand images' },
|
|
20
|
+
{ id: 'research', label: 'Research', description: 'Reasoning, analysis, and depth' },
|
|
21
|
+
];
|
|
22
|
+
const PDF_ALIASES = new Set(['pdfs', 'pdf', 'documents']);
|
|
23
|
+
function useCaseLabel(id) {
|
|
24
|
+
return exports.USE_CASES.find((u) => u.id === id)?.label ?? id;
|
|
25
|
+
}
|
|
26
|
+
/** Match catalog `categories` (from build) or fall back to useCase string. */
|
|
27
|
+
function modelMatchesUseCase(model, useCase) {
|
|
28
|
+
if (model.kind === 'embed')
|
|
29
|
+
return useCase === 'research' || useCase === 'pdfs';
|
|
30
|
+
const cats = model.categories ?? inferCategories(model.useCase, model.kind);
|
|
31
|
+
if (cats.includes(useCase))
|
|
32
|
+
return true;
|
|
33
|
+
if (useCase === 'pdfs' && (cats.includes('research') || cats.includes('chat'))) {
|
|
34
|
+
const u = model.useCase.toLowerCase();
|
|
35
|
+
if (u.includes('rag') || u.includes('long context') || u.includes('context'))
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
// Small chat models work for writing / PDFs on constrained hardware
|
|
39
|
+
if ((useCase === 'writing' || useCase === 'pdfs') && cats.includes('chat') && model.ramGb <= 2.5) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
function inferCategories(useCase, kind) {
|
|
45
|
+
const u = useCase.toLowerCase();
|
|
46
|
+
const cats = new Set();
|
|
47
|
+
if (kind === 'embed') {
|
|
48
|
+
cats.add('research');
|
|
49
|
+
return [...cats];
|
|
50
|
+
}
|
|
51
|
+
if (/code|coding|sql|completion/.test(u))
|
|
52
|
+
cats.add('coding');
|
|
53
|
+
if (/vision|multimodal|moondream|llava/.test(u))
|
|
54
|
+
cats.add('image');
|
|
55
|
+
if (/rag|research|reasoning|math|tool|agent/.test(u))
|
|
56
|
+
cats.add('research');
|
|
57
|
+
if (/chat|general|instruction|helpful|teaching|bilingual|multilingual|enterprise/.test(u)) {
|
|
58
|
+
cats.add('chat');
|
|
59
|
+
}
|
|
60
|
+
if (/writing|helpful|instructions|chat|general/.test(u))
|
|
61
|
+
cats.add('writing');
|
|
62
|
+
if (cats.size === 0)
|
|
63
|
+
cats.add('chat');
|
|
64
|
+
return [...cats];
|
|
65
|
+
}
|
|
66
|
+
function filterByUseCase(models, useCase) {
|
|
67
|
+
return models.filter((m) => modelMatchesUseCase(m, useCase));
|
|
68
|
+
}
|
|
69
|
+
function parseUseCaseArg(raw) {
|
|
70
|
+
if (!raw)
|
|
71
|
+
return undefined;
|
|
72
|
+
const key = raw.toLowerCase().trim();
|
|
73
|
+
if (PDF_ALIASES.has(key))
|
|
74
|
+
return 'pdfs';
|
|
75
|
+
const found = exports.USE_CASES.find((u) => u.id === key || u.label.toLowerCase() === key);
|
|
76
|
+
return found?.id;
|
|
77
|
+
}
|
|
78
|
+
async function pickUseCase() {
|
|
79
|
+
console.log(' What do you want to use AI for?\n');
|
|
80
|
+
exports.USE_CASES.forEach((u, i) => {
|
|
81
|
+
console.log(` ${i + 1}. ${u.label.padEnd(18)} ${u.description}`);
|
|
82
|
+
});
|
|
83
|
+
console.log('');
|
|
84
|
+
const rl = node_readline_1.default.createInterface({ input: process.stdin, output: process.stdout });
|
|
85
|
+
const answer = await new Promise((resolve) => {
|
|
86
|
+
rl.question(` Choose (1-${exports.USE_CASES.length}) [1]: `, resolve);
|
|
87
|
+
});
|
|
88
|
+
rl.close();
|
|
89
|
+
const n = parseInt(answer.trim() || '1', 10);
|
|
90
|
+
if (!Number.isNaN(n) && n >= 1 && n <= exports.USE_CASES.length) {
|
|
91
|
+
return exports.USE_CASES[n - 1].id;
|
|
92
|
+
}
|
|
93
|
+
const byName = parseUseCaseArg(answer.trim());
|
|
94
|
+
if (byName)
|
|
95
|
+
return byName;
|
|
96
|
+
console.log(' Using General Chat.\n');
|
|
97
|
+
return 'chat';
|
|
98
|
+
}
|
|
99
|
+
/** Boost score when model categories align with the user's goal. */
|
|
100
|
+
function useCaseScoreBoost(model, useCase) {
|
|
101
|
+
const cats = model.categories ?? inferCategories(model.useCase, model.kind);
|
|
102
|
+
if (!cats.includes(useCase))
|
|
103
|
+
return 0;
|
|
104
|
+
let boost = 18;
|
|
105
|
+
const u = model.useCase.toLowerCase();
|
|
106
|
+
if (useCase === 'coding' && /coder|code|coding|sql/.test(u))
|
|
107
|
+
boost += 12;
|
|
108
|
+
if (useCase === 'image' && /vision/.test(u))
|
|
109
|
+
boost += 15;
|
|
110
|
+
if (useCase === 'research' && /reasoning|rag|research/.test(u))
|
|
111
|
+
boost += 10;
|
|
112
|
+
if (useCase === 'pdfs' && /rag|long context/.test(u))
|
|
113
|
+
boost += 14;
|
|
114
|
+
if (useCase === 'writing' && /chat|general|instruction/.test(u))
|
|
115
|
+
boost += 6;
|
|
116
|
+
if (model.verified)
|
|
117
|
+
boost += 4;
|
|
118
|
+
return boost;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=use-cases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-cases.js","sourceRoot":"","sources":["../src/use-cases.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openinference/cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "OpenInference
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "OpenInference Core — hardware-aware model discovery, Ollama setup, and local chat",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/Souravrajvi0/openinference.git",
|
|
9
|
+
"directory": "packages/cli"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://openinference.tech/cli",
|
|
6
12
|
"bin": {
|
|
7
13
|
"oi": "./dist/index.js"
|
|
8
14
|
},
|