From 1d063235fd393252847b28c59c3bdd48887b24f8 Mon Sep 17 00:00:00 2001 From: mic Date: Mon, 6 Jan 2025 22:19:07 +0100 Subject: [PATCH] google gemini, using system instruction --- api_webchat/controller.js | 4 ++-- js/api/google_gemini.js | 12 ++++++++---- js/special_commands/mzta-add-tags.js | 4 ++-- js/workers/model-worker-google_gemini.js | 4 ++-- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/api_webchat/controller.js b/api_webchat/controller.js index d10c33ec..bcdb851b 100644 --- a/api_webchat/controller.js +++ b/api_webchat/controller.js @@ -78,13 +78,13 @@ switch (llm) { break; } case "google_gemini_api": { - let prefs_api = await browser.storage.sync.get({google_gemini_api_key: '', google_gemini_model: '', do_debug: false}); + let prefs_api = await browser.storage.sync.get({google_gemini_api_key: '', google_gemini_model: '', google_gemini_system_instruction: '', do_debug: false}); let i18nStrings = {}; i18nStrings["google_gemini_api_request_failed"] = browser.i18n.getMessage('google_gemini_api_request_failed'); i18nStrings["error_connection_interrupted"] = browser.i18n.getMessage('error_connection_interrupted'); messageInput.setModel(prefs_api.google_gemini_model); messagesArea.setLLMName("Google Gemini"); - worker.postMessage({ type: 'init', google_gemini_api_key: prefs_api.google_gemini_api_key, google_gemini_model: prefs_api.google_gemini_model, do_debug: prefs_api.do_debug, i18nStrings: i18nStrings}); + worker.postMessage({ type: 'init', google_gemini_api_key: prefs_api.google_gemini_api_key, google_gemini_model: prefs_api.google_gemini_model, google_gemini_system_instruction: prefs_api.google_gemini_system_instruction, do_debug: prefs_api.do_debug, i18nStrings: i18nStrings}); messagesArea.appendUserMessage(browser.i18n.getMessage("google_gemini_api_connecting") + " " +browser.i18n.getMessage("AndModel") + " \"" + prefs_api.google_gemini_model + "\"...", "info"); browser.runtime.sendMessage({command: "google_gemini_api_ready_" + call_id, window_id: (await browser.windows.getCurrent()).id}); break; diff --git a/js/api/google_gemini.js b/js/api/google_gemini.js index a77af791..59624ea7 100644 --- a/js/api/google_gemini.js +++ b/js/api/google_gemini.js @@ -22,11 +22,13 @@ export class GoogleGemini { apiKey = ''; model = ''; + system_instruction = ''; stream = false; - constructor(apiKey, model, stream) { + constructor(apiKey, model, system_instruction, stream) { this.apiKey = apiKey; this.model = model; + this.system_instruction = system_instruction; this.stream = stream; } @@ -67,17 +69,19 @@ export class GoogleGemini { } } - fetchResponse = async (messages, system_instruction = '') => { + fetchResponse = async (messages) => { try { let google_gemini_body = { contents:messages }; - if(system_instruction !== '') { + console.log("[ThunderAI] Google Gemini API system_instruction: " + JSON.stringify(this.system_instruction)); + + if(this.system_instruction !== '') { google_gemini_body.system_instruction = { parts:{ - text: system_instruction + text: this.system_instruction } } } diff --git a/js/special_commands/mzta-add-tags.js b/js/special_commands/mzta-add-tags.js index b2b98c4e..6280ef84 100644 --- a/js/special_commands/mzta-add-tags.js +++ b/js/special_commands/mzta-add-tags.js @@ -58,8 +58,8 @@ break; } case "google_gemini_api": { - let prefs_api = await browser.storage.sync.get({google_gemini_api_key: '', google_gemini_model: ''}); - this.worker.postMessage({ type: 'init', google_gemini_api_key: prefs_api.google_gemini_api_key, google_gemini_model: prefs_api.google_gemini_model, do_debug: this.do_debug, i18nStrings: ''}); + let prefs_api = await browser.storage.sync.get({google_gemini_api_key: '', google_gemini_model: '', google_gemini_system_instruction: ''}); + this.worker.postMessage({ type: 'init', google_gemini_api_key: prefs_api.google_gemini_api_key, google_gemini_model: prefs_api.google_gemini_model, google_gemini_system_instruction: prefs_api.google_gemini_system_instruction, do_debug: this.do_debug, i18nStrings: ''}); break; } case "ollama_api": { diff --git a/js/workers/model-worker-google_gemini.js b/js/workers/model-worker-google_gemini.js index 0644db5a..514bddde 100644 --- a/js/workers/model-worker-google_gemini.js +++ b/js/workers/model-worker-google_gemini.js @@ -38,14 +38,14 @@ self.onmessage = async function(event) { if (event.data.type === 'init') { google_gemini_api_key = event.data.google_gemini_api_key; google_gemini_model = event.data.google_gemini_model; - google_gemini = new GoogleGemini(google_gemini_api_key, google_gemini_model, true); + google_gemini = new GoogleGemini(google_gemini_api_key, google_gemini_model, event.data.google_gemini_system_instruction, true); do_debug = event.data.do_debug; i18nStrings = event.data.i18nStrings; taLog = new taLogger('model-worker-google_gemini', do_debug); } else if (event.data.type === 'chatMessage') { conversationHistory.push({ role: 'user', parts: [{"text": event.data.message}] }); - const response = await google_gemini.fetchResponse(conversationHistory); + const response = await google_gemini.fetchResponse(conversationHistory); postMessage({ type: 'messageSent' }); if (!response.ok) {