Expose AI params in options
This commit is contained in:
parent
8a4702f6c1
commit
e37e603a00
4 changed files with 111 additions and 18 deletions
|
@ -14,7 +14,7 @@
|
||||||
console.log("[ai-filter] background.js loaded – ready to classify");
|
console.log("[ai-filter] background.js loaded – ready to classify");
|
||||||
(async () => {
|
(async () => {
|
||||||
try {
|
try {
|
||||||
const store = await browser.storage.local.get(["endpoint", "templateName", "customTemplate", "customSystemPrompt"]);
|
const store = await browser.storage.local.get(["endpoint", "templateName", "customTemplate", "customSystemPrompt", "aiParams"]);
|
||||||
await browser.aiFilter.initConfig(store);
|
await browser.aiFilter.initConfig(store);
|
||||||
console.log("[ai-filter] configuration loaded", store);
|
console.log("[ai-filter] configuration loaded", store);
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -118,6 +118,20 @@ let gCustomTemplate = "";
|
||||||
let gCustomSystemPrompt = DEFAULT_CUSTOM_SYSTEM_PROMPT;
|
let gCustomSystemPrompt = DEFAULT_CUSTOM_SYSTEM_PROMPT;
|
||||||
let gTemplateText = "";
|
let gTemplateText = "";
|
||||||
|
|
||||||
|
let gAiParams = {
|
||||||
|
max_tokens: 4096,
|
||||||
|
temperature: 0.6,
|
||||||
|
top_p: 0.95,
|
||||||
|
seed: -1,
|
||||||
|
repetition_penalty: 1.0,
|
||||||
|
top_k: 20,
|
||||||
|
min_p: 0,
|
||||||
|
presence_penalty: 0,
|
||||||
|
frequency_penalty: 0,
|
||||||
|
typical_p: 1,
|
||||||
|
tfs: 1,
|
||||||
|
};
|
||||||
|
|
||||||
function loadTemplate(name) {
|
function loadTemplate(name) {
|
||||||
try {
|
try {
|
||||||
let url = `resource://aifilter/prompt_templates/${name}.txt`;
|
let url = `resource://aifilter/prompt_templates/${name}.txt`;
|
||||||
|
@ -147,6 +161,13 @@ function setConfig(config = {}) {
|
||||||
if (typeof config.customSystemPrompt === "string") {
|
if (typeof config.customSystemPrompt === "string") {
|
||||||
gCustomSystemPrompt = config.customSystemPrompt;
|
gCustomSystemPrompt = config.customSystemPrompt;
|
||||||
}
|
}
|
||||||
|
if (config.aiParams && typeof config.aiParams === "object") {
|
||||||
|
for (let [k, v] of Object.entries(config.aiParams)) {
|
||||||
|
if (k in gAiParams && typeof v !== "undefined") {
|
||||||
|
gAiParams[k] = v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
gTemplateText = gTemplateName === "custom" ? gCustomTemplate : loadTemplate(gTemplateName);
|
gTemplateText = gTemplateName === "custom" ? gCustomTemplate : loadTemplate(gTemplateName);
|
||||||
console.log(`[ai-filter][ExpressionSearchFilter] Endpoint set to ${gEndpoint}`);
|
console.log(`[ai-filter][ExpressionSearchFilter] Endpoint set to ${gEndpoint}`);
|
||||||
console.log(`[ai-filter][ExpressionSearchFilter] Template set to ${gTemplateName}`);
|
console.log(`[ai-filter][ExpressionSearchFilter] Template set to ${gTemplateName}`);
|
||||||
|
@ -187,20 +208,10 @@ class ClassificationTerm extends CustomerTermBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
let body = getPlainText(msgHdr);
|
let body = getPlainText(msgHdr);
|
||||||
let payload = JSON.stringify({
|
let payloadObj = Object.assign({
|
||||||
prompt: buildPrompt(body, value),
|
prompt: buildPrompt(body, value)
|
||||||
max_tokens: 4096,
|
}, gAiParams);
|
||||||
temperature: 0.6,
|
let payload = JSON.stringify(payloadObj);
|
||||||
top_p: 0.95,
|
|
||||||
seed: -1,
|
|
||||||
repetition_penalty: 1.0,
|
|
||||||
top_k: 20,
|
|
||||||
min_p: 0,
|
|
||||||
presence_penalty: 0,
|
|
||||||
frequency_penalty: 0,
|
|
||||||
typical_p: 1,
|
|
||||||
tfs: 1
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
console.log(`[ai-filter][ExpressionSearchFilter] Sending classification request to ${gEndpoint}`);
|
console.log(`[ai-filter][ExpressionSearchFilter] Sending classification request to ${gEndpoint}`);
|
||||||
|
|
|
@ -142,8 +142,56 @@
|
||||||
|
|
||||||
<div class="button-group">
|
<div class="button-group">
|
||||||
<button id="reset-system">Reset to default</button>
|
<button id="reset-system">Reset to default</button>
|
||||||
|
<button id="toggle-advanced" type="button">Advanced</button>
|
||||||
<button id="save">Save</button>
|
<button id="save">Save</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="advanced-options" style="display:none">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="max_tokens">Max tokens:</label>
|
||||||
|
<input type="number" id="max_tokens">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="temperature">Temperature:</label>
|
||||||
|
<input type="number" step="0.01" id="temperature">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="top_p">Top P:</label>
|
||||||
|
<input type="number" step="0.01" id="top_p">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="seed">Seed:</label>
|
||||||
|
<input type="number" id="seed">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="repetition_penalty">Repetition penalty:</label>
|
||||||
|
<input type="number" step="0.01" id="repetition_penalty">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="top_k">Top K:</label>
|
||||||
|
<input type="number" id="top_k">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="min_p">Min P:</label>
|
||||||
|
<input type="number" step="0.01" id="min_p">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="presence_penalty">Presence penalty:</label>
|
||||||
|
<input type="number" step="0.01" id="presence_penalty">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="frequency_penalty">Frequency penalty:</label>
|
||||||
|
<input type="number" step="0.01" id="frequency_penalty">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="typical_p">Typical P:</label>
|
||||||
|
<input type="number" step="0.01" id="typical_p">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="tfs">TFS:</label>
|
||||||
|
<input type="number" step="0.01" id="tfs">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="options.js"></script>
|
<script src="options.js"></script>
|
||||||
|
|
|
@ -3,8 +3,22 @@ document.addEventListener('DOMContentLoaded', async () => {
|
||||||
'endpoint',
|
'endpoint',
|
||||||
'templateName',
|
'templateName',
|
||||||
'customTemplate',
|
'customTemplate',
|
||||||
'customSystemPrompt'
|
'customSystemPrompt',
|
||||||
|
'aiParams'
|
||||||
]);
|
]);
|
||||||
|
const DEFAULT_AI_PARAMS = {
|
||||||
|
max_tokens: 4096,
|
||||||
|
temperature: 0.6,
|
||||||
|
top_p: 0.95,
|
||||||
|
seed: -1,
|
||||||
|
repetition_penalty: 1.0,
|
||||||
|
top_k: 20,
|
||||||
|
min_p: 0,
|
||||||
|
presence_penalty: 0,
|
||||||
|
frequency_penalty: 0,
|
||||||
|
typical_p: 1,
|
||||||
|
tfs: 1
|
||||||
|
};
|
||||||
document.getElementById('endpoint').value = defaults.endpoint || 'http://127.0.0.1:5000/v1/classify';
|
document.getElementById('endpoint').value = defaults.endpoint || 'http://127.0.0.1:5000/v1/classify';
|
||||||
|
|
||||||
const templates = {
|
const templates = {
|
||||||
|
@ -32,6 +46,18 @@ document.addEventListener('DOMContentLoaded', async () => {
|
||||||
templateSelect.addEventListener('change', updateVisibility);
|
templateSelect.addEventListener('change', updateVisibility);
|
||||||
updateVisibility();
|
updateVisibility();
|
||||||
|
|
||||||
|
const advancedBox = document.getElementById('advanced-options');
|
||||||
|
const advancedBtn = document.getElementById('toggle-advanced');
|
||||||
|
advancedBtn.addEventListener('click', () => {
|
||||||
|
advancedBox.style.display = advancedBox.style.display === 'none' ? 'block' : 'none';
|
||||||
|
});
|
||||||
|
|
||||||
|
const aiParams = Object.assign({}, DEFAULT_AI_PARAMS, defaults.aiParams || {});
|
||||||
|
for (const [key, val] of Object.entries(aiParams)) {
|
||||||
|
const el = document.getElementById(key);
|
||||||
|
if (el) el.value = val;
|
||||||
|
}
|
||||||
|
|
||||||
const DEFAULT_SYSTEM = 'Determine whether the email satisfies the user\'s criterion.';
|
const DEFAULT_SYSTEM = 'Determine whether the email satisfies the user\'s criterion.';
|
||||||
const systemBox = document.getElementById('system-instructions');
|
const systemBox = document.getElementById('system-instructions');
|
||||||
systemBox.value = defaults.customSystemPrompt || DEFAULT_SYSTEM;
|
systemBox.value = defaults.customSystemPrompt || DEFAULT_SYSTEM;
|
||||||
|
@ -44,9 +70,17 @@ document.addEventListener('DOMContentLoaded', async () => {
|
||||||
const templateName = templateSelect.value;
|
const templateName = templateSelect.value;
|
||||||
const customTemplateText = customTemplate.value;
|
const customTemplateText = customTemplate.value;
|
||||||
const customSystemPrompt = systemBox.value;
|
const customSystemPrompt = systemBox.value;
|
||||||
await browser.storage.local.set({ endpoint, templateName, customTemplate: customTemplateText, customSystemPrompt });
|
const aiParamsSave = {};
|
||||||
|
for (const key of Object.keys(DEFAULT_AI_PARAMS)) {
|
||||||
|
const el = document.getElementById(key);
|
||||||
|
if (el) {
|
||||||
|
const num = parseFloat(el.value);
|
||||||
|
aiParamsSave[key] = isNaN(num) ? DEFAULT_AI_PARAMS[key] : num;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await browser.storage.local.set({ endpoint, templateName, customTemplate: customTemplateText, customSystemPrompt, aiParams: aiParamsSave });
|
||||||
try {
|
try {
|
||||||
await browser.aiFilter.initConfig({ endpoint, templateName, customTemplate: customTemplateText, customSystemPrompt });
|
await browser.aiFilter.initConfig({ endpoint, templateName, customTemplate: customTemplateText, customSystemPrompt, aiParams: aiParamsSave });
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('[ai-filter][options] failed to apply config', e);
|
console.error('[ai-filter][options] failed to apply config', e);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue