devicely 2.2.19 โ 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -84
- package/bin/devicely.js +1 -1
- package/config/devices.conf +1 -6
- package/lib/aiProviders.js +592 -1
- package/lib/aiProvidersConfig.js +171 -1
- package/lib/aiProviders_new.js +70 -0
- package/lib/androidDeviceDetection.js +1 -1
- package/lib/appMappings.js +1 -1
- package/lib/cognitiveLocator.js +1 -0
- package/lib/commanderService.js +1 -1
- package/lib/deviceDetection.js +1 -1
- package/lib/devices.js +1 -1
- package/lib/doctor.js +1 -1
- package/lib/encryption.js +1 -1
- package/lib/executor.js +1 -1
- package/lib/frontend/asset-manifest.json +3 -5
- package/lib/frontend/index.html +1 -1
- package/lib/frontend/static/css/main.ed39ba12.css +2 -0
- package/lib/frontend/static/js/main.310a0af8.js +3 -0
- package/lib/frontend/static/js/main.310a0af8.js.LICENSE.txt +59 -0
- package/lib/locatorStrategy.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/package.json +6 -7
- package/lib/public/asset-manifest.json +3 -3
- package/lib/public/index.html +1 -1
- package/lib/scriptLoader.js +1 -1
- package/lib/server.js +1 -1
- package/package.json +3 -3
- package/scripts/shell/android_device_control.enc +1 -1
- package/scripts/shell/connect_ios_usb_multi_final.enc +1 -1
- package/scripts/shell/connect_ios_wireless_multi_final.enc +1 -1
- package/lib/advanced-logger.js +0 -1
- package/lib/aiProviders.js.strategic-backup +0 -657
- package/lib/aiProvidersConfig.js.backup +0 -218
- package/lib/commanderService.js.backup +0 -5552
- package/lib/devices.js.strategic-backup +0 -57
- package/lib/encryption.js.strategic-backup +0 -61
- package/lib/executor.js.strategic-backup +0 -107
- package/lib/hybridAI.js +0 -1
- package/lib/intelligentLocatorService.js +0 -1
- package/lib/lightweightAI.js +0 -1
- package/lib/localBuiltInAI.js +0 -1
- package/lib/localBuiltInAI_backup.js +0 -1
- package/lib/localBuiltInAI_simple.js +0 -1
- package/lib/logger-demo.js +0 -2
- package/lib/logger-integration-examples.js +0 -102
- package/lib/public/static/css/main.ed39ba12.css.map +0 -1
- package/lib/quick-start-logger.js +0 -2
- package/lib/server.js.strategic-backup +0 -6298
- package/lib/tensorflowAI.js +0 -1
- package/lib/tensorflowAI.js.strategic-backup +0 -717
- package/lib/tinyAI.js +0 -1
- package/lib/universalSessionManager.js +0 -1
package/lib/aiProviders.js
CHANGED
|
@@ -1 +1,592 @@
|
|
|
1
|
-
const _0x9ca842=_0xfecc;(function(_0x36e441,_0x41f373){const _0xf6b629=_0xfecc,_0x8869f8=_0x36e441();while(!![]){try{const _0x5d204b=parseInt(_0xf6b629(0x26c))/0x1*(parseInt(_0xf6b629(0x229))/0x2)+-parseInt(_0xf6b629(0x2d0))/0x3+parseInt(_0xf6b629(0x207))/0x4*(-parseInt(_0xf6b629(0x296))/0x5)+parseInt(_0xf6b629(0x27f))/0x6*(parseInt(_0xf6b629(0x2b5))/0x7)+parseInt(_0xf6b629(0x286))/0x8*(-parseInt(_0xf6b629(0x277))/0x9)+parseInt(_0xf6b629(0x1ca))/0xa+parseInt(_0xf6b629(0x1e8))/0xb*(parseInt(_0xf6b629(0x2ca))/0xc);if(_0x5d204b===_0x41f373)break;else _0x8869f8['push'](_0x8869f8['shift']());}catch(_0x509d18){_0x8869f8['push'](_0x8869f8['shift']());}}}(_0x3a01,0x89ea4));function _0xfecc(_0x19486d,_0x4a7a24){_0x19486d=_0x19486d-0x1bb;const _0x3a01b1=_0x3a01();let _0xfecc30=_0x3a01b1[_0x19486d];if(_0xfecc['SOmHdb']===undefined){var _0x3a4a06=function(_0x737674){const _0x490a89='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3286f9='',_0x1aaa03='';for(let _0x3ab61d=0x0,_0xd9dd93,_0x327bb7,_0x216355=0x0;_0x327bb7=_0x737674['charAt'](_0x216355++);~_0x327bb7&&(_0xd9dd93=_0x3ab61d%0x4?_0xd9dd93*0x40+_0x327bb7:_0x327bb7,_0x3ab61d++%0x4)?_0x3286f9+=String['fromCharCode'](0xff&_0xd9dd93>>(-0x2*_0x3ab61d&0x6)):0x0){_0x327bb7=_0x490a89['indexOf'](_0x327bb7);}for(let _0x53b350=0x0,_0x3048f1=_0x3286f9['length'];_0x53b350<_0x3048f1;_0x53b350++){_0x1aaa03+='%'+('00'+_0x3286f9['charCodeAt'](_0x53b350)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1aaa03);};_0xfecc['UHtqkT']=_0x3a4a06,_0xfecc['XEhQqG']={},_0xfecc['SOmHdb']=!![];}const _0x5f4a69=_0x3a01b1[0x0],_0x33d1f8=_0x19486d+_0x5f4a69,_0x46998d=_0xfecc['XEhQqG'][_0x33d1f8];return!_0x46998d?(_0xfecc30=_0xfecc['UHtqkT'](_0xfecc30),_0xfecc['XEhQqG'][_0x33d1f8]=_0xfecc30):_0xfecc30=_0x46998d,_0xfecc30;}function _0x3a01(){const _0x39bba2=['qwr1Ew0','Bwf4x3rVA2vUCW','DxjSueW','BKLsr1i','Bg9JywW','Ahr0Chm6lY9HCgKUz2L0AhvIy29WAwXVDc5JB20','ic0+igXHDw5JAca','Be1tC1e','ChfuEfe','BgXHBweTmY4ZltCWyI12zxjZyxrPBgu','cGPqtefurK9sttOG','ic8Gqw5KCM9PzdOG','y2HVAwnLCW','v0fjvca','Ahr0Chm6lY9HCgKUy29OzxjLlMfPl3yX','z3b0ltrVlw1PBMK','z2v0tg9JyxrVCNm','s2fqBw4','y3jLyxrL','EunwvhO','uKXsENy','r2L0shvIienVCgLSB3qGBM90ignVBMzPz3vYzwq','y2XHDwrLltmTns1ZB25UzxqTmJaYndeWmJi','yw9fs1m','u1LTy04','z2v0u3LZDgvTuhjVBxb0','ic0+igLpuZOG','y29UDMvYDfDPDgHnAxn0CMfS','B1r3CKi','v3fvCNe','twLZDhjHBcbbsq','v1vHuNi','lI9SB2DNzxi','Du5uCwO','y29UDMvYDfDPDgHhCM9X','rvnArhq','swzQAei','AwHNDgO','vLDfvNK','zhbXq0q','qu5ArLe','uuHzEe8','D0PPAfy','zxHWB3j0CW','z3b0ltq','y29OzxjL','BfHLrfu','EhvQBKC','z2v0qxzHAwXHyMXLuhjVDMLKzxjZ','C2XPy2u','t3bLBKfjig5VDcbJB25MAwD1CMvK','z2v0q3vYCMvUDfbYB3zPzgvY','ntiWntaZAuf0sLbf','qgfUDgHYB3bPyY1HAs9ZzgS','txH4swe','wMXrs0W','zgfYA21Vzgu','EMzxuwG','wvfItwu','y0Hqtu0','tg9JywWGquKGy29UDMvYC2LVBIbMywLSzwq','tg9JywWGqNvPBhqTsw4GquK','DMvdA1O','mJKZnJDKq3bgD1u','yurVDwC','B3jcshm','C2P3s0m','t3rpuM8','ChvZAa','ruv2Cxm','y29WAwXVDa','ntrts2DpA04','tg9JywWGquKGzMfSBgjHy2SGywXZBYbMywLSzwq6','y2XHDwrL','v2TbuKK','BwLZDhjHBa','D215wM4','qNnpDve','mteXmNbjwe9oyq','DuTvr3G','vLfQD1O','A3bqzgy','DxnLCG','AurTANq','ChjVDMLKzxi','y29UDMvYDfDPDgHdB3bPBg90','C3vJy2vZCW','t1HgqMm','qxfAEvm','ExvhD1G','u3vAB3O','sKLZB24','B3bLBMfP','t0Tssw8','mJa5mteZme1wBfvsDW','cKf2ywLSywjSzsbHChbZigzVCIa','r2L0shvIienVCgLSB3q','Bg9Uz3bYzxnZia','ywLYCgXHBMuG','tvfOzhO','y2j1Awq','EfHdwe0','EgvQzNi','8j+mRo+4JW','CM9Szq','Cg5wwee','CMvZDgfYDa','v0PkDMS','q29OzxjLig5VDcbJB25MAwD1CMvK','r2H1rMK','Aw5MBW','z3b0ltrV','u2Tst3O','z2vTAw5PltiUns1MBgfZAa','r3jVCq','Dgv4Da','tI9b','qLHdAei','BLPxyuS','qgDVB2DSzs9Nzw5LCMf0AxzLlwfP','cGPdB21Tyw5KCYb3AwXSigv4zwn1DguGu0LnvuXuqu5ft1vttfKGB24GywXSigrLDMLJzxmGD2L0AcbJB3jYzwn0ihbHy2THz2uGsurZlGO','AvPfwe0','y29TCgXLDgLVBNm','igzHAwXLzcWGzMfSBgLUzYbIywnRihrVigDLBwLUAs0YlJuTzMXHC2G','su1wtKi','nJi2odaXv1PHEfHI','r3j4vee','yMfZzvvsta','sK1LzNC','z2vTAw5P','Aw5PDgLHBgL6zvbYB3zPzgvYCW','uxzWENu','rMnRwLO','DxLzt2i','zMLSDgvY','DxjSia','t3bLBKfj','vw5RBM93BIbbssbWCM92AwrLCJOG','BwvZC2fNzxm','qKfUBMe','BMvQCNi','wKzVAM0','u21zAM4','EMXoqvK','CKfOC1q','BLrrwee','mJG2nJa0nentC0DJEq','lI9HChbnyxbWAw5NCW','y3bID3q','Cev3quy','D1D2qum','qwPzCLu','mZa5ody5n0zNBKTmvW','z0fnu0W','yuPvzM0','wKjoEva','twLZDhjHBcbbssbUB3qGy29UzMLNDxjLza','tu9ltuW','vxrtBfG','wxrbwKm','cGPbufaGuefds0fhrsbnqvbqsu5huZOkv2HLBIb1C2vYihnHExmGiMXHDw5JAcbJAhjVBwuIlcaIB3bLBIbJAhjVBwuIlcbLDgmUlcb1C2uGDgHLignVCNjLy3qGCgfJA2fNzsbjrdOk','y3DmtLa','AefNsMe','t3Hpvwy','y29TBwfUzc1YlxbSDxm','vMf5wfO','ENveALC','Ag9Tzq','DxzKwei','C3rHCNrZv2L0Aa','y29UzMLKzw5Jzq','ota0mZu1mhLPyuTSuG','zxjYB3i','qvfWv1e','z2v0tw9KzwXgB3jqCM92AwrLCG','y29ZDa','A2v5CW','rxjYB3iGD2L0Aca','EeTxs3y','z1noBNG','vhHhs2W','D0zYtNu','u1vWrNu','sxrhu3G','yNvPBhrPBG','r1jxuKq','y29UDMvYDfDPDgHhzw1PBMK','tLnjzgq','cGPjtvbpuLrbtLq6ifvZzsbNzw5LCMLJigfWCcbUyw1LCYaOzs5NlIWGiMXHDw5JAcbZzxr0Aw5NCYiSicjSyxvUy2GGy2HYB21LiIKkvgHLihn5C3rLBsb3AwXSigf1Dg9TyxrPy2fSBhKGy29UDMvYDcb0BYbWBgf0zM9YBs1ZCgvJAwzPyYbWywnRywDLieLeCZOk','AfL4s0m','z2v0r2vUzxjHDgL2zu1VzgvS','yxbPs2v5','y29UDMvYDfDPDgHpCgvUquK','rKzutgW','DhjPBq','CMvJzw50','rw96zKi','ChjVy2vZC2LUz1rPBwu','CMvZCg9UC2u','q2XHDwrLig5VDcbJB25MAwD1CMvK','AMTxquG','mtfSCu1dBu0','ww91igfYzsbHienptvbmrvrfig1VyMLSzsbHDxrVBwf0Aw9UiefjlIbdB252zxj0ievoveLsrsbUyxr1CMfSigXHBMD1ywDLihjLCxvLC3rZihrVigv4zwn1DgfIBguGy29TBwfUzhmUcGRWN5QOienssvrjq0fmoIbquK9drvntifrirsbdt01qtevursbjtLbvvcaTierptIDuifnut1aGrufstfKHipcFMQGkcKf2ywLSywjSzsbJB21Tyw5KCYaOD29YAYbVBIbIB3rOigLpuYaMiefUzhjVAwqPoGOTigXHDw5JAca8yxbWx25HBwu+oIbmyxvUy2GGyw4GyxbWihvZAw5NigDLBMvYAwmGBMfTzsaOzs5NlIWGiMXHDw5JAcbZzxr0Aw5NCYiSicjSyxvUy2GGy2HYB21LiIKklsbRAwXSidXHChbFBMfTzt46ienSB3nLl2zVCMnLihn0B3aGyw4GyxbWcI0GAg9TztOGr28GDg8GAg9TzsbZy3jLzw4GkhbYzxnZigHVBwuGyNv0Dg9UkqOTigjHy2S6ie5HDMLNyxrLigjHy2SGkefUzhjVAwqVAu9tkqOTihvYBca8DxjSpJOGt3bLBIbvuKWGAw4GyNjVD3nLCGOTignSAwnRidX0zxH0pJOGq2XPy2SGB24GysbIDxr0B24GB3iGzwXLBwvUDcbIEsb2AxnPyMXLihrLEhqklsbJBgLJAYa8EcX5pJOGq2XPy2SGyxqGC3bLy2LMAwmGy29VCMrPBMf0zxmGkguUzY4SignSAwnRiduWmcWXmdaWkqOTihrHCca8Dgv4Dc9JB29Yzhm+oIbtyw1LigfZignSAwnRcI0GBg9Uz3bYzxnZidX0zxH0l2nVB3jKCZ46ieXVBMCGChjLC3mGB24GzwXLBwvUDcbVCIbJB29YzgLUyxrLCWOTihn3AxbLidXKAxjLy3rPB24+oIbtD2LWzsb1Cc9KB3DUl2XLzNqVCMLNAhqGkhvZzsbMB3iGC2nYB2XSAw5NkqOTihr5CguGphrLEhq+oIbuExbLihrLEhqGAw50BYbMB2n1C2vKigzPzwXKicHQDxn0ihrOzsb0zxH0lcbUBYaIDhLWzsiGChjLzML4kqOTihnJCMvLBNnOB3q6ifrHA2uGC2nYzwvUC2HVDaOTihjLC3rHCNq6ifjLC3rHCNqGzgv2AwnLcI0GCM90yxrLidXSzwz0l3jPz2H0l3bVCNrYywL0l2XHBMrZy2fWzt46ifjVDgf0zsbZy3jLzw4kcMLpuY1ZCgvJAwzPyYbJB21Tyw5KCZOklsbKyxjRBw9Kzs9SAwDODg1Vzgu6ienOyw5NzsbHChbLyxjHBMnLcI0GywLYCgXHBMuGpg9Ul29MzJ46ifrVz2DSzsbHAxjWBgfUzsbTB2rLcI0GD2LMAsa8B24VB2zMpJOGvg9Nz2XLifDPrMKklsb2B2X1BwuGphvWl2rVD24VBxv0zt46ienVBNrYB2WGDM9SDw1LcGPbBMrYB2LKlxnWzwnPzMLJignVBw1HBMrZoGOTigDLDeXVy2f0B3jZoIbhzxqGywXSigLUDgvYywn0AxzLigvSzw1LBNrZig9Uign1CNjLBNqGC2nYzwvUcI0GCMvJzw50oIbpCgvUihjLy2vUDcbHChbZcI0GBM90AwzPy2f0Aw9UCZOGt3bLBIbUB3rPzMLJyxrPB24GCgfUzwWklsbXDwLJA3nLDhrPBMDZoIbpCgvUihf1AwnRihnLDhrPBMDZcG','z2vUzxjHDgvdB250zw50','DgvTCgvYyxr1CMu','AwnVBG','y29UDMvYDfDPDgHdB2HLCMu','rgHPBKm','z2v0uhjVDMLKzxjoyw1L','y29UDMvYDenVBw1HBMq','8j+uHcbgywXSAw5NigjHy2SGDg8Gtg9JywWGqNvPBhqTsw4GquKUlI4','yKzfwwG','BwvZC2fNzq','CM90yxrLia','zw1Jyxa','C3LZDgvT','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','uKn6s2y','r2vTAw5Pig5VDcbJB25MAwD1CMvK','rxvuBvO','yvHjBLG','Ew9xEvK','B0PMCM4','uMTMEeW','DK9TqK0','q29OzxjL','tgfHB2m','tfnVDxC','E0LoufvuFq','BMfTzq','zfnLy1m','D2fYBG','ng9rBNvPAW','tNLVELK','Bg9JywXbsq','sujMuwu','tg9JywWGquKGy29UDMvYC2LVBIbLCNjVCJO','z3jVCq','AwDZCwy','D2LMAsa','BxDQDgO','CwfjAKu','y29UDgvUDa','z3fAwhK','BwLZDhjHBc1SyxjNzs1SyxrLC3q','yw5KCM9Pza','vw5RBM93BG','rNjiuNG','DfLOq3G','CxvPy2TZzxr0Aw5NCW','BwfW','CfP0Axi','tgnwzfK','wgzUwLi','Aw5JBhvKzxm','r29Vz2XLieDLBwLUAq','tfbrzwu','rhLPvfu','Aurmrhq','yMfRsKO','C3bSAxq','CMvWBgfJzq','AM9PBG','Aw9Z','C2zRwwW','Dg9vChbLCKnHC2u','mM9OA3f5tW','seXlq2C','uuDsqLC','y29UDMvYDgvK','DNnAAMq','yMfJAW','Bw9KzwW','y29UDMvYDfDPDgHmB2nHBefj','re1tteO','svviz2C','C2D5rNy','y2HHDa','DgfWia','y2XLyw5bsvjLC3bVBNnL','D25NvxG'];_0x3a01=function(){return _0x39bba2;};return _0x3a01();}const {OpenAI}=require(_0x9ca842(0x294)),{GoogleGenerativeAI}=require(_0x9ca842(0x2af)),{Anthropic}=require(_0x9ca842(0x26d)),{getPackageId,APP_MAPPINGS}=require(_0x9ca842(0x2cb)),Logger=require(_0x9ca842(0x258)),logger=new Logger('AiProviders'),LocalBuiltInAI=require('./localBuiltInAI');class AIProviderManager{constructor(){const _0x2b7902=_0x9ca842,_0x4cfce1={};_0x4cfce1[_0x2b7902(0x262)]=_0x2b7902(0x23c);const _0x567146=_0x4cfce1;this[_0x2b7902(0x28c)]=process.env.AI_PROVIDER||_0x567146[_0x2b7902(0x262)],this[_0x2b7902(0x22f)]=process.env.AI_MODEL||null,this['localAI']=new LocalBuiltInAI(),this[_0x2b7902(0x2ba)]();}[_0x9ca842(0x2ba)](){const _0x11d81a=_0x9ca842,_0x34e910={};_0x34e910[_0x11d81a(0x292)]=_0x11d81a(0x24d),_0x34e910[_0x11d81a(0x293)]=_0x11d81a(0x1f9),_0x34e910['RLRzv']=_0x11d81a(0x23d),_0x34e910['sGBqg']=function(_0x1ab266,_0x41e497){return _0x1ab266!==_0x41e497;},_0x34e910['ANZFQ']='AHWbR',_0x34e910[_0x11d81a(0x266)]=_0x11d81a(0x24f),_0x34e910[_0x11d81a(0x27d)]=function(_0x59510f,_0x4c1106){return _0x59510f===_0x4c1106;},_0x34e910[_0x11d81a(0x26f)]='ULqOk',_0x34e910[_0x11d81a(0x2bd)]='https://api.groq.com/openai/v1',_0x34e910[_0x11d81a(0x24b)]='https://api.mistral.ai/v1';const _0x3b8ad7=_0x34e910;if(process.env.OPENAI_API_KEY){const _0x7d106a={};_0x7d106a[_0x11d81a(0x1de)]=process.env.OPENAI_API_KEY,this['openai']=new OpenAI(_0x7d106a);}if(process.env.GEMINI_API_KEY){if(_0x3b8ad7['sGBqg'](_0x3b8ad7[_0x11d81a(0x260)],_0x3b8ad7[_0x11d81a(0x260)]))throw new _0x1c9ba2(_0x3b8ad7[_0x11d81a(0x292)]);else this[_0x11d81a(0x2b9)]=new GoogleGenerativeAI(process.env.GEMINI_API_KEY);}if(process.env.CLAUDE_API_KEY){const _0x1a1637={};_0x1a1637[_0x11d81a(0x1de)]=process.env.CLAUDE_API_KEY,this[_0x11d81a(0x281)]=new Anthropic(_0x1a1637);}if(process.env.GITHUB_TOKEN){if(_0x3b8ad7['sGBqg'](_0x3b8ad7[_0x11d81a(0x266)],_0x3b8ad7[_0x11d81a(0x266)]))throw new _0x1f169e(_0x3b8ad7['JIson']);else{const _0x6d0605={};_0x6d0605['apiKey']=process.env.GITHUB_TOKEN,_0x6d0605[_0x11d81a(0x2b7)]=_0x3b8ad7[_0x11d81a(0x24c)],this[_0x11d81a(0x27e)]=new OpenAI(_0x6d0605);}}if(process.env.GROQ_API_KEY){if(_0x3b8ad7[_0x11d81a(0x27d)](_0x3b8ad7[_0x11d81a(0x26f)],'ULqOk')){const _0x2879da={};_0x2879da['apiKey']=process.env.GROQ_API_KEY,_0x2879da[_0x11d81a(0x2b7)]=_0x3b8ad7[_0x11d81a(0x2bd)],this[_0x11d81a(0x20c)]=new OpenAI(_0x2879da);}else{const _0x219bf7={};_0x219bf7[_0x11d81a(0x1de)]=_0x34bd7b.env.GITHUB_TOKEN,_0x219bf7[_0x11d81a(0x2b7)]=_0x3b8ad7[_0x11d81a(0x24c)],this[_0x11d81a(0x27e)]=new _0x3aefdd(_0x219bf7);}}if(process.env.COHERE_API_KEY){const _0x4604a1={};_0x4604a1[_0x11d81a(0x1de)]=process.env.COHERE_API_KEY,_0x4604a1[_0x11d81a(0x2b7)]=_0x11d81a(0x246),this[_0x11d81a(0x265)]=new OpenAI(_0x4604a1);}if(process.env.MISTRAL_API_KEY){const _0x51a351={};_0x51a351[_0x11d81a(0x1de)]=process.env.MISTRAL_API_KEY,_0x51a351[_0x11d81a(0x2b7)]=_0x3b8ad7[_0x11d81a(0x24b)],this['mistral']=new OpenAI(_0x51a351);}}[_0x9ca842(0x251)](_0x9149fa=null){const _0x8febb2=_0x9ca842,_0x3c37a8={};_0x3c37a8[_0x8febb2(0x2cf)]='both';const _0x4c57fc=_0x3c37a8;let _0x3bc95e='';if(_0x9149fa===_0x4c57fc[_0x8febb2(0x2cf)]){const _0x258894=Object[_0x8febb2(0x1cf)](APP_MAPPINGS)['filter'](_0x3f0181=>APP_MAPPINGS[_0x3f0181][_0x8febb2(0x226)]&&APP_MAPPINGS[_0x3f0181][_0x8febb2(0x214)])[_0x8febb2(0x269)](0x0,0x1e);_0x3bc95e='\x0a\x0aMULTI-PLATFORM\x20MODE\x20(iOS\x20+\x20Android\x20devices)\x0aAvailable\x20apps:\x20'+_0x258894['join'](',\x20')+_0x8febb2(0x1db)+_0x258894[_0x8febb2(0x269)](0x0,0xf)[_0x8febb2(0x219)](_0x40a57f=>'-\x20'+_0x40a57f+_0x8febb2(0x252)+APP_MAPPINGS[_0x40a57f][_0x8febb2(0x226)]+_0x8febb2(0x243)+APP_MAPPINGS[_0x40a57f][_0x8febb2(0x214)])[_0x8febb2(0x225)]('\x0a')+_0x8febb2(0x2b0);}else{if(_0x9149fa){const _0x135c40=Object[_0x8febb2(0x1cf)](APP_MAPPINGS)[_0x8febb2(0x2be)](_0x341970=>APP_MAPPINGS[_0x341970][_0x9149fa])[_0x8febb2(0x269)](0x0,0x32);_0x3bc95e=_0x8febb2(0x242)+_0x9149fa[_0x8febb2(0x228)]()+_0x8febb2(0x297)+_0x9149fa+':\x20'+_0x135c40[_0x8febb2(0x225)](',\x20')+_0x8febb2(0x1bf)+_0x135c40[_0x8febb2(0x269)](0x0,0x14)['map'](_0x2c13d7=>'-\x20'+_0x2c13d7+_0x8febb2(0x23e)+APP_MAPPINGS[_0x2c13d7][_0x9149fa])['join']('\x0a')+'\x0a';}}return _0x8febb2(0x1e9)+_0x3bc95e+_0x8febb2(0x1f7);}async[_0x9ca842(0x1f0)](_0x48f169,_0x42efec=null,_0x499e4e=null){const _0x2a98b4=_0x9ca842,_0x318be7={};_0x318be7[_0x2a98b4(0x2ce)]='https://api.groq.com/openai/v1',_0x318be7[_0x2a98b4(0x1f8)]=_0x2a98b4(0x23c),_0x318be7[_0x2a98b4(0x1e7)]=_0x2a98b4(0x1d7),_0x318be7[_0x2a98b4(0x21a)]=_0x2a98b4(0x294),_0x318be7['GYflc']=_0x2a98b4(0x2b9),_0x318be7[_0x2a98b4(0x222)]=_0x2a98b4(0x281),_0x318be7[_0x2a98b4(0x1c4)]=_0x2a98b4(0x27e),_0x318be7[_0x2a98b4(0x255)]=_0x2a98b4(0x20c),_0x318be7[_0x2a98b4(0x2a1)]=_0x2a98b4(0x265),_0x318be7[_0x2a98b4(0x21f)]=_0x2a98b4(0x283),_0x318be7[_0x2a98b4(0x261)]=function(_0x38db9a,_0x32e88a){return _0x38db9a!==_0x32e88a;},_0x318be7['hAgJa']=function(_0x3f4230,_0x53339c){return _0x3f4230===_0x53339c;},_0x318be7['gAMSL']='qjQWC',_0x318be7[_0x2a98b4(0x220)]=function(_0x39c017,_0x2d5bff){return _0x39c017===_0x2d5bff;},_0x318be7[_0x2a98b4(0x295)]=_0x2a98b4(0x1ee);const _0x3cb881=_0x318be7,_0xf2a2d9=_0x499e4e||this[_0x2a98b4(0x28c)];try{switch(_0xf2a2d9){case _0x2a98b4(0x23c):case'built-in':case _0x3cb881[_0x2a98b4(0x1e7)]:return await this[_0x2a98b4(0x230)](_0x48f169,_0x42efec);case _0x3cb881[_0x2a98b4(0x21a)]:return await this[_0x2a98b4(0x1df)](_0x48f169,_0x42efec);case _0x3cb881['GYflc']:return await this[_0x2a98b4(0x1d9)](_0x48f169,_0x42efec);case _0x3cb881['bakJJ']:return await this['convertWithClaude'](_0x48f169,_0x42efec);case _0x3cb881[_0x2a98b4(0x1c4)]:return await this[_0x2a98b4(0x28d)](_0x48f169,_0x42efec);case _0x3cb881[_0x2a98b4(0x255)]:return await this[_0x2a98b4(0x25a)](_0x48f169,_0x42efec);case _0x3cb881['pnVXA']:return await this['convertWithCohere'](_0x48f169,_0x42efec);case _0x3cb881[_0x2a98b4(0x21f)]:return await this['convertWithMistral'](_0x48f169,_0x42efec);default:throw new Error(_0x2a98b4(0x2c1)+_0xf2a2d9);}}catch(_0x5f0c47){logger[_0x2a98b4(0x1cb)](_0x2a98b4(0x1d0)+_0xf2a2d9+':',_0x5f0c47[_0x2a98b4(0x1f3)]);;if(_0x3cb881['QHYxO'](_0xf2a2d9,_0x2a98b4(0x23c))&&this[_0x2a98b4(0x209)]){if(_0x3cb881[_0x2a98b4(0x1c1)]('qjQWC',_0x3cb881[_0x2a98b4(0x2d1)])){logger[_0x2a98b4(0x2a6)](_0x2a98b4(0x1f1));;try{if(_0x3cb881[_0x2a98b4(0x220)](_0x3cb881['OKRIo'],_0x2a98b4(0x1ee)))return await this[_0x2a98b4(0x230)](_0x48f169,_0x42efec);else{const _0x3a1a81={};_0x3a1a81[_0x2a98b4(0x1de)]=_0x17ab96.env.GROQ_API_KEY,_0x3a1a81[_0x2a98b4(0x2b7)]=ZrlyfB[_0x2a98b4(0x2ce)],this[_0x2a98b4(0x20c)]=new _0x33f013(_0x3a1a81);}}catch(_0x56b16f){logger[_0x2a98b4(0x1cb)](_0x2a98b4(0x280),_0x56b16f[_0x2a98b4(0x1f3)]);;}}else this[_0x2a98b4(0x28c)]=_0xd9dd93.env.AI_PROVIDER||ZrlyfB[_0x2a98b4(0x1f8)],this[_0x2a98b4(0x22f)]=_0x327bb7.env.AI_MODEL||null,this[_0x2a98b4(0x209)]=new _0x216355(),this[_0x2a98b4(0x2ba)]();}throw new Error('AI\x20conversion\x20failed\x20('+_0xf2a2d9+'):\x20'+_0x5f0c47[_0x2a98b4(0x1f3)]);}}[_0x9ca842(0x1cd)](_0x29a309){const _0x53e20b=_0x9ca842,_0x1cac65={};_0x1cac65[_0x53e20b(0x1f2)]='gpt-4o-mini',_0x1cac65[_0x53e20b(0x2b1)]='gemini-2.5-flash',_0x1cac65[_0x53e20b(0x1e3)]='command-r-plus',_0x1cac65['OXFBc']=_0x53e20b(0x213),_0x1cac65[_0x53e20b(0x2c8)]='gpt-4';const _0x11d044=_0x1cac65;if(this[_0x53e20b(0x22f)])return this[_0x53e20b(0x22f)];const _0x759a23={};_0x759a23[_0x53e20b(0x294)]=_0x11d044[_0x53e20b(0x1f2)],_0x759a23['gemini']=_0x11d044[_0x53e20b(0x2b1)],_0x759a23[_0x53e20b(0x281)]='claude-3-5-sonnet-20241022',_0x759a23[_0x53e20b(0x27e)]=_0x53e20b(0x2a7),_0x759a23[_0x53e20b(0x20c)]=_0x53e20b(0x241),_0x759a23['cohere']=_0x11d044[_0x53e20b(0x1e3)],_0x759a23[_0x53e20b(0x283)]=_0x11d044[_0x53e20b(0x28f)];const _0x2855dc=_0x759a23;return _0x2855dc[_0x29a309]||_0x11d044[_0x53e20b(0x2c8)];}async[_0x9ca842(0x1df)](_0x4c2cab,_0x2e4b97=null){const _0x1fd2a3=_0x9ca842,_0x2e4242={};_0x2e4242[_0x1fd2a3(0x2c9)]=_0x1fd2a3(0x26a),_0x2e4242[_0x1fd2a3(0x28b)]=_0x1fd2a3(0x294),_0x2e4242[_0x1fd2a3(0x276)]=_0x1fd2a3(0x1f6),_0x2e4242[_0x1fd2a3(0x278)]=_0x1fd2a3(0x2ac);const _0x3dde98=_0x2e4242;if(!this['openai'])throw new Error(_0x3dde98['nTQXA']);const _0x5c9da0=this['getModelForProvider'](_0x3dde98['iDmjt']),_0x427cba={};_0x427cba[_0x1fd2a3(0x2a0)]=_0x1fd2a3(0x28a),_0x427cba[_0x1fd2a3(0x211)]=_0x4c2cab;const _0x5cc9d6=await this['openai'][_0x1fd2a3(0x234)][_0x1fd2a3(0x2b2)][_0x1fd2a3(0x24a)]({'model':_0x5c9da0,'messages':[{'role':_0x3dde98[_0x1fd2a3(0x276)],'content':this['getSystemPrompt'](_0x2e4b97)},_0x427cba],'temperature':0.3,'max_tokens':0x1f4});let _0x501998=_0x5cc9d6['choices'][0x0]['message'][_0x1fd2a3(0x211)]['trim']();const _0x834f2b=this[_0x1fd2a3(0x236)](_0x501998),_0x336487={};return _0x336487[_0x1fd2a3(0x28e)]=!![],_0x336487[_0x1fd2a3(0x22c)]=_0x834f2b,_0x336487['provider']=_0x1fd2a3(0x2c0),_0x336487[_0x1fd2a3(0x22f)]=_0x5c9da0,_0x336487['confidence']=0.95,_0x336487[_0x1fd2a3(0x1e4)]=_0x3dde98['aDoug'],_0x336487;}async[_0x9ca842(0x1d9)](_0x1ae653,_0x4ea752=null){const _0x29afc9=_0x9ca842,_0x4346ea={};_0x4346ea[_0x29afc9(0x1bd)]='https://api.mistral.ai/v1',_0x4346ea[_0x29afc9(0x1d2)]=_0x29afc9(0x2b9),_0x4346ea['TCPDl']=function(_0x45f023,_0x13867e){return _0x45f023!==_0x13867e;},_0x4346ea['YtAZC']='qxpNk',_0x4346ea['zuDjW']=_0x29afc9(0x2ac),_0x4346ea['JMefw']=_0x29afc9(0x29e),_0x4346ea['NHjbs']=_0x29afc9(0x21e);const _0x29b65e=_0x4346ea;if(!this[_0x29afc9(0x2b9)])throw new Error('Gemini\x20not\x20configured');let _0x1c834d=this[_0x29afc9(0x1cd)](_0x29b65e[_0x29afc9(0x1d2)]);try{if(_0x29b65e['TCPDl'](_0x29afc9(0x237),_0x29b65e[_0x29afc9(0x1be)])){const _0x21e0dc={};_0x21e0dc[_0x29afc9(0x22f)]=_0x1c834d;const _0x399954=this['gemini'][_0x29afc9(0x1dd)](_0x21e0dc),_0x6ae4a1=this[_0x29afc9(0x251)](_0x4ea752)['replace'](_0x29afc9(0x203),_0x1ae653),_0x1eb103=_0x6ae4a1[_0x29afc9(0x224)](/[^\x00-\x7F]/g,'\x20')[_0x29afc9(0x224)](/\s+/g,'\x20')[_0x29afc9(0x1e1)](),_0x36ec21=await _0x399954['generateContent'](_0x1eb103),_0x26ab56=await _0x36ec21['response'];let _0x2f9070=_0x26ab56['text']()['trim']();const _0x7cdc72=this['cleanAIResponse'](_0x2f9070),_0x2769fe={};return _0x2769fe[_0x29afc9(0x28e)]=!![],_0x2769fe[_0x29afc9(0x22c)]=_0x7cdc72,_0x2769fe[_0x29afc9(0x28c)]=_0x29afc9(0x21e),_0x2769fe[_0x29afc9(0x22f)]=_0x1c834d,_0x2769fe[_0x29afc9(0x1c9)]=0.9,_0x2769fe[_0x29afc9(0x1e4)]=_0x29b65e[_0x29afc9(0x1c5)],_0x2769fe;}else{const _0x16a376={};_0x16a376['apiKey']=_0x36cf5d.env.MISTRAL_API_KEY,_0x16a376[_0x29afc9(0x2b7)]=grODYm[_0x29afc9(0x1bd)],this['mistral']=new _0x2f79a3(_0x16a376);}}catch(_0x47251c){if(_0x1c834d!=='gemini-2.5-flash'){if(_0x29b65e[_0x29afc9(0x2b8)]!=='xejfr')this[_0x29afc9(0x2b9)]=new _0x5bf2ad(_0x15ad96.env.GEMINI_API_KEY);else{logger[_0x29afc9(0x206)]('Gemini\x20model\x20'+_0x1c834d+_0x29afc9(0x2b3));;const _0x4667f0={};_0x4667f0[_0x29afc9(0x22f)]='gemini-2.5-flash';const _0x30b62b=this[_0x29afc9(0x2b9)][_0x29afc9(0x1dd)](_0x4667f0),_0xd86b08=this[_0x29afc9(0x251)](_0x4ea752)[_0x29afc9(0x224)](_0x29afc9(0x203),_0x1ae653),_0x3c3a13=_0xd86b08[_0x29afc9(0x224)](/[^\x00-\x7F]/g,'\x20')['replace'](/\s+/g,'\x20')[_0x29afc9(0x1e1)](),_0x34f36e=await _0x30b62b[_0x29afc9(0x1ea)](_0x3c3a13),_0x1223e8=await _0x34f36e[_0x29afc9(0x1e5)],_0x133a9d=this[_0x29afc9(0x236)](_0x1223e8[_0x29afc9(0x2ab)]()[_0x29afc9(0x1e1)]()),_0x325574={};return _0x325574[_0x29afc9(0x28e)]=!![],_0x325574[_0x29afc9(0x22c)]=_0x133a9d,_0x325574[_0x29afc9(0x28c)]=_0x29b65e['NHjbs'],_0x325574['model']=_0x29afc9(0x2a9),_0x325574[_0x29afc9(0x1c9)]=0.85,_0x325574['processingTime']=_0x29afc9(0x2ac),_0x325574;}}throw _0x47251c;}}async[_0x9ca842(0x28d)](_0x500423,_0x3372c6=null){const _0x31171a=_0x9ca842,_0x1af655={};_0x1af655['ZFojm']=_0x31171a(0x21c),_0x1af655[_0x31171a(0x23a)]=_0x31171a(0x24d),_0x1af655['BsOuQ']=_0x31171a(0x27e),_0x1af655[_0x31171a(0x212)]=_0x31171a(0x1f6);const _0x5a6935=_0x1af655;if(!this[_0x31171a(0x27e)]){if(_0x5a6935[_0x31171a(0x2c5)]===_0x5a6935[_0x31171a(0x2c5)])throw new Error(_0x5a6935['urlPL']);else throw new _0x2c4738(_0x31171a(0x1e6));}const _0x496262=this[_0x31171a(0x1cd)](_0x5a6935[_0x31171a(0x285)]),_0x4fe8b9={};_0x4fe8b9[_0x31171a(0x2a0)]=_0x31171a(0x28a),_0x4fe8b9[_0x31171a(0x211)]=_0x500423;const _0x3a638f=await this['copilot']['chat'][_0x31171a(0x2b2)]['create']({'model':_0x496262,'messages':[{'role':_0x5a6935['gqZXy'],'content':this[_0x31171a(0x251)](_0x3372c6)},_0x4fe8b9],'temperature':0.3,'max_tokens':0x1f4});let _0x3904f5=_0x3a638f[_0x31171a(0x244)][0x0][_0x31171a(0x1f3)][_0x31171a(0x211)][_0x31171a(0x1e1)]();return _0x3904f5=this[_0x31171a(0x236)](_0x3904f5),_0x3904f5;}async['convertWithClaude'](_0x4520a5,_0x4912a5=null){const _0x3fb2f6=_0x9ca842,_0x4b45e0={};_0x4b45e0[_0x3fb2f6(0x20f)]=_0x3fb2f6(0x294),_0x4b45e0[_0x3fb2f6(0x25e)]=_0x3fb2f6(0x2c0),_0x4b45e0[_0x3fb2f6(0x2cd)]=_0x3fb2f6(0x2b9),_0x4b45e0[_0x3fb2f6(0x227)]=_0x3fb2f6(0x21e),_0x4b45e0[_0x3fb2f6(0x27b)]=_0x3fb2f6(0x281),_0x4b45e0['xKWKv']='Anthropic\x20Claude',_0x4b45e0['aJUfm']='copilot',_0x4b45e0[_0x3fb2f6(0x284)]=_0x3fb2f6(0x298),_0x4b45e0[_0x3fb2f6(0x2b6)]=_0x3fb2f6(0x20c),_0x4b45e0[_0x3fb2f6(0x21b)]=_0x3fb2f6(0x2aa),_0x4b45e0[_0x3fb2f6(0x1fc)]=_0x3fb2f6(0x200),_0x4b45e0[_0x3fb2f6(0x273)]='mistral',_0x4b45e0[_0x3fb2f6(0x1d5)]=_0x3fb2f6(0x256),_0x4b45e0[_0x3fb2f6(0x2ad)]=_0x3fb2f6(0x29f),_0x4b45e0[_0x3fb2f6(0x25d)]=function(_0x480689,_0x2602d3){return _0x480689!==_0x2602d3;},_0x4b45e0[_0x3fb2f6(0x291)]=_0x3fb2f6(0x1e6),_0x4b45e0[_0x3fb2f6(0x2c7)]='user',_0x4b45e0[_0x3fb2f6(0x205)]=_0x3fb2f6(0x2ac);const _0x41bbd3=_0x4b45e0;if(!this['claude']){if(_0x41bbd3[_0x3fb2f6(0x25d)](_0x3fb2f6(0x25f),'MRnqv'))throw new Error(_0x41bbd3[_0x3fb2f6(0x291)]);else{const _0x1ff072=[],_0xb2d4dd={};_0xb2d4dd['id']=_0x41bbd3[_0x3fb2f6(0x20f)],_0xb2d4dd[_0x3fb2f6(0x204)]=_0x41bbd3[_0x3fb2f6(0x25e)],_0xb2d4dd['icon']='๐ค';if(this[_0x3fb2f6(0x294)])_0x1ff072[_0x3fb2f6(0x27c)](_0xb2d4dd);const _0x7ae397={};_0x7ae397['id']=_0x41bbd3[_0x3fb2f6(0x2cd)],_0x7ae397[_0x3fb2f6(0x204)]=_0x41bbd3[_0x3fb2f6(0x227)],_0x7ae397[_0x3fb2f6(0x1ec)]='โจ';if(this['gemini'])_0x1ff072[_0x3fb2f6(0x27c)](_0x7ae397);const _0x28f0dc={};_0x28f0dc['id']=_0x41bbd3['OtORo'],_0x28f0dc[_0x3fb2f6(0x204)]=_0x41bbd3[_0x3fb2f6(0x1d1)],_0x28f0dc[_0x3fb2f6(0x1ec)]='๐ง ';if(this[_0x3fb2f6(0x281)])_0x1ff072[_0x3fb2f6(0x27c)](_0x28f0dc);const _0x2a54c0={};_0x2a54c0['id']=_0x41bbd3[_0x3fb2f6(0x2d2)],_0x2a54c0[_0x3fb2f6(0x204)]=_0x41bbd3[_0x3fb2f6(0x284)],_0x2a54c0[_0x3fb2f6(0x1ec)]='๐';if(this['copilot'])_0x1ff072[_0x3fb2f6(0x27c)](_0x2a54c0);const _0x2fa581={};_0x2fa581['id']=_0x41bbd3[_0x3fb2f6(0x2b6)],_0x2fa581[_0x3fb2f6(0x204)]=_0x41bbd3[_0x3fb2f6(0x21b)],_0x2fa581[_0x3fb2f6(0x1ec)]='โก';if(this['groq'])_0x1ff072[_0x3fb2f6(0x27c)](_0x2fa581);const _0x74fcbd={};_0x74fcbd['id']=_0x3fb2f6(0x265),_0x74fcbd[_0x3fb2f6(0x204)]=_0x41bbd3[_0x3fb2f6(0x1fc)],_0x74fcbd[_0x3fb2f6(0x1ec)]='๐';if(this[_0x3fb2f6(0x265)])_0x1ff072[_0x3fb2f6(0x27c)](_0x74fcbd);const _0x3ed63d={};_0x3ed63d['id']=_0x41bbd3[_0x3fb2f6(0x273)],_0x3ed63d[_0x3fb2f6(0x204)]=_0x41bbd3[_0x3fb2f6(0x1d5)],_0x3ed63d[_0x3fb2f6(0x1ec)]=_0x41bbd3[_0x3fb2f6(0x2ad)];if(this[_0x3fb2f6(0x283)])_0x1ff072[_0x3fb2f6(0x27c)](_0x3ed63d);return _0x1ff072;}}const _0x54d02f=this[_0x3fb2f6(0x1cd)](_0x3fb2f6(0x281)),_0x5a3197=this['getSystemPrompt'](_0x4912a5),_0x33340d={};_0x33340d['role']=_0x41bbd3['zlNAY'],_0x33340d['content']=_0x4520a5;const _0x3f0a5e={};_0x3f0a5e[_0x3fb2f6(0x22f)]=_0x54d02f,_0x3f0a5e[_0x3fb2f6(0x239)]=0x1f4,_0x3f0a5e[_0x3fb2f6(0x1f6)]=_0x5a3197,_0x3f0a5e[_0x3fb2f6(0x2c2)]=[_0x33340d],_0x3f0a5e[_0x3fb2f6(0x1eb)]=0.3;const _0xa38053=await this[_0x3fb2f6(0x281)][_0x3fb2f6(0x2c2)][_0x3fb2f6(0x24a)](_0x3f0a5e);let _0x3e6ebe=_0xa38053[_0x3fb2f6(0x211)][0x0]['text'][_0x3fb2f6(0x1e1)]();const _0x56c422=this[_0x3fb2f6(0x236)](_0x3e6ebe),_0x2bc9b3={};return _0x2bc9b3[_0x3fb2f6(0x28e)]=!![],_0x2bc9b3[_0x3fb2f6(0x22c)]=_0x56c422,_0x2bc9b3[_0x3fb2f6(0x28c)]=_0x41bbd3['xKWKv'],_0x2bc9b3[_0x3fb2f6(0x22f)]=_0x54d02f,_0x2bc9b3[_0x3fb2f6(0x1c9)]=0.93,_0x2bc9b3[_0x3fb2f6(0x1e4)]=_0x41bbd3['dSecS'],_0x2bc9b3;}async['convertWithGroq'](_0x34b6d4,_0x5d79bb=null){const _0x4a8be7=_0x9ca842,_0x77a0f1={};_0x77a0f1[_0x4a8be7(0x2c6)]='Groq\x20not\x20configured',_0x77a0f1[_0x4a8be7(0x2a5)]=_0x4a8be7(0x20c),_0x77a0f1[_0x4a8be7(0x259)]=_0x4a8be7(0x1f6),_0x77a0f1[_0x4a8be7(0x2b4)]='user',_0x77a0f1[_0x4a8be7(0x23b)]=_0x4a8be7(0x2aa);const _0xc46dc3=_0x77a0f1;if(!this['groq'])throw new Error(_0xc46dc3['SmYjn']);const _0x402e5a=this['getModelForProvider'](_0xc46dc3['GhuFi']),_0x25925c=await this[_0x4a8be7(0x20c)][_0x4a8be7(0x234)]['completions'][_0x4a8be7(0x24a)]({'model':_0x402e5a,'messages':[{'role':_0xc46dc3['uNTqj'],'content':this[_0x4a8be7(0x251)](_0x5d79bb)},{'role':_0xc46dc3[_0x4a8be7(0x2b4)],'content':_0x34b6d4}],'temperature':0.3,'max_tokens':0x1f4});let _0x15fc92=_0x25925c[_0x4a8be7(0x244)][0x0][_0x4a8be7(0x1f3)][_0x4a8be7(0x211)][_0x4a8be7(0x1e1)]();const _0x15e433=this[_0x4a8be7(0x236)](_0x15fc92),_0x4c83ce={};return _0x4c83ce['success']=!![],_0x4c83ce[_0x4a8be7(0x22c)]=_0x15e433,_0x4c83ce[_0x4a8be7(0x28c)]=_0xc46dc3['nIRGR'],_0x4c83ce[_0x4a8be7(0x22f)]=_0x402e5a,_0x4c83ce[_0x4a8be7(0x1c9)]=0.92,_0x4c83ce[_0x4a8be7(0x1e4)]=_0x4a8be7(0x2ac),_0x4c83ce;}async[_0x9ca842(0x1ed)](_0xbdc273,_0x29dee9=null){const _0x6b1b55=_0x9ca842,_0x2de1ee={};_0x2de1ee[_0x6b1b55(0x23f)]=_0x6b1b55(0x20b),_0x2de1ee[_0x6b1b55(0x1f5)]=function(_0x543148,_0x19bfa3){return _0x543148!==_0x19bfa3;},_0x2de1ee['anjXz']=_0x6b1b55(0x22b),_0x2de1ee[_0x6b1b55(0x1bc)]=_0x6b1b55(0x232),_0x2de1ee[_0x6b1b55(0x2cc)]=_0x6b1b55(0x2a4),_0x2de1ee[_0x6b1b55(0x238)]=_0x6b1b55(0x265),_0x2de1ee[_0x6b1b55(0x290)]=_0x6b1b55(0x1f6),_0x2de1ee['iDLDt']=_0x6b1b55(0x28a);const _0x5a6dbf=_0x2de1ee;if(!this['cohere']){if(_0x5a6dbf['emcap'](_0x5a6dbf['anjXz'],_0x5a6dbf['MOKML']))throw new Error(_0x5a6dbf['cpbwt']);else{_0x152d84[_0x6b1b55(0x1cb)](_0x5a6dbf['lMSsQ'],_0x1c4b78[_0x6b1b55(0x1f3)]);;throw _0x58e7b4;}}const _0xb841e8=this['getModelForProvider'](_0x5a6dbf[_0x6b1b55(0x238)]),_0x490657=await this['cohere'][_0x6b1b55(0x234)][_0x6b1b55(0x2b2)][_0x6b1b55(0x24a)]({'model':_0xb841e8,'messages':[{'role':_0x5a6dbf[_0x6b1b55(0x290)],'content':this['getSystemPrompt'](_0x29dee9)},{'role':_0x5a6dbf[_0x6b1b55(0x221)],'content':_0xbdc273}],'temperature':0.3,'max_tokens':0x1f4});let _0x15c614=_0x490657['choices'][0x0][_0x6b1b55(0x1f3)][_0x6b1b55(0x211)][_0x6b1b55(0x1e1)]();return _0x15c614=this[_0x6b1b55(0x236)](_0x15c614),_0x15c614;}async[_0x9ca842(0x253)](_0x3215da,_0x428083=null){const _0xcb3a4c=_0x9ca842,_0x29c370={};_0x29c370[_0xcb3a4c(0x2ae)]=_0xcb3a4c(0x2a9),_0x29c370[_0xcb3a4c(0x233)]=_0xcb3a4c(0x24e),_0x29c370['AQpWQ']=_0xcb3a4c(0x2a7),_0x29c370[_0xcb3a4c(0x1c7)]='llama-3.3-70b-versatile',_0x29c370[_0xcb3a4c(0x267)]=_0xcb3a4c(0x1c3),_0x29c370[_0xcb3a4c(0x279)]=_0xcb3a4c(0x213),_0x29c370[_0xcb3a4c(0x289)]=_0xcb3a4c(0x20d),_0x29c370[_0xcb3a4c(0x22a)]='Tmgxe',_0x29c370[_0xcb3a4c(0x208)]='user';const _0x85b0a2=_0x29c370;if(!this[_0xcb3a4c(0x283)]){if(_0x85b0a2[_0xcb3a4c(0x289)]!==_0x85b0a2[_0xcb3a4c(0x22a)])throw new Error(_0xcb3a4c(0x1bb));else{if(this[_0xcb3a4c(0x22f)])return this[_0xcb3a4c(0x22f)];const _0x23a6d8={};_0x23a6d8['openai']=_0xcb3a4c(0x247),_0x23a6d8[_0xcb3a4c(0x2b9)]=CJbEem['nZWaK'],_0x23a6d8[_0xcb3a4c(0x281)]=CJbEem[_0xcb3a4c(0x233)],_0x23a6d8[_0xcb3a4c(0x27e)]=CJbEem[_0xcb3a4c(0x1cc)],_0x23a6d8[_0xcb3a4c(0x20c)]=CJbEem[_0xcb3a4c(0x1c7)],_0x23a6d8[_0xcb3a4c(0x265)]=CJbEem[_0xcb3a4c(0x267)],_0x23a6d8[_0xcb3a4c(0x283)]=CJbEem['orBHs'];const _0x5afca8=_0x23a6d8;return _0x5afca8[_0x3c6023]||_0xcb3a4c(0x264);}}const _0x59720b=this[_0xcb3a4c(0x1cd)](_0xcb3a4c(0x283)),_0x2b5eeb={};_0x2b5eeb['role']=_0x85b0a2[_0xcb3a4c(0x208)],_0x2b5eeb[_0xcb3a4c(0x211)]=_0x3215da;const _0x5daf5a=await this[_0xcb3a4c(0x283)][_0xcb3a4c(0x234)][_0xcb3a4c(0x2b2)]['create']({'model':_0x59720b,'messages':[{'role':_0xcb3a4c(0x1f6),'content':this[_0xcb3a4c(0x251)](_0x428083)},_0x2b5eeb],'temperature':0.3,'max_tokens':0x1f4});let _0x3a9069=_0x5daf5a[_0xcb3a4c(0x244)][0x0][_0xcb3a4c(0x1f3)][_0xcb3a4c(0x211)]['trim']();return _0x3a9069=this['cleanAIResponse'](_0x3a9069),_0x3a9069;}['cleanAIResponse'](_0x1cab5f){const _0xf39ceb=_0x9ca842,_0x3d0de2={};_0x3d0de2[_0xf39ceb(0x29d)]='launch\x20',_0x3d0de2[_0xf39ceb(0x231)]='kill\x20',_0x3d0de2['YQbMe']=_0xf39ceb(0x1c6),_0x3d0de2[_0xf39ceb(0x2bc)]=_0xf39ceb(0x22e),_0x3d0de2['NSIdd']=_0xf39ceb(0x2bf),_0x3d0de2[_0xf39ceb(0x1c2)]='click\x20',_0x3d0de2[_0xf39ceb(0x202)]=_0xf39ceb(0x299),_0x3d0de2[_0xf39ceb(0x27a)]='swipe\x20',_0x3d0de2[_0xf39ceb(0x1fe)]=_0xf39ceb(0x245),_0x3d0de2[_0xf39ceb(0x1fd)]=_0xf39ceb(0x2a2),_0x3d0de2[_0xf39ceb(0x282)]=_0xf39ceb(0x1f4),_0x3d0de2[_0xf39ceb(0x257)]='lightmode',_0x3d0de2[_0xf39ceb(0x29b)]=_0xf39ceb(0x29a),_0x3d0de2[_0xf39ceb(0x254)]=_0xf39ceb(0x20e),_0x3d0de2['aXInX']='volume\x20',_0x3d0de2[_0xf39ceb(0x22d)]=function(_0x488a74,_0x464f0c){return _0x488a74===_0x464f0c;},_0x3d0de2[_0xf39ceb(0x26e)]=_0xf39ceb(0x248),_0x3d0de2[_0xf39ceb(0x1ff)]=_0xf39ceb(0x1e2),_0x3d0de2[_0xf39ceb(0x1d8)]=_0xf39ceb(0x218);const _0x14ab15=_0x3d0de2;_0x1cab5f=_0x1cab5f[_0xf39ceb(0x224)](/```[\s\S]*?```/g,'')[_0xf39ceb(0x1e1)](),_0x1cab5f=_0x1cab5f[_0xf39ceb(0x224)](/```/g,'')[_0xf39ceb(0x1e1)]();const _0xe19e08=_0x1cab5f[_0xf39ceb(0x223)]('\x0a'),_0x5a43e7=_0xe19e08[_0xf39ceb(0x2be)](_0x49bf0c=>{const _0x6be66a=_0xf39ceb,_0x31788f=_0x49bf0c[_0x6be66a(0x1e1)]();if(!_0x31788f)return![];if(_0x31788f['startsWith'](_0x14ab15['xXCXM']))return!![];if(_0x31788f[_0x6be66a(0x1c8)](_0x14ab15[_0x6be66a(0x231)]))return!![];if(_0x31788f===_0x14ab15[_0x6be66a(0x272)])return!![];if(_0x31788f===_0x14ab15[_0x6be66a(0x2bc)])return!![];if(_0x31788f[_0x6be66a(0x1c8)](_0x14ab15[_0x6be66a(0x1da)]))return!![];if(_0x31788f[_0x6be66a(0x1c8)](_0x14ab15[_0x6be66a(0x1c2)]))return!![];if(_0x31788f[_0x6be66a(0x1c8)](_0x6be66a(0x235)))return!![];if(_0x31788f[_0x6be66a(0x1c8)](_0x14ab15[_0x6be66a(0x202)]))return!![];if(_0x31788f['startsWith'](_0x14ab15[_0x6be66a(0x27a)]))return!![];if(_0x31788f[_0x6be66a(0x1c8)](_0x14ab15[_0x6be66a(0x1fe)]))return!![];if(_0x31788f[_0x6be66a(0x1c8)]('screenshot'))return!![];if(_0x31788f[_0x6be66a(0x1c8)](_0x14ab15[_0x6be66a(0x1fd)]))return!![];if(_0x31788f['startsWith'](_0x14ab15[_0x6be66a(0x282)]))return!![];if(_0x31788f[_0x6be66a(0x1c8)](_0x6be66a(0x270)))return!![];if(_0x31788f[_0x6be66a(0x1c8)](_0x14ab15['WUaRr']))return!![];if(_0x31788f['startsWith'](_0x14ab15['MQhdz']))return!![];if(_0x31788f['startsWith'](_0x14ab15[_0x6be66a(0x254)]))return!![];if(_0x31788f[_0x6be66a(0x1c8)](_0x14ab15[_0x6be66a(0x1fb)]))return!![];if(_0x14ab15[_0x6be66a(0x22d)](_0x31788f,_0x14ab15['MxxIa']))return!![];if(_0x14ab15[_0x6be66a(0x22d)](_0x31788f,_0x14ab15[_0x6be66a(0x1ff)]))return!![];if(_0x14ab15[_0x6be66a(0x22d)](_0x31788f,'notifications'))return!![];if(_0x14ab15[_0x6be66a(0x22d)](_0x31788f,_0x14ab15[_0x6be66a(0x1d8)]))return!![];return!![];});return _0x5a43e7[_0xf39ceb(0x225)]('\x0a')[_0xf39ceb(0x1e1)]();}['getAvailableProviders'](){const _0x405b37=_0x9ca842,_0x3a8725={};_0x3a8725[_0x405b37(0x288)]=_0x405b37(0x294),_0x3a8725[_0x405b37(0x25b)]=_0x405b37(0x2c0),_0x3a8725[_0x405b37(0x1c0)]=_0x405b37(0x21e),_0x3a8725[_0x405b37(0x287)]=_0x405b37(0x281),_0x3a8725[_0x405b37(0x1d3)]='Anthropic\x20Claude',_0x3a8725[_0x405b37(0x1fa)]=_0x405b37(0x27e),_0x3a8725[_0x405b37(0x249)]=_0x405b37(0x298),_0x3a8725['FrHRx']=_0x405b37(0x20c),_0x3a8725['FFTLl']=_0x405b37(0x2aa),_0x3a8725[_0x405b37(0x20a)]='Cohere',_0x3a8725[_0x405b37(0x2d3)]=_0x405b37(0x283),_0x3a8725[_0x405b37(0x1d4)]='Mistral\x20AI',_0x3a8725[_0x405b37(0x210)]=_0x405b37(0x29f);const _0x46331d=_0x3a8725,_0x2d1c85=[],_0x11c499={};_0x11c499['id']=_0x46331d[_0x405b37(0x288)],_0x11c499[_0x405b37(0x204)]=_0x46331d[_0x405b37(0x25b)],_0x11c499[_0x405b37(0x1ec)]='๐ค';if(this[_0x405b37(0x294)])_0x2d1c85[_0x405b37(0x27c)](_0x11c499);const _0x26e5d6={};_0x26e5d6['id']='gemini',_0x26e5d6['name']=_0x46331d[_0x405b37(0x1c0)],_0x26e5d6[_0x405b37(0x1ec)]='โจ';if(this['gemini'])_0x2d1c85[_0x405b37(0x27c)](_0x26e5d6);const _0x5f14c4={};_0x5f14c4['id']=_0x46331d['uKUGx'],_0x5f14c4[_0x405b37(0x204)]=_0x46331d[_0x405b37(0x1d3)],_0x5f14c4[_0x405b37(0x1ec)]='๐ง ';if(this[_0x405b37(0x281)])_0x2d1c85[_0x405b37(0x27c)](_0x5f14c4);const _0x438339={};_0x438339['id']=_0x46331d[_0x405b37(0x1fa)],_0x438339[_0x405b37(0x204)]=_0x46331d[_0x405b37(0x249)],_0x438339[_0x405b37(0x1ec)]='๐';if(this[_0x405b37(0x27e)])_0x2d1c85[_0x405b37(0x27c)](_0x438339);const _0xcf6173={};_0xcf6173['id']=_0x46331d[_0x405b37(0x216)],_0xcf6173['name']=_0x46331d[_0x405b37(0x1e0)],_0xcf6173[_0x405b37(0x1ec)]='โก';if(this[_0x405b37(0x20c)])_0x2d1c85[_0x405b37(0x27c)](_0xcf6173);const _0x35309c={};_0x35309c['id']=_0x405b37(0x265),_0x35309c[_0x405b37(0x204)]=_0x46331d['IBfQe'],_0x35309c[_0x405b37(0x1ec)]='๐';if(this[_0x405b37(0x265)])_0x2d1c85[_0x405b37(0x27c)](_0x35309c);const _0x12ff84={};_0x12ff84['id']=_0x46331d[_0x405b37(0x2d3)],_0x12ff84[_0x405b37(0x204)]=_0x46331d['wFrNu'],_0x12ff84[_0x405b37(0x1ec)]=_0x46331d[_0x405b37(0x210)];if(this[_0x405b37(0x283)])_0x2d1c85['push'](_0x12ff84);return _0x2d1c85;}['setProvider'](_0x464063,_0x12c276=null){const _0x15f8a7=_0x9ca842,_0x8616d5=this['getAvailableProviders']()['map'](_0x573d57=>_0x573d57['id']);if(_0x8616d5[_0x15f8a7(0x21d)](_0x464063))return this[_0x15f8a7(0x28c)]=_0x464063,_0x12c276&&(this['model']=_0x12c276),!![];return![];}[_0x9ca842(0x26b)](){const _0x325499=_0x9ca842;return{'id':this[_0x325499(0x28c)],'name':this[_0x325499(0x1ef)](this['provider']),'model':this[_0x325499(0x22f)]||this[_0x325499(0x1cd)](this[_0x325499(0x28c)]),'available':this[_0x325499(0x268)]()};}['getProviderName'](_0x2ab513){const _0x271e8f=_0x9ca842,_0x6605cd={};_0x6605cd[_0x271e8f(0x217)]=_0x271e8f(0x275),_0x6605cd[_0x271e8f(0x201)]=_0x271e8f(0x21e),_0x6605cd[_0x271e8f(0x1dc)]='Anthropic\x20Claude',_0x6605cd[_0x271e8f(0x2c3)]='GitHub\x20Copilot',_0x6605cd[_0x271e8f(0x25c)]=_0x271e8f(0x2aa),_0x6605cd['eRJXg']=_0x271e8f(0x200),_0x6605cd['SYmcN']='Mistral\x20AI',_0x6605cd[_0x271e8f(0x2bb)]=_0x271e8f(0x215);const _0x4ac59d=_0x6605cd,_0x4831bb={};_0x4831bb[_0x271e8f(0x23c)]=_0x4ac59d[_0x271e8f(0x217)],_0x4831bb['built-in']=_0x4ac59d[_0x271e8f(0x217)],_0x4831bb[_0x271e8f(0x1d7)]=_0x4ac59d['tYhCx'],_0x4831bb[_0x271e8f(0x294)]=_0x271e8f(0x2c0),_0x4831bb[_0x271e8f(0x2b9)]=_0x4ac59d[_0x271e8f(0x201)],_0x4831bb[_0x271e8f(0x281)]=_0x4ac59d[_0x271e8f(0x1dc)],_0x4831bb['copilot']=_0x4ac59d[_0x271e8f(0x2c3)],_0x4831bb[_0x271e8f(0x20c)]=_0x4ac59d[_0x271e8f(0x25c)],_0x4831bb['cohere']=_0x4ac59d['eRJXg'],_0x4831bb['mistral']=_0x4ac59d[_0x271e8f(0x250)];const _0x31e4ba=_0x4831bb;return _0x31e4ba[_0x2ab513]||_0x4ac59d['Qvpzu'];}async['convertWithLocalAI'](_0x10644d,_0x2e74f8=null){const _0x560368=_0x9ca842,_0x2b78ed={};_0x2b78ed[_0x560368(0x1d6)]=_0x560368(0x2a8),_0x2b78ed[_0x560368(0x271)]=_0x560368(0x275),_0x2b78ed[_0x560368(0x2a3)]='built-in-patterns',_0x2b78ed[_0x560368(0x240)]=_0x560368(0x274),_0x2b78ed[_0x560368(0x2c4)]='KJFNC',_0x2b78ed['fHmNC']='Local\x20AI\x20conversion\x20error:';const _0x2e417e=_0x2b78ed;logger[_0x560368(0x2a6)]('๐ค\x20Converting\x20with\x20Local\x20Built-In\x20AI:\x20\x22'+_0x10644d+'\x22');;try{if(_0x560368(0x29c)!==_0x2e417e['ItGSx']){const _0x144ec6=_0x2e74f8?[{'platform':_0x2e74f8}]:[],_0x1f2fff=await this['localAI'][_0x560368(0x1f0)](_0x10644d,_0x144ec6);if(_0x1f2fff['success']){const _0x1f3afc={};return _0x1f3afc[_0x560368(0x22c)]=_0x1f2fff[_0x560368(0x22c)],_0x1f3afc['provider']=_0x2e417e[_0x560368(0x271)],_0x1f3afc[_0x560368(0x1c9)]=_0x1f2fff['confidence'],_0x1f3afc[_0x560368(0x1e4)]=_0x1f2fff['processingTime'],_0x1f3afc[_0x560368(0x22f)]=_0x2e417e[_0x560368(0x2a3)],_0x1f3afc[_0x560368(0x1ce)]=0x0,_0x1f3afc;}else throw new Error(_0x1f2fff[_0x560368(0x1cb)]||_0x2e417e['pqTxQ']);}else{const _0x3fa2b5=this[_0x560368(0x268)]()[_0x560368(0x219)](_0x1dcdd2=>_0x1dcdd2['id']);if(_0x3fa2b5[_0x560368(0x21d)](_0x32928a))return this[_0x560368(0x28c)]=_0x4b1c81,_0x1b2a45&&(this['model']=_0x27fee1),!![];return![];}}catch(_0x110b06){if(_0x2e417e[_0x560368(0x2c4)]!==_0x2e417e[_0x560368(0x2c4)]){const _0x5ac235={};_0x5ac235[_0x560368(0x1de)]=_0x1078ce.env.CLAUDE_API_KEY,this[_0x560368(0x281)]=new _0x37d941(_0x5ac235);}else{logger['error'](_0x2e417e['fHmNC'],_0x110b06[_0x560368(0x1f3)]);;throw _0x110b06;}}}}module[_0x9ca842(0x263)]=AIProviderManager;
|
|
1
|
+
// AI Provider Abstraction Layer - API-Only Multi-Provider Support
|
|
2
|
+
// Pure API-based AI providers - No local models, no storage
|
|
3
|
+
// Supports: OpenAI, Google Gemini, Anthropic Claude, GitHub Copilot, Groq, Cohere, Mistral AI
|
|
4
|
+
|
|
5
|
+
const { OpenAI } = require('openai');
|
|
6
|
+
const { GoogleGenerativeAI } = require('@google/generative-ai');
|
|
7
|
+
const { Anthropic } = require('@anthropic-ai/sdk');
|
|
8
|
+
const { getPackageId, APP_MAPPINGS } = require('./appMappings');
|
|
9
|
+
|
|
10
|
+
// Configuration: API-only mode (no caching, no local storage)
|
|
11
|
+
const AI_CONFIG = {
|
|
12
|
+
cache: false, // Disable any response caching
|
|
13
|
+
localStorage: false, // No local storage of models or data
|
|
14
|
+
streamingOnly: false, // Use standard requests for better compatibility
|
|
15
|
+
timeout: 30000, // 30 second timeout for API calls
|
|
16
|
+
retries: 2, // Retry failed requests twice
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
class AIProviderManager {
|
|
20
|
+
constructor() {
|
|
21
|
+
this.provider = process.env.AI_PROVIDER || 'gemini';
|
|
22
|
+
this.model = process.env.AI_MODEL || null; // Auto-select default if null
|
|
23
|
+
this.requestCache = new Map(); // In-memory only, cleared on restart
|
|
24
|
+
this.cacheExpiry = 300000; // 5 minutes (for identical requests only)
|
|
25
|
+
this.initializeProviders();
|
|
26
|
+
|
|
27
|
+
// Log API-only mode
|
|
28
|
+
console.log('๐ AI Provider: API-Only Mode (No Local Models)');
|
|
29
|
+
console.log(` Active Provider: ${this.provider}`);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
initializeProviders() {
|
|
33
|
+
// OpenAI - Direct API connection
|
|
34
|
+
if (process.env.OPENAI_API_KEY) {
|
|
35
|
+
this.openai = new OpenAI({
|
|
36
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
37
|
+
timeout: AI_CONFIG.timeout,
|
|
38
|
+
maxRetries: AI_CONFIG.retries,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Google Gemini - Direct API connection
|
|
43
|
+
if (process.env.GEMINI_API_KEY) {
|
|
44
|
+
this.gemini = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Anthropic Claude - Direct API connection
|
|
48
|
+
if (process.env.CLAUDE_API_KEY) {
|
|
49
|
+
this.claude = new Anthropic({
|
|
50
|
+
apiKey: process.env.CLAUDE_API_KEY,
|
|
51
|
+
timeout: AI_CONFIG.timeout,
|
|
52
|
+
maxRetries: AI_CONFIG.retries,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// GitHub Copilot - Direct API connection
|
|
57
|
+
if (process.env.GITHUB_TOKEN) {
|
|
58
|
+
this.copilot = new OpenAI({
|
|
59
|
+
apiKey: process.env.GITHUB_TOKEN,
|
|
60
|
+
baseURL: 'https://api.githubcopilot.com',
|
|
61
|
+
timeout: AI_CONFIG.timeout,
|
|
62
|
+
maxRetries: AI_CONFIG.retries,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Groq - Ultra-fast API inference (no local processing)
|
|
67
|
+
if (process.env.GROQ_API_KEY) {
|
|
68
|
+
this.groq = new OpenAI({
|
|
69
|
+
apiKey: process.env.GROQ_API_KEY,
|
|
70
|
+
baseURL: 'https://api.groq.com/openai/v1',
|
|
71
|
+
timeout: AI_CONFIG.timeout,
|
|
72
|
+
maxRetries: AI_CONFIG.retries,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Cohere - Direct API connection
|
|
77
|
+
if (process.env.COHERE_API_KEY) {
|
|
78
|
+
this.cohere = new OpenAI({
|
|
79
|
+
apiKey: process.env.COHERE_API_KEY,
|
|
80
|
+
baseURL: 'https://api.cohere.ai/v1',
|
|
81
|
+
timeout: AI_CONFIG.timeout,
|
|
82
|
+
maxRetries: AI_CONFIG.retries,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Mistral AI - Direct API connection
|
|
87
|
+
if (process.env.MISTRAL_API_KEY) {
|
|
88
|
+
this.mistral = new OpenAI({
|
|
89
|
+
apiKey: process.env.MISTRAL_API_KEY,
|
|
90
|
+
baseURL: 'https://api.mistral.ai/v1',
|
|
91
|
+
timeout: AI_CONFIG.timeout,
|
|
92
|
+
maxRetries: AI_CONFIG.retries,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
getSystemPrompt(platform = null) {
|
|
98
|
+
// Generate app list based on platform
|
|
99
|
+
let appListSection = '';
|
|
100
|
+
|
|
101
|
+
if (platform === 'both') {
|
|
102
|
+
// Multi-platform mode - use generic app names
|
|
103
|
+
const commonApps = Object.keys(APP_MAPPINGS)
|
|
104
|
+
.filter(app => APP_MAPPINGS[app].ios && APP_MAPPINGS[app].android)
|
|
105
|
+
.slice(0, 30);
|
|
106
|
+
|
|
107
|
+
appListSection = `\n\nMULTI-PLATFORM MODE (iOS + Android devices)
|
|
108
|
+
Available apps: ${commonApps.join(', ')}
|
|
109
|
+
|
|
110
|
+
IMPORTANT: Use generic app names (e.g., "launch settings", "launch chrome")
|
|
111
|
+
The system will automatically convert to platform-specific package IDs:
|
|
112
|
+
${commonApps.slice(0, 15).map(app => `- ${app} -> iOS: ${APP_MAPPINGS[app].ios} / Android: ${APP_MAPPINGS[app].android}`).join('\n')}
|
|
113
|
+
|
|
114
|
+
Commands will execute SIMULTANEOUSLY on all devices with correct package IDs.
|
|
115
|
+
`;
|
|
116
|
+
} else if (platform) {
|
|
117
|
+
const availableApps = Object.keys(APP_MAPPINGS)
|
|
118
|
+
.filter(app => APP_MAPPINGS[app][platform])
|
|
119
|
+
.slice(0, 50);
|
|
120
|
+
|
|
121
|
+
appListSection = `\n\nPLATFORM: ${platform.toUpperCase()}
|
|
122
|
+
Available apps for ${platform}: ${availableApps.join(', ')}
|
|
123
|
+
|
|
124
|
+
APP PACKAGE MAPPINGS:
|
|
125
|
+
When user says "launch chrome", "open chrome", etc., use the correct package ID:
|
|
126
|
+
${availableApps.slice(0, 20).map(app => `- ${app} -> launch ${APP_MAPPINGS[app][platform]}`).join('\n')}
|
|
127
|
+
`;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return `You are a mobile device automation command converter. Convert natural language requests into executable commands for iOS and Android devices.
|
|
131
|
+
|
|
132
|
+
Available commands (work on both iOS & Android):
|
|
133
|
+
- launch <app_name>: Launch an app using generic name (e.g., "launch settings", "launch chrome")
|
|
134
|
+
- kill <app_name>: Close/force stop an app
|
|
135
|
+
- home: Go to home screen (press home button)
|
|
136
|
+
- back: Navigate back (Android/iOS)
|
|
137
|
+
- url <url>: Open URL in browser
|
|
138
|
+
- click <text>: Click on a button or element by visible text
|
|
139
|
+
- click <x,y>: Click at specific coordinates (e.g., click 500,1000)
|
|
140
|
+
- tap <text/coords>: Same as click
|
|
141
|
+
- longpress <text/coords>: Long press on element or coordinates
|
|
142
|
+
- swipe <direction>: Swipe up/down/left/right (use for scrolling)
|
|
143
|
+
- type <text>: Type text into focused field (just the text, no "type" prefix)
|
|
144
|
+
- screenshot: Take screenshot
|
|
145
|
+
- restart: Restart device
|
|
146
|
+
- rotate <left/right/portrait/landscape>: Rotate screen
|
|
147
|
+
|
|
148
|
+
iOS-specific commands:
|
|
149
|
+
- darkmode/lightmode: Change appearance
|
|
150
|
+
- airplane <on/off>: Toggle airplane mode
|
|
151
|
+
- wifi <on/off>: Toggle WiFi
|
|
152
|
+
- volume <up/down/mute>: Control volume
|
|
153
|
+
|
|
154
|
+
Android-specific commands:
|
|
155
|
+
- getLocators: Get all interactive elements on current screen
|
|
156
|
+
- recent: Open recent apps
|
|
157
|
+
- notifications: Open notification panel
|
|
158
|
+
- quicksettings: Open quick settings
|
|
159
|
+
${appListSection}
|
|
160
|
+
|
|
161
|
+
COMMON PHRASE MAPPINGS:
|
|
162
|
+
- "scroll up" OR "scroll down" -> swipe up OR swipe down
|
|
163
|
+
- "go to <url>" OR "open <url>" OR "visit <url>" -> url https://<url>
|
|
164
|
+
- "press home" OR "go home" OR "home button" -> home
|
|
165
|
+
- "open settings" OR "launch settings" -> launch settings
|
|
166
|
+
- "open camera" OR "launch camera" -> launch camera
|
|
167
|
+
|
|
168
|
+
Examples:
|
|
169
|
+
- "open chrome" -> launch chrome
|
|
170
|
+
- "launch settings" -> launch settings
|
|
171
|
+
- "open camera" -> launch camera
|
|
172
|
+
- "scroll up" -> swipe up
|
|
173
|
+
- "scroll down" -> swipe down
|
|
174
|
+
- "click on the login button" -> click Login
|
|
175
|
+
- "tap at center of screen" -> click 540,1000
|
|
176
|
+
- "swipe down" -> swipe down
|
|
177
|
+
- "type hello world" -> hello world
|
|
178
|
+
- "take a screenshot" -> screenshot
|
|
179
|
+
- "go back" -> back
|
|
180
|
+
- "press home" -> home
|
|
181
|
+
- "go to google.com" -> url https://www.google.com
|
|
182
|
+
- "visit youtube.com" -> url https://www.youtube.com
|
|
183
|
+
- "launch Chrome and search google.com" -> launch chrome
|
|
184
|
+
WAIT 3000
|
|
185
|
+
url https://www.google.com
|
|
186
|
+
- "launch settings scroll up launch camera go to google.com press home" ->
|
|
187
|
+
launch settings
|
|
188
|
+
WAIT 3000
|
|
189
|
+
swipe up
|
|
190
|
+
WAIT 1000
|
|
191
|
+
home
|
|
192
|
+
WAIT 500
|
|
193
|
+
launch camera
|
|
194
|
+
WAIT 3000
|
|
195
|
+
home
|
|
196
|
+
WAIT 500
|
|
197
|
+
url https://www.google.com
|
|
198
|
+
WAIT 2000
|
|
199
|
+
home
|
|
200
|
+
|
|
201
|
+
Convert this request to commands: "{INPUT}"
|
|
202
|
+
|
|
203
|
+
CRITICAL RULES - YOU MUST FOLLOW THESE EXACTLY:
|
|
204
|
+
1. Output ONLY executable commands, one per line
|
|
205
|
+
2. NO explanations, NO markdown code blocks, NO comments, NO extra text
|
|
206
|
+
3. For multi-step actions, insert WAIT <milliseconds> between commands
|
|
207
|
+
4. Use GENERIC app names (e.g., "launch settings", "launch chrome", "launch camera")
|
|
208
|
+
5. Do NOT use platform-specific package IDs - use simple app names
|
|
209
|
+
6. The system will automatically convert to correct package IDs for each platform
|
|
210
|
+
5. For URLs, always use: url https://example.com
|
|
211
|
+
6. For scrolling, use: swipe up OR swipe down (never "scroll")
|
|
212
|
+
7. For text input, output ONLY the text (never include "type" prefix)
|
|
213
|
+
8. For home button, output: home (never "press home" or "go home")
|
|
214
|
+
9. WAIT timings: apps=3000ms, pages=2000ms, UI=1000ms, quick=500ms
|
|
215
|
+
10. Parse compound requests into individual steps with WAIT between each
|
|
216
|
+
|
|
217
|
+
OUTPUT FORMAT EXAMPLE:
|
|
218
|
+
launch com.apple.Preferences
|
|
219
|
+
WAIT 3000
|
|
220
|
+
swipe up
|
|
221
|
+
WAIT 1000
|
|
222
|
+
home
|
|
223
|
+
|
|
224
|
+
DO NOT include any other text. Start your response with the first command.`;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
async convertCommand(text, platform = null, providerOverride = null) {
|
|
228
|
+
const provider = providerOverride || this.provider;
|
|
229
|
+
|
|
230
|
+
// Check in-memory cache for identical requests (5 min expiry)
|
|
231
|
+
const cacheKey = `${provider}-${platform}-${text}`;
|
|
232
|
+
const cached = this.requestCache.get(cacheKey);
|
|
233
|
+
if (cached && Date.now() - cached.timestamp < this.cacheExpiry) {
|
|
234
|
+
console.log('๐ฏ Using cached response (in-memory)');
|
|
235
|
+
return cached.response;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
try {
|
|
239
|
+
let result;
|
|
240
|
+
switch (provider) {
|
|
241
|
+
case 'openai':
|
|
242
|
+
result = await this.convertWithOpenAI(text, platform);
|
|
243
|
+
break;
|
|
244
|
+
case 'gemini':
|
|
245
|
+
result = await this.convertWithGemini(text, platform);
|
|
246
|
+
break;
|
|
247
|
+
case 'claude':
|
|
248
|
+
result = await this.convertWithClaude(text, platform);
|
|
249
|
+
break;
|
|
250
|
+
case 'copilot':
|
|
251
|
+
result = await this.convertWithCopilot(text, platform);
|
|
252
|
+
break;
|
|
253
|
+
case 'groq':
|
|
254
|
+
result = await this.convertWithGroq(text, platform);
|
|
255
|
+
break;
|
|
256
|
+
case 'cohere':
|
|
257
|
+
result = await this.convertWithCohere(text, platform);
|
|
258
|
+
break;
|
|
259
|
+
case 'mistral':
|
|
260
|
+
result = await this.convertWithMistral(text, platform);
|
|
261
|
+
break;
|
|
262
|
+
default:
|
|
263
|
+
throw new Error(`Unknown AI provider: ${provider}`);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// Cache in memory only (cleared on restart)
|
|
267
|
+
this.requestCache.set(cacheKey, { response: result, timestamp: Date.now() });
|
|
268
|
+
|
|
269
|
+
// Clear old cache entries (keep last 50)
|
|
270
|
+
if (this.requestCache.size > 50) {
|
|
271
|
+
const firstKey = this.requestCache.keys().next().value;
|
|
272
|
+
this.requestCache.delete(firstKey);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
return result;
|
|
276
|
+
} catch (error) {
|
|
277
|
+
console.error(`โ API Error with ${provider}:`, error.message);
|
|
278
|
+
throw new Error(`AI conversion failed (${provider}): ${error.message}`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// Get model to use (from env or default)
|
|
283
|
+
getModelForProvider(provider) {
|
|
284
|
+
// If specific model is set, use it
|
|
285
|
+
if (this.model) return this.model;
|
|
286
|
+
|
|
287
|
+
// Otherwise use defaults (latest models as of August 24, 2026 - which are Aug 2024 models)
|
|
288
|
+
const defaults = {
|
|
289
|
+
openai: 'gpt-4o-2024-08-06', // Latest GPT-4o
|
|
290
|
+
gemini: 'gemini-1.5-pro-002', // Latest Gemini 1.5 Pro
|
|
291
|
+
claude: 'claude-3-5-sonnet-20241022', // Latest Claude 3.5 Sonnet
|
|
292
|
+
copilot: 'gpt-4o', // Latest multimodal
|
|
293
|
+
groq: 'llama-3.3-70b-versatile', // Latest Llama 3.3
|
|
294
|
+
cohere: 'command-r-plus-08-2024', // Latest Command R+
|
|
295
|
+
mistral: 'mistral-large-2411', // Latest Mistral Large 2
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
return defaults[provider] || 'gpt-4o-2024-08-06';
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
async convertWithOpenAI(text, platform = null) {
|
|
302
|
+
if (!this.openai) {
|
|
303
|
+
throw new Error('OpenAI not configured');
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
const model = this.getModelForProvider('openai');
|
|
307
|
+
|
|
308
|
+
const response = await this.openai.chat.completions.create({
|
|
309
|
+
model: model,
|
|
310
|
+
messages: [
|
|
311
|
+
{ role: 'system', content: this.getSystemPrompt(platform) },
|
|
312
|
+
{ role: 'user', content: text }
|
|
313
|
+
],
|
|
314
|
+
temperature: 0.3,
|
|
315
|
+
max_tokens: 500,
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
let convertedText = response.choices[0].message.content.trim();
|
|
319
|
+
convertedText = this.cleanAIResponse(convertedText);
|
|
320
|
+
|
|
321
|
+
return convertedText;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
async convertWithGemini(text, platform = null) {
|
|
325
|
+
if (!this.gemini) {
|
|
326
|
+
throw new Error('Gemini not configured');
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
let modelName = this.getModelForProvider('gemini');
|
|
330
|
+
|
|
331
|
+
try {
|
|
332
|
+
// Use default Gemini config for best accuracy
|
|
333
|
+
const model = this.gemini.getGenerativeModel({ model: modelName });
|
|
334
|
+
|
|
335
|
+
// Build prompt and sanitize for Gemini API (requires ASCII-safe ByteString)
|
|
336
|
+
const rawPrompt = this.getSystemPrompt(platform).replace('{INPUT}', text);
|
|
337
|
+
|
|
338
|
+
// Remove ALL non-ASCII characters that could cause ByteString errors
|
|
339
|
+
const sanitizedPrompt = rawPrompt
|
|
340
|
+
.replace(/[^\x00-\x7F]/g, ' ') // Replace non-ASCII with spaces
|
|
341
|
+
.replace(/\s+/g, ' ') // Normalize multiple spaces
|
|
342
|
+
.trim();
|
|
343
|
+
|
|
344
|
+
const result = await model.generateContent(sanitizedPrompt);
|
|
345
|
+
const response = await result.response;
|
|
346
|
+
let convertedText = response.text().trim();
|
|
347
|
+
|
|
348
|
+
return this.cleanAIResponse(convertedText);
|
|
349
|
+
} catch (error) {
|
|
350
|
+
// If the model fails, try with a faster fallback
|
|
351
|
+
if (modelName !== 'gemini-2.5-flash') {
|
|
352
|
+
console.warn(`Gemini model ${modelName} failed, falling back to gemini-2.5-flash`);
|
|
353
|
+
const fallbackModel = this.gemini.getGenerativeModel({ model: 'gemini-2.5-flash' });
|
|
354
|
+
const prompt = this.getSystemPrompt(platform).replace('{INPUT}', text);
|
|
355
|
+
const sanitizedPrompt = prompt.replace(/[^\x00-\x7F]/g, " ").replace(/\s+/g, ' ').trim();
|
|
356
|
+
const result = await fallbackModel.generateContent(sanitizedPrompt);
|
|
357
|
+
const response = await result.response;
|
|
358
|
+
return this.cleanAIResponse(response.text().trim());
|
|
359
|
+
}
|
|
360
|
+
throw error;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
async convertWithCopilot(text, platform = null) {
|
|
365
|
+
if (!this.copilot) {
|
|
366
|
+
throw new Error('GitHub Copilot not configured');
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
const model = this.getModelForProvider('copilot');
|
|
370
|
+
|
|
371
|
+
const response = await this.copilot.chat.completions.create({
|
|
372
|
+
model: model,
|
|
373
|
+
messages: [
|
|
374
|
+
{ role: 'system', content: this.getSystemPrompt(platform) },
|
|
375
|
+
{ role: 'user', content: text }
|
|
376
|
+
],
|
|
377
|
+
temperature: 0.3,
|
|
378
|
+
max_tokens: 500,
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
let convertedText = response.choices[0].message.content.trim();
|
|
382
|
+
convertedText = this.cleanAIResponse(convertedText);
|
|
383
|
+
|
|
384
|
+
return convertedText;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
async convertWithClaude(text, platform = null) {
|
|
388
|
+
if (!this.claude) {
|
|
389
|
+
throw new Error('Claude not configured');
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
const model = this.getModelForProvider('claude');
|
|
393
|
+
const systemPrompt = this.getSystemPrompt(platform);
|
|
394
|
+
|
|
395
|
+
const response = await this.claude.messages.create({
|
|
396
|
+
model: model,
|
|
397
|
+
max_tokens: 500,
|
|
398
|
+
system: systemPrompt,
|
|
399
|
+
messages: [
|
|
400
|
+
{ role: 'user', content: text }
|
|
401
|
+
],
|
|
402
|
+
temperature: 0.3,
|
|
403
|
+
});
|
|
404
|
+
|
|
405
|
+
let convertedText = response.content[0].text.trim();
|
|
406
|
+
convertedText = this.cleanAIResponse(convertedText);
|
|
407
|
+
|
|
408
|
+
return convertedText;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
async convertWithGroq(text, platform = null) {
|
|
412
|
+
if (!this.groq) {
|
|
413
|
+
throw new Error('Groq not configured');
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
const model = this.getModelForProvider('groq');
|
|
417
|
+
|
|
418
|
+
const response = await this.groq.chat.completions.create({
|
|
419
|
+
model: model,
|
|
420
|
+
messages: [
|
|
421
|
+
{ role: 'system', content: this.getSystemPrompt(platform) },
|
|
422
|
+
{ role: 'user', content: text }
|
|
423
|
+
],
|
|
424
|
+
temperature: 0.3,
|
|
425
|
+
max_tokens: 500,
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
let convertedText = response.choices[0].message.content.trim();
|
|
429
|
+
convertedText = this.cleanAIResponse(convertedText);
|
|
430
|
+
|
|
431
|
+
return convertedText;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
async convertWithCohere(text, platform = null) {
|
|
435
|
+
if (!this.cohere) {
|
|
436
|
+
throw new Error('Cohere not configured');
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
const model = this.getModelForProvider('cohere');
|
|
440
|
+
|
|
441
|
+
const response = await this.cohere.chat.completions.create({
|
|
442
|
+
model: model,
|
|
443
|
+
messages: [
|
|
444
|
+
{ role: 'system', content: this.getSystemPrompt(platform) },
|
|
445
|
+
{ role: 'user', content: text }
|
|
446
|
+
],
|
|
447
|
+
temperature: 0.3,
|
|
448
|
+
max_tokens: 500,
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
let convertedText = response.choices[0].message.content.trim();
|
|
452
|
+
convertedText = this.cleanAIResponse(convertedText);
|
|
453
|
+
|
|
454
|
+
return convertedText;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
async convertWithMistral(text, platform = null) {
|
|
458
|
+
if (!this.mistral) {
|
|
459
|
+
throw new Error('Mistral AI not configured');
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
const model = this.getModelForProvider('mistral');
|
|
463
|
+
|
|
464
|
+
const response = await this.mistral.chat.completions.create({
|
|
465
|
+
model: model,
|
|
466
|
+
messages: [
|
|
467
|
+
{ role: 'system', content: this.getSystemPrompt(platform) },
|
|
468
|
+
{ role: 'user', content: text }
|
|
469
|
+
],
|
|
470
|
+
temperature: 0.3,
|
|
471
|
+
max_tokens: 500,
|
|
472
|
+
});
|
|
473
|
+
|
|
474
|
+
let convertedText = response.choices[0].message.content.trim();
|
|
475
|
+
convertedText = this.cleanAIResponse(convertedText);
|
|
476
|
+
|
|
477
|
+
return convertedText;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
// Clean up AI responses - remove markdown, explanations, etc.
|
|
481
|
+
cleanAIResponse(text) {
|
|
482
|
+
// Remove markdown code blocks
|
|
483
|
+
text = text.replace(/```[\s\S]*?```/g, '').trim();
|
|
484
|
+
text = text.replace(/```/g, '').trim();
|
|
485
|
+
|
|
486
|
+
// Remove any lines that look like explanations (starting with explanatory text)
|
|
487
|
+
const lines = text.split('\n');
|
|
488
|
+
const cleanedLines = lines.filter(line => {
|
|
489
|
+
const trimmed = line.trim();
|
|
490
|
+
if (!trimmed) return false;
|
|
491
|
+
|
|
492
|
+
// Keep lines that are commands or WAIT
|
|
493
|
+
if (trimmed.startsWith('launch ')) return true;
|
|
494
|
+
if (trimmed.startsWith('kill ')) return true;
|
|
495
|
+
if (trimmed === 'home') return true;
|
|
496
|
+
if (trimmed === 'back') return true;
|
|
497
|
+
if (trimmed.startsWith('url ')) return true;
|
|
498
|
+
if (trimmed.startsWith('click ')) return true;
|
|
499
|
+
if (trimmed.startsWith('tap ')) return true;
|
|
500
|
+
if (trimmed.startsWith('longpress ')) return true;
|
|
501
|
+
if (trimmed.startsWith('swipe ')) return true;
|
|
502
|
+
if (trimmed.startsWith('WAIT ')) return true;
|
|
503
|
+
if (trimmed.startsWith('screenshot')) return true;
|
|
504
|
+
if (trimmed.startsWith('restart')) return true;
|
|
505
|
+
if (trimmed.startsWith('rotate ')) return true;
|
|
506
|
+
if (trimmed.startsWith('darkmode')) return true;
|
|
507
|
+
if (trimmed.startsWith('lightmode')) return true;
|
|
508
|
+
if (trimmed.startsWith('airplane ')) return true;
|
|
509
|
+
if (trimmed.startsWith('wifi ')) return true;
|
|
510
|
+
if (trimmed.startsWith('volume ')) return true;
|
|
511
|
+
if (trimmed === 'getLocators') return true;
|
|
512
|
+
if (trimmed === 'recent') return true;
|
|
513
|
+
if (trimmed === 'notifications') return true;
|
|
514
|
+
if (trimmed === 'quicksettings') return true;
|
|
515
|
+
|
|
516
|
+
// If it doesn't start with a known command, it might be text to type
|
|
517
|
+
// Check if previous line was a command that expects text input
|
|
518
|
+
return true; // For now, include it (could be text to type)
|
|
519
|
+
});
|
|
520
|
+
|
|
521
|
+
return cleanedLines.join('\n').trim();
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
getAvailableProviders() {
|
|
525
|
+
const available = [];
|
|
526
|
+
|
|
527
|
+
if (this.openai) available.push({ id: 'openai', name: 'OpenAI', icon: '๐ค' });
|
|
528
|
+
if (this.gemini) available.push({ id: 'gemini', name: 'Google Gemini', icon: 'โจ' });
|
|
529
|
+
if (this.claude) available.push({ id: 'claude', name: 'Anthropic Claude', icon: '๐ง ' });
|
|
530
|
+
if (this.copilot) available.push({ id: 'copilot', name: 'GitHub Copilot', icon: '๐' });
|
|
531
|
+
if (this.groq) available.push({ id: 'groq', name: 'Groq', icon: 'โก' });
|
|
532
|
+
if (this.cohere) available.push({ id: 'cohere', name: 'Cohere', icon: '๐' });
|
|
533
|
+
if (this.mistral) available.push({ id: 'mistral', name: 'Mistral AI', icon: '๐ฌ๏ธ' });
|
|
534
|
+
|
|
535
|
+
return available;
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
setProvider(provider, model = null) {
|
|
539
|
+
const available = this.getAvailableProviders().map(p => p.id);
|
|
540
|
+
if (available.includes(provider)) {
|
|
541
|
+
this.provider = provider;
|
|
542
|
+
if (model) {
|
|
543
|
+
this.model = model;
|
|
544
|
+
}
|
|
545
|
+
return true;
|
|
546
|
+
}
|
|
547
|
+
return false;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
getCurrentProvider() {
|
|
551
|
+
return {
|
|
552
|
+
id: this.provider,
|
|
553
|
+
name: this.getProviderName(this.provider),
|
|
554
|
+
model: this.model || this.getModelForProvider(this.provider),
|
|
555
|
+
available: this.getAvailableProviders(),
|
|
556
|
+
};
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
getProviderName(providerId) {
|
|
560
|
+
const names = {
|
|
561
|
+
openai: 'OpenAI',
|
|
562
|
+
gemini: 'Google Gemini',
|
|
563
|
+
claude: 'Anthropic Claude',
|
|
564
|
+
copilot: 'GitHub Copilot',
|
|
565
|
+
groq: 'Groq',
|
|
566
|
+
cohere: 'Cohere',
|
|
567
|
+
mistral: 'Mistral AI',
|
|
568
|
+
};
|
|
569
|
+
return names[providerId] || 'Unknown';
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
// Clear in-memory cache (no persistent storage)
|
|
573
|
+
clearCache() {
|
|
574
|
+
const size = this.requestCache.size;
|
|
575
|
+
this.requestCache.clear();
|
|
576
|
+
console.log(`๐งน Cleared ${size} cached responses from memory`);
|
|
577
|
+
return size;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
// Get cache statistics
|
|
581
|
+
getCacheStats() {
|
|
582
|
+
return {
|
|
583
|
+
size: this.requestCache.size,
|
|
584
|
+
maxSize: 50,
|
|
585
|
+
expiryMs: this.cacheExpiry,
|
|
586
|
+
storageType: 'memory-only',
|
|
587
|
+
persistentStorage: false,
|
|
588
|
+
};
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
module.exports = AIProviderManager;
|