Speed-up extensions loading. Add tracking of response times

This commit is contained in:
SillyLossy
2023-06-01 14:34:40 +03:00
parent 9774f3b8c1
commit 5b446af6dc
5 changed files with 52 additions and 11 deletions

21
package-lock.json generated
View File

@ -36,6 +36,7 @@
"png-chunk-text": "^1.0.0", "png-chunk-text": "^1.0.0",
"png-chunks-encode": "^1.0.0", "png-chunks-encode": "^1.0.0",
"png-chunks-extract": "^1.0.0", "png-chunks-extract": "^1.0.0",
"response-time": "^2.3.2",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"sanitize-filename": "^1.6.3", "sanitize-filename": "^1.6.3",
"sentencepiece-js": "^1.1.0", "sentencepiece-js": "^1.1.0",
@ -2695,6 +2696,26 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/response-time": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz",
"integrity": "sha512-MUIDaDQf+CVqflfTdQ5yam+aYCkXj1PY8fjlPDQ6ppxJlmgZb864pHtA750mayywNg8tx4rS7qH9JXd/OF+3gw==",
"dependencies": {
"depd": "~1.1.0",
"on-headers": "~1.0.1"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/response-time/node_modules/depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/reusify": { "node_modules/reusify": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",

View File

@ -27,6 +27,7 @@
"png-chunk-text": "^1.0.0", "png-chunk-text": "^1.0.0",
"png-chunks-encode": "^1.0.0", "png-chunks-encode": "^1.0.0",
"png-chunks-extract": "^1.0.0", "png-chunks-extract": "^1.0.0",
"response-time": "^2.3.2",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"sanitize-filename": "^1.6.3", "sanitize-filename": "^1.6.3",
"sentencepiece-js": "^1.1.0", "sentencepiece-js": "^1.1.0",

View File

@ -108,19 +108,29 @@ async function disableExtension(name) {
async function getManifests(names) { async function getManifests(names) {
const obj = {}; const obj = {};
for (const name of names) { const promises = [];
const response = await fetch(`/scripts/extensions/${name}/manifest.json`);
if (response.ok) { for (const name of names) {
const json = await response.json(); const promise = new Promise((resolve, reject) => {
obj[name] = json; fetch(`/scripts/extensions/${name}/manifest.json`).then(async response => {
} if (response.ok) {
const json = await response.json();
obj[name] = json;
resolve();
}
}).catch(err => reject() && console.log('Could not load manifest.json for ' + name, err));
});
promises.push(promise);
} }
await Promise.allSettled(promises);
return obj; return obj;
} }
async function activateExtensions() { async function activateExtensions() {
const extensions = Object.entries(manifests).sort((a, b) => a[1].loading_order - b[1].loading_order); const extensions = Object.entries(manifests).sort((a, b) => a[1].loading_order - b[1].loading_order);
const promises = [];
for (let entry of extensions) { for (let entry of extensions) {
const name = entry[0]; const name = entry[0];
@ -138,9 +148,11 @@ async function activateExtensions() {
const li = document.createElement('li'); const li = document.createElement('li');
if (!isDisabled) { if (!isDisabled) {
await addExtensionScript(name, manifest); const promise = Promise.all([addExtensionScript(name, manifest), addExtensionStyle(name, manifest)]);
await addExtensionStyle(name, manifest); promise
activeExtensions.add(name); .then(() => activeExtensions.add(name))
.catch(err => console.log('Could not activate extension: ' + name, err));
promises.push(promise);
} }
else { else {
li.classList.add('disabled'); li.classList.add('disabled');
@ -157,6 +169,8 @@ async function activateExtensions() {
} }
} }
} }
await Promise.allSettled(promises);
} }
async function connectClickHandler() { async function connectClickHandler() {
@ -353,7 +367,7 @@ async function runGenerationInterceptors(chat) {
if (typeof window[interceptorKey] === 'function') { if (typeof window[interceptorKey] === 'function') {
try { try {
await window[interceptorKey](chat); await window[interceptorKey](chat);
} catch(e) { } catch (e) {
console.error(`Failed running interceptor for ${manifest.display_name}`, e); console.error(`Failed running interceptor for ${manifest.display_name}`, e);
} }
} }

View File

@ -5,9 +5,12 @@ import {
eventSource, eventSource,
event_types, event_types,
} from "../../../script.js"; } from "../../../script.js";
import { debounce } from "../../utils.js";
const MODULE_NAME = "Objective" const MODULE_NAME = "Objective"
const saveMetadataDebounced = debounce(async () => await context.saveMetadata(), 1000);
let globalObjective = "" let globalObjective = ""
let globalTasks = [] let globalTasks = []
let currentChatId = "" let currentChatId = ""
@ -201,7 +204,7 @@ function saveState() {
hideTasks: $('#objective-hide-tasks').prop('checked'), hideTasks: $('#objective-hide-tasks').prop('checked'),
} }
context.saveMetadata(); saveMetadataDebounced();
} }
// Dump core state // Dump core state

View File

@ -28,7 +28,9 @@ process.chdir(directory);
const express = require('express'); const express = require('express');
const compression = require('compression'); const compression = require('compression');
const app = express(); const app = express();
const responseTime = require('response-time')
app.use(compression()); app.use(compression());
app.use(responseTime());
const fs = require('fs'); const fs = require('fs');
const readline = require('readline'); const readline = require('readline');