diff --git a/.config/quickshell/ii/modules/sidebarLeft/AiChat.qml b/.config/quickshell/ii/modules/sidebarLeft/AiChat.qml index 262a88fa..6a8f1547 100644 --- a/.config/quickshell/ii/modules/sidebarLeft/AiChat.qml +++ b/.config/quickshell/ii/modules/sidebarLeft/AiChat.qml @@ -199,7 +199,7 @@ Inline w/ backslash and round brackets \\(e^{i\\pi} + 1 = 0\\) RowLayout { id: statusItemRowLayout - spacing: 4 + spacing: 0 MaterialSymbol { text: statusItem.icon iconSize: Appearance.font.pixelSize.huge @@ -232,18 +232,22 @@ Inline w/ backslash and round brackets \\(e^{i\\pi} + 1 = 0\\) RowLayout { // Status Layout.alignment: Qt.AlignHCenter - spacing: 8 + spacing: 10 + StatusItem { + icon: Ai.currentModelHasApiKey ? "key" : "key_off" + statusText: "" + description: Ai.currentModelHasApiKey ? Translation.tr("API key is set") : Translation.tr("No API key\nSet it with /key YOUR_API_KEY") + } + StatusSeparator {} StatusItem { icon: "device_thermostat" statusText: Ai.temperature.toFixed(1) description: Translation.tr("Temperature") } - StatusSeparator { visible: Ai.tokenCount.total > 0 - } - + } StatusItem { visible: Ai.tokenCount.total > 0 icon: "token" diff --git a/.config/quickshell/ii/services/Ai.qml b/.config/quickshell/ii/services/Ai.qml index 78c56dbd..82386fad 100644 --- a/.config/quickshell/ii/services/Ai.qml +++ b/.config/quickshell/ii/services/Ai.qml @@ -23,6 +23,13 @@ Singleton { property var messageByID: ({}) readonly property var apiKeys: KeyringStorage.keyringData?.apiKeys ?? {} readonly property var apiKeysLoaded: KeyringStorage.loaded + readonly property bool currentModelHasApiKey: { + const model = models[currentModelId]; + if (!model || !model.requires_key) return true; + if (!apiKeysLoaded) return false; + const key = apiKeys[model.key_id]; + return (key?.length > 0); + } property var postResponseHook property real temperature: Persistent.states?.ai?.temperature ?? 0.5 property QtObject tokenCount: QtObject { @@ -45,6 +52,8 @@ Singleton { property list promptFiles: [...defaultPrompts, ...userPrompts] property list savedChats: [] + // Gemini: https://ai.google.dev/gemini-api/docs/function-calling + // OpenAI: https://platform.openai.com/docs/guides/function-calling property var tools: { "gemini": [{"functionDeclarations": [ {