164 lines
5.8 KiB
JavaScript
164 lines
5.8 KiB
JavaScript
// 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);
|
||
}
|
||
}
|
||
};
|