libre-webui 0.17.0 โ 0.18.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/backend/dist/db.d.ts.map +1 -1
- package/backend/dist/db.js +150 -6
- package/backend/dist/db.js.map +1 -1
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +15 -10
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/middleware/auth.d.ts.map +1 -1
- package/backend/dist/middleware/auth.js +35 -3
- package/backend/dist/middleware/auth.js.map +1 -1
- package/backend/dist/models/userModel.d.ts +23 -0
- package/backend/dist/models/userModel.d.ts.map +1 -1
- package/backend/dist/models/userModel.js +89 -24
- package/backend/dist/models/userModel.js.map +1 -1
- package/backend/dist/routes/agentCli.d.ts.map +1 -1
- package/backend/dist/routes/agentCli.js +2 -0
- package/backend/dist/routes/agentCli.js.map +1 -1
- package/backend/dist/routes/auth.d.ts.map +1 -1
- package/backend/dist/routes/auth.js +46 -33
- package/backend/dist/routes/auth.js.map +1 -1
- package/backend/dist/routes/chat.d.ts.map +1 -1
- package/backend/dist/routes/chat.js +3 -1
- package/backend/dist/routes/chat.js.map +1 -1
- package/backend/dist/routes/documents.d.ts.map +1 -1
- package/backend/dist/routes/documents.js +49 -41
- package/backend/dist/routes/documents.js.map +1 -1
- package/backend/dist/routes/embeddings.js +2 -2
- package/backend/dist/routes/embeddings.js.map +1 -1
- package/backend/dist/routes/huggingfaceHub.d.ts.map +1 -1
- package/backend/dist/routes/huggingfaceHub.js +3 -1
- package/backend/dist/routes/huggingfaceHub.js.map +1 -1
- package/backend/dist/routes/imageGen.d.ts.map +1 -1
- package/backend/dist/routes/imageGen.js +2 -0
- package/backend/dist/routes/imageGen.js.map +1 -1
- package/backend/dist/routes/media.d.ts +3 -0
- package/backend/dist/routes/media.d.ts.map +1 -0
- package/backend/dist/routes/media.js +429 -0
- package/backend/dist/routes/media.js.map +1 -0
- package/backend/dist/routes/ollama.d.ts.map +1 -1
- package/backend/dist/routes/ollama.js +15 -83
- package/backend/dist/routes/ollama.js.map +1 -1
- package/backend/dist/routes/personas.d.ts.map +1 -1
- package/backend/dist/routes/personas.js +2 -0
- package/backend/dist/routes/personas.js.map +1 -1
- package/backend/dist/routes/plugins.d.ts.map +1 -1
- package/backend/dist/routes/plugins.js +28 -0
- package/backend/dist/routes/plugins.js.map +1 -1
- package/backend/dist/routes/systemDiagnostics.d.ts +3 -0
- package/backend/dist/routes/systemDiagnostics.d.ts.map +1 -0
- package/backend/dist/routes/systemDiagnostics.js +49 -0
- package/backend/dist/routes/systemDiagnostics.js.map +1 -0
- package/backend/dist/routes/tts.d.ts.map +1 -1
- package/backend/dist/routes/tts.js +4 -0
- package/backend/dist/routes/tts.js.map +1 -1
- package/backend/dist/routes/users.d.ts.map +1 -1
- package/backend/dist/routes/users.js +58 -0
- package/backend/dist/routes/users.js.map +1 -1
- package/backend/dist/routes/work.d.ts.map +1 -1
- package/backend/dist/routes/work.js +84 -0
- package/backend/dist/routes/work.js.map +1 -1
- package/backend/dist/services/authService.d.ts +15 -9
- package/backend/dist/services/authService.d.ts.map +1 -1
- package/backend/dist/services/authService.js +34 -29
- package/backend/dist/services/authService.js.map +1 -1
- package/backend/dist/services/chatRequestService.d.ts +8 -2
- package/backend/dist/services/chatRequestService.d.ts.map +1 -1
- package/backend/dist/services/chatRequestService.js +30 -3
- package/backend/dist/services/chatRequestService.js.map +1 -1
- package/backend/dist/services/documentService.d.ts +11 -10
- package/backend/dist/services/documentService.d.ts.map +1 -1
- package/backend/dist/services/documentService.js +62 -54
- package/backend/dist/services/documentService.js.map +1 -1
- package/backend/dist/services/encryptionService.d.ts.map +1 -1
- package/backend/dist/services/encryptionService.js +18 -8
- package/backend/dist/services/encryptionService.js.map +1 -1
- package/backend/dist/services/galleryService.d.ts +23 -1
- package/backend/dist/services/galleryService.d.ts.map +1 -1
- package/backend/dist/services/galleryService.js +125 -8
- package/backend/dist/services/galleryService.js.map +1 -1
- package/backend/dist/services/mediaGenerationJobService.d.ts +25 -0
- package/backend/dist/services/mediaGenerationJobService.d.ts.map +1 -0
- package/backend/dist/services/mediaGenerationJobService.js +82 -0
- package/backend/dist/services/mediaGenerationJobService.js.map +1 -0
- package/backend/dist/services/pluginAudioGenerationService.d.ts +34 -0
- package/backend/dist/services/pluginAudioGenerationService.d.ts.map +1 -0
- package/backend/dist/services/pluginAudioGenerationService.js +211 -0
- package/backend/dist/services/pluginAudioGenerationService.js.map +1 -0
- package/backend/dist/services/pluginCapabilityRegistryService.d.ts.map +1 -1
- package/backend/dist/services/pluginCapabilityRegistryService.js +6 -0
- package/backend/dist/services/pluginCapabilityRegistryService.js.map +1 -1
- package/backend/dist/services/pluginEmbeddingService.d.ts +2 -0
- package/backend/dist/services/pluginEmbeddingService.d.ts.map +1 -1
- package/backend/dist/services/pluginEmbeddingService.js +66 -35
- package/backend/dist/services/pluginEmbeddingService.js.map +1 -1
- package/backend/dist/services/pluginImageGenerationService.d.ts +2 -0
- package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
- package/backend/dist/services/pluginImageGenerationService.js +63 -38
- package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
- package/backend/dist/services/pluginService.d.ts +38 -1
- package/backend/dist/services/pluginService.d.ts.map +1 -1
- package/backend/dist/services/pluginService.js +390 -69
- package/backend/dist/services/pluginService.js.map +1 -1
- package/backend/dist/services/pluginTTSService.d.ts +2 -0
- package/backend/dist/services/pluginTTSService.d.ts.map +1 -1
- package/backend/dist/services/pluginTTSService.js +27 -2
- package/backend/dist/services/pluginTTSService.js.map +1 -1
- package/backend/dist/services/pluginUsageService.d.ts +82 -0
- package/backend/dist/services/pluginUsageService.d.ts.map +1 -0
- package/backend/dist/services/pluginUsageService.js +238 -0
- package/backend/dist/services/pluginUsageService.js.map +1 -0
- package/backend/dist/services/pluginVideoGenerationService.d.ts +45 -0
- package/backend/dist/services/pluginVideoGenerationService.d.ts.map +1 -0
- package/backend/dist/services/pluginVideoGenerationService.js +198 -0
- package/backend/dist/services/pluginVideoGenerationService.js.map +1 -0
- package/backend/dist/services/preferencesService.d.ts.map +1 -1
- package/backend/dist/services/preferencesService.js +15 -1
- package/backend/dist/services/preferencesService.js.map +1 -1
- package/backend/dist/services/registrationPolicy.d.ts +5 -0
- package/backend/dist/services/registrationPolicy.d.ts.map +1 -0
- package/backend/dist/services/registrationPolicy.js +21 -0
- package/backend/dist/services/registrationPolicy.js.map +1 -0
- package/backend/dist/services/simpleGitHubOAuth.d.ts.map +1 -1
- package/backend/dist/services/simpleGitHubOAuth.js +8 -12
- package/backend/dist/services/simpleGitHubOAuth.js.map +1 -1
- package/backend/dist/services/simpleHuggingFaceOAuth.d.ts.map +1 -1
- package/backend/dist/services/simpleHuggingFaceOAuth.js +7 -12
- package/backend/dist/services/simpleHuggingFaceOAuth.js.map +1 -1
- package/backend/dist/services/systemDiagnosticsService.d.ts +117 -0
- package/backend/dist/services/systemDiagnosticsService.d.ts.map +1 -0
- package/backend/dist/services/systemDiagnosticsService.js +326 -0
- package/backend/dist/services/systemDiagnosticsService.js.map +1 -0
- package/backend/dist/services/turnstileService.d.ts +2 -1
- package/backend/dist/services/turnstileService.d.ts.map +1 -1
- package/backend/dist/services/turnstileService.js +28 -2
- package/backend/dist/services/turnstileService.js.map +1 -1
- package/backend/dist/services/workModelProviderService.d.ts +3 -0
- package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
- package/backend/dist/services/workModelProviderService.js +37 -4
- package/backend/dist/services/workModelProviderService.js.map +1 -1
- package/backend/dist/services/workPreviewProxyService.d.ts +27 -0
- package/backend/dist/services/workPreviewProxyService.d.ts.map +1 -0
- package/backend/dist/services/workPreviewProxyService.js +514 -0
- package/backend/dist/services/workPreviewProxyService.js.map +1 -0
- package/backend/dist/services/workRuntimeService.d.ts +22 -1
- package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
- package/backend/dist/services/workRuntimeService.js +287 -8
- package/backend/dist/services/workRuntimeService.js.map +1 -1
- package/backend/dist/storage.d.ts.map +1 -1
- package/backend/dist/storage.js +3 -3
- package/backend/dist/storage.js.map +1 -1
- package/backend/dist/types/index.d.ts +77 -1
- package/backend/dist/types/index.d.ts.map +1 -1
- package/backend/dist/types/index.js.map +1 -1
- package/backend/dist/types/work.d.ts +31 -0
- package/backend/dist/types/work.d.ts.map +1 -1
- package/backend/dist/utils/chatDocumentContext.d.ts +1 -1
- package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
- package/backend/dist/utils/chatDocumentContext.js +4 -4
- package/backend/dist/utils/chatDocumentContext.js.map +1 -1
- package/backend/dist/utils/pluginDefinitionTrust.js +1 -1
- package/backend/dist/utils/pluginValidation.d.ts +3 -2
- package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
- package/backend/dist/utils/pluginValidation.js +30 -2
- package/backend/dist/utils/pluginValidation.js.map +1 -1
- package/backend/dist/utils/workGit.d.ts +14 -0
- package/backend/dist/utils/workGit.d.ts.map +1 -0
- package/backend/dist/utils/workGit.js +207 -0
- package/backend/dist/utils/workGit.js.map +1 -0
- package/backend/dist/websocketServer.d.ts +1 -0
- package/backend/dist/websocketServer.d.ts.map +1 -1
- package/backend/dist/websocketServer.js +108 -24
- package/backend/dist/websocketServer.js.map +1 -1
- package/backend/dist/workTerminalServer.d.ts.map +1 -1
- package/backend/dist/workTerminalServer.js +3 -1
- package/backend/dist/workTerminalServer.js.map +1 -1
- package/backend/package.json +1 -1
- package/frontend/dist/assets/index-ChhWhug2.css +1 -0
- package/frontend/dist/assets/index-CmZntyR1.js +3 -0
- package/frontend/dist/index.html +26 -6
- package/frontend/dist/js/ArtifactContainer-CBAbdoIJ.js +1 -0
- package/frontend/dist/js/{ArtifactDemoPage-B4qsvUnF.js โ ArtifactDemoPage-BWN0MWCx.js} +1 -1
- package/frontend/dist/js/ArtifactSlideOutPanel-D-AvYkfk.js +1 -0
- package/frontend/dist/js/ChatPage-w2FkF_fE.js +16 -0
- package/frontend/dist/js/FirstTimeSetup-CzBxl7UH.js +1 -0
- package/frontend/dist/js/GalleryPage-Cv8pniRW.js +1 -0
- package/frontend/dist/js/HomePage-Vyj4ndU4.js +1 -0
- package/frontend/dist/js/LibreClawPage-CYhLgQB-.js +1 -0
- package/frontend/dist/js/{ModelManagerModals-DMoEav1l.js โ ModelManagerModals-C2rwHd01.js} +1 -1
- package/frontend/dist/js/ModelSelector-D7kDjZV9.js +1 -0
- package/frontend/dist/js/ModelsPage-BnUddkrs.js +2 -0
- package/frontend/dist/js/PersonasPage-BL5XlrEm.js +13 -0
- package/frontend/dist/js/PluginUsagePage-BXqweCCs.js +1 -0
- package/frontend/dist/js/{RichMessageContent-BJ49VN9j.js โ RichMessageContent-nAEaPTpH.js} +2 -2
- package/frontend/dist/js/SettingsModal-DZYCI5-y.js +1 -0
- package/frontend/dist/js/SystemPage-jdHYfn9A.js +1 -0
- package/frontend/dist/js/UserManagementPage-BpOnt6os.js +1 -0
- package/frontend/dist/js/WorkPage-DAp1T1dl.js +5 -0
- package/frontend/dist/js/api-BCqWXjZI.js +19 -0
- package/frontend/dist/js/appStore-CDM6V5ny.js +2 -0
- package/frontend/dist/js/ar-DS8gs8WK.js +2 -0
- package/frontend/dist/js/{authStore-mOYH_AXI.js โ authStore-Bl5ofD_h.js} +3 -3
- package/frontend/dist/js/bn-CrMPJwTR.js +2 -0
- package/frontend/dist/js/cs-BL116Ezu.js +2 -0
- package/frontend/dist/js/da-TDNaKzqy.js +2 -0
- package/frontend/dist/js/de-DkIqdAB5.js +2 -0
- package/frontend/dist/js/es-CHRXt6Fd.js +2 -0
- package/frontend/dist/js/{estree-0vwU39qX.js โ estree-BFya-bSu.js} +1 -1
- package/frontend/dist/js/fr-8715yUKq.js +2 -0
- package/frontend/dist/js/hi-C2O08SBU.js +2 -0
- package/frontend/dist/js/{html-CApr2Bvi.js โ html-DJot0Wwf.js} +1 -1
- package/frontend/dist/js/id-Dq7UXUEV.js +2 -0
- package/frontend/dist/js/is-B3dbbhSl.js +2 -0
- package/frontend/dist/js/it-CLSuu2K7.js +2 -0
- package/frontend/dist/js/ja-CthrqyCR.js +2 -0
- package/frontend/dist/js/ko-BJvFDJ82.js +2 -0
- package/frontend/dist/js/{markdown-C78Qc6xu.js โ markdown-CXwWsPYG.js} +1 -1
- package/frontend/dist/js/ms-QV0202Mj.js +2 -0
- package/frontend/dist/js/nl-Dob1m1pV.js +2 -0
- package/frontend/dist/js/pl-urfOKnYI.js +2 -0
- package/frontend/dist/js/pt-D52Xkpi0.js +2 -0
- package/frontend/dist/js/ru-CwnW9Xe2.js +2 -0
- package/frontend/dist/js/{standalone-DmLfI4Qj.js โ standalone-C0NjJpWr.js} +1 -1
- package/frontend/dist/js/sv-BNclj-Fo.js +2 -0
- package/frontend/dist/js/th-BlQ4PL57.js +2 -0
- package/frontend/dist/js/tr-B80aZ1px.js +2 -0
- package/frontend/dist/js/{typescript-Bcq62agC.js โ typescript-d0TUM2-0.js} +1 -1
- package/frontend/dist/js/ui-vendor-ChfdHf5M.js +177 -0
- package/frontend/dist/js/uk-DZuuaI56.js +2 -0
- package/frontend/dist/js/vi-Bg42fPfF.js +2 -0
- package/frontend/dist/js/zh-BSt87zs6.js +2 -0
- package/package.json +3 -3
- package/plugins/openrouter.json +89 -0
- package/backend/dist/services/systemSettingsService.d.ts +0 -12
- package/backend/dist/services/systemSettingsService.d.ts.map +0 -1
- package/backend/dist/services/systemSettingsService.js +0 -70
- package/backend/dist/services/systemSettingsService.js.map +0 -1
- package/frontend/dist/assets/index-BqI0kezz.css +0 -1
- package/frontend/dist/assets/index-CRC6g6bL.js +0 -3
- package/frontend/dist/js/ArtifactContainer-Cdy-973y.js +0 -1
- package/frontend/dist/js/ArtifactSlideOutPanel-CmKgQ4eD.js +0 -1
- package/frontend/dist/js/ChatPage-CYT69oBR.js +0 -16
- package/frontend/dist/js/FirstTimeSetup-C8LdLP5J.js +0 -1
- package/frontend/dist/js/GalleryPage-Bm89pnS8.js +0 -1
- package/frontend/dist/js/HomePage-CeCYnMUG.js +0 -1
- package/frontend/dist/js/LibreClawPage-DGMEV6dm.js +0 -1
- package/frontend/dist/js/ModelSelector-DXPdGdQ_.js +0 -1
- package/frontend/dist/js/ModelsPage-D-FIy2x-.js +0 -2
- package/frontend/dist/js/PersonasPage-CIrEVFo5.js +0 -13
- package/frontend/dist/js/SettingsModal-CxtOXPY7.js +0 -1
- package/frontend/dist/js/UserManagementPage-BfyYGGFQ.js +0 -1
- package/frontend/dist/js/WorkPage-C7bW6Hxx.js +0 -4
- package/frontend/dist/js/api-DCD41-l9.js +0 -19
- package/frontend/dist/js/appStore-Bw-8Exsx.js +0 -2
- package/frontend/dist/js/ar-BAHlIvy0.js +0 -2
- package/frontend/dist/js/bn-BxquDVbd.js +0 -2
- package/frontend/dist/js/cs-C4DoKzRm.js +0 -2
- package/frontend/dist/js/da-CFslpGTw.js +0 -2
- package/frontend/dist/js/de-ChudoRh2.js +0 -2
- package/frontend/dist/js/es-B36fefE-.js +0 -2
- package/frontend/dist/js/fr-BSVeTM5W.js +0 -2
- package/frontend/dist/js/hi-BGoFbl5V.js +0 -2
- package/frontend/dist/js/id-BfYs2p_j.js +0 -2
- package/frontend/dist/js/is-DZ1MS-5A.js +0 -2
- package/frontend/dist/js/it-CXtrPCG1.js +0 -2
- package/frontend/dist/js/ja-FPJ_NK_y.js +0 -2
- package/frontend/dist/js/ko-DVwD4ZZF.js +0 -2
- package/frontend/dist/js/ms-PKPP0RX3.js +0 -2
- package/frontend/dist/js/nl-DWM5HJZ8.js +0 -2
- package/frontend/dist/js/pl-B9va8Tuf.js +0 -2
- package/frontend/dist/js/pt-P0IQi-Zr.js +0 -2
- package/frontend/dist/js/ru-Ca2bxYnc.js +0 -2
- package/frontend/dist/js/sv-DI4RDwyZ.js +0 -2
- package/frontend/dist/js/th-DN0bDS9d.js +0 -2
- package/frontend/dist/js/tr-ChqMv5Q4.js +0 -2
- package/frontend/dist/js/ui-vendor-DohPFHDW.js +0 -177
- package/frontend/dist/js/uk-Cr51h_XQ.js +0 -2
- package/frontend/dist/js/useBaseQuery-BAOlhjar.js +0 -1
- package/frontend/dist/js/useQuery-CcRqxveh.js +0 -1
- package/frontend/dist/js/vi-D4OhoVMH.js +0 -2
- package/frontend/dist/js/zh-Bvau7hlR.js +0 -2
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/authStore-Bl5ofD_h.js","js/rolldown-runtime-QTnfLwEv.js","js/router-vendor-BjDI9mRe.js","js/markdown-core-GI9BPwrB.js","js/ui-vendor-ChfdHf5M.js","js/utils-vendor-Cbaj0BC5.js","js/demoMode-BhEpMVh5.js","js/logger-DbNs3-DK.js","js/utils-DmZD5uA3.js","js/appStore-CDM6V5ny.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{n as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,p as n}from"./router-vendor-BjDI9mRe.js";import{a as r}from"./utils-vendor-Cbaj0BC5.js";import{n as i}from"./demoMode-BhEpMVh5.js";import{n as a,t as o}from"./logger-DbNs3-DK.js";var s=o(`config`),c=window.location.protocol===`file:`?`http://localhost:3001/api`:`${window.location.origin}/api`,l=a(),u=()=>{l&&(s.debug(`API_BASE_URL configured as:`,c),s.debug(`Window location:`,window.location),s.debug(`Environment variables:`,{BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_APP_VERSION:`0.18.0`}))},d=o(`api`);u(),d.debug(`User agent:`,navigator.userAgent),d.debug(`Demo mode detected:`,i());var f=(e,t=!0)=>new Promise(n=>{setTimeout(()=>{n({success:t,data:e,error:t?void 0:`Demo mode: Backend not available`})},500)}),p=r.create({baseURL:c,timeout:3e5});p.interceptors.request.use(e=>{let t=localStorage.getItem(`auth-token`);return t&&(e.headers.Authorization=`Bearer ${t}`),e},e=>Promise.reject(e)),p.interceptors.response.use(e=>e,e=>{if(e.response?.status===401){d.warn(`Session expired or unauthorized, logging out...`),localStorage.removeItem(`auth-token`),t(async()=>{let{useAuthStore:e}=await import(`./authStore-Bl5ofD_h.js`).then(e=>e.t);return{useAuthStore:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])).then(({useAuthStore:e})=>{e.getState().logout()});let e=window.location.protocol===`file:`;return(e?window.location.hash:window.location.pathname).includes(`/login`)||(window.location.href=e?`#/login`:`/login`),Promise.reject(Error(`Session expired`))}return d.error(`API Error:`,e),Promise.reject(e)});var ee={getModels:()=>i()?f([]):p.get(`/agent-clis/models`).then(e=>e.data)},m=`0.18.0`,h={login:e=>i()?f({user:{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,signupEnabled:!0,version:m}}):p.post(`/auth/login`,e).then(e=>e.data),signup:e=>i()?f({user:{id:`demo-user-new`,username:e.username,email:e.email||``,role:`user`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token-new`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,signupEnabled:!0,version:m,turnstile:{enabled:!1}}}):p.post(`/auth/signup`,e).then(e=>e.data),logout:()=>i()?f(void 0):p.post(`/auth/logout`).then(e=>e.data),getSystemInfo:()=>(d.debug(`getSystemInfo called, demo mode:`,i()),i()?f({requiresAuth:!0,hasUsers:!0,userCount:1,signupEnabled:!0,version:m,turnstile:{enabled:!1}}):(d.debug(`Making API call to:`,c+`/auth/system-info`),d.debug(`Full URL from:`,window.location.origin,`-> API:`,c+`/auth/system-info`),p.get(`/auth/system-info`).then(e=>(d.debug(`getSystemInfo response:`,e.data),e.data)).catch(e=>{throw d.debug(`getSystemInfo error:`,e),e.response&&(d.debug(`Error response data:`,e.response.data),d.debug(`Error status:`,e.response.status),d.debug(`Error headers:`,e.response.headers)),e.request&&d.debug(`Network error - no response received:`,e.request),d.debug(`Error config:`,e.config),e}))),verifyToken:()=>i()?f({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.get(`/auth/verify`).then(e=>e.data),getEncryptionKey:()=>i()?f({encryptionKey:`demo-encryption-key-not-real`}):p.get(`/auth/encryption-key`).then(e=>e.data)},te={getUsers:()=>i()?f([{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}]):p.get(`/users`).then(e=>e.data),createUser:e=>i()?f({id:`new-user-`+Date.now(),username:e.username,email:e.email,role:e.role,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.post(`/users`,e).then(e=>e.data),updateUser:(e,t)=>i()?f({id:e,username:t.username||`demo`,email:t.email||`demo@example.com`,role:t.role||`user`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.patch(`/users/${e}`,t).then(e=>e.data),deleteUser:e=>i()?f(void 0):p.delete(`/users/${e}`).then(e=>e.data),getPendingApprovals:()=>i()?f({count:0,latestCreatedAt:null}):p.get(`/users/pending-approvals`).then(e=>e.data),approveUser:e=>i()?f({id:e,username:`demo-user`,email:`demo@example.com`,role:`user`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.patch(`/users/${e}/approve`).then(e=>e.data),updateMyAvatar:e=>i()?f({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,avatar:e,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):p.patch(`/users/me/avatar`,{avatar:e}).then(e=>e.data)},g=[{name:`llama3.2:3b`,size:2048e6,digest:`demo-digest-1`,modified_at:new Date().toISOString(),details:{format:`gguf`,family:`llama`,families:[`llama`],parameter_size:`3B`,quantization_level:`Q4_0`}},{name:`qwen2.5:7b`,size:4096e6,digest:`demo-digest-2`,modified_at:new Date().toISOString(),details:{format:`gguf`,family:`qwen`,families:[`qwen`],parameter_size:`7B`,quantization_level:`Q4_0`}}],_=()=>[{id:`demo-session-1`,title:`Demo Chat Session`,model:g[0].name,providerType:`ollama`,providerId:null,messages:[{id:`demo-msg-1`,role:`user`,content:`Hello! Can you tell me about this demo?`,timestamp:Date.now()},{id:`demo-msg-2`,role:`assistant`,content:`This is a demo of Libre WebUI! In a real deployment, I would be powered by Ollama running locally on your machine. This demo shows the beautiful interface and features without the backend connection.`,timestamp:Date.now()}],createdAt:Date.now(),updatedAt:Date.now()}],v=_(),y={theme:{mode:`dark`,adaptToAccent:!1,accent:`blue`,customAccent:`#2563eb`},defaultModel:`llama3.2:3b`,defaultProviderType:`ollama`,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,systemMessage:`You are a helpful assistant.`,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.7},titleSettings:{autoTitle:!1,taskModel:``,taskProviderType:null,taskProviderId:null},showUsername:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}},b={...y,theme:{...y.theme},generationOptions:{...y.generationOptions},embeddingSettings:{...y.embeddingSettings},titleSettings:{...y.titleSettings},backgroundSettings:{...y.backgroundSettings}},ne=()=>b,x=e=>{let t=b.backgroundSettings||y.backgroundSettings;return b={...b,...e,theme:{...b.theme,...e.theme},generationOptions:{...b.generationOptions,...e.generationOptions},embeddingSettings:{...b.embeddingSettings,...e.embeddingSettings},titleSettings:e.titleSettings?{...b.titleSettings||y.titleSettings,...e.titleSettings}:b.titleSettings,backgroundSettings:e.backgroundSettings?{...t,...e.backgroundSettings}:b.backgroundSettings},b},S={getSessions:()=>p.get(`/chat/sessions`).then(e=>e.data),createSession:(e,t,n,r,i)=>p.post(`/chat/sessions`,{model:e,title:t,personaId:n,providerType:r,providerId:i}).then(e=>e.data),getSession:e=>{if(i()){let t=_().find(t=>t.id===e);return t?f(t):Promise.resolve({success:!1,error:`Session not found in demo mode`})}return p.get(`/chat/sessions/${e}`).then(e=>e.data)},updateSession:(e,t)=>{if(i()){let n=v.findIndex(t=>t.id===e),r=v[n];if(r){let e={...r,...t,updatedAt:Date.now()};return v[n]=e,f(e)}return Promise.resolve({success:!1,error:`Session not found in demo mode`})}return p.put(`/chat/sessions/${e}`,t).then(e=>e.data)},deleteSession:e=>i()?f(null):p.delete(`/chat/sessions/${e}`).then(e=>e.data),clearAllSessions:()=>p.delete(`/chat/sessions`).then(e=>e.data),generateTitle:(e,t,n,r,a)=>i()?f({title:n.substring(0,30)+(n.length>30?`...`:``),source:`fallback`,updatedAt:Date.now()}):p.post(`/chat/sessions/${e}/generate-title`,{model:t,message:n,providerType:r,providerId:a}).then(e=>e.data),sendMessage:(e,t,n)=>p.post(`/chat/sessions/${e}/messages`,{content:t,options:n}).then(e=>e.data),saveMessage:(e,t)=>p.post(`/chat/sessions/${e}/messages`,t).then(e=>e.data),updateMessage:(e,t,n)=>i()?f({}):p.put(`/chat/sessions/${e}/messages/${t}`,n).then(e=>e.data),generateChatResponse:(e,t,n)=>p.post(`/chat/sessions/${e}/generate`,{message:t,options:n}).then(e=>e.data),generateChatStreamResponse:(e,t,n)=>({subscribe:async(r,i,a)=>{try{let o=await fetch(`${c}/chat/sessions/${e}/generate/stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({message:t,options:n})});if(!o.ok)throw Error(`HTTP error! status: ${o.status}`);let s=o.body?.getReader();if(!s)throw Error(`No response body reader available`);let l=new TextDecoder,u=``,f=()=>{s.read().then(({done:e,value:t})=>{if(e){a?.();return}u+=l.decode(t,{stream:!0});let n=u.split(`
|
|
3
|
+
`);u=n.pop()||``;for(let e of n){let t=e.trim();if(t.startsWith(`data: `)){let e=t.slice(6);if(e===`[DONE]`){a?.();return}try{let t=JSON.parse(e);if(r(t),t.type===`done`||t.type===`error`){t.type===`error`?i?.(t.error):a?.();return}}catch(e){d.error(`Failed to parse SSE data:`,e)}}}f()}).catch(e=>{i?.(e instanceof Error?e:Error(String(e)))})};return f(),()=>s.cancel()}catch(e){return i?.(e instanceof Error?e:Error(String(e))),()=>{}}}}),getMessageBranches:(e,t)=>i()?f([]):p.get(`/chat/sessions/${e}/messages/${t}/branches`).then(e=>e.data),switchMessageBranch:(e,t,n)=>i()?f({}):p.post(`/chat/sessions/${e}/messages/${t}/branch`,{branchIndex:n}).then(e=>e.data),createMessageBranch:(e,t,n)=>i()?f({}):p.post(`/chat/sessions/${e}/messages/${t}/branches`,{...n}).then(e=>e.data)},C={uploadDocument:(e,t)=>{if(i())return f({id:`demo-doc-`+Date.now(),filename:e.name,fileType:e.name.endsWith(`.pdf`)?`pdf`:`txt`,size:e.size,sessionId:t,uploadedAt:Date.now()});let n=new FormData;return n.append(`document`,e),t&&n.append(`sessionId`,t),p.post(`/documents/upload`,n).then(e=>e.data)},getDocuments:e=>{if(i())return f([]);let t=e?`/documents/session/${e}`:`/documents`;return p.get(t).then(e=>e.data)},getDocument:e=>i()?f({id:e,filename:`demo-document.pdf`,fileType:`pdf`,size:1024,content:`Demo document content...`,uploadedAt:Date.now()}):p.get(`/documents/${e}`).then(e=>e.data),searchDocuments:(e,t,n)=>i()?f([]):p.post(`/documents/search`,{query:e,sessionId:t,limit:n}).then(e=>e.data),deleteDocument:e=>i()?f(void 0):p.delete(`/documents/${e}`).then(e=>e.data),getEmbeddingStatus:()=>i()?f({available:!1,model:`nomic-embed-text`,chunksWithEmbeddings:0,totalChunks:0}):p.get(`/documents/embeddings/status`).then(e=>e.data),regenerateEmbeddings:()=>i()?f(void 0):p.post(`/documents/embeddings/regenerate`).then(e=>e.data)},re={getModels:()=>i()?f([{id:`nomic-embed-text`,name:`nomic-embed-text`,description:`Ollama - Default embedding model`,provider:`ollama`,dimensions:0,isDetectedEmbedding:!0}]):p.get(`/embeddings/models`).then(e=>e.data)},ie={getModels:e=>i()?f([{id:`meta-llama/Llama-3.3-70B-Instruct`,modelId:`meta-llama/Llama-3.3-70B-Instruct`,author:`meta-llama`,downloads:1e6,likes:5e3,tags:[`text-generation`,`llama`],pipeline_tag:`text-generation`,gated:!1}]):p.get(`/huggingface-hub/models`,{params:e}).then(e=>e.data),getTrending:e=>i()?f([]):p.get(`/huggingface-hub/trending`,{params:e}).then(e=>e.data),getModel:(e,t)=>i()?f({id:`${e}/${t}`,modelId:`${e}/${t}`,author:e,downloads:0,likes:0,tags:[],gated:!1}):p.get(`/huggingface-hub/models/${e}/${t}`).then(e=>e.data),getTasks:()=>i()?f([`text-generation`,`text-to-speech`,`text-to-image`]):p.get(`/huggingface-hub/tasks`).then(e=>e.data),clearCache:()=>i()?f(!0):p.post(`/huggingface-hub/cache/clear`).then(e=>e.data),getGgufFiles:(e,t)=>i()?f([{filename:`model-Q4_K_M.gguf`,size:45e8,sizeFormatted:`4.19 GB`,quantization:`Q4_K_M`,url:`https://huggingface.co/${e}/${t}/resolve/main/model-Q4_K_M.gguf`,ollamaCommand:`hf.co/${e}/${t}:Q4_K_M`}]):p.get(`/huggingface-hub/models/${e}/${t}/gguf`).then(e=>e.data),hasGgufFiles:(e,t)=>i()?f({hasGguf:!1,count:0}):p.get(`/huggingface-hub/models/${e}/${t}/has-gguf`).then(e=>e.data)},w=/^data:image\/[a-z0-9][a-z0-9.+-]*(?:;[a-z0-9!#$&^_.+-]+=[^;,]*)*;base64,[a-z0-9+/]+={0,2}$/i,T=/^data:(image\/[a-z0-9][a-z0-9.+-]*)(?:;[a-z0-9!#$&^_.+-]+=[^;,]*)*;base64,/i,E={"image/jpg":`image/jpeg`,"image/x-png":`image/png`},D=new Set([`image/apng`,`image/avif`,`image/bmp`,`image/gif`,`image/heic`,`image/heif`,`image/jpeg`,`image/png`,`image/tiff`,`image/vnd.microsoft.icon`,`image/webp`,`image/x-icon`]);function O(e){if(!e)return null;let t=e.split(`;`,1)[0].trim().toLowerCase(),n=E[t]||t;return D.has(n)?n:null}function k(e,t,n){if(t)return e.find(e=>e.model===t&&(!n||e.plugin===n))}function ae(e,t,n){let r=k(e,t,n);return r||n?r:e[0]}function oe(e,t){return t?.pluginId?e.find(e=>e.id===t.pluginId):(t?.model?e.find(e=>e.models.includes(t.model)):void 0)||e[0]}function se(e){let t=e.b64_json?.trim();if(t)return`data:${O(e.mime_type)||`image/png`};base64,${t}`;let n=e.url?.trim();if(!n)return null;let r=T.exec(n)?.[1];if(w.test(n)&&O(r))return n;try{let e=new URL(n);return e.protocol===`http:`||e.protocol===`https:`?n:null}catch{return null}}function ce(e){switch(T.exec(e.trim())?.[1].toLowerCase()){case`image/jpeg`:case`image/jpg`:return`jpg`;case`image/webp`:return`webp`;case`image/gif`:return`gif`;case`image/avif`:return`avif`;default:return`png`}}function A(e){return`${encodeURIComponent(e.plugin)}::${encodeURIComponent(e.model)}`}function j(e,t,n,r){let i=(e??[]).filter(Boolean);return i.length===0?t||n||r:t&&i.includes(t)?t:n&&i.includes(n)?n:i[0]}var M={getModels:()=>i()?f([{model:`gpt-image-2`,plugin:`openai`,config:{sizes:[`1024x1024`,`1536x1024`,`1024x1536`],default_size:`1024x1024`,qualities:[`auto`,`low`,`medium`,`high`],default_quality:`auto`}}]):p.get(`/image-gen/models`).then(e=>e.data),getPlugins:()=>i()?f([{id:`openai`,name:`OpenAI GPT Image`,models:[`gpt-image-2`,`gpt-image-1.5`,`gpt-image-1`,`gpt-image-1-mini`],config:{sizes:[`1024x1024`,`1536x1024`,`1024x1536`],default_size:`1024x1024`,qualities:[`auto`,`low`,`medium`,`high`],default_quality:`auto`}}]):p.get(`/image-gen/plugins`).then(e=>e.data),getConfig:e=>i()?f({sizes:[`1024x1024`,`1536x1024`,`1024x1536`],default_size:`1024x1024`,qualities:[`auto`,`low`,`medium`,`high`],default_quality:`auto`}):p.get(`/image-gen/config/${e}`).then(e=>e.data),generate:e=>i()?f({images:[{url:`https://placehold.co/1024x1024/purple/white?text=Demo+Image`,revised_prompt:e.prompt}],model:e.model,pluginId:e.pluginId}):p.post(`/image-gen/generate`,e).then(e=>e.data),getGallery:e=>i()?f({images:[],total:0}):p.get(`/image-gen/gallery`,{params:e}).then(e=>e.data),getGalleryImage:e=>i()?f({id:e,userId:`demo`,prompt:`Demo image prompt`,model:`dall-e-3`,imageData:`https://placehold.co/1024x1024/purple/white?text=Demo`,createdAt:Date.now()}):p.get(`/image-gen/gallery/${e}`).then(e=>e.data),deleteGalleryImage:e=>i()?f(void 0):p.delete(`/image-gen/gallery/${e}`).then(e=>e.data)},N={connected:!1,baseUrl:`http://127.0.0.1:8766`,dashboardUrl:`http://127.0.0.1:8766/dashboard`,error:`Libre Claw daemon is not connected in demo mode.`},P={status:()=>i()?f(N):p.get(`/libre-claw/status`).then(e=>e.data),dashboard:()=>i()?f({url:N.dashboardUrl}):p.get(`/libre-claw/dashboard`).then(e=>e.data),currentModel:()=>i()?f({provider:`openrouter`,model:`openrouter/auto`}):p.get(`/libre-claw/config/model`).then(e=>e.data),updateModel:(e,t,n=!1)=>i()?f({provider:e,model:t,persist_global:n}):p.patch(`/libre-claw/config/model`,{provider:e,model:t,persist_global:n}).then(e=>e.data),currentFallback:()=>i()?f({enabled:!1,routes:[]}):p.get(`/libre-claw/config/fallback`).then(e=>e.data),updateFallback:e=>i()?f(e):p.patch(`/libre-claw/config/fallback`,e).then(e=>e.data),updateTheme:(e,t=!0)=>i()?f({theme:e,label:e,persist_global:t}):p.patch(`/libre-claw/config/theme`,{theme:e,persist_global:t}).then(e=>e.data),usage:(e=``,t=250)=>{let n=new URLSearchParams({limit:String(t)});return e&&n.set(`provider`,e),i()?f({summary:{},records:[],text:``}):p.get(`/libre-claw/usage?${n.toString()}`).then(e=>e.data)},listRuns:(e=20)=>i()?f({runs:[]}):p.get(`/libre-claw/runs?limit=${e}`).then(e=>e.data),startRun:e=>{if(i()){let t=new Date().toISOString();return f({run:{run_id:`demo-${Date.now()}`,state:`queued`,title:e.message.slice(0,80)||`Libre Claw demo run`,kind:e.kind||`chat`,provider:e.provider||`openrouter`,model:e.model||`openrouter/auto`,working_directory:``,created_at:t,updated_at:t}})}return p.post(`/libre-claw/runs`,e).then(e=>e.data)},getRun:e=>i()?f({run_id:e}):p.get(`/libre-claw/runs/${encodeURIComponent(e)}`).then(e=>e.data),getEvents:(e,t=0)=>i()?f({events:[]}):p.get(`/libre-claw/runs/${encodeURIComponent(e)}/events?after=${t}`).then(e=>e.data),cancelRun:e=>i()?f({run_id:e,cancelled:!0}):p.post(`/libre-claw/runs/${encodeURIComponent(e)}/cancel`).then(e=>e.data),resolvePermission:(e,t,n)=>i()?f({run_id:e,tool_call_id:t,resolution:n}):p.post(`/libre-claw/runs/${encodeURIComponent(e)}/permissions/${encodeURIComponent(t)}`,{resolution:n}).then(e=>e.data),listAutomations:(e=50)=>i()?f({automations:[]}):p.get(`/libre-claw/automations?limit=${e}`).then(e=>e.data),createAutomation:e=>i()?f({...e,automation_id:`demo-${Date.now()}`}):p.post(`/libre-claw/automations`,e).then(e=>e.data),updateAutomation:(e,t)=>i()?f({...t,automation_id:e}):p.patch(`/libre-claw/automations/${encodeURIComponent(e)}`,t).then(e=>e.data),pauseAutomation:e=>i()?f({automation_id:e,status:`paused`}):p.post(`/libre-claw/automations/${encodeURIComponent(e)}/pause`).then(e=>e.data),resumeAutomation:e=>i()?f({automation_id:e,status:`active`}):p.post(`/libre-claw/automations/${encodeURIComponent(e)}/resume`).then(e=>e.data),runAutomationNow:e=>i()?f({automation_id:e,run:!0}):p.post(`/libre-claw/automations/${encodeURIComponent(e)}/run`).then(e=>e.data),deleteAutomation:e=>i()?f({automation_id:e,deleted:!0}):p.delete(`/libre-claw/automations/${encodeURIComponent(e)}`).then(e=>e.data)},F={getModels:()=>p.get(`/media/models`).then(e=>e.data),generateAudio:e=>p.post(`/media/audio/generate`,e).then(e=>e.data),generateSound:e=>p.post(`/media/sound/generate`,e).then(e=>e.data),generateVideo:e=>p.post(`/media/video/generate`,e).then(e=>e.data),getVideoJob:e=>p.get(`/media/video/jobs/${e}`).then(e=>e.data),getGallery:e=>p.get(`/media/gallery`,{params:e}).then(e=>e.data),deleteGalleryItem:e=>p.delete(`/media/gallery/${e}`).then(e=>e.data),getGalleryContent:e=>p.get(`/media/gallery/${e}/content`,{responseType:`blob`}).then(e=>e.data)},I=(e,t,n)=>{let r=new AbortController,i=localStorage.getItem(`auth-token`);return(async()=>{try{let n=await fetch(e,{headers:{Accept:`text/event-stream`,...i?{Authorization:`Bearer ${i}`}:{}},cache:`no-store`,credentials:`same-origin`,signal:r.signal});if(!n.ok){let e=`Request failed with status ${n.status}`;try{let t=await n.json();typeof t.error==`string`?e=t.error:typeof t.message==`string`&&(e=t.message)}catch{}throw Error(e)}if(!n.body)throw Error(`Response stream is unavailable`);let a=n.body.getReader(),o=new TextDecoder,s=``;try{for(;!r.signal.aborted;){let{done:e,value:n}=await a.read();s+=o.decode(n,{stream:!e});let r=s.split(/\r?\n\r?\n/);s=r.pop()||``;for(let e of r){let n=e.split(/\r?\n/).find(e=>e.startsWith(`data:`));n&&t(JSON.parse(n.slice(5).trim()))}if(e)break}}finally{a.releaseLock()}}catch(e){r.signal.aborted||n(e instanceof Error?e.message:`Connection lost`)}})(),()=>r.abort()},L={checkHealth:()=>i()?f({status:`offline`},!1):p.get(`/ollama/health`).then(e=>e.data),getModels:()=>i()?f(g):p.get(`/ollama/models`).then(e=>e.data),pullModel:e=>i()?f(null,!1):p.post(`/ollama/models/pull`,{name:e}).then(e=>e.data),pullModelStream:(e,t,n,r)=>{if(i()){let e=0,r=setInterval(()=>{e+=Math.random()*20,e>=100?(e=100,t({status:`success`,total:100,completed:100,percent:100}),clearInterval(r),setTimeout(n,500)):t({status:`pulling`,total:100,completed:e,percent:Math.round(e)})},1e3);return()=>clearInterval(r)}return I(`${c}/ollama/pull/stream?${new URLSearchParams({model:e}).toString()}`,e=>{switch(e.type){case`progress`:t({status:typeof e.status==`string`?e.status:`pulling`,digest:typeof e.digest==`string`?e.digest:void 0,total:typeof e.total==`number`?e.total:void 0,completed:typeof e.completed==`number`?e.completed:void 0,percent:typeof e.percent==`number`?e.percent:void 0});break;case`complete`:n();break;case`error`:r(String(e.error||`Model pull failed`));break}},r)},deleteModel:e=>i()?f(null,!1):p.delete(`/ollama/models`,{params:{name:e}}).then(e=>e.data),showModel:(e,t=!1)=>{if(i()){let t=g.find(t=>t.name===e);return f(t||null,!!t)}return p.get(`/ollama/models/show`,{params:{name:e,verbose:t}}).then(e=>e.data)},createModel:e=>i()?f(null,!1):p.post(`/ollama/models`,e).then(e=>e.data),copyModel:(e,t)=>i()?f(null,!1):p.post(`/ollama/models/copy`,{source:e,destination:t}).then(e=>e.data),pushModel:e=>i()?f(null,!1):p.post(`/ollama/models/push`,{name:e}).then(e=>e.data),pullAllModels:()=>i()?f(null,!1):p.post(`/ollama/models/pull-all`).then(e=>e.data),pullAllModelsStream:(e,t,n)=>{if(i()){let n=g,r=0,i=setInterval(()=>{r++,r<=n.length&&e({current:r,total:n.length,modelName:n[r-1]?.name||`demo-model`,status:Math.random()>.1?`success`:`error`,error:Math.random()>.1?void 0:`Demo error`}),r>=n.length&&(clearInterval(i),setTimeout(t,500))},1e3);return}I(`${c}/ollama/models/pull-all/stream`,r=>{switch(r.type){case`progress`:{let t=r.status===`success`||r.status===`error`?r.status:`starting`;e({current:typeof r.current==`number`?r.current:0,total:typeof r.total==`number`?r.total:0,modelName:typeof r.modelName==`string`?r.modelName:`unknown`,status:t,error:typeof r.error==`string`?r.error:void 0});break}case`complete`:t();break;case`error`:n(String(r.error||`Model update failed`));break}},n)},generateEmbeddings:e=>i()?f({embeddings:[[]]},!1):p.post(`/ollama/embed`,e).then(e=>e.data),listRunningModels:()=>i()?f([]):p.get(`/ollama/running`).then(e=>e.data),unloadModel:e=>i()?f(null):p.post(`/ollama/models/unload`,{name:e}).then(e=>e.data),unloadAllModels:()=>i()?f(null):p.post(`/ollama/models/unload-all`).then(e=>e.data),getVersion:()=>i()?f({version:`demo-mode`},!1):p.get(`/ollama/version`).then(e=>e.data),chatCompletion:e=>i()?f({message:{content:`Demo response`,role:`assistant`}},!1):p.post(`/ollama/chat`,e).then(e=>e.data),checkBlobExists:e=>i()?Promise.resolve(!1):p.head(`/ollama/blobs/${e}`).then(()=>!0).catch(()=>!1),pushBlob:(e,t)=>i()?f(null,!1):p.post(`/ollama/blobs/${e}`,t,{headers:{"Content-Type":`application/octet-stream`}}).then(e=>e.data),generateLegacyEmbeddings:e=>i()?f({embedding:[]},!1):p.post(`/ollama/embeddings`,e).then(e=>e.data),getLibraryModels:e=>{if(i())return e?.category===`cloud`?f([{name:`gpt-oss:cloud`,description:`Demo cloud model using Ollama cloud naming`,category:`cloud`,sizes:[`cloud`],pulls:`Cloud`,tags:[`cloud`]}]):f([{name:`llama3.2`,description:`Meta's latest Llama model`,category:`general`,sizes:[`1b`,`3b`],pulls:`50M+`,tags:[`general`]},{name:`deepseek-r1`,description:`Open reasoning model`,category:`reasoning`,sizes:[`7b`,`14b`,`32b`],pulls:`200M+`,tags:[`reasoning`]}]);let t=new URLSearchParams;e?.search&&t.set(`search`,e.search),e?.sort&&t.set(`sort`,e.sort),e?.category&&t.set(`category`,e.category);let n=t.toString();return p.get(`/ollama/library${n?`?${n}`:``}`).then(e=>e.data)}},R=[[`#2563eb`,`#7c3aed`],[`#0891b2`,`#2563eb`],[`#0f766e`,`#2563eb`],[`#be123c`,`#7c3aed`],[`#ff7b52`,`#dc2626`]],z=e=>{let t=0;for(let n=0;n<e.length;n+=1)t=(t<<5)-t+e.charCodeAt(n),t|=0;return Math.abs(t)},B=e=>e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`),V=e=>{let t=e.trim().split(/[\s._-]+/).filter(Boolean);return t.length===0?`AI`:t.slice(0,2).map(e=>e[0]?.toUpperCase()).join(``)||`AI`},H=(e,t=128)=>{let n=e.trim()||`AI Persona`,r=z(n),[i,a]=R[r%R.length],o=B(V(n)),s=`persona-avatar-${r}-${t}`,c=t>=96?44:24,l=`
|
|
4
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${t}" viewBox="0 0 ${t} ${t}" role="img" aria-label="${B(n)} avatar">
|
|
5
|
+
<defs>
|
|
6
|
+
<linearGradient id="${s}" x1="0" y1="0" x2="1" y2="1">
|
|
7
|
+
<stop offset="0%" stop-color="${i}" />
|
|
8
|
+
<stop offset="100%" stop-color="${a}" />
|
|
9
|
+
</linearGradient>
|
|
10
|
+
</defs>
|
|
11
|
+
<rect width="${t}" height="${t}" rx="${Math.round(t*.22)}" fill="url(#${s})" />
|
|
12
|
+
<circle cx="${t*.22}" cy="${t*.22}" r="${t*.26}" fill="rgba(255,255,255,0.16)" />
|
|
13
|
+
<text x="50%" y="52%" dominant-baseline="middle" text-anchor="middle" fill="white" font-family="Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif" font-size="${c}" font-weight="700">${o}</text>
|
|
14
|
+
</svg>
|
|
15
|
+
`;return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(l)}`},U=(e,t=128)=>e.avatar?.trim()||H(e.name,t),W=(e,t,n=128)=>{e.onerror=null,e.src=H(t,n)},G={getPersonas:()=>i()?f([{id:`demo-1`,user_id:`default`,name:`Creative Assistant`,description:`Helpful assistant for creative tasks`,model:`llama3.3:latest`,parameters:{temperature:.8,top_p:.9,context_window:4096,system_prompt:`You are a creative and helpful assistant. Provide thoughtful and engaging responses.`},avatar:H(`Creative Assistant`,128),created_at:Date.now()-864e5,updated_at:Date.now()-864e5},{id:`demo-2`,user_id:`default`,name:`Research Assistant`,description:`Academic assistant for research and learning`,model:`qwen3:7b`,parameters:{temperature:.3,top_p:.8,context_window:8192,system_prompt:`You are a knowledgeable research assistant. Provide detailed, informative explanations.`},avatar:H(`Research Assistant`,128),created_at:Date.now()-1728e5,updated_at:Date.now()-1728e5}]):p.get(`/personas`).then(e=>e.data),getPersona:e=>i()?f({id:e,user_id:`default`,name:`Sample Assistant`,description:`A sample assistant for demonstration`,model:`llama3.2:latest`,parameters:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},created_at:Date.now(),updated_at:Date.now()}):p.get(`/personas/${e}`).then(e=>e.data),createPersona:e=>i()?f({id:`demo-`+Date.now(),user_id:`default`,...e,created_at:Date.now(),updated_at:Date.now()}):p.post(`/personas`,e).then(e=>e.data),updatePersona:(e,t)=>i()?f({id:e,user_id:`default`,name:t.name||`Updated Sample Assistant`,description:t.description,model:t.model||`llama3.2:latest`,parameters:t.parameters||{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},avatar:t.avatar,background:t.background,created_at:Date.now()-864e5,updated_at:Date.now()}):p.put(`/personas/${e}`,t).then(e=>e.data),deletePersona:e=>i()?f(void 0):p.delete(`/personas/${e}`).then(e=>e.data),exportPersona:e=>{if(i()){let e={name:`Sample Assistant`,description:`A sample assistant for demonstration`,model:`llama3.2:latest`,params:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},exportedAt:Date.now(),version:`1.0.0`};return Promise.resolve(e)}return p.get(`/personas/${e}/export`).then(e=>e.data)},importPersona:e=>i()?f({id:`demo-imported-`+Date.now(),user_id:`default`,name:e.name,description:e.description,model:e.model,parameters:e.params,avatar:e.avatar,background:e.background,created_at:Date.now(),updated_at:Date.now(),embedding_model:e.embedding_model,memory_settings:e.memory_settings,mutation_settings:e.mutation_settings}):p.post(`/personas/import`,e).then(e=>e.data),getPersonasCount:()=>i()?f({count:2}):p.get(`/personas/stats/count`).then(e=>e.data),getDefaultParameters:()=>i()?f({temperature:.7,top_p:.9,top_k:40,context_window:4096,max_tokens:1024,system_prompt:``,repeat_penalty:1.1,presence_penalty:0,frequency_penalty:0}):p.get(`/personas/defaults/parameters`).then(e=>e.data),getMemoryStatus:e=>i()?f({status:`active`,memory_count:42,last_backup:Date.now()-864e5,size_mb:2.3}):p.get(`/personas/${e}/memory/status`).then(e=>e.data),wipeMemories:e=>i()?f({deleted_count:42}):p.delete(`/personas/${e}/memory`).then(e=>e.data),backupPersona:e=>{if(i()){let t=JSON.stringify({persona_id:e,backup_date:new Date().toISOString(),data:`demo backup data`});return Promise.resolve(new Blob([t],{type:`application/json`}))}return p.get(`/personas/${e}/backup`,{responseType:`blob`}).then(e=>e.data)},exportPersonaDNA:e=>{if(i()){let t=JSON.stringify({persona_id:e,export_date:new Date().toISOString(),dna:`demo DNA data`,memories:[],learned_behaviors:{}});return Promise.resolve(new Blob([t],{type:`application/json`}))}return p.get(`/personas/${e}/export/dna`,{responseType:`blob`}).then(e=>e.data)},importPersonaDNA:e=>{if(i())return f({id:`demo-dna-`+Date.now(),user_id:`default`,name:`Imported Persona`,description:`Persona imported from DNA`,model:`llama3.2:latest`,parameters:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},created_at:Date.now(),updated_at:Date.now()});let t=new FormData;return t.append(`dnaFile`,e),p.post(`/personas/import/dna`,t).then(e=>e.data)},downloadPersona:async(e,t)=>{try{let n=await G.exportPersona(e),r=new Blob([JSON.stringify(n,null,2)],{type:`application/json`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=`${t}.json`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}catch(e){throw d.error(`Error while downloading persona:`,e),Error(`Failed to download persona: ${e instanceof Error?e.message:String(e)}`)}}},le=e=>{let t=Date.now();return{range:{from:t-Math.max(0,e-1)*864e5,to:t,days:e},totals:{calls:0,successfulCalls:0,failedCalls:0,cancelledCalls:0,meteredCalls:0,promptTokens:0,completionTokens:0,reportedTokens:0,averageLatencyMs:0,uniqueUsers:0},series:[],plugins:[],models:[],capabilities:[]}},ue={getUsage:(e=30)=>i()?f(le(e)):p.get(`/plugins/usage`,{params:{days:e}}).then(e=>e.data),getAllPlugins:()=>i()?f([]):p.get(`/plugins`).then(e=>e.data),discoverModels:e=>i()?f({models:[],outcome:`unavailable`}):p.post(`/plugins/discover/${encodeURIComponent(e)}`).then(e=>e.data),uploadPlugin:e=>{if(i())return f({},!1);let t=new FormData;return t.append(`plugin`,e),p.post(`/plugins/upload`,t).then(e=>e.data)},installPlugin:e=>i()?f({},!1):p.post(`/plugins/install`,e).then(e=>e.data),updatePlugin:(e,t)=>i()?f({},!1):p.put(`/plugins/${e}`,t).then(e=>e.data),deletePlugin:e=>i()?f(void 0):p.delete(`/plugins/${e}`).then(e=>e.data),activatePlugin:e=>i()?f(!1,!1):p.post(`/plugins/activate/${e}`).then(e=>e.data),deactivatePlugin:e=>{if(i())return f(void 0);let t=e?`/plugins/deactivate/${e}`:`/plugins/deactivate`;return p.post(t).then(e=>e.data)},getActivePlugin:()=>i()?f(null):p.get(`/plugins/active`).then(e=>e.data),getPluginStatus:()=>i()?f([]):p.get(`/plugins/status`).then(e=>e.data),exportPlugin:e=>i()?Promise.resolve(new Blob([`{}`],{type:`application/json`})):p.get(`/plugins/${e}/export`,{responseType:`blob`}).then(e=>e.data),getCredentials:()=>i()?f([]):p.get(`/plugins/credentials/all`).then(e=>e.data),setApiKey:(e,t)=>i()?f(!1,!1):p.post(`/plugins/${e}/credentials`,{api_key:t}).then(e=>e.data),deleteApiKey:e=>i()?f(!1,!1):p.delete(`/plugins/${e}/credentials`).then(e=>e.data),checkApiKey:e=>i()?f(!1):p.get(`/plugins/${e}/credentials/check`).then(e=>e.data),getVariables:e=>i()?f({}):p.get(`/plugins/${e}/variables`).then(e=>e.data),setVariables:(e,t,n=[])=>i()?f(!0):p.put(`/plugins/${e}/variables`,{variables:t,unset:n}).then(e=>e.data),resetVariables:e=>i()?f(!0):p.delete(`/plugins/${e}/variables`).then(e=>e.data)},K={getPreferences:()=>i()?f(ne()):p.get(`/preferences`).then(e=>e.data),updatePreferences:e=>i()?f(x(e)):p.put(`/preferences`,e).then(e=>e.data),setDefaultModel:(e,t,n)=>i()?f(x({defaultModel:e,defaultProviderType:t,defaultProviderId:t===`plugin`?n:null})):p.put(`/preferences/default-model`,{model:e,providerType:t,providerId:n}).then(e=>e.data),setSystemMessage:e=>i()?f(x({systemMessage:e})):p.put(`/preferences/system-message`,{message:e}).then(e=>e.data),setGenerationOptions:e=>i()?f(x({generationOptions:e})):p.put(`/preferences/generation-options`,e).then(e=>e.data),resetGenerationOptions:()=>i()?f(x({generationOptions:y.generationOptions})):p.post(`/preferences/generation-options/reset`).then(e=>e.data),setEmbeddingSettings:e=>i()?f(x({embeddingSettings:e})):p.put(`/preferences/embedding-settings`,e).then(e=>e.data),resetEmbeddingSettings:()=>i()?f(x({embeddingSettings:y.embeddingSettings})):p.post(`/preferences/embedding-settings/reset`).then(e=>e.data),importData:(e,t=`replace`)=>i()?f({theme:{mode:`dark`,adaptToAccent:!1,accent:`blue`,customAccent:`#2563eb`},defaultModel:`llama3.2`,systemMessage:`You are a helpful assistant.`,generationOptions:{},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.7},showUsername:!1,workRemoteProviderDisclosureDismissed:!1}):p.post(`/preferences/import`,{data:e,mergeStrategy:t}).then(e=>e.data)},de={getDiagnostics:()=>p.get(`/system`).then(e=>e.data)},fe=new Set([`snapshot`,`run_state`,`reasoning_delta`,`assistant_delta`,`tool_call`,`tool_result`,`usage`,`skill_loaded`,`error`,`done`]),q=e=>e&&typeof e==`object`&&!Array.isArray(e)?e:void 0,pe=e=>{if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`string`){let t=Number(e);if(Number.isFinite(t))return t;let n=Date.parse(e);if(Number.isFinite(n))return n}return Date.now()},J=(e,t,n,r,i)=>{let a=q(e);if(!a)return;let o=Number(a.id??t),s=String(a.type??n??``),c=String(a.taskId??r),l=String(a.runId??i);if(!Number.isSafeInteger(o)||o<0||!fe.has(s)||c!==r||l!==i)return;let u=a.data;return{id:o,type:s,taskId:c,runId:l,timestamp:pe(a.timestamp),data:q(u)||(u===void 0?{}:{content:u})}},Y=(e,t,n)=>{let r,i,a=[];for(let t of e.split(`
|
|
16
|
+
`)){if(!t||t.startsWith(`:`))continue;let e=t.indexOf(`:`),n=e===-1?t:t.slice(0,e),o=e===-1?``:t.slice(e+1),s=o.startsWith(` `)?o.slice(1):o;n===`id`&&(r=s),n===`event`&&(i=s),n===`data`&&a.push(s)}if(a.length===0)return;let o=a.join(`
|
|
17
|
+
`);if(o===`[DONE]`)return J({id:r,type:`done`,taskId:t,runId:n,timestamp:Date.now(),data:{}},r,i,t,n);try{return J(JSON.parse(o),r,i,t,n)}catch{return}},me=class{constructor(e,t,r){n(this,`taskId`,void 0),n(this,`runId`,void 0),n(this,`onEvent`,void 0),n(this,`buffer`,``),this.taskId=e,this.runId=t,this.onEvent=r}push(e){e&&(this.buffer+=e,this.drain())}finish(e=``){if(this.buffer+=e,this.drain(),!this.buffer.trim()){this.buffer=``;return}let t=Y(this.buffer.replace(/\r\n?/g,`
|
|
18
|
+
`),this.taskId,this.runId);this.buffer=``,t&&this.onEvent(t)}drain(){let e=/\r?\n\r?\n/.exec(this.buffer);for(;e?.index!==void 0;){let t=this.buffer.slice(0,e.index).replace(/\r\n?/g,`
|
|
19
|
+
`);this.buffer=this.buffer.slice(e.index+e[0].length);let n=Y(t,this.taskId,this.runId);n&&this.onEvent(n),e=/\r?\n\r?\n/.exec(this.buffer)}}},he=async e=>{try{let t=await e.json(),n=typeof t.error==`string`?t.error:typeof t.message==`string`?t.message:void 0;if(n)return Error(n)}catch{}return Error(`Work event stream failed with status ${e.status}.`)},X=async({taskId:e,runId:t,after:n,signal:r,onEvent:i})=>{let a=localStorage.getItem(`auth-token`),o=new URL(`${c}/work/tasks/${encodeURIComponent(e)}/runs/${encodeURIComponent(t)}/events`,window.location.origin);o.searchParams.set(`after`,String(Math.max(0,Math.trunc(n))));let s=await fetch(o,{method:`GET`,headers:{Accept:`text/event-stream`,...a?{Authorization:`Bearer ${a}`}:{}},cache:`no-store`,credentials:`same-origin`,signal:r});if(!s.ok)throw await he(s);if(!s.body)throw Error(`Work event stream has no response body.`);let l=s.body.getReader(),u=new TextDecoder,d=new me(e,t,i);try{for(;!r.aborted;){let{done:e,value:t}=await l.read();if(e)break;d.push(u.decode(t,{stream:!0}))}d.finish(u.decode())}finally{l.releaseLock()}},Z=e=>`/work/tasks/${encodeURIComponent(e)}`,ge={capabilities:()=>p.get(`/work/capabilities`).then(e=>e.data),listTasks:()=>p.get(`/work/tasks`).then(e=>e.data),createTask:e=>p.post(`/work/tasks`,e).then(e=>e.data),getTask:e=>p.get(Z(e)).then(e=>e.data),getMessages:(e,t,n=200)=>p.get(`${Z(e)}/messages`,{params:{before:t,limit:n}}).then(e=>e.data),updateTask:(e,t)=>p.patch(Z(e),t).then(e=>e.data),deleteTask:e=>p.delete(Z(e)).then(e=>e.data),startRun:(e,t)=>p.post(`${Z(e)}/runs`,t).then(e=>e.data),cancelRun:e=>p.post(`${Z(e)}/cancel`).then(e=>e.data),streamRunEvents:e=>X(e),listFiles:(e,t=``)=>p.get(`${Z(e)}/files`,{params:{path:t}}).then(e=>{let t=e.data;return t.data&&!Array.isArray(t.data)?{...t,data:t.data.entries}:t}),getFile:(e,t)=>p.get(`${Z(e)}/file`,{params:{path:t}}).then(e=>e.data),saveFile:(e,t,n,r)=>p.put(`${Z(e)}/file`,{content:n,expectedUpdatedAt:r},{params:{path:t}}).then(e=>e.data),getGitStatus:e=>p.get(`${Z(e)}/git`).then(e=>e.data),getGitDiff:(e,t)=>p.get(`${Z(e)}/git/diff`,{params:t?{path:t}:void 0}).then(e=>e.data),initializeGit:e=>p.post(`${Z(e)}/git/init`).then(e=>e.data),stageGitPaths:(e,t)=>p.post(`${Z(e)}/git/stage`,{paths:t}).then(e=>e.data),commitGit:(e,t)=>p.post(`${Z(e)}/git/commit`,{message:t}).then(e=>e.data),createGitBranch:(e,t)=>p.post(`${Z(e)}/git/branches`,{name:t}).then(e=>e.data),switchGitBranch:(e,t)=>p.post(`${Z(e)}/git/switch`,{name:t}).then(e=>e.data),startPreview:(e,t)=>p.post(`${Z(e)}/preview/start`,t?{command:t}:{}).then(e=>e.data),stopPreview:e=>p.post(`${Z(e)}/preview/stop`).then(e=>e.data)};function Q(e,t,n){if(t)return e.find(e=>e.model===t&&(!n||e.plugin===n))}function _e(e,t,n){return Q(e,t,n)||e[0]}function ve(e){return`${encodeURIComponent(e.plugin)}::${encodeURIComponent(e.model)}`}var $={getModels:()=>i()?f([{model:`tts-1`,plugin:`openai`,config:{voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`,formats:[`mp3`,`opus`,`aac`,`flac`,`wav`],default_format:`mp3`,max_characters:4096}}]):p.get(`/tts/models`).then(e=>e.data),getPlugins:()=>i()?f([{id:`openai`,name:`OpenAI GPT`,models:[`tts-1`,`tts-1-hd`],config:{voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`}}]):p.get(`/tts/plugins`).then(e=>e.data),getVoices:e=>i()?f({voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`,formats:[`mp3`,`opus`,`aac`,`flac`,`wav`],default_format:`mp3`,max_characters:4096,supports_streaming:!1}):p.get(`/tts/voices/${e}`).then(e=>e.data),generateBase64:e=>{if(i())return f({audio:``,format:e.response_format||`mp3`,mimeType:`audio/mpeg`,size:0});let t={...e,pluginId:e.pluginId||void 0};return p.post(`/tts/generate-base64`,t).then(e=>e.data)},generate:async e=>{if(i())return new Blob([],{type:`audio/mpeg`});let t={...e,pluginId:e.pluginId||void 0};return(await p.post(`/tts/generate`,t,{responseType:`blob`})).data},speak:async(e,t={})=>{try{t.onStart?.();let n=await $.generateBase64({model:t.model||`tts-1`,pluginId:t.pluginId,input:e,voice:t.voice,speed:t.speed,response_format:t.responseFormat});if(!n.success||!n.data?.audio)throw Error(n.message||`Failed to generate speech`);let r=`data:${n.data.mimeType};base64,${n.data.audio}`,i=new Audio(r);return i.onended=()=>t.onEnd?.(),i.onerror=()=>t.onError?.(Error(`Audio playback failed`)),await i.play(),i}catch(e){let n=e instanceof Error?e:Error(`Unknown error`);return t.onError?.(n),null}}},ye=e({agentCliApi:()=>ee,personaApi:()=>G,preferencesApi:()=>K});export{c as A,j as C,S as D,re as E,h as O,ae as S,C as T,k as _,$ as a,se as b,K as c,U as d,W as f,M as g,P as h,_e as i,te as k,ue as l,F as m,Q as n,ge as o,L as p,ve as r,de as s,ye as t,G as u,oe as v,ie as w,A as x,ce as y};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/api-BCqWXjZI.js","js/rolldown-runtime-QTnfLwEv.js","js/router-vendor-BjDI9mRe.js","js/markdown-core-GI9BPwrB.js","js/utils-vendor-Cbaj0BC5.js","js/demoMode-BhEpMVh5.js","js/logger-DbNs3-DK.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{i as e}from"./router-vendor-BjDI9mRe.js";import{o as t,t as n}from"./utils-vendor-Cbaj0BC5.js";import{n as r,t as i}from"./demoMode-BhEpMVh5.js";import{t as a}from"./logger-DbNs3-DK.js";var o=`dark`,s=`blue`,c=`#2563eb`,l=[{id:`violet`,label:`Violet`,color:`#7c3aed`,foreground:`#ffffff`},{id:`blue`,label:`Blue`,color:`#2563eb`,foreground:`#ffffff`},{id:`cyan`,label:`Cyan`,color:`#0e7490`,foreground:`#ffffff`},{id:`teal`,label:`Teal`,color:`#0f766e`,foreground:`#ffffff`},{id:`emerald`,label:`Emerald`,color:`#15803d`,foreground:`#ffffff`},{id:`amber`,label:`Coral`,color:`#ff7b52`,foreground:`#3d120c`},{id:`rose`,label:`Rose`,color:`#e11d48`,foreground:`#ffffff`},{id:`slate`,label:`Slate`,color:`#475569`,foreground:`#ffffff`}],u=[`50`,`100`,`200`,`300`,`400`,`500`,`600`,`700`,`800`,`900`,`950`],d=[`25`,...u],f=[`canvas`,`surface`,`surface-subtle`,`surface-raised`,`surface-overlay`,`surface-inverse`,`ink`,`ink-muted`,`ink-subtle`,`ink-inverse`,`line`,`line-strong`],p={multiplier:.24,minimum:6,maximum:24},m={multiplier:.36,minimum:6,maximum:32},h={25:99,50:97,100:94,200:88,300:80,400:66,500:48,600:36,700:27,800:18,900:11,950:6},g={25:13,50:4,100:7,200:10,300:16,400:27,500:46,600:65,700:82,800:89,900:95,950:99},_={canvas:{lightness:96,saturationFactor:1},surface:{lightness:98,saturationFactor:.9},"surface-subtle":{lightness:93,saturationFactor:1},"surface-raised":{lightness:99,saturationFactor:.8},"surface-overlay":{lightness:100,saturationFactor:0},"surface-inverse":{lightness:10,saturationFactor:.7},ink:{lightness:10,saturationFactor:.45},"ink-muted":{lightness:38,saturationFactor:.35},"ink-subtle":{lightness:54,saturationFactor:.4},"ink-inverse":{lightness:98,saturationFactor:.4},line:{lightness:86,saturationFactor:.8},"line-strong":{lightness:75,saturationFactor:.65}},v={canvas:{lightness:5,saturationFactor:.9},surface:{lightness:7,saturationFactor:.9},"surface-subtle":{lightness:9,saturationFactor:1},"surface-raised":{lightness:11,saturationFactor:1},"surface-overlay":{lightness:13,saturationFactor:1},"surface-inverse":{lightness:96,saturationFactor:.35},ink:{lightness:96,saturationFactor:.3},"ink-muted":{lightness:67,saturationFactor:.35},"ink-subtle":{lightness:48,saturationFactor:.4},"ink-inverse":{lightness:7,saturationFactor:.45},line:{lightness:18,saturationFactor:.8},"line-strong":{lightness:28,saturationFactor:.65}},y={violet:{50:`#f5f3ff`,100:`#ede9fe`,200:`#ddd6fe`,300:`#c4b5fd`,400:`#a78bfa`,500:`#7c3aed`,600:`#6d28d9`,700:`#5b21b6`,800:`#4c1d95`,900:`#3b0764`,950:`#2e1065`},blue:{50:`#eff6ff`,100:`#dbeafe`,200:`#bfdbfe`,300:`#93c5fd`,400:`#60a5fa`,500:`#2563eb`,600:`#1d4ed8`,700:`#1e40af`,800:`#1e3a8a`,900:`#172554`,950:`#0f172a`},cyan:{50:`#ecfeff`,100:`#cffafe`,200:`#a5f3fc`,300:`#67e8f9`,400:`#22d3ee`,500:`#0e7490`,600:`#155e75`,700:`#164e63`,800:`#083344`,900:`#092f3f`,950:`#062634`},teal:{50:`#f0fdfa`,100:`#ccfbf1`,200:`#99f6e4`,300:`#5eead4`,400:`#2dd4bf`,500:`#0f766e`,600:`#0f625d`,700:`#115e59`,800:`#134e4a`,900:`#042f2e`,950:`#022c22`},emerald:{50:`#ecfdf5`,100:`#d1fae5`,200:`#a7f3d0`,300:`#6ee7b7`,400:`#34d399`,500:`#15803d`,600:`#166534`,700:`#14532d`,800:`#064e3b`,900:`#052e16`,950:`#022c22`},amber:{50:`#fff5f1`,100:`#ffe8df`,200:`#ffd0c2`,300:`#ffae96`,400:`#ff9273`,500:`#ff7b52`,600:`#c94a27`,700:`#a83a1f`,800:`#87301f`,900:`#70291e`,950:`#3d120c`},rose:{50:`#fff1f2`,100:`#ffe4e6`,200:`#fecdd3`,300:`#fda4af`,400:`#fb7185`,500:`#e11d48`,600:`#be123c`,700:`#9f1239`,800:`#881337`,900:`#4c0519`,950:`#2d0714`},slate:{50:`#f8fafc`,100:`#f1f5f9`,200:`#e2e8f0`,300:`#cbd5e1`,400:`#94a3b8`,500:`#475569`,600:`#334155`,700:`#1e293b`,800:`#0f172a`,900:`#020617`,950:`#010313`}},b={50:97,100:94,200:88,300:76,400:64,500:42,600:34,700:27,800:21,900:16,950:10},x=(e,t,n)=>Math.min(Math.max(e,t),n),S=e=>{if(!e)return null;let t=e.trim().match(/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i);if(!t)return null;let n=t[1];return`#${(n.length===3?n.split(``).map(e=>`${e}${e}`).join(``):n).toLowerCase()}`},C=e=>{let t=S(e)||`#2563eb`,n=parseInt(t.slice(1),16);return{r:n>>16&255,g:n>>8&255,b:n&255}},w=(e,t,n)=>`#${[e,t,n].map(e=>x(Math.round(e),0,255).toString(16).padStart(2,`0`)).join(``)}`,T=(e,t,n)=>{let r=e/255,i=t/255,a=n/255,o=Math.max(r,i,a),s=Math.min(r,i,a),c=(o+s)/2;if(o===s)return{h:0,s:0,l:c*100};let l=o-s,u=c>.5?l/(2-o-s):l/(o+s),d=0;return d=o===r?(i-a)/l+(i<a?6:0):o===i?(a-r)/l+2:(r-i)/l+4,{h:d*60,s:u*100,l:c*100}},E=(e,t,n)=>{let r=x(t,0,100)/100,i=x(n,0,100)/100,a=(1-Math.abs(2*i-1))*r,o=(e%360+360)%360,s=a*(1-Math.abs(o/60%2-1)),c=i-a/2,l=0,u=0,d=0;return o<60?(l=a,u=s):o<120?(l=s,u=a):o<180?(u=a,d=s):o<240?(u=s,d=a):o<300?(l=s,d=a):(l=a,d=s),w((l+c)*255,(u+c)*255,(d+c)*255)},D=e=>{let{r:t,g:n,b:r}=C(e),i=[t,n,r].map(e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4});return i[0]*.2126+i[1]*.7152+i[2]*.0722},O=(e,t)=>{let n=D(e),r=D(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)},k=(e,t,n)=>{let r=n,i=E(e,t,r);for(;O(`#ffffff`,i)<4.5&&r>12;)r-=2,i=E(e,t,r);return i},A=e=>{let{r:t,g:n,b:r}=C(S(e)||`#2563eb`),{h:i,s:a}=T(t,n,r),o=a<8?a:x(a,42,88);return u.reduce((e,t)=>{let n=b[t],r=Number(t)<300?o*.72:o;return e[t]=t===`500`||t===`600`?k(i,r,n):E(i,r,n),e},{})},j=e=>{let t=e?.mode===`light`?`light`:o,n=e?.accent===`custom`?`custom`:e?.accent,r=l.some(e=>e.id===n)?n:s,i=S(e?.customAccent)||`#2563eb`;return{mode:t,adaptToAccent:e?.adaptToAccent===!0,accent:n===`custom`?`custom`:r,customAccent:i}},M=()=>j({mode:o}),N=e=>{let t=j(e);return t.accent===`custom`?A(t.customAccent):y[t.accent||`blue`]},P=e=>{let t=j(e);return t.accent===`custom`?t.customAccent||`#2563eb`:l.find(e=>e.id===t.accent)?.color||`#2563eb`},F=(e,t,n)=>t===0||e<8?e*t:x(e*n.multiplier*t,n.minimum*t,n.maximum*t),I=(e,t,n,r)=>d.reduce((i,a)=>(i[a]=E(e,F(t,1,r),n[a]),i),{}),L=(e,t,n,r)=>f.reduce((i,a)=>{let o=n[a];return i[a]=E(e,F(t,o.saturationFactor,r),o.lightness),i},{}),R=(e,t,n)=>{let{r,g:i,b:a}=C(n);e.style.setProperty(t,`${r} ${i} ${a}`)},z=e=>{for(let t of d)e.style.removeProperty(`--color-gray-${t}`),e.style.removeProperty(`--color-dark-${t}`);for(let t of f)e.style.removeProperty(`--color-${t}`)},B=(e,t)=>{let{r:n,g:r,b:i}=C(P(t)),{h:a,s:o}=T(n,r,i),s=t.mode===`light`?m:p,c=I(a,o,h,s),l=I(a,o,g,p),u=L(a,o,t.mode===`dark`?v:_,s);for(let t of d)R(e,`--color-gray-${t}`,c[t]),R(e,`--color-dark-${t}`,l[t]);for(let t of f)R(e,`--color-${t}`,u[t])},V=e=>{if(typeof document>`u`)return;let t=j(e),n=document.documentElement,r=N(t);n.classList.remove(`dark`,`ophelia`),t.mode===`dark`&&n.classList.add(`dark`),n.style.colorScheme=t.mode,n.dataset.accent=t.accent||`blue`,n.dataset.themeStyle=t.adaptToAccent?`accent`:`default`;for(let e of u){let{r:t,g:i,b:a}=C(r[e]),o=`${t} ${i} ${a}`;n.style.setProperty(`--color-primary-${e}`,o),n.style.setProperty(`--color-accent-${e}`,o)}t.adaptToAccent?B(n,t):z(n)},H=a(`store:app-store`),U=250,W=null,G=t()(n((t,n)=>({theme:M(),themeSyncPending:!1,syncThemePreference:async i=>{if(W&&(clearTimeout(W),W=null),!(!r()&&!localStorage.getItem(`auth-token`)))try{let{preferencesApi:r}=await e(async()=>{let{preferencesApi:e}=await import(`./api-BCqWXjZI.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5,6]));if(!(await r.updatePreferences({theme:i})).success){H.warn(`Failed to save theme preference to backend`);return}let a=j(n().theme),o=j(i);a.mode===o.mode&&a.adaptToAccent===o.adaptToAccent&&a.accent===o.accent&&a.customAccent===o.customAccent?t({themeSyncPending:!1}):(t({themeSyncPending:!0}),n().scheduleThemePreferenceSync())}catch(e){H.warn(`Failed to save theme preference to backend:`,e)}},scheduleThemePreferenceSync:()=>{W&&clearTimeout(W),W=setTimeout(()=>{W=null,n().syncThemePreference(j(n().theme))},U)},setTheme:e=>{let n=j(e);t(e=>({theme:n,preferences:{...e.preferences,theme:n}})),V(n)},updateTheme:e=>{let r=j(e);n().setTheme(r),t({themeSyncPending:!0}),n().scheduleThemePreferenceSync()},toggleTheme:()=>{let e=n().theme,t=e.mode===`dark`?`light`:`dark`;n().updateTheme({...e,mode:t})},sidebarOpen:!0,sidebarCompact:!1,setSidebarOpen:e=>t({sidebarOpen:e}),setSidebarCompact:e=>t({sidebarCompact:e}),toggleSidebar:()=>t(e=>({sidebarOpen:!e.sidebarOpen})),toggleSidebarCompact:()=>t(e=>({sidebarCompact:!e.sidebarCompact})),artifactPanelOpen:!1,artifactPanelArtifact:null,openArtifactPanel:e=>t({artifactPanelOpen:!0,artifactPanelArtifact:e}),closeArtifactPanel:()=>t({artifactPanelOpen:!1,artifactPanelArtifact:null}),preferences:{theme:M(),defaultModel:``,defaultProviderType:null,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,systemMessage:``,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.3},titleSettings:{autoTitle:!1,taskModel:``,taskProviderType:null,taskProviderId:null},showUsername:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}},setPreferences:e=>{let n=e.theme?j(e.theme):null;t(t=>({...n&&{theme:n},preferences:{...t.preferences,...e,...n&&{theme:n}}})),n&&V(n)},loadPreferences:async()=>{try{let{preferencesApi:r}=await e(async()=>{let{preferencesApi:e}=await import(`./api-BCqWXjZI.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5,6])),i=await r.getPreferences();if(i.success&&i.data){let e=i.data,r=n().themeSyncPending?j(n().theme):null;n().setPreferences(r?{...e,theme:r}:e),t({backgroundImage:e.backgroundSettings?.imageUrl||null}),r&&n().syncThemePreference(r)}}catch(e){H.warn(`Failed to load preferences from backend:`,e)}},isGenerating:!1,setIsGenerating:e=>t({isGenerating:e}),hasSeenSettingsNotification:!1,markSettingsNotificationAsSeen:()=>t({hasSeenSettingsNotification:!0}),isDemoMode:r(),demoConfig:i(),setDemoMode:e=>{t({isDemoMode:e,demoConfig:i()})},backgroundImage:null,setBackgroundImage:async r=>{if(t({backgroundImage:r}),r){let t=n(),i={...t.preferences,backgroundSettings:{enabled:!0,imageUrl:r,blurAmount:t.preferences.backgroundSettings?.blurAmount||10,opacity:t.preferences.backgroundSettings?.opacity||.6}};t.setPreferences(i);try{let{preferencesApi:t}=await e(async()=>{let{preferencesApi:e}=await import(`./api-BCqWXjZI.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5,6]));await t.updatePreferences({backgroundSettings:i.backgroundSettings})}catch(e){H.warn(`Failed to save background settings to backend:`,e)}}},uploadBackgroundImage:async e=>{try{let t=new FileReader;return new Promise((r,i)=>{t.onload=async e=>{try{let t=e.target?.result;await n().setBackgroundImage(t),r()}catch(e){i(e)}},t.onerror=i,t.readAsDataURL(e)})}catch(e){throw H.error(`Failed to upload background image:`,e),e}},removeBackgroundImage:async()=>{t({backgroundImage:null});let r=n(),i={enabled:!1,imageUrl:``,blurAmount:r.preferences.backgroundSettings?.blurAmount||10,opacity:r.preferences.backgroundSettings?.opacity||.6};r.setPreferences({backgroundSettings:i});try{let{preferencesApi:t}=await e(async()=>{let{preferencesApi:e}=await import(`./api-BCqWXjZI.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5,6]));await t.updatePreferences({backgroundSettings:i})}catch(e){H.warn(`Failed to save background removal to backend:`,e)}},clearUserState:()=>{let e=M();W&&(clearTimeout(W),W=null),t({theme:e,themeSyncPending:!1,backgroundImage:null,preferences:{theme:e,defaultModel:``,defaultProviderType:null,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,systemMessage:``,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.3},titleSettings:{autoTitle:!1,taskModel:``,taskProviderType:null,taskProviderId:null},showUsername:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}}}),V(e)}}),{name:`libre-webui-app-state`,onRehydrateStorage:()=>e=>{e&&e.setTheme(j(e.theme))},partialize:e=>{let{backgroundSettings:t,...n}=e.preferences;return{theme:e.theme,themeSyncPending:e.themeSyncPending,sidebarOpen:e.sidebarOpen,sidebarCompact:e.sidebarCompact,preferences:n,hasSeenSettingsNotification:e.hasSeenSettingsNotification}}}));typeof window<`u`&&(()=>{let{theme:e,setTheme:t}=G.getState();t(e)})();export{P as a,c as i,l as n,j as o,s as r,G as t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e={common:{loading:`ุฌุงุฑู ุงูุชุญู
ูู...`,save:`ุญูุธ`,saving:`ุฌุงุฑู ุงูุญูุธ...`,cancel:`ุฅูุบุงุก`,delete:`ุญุฐู`,edit:`ุชุนุฏูู`,close:`ุฅุบูุงู`,back:`ุฑุฌูุน`,next:`ุงูุชุงูู`,confirm:`ุชุฃููุฏ`,error:`ุฎุทุฃ`,success:`ูุฌุงุญ`,warning:`ุชุญุฐูุฑ`,or:`ุฃู`,optional:`ุงุฎุชูุงุฑู`,enabled:`ู
ููุนูู`,disabled:`ู
ุนุทูู`,on:`ุชุดุบูู`,off:`ุฅููุงู`,yes:`ูุนู
`,no:`ูุง`,search:`ุจุญุซ`,noResults:`ูู
ูุชู
ุงูุนุซูุฑ ุนูู ูุชุงุฆุฌ`,retry:`ุฅุนุงุฏุฉ ุงูู
ุญุงููุฉ`,refresh:`ุชุญุฏูุซ`,download:`ุชุญู
ูู`,upload:`ุฑูุน`,export:`ุชุตุฏูุฑ`,import:`ุงุณุชูุฑุงุฏ`,reset:`ุฅุนุงุฏุฉ ุชุนููู`,apply:`ุชุทุจูู`,clear:`ู
ุณุญ`,all:`ุงููู`,none:`ูุง ุดูุก`,default:`ุงูุชุฑุงุถู`,custom:`ู
ุฎุตุต`,remove:`ุฅุฒุงูุฉ`},brand:{name:`Libre WebUI`,shortName:`Libre`},auth:{login:{title:`ู
ุฑุญุจุงู ุจุนูุฏุชู`,subtitle:`ุณุฌูู ุงูุฏุฎูู ุฅูู ุญุณุงุจู ููู
ุชุงุจุนุฉ`,username:`ุงุณู
ุงูู
ุณุชุฎุฏู
`,usernamePlaceholder:`ุฃุฏุฎู ุงุณู
ุงูู
ุณุชุฎุฏู
`,password:`ููู
ุฉ ุงูู
ุฑูุฑ`,passwordPlaceholder:`ุฃุฏุฎู ููู
ุฉ ุงูู
ุฑูุฑ`,signIn:`ุชุณุฌูู ุงูุฏุฎูู`,signingIn:`ุฌุงุฑู ุชุณุฌูู ุงูุฏุฎูู...`,noAccount:`ููุณ ูุฏูู ุญุณุงุจุ`,signUpHere:`ุณุฌูู ููุง`,loginSuccess:`ุชู
ุชุณุฌูู ุงูุฏุฎูู ุจูุฌุงุญ!`,loginFailed:`ูุดู ุชุณุฌูู ุงูุฏุฎูู`,checkCredentials:`ูุดู ุชุณุฌูู ุงูุฏุฎูู. ูุฑุฌู ุงูุชุญูู ู
ู ุจูุงูุงุช ุงูุงุนุชู
ุงุฏ.`,enterBoth:`ูุฑุฌู ุฅุฏุฎุงู ุงุณู
ุงูู
ุณุชุฎุฏู
ูููู
ุฉ ุงูู
ุฑูุฑ`,githubSuccess:`ุชู
ุชุณุฌูู ุงูุฏุฎูู ุนุจุฑ GitHub ุจูุฌุงุญ!`,githubFailed:`ูุดูุช ู
ุตุงุฏูุฉ GitHub`,githubVerifyFailed:`ูุดู ุงูุชุญูู ู
ู ู
ุตุงุฏูุฉ GitHub`,approvalPending:`ุญุณุงุจู ูู ุงูุชุธุงุฑ ู
ูุงููุฉ ุงูู
ุณุคูู.`},signup:{title:`ุฅูุดุงุก ุญุณุงุจ`,subtitle:`ุณุฌูู ููุญุตูู ุนูู ุญุณุงุจ ุฌุฏูุฏ`,username:`ุงุณู
ุงูู
ุณุชุฎุฏู
`,usernamePlaceholder:`ุงุฎุชุฑ ุงุณู
ู
ุณุชุฎุฏู
`,email:`ุงูุจุฑูุฏ ุงูุฅููุชุฑููู`,emailPlaceholder:`your@email.com`,password:`ููู
ุฉ ุงูู
ุฑูุฑ`,passwordPlaceholder:`ุงุฎุชุฑ ููู
ุฉ ู
ุฑูุฑ`,confirmPassword:`ุชุฃููุฏ ููู
ุฉ ุงูู
ุฑูุฑ`,confirmPasswordPlaceholder:`ุฃููุฏ ููู
ุฉ ุงูู
ุฑูุฑ`,createAccount:`ุฅูุดุงุก ุญุณุงุจ`,creatingAccount:`ุฌุงุฑู ุฅูุดุงุก ุงูุญุณุงุจ...`,hasAccount:`ูุฏูู ุญุณุงุจ ุจุงููุนูุ`,signInHere:`ุณุฌูู ุงูุฏุฎูู ููุง`,signupSuccess:`ุชู
ุฅูุดุงุก ุงูุญุณุงุจ ุจูุฌุงุญ!`,signupFailed:`ูุดู ุงูุชุณุฌูู`,tryAgain:`ูุดู ุงูุชุณุฌูู. ูุฑุฌู ุงูู
ุญุงููุฉ ู
ุฑุฉ ุฃุฎุฑู.`,usernameRequired:`ุงุณู
ุงูู
ุณุชุฎุฏู
ูููู
ุฉ ุงูู
ุฑูุฑ ู
ุทููุจุงู`,passwordMismatch:`ููู
ุงุช ุงูู
ุฑูุฑ ุบูุฑ ู
ุชุทุงุจูุฉ`,passwordTooShort:`ูุฌุจ ุฃู ุชููู ููู
ุฉ ุงูู
ุฑูุฑ 6 ุฃุญุฑู ุนูู ุงูุฃูู`,approvalPending:`ุชู
ุงุณุชูุงู
ุงูุชุณุฌูู. ูุฌุจ ุฃู ููุงูู ุงูู
ุณุคูู ุนูู ุญุณุงุจู.`,awaitingApproval:`ูู ุงูุชุธุงุฑ ุงูู
ูุงููุฉ`,awaitingApprovalDescription:`ุชู
ุฅูุดุงุก ุญุณุงุจูุ ูููู ูุฌุจ ุฃู ูููู
ุงูู
ุณุคูู ุจุชูุนููู ูุจู ุฃู ุชุชู
ูู ู
ู ุชุณุฌูู ุงูุฏุฎูู.`,backToSignIn:`ุงูุนูุฏุฉ ูุชุณุฌูู ุงูุฏุฎูู`},logout:{button:`ุชุณุฌูู ุงูุฎุฑูุฌ`,success:`ุชู
ุชุณุฌูู ุงูุฎุฑูุฌ ุจูุฌุงุญ`},oauth:{continueWith:`ุงูู
ุชุงุจุนุฉ ู
ุน {{provider}}`,connectingTo:`ุฌุงุฑู ุงูุงุชุตุงู ุจู {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`},checkingAuth:`ุฌุงุฑู ุงูุชุญูู ู
ู ุงูู
ุตุงุฏูุฉ...`,welcome:`ู
ุฑุญุจุงู`,noEmail:`ูู
ูุชู
ุชูุฏูู
ุจุฑูุฏ ุฅููุชุฑููู`,role:`ุงูุฏูุฑ`,id:`ุงูู
ุนุฑู`,userId:`ู
ุนุฑู ุงูู
ุณุชุฎุฏู
`,signInDescription:`ุณุฌูู ุงูุฏุฎูู ุจุญุณุงุจ GitHub ุงูุฎุงุต ุจู ููู
ุชุงุจุนุฉ`,signInWithGitHub:`ุชุณุฌูู ุงูุฏุฎูู ุจูุงุณุทุฉ GitHub`,jwtActive:`ู
ุตุงุฏูุฉ JWT ูุดุทุฉ`,jwtDescription:`ู
ุตุงุฏูุฉ JWT ู
ุน GitHub OAuth`,github:`GitHub`,provider:`ุงูู
ุฒูุฏ`,tagline:`ูุฌุจ ุฃู ูุฎุถุน ู
ูุฏุณ ุงูุฐูุงุก ุงูุงุตุทูุงุนู ุงูุฎุงุต ุจู ูู.`,selfHosted:`ู
ุณุชุถุงู ุฐุงุชููุง ยท Apache 2.0`,highlights:{local:{title:`ู
ุญูู ุฃููุงู`,body:`ุชุจูู ู
ุญุงุฏุซุงุชู ูู
ููุงุชู ุนูู ุงูุฌูุงุฒ ุงูุฐู ุชุดุบู ูุฐุง ุนููู.`},providers:{title:`ุฃู ู
ุฒูุฏ`,body:`ูู
ุงุฐุฌ ู
ุญููุฉ ุนุจุฑ Ollamaุ ุจุงูุฅุถุงูุฉ ุฅูู ุงูู
ุฒูุฏูู ุนู ุจูุนุฏ ุงูุฐูู ุชุฎุชุงุฑ ุฅุถุงูุชูู
.`},work:{title:`ุนู
ู ู
ุนุฒูู`,body:`ุงู
ูุญ ุงููู
ูุฐุฌ ู
ุณุงุญุฉ ุนู
ู ู
ุนุฒููุฉ ุจุงูู
ููุงุช ูุงูุทุฑููุฉ ูุงูู
ุนุงููุฉ.`}}},setup:{welcome:{title:`ู
ุฑุญุจุงู ุจู ูู Libre WebUI`,subtitle:`ููุจุฏุฃ`,description:`ูู
ุจุฅุนุฏุงุฏ Libre WebUI ุงูุฎุงุต ุจู ูู ุฎุทูุงุช ููููุฉ`,createAdmin:`ุฅูุดุงุก ุญุณุงุจ ุงูู
ุณุคูู`,features:{secure:{title:`ุขู
ู ูุฎุงุต`,description:`ู
ุญุงุฏุซุงุชู ุชุจูู ุนูู ุฌูุงุฒู`},fast:{title:`ุณุฑูุน ูู
ุชุฌุงูุจ`,description:`ู
ุญุณูู ููุณุฑุนุฉ ูุงูุฃุฏุงุก`},openSource:{title:`ู
ูุชูุญ ุงูู
ุตุฏุฑ`,description:`ุจุฑูุงู
ุฌ ู
ุฌุงูู ูู
ูุชูุญ ุงูู
ุตุฏุฑ`}}},admin:{title:`ุฅูุดุงุก ุญุณุงุจ ุงูู
ุณุคูู`,subtitle:`ุฅุนุฏุงุฏ ุงูู
ุณุคูู`,description:`ุฃูุดุฆ ุฃูู ุญุณุงุจ ู
ุณุคูู ูู Libre WebUI ุงูุฎุงุต ุจู`,usernamePlaceholder:`ุฃุฏุฎู ุงุณู
ุงูู
ุณุคูู`,passwordPlaceholder:`ุฃุฏุฎู ููู
ุฉ ุงูู
ุฑูุฑ (6 ุฃุญุฑู ุนูู ุงูุฃูู)`,confirmPlaceholder:`ุฃููุฏ ููู
ุฉ ุงูู
ุฑูุฑ`,creating:`ุฌุงุฑู ุงูุฅูุดุงุก...`,createAdmin:`ุฅูุดุงุก ุงูู
ุณุคูู`,success:`ุชู
ุฅูุดุงุก ุญุณุงุจ ุงูู
ุณุคูู ุจูุฌุงุญ!`,failed:`ูุดู ุฅูุดุงุก ุญุณุงุจ ุงูู
ุณุคูู`,fillAllFields:`ูุฑุฌู ู
ูุก ุฌู
ูุน ุงูุญููู`,note:`ุณูููู ูุฐุง ุญุณุงุจ ุงูู
ุณุคูู ุงูุฑุฆูุณู ูู Libre WebUI ุงูุฎุงุต ุจู`,approvalUnexpected:`ุชุนุฐุฑ ุชูุนูู ุงูู
ุณุคูู ุงูุฃููู. ูุฑุฌู ุงูู
ุญุงููุฉ ู
ุฑุฉ ุฃุฎุฑู.`},encryptionKey:{title:`ุงุญูุธ ู
ูุชุงุญ ุงูุชุดููุฑ`,subtitle:`ู
ูู
: ุงุญูุธ ูุฐุง ุงูู
ูุชุงุญ`,description:`ูุญู
ู ู
ูุชุงุญ ุงูุชุดููุฑ ูุฐุง ุจูุงูุงุชู ุงูุญุณุงุณุฉ. ุงุญูุธู ุจุฃู
ุงู - ุณุชุญุชุงุฌู ุฅุฐุง ุงุญุชุฌุช ูุงุณุชุนุงุฏุฉ ูุงุนุฏุฉ ุงูุจูุงูุงุช.`,warning:`ุชุญุฐูุฑ`,warningText:`ุฅุฐุง ููุฏุช ูุฐุง ุงูู
ูุชุงุญ ูุงุญุชุฌุช ูุงุณุชุนุงุฏุฉ ูุงุนุฏุฉ ุงูุจูุงูุงุชุ ุณุชููู ุจูุงูุงุชู ุงูู
ุดูุฑุฉ (ู
ูุงุชูุญ APIุ ุงูุชูุถููุงุช) ุบูุฑ ูุงุจูุฉ ููุงุณุชุฑุฏุงุฏ.`,label:`ู
ูุชุงุญ ุงูุชุดููุฑ ุงูุฎุงุต ุจู`,loading:`ุฌุงุฑู ุงูุชุญู
ูู...`,copyToClipboard:`ูุณุฎ ุฅูู ุงูุญุงูุธุฉ`,copied:`ุชู
ูุณุฎ ู
ูุชุงุญ ุงูุชุดููุฑ ุฅูู ุงูุญุงูุธุฉ!`,copyFailed:`ูุดู ูุณุฎ ุงูู
ูุชุงุญ ุฅูู ุงูุญุงูุธุฉ`,envNote:`ูุฐุง ุงูู
ูุชุงุญ ู
ุญููุธ ุฃูุถุงู ูู ู
ูู backend/.env ูู ENCRYPTION_KEY`,acknowledgment:`ููุฏ ุญูุธุช ู
ูุชุงุญ ุงูุชุดููุฑ ูู ู
ูุงู ุขู
ู ูุฃููู
ุฃู ููุฏุงูู ูุฏ ูุคุฏู ุฅูู ููุฏุงู ุงูุจูุงูุงุช.`,confirmRequired:`ูุฑุฌู ุงูุชุฃููุฏ ุนูู ุฃูู ุญูุธุช ู
ูุชุงุญ ุงูุชุดููุฑ`,continue:`ุงูู
ุชุงุจุนุฉ ุฅูู Libre WebUI`}},chat:{greeting:{morning:`ุตุจุงุญ ุงูุฎูุฑ`,afternoon:`ู
ุณุงุก ุงูุฎูุฑ`,evening:`ู
ุณุงุก ุงูุฎูุฑ`,night:`ุชุตุจุญ ุนูู ุฎูุฑ`},welcome:{helpToday:`ููู ูู
ูููู ู
ุณุงุนุฏุชู ุงูููู
ุ`,helpTonight:`ููู ูู
ูููู ู
ุณุงุนุฏุชู ุงููููุฉุ`,variety:{create:{title:`ู
ุงุฐุง ูุตูุนุ`,subtitle:`ุงุจุฏุฃ ุจููุฑุฉุ ุฃู ุฑุณู
ุฃูููุ ุฃู ู
ุดููุฉ ุนููุฏุฉ.`},explore:{title:`ู
ู ุฃูู ูุจุฏุฃุ`,subtitle:`ูุงุช ุงูุณุคุงู ุงูุฐู ูุง ูููู ุนู ุงูุนูุฏุฉ ุฅูู ุฐููู.`},imagine:{title:`ู
ุง ุงูุฐู ุชุชุฎููููุ`,subtitle:`ูู
ูููุง ุฃู ูู
ูุญู ุดููุงู ู
ุนูุง.`},focus:{title:`ู
ุง ุงูุฐู ูุณุชุญู ุงูุชุจุงููุ`,subtitle:`ููุฌุนู ุงูุฎุทูุฉ ุงูุชุงููุฉ ูุงุถุญุฉ.`},untangle:{title:`ู
ุง ุงูุฐู ูุจุฏู ู
ุนููุฏูุงุ`,subtitle:`ุฃุนุทูู ุงููุณุฎุฉ ุงูููุถููุฉ ุฃูููุง.`},momentum:{title:`ูููุทูู ุนูุฏู
ุง ุชููู ุฌุงูุฒูุง.`,subtitle:`ุชุงุจุน ููุฑุฉ ุฃู ุฎุทุฉ ุฃู ุฎูุทูุง ุชุฑูุชู ุฏูู ุฅูู
ุงู.`},open:{title:`ู
ุง ุงูุฐู ูุดุบู ุจุงููุ`,subtitle:`ุฎุงุทุฑุฉ ุตุบูุฑุฉ ุฃู ู
ุดุฑูุน ุทู
ูุญ. ููุงูู
ุง ู
ูุงุณุจ.`},challenge:{title:`ู
ุง ุงูุฐู ูุญุงูู ุญูููุ`,subtitle:`ุฃุฎุจุฑูู ุจู
ุง ูุง ูุนู
ู ุจุนุฏ.`},draft:{title:`ููุจุฏุฃ ู
ู ู
ูุงู ู
ุง.`,subtitle:`ูุง ูุดุชุฑุท ุฃู ูููู ู
ุตููููุง.`},possibility:{title:`ุฅูู ู
ุงุฐุง ูู
ูู ุฃู ูุชุญูู ูุฐุงุ`,subtitle:`ุฃุฑูู ุงูู
ุงุฏุฉ ุงูุฎุงู
.`},unexpected:{title:`ููุตูุน ุดูุฆูุง ุบูุฑ ู
ุชููุน.`,subtitle:`ุฃุนุทูู ููุฏูุงุ ุฃู ู
ุฒุงุฌูุงุ ุฃู ููุฑุฉ ูู
ุชูุชู
ู ุจุนุฏ.`}}},input:{placeholder:`ุฃุฑุณู ุฑุณุงูุฉ`,messagePlaceholder:`ุฑุณุงูุฉ...`,attachImages:`ุฅุฑูุงู ุตูุฑ`,attachments:`ุงูู
ุฑููุงุช ูุงูู
ูุฒุงุช ุงูู
ุชูุฏู
ุฉ`,sendMessage:`ุฅุฑุณุงู ุงูุฑุณุงูุฉ`,stopGeneration:`ุฅููุงู ุงูุชูููุฏ`},session:{new:`ู
ุญุงุฏุซุฉ ุฌุฏูุฏุฉ`,work:`ุงูุนู
ู`,chat:`ู
ุญุงุฏุซุฉ`,private:`ุฎุงุต`,privateMode:`ุงููุถุน ุงูุฎุงุต`,privateDescription:`ูู ูุชู
ุญูุธ ูุฐู ุงูู
ุญุงุฏุซุฉ`,privateTooltip:`ุงุจุฏุฃ ู
ุญุงุฏุซุฉ ุฎุงุตุฉ ูู ูุชู
ุญูุธูุง`,deleteConfirm:`ูู ุฃูุช ู
ุชุฃูุฏ ู
ู ุญุฐู ูุฐู ุงูู
ุญุงุฏุซุฉุ`,generatingTitle:`ุฌุงุฑู ุชูููุฏ ุงูุนููุงู`,noChats:`ูุง ุชูุฌุฏ ู
ุญุงุฏุซุงุช ุจุนุฏ`,createFirst:`ุฃูุดุฆ ุฃูู ู
ุญุงุฏุซุฉ ุฃุนูุงู`,chats:`ุงูู
ุญุงุฏุซุงุช`,renameChat:`ุฅุนุงุฏุฉ ุชุณู
ูุฉ ุงูู
ุญุงุฏุซุฉ`,deleteChat:`ุญุฐู ุงูู
ุญุงุฏุซุฉ`,incognito:`ุฏุฑุฏุดุฉ ู
ุฎููุฉ`},persona:{applied:`ุชู
ุชุทุจูู ุงูุดุฎุตูุฉ`,label:`ุงูุดุฎุตูุฉ`,removeFailed:`ูุดู ูู ุฅุฒุงูุฉ ุงูุดุฎุตูุฉ`},model:{updated:`ุชู
ุชุญุฏูุซ ุงููู
ูุฐุฌ`,noModels:`ูุง ุชูุฌุฏ ูู
ุงุฐุฌ ู
ุชุงุญุฉ`,noModelsDescription:`ูุง ุชูุฌุฏ ูู
ุงุฐุฌ ู
ุชุงุญุฉ. ุชุฃูุฏ ู
ู ุชุดุบูู Ollama ูุชุซุจูุช ุงููู
ุงุฐุฌ.`,pullCommand:`ollama pull llama3.2:3b`,noModelsTooltip:`ูุง ุชูุฌุฏ ูู
ุงุฐุฌ ู
ุชุงุญุฉ. ูุฑุฌู ุงูุชุฃูุฏ ู
ู ุชุดุบูู Ollama ูุชุซุจูุช ุงููู
ุงุฐุฌ.`,selectBeforePrivateChat:`ุงุฎุชุฑ ูู
ูุฐุฌุงู ู
ุชุงุญุงู ูุจู ุจุฏุก ู
ุญุงุฏุซุฉ ุฎุงุตุฉ`,selectBeforeSending:`ุงุฎุชุฑ ูู
ูุฐุฌุงู ู
ุชุงุญุงู ูุจู ุงูุฅุฑุณุงู`},footer:{disclaimer:`ูุฏ ูุฑุชูุจ ุงูุฐูุงุก ุงูุงุตุทูุงุนู ุฃุฎุทุงุก - ุชุญูู ู
ู ุงูู
ุนููู
ุงุช ุงูู
ูู
ุฉ`,images:`{{count}} ุตูุฑุฉ`,images_plural:`{{count}} ุตูุฑ`,structuredOutput:`ู
ุฎุฑุฌุงุช ู
ูุธู
ุฉ`},mediaUpload:{dropImagesHere:`ุฃููุช ุงูุตูุฑ ููุง ุฃู`,supportedFormats:`ูุฏุนู
: JPGุ PNGุ GIFุ WebP (ุญุฏ ุฃูุตู 10 ู
ูุฌุงุจุงูุช ููู ุตูุฑุฉ)`,browse:`ุชุตูุญ`},structuredOutput:{title:`ุชูุณูู ุงูุงุณุชุฌุงุจุฉ`,none:`ุจุฏูู (ูุบุฉ ุทุจูุนูุฉ)`,noneDescription:`ุงุณุชุฌุงุจุฉ ุจุงููุบุฉ ุงูุทุจูุนูุฉ ุงูุงูุชุฑุงุถูุฉ`,json:`JSON`,jsonDescription:`ุชูุณูู JSON ู
ูุธู
`,list:`ูุงุฆู
ุฉ`,listDescription:`ู
ุตูููุฉ ู
ู ุงูุนูุงุตุฑ`,summary:`ู
ูุฎุต`,summaryDescription:`ู
ูุฎุต ุงูู
ุณุชูุฏ ู
ุน ุงูููุงุท ุงูุฑุฆูุณูุฉ`,analysis:`ุชุญููู`,analysisDescription:`ุชุญููู ู
ูุธู
ู
ุน ุงูุฅูุฌุงุจูุงุช ูุงูุณูุจูุงุช`,custom:`ู
ุฎุทุท ู
ุฎุตุต`,customDescription:`ุญุฏุฏ ู
ุฎุทุท JSON ุงูุฎุงุต ุจู`,customSchema:`ู
ุฎุทุท JSON ู
ุฎุตุต`,schemaPreview:`ู
ุนุงููุฉ ุงูู
ุฎุทุท`,applySchema:`ุชุทุจูู ุงูู
ุฎุทุท`,cancel:`ุฅูุบุงุก`,enabled:`ุชู
ุชูุนูู ุงูู
ุฎุฑุฌุงุช ุงูู
ูุธู
ุฉ`}},sidebar:{navigation:{chat:`ู
ุญุงุฏุซุฉ`,models:`ุงููู
ุงุฐุฌ`,personas:`ุงูุดุฎุตูุงุช`,imagine:`ุชุฎููู`,work:`ุงูุนู
ู`,settings:`ุงูุฅุนุฏุงุฏุงุช`,userManagement:`ุฅุฏุงุฑุฉ ุงูู
ุณุชุฎุฏู
ูู`,signOut:`ุชุณุฌูู ุงูุฎุฑูุฌ`,agents:`ุงููููุงุก`,exploreLabel:`ุงุณุชูุดุงู`,usageAnalytics:`ุงุณุชุฎุฏุงู
ุงูู
ุฒูุฏ`,system:`ุงููุธุงู
`},toggleSize:`ุชุจุฏูู ุญุฌู
ุงูุดุฑูุท ุงูุฌุงูุจู`,expandSidebar:`ุชูุณูุน ุงูุดุฑูุท ุงูุฌุงูุจู`},user:{menu:{changePicture:`ุชุบููุฑ ุงูุตูุฑุฉ`,settings:`ุงูุฅุนุฏุงุฏุงุช`,userManagement:`ุฅุฏุงุฑุฉ ุงูู
ุณุชุฎุฏู
ูู`,logout:`ุชุณุฌูู ุงูุฎุฑูุฌ`,usageAnalytics:`ุงุณุชุฎุฏุงู
ุงูู
ุฒูุฏ`,system:`ุงููุธุงู
`},avatar:{title:`ุชุบููุฑ ุตูุฑุฉ ุงูู
ูู ุงูุดุฎุตู`,updated:`ุชู
ุชุญุฏูุซ ุตูุฑุฉ ุงูู
ูู ุงูุดุฎุตู`,updateFailed:`ูุดู ุชุญุฏูุซ ุตูุฑุฉ ุงูู
ูู ุงูุดุฎุตู`,saving:`ุฌุงุฑู ุงูุญูุธ...`,label:`ุงูุตูุฑุฉ ุงูุฑู
ุฒูุฉ`,uploadAvatarImage:`ุฑูุน ุตูุฑุฉ ุฑู
ุฒูุฉ`,dragAndDrop:`ุงุณุญุจ ูุฃููุช ุตูุฑุฉ ุฃู ุงููุฑ ููุชุตูุญ`,chooseImage:`ุงุฎุชุฑ ุตูุฑุฉ`,uploading:`ุฌุงุฑู ุงูุฑูุน...`,enterImageUrl:`ุฃู ุฃุฏุฎู ุฑุงุจุท ุงูุตูุฑุฉ`,supportedFormats:`ุงูุตูุบ ุงูู
ุฏุนูู
ุฉ: JPGุ PNGุ GIFุ WebP (ุงูุญุฏ ุงูุฃูุตู 2 ู
ูุฌุงุจุงูุช). ุงูุตูุฑ ุงูู
ุฑุจุนุฉ ุชุนู
ู ุจุดูู ุฃูุถู.`,customAvatar:`ุตูุฑุฉ ุฑู
ุฒูุฉ ู
ุฎุตุตุฉ`,clickToChange:`ุงููุฑ ููุชุบููุฑ ุฃู ุงูุฅุฒุงูุฉ`,removed:`ุชู
ุช ุฅุฒุงูุฉ ุงูุตูุฑุฉ ุงูุฑู
ุฒูุฉ`,uploaded:`ุชู
ุฑูุน ุงูุตูุฑุฉ ุงูุฑู
ุฒูุฉ ุจูุฌุงุญ`,invalidFile:`ูุฑุฌู ุงุฎุชูุงุฑ ู
ูู ุตูุฑุฉ ุตุงูุญ`,fileTooLarge:`ูุฌุจ ุฃู ูููู ุญุฌู
ุงูุตูุฑุฉ ุงูุฑู
ุฒูุฉ ุฃูู ู
ู 2 ู
ูุฌุงุจุงูุช`,readFailed:`ูุดู ูุฑุงุกุฉ ู
ูู ุงูุตูุฑุฉ`,uploadFailed:`ูุดู ุฑูุน ุงูุตูุฑุฉ ุงูุฑู
ุฒูุฉ`},profile:{noEmail:`ูู
ูุชู
ุชูุฏูู
ุจุฑูุฏ ุฅููุชุฑููู`}},settings:JSON.parse(`{"title":"ุงูุฅุนุฏุงุฏุงุช","tabs":{"appearance":"ุงูู
ุธูุฑ","model":"ุงููู
ูุฐุฌ","systemMessage":"ุฑุณุงูุฉ ุงููุธุงู
","plugins":"ุงูุฅุถุงูุงุช","generation":"ุงูุชูููุฏ","documents":"ุงูู
ุณุชูุฏุงุช","tts":"ุชุญููู ุงููุต ุฅูู ููุงู
","imageGen":"ุชูููุฏ ุงูุตูุฑ","data":"ุงูุจูุงูุงุช","about":"ุญูู"},"appearance":{"title":"ุงูู
ุธูุฑ","language":{"title":"ุงููุบุฉ","description":"ุงุฎุชุฑ ูุบุชู ุงูู
ูุถูุฉ"},"theme":{"title":"ุงูุณู
ุฉ","light":"ูุงุชุญ","dark":"ุฏุงูู","amoled":"ุฃุณูุฏ ููู","system":"ุงููุธุงู
"},"accent":{"title":"ููู ุงูุชู
ููุฒ","custom":"ููู ู
ุฎุตุต","useColor":"ุงุณุชุฎุฏุงู
{{color}} ูููู ุชู
ููุฒ","behaviorTitle":"ููุญุฉ ุฃููุงู ุงููุงุฌูุฉ","behaviorDescription":"ุงุฎุชุฑ ู
ุง ุฅุฐุง ูุงู ููู ุงูุชู
ููุฒ ููุชุตุฑ ุนูู ุนูุงุตุฑ ุงูุชุญูู
ุฃู ููููู ุงููุงุฌูุฉ ุงููุงุชุญุฉ ุฃู ุงูุฏุงููุฉ ุจุงููุงู
ู.","defaultStyle":"ุงูุชุฑุงุถู","defaultStyleDescription":"ุงูุงุญุชูุงุธ ุจุงูุฃุณุทุญ ุงูู
ุญุงูุฏุฉ ูููุถุนูู ุงููุงุชุญ ูุงูุฏุงูู.","adaptedStyle":"ุงูุชููู ู
ุน ููู ุงูุชู
ููุฒ","adaptedStyleDescription":"ุชูููู ุงูุฃุณุทุญ ูุงูุญุฏูุฏ ูุงููุตูุต ุจููู ุงูุชู
ููุฒ."},"chatInterface":{"title":"ูุงุฌูุฉ ุงูู
ุญุงุฏุซุฉ","showUsername":"ุฅุธูุงุฑ ุงุณู
ุงูู
ุณุชุฎุฏู
","showUsernameDescription":"ุนุฑุถ ุงุณู
ุงูู
ุณุชุฎุฏู
ูู ุฑุณุงุฆู ุงูู
ุญุงุฏุซุฉ"},"background":{"title":"ุตูุฑุฉ ุงูุฎูููุฉ","enable":"ุชูุนูู ุตูุฑุฉ ุงูุฎูููุฉ","enableDescription":"ุนุฑุถ ุฎูููุฉ ู
ุฎุตุตุฉ ู
ุน ุชุฃุซูุฑ ุงูุชู
ููู","blur":"ุงูุชู
ููู","opacity":"ุงูุดูุงููุฉ","upload":"ุฑูุน ุตูุฑุฉ ุงูุฎูููุฉ","dragDrop":"ุงุณุญุจ ูุฃููุช ุตูุฑุฉ ุฃู ุงููุฑ ููุชุตูุญ","chooseImage":"ุงุฎุชุฑ ุตูุฑุฉ"}},"saveSettings":"ุญูุธ ุงูุฅุนุฏุงุฏุงุช","model":{"title":"ุฅุนุฏุงุฏุงุช ุงููู
ูุฐุฌ","defaultModel":"ุงููู
ูุฐุฌ ุงูุงูุชุฑุงุถู","defaultModelDescription":"ุณูุชู
ุงุณุชุฎุฏุงู
ูุฐุง ุงููู
ูุฐุฌ ุงูุชุฑุงุถูุงู ููู
ุญุงุฏุซุงุช ุงูุฌุฏูุฏุฉ","selectModel":"ุงุฎุชุฑ ูู
ูุฐุฌุงู","updateAll":"ุชุญุฏูุซ ุฌู
ูุน ุงููู
ุงุฐุฌ","updateAllDescription":"ุงูุชุญูู ู
ู ุงูุชุญุฏูุซุงุช ูุณุญุจ ุฃุญุฏุซ ุฅุตุฏุงุฑุงุช ุฌู
ูุน ุงููู
ุงุฐุฌ ุงูู
ุซุจุชุฉ","updateAllButton":"ุชุญุฏูุซ ุงููู","updating":"ุฌุงุฑู ุชุญุฏูุซ ุงููู
ุงุฐุฌ...","currentModelInfo":"ู
ุนููู
ุงุช ุงููู
ูุฐุฌ ุงูุญุงูู","name":"ุงูุงุณู
","size":"ุงูุญุฌู
","family":"ุงูุนุงุฆูุฉ","format":"ุงูุชูุณูู","status":"ุงูุญุงูุฉ","statusStarting":"ุฌุงุฑู ุงูุจุฏุก...","statusComplete":"ู
ูุชู
ู","statusError":"ุฎุทุฃ","bulkOperations":"ุงูุนู
ููุงุช ุงูู
ุฌู
ุนุฉ","autoTitle":{"title":"ุชูููุฏ ุงูุนููุงู ุงูุชููุงุฆู","enable":"ุชูุนูู ุงูุนููุงู ุงูุชููุงุฆู","enableDescription":"ุชูููุฏ ุนูุงููู ุชููุงุฆูุงู ููู
ุญุงุฏุซุงุช ุงูุฌุฏูุฏุฉ","taskModel":"ูู
ูุฐุฌ ุงูู
ูุงู
","selectTaskModel":"ุงุฎุชุฑ ูู
ูุฐุฌ ุงูู
ูุงู
","taskModelDescription":"ุงููู
ูุฐุฌ ุงูู
ุณุชุฎุฏู
ูุชูููุฏ ุนูุงููู ุงูู
ุญุงุฏุซุงุช"},"persona":"ุดุฎุตูุฉ","updatingModel":"ุชุญุฏูุซ {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} ู
ู {{total}} ูู
ุงุฐุฌ","specializedModels":"ูู
ุงุฐุฌ ู
ุชุฎุตุตุฉ","visionModel":"ูู
ูุฐุฌ ุงูุฑุคูุฉ","selectVisionModel":"ุงุณุชุฎุฏุงู
ูู
ูุฐุฌ ุงูุฏุฑุฏุดุฉ ุงูุญุงูู","visionModelDescription":"ููุณุชุฎุฏู
ุชููุงุฆููุง ููู
ุง ุงุญุชูู ุณูุงู ุงูุฏุฑุฏุดุฉ ุงูุตุงุฏุฑ ุนูู ุตูุฑ. ุงุฎุชุฑ ูู
ูุฐุฌูุง ูุฏุนู
ุฅุฏุฎุงู ุงูุตูุฑ.","visionModelUpdateFailed":"ูุดู ุชุญุฏูุซ ูู
ูุฐุฌ ุงูุฑุคูุฉ: {{error}}","visionModelNoProvider":"ูู
ูุฐุฌ ุงูุฑุคูุฉ ูุฐุง ููุณ ูู ูููุฉ ู
ุฒููุฏ. ุงุฎุชุฑ ูู
ูุฐุฌุงู ู
ุชุงุญุงู."},"systemMessage":{"title":"ุฑุณุงูุฉ ุงููุธุงู
","description":"ุนููู ุฑุณุงูุฉ ูุธุงู
ู
ุฎุตุตุฉ ุณุชูุณุชุฎุฏู
ูุฌู
ูุน ุงูู
ุญุงุฏุซุงุช ุงูุฌุฏูุฏุฉ.","placeholder":"ุฃุฏุฎู ุฑุณุงูุฉ ุงููุธุงู
...","saved":"ุชู
ุญูุธ ุฑุณุงูุฉ ุงููุธุงู
","saveFailed":"ูุดู ุญูุธ ุฑุณุงูุฉ ุงููุธุงู
"},"plugins":{"title":"ุงูุฅุถุงูุงุช","description":"ุฅุฏุงุฑุฉ ุงูุฅุถุงูุงุช ุงูู
ุซุจุชุฉ","addNew":"ุฅุถุงูุฉ ุฅุถุงูุฉ ุฌุฏูุฏุฉ","upload":"ุฑูุน ุฅุถุงูุฉ","addJson":"ุฅุถุงูุฉ JSON","uploading":"ุฌุงุฑู ุงูุฑูุน...","jsonPlaceholder":"ุงูุตู ุฅุนุฏุงุฏุงุช JSON ููุฅุถุงูุฉ...","install":"ุชุซุจูุช ุงูุฅุถุงูุฉ","noPlugins":"ูุง ุชูุฌุฏ ุฅุถุงูุงุช ู
ุซุจุชุฉ","noPluginsDescription":"ุฃุถู ุฅุถุงูุฉ ูุชูุณูุน ุงููุธุงุฆู","loading":"ุฌุงุฑู ุชุญู
ูู ุงูุฅุถุงูุงุช...","installed":"ุงูุฅุถุงูุงุช ุงูู
ุซุจุชุฉ","active":"ุงูุฅุถุงูุงุช ุงููุดุทุฉ","activeLabel":"ูุดุท","inactive":"ุบูุฑ ูุดุท","activate":"ุชูุนูู","deactivate":"ุฅูุบุงุก ุงูุชูุนูู","models":"ูู
ุงุฐุฌ","apiKeySet":"ุชู
ุชุนููู ู
ูุชุงุญ API","apiKeyConfiguration":"ุฅุนุฏุงุฏ ู
ูุชุงุญ API","apiKeyEnvAlternative":"ุจุฏูุงู ู
ู ุฐููุ ุนููู","environmentVariable":"ู
ุชุบูุฑ ุงูุจูุฆุฉ","apiKeyConfigured":"ุชู
ุฅุนุฏุงุฏ ู
ูุชุงุญ API","apiKeyPlaceholder":"ุฃุฏุฎู ู
ูุชุงุญ API...","saveApiKey":"ุญูุธ ู
ูุชุงุญ API","apiKey":{"title":"ู
ูุชุงุญ API","placeholder":"ุฃุฏุฎู ู
ูุชุงุญ API","save":"ุญูุธ ุงูู
ูุชุงุญ","remove":"ุฅุฒุงูุฉ ุงูู
ูุชุงุญ","configured":"ุชู
ุฅุนุฏุงุฏ ู
ูุชุงุญ API","notConfigured":"ู
ูุชุงุญ API ู
ุทููุจ","saved":"ุชู
ุญูุธ ู
ูุชุงุญ API ุจูุฌุงุญ","removed":"ุชู
ุฅุฒุงูุฉ ู
ูุชุงุญ API","saveFailed":"ูุดู ุญูุธ ู
ูุชุงุญ API","removeFailed":"ูุดู ุฅุฒุงูุฉ ู
ูุชุงุญ API","enterKey":"ูุฑุฌู ุฅุฏุฎุงู ู
ูุชุงุญ API"},"variables":"Variables","providerConnections":"ุงุชุตุงูุงุช ุงูู
ุฒูุฏ","providerConnectionsDescription":"ุงุชุตูุ ููู
ุจุชููููุ ููุญุต ู
ุฒูุฏู ุงููู
ุงุฐุฌ ุนุจุฑ ุงูุฅุถุงูุงุช.","providers":"ุงูู
ุฒูุฏูู","searchProviders":"ุงุจุญุซ ุนู ุงูู
ุฒูุฏูู","noProvidersFound":"ูุง ููุฌุฏ ู
ุฒูุฏูู ูุทุงุจููู ุจุญุซู.","selectProvider":"ุงุฎุชุฑ ู
ุฒูุฏูุง","selectProviderDescription":"ุงุฎุชุฑ ู
ุฒูุฏูุง ููุญุต ุงุชุตุงูู ููุชุงููุฌ ุงููู
ุงุฐุฌ ุงูุฎุงุต ุจู.","apiKeyDescription":"ูู
ุจุชุฎุฒูู ู
ูุชุงุญ API ุดุฎุตู ูู {{name}}.","showApiKey":"ุฅุธูุงุฑ ู
ูุชุงุญ API","hideApiKey":"ุฅุฎูุงุก ู
ูุชุงุญ API","configure":"ุชูููู","providerSettings":"ุฅุนุฏุงุฏุงุช ุงูู
ุฒูุฏ","status":"ุงูุญุงูุฉ","defaultEndpoint":"ููุทุฉ ุงูููุงูุฉ ุงูุงูุชุฑุงุถูุฉ","modelCatalog":"ูุชุงููุฌ ุงููู
ุงุฐุฌ","modelCatalogDescription":"ุงููู
ุงุฐุฌ ุงูู
ูุชุดูุฉ ูุงูู
ูููุฉ ููุฐุง ุงูู
ุฒูุฏ ููุฏุฑุงุชู.","refreshModels":"ุชุญุฏูุซ ุงููู
ุงุฐุฌ","noModelsConfigured":"ูุง ุชูุฌุฏ ูู
ุงุฐุฌ ู
ูููุฉ ููุฐุง ุงูู
ุฒูุฏ.","modelId":"ู
ุนุฑู ุงููู
ูุฐุฌ","capabilities":"ุงููุฏุฑุงุช","modelCatalogUpdated":"ุชู
ุชุญุฏูุซ ูุชุงููุฌ ุงููู
ุงุฐุฌ: {{count}} ูู
ุงุฐุฌ.","modelCatalogUnchanged":"ูุชุงููุฌ ุงููู
ุงุฐุฌ ู
ุญุฏุซ ุจุงููุนู.","modelCatalogNeedsApiKey":"ุฃุถู ู
ูุชุงุญ API ุตุงูุญ ููุฐุง ุงูู
ุฒูุฏ ูุชุญู
ูู ูุงุฆู
ุฉ ูู
ุงุฐุฌู ุงูู
ุจุงุดุฑุฉ.","modelCatalogUnavailable":"ุชุนุฐุฑ ุชุญู
ูู ูุงุฆู
ุฉ ูู
ุงุฐุฌ ุงูู
ุฒูุฏ.","modelCatalogRefreshFailed":"ูุดู ุชุญุฏูุซ ูุชุงููุฌ ุงููู
ุงุฐุฌ","capability":{"chat":"ุฏุฑุฏุดุฉ","embedding":"ุชุถู
ูู","image":"ุตูุฑุฉ","speech":"ููุงู
","transcription":"ูุณุฎ"},"exportPlugin":"ุชุตุฏูุฑ ุงูุฅุถุงูุฉ","deletePlugin":"ุญุฐู ุงูุฅุถุงูุฉ"},"generation":{"title":"ุฎูุงุฑุงุช ุงูุชูููุฏ","description":"ุฅุนุฏุงุฏ ููููุฉ ุชูููุฏ ุงูุฐูุงุก ุงูุงุตุทูุงุนู ููุงุณุชุฌุงุจุงุช","coreParameters":"ุงูู
ุนูู
ุงุช ุงูุฃุณุงุณูุฉ","temperature":"ุฏุฑุฌุฉ ุงูุญุฑุงุฑุฉ","temperatureDescription":"ูุชุญูู
ูู ุงูุนุดูุงุฆูุฉ. ุงูููู
ุงูุฃูู ุฃูุซุฑ ุชุฑููุฒุงูุ ูุงูููู
ุงูุฃุนูู ุฃูุซุฑ ุฅุจุฏุงุนุงู.","topP":"Top P","topPDescription":"ูุชุญูู
ูู ุงูุชููุน ุนุจุฑ ุฃุฎุฐ ุงูุนููุงุช ุงูููููุฉ. ุงูููู
ุงูุฃูู ุชุฑูุฒ ุนูู ุงูุฑู
ูุฒ ุงูู
ุญุชู
ูุฉ.","topK":"Top K","topKDescription":"ูุญุฏ ุงุฎุชูุงุฑ ุงูุฑู
ูุฒ ูุฃูุซุฑ K ุฑู
ุฒ ุงุญุชู
ุงูุงู. ุนููู 0 ููุชุนุทูู.","minP":"Min P","minPDescription":"ุงูุญุฏ ุงูุฃุฏูู ูุงุญุชู
ุงู ุงุฎุชูุงุฑ ุงูุฑู
ุฒ.","generationControl":"ุงูุชุญูู
ูู ุงูุชูููุฏ","maxTokens":"ุงูุญุฏ ุงูุฃูุตู ููุฑู
ูุฒ","maxTokensDescription":"ุงูุญุฏ ุงูุฃูุตู ูุนุฏุฏ ุงูุฑู
ูุฒ ุงูู
ููุฏุฉ ูู ุงูุงุณุชุฌุงุจุฉ.","repeatPenalty":"ุนููุจุฉ ุงูุชูุฑุงุฑ","repeatPenaltyDescription":"ูุนุงูุจ ุงูุฑู
ูุฒ ุงูู
ุชูุฑุฑุฉ. ุงูููู
ุงูุฃุนูู ุชููู ุงูุชูุฑุงุฑ.","contextLength":"ุทูู ุงูุณูุงู","contextLengthDescription":"ุงูุญุฏ ุงูุฃูุตู ูุญุฌู
ูุงูุฐุฉ ุงูุณูุงู ููู
ุญุงุฏุซุงุช.","seed":"ุงูุจุฐุฑุฉ","optional":"ุงุฎุชูุงุฑู","random":"ุนุดูุงุฆู","seedDescription":"ุนููู ุจุฐุฑุฉ ู
ุญุฏุฏุฉ ููู
ุฎุฑุฌุงุช ุงููุงุจูุฉ ููุชูุฑุงุฑ.","advancedOptions":"ุฎูุงุฑุงุช ู
ุชูุฏู
ุฉ","presencePenalty":"ุนููุจุฉ ุงููุฌูุฏ","presencePenaltyDescription":"ูุนุงูุจ ุงูุฑู
ูุฒ ุงูุชู ุชุธูุฑ ูู ุงูุณูุงู.","frequencyPenalty":"ุนููุจุฉ ุงูุชูุฑุงุฑ","frequencyPenaltyDescription":"ูุนุงูุจ ุงูุฑู
ูุฒ ุงูู
ุณุชุฎุฏู
ุฉ ุจุดูู ู
ุชูุฑุฑ.","stopSequences":"ุชุณูุณูุงุช ุงูุฅููุงู","commaSeparated":"ู
ูุตููุฉ ุจููุงุตู","stopSequencesDescription":"ุฑู
ูุฒ ู
ุฎุตุตุฉ ุณุชููู ุงูุชูููุฏ ุนูุฏ ู
ุตุงุฏูุชูุง.","resetDefaults":"ุฅุนุงุฏุฉ ุชุนููู ุงูุงูุชุฑุงุถูุงุช","saveOptions":"ุญูุธ ุงูุฎูุงุฑุงุช","embeddingSettings":"ุฅุนุฏุงุฏุงุช ุงูุชุถู
ูู","enableEmbeddings":"ุชูุนูู ุชุถู
ูู ุงูู
ุณุชูุฏุงุช","advancedSettings":"ุฅุนุฏุงุฏุงุช ุงูุชูููุฏ ุงูู
ุชูุฏู
ุฉ","advancedSettingsDescription":"ุฃุฎุฐ ุงูุนููุงุชุ ูุญุฏูุฏ ุงูุฑู
ูุฒุ ูุงูุณูุงูุ ูุงูุนููุจุงุชุ ูุชุณูุณูุงุช ุงูุฅููุงู"},"documents":{"title":"ุฅุนุฏุงุฏุงุช ุงูู
ุณุชูุฏุงุช","embeddings":{"title":"ุงูุชุถู
ููุงุช","enable":"ุชูุนูู ุชุถู
ูู ุงูู
ุณุชูุฏุงุช","model":"ูู
ูุฐุฌ ุงูุชุถู
ูู","modelDescription":"ุงุฎุชุฑ ุงููู
ูุฐุฌ ุงูู
ุณุชุฎุฏู
ูุชุถู
ูู ุงูู
ุณุชูุฏุงุช","chunkSize":"ุญุฌู
ุงููุทุนุฉ","chunkSizeInTokens":"(ุจุงูุฑู
ูุฒ)","chunkSizeDescription":"ุญุฌู
ูุทุน ุงููุต ููุชุถู
ูู","chunkOverlap":"ุชุฏุงุฎู ุงููุทุน","chunkOverlapInTokens":"(ุจุงูุฑู
ูุฒ)","chunkOverlapDescription":"ุงูุชุฏุงุฎู ุจูู ุงููุทุน ุงูู
ุชุชุงููุฉ","similarityThreshold":"ุนุชุจุฉ ุงูุชุดุงุจู","similarityDescription":"ุงูุญุฏ ุงูุฃุฏูู ูุฏุฑุฌุฉ ุงูุชุดุงุจู ูุชุถู
ูู ุงููุชุงุฆุฌ","status":"ุญุงูุฉ ุงูุชุถู
ูู","statusLabel":"ุงูุญุงูุฉ","available":"ู
ุชุงุญ","unavailable":"ุบูุฑ ู
ุชุงุญ","chunksWithEmbeddings":"ูุทุน ู
ุน ุชุถู
ููุงุช","coverage":"ุงูุชุบุทูุฉ","regenerate":"ุฅุนุงุฏุฉ ุชูููุฏ ุงูุชุถู
ููุงุช","regenerating":"ุฌุงุฑู ุฅุนุงุฏุฉ ุงูุชูููุฏ..."}},"tts":{"title":"ุชุญููู ุงููุต ุฅูู ููุงู
","description":"ุฅุนุฏุงุฏ ุฅุนุฏุงุฏุงุช ุชุญููู ุงููุต ุฅูู ููุงู
ููุฑุงุกุฉ ุงูุฑุณุงุฆู ุจุตูุช ุนุงูู","loadingProviders":"ุฌุงุฑู ุชุญู
ูู ู
ุฒูุฏู TTS...","noProviders":"ูุง ููุฌุฏ ู
ุฒูุฏู TTS","noProvidersDescription":"ูู
ุจุฅุนุฏุงุฏ ุฅุถุงูุฉ ู
ุน ุฏุนู
TTS ูุชูุนูู ุชุญููู ุงููุต ุฅูู ููุงู
","enable":"ุชูุนูู TTS","enableDescription":"ุงูุณู
ุงุญ ุจุชุญููู ุงููุต ุฅูู ููุงู
ูุฑุณุงุฆู ุงูู
ุณุงุนุฏ","autoPlay":"ุชุดุบูู ุชููุงุฆู ููุงุณุชุฌุงุจุงุช","autoPlayDescription":"ูุฑุงุกุฉ ุฑุณุงุฆู ุงูู
ุณุงุนุฏ ุงูุฌุฏูุฏุฉ ุจุตูุช ุนุงูู ุชููุงุฆูุงู","streamSentences":"ุจุซ ุงูุฌู
ู","streamSentencesDescription":"ุชุดุบูู ุงูุตูุช ุฌู
ูุฉ ุจุฌู
ูุฉ ุจุฏูุงู ู
ู ุงูุชุธุงุฑ ุงูุฑุณุงูุฉ ุงููุงู
ูุฉ. ู
ูุตู ุจู ูู TTS ุงูู
ุญูู ูุชุฌูุจ ุงูุชูุงุก ุงูู
ููุฉ ูู ุงูุฑุณุงุฆู ุงูุทูููุฉ.","voiceConfiguration":"ุฅุนุฏุงุฏ ุงูุตูุช","model":"ูู
ูุฐุฌ TTS","modelDescription":"ุงุฎุชุฑ ุงููู
ูุฐุฌ ูุชูููุฏ ุงูููุงู
","voice":"ุงูุตูุช","selectVoice":"ุงุฎุชุฑ ุตูุชุงู","voiceDescription":"ุงุฎุชุฑ ุงูุตูุช ูุชุญููู ุงููุต ุฅูู ููุงู
","speed":"ุงูุณุฑุนุฉ","speedSlow":"0.5x","speedNormal":"1.0x","speedFast":"2.0x","availableProviders":"ุงูู
ุฒูุฏูู ุงูู
ุชุงุญูู","models":"ูู
ุงุฐุฌ","test":"ุงุฎุชุจุงุฑ","testing":"ุฌุงุฑู ุงูุงุฎุชุจุงุฑ...","stop":"ุฅููุงู"},"imageGen":{"title":"ุชูููุฏ ุงูุตูุฑ","description":"ุฅุนุฏุงุฏ ุฅุนุฏุงุฏุงุช ูู
ุฒูุฏู ุชูููุฏ ุงูุตูุฑ","loadingProviders":"ุฌุงุฑู ุชุญู
ูู ู
ุฒูุฏู ุชูููุฏ ุงูุตูุฑ...","noProviders":"ูุง ููุฌุฏ ู
ุฒูุฏู ุชูููุฏ ุตูุฑ","noProvidersDescription":"ูู
ุจุฅุนุฏุงุฏ ุฅุถุงูุฉ ู
ุน ุฏุนู
ุชูููุฏ ุงูุตูุฑ","enable":"ุชูุนูู ุชูููุฏ ุงูุตูุฑ","enableDescription":"ุงูุณู
ุงุญ ุจุชูููุฏ ุงูุตูุฑ ุจุงูุฐูุงุก ุงูุงุตุทูุงุนู ูู ุงูู
ุญุงุฏุซุงุช","configuration":"ุงูุฅุนุฏุงุฏ","model":"ุงููู
ูุฐุฌ","modelDescription":"ุงุฎุชุฑ ุงููู
ูุฐุฌ ูุชูููุฏ ุงูุตูุฑ","size":"ุงูุญุฌู
","sizeDescription":"ุฏูุฉ ุงูุตูุฑ ุงูู
ููุฏุฉ","quality":"ุงูุฌูุฏุฉ","qualityDescription":"ู
ุณุชูู ุฌูุฏุฉ ุงูุตูุฑ ุงูู
ููุฏุฉ","style":"ุงูุฃุณููุจ","styleDescription":"ุฅุนุฏุงุฏ ุงูุฃุณููุจ ุงูู
ุณุจู ููุตูุฑ ุงูู
ููุฏุฉ","availableProviders":"ุงูู
ุฒูุฏูู ุงูู
ุชุงุญูู","models":"ูู
ุงุฐุฌ"},"data":{"title":"ุฅุฏุงุฑุฉ ุงูุจูุงูุงุช","export":"ุชุตุฏูุฑ ุงูุจูุงูุงุช","exportDescription":"ุชุญู
ูู ุฌู
ูุน ุจูุงูุงุชู ุจู
ุง ูู ุฐูู ุงูุชูุถููุงุช ูุงูุฌูุณุงุช ูุงูู
ุณุชูุฏุงุช.","exportAll":"ุชุตุฏูุฑ ุฌู
ูุน ุงูุจูุงูุงุช","import":"ุงุณุชูุฑุงุฏ ุงูุจูุงูุงุช","importDescription":"ุงุณุชูุฑุงุฏ ุงูุจูุงูุงุช ู
ู ุชุตุฏูุฑ ุณุงุจู.","importData":"ุงุณุชูุฑุงุฏ ุงูุจูุงูุงุช","importing":"ุฌุงุฑู ุงูุงุณุชูุฑุงุฏ...","clearSessions":"ู
ุณุญ ุงูุฌูุณุงุช","clearSessionsDescription":"ุญุฐู ุฌู
ูุน ุฌูุณุงุช ุงูู
ุญุงุฏุซุฉ. ูุง ูู
ูู ุงูุชุฑุงุฌุน ุนู ูุฐุง ุงูุฅุฌุฑุงุก.","clearAll":"ู
ุณุญ ุงููู","clearing":"ุฌุงุฑู ุงูู
ุณุญ...","importOptions":"ุฎูุงุฑุงุช ุงูุงุณุชูุฑุงุฏ","importOptionsDescription":"ุงุฎุชุฑ ููููุฉ ุงูุชุนุงู
ู ู
ุน ุงูุจูุงูุงุช ุงูู
ูุฌูุฏุฉ","skipDuplicates":"ุชุฎุทู ุงูู
ูุฑุฑุงุช","overwrite":"ุงููุชุงุจุฉ ููู ุงูู
ูุฌูุฏ","importResults":"ูุชุงุฆุฌ ุงูุงุณุชูุฑุงุฏ","preferences":"ุงูุชูุถููุงุช","imported":"ุชู
ุงูุงุณุชูุฑุงุฏ","failed":"ูุดู","sessions":"ุงูุฌูุณุงุช","importedLabel":"ุชู
ุงูุงุณุชูุฑุงุฏ","skipped":"ุชู
ุงูุชุฎุทู","documents":"ุงูู
ุณุชูุฏุงุช","errors":"ุฃุฎุทุงุก"},"about":{"title":"ุญูู","versionLabel":"ุงูุฅุตุฏุงุฑ","ollama":{"title":"ุญุงูุฉ Ollama","version":"ุงูุฅุตุฏุงุฑ","healthy":"ุณููู
","unhealthy":"ุบูุฑ ุณููู
"},"stats":{"models":"ุงููู
ุงุฐุฌ","sessions":"ุงูุฌูุณุงุช"},"features":{"privacy":{"title":"ุงูุฎุตูุตูุฉ ุฃููุงู","description":"ุจูุงูุงุชู ุชุจูู ุนูู ุฌูุงุฒู"},"openSource":{"title":"ู
ูุชูุญ ุงูู
ุตุฏุฑ","description":"ุจุฑูุงู
ุฌ ู
ุฌุงูู ูู
ูุชูุญ ุงูู
ุตุฏุฑ"},"localInference":{"title":"ุงุณุชุฏูุงู ู
ุญูู","description":"ุชุดุบูู ูู
ุงุฐุฌ ุงูุฐูุงุก ุงูุงุตุทูุงุนู ู
ุญููุงู ู
ุน Ollama"}},"openSourceBy":"ู
ูุชูุญ ุงูู
ุตุฏุฑ ุจูุงุณุทุฉ {{company}}","links":{"title":"ุงูุฑูุงุจุท","github":"GitHub","githubDescription":"ุนุฑุถ ุงูููุฏ ุงูู
ุตุฏุฑู ูุงูู
ุณุงูู
ุฉ","website":"ุงูู
ููุน","websiteDescription":"ุฒูุงุฑุฉ ู
ููุนูุง","ollama":"Ollama","ollamaDescription":"ู
ุนุฑูุฉ ุงูู
ุฒูุฏ ุนู Ollama","documentation":"ุงูุชูุซูู","reportIssue":"ุงูุฅุจูุงุบ ุนู ุงูู
ุดุงูู","reportIssueDescription":"ุชูุงุฑูุฑ ุงูุฃุฎุทุงุก ูุทูุจุงุช ุงูู
ูุฒุงุช","gitlab":"ู
ุฑุขุฉ GitLab","gitlabDescription":"ู
ุณุชูุฏุน GitLab ู
ุณุชุถุงู ุฐุงุชูุงู","documentationDescription":"ุฃุฏูุฉ ูุฏุฑูุณ ูู
ุฑุฌุน API"},"version":"ุงูุฅุตุฏุงุฑ {{version}}"},"groups":{"general":"ุนุงู
","chat":"ุงูุฏุฑุฏุดุฉ","media":"ุงูุตูุช ูุงูุตูุฑ","connections":"ุงูุงุชุตุงูุงุช"}}`),models:{title:`ุงููู
ุงุฐุฌ`,subtitle:`ุณุญุจ ูุฅุฏุงุฑุฉ ูู
ุฑุงูุจุฉ ูู
ุงุฐุฌ Ollama`,installed:`ุงููู
ุงุฐุฌ ุงูู
ุซุจุชุฉ`,available:`ุงููู
ุงุฐุฌ ุงูู
ุชุงุญุฉ`,pull:`ุณุญุจ ุงููู
ูุฐุฌ`,pulling:`ุฌุงุฑู ุงูุณุญุจ...`,delete:`ุญุฐู ุงููู
ูุฐุฌ`,deleting:`ุฌุงุฑู ุงูุญุฐู...`,size:`ุงูุญุฌู
`,modified:`ุชู
ุงูุชุนุฏูู`,family:`ุงูุนุงุฆูุฉ`,parameters:`ุงูู
ุนูู
ุงุช`,quantization:`ุงูุชูู
ูู
`,noModels:`ูุง ุชูุฌุฏ ูู
ุงุฐุฌ ู
ุซุจุชุฉ`,pullFirst:`ุงุณุญุจ ูู
ูุฐุฌุงู ููุจุฏุก`,noModelsFound:`ูู
ูุชู
ุงูุนุซูุฑ ุนูู ูู
ุงุฐุฌ`},personas:{title:`ุงูุดุฎุตูุงุช`,create:`ุฅูุดุงุก ุดุฎุตูุฉ`,edit:`ุชุนุฏูู ุงูุดุฎุตูุฉ`,delete:`ุญุฐู ุงูุดุฎุตูุฉ`,name:`ุงูุงุณู
`,description:`ุงููุตู`,systemPrompt:`ู
ูุฌู ุงููุธุงู
`,model:`ุงููู
ูุฐุฌ`,avatar:`ุงูุตูุฑุฉ ุงูุฑู
ุฒูุฉ`,background:`ุงูุฎูููุฉ`,noPersonas:`ูู
ูุชู
ุฅูุดุงุก ุดุฎุตูุงุช`,createFirst:`ุฃูุดุฆ ุฃูู ุดุฎุตูุฉ ูุชุฎุตูุต ุชุฌุฑุจุฉ ุงูู
ุญุงุฏุซุฉ`},gallery:{title:`ุงูู
ุนุฑุถ`,subtitle:`ู
ุนุฑุถ ุงูุตูุฑ ุงูู
ููุฏุฉ ุจุงูุฐูุงุก ุงูุงุตุทูุงุนู`,imageCount:`{{count}} ุตูุฑุฉ`,generate:`ุชูููุฏ ุตูุฑุฉ`,generateDescription:`ุฅูุดุงุก ุตูุฑ ุจุงูุฐูุงุก ุงูุงุตุทูุงุนู`,generating:`ุฌุงุฑู ุงูุชูููุฏ...`,prompt:`ุงูู
ูุฌู`,promptPlaceholder:`ุตู ุงูุตูุฑุฉ ุงูุชู ุชุฑูุฏ ุชูููุฏูุง...`,noImages:`ูู
ูุชู
ุชูููุฏ ุตูุฑ ุจุนุฏ`,download:`ุชุญู
ูู`,delete:`ุญุฐู`,regenerate:`ุฅุนุงุฏุฉ ุงูุชูููุฏ`,model:`ุงููู
ูุฐุฌ`,size:`ุงูุญุฌู
`,quality:`ุงูุฌูุฏุฉ`,created:`ุชู
ุงูุฅูุดุงุก`},errors:{generic:`ุญุฏุซ ุฎุทุฃ`,network:`ุฎุทุฃ ูู ุงูุดุจูุฉ. ูุฑุฌู ุงูุชุญูู ู
ู ุงูุงุชุตุงู.`,unauthorized:`ุบูุฑ ู
ุตุฑุญ ูู ุจุชูููุฐ ูุฐุง ุงูุฅุฌุฑุงุก.`,notFound:`ูู
ูุชู
ุงูุนุซูุฑ ุนูู ุงูู
ูุฑุฏ ุงูู
ุทููุจ.`,serverError:`ุฎุทุฃ ูู ุงูุฎุงุฏู
. ูุฑุฌู ุงูู
ุญุงููุฉ ูุงุญูุงู.`,validation:`ูุฑุฌู ุงูุชุญูู ู
ู ุงูู
ุฏุฎูุงุช ูุงูู
ุญุงููุฉ ู
ุฑุฉ ุฃุฎุฑู.`},keyboard:{title:`ุงุฎุชุตุงุฑุงุช ููุญุฉ ุงูู
ูุงุชูุญ`,toggleSidebar:`ุชุจุฏูู ุงูุดุฑูุท ุงูุฌุงูุจู`,openSettings:`ูุชุญ ุงูุฅุนุฏุงุฏุงุช`,toggleDarkMode:`ุชุจุฏูู ุงููุถุน ุงูุฏุงูู`,showShortcuts:`ุฅุธูุงุฑ ุงุฎุชุตุงุฑุงุช ููุญุฉ ุงูู
ูุงุชูุญ`,closeModals:`ุฅุบูุงู ุงูููุงูุฐ ุงูู
ูุจุซูุฉ`,groups:{navigation:`ุงูุชููู`,settings:`ุงูุฅุนุฏุงุฏุงุช`,general:`ุนุงู
`,chat:`ุงูู
ุญุงุฏุซุฉ`},actions:{sendMessage:`ุฅุฑุณุงู ุงูุฑุณุงูุฉ`,newLine:`ุณุทุฑ ุฌุฏูุฏ ูู ุงูุฑุณุงูุฉ`},footer:`ุงุถุบุท {{key1}} ุฃู {{key2}} ูุฅุธูุงุฑ ูุฐู ุงูู
ุณุงุนุฏุฉ`,tooltip:`ุงุฎุชุตุงุฑุงุช ููุญุฉ ุงูู
ูุงุชูุญ`},modelManager:{title:`ุงููู
ุงุฐุฌ`,loading:`ุฌุงุฑู ุชุญู
ูู ุงููู
ุงุฐุฌ...`,systemStatus:{online:`Ollama ู
ุชุตู`,offline:`Ollama ุบูุฑ ู
ุชุตู`,models:`ูู
ูุฐุฌ`,models_plural:`ูู
ุงุฐุฌ`,running:`ููุฏ ุงูุชุดุบูู`,vram:`VRAM`},sections:{pull:`ุณุญุจ ูู
ูุฐุฌ ุฌุฏูุฏ`,library:`ุชุตูุญ ุงูู
ูุชุจุฉ`,running:`ุงููู
ุงุฐุฌ ููุฏ ุงูุชุดุบูู`,local:`ุงููู
ุงุฐุฌ ุงูู
ุญููุฉ`,advanced:`ุฅุฌุฑุงุกุงุช ู
ุชูุฏู
ุฉ`,huggingface:`HuggingFace Hub`},pull:{placeholder:`ุฃุฏุฎู ุงุณู
ุงููู
ูุฐุฌ (ู
ุซู llama3.2:3bุ deepseek-r1:14b)`,button:`ุณุญุจ`,cancel:`ุฅูุบุงุก`,popular:`ุงููู
ุงุฐุฌ ุงูุดุงุฆุนุฉ:`,browseAll:`ุชุตูุญ ุฌู
ูุน ุงููู
ุงุฐุฌ ุนูู ollama.com`,success:`ุชู
ุณุญุจ ุงููู
ูุฐุฌ {{name}} ุจูุฌุงุญ`,cancelled:`ุชู
ุฅูุบุงุก ุณุญุจ ุงููู
ูุฐุฌ`,failed:`ูุดู ุณุญุจ ุงููู
ูุฐุฌ`,enterName:`ูุฑุฌู ุฅุฏุฎุงู ุงุณู
ุงููู
ูุฐุฌ`,restricted:`ุชุซุจูุช ุงููู
ุงุฐุฌ ู
ูุตูุฑ ุนูู ุงูู
ุณุคูููู ูู ูุฐุง ุงูู
ุซูู.`},progress:{starting:`ุฌุงุฑู ุงูุชููุฆุฉ...`,pulling:`ุฌุงุฑู ุชุญู
ูู ุงููู
ูุฐุฌ...`,pullingLayer:`ุชุญู
ูู`,verifying:`ุฌุงุฑู ุงูุชุญูู ู
ู ุงูุณูุงู
ุฉ...`,verifyingDigest:`ุงูุชุญูู ู
ู ุชุฌุฒุฆุฉ sha256`,writing:`ุฌุงุฑู ูุชุงุจุฉ ุงูุจูุงู...`,cleaning:`ุฌุงุฑู ุงูุชูุธูู...`},library:{available:`ู
ุชุงุญ`,search:`ุงูุจุญุซ ุนู ูู
ุงุฐุฌ...`,noResults:`ูู
ูุชู
ุงูุนุซูุฑ ุนูู ูู
ุงุฐุฌ ุชุทุงุจู ู
ุนุงููุฑู`,installed:`ู
ุซุจุช`,more:`+{{count}} ุงูู
ุฒูุฏ`,refresh:`ุชุญุฏูุซ ุงูู
ูุชุจุฉ`},local:{noModels:`ูู
ูุชู
ุชุซุจูุช ูู
ุงุฐุฌ ุจุนุฏ`,pullToStart:`ุงุณุญุจ ูู
ูุฐุฌุงู ุฃุนูุงู ููุจุฏุก`,installed:`ู
ุซุจุช`,running:`ููุฏ ุงูุชุดุบูู`,info:`ู
ุนููู
ุงุช`,copy:`ูุณุฎ`,delete:`ุญุฐู`,deleteConfirm:`ูู ุฃูุช ู
ุชุฃูุฏ ู
ู ุญุฐู ุงููู
ูุฐุฌ "{{name}}"ุ`,deleteSuccess:`ุชู
ุญุฐู ุงููู
ูุฐุฌ {{name}} ุจูุฌุงุญ`,deleteFailed:`ูุดู ุญุฐู ุงููู
ูุฐุฌ`},advanced:{createModel:`ุฅูุดุงุก ูู
ูุฐุฌ`,fromModelfile:`ู
ู Modelfile`,copyModel:`ูุณุฎ ูู
ูุฐุฌ`,duplicateExisting:`ุชูุฑุงุฑ ู
ูุฌูุฏ`,testEmbeddings:`ุงุฎุชุจุงุฑ ุงูุชุถู
ููุงุช`,generateVectors:`ุชูููุฏ ุงูู
ุชุฌูุงุช`,healthCheck:`ูุญุต ุงูุตุญุฉ`,testConnection:`ุงุฎุชุจุงุฑ ุงูุงุชุตุงู`,healthy:`Ollama ุณููู
!`},modals:{details:{title:`ุชูุงุตูู ุงููู
ูุฐุฌ`,info:`ู
ุนููู
ุงุช ุงููู
ูุฐุฌ`,family:`ุงูุนุงุฆูุฉ`,parameters:`ุงูู
ุนูู
ุงุช`,quantization:`ุงูุชูู
ูู
`,format:`ุงูุชูุณูู`,systemPrompt:`ู
ูุฌู ุงููุธุงู
`,template:`ุงููุงูุจ`,license:`ุงูุชุฑุฎูุต`,modelfile:`Modelfile`,noDetails:`ูุง ุชุชููุฑ ุชูุงุตูู`},copy:{title:`ูุณุฎ ุงููู
ูุฐุฌ`,source:`ุงููู
ูุฐุฌ ุงูู
ุตุฏุฑ`,selectModel:`ุงุฎุชุฑ ูู
ูุฐุฌุงู...`,newName:`ุงุณู
ุงููู
ูุฐุฌ ุงูุฌุฏูุฏ`,placeholder:`ู
ุซู my-custom-model`,copying:`ุฌุงุฑู ุงููุณุฎ...`,button:`ูุณุฎ ุงููู
ูุฐุฌ`,success:`ุชู
ูุณุฎ ุงููู
ูุฐุฌ ุฅูู {{name}}`,failed:`ูุดู ูุณุฎ ุงููู
ูุฐุฌ`,enterBoth:`ูุฑุฌู ุฅุฏุฎุงู ุฃุณู
ุงุก ุงูู
ุตุฏุฑ ูุงููุฌูุฉ`},create:{title:`ุฅูุดุงุก ูู
ูุฐุฌ ู
ุฎุตุต`,name:`ุงุณู
ุงููู
ูุฐุฌ`,namePlaceholder:`ู
ุซู my-assistant`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
|
|
2
|
+
SYSTEM You are a helpful assistant.`,see:`ุฑุงุฌุน`,docs:`ุชูุซูู Modelfile`,docsLink:`ูู
ุฑุฌุน ุงูุตูุบุฉ`,creating:`ุฌุงุฑู ุงูุฅูุดุงุก...`,button:`ุฅูุดุงุก ุงููู
ูุฐุฌ`,success:`ุชู
ุฅูุดุงุก ุงููู
ูุฐุฌ {{name}} ุจูุฌุงุญ`,failed:`ูุดู ุฅูุดุงุก ุงููู
ูุฐุฌ`,enterBoth:`ูุฑุฌู ุฅุฏุฎุงู ุงุณู
ุงููู
ูุฐุฌ ูู
ุญุชูู Modelfile`},embeddings:{title:`ุงุฎุชุจุงุฑ ุงูุชุถู
ููุงุช`,model:`ูู
ูุฐุฌ ุงูุชุถู
ูู`,selectModel:`ุงุฎุชุฑ ูู
ูุฐุฌุงู...`,recommended:`ู
ูุตู ุจู: nomic-embed-textุ mxbai-embed-large`,input:`ูุต ุงูุฅุฏุฎุงู`,placeholder:`ุฃุฏุฎู ุงููุต ูุชูููุฏ ุงูุชุถู
ููุงุช...`,generating:`ุฌุงุฑู ุงูุชูููุฏ...`,button:`ุชูููุฏ ุงูุชุถู
ููุงุช`,result:`ุงููุชูุฌุฉ ({{count}} ุจูุนุฏ)`,success:`ุชู
ุชูููุฏ ู
ุชุฌู ุชุถู
ูู ู
ู {{count}} ุจูุนุฏ`,failed:`ูุดู ุชูููุฏ ุงูุชุถู
ููุงุช`,enterBoth:`ูุฑุฌู ุงุฎุชูุงุฑ ูู
ูุฐุฌ ูุฅุฏุฎุงู ูุต`}},huggingface:{browseAll:`ุชุตูุญ ุงููู ุนูู HuggingFace`,checkingGguf:`ุงูุจุญุซ ุนู ู
ููุงุช GGUF...`,noGgufAvailable:`ูุง ุชูุฌุฏ ู
ููุงุช GGUF ู
ุชุงุญุฉ ููุณุญุจ ุงูู
ุจุงุดุฑ ู
ู Ollama`,ggufFilesCount:`ู
ููุงุช GGUF ({{count}}) - ุณุญุจ ู
ุจุงุดุฑ ุฅูู Ollama`,noModelsFound:`ูู
ูุชู
ุงูุนุซูุฑ ุนูู ูู
ุงุฐุฌ`,noResults:`ูู
ูุชู
ุงูุนุซูุฑ ุนูู ูู
ุงุฐุฌ. ุญุงูู ุชุนุฏูู ุงูุจุญุซ ุฃู ุงูู
ุฑุดุญุงุช.`,browseAllLink:`ุชุตูุญ ุงููู`,search:`ุงูุจุญุซ ูู ูู
ุงุฐุฌ HuggingFace...`,by:`ุจูุงุณุทุฉ`,gated:`ูุตูู ู
ููุฏ`,viewOnHF:`ุนุฑุถ ุนูู HuggingFace`,sortDownloads:`ุงูุชูุฒููุงุช`,sortLikes:`ุงูุฅุนุฌุงุจุงุช`,sortRecent:`ุงูุฃุญุฏุซ`,taskTextGeneration:`ุชูููุฏ ุงููุต`,taskTextToSpeech:`ุชุญููู ุงููุต ุฅูู ููุงู
`,taskTextToImage:`ุชุญููู ุงููุต ุฅูู ุตูุฑุฉ`,taskSpeechRecognition:`ุงูุชุนุฑู ุนูู ุงูููุงู
`,tasks:{textGen:`ุชูููุฏ ุงููุต`,tts:`ุชุญููู ุงููุต ุฅูู ููุงู
`,image:`ุชุญููู ุงููุต ุฅูู ุตูุฑุฉ`,stt:`ุงูุชุนุฑู ุนูู ุงูููุงู
`},sort:{downloads:`ุงูุฃูุซุฑ ุชูุฒููุงู`,likes:`ุงูุฃูุซุฑ ุฅุนุฌุงุจุงู`,recent:`ุงูู
ุญุฏุซุฉ ู
ุคุฎุฑุงู`}}},personaManager:{title:`ุงูุดุฎุตูุงุช`,subtitle:`ุฅูุดุงุก ูุฅุฏุงุฑุฉ ุดุฎุตูุงุช ุงูุฐูุงุก ุงูุงุตุทูุงุนู ู
ุน ุดุฎุตูุงุช ูุฐูุฑูุงุช ูุณููููุงุช ู
ุฎุตุตุฉ`,loading:`ุฌุงุฑู ุชุญู
ูู ุงูุดุฎุตูุงุช...`,createButton:`ุฅูุดุงุก ุดุฎุตูุฉ`,importExport:`ุงุณุชูุฑุงุฏ/ุชุตุฏูุฑ`,stats:{title:`ุดุฎุตูุงุชู`,count:`ุชู
ุฅูุดุงุก {{count}} ุดุฎุตูุฉ`,count_plural:`ุชู
ุฅูุดุงุก {{count}} ุดุฎุตูุงุช`},empty:{title:`ูุง ุชูุฌุฏ ุดุฎุตูุงุช ุจุนุฏ`,description:`ุฃูุดุฆ ุฃูู ุดุฎุตูุฉ ููุจุฏุก ู
ุน ุชูุงุนูุงุช ุงูุฐูุงุก ุงูุงุตุทูุงุนู ุงูู
ุฎุตุตุฉ`,button:`ุฃูุดุฆ ุดุฎุตูุชู ุงูุฃููู`},deleteConfirm:`ูู ุฃูุช ู
ุชุฃูุฏ ู
ู ุญุฐู "{{name}}"ุ`,deleteSuccess:`ุชู
ุญุฐู ุงูุดุฎุตูุฉ "{{name}}" ุจูุฌุงุญ`,downloadSuccess:`ุชู
ุชุญู
ูู ุงูุดุฎุตูุฉ "{{name}}" ุจูุฌุงุญ`,failed:`ูุดู {{action}} ุงูุดุฎุตูุฉ`},personaForm:{title:{create:`ุฅูุดุงุก ุดุฎุตูุฉ ุฌุฏูุฏุฉ`,edit:`ุชุนุฏูู ุงูุดุฎุตูุฉ`},subtitle:{create:`ุฃูุดุฆ ุดุฎุตูุฉ ุฐูุงุก ุงุตุทูุงุนู ุฌุฏูุฏุฉ ู
ุน ุดุฎุตูุฉ ู
ุฎุตุตุฉ ูุฃูุธู
ุฉ ุฐุงูุฑุฉ ููุฏุฑุงุช ุชุนูู
ุชููููุฉ`,edit:`ุฎุตุต ุดุฎุตูุฉ ุงูุฐูุงุก ุงูุงุตุทูุงุนู ู
ุน ุฐุงูุฑุฉ ู
ุชูุฏู
ุฉ ูุชุนูู
ุชูููู ูู
ุนูู
ุงุช ุฐููุฉ`},loading:`ุฌุงุฑู ุชุญู
ูู ุงููู
ูุฐุฌ...`,saved:`ุชู
ุงูุญูุธ`,tabs:{basic:`ุฃุณุงุณู`,parameters:`ุงูู
ุนูู
ุงุช`,memory:`ุงูุฐุงูุฑุฉ ูุงูุชุนูู
`,advanced:`ู
ุชูุฏู
`},basic:{name:`ุงูุงุณู
`,namePlaceholder:`ุฃุฏุฎู ุงุณู
ุงูุดุฎุตูุฉ`,model:`ุงููู
ูุฐุฌ`,selectModel:`ุงุฎุชุฑ ูู
ูุฐุฌุงู`,description:`ุงููุตู`,descriptionPlaceholder:`ุตู ุดุฎุตูุชู...`,systemPrompt:`ู
ูุฌู ุงููุธุงู
`,systemPromptPlaceholder:`ุฃุฏุฎู ู
ูุฌู ุงููุธุงู
ุงูุฐู ูุญุฏุฏ ุณููู ุดุฎุตูุชู...`,systemPromptHint:`ูุญุฏุฏ ู
ูุฌู ุงููุธุงู
ููู ุณุชุชุตุฑู ุดุฎุตูุชู ูุชุณุชุฌูุจ.`},parameters:{temperature:`ุฏุฑุฌุฉ ุงูุญุฑุงุฑุฉ`,temperatureHint:`ูุชุญูู
ูู ุงูุฅุจุฏุงุน ู
ูุงุจู ุงูุงุชุณุงู`,topP:`Top-P`,topPHint:`ูุชุญูู
ูู ุชููุน ุงูุงุณุชุฌุงุจุฉ`,topK:`Top-K`,topKHint:`ูุญุฏ ุงูู
ูุฑุฏุงุช ูุฃุนูู k ุฑู
ุฒ`,contextWindow:`ูุงูุฐุฉ ุงูุณูุงู`,contextWindowHint:`ุงูุญุฏ ุงูุฃูุตู ูุทูู ุณุฌู ุงูู
ุญุงุฏุซุฉ`,maxTokens:`ุงูุญุฏ ุงูุฃูุตู ููุฑู
ูุฒ`,maxTokensHint:`ุงูุญุฏ ุงูุฃูุตู ูุทูู ุงูุงุณุชุฌุงุจุฉ`,repeatPenalty:`ุนููุจุฉ ุงูุชูุฑุงุฑ`,repeatPenaltyHint:`ูููู ุงูุงุณุชุฌุงุจุงุช ุงูู
ุชูุฑุฑุฉ`},memory:{title:`ูุธุงู
ุงูุฐุงูุฑุฉ`,subtitle:`ุงูุดุฎุตูุฉ ุชุชุฐูุฑ ุงูู
ุญุงุฏุซุงุช ุจู
ุฑูุฑ ุงูููุช`,enableHint:`ูุนูู ูุธุงู
ุงูุฐุงูุฑุฉ ููุณู
ุงุญ ูุดุฎุตูุชู ุจุชุฐูุฑ ุงูู
ุญุงุฏุซุงุช ูุจูุงุก ุงูุณูุงู ุจู
ุฑูุฑ ุงูููุช.`,loading:`ุฌุงุฑู ุชุญู
ูู ุญุงูุฉ ุงูุฐุงูุฑุฉ...`,noData:`ูุง ุชูุฌุฏ ุจูุงูุงุช ุฐุงูุฑุฉ ุจุนุฏ`,memories:`ุงูุฐูุฑูุงุช`,mbUsed:`ู
ูุฌุงุจุงูุช ู
ุณุชุฎุฏู
ุฉ`,lastBackup:`ุขุฎุฑ ูุณุฎุฉ ุงุญุชูุงุทูุฉ`,never:`ุฃุจุฏุงู`,maxMemories:`ุงูุญุฏ ุงูุฃูุตู ููุฐูุฑูุงุช`,maxMemoriesHint:`ูู
ุฐูุฑู ูู
ูู ููุฐู ุงูุดุฎุตูุฉ ุชุฎุฒูููุง`,retention:`ุงูุงุญุชูุงุธ ุจุงูุฐุงูุฑุฉ`,retentionHint:`ุฃูุงู
ุงูุงุญุชูุงุธ ุจุงูุฐูุฑูุงุช ูุจู ุงูุชูุธูู`,autoCleanup:`ุชูุธูู ุชููุงุฆู ููุฐูุฑูุงุช ุงููุฏูู
ุฉ`,wipeAll:`ู
ุณุญ ุฌู
ูุน ุงูุฐูุฑูุงุช`,wipeCannot:`ูุง ูู
ูู ุงูุชุฑุงุฌุน ุนู ูุฐุง`,wipeButton:`ู
ุณุญ`,wiping:`ุฌุงุฑู ุงูู
ุณุญ...`,wipeConfirm:`ูู ุฃูุช ู
ุชุฃูุฏ ู
ู ู
ุณุญ ุฌู
ูุน ุงูุฐูุฑูุงุชุ ูุง ูู
ูู ุงูุชุฑุงุฌุน ุนู ูุฐุง.`,wipeSuccess:`ุชู
ู
ุณุญ {{count}} ุฐูุฑู`},learning:{title:`ุงูุชุนูู
ุงูุชูููู`,subtitle:`ุงูุดุฎุตูุฉ ุชุชุทูุฑ ุจูุงุกู ุนูู ุงูุชูุงุนูุงุช`,enableHint:`ูุนูู ุงูุชุนูู
ุงูุชูููู ููุณู
ุงุญ ูุดุฎุตูุชู ุจุงูุชุทูุฑ ูุชุฎุตูุต ุงูุงุณุชุฌุงุจุงุช ุจูุงุกู ุนูู ุชูุงุนูุงุชู.`,speed:`ุณุฑุนุฉ ุงูุชุนูู
`,slow:`ุจุทูุก`,slowDesc:`ุชุบููุฑุงุช ุชุฏุฑูุฌูุฉ`,balanced:`ู
ุชูุงุฒู`,balancedDesc:`ูุชูุฑุฉ ู
ุนุชุฏูุฉ`,fast:`ุณุฑูุน`,fastDesc:`ุชููู ุณุฑูุน`,autoAdapt:`ุงูุชููู ุงูุชููุงุฆู ู
ุน ุชูุถููุงุช ุงูู
ุณุชุฎุฏู
`,whatLearns:`ู
ุง ุชุชุนูู
ู ุงูุดุฎุตูุฉ:`,conversationTone:`ูุจุฑุฉ ุงูู
ุญุงุฏุซุฉ`,responseStyle:`ุฃุณููุจ ุงูุงุณุชุฌุงุจุฉ`,userPreferences:`ุชูุถููุงุช ุงูู
ุณุชุฎุฏู
`,topicInterests:`ุงูุชู
ุงู
ุงุช ุงูู
ูุถูุน`},advanced:{embeddingModel:`ูู
ูุฐุฌ ุงูุชุถู
ูู`,embeddingHint:`ุงุฎุชุฑ ุงููู
ูุฐุฌ ุงูู
ุณุชุฎุฏู
ูุชุดููุฑ ุงูุฐุงูุฑุฉ ูุงูุจุญุซ ุงูุฏูุงูู. ูุชู
ุนุฑุถ ูู
ุงุฐุฌ ุงูุชุถู
ูู ุฃููุงูุ ุชูููุง ุงููู
ุงุฐุฌ ุงูุฃุฎุฑู ุงูู
ุชุงุญุฉ.`,noModels:`ูู
ูุชู
ุงูุนุซูุฑ ุนูู ูู
ุงุฐุฌ`,embeddingModels:`ูู
ุงุฐุฌ ุงูุชุถู
ูู`,otherModels:`ูู
ุงุฐุฌ ุฃุฎุฑู`,installHint:`ุซุจูุช ูู
ูุฐุฌ ุชุถู
ูู:`,recommended:`ู
ูุตู ุจู: nomic-embed-textุ mxbai-embed-largeุ bge-m3ุ snowflake-arctic-embed`,aboutTitle:`ุญูู ุงูุฅุนุฏุงุฏุงุช ุงูู
ุชูุฏู
ุฉ`,aboutDescription:`ููุณุชุฎุฏู
ูู
ูุฐุฌ ุงูุชุถู
ูู ุจูุงุณุทุฉ ูุธุงู
ุงูุฐุงูุฑุฉ ูููู
ุงูู
ุนูู ุงูุฏูุงูู ูุงูุนุซูุฑ ุนูู ุงูุฐูุฑูุงุช ุฐุงุช ุงูุตูุฉ ุฃุซูุงุก ุงูู
ุญุงุฏุซุงุช. ุงุฎุชุฑ ูู
ูุฐุฌุงู ูุชูุงุณุจ ู
ุน ุญุงูุฉ ุงุณุชุฎุฏุงู
ู ูุงูู
ูุงุฑุฏ ุงูู
ุชุงุญุฉ.`},actions:{cancel:`ุฅูุบุงุก`,save:`ุญูุธ`,saving:`ุฌุงุฑู ุงูุญูุธ...`,saveClose:`ุญูุธ ูุฅุบูุงู`,create:`ุฅูุดุงุก`},success:{created:`ุชู
ุฅูุดุงุก ุงูุดุฎุตูุฉ`,updated:`ุชู
ุชุญุฏูุซ ุงูุดุฎุตูุฉ`},error:{saveFailed:`ูุดู ุงูุญูุธ`}},personaCard:{enhanced:`ู
ุญุณูู`,systemPrompt:`ู
ูุฌู ุงููุธุงู
`,memories:`ุฐูุฑูุงุช`,use:`ุงุณุชุฎุฏุงู
`,editTooltip:`ุชุนุฏูู ุงูุดุฎุตูุฉ`,downloadTooltip:`ุชุญู
ูู ุงูุดุฎุตูุฉ`,backup:`ูุณุฎุฉ ุงุญุชูุงุทูุฉ`,exportDNA:`ุชุตุฏูุฑ DNA`,wipeMemories:`ู
ุณุญ ุงูุฐูุฑูุงุช`,wipeConfirm:`ูู ุฃูุช ู
ุชุฃูุฏ ู
ู ู
ุณุญ ุฌู
ูุน ุฐูุฑูุงุช ูุฐู ุงูุดุฎุตูุฉุ ูุง ูู
ูู ุงูุชุฑุงุฌุน ุนู ูุฐุง ุงูุฅุฌุฑุงุก.`,wipeSuccess:`ุชู
ู
ุณุญ {{count}} ุฐูุฑู`,backupSuccess:`ุชู
ุชุญู
ูู ูุณุฎุฉ ุงูุดุฎุตูุฉ ุงูุงุญุชูุงุทูุฉ ุจูุฌุงุญ`,dnaSuccess:`ุชู
ุชุตุฏูุฑ DNA ุงูุดุฎุตูุฉ ุจูุฌุงุญ`,failed:`ูุดู {{action}}`},userManager:{title:`ุฅุฏุงุฑุฉ ุงูู
ุณุชุฎุฏู
ูู`,subtitle:`ุฅุฏุงุฑุฉ ุญุณุงุจุงุช ุงูู
ุณุชุฎุฏู
ูู ูุงูุตูุงุญูุงุช`,pageDescription:`ุฅุฏุงุฑุฉ ุญุณุงุจุงุช ุงูู
ุณุชุฎุฏู
ูู ูุงูุฃุฐููุงุช ูุนูุงุตุฑ ุงูุชุญูู
ูู ุงููุตูู ูู
ุซูู Libre WebUI ุงูุฎุงุต ุจู.`,loading:`ุฌุงุฑู ุชุญู
ูู ุงูู
ุณุชุฎุฏู
ูู...`,createUser:`ุฅูุดุงุก ู
ุณุชุฎุฏู
`,search:`ุงูุจุญุซ ุนู ู
ุณุชุฎุฏู
ูู...`,noUsers:`ูู
ูุชู
ุงูุนุซูุฑ ุนูู ู
ุณุชุฎุฏู
ูู`,noUsersMatching:`ูุง ููุฌุฏ ู
ุณุชุฎุฏู
ูู ูุทุงุจููู ุจุญุซู`,columns:{user:`ุงูู
ุณุชุฎุฏู
`,email:`ุงูุจุฑูุฏ ุงูุฅููุชุฑููู`,role:`ุงูุฏูุฑ`,created:`ุชู
ุงูุฅูุดุงุก`,actions:`ุงูุฅุฌุฑุงุกุงุช`},roles:{admin:`ู
ุณุคูู`,user:`ู
ุณุชุฎุฏู
`},noEmail:`ูุง ููุฌุฏ ุจุฑูุฏ ุฅููุชุฑููู`,deleteConfirm:`ูู ุฃูุช ู
ุชุฃูุฏ ู
ู ุญุฐู ุงูู
ุณุชุฎุฏู
"{{name}}"ุ`,deleteSuccess:`ุชู
ุญุฐู ุงูู
ุณุชุฎุฏู
ุจูุฌุงุญ`,deleteFailed:`ูุดู ุญุฐู ุงูู
ุณุชุฎุฏู
`,cannotDeleteSelf:`ูุง ูู
ููู ุญุฐู ุญุณุงุจู ุงูุฎุงุต`,form:{title:{create:`ุฅูุดุงุก ู
ุณุชุฎุฏู
`,edit:`ุชุนุฏูู ุงูู
ุณุชุฎุฏู
`},username:`ุงุณู
ุงูู
ุณุชุฎุฏู
`,usernamePlaceholder:`ุฃุฏุฎู ุงุณู
ุงูู
ุณุชุฎุฏู
`,email:`ุงูุจุฑูุฏ ุงูุฅููุชุฑููู`,emailPlaceholder:`ุฃุฏุฎู ุงูุจุฑูุฏ ุงูุฅููุชุฑููู (ุงุฎุชูุงุฑู)`,password:`ููู
ุฉ ุงูู
ุฑูุฑ`,passwordPlaceholder:`ุฃุฏุฎู ููู
ุฉ ุงูู
ุฑูุฑ`,passwordHint:`ุงุชุฑููุง ูุงุฑุบุฉ ููุงุญุชูุงุธ ุจููู
ุฉ ุงูู
ุฑูุฑ ุงูุญุงููุฉ`,role:`ุงูุฏูุฑ`,creating:`ุฌุงุฑู ุงูุฅูุดุงุก...`,updating:`ุฌุงุฑู ุงูุชุญุฏูุซ...`,createButton:`ุฅูุดุงุก ู
ุณุชุฎุฏู
`,updateButton:`ุชุญุฏูุซ ุงูู
ุณุชุฎุฏู
`,createSuccess:`ุชู
ุฅูุดุงุก ุงูู
ุณุชุฎุฏู
ุจูุฌุงุญ`,updateSuccess:`ุชู
ุชุญุฏูุซ ุงูู
ุณุชุฎุฏู
ุจูุฌุงุญ`,createFailed:`ูุดู ุฅูุดุงุก ุงูู
ุณุชุฎุฏู
`,updateFailed:`ูุดู ุชุญุฏูุซ ุงูู
ุณุชุฎุฏู
`},approval:{title:`ุงูู
ูุงููุงุช ุงูู
ุนููุฉ`,description:`ุฑุงุฌุน ุงูุชุณุฌููุงุช ุงูุฌุฏูุฏุฉ ูุจู ุงูุณู
ุงุญ ููุง ุจุงูุฏุฎูู ุฅูู ูุฐุง ุงูู
ุซูู.`,registered:`ู
ุณุฌู`,activate:`ุชูุนูู ุงูุญุณุงุจ`,reject:`ุฑูุถ ุงูุชุณุฌูู`,approved:`ูู
ูู ูู {{name}} ุงูุขู ุชุณุฌูู ุงูุฏุฎูู.`,failed:`ุชุนุฐุฑ ุงูู
ูุงููุฉ ุนูู ุงูุญุณุงุจ.`,notification:`{{count}} ุชุณุฌูู ููุชุธุฑ ู
ูุงููุชู.`,notificationBadge:`{{count}} ู
ูุงููุงุช ู
ุณุชุฎุฏู
ูู ู
ุนููุฉ`}},chatHistory:{label:`ุณุฌู ุงูู
ุญุงุฏุซุฉ`,jumpToTurn:`ุงูุงูุชูุงู ุฅูู ุงูุฏูุฑ {{index}} ู
ู {{total}}`},chatMessage:{you:`ุฃูุช`,assistant:`ุงูู
ุณุงุนุฏ`,system:`ุงููุธุงู
`,copy:`ูุณุฎ`,copyMessage:`ูุณุฎ ุงูุฑุณุงูุฉ`,copied:`ุชู
ุงููุณุฎ!`,regenerate:`ุฅุนุงุฏุฉ ุงูุชูููุฏ`,regenerateResponse:`ุฅุนุงุฏุฉ ุชูููุฏ ุงูุงุณุชุฌุงุจุฉ`,edit:`ุชุนุฏูู`,editSystemMessage:`ุชุนุฏูู ุฑุณุงูุฉ ุงููุธุงู
`,saveChanges:`ุญูุธ ุงูุชุบููุฑุงุช`,cancelEditing:`ุฅูุบุงุก ุงูุชุนุฏูู`,delete:`ุญุฐู`,deleteConfirm:`ุญุฐู ูุฐู ุงูุฑุณุงูุฉุ`,branch:`ุชูุฑุน`,speaking:`ุฌุงุฑู ุงูุชุญุฏุซ...`,speakMessage:`ูุทู ุงูุฑุณุงูุฉ`,stopSpeaking:`ุฅููุงู ุงูุชุญุฏุซ`,showMore:`ุนุฑุถ ุงูู
ุฒูุฏ`,showLess:`ุนุฑุถ ุฃูู`,thinking:`ูููุฑ`,systemMessagePlaceholder:`ุฃุฏุฎู ุฑุณุงูุฉ ุงููุธุงู
...`,fullSizeImage:`ุตูุฑุฉ ุจุงูุญุฌู
ุงููุงู
ู`,startConversation:`ุงุจุฏุฃ ู
ุญุงุฏุซุฉ`,startConversationDescription:`ุฃุฑุณู ุฑุณุงูุฉ ููุจุฏุก ูู ุงูุฏุฑุฏุดุฉ ู
ุน ู
ุณุงุนุฏู ุงูุฐูู. ุงุทุฑุญ ุฃุณุฆูุฉุ ุงุญุตู ุนูู ู
ุณุงุนุฏุฉ ูู ุงูุจุฑู
ุฌุฉุ ุฃู ุฃุฌุฑู ู
ุญุงุฏุซุฉ ุทุจูุนูุฉ.`,scrollToBottom:`ุงูุชูู ุฅูู ุงูุฃุณูู`,newMessages:`ุฑุณุงุฆู ุฌุฏูุฏุฉ`},imageGallery:{title:`ู
ุนุฑุถ ุงูุตูุฑ`,noImages:`ูุง ุชูุฌุฏ ุตูุฑ ุจุนุฏ`,noImagesHint:`ูููุฏ ุฃูู ุตูุฑุฉ ุจุงุณุชุฎุฏุงู
ุงูููุญุฉ ุนูู ุงููู
ูู`,delete:`ุญุฐู`,download:`ุชุญู
ูู`,deleteConfirm:`ูู ุฃูุช ู
ุชุฃูุฏ ู
ู ุญุฐู ูุฐู ุงูุตูุฑุฉุ`,deleteSuccess:`ุชู
ุญุฐู ุงูุตูุฑุฉ`,deleteFailed:`ูุดู ุญุฐู ุงูุตูุฑุฉ`,downloadFailed:`ูุดู ุชุญู
ูู ุงูุตูุฑุฉ`,loadMore:`ุชุญู
ูู ุงูู
ุฒูุฏ ({{current}} ู
ู {{total}})`,loadFailed:`ูุดู ุชุญู
ูู ุงูู
ุนุฑุถ`},imageGeneration:{title:`ุชูููุฏ ุตูุฑุฉ`,prompt:`ุงูู
ูุฌู`,promptPlaceholder:`ุตู ุงูุตูุฑุฉ ุงูุชู ุชุฑูุฏ ุฅูุดุงุกูุง...`,model:`ุงููู
ูุฐุฌ`,selectModel:`ุงุฎุชุฑ ูู
ูุฐุฌุงู`,noModels:`ูุง ุชูุฌุฏ ูู
ุงุฐุฌ ุชูููุฏ ุตูุฑ ู
ุชุงุญุฉ`,configurePlugin:`ูู
ุจุฅุนุฏุงุฏ ุฅุถุงูุฉ ู
ุน ุฏุนู
ุชูููุฏ ุงูุตูุฑ`,size:`ุงูุญุฌู
`,quality:`ุงูุฌูุฏุฉ`,style:`ุงูุฃุณููุจ`,generate:`ุชูููุฏ`,generating:`ุฌุงุฑู ุงูุชูููุฏ...`,success:`ุชู
ุชูููุฏ ุงูุตูุฑุฉ ุจูุฌุงุญ`,failed:`ูุดู ุชูููุฏ ุงูุตูุฑุฉ`,enterPrompt:`ูุฑุฌู ุฅุฏุฎุงู ู
ูุฌู`,promptTooLong:`ูุชุฌุงูุฒ ุงููุต ุงูุญุฏ ุงูุฃูุตู ุงูุจุงูุบ {{max}} ุญุฑู`},errorBoundary:{title:`ุญุฏุซ ุฎุทุฃ ู
ุง`,description:`ูุงุฌููุง ุฎุทุฃ ุบูุฑ ู
ุชููุน. ูุฑุฌู ุชุญุฏูุซ ุงูุตูุญุฉ.`,tryAgain:`ุชุญุฏูุซ ุงูุตูุญุฉ`,goHome:`ุงูุฐูุงุจ ููุฑุฆูุณูุฉ`,errorDetails:`ุชูุงุตูู ุงูุฎุทุฃ (ุงูุชุทููุฑ)`},documents:{title:`ุงูู
ุณุชูุฏุงุช`,upload:`ุฑูุน ู
ุณุชูุฏ`,uploading:`ุฌุงุฑู ุงูุฑูุน...`,noDocuments:`ูู
ูุชู
ุฑูุน ู
ุณุชูุฏุงุช`,uploadHint:`ุงุฑูุน ู
ุณุชูุฏุงุช ูุงุณุชุฎุฏุงู
ูุง ูู ู
ุญุงุฏุซุงุชู`,delete:`ุญุฐู`,deleteConfirm:`ูู ุฃูุช ู
ุชุฃูุฏ ู
ู ุญุฐู ูุฐุง ุงูู
ุณุชูุฏุ`,deleteSuccess:`ุชู
ุญุฐู ุงูู
ุณุชูุฏ`,deleteFailed:`ูุดู ุญุฐู ุงูู
ุณุชูุฏ`,uploadSuccess:`ุชู
ุฑูุน ุงูู
ุณุชูุฏ ุจูุฌุงุญ`,uploadFailed:`ูุดู ุฑูุน ุงูู
ุณุชูุฏ`,types:`ู
ุฏุนูู
: PDFุ TXTุ MDุ DOCX`,unsupportedFileType:`ูุชู
ุฏุนู
ู
ููุงุช PDF ูTXT ููุท`,fileSizeTooLarge:`ูุฌุจ ุฃู ูููู ุญุฌู
ุงูู
ูู ุฃูู ู
ู 10 ู
ูุฌุงุจุงูุช`,uploadSuccessWithName:`ุชู
ุฑูุน ุงูู
ุณุชูุฏ "{{name}}" ุจูุฌุงุญ`,removeSuccess:`ุชู
ุฅุฒุงูุฉ ุงูู
ุณุชูุฏ ุจูุฌุงุญ`,removeFailed:`ูุดู ุฅุฒุงูุฉ ุงูู
ุณุชูุฏ`,removeError:`ุญุฏุซ ุฎุทุฃ ุฃุซูุงุก ุฅุฒุงูุฉ ุงูู
ุณุชูุฏ`,clickToUpload:`ุงููุฑ ููุฑูุน`,orDragAndDrop:`ุฃู ุงุณุญุจ ูุฃููุช`,fileTypesAndSize:`ู
ููุงุช PDF ุฃู TXT ุญุชู 10 ู
ูุฌุงุจุงูุช`,uploadedDocuments:`ุงูู
ุณุชูุฏุงุช ุงูู
ุฑููุนุฉ`,removeDocument:`ุฅุฒุงูุฉ ุงูู
ุณุชูุฏ`},ttsButton:{speak:`ุชุญุฏุซ`,stop:`ุฅููุงู`,speaking:`ุฌุงุฑู ุงูุชุญุฏุซ...`,generateFailed:`ูุดู ุชูููุฏ ุงูููุงู
`,playbackFailed:`ูุดู ุชุดุบูู ุงูุตูุช`,stopSpeaking:`ุฅููุงู ุงูุชุญุฏุซ`,generatingSpeech:`ุฌุงุฑู ุชูููุฏ ุงูููุงู
...`,readAloud:`ูุฑุงุกุฉ ุจุตูุช ุนุงูู`},artifacts:{title:`ุงูู
ุฎุฑุฌุงุช`,code:`ุงูููุฏ`,preview:`ู
ุนุงููุฉ`,copy:`ูุณุฎ ุงูููุฏ`,copied:`ุชู
ุงููุณุฎ!`,download:`ุชุญู
ูู`,expand:`ุชูุณูุน`,collapse:`ุทู`,openInNewTab:`ูุชุญ ูู ุนูุงู
ุฉ ุชุจููุจ ุฌุฏูุฏุฉ`,invalidSvg:`ู
ุญุชูู SVG ุบูุฑ ุตุงูุญ`,invalidJson:`ู
ุญุชูู JSON ุบูุฑ ุตุงูุญ`,previewMode:`ูุถุน ุงูู
ุนุงููุฉ`,codeMode:`ูุถุน ุงูููุฏ`,copyContent:`ูุณุฎ ุงูู
ุญุชูู`,openInPanel:`ูุชุญ ูู ุงูููุญุฉ`,openInNewWindow:`ูุชุญ ูู ูุงูุฐุฉ ุฌุฏูุฏุฉ`,created:`ุชู
ุงูุฅูุดุงุก`,closePanelEsc:`ุฅุบูุงู ุงูููุญุฉ (Esc)`,copyButton:`ูุณุฎ`,open:`ูุชุญ`,dragEdgeToResize:`ุงุณุญุจ ุงูุญุงูุฉ ูุชุบููุฑ ุงูุญุฌู
`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`},personaImportExport:{title:`ุงุณุชูุฑุงุฏ ูุชุตุฏูุฑ ุงูุดุฎุตูุงุช`,description:`ุตุฏูุฑ ุดุฎุตูุงุชู ูู
ุดุงุฑูุชูุง ุฃู ุงุณุชูุฑุฏ ุดุฎุตูุงุช ู
ู ุงูุขุฎุฑูู`,exportPersonas:`ุชุตุฏูุฑ ุงูุดุฎุตูุงุช`,importPersonas:`ุงุณุชูุฑุงุฏ ุงูุดุฎุตูุงุช`,noPersonasToExport:`ูุง ุชูุฌุฏ ุดุฎุตูุงุช ููุชุตุฏูุฑ`,personasAvailable:`{{count}} ุดุฎุตูุฉ ู
ุชุงุญุฉ`,personasAvailable_plural:`{{count}} ุดุฎุตูุงุช ู
ุชุงุญุฉ`,exportAll:`ุชุตุฏูุฑ ุงููู`,uploadJsonFile:`ุฑูุน ู
ูู JSON`,pasteJsonLabel:`ูุตู ุจูุงูุงุช JSON`,pasteJsonPlaceholder:`ุงูุตู ุจูุงูุงุช JSON ููุดุฎุตูุฉ ููุง...`,importing:`ุฌุงุฑู ุงูุงุณุชูุฑุงุฏ...`,importButton:`ุงุณุชูุฑุงุฏ ุงูุดุฎุตูุฉ/ุงูุดุฎุตูุงุช`,expectedFormat:`ุชูุณูู JSON ุงูู
ุชููุน:`,exportSuccess:`ุชู
ุชุตุฏูุฑ ุงูุดุฎุตูุฉ "{{name}}" ุจูุฌุงุญ`,exportFailed:`ูุดู ุชุตุฏูุฑ ุงูุดุฎุตูุฉ`,exportAllSuccess:`ุชู
ุชุตุฏูุฑ ุฌู
ูุน ุงูุดุฎุตูุงุช {{count}} ุจูุฌุงุญ`,exportAllFailed:`ูุดู ุชุตุฏูุฑ ุงูุดุฎุตูุงุช`,pasteJsonData:`ูุฑุฌู ูุตู ุจูุงูุงุช JSON ููุดุฎุตูุฉ`,importMultipleSuccess:`ุชู
ุงุณุชูุฑุงุฏ {{count}} ุดุฎุตูุงุช ุจูุฌุงุญ`,importMultipleFailed:`ูุดู ุงุณุชูุฑุงุฏ {{count}} ุดุฎุตูุงุช`,importNoneFailed:`ูุดู ุงุณุชูุฑุงุฏ ุฃู ุดุฎุตูุงุช`,importSuccess:`ุชู
ุงุณุชูุฑุงุฏ ุงูุดุฎุตูุฉ ุจูุฌุงุญ`,importFailed:`ูุดู ุงุณุชูุฑุงุฏ ุงูุดุฎุตูุฉ`},generationStats:{details:`ุงูุชูุงุตูู`,promptTokens:`ุฑู
ูุฒ ุงูุฅุฏุฎุงู:`,generatedTokens:`ุงูุฑู
ูุฒ ุงูู
ููุฏุฉ:`,totalTokens:`ุฅุฌู
ุงูู ุงูุฑู
ูุฒ:`,speed:`ุงูุณุฑุนุฉ:`,promptEval:`ุชูููู
ุงูุฅุฏุฎุงู:`,generation:`ุงูุชูููุฏ:`,modelLoad:`ุชุญู
ูู ุงููู
ูุฐุฌ:`,totalTime:`ุงูููุช ุงูุฅุฌู
ุงูู:`,generatedAt:`ุชู
ุงูุชูููุฏ ูู:`},userMenu:{loggedOut:`ุชู
ุชุณุฌูู ุงูุฎุฑูุฌ ุจูุฌุงุญ`,pictureUpdated:`ุชู
ุชุญุฏูุซ ุตูุฑุฉ ุงูู
ูู ุงูุดุฎุตู`,failedUpdateAvatar:`ูุดู ุชุญุฏูุซ ุงูุตูุฑุฉ ุงูุฑู
ุฒูุฉ`,failedUpdatePicture:`ูุดู ุชุญุฏูุซ ุตูุฑุฉ ุงูู
ูู ุงูุดุฎุตู`,noEmail:`ูู
ูุชู
ุชูุฏูู
ุจุฑูุฏ ุฅููุชุฑููู`,changePicture:`ุชุบููุฑ ุงูุตูุฑุฉ`,settings:`ุงูุฅุนุฏุงุฏุงุช`,userManagement:`ุฅุฏุงุฑุฉ ุงูู
ุณุชุฎุฏู
ูู`,signOut:`ุชุณุฌูู ุงูุฎุฑูุฌ`,changeProfilePicture:`ุชุบููุฑ ุตูุฑุฉ ุงูู
ูู ุงูุดุฎุตู`},pluginManager:{title:`ู
ุฏูุฑ ุงูุฅุถุงูุงุช`,upload:`ุชุญู
ูู`,addJson:`ุฅุถุงูุฉ JSON`,browseHF:`ุชุตูุญ HF Hub`,confirmDelete:`ูู ุฃูุช ู
ุชุฃูุฏ ู
ู ุญุฐู ูุฐุง ุงูุฅุถุงูุฉุ`,uploading:`ุฌุงุฑู ุชุญู
ูู ุงูุฅุถุงูุฉ...`,pasteJson:`ุงูุตู JSON ุงูุฅุถุงูุฉ ููุง...`,installPlugin:`ุชุซุจูุช ุงูุฅุถุงูุฉ`,loading:`ุฌุงุฑู ุชุญู
ูู ุงูุฅุถุงูุงุช...`,noPlugins:`ูู
ูุชู
ุชุซุจูุช ุฃู ุฅุถุงูุฉ`,noPluginsDescription:`ูู
ุจุชุญู
ูู ู
ูู ุฅุถุงูุฉ ุฃู ุฃุถู ุฅุถุงูุฉ ู
ู JSON ููุจุฏุก.`,active:`ูุดุท`,id:`ุงูู
ุนุฑู`,endpoint:`ููุทุฉ ุงูููุงูุฉ`,activate:`ุชูุนูู`,deactivate:`ุชุนุทูู`,activePlugin:`ุงูุฅุถุงูุฉ ุงููุดุทุฉ`,activePluginDescription:`ุณูุชู
ุชูุฌูู ุฌู
ูุน ุทูุจุงุช ุงูุฏุฑุฏุดุฉ ุนุจุฑ ูุฐู ุงูุฅุถุงูุฉ`,variables:{title:`ุงูู
ุชุบูุฑุงุช`,save:`ุญูุธ`,saving:`ุฌุงุฑู ุงูุญูุธ...`,saved:`ุชู
ุญูุธ ุงูู
ุชุบูุฑุงุช`,saveFailed:`ูุดู ุญูุธ ุงูู
ุชุบูุฑุงุช`,resetDefaults:`ุฅุนุงุฏุฉ ุงูุชุนููู ููุงูุชุฑุงุถู`,reset:`ุชู
ุฅุนุงุฏุฉ ุชุนููู ุงูู
ุชุบูุฑุงุช`,sensitiveSet:`ุชู
ุชุนููู ุงูููู
ุฉ (ุฃุฏุฎู ููู
ุฉ ุฌุฏูุฏุฉ ููุชุบููุฑ)`,resetFailed:`ูุดู ุฅุนุงุฏุฉ ุชุนููู ุงูู
ุชุบูุฑุงุช`,showValue:`ุฅุธูุงุฑ ููู
ุฉ {{label}}`,hideValue:`ุฅุฎูุงุก ููู
ุฉ {{label}}`,connection:`ุงุชุตุงู`,advanced:`ู
ุนูู
ุงุช ู
ุชูุฏู
ุฉ`,inherited:`ุงุณุชุฎุฏุงู
ุงูุชุฑุงุถู ููู
ุฒูุฏ`,inheritedValue:`ุงุณุชุฎุฏุงู
ุงูุชุฑุงุถู ููู
ุฒูุฏ ({{value}})`,enabled:`ู
ู
ููู`,disabled:`ู
ุนุทูู`,required:`ุงูููู
ุฉ ู
ุทููุจุฉ`,fullApiEndpoint:`URL ูุงู
ู ูููุทุฉ ููุงูุฉ API`,endpointHelp:`ุฃุฏุฎู URL ุงูุทูุจ ุงููุงู
ูุ ุจู
ุง ูู ุฐูู ู
ุณุงุฑ ุงูุนู
ููุฉ ุงูุฎุงุต ุจู (ุนูู ุณุจูู ุงูู
ุซุงูุ /v1/chat/completions)ุ ูููุณ ููุท URL ุงูุฃุณุงุณู ููู
ุฒูุฏ.`,invalidUrl:`ุฃุฏุฎู URL ูุงู
ู ูุตุงูุญ ูููุทุฉ ููุงูุฉ APIุ ุนูู ุณุจูู ุงูู
ุซุงู https://provider.example/v1/chat/completions`,insecureUrl:`ูุฌุจ ุฃู ุชุณุชุฎุฏู
ููุงุท ููุงูุฉ API ุจุฑูุชูููู HTTP ุฃู HTTPS.`,httpWarning:`ูุง ูููู
HTTP ุจุชุดููุฑ ุจูุงูุงุช ุงูุงุนุชู
ุงุฏ ุฃู ุญุฑูุฉ ุงูู
ุฑูุฑ. ุงุณุชุฎุฏู
ู ููุท ุนูู ุดุจูุฉ ู
ูุซููุฉ.`,invalidBaseUrl:`ูุง ูู
ูู ุฃู ุชุญุชูู ุนูุงููู URL ุงูุฃุณุงุณูุฉ ุนูู ุณูุณูุฉ ุงุณุชุนูุงู
ุฃู ุฌุฒุก.`,invalidApiPath:`ูุฌุจ ุฃู ูุจุฏุฃ ุจู / ูุฃูุง ูุญุชูู ุนูู URL ุฃู ุงุณุชุนูุงู
ุฃู ุฌุฒุก ุฃู ู
ูุทุน ..`,tooLong:`ุงูููู
ุฉ ุทูููุฉ ุฌุฏูุง`}},huggingface:{title:`ู
ุชุตูุญ ูู
ุงุฐุฌ HuggingFace`,subtitle:`ุชุตูุญ ูุงุฎุชูุงุฑ ุงููู
ุงุฐุฌ ู
ู ุงูู
ุฑูุฒ`,searchPlaceholder:`ุงูุจุญุซ ุนู ูู
ุงุฐุฌ...`,filters:`ุนูุงู
ู ุงูุชุตููุฉ`,task:`ุงูู
ูู
ุฉ`,sortBy:`ุชุฑุชูุจ ุญุณุจ`,noModels:`ูู
ูุชู
ุงูุนุซูุฑ ุนูู ูู
ุงุฐุฌ`,adjustSearch:`ุญุงูู ุถุจุท ุงูุจุญุซ ุฃู ุนูุงู
ู ุงูุชุตููุฉ`,gated:`ู
ููุฏ`,selected:`ู
ุญุฏุฏ`,select:`ุงุฎุชูุงุฑ`,refresh:`ุชุญุฏูุซ`,modelsFound:`ูู
ุงุฐุฌ ู
ูุฌูุฏุฉ`},demoMode:{title:`ูุถุน ุชุฌุฑูุจู`,github:`GitHub`},personaBackground:{label:`ุตูุฑุฉ ุงูุฎูููุฉ`,uploadBackgroundImage:`ุฑูุน ุตูุฑุฉ ุงูุฎูููุฉ`,dragAndDrop:`ุงุณุญุจ ูุฃููุช ุตูุฑุฉ ุฃู ุงููุฑ ููุชุตูุญ`,chooseImage:`ุงุฎุชูุงุฑ ุตูุฑุฉ`,uploading:`ุฌุงุฑู ุงูุฑูุน...`,enterImageUrl:`ุฃู ุฃุฏุฎู ุฑุงุจุท ุงูุตูุฑุฉ`,supportedFormats:`ูุฏุนู
: JPG, PNG, GIF, WebP (ุงูุญุฏ ุงูุฃูุตู 5 ู
ูุฌุงุจุงูุช). ุงูุตูุฑ ุงูุนุฑูุถุฉ ุงูุฃูููุฉ ุชุนู
ู ุจุดูู ุฃูุถู.`,customBackground:`ุตูุฑุฉ ุฎูููุฉ ู
ุฎุตุตุฉ`,clickToChange:`ุงููุฑ ููุชุบููุฑ ุฃู ุงูุฅุฒุงูุฉ`,removed:`ุชู
ุฅุฒุงูุฉ ุงูุฎูููุฉ`,uploaded:`ุชู
ุฑูุน ุงูุฎูููุฉ ุจูุฌุงุญ`,invalidFile:`ูุฑุฌู ุงุฎุชูุงุฑ ู
ูู ุตูุฑุฉ ุตุงูุญ`,fileTooLarge:`ูุฌุจ ุฃู ูููู ุญุฌู
ุตูุฑุฉ ุงูุฎูููุฉ ุฃูู ู
ู 5 ู
ูุฌุงุจุงูุช`,readFailed:`ูุดู ูู ูุฑุงุกุฉ ู
ูู ุงูุตูุฑุฉ`,uploadFailed:`ูุดู ูู ุฑูุน ุตูุฑุฉ ุงูุฎูููุฉ`},modelSelector:{searchInstalled:`ุงูุจุญุซ ูู ุงููู
ุงุฐุฌ ุงูู
ุซุจุชุฉ...`,searchOllama:`ุงูุจุญุซ ูู ู
ูุชุจุฉ Ollama...`,searchHuggingFace:`ุงูุจุญุซ ูู HuggingFace...`,selectModel:`ุงุฎุชุฑ ูู
ูุฐุฌูุง`,personas:`ุงูุดุฎุตูุงุช`,ollamaModels:`ูู
ุงุฐุฌ Ollama`,pluginModels:`ูู
ุงุฐุฌ ุงูุฅุถุงูุงุช`,actions:`ุงูุฅุฌุฑุงุกุงุช`,installed:`ู
ุซุจุช`,use:`ุงุณุชุฎุฏุงู
`,pull:`ุชูุฒูู`,pullRestricted:`ุชุซุจูุช ุงููู
ุงุฐุฌ ู
ูุตูุฑ ุนูู ุงูู
ุณุคูููู ูู ูุฐุง ุงูู
ุซูู.`,adminOnlyPull:`ููู
ุณุคูููู ููุท`},libreClaw:{title:`ุงููููุงุก`,subtitle:`ูุนู
ู ุงููููู ุงูู
ุญูู ูุงูู
ูุงููุงุช ูุงูุฌุฏุงูู ุงูุฒู
ููุฉ ูุงูุฐุงูุฑุฉ ูุงูุฃุฏูุงุช ูุงูุงุณุชุฎุฏุงู
.`,dashboard:`ููุญุฉ ุงูู
ุนููู
ุงุช`,connection:{disconnectedTitle:`ุฎุฏู
ุฉ Libre Claw ุบูุฑ ู
ุชุตูุฉ`,disconnectedDescription:`ุงุจุฏุฃ ุชุดุบููู ู
ุญูููุง ุจุงุณุชุฎุฏุงู
<command>libre-claw start</command> ุฃู ูู
ุจุชุนููู <env>LIBRE_CLAW_BASE_URL</env> ูู ุจูุฆุฉ ุงููุงุฌูุฉ ุงูุฎูููุฉ.`},status:{connected:`ู
ุชุตู`,disconnected:`ุบูุฑ ู
ุชุตู`,activeRuns:`{{count}} ูุดุท`,activeRuns_plural:`{{count}} ูุดุท`},states:{queued:`ูู ูุงุฆู
ุฉ ุงูุงูุชุธุงุฑ`,running:`ููุฏ ุงูุชุดุบูู`,blocked:`ู
ุญุธูุฑ`,done:`ุชู
`,failed:`ูุดู`,cancelled:`ุชู
ุงูุฅูุบุงุก`},startRun:{title:`ุจุฏุก ุชุดุบูู ุงููููู`,placeholder:`ุงุทูุจ ู
ู Libre Claw ูุญุต ุงูุฑูุจูุ ุฃู ุฅุตูุงุญ ุงูุฎููุ ุฃู ุฅุฌุฑุงุก ู
ุฑุงุฌุนุฉุ ุฃู ุฌุฏููุฉ ุชูุฑูุฑ...`,chatRun:`ุชุดุบูู ุงูุฏุฑุฏุดุฉ`,goalMode:`ูุถุน ุงููุฏู`,providerOverride:`ุชุฌุงูุฒ ุงูู
ููุฑ`,modelOverride:`ุชุฌุงูุฒ ุงููู
ูุฐุฌ`,run:`ุชุดุบูู`},modelRoute:{title:`ุงูุทุฑูู ุงููู
ูุฐุฌู`,providerPlaceholder:`ู
ุฒูุฏ`,modelPlaceholder:`ูู
ูุฐุฌ`,persistGlobal:`ุงุณุชู
ุฑ ูู Libre Claw ุงูุชูููู ุงูุนุงู
`,saveModel:`ุญูุธ ุงููู
ูุฐุฌ`,theme:`ุณู
ุฉ Libre Claw`,saveTheme:`ุญูุธ ุงูู
ูุถูุน`},runs:{title:`ุงูุชุดุบููุงุช`,empty:`ูุง ุชูุฌุฏ ุชุดุบููุงุช Libre Claw ุจุนุฏ.`},timeline:{title:`ุงูุฎุท ุงูุฒู
ูู ููุชุดุบูู`,empty:`ุญุฏุฏ ุชุดุบูููุง ูุชููุฏ ุฃุญุฏุงุซู.`,streaming:`ุงูุฌุฑู...`,assistantResponse:`ุฑุฏ ู
ุณุงุนุฏ`,resultOk:`ุญุณูุง`,resultError:`ุฎุทุฃ`,labels:{userMessage:`ุฑุณุงูุฉ ุงูู
ุณุชุฎุฏู
`,toolCall:`ุงุณุชุฏุนุงุก ุงูุฃุฏุงุฉ`,toolResult:`ูุชูุฌุฉ ุงูุฃุฏุงุฉ`,approvalRequest:`ุทูุจ ุงูู
ูุงููุฉ`,approvalResponse:`ุฑุฏ ุงูู
ูุงููุฉ`,runStarted:`ุจุฏุฃ ุงูุชุดุบูู`,runFinished:`ุงูุชูู ุงูุชุดุบูู`,usage:`ุงูุงุณุชุฎุฏุงู
`,error:`ุฎุทุฃ`}},approvals:{needed:`ุงูู
ูุงููุฉ ู
ุทููุจุฉ`,allowOnce:`ุงูุณู
ุงุญ ู
ุฑุฉ ูุงุญุฏุฉ`,alwaysAllowTool:`ุงูุณู
ุงุญ ุฏุงุฆู
ูุง ุจุงูุฃุฏุงุฉ`,deny:`ุฑูุถ`,toolApprovalRequested:`ุชู
ุทูุจ ุงูู
ูุงููุฉ ุนูู ุงูุฃุฏุงุฉ`},automations:{title:`ุงูุฃุชู
ุชุฉ`,namePlaceholder:`ุงูุงุณู
`,schedulePlaceholder:`daily 09:00`,promptPlaceholder:`ู
ูุฌู ุงูุฃุชู
ุชุฉ`,create:`ุฅูุดุงุก`,empty:`ูุง ุชูุฌุฏ ุนู
ููุงุช ุฃุชู
ุชุฉ ู
ุฌุฏููุฉ Libre Claw.`,runNow:`ุชุดุบูู ุงูุขู`,pause:`ูููุฉ`,resume:`ุงุณุชุฆูุงู`,routes:{report:`ุชูุฑูุฑ`,telegram:`Telegram`},status:{active:`ูุดุท`,paused:`ู
ุชููู ู
ุคูุชูุง`}},usageFallback:{title:`ุงูุงุณุชุฎุฏุงู
ูุงูุงุญุชูุงุทู`,usage:`ุงูุงุณุชุฎุฏุงู
`,fallbackRoute:`ุงูุทุฑูู ุงูุงุญุชูุงุทู`,noUsage:`ูุง ุชูุฌุฏ ุณุฌูุงุช ุงุณุชุฎุฏุงู
ุญุชู ุงูุขู.`},metrics:{provider:`ู
ุฒูุฏ`,model:`ูู
ูุฐุฌ`,input:`ุงูุฅุฏุฎุงู`,output:`ุงูุฅุฎุฑุงุฌ`,cached:`ู
ุฎุจุฃุฉ`,reasoning:`ุงูู
ูุทู`,cost:`ุงูุชูููุฉ`,tool:`ุฃุฏุงุฉ`,resolution:`ุงููุฑุงุฑ`,state:`ุงูุญุงูุฉ`,stopReason:`ุณุจุจ ุงูุชููู`,tokens:`{{formatted}} ุฑู
ุฒ ู
ู
ูุฒ`,tokens_plural:`{{formatted}} ุงูุฑู
ูุฒ`},fallbacks:{tool:`ุฃุฏุงุฉ`,unknown:`ุบูุฑ ู
ุนุฑูู`,resolved:`ุญููุง`,unknownError:`ุฎุทุฃ ุบูุฑ ู
ุนุฑูู`},toasts:{loadStatusFailed:`ูุง ูู
ูู ุชุญู
ูู ุญุงูุฉ Libre Claw`,enterTask:`ุฃุฏุฎู ู
ูู
ุฉ ูู Libre Claw`,runStarted:`ุจุฏุฃ ุชุดุบูู Libre Claw`,startRunFailed:`ุชุนุฐุฑ ุจุฏุก ุชุดุบูู Libre Claw`,runCancelled:`ุชู
ุฅูุบุงุก ุงูุชุดุบูู`,cancelRunFailed:`ุชุนุฐุฑ ุฅูุบุงุก ุงูุชุดุบูู`,approved:`ุชู
ุช ุงูู
ูุงููุฉ ุนููู`,denied:`ู
ุฑููุถ`,resolvePermissionFailed:`ูุง ูู
ูู ุญู ุงูุฅุฐู`,providerModelRequired:`ู
ุทููุจ ุงูู
ููุฑ ูุงููู
ูุฐุฌ`,modelUpdated:`ุชู
ุชุญุฏูุซ ูู
ูุฐุฌ Libre Claw`,updateModelFailed:`ูุง ูู
ูู ุชุญุฏูุซ ุงููู
ูุฐุฌ`,themeUpdated:`ุชู
ุชุญุฏูุซ ุณู
ุฉ Libre Claw`,updateThemeFailed:`ูุง ูู
ูู ุชุญุฏูุซ ุงูู
ูุถูุน`,automationRequired:`ู
ุทููุจ ุงุณู
ุงูุฃุชู
ุชุฉ ูุงูุฌุฏูู ุงูุฒู
ูู ูุงูู
ูุฌู`,automationCreated:`ุชู
ุฅูุดุงุก ุงูุฃุชู
ุชุฉ`,createAutomationFailed:`ูุง ูู
ูู ุฅูุดุงุก ุงูุฃุชู
ุชุฉ`,automationUpdated:`ุชู
ุชุญุฏูุซ ุงูุฃุชู
ุชุฉ`,updateAutomationFailed:`ูุง ูู
ูู ุชุญุฏูุซ ุงูุฃุชู
ุชุฉ`}},work:{title:`ุงูุนู
ู`,subtitle:`ู
ุณุงุญุงุช ุนู
ู ู
ุนุฒููุฉ ูููู
ุงุฐุฌ`,tasks:{title:`ู
ูุงู
ุงูุนู
ู`,subtitle:`ู
ุณุงุญุงุช ุนู
ู ู
ุญููุฉ ุฏุงุฆู
ุฉ`,new:`ู
ูู
ุฉ ุฌุฏูุฏุฉ`,emptyTitle:`ูุง ุชูุฌุฏ ู
ูุงู
ุนู
ู ุจุนุฏ`,empty:`ุณุชุธูุฑ ู
ูุงู
ุงูุนู
ู ููุง ุจุนุฏ ุฅุฑุณุงู ุงูุฑุณุงูุฉ ุงูุฃููู.`,untitled:`ู
ูู
ุฉ ุจูุง ุนููุงู`,actions:`ุฅุฌุฑุงุกุงุช ุงูู
ูู
ุฉ`,delete:`ุญุฐู ุงูู
ูู
ุฉ`,deleteNamed:`ุญุฐู โจ{{title}}โฉ`,deleteConfirm:`ูู ุชุฑูุฏ ุญุฐู ยซโจ{{title}}โฉยป ูู
ุณุงุญุฉ ุนู
ููุง ููุงุฆููุงุ`,close:`ุฅุบูุงู ู
ูุงู
ุงูุนู
ู`,open:`ูุชุญ ู
ูุงู
ุงูุนู
ู`,rename:`ุนููุงู ุงูู
ูู
ุฉ`,loading:`ุฌุงุฑู ุชุญู
ูู ุงูู
ูู
ุฉโฆ`,notFound:`ู
ูู
ุฉ ุงูุนู
ู ูุฐู ุบูุฑ ู
ุชุงุญุฉ`,back:`ุจุฏุก ู
ูู
ุฉ ุฌุฏูุฏุฉ`,status:`ุงูุญุงูุฉ: {{status}}`},landing:{title:`ุจุฏุก ู
ูู
ุฉ ุนู
ู ุฌุฏูุฏุฉ`,description:`ุงู
ูุญ ูู
ูุฐุฌูุง ู
ุญูููุง ุฃู ุชุงุจุนูุง ูู
ุฒููุฏ ู
ูุนุฏู ู
ุณุงุญุฉ ุนู
ู ุฏุงุฆู
ุฉ ูู
ุนุฒููุฉ. ูู
ููู ูุญุต ุงูู
ููุงุช ูุชุดุบูู ุงูุฃุฏูุงุช ูุงูู
ุชุงุจุนุฉ ู
ู ุญูุซ ุชููู ุนูุฏ ุนูุฏุชู.`,isolated:`ู
ุนุฒููุฉ`,isolatedBody:`ููู ู
ูู
ุฉ ุญุงููุชูุง ูู
ููุงุชูุง ุงูุฎุงุตุฉ.`,durable:`ุฏุงุฆู
ุฉ`,durableBody:`ูู
ููู ุงูุนูุฏุฉ ุฅูู ู
ุญุงุฏุซุชูุง ูู
ุณุงุญุฉ ุนู
ููุง ูุงุญููุง.`,controlled:`ู
ุถุจูุทุฉ`,controlledBody:`ุชุจูู ุจูุฆุฉ ุงูุชุดุบูู ูู
ููุงุช ุงูู
ูู
ุฉ ู
ุนุฒููุฉ ุนู ุงููุธุงู
ุงูู
ุถูู.`},composer:{placeholder:`ุตูู ู
ุง ุชุฑูุฏ ุจูุงุกู ุฃู ุชุบููุฑูโฆ`,model:`ูู
ูุฐุฌ ุงูุนู
ู`,noModels:`ูุง ุชูุฌุฏ ูู
ุงุฐุฌ ู
ุชูุงููุฉ ู
ุน ูุถุน ุงูุนู
ู`,cancel:`ุฅููุงู`,send:`ุชุดุบูู`,hint:`ุชุญุชูุธ ูู ู
ูู
ุฉ ุจู
ููุงุชูุง ูุณุฌููุง ุงูุฎุงุตูู. ุฑุงุฌุน ู
ุฎุฑุฌุงุช ุงููู
ูุฐุฌ ูุจู ุงุณุชุฎุฏุงู
ูุง.`,remoteTitle:`ู
ุฒููุฏ ุจุนูุฏ`,remoteHint:`ุชูุฑุณู ุงูู
ุญุงุฏุซุฉ ูู
ุฎุฑุฌุงุช ุงูุฃุฏูุงุช ุฅูู ุงูุฎุฏู
ุฉ ุงูู
ูุนุฏูุฉ. ูุฏ ูุฌุฑู ุงูุชุดุบูู ุงูู
ุณุชูู ุงููุงุญุฏ ุนุฏุฉ ุงุชุตุงูุงุช ุจุงูู
ุฒููุฏ ููุฏ ุชุชุฑุชุจ ุนููู ุฑุณูู
. ุชุจูู ู
ููุงุช ู
ุณุงุญุฉ ุงูุนู
ู ู
ุญููุฉ ู
ุง ูู
ุชูุฑุฌุน ุฅุญุฏู ุงูุฃุฏูุงุช ู
ุญุชููุงุชูุง.`,remoteDismiss:`ุชุฌุงูู`,remoteDismissLabel:`ุชุฌุงูู ุฅุดุนุงุฑ ุงูู
ุฒููุฏ ุงูุจุนูุฏ`,remoteDismissFailed:`ุชุนุฐูุฑ ุญูุธ ุชูุถูู ุงูู
ุฒููุฏ ุงูุจุนูุฏ.`,noModelSelected:`ูู
ูุชู
ุงุฎุชูุงุฑ ูู
ูุฐุฌ ู
ุชูุงูู ู
ุน ูุถุน ุงูุนู
ู.`},conversation:{ready:`ู
ุณุงุญุฉ ุงูุนู
ู ุฌุงูุฒุฉ`,empty:`ุชุงุจุน ุงูู
ูู
ุฉ ุฃุฏูุงู. ุชุธู ูุฐู ุงูู
ุญุงุฏุซุฉ ูู
ููุงุชูุง ู
ุฑุชุจุทุฉ ุจู
ุณุงุญุฉ ุงูุนู
ู ูุฐู.`,loadOlder:`ุชุญู
ูู ุงูุฑุณุงุฆู ุงูุฃูุฏู
`},status:{preparing:`ุฌุงุฑู ุชุฌููุฒ ู
ุณุงุญุฉ ุงูุนู
ู ุงูู
ุนุฒููุฉโฆ`,running:`ุฌุงุฑู ุงูุนู
ู ุฏุงุฎู ู
ุณุงุญุฉ ุงูุนู
ู ุงูู
ุญููุฉโฆ`},statusLabels:{idle:`ุฎุงู
ู`,thinking:`ููููุฑ`,complete:`ู
ูุชู
ู`,needsInput:`ุจุญุงุฌุฉ ุฅูู ุฅุฏุฎุงู`,error:`ุฎุทุฃ`},live:{connecting:`ุฌุงุฑู ุงูุงุชุตุงู ุจุงูุชุญุฏูุซุงุช ุงูู
ุจุงุดุฑุฉโฆ`,reconnecting:`ุฌุงุฑู ุฅุนุงุฏุฉ ุงูุงุชุตุงู ุจุงูุชุญุฏูุซุงุช ุงูู
ุจุงุดุฑุฉโฆ`,unavailable:`ุงูุชุญุฏูุซุงุช ุงูู
ุจุงุดุฑุฉ ุบูุฑ ู
ุชุงุญุฉ`,newActivity:`ูุดุงุท ุฌุฏูุฏ`,skillsLoaded:`ู
ูุงุฑุงุช ู
ุณุงุญุฉ ุงูุนู
ู ยท {{count}}`},runtime:{unavailable:`ุจูุฆุฉ ุงูุชุดุบูู ุบูุฑ ู
ุชุงุญุฉ`,ready:`ุจูุฆุฉ ุงูุชุดุบูู ุฌุงูุฒุฉ`,readyOllama:`Docker ุฌุงูุฒ`,readyPlugin:`Docker ูุงูู
ูููู ุงูุฅุถุงูู ุฌุงูุฒุงู`,readyHybrid:`Docker ูุงููู
ุงุฐุฌ ุฌุงูุฒุฉ`,reason:`ููุฒู
ุชููุฑ Docker ูู
ุฒููุฏ ูู
ุงุฐุฌ ู
ุชุงุญ ุนุจุฑ Ollama ุฃู ู
ูููู ุฅุถุงูู.`},workspace:{label:`ุทุฑู ุนุฑุถ ู
ุณุงุญุฉ ุงูุนู
ู`,files:`ุงูู
ููุงุช`,activity:`ุงููุดุงุท`,preview:`ุงูู
ุนุงููุฉ`,resize:`ุชุบููุฑ ุญุฌู
ุงูู
ุญุงุฏุซุฉ ูู
ุณุงุญุฉ ุงูุนู
ู`,resizeHint:`ุงุณุญุจ ูุชุบููุฑ ุงูุญุฌู
. ุงุณุชุฎุฏู
ู
ูุงุชูุญ ุงูุฃุณูู
ููุชุญูู
ุงูุฏููู. ุงููุฑ ููุฑูุง ู
ุฒุฏูุฌูุง ุฃู ุงุถุบุท Enter ูุฅุนุงุฏุฉ ุงูุชุนููู.`,splitSize:`ุงูู
ุญุงุฏุซุฉ {{conversation}}ูชุ ู
ุณุงุญุฉ ุงูุนู
ู {{workspace}}ูช`,terminal:`ุงูุทุฑููุฉ`},files:{discard:`ูู ุชุฑูุฏ ุชุฌุงูู ุงูุชุบููุฑุงุช ุบูุฑ ุงูู
ุญููุธุฉ ูู ุงูู
ููุ`,leaveWithDraft:`ูู ุชุฑูุฏ ู
ุบุงุฏุฑุฉ ูุฐุง ุงูู
ููุ ุณูุจูู ุชุนุฏููู ุบูุฑ ุงูู
ุญููุธ ูู
ุณูุฏุฉ ูู ุงูู
ุชุตูุญ.`,up:`ุงูู
ุฌูุฏ ุงูุฃุตู`,back:`ุงูุนูุฏุฉ ุฅูู ุงูู
ููุงุช`,empty:`ูุง ุชูุฌุฏ ู
ููุงุช ูู ูุฐุง ุงูู
ุฌูุฏ ุจุนุฏ.`,select:`ุงุฎุชุฑ ู
ูููุง ููุญุตู ูุชุนุฏููู.`,editorLabel:`ู
ุญุฑุฑ ุงูู
ูู: {{path}}`,format:`ุชูุณูู`,formatted:`ุชู
ุชูุณูู ุงูุดููุฑุฉ.`,formatFailed:`ุชุนุฐูุฑ ุชูุณูู ูุฐุง ุงูู
ูู.`,formatShortcut:`ุชูุณูู (Shift+Alt+F)`,formatTooLarge:`ููุชุตุฑ ุงูุชูุณูู ุนูู ุงูู
ููุงุช ุงูุชู ุชูู ุนู 100,000 ู
ุญุฑู ู4,000 ุณุทุฑ.`,formatUnsupported:`ุงูุชูุณูู ุบูุฑ ู
ุชุงุญ ููุฐุง ุงูููุน ู
ู ุงูู
ููุงุช.`,saveShortcut:`ุญูุธ (โ/Ctrl+S)`,highlightPaused:`ุชู
ุฅููุงู ุงูุชู
ููุฒ ุงูู
ุจุงุดุฑ ู
ุคูุชูุง ููู
ููุงุช ุงููุจูุฑุฉ ููุญูุงุธ ุนูู ุงุณุชุฌุงุจุฉ ุงูู
ุญุฑุฑ.`,plainTextLarge:`ูุต ุนุงุฏู ยท ู
ูู ูุจูุฑ`,changes:`ุงูุชุบููุฑุงุช`,changesSince:`ู
ุง ุชุบููุฑ ู
ูุฐ ุงูุฏูุฑ ุงูุฃุฎูุฑ`,diffLabel:`ุงูุชุบููุฑุงุช ู
ูุฐ ุงูุฏูุฑ ุงูุฃุฎูุฑ: {{path}}`,diffFolded:`{{count}} ุณุทุฑูุง ุฏูู ุชุบููุฑ`},activity:{empty:`ุณุชุธูุฑ ุงูุฃูุงู
ุฑ ูุนู
ููุงุช ุงูู
ููุงุช ููุชุงุฆุฌ ุงูุฃุฏูุงุช ููุง.`,toolActivity:`ูุดุงุท ุงูุฃุฏุงุฉ`,details:`ุงูุชูุงุตูู`,kinds:{message:`ุฑุณุงูุฉ`,toolCall:`ุงุณุชุฏุนุงุก ุฃุฏุงุฉ`,toolResult:`ูุชูุฌุฉ ุฃุฏุงุฉ`,error:`ุฎุทุฃ`}},preview:{command:`ุฃู
ุฑ ุชุดุบูู ุงุฎุชูุงุฑู`,start:`ุจุฏุก ุงูู
ุนุงููุฉ`,stop:`ุฅููุงู ุงูู
ุนุงููุฉ`,open:`ูุชุญ`,starting:`ุฌุงุฑู ุจุฏุก ุงูู
ุนุงููุฉโฆ`,frameTitle:`ู
ุนุงููุฉ ู
ุณุงุญุฉ ุงูุนู
ู`,failed:`ุชุนุฐูุฑ ุจุฏุก ุงูู
ุนุงููุฉ. ุฑุงุฌุน ยซุงููุดุงุทยปุ ุซู
ุฌุฑูุจ ุฃู
ุฑูุง ุขุฎุฑ.`,empty:`ุดุบูู ุงูุชุทุจูู ุฏุงุฎู ู
ุณุงุญุฉ ุงูุนู
ู ูุฐู ูู
ุนุงููุชู ููุง.`},mobile:{surface:`ูุงุฌูุฉ ุงูู
ูู
ุฉ`,conversation:`ุงูู
ุญุงุฏุซุฉ`,workspace:`ู
ุณุงุญุฉ ุงูุนู
ู`},toasts:{runFailed:`ุชุนุฐูุฑ ุจุฏุก ู
ูู
ุฉ ุงูุนู
ู.`,updateFailed:`ุชุนุฐูุฑ ุชุญุฏูุซ ูุฐู ุงูู
ูู
ุฉ.`,renameFailed:`ุชุนุฐูุฑ ุชุบููุฑ ุงุณู
ูุฐู ุงูู
ูู
ุฉ.`,cancelled:`ุชู
ุฅููุงู ุชุดุบูู ุงูู
ูู
ุฉ.`,cancelFailed:`ุชุนุฐูุฑ ุฅููุงู ุชุดุบูู ุงูู
ูู
ุฉ.`,deleteFailed:`ุชุนุฐูุฑ ุญุฐู ู
ูู
ุฉ ุงูุนู
ู ูุฐู.`,saveFailed:`ุชุนุฐูุฑ ุญูุธ ูุฐุง ุงูู
ูู.`,saved:`ุชู
ุญูุธ ุงูู
ูู.`,previewFailed:`ุชุนุฐูุฑ ุจุฏุก ุงูู
ุนุงููุฉ.`,previewStopFailed:`ุชุนุฐูุฑ ุฅููุงู ุงูู
ุนุงููุฉ.`},terminal:{connecting:`ุฌุงุฑู ูุชุญ ุตุฏูุฉ ุฏุงุฎู ุจูุฆุฉ ุงูุนุฒูโฆ`,closed:`ุงูุชูุช ุฌูุณุฉ ุงูุทุฑููุฉ.`,failed:`ุชุนุฐูุฑ ุจุฏุก ุฌูุณุฉ ุงูุทุฑููุฉ.`,reconnect:`ุฅุนุงุฏุฉ ุงูุงุชุตุงู`,unavailable:`ุงูุทุฑููุฉ ุงูุชูุงุนููุฉ ุบูุฑ ู
ุชุงุญุฉ ูู ูุฐุง ุงููุดุฑ.`,blockedByRun:`ุงููู
ูุฐุฌ ูุณุชุฎุฏู
ูุฐู ุงูุญุงููุฉ. ุชูุชุญ ุงูุทุฑููุฉ ุนูุฏ ุงูุชูุงุก ุงูุฏูุฑ.`,taskRunning:`ุฏูุฑ ุงููู
ูุฐุฌ ููุฏ ุงูุชูููุฐ`}},usageAnalytics:{eyebrow:`ุงูุฅุฏุงุฑุฉ`,title:`ุงุณุชุฎุฏุงู
ุงูู
ุฒูุฏ`,description:`ุชุงุจุน ู
ูุงูู
ุงุช API ุงูุตุงุฏุฑุฉ ูุงุณุชููุงู ุงููู
ุงุฐุฌ ุนุจุฑ ุงูุฅุถุงูุงุช ุงูู
ู
ูููุฉ ูู ูุฐุง ุงูู
ุซูู.`,days:`{{count}} ุฃูุงู
`,refresh:`ุชุญุฏูุซ ุงูุงุณุชุฎุฏุงู
`,loadFailed:`ุชุนุฐุฑ ุชุญู
ูู ุงุณุชุฎุฏุงู
ุงูู
ุฒูุฏ.`,metrics:{calls:`ุงูู
ูุงูู
ุงุช`,tokens:`ุงูุฑู
ูุฒ`},cards:{calls:`ู
ูุงูู
ุงุช API`,callsDetail:`ุนุจุฑ {{count}} ู
ุณุชุฎุฏู
ูุดุท`,tokens:`ุงูุฑู
ูุฒ ุงูู
ูุจูุบ ุนููุง`,tokensDetail:`ุงูุงุณุชุฎุฏุงู
ุงูู
ูุจูุบ ุนูู ูู {{count}} ู
ูุงูู
ุฉ`,success:`ู
ุนุฏู ุงููุฌุงุญ`,successDetail:`{{count}} ู
ูุงูู
ุฉ ูุงุดูุฉ`,latency:`ู
ุชูุณุท ุฒู
ู ุงูุงุณุชุฌุงุจุฉ`,latencyDetail:`ููุช ุงูู
ุฒูุฏ ู
ู ุงูุจุฏุงูุฉ ููููุงูุฉ`},activity:{title:`ุงูุงุณุชููุงู ุจู
ุฑูุฑ ุงูููุช`,callsDescription:`ุงูุทูุจุงุช ุงูุตุงุฏุฑุฉ ุงูููู
ูุฉ ููุฅุถุงูุงุช ุงูู
ู
ูููุฉ`,tokensDescription:`ุฅุฌู
ุงูู ุงูุฑู
ูุฒ ุงูููู
ูุฉ ุงูุชู ุฃุจูุบ ุนููุง ุงูู
ุฒูุฏูู`,chartLabel:`ู
ุฎุทุท {{metric}} ุงูููู
ู ููู
ุฒูุฏ`},models:{title:`ุงุณุชููุงู ุงููู
ูุฐุฌ`,description:`ุงููู
ุงุฐุฌ ุงูุชู ุชุญู
ู ุฃูุจุฑ ูุฏุฑ ู
ู ุญุฑูุฉ ุงูู
ุฑูุฑ ูู ูุฐู ุงููุชุฑุฉ.`,model:`ุงููู
ูุฐุฌ`,success:`ุงููุฌุงุญ`,latency:`ุฒู
ู ุงูุงุณุชุฌุงุจุฉ`},providers:{title:`ุญุฑูุฉ ู
ุฑูุฑ ุงูุฅุถุงูุงุช ุงูู
ู
ูููุฉ`},capabilities:{title:`ู
ุฒูุฌ ุงููุฏุฑุงุช`,characters:`{{count}} ุญุฑู`,images:`{{count}} ุตูุฑุฉ`,jobs:`{{count}} ู
ูู
ุฉ ููุฏูู`,inputs:`{{count}} ู
ุฏุฎู`,reportedTokens:`{{count}} ุฑู
ุฒ ู
ูุจูุบ ุนูู`},empty:{title:`ูุง ุชูุฌุฏ ู
ูุงูู
ุงุช ู
ุฒูุฏ ุจุนุฏ`,description:`ุณุชุธูุฑ ุงูู
ูุงูู
ุงุช ููุง ุจุนุฏ ุฃู ุชุนุงูุฌ ุฅุถุงูุฉ ู
ู
ูููุฉ ุทูุจุงุช ุงูุฏุฑุฏุดุฉุ ุฃู ุงูุนู
ูุ ุฃู ุงูุชุถู
ููุ ุฃู ุงูุตูุฑุฉุ ุฃู ุงูููุงู
ุ ุฃู ุงูุตูุชุ ุฃู ุงูููุฏูู.`},privacyNote:`ูุชู
ููุงุณ ุงูุงุณุชุฎุฏุงู
ุนูู ุงูุฎุงุฏู
ุนูุฏ ุญุฏูุฏ ุงูุฅุถุงูุฉ ุงูุตุงุฏุฑุฉ. ูุฎุฒู Libre WebUI ุงูู
ุฒูุฏุ ูุงููู
ูุฐุฌุ ูุงูุชูููุชุ ูุงูุญุงูุฉุ ูุงูุนุฏุงุฏุงุช ุงูู
ูุจูุบ ุนููุง โ ูููุณ ุงูู
ุทุงูุจุงุชุ ุฃู ุงูุงุณุชุฌุงุจุงุชุ ุฃู ููุงุท ุงูููุงูุฉุ ุฃู ุจูุงูุงุช ุงูุงุนุชู
ุงุฏุ ุฃู ููุฆุงุช ุฃุฎุทุงุก ุงูู
ุฒูุฏ. ุชุดู
ู ุฅุฌู
ุงููุงุช ุงูุฑู
ูุฒ ููุท ุงูู
ูุงูู
ุงุช ุงูุชู ุฃุนุงุฏ ูููุง ุงูู
ุฒูุฏ ุจูุงูุงุช ุงูุงุณุชุฎุฏุงู
ุงููุตููุฉ.`},systemPage:{eyebrow:`ุงูุฅุฏุงุฑุฉ`,title:`ุงููุธุงู
`,description:`ุฑุงูุจ ุงูุฌูุงุฒ ูููุช ุงูุชุดุบูู ุงูุฐู ูุณุชุถูู ู
ุซูู Libre WebUI ูุฐุง.`,updated:`ุชู
ุงูุชุญุฏูุซ {{date}}`,refresh:`ุชุญุฏูุซ ู
ุนููู
ุงุช ุงููุธุงู
`,loadFailed:`ุชุนุฐุฑ ุชุญู
ูู ู
ุนููู
ุงุช ุงููุธุงู
.`,cards:{uptime:`ููุช ุชุดุบูู ุงูู
ุถูู`,uptimeDetail:`ูุนู
ู ู
ูุฐ {{date}}`,memory:`ุงูุฐุงูุฑุฉ ุงูู
ุณุชุฎุฏู
ุฉ`,memoryDetail:`{{used}} ู
ู {{total}}`,freeSpace:`ู
ุณุงุญุฉ ูุงุฑุบุฉ`,freeSpaceDetail:`{{label}} ยท {{total}} ุงูุฅุฌู
ุงูู`,containers:`ุงูุญุงููุงุช ููุฏ ุงูุชุดุบูู`,containersDetail:`{{total}} ุญุงููุฉ ู
ุนุฑููุฉ ูู Docker`,dockerUnavailable:`Docker ุบูุฑ ู
ุชุงุญ`,unavailable:`ุบูุฑ ู
ุชุงุญ`},host:{title:`ุงูู
ุถูู ูููุช ุงูุชุดุบูู`,description:`ุชูุงุตูู ูุธุงู
ุงูุชุดุบูู ูุงูู
ุนุงูุฌ ูุนู
ููุฉ Libre WebUI.`,container:`ููุช ุชุดุบูู ุงูุญุงููุฉ`,native:`ููุช ุชุดุบูู ุฃุตูู`,hostname:`ุงุณู
ุงูู
ุถูู`,operatingSystem:`ูุธุงู
ุงูุชุดุบูู`,processor:`ุงูู
ุนุงูุฌ`,logicalCpus:`ูุญุฏุงุช CPU ู
ูุทููุฉ`,loadAverage:`ู
ุชูุณุท ุงูุญู
ู ยท 1 / 5 / 15 ุฏูููุฉ`,libreVersion:`Libre WebUI`,nodeVersion:`Node.js`,process:`ุงูุนู
ููุฉ`,workingDirectory:`ุฏููู ุงูุนู
ู`},memory:{title:`ุงูุฐุงูุฑุฉ`,description:`ุฐุงูุฑุฉ ุงููุธุงู
ุงูู
ุฑุฆูุฉ ูููุช ุงูุชุดุบูู ูุงุณุชุฎุฏุงู
ุนู
ููุฉ ุงูุชุทุจูู.`,usedOf:`{{used}} ู
ุณุชุฎุฏู
ุฉ ู
ู {{total}}`,free:`{{value}} ูุงุฑุบุฉ`,processRss:`RSS ุงูุนู
ููุฉ`,heapUsed:`ููู
ุฉ V8 ุงูู
ุณุชุฎุฏู
ุฉ`,heapTotal:`ุฅุฌู
ุงูู ููู
ุฉ V8`,external:`ุฐุงูุฑุฉ ุฎุงุฑุฌูุฉ`},storage:{title:`ุงูุชุฎุฒูู`,description:`ุงูู
ุณุงุญุฉ ุงูู
ุชุงุญุฉ ููุธุงู
ู
ููุงุช ููุช ุงูุชุดุบูู ูุจูุงูุงุช ุงูุชุทุจูู ุงูุฏุงุฆู
ุฉ.`,used:`{{value}} ู
ุณุชุฎุฏู
ุฉ`,free:`{{value}} ูุงุฑุบุฉ`,empty:`ู
ุนููู
ุงุช ูุธุงู
ุงูู
ููุงุช ุบูุฑ ู
ุชุงุญุฉ ูู ููุช ุงูุชุดุบูู ูุฐุง.`},docker:{title:`Docker`,description:`ุญุงูุฉ Docker Engine ูููุฑุงุกุฉ ููุท ููุงุฆู
ุฉ ู
ุฎุชุตุฑุฉ ู
ู ุงูุญุงููุงุช.`,connected:`ู
ุชุตู`,unavailable:`ุบูุฑ ู
ุชุงุญ`,unavailableDetail:`ุชุดุฎูุตุงุช Docker Engine ุบูุฑ ู
ุชุงุญุฉ.`,socketStatus:`ู
ูุจุณ ู
ุญูู: {{status}}`,mounted:`ู
ูุซุจุช`,notMounted:`ุบูุฑ ู
ูุซุจุช`,running:`ููุฏ ุงูุชุดุบูู`,stopped:`ู
ุชููู`,paused:`ู
ุชููู ู
ุคูุชูุง`,total:`ุงูุฅุฌู
ุงูู`,version:`ุงูุฅุตุฏุงุฑ`,host:`ุงูู
ุถูู`,architecture:`ุงูุจููุฉ`,cpus:`ูุญุฏุงุช CPU`,memory:`ุงูุฐุงูุฑุฉ`,container:`ุงูุญุงููุฉ`,image:`ุงูุตูุฑุฉ`,state:`ุงูุญุงูุฉ`,created:`ุชู
ุงูุฅูุดุงุก`,empty:`Docker ู
ุชุตู ููุง ุชูุฌุฏ ุญุงููุงุช ู
ุฏุฑุฌุฉ ุญุงูููุง.`},network:{title:`ุงูุดุจูุฉ`,description:`ุงููุงุฌูุงุช ูุงูุนูุงููู ูุนุฏุงุฏุงุช ุญุฑูุฉ ู
ุฑูุฑ Linux ุงูู
ุฑุฆูุฉ ูููุช ุงูุชุดุบูู.`,internal:`ุฏุงุฎูู`,empty:`ูุง ุชูุฌุฏ ูุงุฌูุงุช ุดุจูุฉ ู
ุฑุฆูุฉ ูููุช ุชุดุบูู ุงูุชุทุจูู.`},securityNote:`ูุฐู ุงูุตูุญุฉ ู
ุฎุตุตุฉ ููู
ุณุคูููู ููุท. ููุฑุฌุน ุงูุฎุงุฏู
ู
ูุฎุตุงุช ุชุดุบูููุฉ ููุท: ููู ูุง ููุดู ู
ุชุบูุฑุงุช ุงูุจูุฆุฉุ ุฃู ุจูุงูุงุช ุงูุงุนุชู
ุงุฏุ ุฃู ุชุณู
ูุงุช Dockerุ ุฃู ุงูุชุซุจูุชุงุชุ ุฃู ุฃูุงู
ุฑ ุงูุญุงููุฉุ ุฃู ุญู
ููุงุช ุงููุญุต. ุนูุฏู
ุง ูุนู
ู Libre WebUI ูู ุญุงููุฉุ ุชุฃุชู ุชูุงุตูู CPU ูุงูุฐุงูุฑุฉ ุนูู ู
ุณุชูู ุงูู
ุถูู ู
ู Docker Engine ุนูุฏู
ุง ูููู ู
ูุจุณู ุงูู
ุญูู ู
ุชุงุญูุงุ ุชุตู ุงูููู
ุงูุฃุฎุฑู ููุช ุชุดุบูู ุงูุชุทุจูู.`},mediaGeneration:{title:`ุชูููุฏ ุงููุณุงุฆุท`,description:`ุฃูุดุฆ ููุฏูู ุฃู ุตูุชูุง ุฃู ู
ูุณููู ุฃู ููุงู
ูุง ุจุงุณุชุฎุฏุงู
ู
ุฒูุฏ ูุณุงุฆุท ู
ููุนูู.`,image:`ุตูุฑุฉ`,video:`ููุฏูู`,audio:`ุตูุช`,sound:`ุตูุช`,speech:`ููุงู
`,model:`ุงููู
ูุฐุฌ`,voice:`ุงูุตูุช ุฃู ู
ุนุฑู ุงูุตูุช`,resolution:`ุงูุฏูุฉ`,aspectRatio:`ูุณุจุฉ ุงูุนุฑุถ ุฅูู ุงูุงุฑุชูุงุน`,duration:`ุงูู
ุฏุฉ`,providerDefault:`ุงูุชุฑุงุถู ููู
ุฒูุฏ`,generateAudio:`ุชูููุฏ ุตูุช ู
ุน ุงูููุฏูู ุนูุฏ ุงูุฏุนู
`,prompt:`ุงูู
ุทุงูุจุฉ`,text:`ุงููุต ููุชุญุฏุซ`,videoPlaceholder:`ุตู ุงูู
ุดูุฏุ ูุงูุญุฑูุฉุ ูุงููุงู
ูุฑุงุ ูุงูุฅุถุงุกุฉ...`,audioPlaceholder:`ุฃุฏุฎู ุงููุต ุงูุฐู ุชุฑูุฏ ููุตูุช ุฃู ููุทูู...`,soundPlaceholder:`ุตู ุงูุตูุชุ ุฃู ุงูู
ูุณูููุ ุฃู ุงูุฃุฌูุงุกุ ุฃู ุงูุงุณุชุฌุงุจุฉ ุงูู
ูุทููุฉ ุงูุชู ุชุฑูุฏูุง...`,generate:`ุชูููุฏ`,generating:`ุฌุงุฑู ุงูุชูููุฏโฆ ูุฏ ูุณุชุบุฑู ูุฐุง ุนุฏุฉ ุฏูุงุฆู`,success:`ุชู
ุชูููุฏ ุงููุณุงุฆุท ูุญูุธูุง ูู Imagine`,failed:`ูุดู ุชูููุฏ ุงููุณุงุฆุท`,loadFailed:`ูุดู ุชุญู
ูู ู
ุฒูุฏู ุงููุณุงุฆุท`,noModels:`ูุง ุชุชููุฑ ูู
ุงุฐุฌ {{kind}}. ูู
ุจุชูุนูู ู
ุฒูุฏ ู
ุชูุงูู ูุงุญูุธ ุจูุงูุงุช ุงุนุชู
ุงุฏู ุฃููุงู.`},mediaGallery:{itemCount:`{{count}} ุนูุงุตุฑ`,empty:`ูุง ุชูุฌุฏ ูุณุงุฆุท ู
ููุฏุฉ ุจุนุฏ`,emptyHint:`ูู
ุจุชูููุฏ ุตูุฑุฉ ุฃู ููุฏูู ุฃู ู
ูุทุน ุตูุชู ูุณูุธูุฑ ููุง.`,filters:{all:`ุงููู`,image:`ุงูุตูุฑ`,video:`ู
ูุงุทุน ุงูููุฏูู`,audio:`ุงูุตูุช`}}};export{e as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/api-
|
|
2
|
-
import{n as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,p as n}from"./router-vendor-BjDI9mRe.js";import{en as r}from"./ui-vendor-DohPFHDW.js";import{o as i,t as a}from"./utils-vendor-Cbaj0BC5.js";import{n as o}from"./demoMode-BhEpMVh5.js";import{t as s}from"./logger-DbNs3-DK.js";import{T as c,c as l,f as u,l as d,o as f,s as p}from"./api-DCD41-l9.js";import{r as m}from"./utils-DmZD5uA3.js";import{t as h}from"./appStore-Bw-8Exsx.js";var g=[`Chat`,`Image`,`Speech`,`Transcription`,`Embedding`],_={chat:`Chat`,completion:`Chat`,embedding:`Embedding`,image:`Image`,stt:`Transcription`,tts:`Speech`},v={completion:`Chat`,embedding:`Embedding`,image:`Image`,stt:`Transcription`,tts:`Speech`};function y(e){let t=new Map,n=(e,n)=>{for(let r of e||[]){if(typeof r!=`string`||!r.trim())continue;let e=r.trim(),i=t.get(e)??new Set;i.add(n),t.set(e,i)}};n(e.model_map,_[e.type]);for(let t of Object.keys(e.capabilities||{}))n(e.capabilities?.[t]?.model_map,v[t]);return Array.from(t,([e,t])=>({id:e,capabilities:g.filter(e=>t.has(e))}))}function b(e){return e.type===`chat`||e.type===`completion`}var x=[`dall-e`,`embed`,`gpt-image`,`moderation`,`rerank`,`sora`,`stable-diffusion`,`text-to-speech`,`tts`,`whisper`];function S(e){let t=e.toLocaleLowerCase();return!x.some(e=>t.includes(e))}function ee(e){let t=new Set;for(let[n,r]of Object.entries(e.capabilities||{}))if(n!==`completion`)for(let e of r?.model_map||[])t.add(e.trim());return(e.model_map||[]).filter(e=>typeof e==`string`&&e.trim().length>0&&!t.has(e.trim())&&S(e))}function C(e,t){let n=t.trim().toLocaleLowerCase();return n?[e.name,e.id,e.type,...y(e).map(e=>e.id)].some(e=>e?.toLocaleLowerCase().includes(n)):!0}var w=(e,t)=>{if(e&&typeof e==`object`&&`response`in e){let t=e;if(t.response?.data?.error)return t.response.data.error}return e instanceof Error?e.message:t};function T(e){return{...e,id:e.id||m(),timestamp:Date.now()}}function E(e,t){return e.currentSession?.isPrivate&&e.currentSession?.id===t}function D(e,t){return e.sessions.some(e=>e.id===t)}function te(e,t){return!!e.currentSession&&(E(e,t)||D(e,e.currentSession.id))}function ne(e,t,n){if(E(e,t))return e.currentSession.messages.find(e=>e.id===n.id)?e:{currentSession:{...e.currentSession,messages:[...e.currentSession.messages,n],updatedAt:Date.now()},sessions:e.sessions};if(e.sessions.find(e=>e.id===t)?.messages.some(e=>e.id===n.id))return e;let r=e.sessions.map(e=>{if(e.id!==t)return e;let r=[...e.messages];if(n.parentId){let e=n.parentId;r=r.map(t=>t.id===e||t.parentId===e?{...t,isActive:!1,branchIndex:t.branchIndex??0,siblingCount:(n.branchIndex||0)+1}:t)}return{...e,messages:[...r,n],updatedAt:Date.now()}});return{sessions:r,currentSession:e.currentSession?.id===t&&r.find(e=>e.id===t)||e.currentSession}}function re(e,t,n,r){if(e.currentSession?.id!==t)return e;if(e.currentSession?.isPrivate){let t=e.currentSession.messages.find(e=>e.id===n);return!t||t.content===r?e:{sessions:e.sessions,currentSession:{...e.currentSession,messages:e.currentSession.messages.map(e=>e.id===n?{...e,content:r}:e),updatedAt:Date.now()}}}let i=e.sessions.find(e=>e.id===t),a=i?.messages.find(e=>e.id===n);if(!i||!a||a.content===r)return e;let o=e.sessions.map(e=>e.id===t?{...e,messages:e.messages.map(e=>e.id===n?{...e,content:r}:e),updatedAt:Date.now()}:e);return{sessions:o,currentSession:e.currentSession?.id===t&&o.find(e=>e.id===t)||e.currentSession}}function ie(e,t,n,r,i,a){if(e.currentSession?.id!==t)return e;if(e.currentSession?.isPrivate)return{sessions:e.sessions,currentSession:{...e.currentSession,messages:e.currentSession.messages.map(e=>e.id===n?{...e,content:r,statistics:i,...a?{providerMetadata:a}:{}}:e),updatedAt:Date.now()}};let o=e.sessions.map(e=>e.id===t?{...e,messages:e.messages.map(e=>e.id===n?{...e,content:r,statistics:i,...a?{providerMetadata:a}:{}}:e),updatedAt:Date.now()}:e);return{sessions:o,currentSession:e.currentSession?.id===t&&o.find(e=>e.id===t)||e.currentSession}}function ae(e){return e.reduce((e,t)=>(e[t.id]=t,e),{})}function oe(e){return e.map(e=>({name:`persona:${e.id}`,model:e.model,size:0,digest:``,details:{parent_model:e.model,format:`persona`,family:`persona`,families:[`persona`],parameter_size:``,quantization_level:``},modified_at:new Date(e.updated_at).toISOString(),expires_at:new Date().toISOString(),size_vram:0,isPersona:!0,personaName:e.name,personaDescription:e.description}))}function se(e){return e.filter(e=>e.active&&e.type!==`tts`&&e.type!==`image`).flatMap(e=>ee(e).map(t=>({name:t,model:t,size:0,digest:``,details:{parent_model:``,format:``,family:``,families:[],parameter_size:``,quantization_level:``},modified_at:new Date().toISOString(),expires_at:new Date().toISOString(),size_vram:0,isPlugin:!0,pluginId:e.id,pluginName:e.name})))}var O=`persona:`,ce=`plugin:`,le=`ollama:`,k=`legacy:`,ue=`agent:`,A=e=>{try{return decodeURIComponent(e)}catch{return null}};function j(e){return e.isLegacySelection?{model:e.name,providerType:null,providerId:null}:e.isPersona?{model:e.name,providerType:`ollama`,providerId:null}:e.isPlugin&&e.pluginId?{model:e.name,providerType:`plugin`,providerId:e.pluginId}:e.isAgent?{model:e.name,providerType:`agent`,providerId:e.name}:{model:e.name,providerType:`ollama`,providerId:null}}function de(e){return e.providerType?e.providerType===`plugin`&&e.providerId?`${ce}${encodeURIComponent(e.providerId)}:${encodeURIComponent(e.model)}`:e.providerType===`agent`&&e.providerId?`${ue}${encodeURIComponent(e.providerId)}:${encodeURIComponent(e.model)}`:e.providerType===`ollama`&&e.model.startsWith(O)?`${O}${encodeURIComponent(e.model.slice(8))}`:e.providerType===`ollama`?`${le}${encodeURIComponent(e.model)}`:`${k}${encodeURIComponent(e.model)}`:`${k}${encodeURIComponent(e.model)}`}function M(e){return de(j(e))}function fe(e){if(e.startsWith(O)){let t=A(e.slice(8));return t===null?null:{model:`${O}${t}`,providerType:`ollama`,providerId:null}}if(e.startsWith(ce)){let t=e.slice(7),n=t.indexOf(`:`);if(n<1)return null;let r=A(t.slice(0,n)),i=A(t.slice(n+1));return r&&i?{model:i,providerType:`plugin`,providerId:r}:null}if(e.startsWith(ue)){let t=e.slice(6),n=t.indexOf(`:`);if(n<1)return null;let r=A(t.slice(0,n)),i=A(t.slice(n+1));return r&&i?{model:i,providerType:`agent`,providerId:r}:null}if(e.startsWith(le)){let t=A(e.slice(7));return t?{model:t,providerType:`ollama`,providerId:null}:null}if(e.startsWith(k)){let t=A(e.slice(7));return t?{model:t,providerType:null,providerId:null}:null}return null}function N(e,t){return t.providerType===`plugin`?e.find(e=>e.isPlugin&&e.pluginId===t.providerId&&e.name===t.model):t.providerType===`agent`?e.find(e=>e.isAgent&&e.name===t.model):t.providerType===`ollama`?t.model.startsWith(O)?e.find(e=>e.isPersona&&e.name===t.model):e.find(e=>!e.isPlugin&&!e.isPersona&&e.name===t.model):e.find(e=>e.isLegacySelection&&e.name===t.model)??e.find(e=>e.name===t.model)}function pe(e,t){if(!t.providerType)return de(t);let n=N(e,t);return n?M(n):de(t)}function me(e,t){let n=e.find(e=>M(e)===t);return n?j(n):fe(t)}function he(e){return!e.isPlugin&&!e.isPersona&&!e.isAgent&&!e.isLegacySelection&&!e.isUnavailable}function ge(e,t){return t.model?!!N(e.filter(e=>!e.isLegacySelection&&!e.isUnavailable),t):!1}function _e(e,t){if(!t.model)return e;if(!t.providerType){if(e.some(e=>e.isLegacySelection&&e.name===t.model))return e;let n=!!N(e,t);return[...e,{name:t.model,model:t.model,size:0,digest:``,modified_at:``,details:{},isLegacySelection:!0,isUnavailable:!n}]}if(N(e,t))return e;let n=t.providerType,r=n===`ollama`&&t.model.startsWith(O),i=n===`plugin`&&t.providerId||void 0;return[...e,{name:t.model,model:t.model,size:0,digest:``,modified_at:``,details:{},isPlugin:n===`plugin`,pluginId:i,pluginName:i,isAgent:n===`agent`,isPersona:r,personaName:r?t.model.slice(8):void 0,isUnavailable:!0}]}var P=s(`chat-store`),F=i((e,n)=>({sessions:[],currentSession:null,setCurrentSession:t=>{e({currentSession:t})},createSession:async(t,n,i,a,o)=>{try{e({loading:!0,error:null});let s=await c.createSession(t,n,i,a,o);if(s.success&&s.data){let t=s.data;return e(e=>({sessions:[t,...e.sessions],currentSession:t,loading:!1})),r.success(`New chat created`),t}}catch(t){let n=w(t,`Failed to create session`);e({error:n,loading:!1}),r.error(n)}},loadSessions:async()=>{try{e({loading:!0,error:null});let t=await c.getSessions();t.success&&t.data&&e(e=>{let n=t.data||[],r=n.map(e=>e.id),i=null;return e.currentSession&&r.includes(e.currentSession.id)?i=n.find(t=>t.id===e.currentSession.id)||null:n.length>0&&(i=n[0],e.currentSession&&P.warn(`Previous currentSession not found in backend sessions:`,e.currentSession.id)),{sessions:n,currentSession:i,loading:!1}})}catch(t){let n=w(t,`Failed to load sessions`);e({error:n,loading:!1}),r.error(n)}},deleteSession:async t=>{try{let n=await c.deleteSession(t);n.success?(e(e=>{let n=e.sessions.filter(e=>e.id!==t),r=e.currentSession?.id===t?n[0]||null:e.currentSession;return P.debug(`Store: Updating state, sessions count:`,n.length),{sessions:n,currentSession:r}}),r.success(`Chat deleted`)):(P.error(`Store: deleteSession failed:`,n),r.error(`Failed to delete chat`))}catch(e){P.error(`Store: deleteSession error:`,e);let t=w(e,`Failed to delete session`);r.error(t)}},clearAllSessions:async()=>{try{e({loading:!0,error:null});let t=await c.clearAllSessions();t.success?(e({sessions:[],currentSession:null,loading:!1}),r.success(`All chat history cleared`)):(P.error(`Store: clearAllSessions failed:`,t),r.error(`Failed to clear chat history`),e({loading:!1}))}catch(t){P.error(`Store: clearAllSessions error:`,t);let n=w(t,`Failed to clear chat history`);r.error(n),e({loading:!1})}},clearAllState:()=>{e({sessions:[],currentSession:null,models:[],selectedModel:``,selectedProviderType:null,selectedProviderId:null,systemMessage:``,loading:!1,error:null})},applySessionTitle:(t,n,r=Date.now())=>{e(e=>({sessions:e.sessions.map(e=>e.id===t?{...e,title:n,updatedAt:r}:e),currentSession:e.currentSession?.id===t?{...e.currentSession,title:n,updatedAt:r}:e.currentSession}))},updateSessionTitle:async(e,t)=>{try{let i=await c.updateSession(e,{title:t});if(i.success&&i.data){let t=i.data.title,a=i.data.updatedAt??Date.now();n().applySessionTitle(e,t,a),r.success(`Chat title updated`)}}catch(e){let t=w(e,`Failed to update session`);r.error(t)}},addMessage:(t,i)=>{let a=n(),o=E(a,t);if(!te(a,t)){r.error(`No valid chat session. Please create or select a chat.`),P.error(`addMessage blocked: currentSession is not valid`,a.currentSession?.id);return}if(!o&&!D(a,t)){r.error(`Session not found or invalid. Please select or create a valid chat session.`),P.error(`addMessage blocked: sessionId not found in sessions`,t);return}let s=T(i);e(e=>ne(e,t,s))},updateMessage:(t,n,r)=>{e(e=>re(e,t,n,r))},updateMessageWithStatistics:(t,n,r,i,a)=>{e(e=>ie(e,t,n,r,i,a))},models:[],loadModels:async()=>{try{e({loading:!0,error:null}),P.debug(`Loading models from API...`);let i=[],a;try{let e=await u.getModels();e.success&&e.data?(i=[...e.data],P.debug(`Ollama models loaded:`,e.data.length)):a=Error(e.error||e.message||`Ollama models are unavailable.`)}catch(e){a=e,P.warn(`Ollama models are unavailable; continuing with plugin models:`,e)}try{let e=await l.getAllPlugins();if(e.success&&e.data){let t=e.data.filter(e=>e.active&&e.type!==`tts`&&e.type!==`image`);P.debug(`๐ Active plugins found:`,t.map(e=>e.name));let n=se(t);i.push(...n),P.debug(`Plugin models added:`,n.length)}}catch(e){P.error(`โ Failed to load plugin models:`,e),e instanceof Error&&P.error(`โ Plugin error details:`,{message:e.message,response:e.response?.data,status:e.response?.status,url:e.config?.url})}try{let{agentCliApi:e}=await t(async()=>{let{agentCliApi:e}=await import(`./api-DCD41-l9.js`).then(e=>e.t);return{agentCliApi:e}},__vite__mapDeps([0,1,2,3,4,5,6])),n=await e.getModels();if(n.success&&n.data){let e=n.data.map(e=>({name:e.id,model:e.id,size:0,digest:``,modified_at:``,details:{},isAgent:!0,agentName:e.name}));i.push(...e),P.debug(`Agent CLI models added:`,e.length)}}catch(e){P.warn(`Agent CLI models unavailable:`,e)}let o=i.length;try{let{personaApi:n}=await t(async()=>{let{personaApi:e}=await import(`./api-DCD41-l9.js`).then(e=>e.t);return{personaApi:e}},__vite__mapDeps([0,1,2,3,4,5,6])),r=await n.getPersonas();if(r.success&&r.data){let t=ae(r.data),n=oe(r.data);i.push(...n),e(e=>({...e,personas:t}))}}catch(e){P.error(`โ Failed to load personas:`,e)}P.debug(`Total models loaded:`,i.length);let s=o===0&&a?w(a,`No model provider is available`):null,c=n(),d=c.selectedModel,f={model:d,providerType:c.selectedProviderType,providerId:c.selectedProviderId},m=!!N(i,f),h=c.selectedProviderType===`ollama`||c.selectedProviderType===`plugin`;if(d&&!m&&h){let t=`Selected model "${d}" is unavailable from ${c.selectedProviderType===`plugin`?c.selectedProviderId||`plugin`:`Ollama`}. Reactivate that provider or select another model.`;e({models:i,loading:!1,error:t}),r.error(t);return}if(d&&!m&&i.length>0){let t=j(i[0]);P.debug(`โ ๏ธ Legacy selected model "${d}" no longer available, falling back to "${t.model}"`),e({models:i,loading:!1,selectedModel:t.model,selectedProviderType:t.providerType||null,selectedProviderId:t.providerId||null,error:s}),p.setDefaultModel(t.model,t.providerType,t.providerId).catch(e=>{P.warn(`Failed to save fallback default model:`,e)}),r.success(`Switched to ${t.model} (previous model no longer available)`)}else e({models:i,loading:!1,error:s});s&&r.error(s)}catch(t){P.error(`Error loading models:`,t);let n=w(t,`Failed to load models`);e({error:n,loading:!1}),r.error(n)}},loadPreferences:async()=>{try{let t=await p.getPreferences();if(t.success&&t.data){let{defaultModel:n,defaultProviderType:r,defaultProviderId:i,systemMessage:a}=t.data;n&&(e({selectedModel:n,selectedProviderType:r||null,selectedProviderId:r===`plugin`&&i||null}),P.debug(`โ
Loaded default model from backend:`,n)),a!==void 0&&(e({systemMessage:a}),P.debug(`โ
Loaded system message from backend`))}}catch(e){P.warn(`โ Failed to load preferences from backend:`,e)}},selectedModel:``,selectedProviderType:null,selectedProviderId:null,setSelectedModel:(t,n=null,r=null)=>{let i=n===`plugin`&&r||null;e({selectedModel:t,selectedProviderType:n,selectedProviderId:i}),p.setDefaultModel(t,n,i).catch(e=>{P.warn(`Failed to save default model to backend:`,e)})},updateCurrentSessionModel:async(t,i=null,a=null)=>{let o=n();if(!o.currentSession)throw Error(`No current session to update`);try{let n=await c.updateSession(o.currentSession.id,{model:t,providerType:i,providerId:i===`plugin`?a:null});n.success&&n.data&&(e(e=>({sessions:e.sessions.map(t=>t.id===e.currentSession?.id?n.data:t),currentSession:n.data,selectedModel:t,selectedProviderType:i,selectedProviderId:i===`plugin`&&a||null})),r.success(`Model updated for current chat`))}catch(e){let t=w(e,`Failed to update session model`);throw r.error(t),e}},personas:{},loadPersonas:async()=>{try{e({loading:!0,error:null});let t=await d.getPersonas();if(t.success&&t.data){let n=t.data;e({personas:ae(n),loading:!1}),P.debug(`โ
Personas loaded:`,n.length)}}catch(t){let n=w(t,`Failed to load personas`);e({error:n,loading:!1}),P.error(`โ Failed to load personas:`,n)}},getCurrentPersona:()=>{let e=n();if(!e.currentSession||!e.currentSession.model?.startsWith(`persona:`))return null;let t=e.currentSession.model.replace(`persona:`,``);return e.personas[t]||null},systemMessage:``,setSystemMessage:t=>{let r=n();if(e({systemMessage:t}),p.setSystemMessage(t).catch(e=>{P.warn(`Failed to save system message to backend:`,e)}),r.currentSession){let n=r.currentSession.messages.findIndex(e=>e.role===`system`);if(n!==-1){e(e=>{let r=e.sessions.map(r=>{if(r.id===e.currentSession?.id){let e=r.messages.map((e,r)=>r===n&&e.role===`system`?{...e,content:t,timestamp:Date.now()}:e);return{...r,messages:e,updatedAt:Date.now()}}return r});return{sessions:r,currentSession:e.currentSession?r.find(t=>t.id===e.currentSession.id)||e.currentSession:null}});let i=r.currentSession.messages[n];c.updateMessage(r.currentSession.id,i.id,{content:t}).catch(e=>{P.warn(`Failed to sync system message update to backend:`,e)}),P.debug(`โ
Updated system message in current session`)}}},loading:!1,error:null,setError:t=>e({error:t}),generatingTitleForSession:null,setGeneratingTitleForSession:t=>e({generatingTitleForSession:t}),...typeof window<`u`&&{testPluginApi:async()=>{try{P.debug(`๐งช Testing plugin API...`);let e=await l.getAllPlugins();return P.debug(`โ
Plugin API test result:`,e),e}catch(e){return P.error(`โ Plugin API test failed:`,e),{error:e}}}}})),ve=1e5,I=`[Earlier live output omitted]
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/api-BCqWXjZI.js","js/rolldown-runtime-QTnfLwEv.js","js/router-vendor-BjDI9mRe.js","js/markdown-core-GI9BPwrB.js","js/utils-vendor-Cbaj0BC5.js","js/demoMode-BhEpMVh5.js","js/logger-DbNs3-DK.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{n as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,p as n}from"./router-vendor-BjDI9mRe.js";import{pn as r}from"./ui-vendor-ChfdHf5M.js";import{o as i,t as a}from"./utils-vendor-Cbaj0BC5.js";import{n as o}from"./demoMode-BhEpMVh5.js";import{t as s}from"./logger-DbNs3-DK.js";import{D as c,c as l,l as u,o as d,p as f,u as p}from"./api-BCqWXjZI.js";import{r as m}from"./utils-DmZD5uA3.js";import{t as h}from"./appStore-CDM6V5ny.js";var g=[`Chat`,`Image`,`Video`,`Audio`,`Speech`,`Transcription`,`Embedding`],_={chat:`Chat`,completion:`Chat`,embedding:`Embedding`,image:`Image`,audio:`Audio`,stt:`Transcription`,tts:`Speech`,video:`Video`},v={completion:`Chat`,embedding:`Embedding`,image:`Image`,audio:`Audio`,stt:`Transcription`,tts:`Speech`,video:`Video`};function y(e){let t=new Map,n=(e,n)=>{for(let r of e||[]){if(typeof r!=`string`||!r.trim())continue;let e=r.trim(),i=t.get(e)??new Set;i.add(n),t.set(e,i)}};n(e.model_map,_[e.type]);for(let t of Object.keys(e.capabilities||{}))n(e.capabilities?.[t]?.model_map,v[t]);return Array.from(t,([e,t])=>({id:e,capabilities:g.filter(e=>t.has(e))}))}function b(e){return e.type===`chat`||e.type===`completion`}var x=[`dall-e`,`embed`,`gpt-image`,`moderation`,`rerank`,`sora`,`stable-diffusion`,`text-to-speech`,`tts`,`whisper`];function S(e){let t=e.toLocaleLowerCase();return!x.some(e=>t.includes(e))}function ee(e){let t=new Set;for(let[n,r]of Object.entries(e.capabilities||{}))if(n!==`completion`)for(let e of r?.model_map||[])t.add(e.trim());return(e.model_map||[]).filter(e=>typeof e==`string`&&e.trim().length>0&&!t.has(e.trim())&&S(e))}function C(e,t){let n=t.trim().toLocaleLowerCase();return n?[e.name,e.id,e.type,...y(e).map(e=>e.id)].some(e=>e?.toLocaleLowerCase().includes(n)):!0}var w=(e,t)=>{if(e&&typeof e==`object`&&`response`in e){let t=e;if(t.response?.data?.error)return t.response.data.error}return e instanceof Error?e.message:t};function T(e){return{...e,id:e.id||m(),timestamp:Date.now()}}function E(e,t){return e.currentSession?.isPrivate&&e.currentSession?.id===t}function D(e,t){return e.sessions.some(e=>e.id===t)}function te(e,t){return!!e.currentSession&&(E(e,t)||D(e,e.currentSession.id))}function ne(e,t,n){if(E(e,t))return e.currentSession.messages.find(e=>e.id===n.id)?e:{currentSession:{...e.currentSession,messages:[...e.currentSession.messages,n],updatedAt:Date.now()},sessions:e.sessions};if(e.sessions.find(e=>e.id===t)?.messages.some(e=>e.id===n.id))return e;let r=e.sessions.map(e=>{if(e.id!==t)return e;let r=[...e.messages];if(n.parentId){let e=n.parentId;r=r.map(t=>t.id===e||t.parentId===e?{...t,isActive:!1,branchIndex:t.branchIndex??0,siblingCount:(n.branchIndex||0)+1}:t)}return{...e,messages:[...r,n],updatedAt:Date.now()}});return{sessions:r,currentSession:e.currentSession?.id===t&&r.find(e=>e.id===t)||e.currentSession}}function re(e,t,n,r){if(e.currentSession?.id!==t)return e;if(e.currentSession?.isPrivate){let t=e.currentSession.messages.find(e=>e.id===n);return!t||t.content===r?e:{sessions:e.sessions,currentSession:{...e.currentSession,messages:e.currentSession.messages.map(e=>e.id===n?{...e,content:r}:e),updatedAt:Date.now()}}}let i=e.sessions.find(e=>e.id===t),a=i?.messages.find(e=>e.id===n);if(!i||!a||a.content===r)return e;let o=e.sessions.map(e=>e.id===t?{...e,messages:e.messages.map(e=>e.id===n?{...e,content:r}:e),updatedAt:Date.now()}:e);return{sessions:o,currentSession:e.currentSession?.id===t&&o.find(e=>e.id===t)||e.currentSession}}function ie(e,t,n,r,i,a){if(e.currentSession?.id!==t)return e;if(e.currentSession?.isPrivate)return{sessions:e.sessions,currentSession:{...e.currentSession,messages:e.currentSession.messages.map(e=>e.id===n?{...e,content:r,statistics:i,...a?{providerMetadata:a}:{}}:e),updatedAt:Date.now()}};let o=e.sessions.map(e=>e.id===t?{...e,messages:e.messages.map(e=>e.id===n?{...e,content:r,statistics:i,...a?{providerMetadata:a}:{}}:e),updatedAt:Date.now()}:e);return{sessions:o,currentSession:e.currentSession?.id===t&&o.find(e=>e.id===t)||e.currentSession}}function ae(e){return e.reduce((e,t)=>(e[t.id]=t,e),{})}function oe(e){return e.map(e=>({name:`persona:${e.id}`,model:e.model,size:0,digest:``,details:{parent_model:e.model,format:`persona`,family:`persona`,families:[`persona`],parameter_size:``,quantization_level:``},modified_at:new Date(e.updated_at).toISOString(),expires_at:new Date().toISOString(),size_vram:0,isPersona:!0,personaName:e.name,personaDescription:e.description}))}function se(e){return e.filter(e=>e.active&&e.type!==`tts`&&e.type!==`image`).flatMap(e=>ee(e).map(t=>({name:t,model:t,size:0,digest:``,details:{parent_model:``,format:``,family:``,families:[],parameter_size:``,quantization_level:``},modified_at:new Date().toISOString(),expires_at:new Date().toISOString(),size_vram:0,isPlugin:!0,pluginId:e.id,pluginName:e.name})))}var O=`persona:`,ce=`plugin:`,le=`ollama:`,k=`legacy:`,ue=`agent:`,A=e=>{try{return decodeURIComponent(e)}catch{return null}};function j(e){return e.isLegacySelection?{model:e.name,providerType:null,providerId:null}:e.isPersona?{model:e.name,providerType:`ollama`,providerId:null}:e.isPlugin&&e.pluginId?{model:e.name,providerType:`plugin`,providerId:e.pluginId}:e.isAgent?{model:e.name,providerType:`agent`,providerId:e.name}:{model:e.name,providerType:`ollama`,providerId:null}}function de(e){return e.providerType?e.providerType===`plugin`&&e.providerId?`${ce}${encodeURIComponent(e.providerId)}:${encodeURIComponent(e.model)}`:e.providerType===`agent`&&e.providerId?`${ue}${encodeURIComponent(e.providerId)}:${encodeURIComponent(e.model)}`:e.providerType===`ollama`&&e.model.startsWith(O)?`${O}${encodeURIComponent(e.model.slice(8))}`:e.providerType===`ollama`?`${le}${encodeURIComponent(e.model)}`:`${k}${encodeURIComponent(e.model)}`:`${k}${encodeURIComponent(e.model)}`}function M(e){return de(j(e))}function fe(e){if(e.startsWith(O)){let t=A(e.slice(8));return t===null?null:{model:`${O}${t}`,providerType:`ollama`,providerId:null}}if(e.startsWith(ce)){let t=e.slice(7),n=t.indexOf(`:`);if(n<1)return null;let r=A(t.slice(0,n)),i=A(t.slice(n+1));return r&&i?{model:i,providerType:`plugin`,providerId:r}:null}if(e.startsWith(ue)){let t=e.slice(6),n=t.indexOf(`:`);if(n<1)return null;let r=A(t.slice(0,n)),i=A(t.slice(n+1));return r&&i?{model:i,providerType:`agent`,providerId:r}:null}if(e.startsWith(le)){let t=A(e.slice(7));return t?{model:t,providerType:`ollama`,providerId:null}:null}if(e.startsWith(k)){let t=A(e.slice(7));return t?{model:t,providerType:null,providerId:null}:null}return null}function N(e,t){return t.providerType===`plugin`?e.find(e=>e.isPlugin&&e.pluginId===t.providerId&&e.name===t.model):t.providerType===`agent`?e.find(e=>e.isAgent&&e.name===t.model):t.providerType===`ollama`?t.model.startsWith(O)?e.find(e=>e.isPersona&&e.name===t.model):e.find(e=>!e.isPlugin&&!e.isPersona&&e.name===t.model):e.find(e=>e.isLegacySelection&&e.name===t.model)??e.find(e=>e.name===t.model)}function pe(e,t){if(!t.providerType)return de(t);let n=N(e,t);return n?M(n):de(t)}function me(e,t){let n=e.find(e=>M(e)===t);return n?j(n):fe(t)}function he(e){return!e.isPlugin&&!e.isPersona&&!e.isAgent&&!e.isLegacySelection&&!e.isUnavailable}function ge(e,t){return t.model?!!N(e.filter(e=>!e.isLegacySelection&&!e.isUnavailable),t):!1}function _e(e,t){if(!t.model)return e;if(!t.providerType){if(e.some(e=>e.isLegacySelection&&e.name===t.model))return e;let n=!!N(e,t);return[...e,{name:t.model,model:t.model,size:0,digest:``,modified_at:``,details:{},isLegacySelection:!0,isUnavailable:!n}]}if(N(e,t))return e;let n=t.providerType,r=n===`ollama`&&t.model.startsWith(O),i=n===`plugin`&&t.providerId||void 0;return[...e,{name:t.model,model:t.model,size:0,digest:``,modified_at:``,details:{},isPlugin:n===`plugin`,pluginId:i,pluginName:i,isAgent:n===`agent`,isPersona:r,personaName:r?t.model.slice(8):void 0,isUnavailable:!0}]}var P=s(`chat-store`),F=i((e,n)=>({sessions:[],currentSession:null,setCurrentSession:t=>{e({currentSession:t})},createSession:async(t,n,i,a,o)=>{try{e({loading:!0,error:null});let s=await c.createSession(t,n,i,a,o);if(s.success&&s.data){let t=s.data;return e(e=>({sessions:[t,...e.sessions],currentSession:t,loading:!1})),r.success(`New chat created`),t}}catch(t){let n=w(t,`Failed to create session`);e({error:n,loading:!1}),r.error(n)}},loadSessions:async()=>{try{e({loading:!0,error:null});let t=await c.getSessions();t.success&&t.data&&e(e=>{let n=t.data||[],r=n.map(e=>e.id),i=null;return e.currentSession?.isPrivate?i=e.currentSession:e.currentSession&&r.includes(e.currentSession.id)?i=n.find(t=>t.id===e.currentSession.id)||null:n.length>0&&(i=n[0],e.currentSession&&P.warn(`Previous currentSession not found in backend sessions:`,e.currentSession.id)),{sessions:n,currentSession:i,loading:!1}})}catch(t){let n=w(t,`Failed to load sessions`);e({error:n,loading:!1}),r.error(n)}},deleteSession:async t=>{try{let n=await c.deleteSession(t);n.success?(e(e=>{let n=e.sessions.filter(e=>e.id!==t),r=e.currentSession?.id===t?n[0]||null:e.currentSession;return P.debug(`Store: Updating state, sessions count:`,n.length),{sessions:n,currentSession:r}}),r.success(`Chat deleted`)):(P.error(`Store: deleteSession failed:`,n),r.error(`Failed to delete chat`))}catch(e){P.error(`Store: deleteSession error:`,e);let t=w(e,`Failed to delete session`);r.error(t)}},clearAllSessions:async()=>{try{e({loading:!0,error:null});let t=await c.clearAllSessions();t.success?(e({sessions:[],currentSession:null,loading:!1}),r.success(`All chat history cleared`)):(P.error(`Store: clearAllSessions failed:`,t),r.error(`Failed to clear chat history`),e({loading:!1}))}catch(t){P.error(`Store: clearAllSessions error:`,t);let n=w(t,`Failed to clear chat history`);r.error(n),e({loading:!1})}},clearAllState:()=>{e({sessions:[],currentSession:null,models:[],selectedModel:``,selectedProviderType:null,selectedProviderId:null,systemMessage:``,loading:!1,error:null})},applySessionTitle:(t,n,r=Date.now())=>{e(e=>({sessions:e.sessions.map(e=>e.id===t?{...e,title:n,updatedAt:r}:e),currentSession:e.currentSession?.id===t?{...e.currentSession,title:n,updatedAt:r}:e.currentSession}))},updateSessionTitle:async(e,t)=>{try{let i=await c.updateSession(e,{title:t});if(i.success&&i.data){let t=i.data.title,a=i.data.updatedAt??Date.now();n().applySessionTitle(e,t,a),r.success(`Chat title updated`)}}catch(e){let t=w(e,`Failed to update session`);r.error(t)}},addMessage:(t,i)=>{let a=n(),o=E(a,t);if(!te(a,t)){r.error(`No valid chat session. Please create or select a chat.`),P.error(`addMessage blocked: currentSession is not valid`,a.currentSession?.id);return}if(!o&&!D(a,t)){r.error(`Session not found or invalid. Please select or create a valid chat session.`),P.error(`addMessage blocked: sessionId not found in sessions`,t);return}let s=T(i);e(e=>ne(e,t,s))},updateMessage:(t,n,r)=>{e(e=>re(e,t,n,r))},updateMessageWithStatistics:(t,n,r,i,a)=>{e(e=>ie(e,t,n,r,i,a))},models:[],loadModels:async()=>{try{e({loading:!0,error:null}),P.debug(`Loading models from API...`);let i=[],a;try{let e=await f.getModels();e.success&&e.data?(i=[...e.data],P.debug(`Ollama models loaded:`,e.data.length)):a=Error(e.error||e.message||`Ollama models are unavailable.`)}catch(e){a=e,P.warn(`Ollama models are unavailable; continuing with plugin models:`,e)}try{let e=await u.getAllPlugins();if(e.success&&e.data){let t=e.data.filter(e=>e.active&&e.type!==`tts`&&e.type!==`image`);P.debug(`๐ Active plugins found:`,t.map(e=>e.name));let n=se(t);i.push(...n),P.debug(`Plugin models added:`,n.length)}}catch(e){P.error(`โ Failed to load plugin models:`,e),e instanceof Error&&P.error(`โ Plugin error details:`,{message:e.message,response:e.response?.data,status:e.response?.status,url:e.config?.url})}try{let{agentCliApi:e}=await t(async()=>{let{agentCliApi:e}=await import(`./api-BCqWXjZI.js`).then(e=>e.t);return{agentCliApi:e}},__vite__mapDeps([0,1,2,3,4,5,6])),n=await e.getModels();if(n.success&&n.data){let e=n.data.map(e=>({name:e.id,model:e.id,size:0,digest:``,modified_at:``,details:{},isAgent:!0,agentName:e.name}));i.push(...e),P.debug(`Agent CLI models added:`,e.length)}}catch(e){P.warn(`Agent CLI models unavailable:`,e)}let o=i.length;try{let{personaApi:n}=await t(async()=>{let{personaApi:e}=await import(`./api-BCqWXjZI.js`).then(e=>e.t);return{personaApi:e}},__vite__mapDeps([0,1,2,3,4,5,6])),r=await n.getPersonas();if(r.success&&r.data){let t=ae(r.data),n=oe(r.data);i.push(...n),e(e=>({...e,personas:t}))}}catch(e){P.error(`โ Failed to load personas:`,e)}P.debug(`Total models loaded:`,i.length);let s=o===0&&a?w(a,`No model provider is available`):null,c=n(),d=c.selectedModel,p={model:d,providerType:c.selectedProviderType,providerId:c.selectedProviderId},m=!!N(i,p),h=c.selectedProviderType===`ollama`||c.selectedProviderType===`plugin`;if(d&&!m&&h){let t=`Selected model "${d}" is unavailable from ${c.selectedProviderType===`plugin`?c.selectedProviderId||`plugin`:`Ollama`}. Reactivate that provider or select another model.`;e({models:i,loading:!1,error:t}),r.error(t);return}if(d&&!m&&i.length>0){let t=j(i[0]);P.debug(`โ ๏ธ Legacy selected model "${d}" no longer available, falling back to "${t.model}"`),e({models:i,loading:!1,selectedModel:t.model,selectedProviderType:t.providerType||null,selectedProviderId:t.providerId||null,error:s}),l.setDefaultModel(t.model,t.providerType,t.providerId).catch(e=>{P.warn(`Failed to save fallback default model:`,e)}),r.success(`Switched to ${t.model} (previous model no longer available)`)}else e({models:i,loading:!1,error:s});s&&r.error(s)}catch(t){P.error(`Error loading models:`,t);let n=w(t,`Failed to load models`);e({error:n,loading:!1}),r.error(n)}},loadPreferences:async()=>{try{let t=await l.getPreferences();if(t.success&&t.data){let{defaultModel:n,defaultProviderType:r,defaultProviderId:i,systemMessage:a}=t.data;n&&(e({selectedModel:n,selectedProviderType:r||null,selectedProviderId:r===`plugin`&&i||null}),P.debug(`โ
Loaded default model from backend:`,n)),a!==void 0&&(e({systemMessage:a}),P.debug(`โ
Loaded system message from backend`))}}catch(e){P.warn(`โ Failed to load preferences from backend:`,e)}},selectedModel:``,selectedProviderType:null,selectedProviderId:null,setSelectedModel:(t,n=null,r=null)=>{let i=n===`plugin`&&r||null;e({selectedModel:t,selectedProviderType:n,selectedProviderId:i}),l.setDefaultModel(t,n,i).catch(e=>{P.warn(`Failed to save default model to backend:`,e)})},updateCurrentSessionModel:async(t,i=null,a=null)=>{let o=n();if(!o.currentSession)throw Error(`No current session to update`);try{let n=await c.updateSession(o.currentSession.id,{model:t,providerType:i,providerId:i===`plugin`?a:null});n.success&&n.data&&(e(e=>({sessions:e.sessions.map(t=>t.id===e.currentSession?.id?n.data:t),currentSession:n.data,selectedModel:t,selectedProviderType:i,selectedProviderId:i===`plugin`&&a||null})),r.success(`Model updated for current chat`))}catch(e){let t=w(e,`Failed to update session model`);throw r.error(t),e}},personas:{},loadPersonas:async()=>{try{e({loading:!0,error:null});let t=await p.getPersonas();if(t.success&&t.data){let n=t.data;e({personas:ae(n),loading:!1}),P.debug(`โ
Personas loaded:`,n.length)}}catch(t){let n=w(t,`Failed to load personas`);e({error:n,loading:!1}),P.error(`โ Failed to load personas:`,n)}},getCurrentPersona:()=>{let e=n();if(!e.currentSession||!e.currentSession.model?.startsWith(`persona:`))return null;let t=e.currentSession.model.replace(`persona:`,``);return e.personas[t]||null},systemMessage:``,setSystemMessage:t=>{let r=n();if(e({systemMessage:t}),l.setSystemMessage(t).catch(e=>{P.warn(`Failed to save system message to backend:`,e)}),r.currentSession){let n=r.currentSession.messages.findIndex(e=>e.role===`system`);if(n!==-1){e(e=>{let r=e.sessions.map(r=>{if(r.id===e.currentSession?.id){let e=r.messages.map((e,r)=>r===n&&e.role===`system`?{...e,content:t,timestamp:Date.now()}:e);return{...r,messages:e,updatedAt:Date.now()}}return r});return{sessions:r,currentSession:e.currentSession?r.find(t=>t.id===e.currentSession.id)||e.currentSession:null}});let i=r.currentSession.messages[n];c.updateMessage(r.currentSession.id,i.id,{content:t}).catch(e=>{P.warn(`Failed to sync system message update to backend:`,e)}),P.debug(`โ
Updated system message in current session`)}}},loading:!1,error:null,setError:t=>e({error:t}),generatingTitleForSession:null,setGeneratingTitleForSession:t=>e({generatingTitleForSession:t}),...typeof window<`u`&&{testPluginApi:async()=>{try{P.debug(`๐งช Testing plugin API...`);let e=await u.getAllPlugins();return P.debug(`โ
Plugin API test result:`,e),e}catch(e){return P.error(`โ Plugin API test failed:`,e),{error:e}}}}})),ve=1e5,I=`[Earlier live output omitted]
|
|
3
3
|
|
|
4
|
-
`,L=e=>e&&typeof e==`object`&&!Array.isArray(e)?e:void 0,R=(e,...t)=>{for(let n of t){let t=e[n];if(typeof t==`string`&&t.trim())return t}},z=(e,...t)=>{for(let n of t){let t=e[n];if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t!=`string`||!t.trim())continue;let r=Number(t);if(Number.isFinite(r))return r}},B=(e,t)=>{let n=String(e||``).trim().toLowerCase().replace(/[\s-]+/g,`_`);return n===`queued`?`queued`:n===`preparing`||n===`starting`?`preparing`:n===`thinking`||n===`running`||n===`working`?`thinking`:n===`using_tool`||n===`tool`||n===`tool_call`?`using_tool`:n===`responding`||n===`streaming`||n===`assistant`?`responding`:n===`completed`||n===`complete`||n===`done`?`completed`:n===`needs_input`||n===`needsinput`||n===`blocked`?`needs_input`:n===`failed`||n===`error`?`failed`:n===`cancelled`||n===`canceled`||n===`stopped`?`cancelled`:t},ye=(e,t)=>{let n=R(t,`total`);if(n!==void 0)return V(n);let r=R(t,`text`,`content`,`delta`,`reasoning`)||``;return t.replace===!0||t.cumulative===!0?V(r):V(e+r)},V=e=>{let t=e.startsWith(I),n=t?e.slice(31):e,r=ve-31;return!t&&n.length<=ve?n:t&&n.length<=r?I+n:I+n.slice(-99969)},H=(e,t,n,r)=>{if(r===n)return e;if(r.startsWith(n)){let i=r.slice(n.length),a=e[e.length-1];return a&&a.kind===t?[...e.slice(0,-1),{kind:t,text:V(a.text+i)}]:[...e,{kind:t,text:V(i)}]}return[...e.filter(e=>e.kind!==t),{kind:t,text:r}]},be=(e,t)=>e.some(e=>e.kind===`tool`&&e.toolId===t)?e:[...e,{kind:`tool`,toolId:t}],U=(e,t)=>{let n=L(e.usage)||e,r={...t};for(let[e,t]of[[`inputTokens`,[`inputTokens`,`input_tokens`,`promptTokens`,`prompt_tokens`]],[`outputTokens`,[`outputTokens`,`output_tokens`,`completionTokens`,`completion_tokens`]],[`reasoningTokens`,[`reasoningTokens`,`reasoning_tokens`]],[`cachedTokens`,[`cachedTokens`,`cached_tokens`]],[`totalTokens`,[`totalTokens`,`total_tokens`]],[`tokensPerSecond`,[`tokensPerSecond`,`tokens_per_second`]],[`durationMs`,[`durationMs`,`duration_ms`]]]){let i=z(n,...t);i!==void 0&&(r[e]=i)}return r.totalTokens===void 0&&(r.inputTokens!==void 0||r.outputTokens!==void 0)&&(r.totalTokens=(r.inputTokens||0)+(r.outputTokens||0)),r},xe=(e,t)=>{let n=L(e.skill)||e,r=R(n,`name`,`title`,`skill`)||`Skill`;return{id:R(n,`id`,`skillId`,`skill_id`)||`${r}-${t}`,name:r,description:R(n,`description`,`summary`)}},W=(e,t,n)=>{let r=L(e.tool)||e,i=L(r.message),a=i?L(i.metadata):void 0,o=a?{...a,...r}:r,s=R(o,`name`,`toolName`,`tool_name`,`function`)||`tool`;return{id:R(o,`id`,`toolCallId`,`tool_call_id`,`callId`)||`${s}-${n}`,name:s,status:o.isError===!0||o.is_error===!0?`error`:`running`,arguments:o.arguments??o.input??o.args??o.parameters??void 0,metadata:L(o.metadata)||a,startedAt:z(o,`startedAt`,`started_at`,`timestamp`)||t}},Se=(e,t)=>Array.isArray(e)?e.flatMap((e,n)=>{let r=L(e);if(!r)return[];let i=W(r,t,n),a=R(r,`output`,`content`,`result`),o=B(r.status,`using_tool`);return[{...i,status:r.isError===!0||r.is_error===!0?`error`:o===`completed`?`completed`:i.status,output:a,finishedAt:z(r,`finishedAt`,`finished_at`),durationMs:z(r,`durationMs`,`duration_ms`)}]}):[],Ce=(e,t,n)=>({taskId:e,runId:t,connection:`idle`,phase:`queued`,lastEventId:0,reasoning:``,response:``,timeline:[],tools:[],skills:[],startedAt:n,terminal:!1}),we=(e,t)=>{let n=L(t.data.liveRun)||L(t.data.live_run)||L(t.data.run)||t.data,r=L(t.data.task)||L(t.data.detail),i=r?L(r.activeRun):void 0,a=R(n,`reasoning`,`thinking`),o=R(n,`response`,`assistant`,`content`),s=B(n.phase??n.status??i?.status??r?.status,e.phase),c=e.lastEventId>0&&s!==`completed`&&s!==`needs_input`&&s!==`failed`&&s!==`cancelled`&&n.phase===void 0?e.phase:s,l=Se(n.tools??n.toolActivities??n.tool_activities,t.timestamp),u=n.skills,d=Array.isArray(u)?u.flatMap((e,t)=>{let n=L(e);return n?[xe(n,t)]:[]}):e.skills,f=n.terminal===!0||c===`completed`||c===`needs_input`||c===`failed`||c===`cancelled`,p=a===void 0?e.reasoning:V(a),m=o===void 0?e.response:V(o),h=l.length>0?l:e.tools,g=H(e.timeline,`reasoning`,e.reasoning,p);for(let e of h)g=be(g,e.id);return g=H(g,`response`,e.response,m),{...e,phase:c,reasoning:p,response:m,timeline:g,tools:h,skills:d,usage:L(n.usage)?U(n,e.usage):e.usage,round:z(n,`round`,`roundIndex`,`round_index`)??e.round,roundLimit:z(n,`roundLimit`,`round_limit`)??e.roundLimit,startedAt:z(n,`startedAt`,`started_at`)??(i?z(i,`startedAt`,`started_at`):void 0)??e.startedAt,finishedAt:z(n,`finishedAt`,`finished_at`)??e.finishedAt,error:R(n,`error`,`message`)??e.error,terminal:f}},Te=(e,t)=>{let n=e.findIndex(e=>e.id===t.id);if(n===-1)return[...e,t];let r=[...e];return r[n]={...e[n],...t},r},Ee=(e,t)=>{let n=e?.taskId===t.taskId&&e.runId===t.runId?e:Ce(t.taskId,t.runId,t.timestamp);if(t.type!==`snapshot`&&t.id<=n.lastEventId)return n;let r={...n,connection:`connected`,connectionError:void 0,lastEventId:Math.max(n.lastEventId,t.id)};if(t.type===`snapshot`)r=we(r,t);else if(t.type===`run_state`){let e=B(t.data.phase??t.data.status??t.data.state,r.phase);r={...r,phase:e,round:z(t.data,`round`,`roundIndex`,`round_index`)??r.round,roundLimit:z(t.data,`roundLimit`,`round_limit`)??r.roundLimit,startedAt:z(t.data,`startedAt`,`started_at`)??r.startedAt,terminal:r.terminal||e===`completed`||e===`needs_input`||e===`failed`||e===`cancelled`}}else if(t.type===`reasoning_delta`){let e=ye(r.reasoning,t.data);r={...r,phase:`thinking`,reasoning:e,timeline:H(r.timeline,`reasoning`,r.reasoning,e)}}else if(t.type===`assistant_delta`){let e=ye(r.response,t.data);r={...r,phase:`responding`,response:e,timeline:H(r.timeline,`response`,r.response,e)}}else if(t.type===`tool_call`){let e=W(t.data,t.timestamp,r.tools.length);r={...r,phase:`using_tool`,tools:Te(r.tools,e),timeline:be(r.timeline,e.id)}}else if(t.type===`tool_result`){let e=W(t.data,t.timestamp,r.tools.length),n=r.tools.find(t=>t.id===e.id),i=t.data.isError===!0||t.data.is_error===!0||t.data.error===!0;r={...r,phase:`thinking`,tools:Te(r.tools,{...n,...e,status:i?`error`:`completed`,arguments:n?.arguments??e.arguments,startedAt:n?.startedAt??e.startedAt,output:R(t.data,`output`,`content`,`result`,`message`)||``,finishedAt:z(t.data,`finishedAt`,`finished_at`)||t.timestamp,durationMs:z(t.data,`durationMs`,`duration_ms`)})}}else if(t.type===`usage`)r={...r,usage:U(t.data,r.usage)};else if(t.type===`skill_loaded`){let e=xe(t.data,r.skills.length);r={...r,skills:r.skills.some(t=>t.id===e.id)?r.skills:[...r.skills,e]}}else if(t.type===`error`)r={...r,phase:`failed`,error:R(t.data,`message`,`error`)||`The Work run stopped unexpectedly.`,finishedAt:z(t.data,`finishedAt`,`finished_at`)||t.timestamp,terminal:t.data.terminal!==!1};else if(t.type===`done`){let e=B(t.data.status??t.data.state??t.data.phase,`completed`);r={...r,phase:e,error:R(t.data,`error`,`message`)??r.error,usage:L(t.data.usage)?U(t.data,r.usage):r.usage,finishedAt:z(t.data,`finishedAt`,`finished_at`)||t.timestamp,terminal:!0}}return r},G=(e,t)=>Error(t?.error||t?.message||e),K=(e,t)=>{if(typeof e==`object`&&e&&`response`in e){let t=e.response,n=t?.data?.error||t?.data?.message;if(n)return n}return e instanceof Error&&e.message?e.message:t},De=e=>[...e].sort((e,t)=>t.updatedAt-e.updatedAt||t.createdAt-e.createdAt||e.id.localeCompare(t.id)),Oe=({messages:e,messageCursor:t,hasMoreMessages:n,...r})=>r,ke=(e,t)=>{let n=new Map(e.map(e=>[e.id,e]));for(let e of t)n.set(e.id,e);return[...n.values()].sort((e,t)=>e.messageIndex-t.messageIndex||e.createdAt-t.createdAt||e.id.localeCompare(t.id))},Ae=(e,t)=>{if(!e||e.id!==t.id)return t;let n=e.updatedAt>t.updatedAt?{...t,...e}:{...e,...t};if(e.messages.length===0)return{...n,messages:t.messages,messageCursor:t.messageCursor,hasMoreMessages:t.hasMoreMessages};let r=Math.max(...e.messages.map(e=>e.messageIndex)),i=Math.min(...t.messages.map(e=>e.messageIndex)),a=t.messages.length>0&&r+1<i;return{...n,messages:ke(e.messages,t.messages),messageCursor:a?t.messageCursor:e.messageCursor,hasMoreMessages:a?t.hasMoreMessages:e.hasMoreMessages}},je=(e,t)=>{let n=e.find(e=>e.id===t.id);if(n&&n.updatedAt>t.updatedAt)return e;let r=Oe(t),i=e.findIndex(e=>e.id===t.id);if(i===-1)return[r,...e];let a=[...e];return a[i]=r,a},Me=(e,t)=>{let n=new Map(t.map(e=>[e.id,e])),r=new Set(e.map(e=>e.id)),i=De(t.filter(e=>!r.has(e.id))),a=e.flatMap(e=>{let t=n.get(e.id);return t?[e.updatedAt>t.updatedAt?e:t]:[]});return[...i,...a]},q=i((e,t)=>{let n=0,r=0,i=0,a=0,o=0,s=null,c=0,l=0,u=0,d=null,p=0,m=new Set,h=new Set,g=new Map,_=(e,t)=>`${e}\u0000${t}`,v=e=>e===n,y=e=>{if(!v(e))throw Error(`Work session changed.`)},b=()=>{l+=1,u+=1,d=null,h.clear()},x=()=>{let t=++c;return h.add(t),e({loadingFiles:!0}),t},S=(n,r,i)=>{h.delete(n),v(r)&&t().selectedTaskId===i&&e({loadingFiles:h.size>0})},ee=e=>t().selectedTaskId===e,C=t=>{let n=++p;return g.set(n,t),ee(t)&&e({actionLoading:!0,error:null}),n},w=(n,r)=>{if(g.delete(n),!v(r))return;let i=t().selectedTaskId;e({actionLoading:[...g.values()].some(e=>e===i)})},T=(t,n,r)=>{v(n)&&ee(t)&&e({error:r})},E=(t,r=n,i=!1)=>{v(r)&&(i&&(o+=1),e(e=>({tasks:je(e.tasks,t),selectedTask:e.selectedTaskId===t.id?Ae(e.selectedTask,t):e.selectedTask})))},D=async(e,t,r)=>{let i=n,a=C(r);try{let n=await e();if(y(i),!n.success||!n.data)throw G(t,n);return E(n.data,i,!0),n.data}catch(e){let n=K(e,t);throw T(r,i,n),Error(n)}finally{w(a,i)}};return{capabilities:null,tasks:[],selectedTaskId:null,selectedTask:null,files:[],selectedFile:null,liveRuns:{},loadingTasks:!1,loadingTask:!1,loadingOlderMessages:!1,loadingFiles:!1,actionLoading:!1,error:null,loadCapabilities:async()=>{let t=n;try{let n=await f.capabilities();if(y(t),!n.success||!n.data)throw G(`Could not inspect the Work runtime.`,n);e({capabilities:n.data})}catch(n){v(t)&&e({capabilities:{available:!1,runtime:`docker`,image:``,reason:K(n,`The Work runtime is unavailable.`)}})}},loadTasks:async(t=!1)=>{let c=n,l=++r,u=o;t||(i=l,m.add(l),e({loadingTasks:!0,error:null}));try{let t=await f.listTasks();if(y(c),!t.success||!t.data)throw G(`Could not load Work tasks.`,t);let n=De(t.data);if(l<=a||u!==o)return;a=l,e(e=>{let t=Me(e.tasks,n),r=e.selectedTaskId?t.find(t=>t.id===e.selectedTaskId):void 0,i=r&&e.selectedTask?{...e.selectedTask,...r,messages:e.selectedTask.messages,messageCursor:e.selectedTask.messageCursor,hasMoreMessages:e.selectedTask.hasMoreMessages}:e.selectedTask,a=s,o=a!==null&&l>a.requestId;return o&&(s=null),{tasks:t,selectedTask:i,...o&&e.error===a.message?{error:null}:{}}})}catch(n){let r=K(n,`Could not load Work tasks.`);!t&&v(c)&&l===i&&l>a&&u===o&&(s={requestId:l,message:r},e({error:r}))}finally{m.delete(l),!t&&v(c)&&e({loadingTasks:m.size>0})}},selectTask:t=>{b(),e(e=>({selectedTaskId:t,selectedTask:t&&e.selectedTask?.id===t?e.selectedTask:null,files:[],selectedFile:null,loadingFiles:!1,loadingOlderMessages:!1,actionLoading:[...g.values()].some(e=>e===t),error:null}))},loadTask:async(t,r=!1)=>{let i=n;r||e({loadingTask:!0,error:null});try{let e=await f.getTask(t);if(y(i),!e.success||!e.data)throw G(`Could not load this Work task.`,e);return E(e.data,i),e.data}catch(t){let n=K(t,`Could not load this Work task.`);throw!r&&v(i)&&e({error:n}),Error(n)}finally{!r&&v(i)&&e({loadingTask:!1})}},loadOlderMessages:async r=>{let i=n,a=t().selectedTask,o=a?.id===r?a.messageCursor:void 0;if(!a||a.id!==r||!a.hasMoreMessages||o===void 0)return[];e({loadingOlderMessages:!0,error:null});try{let t=await f.getMessages(r,o);if(y(i),!t.success||!t.data)throw G(`Could not load older Work messages.`,t);let n=t.data;return e(e=>{if(e.selectedTask?.id!==r)return{};let t=e.selectedTask.messageCursor===o;return{selectedTask:{...e.selectedTask,messages:ke(e.selectedTask.messages,n.messages),messageCursor:t?n.cursor:e.selectedTask.messageCursor,hasMoreMessages:t?n.hasMore:e.selectedTask.hasMoreMessages}}}),n.messages}catch(n){let a=K(n,`Could not load older Work messages.`);throw v(i)&&t().selectedTaskId===r&&e({error:a}),Error(a)}finally{v(i)&&t().selectedTaskId===r&&e({loadingOlderMessages:!1})}},createTask:e=>D(()=>f.createTask(e),`Could not create the Work task.`,null),updateTask:(e,t)=>D(()=>f.updateTask(e,t),`Could not update the Work task.`,e),deleteTask:async r=>{let i=n,a=C(r);try{let n=await f.deleteTask(r);if(y(i),!n.success)throw G(`Could not delete the Work task.`,n);t().selectedTaskId===r&&b(),o+=1,e(e=>({tasks:e.tasks.filter(e=>e.id!==r),selectedTaskId:e.selectedTaskId===r?null:e.selectedTaskId,selectedTask:e.selectedTaskId===r?null:e.selectedTask,files:e.selectedTaskId===r?[]:e.files,selectedFile:e.selectedTaskId===r?null:e.selectedFile,liveRuns:Object.fromEntries(Object.entries(e.liveRuns).filter(([e])=>e!==r))}))}catch(e){let t=K(e,`Could not delete the Work task.`);throw T(r,i,t),Error(t)}finally{w(a,i)}},startRun:async(e,t)=>{let r=n,i=C(e);try{let n=await f.startRun(e,t);if(y(r),!n.success||!n.data)throw G(`Could not start the Work run.`,n);return E(n.data,r,!0),n.data}catch(t){let n=K(t,`Could not start the Work run.`);throw T(e,r,n),Error(n)}finally{w(i,r)}},cancelRun:async e=>{let r=n,i=C(e);try{let n=await f.cancelRun(e);if(y(r),!n.success)throw G(`Could not cancel the Work run.`,n);return n.data?(E(n.data,r,!0),n.data):(o+=1,await t().loadTask(e,!0))}catch(t){let n=K(t,`Could not cancel the Work run.`);throw T(e,r,n),Error(n)}finally{w(i,r)}},beginLiveRun:(t,n,r)=>{e(e=>{let i=e.liveRuns[t];return{liveRuns:{...e.liveRuns,[t]:i?.runId===n?{...i,startedAt:i.startedAt??r}:Ce(t,n,r)}}})},applyRunEvent:e=>{t().applyRunEvents([e])},applyRunEvents:t=>{t.length!==0&&e(e=>{let n={...e.liveRuns},r=e.tasks,i=e.selectedTask;for(let a of t){n[a.taskId]=Ee(n[a.taskId],a);let t=a.type===`snapshot`?a.data.task??a.data.detail:void 0,o=t&&typeof t==`object`&&!Array.isArray(t)&&t.id===a.taskId&&Array.isArray(t.messages)?t:void 0;o&&(r=je(r,o),e.selectedTaskId===o.id&&(i=Ae(i,o)))}return{liveRuns:n,tasks:r,selectedTask:i}})},setLiveRunConnection:(t,n,r,i)=>{e(e=>{let a=e.liveRuns[t];return!a||a.runId!==n?{}:{liveRuns:{...e.liveRuns,[t]:{...a,connection:r,connectionError:i}}}})},clearLiveRun:(t,n)=>{e(e=>{if(n&&e.liveRuns[t]?.runId!==n)return{};let r={...e.liveRuns};return delete r[t],{liveRuns:r}})},loadFiles:async(r,i=``)=>{let a=n,o=++l,s=x();try{let n=await f.listFiles(r,i);if(y(a),!n.success||!n.data)throw G(`Could not load workspace files.`,n);return o===l&&t().selectedTaskId===r&&e({files:n.data}),n.data}catch(n){let i=K(n,`Could not load workspace files.`);throw o===l&&v(a)&&t().selectedTaskId===r&&e({error:i}),Error(i)}finally{S(s,a,r)}},loadFile:async(r,i)=>{let a=n,o=++u,s=_(r,i);d=s;let c=x();try{let n=await f.getFile(r,i);if(y(a),!n.success||!n.data)throw G(`Could not open this workspace file.`,n);if(o!==u||d!==s||!v(a)||t().selectedTaskId!==r)throw Error(`Work file request was superseded.`);return e({selectedFile:n.data}),n.data}catch(n){let i=K(n,`Could not open this file.`);throw o===u&&v(a)&&t().selectedTaskId===r&&e({error:i}),Error(i)}finally{S(c,a,r)}},clearSelectedFile:()=>{u+=1,d=null,e({selectedFile:null})},saveFile:async(r,i,a,o)=>{let s=n,c=C(r),l=_(r,i);d===l&&(u+=1,d=null);try{let n=await f.saveFile(r,i,a,o);if(y(s),!n.success||!n.data)throw G(`Could not save this workspace file.`,n);return t().selectedTaskId===r&&t().selectedFile?.path===i&&(d===l&&(u+=1,d=null),e({selectedFile:n.data})),n.data}catch(e){let t=K(e,`Could not save this file.`);throw T(r,s,t),Error(t)}finally{w(c,s)}},startPreview:(e,t)=>D(()=>f.startPreview(e,t),`Could not start the workspace preview.`,e),stopPreview:e=>D(()=>f.stopPreview(e),`Could not stop the workspace preview.`,e),clearError:()=>e({error:null}),clearAllState:()=>{n+=1,i=++r,a=i,o+=1,s=null,m.clear(),g.clear(),b(),e({capabilities:null,tasks:[],selectedTaskId:null,selectedTask:null,files:[],selectedFile:null,liveRuns:{},loadingTasks:!1,loadingTask:!1,loadingOlderMessages:!1,loadingFiles:!1,actionLoading:!1,error:null})}}}),Ne=async(e,t,n)=>{let r=await t(e);return r.success&&await n(),r},J=s(`store:plugin-store`),Pe=i((e,t)=>({plugins:[],pluginStatus:[],pluginVariables:{},isLoading:!1,isUploading:!1,error:null,loadPlugins:async()=>{e({isLoading:!0,error:null});try{let t=await l.getAllPlugins();t.success&&t.data?e({plugins:t.data}):e({error:t.error||`Failed to load plugins`})}catch(t){e({error:w(t,`Failed to load plugins`)})}finally{e({isLoading:!1})}},uploadPlugin:async n=>{e({isUploading:!0,error:null});try{let r=await l.uploadPlugin(n);r.success&&r.data?await t().loadPlugins():e({error:r.error||`Failed to upload plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to upload plugin`})}finally{e({isUploading:!1})}},installPlugin:async n=>{e({isLoading:!0,error:null});try{let r=await l.installPlugin(n);r.success&&r.data?await t().loadPlugins():e({error:r.error||`Failed to install plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to install plugin`})}finally{e({isLoading:!1})}},updatePlugin:async(n,r)=>{e({isLoading:!0,error:null});try{let i=await l.updatePlugin(n,r);i.success&&i.data?await t().loadPlugins():e({error:i.error||`Failed to update plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to update plugin`})}finally{e({isLoading:!1})}},deletePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await l.deletePlugin(n);r.success?await t().loadPlugins():e({error:r.error||`Failed to delete plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to delete plugin`})}finally{e({isLoading:!1})}},activatePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await Ne(n,l.activatePlugin,()=>t().loadPlugins());r.success||e({error:r.error||`Failed to activate plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to activate plugin`})}finally{e({isLoading:!1})}},deactivatePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await l.deactivatePlugin(n);r.success?await t().loadPlugins():e({error:r.error||`Failed to deactivate plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to deactivate plugin`})}finally{e({isLoading:!1})}},loadPluginStatus:async()=>{try{let t=await l.getPluginStatus();t.success&&t.data&&e({pluginStatus:t.data})}catch(e){J.error(`Failed to load plugin status:`,e)}},exportPlugin:async t=>{e({isLoading:!0,error:null});try{let e=await l.exportPlugin(t),n=window.URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=`${t}.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r),window.URL.revokeObjectURL(n)}catch(t){e({error:t instanceof Error?t.message:`Failed to export plugin`})}finally{e({isLoading:!1})}},fetchPluginVariables:async t=>{try{let n=await l.getVariables(t);n.success&&n.data&&e(e=>({pluginVariables:{...e.pluginVariables,[t]:n.data}}))}catch(e){J.error(`Failed to fetch plugin variables:`,e)}},updatePluginVariables:async(e,n,r=[])=>{try{return(await l.setVariables(e,n,r)).success?(await t().fetchPluginVariables(e),!0):!1}catch(e){return J.error(`Failed to update plugin variables:`,e),!1}},resetPluginVariables:async t=>{try{let n=await l.resetVariables(t);return n.success&&n.data===!0?(e(e=>{let n={...e.pluginVariables};return delete n[t],{pluginVariables:n}}),!0):!1}catch(e){return J.error(`Failed to reset plugin variables:`,e),!1}},clearError:()=>e({error:null}),setError:t=>e({error:t})})),Y=`libre-webui:work-draft:`,X=(e,t)=>`${Y}${e}:${t}`,Fe=(e,t)=>{try{let n=window.sessionStorage.getItem(X(e,t));if(!n)return null;let r=JSON.parse(n);return typeof r.content==`string`?{content:r.content,baseUpdatedAt:typeof r.baseUpdatedAt==`number`?r.baseUpdatedAt:void 0}:null}catch{return null}},Ie=(e,t,n)=>{try{return window.sessionStorage.setItem(X(e,t),JSON.stringify(n)),!0}catch{return!1}},Le=(e,t)=>{try{window.sessionStorage.removeItem(X(e,t))}catch{}},Re=e=>{let t=`${Y}${e}:`;try{for(let e=window.sessionStorage.length-1;e>=0;e--){let n=window.sessionStorage.key(e);n?.startsWith(t)&&window.sessionStorage.removeItem(n)}}catch{}},ze=()=>{try{for(let e=window.sessionStorage.length-1;e>=0;e--){let t=window.sessionStorage.key(e);t?.startsWith(Y)&&window.sessionStorage.removeItem(t)}}catch{}},Z=s(`websocket`),Q=new class{constructor(){n(this,`ws`,null),n(this,`url`,void 0),n(this,`reconnectAttempts`,0),n(this,`maxReconnectAttempts`,5),n(this,`reconnectDelay`,1e3),n(this,`messageHandlers`,new Map);let e;e=window.location.protocol===`file:`?`ws://localhost:3001`:`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}`,this.url=`${e}/ws`,Z.debug(`WebSocket URL constructed:`,this.url)}connect(){return o()?(Z.debug(`Demo mode active: skipping WebSocket connection.`),Promise.resolve()):(Z.debug(`WebSocket: Attempting to connect to:`,this.url),new Promise((e,t)=>{try{let n=localStorage.getItem(`auth-token`),r=n?`${this.url}?token=${encodeURIComponent(n)}`:this.url;Z.debug(`WebSocket: Connecting to:`,r.replace(/token=[^&]+/,`token=***`)),this.ws=new WebSocket(r),this.ws.onopen=()=>{Z.debug(`WebSocket connected successfully`),this.reconnectAttempts=0,e()},this.ws.onmessage=e=>{try{let t=JSON.parse(e.data),n=this.messageHandlers.get(t.type);n?n(t.data):t.type===`connected`?Z.debug(`WebSocket: Server confirmed connection`):Z.warn(`WebSocket: No handler for message type:`,t.type)}catch(e){Z.error(`Failed to parse WebSocket message:`,e)}},this.ws.onclose=()=>{Z.debug(`WebSocket disconnected`),this.ws=null,this.attemptReconnect()},this.ws.onerror=e=>{Z.error(`WebSocket error:`,e),t(e)}}catch(e){t(e)}}))}disconnect(){this.ws&&(this.ws.close(),this.ws=null)}send(e){this.ws&&this.ws.readyState===WebSocket.OPEN?(Z.debug(`WebSocket: Sending message:`,e),this.ws.send(JSON.stringify(e))):Z.warn(`WebSocket is not connected. ReadyState:`,this.ws?.readyState)}onMessage(e,t){this.messageHandlers.delete(e),this.messageHandlers.set(e,t)}offMessage(e){this.messageHandlers.delete(e)}attemptReconnect(){if(o()){Z.debug(`Demo mode active: skipping WebSocket reconnection.`);return}this.reconnectAttempts<this.maxReconnectAttempts?(this.reconnectAttempts++,Z.debug(`Attempting to reconnect... (${this.reconnectAttempts}/${this.maxReconnectAttempts})`),setTimeout(()=>{this.connect().catch(()=>{})},this.reconnectDelay*this.reconnectAttempts)):Z.error(`Max reconnection attempts reached`)}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}},Be=e({useAuthStore:()=>Ve}),$=s(`auth-store`),Ve=i()(a((e,t)=>({user:null,token:null,systemInfo:null,isAuthenticated:!1,isLoading:!1,login:(n,r,i)=>{let a=t().user?.id===n.id;localStorage.setItem(`auth-token`,r);let s=F.getState();s.clearAllState&&s.clearAllState(),q.getState().clearAllState(),a||(ze(),h.getState().clearUserState()),e({user:n,token:r,systemInfo:i,isAuthenticated:!0,isLoading:!1}),setTimeout(async()=>{try{let e=Pe.getState();$.debug(`Reinitializing app after login...`),$.debug(`Reconnecting WebSocket with auth token...`),Q.disconnect(),await Q.connect();try{!(await u.checkHealth()).success&&!o()&&$.warn(`Ollama service not available after login`)}catch(e){$.warn(`Ollama health check failed after login; continuing provider initialization:`,e)}let t=h.getState();await Promise.all([s.loadModels(),s.loadSessions(),s.loadPreferences(),t.loadPreferences(),e.loadPlugins()]),$.debug(`Reinitialized app after login`)}catch(e){$.error(`Failed to reinitialize app after login:`,e)}},100)},logout:()=>{localStorage.removeItem(`auth-token`),$.debug(`Disconnecting WebSocket on logout...`),Q.disconnect();let t=F.getState();t.clearAllState&&t.clearAllState(),q.getState().clearAllState(),ze(),h.getState().clearUserState(),e({user:null,token:null,isAuthenticated:!1,isLoading:!1})},setUser:t=>{e({user:t})},setSystemInfo:t=>{e({systemInfo:t})},setLoading:t=>{e({isLoading:t})},isAdmin:()=>{let{user:e}=t();return e?.role===`admin`},requiresAuth:()=>{let{systemInfo:e}=t();return e?.requiresAuth??!1}}),{name:`auth-store`,partialize:e=>({user:e.user,token:e.token,systemInfo:e.systemInfo,isAuthenticated:e.isAuthenticated})}));export{b as S,ge as _,Re as a,y as b,Pe as c,M as d,me as f,he as g,N as h,Le as i,q as l,pe as m,Ve as n,Fe as o,j as p,Q as r,Ie as s,Be as t,F as u,_e as v,C as x,w as y};
|
|
4
|
+
`,L=e=>e&&typeof e==`object`&&!Array.isArray(e)?e:void 0,R=(e,...t)=>{for(let n of t){let t=e[n];if(typeof t==`string`&&t.trim())return t}},z=(e,...t)=>{for(let n of t){let t=e[n];if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t!=`string`||!t.trim())continue;let r=Number(t);if(Number.isFinite(r))return r}},B=(e,t)=>{let n=String(e||``).trim().toLowerCase().replace(/[\s-]+/g,`_`);return n===`queued`?`queued`:n===`preparing`||n===`starting`?`preparing`:n===`thinking`||n===`running`||n===`working`?`thinking`:n===`using_tool`||n===`tool`||n===`tool_call`?`using_tool`:n===`responding`||n===`streaming`||n===`assistant`?`responding`:n===`completed`||n===`complete`||n===`done`?`completed`:n===`needs_input`||n===`needsinput`||n===`blocked`?`needs_input`:n===`failed`||n===`error`?`failed`:n===`cancelled`||n===`canceled`||n===`stopped`?`cancelled`:t},ye=(e,t)=>{let n=R(t,`total`);if(n!==void 0)return V(n);let r=R(t,`text`,`content`,`delta`,`reasoning`)||``;return t.replace===!0||t.cumulative===!0?V(r):V(e+r)},V=e=>{let t=e.startsWith(I),n=t?e.slice(31):e,r=ve-31;return!t&&n.length<=ve?n:t&&n.length<=r?I+n:I+n.slice(-99969)},H=(e,t,n,r)=>{if(r===n)return e;if(r.startsWith(n)){let i=r.slice(n.length),a=e[e.length-1];return a&&a.kind===t?[...e.slice(0,-1),{kind:t,text:V(a.text+i)}]:[...e,{kind:t,text:V(i)}]}return[...e.filter(e=>e.kind!==t),{kind:t,text:r}]},be=(e,t)=>e.some(e=>e.kind===`tool`&&e.toolId===t)?e:[...e,{kind:`tool`,toolId:t}],U=(e,t)=>{let n=L(e.usage)||e,r={...t};for(let[e,t]of[[`inputTokens`,[`inputTokens`,`input_tokens`,`promptTokens`,`prompt_tokens`]],[`outputTokens`,[`outputTokens`,`output_tokens`,`completionTokens`,`completion_tokens`]],[`reasoningTokens`,[`reasoningTokens`,`reasoning_tokens`]],[`cachedTokens`,[`cachedTokens`,`cached_tokens`]],[`totalTokens`,[`totalTokens`,`total_tokens`]],[`tokensPerSecond`,[`tokensPerSecond`,`tokens_per_second`]],[`durationMs`,[`durationMs`,`duration_ms`]]]){let i=z(n,...t);i!==void 0&&(r[e]=i)}return r.totalTokens===void 0&&(r.inputTokens!==void 0||r.outputTokens!==void 0)&&(r.totalTokens=(r.inputTokens||0)+(r.outputTokens||0)),r},xe=(e,t)=>{let n=L(e.skill)||e,r=R(n,`name`,`title`,`skill`)||`Skill`;return{id:R(n,`id`,`skillId`,`skill_id`)||`${r}-${t}`,name:r,description:R(n,`description`,`summary`)}},W=(e,t,n)=>{let r=L(e.tool)||e,i=L(r.message),a=i?L(i.metadata):void 0,o=a?{...a,...r}:r,s=R(o,`name`,`toolName`,`tool_name`,`function`)||`tool`;return{id:R(o,`id`,`toolCallId`,`tool_call_id`,`callId`)||`${s}-${n}`,name:s,status:o.isError===!0||o.is_error===!0?`error`:`running`,arguments:o.arguments??o.input??o.args??o.parameters??void 0,metadata:L(o.metadata)||a,startedAt:z(o,`startedAt`,`started_at`,`timestamp`)||t}},Se=(e,t)=>Array.isArray(e)?e.flatMap((e,n)=>{let r=L(e);if(!r)return[];let i=W(r,t,n),a=R(r,`output`,`content`,`result`),o=B(r.status,`using_tool`);return[{...i,status:r.isError===!0||r.is_error===!0?`error`:o===`completed`?`completed`:i.status,output:a,finishedAt:z(r,`finishedAt`,`finished_at`),durationMs:z(r,`durationMs`,`duration_ms`)}]}):[],Ce=(e,t,n)=>({taskId:e,runId:t,connection:`idle`,phase:`queued`,lastEventId:0,reasoning:``,response:``,timeline:[],tools:[],skills:[],startedAt:n,terminal:!1}),we=(e,t)=>{let n=L(t.data.liveRun)||L(t.data.live_run)||L(t.data.run)||t.data,r=L(t.data.task)||L(t.data.detail),i=r?L(r.activeRun):void 0,a=R(n,`reasoning`,`thinking`),o=R(n,`response`,`assistant`,`content`),s=B(n.phase??n.status??i?.status??r?.status,e.phase),c=e.lastEventId>0&&s!==`completed`&&s!==`needs_input`&&s!==`failed`&&s!==`cancelled`&&n.phase===void 0?e.phase:s,l=Se(n.tools??n.toolActivities??n.tool_activities,t.timestamp),u=n.skills,d=Array.isArray(u)?u.flatMap((e,t)=>{let n=L(e);return n?[xe(n,t)]:[]}):e.skills,f=n.terminal===!0||c===`completed`||c===`needs_input`||c===`failed`||c===`cancelled`,p=a===void 0?e.reasoning:V(a),m=o===void 0?e.response:V(o),h=l.length>0?l:e.tools,g=H(e.timeline,`reasoning`,e.reasoning,p);for(let e of h)g=be(g,e.id);return g=H(g,`response`,e.response,m),{...e,phase:c,reasoning:p,response:m,timeline:g,tools:h,skills:d,usage:L(n.usage)?U(n,e.usage):e.usage,round:z(n,`round`,`roundIndex`,`round_index`)??e.round,roundLimit:z(n,`roundLimit`,`round_limit`)??e.roundLimit,startedAt:z(n,`startedAt`,`started_at`)??(i?z(i,`startedAt`,`started_at`):void 0)??e.startedAt,finishedAt:z(n,`finishedAt`,`finished_at`)??e.finishedAt,error:R(n,`error`,`message`)??e.error,terminal:f}},Te=(e,t)=>{let n=e.findIndex(e=>e.id===t.id);if(n===-1)return[...e,t];let r=[...e];return r[n]={...e[n],...t},r},Ee=(e,t)=>{let n=e?.taskId===t.taskId&&e.runId===t.runId?e:Ce(t.taskId,t.runId,t.timestamp);if(t.type!==`snapshot`&&t.id<=n.lastEventId)return n;let r={...n,connection:`connected`,connectionError:void 0,lastEventId:Math.max(n.lastEventId,t.id)};if(t.type===`snapshot`)r=we(r,t);else if(t.type===`run_state`){let e=B(t.data.phase??t.data.status??t.data.state,r.phase);r={...r,phase:e,round:z(t.data,`round`,`roundIndex`,`round_index`)??r.round,roundLimit:z(t.data,`roundLimit`,`round_limit`)??r.roundLimit,startedAt:z(t.data,`startedAt`,`started_at`)??r.startedAt,terminal:r.terminal||e===`completed`||e===`needs_input`||e===`failed`||e===`cancelled`}}else if(t.type===`reasoning_delta`){let e=ye(r.reasoning,t.data);r={...r,phase:`thinking`,reasoning:e,timeline:H(r.timeline,`reasoning`,r.reasoning,e)}}else if(t.type===`assistant_delta`){let e=ye(r.response,t.data);r={...r,phase:`responding`,response:e,timeline:H(r.timeline,`response`,r.response,e)}}else if(t.type===`tool_call`){let e=W(t.data,t.timestamp,r.tools.length);r={...r,phase:`using_tool`,tools:Te(r.tools,e),timeline:be(r.timeline,e.id)}}else if(t.type===`tool_result`){let e=W(t.data,t.timestamp,r.tools.length),n=r.tools.find(t=>t.id===e.id),i=t.data.isError===!0||t.data.is_error===!0||t.data.error===!0;r={...r,phase:`thinking`,tools:Te(r.tools,{...n,...e,status:i?`error`:`completed`,arguments:n?.arguments??e.arguments,startedAt:n?.startedAt??e.startedAt,output:R(t.data,`output`,`content`,`result`,`message`)||``,finishedAt:z(t.data,`finishedAt`,`finished_at`)||t.timestamp,durationMs:z(t.data,`durationMs`,`duration_ms`)})}}else if(t.type===`usage`)r={...r,usage:U(t.data,r.usage)};else if(t.type===`skill_loaded`){let e=xe(t.data,r.skills.length);r={...r,skills:r.skills.some(t=>t.id===e.id)?r.skills:[...r.skills,e]}}else if(t.type===`error`)r={...r,phase:`failed`,error:R(t.data,`message`,`error`)||`The Work run stopped unexpectedly.`,finishedAt:z(t.data,`finishedAt`,`finished_at`)||t.timestamp,terminal:t.data.terminal!==!1};else if(t.type===`done`){let e=B(t.data.status??t.data.state??t.data.phase,`completed`);r={...r,phase:e,error:R(t.data,`error`,`message`)??r.error,usage:L(t.data.usage)?U(t.data,r.usage):r.usage,finishedAt:z(t.data,`finishedAt`,`finished_at`)||t.timestamp,terminal:!0}}return r},G=(e,t)=>Error(t?.error||t?.message||e),K=(e,t)=>{if(typeof e==`object`&&e&&`response`in e){let t=e.response,n=t?.data?.error||t?.data?.message;if(n)return n}return e instanceof Error&&e.message?e.message:t},De=e=>[...e].sort((e,t)=>t.updatedAt-e.updatedAt||t.createdAt-e.createdAt||e.id.localeCompare(t.id)),Oe=({messages:e,messageCursor:t,hasMoreMessages:n,...r})=>r,ke=(e,t)=>{let n=new Map(e.map(e=>[e.id,e]));for(let e of t)n.set(e.id,e);return[...n.values()].sort((e,t)=>e.messageIndex-t.messageIndex||e.createdAt-t.createdAt||e.id.localeCompare(t.id))},Ae=(e,t)=>{if(!e||e.id!==t.id)return t;let n=e.updatedAt>t.updatedAt?{...t,...e}:{...e,...t};if(e.messages.length===0)return{...n,messages:t.messages,messageCursor:t.messageCursor,hasMoreMessages:t.hasMoreMessages};let r=Math.max(...e.messages.map(e=>e.messageIndex)),i=Math.min(...t.messages.map(e=>e.messageIndex)),a=t.messages.length>0&&r+1<i;return{...n,messages:ke(e.messages,t.messages),messageCursor:a?t.messageCursor:e.messageCursor,hasMoreMessages:a?t.hasMoreMessages:e.hasMoreMessages}},je=(e,t)=>{let n=e.find(e=>e.id===t.id);if(n&&n.updatedAt>t.updatedAt)return e;let r=Oe(t),i=e.findIndex(e=>e.id===t.id);if(i===-1)return[r,...e];let a=[...e];return a[i]=r,a},Me=(e,t)=>{let n=new Map(t.map(e=>[e.id,e])),r=new Set(e.map(e=>e.id)),i=De(t.filter(e=>!r.has(e.id))),a=e.flatMap(e=>{let t=n.get(e.id);return t?[e.updatedAt>t.updatedAt?e:t]:[]});return[...i,...a]},q=i((e,t)=>{let n=0,r=0,i=0,a=0,o=0,s=null,c=0,l=0,u=0,f=null,p=0,m=new Set,h=new Set,g=new Map,_=(e,t)=>`${e}\u0000${t}`,v=e=>e===n,y=e=>{if(!v(e))throw Error(`Work session changed.`)},b=()=>{l+=1,u+=1,f=null,h.clear()},x=()=>{let t=++c;return h.add(t),e({loadingFiles:!0}),t},S=(n,r,i)=>{h.delete(n),v(r)&&t().selectedTaskId===i&&e({loadingFiles:h.size>0})},ee=e=>t().selectedTaskId===e,C=t=>{let n=++p;return g.set(n,t),ee(t)&&e({actionLoading:!0,error:null}),n},w=(n,r)=>{if(g.delete(n),!v(r))return;let i=t().selectedTaskId;e({actionLoading:[...g.values()].some(e=>e===i)})},T=(t,n,r)=>{v(n)&&ee(t)&&e({error:r})},E=(t,r=n,i=!1)=>{v(r)&&(i&&(o+=1),e(e=>({tasks:je(e.tasks,t),selectedTask:e.selectedTaskId===t.id?Ae(e.selectedTask,t):e.selectedTask})))},D=async(e,t,r)=>{let i=n,a=C(r);try{let n=await e();if(y(i),!n.success||!n.data)throw G(t,n);return E(n.data,i,!0),n.data}catch(e){let n=K(e,t);throw T(r,i,n),Error(n)}finally{w(a,i)}};return{capabilities:null,tasks:[],selectedTaskId:null,selectedTask:null,files:[],selectedFile:null,liveRuns:{},loadingTasks:!1,loadingTask:!1,loadingOlderMessages:!1,loadingFiles:!1,actionLoading:!1,error:null,loadCapabilities:async()=>{let t=n;try{let n=await d.capabilities();if(y(t),!n.success||!n.data)throw G(`Could not inspect the Work runtime.`,n);e({capabilities:n.data})}catch(n){v(t)&&e({capabilities:{available:!1,runtime:`docker`,image:``,reason:K(n,`The Work runtime is unavailable.`)}})}},loadTasks:async(t=!1)=>{let c=n,l=++r,u=o;t||(i=l,m.add(l),e({loadingTasks:!0,error:null}));try{let t=await d.listTasks();if(y(c),!t.success||!t.data)throw G(`Could not load Work tasks.`,t);let n=De(t.data);if(l<=a||u!==o)return;a=l,e(e=>{let t=Me(e.tasks,n),r=e.selectedTaskId?t.find(t=>t.id===e.selectedTaskId):void 0,i=r&&e.selectedTask?{...e.selectedTask,...r,messages:e.selectedTask.messages,messageCursor:e.selectedTask.messageCursor,hasMoreMessages:e.selectedTask.hasMoreMessages}:e.selectedTask,a=s,o=a!==null&&l>a.requestId;return o&&(s=null),{tasks:t,selectedTask:i,...o&&e.error===a.message?{error:null}:{}}})}catch(n){let r=K(n,`Could not load Work tasks.`);!t&&v(c)&&l===i&&l>a&&u===o&&(s={requestId:l,message:r},e({error:r}))}finally{m.delete(l),!t&&v(c)&&e({loadingTasks:m.size>0})}},selectTask:t=>{b(),e(e=>({selectedTaskId:t,selectedTask:t&&e.selectedTask?.id===t?e.selectedTask:null,files:[],selectedFile:null,loadingFiles:!1,loadingOlderMessages:!1,actionLoading:[...g.values()].some(e=>e===t),error:null}))},loadTask:async(t,r=!1)=>{let i=n;r||e({loadingTask:!0,error:null});try{let e=await d.getTask(t);if(y(i),!e.success||!e.data)throw G(`Could not load this Work task.`,e);return E(e.data,i),e.data}catch(t){let n=K(t,`Could not load this Work task.`);throw!r&&v(i)&&e({error:n}),Error(n)}finally{!r&&v(i)&&e({loadingTask:!1})}},loadOlderMessages:async r=>{let i=n,a=t().selectedTask,o=a?.id===r?a.messageCursor:void 0;if(!a||a.id!==r||!a.hasMoreMessages||o===void 0)return[];e({loadingOlderMessages:!0,error:null});try{let t=await d.getMessages(r,o);if(y(i),!t.success||!t.data)throw G(`Could not load older Work messages.`,t);let n=t.data;return e(e=>{if(e.selectedTask?.id!==r)return{};let t=e.selectedTask.messageCursor===o;return{selectedTask:{...e.selectedTask,messages:ke(e.selectedTask.messages,n.messages),messageCursor:t?n.cursor:e.selectedTask.messageCursor,hasMoreMessages:t?n.hasMore:e.selectedTask.hasMoreMessages}}}),n.messages}catch(n){let a=K(n,`Could not load older Work messages.`);throw v(i)&&t().selectedTaskId===r&&e({error:a}),Error(a)}finally{v(i)&&t().selectedTaskId===r&&e({loadingOlderMessages:!1})}},createTask:e=>D(()=>d.createTask(e),`Could not create the Work task.`,null),updateTask:(e,t)=>D(()=>d.updateTask(e,t),`Could not update the Work task.`,e),deleteTask:async r=>{let i=n,a=C(r);try{let n=await d.deleteTask(r);if(y(i),!n.success)throw G(`Could not delete the Work task.`,n);t().selectedTaskId===r&&b(),o+=1,e(e=>({tasks:e.tasks.filter(e=>e.id!==r),selectedTaskId:e.selectedTaskId===r?null:e.selectedTaskId,selectedTask:e.selectedTaskId===r?null:e.selectedTask,files:e.selectedTaskId===r?[]:e.files,selectedFile:e.selectedTaskId===r?null:e.selectedFile,liveRuns:Object.fromEntries(Object.entries(e.liveRuns).filter(([e])=>e!==r))}))}catch(e){let t=K(e,`Could not delete the Work task.`);throw T(r,i,t),Error(t)}finally{w(a,i)}},startRun:async(e,t)=>{let r=n,i=C(e);try{let n=await d.startRun(e,t);if(y(r),!n.success||!n.data)throw G(`Could not start the Work run.`,n);return E(n.data,r,!0),n.data}catch(t){let n=K(t,`Could not start the Work run.`);throw T(e,r,n),Error(n)}finally{w(i,r)}},cancelRun:async e=>{let r=n,i=C(e);try{let n=await d.cancelRun(e);if(y(r),!n.success)throw G(`Could not cancel the Work run.`,n);return n.data?(E(n.data,r,!0),n.data):(o+=1,await t().loadTask(e,!0))}catch(t){let n=K(t,`Could not cancel the Work run.`);throw T(e,r,n),Error(n)}finally{w(i,r)}},beginLiveRun:(t,n,r)=>{e(e=>{let i=e.liveRuns[t];return{liveRuns:{...e.liveRuns,[t]:i?.runId===n?{...i,startedAt:i.startedAt??r}:Ce(t,n,r)}}})},applyRunEvent:e=>{t().applyRunEvents([e])},applyRunEvents:t=>{t.length!==0&&e(e=>{let n={...e.liveRuns},r=e.tasks,i=e.selectedTask;for(let a of t){n[a.taskId]=Ee(n[a.taskId],a);let t=a.type===`snapshot`?a.data.task??a.data.detail:void 0,o=t&&typeof t==`object`&&!Array.isArray(t)&&t.id===a.taskId&&Array.isArray(t.messages)?t:void 0;o&&(r=je(r,o),e.selectedTaskId===o.id&&(i=Ae(i,o)))}return{liveRuns:n,tasks:r,selectedTask:i}})},setLiveRunConnection:(t,n,r,i)=>{e(e=>{let a=e.liveRuns[t];return!a||a.runId!==n?{}:{liveRuns:{...e.liveRuns,[t]:{...a,connection:r,connectionError:i}}}})},clearLiveRun:(t,n)=>{e(e=>{if(n&&e.liveRuns[t]?.runId!==n)return{};let r={...e.liveRuns};return delete r[t],{liveRuns:r}})},loadFiles:async(r,i=``)=>{let a=n,o=++l,s=x();try{let n=await d.listFiles(r,i);if(y(a),!n.success||!n.data)throw G(`Could not load workspace files.`,n);return o===l&&t().selectedTaskId===r&&e({files:n.data}),n.data}catch(n){let i=K(n,`Could not load workspace files.`);throw o===l&&v(a)&&t().selectedTaskId===r&&e({error:i}),Error(i)}finally{S(s,a,r)}},loadFile:async(r,i)=>{let a=n,o=++u,s=_(r,i);f=s;let c=x();try{let n=await d.getFile(r,i);if(y(a),!n.success||!n.data)throw G(`Could not open this workspace file.`,n);if(o!==u||f!==s||!v(a)||t().selectedTaskId!==r)throw Error(`Work file request was superseded.`);return e({selectedFile:n.data}),n.data}catch(n){let i=K(n,`Could not open this file.`);throw o===u&&v(a)&&t().selectedTaskId===r&&e({error:i}),Error(i)}finally{S(c,a,r)}},clearSelectedFile:()=>{u+=1,f=null,e({selectedFile:null})},saveFile:async(r,i,a,o)=>{let s=n,c=C(r),l=_(r,i);f===l&&(u+=1,f=null);try{let n=await d.saveFile(r,i,a,o);if(y(s),!n.success||!n.data)throw G(`Could not save this workspace file.`,n);return t().selectedTaskId===r&&t().selectedFile?.path===i&&(f===l&&(u+=1,f=null),e({selectedFile:n.data})),n.data}catch(e){let t=K(e,`Could not save this file.`);throw T(r,s,t),Error(t)}finally{w(c,s)}},startPreview:(e,t)=>D(()=>d.startPreview(e,t),`Could not start the workspace preview.`,e),stopPreview:e=>D(()=>d.stopPreview(e),`Could not stop the workspace preview.`,e),clearError:()=>e({error:null}),clearAllState:()=>{n+=1,i=++r,a=i,o+=1,s=null,m.clear(),g.clear(),b(),e({capabilities:null,tasks:[],selectedTaskId:null,selectedTask:null,files:[],selectedFile:null,liveRuns:{},loadingTasks:!1,loadingTask:!1,loadingOlderMessages:!1,loadingFiles:!1,actionLoading:!1,error:null})}}}),Ne=async(e,t,n)=>{let r=await t(e);return r.success&&await n(),r},J=s(`store:plugin-store`),Pe=i((e,t)=>({plugins:[],pluginStatus:[],pluginVariables:{},isLoading:!1,isUploading:!1,error:null,loadPlugins:async()=>{e({isLoading:!0,error:null});try{let t=await u.getAllPlugins();t.success&&t.data?e({plugins:t.data}):e({error:t.error||`Failed to load plugins`})}catch(t){e({error:w(t,`Failed to load plugins`)})}finally{e({isLoading:!1})}},uploadPlugin:async n=>{e({isUploading:!0,error:null});try{let r=await u.uploadPlugin(n);r.success&&r.data?await t().loadPlugins():e({error:r.error||`Failed to upload plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to upload plugin`})}finally{e({isUploading:!1})}},installPlugin:async n=>{e({isLoading:!0,error:null});try{let r=await u.installPlugin(n);r.success&&r.data?await t().loadPlugins():e({error:r.error||`Failed to install plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to install plugin`})}finally{e({isLoading:!1})}},updatePlugin:async(n,r)=>{e({isLoading:!0,error:null});try{let i=await u.updatePlugin(n,r);i.success&&i.data?await t().loadPlugins():e({error:i.error||`Failed to update plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to update plugin`})}finally{e({isLoading:!1})}},deletePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await u.deletePlugin(n);r.success?await t().loadPlugins():e({error:r.error||`Failed to delete plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to delete plugin`})}finally{e({isLoading:!1})}},activatePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await Ne(n,u.activatePlugin,()=>t().loadPlugins());r.success||e({error:r.error||`Failed to activate plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to activate plugin`})}finally{e({isLoading:!1})}},deactivatePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await u.deactivatePlugin(n);r.success?await t().loadPlugins():e({error:r.error||`Failed to deactivate plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to deactivate plugin`})}finally{e({isLoading:!1})}},loadPluginStatus:async()=>{try{let t=await u.getPluginStatus();t.success&&t.data&&e({pluginStatus:t.data})}catch(e){J.error(`Failed to load plugin status:`,e)}},exportPlugin:async t=>{e({isLoading:!0,error:null});try{let e=await u.exportPlugin(t),n=window.URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=`${t}.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r),window.URL.revokeObjectURL(n)}catch(t){e({error:t instanceof Error?t.message:`Failed to export plugin`})}finally{e({isLoading:!1})}},fetchPluginVariables:async t=>{try{let n=await u.getVariables(t);n.success&&n.data&&e(e=>({pluginVariables:{...e.pluginVariables,[t]:n.data}}))}catch(e){J.error(`Failed to fetch plugin variables:`,e)}},updatePluginVariables:async(e,n,r=[])=>{try{return(await u.setVariables(e,n,r)).success?(await t().fetchPluginVariables(e),!0):!1}catch(e){return J.error(`Failed to update plugin variables:`,e),!1}},resetPluginVariables:async t=>{try{let n=await u.resetVariables(t);return n.success&&n.data===!0?(e(e=>{let n={...e.pluginVariables};return delete n[t],{pluginVariables:n}}),!0):!1}catch(e){return J.error(`Failed to reset plugin variables:`,e),!1}},clearError:()=>e({error:null}),setError:t=>e({error:t})})),Y=`libre-webui:work-draft:`,X=(e,t)=>`${Y}${e}:${t}`,Fe=(e,t)=>{try{let n=window.sessionStorage.getItem(X(e,t));if(!n)return null;let r=JSON.parse(n);return typeof r.content==`string`?{content:r.content,baseUpdatedAt:typeof r.baseUpdatedAt==`number`?r.baseUpdatedAt:void 0}:null}catch{return null}},Ie=(e,t,n)=>{try{return window.sessionStorage.setItem(X(e,t),JSON.stringify(n)),!0}catch{return!1}},Le=(e,t)=>{try{window.sessionStorage.removeItem(X(e,t))}catch{}},Re=e=>{let t=`${Y}${e}:`;try{for(let e=window.sessionStorage.length-1;e>=0;e--){let n=window.sessionStorage.key(e);n?.startsWith(t)&&window.sessionStorage.removeItem(n)}}catch{}},ze=()=>{try{for(let e=window.sessionStorage.length-1;e>=0;e--){let t=window.sessionStorage.key(e);t?.startsWith(Y)&&window.sessionStorage.removeItem(t)}}catch{}},Z=s(`websocket`),Q=new class{constructor(){n(this,`ws`,null),n(this,`url`,void 0),n(this,`reconnectAttempts`,0),n(this,`maxReconnectAttempts`,5),n(this,`reconnectDelay`,1e3),n(this,`messageHandlers`,new Map);let e;e=window.location.protocol===`file:`?`ws://localhost:3001`:`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}`,this.url=`${e}/ws`,Z.debug(`WebSocket URL constructed:`,this.url)}connect(){return o()?(Z.debug(`Demo mode active: skipping WebSocket connection.`),Promise.resolve()):(Z.debug(`WebSocket: Attempting to connect to:`,this.url),new Promise((e,t)=>{try{let n=localStorage.getItem(`auth-token`),r=n?`${this.url}?token=${encodeURIComponent(n)}`:this.url;Z.debug(`WebSocket: Connecting to:`,r.replace(/token=[^&]+/,`token=***`)),this.ws=new WebSocket(r),this.ws.onopen=()=>{Z.debug(`WebSocket connected successfully`),this.reconnectAttempts=0,e()},this.ws.onmessage=e=>{try{let t=JSON.parse(e.data),n=this.messageHandlers.get(t.type);n?n(t.data):t.type===`connected`?Z.debug(`WebSocket: Server confirmed connection`):Z.warn(`WebSocket: No handler for message type:`,t.type)}catch(e){Z.error(`Failed to parse WebSocket message:`,e)}},this.ws.onclose=()=>{Z.debug(`WebSocket disconnected`),this.ws=null,this.attemptReconnect()},this.ws.onerror=e=>{Z.error(`WebSocket error:`,e),t(e)}}catch(e){t(e)}}))}disconnect(){this.ws&&(this.ws.close(),this.ws=null)}send(e){this.ws&&this.ws.readyState===WebSocket.OPEN?(Z.debug(`WebSocket: Sending message:`,e),this.ws.send(JSON.stringify(e))):Z.warn(`WebSocket is not connected. ReadyState:`,this.ws?.readyState)}onMessage(e,t){this.messageHandlers.delete(e),this.messageHandlers.set(e,t)}offMessage(e){this.messageHandlers.delete(e)}attemptReconnect(){if(o()){Z.debug(`Demo mode active: skipping WebSocket reconnection.`);return}this.reconnectAttempts<this.maxReconnectAttempts?(this.reconnectAttempts++,Z.debug(`Attempting to reconnect... (${this.reconnectAttempts}/${this.maxReconnectAttempts})`),setTimeout(()=>{this.connect().catch(()=>{})},this.reconnectDelay*this.reconnectAttempts)):Z.error(`Max reconnection attempts reached`)}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}},Be=e({useAuthStore:()=>Ve}),$=s(`auth-store`),Ve=i()(a((e,t)=>({user:null,token:null,systemInfo:null,isAuthenticated:!1,isLoading:!1,login:(n,r,i)=>{let a=t().user?.id===n.id;localStorage.setItem(`auth-token`,r);let s=F.getState();s.clearAllState&&s.clearAllState(),q.getState().clearAllState(),a||(ze(),h.getState().clearUserState()),e({user:n,token:r,systemInfo:i,isAuthenticated:!0,isLoading:!1}),setTimeout(async()=>{try{let e=Pe.getState();$.debug(`Reinitializing app after login...`),$.debug(`Reconnecting WebSocket with auth token...`),Q.disconnect(),await Q.connect();try{!(await f.checkHealth()).success&&!o()&&$.warn(`Ollama service not available after login`)}catch(e){$.warn(`Ollama health check failed after login; continuing provider initialization:`,e)}let t=h.getState();await Promise.all([s.loadModels(),s.loadSessions(),s.loadPreferences(),t.loadPreferences(),e.loadPlugins()]),$.debug(`Reinitialized app after login`)}catch(e){$.error(`Failed to reinitialize app after login:`,e)}},100)},logout:()=>{localStorage.removeItem(`auth-token`),$.debug(`Disconnecting WebSocket on logout...`),Q.disconnect();let t=F.getState();t.clearAllState&&t.clearAllState(),q.getState().clearAllState(),ze(),h.getState().clearUserState(),e({user:null,token:null,isAuthenticated:!1,isLoading:!1})},setUser:t=>{e({user:t})},setSystemInfo:t=>{e({systemInfo:t})},setLoading:t=>{e({isLoading:t})},isAdmin:()=>{let{user:e}=t();return e?.role===`admin`},requiresAuth:()=>{let{systemInfo:e}=t();return e?.requiresAuth??!1}}),{name:`auth-store`,partialize:e=>({user:e.user,token:e.token,systemInfo:e.systemInfo,isAuthenticated:e.isAuthenticated})}));export{b as S,ge as _,Re as a,y as b,Pe as c,M as d,me as f,he as g,N as h,Le as i,q as l,pe as m,Ve as n,Fe as o,j as p,Q as r,Ie as s,Be as t,F as u,_e as v,C as x,w as y};
|