Skip to content

Commit 634edfc

Browse files
added default LLM in extension settings
1 parent 6729126 commit 634edfc

File tree

8 files changed

+104
-12
lines changed

8 files changed

+104
-12
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "scribe-pal",
3-
"version": "1.4.3",
3+
"version": "1.5.0",
44
"description": "ScribePal is an intelligent browser extension that leverages AI to empower your web experience.",
55
"author": "Code Forge Temple",
66
"type": "module",

src/common/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@ export const MESSAGE_TYPES = {
1919
DELETE_MODEL: "deleteModel",
2020
TOGGLE_CHAT_VISIBILITY: "toggleChatVisibility",
2121
CAPTURE_VISIBLE_TAB: "captureVisibleTab",
22+
ACTION_DEFAULT_LLM_UPDATED: "actionDefaultLlmUpdated",
2223
} as const;

src/popup/popup.html

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@
2424
<input type="text" id="keyboard-shortcut" disabled>
2525
<button id="save-keyboard-shortcut">Update...</button>
2626
</div>
27+
<div class="menu-item input-with-button">
28+
<label for="default-llm">Default LLM:</label>
29+
<select id="default-llm">
30+
</select>
31+
<button id="save-default-llm">Save</button>
32+
</div>
2733
</div>
2834
<ul class="list-group">
2935
<li id="showChat" class="menu-item list-group-item">

src/popup/popup.scss

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ $menu-item-border-bottom: 1px;
5454
transform: rotate(180deg);
5555
}
5656

57-
$extra-settings-items: 1; // TODO: if we add more settings, we need to update this value
57+
$extra-settings-items: 2; // TODO: if we add more settings, we need to update this value
5858

5959
.extra-settings {
6060
overflow: hidden;
@@ -84,13 +84,23 @@ $extra-settings-items: 1; // TODO: if we add more settings, we need to update th
8484
min-width: 110px;
8585
}
8686

87-
input[type="text"] {
87+
input[type="text"], select {
8888
flex-grow: 1;
8989
padding: 5px;
9090
border: 1px solid #ccc;
9191
border-radius: 4px 0 0 4px;
9292
}
9393

94+
select {
95+
cursor: pointer;
96+
width: auto;
97+
padding: 4px 0px 4px 0px;
98+
max-width: 200px;
99+
overflow: hidden;
100+
text-overflow: ellipsis;
101+
white-space: nowrap;
102+
}
103+
94104
button {
95105
padding: 6px 10px;
96106
background: #0078d7;
@@ -118,7 +128,7 @@ $extra-settings-items: 1; // TODO: if we add more settings, we need to update th
118128
.input-with-button {
119129
border-color: vars.$dark-theme-secondary-color;
120130

121-
input {
131+
input, select {
122132
background: vars.$dark-theme-secondary-color;
123133
color: white;
124134
border-color: vars.$dark-theme-secondary-color !important;

src/popup/popup.ts

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import {browser} from "../common/browser";
99
import {MESSAGE_TYPES} from "../common/constants";
10+
import {Model} from "../tab/utils/types";
1011
import "./popup.scss";
1112

1213

@@ -25,8 +26,8 @@ document.addEventListener("DOMContentLoaded", () => {
2526
const extraSettings = document.querySelector(".extra-settings");
2627

2728
if (toggleBtn && extraSettings) {
28-
toggleBtn.addEventListener("click", () => {
29-
extraSettings.classList.toggle("collapsed");
29+
toggleBtn.addEventListener("click", async () => {
30+
const extraSettingsCollapsed = extraSettings.classList.toggle("collapsed");
3031
toggleBtn.classList.toggle("rotated");
3132

3233
/* For Firefox */
@@ -36,6 +37,40 @@ document.addEventListener("DOMContentLoaded", () => {
3637
document.documentElement.style.height = `${document.body.scrollHeight}px`;
3738
}, 500);
3839
/***************/
40+
41+
if(!extraSettingsCollapsed) {
42+
const response = await browser.runtime.sendMessage({type: MESSAGE_TYPES.FETCH_MODELS});
43+
44+
if (response && response.models) {
45+
const {defaultLlm} = await browser.storage.local.get("defaultLlm");
46+
const defaultLlmSelect = document.getElementById("default-llm") as HTMLSelectElement;
47+
const models: Model[] = response.models;
48+
const defaultLlmOptions = models.map((model: Model) => {
49+
const option = document.createElement("option");
50+
51+
option.value = model.name;
52+
option.textContent = model.name;
53+
54+
if (defaultLlm && model.name === defaultLlm) {
55+
option.selected = true;
56+
}
57+
58+
return option;
59+
});
60+
const defaultLlmLabel = document.createElement("option");
61+
62+
defaultLlmLabel.value = "";
63+
defaultLlmLabel.textContent = "Select a model...";
64+
65+
if(!defaultLlm) {
66+
defaultLlmLabel.selected = true;
67+
}
68+
69+
defaultLlmSelect.innerHTML = "";
70+
defaultLlmSelect.append(defaultLlmLabel);
71+
defaultLlmSelect.append(...defaultLlmOptions);
72+
}
73+
}
3974
});
4075
}
4176

@@ -128,6 +163,18 @@ document.getElementById("showChat")?.addEventListener("click", () => {
128163
});
129164
});
130165

166+
document.getElementById("save-default-llm")?.addEventListener("click", () => {
167+
const selectedLlm = (document.getElementById("default-llm") as HTMLSelectElement).value;
168+
169+
browser.storage.local.set({defaultLlm: selectedLlm}, () => {
170+
showNotification("Saved", "Default LLM saved!");
171+
172+
browser.runtime.sendMessage({
173+
type: MESSAGE_TYPES.ACTION_DEFAULT_LLM_UPDATED
174+
});
175+
});
176+
});
177+
131178
document.getElementById("save-keyboard-shortcut")?.addEventListener("click", async () => {
132179
try {
133180
const isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;

src/tab/components/ChatBox/components/ChatHeader/ChatHeader.tsx

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,16 @@
55
* See the LICENSE file in the project root for more information. *
66
************************************************************************/
77

8-
import React, {useState} from 'react';
8+
import React, {useEffect, useState} from 'react';
99
import {Model} from '../../../../utils/types';
1010
import {EXTENSION_NAME, MESSAGE_TYPES} from '../../../../../common/constants';
1111
import {RichTextModal} from '../RichTextModal';
1212
import DeleteModelSvg from '../../../../assets/bin-full.svg';
1313
import {Tooltip} from '../Tooltip/Tooltip';
14-
import {polyfillRuntimeConnect} from '../../../../privilegedAPIs/privilegedAPIs';
14+
import {polyfillRuntimeConnect, polyfillStorageLocalGet} from '../../../../privilegedAPIs/privilegedAPIs';
1515
import styles from "./ChatHeader.scss?inline";
1616
import {withShadowStyles} from '../../../../utils/withShadowStyles';
17+
import {browser} from '../../../../../common/browser';
1718

1819

1920
type ChatHeaderProps = {
@@ -83,6 +84,32 @@ export const ChatHeader = withShadowStyles(({
8384
});
8485
}
8586

87+
useEffect(() => {
88+
const updateDefaultLlm = () => {
89+
if (!selectedModel) {
90+
polyfillStorageLocalGet("defaultLlm").then((result: { defaultLlm: string }) => {
91+
if (result.defaultLlm) {
92+
onModelSelect(result.defaultLlm);
93+
}
94+
});
95+
}
96+
};
97+
98+
const listener = (message: any) => {
99+
if (message.type === MESSAGE_TYPES.ACTION_DEFAULT_LLM_UPDATED) {
100+
updateDefaultLlm();
101+
}
102+
};
103+
104+
browser.runtime.onMessage.addListener(listener);
105+
106+
updateDefaultLlm();
107+
108+
return () => {
109+
browser.runtime.onMessage.removeListener(listener);
110+
};
111+
}, [onModelSelect, selectedModel]);
112+
86113
return (
87114
<>
88115
<div className="chat-box-header">
@@ -112,7 +139,7 @@ export const ChatHeader = withShadowStyles(({
112139
}}
113140
onMouseDown={(e) => e.stopPropagation()}
114141
>
115-
<option value="">Select a model...</option>
142+
<option value="" disabled>Select a model...</option>
116143
{models.map((model: Model, index: number) => (
117144
<option key={index} value={model.name}>
118145
{model.name}

src/tab/serviceWorker.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,11 @@ browser.runtime.onMessage.addListener((
4343
break;
4444

4545
case MESSAGE_TYPES.ACTION_UPDATE_THEME:
46+
case MESSAGE_TYPES.ACTION_DEFAULT_LLM_UPDATED:
4647
(async () => {
4748
const [{id: tabId}] = await browser.tabs.query({currentWindow: true, active: true});
4849

49-
browser.tabs.sendMessage(tabId, {type: MESSAGE_TYPES.ACTION_UPDATE_THEME});
50+
browser.tabs.sendMessage(tabId, {type: request.type});
5051
})();
5152

5253
break;

0 commit comments

Comments
 (0)