From c0f5f55c638ec86f2dd1e82fcdc80a0f8daf4403 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 10 May 2025 00:38:38 +0200 Subject: [PATCH] ai: system prompt --- .../modules/common/ConfigOptions.qml | 4 ++++ .config/quickshell/services/Ai.qml | 21 ++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/.config/quickshell/modules/common/ConfigOptions.qml b/.config/quickshell/modules/common/ConfigOptions.qml index 1638984b7..1b61cb175 100644 --- a/.config/quickshell/modules/common/ConfigOptions.qml +++ b/.config/quickshell/modules/common/ConfigOptions.qml @@ -4,6 +4,10 @@ pragma Singleton pragma ComponentBehavior: Bound Singleton { + property QtObject ai: QtObject { + property string systemPrompt: "" + } + property QtObject appearance: QtObject { property int fakeScreenRounding: 1 // 0: None | 1: Always | 2: When not fullscreen } diff --git a/.config/quickshell/services/Ai.qml b/.config/quickshell/services/Ai.qml index 174d4cb19..ff796f267 100644 --- a/.config/quickshell/services/Ai.qml +++ b/.config/quickshell/services/Ai.qml @@ -15,6 +15,7 @@ Singleton { readonly property string interfaceRole: "interface" readonly property string apiKeyEnvVarName: "API_KEY" property Component aiMessageComponent: AiMessageData {} + property string systemPrompt: ConfigOptions.ai.systemPrompt ?? "" property var messages: [] readonly property var apiKeys: KeyringStorage.keyringData?.apiKeys ?? {} @@ -214,7 +215,10 @@ Singleton { { "google_search": {} } - ] + ], + "system_instruction": { + "parts": [{ text: root.systemPrompt }] + } }; return model.extraParams ? Object.assign({}, baseData, model.extraParams) : baseData; } @@ -222,12 +226,15 @@ Singleton { function buildOpenAIRequestData(model, messages) { let baseData = { "model": model.model, - "messages": messages.filter(message => (message.role != Ai.interfaceRole)).map(message => { - return { - "role": message.role, - "content": message.content, - } - }), + "messages": [ + {role: "system", content: root.systemPrompt}, + ...messages.filter(message => (message.role != Ai.interfaceRole)).map(message => { + return { + "role": message.role, + "content": message.content, + } + }), + ], "stream": true, }; return model.extraParams ? Object.assign({}, baseData, model.extraParams) : baseData;