ai.matey.cli 0.2.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 (129) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/convert-request.js +365 -0
  3. package/dist/cjs/convert-request.js.map +1 -0
  4. package/dist/cjs/convert-response.js +211 -0
  5. package/dist/cjs/convert-response.js.map +1 -0
  6. package/dist/cjs/converters/request-converters.js +183 -0
  7. package/dist/cjs/converters/request-converters.js.map +1 -0
  8. package/dist/cjs/converters/response-converters.js +203 -0
  9. package/dist/cjs/converters/response-converters.js.map +1 -0
  10. package/dist/cjs/create-backend.js +569 -0
  11. package/dist/cjs/create-backend.js.map +1 -0
  12. package/dist/cjs/index.js +31 -0
  13. package/dist/cjs/index.js.map +1 -0
  14. package/dist/cjs/main.js +181 -0
  15. package/dist/cjs/main.js.map +1 -0
  16. package/dist/cjs/ollama/commands/list.js +70 -0
  17. package/dist/cjs/ollama/commands/list.js.map +1 -0
  18. package/dist/cjs/ollama/commands/ps.js +80 -0
  19. package/dist/cjs/ollama/commands/ps.js.map +1 -0
  20. package/dist/cjs/ollama/commands/pull.js +198 -0
  21. package/dist/cjs/ollama/commands/pull.js.map +1 -0
  22. package/dist/cjs/ollama/commands/run.js +279 -0
  23. package/dist/cjs/ollama/commands/run.js.map +1 -0
  24. package/dist/cjs/ollama/commands/show.js +138 -0
  25. package/dist/cjs/ollama/commands/show.js.map +1 -0
  26. package/dist/cjs/ollama/index.js +238 -0
  27. package/dist/cjs/ollama/index.js.map +1 -0
  28. package/dist/cjs/ollama/types.js +10 -0
  29. package/dist/cjs/ollama/types.js.map +1 -0
  30. package/dist/cjs/proxy.js +406 -0
  31. package/dist/cjs/proxy.js.map +1 -0
  32. package/dist/cjs/utils/backend-loader.js +112 -0
  33. package/dist/cjs/utils/backend-loader.js.map +1 -0
  34. package/dist/cjs/utils/index.js +29 -0
  35. package/dist/cjs/utils/index.js.map +1 -0
  36. package/dist/cjs/utils/model-translation.js +138 -0
  37. package/dist/cjs/utils/model-translation.js.map +1 -0
  38. package/dist/cjs/utils/output-formatter.js +241 -0
  39. package/dist/cjs/utils/output-formatter.js.map +1 -0
  40. package/dist/cjs/utils/pipeline-inspector.js +90 -0
  41. package/dist/cjs/utils/pipeline-inspector.js.map +1 -0
  42. package/dist/cjs/utils/state-manager.js +114 -0
  43. package/dist/cjs/utils/state-manager.js.map +1 -0
  44. package/dist/esm/convert-request.js +331 -0
  45. package/dist/esm/convert-request.js.map +1 -0
  46. package/dist/esm/convert-response.js +177 -0
  47. package/dist/esm/convert-response.js.map +1 -0
  48. package/dist/esm/converters/request-converters.js +175 -0
  49. package/dist/esm/converters/request-converters.js.map +1 -0
  50. package/dist/esm/converters/response-converters.js +191 -0
  51. package/dist/esm/converters/response-converters.js.map +1 -0
  52. package/dist/esm/create-backend.js +533 -0
  53. package/dist/esm/create-backend.js.map +1 -0
  54. package/dist/esm/index.js +15 -0
  55. package/dist/esm/index.js.map +1 -0
  56. package/dist/esm/main.js +149 -0
  57. package/dist/esm/main.js.map +1 -0
  58. package/dist/esm/ollama/commands/list.js +67 -0
  59. package/dist/esm/ollama/commands/list.js.map +1 -0
  60. package/dist/esm/ollama/commands/ps.js +77 -0
  61. package/dist/esm/ollama/commands/ps.js.map +1 -0
  62. package/dist/esm/ollama/commands/pull.js +195 -0
  63. package/dist/esm/ollama/commands/pull.js.map +1 -0
  64. package/dist/esm/ollama/commands/run.js +243 -0
  65. package/dist/esm/ollama/commands/run.js.map +1 -0
  66. package/dist/esm/ollama/commands/show.js +135 -0
  67. package/dist/esm/ollama/commands/show.js.map +1 -0
  68. package/dist/esm/ollama/index.js +235 -0
  69. package/dist/esm/ollama/index.js.map +1 -0
  70. package/dist/esm/ollama/types.js +9 -0
  71. package/dist/esm/ollama/types.js.map +1 -0
  72. package/dist/esm/proxy.js +403 -0
  73. package/dist/esm/proxy.js.map +1 -0
  74. package/dist/esm/utils/backend-loader.js +74 -0
  75. package/dist/esm/utils/backend-loader.js.map +1 -0
  76. package/dist/esm/utils/index.js +13 -0
  77. package/dist/esm/utils/index.js.map +1 -0
  78. package/dist/esm/utils/model-translation.js +99 -0
  79. package/dist/esm/utils/model-translation.js.map +1 -0
  80. package/dist/esm/utils/output-formatter.js +224 -0
  81. package/dist/esm/utils/output-formatter.js.map +1 -0
  82. package/dist/esm/utils/pipeline-inspector.js +84 -0
  83. package/dist/esm/utils/pipeline-inspector.js.map +1 -0
  84. package/dist/esm/utils/state-manager.js +111 -0
  85. package/dist/esm/utils/state-manager.js.map +1 -0
  86. package/dist/types/convert-request.d.ts +15 -0
  87. package/dist/types/convert-request.d.ts.map +1 -0
  88. package/dist/types/convert-response.d.ts +16 -0
  89. package/dist/types/convert-response.d.ts.map +1 -0
  90. package/dist/types/converters/request-converters.d.ts +139 -0
  91. package/dist/types/converters/request-converters.d.ts.map +1 -0
  92. package/dist/types/converters/response-converters.d.ts +134 -0
  93. package/dist/types/converters/response-converters.d.ts.map +1 -0
  94. package/dist/types/create-backend.d.ts +20 -0
  95. package/dist/types/create-backend.d.ts.map +1 -0
  96. package/dist/types/index.d.ts +13 -0
  97. package/dist/types/index.d.ts.map +1 -0
  98. package/dist/types/main.d.ts +19 -0
  99. package/dist/types/main.d.ts.map +1 -0
  100. package/dist/types/ollama/commands/list.d.ts +32 -0
  101. package/dist/types/ollama/commands/list.d.ts.map +1 -0
  102. package/dist/types/ollama/commands/ps.d.ts +27 -0
  103. package/dist/types/ollama/commands/ps.d.ts.map +1 -0
  104. package/dist/types/ollama/commands/pull.d.ts +21 -0
  105. package/dist/types/ollama/commands/pull.d.ts.map +1 -0
  106. package/dist/types/ollama/commands/run.d.ts +48 -0
  107. package/dist/types/ollama/commands/run.d.ts.map +1 -0
  108. package/dist/types/ollama/commands/show.d.ts +36 -0
  109. package/dist/types/ollama/commands/show.d.ts.map +1 -0
  110. package/dist/types/ollama/index.d.ts +12 -0
  111. package/dist/types/ollama/index.d.ts.map +1 -0
  112. package/dist/types/ollama/types.d.ts +58 -0
  113. package/dist/types/ollama/types.d.ts.map +1 -0
  114. package/dist/types/proxy.d.ts +16 -0
  115. package/dist/types/proxy.d.ts.map +1 -0
  116. package/dist/types/utils/backend-loader.d.ts +55 -0
  117. package/dist/types/utils/backend-loader.d.ts.map +1 -0
  118. package/dist/types/utils/index.d.ts +13 -0
  119. package/dist/types/utils/index.d.ts.map +1 -0
  120. package/dist/types/utils/model-translation.d.ts +64 -0
  121. package/dist/types/utils/model-translation.d.ts.map +1 -0
  122. package/dist/types/utils/output-formatter.d.ts +113 -0
  123. package/dist/types/utils/output-formatter.d.ts.map +1 -0
  124. package/dist/types/utils/pipeline-inspector.d.ts +50 -0
  125. package/dist/types/utils/pipeline-inspector.d.ts.map +1 -0
  126. package/dist/types/utils/state-manager.d.ts +91 -0
  127. package/dist/types/utils/state-manager.d.ts.map +1 -0
  128. package/package.json +75 -0
  129. package/readme.md +32 -0
@@ -0,0 +1,279 @@
1
+ "use strict";
2
+ /**
3
+ * Ollama `run` Command
4
+ *
5
+ * Run a model interactively or with a single prompt.
6
+ *
7
+ * @module cli/ollama/commands/run
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.runCommand = runCommand;
44
+ const readline = __importStar(require("node:readline"));
45
+ const model_translation_js_1 = require("../../utils/model-translation.js");
46
+ const output_formatter_js_1 = require("../../utils/output-formatter.js");
47
+ const state_manager_js_1 = require("../../utils/state-manager.js");
48
+ const backend_loader_js_1 = require("../../utils/backend-loader.js");
49
+ /**
50
+ * Execute the run command.
51
+ */
52
+ async function runCommand(options) {
53
+ const { backend, model, prompt, modelMapping, json = false, verbose = false, system, noStream = false, } = options;
54
+ // Translate model name
55
+ const translatedModel = (0, model_translation_js_1.translateModel)(model, {
56
+ backend,
57
+ mapping: modelMapping,
58
+ });
59
+ if (verbose && translatedModel !== model) {
60
+ console.error((0, output_formatter_js_1.colorize)(`Model translated: ${model} → ${translatedModel}`, 'gray'));
61
+ }
62
+ // Start model runner if needed
63
+ if ((0, backend_loader_js_1.isModelRunner)(backend)) {
64
+ const runner = backend;
65
+ if (!runner.isRunning) {
66
+ if (verbose) {
67
+ console.error((0, output_formatter_js_1.colorize)('Starting model runner...', 'gray'));
68
+ }
69
+ await runner.start();
70
+ // Track in state
71
+ const stats = runner.getStats();
72
+ state_manager_js_1.stateManager.add({
73
+ name: model,
74
+ backend: backend.metadata.name,
75
+ pid: stats.pid,
76
+ startTime: Date.now(),
77
+ lastActivity: Date.now(),
78
+ });
79
+ }
80
+ }
81
+ // Check if we have a prompt (non-interactive mode)
82
+ if (prompt) {
83
+ await runSinglePrompt({
84
+ backend,
85
+ model: translatedModel,
86
+ prompt,
87
+ system,
88
+ json,
89
+ noStream,
90
+ });
91
+ return;
92
+ }
93
+ // Check for piped input
94
+ if (!process.stdin.isTTY) {
95
+ const input = await readStdin();
96
+ await runSinglePrompt({
97
+ backend,
98
+ model: translatedModel,
99
+ prompt: input,
100
+ system,
101
+ json,
102
+ noStream,
103
+ });
104
+ return;
105
+ }
106
+ // Interactive mode
107
+ await runInteractive({
108
+ backend,
109
+ model: translatedModel,
110
+ originalModel: model,
111
+ system,
112
+ noStream,
113
+ });
114
+ }
115
+ /**
116
+ * Run a single prompt (non-interactive).
117
+ */
118
+ async function runSinglePrompt(options) {
119
+ const { backend, model, prompt, system, json, noStream } = options;
120
+ // Build messages
121
+ const messages = [];
122
+ if (system) {
123
+ messages.push({ role: 'system', content: system });
124
+ }
125
+ messages.push({ role: 'user', content: prompt });
126
+ try {
127
+ const metadata = {
128
+ requestId: `cli-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`,
129
+ timestamp: Date.now(),
130
+ };
131
+ if (noStream || json) {
132
+ // Non-streaming
133
+ const response = await backend.execute({
134
+ messages,
135
+ parameters: { model },
136
+ metadata,
137
+ });
138
+ if (json) {
139
+ console.log(JSON.stringify(response, null, 2));
140
+ }
141
+ else {
142
+ const content = response.message.content[0];
143
+ if (content && typeof content !== 'string' && content.type === 'text') {
144
+ console.log(content.text);
145
+ }
146
+ }
147
+ }
148
+ else {
149
+ // Streaming (default for Ollama compatibility)
150
+ for await (const chunk of backend.executeStream({
151
+ messages,
152
+ parameters: { model },
153
+ metadata,
154
+ })) {
155
+ if (chunk.type === 'content' && typeof chunk.delta === 'string') {
156
+ process.stdout.write(chunk.delta);
157
+ }
158
+ }
159
+ process.stdout.write('\n');
160
+ }
161
+ }
162
+ catch (error) {
163
+ console.error((0, output_formatter_js_1.colorize)(`Error: ${error instanceof Error ? error.message : String(error)}`, 'red'));
164
+ process.exit(1);
165
+ }
166
+ }
167
+ /**
168
+ * Run interactive mode.
169
+ */
170
+ async function runInteractive(options) {
171
+ const { backend, model, originalModel, system, noStream } = options;
172
+ // Conversation history
173
+ const messages = [];
174
+ if (system) {
175
+ messages.push({ role: 'system', content: system });
176
+ }
177
+ // Print welcome
178
+ console.log();
179
+ console.log((0, output_formatter_js_1.style)('>>> Ollama CLI Interface', 'bold', 'cyan'));
180
+ console.log(`Model: ${(0, output_formatter_js_1.colorize)(originalModel, 'green')}${model !== originalModel ? (0, output_formatter_js_1.colorize)(` (using ${model})`, 'gray') : ''}`);
181
+ console.log(`Backend: ${(0, output_formatter_js_1.colorize)(backend.metadata.name, 'blue')}`);
182
+ console.log();
183
+ console.log((0, output_formatter_js_1.colorize)('Type your message and press Enter. Use /exit to quit.', 'gray'));
184
+ console.log();
185
+ // Create readline interface
186
+ const rl = readline.createInterface({
187
+ input: process.stdin,
188
+ output: process.stdout,
189
+ prompt: (0, output_formatter_js_1.colorize)('>>> ', 'cyan'),
190
+ });
191
+ rl.prompt();
192
+ for await (const line of rl) {
193
+ const trimmed = line.trim();
194
+ // Handle commands
195
+ if (trimmed === '/exit' || trimmed === '/quit') {
196
+ rl.close();
197
+ console.log();
198
+ break;
199
+ }
200
+ if (trimmed === '/clear') {
201
+ messages.length = system ? 1 : 0;
202
+ console.log((0, output_formatter_js_1.colorize)('Conversation cleared', 'green'));
203
+ rl.prompt();
204
+ continue;
205
+ }
206
+ if (trimmed === '/help') {
207
+ console.log();
208
+ console.log((0, output_formatter_js_1.style)('Available commands:', 'bold'));
209
+ console.log(' /help - Show this help');
210
+ console.log(' /clear - Clear conversation history');
211
+ console.log(' /exit - Exit chat');
212
+ console.log();
213
+ rl.prompt();
214
+ continue;
215
+ }
216
+ if (!trimmed) {
217
+ rl.prompt();
218
+ continue;
219
+ }
220
+ // Add user message
221
+ messages.push({ role: 'user', content: trimmed });
222
+ // Update state activity
223
+ if ((0, backend_loader_js_1.isModelRunner)(backend)) {
224
+ state_manager_js_1.stateManager.touch(backend.metadata.name, originalModel);
225
+ }
226
+ try {
227
+ const metadata = {
228
+ requestId: `cli-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`,
229
+ timestamp: Date.now(),
230
+ };
231
+ let assistantMessage = '';
232
+ if (noStream) {
233
+ // Non-streaming
234
+ const response = await backend.execute({
235
+ messages,
236
+ parameters: { model },
237
+ metadata,
238
+ });
239
+ const content = response.message.content[0];
240
+ if (content && typeof content !== 'string' && content.type === 'text') {
241
+ assistantMessage = content.text;
242
+ console.log(assistantMessage);
243
+ }
244
+ }
245
+ else {
246
+ // Streaming
247
+ for await (const chunk of backend.executeStream({
248
+ messages,
249
+ parameters: { model },
250
+ metadata,
251
+ })) {
252
+ if (chunk.type === 'content' && typeof chunk.delta === 'string') {
253
+ process.stdout.write(chunk.delta);
254
+ assistantMessage += chunk.delta;
255
+ }
256
+ }
257
+ console.log();
258
+ }
259
+ // Add assistant message to history
260
+ messages.push({ role: 'assistant', content: assistantMessage });
261
+ }
262
+ catch (error) {
263
+ console.error((0, output_formatter_js_1.colorize)(`Error: ${error instanceof Error ? error.message : String(error)}`, 'red'));
264
+ }
265
+ console.log();
266
+ rl.prompt();
267
+ }
268
+ }
269
+ /**
270
+ * Read from stdin.
271
+ */
272
+ async function readStdin() {
273
+ const chunks = [];
274
+ for await (const chunk of process.stdin) {
275
+ chunks.push(chunk);
276
+ }
277
+ return Buffer.concat(chunks).toString('utf-8').trim();
278
+ }
279
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../src/ollama/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ /**
3
+ * Ollama `show` Command
4
+ *
5
+ * Show model information.
6
+ *
7
+ * @module cli/ollama/commands/show
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.showCommand = showCommand;
11
+ const model_translation_js_1 = require("../../utils/model-translation.js");
12
+ const backend_loader_js_1 = require("../../utils/backend-loader.js");
13
+ const output_formatter_js_1 = require("../../utils/output-formatter.js");
14
+ /**
15
+ * Execute the show command.
16
+ */
17
+ async function showCommand(options) {
18
+ const { backend, model, modelMapping, json = false } = options;
19
+ try {
20
+ // Translate model name
21
+ const translatedModel = (0, model_translation_js_1.translateModel)(model, {
22
+ backend,
23
+ mapping: modelMapping,
24
+ });
25
+ // Gather information
26
+ const info = {
27
+ name: model,
28
+ translatedName: translatedModel !== model ? translatedModel : undefined,
29
+ backend: backend.metadata.name,
30
+ provider: backend.metadata.provider,
31
+ version: backend.metadata.version,
32
+ capabilities: backend.metadata.capabilities,
33
+ };
34
+ // Try to get model from listModels if available
35
+ const listModels = backend.listModels;
36
+ if (typeof listModels === 'function') {
37
+ try {
38
+ const result = await listModels.call(backend);
39
+ const foundModel = result?.models?.find((m) => m.name === translatedModel || m.id === translatedModel);
40
+ if (foundModel) {
41
+ info.modelDetails = foundModel;
42
+ }
43
+ }
44
+ catch {
45
+ // Ignore listModels errors
46
+ }
47
+ }
48
+ // Get model runner stats if available
49
+ if ((0, backend_loader_js_1.isModelRunner)(backend)) {
50
+ const runner = backend;
51
+ const stats = runner.getStats();
52
+ if (stats) {
53
+ info.runtime = {
54
+ isRunning: stats.isRunning,
55
+ pid: stats.pid,
56
+ uptime: stats.uptime,
57
+ requestCount: stats.requestCount,
58
+ };
59
+ }
60
+ // Get config if available
61
+ const config = runner.config;
62
+ if (config) {
63
+ info.config = {
64
+ contextSize: config.runtime?.contextSize,
65
+ gpuLayers: config.runtime?.gpuLayers,
66
+ threads: config.runtime?.threads,
67
+ batchSize: config.runtime?.batchSize,
68
+ };
69
+ }
70
+ }
71
+ if (json) {
72
+ console.log(JSON.stringify(info, null, 2));
73
+ return;
74
+ }
75
+ // Format output
76
+ console.log();
77
+ console.log((0, output_formatter_js_1.style)('Model', 'bold'));
78
+ console.log(` name ${model}`);
79
+ if (info.translatedName) {
80
+ console.log(` backend model ${(0, output_formatter_js_1.colorize)(info.translatedName, 'cyan')}`);
81
+ }
82
+ console.log(` backend ${info.backend}`);
83
+ console.log(` provider ${info.provider}`);
84
+ if (info.modelDetails) {
85
+ console.log();
86
+ console.log((0, output_formatter_js_1.style)('Details', 'bold'));
87
+ if (info.modelDetails.contextWindow) {
88
+ console.log(` context length ${info.modelDetails.contextWindow}`);
89
+ }
90
+ if (info.modelDetails.description) {
91
+ console.log(` description ${info.modelDetails.description}`);
92
+ }
93
+ }
94
+ if (info.capabilities) {
95
+ console.log();
96
+ console.log((0, output_formatter_js_1.style)('Capabilities', 'bold'));
97
+ console.log(` streaming ${info.capabilities.streaming ? '✓' : '✗'}`);
98
+ console.log(` tools ${info.capabilities.tools ? '✓' : '✗'}`);
99
+ console.log(` vision ${info.capabilities.vision ? '✓' : '✗'}`);
100
+ }
101
+ if (info.config) {
102
+ console.log();
103
+ console.log((0, output_formatter_js_1.style)('Configuration', 'bold'));
104
+ if (info.config.contextSize) {
105
+ console.log(` context size ${info.config.contextSize}`);
106
+ }
107
+ if (info.config.gpuLayers !== undefined) {
108
+ console.log(` gpu layers ${info.config.gpuLayers}`);
109
+ }
110
+ if (info.config.threads) {
111
+ console.log(` threads ${info.config.threads}`);
112
+ }
113
+ if (info.config.batchSize) {
114
+ console.log(` batch size ${info.config.batchSize}`);
115
+ }
116
+ }
117
+ if (info.runtime) {
118
+ console.log();
119
+ console.log((0, output_formatter_js_1.style)('Runtime', 'bold'));
120
+ console.log(` status ${info.runtime.isRunning ? (0, output_formatter_js_1.colorize)('Running', 'green') : (0, output_formatter_js_1.colorize)('Stopped', 'red')}`);
121
+ if (info.runtime.pid) {
122
+ console.log(` pid ${info.runtime.pid}`);
123
+ }
124
+ if (info.runtime.uptime) {
125
+ console.log(` uptime ${(info.runtime.uptime / 1000).toFixed(1)}s`);
126
+ }
127
+ if (info.runtime.requestCount !== undefined) {
128
+ console.log(` requests ${info.runtime.requestCount}`);
129
+ }
130
+ }
131
+ console.log();
132
+ }
133
+ catch (error) {
134
+ console.error((0, output_formatter_js_1.colorize)(`Error showing model info: ${error instanceof Error ? error.message : String(error)}`, 'red'));
135
+ process.exit(1);
136
+ }
137
+ }
138
+ //# sourceMappingURL=show.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../../../src/ollama/commands/show.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ /**
3
+ * Ollama CLI Interface
4
+ *
5
+ * Main entry point for Ollama CLI interface.
6
+ *
7
+ * @module cli/ollama
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.main = main;
11
+ const backend_loader_js_1 = require("../utils/backend-loader.js");
12
+ const model_translation_js_1 = require("../utils/model-translation.js");
13
+ const output_formatter_js_1 = require("../utils/output-formatter.js");
14
+ const run_js_1 = require("./commands/run.js");
15
+ const list_js_1 = require("./commands/list.js");
16
+ const ps_js_1 = require("./commands/ps.js");
17
+ const show_js_1 = require("./commands/show.js");
18
+ const pull_js_1 = require("./commands/pull.js");
19
+ /**
20
+ * Parse command line arguments.
21
+ */
22
+ function parseArgs(args) {
23
+ const options = {};
24
+ const positional = [];
25
+ let command = 'run'; // default command
26
+ let commandFound = false;
27
+ for (let i = 0; i < args.length; i++) {
28
+ const arg = args[i];
29
+ if (!arg)
30
+ continue;
31
+ if (arg.startsWith('--')) {
32
+ const key = arg.slice(2);
33
+ const nextArg = args[i + 1];
34
+ if (nextArg && !nextArg.startsWith('--') && !nextArg.startsWith('-')) {
35
+ options[key] = nextArg;
36
+ i++;
37
+ }
38
+ else {
39
+ options[key] = true;
40
+ }
41
+ }
42
+ else if (arg.startsWith('-')) {
43
+ const key = arg.slice(1);
44
+ options[key] = true;
45
+ }
46
+ else {
47
+ // First non-option argument is the command
48
+ if (!commandFound) {
49
+ command = arg;
50
+ commandFound = true;
51
+ }
52
+ else {
53
+ positional.push(arg);
54
+ }
55
+ }
56
+ }
57
+ return { command, options, positional };
58
+ }
59
+ /**
60
+ * Show help message.
61
+ */
62
+ function showHelp() {
63
+ console.log(`
64
+ Ollama CLI Emulator
65
+
66
+ Emulate Ollama CLI interface using any AI.Matey backend adapter.
67
+
68
+ Usage:
69
+ ai-matey emulate-ollama --backend <path> <command> [options]
70
+
71
+ Commands:
72
+ run <model> [prompt] Run a model (default command)
73
+ pull <model> Download GGUF model from Ollama registry
74
+ list List available models
75
+ ps List running models
76
+ show <model> Show model information
77
+
78
+ Global Options:
79
+ --backend <path> Backend module to load (required for run/list/ps/show)
80
+ --model-map <path> Model translation mapping JSON file
81
+ --no-color Disable colored output
82
+ --no-stream Disable streaming output
83
+ --json Output as JSON
84
+ --verbose, -v Verbose output
85
+ --help, -h Show this help
86
+ --version Show version
87
+
88
+ Run Command Options:
89
+ --system <text> System message
90
+
91
+ Pull Command Options:
92
+ --output <path> Output file path (default: ./models/<model>.gguf)
93
+ --insecure Allow insecure connections
94
+
95
+ Examples:
96
+ # Download a model
97
+ ai-matey emulate-ollama pull phi3:3.8b
98
+ ai-matey emulate-ollama pull llama3.1:8b --output ./models/my-model.gguf
99
+
100
+ # Interactive mode
101
+ ai-matey emulate-ollama --backend ./backend.mjs run llama3.1
102
+
103
+ # Single prompt
104
+ ai-matey emulate-ollama --backend ./backend.mjs run llama3.1 "What is 2+2?"
105
+
106
+ # Pipe input
107
+ echo "Hello" | ai-matey emulate-ollama --backend ./backend.mjs run llama3.1
108
+
109
+ # With model mapping
110
+ ai-matey emulate-ollama --backend ./backend.mjs --model-map ./map.json run llama3.1
111
+ `);
112
+ }
113
+ /**
114
+ * Show version.
115
+ */
116
+ function showVersion() {
117
+ console.log('ai-matey emulate-ollama v0.1.0');
118
+ }
119
+ /**
120
+ * Main CLI entry point.
121
+ */
122
+ async function main(argv = process.argv.slice(2)) {
123
+ let options = {};
124
+ try {
125
+ // Parse arguments
126
+ const parsed = parseArgs(argv);
127
+ options = parsed.options;
128
+ const { command, positional } = parsed;
129
+ // Handle help/version (check before required options)
130
+ if (options.help || options.h) {
131
+ showHelp();
132
+ return;
133
+ }
134
+ if (options.version) {
135
+ showVersion();
136
+ return;
137
+ }
138
+ // Set up colors
139
+ if (options['no-color']) {
140
+ (0, output_formatter_js_1.setColorsEnabled)(false);
141
+ }
142
+ // Handle pull command (doesn't require backend)
143
+ if (command === 'pull') {
144
+ const model = positional[0];
145
+ if (!model) {
146
+ (0, output_formatter_js_1.error)('Missing required argument: <model>');
147
+ console.log('\nUsage: ai-matey emulate-ollama pull <model> [options]');
148
+ console.log('Example: ai-matey emulate-ollama pull phi3:3.8b');
149
+ process.exit(1);
150
+ }
151
+ await (0, pull_js_1.pullCommand)({
152
+ model,
153
+ output: options.output,
154
+ verbose: options.verbose || options.v,
155
+ insecure: options.insecure,
156
+ });
157
+ return;
158
+ }
159
+ // Check for required backend option for other commands
160
+ if (!options.backend) {
161
+ (0, output_formatter_js_1.error)('Missing required option: --backend <path>');
162
+ console.log('\nRun with --help for usage information');
163
+ process.exit(1);
164
+ }
165
+ // Load backend
166
+ const backend = await (0, backend_loader_js_1.loadBackend)({ path: options.backend });
167
+ // Load model mapping if specified
168
+ const modelMapping = options['model-map']
169
+ ? await (0, model_translation_js_1.loadModelMapping)(options['model-map'])
170
+ : undefined;
171
+ // Dispatch to command
172
+ switch (command) {
173
+ case 'run': {
174
+ const model = positional[0];
175
+ if (!model) {
176
+ (0, output_formatter_js_1.error)('Missing required argument: <model>');
177
+ console.log('\nUsage: ai-matey emulate-ollama --backend <path> run <model> [prompt]');
178
+ process.exit(1);
179
+ }
180
+ const prompt = positional.slice(1).join(' ') || undefined;
181
+ await (0, run_js_1.runCommand)({
182
+ backend,
183
+ model,
184
+ prompt,
185
+ modelMapping,
186
+ json: options.json,
187
+ verbose: options.verbose || options.v,
188
+ system: options.system,
189
+ noStream: options['no-stream'],
190
+ });
191
+ break;
192
+ }
193
+ case 'list':
194
+ await (0, list_js_1.listCommand)({
195
+ backend,
196
+ modelMapping,
197
+ json: options.json,
198
+ verbose: options.verbose || options.v,
199
+ });
200
+ break;
201
+ case 'ps':
202
+ await (0, ps_js_1.psCommand)({
203
+ backend,
204
+ json: options.json,
205
+ verbose: options.verbose || options.v,
206
+ });
207
+ break;
208
+ case 'show': {
209
+ const model = positional[0];
210
+ if (!model) {
211
+ (0, output_formatter_js_1.error)('Missing required argument: <model>');
212
+ console.log('\nUsage: ollama-cli-interface --backend <path> show <model>');
213
+ process.exit(1);
214
+ }
215
+ await (0, show_js_1.showCommand)({
216
+ backend,
217
+ model,
218
+ modelMapping,
219
+ json: options.json,
220
+ verbose: options.verbose || options.v,
221
+ });
222
+ break;
223
+ }
224
+ default:
225
+ (0, output_formatter_js_1.error)(`Unknown command: ${command}`);
226
+ console.log('\nRun with --help for available commands');
227
+ process.exit(1);
228
+ }
229
+ }
230
+ catch (err) {
231
+ (0, output_formatter_js_1.error)(err instanceof Error ? err.message : String(err));
232
+ if (options.verbose) {
233
+ console.error(err);
234
+ }
235
+ process.exit(1);
236
+ }
237
+ }
238
+ //# sourceMappingURL=index.js.map