import DOMPurify from 'dompurify'; import { marked } from 'marked'; const inputPrompt = document.body.querySelector('#input-prompt'); const buttonPrompt = document.body.querySelector('#button-prompt'); const buttonReset = document.body.querySelector('#button-reset'); const elementResponse = document.body.querySelector('#response'); const elementLoading = document.body.querySelector('#loading'); const elementError = document.body.querySelector('#error'); const sliderTemperature = document.body.querySelector('#temperature'); const sliderTopK = document.body.querySelector('#top-k'); const labelTemperature = document.body.querySelector('#label-temperature'); const labelTopK = document.body.querySelector('#label-top-k'); let session; async function runPrompt(prompt, params) { try { if (!session) { session = await chrome.aiOriginTrial.languageModel.create(params); } return session.prompt(prompt); } catch (e) { console.log('Prompt failed'); console.error(e); console.log('Prompt:', prompt); // Reset session reset(); throw e; } } async function reset() { if (session) { session.destroy(); } session = null; } async function initDefaults() { if (!('aiOriginTrial' in chrome)) { showResponse('Error: chrome.aiOriginTrial not supported in this browser'); return; } const defaults = await chrome.aiOriginTrial.languageModel.capabilities(); console.log('Model default:', defaults); if (defaults.available !== 'readily') { showResponse( `Model not yet available (current state: "${defaults.available}")` ); return; } sliderTemperature.value = defaults.defaultTemperature; // sliderTemperature.max = defaults.maxTemperature; // Pending https://issues.chromium.org/issues/367771112. sliderTopK.value = defaults.defaultTopK; sliderTopK.max = defaults.maxTopK; labelTopK.textContent = defaults.defaultTopK; labelTemperature.textContent = defaults.defaultTemperature; } initDefaults(); buttonReset.addEventListener('click', () => { hide(elementLoading); hide(elementError); hide(elementResponse); reset(); buttonReset.setAttribute('disabled', ''); }); sliderTemperature.addEventListener('input', (event) => { labelTemperature.textContent = event.target.value; reset(); }); sliderTopK.addEventListener('input', (event) => { labelTopK.textContent = event.target.value; reset(); }); inputPrompt.addEventListener('input', () => { if (inputPrompt.value.trim()) { buttonPrompt.removeAttribute('disabled'); } else { buttonPrompt.setAttribute('disabled', ''); } }); buttonPrompt.addEventListener('click', async () => { const prompt = inputPrompt.value.trim(); showLoading(); try { const params = { temperature: sliderTemperature.value, topK: sliderTopK.value }; const response = await runPrompt(prompt, params); showResponse(response); } catch (e) { showError(e); } }); function showLoading() { buttonReset.removeAttribute('disabled'); hide(elementResponse); hide(elementError); show(elementLoading); } function showResponse(response) { hide(elementLoading); show(elementResponse); elementResponse.innerHTML = DOMPurify.sanitize(marked.parse(response)); } function showError(error) { show(elementError); hide(elementResponse); hide(elementLoading); elementError.textContent = error; } function show(element) { element.removeAttribute('hidden'); } function hide(element) { element.setAttribute('hidden', ''); }