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-chunks-encode": "^1.0.0",
"png-chunks-extract": "^1.0.0",
"response-time": "^2.3.2",
"rimraf": "^3.0.2",
"sanitize-filename": "^1.6.3",
"sentencepiece-js": "^1.1.0",
@ -2695,6 +2696,26 @@
"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": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",

View File

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

View File

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

View File

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

View File

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