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,243 @@
1
+ /**
2
+ * Ollama `run` Command
3
+ *
4
+ * Run a model interactively or with a single prompt.
5
+ *
6
+ * @module cli/ollama/commands/run
7
+ */
8
+ import * as readline from 'node:readline';
9
+ import { translateModel } from '../../utils/model-translation.js';
10
+ import { colorize, style } from '../../utils/output-formatter.js';
11
+ import { stateManager } from '../../utils/state-manager.js';
12
+ import { isModelRunner } from '../../utils/backend-loader.js';
13
+ /**
14
+ * Execute the run command.
15
+ */
16
+ export async function runCommand(options) {
17
+ const { backend, model, prompt, modelMapping, json = false, verbose = false, system, noStream = false, } = options;
18
+ // Translate model name
19
+ const translatedModel = translateModel(model, {
20
+ backend,
21
+ mapping: modelMapping,
22
+ });
23
+ if (verbose && translatedModel !== model) {
24
+ console.error(colorize(`Model translated: ${model} → ${translatedModel}`, 'gray'));
25
+ }
26
+ // Start model runner if needed
27
+ if (isModelRunner(backend)) {
28
+ const runner = backend;
29
+ if (!runner.isRunning) {
30
+ if (verbose) {
31
+ console.error(colorize('Starting model runner...', 'gray'));
32
+ }
33
+ await runner.start();
34
+ // Track in state
35
+ const stats = runner.getStats();
36
+ stateManager.add({
37
+ name: model,
38
+ backend: backend.metadata.name,
39
+ pid: stats.pid,
40
+ startTime: Date.now(),
41
+ lastActivity: Date.now(),
42
+ });
43
+ }
44
+ }
45
+ // Check if we have a prompt (non-interactive mode)
46
+ if (prompt) {
47
+ await runSinglePrompt({
48
+ backend,
49
+ model: translatedModel,
50
+ prompt,
51
+ system,
52
+ json,
53
+ noStream,
54
+ });
55
+ return;
56
+ }
57
+ // Check for piped input
58
+ if (!process.stdin.isTTY) {
59
+ const input = await readStdin();
60
+ await runSinglePrompt({
61
+ backend,
62
+ model: translatedModel,
63
+ prompt: input,
64
+ system,
65
+ json,
66
+ noStream,
67
+ });
68
+ return;
69
+ }
70
+ // Interactive mode
71
+ await runInteractive({
72
+ backend,
73
+ model: translatedModel,
74
+ originalModel: model,
75
+ system,
76
+ noStream,
77
+ });
78
+ }
79
+ /**
80
+ * Run a single prompt (non-interactive).
81
+ */
82
+ async function runSinglePrompt(options) {
83
+ const { backend, model, prompt, system, json, noStream } = options;
84
+ // Build messages
85
+ const messages = [];
86
+ if (system) {
87
+ messages.push({ role: 'system', content: system });
88
+ }
89
+ messages.push({ role: 'user', content: prompt });
90
+ try {
91
+ const metadata = {
92
+ requestId: `cli-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`,
93
+ timestamp: Date.now(),
94
+ };
95
+ if (noStream || json) {
96
+ // Non-streaming
97
+ const response = await backend.execute({
98
+ messages,
99
+ parameters: { model },
100
+ metadata,
101
+ });
102
+ if (json) {
103
+ console.log(JSON.stringify(response, null, 2));
104
+ }
105
+ else {
106
+ const content = response.message.content[0];
107
+ if (content && typeof content !== 'string' && content.type === 'text') {
108
+ console.log(content.text);
109
+ }
110
+ }
111
+ }
112
+ else {
113
+ // Streaming (default for Ollama compatibility)
114
+ for await (const chunk of backend.executeStream({
115
+ messages,
116
+ parameters: { model },
117
+ metadata,
118
+ })) {
119
+ if (chunk.type === 'content' && typeof chunk.delta === 'string') {
120
+ process.stdout.write(chunk.delta);
121
+ }
122
+ }
123
+ process.stdout.write('\n');
124
+ }
125
+ }
126
+ catch (error) {
127
+ console.error(colorize(`Error: ${error instanceof Error ? error.message : String(error)}`, 'red'));
128
+ process.exit(1);
129
+ }
130
+ }
131
+ /**
132
+ * Run interactive mode.
133
+ */
134
+ async function runInteractive(options) {
135
+ const { backend, model, originalModel, system, noStream } = options;
136
+ // Conversation history
137
+ const messages = [];
138
+ if (system) {
139
+ messages.push({ role: 'system', content: system });
140
+ }
141
+ // Print welcome
142
+ console.log();
143
+ console.log(style('>>> Ollama CLI Interface', 'bold', 'cyan'));
144
+ console.log(`Model: ${colorize(originalModel, 'green')}${model !== originalModel ? colorize(` (using ${model})`, 'gray') : ''}`);
145
+ console.log(`Backend: ${colorize(backend.metadata.name, 'blue')}`);
146
+ console.log();
147
+ console.log(colorize('Type your message and press Enter. Use /exit to quit.', 'gray'));
148
+ console.log();
149
+ // Create readline interface
150
+ const rl = readline.createInterface({
151
+ input: process.stdin,
152
+ output: process.stdout,
153
+ prompt: colorize('>>> ', 'cyan'),
154
+ });
155
+ rl.prompt();
156
+ for await (const line of rl) {
157
+ const trimmed = line.trim();
158
+ // Handle commands
159
+ if (trimmed === '/exit' || trimmed === '/quit') {
160
+ rl.close();
161
+ console.log();
162
+ break;
163
+ }
164
+ if (trimmed === '/clear') {
165
+ messages.length = system ? 1 : 0;
166
+ console.log(colorize('Conversation cleared', 'green'));
167
+ rl.prompt();
168
+ continue;
169
+ }
170
+ if (trimmed === '/help') {
171
+ console.log();
172
+ console.log(style('Available commands:', 'bold'));
173
+ console.log(' /help - Show this help');
174
+ console.log(' /clear - Clear conversation history');
175
+ console.log(' /exit - Exit chat');
176
+ console.log();
177
+ rl.prompt();
178
+ continue;
179
+ }
180
+ if (!trimmed) {
181
+ rl.prompt();
182
+ continue;
183
+ }
184
+ // Add user message
185
+ messages.push({ role: 'user', content: trimmed });
186
+ // Update state activity
187
+ if (isModelRunner(backend)) {
188
+ stateManager.touch(backend.metadata.name, originalModel);
189
+ }
190
+ try {
191
+ const metadata = {
192
+ requestId: `cli-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`,
193
+ timestamp: Date.now(),
194
+ };
195
+ let assistantMessage = '';
196
+ if (noStream) {
197
+ // Non-streaming
198
+ const response = await backend.execute({
199
+ messages,
200
+ parameters: { model },
201
+ metadata,
202
+ });
203
+ const content = response.message.content[0];
204
+ if (content && typeof content !== 'string' && content.type === 'text') {
205
+ assistantMessage = content.text;
206
+ console.log(assistantMessage);
207
+ }
208
+ }
209
+ else {
210
+ // Streaming
211
+ for await (const chunk of backend.executeStream({
212
+ messages,
213
+ parameters: { model },
214
+ metadata,
215
+ })) {
216
+ if (chunk.type === 'content' && typeof chunk.delta === 'string') {
217
+ process.stdout.write(chunk.delta);
218
+ assistantMessage += chunk.delta;
219
+ }
220
+ }
221
+ console.log();
222
+ }
223
+ // Add assistant message to history
224
+ messages.push({ role: 'assistant', content: assistantMessage });
225
+ }
226
+ catch (error) {
227
+ console.error(colorize(`Error: ${error instanceof Error ? error.message : String(error)}`, 'red'));
228
+ }
229
+ console.log();
230
+ rl.prompt();
231
+ }
232
+ }
233
+ /**
234
+ * Read from stdin.
235
+ */
236
+ async function readStdin() {
237
+ const chunks = [];
238
+ for await (const chunk of process.stdin) {
239
+ chunks.push(chunk);
240
+ }
241
+ return Buffer.concat(chunks).toString('utf-8').trim();
242
+ }
243
+ //# 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,135 @@
1
+ /**
2
+ * Ollama `show` Command
3
+ *
4
+ * Show model information.
5
+ *
6
+ * @module cli/ollama/commands/show
7
+ */
8
+ import { translateModel } from '../../utils/model-translation.js';
9
+ import { isModelRunner } from '../../utils/backend-loader.js';
10
+ import { colorize, style } from '../../utils/output-formatter.js';
11
+ /**
12
+ * Execute the show command.
13
+ */
14
+ export async function showCommand(options) {
15
+ const { backend, model, modelMapping, json = false } = options;
16
+ try {
17
+ // Translate model name
18
+ const translatedModel = translateModel(model, {
19
+ backend,
20
+ mapping: modelMapping,
21
+ });
22
+ // Gather information
23
+ const info = {
24
+ name: model,
25
+ translatedName: translatedModel !== model ? translatedModel : undefined,
26
+ backend: backend.metadata.name,
27
+ provider: backend.metadata.provider,
28
+ version: backend.metadata.version,
29
+ capabilities: backend.metadata.capabilities,
30
+ };
31
+ // Try to get model from listModels if available
32
+ const listModels = backend.listModels;
33
+ if (typeof listModels === 'function') {
34
+ try {
35
+ const result = await listModels.call(backend);
36
+ const foundModel = result?.models?.find((m) => m.name === translatedModel || m.id === translatedModel);
37
+ if (foundModel) {
38
+ info.modelDetails = foundModel;
39
+ }
40
+ }
41
+ catch {
42
+ // Ignore listModels errors
43
+ }
44
+ }
45
+ // Get model runner stats if available
46
+ if (isModelRunner(backend)) {
47
+ const runner = backend;
48
+ const stats = runner.getStats();
49
+ if (stats) {
50
+ info.runtime = {
51
+ isRunning: stats.isRunning,
52
+ pid: stats.pid,
53
+ uptime: stats.uptime,
54
+ requestCount: stats.requestCount,
55
+ };
56
+ }
57
+ // Get config if available
58
+ const config = runner.config;
59
+ if (config) {
60
+ info.config = {
61
+ contextSize: config.runtime?.contextSize,
62
+ gpuLayers: config.runtime?.gpuLayers,
63
+ threads: config.runtime?.threads,
64
+ batchSize: config.runtime?.batchSize,
65
+ };
66
+ }
67
+ }
68
+ if (json) {
69
+ console.log(JSON.stringify(info, null, 2));
70
+ return;
71
+ }
72
+ // Format output
73
+ console.log();
74
+ console.log(style('Model', 'bold'));
75
+ console.log(` name ${model}`);
76
+ if (info.translatedName) {
77
+ console.log(` backend model ${colorize(info.translatedName, 'cyan')}`);
78
+ }
79
+ console.log(` backend ${info.backend}`);
80
+ console.log(` provider ${info.provider}`);
81
+ if (info.modelDetails) {
82
+ console.log();
83
+ console.log(style('Details', 'bold'));
84
+ if (info.modelDetails.contextWindow) {
85
+ console.log(` context length ${info.modelDetails.contextWindow}`);
86
+ }
87
+ if (info.modelDetails.description) {
88
+ console.log(` description ${info.modelDetails.description}`);
89
+ }
90
+ }
91
+ if (info.capabilities) {
92
+ console.log();
93
+ console.log(style('Capabilities', 'bold'));
94
+ console.log(` streaming ${info.capabilities.streaming ? '✓' : '✗'}`);
95
+ console.log(` tools ${info.capabilities.tools ? '✓' : '✗'}`);
96
+ console.log(` vision ${info.capabilities.vision ? '✓' : '✗'}`);
97
+ }
98
+ if (info.config) {
99
+ console.log();
100
+ console.log(style('Configuration', 'bold'));
101
+ if (info.config.contextSize) {
102
+ console.log(` context size ${info.config.contextSize}`);
103
+ }
104
+ if (info.config.gpuLayers !== undefined) {
105
+ console.log(` gpu layers ${info.config.gpuLayers}`);
106
+ }
107
+ if (info.config.threads) {
108
+ console.log(` threads ${info.config.threads}`);
109
+ }
110
+ if (info.config.batchSize) {
111
+ console.log(` batch size ${info.config.batchSize}`);
112
+ }
113
+ }
114
+ if (info.runtime) {
115
+ console.log();
116
+ console.log(style('Runtime', 'bold'));
117
+ console.log(` status ${info.runtime.isRunning ? colorize('Running', 'green') : colorize('Stopped', 'red')}`);
118
+ if (info.runtime.pid) {
119
+ console.log(` pid ${info.runtime.pid}`);
120
+ }
121
+ if (info.runtime.uptime) {
122
+ console.log(` uptime ${(info.runtime.uptime / 1000).toFixed(1)}s`);
123
+ }
124
+ if (info.runtime.requestCount !== undefined) {
125
+ console.log(` requests ${info.runtime.requestCount}`);
126
+ }
127
+ }
128
+ console.log();
129
+ }
130
+ catch (error) {
131
+ console.error(colorize(`Error showing model info: ${error instanceof Error ? error.message : String(error)}`, 'red'));
132
+ process.exit(1);
133
+ }
134
+ }
135
+ //# 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,235 @@
1
+ /**
2
+ * Ollama CLI Interface
3
+ *
4
+ * Main entry point for Ollama CLI interface.
5
+ *
6
+ * @module cli/ollama
7
+ */
8
+ import { loadBackend } from '../utils/backend-loader.js';
9
+ import { loadModelMapping } from '../utils/model-translation.js';
10
+ import { setColorsEnabled, error } from '../utils/output-formatter.js';
11
+ import { runCommand } from './commands/run.js';
12
+ import { listCommand } from './commands/list.js';
13
+ import { psCommand } from './commands/ps.js';
14
+ import { showCommand } from './commands/show.js';
15
+ import { pullCommand } from './commands/pull.js';
16
+ /**
17
+ * Parse command line arguments.
18
+ */
19
+ function parseArgs(args) {
20
+ const options = {};
21
+ const positional = [];
22
+ let command = 'run'; // default command
23
+ let commandFound = false;
24
+ for (let i = 0; i < args.length; i++) {
25
+ const arg = args[i];
26
+ if (!arg)
27
+ continue;
28
+ if (arg.startsWith('--')) {
29
+ const key = arg.slice(2);
30
+ const nextArg = args[i + 1];
31
+ if (nextArg && !nextArg.startsWith('--') && !nextArg.startsWith('-')) {
32
+ options[key] = nextArg;
33
+ i++;
34
+ }
35
+ else {
36
+ options[key] = true;
37
+ }
38
+ }
39
+ else if (arg.startsWith('-')) {
40
+ const key = arg.slice(1);
41
+ options[key] = true;
42
+ }
43
+ else {
44
+ // First non-option argument is the command
45
+ if (!commandFound) {
46
+ command = arg;
47
+ commandFound = true;
48
+ }
49
+ else {
50
+ positional.push(arg);
51
+ }
52
+ }
53
+ }
54
+ return { command, options, positional };
55
+ }
56
+ /**
57
+ * Show help message.
58
+ */
59
+ function showHelp() {
60
+ console.log(`
61
+ Ollama CLI Emulator
62
+
63
+ Emulate Ollama CLI interface using any AI.Matey backend adapter.
64
+
65
+ Usage:
66
+ ai-matey emulate-ollama --backend <path> <command> [options]
67
+
68
+ Commands:
69
+ run <model> [prompt] Run a model (default command)
70
+ pull <model> Download GGUF model from Ollama registry
71
+ list List available models
72
+ ps List running models
73
+ show <model> Show model information
74
+
75
+ Global Options:
76
+ --backend <path> Backend module to load (required for run/list/ps/show)
77
+ --model-map <path> Model translation mapping JSON file
78
+ --no-color Disable colored output
79
+ --no-stream Disable streaming output
80
+ --json Output as JSON
81
+ --verbose, -v Verbose output
82
+ --help, -h Show this help
83
+ --version Show version
84
+
85
+ Run Command Options:
86
+ --system <text> System message
87
+
88
+ Pull Command Options:
89
+ --output <path> Output file path (default: ./models/<model>.gguf)
90
+ --insecure Allow insecure connections
91
+
92
+ Examples:
93
+ # Download a model
94
+ ai-matey emulate-ollama pull phi3:3.8b
95
+ ai-matey emulate-ollama pull llama3.1:8b --output ./models/my-model.gguf
96
+
97
+ # Interactive mode
98
+ ai-matey emulate-ollama --backend ./backend.mjs run llama3.1
99
+
100
+ # Single prompt
101
+ ai-matey emulate-ollama --backend ./backend.mjs run llama3.1 "What is 2+2?"
102
+
103
+ # Pipe input
104
+ echo "Hello" | ai-matey emulate-ollama --backend ./backend.mjs run llama3.1
105
+
106
+ # With model mapping
107
+ ai-matey emulate-ollama --backend ./backend.mjs --model-map ./map.json run llama3.1
108
+ `);
109
+ }
110
+ /**
111
+ * Show version.
112
+ */
113
+ function showVersion() {
114
+ console.log('ai-matey emulate-ollama v0.1.0');
115
+ }
116
+ /**
117
+ * Main CLI entry point.
118
+ */
119
+ export async function main(argv = process.argv.slice(2)) {
120
+ let options = {};
121
+ try {
122
+ // Parse arguments
123
+ const parsed = parseArgs(argv);
124
+ options = parsed.options;
125
+ const { command, positional } = parsed;
126
+ // Handle help/version (check before required options)
127
+ if (options.help || options.h) {
128
+ showHelp();
129
+ return;
130
+ }
131
+ if (options.version) {
132
+ showVersion();
133
+ return;
134
+ }
135
+ // Set up colors
136
+ if (options['no-color']) {
137
+ setColorsEnabled(false);
138
+ }
139
+ // Handle pull command (doesn't require backend)
140
+ if (command === 'pull') {
141
+ const model = positional[0];
142
+ if (!model) {
143
+ error('Missing required argument: <model>');
144
+ console.log('\nUsage: ai-matey emulate-ollama pull <model> [options]');
145
+ console.log('Example: ai-matey emulate-ollama pull phi3:3.8b');
146
+ process.exit(1);
147
+ }
148
+ await pullCommand({
149
+ model,
150
+ output: options.output,
151
+ verbose: options.verbose || options.v,
152
+ insecure: options.insecure,
153
+ });
154
+ return;
155
+ }
156
+ // Check for required backend option for other commands
157
+ if (!options.backend) {
158
+ error('Missing required option: --backend <path>');
159
+ console.log('\nRun with --help for usage information');
160
+ process.exit(1);
161
+ }
162
+ // Load backend
163
+ const backend = await loadBackend({ path: options.backend });
164
+ // Load model mapping if specified
165
+ const modelMapping = options['model-map']
166
+ ? await loadModelMapping(options['model-map'])
167
+ : undefined;
168
+ // Dispatch to command
169
+ switch (command) {
170
+ case 'run': {
171
+ const model = positional[0];
172
+ if (!model) {
173
+ error('Missing required argument: <model>');
174
+ console.log('\nUsage: ai-matey emulate-ollama --backend <path> run <model> [prompt]');
175
+ process.exit(1);
176
+ }
177
+ const prompt = positional.slice(1).join(' ') || undefined;
178
+ await runCommand({
179
+ backend,
180
+ model,
181
+ prompt,
182
+ modelMapping,
183
+ json: options.json,
184
+ verbose: options.verbose || options.v,
185
+ system: options.system,
186
+ noStream: options['no-stream'],
187
+ });
188
+ break;
189
+ }
190
+ case 'list':
191
+ await listCommand({
192
+ backend,
193
+ modelMapping,
194
+ json: options.json,
195
+ verbose: options.verbose || options.v,
196
+ });
197
+ break;
198
+ case 'ps':
199
+ await psCommand({
200
+ backend,
201
+ json: options.json,
202
+ verbose: options.verbose || options.v,
203
+ });
204
+ break;
205
+ case 'show': {
206
+ const model = positional[0];
207
+ if (!model) {
208
+ error('Missing required argument: <model>');
209
+ console.log('\nUsage: ollama-cli-interface --backend <path> show <model>');
210
+ process.exit(1);
211
+ }
212
+ await showCommand({
213
+ backend,
214
+ model,
215
+ modelMapping,
216
+ json: options.json,
217
+ verbose: options.verbose || options.v,
218
+ });
219
+ break;
220
+ }
221
+ default:
222
+ error(`Unknown command: ${command}`);
223
+ console.log('\nRun with --help for available commands');
224
+ process.exit(1);
225
+ }
226
+ }
227
+ catch (err) {
228
+ error(err instanceof Error ? err.message : String(err));
229
+ if (options.verbose) {
230
+ console.error(err);
231
+ }
232
+ process.exit(1);
233
+ }
234
+ }
235
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ollama/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;GAEG;AACH,SAAS,SAAS,CAAC,IAAc;IAK/B,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,kBAAkB;IACvC,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG;YAAE,SAAS;QAEnB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAE5B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;gBACvB,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACtB,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,2CAA2C;YAC3C,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,GAAG,GAAG,CAAC;gBACd,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDb,CAAC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,WAAW;IAClB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,IAAI,OAAO,GAAwB,EAAE,CAAC;IAEtC,IAAI,CAAC;QACH,kBAAkB;QAClB,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QACzB,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;QAEvC,sDAAsD;QACtD,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;YAC9B,QAAQ,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,WAAW,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,gBAAgB;QAChB,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACxB,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAED,gDAAgD;QAChD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;gBACvE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;gBAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,WAAW,CAAC;gBAChB,KAAK;gBACL,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;gBACrC,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,uDAAuD;QACvD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,eAAe;QACf,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAE7D,kCAAkC;QAClC,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;YACvC,CAAC,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC9C,CAAC,CAAC,SAAS,CAAC;QAEd,sBAAsB;QACtB,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,KAAK,CAAC,oCAAoC,CAAC,CAAC;oBAC5C,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;oBACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;gBAE1D,MAAM,UAAU,CAAC;oBACf,OAAO;oBACP,KAAK;oBACL,MAAM;oBACN,YAAY;oBACZ,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;oBACrC,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC;iBAC/B,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YAED,KAAK,MAAM;gBACT,MAAM,WAAW,CAAC;oBAChB,OAAO;oBACP,YAAY;oBACZ,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;iBACtC,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,IAAI;gBACP,MAAM,SAAS,CAAC;oBACd,OAAO;oBACP,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;iBACtC,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,KAAK,CAAC,oCAAoC,CAAC,CAAC;oBAC5C,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;oBAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,MAAM,WAAW,CAAC;oBAChB,OAAO;oBACP,KAAK;oBACL,YAAY;oBACZ,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;iBACtC,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YAED;gBACE,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Ollama CLI Types
3
+ *
4
+ * Shared types for Ollama CLI interface.
5
+ *
6
+ * @module cli/ollama/types
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ollama/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}