mirror of
https://github.com/SilenceLurker/ST-Amily2-Chat-Optimisation.git
synced 2026-06-06 18:15:50 +00:00
2 lines
12 KiB
JavaScript
2 lines
12 KiB
JavaScript
'use strict';const _0x886a26=_0x9ef4;(function(_0x35aea3,_0x51ff9f){const _0x571b57=_0x9ef4,_0x47c399=_0x35aea3();while(!![]){try{const _0x540590=-parseInt(_0x571b57(0xad))/0x1+parseInt(_0x571b57(0xe6))/0x2+parseInt(_0x571b57(0xaf))/0x3*(-parseInt(_0x571b57(0xce))/0x4)+parseInt(_0x571b57(0xa8))/0x5+parseInt(_0x571b57(0xbb))/0x6*(-parseInt(_0x571b57(0xa7))/0x7)+parseInt(_0x571b57(0xbd))/0x8+-parseInt(_0x571b57(0xd4))/0x9*(-parseInt(_0x571b57(0xb4))/0xa);if(_0x540590===_0x51ff9f)break;else _0x47c399['push'](_0x47c399['shift']());}catch(_0x15f931){_0x47c399['push'](_0x47c399['shift']());}}}(_0x54a5,0x1af1d));import{extension_settings}from'/scripts/extensions.js';import{buildGoogleEmbeddingRequest,parseGoogleEmbeddingResponse,buildGoogleEmbeddingApiUrl}from'./utils/googleAdapter.js';function _0x54a5(){const _0x441cfc=['custom','aborted','Rerank模型API的响应格式无效:\x20未找到\x20\x27data\x27\x20数组。','100QiVNqv','sort','api-key','[翰林院]\x20正在从\x20Google\x20API\x20获取模型列表:\x20','Rerank\x20API\x20请求失败\x20(','POST','45657PsfoTs','Rerank\x20API\x20URL\x20未提供。','batchEmbedContents','includes','log','无法确定获取模型的有效路径。','error','models','application/json','[翰林院-Rerank]\x20正在向\x20','local_proxy','[翰林院-API]\x20无法获取设置,API调用可能失败。','?key=','embedContent','Authorization','object','length',')...','344534QzUDOR','/embeddings','Invalid\x20JSON\x20response','\x20发送请求\x20(模式:\x20','name','supportedGenerationMethods','openai','retrieval','json','rerank','[翰林院-Rerank]\x20正在从\x20','endsWith','text','isArray','azure','trim','\x20获取模型列表\x20(模式:\x20','data','hasOwn','\x20获取模型列表\x20(需要认证)...','164773mjHfdj','953735DKIjVJ','[翰林院]\x20正在从\x20','自定义模式下,Rerank\x20API\x20Key\x20未提供。','[翰林院-API]\x20API响应JSON解析失败:','AbortError','139383YaPvaY','status','3165WUZybH','stringify','extensionSettings','parse','/v1/models','190YkRTFi','/v1beta/models?key=','getContext','hanlinyuan-rag-core','GET','/v1/rerank','/rerank','54dVUUXo','Google模型API的响应格式无效:\x20未找到\x20\x27models\x27\x20数组。','228584wufjtj','):\x20',')\x20获取向量。','map','/v1','embedding','神力获取失败\x20','\x20获取模型列表\x20(无需认证)...','string','slice','Bearer\x20','API\x20URL\x20未提供。','push','模型API的响应格式无效:\x20未找到\x20\x27data\x27\x20数组。'];_0x54a5=function(){return _0x441cfc;};return _0x54a5();}const MODULE_NAME=_0x886a26(0xb7),GOOGLE_API_BASE_URL='https://generativelanguage.googleapis.com';function getSettings(){const _0x4ebf43=_0x886a26,_0x3c4acd=SillyTavern[_0x4ebf43(0xb6)]();if(!_0x3c4acd||!_0x3c4acd[_0x4ebf43(0xb1)]||!_0x3c4acd[_0x4ebf43(0xb1)][MODULE_NAME])return console['error'](_0x4ebf43(0xdf)),{'retrieval':{},'rerank':{}};return _0x3c4acd[_0x4ebf43(0xb1)][MODULE_NAME];}function normalizeApiResponse(_0x2cbb7f){const _0x329570=_0x886a26;let _0x17c188=_0x2cbb7f;if(typeof _0x17c188===_0x329570(0xc5))try{_0x17c188=JSON[_0x329570(0xb2)](_0x17c188);}catch(_0x3afbb8){return console[_0x329570(0xda)](_0x329570(0xab),_0x3afbb8),{'error':{'message':_0x329570(0xe8)}};}_0x17c188&&typeof _0x17c188[_0x329570(0xa4)]===_0x329570(0xe3)&&_0x17c188[_0x329570(0xa4)]!==null&&!Array[_0x329570(0xa0)](_0x17c188['data'])&&(Object[_0x329570(0xa5)](_0x17c188[_0x329570(0xa4)],_0x329570(0xa4))&&(_0x17c188=_0x17c188[_0x329570(0xa4)]));if(_0x17c188&&_0x17c188[_0x329570(0xa4)])return{'data':_0x17c188[_0x329570(0xa4)]};if(_0x17c188&&_0x17c188[_0x329570(0xda)])return{'error':_0x17c188[_0x329570(0xda)]};return _0x17c188;}export function getSanitizedBaseUrl(_0x35f3af){const _0xf8e913=_0x886a26;let _0x214206=_0x35f3af[_0xf8e913(0xa2)]();return _0x214206[_0xf8e913(0x9e)]('/')&&(_0x214206=_0x214206['slice'](0x0,-0x1)),_0x214206[_0xf8e913(0x9e)]('/v1')&&(_0x214206=_0x214206[_0xf8e913(0xc6)](0x0,-0x3)),_0x214206[_0xf8e913(0x9e)](_0xf8e913(0xe7))&&(_0x214206=_0x214206['slice'](0x0,-0xb)),_0x214206;}function _0x9ef4(_0x4e879c,_0x58c364){const _0x54a5d2=_0x54a5();return _0x9ef4=function(_0x9ef409,_0x96a077){_0x9ef409=_0x9ef409-0x98;let _0x514f7c=_0x54a5d2[_0x9ef409];return _0x514f7c;},_0x9ef4(_0x4e879c,_0x58c364);}export async function fetchEmbeddingModels(){const _0x4cc4ae=_0x886a26,_0xe7931f=getSettings()[_0x4cc4ae(0x9a)],{apiEndpoint:_0x3805eb,apiKey:_0x4fbc99,customApiUrl:_0x37fe56}=_0xe7931f;if(!_0x4fbc99)throw new Error('API\x20Key\x20未提供。');let _0x333be4,_0xc3936a={},_0x3e03a1;switch(_0x3805eb){case'google_direct':_0x333be4=GOOGLE_API_BASE_URL+_0x4cc4ae(0xb5)+_0x4fbc99,console[_0x4cc4ae(0xd8)](_0x4cc4ae(0xd1)+_0x333be4),_0x3e03a1=_0x2dc84c=>{const _0x2ef934=_0x4cc4ae;if(!_0x2dc84c[_0x2ef934(0xdb)]||!Array['isArray'](_0x2dc84c[_0x2ef934(0xdb)]))throw new Error(_0x2ef934(0xbc));return _0x2dc84c[_0x2ef934(0xdb)]['filter'](_0x4ad8d4=>_0x4ad8d4[_0x2ef934(0x98)]?.[_0x2ef934(0xd7)](_0x2ef934(0xe1))||_0x4ad8d4['supportedGenerationMethods']?.[_0x2ef934(0xd7)](_0x2ef934(0xd6)))[_0x2ef934(0xc0)](_0x55cfff=>_0x55cfff[_0x2ef934(0xea)]['replace']('models/',''))[_0x2ef934(0xcf)]();};break;case'custom':if(!_0x37fe56)throw new Error('API\x20URL\x20未提供。');const _0x2c68f3=getSanitizedBaseUrl(_0x37fe56);_0x333be4=_0x2c68f3+_0x4cc4ae(0xb3),_0xc3936a=getApiHeaders(),console[_0x4cc4ae(0xd8)](_0x4cc4ae(0xa9)+_0x333be4+_0x4cc4ae(0xa6)),_0x3e03a1=_0x2163ba=>{const _0x18c055=_0x4cc4ae;if(!_0x2163ba[_0x18c055(0xa4)]||!Array['isArray'](_0x2163ba[_0x18c055(0xa4)]))throw new Error(_0x18c055(0xca));return _0x2163ba[_0x18c055(0xa4)][_0x18c055(0xc0)](_0x549a69=>_0x549a69['id'])[_0x18c055(0xcf)]();};break;case _0x4cc4ae(0xde):default:if(!_0x37fe56)throw new Error(_0x4cc4ae(0xc8));const _0x5d7ddb=getSanitizedBaseUrl(_0x37fe56);_0x333be4=_0x5d7ddb+'/v1/models',_0xc3936a={'Content-Type':'application/json'},console[_0x4cc4ae(0xd8)](_0x4cc4ae(0xa9)+_0x333be4+_0x4cc4ae(0xc4)),_0x3e03a1=_0x76a1b8=>{const _0x226447=_0x4cc4ae;if(!_0x76a1b8[_0x226447(0xa4)]||!Array['isArray'](_0x76a1b8[_0x226447(0xa4)]))throw new Error('模型API的响应格式无效:\x20未找到\x20\x27data\x27\x20数组。');return _0x76a1b8['data'][_0x226447(0xc0)](_0x1898d0=>_0x1898d0['id'])[_0x226447(0xcf)]();};break;}if(!_0x333be4)throw new Error(_0x4cc4ae(0xd9));const _0x8c882=await fetch(_0x333be4,{'method':_0x4cc4ae(0xb8),'headers':_0xc3936a});if(!_0x8c882['ok']){const _0x33a13a=await _0x8c882[_0x4cc4ae(0x9f)]();throw new Error('获取模型列表失败\x20('+_0x8c882[_0x4cc4ae(0xae)]+'):\x20'+_0x33a13a);}const _0xd3131f=await _0x8c882['json']();return _0x3e03a1(_0xd3131f);}export function getRerankBaseUrl(_0x592868){const _0x2ee520=_0x886a26;let _0xbe03e=_0x592868['trim']();return _0xbe03e[_0x2ee520(0x9e)]('/')&&(_0xbe03e=_0xbe03e[_0x2ee520(0xc6)](0x0,-0x1)),_0xbe03e[_0x2ee520(0x9e)](_0x2ee520(0xc1))&&(_0xbe03e=_0xbe03e[_0x2ee520(0xc6)](0x0,-0x3)),_0xbe03e[_0x2ee520(0x9e)](_0x2ee520(0xba))&&(_0xbe03e=_0xbe03e['slice'](0x0,-0x7)),_0xbe03e;}export async function fetchRerankModels(){const _0x35c823=_0x886a26,_0x42fa2b=getSettings()[_0x35c823(0x9c)],{url:_0x99d6c7,apiKey:_0x389654,apiMode:apiMode='custom'}=_0x42fa2b;if(!_0x99d6c7)throw new Error(_0x35c823(0xd5));if(apiMode===_0x35c823(0xcb)&&!_0x389654)throw new Error(_0x35c823(0xaa));const _0x1da41e=getRerankBaseUrl(_0x99d6c7),_0x183e54=_0x1da41e+'/v1/models',_0x22914c={'Content-Type':_0x35c823(0xdc)};apiMode===_0x35c823(0xcb)&&(_0x22914c[_0x35c823(0xe2)]=_0x35c823(0xc7)+_0x389654);console['log'](_0x35c823(0x9d)+_0x183e54+_0x35c823(0xa3)+apiMode+')...');const _0x436023=await fetch(_0x183e54,{'method':_0x35c823(0xb8),'headers':_0x22914c});if(!_0x436023['ok']){const _0x456787=await _0x436023[_0x35c823(0x9f)]();throw new Error('获取Rerank模型列表失败\x20('+_0x436023[_0x35c823(0xae)]+_0x35c823(0xbe)+_0x456787);}const _0x348115=await _0x436023['json']();if(!_0x348115[_0x35c823(0xa4)]||!Array[_0x35c823(0xa0)](_0x348115['data']))throw new Error(_0x35c823(0xcd));return _0x348115['data']['map'](_0x8946e6=>_0x8946e6['id'])[_0x35c823(0xcf)]();}export async function executeRerank(_0x2c7925,_0x4d31af,_0x5b4560){const _0x134ea8=_0x886a26,{url:_0x271965,apiKey:_0x48cb64,model:_0x34c78d,top_n:_0x5f01d3,apiMode:apiMode=_0x134ea8(0xcb)}=_0x5b4560;if(!_0x271965)throw new Error(_0x134ea8(0xd5));if(apiMode==='custom'&&!_0x48cb64)throw new Error(_0x134ea8(0xaa));const _0x57a292=getRerankBaseUrl(_0x271965),_0x52c650=_0x57a292+_0x134ea8(0xb9),_0x2f51f6={'Content-Type':_0x134ea8(0xdc)};apiMode===_0x134ea8(0xcb)&&(_0x2f51f6[_0x134ea8(0xe2)]='Bearer\x20'+_0x48cb64);const _0x516584=JSON[_0x134ea8(0xb0)]({'query':_0x2c7925,'documents':_0x4d31af,'model':_0x34c78d,'top_n':_0x5f01d3});console[_0x134ea8(0xd8)](_0x134ea8(0xdd)+_0x52c650+_0x134ea8(0xe9)+apiMode+_0x134ea8(0xe5));const _0x4f5c4e=await fetch(_0x52c650,{'method':_0x134ea8(0xd3),'headers':_0x2f51f6,'body':_0x516584});if(!_0x4f5c4e['ok'])throw new Error(_0x134ea8(0xd2)+_0x4f5c4e[_0x134ea8(0xae)]+_0x134ea8(0xbe)+await _0x4f5c4e[_0x134ea8(0x9f)]());return await _0x4f5c4e['json']();}export function getApiEndpointUrl(_0x23fa40=![]){const _0x395acc=_0x886a26,_0x4618c4=getSettings(),{apiEndpoint:_0x246a68,customApiUrl:_0x270b0a}=_0x4618c4[_0x395acc(0x9a)];let _0x4a2a5a;switch(_0x246a68){case _0x395acc(0x99):_0x4a2a5a='https://api.openai.com';break;case'azure':case _0x395acc(0xcb):_0x4a2a5a=_0x270b0a;break;default:_0x4a2a5a='https://api.openai.com';break;}if(_0x23fa40)return _0x4a2a5a;return getSanitizedBaseUrl(_0x4a2a5a)+'/v1/embeddings';}export function getApiHeaders(){const _0x3a5308=_0x886a26,_0x4b3350=getSettings(),_0x4a0a19={'Content-Type':_0x3a5308(0xdc)},{apiKey:_0x53cebe,apiEndpoint:_0x292c1c}=_0x4b3350[_0x3a5308(0x9a)];switch(_0x292c1c){case _0x3a5308(0x99):case _0x3a5308(0xcb):_0x4a0a19[_0x3a5308(0xe2)]='Bearer\x20'+_0x53cebe;break;case _0x3a5308(0xa1):_0x4a0a19[_0x3a5308(0xd0)]=_0x53cebe;break;}return _0x4a0a19;}export async function getEmbeddings(_0x462606,_0x28f1f7=null){const _0x23c304=_0x886a26,_0xe3e4b7=getSettings()[_0x23c304(0x9a)],{apiEndpoint:_0x4131a0,customApiUrl:_0x33eb8a,apiKey:_0x34cb71,embeddingModel:_0x51f384,batchSize:batchSize=0x5}=_0xe3e4b7,_0x34d15c=[];for(let _0xa867c0=0x0;_0xa867c0<_0x462606['length'];_0xa867c0+=batchSize){if(_0x28f1f7?.[_0x23c304(0xcc)])throw new Error(_0x23c304(0xac));const _0x362d62=_0x462606[_0x23c304(0xc6)](_0xa867c0,_0xa867c0+batchSize);let _0x406ac1=[];switch(_0x4131a0){case'google_direct':console[_0x23c304(0xd8)]('[翰林院-API]\x20使用Google直连模式获取向量。');if(!_0x34cb71)throw new Error('Google直连模式需要API\x20Key。');const _0x185a16=buildGoogleEmbeddingApiUrl(GOOGLE_API_BASE_URL,_0x51f384)+_0x23c304(0xe0)+_0x34cb71,_0x35b5d4=buildGoogleEmbeddingRequest(_0x362d62,_0x51f384),_0x4f7795=await fetch(_0x185a16,{'method':'POST','headers':{'Content-Type':_0x23c304(0xdc)},'body':JSON['stringify'](_0x35b5d4),'signal':_0x28f1f7});if(!_0x4f7795['ok']){const _0xe17e9=await _0x4f7795[_0x23c304(0x9f)]();throw new Error('Google\x20API\x20Error:\x20'+_0x4f7795[_0x23c304(0xae)]+'\x20'+_0xe17e9);}const _0x33e925=await _0x4f7795[_0x23c304(0x9b)]();_0x406ac1=parseGoogleEmbeddingResponse(_0x33e925);break;case _0x23c304(0xcb):case _0x23c304(0xde):default:console[_0x23c304(0xd8)]('[翰林院-API]\x20使用前端直连模式\x20('+_0x4131a0+_0x23c304(0xbf));if(!_0x34cb71&&_0x4131a0===_0x23c304(0xcb)){}const _0x5cc824=getApiEndpointUrl(),_0x25bcdd=getApiHeaders(),_0x4074a4=await fetch(_0x5cc824,{'method':_0x23c304(0xd3),'headers':_0x25bcdd,'body':JSON[_0x23c304(0xb0)]({'input':_0x362d62,'model':_0x51f384}),'signal':_0x28f1f7});if(!_0x4074a4['ok']){const _0x144722=await _0x4074a4[_0x23c304(0x9f)]();throw new Error(_0x23c304(0xc3)+_0x4074a4[_0x23c304(0xae)]+':\x20'+_0x144722);}const _0x4ff06b=await _0x4074a4['json']();if(_0x4ff06b[_0x23c304(0xa4)]&&Array[_0x23c304(0xa0)](_0x4ff06b[_0x23c304(0xa4)]))_0x406ac1=_0x4ff06b[_0x23c304(0xa4)][_0x23c304(0xc0)](_0x41221b=>_0x41221b[_0x23c304(0xc2)]);else throw new Error('API返回的向量数据格式不正确。');break;}if(_0x406ac1[_0x23c304(0xe4)]!==_0x362d62['length'])throw new Error('获取到的向量数量与发送的文本数量不匹配。');_0x34d15c[_0x23c304(0xc9)](..._0x406ac1),_0xa867c0+batchSize<_0x462606[_0x23c304(0xe4)]&&await new Promise(_0x4dc93a=>setTimeout(_0x4dc93a,0xc8));}return _0x34d15c;}export async function testApiConnection(){await getEmbeddings(['测试连接']);}
|