@openinference/cli 0.3.0 → 1.0.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 (49) hide show
  1. package/README.md +65 -0
  2. package/data/models.json +643 -120
  3. package/dist/chat.d.ts.map +1 -1
  4. package/dist/chat.js +1 -5
  5. package/dist/chat.js.map +1 -1
  6. package/dist/config.d.ts +3 -0
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +8 -1
  9. package/dist/config.js.map +1 -1
  10. package/dist/data/models.json +643 -120
  11. package/dist/hardware.d.ts +5 -0
  12. package/dist/hardware.d.ts.map +1 -1
  13. package/dist/hardware.js +45 -0
  14. package/dist/hardware.js.map +1 -1
  15. package/dist/index.js +125 -53
  16. package/dist/index.js.map +1 -1
  17. package/dist/manage.d.ts +11 -0
  18. package/dist/manage.d.ts.map +1 -0
  19. package/dist/manage.js +118 -0
  20. package/dist/manage.js.map +1 -0
  21. package/dist/ollama.d.ts +1 -0
  22. package/dist/ollama.d.ts.map +1 -1
  23. package/dist/ollama.js +12 -3
  24. package/dist/ollama.js.map +1 -1
  25. package/dist/prompt.d.ts +11 -0
  26. package/dist/prompt.d.ts.map +1 -1
  27. package/dist/prompt.js +99 -11
  28. package/dist/prompt.js.map +1 -1
  29. package/dist/recommend-run.d.ts +6 -4
  30. package/dist/recommend-run.d.ts.map +1 -1
  31. package/dist/recommend-run.js +20 -25
  32. package/dist/recommend-run.js.map +1 -1
  33. package/dist/recommend.d.ts +18 -1
  34. package/dist/recommend.d.ts.map +1 -1
  35. package/dist/recommend.js +53 -22
  36. package/dist/recommend.js.map +1 -1
  37. package/dist/setup.d.ts +12 -4
  38. package/dist/setup.d.ts.map +1 -1
  39. package/dist/setup.js +84 -54
  40. package/dist/setup.js.map +1 -1
  41. package/dist/start.d.ts +2 -2
  42. package/dist/start.d.ts.map +1 -1
  43. package/dist/start.js +4 -9
  44. package/dist/start.js.map +1 -1
  45. package/dist/use-cases.d.ts +17 -0
  46. package/dist/use-cases.d.ts.map +1 -0
  47. package/dist/use-cases.js +115 -0
  48. package/dist/use-cases.js.map +1 -0
  49. package/package.json +8 -2
package/dist/setup.js CHANGED
@@ -1,56 +1,60 @@
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;
9
13
  async function runSetup(opts) {
10
14
  const remote = Boolean(opts.docker);
11
15
  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');
16
+ const auto = Boolean(opts.yes);
17
+ let useCase = opts.useCase ?? 'chat';
18
+ if (!auto && !opts.useCase && !opts.model) {
19
+ useCase = await (0, use_cases_1.pickUseCase)();
20
+ console.log(`\n ${(0, use_cases_1.useCaseLabel)(useCase)}\n`);
20
21
  }
21
- else {
22
- console.log('\n OpenInference local model setup\n');
23
- if (remote)
24
- console.log(` Remote runtime at ${baseUrl}\n`);
22
+ else if (opts.useCase) {
23
+ useCase = opts.useCase;
25
24
  }
26
25
  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
26
  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`);
27
+ const { pool, runnable } = (0, recommend_1.buildRecommendPool)(catalog, hw, useCase, opts.all);
28
+ if (!auto) {
29
+ (0, prompt_1.printHardwareScan)(hw);
30
+ console.log(` Use case: ${(0, use_cases_1.useCaseLabel)(useCase)}`);
31
+ console.log(` Catalog: ${pool.length} models for this goal`);
32
+ if (runnable.length === 0) {
33
+ throw new Error(`No models fit (~${hw.budgetGb} GB RAM${hw.diskFreeGb > 0 ? `, ${hw.diskFreeGb} GB disk` : ''}). ` +
34
+ 'Free space or pick a different use case.');
35
+ }
36
+ console.log(` ${runnable.length} models fit your hardware\n`);
39
37
  }
40
38
  else {
41
- console.log(' Finding the best model for you…\n');
39
+ console.log('\n OpenInference quick setup (-y)\n');
40
+ (0, prompt_1.printHardwareResults)(hw);
41
+ console.log(` Use case: ${(0, use_cases_1.useCaseLabel)(useCase)}\n`);
42
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.`);
43
+ const recs = (0, recommend_1.recommendTop)(runnable, hw.budgetGb, exports.WIZARD_PICK_COUNT, useCase, hw.diskFreeGb);
44
+ const picks = recs.length > 0 ? recs : runnable
45
+ .map((m) => (0, recommend_1.scoreModel)(m, hw.budgetGb, useCase))
46
+ .filter((r) => r !== null)
47
+ .sort((a, b) => b.score - a.score)
48
+ .slice(0, exports.WIZARD_PICK_COUNT);
49
+ if (picks.length === 0) {
50
+ throw new Error('No runnable models found for this use case and hardware.');
46
51
  }
47
- if (interactive) {
48
- console.log(' Top 5 models for your machine:\n');
49
- (0, prompt_1.printRecommendations)(recs);
52
+ if (!auto && !opts.model) {
53
+ (0, prompt_1.printWizardRecommendations)(picks, runnable.length);
50
54
  }
51
55
  let chosen;
52
56
  if (opts.model) {
53
- const fromRecs = recs.find((r) => r.id === opts.model);
57
+ const fromRecs = picks.find((r) => r.id === opts.model);
54
58
  if (fromRecs) {
55
59
  chosen = fromRecs;
56
60
  }
@@ -63,57 +67,83 @@ async function runSetup(opts) {
63
67
  throw new Error(`Model "${opts.model}" does not fit this machine.`);
64
68
  chosen = { ...m, fit, score: 0 };
65
69
  }
66
- if (!quick)
67
- console.log(`Using --model ${chosen.id}\n`);
70
+ if (!auto)
71
+ console.log(` Using model: ${chosen.name} (${chosen.id})\n`);
68
72
  }
69
- else if (opts.yes || quick) {
70
- chosen = recs[0];
71
- console.log(` → ${chosen.name} (best match for your computer)\n`);
73
+ else if (auto) {
74
+ chosen = picks[0];
75
+ console.log(` → ${chosen.name} (best match)\n`);
72
76
  }
73
77
  else {
74
- chosen = await (0, prompt_1.pickRecommendation)(recs);
75
- console.log(`\nSelected: ${chosen.name} (${chosen.id})\n`);
78
+ chosen = await (0, prompt_1.pickRecommendation)(picks);
79
+ console.log(`\n Selected: ${chosen.name}\n`);
76
80
  }
77
- if (chosen.fit === 'marginal' && !quick) {
81
+ if (chosen.fit === 'marginal' && !auto) {
78
82
  console.log(' Note: this model is a tight fit — it may run slowly.\n');
79
83
  }
84
+ const needsOllama = !remote &&
85
+ !opts.skipInstall &&
86
+ !(await (0, ollama_1.pingOllama)(baseUrl)) &&
87
+ !(0, ollama_1.isOllamaInstalled)();
88
+ if (!auto) {
89
+ const ok = await (0, prompt_1.confirmInstall)({
90
+ modelName: chosen.name,
91
+ sizeMb: chosen.sizeMb,
92
+ needsOllama,
93
+ });
94
+ if (!ok)
95
+ return;
96
+ console.log('');
97
+ }
80
98
  if (remote) {
81
- console.log(' Connecting to AI runtime…\n');
99
+ console.log(' Connecting to Ollama…\n');
82
100
  await (0, ollama_1.ensureRemoteOllama)(baseUrl);
83
101
  console.log(' Downloading model…\n');
84
102
  await (0, ollama_1.pullModelRemote)(baseUrl, chosen.id);
85
103
  }
86
104
  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');
105
+ if (needsOllama) {
106
+ console.log(' Installing Ollama…\n');
90
107
  (0, ollama_1.installOllama)();
91
108
  if (!(0, ollama_1.isOllamaInstalled)()) {
92
- throw new Error('Install finished but the runtime was not found. Restart your terminal and run `oi` again.');
109
+ throw new Error('Install finished but Ollama was not found. Restart your terminal and run `oi` again.');
93
110
  }
94
111
  }
95
112
  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.');
113
+ throw new Error('Ollama not found. Run `oi` again to install it.');
97
114
  }
98
- if (!quick)
99
- console.log(' Starting runtime…\n');
115
+ console.log(' Starting Ollama…\n');
100
116
  await (0, ollama_1.ensureHostOllamaRunning)(baseUrl);
101
117
  console.log(' Downloading model…\n');
102
118
  await (0, ollama_1.pullModelHost)(chosen.id);
103
119
  }
104
- if (!quick)
105
- console.log(' Running test…');
120
+ console.log(' Running a quick test…');
106
121
  await (0, ollama_1.verifyModel)(baseUrl, chosen.id);
107
- (0, config_1.saveConfig)({
122
+ const cfg = {
108
123
  ollamaUrl: baseUrl,
109
124
  model: chosen.id,
110
125
  modelName: chosen.name,
126
+ useCase,
111
127
  setupAt: new Date().toISOString(),
112
- });
128
+ };
129
+ (0, config_1.saveConfig)(cfg);
113
130
  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`);
131
+ console.log(` Model: ${chosen.name}`);
132
+ console.log(` Stored: ${(0, hardware_1.ollamaModelsPath)()}`);
133
+ console.log(` Config: ~/.openinference/config.json\n`);
134
+ }
135
+ function printRecommendPreview(recs, hw, meta) {
136
+ console.log('\n OpenInference — model recommendations\n');
137
+ (0, prompt_1.printHardwareResults)(hw);
138
+ console.log(` Use case: ${(0, use_cases_1.useCaseLabel)(meta.useCase)}`);
139
+ console.log(` ${meta.poolSize} models for this goal · ${meta.runnableSize} fit your hardware` +
140
+ `${meta.all ? '' : ' (verified tags preferred; use --all for full catalog)'}\n`);
141
+ if (recs.length === 0) {
142
+ console.log(' No models fit this machine.\n');
143
+ return;
117
144
  }
145
+ console.log(` Top ${recs.length}:\n`);
146
+ (0, prompt_1.printRecommendations)(recs);
147
+ console.log(' Run `oi` for the setup wizard, or `oi -y` to auto-install the top pick.\n');
118
148
  }
119
149
  //# 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":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
package/dist/start.d.ts CHANGED
@@ -6,8 +6,8 @@ export type StartOptions = SetupOptions & {
6
6
  chat?: boolean;
7
7
  };
8
8
  /**
9
- * The beginner path: one command — auto-pick model, install, download, chat.
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
@@ -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,CAsBrE"}
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
- * The beginner path: one command — auto-pick model, install, download, chat.
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
- ...opts,
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,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"}
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,CAYpF;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,115 @@
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
+ return u.includes('rag') || u.includes('long context') || u.includes('context');
36
+ }
37
+ return false;
38
+ }
39
+ function inferCategories(useCase, kind) {
40
+ const u = useCase.toLowerCase();
41
+ const cats = new Set();
42
+ if (kind === 'embed') {
43
+ cats.add('research');
44
+ return [...cats];
45
+ }
46
+ if (/code|coding|sql|completion/.test(u))
47
+ cats.add('coding');
48
+ if (/vision|multimodal|moondream|llava/.test(u))
49
+ cats.add('image');
50
+ if (/rag|research|reasoning|math|tool|agent/.test(u))
51
+ cats.add('research');
52
+ if (/chat|general|instruction|helpful|teaching|bilingual|multilingual|enterprise/.test(u)) {
53
+ cats.add('chat');
54
+ }
55
+ if (/writing|helpful|instructions|chat|general/.test(u))
56
+ cats.add('writing');
57
+ if (cats.size === 0)
58
+ cats.add('chat');
59
+ return [...cats];
60
+ }
61
+ function filterByUseCase(models, useCase) {
62
+ return models.filter((m) => modelMatchesUseCase(m, useCase));
63
+ }
64
+ function parseUseCaseArg(raw) {
65
+ if (!raw)
66
+ return undefined;
67
+ const key = raw.toLowerCase().trim();
68
+ if (PDF_ALIASES.has(key))
69
+ return 'pdfs';
70
+ const found = exports.USE_CASES.find((u) => u.id === key || u.label.toLowerCase() === key);
71
+ return found?.id;
72
+ }
73
+ async function pickUseCase() {
74
+ console.log(' What do you want to use AI for?\n');
75
+ exports.USE_CASES.forEach((u, i) => {
76
+ console.log(` ${i + 1}. ${u.label.padEnd(18)} ${u.description}`);
77
+ });
78
+ console.log('');
79
+ const rl = node_readline_1.default.createInterface({ input: process.stdin, output: process.stdout });
80
+ const answer = await new Promise((resolve) => {
81
+ rl.question(` Choose (1-${exports.USE_CASES.length}) [1]: `, resolve);
82
+ });
83
+ rl.close();
84
+ const n = parseInt(answer.trim() || '1', 10);
85
+ if (!Number.isNaN(n) && n >= 1 && n <= exports.USE_CASES.length) {
86
+ return exports.USE_CASES[n - 1].id;
87
+ }
88
+ const byName = parseUseCaseArg(answer.trim());
89
+ if (byName)
90
+ return byName;
91
+ console.log(' Using General Chat.\n');
92
+ return 'chat';
93
+ }
94
+ /** Boost score when model categories align with the user's goal. */
95
+ function useCaseScoreBoost(model, useCase) {
96
+ const cats = model.categories ?? inferCategories(model.useCase, model.kind);
97
+ if (!cats.includes(useCase))
98
+ return 0;
99
+ let boost = 18;
100
+ const u = model.useCase.toLowerCase();
101
+ if (useCase === 'coding' && /coder|code|coding|sql/.test(u))
102
+ boost += 12;
103
+ if (useCase === 'image' && /vision/.test(u))
104
+ boost += 15;
105
+ if (useCase === 'research' && /reasoning|rag|research/.test(u))
106
+ boost += 10;
107
+ if (useCase === 'pdfs' && /rag|long context/.test(u))
108
+ boost += 14;
109
+ if (useCase === 'writing' && /chat|general|instruction/.test(u))
110
+ boost += 6;
111
+ if (model.verified)
112
+ boost += 4;
113
+ return boost;
114
+ }
115
+ //# 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.3.0",
4
- "description": "OpenInference CLIlocal model setup and gateway tools",
3
+ "version": "1.0.0",
4
+ "description": "OpenInference Corehardware-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
  },