Browse Source

always use `ollama` binary

Jeffrey Morgan 1 year ago
parent
commit
39f4d8edaa
3 changed files with 27 additions and 4 deletions
  1. 2 2
      app/README.md
  2. 2 1
      app/forge.config.ts
  3. 23 1
      app/src/index.ts

+ 2 - 2
app/README.md

@@ -6,10 +6,10 @@ This app builds upon Ollama to provide a desktop experience for running models.
 
 ## Developing
 
-In the background run the ollama server `ollama.py`:
+First, build the `ollama` binary:
 
 ```
-poetry -C .. run ollama serve
+make -C ..
 ```
 
 Then run the desktop app with `npm start`:

+ 2 - 1
app/forge.config.ts

@@ -8,6 +8,7 @@ import { AutoUnpackNativesPlugin } from '@electron-forge/plugin-auto-unpack-nati
 import { WebpackPlugin } from '@electron-forge/plugin-webpack'
 import * as path from 'path'
 import * as fs from 'fs'
+import * as os from 'fs'
 
 import { mainConfig } from './webpack.main.config'
 import { rendererConfig } from './webpack.renderer.config'
@@ -19,7 +20,7 @@ const config: ForgeConfig = {
     appVersion: process.env.VERSION || packageJson.version,
     asar: true,
     icon: './images/icon',
-    extraResource: ['../ollama', '../ggml-metal.metal'],
+    extraResource: ['../ollama', ...(process.platform === 'darwin' ? ['../ggml-metal.metal'] : [])],
     ...(process.env.SIGN
       ? {
           osxSign: {

+ 23 - 1
app/src/index.ts

@@ -57,6 +57,25 @@ if (app.isPackaged) {
   })
 }
 
+function server() {
+  const binary = app.isPackaged
+    ? path.join(process.resourcesPath, 'ollama')
+    : path.resolve(__dirname, '..', '..', 'ollama')
+
+  console.log(`Starting server`)
+  const proc = spawn(binary, ['serve'])
+  proc.stdout.on('data', data => {
+    console.log(`server: ${data}`)
+  })
+  proc.stderr.on('data', data => {
+    console.error(`server: ${data}`)
+  })
+
+  process.on('exit', () => {
+    proc.kill()
+  })
+}
+
 function installCLI() {
   const symlinkPath = '/usr/local/bin/ollama'
 
@@ -93,7 +112,10 @@ function installCLI() {
 // Some APIs can only be used after this event occurs.
 app.on('ready', () => {
   createWindow()
-  installCLI()
+
+  if (app.isPackaged) {
+    installCLI()
+  }
 })
 
 // Quit when all windows are closed, except on macOS. There, it's common