Files
ST-Amily2-Chat-Optimisation…/core/rag-processor.js
2025-08-02 19:34:57 +08:00

2 lines
31 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.
'use strict';const _0x532886=_0x1675;(function(_0x407f3e,_0x5b04ed){const _0x4e0f8b=_0x1675,_0x201e71=_0x407f3e();while(!![]){try{const _0x3f6f3d=parseInt(_0x4e0f8b(0x1b1))/0x1+parseInt(_0x4e0f8b(0x22a))/0x2*(parseInt(_0x4e0f8b(0x1d1))/0x3)+parseInt(_0x4e0f8b(0x1f6))/0x4+parseInt(_0x4e0f8b(0x240))/0x5+-parseInt(_0x4e0f8b(0x1c6))/0x6+parseInt(_0x4e0f8b(0x24f))/0x7+-parseInt(_0x4e0f8b(0x1be))/0x8*(parseInt(_0x4e0f8b(0x20c))/0x9);if(_0x3f6f3d===_0x5b04ed)break;else _0x201e71['push'](_0x201e71['shift']());}catch(_0x21a967){_0x201e71['push'](_0x201e71['shift']());}}}(_0x342c,0x7bc74));import{extension_prompt_roles,setExtensionPrompt}from'/script.js';import*as _0x336e7d from'./utils/context-utils.js';import{defaultSettings as _0x39d149}from'./rag-settings.js';import*as _0x8a68c3 from'./ingestion-manager.js';const MODULE_NAME='hanlinyuan-rag-core',OFFICIAL_REARRANGE_CHAT_FUNCTION_NAME=_0x532886(0x1b5);let context=null,settings=null,lockedCollectionId=null;function _0x342c(){const _0x1c9540=['[翰林院-日志]\x20清空宝库API调用成功。','depth','输入文本为空','[翰林院-日志]\x20发送到\x20/api/vector/purge\x20的请求体:','saveProgress','filter',',\x20第1卷,\x20第1章,\x20第','rerank_score','翰林院忆识核心已启动\x20(V5.1-和平共存版),已代理\x20','[翰林院-核心]\x20文本录入失败:\x20','[翰林院-Rerank]\x20开始元数据加权最终排序...','[翰林院-日志]\x20/api/vector/list\x20响应状态:\x20','2615265KuFIcQ','openai','lorebook','model','success','[翰林院-日志]\x20/api/vector/query\x20响应状态:\x20','max','application/json','toISOString','HANLINYUAN_RAG','manual','source','start','正在智能分块...','/api/vector/list','5367341TQkcEB','[翰林院-核心]\x20聊天记录凝识完成成功插入\x20','[翰林院-核心]\x20文本录入任务被用户中止。','在insertVectors内部也无法获取collectionId','\x20获取模型列表...','map','split','正在处理\x20','...)','is_user','\x0a</','slice','depth_role','vector','message','获取Rerank模型列表失败\x20(','[翰林院-日志]\x20清空目标集合ID:\x20','[翰林院]\x20正在从\x20','[翰林院-日志]\x20查询目标集合ID:\x20','info','Rerank模型API的响应格式无效:\x20未找到\x20\x27data\x27\x20数组。',',\x20第','enabled','template','Rerank\x20API\x20请求失败\x20(','Bearer\x20','charCodeAt','[翰林院-日志]\x20/api/vector/purge\x20响应状态:\x20','[来源:\x20','208106mQXBpJ','json','min','<聊天记录>\x0a[来源:\x20','vectors_rearrangeChat','[翰林院-核心]\x20已将\x20','Rerank失败:\x20','notify','rerank','\x27的文本分割成\x20','[翰林院-核心]\x20ingestTextToHanlinyuan\x20失败:','/embeddings','push','1839632pBKXgL','getRequestHeaders','AbortError','queryMessageCount','/v1/rerank','data','[翰林院-日志]\x20获取向量列表API错误:','/api/vector/insert','1971456jJpsiH','/v1','小说录入','findIndex','apiKey','send_date','[翰林院-日志]\x20宝库查询API错误:','GET','chat','\x0a</聊天记录>','injection','526233tyTdjd','webllm','\x20个条目。','聊天记录\x20#','[翰林院-核心]\x20已为宝库\x20','\x20个向量条目。','忆识存入API错误\x20','第1卷','[翰林院-核心]\x20聊天记录凝识失败:\x20','[翰林院]\x20检索或注入时发生错误:','clearJob','[翰林院-核心]\x20成功插入\x20','[翰林院-核心]\x20将来源\x27','top_n','[翰林院-日志]\x20开始清空宝库...','mes','getContext','isArray','[翰林院-核心]\x20凝识任务已锁定忆识宝库ID:\x20','宝库查询API错误\x20','[翰林院-日志]\x20发送到\x20/api/vector/list\x20的请求体:','测试连接','POST','metadata','status','[翰林院-日志]\x20发送到\x20/api/vector/query\x20的请求体:','/v1/embeddings','end','[翰林院-日志]\x20统计目标集合ID:\x20','):\x20','trim','[翰林院-日志]\x20开始获取向量总数...','[翰林院-日志]\x20开始向量查询\x20(采用最终API交互模式)...','position','第1章','[翰林院-日志]\x20统计成功向量总数:\x20','now','2604196vHYsUc','endsWith','\x20条消息分解为\x20','sort','retrieval','batchSize','abs','url','name','\x20个块。','stringify','test','function','[翰林院-日志]\x20查询成功返回\x20','aborted','embedding','saveSettingsDebounced','forEach','condensation','api-key','substring','翰林院忆识核心已启动\x20(V5.1-借壳上市版),已注册全局函数:\x20','72ErRdmB','No\x20messages\x20to\x20process.','log','\x20条结果。','\x20个知识块准备入库。','maxResults','length','join','text','[翰林院-核心]\x20insertVectors被调用时未提供collectionId','error','https://api.openai.com','\x20记录凝识范围:\x20','chat_history','忆识检索失败:\x20','{{text}}','手动录入','floor','/v1/models','无法确定当前忆识宝库的ID请确认角色已正确加载。','[翰林院-Rerank]\x20外部Rerank失败将仅使用内部加权。','matchThreshold','\x20-\x20楼层\x20#','find','(已锁定:\x20','object','[翰林院-Rerank]\x20开始外部API重排序...','extensionSettings','[翰林院-日志]\x20清空宝库API错误:','/api/vector/purge','6mTTvmU','advanced','文本块和向量数量不匹配','condensationHistory','final_score','replace','index','sourceName','custom','results'];_0x342c=function(){return _0x1c9540;};return _0x342c();}export{initialize,getSettings,saveSettings,resetSettings,testApiConnection,fetchEmbeddingModels,fetchRerankModels,getVectorCount,purgeStorage,getMessagesForCondensation,processCondensation,ingestTextToHanlinyuan,getCollectionId,toggleSessionLock,isSessionLocked,getLockedSessionInfo};function initialize(){const _0x54854b=_0x532886;context=SillyTavern[_0x54854b(0x1e1)]();if(!context){console['error']('[翰林院]\x20未能获取SillyTavern上下文初始化失败。');return;}settings=getSettings();const _0xeef937=window[OFFICIAL_REARRANGE_CHAT_FUNCTION_NAME];typeof _0xeef937===_0x54854b(0x202)?(window[OFFICIAL_REARRANGE_CHAT_FUNCTION_NAME]=async function(..._0x8f2795){await rearrangeChat(..._0x8f2795),await _0xeef937(..._0x8f2795);},console[_0x54854b(0x20e)](_0x54854b(0x23c)+OFFICIAL_REARRANGE_CHAT_FUNCTION_NAME)):(window[OFFICIAL_REARRANGE_CHAT_FUNCTION_NAME]=rearrangeChat,console[_0x54854b(0x20e)](_0x54854b(0x20b)+OFFICIAL_REARRANGE_CHAT_FUNCTION_NAME));}async function ingestTextToHanlinyuan(_0x7ef931,_0x3e19b4='manual',_0x4d5988='',_0x11ba8d=()=>{},_0x14dec4=null,_0x3801ca=()=>{},_0x1bcdf7=()=>{},_0x3abd59=null,_0x486876=0x0,_0x18619f=null){const _0xe93123=_0x532886;if(!_0x7ef931||!_0x7ef931['trim']())return{'success':![],'error':_0xe93123(0x236)};if(!settings)return{'success':![],'error':'核心未初始化'};try{const _0x555e88=getCollectionId();if(!_0x555e88)throw new Error(_0xe93123(0x21f));_0x3801ca('[翰林院-核心]\x20已锁定忆识宝库ID:\x20'+_0x555e88,_0xe93123(0x262)),_0x11ba8d({'message':_0xe93123(0x24d),'processed':0x0,'total':0x1});const _0x5b3b14=splitIntoChunks(_0x7ef931,_0x3e19b4,_0x4d5988),_0x9798ec=_0x5b3b14[_0xe93123(0x212)];if(_0x14dec4?.[_0xe93123(0x204)])throw new Error(_0xe93123(0x1c0));_0x3801ca(_0xe93123(0x1dd)+(_0x4d5988||_0x3e19b4)+_0xe93123(0x1ba)+_0x9798ec+_0xe93123(0x1ff),_0xe93123(0x262));if(_0x9798ec===0x0)return{'success':!![],'count':0x0};const _0x54f3b7=settings[_0xe93123(0x1fa)]['batchSize']||0x5;let _0x31124c=_0x486876;for(let _0xf2f3e2=_0x486876;_0xf2f3e2<_0x9798ec;_0xf2f3e2+=_0x54f3b7){if(_0x14dec4?.['aborted'])throw new Error(_0xe93123(0x1c0));const _0x53cb79=_0x5b3b14['slice'](_0xf2f3e2,_0xf2f3e2+_0x54f3b7);_0x11ba8d({'message':_0xe93123(0x256)+(_0xf2f3e2+0x1)+'-'+(_0xf2f3e2+_0x53cb79[_0xe93123(0x212)])+'\x20块','processed':_0xf2f3e2,'total':_0x9798ec});const _0x2fd4ef=_0x53cb79[_0xe93123(0x254)](_0x36d003=>_0x36d003[_0xe93123(0x214)]),_0x456a2d=await getEmbeddings(_0x2fd4ef,_0x14dec4);if(_0x14dec4?.[_0xe93123(0x204)])throw new Error(_0xe93123(0x1c0));if(_0x53cb79['length']!==_0x456a2d[_0xe93123(0x212)])throw new Error(_0xe93123(0x22c));const _0x519b9b=_0x53cb79[_0xe93123(0x254)]((_0x50df8f,_0x57f899)=>({..._0x50df8f,'vector':_0x456a2d[_0x57f899]}));await insertVectors(_0x519b9b,_0x14dec4,_0x555e88),_0x31124c+=_0x53cb79[_0xe93123(0x212)],_0x3abd59&&_0x8a68c3[_0xe93123(0x238)](_0x3abd59,_0x31124c,_0x9798ec),_0x1bcdf7();}_0x3abd59&&_0x8a68c3[_0xe93123(0x1db)](_0x3abd59);if(_0x18619f){const _0x2ab3ce=getCollectionId(),_0x2b97ba=_0x18619f[_0xe93123(0x1ec)]===0x0?context[_0xe93123(0x1ce)][_0xe93123(0x212)]:_0x18619f[_0xe93123(0x1ec)];settings['condensationHistory'][_0x2ab3ce]={'start':_0x18619f[_0xe93123(0x24c)],'end':_0x2b97ba,'timestamp':new Date()[_0xe93123(0x248)]()},saveSettings(),_0x3801ca(_0xe93123(0x1d5)+_0x2ab3ce+_0xe93123(0x218)+_0x18619f['start']+'-'+_0x2b97ba,_0xe93123(0x262));}return _0x3801ca(_0xe93123(0x1dc)+_0x31124c+_0xe93123(0x1d6),_0xe93123(0x244)),{'success':!![],'count':_0x31124c};}catch(_0x14474e){if(_0x14474e[_0xe93123(0x1fe)]==='AbortError'){_0x3801ca(_0xe93123(0x251),'warn');throw _0x14474e;}return console[_0xe93123(0x216)](_0xe93123(0x1bb),_0x14474e),_0x3801ca(_0xe93123(0x23d)+_0x14474e[_0xe93123(0x25d)],'error'),{'success':![],'error':_0x14474e[_0xe93123(0x25d)]};}}function getSettings(){const _0x272785=_0x532886;if(!context||!context[_0x272785(0x227)])return structuredClone(_0x39d149);let _0x1f2706=context[_0x272785(0x227)][MODULE_NAME];!_0x1f2706&&(_0x1f2706={},context[_0x272785(0x227)][MODULE_NAME]=_0x1f2706);_0x1f2706[_0x272785(0x22d)]===undefined&&(_0x1f2706['condensationHistory']={});for(const _0x3d0343 in _0x39d149){if(_0x1f2706[_0x3d0343]===undefined)_0x1f2706[_0x3d0343]=structuredClone(_0x39d149[_0x3d0343]);else{if(typeof _0x39d149[_0x3d0343]===_0x272785(0x225)&&!Array['isArray'](_0x39d149[_0x3d0343])&&_0x39d149[_0x3d0343]!==null)for(const _0x154814 in _0x39d149[_0x3d0343]){_0x1f2706[_0x3d0343][_0x154814]===undefined&&(_0x1f2706[_0x3d0343][_0x154814]=_0x39d149[_0x3d0343][_0x154814]);}}}return _0x1f2706;}function saveSettings(){const _0x2460ee=_0x532886;if(context)context[_0x2460ee(0x206)]();}function resetSettings(){context&&(context['extensionSettings'][MODULE_NAME]=structuredClone(_0x39d149),saveSettings());}function showNotification(_0xdeccba,_0x517373=_0x532886(0x262)){toastr[_0x517373](_0xdeccba);}function getTagForSource(_0xd08851){const _0x45914f=_0x532886;switch(_0xd08851){case _0x45914f(0x219):return'聊天记录';case'lorebook':return'世界书';case _0x45914f(0x24a):return _0x45914f(0x21c);case'novel':return _0x45914f(0x1c8);default:return'资料';}}function splitIntoChunks(_0x383f73,_0x79ca98,_0x5bb98c){const _0x42f90a=_0x532886,{chunkSize:_0xfa2993,overlap:_0x14ae16}=settings[_0x42f90a(0x22b)],_0x259b83=[];if(!_0x383f73||_0xfa2993<=0x0)return _0x259b83;const _0x1e0e28=/(第\s*[一二三四五六七八九十百千万零\d]+\s*卷)/gim,_0x3fae46=/(第\s*[一二三四五六七八九十百千万零\d]+\s*[章回节部])|^(Chapter\s+\d+)/gim;let _0x37b25d=0x0,_0x2e9a2b=0x1,_0x3c48a7=0x1,_0x2aabbe=![];const _0x2cb617=_0x383f73[_0x42f90a(0x255)]('\x0a');let _0x2eea18=_0x42f90a(0x1d8),_0xa05494=_0x42f90a(0x1f3),_0x137ba8=[];function _0x1ac0d6(){const _0x24799b=_0x42f90a;if(_0x137ba8[_0x24799b(0x212)]===0x0)return;const _0x4c2090=_0x137ba8['join']('\x0a');let _0x1ea3bb=0x0,_0x89dadb=0x1;while(_0x1ea3bb<_0x4c2090[_0x24799b(0x212)]){const _0x34c17b=Math[_0x24799b(0x1b3)](_0x1ea3bb+_0xfa2993,_0x4c2090[_0x24799b(0x212)]),_0xfc9f73=_0x4c2090[_0x24799b(0x20a)](_0x1ea3bb,_0x34c17b);if(_0xfc9f73[_0x24799b(0x1ef)]()['length']>0x0){const _0x4a70cd={'source':_0x79ca98,'sourceName':_0x5bb98c,'timestamp':new Date()[_0x24799b(0x248)](),'globalIndex':_0x37b25d++,'volume':_0x2eea18,'chapter':_0xa05494,'section':_0x89dadb},_0x142724=getTagForSource(_0x79ca98),_0x16cb1e=_0x24799b(0x1b0)+_0x5bb98c+',\x20'+_0x2eea18+',\x20'+_0xa05494+_0x24799b(0x1a9)+_0x89dadb+'节]',_0x3cbe89='<'+_0x142724+'>\x0a'+_0x16cb1e+'\x0a'+_0xfc9f73+_0x24799b(0x259)+_0x142724+'>';_0x259b83['push']({'text':_0x3cbe89,'metadata':_0x4a70cd}),_0x89dadb++;}_0x1ea3bb+=_0xfa2993-_0x14ae16;if(_0x1ea3bb>=_0x4c2090[_0x24799b(0x212)])break;}_0x137ba8=[];}for(const _0x3755e9 of _0x2cb617){const _0x594e5b=_0x3755e9[_0x42f90a(0x1ef)]();if(_0x1e0e28[_0x42f90a(0x201)](_0x594e5b))_0x1ac0d6(),_0x2eea18=_0x594e5b,_0xa05494='第1章',_0x2e9a2b++,_0x3c48a7=0x1,_0x2aabbe=!![];else _0x3fae46[_0x42f90a(0x201)](_0x594e5b)?(_0x1ac0d6(),_0xa05494=_0x594e5b,_0x3c48a7++):_0x137ba8[_0x42f90a(0x1bd)](_0x3755e9);}_0x1ac0d6();if(_0x259b83[_0x42f90a(0x212)]===0x0&&_0x383f73[_0x42f90a(0x212)]>0x0){let _0x16d179=0x0,_0x15d3cf=0x1;while(_0x16d179<_0x383f73['length']){const _0x18f050=Math['min'](_0x16d179+_0xfa2993,_0x383f73[_0x42f90a(0x212)]),_0x2e1d85=_0x383f73[_0x42f90a(0x20a)](_0x16d179,_0x18f050),_0x3ef5c3={'source':_0x79ca98,'sourceName':_0x5bb98c,'timestamp':new Date()['toISOString'](),'globalIndex':_0x259b83['length'],'volume':_0x42f90a(0x1d8),'chapter':_0x42f90a(0x1f3),'section':_0x15d3cf},_0x138fe1=getTagForSource(_0x79ca98),_0x34a965=_0x42f90a(0x1b0)+_0x5bb98c+_0x42f90a(0x23a)+_0x15d3cf+'节]',_0x13f7c2='<'+_0x138fe1+'>\x0a'+_0x34a965+'\x0a'+_0x2e1d85+_0x42f90a(0x259)+_0x138fe1+'>';_0x259b83[_0x42f90a(0x1bd)]({'text':_0x13f7c2,'metadata':_0x3ef5c3}),_0x15d3cf++,_0x16d179+=_0xfa2993-_0x14ae16;}}return _0x259b83;}import{getCollectionId as _0x20aad2,getCharacterName}from'./utils/context-utils.js';function getCollectionId(){return lockedCollectionId||_0x20aad2();}function toggleSessionLock(){return lockedCollectionId?(lockedCollectionId=null,![]):(lockedCollectionId=_0x20aad2(),!![]);}function isSessionLocked(){return lockedCollectionId!==null;}function getLockedSessionInfo(){const _0x4e9189=_0x532886;if(!lockedCollectionId)return null;return{'id':lockedCollectionId,'name':_0x4e9189(0x224)+lockedCollectionId[_0x4e9189(0x20a)](0x0,0x8)+_0x4e9189(0x257)};}function generateHash(_0x3f2ba2){const _0x16523e=_0x532886;let _0x4ea3a9=0x0;for(let _0x3f85a7=0x0;_0x3f85a7<_0x3f2ba2['length'];_0x3f85a7++){const _0x77cbbc=_0x3f2ba2[_0x16523e(0x1ae)](_0x3f85a7);_0x4ea3a9=(_0x4ea3a9<<0x5)-_0x4ea3a9+_0x77cbbc,_0x4ea3a9=_0x4ea3a9&_0x4ea3a9;}return Math[_0x16523e(0x1fc)](_0x4ea3a9)['toString'](0x24);}function getSanitizedBaseUrl(_0x50d40d){const _0x2ea468=_0x532886;let _0x45c91f=_0x50d40d['trim']();return _0x45c91f[_0x2ea468(0x1f7)]('/')&&(_0x45c91f=_0x45c91f[_0x2ea468(0x25a)](0x0,-0x1)),_0x45c91f[_0x2ea468(0x1f7)](_0x2ea468(0x1c7))&&(_0x45c91f=_0x45c91f[_0x2ea468(0x25a)](0x0,-0x3)),_0x45c91f[_0x2ea468(0x1f7)](_0x2ea468(0x1bc))&&(_0x45c91f=_0x45c91f['slice'](0x0,-0xb)),_0x45c91f;}async function fetchEmbeddingModels(){const _0x29aa31=_0x532886,{apiKey:_0x30f4d5}=settings['retrieval'],_0x3ff12f=getApiEndpointUrl(!![]);if(!_0x3ff12f||!_0x30f4d5)throw new Error('API\x20URL\x20或\x20Key\x20未提供。');const _0x41da2b=getSanitizedBaseUrl(_0x3ff12f),_0x14edd3=_0x41da2b+_0x29aa31(0x21e);console[_0x29aa31(0x20e)](_0x29aa31(0x260)+_0x14edd3+'\x20获取模型列表...');const _0x1d44a0=await fetch(_0x14edd3,{'method':'GET','headers':getApiHeaders()});if(!_0x1d44a0['ok']){const _0x40572e=await _0x1d44a0['text']();throw new Error('获取模型列表失败\x20('+_0x1d44a0[_0x29aa31(0x1e9)]+'):\x20'+_0x40572e);}const _0x555fdf=await _0x1d44a0[_0x29aa31(0x1b2)]();if(!_0x555fdf[_0x29aa31(0x1c3)]||!Array[_0x29aa31(0x1e2)](_0x555fdf[_0x29aa31(0x1c3)]))throw new Error('模型API的响应格式无效:\x20未找到\x20\x27data\x27\x20数组。');return _0x555fdf[_0x29aa31(0x1c3)]['map'](_0x1bb4cd=>_0x1bb4cd['id'])[_0x29aa31(0x1f9)]();}function _0x1675(_0x20851e,_0x6dce87){const _0x342c1a=_0x342c();return _0x1675=function(_0x167582,_0x4c6054){_0x167582=_0x167582-0x1a9;let _0x4319f7=_0x342c1a[_0x167582];return _0x4319f7;},_0x1675(_0x20851e,_0x6dce87);}function getRerankBaseUrl(_0x3eaaa9){const _0x23cae4=_0x532886;let _0x38e2b3=_0x3eaaa9[_0x23cae4(0x1ef)]();return _0x38e2b3[_0x23cae4(0x1f7)]('/')&&(_0x38e2b3=_0x38e2b3['slice'](0x0,-0x1)),_0x38e2b3[_0x23cae4(0x1f7)](_0x23cae4(0x1c7))&&(_0x38e2b3=_0x38e2b3['slice'](0x0,-0x3)),_0x38e2b3[_0x23cae4(0x1f7)]('/rerank')&&(_0x38e2b3=_0x38e2b3[_0x23cae4(0x25a)](0x0,-0x7)),_0x38e2b3;}async function fetchRerankModels(){const _0x3844c7=_0x532886,{url:_0x342d91,apiKey:_0x132e3e}=settings[_0x3844c7(0x1b9)];if(!_0x342d91||!_0x132e3e)throw new Error('Rerank\x20API\x20URL\x20或\x20Key\x20未提供。');const _0x1d7799=getRerankBaseUrl(_0x342d91),_0x12a2aa=_0x1d7799+'/v1/models';console['log']('[翰林院-Rerank]\x20正在从\x20'+_0x12a2aa+_0x3844c7(0x253));const _0xe0e86c=await fetch(_0x12a2aa,{'method':_0x3844c7(0x1cd),'headers':{'Authorization':_0x3844c7(0x1ad)+_0x132e3e}});if(!_0xe0e86c['ok']){const _0x569ed4=await _0xe0e86c[_0x3844c7(0x214)]();throw new Error(_0x3844c7(0x25e)+_0xe0e86c[_0x3844c7(0x1e9)]+_0x3844c7(0x1ee)+_0x569ed4);}const _0x1e4d1b=await _0xe0e86c[_0x3844c7(0x1b2)]();if(!_0x1e4d1b[_0x3844c7(0x1c3)]||!Array[_0x3844c7(0x1e2)](_0x1e4d1b['data']))throw new Error(_0x3844c7(0x263));return _0x1e4d1b[_0x3844c7(0x1c3)][_0x3844c7(0x254)](_0x3a9958=>_0x3a9958['id'])[_0x3844c7(0x1f9)]();}function getApiEndpointUrl(_0x238fdd=![]){const _0x19a1b2=_0x532886,{apiEndpoint:_0x15b150,customApiUrl:_0x240910}=settings[_0x19a1b2(0x1fa)];let _0x24947b;switch(_0x15b150){case _0x19a1b2(0x241):_0x24947b=_0x19a1b2(0x217);break;case'azure':case _0x19a1b2(0x232):_0x24947b=_0x240910;break;default:_0x24947b=_0x19a1b2(0x217);break;}if(_0x238fdd)return _0x24947b;return getSanitizedBaseUrl(_0x24947b)+_0x19a1b2(0x1eb);}function getApiHeaders(){const _0x5a0fc3=_0x532886,_0xef88c={'Content-Type':'application/json'},{apiKey:_0x5ea8d0,apiEndpoint:_0x13b7ad}=settings[_0x5a0fc3(0x1fa)];switch(_0x13b7ad){case'openai':case _0x5a0fc3(0x232):_0xef88c['Authorization']='Bearer\x20'+_0x5ea8d0;break;case'azure':_0xef88c[_0x5a0fc3(0x209)]=_0x5ea8d0;break;}return _0xef88c;}async function getEmbeddings(_0x15d53e,_0x5440f3=null){const _0x1bfa17=_0x532886;if(!settings[_0x1bfa17(0x1fa)]['apiKey'])throw new Error('请先配置API\x20Key');const _0x2bee94=getApiEndpointUrl(),_0x116a3f=getApiHeaders(),_0x1622f6=settings[_0x1bfa17(0x1fa)]['embeddingModel'],_0x3697b0=settings['retrieval'][_0x1bfa17(0x1fb)]||0x5,_0xd07be0=[];for(let _0x20e04d=0x0;_0x20e04d<_0x15d53e['length'];_0x20e04d+=_0x3697b0){if(_0x5440f3?.[_0x1bfa17(0x204)])throw new Error('AbortError');const _0x1cdc3e=_0x15d53e['slice'](_0x20e04d,_0x20e04d+_0x3697b0),_0xc8d994=await fetch(_0x2bee94,{'method':'POST','headers':_0x116a3f,'body':JSON[_0x1bfa17(0x200)]({'input':_0x1cdc3e,'model':_0x1622f6}),'signal':_0x5440f3});if(!_0xc8d994['ok']){const _0x2d02f9=await _0xc8d994[_0x1bfa17(0x214)]();throw new Error('神力获取失败\x20'+_0xc8d994[_0x1bfa17(0x1e9)]+':\x20'+_0x2d02f9);}const _0x58b32a=await _0xc8d994['json']();_0xd07be0[_0x1bfa17(0x1bd)](..._0x58b32a[_0x1bfa17(0x1c3)][_0x1bfa17(0x254)](_0x61e4cd=>_0x61e4cd[_0x1bfa17(0x205)])),_0x20e04d+_0x3697b0<_0x15d53e['length']&&await new Promise(_0x3f00fd=>setTimeout(_0x3f00fd,0xc8));}return _0xd07be0;}async function queryVectors(_0x2a1007){const _0x3941b6=_0x532886;console['log'](_0x3941b6(0x1f1));const _0x5a3119=getCollectionId();console['log'](_0x3941b6(0x261)+_0x5a3119);const _0x28d14f=(await getEmbeddings([_0x2a1007]))[0x0],_0x48210b={'collectionId':_0x5a3119,'searchText':_0x2a1007,'topK':settings['advanced'][_0x3941b6(0x211)],'threshold':settings[_0x3941b6(0x22b)][_0x3941b6(0x221)],'source':_0x3941b6(0x1d2),'embeddings':{[_0x2a1007]:_0x28d14f}};console['log'](_0x3941b6(0x1ea),JSON[_0x3941b6(0x200)](_0x48210b,null,0x2));const _0x43968a=await fetch('/api/vector/query',{'method':_0x3941b6(0x1e7),'headers':context[_0x3941b6(0x1bf)](),'body':JSON[_0x3941b6(0x200)](_0x48210b)});console[_0x3941b6(0x20e)](_0x3941b6(0x245)+_0x43968a['status']);if(!_0x43968a['ok']){const _0x8ebe52=await _0x43968a[_0x3941b6(0x214)]();console['error'](_0x3941b6(0x1cc),_0x8ebe52);throw new Error(_0x3941b6(0x1e4)+_0x43968a[_0x3941b6(0x1e9)]+':\x20'+_0x8ebe52);}const _0x31097c=await _0x43968a['json']();console[_0x3941b6(0x20e)]('[翰林院-日志]\x20/api/vector/query\x20响应内容:',_0x31097c);const _0x14246a=_0x31097c[_0x3941b6(0x1e8)]||_0x31097c[_0x3941b6(0x233)]||_0x31097c[_0x3941b6(0x1c3)]||[];return console['log'](_0x3941b6(0x203)+_0x14246a[_0x3941b6(0x212)]+_0x3941b6(0x20f)),_0x14246a;}async function insertVectors(_0x399f43,_0x185709=null,_0x65dbfb){const _0x516d22=_0x532886;if(!_0x65dbfb){console[_0x516d22(0x216)](_0x516d22(0x215)),_0x65dbfb=getCollectionId();if(!_0x65dbfb)throw new Error(_0x516d22(0x252));}if(_0x399f43[_0x516d22(0x212)]===0x0)return{'success':!![],'count':0x0};const _0x550b67=_0x399f43['map']((_0x1849e6,_0x2ead27)=>({'hash':generateHash(_0x1849e6[_0x516d22(0x214)]+Date[_0x516d22(0x1f5)]()+_0x2ead27),'text':_0x1849e6['text'],'metadata':_0x1849e6[_0x516d22(0x1e8)]||{'source':'unknown','timestamp':new Date()['toISOString']()}})),_0x2e2199=_0x550b67['reduce']((_0xf55b81,_0x285942,_0xfad3b4)=>{const _0x4218c6=_0x516d22;return _0xf55b81[_0x285942[_0x4218c6(0x214)]]=_0x399f43[_0xfad3b4][_0x4218c6(0x25c)],_0xf55b81;},{}),_0x2e6f24={'collectionId':_0x65dbfb,'items':_0x550b67,'source':'webllm','embeddings':_0x2e2199},_0x4833e0=await fetch(_0x516d22(0x1c5),{'method':_0x516d22(0x1e7),'headers':context[_0x516d22(0x1bf)](),'body':JSON[_0x516d22(0x200)](_0x2e6f24),'signal':_0x185709});if(!_0x4833e0['ok']){const _0x625734=await _0x4833e0[_0x516d22(0x214)]();console[_0x516d22(0x216)]('[翰林院-日志]\x20忆识存入API错误:',_0x625734);throw new Error(_0x516d22(0x1d7)+_0x4833e0[_0x516d22(0x1e9)]+':\x20'+_0x625734);}return{'success':!![],'count':_0x550b67['length']};}async function testApiConnection(){const _0x3d24aa=_0x532886;await getEmbeddings([_0x3d24aa(0x1e6)]);}async function getVectorCount(){const _0x50497d=_0x532886;console[_0x50497d(0x20e)](_0x50497d(0x1f0));const _0xe4dfb4=getCollectionId();console[_0x50497d(0x20e)](_0x50497d(0x1ed)+_0xe4dfb4);const _0xb27673={'collectionId':_0xe4dfb4,'source':'webllm','embeddings':{}};console[_0x50497d(0x20e)](_0x50497d(0x1e5),JSON[_0x50497d(0x200)](_0xb27673,null,0x2));const _0x3295e0=await fetch(_0x50497d(0x24e),{'method':_0x50497d(0x1e7),'headers':context[_0x50497d(0x1bf)](),'body':JSON[_0x50497d(0x200)](_0xb27673)});console['log'](_0x50497d(0x23f)+_0x3295e0[_0x50497d(0x1e9)]);if(!_0x3295e0['ok']){const _0x5b0df0=await _0x3295e0[_0x50497d(0x214)]();return console[_0x50497d(0x216)](_0x50497d(0x1c4),_0x5b0df0),0x0;}const _0x342c93=await _0x3295e0[_0x50497d(0x1b2)]();let _0x253c6e=0x0;if(Array['isArray'](_0x342c93))_0x253c6e=_0x342c93[_0x50497d(0x212)];else _0x342c93&&_0x342c93['hashes']&&(_0x253c6e=_0x342c93['hashes'][_0x50497d(0x212)]);return console['log'](_0x50497d(0x1f4)+_0x253c6e),_0x253c6e;}async function purgeStorage(){const _0x3c4160=_0x532886;console['log'](_0x3c4160(0x1df));const _0x5bd6dd=getCollectionId();console['log'](_0x3c4160(0x25f)+_0x5bd6dd);const _0x552aca={'collectionId':_0x5bd6dd};console[_0x3c4160(0x20e)](_0x3c4160(0x237),JSON[_0x3c4160(0x200)](_0x552aca,null,0x2));const _0x7d6271=await fetch(_0x3c4160(0x229),{'method':'POST','headers':context[_0x3c4160(0x1bf)](),'body':JSON['stringify'](_0x552aca)});console[_0x3c4160(0x20e)](_0x3c4160(0x1af)+_0x7d6271[_0x3c4160(0x1e9)]);if(!_0x7d6271['ok']){const _0x154397=await _0x7d6271['text']();console['error'](_0x3c4160(0x228),_0x154397);}else console[_0x3c4160(0x20e)](_0x3c4160(0x234));return _0x7d6271['ok'];}function getMessagesForCondensation(_0x5dfb63=null){const _0x26b77a=_0x532886;if(!settings[_0x26b77a(0x208)][_0x26b77a(0x1aa)])return showNotification('凝识之权未开启','warning'),[];const {layerStart:_0x2f1bbe,layerEnd:_0x56abda}=settings[_0x26b77a(0x208)],_0x2dd913=_0x5dfb63||settings[_0x26b77a(0x208)]['messageTypes'],_0x23b159=context[_0x26b77a(0x1ce)][_0x26b77a(0x212)],_0x395c70=Math[_0x26b77a(0x246)](0x0,_0x2f1bbe-0x1),_0x3b19ad=_0x56abda===0x0||_0x56abda>_0x23b159?_0x23b159:Math[_0x26b77a(0x1b3)](_0x23b159,_0x56abda),_0x522484=context[_0x26b77a(0x1ce)][_0x26b77a(0x25a)](_0x395c70,_0x3b19ad);return _0x522484[_0x26b77a(0x239)](_0xb3add1=>{const _0xd920=_0x26b77a,_0x740668=_0xb3add1[_0xd920(0x258)]===!![],_0x20b2c8=_0xb3add1[_0xd920(0x258)]===![];if(!_0xb3add1[_0xd920(0x1e0)]||!_0xb3add1[_0xd920(0x1e0)][_0xd920(0x1ef)]())return![];return _0x2dd913['user']&&_0x740668||_0x2dd913['ai']&&_0x20b2c8;});}async function processCondensation(_0x3d2b58,_0x2f6b44=()=>{},_0x1a6efa=null){const _0x15d70d=_0x532886;if(!_0x3d2b58||_0x3d2b58[_0x15d70d(0x212)]===0x0)return{'success':![],'error':_0x15d70d(0x20d)};try{const _0x766b96=getCollectionId();if(!_0x766b96)throw new Error('无法确定当前忆识宝库的ID请确认角色已正确加载。');_0x2f6b44(_0x15d70d(0x1e3)+_0x766b96,_0x15d70d(0x262));const _0x40cbd7=[],_0x1ff638=context[_0x15d70d(0x1ce)],{chunkSize:_0xae507c,overlap:_0x384c1c}=settings[_0x15d70d(0x22b)];for(const _0x2bc70c of _0x3d2b58){const _0x44d2d8=(_0x2bc70c[_0x15d70d(0x1e0)]||'')[_0x15d70d(0x22f)](/<[^>]*>/g,'')['trim']();if(_0x44d2d8[_0x15d70d(0x212)]===0x0)continue;const _0x12191e=_0x1ff638['findIndex'](_0x3db5fc=>_0x3db5fc===_0x2bc70c),_0x4cf8d0=_0x12191e!==-0x1?_0x12191e+0x1:-0x1,_0xa0a09={'source':_0x15d70d(0x219),'sourceName':_0x15d70d(0x1d4)+_0x4cf8d0,'floor':_0x4cf8d0,'is_user':_0x2bc70c[_0x15d70d(0x258)],'timestamp':new Date(_0x2bc70c[_0x15d70d(0x1cb)])['toISOString']()};let _0xbe64b6=0x0;while(_0xbe64b6<_0x44d2d8[_0x15d70d(0x212)]){const _0x3baea3=Math['min'](_0xbe64b6+_0xae507c,_0x44d2d8[_0x15d70d(0x212)]),_0x41e8fb=_0x44d2d8['substring'](_0xbe64b6,_0x3baea3),_0x23bc13=_0x15d70d(0x1b4)+_0xa0a09[_0x15d70d(0x231)]+']\x0a'+_0x41e8fb+_0x15d70d(0x1cf);_0x40cbd7['push']({'text':_0x23bc13,'metadata':_0xa0a09}),_0xbe64b6+=_0xae507c-_0x384c1c;if(_0xbe64b6>=_0x44d2d8[_0x15d70d(0x212)])break;}}if(_0x40cbd7[_0x15d70d(0x212)]===0x0)return{'success':!![],'count':0x0};_0x2f6b44(_0x15d70d(0x1b6)+_0x3d2b58[_0x15d70d(0x212)]+_0x15d70d(0x1f8)+_0x40cbd7[_0x15d70d(0x212)]+_0x15d70d(0x210),'info');const _0x44b347=settings['retrieval'][_0x15d70d(0x1fb)]||0x5;let _0x2935be=0x0;for(let _0x2545a6=0x0;_0x2545a6<_0x40cbd7[_0x15d70d(0x212)];_0x2545a6+=_0x44b347){const _0x15bbda=_0x40cbd7['slice'](_0x2545a6,_0x2545a6+_0x44b347),_0x2fa5f4=_0x15bbda[_0x15d70d(0x254)](_0x564060=>_0x564060[_0x15d70d(0x214)]),_0x9bf044=await getEmbeddings(_0x2fa5f4);if(_0x15bbda[_0x15d70d(0x212)]!==_0x9bf044[_0x15d70d(0x212)])throw new Error('文本块和向量数量不匹配');const _0x31066b=_0x15bbda[_0x15d70d(0x254)]((_0x2cc220,_0xf01526)=>({..._0x2cc220,'vector':_0x9bf044[_0xf01526]}));await insertVectors(_0x31066b,null,_0x766b96),_0x2935be+=_0x15bbda[_0x15d70d(0x212)];}if(_0x1a6efa){const _0x3d2792=_0x1a6efa[_0x15d70d(0x1ec)]===0x0?context['chat'][_0x15d70d(0x212)]:_0x1a6efa['end'];settings[_0x15d70d(0x22d)][_0x766b96]={'start':_0x1a6efa[_0x15d70d(0x24c)],'end':_0x3d2792,'timestamp':new Date()[_0x15d70d(0x248)]()},saveSettings(),_0x2f6b44(_0x15d70d(0x1d5)+_0x766b96+'\x20记录凝识范围:\x20'+_0x1a6efa[_0x15d70d(0x24c)]+'-'+_0x3d2792,_0x15d70d(0x262));}_0x2f6b44(_0x15d70d(0x250)+_0x2935be+_0x15d70d(0x1d3),_0x15d70d(0x244));const _0x86d4c6=_0x3d2b58['map'](_0x52b070=>{const _0xc0bbb9=_0x15d70d,_0x47e81a=_0x1ff638[_0xc0bbb9(0x1c9)](_0x2fcc38=>_0x2fcc38===_0x52b070),_0x1830f3=_0x47e81a!==-0x1?_0x47e81a+0x1:-0x1,_0x1b5fe7=_0x52b070[_0xc0bbb9(0x258)]?'用户':getCharacterName()||'AI';return'['+_0x1b5fe7+_0xc0bbb9(0x222)+_0x1830f3+']\x20的消息已成功凝识。';});return{'success':!![],'count':_0x2935be,'messages':_0x86d4c6};}catch(_0x155512){return console[_0x15d70d(0x216)]('[翰林院-核心]\x20processCondensation\x20失败:',_0x155512),_0x2f6b44(_0x15d70d(0x1d9)+_0x155512['message'],_0x15d70d(0x216)),{'success':![],'error':_0x155512[_0x15d70d(0x25d)]};}}async function rerankResults(_0x215102,_0x506ee9,_0x547f5a){const _0x52362f=_0x532886;let _0x401d2e=_0x215102;if(_0x547f5a['rerank'][_0x52362f(0x1aa)]&&_0x215102[_0x52362f(0x212)]>0x0){console['log'](_0x52362f(0x226));try{const _0x5ea334=_0x215102[_0x52362f(0x254)]((_0x52dbe8,_0x12ff4e)=>({'text':_0x52dbe8[_0x52362f(0x214)],'original_index':_0x12ff4e})),_0x30d6e6=getRerankBaseUrl(_0x547f5a[_0x52362f(0x1b9)][_0x52362f(0x1fd)]),_0x3f9b5b=_0x30d6e6+_0x52362f(0x1c2),_0x56da48=await fetch(_0x3f9b5b,{'method':_0x52362f(0x1e7),'headers':{'Content-Type':_0x52362f(0x247),'Authorization':'Bearer\x20'+_0x547f5a['rerank'][_0x52362f(0x1ca)]},'body':JSON['stringify']({'query':_0x506ee9,'documents':_0x5ea334['map'](_0x40fbe0=>_0x40fbe0[_0x52362f(0x214)]),'model':_0x547f5a[_0x52362f(0x1b9)][_0x52362f(0x243)],'top_n':_0x547f5a[_0x52362f(0x1b9)][_0x52362f(0x1de)]})});if(!_0x56da48['ok'])throw new Error(_0x52362f(0x1ac)+_0x56da48[_0x52362f(0x1e9)]+_0x52362f(0x1ee)+await _0x56da48[_0x52362f(0x214)]());const _0x48e9b7=await _0x56da48[_0x52362f(0x1b2)](),_0x223c24=_0x215102[_0x52362f(0x254)]((_0x53ce0a,_0x22c540)=>({..._0x53ce0a,'original_index':_0x22c540}));_0x401d2e=_0x223c24[_0x52362f(0x254)](_0x2bd1e5=>{const _0x7c0057=_0x52362f,_0x557ac5=_0x48e9b7['results'][_0x7c0057(0x223)](_0x2715b2=>_0x2715b2[_0x7c0057(0x230)]===_0x2bd1e5['original_index']),_0x203f1b=_0x557ac5?_0x557ac5['relevance_score']:0x0;return{..._0x2bd1e5,'rerank_score':_0x203f1b};});if(_0x547f5a['rerank'][_0x52362f(0x1b8)])showNotification('外部Rerank完成',_0x52362f(0x244));}catch(_0x916241){console[_0x52362f(0x216)](_0x52362f(0x220),_0x916241);if(_0x547f5a[_0x52362f(0x1b9)][_0x52362f(0x1b8)])showNotification(_0x52362f(0x1b7)+_0x916241[_0x52362f(0x25d)],_0x52362f(0x216));_0x401d2e['forEach'](_0x3bede6=>_0x3bede6[_0x52362f(0x23b)]=0x0);}}else _0x401d2e[_0x52362f(0x207)](_0x2d6549=>_0x2d6549[_0x52362f(0x23b)]=0x0);console[_0x52362f(0x20e)](_0x52362f(0x23e));const _0x1476d0=context['chat'][_0x52362f(0x212)],_0x3cfc82=_0x547f5a[_0x52362f(0x1b9)]['hybrid_alpha'],_0x365ce5=_0x401d2e[_0x52362f(0x254)](_0x23d551=>{const _0x5ad6cb=_0x52362f;let _0x426ffa=0x1;const _0x6a714=_0x23d551[_0x5ad6cb(0x1e8)]||{};switch(_0x6a714[_0x5ad6cb(0x24b)]){case _0x5ad6cb(0x242):_0x426ffa*=1.2;break;case _0x5ad6cb(0x24a):_0x426ffa*=1.1;break;case _0x5ad6cb(0x219):if(_0x6a714[_0x5ad6cb(0x21d)]&&_0x1476d0>0x0){const _0x1d658d=_0x6a714[_0x5ad6cb(0x21d)]/_0x1476d0;_0x426ffa*=0x1+_0x1d658d;}break;}const _0x5540dc=_0x23d551[_0x5ad6cb(0x23b)]*_0x3cfc82+(_0x23d551['score']||0x0)*(0x1-_0x3cfc82),_0x7e9225=_0x5540dc*_0x426ffa;return{..._0x23d551,'final_score':_0x7e9225};});return _0x365ce5['sort']((_0x59978b,_0x4f4b0d)=>(_0x4f4b0d[_0x52362f(0x22e)]||0x0)-(_0x59978b[_0x52362f(0x22e)]||0x0)),console[_0x52362f(0x20e)]('[翰林院-Rerank]\x20元数据加权排序完成。'),_0x365ce5[_0x52362f(0x25a)](0x0,_0x547f5a[_0x52362f(0x1b9)][_0x52362f(0x1de)]);}async function rearrangeChat(_0x34126a,_0x46f5c1,_0x2aa462,_0x1b2726){const _0x3af388=_0x532886;setExtensionPrompt(_0x3af388(0x249),'',settings[_0x3af388(0x1d0)][_0x3af388(0x1f2)],settings['injection'][_0x3af388(0x235)],![],settings[_0x3af388(0x1d0)]['depth_role']);if(_0x1b2726==='quiet'||!settings[_0x3af388(0x1fa)]['enabled'])return;const _0x31ad09=_0x34126a[_0x3af388(0x25a)](-settings[_0x3af388(0x22b)][_0x3af388(0x1c1)]);if(_0x31ad09[_0x3af388(0x212)]===0x0)return;const _0x12f407=_0x31ad09[_0x3af388(0x254)](_0x409938=>_0x409938[_0x3af388(0x1e0)])[_0x3af388(0x213)]('\x20')[_0x3af388(0x22f)](/<[^>]*>/g,'')['trim']();if(!_0x12f407)return;try{const _0x57bd75=await queryVectors(_0x12f407);if(_0x57bd75[_0x3af388(0x212)]===0x0)return;const _0x5b6d6b=await rerankResults(_0x57bd75,_0x12f407,settings);if(_0x5b6d6b[_0x3af388(0x212)]===0x0)return;const _0xb046c5=_0x5b6d6b[_0x3af388(0x254)](_0x20db60=>_0x20db60[_0x3af388(0x214)])[_0x3af388(0x213)]('\x0a\x0a'),_0x4b65a6=settings['injection'][_0x3af388(0x1ab)][_0x3af388(0x22f)](_0x3af388(0x21b),_0xb046c5);setExtensionPrompt(_0x3af388(0x249),_0x4b65a6,settings[_0x3af388(0x1d0)][_0x3af388(0x1f2)],settings['injection'][_0x3af388(0x235)],![],settings[_0x3af388(0x1d0)][_0x3af388(0x25b)]);}catch(_0x307aad){console[_0x3af388(0x216)](_0x3af388(0x1da),_0x307aad);if(settings[_0x3af388(0x1fa)][_0x3af388(0x1b8)])showNotification(_0x3af388(0x21a)+_0x307aad[_0x3af388(0x25d)],'error');}}