From d4cf9eb13ea786adfeae0d117b80191d38ee3e9b Mon Sep 17 00:00:00 2001 From: RossAscends <124905043+RossAscends@users.noreply.github.com> Date: Wed, 24 May 2023 07:03:03 +0900 Subject: [PATCH] new strategy for ChromaDB --- .../extensions/infinity-context/index.js | 70 ++++++++++++++++--- 1 file changed, 61 insertions(+), 9 deletions(-) diff --git a/public/scripts/extensions/infinity-context/index.js b/public/scripts/extensions/infinity-context/index.js index 5d1c034d6..062301264 100644 --- a/public/scripts/extensions/infinity-context/index.js +++ b/public/scripts/extensions/infinity-context/index.js @@ -1,12 +1,14 @@ import { saveSettingsDebounced, getCurrentChatId, system_message_types } from "../../../script.js"; import { humanizedDateTime } from "../../RossAscends-mods.js"; -import { getApiUrl, extension_settings } from "../../extensions.js"; +import { getApiUrl, extension_settings, getContext } from "../../extensions.js"; import { getFileText, onlyUnique, splitRecursive } from "../../utils.js"; export { MODULE_NAME }; const MODULE_NAME = 'chromadb'; const defaultSettings = { + strategy: 'original', + keep_context: 10, keep_context_min: 1, keep_context_max: 100, @@ -38,12 +40,25 @@ async function loadSettings() { Object.assign(extension_settings.chromadb, defaultSettings); } + console.log(`loading chromadb strat:${extension_settings.chromadb.strategy}`); + $("#chromadb_strategy option[value=" + extension_settings.chromadb.strategy + "]").attr( + "selected", + "true" + ); $('#chromadb_keep_context').val(extension_settings.chromadb.keep_context).trigger('input'); $('#chromadb_n_results').val(extension_settings.chromadb.n_results).trigger('input'); $('#chromadb_split_length').val(extension_settings.chromadb.split_length).trigger('input'); $('#chromadb_file_split_length').val(extension_settings.chromadb.file_split_length).trigger('input'); } +function onStrategyChange() { + console.log('changing chromadb strat'); + extension_settings.chromadb.strategy = $('#chromadb_strategy').val(); + + //$('#chromadb_strategy').select(extension_settings.chromadb.strategy); + saveSettingsDebounced(); +} + function onKeepContextInput() { extension_settings.chromadb.keep_context = Number($('#chromadb_keep_context').val()); $('#chromadb_keep_context_value').text(extension_settings.chromadb.keep_context); @@ -158,7 +173,7 @@ async function onSelectInjectFile(e) { const split = splitRecursive(text, extension_settings.chromadb.file_split_length).filter(onlyUnique); - const messages = split.map(m => ({ + const messages = split.map(m => ({ id: `${file.name}-${split.indexOf(m)}`, role: 'system', content: m, @@ -205,7 +220,7 @@ async function onSelectInjectFile(e) { window.chromadb_interceptGeneration = async (chat) => { const currentChatId = getCurrentChatId(); - + const selectedStrategy = extension_settings.chromadb.strategy; if (currentChatId) { const messagesToStore = chat.slice(0, -extension_settings.chromadb.keep_context); @@ -219,10 +234,41 @@ window.chromadb_interceptGeneration = async (chat) => { queriedMessages.sort((a, b) => a.date - b.date); - const newChat = queriedMessages.map(m => JSON.parse(m.meta)); + const newChat = []; - chat.splice(0, messagesToStore.length, ...newChat); + if (selectedStrategy === 'ross') { + //adds chroma to the end of chat and allows Generate() to cull old messages naturally. + const context = getContext(); + const charname = context.name2; + newChat.push( + { + is_name: false, + is_user: false, + mes: `[Use these past chat exchanges to inform ${charname}'s next response:`, + name: "system", + send_date: 0, + } + ); + newChat.push(...queriedMessages.map(m => JSON.parse(m.meta))); + newChat.push( + { + is_name: false, + is_user: false, + mes: `]\n`, + name: "system", + send_date: 0, + } + ); + chat.splice(chat.length, 0, ...newChat); + } + if (selectedStrategy === 'original') { + //removes .length # messages from the start of 'kept messages' + //replaces them with chromaDB results (with no separator) + newChat.push(...queriedMessages.map(m => JSON.parse(m.meta))); + chat.splice(0, messagesToStore.length, ...newChat); + + } console.log('ChromaDB chat after injection', chat); } } @@ -238,13 +284,18 @@ jQuery(async () => {
- + Memory Injection Strategy + + - + - + - +
`; $('#extensions_settings').append(settingsHtml); + $('#chromadb_strategy').on('change', onStrategyChange); $('#chromadb_keep_context').on('input', onKeepContextInput); $('#chromadb_n_results').on('input', onNResultsInput); $('#chromadb_split_length').on('input', onSplitLengthInput);