Files
dotfiles/.config/quickshell/nucleus-shell/services/Zenith.qml

83 lines
1.8 KiB
QML

// Zenith.properties
pragma Singleton
import QtQuick
import Quickshell
import Quickshell.Io
import qs.config
import qs.modules.functions
Singleton {
// current state and shit
property string currentChat: "default"
property string currentModel: "gpt-4o-mini"
property string pendingInput: ""
property bool loading: zenithProcess.running
// signals (needed for ui loading)
signal chatsListed(string text)
signal chatLoaded(string text)
signal aiReply(string text)
// process to load data and talk to zenith
Timer {
interval: 1000
repeat: true
running: true
onTriggered: listChatsProcess.running = true;
}
Process {
id: listChatsProcess
command: ["ls", FileUtils.trimFileProtocol(Directories.config) + "/zenith/chats"]
running: true
stdout: StdioCollector {
onStreamFinished: chatsListed(text)
}
}
Process {
id: chatLoadProcess
stdout: StdioCollector {
onStreamFinished: chatLoaded(text)
}
}
Process {
id: zenithProcess
command: [
"zenith",
"--api", Config.runtime.misc.intelligence.apiKey,
"--chat", currentChat,
"-a",
"--model", currentModel,
pendingInput
]
stdout: StdioCollector {
onStreamFinished: {
if (text.trim() !== "")
aiReply(text.trim())
}
}
}
// api shit
function loadChat(chatName) {
chatLoadProcess.command = [
"cat",
FileUtils.trimFileProtocol(Directories.config)
+ "/zenith/chats/" + chatName + ".txt"
]
chatLoadProcess.running = true
}
function send() {
zenithProcess.running = true
}
}