diff --git a/public/script.js b/public/script.js index 439c9799e..e03bfd575 100644 --- a/public/script.js +++ b/public/script.js @@ -107,7 +107,7 @@ import { } from "./scripts/poe.js"; import { debounce, delay, restoreCaretPosition, saveCaretPosition, end_trim_to_sentence } from "./scripts/utils.js"; -import { extension_settings, loadExtensionSettings } from "./scripts/extensions.js"; +import { extension_settings, loadExtensionSettings, runGenerationInterceptors } from "./scripts/extensions.js"; import { executeSlashCommands, getSlashCommandsHelp, registerSlashCommand } from "./scripts/slash-commands.js"; import { tag_map, @@ -1651,6 +1651,8 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject, setGenerationProgress(0); tokens_already_generated = 0; generation_started = new Date(); + + await runGenerationInterceptors(); const isImpersonate = type == "impersonate"; const isInstruct = power_user.instruct.enabled; diff --git a/public/scripts/extensions.js b/public/scripts/extensions.js index e5dfd8f15..4ffd249a6 100644 --- a/public/scripts/extensions.js +++ b/public/scripts/extensions.js @@ -4,6 +4,7 @@ export { getContext, getApiUrl, loadExtensionSettings, + runGenerationInterceptors, defaultRequestArgs, modules, extension_settings, @@ -26,6 +27,7 @@ const extension_settings = { dice: {}, tts: {}, sd: {}, + chromadb: {}, }; let modules = []; @@ -317,6 +319,19 @@ async function loadExtensionSettings(settings) { } } +async function runGenerationInterceptors() { + for (const manifest of Object.values(manifests)) { + const interceptorKey = manifest.generate_interceptor; + if (typeof window[interceptorKey] === 'function') { + try { + await window[interceptorKey](); + } catch(e) { + console.error(`Failed running interceptor for ${manifest.display_name}`, e); + } + } + } +} + $(document).ready(async function () { setTimeout(function () { addExtensionsButtonAndMenu(); }, 100) $("#extensions_connect").on('click', connectClickHandler); diff --git a/public/scripts/extensions/infinity-context/index.js b/public/scripts/extensions/infinity-context/index.js new file mode 100644 index 000000000..2f4371f0d --- /dev/null +++ b/public/scripts/extensions/infinity-context/index.js @@ -0,0 +1,75 @@ +import { + saveSettingsDebounced, +} from "../../../script.js"; +import { getApiUrl, getContext, extension_settings, defaultRequestArgs } from "../../extensions.js"; +export { MODULE_NAME, chromadb_interceptGeneration }; + +const MODULE_NAME = 'chromadb'; + +const defaultSettings = { + keep_context: 10, + keep_context_min: 1, + keep_context_max: 100, + keep_context_step: 1, + + n_results: 20, + n_results_min: 1, + n_results_max: 100, + n_results_step: 1, +} + +async function loadSettings() { + if (Object.keys(extension_settings.chromadb).length === 0) { + Object.assign(extension_settings.chromadb, defaultSettings); + } + + $('#chromadb_keep_context').val(extension_settings.chromadb.keep_context).trigger('input'); + $('#chromadb_n_results').val(extension_settings.chromadb.n_results).trigger('input'); +} + +function onKeepContextInput() { + extension_settings.chromadb.keep_context = Number($('#chromadb_keep_context').val()); + $('#chromadb_keep_context_value').text(extension_settings.chromadb.keep_context); + saveSettingsDebounced(); +} + +function onNResultsInput() { + extension_settings.chromadb.n_results = Number($('#chromadb_n_results').val()); + $('#chromadb_n_results_value').text(extension_settings.chromadb.n_results); + saveSettingsDebounced(); +} + +async function moduleWorker() { + // ??? +} + +setInterval(moduleWorker, UPDATE_INTERVAL); + +window.chromadb_interceptGeneration = async () => { + const context = getContext(); + + // TODO substitute context +} + +jQuery(async () => { + const settingsHtml = ` +
+
+
+ Infinity Context +
+
+
+ + + + +
+
`; + + $('#extensions_settings').append(settingsHtml); + $('#chromadb_keep_context').on('input', onKeepContextInput); + $('#chromadb_n_results').on('input', onNResultsInput); + + await loadSettings(); +}); \ No newline at end of file diff --git a/public/scripts/extensions/infinity-context/manifest.json b/public/scripts/extensions/infinity-context/manifest.json new file mode 100644 index 000000000..463e68199 --- /dev/null +++ b/public/scripts/extensions/infinity-context/manifest.json @@ -0,0 +1,14 @@ +{ + "display_name": "Infinity Context", + "loading_order": 11, + "requires": [ + "chromadb" + ], + "optional": [], + "generate_interceptor": "chromadb_interceptGeneration", + "js": "index.js", + "css": "style.css", + "author": "maceter636@proton.me", + "version": "1.0.0", + "homePage": "https://github.com/Cohee1207/SillyTavern" +} \ No newline at end of file diff --git a/public/scripts/extensions/infinity-context/style.css b/public/scripts/extensions/infinity-context/style.css new file mode 100644 index 000000000..e69de29bb