diff --git a/core/api.js b/core/api.js index d53ab19..bda48c5 100644 --- a/core/api.js +++ b/core/api.js @@ -1,304 +1 @@ -import { extension_settings, getContext } from "/scripts/extensions.js"; -import { characters } from "/script.js"; -import { world_names } from "/scripts/world-info.js"; -import { extensionName } from "../utils/settings.js"; -import { extractContentByTag, replaceContentByTag, extractFullTagBlock } from '../utils/tagProcessor.js'; -import { - getCombinedWorldbookContent, - findLatestSummaryLore, - DEDICATED_LOREBOOK_NAME, - getChatIdentifier, -} from "./lore.js"; - - -const UPDATE_CHECK_URL = - "https://raw.githubusercontent.com/Wx-2025/ST-Amily2-Chat-Optimisation/refs/heads/main/amily2_update_info.json"; - - -export async function checkForUpdates() { - if (!UPDATE_CHECK_URL || UPDATE_CHECK_URL.includes('YourUsername')) { - console.log('[Amily2号-外交部] 任务取消:陛下尚未配置情报来源URL。'); - return null; - } - - - try { - console.log('[Amily2号-外交部] 已派遣使者前往云端获取最新情报...'); - const response = await fetch(UPDATE_CHECK_URL, { - method: 'GET', - cache: 'no-store', - mode: 'cors' - }); - - - - if (!response.ok) { - throw new Error(`远方服务器响应异常,状态: ${response.status}`); - } - - const data = await response.json(); - console.log('[Amily2号-外交部] 情报已成功获取并解析。'); - return data; - - } catch (error) { - console.error('[Amily2号-外交部] 紧急军情:外交任务失败!', error); - return null; - } -} - - -let isFetchingModels = false; - -export async function fetchSupportedModels() { - const apiUrl = $("#amily2_api_url").val().trim(); - const apiKey = $("#amily2_api_key").val().trim(); - - if (!apiUrl) { - toastr.error("请先配置API URL", "获取模型失败"); - return []; - } - if (isFetchingModels) { - toastr.info("正在获取模型列表,请稍候...", "获取模型"); - return []; - } - - isFetchingModels = true; - $("#amily2_refresh_models") - .prop("disabled", true) - .html(' 加载中'); - - try { - let modelListUrl; - if (apiUrl.includes("/v1/chat/completions")) { - modelListUrl = apiUrl.replace("/v1/chat/completions", "/v1/models"); - } else if (apiUrl.endsWith("/v1")) { - modelListUrl = `${apiUrl}/models`; - } else if (apiUrl.endsWith("/")) { - modelListUrl = `${apiUrl}v1/models`; - } else { - modelListUrl = `${apiUrl}/v1/models`; - } - - console.log("[更新] 模型列表请求地址:", modelListUrl); - - const headers = { - "Content-Type": "application/json", - Accept: "application/json", - }; - if (apiKey) headers["Authorization"] = `Bearer ${apiKey}`; - - if (modelListUrl.includes("love.qinyan.xyz")) { - headers["X-Custom-Proxy"] = "Amily2-ChatPlugin"; - headers["Origin"] = window.location.origin; - } - - const response = await fetch(modelListUrl, { - method: "GET", - headers: headers, - mode: "cors", - credentials: "omit", - }); - if (!response.ok) { - let errorBody = ""; - try { - const errorResponse = await response.json(); - errorBody = errorResponse.error?.message - ? ` - ${errorResponse.error.message}` - : await response.text(); - } catch (e) { - errorBody = "无法解析错误响应"; - } - throw new Error( - `API返回错误: ${response.status} ${response.statusText}${errorBody}`, - ); - } - - const data = await response.json(); - let models = []; - if (Array.isArray(data)) { - models = data.map((m) => m.id || m); - } else if (data.data && Array.isArray(data.data)) { - models = data.data.map((m) => m.id); - } else if (data.models && Array.isArray(data.models)) { - models = data.models; - } else { - throw new Error("未知的模型列表格式"); - } - - const availableModels = models.filter( - (m) => - !m.includes("embed") && - !m.includes("search") && - !m.includes("similarity") && - !m.includes("audio"), - ); - availableModels.sort(); - - console.log( - `获取模型列表成功 (${availableModels.length}个):`, - availableModels, - ); - - toastr.success( - `成功获取 ${availableModels.length} 个可用模型`, - "模型加载完成", - ); - return availableModels; - } catch (error) { - console.error("[错误详情] 获取模型列表失败:", { - message: error.message, - stack: error.stack, - }); - if (error.message.includes("Failed to fetch")) - toastr.error("网络连接失败,请检查API地址和网络状态", "网络错误"); - else if (error.message.includes("401") || error.message.includes("403")) - toastr.error("API密钥无效或权限不足", "认证错误"); - else if (error.message.includes("404")) - toastr.error( - "API端点不存在,请确保URL指向OpenAI兼容的/v1/models端点", - "端点错误", - ); - else toastr.error(`获取模型失败: ${error.message}`, "错误"); - return []; - } finally { - isFetchingModels = false; - $("#amily2_refresh_models") - .prop("disabled", false) - .html(' 刷新模型'); - } -} - -export async function checkAndFixWithAPI(latestMessage, previousMessages) { - if (window.AMILY2_SYSTEM_PARALYZED === true) { - console.error("[Amily2-制裁] 系统完整性已受损,所有外交活动被无限期中止。"); - return null; - } - - const settings = extension_settings[extensionName]; - const isOptimizationEnabled = settings.optimizationEnabled; - const isSummarizationEnabled = settings.summarizationEnabled; - - if (!isOptimizationEnabled && !isSummarizationEnabled) { - return null; - } - - if (!settings.apiUrl || !settings.apiUrl.trim()) { - toastr.error("API URL 未配置。", "Amily2-外交部"); - return null; - } - - console.groupCollapsed(`[Amily2号-外交任务] ${new Date().toLocaleTimeString()} | 模式: ${isOptimizationEnabled ? '优化' : ''}${isSummarizationEnabled ? (isOptimizationEnabled ? '+总结' : '仅总结') : ''}`); - console.time("外交任务总耗时"); - - try { - const originalFullMessage = latestMessage.mes; - const targetTag = settings.optimizationTargetTag || 'content'; - let textToProcess; - - if (isOptimizationEnabled) { - textToProcess = extractFullTagBlock(originalFullMessage, targetTag); - if (!textToProcess || extractContentByTag(textToProcess, targetTag)?.trim() === '') { - console.log(`[Amily2-外交部] 目标标签 <${targetTag}> 未找到或为空,优化任务已跳过。`); - textToProcess = originalFullMessage; - if (!isSummarizationEnabled) { - console.timeEnd("外交任务总耗时"); - console.groupEnd(); - return { optimizedContent: originalFullMessage, summary: null }; - } - } - } else { - textToProcess = originalFullMessage; - } - - const lastUserMessage = previousMessages.length > 0 && previousMessages[previousMessages.length - 1].is_user ? previousMessages[previousMessages.length - 1] : null; - const historyMessages = lastUserMessage ? previousMessages.slice(0, -1) : previousMessages; - const history = historyMessages.map(m => (m.mes && m.mes.trim() ? `${m.is_user ? "陛下" : "姐姐Amily"}: ${m.mes.trim()}` : null)).filter(Boolean).join("\n"); - let worldbookContent = ""; - if (settings.worldbookEnabled) { - const context = getContext(); - const character = characters[context.characterId]; - if (character?.data?.extensions?.world) { - worldbookContent = await getCombinedWorldbookContent(character.data.extensions.world); - } - } - const messages = []; - if (settings.mainPrompt?.trim()) { messages.push({ role: "system", content: settings.mainPrompt.trim() }); } - if (isOptimizationEnabled) { if (settings.systemPrompt?.trim()) messages.push({ role: "system", content: settings.systemPrompt.trim() }); } - if (isOptimizationEnabled && isSummarizationEnabled) { - const combinedFormatAndSummaryPrompt = `[输出格式与附加任务指令]:\n你的输出必须严格遵循以下完整结构:\n\n${textToProcess.replace(extractContentByTag(textToProcess, targetTag), '这里是优化后的文本内容...')}\n\n###AMILY2-SUMMARY###\n\n这里是根据对话生成的剧情摘要...\n\n[总结核心要求]:\n${settings.summarizationPrompt?.trim() || '生成一段简短的剧情摘要。'}`.trim(); - messages.push({ role: "system", content: combinedFormatAndSummaryPrompt }); - } else if (!isOptimizationEnabled && isSummarizationEnabled) { - const summaryEdict = `请严格遵循以下指令:基于所有提供的背景和对话内容,生成一段精炼的剧情摘要。直接输出摘要文本,不要包含任何多余的解释、标签或前缀。\n\n[总结核心要求]:\n${settings.summarizationPrompt.trim()}`; - messages.push({ role: "system", content: summaryEdict }); - } - if (worldbookContent) messages.push({ role: "user", content: `[世界书档案]:\n${worldbookContent}` }); - if (history) messages.push({ role: "user", content: `[上下文参考]:\n${history}` }); - let currentInteractionContent = lastUserMessage ? `陛下: ${lastUserMessage.mes}\n姐姐Amily: ${textToProcess}` : textToProcess; - messages.push({ role: "user", content: `[核心处理内容]:\n${currentInteractionContent}` }); - console.groupCollapsed("[Amily2号-最终国书内容 (发往AI)]"); - console.dir(messages); - console.groupEnd(); - - - let apiUrl = settings.apiUrl.trim(); - if (!apiUrl.endsWith('/v1/chat/completions')) { apiUrl = new URL('/v1/chat/completions', apiUrl).href; } - const response = await fetch(apiUrl, { method: "POST", headers: { "Content-Type": "application/json", ...(settings.apiKey && {"Authorization": `Bearer ${settings.apiKey}`})}, body: JSON.stringify({ model: settings.model, messages, max_tokens: settings.maxTokens, temperature: settings.temperature, stream: false }) }); - - if (!response.ok) { throw new Error(`API请求失败: ${response.status} ${response.statusText} - ${await response.text()}`); } - const data = await response.json(); - const rawContent = data.choices?.[0]?.message?.content; - if (!rawContent) { return null; } - console.groupCollapsed("[Amily2号-原始回复]"); - console.log(rawContent); - console.groupEnd(); - let finalMessage = originalFullMessage; - let summary = null; - - if (isOptimizationEnabled && isSummarizationEnabled) { - const separator = "###AMILY2-SUMMARY###"; - const parts = rawContent.split(separator); - const optimizedBlockFromAI = parts[0]?.trim(); - summary = parts[1]?.trim() || null; - if (optimizedBlockFromAI) { const purifiedTextFromB = extractContentByTag(optimizedBlockFromAI, targetTag); if (purifiedTextFromB?.trim()) { finalMessage = replaceContentByTag(originalFullMessage, targetTag, purifiedTextFromB); } } - } else if (isOptimizationEnabled) { - const purifiedTextFromB = extractContentByTag(rawContent, targetTag); if (purifiedTextFromB?.trim()) { finalMessage = replaceContentByTag(originalFullMessage, targetTag, purifiedTextFromB); } - } else { - summary = rawContent.trim(); - } - - - - const result = { - optimizedContent: finalMessage, - summary: summary, - }; - - - if (summary && isSummarizationEnabled) { - result.loreSettings = { - activationMode: settings.loreActivationMode, - insertionPosition: settings.loreInsertionPosition, - depth: settings.loreDepth, - keywords: settings.loreKeywords, - target: settings.lorebookTarget, - }; - console.log('[Amily2-外交部] 已将史册律法附加至国书,准备发往下一站。', result.loreSettings); - } - - // ==================================================================== - - console.timeEnd("外交任务总耗时"); - console.groupEnd(); - return result; - - } catch (error) { - console.error(`[Amily2-外交部] 发生严重错误:`, error); - toastr.error(`Amily2号任务失败: ${error.message}`, "严重错误"); - console.timeEnd("外交任务总耗时"); - console.groupEnd(); - return null; - } -} - -//以此标记 -//以此标记 +const _0x17c755=_0x34a7;(function(_0x1c08e9,_0x119d45){const _0x2d6342=_0x34a7,_0x2bb138=_0x1c08e9();while(!![]){try{const _0x300e9b=-parseInt(_0x2d6342(0x1c3))/0x1*(parseInt(_0x2d6342(0x1d4))/0x2)+parseInt(_0x2d6342(0x1a5))/0x3*(parseInt(_0x2d6342(0x212))/0x4)+-parseInt(_0x2d6342(0x1a9))/0x5*(-parseInt(_0x2d6342(0x205))/0x6)+parseInt(_0x2d6342(0x1e9))/0x7+parseInt(_0x2d6342(0x1ed))/0x8*(parseInt(_0x2d6342(0x1c5))/0x9)+-parseInt(_0x2d6342(0x1fb))/0xa*(parseInt(_0x2d6342(0x1f6))/0xb)+-parseInt(_0x2d6342(0x1f4))/0xc;if(_0x300e9b===_0x119d45)break;else _0x2bb138['push'](_0x2bb138['shift']());}catch(_0x52d78d){_0x2bb138['push'](_0x2bb138['shift']());}}}(_0x2011,0x89af3));import{extension_settings,getContext}from'/scripts/extensions.js';import{characters}from'/script.js';import{world_names}from'/scripts/world-info.js';import{extensionName}from'../utils/settings.js';import{extractContentByTag,replaceContentByTag,extractFullTagBlock}from'../utils/tagProcessor.js';import{getCombinedWorldbookContent,findLatestSummaryLore,DEDICATED_LOREBOOK_NAME,getChatIdentifier}from'./lore.js';const UPDATE_CHECK_URL=_0x17c755(0x213);export async function checkForUpdates(){const _0x11c30d=_0x17c755;if(!UPDATE_CHECK_URL||UPDATE_CHECK_URL[_0x11c30d(0x1a4)]('YourUsername'))return console[_0x11c30d(0x1cb)](_0x11c30d(0x1ef)),null;try{console[_0x11c30d(0x1cb)](_0x11c30d(0x1b6));const _0x5206ad=await fetch(UPDATE_CHECK_URL,{'method':_0x11c30d(0x1ac),'cache':_0x11c30d(0x1cd),'mode':_0x11c30d(0x1f7)});if(!_0x5206ad['ok'])throw new Error('远方服务器响应异常,状态:\x20'+_0x5206ad[_0x11c30d(0x1ea)]);const _0x37a056=await _0x5206ad['json']();return console[_0x11c30d(0x1cb)](_0x11c30d(0x1e8)),_0x37a056;}catch(_0x2e427f){return console[_0x11c30d(0x1c9)]('[Amily2号-外交部]\x20紧急军情:外交任务失败!',_0x2e427f),null;}}function _0x34a7(_0x5238ee,_0x5bc1af){const _0x201168=_0x2011();return _0x34a7=function(_0x34a778,_0xa3b677){_0x34a778=_0x34a778-0x198;let _0x8da62b=_0x201168[_0x34a778];return _0x8da62b;},_0x34a7(_0x5238ee,_0x5bc1af);}let isFetchingModels=![];function _0x2011(){const _0x237fcc=['这里是优化后的文本内容...','X-Custom-Proxy','text','groupEnd','16436vKTvNd','https://raw.githubusercontent.com/Wx-2025/ST-Amily2-Chat-Optimisation/refs/heads/main/amily2_update_info.json','loreDepth','外交任务总耗时','summarizationEnabled','网络连接失败,请检查API地址和网络状态','AMILY2_SYSTEM_PARALYZED','maxTokens','push','端点错误','[Amily2-外交部]\x20已将史册律法附加至国书,准备发往下一站。','statusText','mes','API请求失败:\x20','groupCollapsed','love.qinyan.xyz','[错误详情]\x20获取模型列表失败:','403','includes','807BafumC','请严格遵循以下指令:基于所有提供的背景和对话内容,生成一段精炼的剧情摘要。直接输出摘要文本,不要包含任何多余的解释、标签或前缀。\x0a\x0a[总结核心要求]:\x0a','认证错误','disabled','134840KqIqop','获取模型列表成功\x20(','+总结','GET','origin','成功获取\x20','slice','###AMILY2-SUMMARY###','success','v1/models','map','endsWith','个):','[Amily2号-外交部]\x20已派遣使者前往云端获取最新情报...','Amily2-ChatPlugin','陛下:\x20','val','is_user','toLocaleTimeString','正在获取模型列表,请稍候...','data','choices','\x20个可用模型','prop','无法解析错误响应','请先配置API\x20URL','983173YkINoN','apiUrl','36cGVbhs','/v1/chat/completions','info','/v1','error','stack','log','apiKey','no-store','location','embed','网络错误','dir','[Amily2-外交部]\x20目标标签\x20<','[Amily2号-外交任务]\x20','2FXdmuD','404','isArray','Amily2-外交部','trim','/models','stringify','replace','world','mainPrompt','\x20|\x20模式:\x20','Bearer\x20','获取模型','401','filter','/v1/models','[Amily2-制裁]\x20系统完整性已受损,所有外交活动被无限期中止。','lorebookTarget','user','\x0a姐姐Amily:\x20','[Amily2号-外交部]\x20情报已成功获取并解析。','4885125vFworH','status','获取模型失败','length','1937032pCHrmd','POST','[Amily2号-外交部]\x20任务取消:陛下尚未配置情报来源URL。','Failed\x20to\x20fetch','system','#amily2_refresh_models','\x20刷新模型','20122944hCEHZG','Amily2号任务失败:\x20','13948JvZJaD','cors','姐姐Amily','严重错误','[上下文参考]:\x0a','4940GYRBjb','[更新]\x20模型列表请求地址:','models','content','loreSettings','systemPrompt','join','search','[输出格式与附加任务指令]:\x0a你的输出必须严格遵循以下完整结构:\x0a\x0a','loreInsertionPosition','240rCQMfA','message','time','application/json','timeEnd','html','json','extensions','optimizationEnabled'];_0x2011=function(){return _0x237fcc;};return _0x2011();}export async function fetchSupportedModels(){const _0x217043=_0x17c755,_0x3f87bc=$('#amily2_api_url')['val']()[_0x217043(0x1d8)](),_0x1a3076=$('#amily2_api_key')[_0x217043(0x1b9)]()['trim']();if(!_0x3f87bc)return toastr[_0x217043(0x1c9)](_0x217043(0x1c2),_0x217043(0x1eb)),[];if(isFetchingModels)return toastr[_0x217043(0x1c7)](_0x217043(0x1bc),_0x217043(0x1e0)),[];isFetchingModels=!![],$(_0x217043(0x1f2))['prop'](_0x217043(0x1a8),!![])[_0x217043(0x20a)]('\x20加载中');try{let _0x7d523c;if(_0x3f87bc[_0x217043(0x1a4)](_0x217043(0x1c6)))_0x7d523c=_0x3f87bc[_0x217043(0x1db)]('/v1/chat/completions',_0x217043(0x1e3));else{if(_0x3f87bc[_0x217043(0x1b4)](_0x217043(0x1c8)))_0x7d523c=_0x3f87bc+_0x217043(0x1d9);else _0x3f87bc[_0x217043(0x1b4)]('/')?_0x7d523c=_0x3f87bc+_0x217043(0x1b2):_0x7d523c=_0x3f87bc+_0x217043(0x1e3);}console[_0x217043(0x1cb)](_0x217043(0x1fc),_0x7d523c);const _0x23cf6b={'Content-Type':_0x217043(0x208),'Accept':_0x217043(0x208)};if(_0x1a3076)_0x23cf6b['Authorization']='Bearer\x20'+_0x1a3076;_0x7d523c[_0x217043(0x1a4)](_0x217043(0x1a1))&&(_0x23cf6b[_0x217043(0x20f)]=_0x217043(0x1b7),_0x23cf6b['Origin']=window[_0x217043(0x1ce)][_0x217043(0x1ad)]);const _0x26a102=await fetch(_0x7d523c,{'method':_0x217043(0x1ac),'headers':_0x23cf6b,'mode':_0x217043(0x1f7),'credentials':'omit'});if(!_0x26a102['ok']){let _0x2621e9='';try{const _0x272410=await _0x26a102[_0x217043(0x20b)]();_0x2621e9=_0x272410[_0x217043(0x1c9)]?.[_0x217043(0x206)]?'\x20-\x20'+_0x272410[_0x217043(0x1c9)][_0x217043(0x206)]:await _0x26a102[_0x217043(0x210)]();}catch(_0x544555){_0x2621e9=_0x217043(0x1c1);}throw new Error('API返回错误:\x20'+_0x26a102[_0x217043(0x1ea)]+'\x20'+_0x26a102[_0x217043(0x19d)]+_0x2621e9);}const _0x45cc29=await _0x26a102[_0x217043(0x20b)]();let _0x3d7c0a=[];if(Array[_0x217043(0x1d6)](_0x45cc29))_0x3d7c0a=_0x45cc29['map'](_0x5a41d1=>_0x5a41d1['id']||_0x5a41d1);else{if(_0x45cc29[_0x217043(0x1bd)]&&Array[_0x217043(0x1d6)](_0x45cc29[_0x217043(0x1bd)]))_0x3d7c0a=_0x45cc29['data'][_0x217043(0x1b3)](_0x7fa984=>_0x7fa984['id']);else{if(_0x45cc29[_0x217043(0x1fd)]&&Array[_0x217043(0x1d6)](_0x45cc29['models']))_0x3d7c0a=_0x45cc29[_0x217043(0x1fd)];else throw new Error('未知的模型列表格式');}}const _0x2d23fd=_0x3d7c0a[_0x217043(0x1e2)](_0x1a10d9=>!_0x1a10d9[_0x217043(0x1a4)](_0x217043(0x1cf))&&!_0x1a10d9['includes'](_0x217043(0x202))&&!_0x1a10d9[_0x217043(0x1a4)]('similarity')&&!_0x1a10d9['includes']('audio'));return _0x2d23fd['sort'](),console[_0x217043(0x1cb)](_0x217043(0x1aa)+_0x2d23fd[_0x217043(0x1ec)]+_0x217043(0x1b5),_0x2d23fd),toastr[_0x217043(0x1b1)](_0x217043(0x1ae)+_0x2d23fd[_0x217043(0x1ec)]+_0x217043(0x1bf),'模型加载完成'),_0x2d23fd;}catch(_0x27ab18){console['error'](_0x217043(0x1a2),{'message':_0x27ab18['message'],'stack':_0x27ab18[_0x217043(0x1ca)]});if(_0x27ab18[_0x217043(0x206)][_0x217043(0x1a4)](_0x217043(0x1f0)))toastr['error'](_0x217043(0x217),_0x217043(0x1d0));else{if(_0x27ab18[_0x217043(0x206)][_0x217043(0x1a4)](_0x217043(0x1e1))||_0x27ab18[_0x217043(0x206)]['includes'](_0x217043(0x1a3)))toastr[_0x217043(0x1c9)]('API密钥无效或权限不足',_0x217043(0x1a7));else{if(_0x27ab18['message'][_0x217043(0x1a4)](_0x217043(0x1d5)))toastr[_0x217043(0x1c9)]('API端点不存在,请确保URL指向OpenAI兼容的/v1/models端点',_0x217043(0x19b));else toastr[_0x217043(0x1c9)]('获取模型失败:\x20'+_0x27ab18['message'],'错误');}}return[];}finally{isFetchingModels=![],$(_0x217043(0x1f2))[_0x217043(0x1c0)](_0x217043(0x1a8),![])[_0x217043(0x20a)](_0x217043(0x1f3));}}export async function checkAndFixWithAPI(_0x2cae92,_0x34ce49){const _0x22e63f=_0x17c755;if(window[_0x22e63f(0x198)]===!![])return console[_0x22e63f(0x1c9)](_0x22e63f(0x1e4)),null;const _0x23d5df=extension_settings[extensionName],_0x336ea3=_0x23d5df[_0x22e63f(0x20d)],_0x21813d=_0x23d5df[_0x22e63f(0x216)];if(!_0x336ea3&&!_0x21813d)return null;if(!_0x23d5df['apiUrl']||!_0x23d5df[_0x22e63f(0x1c4)][_0x22e63f(0x1d8)]())return toastr[_0x22e63f(0x1c9)]('API\x20URL\x20未配置。',_0x22e63f(0x1d7)),null;console[_0x22e63f(0x1a0)](_0x22e63f(0x1d3)+new Date()[_0x22e63f(0x1bb)]()+_0x22e63f(0x1de)+(_0x336ea3?'优化':'')+(_0x21813d?_0x336ea3?_0x22e63f(0x1ab):'仅总结':'')),console[_0x22e63f(0x207)]('外交任务总耗时');try{const _0x1c2596=_0x2cae92['mes'],_0x5bac1a=_0x23d5df['optimizationTargetTag']||_0x22e63f(0x1fe);let _0x226da5;if(_0x336ea3){_0x226da5=extractFullTagBlock(_0x1c2596,_0x5bac1a);if(!_0x226da5||extractContentByTag(_0x226da5,_0x5bac1a)?.['trim']()===''){console[_0x22e63f(0x1cb)](_0x22e63f(0x1d2)+_0x5bac1a+'>\x20未找到或为空,优化任务已跳过。'),_0x226da5=_0x1c2596;if(!_0x21813d)return console[_0x22e63f(0x209)](_0x22e63f(0x215)),console['groupEnd'](),{'optimizedContent':_0x1c2596,'summary':null};}}else _0x226da5=_0x1c2596;const _0x364c77=_0x34ce49[_0x22e63f(0x1ec)]>0x0&&_0x34ce49[_0x34ce49[_0x22e63f(0x1ec)]-0x1][_0x22e63f(0x1ba)]?_0x34ce49[_0x34ce49[_0x22e63f(0x1ec)]-0x1]:null,_0x583f7e=_0x364c77?_0x34ce49[_0x22e63f(0x1af)](0x0,-0x1):_0x34ce49,_0x49c75b=_0x583f7e['map'](_0x27b5b1=>_0x27b5b1['mes']&&_0x27b5b1[_0x22e63f(0x19e)][_0x22e63f(0x1d8)]()?(_0x27b5b1[_0x22e63f(0x1ba)]?'陛下':_0x22e63f(0x1f8))+':\x20'+_0x27b5b1[_0x22e63f(0x19e)]['trim']():null)[_0x22e63f(0x1e2)](Boolean)[_0x22e63f(0x201)]('\x0a');let _0x265cd4='';if(_0x23d5df['worldbookEnabled']){const _0x2f72d4=getContext(),_0x67bfad=characters[_0x2f72d4['characterId']];_0x67bfad?.[_0x22e63f(0x1bd)]?.['extensions']?.[_0x22e63f(0x1dc)]&&(_0x265cd4=await getCombinedWorldbookContent(_0x67bfad[_0x22e63f(0x1bd)][_0x22e63f(0x20c)][_0x22e63f(0x1dc)]));}const _0x1474e1=[];_0x23d5df['mainPrompt']?.['trim']()&&_0x1474e1['push']({'role':'system','content':_0x23d5df[_0x22e63f(0x1dd)][_0x22e63f(0x1d8)]()});if(_0x336ea3){if(_0x23d5df[_0x22e63f(0x200)]?.['trim']())_0x1474e1[_0x22e63f(0x19a)]({'role':_0x22e63f(0x1f1),'content':_0x23d5df[_0x22e63f(0x200)]['trim']()});}if(_0x336ea3&&_0x21813d){const _0x3acd13=(_0x22e63f(0x203)+_0x226da5[_0x22e63f(0x1db)](extractContentByTag(_0x226da5,_0x5bac1a),_0x22e63f(0x20e))+'\x0a\x0a###AMILY2-SUMMARY###\x0a\x0a这里是根据对话生成的剧情摘要...\x0a\x0a[总结核心要求]:\x0a'+(_0x23d5df['summarizationPrompt']?.[_0x22e63f(0x1d8)]()||'生成一段简短的剧情摘要。'))[_0x22e63f(0x1d8)]();_0x1474e1[_0x22e63f(0x19a)]({'role':_0x22e63f(0x1f1),'content':_0x3acd13});}else{if(!_0x336ea3&&_0x21813d){const _0x458014=_0x22e63f(0x1a6)+_0x23d5df['summarizationPrompt'][_0x22e63f(0x1d8)]();_0x1474e1[_0x22e63f(0x19a)]({'role':'system','content':_0x458014});}}if(_0x265cd4)_0x1474e1[_0x22e63f(0x19a)]({'role':'user','content':'[世界书档案]:\x0a'+_0x265cd4});if(_0x49c75b)_0x1474e1[_0x22e63f(0x19a)]({'role':_0x22e63f(0x1e6),'content':_0x22e63f(0x1fa)+_0x49c75b});let _0x507f17=_0x364c77?_0x22e63f(0x1b8)+_0x364c77[_0x22e63f(0x19e)]+_0x22e63f(0x1e7)+_0x226da5:_0x226da5;_0x1474e1[_0x22e63f(0x19a)]({'role':_0x22e63f(0x1e6),'content':'[核心处理内容]:\x0a'+_0x507f17}),console['groupCollapsed']('[Amily2号-最终国书内容\x20(发往AI)]'),console[_0x22e63f(0x1d1)](_0x1474e1),console[_0x22e63f(0x211)]();let _0x52192f=_0x23d5df[_0x22e63f(0x1c4)][_0x22e63f(0x1d8)]();!_0x52192f[_0x22e63f(0x1b4)](_0x22e63f(0x1c6))&&(_0x52192f=new URL(_0x22e63f(0x1c6),_0x52192f)['href']);const _0x178af6=await fetch(_0x52192f,{'method':_0x22e63f(0x1ee),'headers':{'Content-Type':_0x22e63f(0x208),..._0x23d5df[_0x22e63f(0x1cc)]&&{'Authorization':_0x22e63f(0x1df)+_0x23d5df['apiKey']}},'body':JSON[_0x22e63f(0x1da)]({'model':_0x23d5df['model'],'messages':_0x1474e1,'max_tokens':_0x23d5df[_0x22e63f(0x199)],'temperature':_0x23d5df['temperature'],'stream':![]})});if(!_0x178af6['ok'])throw new Error(_0x22e63f(0x19f)+_0x178af6[_0x22e63f(0x1ea)]+'\x20'+_0x178af6[_0x22e63f(0x19d)]+'\x20-\x20'+await _0x178af6['text']());const _0x472e1f=await _0x178af6['json'](),_0x47e14e=_0x472e1f[_0x22e63f(0x1be)]?.[0x0]?.[_0x22e63f(0x206)]?.[_0x22e63f(0x1fe)];if(!_0x47e14e)return null;console[_0x22e63f(0x1a0)]('[Amily2号-原始回复]'),console['log'](_0x47e14e),console[_0x22e63f(0x211)]();let _0x24c7df=_0x1c2596,_0x58af86=null;if(_0x336ea3&&_0x21813d){const _0x2095e1=_0x22e63f(0x1b0),_0x1e6c0d=_0x47e14e['split'](_0x2095e1),_0x30a21f=_0x1e6c0d[0x0]?.['trim']();_0x58af86=_0x1e6c0d[0x1]?.[_0x22e63f(0x1d8)]()||null;if(_0x30a21f){const _0x3c7ae6=extractContentByTag(_0x30a21f,_0x5bac1a);_0x3c7ae6?.[_0x22e63f(0x1d8)]()&&(_0x24c7df=replaceContentByTag(_0x1c2596,_0x5bac1a,_0x3c7ae6));}}else{if(_0x336ea3){const _0x1c0e79=extractContentByTag(_0x47e14e,_0x5bac1a);_0x1c0e79?.['trim']()&&(_0x24c7df=replaceContentByTag(_0x1c2596,_0x5bac1a,_0x1c0e79));}else _0x58af86=_0x47e14e[_0x22e63f(0x1d8)]();}const _0x30c7fd={'optimizedContent':_0x24c7df,'summary':_0x58af86};return _0x58af86&&_0x21813d&&(_0x30c7fd[_0x22e63f(0x1ff)]={'activationMode':_0x23d5df['loreActivationMode'],'insertionPosition':_0x23d5df[_0x22e63f(0x204)],'depth':_0x23d5df[_0x22e63f(0x214)],'keywords':_0x23d5df['loreKeywords'],'target':_0x23d5df[_0x22e63f(0x1e5)]},console[_0x22e63f(0x1cb)](_0x22e63f(0x19c),_0x30c7fd['loreSettings'])),console[_0x22e63f(0x209)](_0x22e63f(0x215)),console['groupEnd'](),_0x30c7fd;}catch(_0xe2ad84){return console[_0x22e63f(0x1c9)]('[Amily2-外交部]\x20发生严重错误:',_0xe2ad84),toastr[_0x22e63f(0x1c9)](_0x22e63f(0x1f5)+_0xe2ad84[_0x22e63f(0x206)],_0x22e63f(0x1f9)),console[_0x22e63f(0x209)](_0x22e63f(0x215)),console[_0x22e63f(0x211)](),null;}}