4runr-os 1.0.9 → 1.0.12
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/dist/auth.d.ts +56 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +133 -0
- package/dist/auth.js.map +1 -0
- package/dist/index.js +476 -74
- package/dist/index.js.map +1 -1
- package/dist/local-model-executor.d.ts +41 -0
- package/dist/local-model-executor.d.ts.map +1 -0
- package/dist/local-model-executor.js +201 -0
- package/dist/local-model-executor.js.map +1 -0
- package/dist/local-setup.d.ts +52 -0
- package/dist/local-setup.d.ts.map +1 -0
- package/dist/local-setup.js +254 -0
- package/dist/local-setup.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Model Setup - Integrated Installation
|
|
3
|
+
* Automatically installs Ollama and downloads models when needed
|
|
4
|
+
* Makes it feel like one unified system
|
|
5
|
+
*/
|
|
6
|
+
import * as os from 'os';
|
|
7
|
+
import { exec } from 'child_process';
|
|
8
|
+
import { promisify } from 'util';
|
|
9
|
+
const execAsync = promisify(exec);
|
|
10
|
+
/**
|
|
11
|
+
* Check if Ollama is installed and running
|
|
12
|
+
*/
|
|
13
|
+
export async function checkOllamaInstallation() {
|
|
14
|
+
try {
|
|
15
|
+
// Check if ollama command exists
|
|
16
|
+
const { stdout } = await execAsync('ollama --version');
|
|
17
|
+
const ollamaPath = stdout.trim();
|
|
18
|
+
// Check if Ollama server is running
|
|
19
|
+
try {
|
|
20
|
+
const response = await fetch('http://localhost:11434/api/tags');
|
|
21
|
+
if (response.ok) {
|
|
22
|
+
const data = await response.json();
|
|
23
|
+
const models = (data.models || []).map((m) => m.name);
|
|
24
|
+
return {
|
|
25
|
+
success: true,
|
|
26
|
+
message: 'Ollama is installed and running',
|
|
27
|
+
ollamaInstalled: true,
|
|
28
|
+
ollamaPath,
|
|
29
|
+
modelsAvailable: models,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
// Server not running, but Ollama is installed
|
|
35
|
+
return {
|
|
36
|
+
success: false,
|
|
37
|
+
message: 'Ollama is installed but server is not running',
|
|
38
|
+
ollamaInstalled: true,
|
|
39
|
+
ollamaPath,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
return {
|
|
45
|
+
success: false,
|
|
46
|
+
message: 'Ollama is not installed',
|
|
47
|
+
ollamaInstalled: false,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
success: false,
|
|
52
|
+
message: 'Ollama status unknown',
|
|
53
|
+
ollamaInstalled: false,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Install Ollama automatically
|
|
58
|
+
* For Windows: Opens download page and provides instructions
|
|
59
|
+
* For Mac/Linux: Uses package managers
|
|
60
|
+
*/
|
|
61
|
+
export async function installOllama() {
|
|
62
|
+
const platform = os.platform();
|
|
63
|
+
if (platform === 'win32') {
|
|
64
|
+
// Windows - open download page and provide instructions
|
|
65
|
+
try {
|
|
66
|
+
// Try to open the download page
|
|
67
|
+
const { exec } = await import('child_process');
|
|
68
|
+
exec('start https://ollama.com/download/windows');
|
|
69
|
+
return {
|
|
70
|
+
success: false, // Not fully automatic on Windows
|
|
71
|
+
message: 'Please download and install Ollama from the opened page, then restart this terminal.',
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
return {
|
|
76
|
+
success: false,
|
|
77
|
+
message: 'Please download Ollama from https://ollama.ai/download and install it, then restart this terminal.',
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else if (platform === 'darwin') {
|
|
82
|
+
// macOS - use Homebrew or direct download
|
|
83
|
+
try {
|
|
84
|
+
// Try Homebrew first
|
|
85
|
+
await execAsync('brew install ollama');
|
|
86
|
+
return {
|
|
87
|
+
success: true,
|
|
88
|
+
message: 'Ollama installed via Homebrew',
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
return {
|
|
93
|
+
success: false,
|
|
94
|
+
message: 'Please install Ollama manually: brew install ollama or download from https://ollama.ai',
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// Linux
|
|
100
|
+
try {
|
|
101
|
+
await execAsync('curl -fsSL https://ollama.com/install.sh | sh');
|
|
102
|
+
return {
|
|
103
|
+
success: true,
|
|
104
|
+
message: 'Ollama installed successfully',
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
return {
|
|
109
|
+
success: false,
|
|
110
|
+
message: `Installation failed: ${error.message}. Please install manually from https://ollama.ai`,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Start Ollama server if not running
|
|
117
|
+
*/
|
|
118
|
+
export async function startOllamaServer() {
|
|
119
|
+
try {
|
|
120
|
+
// Check if already running
|
|
121
|
+
const response = await fetch('http://localhost:11434/api/tags');
|
|
122
|
+
if (response.ok) {
|
|
123
|
+
return {
|
|
124
|
+
success: true,
|
|
125
|
+
message: 'Ollama server is already running',
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
// Server not running, start it
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
const platform = os.platform();
|
|
134
|
+
if (platform === 'win32') {
|
|
135
|
+
// On Windows, Ollama runs as a service, so we just need to start it
|
|
136
|
+
await execAsync('ollama serve', { timeout: 5000 });
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
// On Unix, start in background
|
|
140
|
+
await execAsync('ollama serve &');
|
|
141
|
+
}
|
|
142
|
+
// Wait for server to start
|
|
143
|
+
for (let i = 0; i < 10; i++) {
|
|
144
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
145
|
+
try {
|
|
146
|
+
const response = await fetch('http://localhost:11434/api/tags');
|
|
147
|
+
if (response.ok) {
|
|
148
|
+
return {
|
|
149
|
+
success: true,
|
|
150
|
+
message: 'Ollama server started successfully',
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch (e) {
|
|
155
|
+
// Keep waiting
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
success: false,
|
|
160
|
+
message: 'Ollama server failed to start. Please start it manually: ollama serve',
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
return {
|
|
165
|
+
success: false,
|
|
166
|
+
message: `Failed to start Ollama server: ${error.message}`,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Download a model using Ollama API
|
|
172
|
+
*/
|
|
173
|
+
export async function downloadModel(modelName) {
|
|
174
|
+
try {
|
|
175
|
+
// Verify Ollama is running
|
|
176
|
+
const check = await checkOllamaInstallation();
|
|
177
|
+
if (!check.ollamaInstalled) {
|
|
178
|
+
return {
|
|
179
|
+
success: false,
|
|
180
|
+
message: 'Ollama is not installed. Please install it first.',
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
// Start server if not running
|
|
184
|
+
await startOllamaServer();
|
|
185
|
+
// Use Ollama's pull command (this handles downloading)
|
|
186
|
+
console.log(`Downloading model: ${modelName}...`);
|
|
187
|
+
console.log('This may take several minutes depending on model size...');
|
|
188
|
+
// Use ollama pull command
|
|
189
|
+
const { stdout, stderr } = await execAsync(`ollama pull ${modelName}`, {
|
|
190
|
+
maxBuffer: 10 * 1024 * 1024, // 10MB buffer for output
|
|
191
|
+
});
|
|
192
|
+
// Verify model was downloaded
|
|
193
|
+
const verifyResponse = await fetch('http://localhost:11434/api/tags');
|
|
194
|
+
if (verifyResponse.ok) {
|
|
195
|
+
const data = await verifyResponse.json();
|
|
196
|
+
const models = (data.models || []).map((m) => m.name);
|
|
197
|
+
if (models.includes(modelName)) {
|
|
198
|
+
return {
|
|
199
|
+
success: true,
|
|
200
|
+
message: `Model '${modelName}' downloaded successfully`,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
success: false,
|
|
206
|
+
message: `Model download completed but verification failed. Check: ollama list`,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
return {
|
|
211
|
+
success: false,
|
|
212
|
+
message: `Failed to download model: ${error.message}`,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Verify execution is truly local (proof it's not going through gateway)
|
|
218
|
+
*/
|
|
219
|
+
export async function verifyLocalExecution() {
|
|
220
|
+
const startTime = Date.now();
|
|
221
|
+
try {
|
|
222
|
+
// Make a test call to local Ollama
|
|
223
|
+
const response = await fetch('http://localhost:11434/api/generate', {
|
|
224
|
+
method: 'POST',
|
|
225
|
+
headers: { 'Content-Type': 'application/json' },
|
|
226
|
+
body: JSON.stringify({
|
|
227
|
+
model: 'llama2',
|
|
228
|
+
prompt: 'test',
|
|
229
|
+
stream: false,
|
|
230
|
+
}),
|
|
231
|
+
});
|
|
232
|
+
const responseTime = Date.now() - startTime;
|
|
233
|
+
const isLocal = response.ok && responseTime < 5000; // Local should be fast
|
|
234
|
+
return {
|
|
235
|
+
isLocal,
|
|
236
|
+
proof: {
|
|
237
|
+
networkCheck: true, // We're calling localhost, not external
|
|
238
|
+
executionPath: 'localhost:11434 (direct)',
|
|
239
|
+
responseTime,
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
return {
|
|
245
|
+
isLocal: false,
|
|
246
|
+
proof: {
|
|
247
|
+
networkCheck: false,
|
|
248
|
+
executionPath: 'unknown',
|
|
249
|
+
responseTime: Date.now() - startTime,
|
|
250
|
+
},
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=local-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-setup.js","sourceRoot":"","sources":["../src/local-setup.ts"],"names":[],"mappings":"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"}
|