paper-burner/js/chatbot/core/chatbot-core.js

164 lines
5.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// chatbot-core.js
// 主入口模块 - 整合所有子模块并导出统一接口
// =============== 全局状态 ===============
let chatHistory = [];
let isChatbotLoading = false;
// 包装 isChatbotLoading 为引用对象,以便传递给子模块
const isChatbotLoadingRef = {
get value() { return isChatbotLoading; },
set value(v) { isChatbotLoading = v; }
};
// =============== 从各模块导入函数 ===============
// API 配置构建模块
const buildCustomApiConfig = window.ApiConfigBuilder?.buildCustomApiConfig;
// 聊天历史管理模块
const saveChatHistory = window.ChatHistoryManager?.saveChatHistory;
const loadChatHistory = window.ChatHistoryManager?.loadChatHistory;
const clearChatHistory = window.ChatHistoryManager?.clearChatHistory;
const reloadChatHistoryAndUpdateUI = window.ChatHistoryManager?.reloadChatHistoryAndUpdateUI;
const clearCurrentDocChatHistory = window.ChatHistoryManager?.clearCurrentDocChatHistory;
const deleteMessageFromHistory = window.ChatHistoryManager?.deleteMessageFromHistory;
// 内容处理模块
const getCurrentDocContent = window.ContentProcessor?.getCurrentDocContent;
const buildChatMessages = window.ContentProcessor?.buildChatMessages;
const splitContentSmart = window.ContentProcessor?.splitContentSmart;
const getCurrentDocId = window.ContentProcessor?.getCurrentDocId;
const attachSelectedContextToDoc = window.ContentProcessor?.attachSelectedContextToDoc;
const buildFallbackSemanticContext = window.ContentProcessor?.buildFallbackSemanticContext;
// 语义意群管理模块
const showMultiHopConfigDialog = window.SemanticGroupsManager?.showMultiHopConfigDialog;
const ensureIndexesBuilt = window.SemanticGroupsManager?.ensureIndexesBuilt;
// 消息发送模块
const getChatbotConfig = window.MessageSender?.getChatbotConfig;
const singleChunkSummary = window.MessageSender?.singleChunkSummary;
// =============== 包装函数 ===============
/**
* 包装 ensureSemanticGroupsReady注入依赖
*/
async function ensureSemanticGroupsReady(docContentInfo) {
if (!window.SemanticGroupsManager?.ensureSemanticGroupsReady) {
console.warn('[ChatbotCore] SemanticGroupsManager.ensureSemanticGroupsReady not loaded');
return;
}
return window.SemanticGroupsManager.ensureSemanticGroupsReady(
docContentInfo,
getCurrentDocId,
getChatbotConfig,
singleChunkSummary
);
}
/**
* 包装 sendChatbotMessage注入依赖
*/
async function sendChatbotMessage(userInput, updateChatbotUI, externalConfig = null, displayUserInput = null) {
if (!window.MessageSender?.sendChatbotMessage) {
console.error('[ChatbotCore] MessageSender.sendChatbotMessage not loaded');
return;
}
return window.MessageSender.sendChatbotMessage(
userInput,
updateChatbotUI,
externalConfig,
displayUserInput,
chatHistory,
isChatbotLoadingRef,
getCurrentDocId,
getCurrentDocContent,
saveChatHistory,
ensureSemanticGroupsReady
);
}
/**
* 包装 reloadChatHistoryAndUpdateUI注入依赖
*/
function reloadChatHistoryAndUpdateUIWrapper(updateChatbotUI) {
if (!window.ChatHistoryManager?.reloadChatHistoryAndUpdateUI) {
console.warn('[ChatbotCore] ChatHistoryManager.reloadChatHistoryAndUpdateUI not loaded');
return;
}
return reloadChatHistoryAndUpdateUI(updateChatbotUI, getCurrentDocId, chatHistory);
}
/**
* 包装 clearCurrentDocChatHistory注入依赖
*/
function clearCurrentDocChatHistoryWrapper(updateChatbotUI) {
if (!window.ChatHistoryManager?.clearCurrentDocChatHistory) {
console.warn('[ChatbotCore] ChatHistoryManager.clearCurrentDocChatHistory not loaded');
return;
}
return clearCurrentDocChatHistory(updateChatbotUI, getCurrentDocId, chatHistory);
}
/**
* 包装 deleteMessageFromHistory注入依赖
*/
function deleteMessageFromHistoryWrapper(docId, index, updateUIAfterDelete) {
if (!window.ChatHistoryManager?.deleteMessageFromHistory) {
console.warn('[ChatbotCore] ChatHistoryManager.deleteMessageFromHistory not loaded');
return;
}
return deleteMessageFromHistory(docId, index, updateUIAfterDelete, chatHistory);
}
// 导出核心对象
window.ChatbotCore = {
chatHistory,
get isChatbotLoading() { return isChatbotLoading; },
set isChatbotLoading(v) { isChatbotLoading = v; },
getChatbotConfig,
getCurrentDocContent,
buildChatMessages,
sendChatbotMessage,
saveChatHistory,
loadChatHistory,
clearChatHistory,
clearCurrentDocChatHistory: clearCurrentDocChatHistoryWrapper,
deleteMessageFromHistory: deleteMessageFromHistoryWrapper,
getCurrentDocId,
reloadChatHistoryAndUpdateUI: reloadChatHistoryAndUpdateUIWrapper,
// 导出给意群聚合模块使用的单轮摘要工具
singleChunkSummary,
// 导出内容处理工具
splitContentSmart,
attachSelectedContextToDoc,
buildFallbackSemanticContext,
// 重新生成意群(清空缓存并根据设置重新生成)
regenerateSemanticGroups: async function(newSettings) {
try {
if (newSettings && typeof newSettings === 'object') {
window.semanticGroupsSettings = Object.assign({}, window.semanticGroupsSettings || {}, newSettings);
}
const docId = getCurrentDocId();
if (typeof window.deleteSemanticGroupsFromDB === 'function') {
await window.deleteSemanticGroupsFromDB(docId);
}
if (window.data) {
delete window.data.semanticGroups;
}
const docContentInfo = getCurrentDocContent();
await ensureSemanticGroupsReady(docContentInfo);
if (window.ChatbotFloatingOptionsUI && typeof window.ChatbotFloatingOptionsUI.updateDisplay === 'function') {
window.ChatbotFloatingOptionsUI.updateDisplay();
}
if (window.SemanticGroupsUI && typeof window.SemanticGroupsUI.update === 'function') {
window.SemanticGroupsUI.update();
}
} catch (e) {
console.error('[ChatbotCore] regenerateSemanticGroups 失败:', e);
}
}
};