const path = require('path')
const models = require("./models")
module.exports = {
version: "3.4.0",
title: "Open WebUI",
description: "User-friendly WebUI for LLMs, supported LLM runners include Ollama and OpenAI-compatible APIs https://github.com/open-webui/open-webui",
icon: "icon.png",
pre: [{
icon: "ollama.png",
title: "Ollama",
description: "Get up and running with large language models.",
href: "https://ollama.com/"
}],
menu: async (kernel, info) => {
let installing = info.running("install.js")
let installed = info.exists("app/env")
let running = info.running("start.js")
let updating = info.running("update.js")
let resetting = info.running("reset.js")
if (installing) {
return [{
default: true,
icon: "fa-solid fa-plug",
text: "Installing",
href: "install.js",
}]
} else if (installed) {
if (running) {
let local = kernel.memory.local[path.resolve(__dirname, "start.js")]
if (local && local.url) {
let o = [{
// default: true,
popout: true,
icon: "fa-solid fa-rocket",
text: "Open Web UI",
href: local.url,
}, {
icon: 'fa-solid fa-terminal',
text: "Terminal",
href: "start.js",
}, {
icon: "fa-solid fa-download",
text: "Download Models",
menu: models.map((model) => {
return {
icon: "fa-solid fa-circle-down",
text: model.name,
menu: model.models.map((m) => {
return {
icon: "fa-solid fa-circle-down",
text: `${m.id} (${m.size})`,
href: "down.js",
params: {
id: m.id
}
}
})
}
})
}]
return o
} else {
return [{
default: true,
icon: 'fa-solid fa-terminal',
text: "Terminal",
href: "start.js",
}]
}
} else if (updating) {
return [{
default: true,
icon: 'fa-solid fa-arrows-rotate',
text: "Updating...",
href: "update.js",
}]
} else if (resetting) {
return [{
default: true,
icon: 'fa-solid fa-broom',
text: "Resetting...",
href: "reset.js",
}]
} else {
return [{
default: true,
icon: "fa-solid fa-power-off",
text: "Start",
href: "start.js",
}, {
icon: "fa-solid fa-download",
text: "Download Models",
menu: models.map((model) => {
return {
icon: "fa-solid fa-circle-down",
text: model.name,
menu: model.models.map((m) => {
return {
icon: "fa-solid fa-circle-down",
text: `${m.id} (${m.size})`,
href: "down.js",
params: {
id: m.id
}
}
})
}
})
}, {
icon: "fa-solid fa-arrows-rotate",
text: "Update",
href: "update.js",
}, {
icon: "fa-solid fa-plug",
text: "Install",
href: "install.js",
}, {
icon: "fa-solid fa-broom",
text: "Factory Reset",
href: "reset.js",
}]
}
} else {
return [{
default: true,
icon: "fa-solid fa-plug",
text: "Install",
href: "install.js",
}]
}
}
}