✨ | Unsloth Studio (OpenAI API) implementation
This commit is contained in:
@@ -1,39 +1,166 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls as QQC2
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
Kirigami.Page {
|
||||
Kirigami.ScrollablePage {
|
||||
id: page
|
||||
property alias cfg_systemPrompt: systemPrompt.text
|
||||
property alias cfg_defaultModel: defaultModelField.text
|
||||
|
||||
contentItem: ColumnLayout {
|
||||
// Core configuration aliases (Two-way binding)
|
||||
property alias cfg_unslothUrl: unslothUrlField.text
|
||||
property alias cfg_apiToken: apiTokenField.text
|
||||
property alias cfg_systemPrompt: systemPromptField.text
|
||||
property alias cfg_defaultModel: defaultModelField.text
|
||||
property alias cfg_maxHistoryMessages: maxHistorySpinBox.value
|
||||
|
||||
// Default values passed by the Plasma config loader
|
||||
// These resolve the "failed to set initial properties" errors
|
||||
property string cfg_unslothUrlDefault
|
||||
property string cfg_apiTokenDefault
|
||||
property string cfg_systemPromptDefault
|
||||
property string cfg_defaultModelDefault
|
||||
property int cfg_maxHistoryMessagesDefault
|
||||
|
||||
ColumnLayout {
|
||||
anchors.margins: Kirigami.Units.largeSpacing
|
||||
spacing: Kirigami.Units.largeSpacing
|
||||
|
||||
// Help button in the header area
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
spacing: Kirigami.Units.largeSpacing
|
||||
|
||||
QQC2.Label {
|
||||
text: i18n("Configure Unsloth Chat")
|
||||
Layout.fillWidth: true
|
||||
font.bold: true
|
||||
font.pointSize: Kirigami.Theme.defaultFont.pointSize
|
||||
}
|
||||
|
||||
QQC2.Button {
|
||||
text: i18n("Help →")
|
||||
icon.name: "help-external-link"
|
||||
onClicked: Qt.openUrlExternally("https://huitsinnevada.fi/projects")
|
||||
}
|
||||
}
|
||||
|
||||
// --- Unsloth Studio section ---
|
||||
Kirigami.Separator { Layout.fillWidth: true }
|
||||
|
||||
Kirigami.Heading {
|
||||
text: "System Prompt"
|
||||
text: i18n("Unsloth Studio")
|
||||
level: 2
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
QQC2.TextField {
|
||||
id: unslothUrlField
|
||||
placeholderText: i18n("Unsloth Studio URL (e.g., http://localhost:8888)")
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
QQC2.TextField {
|
||||
id: apiTokenField
|
||||
placeholderText: i18n("API Token")
|
||||
echoMode: TextInput.Password
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
// --- System Prompt section ---
|
||||
Kirigami.Separator { Layout.fillWidth: true }
|
||||
|
||||
Kirigami.Heading {
|
||||
text: i18n("System Prompt")
|
||||
level: 2
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
QQC2.TextArea {
|
||||
id: systemPrompt
|
||||
placeholderText: "Enter the system prompt here..."
|
||||
id: systemPromptField
|
||||
placeholderText: i18n("Enter the system prompt here...")
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 240
|
||||
Layout.preferredHeight: 200
|
||||
wrapMode: TextEdit.Wrap
|
||||
clip: true
|
||||
}
|
||||
|
||||
// --- Default Model section ---
|
||||
Kirigami.Separator { Layout.fillWidth: true }
|
||||
|
||||
Kirigami.Heading {
|
||||
text: "Default Model"
|
||||
level: 3
|
||||
text: i18n("Default Model")
|
||||
level: 2
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
QQC2.TextField {
|
||||
id: defaultModelField
|
||||
placeholderText: "Enter the default model name (e.g., llama3)"
|
||||
placeholderText: i18n("Enter the default model name (e.g., unsloth/llama-3-8b)")
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
// --- Chat History section ---
|
||||
Kirigami.Separator { Layout.fillWidth: true }
|
||||
|
||||
Kirigami.Heading {
|
||||
text: i18n("Chat History")
|
||||
level: 2
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
QQC2.Label {
|
||||
text: i18n("Maximum number of messages to keep in chat history:")
|
||||
wrapMode: TextEdit.WordWrap
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
QQC2.SpinBox {
|
||||
id: maxHistorySpinBox
|
||||
from: 1
|
||||
to: 500
|
||||
value: 50
|
||||
enabled: true
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Kirigami.Separator { Layout.fillWidth: true }
|
||||
|
||||
// --- Buttons ---
|
||||
RowLayout {
|
||||
Layout.alignment: Qt.AlignRight
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
QQC2.Button {
|
||||
text: i18n("Reset")
|
||||
onClicked: {
|
||||
unslothUrlField.text = "http://localhost:8888";
|
||||
apiTokenField.text = "";
|
||||
systemPromptField.text = "";
|
||||
defaultModelField.text = "";
|
||||
maxHistorySpinBox.value = 50;
|
||||
// Explicitly reset configuration values
|
||||
plasmoid.configuration.unslothUrl = "http://localhost:8888";
|
||||
plasmoid.configuration.apiToken = "";
|
||||
plasmoid.configuration.systemPrompt = "";
|
||||
plasmoid.configuration.defaultModel = "";
|
||||
plasmoid.configuration.maxHistoryMessages = 50;
|
||||
}
|
||||
}
|
||||
|
||||
QQC2.Button {
|
||||
text: i18n("Save")
|
||||
onClicked: {
|
||||
// Save all values explicitly (the cfg_ aliases update automatically
|
||||
// via onTextChanged, but this ensures the values are written even
|
||||
// if the user never edited a field)
|
||||
plasmoid.configuration.unslothUrl = unslothUrlField.text;
|
||||
plasmoid.configuration.apiToken = apiTokenField.text;
|
||||
plasmoid.configuration.systemPrompt = systemPromptField.text;
|
||||
plasmoid.configuration.defaultModel = defaultModelField.text;
|
||||
plasmoid.configuration.maxHistoryMessages = maxHistorySpinBox.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user