Files

98 lines
3.9 KiB
JavaScript

import { getContext, extension_settings } from "/scripts/extensions.js";
import { saveChat } from "/script.js";
import { renderTables } from '../../ui/table-bindings.js';
import { extensionName } from "../../utils/settings.js";
import { convertTablesToCsvString, convertSelectedTablesToCsvString, saveStateToMessage, getMemoryState, updateTableFromText, getBatchFillerRuleTemplate, getBatchFillerFlowTemplate } from './manager.js';
import { getPresetPrompts, getMixedOrder } from '../../PresetSettings/index.js';
import { callAI, generateRandomSeed } from '../api.js';
import { callNccsAI } from '../api/NccsApi.js';
export async function reorganizeTableContent(selectedTableIndices) {
const settings = extension_settings[extensionName] || {};
if (settings.table_system_enabled === false) {
toastr.warning('表格系统总开关已关闭。');
return;
}
if (window.AMILY2_SYSTEM_PARALYZED === true) {
console.error("[Amily2-制裁] 系统完整性已受损,所有外交活动被无限期中止。");
return;
}
try {
toastr.info('正在重新整理表格内容...', 'Amily2-重新整理');
let currentTableDataString;
if (selectedTableIndices && Array.isArray(selectedTableIndices) && selectedTableIndices.length > 0) {
currentTableDataString = convertSelectedTablesToCsvString(selectedTableIndices);
} else {
currentTableDataString = convertTablesToCsvString();
}
if (!currentTableDataString.trim()) {
toastr.warning('当前没有表格内容需要整理。', 'Amily2-重新整理');
return;
}
const order = getMixedOrder('reorganizer') || [];
const presetPrompts = await getPresetPrompts('reorganizer');
const messages = [
{ role: 'system', content: generateRandomSeed() }
];
const ruleTemplate = getBatchFillerRuleTemplate();
const flowTemplate = getBatchFillerFlowTemplate();
const finalFlowPrompt = flowTemplate.replace('{{{Amily2TableData}}}', currentTableDataString);
let promptCounter = 0;
for (const item of order) {
if (item.type === 'prompt') {
if (presetPrompts && presetPrompts[promptCounter]) {
messages.push(presetPrompts[promptCounter]);
promptCounter++;
}
} else if (item.type === 'conditional') {
switch (item.id) {
case 'flowTemplate':
messages.push({ role: "system", content: finalFlowPrompt });
break;
}
}
}
console.groupCollapsed(`[Amily2 重新整理] 即将发送至 API 的内容`);
console.dir(messages);
console.groupEnd();
let rawContent;
if (settings.nccsEnabled) {
console.log('[Amily2-重新整理] 使用 Nccs API 进行表格重整...');
rawContent = await callNccsAI(messages);
} else {
console.log('[Amily2-重新整理] 使用 tableFilling slot 进行表格重整...');
rawContent = await callAI(messages, { slot: 'tableFilling' });
}
if (!rawContent) {
console.error('[Amily2-重新整理] 未能获取AI响应内容。');
return;
}
console.log("[Amily2号-重新整理-原始回复]:", rawContent);
updateTableFromText(rawContent);
renderTables();
toastr.success('表格内容重新整理完成!', 'Amily2-重新整理');
const currentContext = getContext();
if (currentContext.chat && currentContext.chat.length > 0) {
saveChat();
}
} catch (error) {
console.error('[Amily2-重新整理] 发生错误:', error);
toastr.error(`重新整理失败: ${error.message}`, 'Amily2-重新整理');
}
}