diff --git a/public/scripts/extensions/infinity-context/index.js b/public/scripts/extensions/infinity-context/index.js
index 6d52d70f4..02aa74e84 100644
--- a/public/scripts/extensions/infinity-context/index.js
+++ b/public/scripts/extensions/infinity-context/index.js
@@ -9,6 +9,7 @@ const dbStore = new IndexedDBStore('SillyTavern', MODULE_NAME);
const defaultSettings = {
strategy: 'original',
+ sort_strategy: 'date',
keep_context: 10,
keep_context_min: 1,
@@ -101,6 +102,10 @@ async function loadSettings() {
"selected",
"true"
);
+ $("#chromadb_sort_strategy option[value=" + extension_settings.chromadb.sort_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');
@@ -138,6 +143,13 @@ function onRecallStrategyChange() {
saveSettingsDebounced();
}
+function onSortStrategyChange() {
+ console.log('changing chromadb sort strat');
+ extension_settings.chromadb.sort_strategy = $('#chromadb_sort_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);
@@ -401,7 +413,6 @@ async function queryMultiMessages(chat_id, query) {
if (queryMessagesResult.ok) {
const queryMessagesData = await queryMessagesResult.json();
-
return queryMessagesData;
}
@@ -520,6 +531,7 @@ window.chromadb_interceptGeneration = async (chat, maxContext) => {
const recallStrategy = extension_settings.chromadb.recall_strategy;
const recallMsg = extension_settings.chromadb.recall_msg;
const chromaDepth = extension_settings.chromadb.chroma_depth;
+ const chromaSortStrategy = extension_settings.chromadb.sort_strategy;
if (currentChatId) {
const messagesToStore = chat.slice(0, -extension_settings.chromadb.keep_context);
@@ -539,9 +551,15 @@ window.chromadb_interceptGeneration = async (chat, maxContext) => {
queriedMessages = await queryMessages(currentChatId, lastMessage.mes);
}
- queriedMessages.sort((a, b) => a.date - b.date);
+ if(chromaSortStrategy === "date"){
+ queriedMessages.sort((a, b) => a.date - b.date);
+ }
+ else{
+ queriedMessages.sort((a, b) => b.distance - a.distance);
+ }
- const newChat = [];
+
+ let newChat = [];
if (selectedStrategy === 'ross') {
//adds chroma to the end of chat and allows Generate() to cull old messages naturally.
@@ -590,8 +608,13 @@ window.chromadb_interceptGeneration = async (chat, maxContext) => {
send_date: 0,
}
);
+
+ //prototype chroma duplicate removal
+ let chatset = new Set(chat.map(obj => obj.mes));
+ newChat = newChat.filter(obj => !chatset.has(obj.mes));
+
if(chromaDepth === -1){
- chat.splice(messagesToStore.length, 0, ...newChat);
+ chat.splice(chat.length, 0, ...newChat);
}
else{
chat.splice(chromaDepth, 0, ...newChat);
@@ -665,7 +688,12 @@ jQuery(async () => {
Memory Recall Strategy
+ Memory Sort Strategy
+
@@ -713,6 +741,7 @@ jQuery(async () => {
$('#extensions_settings2').append(settingsHtml);
$('#chromadb_strategy').on('change', onStrategyChange);
$('#chromadb_recall_strategy').on('change', onRecallStrategyChange);
+ $('#chromadb_sort_strategy').on('change', onSortStrategyChange);
$('#chromadb_keep_context').on('input', onKeepContextInput);
$('#chromadb_n_results').on('input', onNResultsInput);
$('#chromadb_custom_depth').on('input', onChromaDepthInput);