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.
- package/LICENSE +21 -0
- package/dist/cjs/convert-request.js +365 -0
- package/dist/cjs/convert-request.js.map +1 -0
- package/dist/cjs/convert-response.js +211 -0
- package/dist/cjs/convert-response.js.map +1 -0
- package/dist/cjs/converters/request-converters.js +183 -0
- package/dist/cjs/converters/request-converters.js.map +1 -0
- package/dist/cjs/converters/response-converters.js +203 -0
- package/dist/cjs/converters/response-converters.js.map +1 -0
- package/dist/cjs/create-backend.js +569 -0
- package/dist/cjs/create-backend.js.map +1 -0
- package/dist/cjs/index.js +31 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/main.js +181 -0
- package/dist/cjs/main.js.map +1 -0
- package/dist/cjs/ollama/commands/list.js +70 -0
- package/dist/cjs/ollama/commands/list.js.map +1 -0
- package/dist/cjs/ollama/commands/ps.js +80 -0
- package/dist/cjs/ollama/commands/ps.js.map +1 -0
- package/dist/cjs/ollama/commands/pull.js +198 -0
- package/dist/cjs/ollama/commands/pull.js.map +1 -0
- package/dist/cjs/ollama/commands/run.js +279 -0
- package/dist/cjs/ollama/commands/run.js.map +1 -0
- package/dist/cjs/ollama/commands/show.js +138 -0
- package/dist/cjs/ollama/commands/show.js.map +1 -0
- package/dist/cjs/ollama/index.js +238 -0
- package/dist/cjs/ollama/index.js.map +1 -0
- package/dist/cjs/ollama/types.js +10 -0
- package/dist/cjs/ollama/types.js.map +1 -0
- package/dist/cjs/proxy.js +406 -0
- package/dist/cjs/proxy.js.map +1 -0
- package/dist/cjs/utils/backend-loader.js +112 -0
- package/dist/cjs/utils/backend-loader.js.map +1 -0
- package/dist/cjs/utils/index.js +29 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/model-translation.js +138 -0
- package/dist/cjs/utils/model-translation.js.map +1 -0
- package/dist/cjs/utils/output-formatter.js +241 -0
- package/dist/cjs/utils/output-formatter.js.map +1 -0
- package/dist/cjs/utils/pipeline-inspector.js +90 -0
- package/dist/cjs/utils/pipeline-inspector.js.map +1 -0
- package/dist/cjs/utils/state-manager.js +114 -0
- package/dist/cjs/utils/state-manager.js.map +1 -0
- package/dist/esm/convert-request.js +331 -0
- package/dist/esm/convert-request.js.map +1 -0
- package/dist/esm/convert-response.js +177 -0
- package/dist/esm/convert-response.js.map +1 -0
- package/dist/esm/converters/request-converters.js +175 -0
- package/dist/esm/converters/request-converters.js.map +1 -0
- package/dist/esm/converters/response-converters.js +191 -0
- package/dist/esm/converters/response-converters.js.map +1 -0
- package/dist/esm/create-backend.js +533 -0
- package/dist/esm/create-backend.js.map +1 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/main.js +149 -0
- package/dist/esm/main.js.map +1 -0
- package/dist/esm/ollama/commands/list.js +67 -0
- package/dist/esm/ollama/commands/list.js.map +1 -0
- package/dist/esm/ollama/commands/ps.js +77 -0
- package/dist/esm/ollama/commands/ps.js.map +1 -0
- package/dist/esm/ollama/commands/pull.js +195 -0
- package/dist/esm/ollama/commands/pull.js.map +1 -0
- package/dist/esm/ollama/commands/run.js +243 -0
- package/dist/esm/ollama/commands/run.js.map +1 -0
- package/dist/esm/ollama/commands/show.js +135 -0
- package/dist/esm/ollama/commands/show.js.map +1 -0
- package/dist/esm/ollama/index.js +235 -0
- package/dist/esm/ollama/index.js.map +1 -0
- package/dist/esm/ollama/types.js +9 -0
- package/dist/esm/ollama/types.js.map +1 -0
- package/dist/esm/proxy.js +403 -0
- package/dist/esm/proxy.js.map +1 -0
- package/dist/esm/utils/backend-loader.js +74 -0
- package/dist/esm/utils/backend-loader.js.map +1 -0
- package/dist/esm/utils/index.js +13 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/model-translation.js +99 -0
- package/dist/esm/utils/model-translation.js.map +1 -0
- package/dist/esm/utils/output-formatter.js +224 -0
- package/dist/esm/utils/output-formatter.js.map +1 -0
- package/dist/esm/utils/pipeline-inspector.js +84 -0
- package/dist/esm/utils/pipeline-inspector.js.map +1 -0
- package/dist/esm/utils/state-manager.js +111 -0
- package/dist/esm/utils/state-manager.js.map +1 -0
- package/dist/types/convert-request.d.ts +15 -0
- package/dist/types/convert-request.d.ts.map +1 -0
- package/dist/types/convert-response.d.ts +16 -0
- package/dist/types/convert-response.d.ts.map +1 -0
- package/dist/types/converters/request-converters.d.ts +139 -0
- package/dist/types/converters/request-converters.d.ts.map +1 -0
- package/dist/types/converters/response-converters.d.ts +134 -0
- package/dist/types/converters/response-converters.d.ts.map +1 -0
- package/dist/types/create-backend.d.ts +20 -0
- package/dist/types/create-backend.d.ts.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/main.d.ts +19 -0
- package/dist/types/main.d.ts.map +1 -0
- package/dist/types/ollama/commands/list.d.ts +32 -0
- package/dist/types/ollama/commands/list.d.ts.map +1 -0
- package/dist/types/ollama/commands/ps.d.ts +27 -0
- package/dist/types/ollama/commands/ps.d.ts.map +1 -0
- package/dist/types/ollama/commands/pull.d.ts +21 -0
- package/dist/types/ollama/commands/pull.d.ts.map +1 -0
- package/dist/types/ollama/commands/run.d.ts +48 -0
- package/dist/types/ollama/commands/run.d.ts.map +1 -0
- package/dist/types/ollama/commands/show.d.ts +36 -0
- package/dist/types/ollama/commands/show.d.ts.map +1 -0
- package/dist/types/ollama/index.d.ts +12 -0
- package/dist/types/ollama/index.d.ts.map +1 -0
- package/dist/types/ollama/types.d.ts +58 -0
- package/dist/types/ollama/types.d.ts.map +1 -0
- package/dist/types/proxy.d.ts +16 -0
- package/dist/types/proxy.d.ts.map +1 -0
- package/dist/types/utils/backend-loader.d.ts +55 -0
- package/dist/types/utils/backend-loader.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +13 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/model-translation.d.ts +64 -0
- package/dist/types/utils/model-translation.d.ts.map +1 -0
- package/dist/types/utils/output-formatter.d.ts +113 -0
- package/dist/types/utils/output-formatter.d.ts.map +1 -0
- package/dist/types/utils/pipeline-inspector.d.ts +50 -0
- package/dist/types/utils/pipeline-inspector.d.ts.map +1 -0
- package/dist/types/utils/state-manager.d.ts +91 -0
- package/dist/types/utils/state-manager.d.ts.map +1 -0
- package/package.json +75 -0
- 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
|