diff --git a/modules/gemini.js b/modules/gemini.js index 9deae3a..6bab348 100644 --- a/modules/gemini.js +++ b/modules/gemini.js @@ -1,4 +1,4 @@ -export function buildRequestGemini(request_params, apiKey) { +export function buildRequestGemini(request_params, apiKey, model) { const prompt = request_params.prompt; const contents = { @@ -31,7 +31,7 @@ export function buildRequestGemini(request_params, apiKey) { tool_config: tool_config }); const request = { - endpoint: `https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=${apiKey}`, + endpoint: `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`, options: { method: "POST", headers: { @@ -48,7 +48,7 @@ export function parseResponseGemini(data) { const parsedResponse = { function_used: data.candidates[0].content.parts[0].functionCall.name, - event: JSON.parse(data.candidates[0].content.parts[0].functionCall.args) + event: data.candidates[0].content.parts[0].functionCall.args } return parsedResponse; diff --git a/modules/openai.js b/modules/openai.js index d8dee3b..1522e12 100644 --- a/modules/openai.js +++ b/modules/openai.js @@ -1,7 +1,5 @@ export function buildRequestOpenAI(request_params, apiKey, model) { - console.log(request_params); - const prompt = request_params.prompt; let tools = []; for (const func of request_params.functions) { @@ -11,8 +9,6 @@ export function buildRequestOpenAI(request_params, apiKey, model) { }); } - console.log(request_params.functions.length); - let tool_choice; if (request_params.functions.length === 1) { tool_choice = { "type": "function", "function": { "name": request_params.functions[0].name } }; diff --git a/options.html b/options.html index 9062cd8..0adc7cd 100644 --- a/options.html +++ b/options.html @@ -47,9 +47,10 @@ - +
diff --git a/service_worker.js b/service_worker.js index 0f895e2..59994b3 100644 --- a/service_worker.js +++ b/service_worker.js @@ -4,6 +4,30 @@ import { GCalLink, iCalDownload, autoSelect } from "./modules/prompts.js"; import { isAllDayEvent } from "./modules/util.js"; + +const modelHandlers = { + "gpt-3.5-turbo": { build: buildRequestOpenAI, parse: parseResponseOpenAI }, + "gpt-4o": { build: buildRequestOpenAI, parse: parseResponseOpenAI }, + "gemini-pro": { build: buildRequestGemini, parse: parseResponseGemini }, + "gemini-1.5-flash-latest": { build: buildRequestGemini, parse: parseResponseGemini }, +}; + +function buildRequest(request_params, apiKey, model) { + const handler = modelHandlers[model]; + if (handler) { + return handler.build(request_params, apiKey, model); + } + throw new Error(`Unsupported model: ${model}`); +} + +function parseResponse(data, model) { + const handler = modelHandlers[model]; + if (handler) { + return handler.parse(data); + } + throw new Error(`Unsupported model: ${model}`); +} + chrome.runtime.onInstalled.addListener(() => { chrome.contextMenus.create({ id: "create-gcal-url", @@ -45,15 +69,7 @@ chrome.contextMenus.onClicked.addListener((info, tab) => { request_params = autoSelect(selectedText); } - console.log(request_params); - - let request; - if (model === "gpt-3.5-turbo" || model === "gpt-4o") { - request = buildRequestOpenAI(request_params, apiKey, model); - } else if (model === "gemini") { - request = buildRequestGemini(request_params, apiKey); - } - + const request = buildRequest(request_params, apiKey, model); fetch(request.endpoint, request.options) .then(response => response.json()) .then(data => { @@ -64,16 +80,9 @@ chrome.contextMenus.onClicked.addListener((info, tab) => { throw new Error("Invalid API key"); } - let parsedResponse; - if (model === "gpt-3.5-turbo" || model === "gpt-4o") { - parsedResponse = parseResponseOpenAI(data); - } else if (model === "gemini") { - parsedResponse = parseResponseGemini(data); - } + const parsedResponse = parseResponse(data, model); const { function_used, event } = parsedResponse; - console.log(event); - if (function_used === "get_event_information") { // Format the dates const startDate = event.start_date;