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);