From 1e24608e2b00dc91b8dd8770cf5534c164fb8e2e Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Thu, 5 Jun 2025 13:15:02 +0200 Subject: [PATCH] ai: add temperature --- .../modules/common/PersistentStates.qml | 1 + .../quickshell/modules/sidebarLeft/AiChat.qml | 13 ++++++++++ .config/quickshell/services/Ai.qml | 26 ++++++++++++++++++- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/.config/quickshell/modules/common/PersistentStates.qml b/.config/quickshell/modules/common/PersistentStates.qml index 26d18cf50..6887b4795 100644 --- a/.config/quickshell/modules/common/PersistentStates.qml +++ b/.config/quickshell/modules/common/PersistentStates.qml @@ -6,6 +6,7 @@ pragma ComponentBehavior: Bound Singleton { property QtObject ai: QtObject { property string model + property real temperature: 0.5 } property QtObject sidebar: QtObject { diff --git a/.config/quickshell/modules/sidebarLeft/AiChat.qml b/.config/quickshell/modules/sidebarLeft/AiChat.qml index c10b87823..6eb069e94 100644 --- a/.config/quickshell/modules/sidebarLeft/AiChat.qml +++ b/.config/quickshell/modules/sidebarLeft/AiChat.qml @@ -67,6 +67,19 @@ Item { } } }, + { + name: "temp", + description: qsTr("Set temperature (randomness) of the model. Values range between 0 to 2 for Gemini, 0 to 1 for other models. Default is 0.5."), + execute: (args) => { + // console.log(args) + if (args.length == 0 || args[0] == "get") { + Ai.printTemperature() + } else { + const temp = parseFloat(args[0]); + Ai.setTemperature(temp); + } + } + }, { name: "test", description: qsTr("Markdown test"), diff --git a/.config/quickshell/services/Ai.qml b/.config/quickshell/services/Ai.qml index f90b95b32..c58137938 100644 --- a/.config/quickshell/services/Ai.qml +++ b/.config/quickshell/services/Ai.qml @@ -25,6 +25,7 @@ Singleton { readonly property var apiKeys: KeyringStorage.keyringData?.apiKeys ?? {} readonly property var apiKeysLoaded: KeyringStorage.loaded property var postResponseHook + property real temperature: PersistentStates?.ai?.temperature ?? 0.5 function idForMessage(message) { // Generate a unique ID using timestamp and random value @@ -311,6 +312,20 @@ Singleton { KeyringStorage.fetchKeyringData(); } } + + function getTemperature() { + return root.temperature; + } + + function setTemperature(value) { + if (value == NaN || value < 0 || value > 2) { + root.addMessage(qsTr("Temperature must be between 0 and 2"), Ai.interfaceRole); + return; + } + PersistentStateManager.setState("ai.temperature", value); + root.temperature = value; + root.addMessage(StringUtils.format(qsTr("Temperature set to {0}"), value), Ai.interfaceRole); + } function setApiKey(key) { const model = models[currentModelId]; @@ -341,6 +356,10 @@ Singleton { } } + function printTemperature() { + root.addMessage(StringUtils.format(qsTr("Temperature: {0}"), root.temperature), Ai.interfaceRole); + } + function clearMessages() { root.messageIDs = []; root.messageByID = ({}); @@ -409,7 +428,11 @@ Singleton { ], "system_instruction": { "parts": [{ text: root.systemPrompt }] - } + }, + "generationConfig": { + "temperature": root.temperature, + "responseMimeType": "text/plain", + }, }; return model.extraParams ? Object.assign({}, baseData, model.extraParams) : baseData; } @@ -427,6 +450,7 @@ Singleton { }), ], "stream": true, + "temperature": root.temperature, }; return model.extraParams ? Object.assign({}, baseData, model.extraParams) : baseData; }