replaced returnChunks with return arg to use existing helper functions

fc5debc660633ff8b51293c8a39b838919b96cc4

zerofata <fxsliam@outlook.com>

Signed
1 files changed, +31 -13Ignore whitespace
public/scripts/extensions/vectors/index.js+31 -13
@@ -30,6 +30,8 @@ import { textgen_types, textgenerationwebui_settings } from '../../textgen-setti
3030import { SlashCommandParser } from '../../slash-commands/SlashCommandParser.js';
3131import { SlashCommand } from '../../slash-commands/SlashCommand.js';
3232import { ARGUMENT_TYPE, SlashCommandArgument, SlashCommandNamedArgument } from '../../slash-commands/SlashCommandArgument.js';
33+import { SlashCommandEnumValue, enumTypes } from '../../slash-commands/SlashCommandEnumValue.js';
34+import { slashCommandReturnHelper } from '../../slash-commands/SlashCommandReturnHelper.js';
3335import { callGenericPopup, POPUP_RESULT, POPUP_TYPE } from '../../popup.js';
3436import { generateWebLlmChatPrompt, isWebLlmSupported } from '../shared.js';
3537
@@ -1619,25 +1621,31 @@ jQuery(async () => {
16191621 const attachments = source ? getDataBankAttachmentsForSource(source, false) : getDataBankAttachments(false);
16201622 const collectionIds = await ingestDataBankAttachments(String(source));
16211623 const queryResults = await queryMultipleCollections(collectionIds, String(query), resultSize, threshold);
1622- const returnChunks = String(args?.returnChunks).toLowerCase() === 'true'
1624+
1623-
1625+ // Get URLs
1624- if (returnChunks) {
1626+ const urls = Object
1627+ .keys(queryResults)
1628+ .map(x => attachments.find(y => getFileCollectionId(y.url) === x))
1629+ .filter(x => x)
1630+ .map(x => x.url);
1631+
1632+ // Gets the actual text content of chunks
1633+ const getChunksText = () => {
16251634 let textResult = '';
16261635 for (const collectionId in queryResults) {
16271636 const metadata = queryResults[collectionId].metadata?.filter(x => x.text)?.sort((a, b) => a.index - b.index)?.map(x => x.text)?.filter(onlyUnique) || [];
16281637 textResult += metadata.join('\n') + '\n\n';
16291638 }
16301639 return textResult;
1631- } else {
1640+ };
1632- // Map collection IDs to file URLs
1641+
1633- const urls = Object
1642+ if (args.return === 'chunks') {
1634- .keys(queryResults)
1643+ return getChunksText();
1635- .map(x => attachments.find(y => getFileCollectionId(y.url) === x))
1636- .filter(x => x)
1637- .map(x => x.url);
1638-
1639- return JSON.stringify(urls);
16401644 }
1645+
1646+ // @ts-ignore
1647+ return slashCommandReturnHelper.doReturn(args.return ?? 'object', urls, { objectToStringFunc: list => list.join('\n') });
1648+
16411649 },
16421650 aliases: ['databank-search', 'data-bank-search'],
16431651 helpString: 'Search the Data Bank for a specific query using vector similarity. Returns a list of file URLs with the most relevant content.',
@@ -1645,7 +1653,17 @@ jQuery(async () => {
16451653 new SlashCommandNamedArgument('threshold', 'Threshold for the similarity score in the [0, 1] range. Uses the global config value if not set.', ARGUMENT_TYPE.NUMBER, false, false, ''),
16461654 new SlashCommandNamedArgument('resultSize', 'Maximum number of query results to return.', ARGUMENT_TYPE.NUMBER, false, false, ''),
16471655 new SlashCommandNamedArgument('source', 'Optional filter for the attachments by source.', ARGUMENT_TYPE.STRING, false, false, '', ['global', 'character', 'chat']),
1648- new SlashCommandNamedArgument('returnChunks', 'If true, returns the actual content chunks instead of URLs.', ARGUMENT_TYPE.STRING, false, false, '', ['true', 'false']),
1656+ SlashCommandNamedArgument.fromProps({
1657+ name: 'return',
1658+ description: 'How you want the return value to be provided',
1659+ typeList: [ARGUMENT_TYPE.STRING],
1660+ defaultValue: 'object',
1661+ enumList: [
1662+ new SlashCommandEnumValue('chunks', 'Return the actual content chunks', enumTypes.enum, '{}'),
1663+ ...slashCommandReturnHelper.enumList({ allowObject: true })
1664+ ],
1665+ forceEnum: true,
1666+ })
16491667 ],
16501668 unnamedArgumentList: [
16511669 new SlashCommandArgument('Query to search by.', ARGUMENT_TYPE.STRING, true, false),