diff --git a/public/scripts/extensions/infinity-context/index.js b/public/scripts/extensions/infinity-context/index.js index 11282d5f8..30f8f10f4 100644 --- a/public/scripts/extensions/infinity-context/index.js +++ b/public/scripts/extensions/infinity-context/index.js @@ -1,4 +1,4 @@ -import { saveSettingsDebounced, getCurrentChatId, system_message_types, eventSource, event_types, CHARACTERS_PER_TOKEN_RATIO } from "../../../script.js"; +import { saveSettingsDebounced, getCurrentChatId, system_message_types, eventSource, event_types, getRequestHeaders, CHARACTERS_PER_TOKEN_RATIO } from "../../../script.js"; import { humanizedDateTime } from "../../RossAscends-mods.js"; import { getApiUrl, extension_settings, getContext, doExtrasFetch } from "../../extensions.js"; import { getFileText, onlyUnique, splitRecursive, IndexedDBStore } from "../../utils.js"; @@ -114,6 +114,13 @@ function onStrategyChange() { saveSettingsDebounced(); } +function onRecallStrategyChange() { + console.log('changing chromadb recall strat'); + extension_settings.chromadb.recall_strategy = $('#chromadb_recall_strategy').val(); + + saveSettingsDebounced(); +} + function onKeepContextInput() { extension_settings.chromadb.keep_context = Number($('#chromadb_keep_context').val()); $('#chromadb_keep_context_value').text(extension_settings.chromadb.keep_context); @@ -339,6 +346,40 @@ async function queryMessages(chat_id, query) { return []; } +async function queryMultiMessages(chat_id, query) { + const context = getContext(); + const response = await fetch("/getallchatsofcharacter", { + method: 'POST', + body: JSON.stringify({ avatar_url: context.characters[context.characterId].avatar}), + headers: getRequestHeaders(), + }); + if (!response.ok) { + return; + } + let data = await response.json(); + data = Object.values(data); + let chat_list = data.sort((a, b) => a["file_name"].localeCompare(b["file_name"])).reverse(); + + // Extracting chat_ids from the chat_list + chat_list = chat_list.map(chat => chat.file_name.replace(/\.[^/.]+$/, "")); + const url = new URL(getApiUrl()); + url.pathname = '/api/chromadb/multiquery'; + + const queryMessagesResult = await fetch(url, { + method: 'POST', + body: JSON.stringify({ chat_list, query, n_results: extension_settings.chromadb.n_results }), + headers: postHeaders, + }); + + if (queryMessagesResult.ok) { + const queryMessagesData = await queryMessagesResult.json(); + + return queryMessagesData; + } + + return []; +} + async function onSelectInjectFile(e) { const file = e.target.files[0]; const currentChatId = getCurrentChatId(); @@ -448,6 +489,7 @@ window.chromadb_interceptGeneration = async (chat, maxContext) => { const currentChatId = getCurrentChatId(); const selectedStrategy = extension_settings.chromadb.strategy; + const recallStrategy = extension_settings.chromadb.recall_strategy; if (currentChatId) { const messagesToStore = chat.slice(0, -extension_settings.chromadb.keep_context); @@ -456,8 +498,16 @@ window.chromadb_interceptGeneration = async (chat, maxContext) => { const lastMessage = chat[chat.length - 1]; + let queriedMessages; + console.debug(recallStrategy) if (lastMessage) { - const queriedMessages = await queryMessages(currentChatId, lastMessage.mes); + if (recallStrategy === 'multichat'){ + console.log("Utilizing multichat") + queriedMessages = await queryMultiMessages(currentChatId, lastMessage.mes); + } + else{ + queriedMessages = await queryMessages(currentChatId, lastMessage.mes); + } queriedMessages.sort((a, b) => a.date - b.date); @@ -548,6 +598,12 @@ jQuery(async () => { + Memory Recall Strategy + + @@ -592,6 +648,7 @@ jQuery(async () => { $('#extensions_settings2').append(settingsHtml); $('#chromadb_strategy').on('change', onStrategyChange); + $('#chromadb_recall_strategy').on('change', onRecallStrategyChange); $('#chromadb_keep_context').on('input', onKeepContextInput); $('#chromadb_n_results').on('input', onNResultsInput); $('#chromadb_split_length').on('input', onSplitLengthInput);