-
Notifications
You must be signed in to change notification settings - Fork 141
/
main.js
133 lines (105 loc) · 3.89 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// Modules to control application life and create native browser window
const { app, BrowserWindow, dialog } = require('electron')
const path = require('path')
const { exec } = require('child_process');
const os = require('os');
const util = require('util');
const fs = require('fs');
// Create the log file
const logFilePath = path.join(os.homedir(), 'process_env.log');
fs.writeFileSync(logFilePath, util.inspect(process.env), 'utf-8');
let ollamaProcess = null; // Variable to store the Ollama process
// Define the runOllamaCommand function
function runOllamaCommand() {
// Define the PATH for the child process
const env = { ...process.env };
// Check if ollama is installed
exec('ollama --version', { env, shell: '/bin/sh' }, (error, stdout, stderr) => {
if (error) {
console.error(`Ollama is not installed: ${error}`);
dialog.showErrorBox('Error', `Ollama is not installed: ${error}`);
return;
}
// If ollama is installed, run ollama serve
ollamaProcess = exec('ollama serve', { env, shell: '/bin/bash', maxBuffer: 1024 * 500 }, (error, stdout, stderr) => {
if (error) {
console.error(`Error executing Ollama: ${error}`);
dialog.showErrorBox('Error', `Error executing Ollama: ${error}`);
return;
}
// Output verbose logging
console.log(`Ollama Output: ${stdout}`);
if (stderr) {
console.error(`Ollama Errors: ${stderr}`);
}
});
});
}
// Define the createWindow function
function createWindow () {
// Create the browser window.
const mainWindow = new BrowserWindow({
// width: 800,
height: 800,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})
// load the index.html of the app.
mainWindow.loadFile('ui/index.html')
// Open the DevTools.
// mainWindow.webContents.openDevTools()
mainWindow.webContents.openDevTools()
}
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(() => {
runOllamaCommand(); // Serve Ollama
createWindow();
app.on('activate', function () {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
// Quit when all windows are closed, and kill Ollama process
app.on('window-all-closed', function() {
/* if (ollamaProcess !== null) {
ollamaProcess.kill(); // Kill Ollama process
} */
if (process.platform !== 'darwin') app.quit();
});
/* app.on('activate', function () {
// On macOS, re-create a window when the dock icon is clicked and there are no other windows open
if (BrowserWindow.getAllWindows().length === 0) createWindow();
}); */
app.on('before-quit', function () {
// This will handle the Cmd + Q case on macOS
// You can do any cleanup here before your application quits
ollamaProcess.kill(); // Kill Ollama process
});
app.on('will-quit', function () {
// This will handle the Cmd + Q case on macOS
// You can do any cleanup here before your application quits
// ollamaProcess.kill(); // Kill Ollama process
});
// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.
ipcMain.handle('check-update', () => {
console.log('CHECK FOR UPDATES');
})
ipcMain.handle('ping', () => {
return 'Pong';
})
ipcMain.handle('get-new-models', async () => {
let models = await fs.readJSON(path.join(__dirname, 'models.json')).catch((err) => {
console.error(err);
})
if(!models) return 'Models not found';
return models;
})
// ipcMain.handle()