libre-webui 0.25.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -22
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +26 -4
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/middleware/auth.d.ts +7 -0
- package/backend/dist/middleware/auth.d.ts.map +1 -1
- package/backend/dist/middleware/auth.js +26 -0
- package/backend/dist/middleware/auth.js.map +1 -1
- package/backend/dist/middleware/index.d.ts +20 -0
- package/backend/dist/middleware/index.d.ts.map +1 -1
- package/backend/dist/middleware/index.js +105 -2
- package/backend/dist/middleware/index.js.map +1 -1
- package/backend/dist/models/personaModel.d.ts.map +1 -1
- package/backend/dist/models/personaModel.js +2 -0
- package/backend/dist/models/personaModel.js.map +1 -1
- package/backend/dist/observability/otel.d.ts +40 -0
- package/backend/dist/observability/otel.d.ts.map +1 -0
- package/backend/dist/observability/otel.js +337 -0
- package/backend/dist/observability/otel.js.map +1 -0
- package/backend/dist/observability/requestContext.d.ts +14 -0
- package/backend/dist/observability/requestContext.d.ts.map +1 -0
- package/backend/dist/observability/requestContext.js +21 -0
- package/backend/dist/observability/requestContext.js.map +1 -0
- package/backend/dist/persistence/chatGenerationTypes.d.ts +9 -0
- package/backend/dist/persistence/chatGenerationTypes.d.ts.map +1 -1
- package/backend/dist/persistence/extensionTypes.d.ts +13 -0
- package/backend/dist/persistence/extensionTypes.d.ts.map +1 -1
- package/backend/dist/persistence/extensionTypes.js.map +1 -1
- package/backend/dist/persistence/index.d.ts +1 -1
- package/backend/dist/persistence/index.d.ts.map +1 -1
- package/backend/dist/persistence/index.js.map +1 -1
- package/backend/dist/persistence/postgresAgentFoundationMigration.d.ts +9 -0
- package/backend/dist/persistence/postgresAgentFoundationMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresAgentFoundationMigration.js +164 -0
- package/backend/dist/persistence/postgresAgentFoundationMigration.js.map +1 -0
- package/backend/dist/persistence/postgresExtensionRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/postgresExtensionRepositories.js +46 -2
- package/backend/dist/persistence/postgresExtensionRepositories.js.map +1 -1
- package/backend/dist/persistence/postgresMediaEnterpriseOpsMigration.d.ts +10 -0
- package/backend/dist/persistence/postgresMediaEnterpriseOpsMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresMediaEnterpriseOpsMigration.js +148 -0
- package/backend/dist/persistence/postgresMediaEnterpriseOpsMigration.js.map +1 -0
- package/backend/dist/persistence/postgresMigrationRegistry.d.ts.map +1 -1
- package/backend/dist/persistence/postgresMigrationRegistry.js +10 -0
- package/backend/dist/persistence/postgresMigrationRegistry.js.map +1 -1
- package/backend/dist/persistence/postgresNotesV2Migration.d.ts +4 -0
- package/backend/dist/persistence/postgresNotesV2Migration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresNotesV2Migration.js +57 -0
- package/backend/dist/persistence/postgresNotesV2Migration.js.map +1 -0
- package/backend/dist/persistence/postgresResourceRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/postgresResourceRepositories.js +1646 -11
- package/backend/dist/persistence/postgresResourceRepositories.js.map +1 -1
- package/backend/dist/persistence/postgresSkillFilesMigration.d.ts +9 -0
- package/backend/dist/persistence/postgresSkillFilesMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresSkillFilesMigration.js +50 -0
- package/backend/dist/persistence/postgresSkillFilesMigration.js.map +1 -0
- package/backend/dist/persistence/postgresTeamCollaborationMigration.d.ts +10 -0
- package/backend/dist/persistence/postgresTeamCollaborationMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresTeamCollaborationMigration.js +161 -0
- package/backend/dist/persistence/postgresTeamCollaborationMigration.js.map +1 -0
- package/backend/dist/persistence/resourceTypes.d.ts +541 -3
- package/backend/dist/persistence/resourceTypes.d.ts.map +1 -1
- package/backend/dist/persistence/resourceTypes.js.map +1 -1
- package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteExtensionRepositories.js +26 -4
- package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -1
- package/backend/dist/persistence/sqliteMigrations.d.ts +9 -0
- package/backend/dist/persistence/sqliteMigrations.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteMigrations.js +1196 -29
- package/backend/dist/persistence/sqliteMigrations.js.map +1 -1
- package/backend/dist/persistence/sqliteResourceRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteResourceRepositories.js +1523 -134
- package/backend/dist/persistence/sqliteResourceRepositories.js.map +1 -1
- package/backend/dist/persistence/sqliteToPostgresMigration.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteToPostgresMigration.js +257 -3
- package/backend/dist/persistence/sqliteToPostgresMigration.js.map +1 -1
- package/backend/dist/platform/jobs/domainJobContracts.d.ts +8 -0
- package/backend/dist/platform/jobs/domainJobContracts.d.ts.map +1 -1
- package/backend/dist/platform/jobs/domainJobContracts.js +8 -0
- package/backend/dist/platform/jobs/domainJobContracts.js.map +1 -1
- package/backend/dist/platform/jobs/domainJobHandlers.d.ts.map +1 -1
- package/backend/dist/platform/jobs/domainJobHandlers.js +310 -3
- package/backend/dist/platform/jobs/domainJobHandlers.js.map +1 -1
- package/backend/dist/platform/jobs/embeddedDurableJobWorker.d.ts.map +1 -1
- package/backend/dist/platform/jobs/embeddedDurableJobWorker.js +4 -2
- package/backend/dist/platform/jobs/embeddedDurableJobWorker.js.map +1 -1
- package/backend/dist/platform/jobs/postgresDurableJobWorker.d.ts.map +1 -1
- package/backend/dist/platform/jobs/postgresDurableJobWorker.js +4 -2
- package/backend/dist/platform/jobs/postgresDurableJobWorker.js.map +1 -1
- package/backend/dist/platform/storage/pgVectorStore.d.ts +2 -1
- package/backend/dist/platform/storage/pgVectorStore.d.ts.map +1 -1
- package/backend/dist/platform/storage/pgVectorStore.js +51 -0
- package/backend/dist/platform/storage/pgVectorStore.js.map +1 -1
- package/backend/dist/platform/storage/platformDomainRepositories.d.ts +8 -2
- package/backend/dist/platform/storage/platformDomainRepositories.d.ts.map +1 -1
- package/backend/dist/platform/storage/postgresPlatformDomainRepositories.d.ts.map +1 -1
- package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js +25 -4
- package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js.map +1 -1
- package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts +2 -1
- package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts.map +1 -1
- package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js +35 -0
- package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js.map +1 -1
- package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.d.ts.map +1 -1
- package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js +26 -3
- package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js.map +1 -1
- package/backend/dist/platform/storage/vectorStore.d.ts +14 -0
- package/backend/dist/platform/storage/vectorStore.d.ts.map +1 -1
- package/backend/dist/platform/storage/vectorStore.js.map +1 -1
- package/backend/dist/routes/access.d.ts.map +1 -1
- package/backend/dist/routes/access.js +84 -3
- package/backend/dist/routes/access.js.map +1 -1
- package/backend/dist/routes/calendar.d.ts.map +1 -1
- package/backend/dist/routes/calendar.js +125 -22
- package/backend/dist/routes/calendar.js.map +1 -1
- package/backend/dist/routes/channels.d.ts +3 -0
- package/backend/dist/routes/channels.d.ts.map +1 -0
- package/backend/dist/routes/channels.js +447 -0
- package/backend/dist/routes/channels.js.map +1 -0
- package/backend/dist/routes/chat.d.ts.map +1 -1
- package/backend/dist/routes/chat.js +195 -7
- package/backend/dist/routes/chat.js.map +1 -1
- package/backend/dist/routes/costs.d.ts +3 -0
- package/backend/dist/routes/costs.d.ts.map +1 -0
- package/backend/dist/routes/costs.js +191 -0
- package/backend/dist/routes/costs.js.map +1 -0
- package/backend/dist/routes/documents.d.ts.map +1 -1
- package/backend/dist/routes/documents.js +64 -21
- package/backend/dist/routes/documents.js.map +1 -1
- package/backend/dist/routes/evaluations.d.ts +3 -0
- package/backend/dist/routes/evaluations.d.ts.map +1 -0
- package/backend/dist/routes/evaluations.js +352 -0
- package/backend/dist/routes/evaluations.js.map +1 -0
- package/backend/dist/routes/imageGen.d.ts.map +1 -1
- package/backend/dist/routes/imageGen.js +2 -1
- package/backend/dist/routes/imageGen.js.map +1 -1
- package/backend/dist/routes/media.d.ts.map +1 -1
- package/backend/dist/routes/media.js +228 -7
- package/backend/dist/routes/media.js.map +1 -1
- package/backend/dist/routes/notes.d.ts.map +1 -1
- package/backend/dist/routes/notes.js +149 -36
- package/backend/dist/routes/notes.js.map +1 -1
- package/backend/dist/routes/notifications.d.ts +3 -0
- package/backend/dist/routes/notifications.d.ts.map +1 -0
- package/backend/dist/routes/notifications.js +213 -0
- package/backend/dist/routes/notifications.js.map +1 -0
- package/backend/dist/routes/openaiCompat.d.ts +3 -0
- package/backend/dist/routes/openaiCompat.d.ts.map +1 -0
- package/backend/dist/routes/openaiCompat.js +314 -0
- package/backend/dist/routes/openaiCompat.js.map +1 -0
- package/backend/dist/routes/personas.js +1 -1
- package/backend/dist/routes/personas.js.map +1 -1
- package/backend/dist/routes/prompts.d.ts +3 -0
- package/backend/dist/routes/prompts.d.ts.map +1 -0
- package/backend/dist/routes/prompts.js +173 -0
- package/backend/dist/routes/prompts.js.map +1 -0
- package/backend/dist/routes/search.d.ts.map +1 -1
- package/backend/dist/routes/search.js +29 -1
- package/backend/dist/routes/search.js.map +1 -1
- package/backend/dist/routes/skills.d.ts +3 -0
- package/backend/dist/routes/skills.d.ts.map +1 -0
- package/backend/dist/routes/skills.js +246 -0
- package/backend/dist/routes/skills.js.map +1 -0
- package/backend/dist/routes/stt.d.ts.map +1 -1
- package/backend/dist/routes/stt.js +2 -1
- package/backend/dist/routes/stt.js.map +1 -1
- package/backend/dist/routes/tools.d.ts +3 -0
- package/backend/dist/routes/tools.d.ts.map +1 -0
- package/backend/dist/routes/tools.js +359 -0
- package/backend/dist/routes/tools.js.map +1 -0
- package/backend/dist/routes/tts.d.ts.map +1 -1
- package/backend/dist/routes/tts.js +63 -8
- package/backend/dist/routes/tts.js.map +1 -1
- package/backend/dist/routes/voiceAccess.d.ts +3 -0
- package/backend/dist/routes/voiceAccess.d.ts.map +1 -0
- package/backend/dist/routes/voiceAccess.js +102 -0
- package/backend/dist/routes/voiceAccess.js.map +1 -0
- package/backend/dist/services/apiTokenService.d.ts +2 -2
- package/backend/dist/services/apiTokenService.d.ts.map +1 -1
- package/backend/dist/services/apiTokenService.js +7 -0
- package/backend/dist/services/apiTokenService.js.map +1 -1
- package/backend/dist/services/authorizationService.d.ts +8 -4
- package/backend/dist/services/authorizationService.d.ts.map +1 -1
- package/backend/dist/services/authorizationService.js +31 -1
- package/backend/dist/services/authorizationService.js.map +1 -1
- package/backend/dist/services/automationSchedulerService.d.ts.map +1 -1
- package/backend/dist/services/automationSchedulerService.js +33 -3
- package/backend/dist/services/automationSchedulerService.js.map +1 -1
- package/backend/dist/services/automationService.d.ts +4 -1
- package/backend/dist/services/automationService.d.ts.map +1 -1
- package/backend/dist/services/automationService.js +25 -2
- package/backend/dist/services/automationService.js.map +1 -1
- package/backend/dist/services/builtinToolsService.d.ts +20 -0
- package/backend/dist/services/builtinToolsService.d.ts.map +1 -0
- package/backend/dist/services/builtinToolsService.js +661 -0
- package/backend/dist/services/builtinToolsService.js.map +1 -0
- package/backend/dist/services/calendarService.d.ts +74 -0
- package/backend/dist/services/calendarService.d.ts.map +1 -0
- package/backend/dist/services/calendarService.js +339 -0
- package/backend/dist/services/calendarService.js.map +1 -0
- package/backend/dist/services/channelService.d.ts +195 -0
- package/backend/dist/services/channelService.d.ts.map +1 -0
- package/backend/dist/services/channelService.js +1057 -0
- package/backend/dist/services/channelService.js.map +1 -0
- package/backend/dist/services/chatRequestService.d.ts.map +1 -1
- package/backend/dist/services/chatRequestService.js +29 -1
- package/backend/dist/services/chatRequestService.js.map +1 -1
- package/backend/dist/services/chatService.d.ts +61 -1
- package/backend/dist/services/chatService.d.ts.map +1 -1
- package/backend/dist/services/chatService.js +218 -1
- package/backend/dist/services/chatService.js.map +1 -1
- package/backend/dist/services/chatToolRuntimeService.d.ts +55 -0
- package/backend/dist/services/chatToolRuntimeService.d.ts.map +1 -0
- package/backend/dist/services/chatToolRuntimeService.js +389 -0
- package/backend/dist/services/chatToolRuntimeService.js.map +1 -0
- package/backend/dist/services/costGovernanceService.d.ts +102 -0
- package/backend/dist/services/costGovernanceService.d.ts.map +1 -0
- package/backend/dist/services/costGovernanceService.js +463 -0
- package/backend/dist/services/costGovernanceService.js.map +1 -0
- package/backend/dist/services/dataArchiveService.d.ts +6 -0
- package/backend/dist/services/dataArchiveService.d.ts.map +1 -1
- package/backend/dist/services/dataArchiveService.js +23 -4
- package/backend/dist/services/dataArchiveService.js.map +1 -1
- package/backend/dist/services/documentService.d.ts +58 -1
- package/backend/dist/services/documentService.d.ts.map +1 -1
- package/backend/dist/services/documentService.js +289 -84
- package/backend/dist/services/documentService.js.map +1 -1
- package/backend/dist/services/durableChatGenerationService.d.ts +9 -0
- package/backend/dist/services/durableChatGenerationService.d.ts.map +1 -1
- package/backend/dist/services/durableChatGenerationService.js +152 -11
- package/backend/dist/services/durableChatGenerationService.js.map +1 -1
- package/backend/dist/services/evaluationService.d.ts +111 -0
- package/backend/dist/services/evaluationService.d.ts.map +1 -0
- package/backend/dist/services/evaluationService.js +403 -0
- package/backend/dist/services/evaluationService.js.map +1 -0
- package/backend/dist/services/galleryService.d.ts +6 -0
- package/backend/dist/services/galleryService.d.ts.map +1 -1
- package/backend/dist/services/galleryService.js +26 -0
- package/backend/dist/services/galleryService.js.map +1 -1
- package/backend/dist/services/mcpClientService.d.ts +29 -0
- package/backend/dist/services/mcpClientService.d.ts.map +1 -0
- package/backend/dist/services/mcpClientService.js +189 -0
- package/backend/dist/services/mcpClientService.js.map +1 -0
- package/backend/dist/services/noteService.d.ts +71 -0
- package/backend/dist/services/noteService.d.ts.map +1 -0
- package/backend/dist/services/noteService.js +397 -0
- package/backend/dist/services/noteService.js.map +1 -0
- package/backend/dist/services/notificationService.d.ts +55 -0
- package/backend/dist/services/notificationService.d.ts.map +1 -0
- package/backend/dist/services/notificationService.js +308 -0
- package/backend/dist/services/notificationService.js.map +1 -0
- package/backend/dist/services/openApiToolService.d.ts +38 -0
- package/backend/dist/services/openApiToolService.d.ts.map +1 -0
- package/backend/dist/services/openApiToolService.js +254 -0
- package/backend/dist/services/openApiToolService.js.map +1 -0
- package/backend/dist/services/personaService.d.ts +18 -2
- package/backend/dist/services/personaService.d.ts.map +1 -1
- package/backend/dist/services/personaService.js +113 -4
- package/backend/dist/services/personaService.js.map +1 -1
- package/backend/dist/services/pluginImageGenerationService.d.ts +19 -0
- package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
- package/backend/dist/services/pluginImageGenerationService.js +121 -0
- package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
- package/backend/dist/services/pluginService.d.ts +7 -0
- package/backend/dist/services/pluginService.d.ts.map +1 -1
- package/backend/dist/services/pluginService.js +8 -2
- package/backend/dist/services/pluginService.js.map +1 -1
- package/backend/dist/services/promptService.d.ts +74 -0
- package/backend/dist/services/promptService.d.ts.map +1 -0
- package/backend/dist/services/promptService.js +513 -0
- package/backend/dist/services/promptService.js.map +1 -0
- package/backend/dist/services/resourceGrantService.d.ts.map +1 -1
- package/backend/dist/services/resourceGrantService.js +62 -17
- package/backend/dist/services/resourceGrantService.js.map +1 -1
- package/backend/dist/services/searchService.d.ts +29 -0
- package/backend/dist/services/searchService.d.ts.map +1 -0
- package/backend/dist/services/searchService.js +0 -0
- package/backend/dist/services/searchService.js.map +1 -0
- package/backend/dist/services/securityAuditService.d.ts.map +1 -1
- package/backend/dist/services/securityAuditService.js +2 -1
- package/backend/dist/services/securityAuditService.js.map +1 -1
- package/backend/dist/services/sharedResourceAccess.d.ts +25 -0
- package/backend/dist/services/sharedResourceAccess.d.ts.map +1 -0
- package/backend/dist/services/sharedResourceAccess.js +59 -0
- package/backend/dist/services/sharedResourceAccess.js.map +1 -0
- package/backend/dist/services/skillService.d.ts +137 -0
- package/backend/dist/services/skillService.d.ts.map +1 -0
- package/backend/dist/services/skillService.js +852 -0
- package/backend/dist/services/skillService.js.map +1 -0
- package/backend/dist/services/toolAccessService.d.ts +9 -0
- package/backend/dist/services/toolAccessService.d.ts.map +1 -0
- package/backend/dist/services/toolAccessService.js +60 -0
- package/backend/dist/services/toolAccessService.js.map +1 -0
- package/backend/dist/services/toolApprovalService.d.ts +34 -0
- package/backend/dist/services/toolApprovalService.d.ts.map +1 -0
- package/backend/dist/services/toolApprovalService.js +188 -0
- package/backend/dist/services/toolApprovalService.js.map +1 -0
- package/backend/dist/services/toolGatewayService.d.ts +53 -0
- package/backend/dist/services/toolGatewayService.d.ts.map +1 -0
- package/backend/dist/services/toolGatewayService.js +249 -0
- package/backend/dist/services/toolGatewayService.js.map +1 -0
- package/backend/dist/services/toolServerService.d.ts +57 -0
- package/backend/dist/services/toolServerService.d.ts.map +1 -0
- package/backend/dist/services/toolServerService.js +521 -0
- package/backend/dist/services/toolServerService.js.map +1 -0
- package/backend/dist/services/voiceAccessService.d.ts +10 -0
- package/backend/dist/services/voiceAccessService.d.ts.map +1 -0
- package/backend/dist/services/voiceAccessService.js +74 -0
- package/backend/dist/services/voiceAccessService.js.map +1 -0
- package/backend/dist/services/voiceProfileService.d.ts +20 -0
- package/backend/dist/services/voiceProfileService.d.ts.map +1 -1
- package/backend/dist/services/voiceProfileService.js +60 -0
- package/backend/dist/services/voiceProfileService.js.map +1 -1
- package/backend/dist/storage.d.ts +28 -1
- package/backend/dist/storage.d.ts.map +1 -1
- package/backend/dist/storage.js +100 -1
- package/backend/dist/storage.js.map +1 -1
- package/backend/dist/storageMappers.d.ts +2 -2
- package/backend/dist/storageMappers.d.ts.map +1 -1
- package/backend/dist/storageMappers.js.map +1 -1
- package/backend/dist/types/index.d.ts +197 -2
- package/backend/dist/types/index.d.ts.map +1 -1
- package/backend/dist/types/index.js.map +1 -1
- package/backend/dist/types/tools.d.ts +137 -0
- package/backend/dist/types/tools.d.ts.map +1 -0
- package/backend/dist/types/tools.js +25 -0
- package/backend/dist/types/tools.js.map +1 -0
- package/backend/dist/utils/chatDocumentContext.d.ts +26 -1
- package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
- package/backend/dist/utils/chatDocumentContext.js +87 -18
- package/backend/dist/utils/chatDocumentContext.js.map +1 -1
- package/backend/dist/utils/documentExtraction.d.ts +69 -0
- package/backend/dist/utils/documentExtraction.d.ts.map +1 -0
- package/backend/dist/utils/documentExtraction.js +545 -0
- package/backend/dist/utils/documentExtraction.js.map +1 -0
- package/backend/dist/utils/hybridRetrieval.d.ts +34 -0
- package/backend/dist/utils/hybridRetrieval.d.ts.map +1 -0
- package/backend/dist/utils/hybridRetrieval.js +119 -0
- package/backend/dist/utils/hybridRetrieval.js.map +1 -0
- package/backend/dist/utils/icsCalendar.d.ts +27 -0
- package/backend/dist/utils/icsCalendar.d.ts.map +1 -0
- package/backend/dist/utils/icsCalendar.js +313 -0
- package/backend/dist/utils/icsCalendar.js.map +1 -0
- package/backend/dist/utils/imageEditUpload.d.ts +29 -0
- package/backend/dist/utils/imageEditUpload.d.ts.map +1 -0
- package/backend/dist/utils/imageEditUpload.js +82 -0
- package/backend/dist/utils/imageEditUpload.js.map +1 -0
- package/backend/dist/utils/logRedaction.d.ts +2 -0
- package/backend/dist/utils/logRedaction.d.ts.map +1 -0
- package/backend/dist/utils/logRedaction.js +66 -0
- package/backend/dist/utils/logRedaction.js.map +1 -0
- package/backend/dist/utils/logger.d.ts +3 -0
- package/backend/dist/utils/logger.d.ts.map +1 -1
- package/backend/dist/utils/logger.js +63 -20
- package/backend/dist/utils/logger.js.map +1 -1
- package/backend/dist/utils/pluginChatAdapter.d.ts +5 -1
- package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -1
- package/backend/dist/utils/pluginChatAdapter.js +83 -0
- package/backend/dist/utils/pluginChatAdapter.js.map +1 -1
- package/backend/dist/utils/pluginDefinitionTrust.js +1 -1
- package/backend/dist/utils/resourceLimits.d.ts +61 -2
- package/backend/dist/utils/resourceLimits.d.ts.map +1 -1
- package/backend/dist/utils/resourceLimits.js +59 -0
- package/backend/dist/utils/resourceLimits.js.map +1 -1
- package/backend/dist/utils/toolEgress.d.ts +22 -0
- package/backend/dist/utils/toolEgress.d.ts.map +1 -0
- package/backend/dist/utils/toolEgress.js +157 -0
- package/backend/dist/utils/toolEgress.js.map +1 -0
- package/backend/dist/utils/websocketMessages.d.ts +6 -0
- package/backend/dist/utils/websocketMessages.d.ts.map +1 -1
- package/backend/dist/utils/websocketMessages.js +8 -0
- package/backend/dist/utils/websocketMessages.js.map +1 -1
- package/backend/dist/utils/zipArchive.d.ts +32 -0
- package/backend/dist/utils/zipArchive.d.ts.map +1 -0
- package/backend/dist/utils/zipArchive.js +171 -0
- package/backend/dist/utils/zipArchive.js.map +1 -0
- package/backend/dist/websocketServer.d.ts.map +1 -1
- package/backend/dist/websocketServer.js +142 -35
- package/backend/dist/websocketServer.js.map +1 -1
- package/backend/package.json +1 -1
- package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
- package/frontend/dist/assets/index-BPsH9FII.js +80 -0
- package/frontend/dist/assets/index-BtXF0Oxa.css +1 -0
- package/frontend/dist/index.html +18 -18
- package/frontend/dist/js/{ArtifactContainer-CpUi6ekF.js → ArtifactContainer-CIoFoMv8.js} +1 -1
- package/frontend/dist/js/{ArtifactDemoPage-BeNs3gHp.js → ArtifactDemoPage-D0JEIAbZ.js} +1 -1
- package/frontend/dist/js/{ArtifactSandboxFrame-qsj_Y3LV.js → ArtifactSandboxFrame-REazyIrx.js} +2 -2
- package/frontend/dist/js/ArtifactSlideOutPanel-A-i94ghF.js +1 -0
- package/frontend/dist/js/AutomationsPage-Dow_lbIf.js +1 -0
- package/frontend/dist/js/{Button-BPf_pOxH.js → Button-C0r3J9G_.js} +1 -1
- package/frontend/dist/js/CalendarPage-DLjasZOd.js +1 -0
- package/frontend/dist/js/ChannelsPage-C8hvTD7J.js +1 -0
- package/frontend/dist/js/ChatPage-BAgBHUES.js +16 -0
- package/frontend/dist/js/EvaluationsPage-Bm8FRoeX.js +2 -0
- package/frontend/dist/js/{FirstTimeSetup-Df0YJni3.js → FirstTimeSetup-BxJapNul.js} +1 -1
- package/frontend/dist/js/GalleryPage-DHz9DkK7.js +1 -0
- package/frontend/dist/js/HomePage-BqNy-FWX.js +1 -0
- package/frontend/dist/js/LibreClawPage-BDzDILjY.js +1 -0
- package/frontend/dist/js/{ModelManagerModals-DcLGYN3l.js → ModelManagerModals-DX9eT5r2.js} +1 -1
- package/frontend/dist/js/ModelSelector-ol8mK2ja.js +1 -0
- package/frontend/dist/js/NotesPage-DzHEx2O4.js +3 -0
- package/frontend/dist/js/{OptimizedSyntaxHighlighter-Dz7D1LPB.js → OptimizedSyntaxHighlighter-CZNPwN0i.js} +1 -1
- package/frontend/dist/js/PersonasPage-M_WKH2a9.js +13 -0
- package/frontend/dist/js/PluginUsagePage-Ctoka6JZ.js +1 -0
- package/frontend/dist/js/RichMessageContent-BqgafH4p.js +3 -0
- package/frontend/dist/js/SettingsModal-R9EDadAV.js +19 -0
- package/frontend/dist/js/{SettingsToggle-woG_WebF.js → SettingsToggle-BIVyfGjl.js} +1 -1
- package/frontend/dist/js/SystemPage-aOkrSuY7.js +1 -0
- package/frontend/dist/js/UserManagementPage-BOuaX3ay.js +1 -0
- package/frontend/dist/js/WorkPage-DxZISerQ.js +6 -0
- package/frontend/dist/js/api-6bSMtSNh.js +14 -0
- package/frontend/dist/js/{appStore-0JnCUlEq.js → appStore-CdObhQBb.js} +2 -2
- package/frontend/dist/js/ar-DT_VLBO3.js +2 -0
- package/frontend/dist/js/{authStore-DbMdvNgJ.js → authStore-DbqqrfZv.js} +3 -3
- package/frontend/dist/js/{babel-BsYoxD-7.js → babel-DSqqk5kt.js} +1 -1
- package/frontend/dist/js/bn-BrvEqhGA.js +2 -0
- package/frontend/dist/js/chatStore-DbZPJNsu.js +3 -0
- package/frontend/dist/js/{config-DSOYQ9a3.js → config-8KdgjtEx.js} +1 -1
- package/frontend/dist/js/cs-BthnM_YI.js +2 -0
- package/frontend/dist/js/da-DCth-6_j.js +2 -0
- package/frontend/dist/js/de-BBWt0gJ_.js +2 -0
- package/frontend/dist/js/es-DuslOPqM.js +2 -0
- package/frontend/dist/js/{estree-BcnBcOAx.js → estree-BU5-LV_1.js} +3 -3
- package/frontend/dist/js/evaluationsApi-CwZJsgeG.js +1 -0
- package/frontend/dist/js/fr-DZAeg46S.js +2 -0
- package/frontend/dist/js/hi-ijDSiY77.js +2 -0
- package/frontend/dist/js/{html-DkY55Jys.js → html-DeoAy2bo.js} +2 -2
- package/frontend/dist/js/id-BS6qS0oq.js +2 -0
- package/frontend/dist/js/is-CO2PMDte.js +2 -0
- package/frontend/dist/js/it-ChhxT4hs.js +2 -0
- package/frontend/dist/js/ja-cyeqUeJN.js +2 -0
- package/frontend/dist/js/ko-CfqHTLXj.js +2 -0
- package/frontend/dist/js/{markdown-IZSI9DXw.js → markdown-DOLsYkBY.js} +3 -3
- package/frontend/dist/js/markdown-core-BK7WVOb7.js +32 -0
- package/frontend/dist/js/{markdown-math-DK846gXU.js → markdown-math-e1ByS3KY.js} +5 -5
- package/frontend/dist/js/{messageCodeStyles-BFNR9Wv6.js → messageCodeStyles-DhVgizF-.js} +2 -2
- package/frontend/dist/js/ms-DZ5pACe1.js +2 -0
- package/frontend/dist/js/nl-BsRsnOVp.js +2 -0
- package/frontend/dist/js/pl-DXSTAW4M.js +2 -0
- package/frontend/dist/js/{postcss-BJ0okz7n.js → postcss-Bg15EcFE.js} +1 -1
- package/frontend/dist/js/pt-DmDx0JxB.js +2 -0
- package/frontend/dist/js/{react-vendor-C5yShNlM.js → react-vendor-BG_HPV6X.js} +1 -1
- package/frontend/dist/js/router-vendor-CbexJIsv.js +1 -0
- package/frontend/dist/js/ru-d2g8EWfY.js +2 -0
- package/frontend/dist/js/{standalone-Csw3jfJ_.js → standalone-BO5pzI8_.js} +3 -3
- package/frontend/dist/js/sv-CIhYUTVQ.js +2 -0
- package/frontend/dist/js/{syntax-highlight-3EEX6CGL.js → syntax-highlight-DcR9Vhb7.js} +3 -3
- package/frontend/dist/js/th-B3wSxanB.js +2 -0
- package/frontend/dist/js/tr-R4UGgPOY.js +2 -0
- package/frontend/dist/js/{typescript-CnF4UVx7.js → typescript-6GJ8APmn.js} +1 -1
- package/frontend/dist/js/ui-CV0LYmkM.js +2 -0
- package/frontend/dist/js/ui-vendor-CWjIBW-z.js +177 -0
- package/frontend/dist/js/uk-BzUF4Vkt.js +2 -0
- package/frontend/dist/js/{useTranslation-Bho4HCyg.js → useTranslation-5b5UhAc9.js} +1 -1
- package/frontend/dist/js/{utils-D9W1Lnkn.js → utils-BGrdX9ie.js} +1 -1
- package/frontend/dist/js/{utils-vendor-DWh39_3x.js → utils-vendor-9bQ62WeD.js} +1 -1
- package/frontend/dist/js/vi-CKc6Fg4h.js +2 -0
- package/frontend/dist/js/{workApi-C3uy9EDT.js → workApi-BruWTlHM.js} +3 -3
- package/frontend/dist/js/{yaml-DzT5hBSH.js → yaml-DUeWcOOH.js} +2 -2
- package/frontend/dist/js/zh-CXL-kDe8.js +2 -0
- package/package.json +2 -2
- package/plugins/openai.json +52 -9
- package/frontend/dist/assets/index-6o-Hc2wS.js +0 -41
- package/frontend/dist/assets/index-D-pM957b.css +0 -1
- package/frontend/dist/js/ArtifactSlideOutPanel-CSFRluWA.js +0 -1
- package/frontend/dist/js/AutomationsPage-KUeWoZNv.js +0 -1
- package/frontend/dist/js/CalendarPage-D9I972w8.js +0 -1
- package/frontend/dist/js/ChatPage-CmBx4oAL.js +0 -16
- package/frontend/dist/js/GalleryPage-bLCrdJN_.js +0 -1
- package/frontend/dist/js/HomePage-Uc6PEg-U.js +0 -1
- package/frontend/dist/js/LibreClawPage-CG63DHg1.js +0 -1
- package/frontend/dist/js/ModelSelector-yxJC64rM.js +0 -1
- package/frontend/dist/js/ModelsPage-1R_TxgmJ.js +0 -2
- package/frontend/dist/js/NotesPage-L65j5HoW.js +0 -1
- package/frontend/dist/js/PersonasPage-CKeBpHIH.js +0 -13
- package/frontend/dist/js/PluginUsagePage-BX1SKMbW.js +0 -1
- package/frontend/dist/js/RichMessageContent-DiySVYGB.js +0 -3
- package/frontend/dist/js/SettingsModal-68SG1uZ2.js +0 -1
- package/frontend/dist/js/SystemPage-CytpZiQV.js +0 -1
- package/frontend/dist/js/UserManagementPage-BzJBvZiS.js +0 -1
- package/frontend/dist/js/WorkPage-C8gr0QJe.js +0 -6
- package/frontend/dist/js/api-BDtqBtqw.js +0 -14
- package/frontend/dist/js/ar-CSpi37Gr.js +0 -2
- package/frontend/dist/js/bn-CyH1BeDD.js +0 -2
- package/frontend/dist/js/chatStore-CHQ2uINS.js +0 -3
- package/frontend/dist/js/cs-Cv2NfRK5.js +0 -2
- package/frontend/dist/js/da-D6D6IvPK.js +0 -2
- package/frontend/dist/js/de-BNoJJTrT.js +0 -2
- package/frontend/dist/js/es-kzo9C7q_.js +0 -2
- package/frontend/dist/js/fr-CjHYvJRp.js +0 -2
- package/frontend/dist/js/hi-BU98AdCQ.js +0 -2
- package/frontend/dist/js/id-CpdedejX.js +0 -2
- package/frontend/dist/js/is-Cp5dDWBH.js +0 -2
- package/frontend/dist/js/it-CuH_cK4U.js +0 -2
- package/frontend/dist/js/ja-BWXXXiHn.js +0 -2
- package/frontend/dist/js/ko-DQgv2M1t.js +0 -2
- package/frontend/dist/js/markdown-core-BmPPZiuD.js +0 -31
- package/frontend/dist/js/ms-DCcRoIcX.js +0 -2
- package/frontend/dist/js/nl-CbKR1_EU.js +0 -2
- package/frontend/dist/js/pl-CRyJZccn.js +0 -2
- package/frontend/dist/js/pt-BXYmHFGH.js +0 -2
- package/frontend/dist/js/router-vendor-DGFGM3EP.js +0 -1
- package/frontend/dist/js/ru-M9SyZG4b.js +0 -2
- package/frontend/dist/js/sv-DJ486LTU.js +0 -2
- package/frontend/dist/js/th-Ch7gKtZv.js +0 -2
- package/frontend/dist/js/tr-ClehWhSC.js +0 -2
- package/frontend/dist/js/ui-CC-K19wO.js +0 -2
- package/frontend/dist/js/ui-vendor-B1UgO3vd.js +0 -177
- package/frontend/dist/js/uk-BqAd5zHF.js +0 -2
- package/frontend/dist/js/vi-D9gjlDVB.js +0 -2
- package/frontend/dist/js/zh-DKTyHkiR.js +0 -2
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/api-BDtqBtqw.js","js/rolldown-runtime-hePW80VL.js","js/logger-DSXjF4ye.js","js/config-DSOYQ9a3.js","js/workApi-C3uy9EDT.js","js/router-vendor-DGFGM3EP.js","js/markdown-core-BmPPZiuD.js","js/utils-vendor-DWh39_3x.js","js/authStore-DbMdvNgJ.js","js/appStore-0JnCUlEq.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{i as e}from"./router-vendor-DGFGM3EP.js";import{t}from"./i18next-DgmgtwsV.js";import{d as n,i as r,l as i}from"./utils-D9W1Lnkn.js";import{Rn as a}from"./ui-vendor-B1UgO3vd.js";import{o}from"./utils-vendor-DWh39_3x.js";import{t as s}from"./logger-DSXjF4ye.js";import{E as c,c as l,d as u,h as ee,u as d}from"./api-BDtqBtqw.js";var f={type:`3rdParty`,init(e){n(e.options.react),i(e)}},{slice:p,forEach:m}=[];function h(e){return m.call(p.call(arguments,1),t=>{if(t)for(let n in t)e[n]===void 0&&(e[n]=t[n])}),e}function g(e){return typeof e==`string`&&[/<\s*script.*?>/i,/<\s*\/\s*script\s*>/i,/<\s*img.*?on\w+\s*=/i,/<\s*\w+\s*on\w+\s*=.*?>/i,/javascript\s*:/i,/vbscript\s*:/i,/expression\s*\(/i,/eval\s*\(/i,/alert\s*\(/i,/document\.cookie/i,/document\.write\s*\(/i,/window\.location/i,/innerHTML/i].some(t=>t.test(e))}var _=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,v=function(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{path:`/`},r=`${e}=${encodeURIComponent(t)}`;if(n.maxAge>0){let e=n.maxAge-0;if(Number.isNaN(e))throw Error(`maxAge should be a Number`);r+=`; Max-Age=${Math.floor(e)}`}if(n.domain){if(!_.test(n.domain))throw TypeError(`option domain is invalid`);r+=`; Domain=${n.domain}`}if(n.path){if(!_.test(n.path))throw TypeError(`option path is invalid`);r+=`; Path=${n.path}`}if(n.expires){if(typeof n.expires.toUTCString!=`function`)throw TypeError(`option expires is invalid`);r+=`; Expires=${n.expires.toUTCString()}`}if(n.httpOnly&&(r+=`; HttpOnly`),n.secure&&(r+=`; Secure`),n.sameSite)switch(typeof n.sameSite==`string`?n.sameSite.toLowerCase():n.sameSite){case!0:r+=`; SameSite=Strict`;break;case`lax`:r+=`; SameSite=Lax`;break;case`strict`:r+=`; SameSite=Strict`;break;case`none`:r+=`; SameSite=None`;break;default:throw TypeError(`option sameSite is invalid`)}return n.partitioned&&(r+=`; Partitioned`),r},y={create(e,t,n,r){let i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:`/`,sameSite:`strict`};n&&(i.expires=new Date,i.expires.setTime(i.expires.getTime()+n*60*1e3)),r&&(i.domain=r),document.cookie=v(e,t,i)},read(e){let t=`${e}=`,n=document.cookie.split(`;`);for(let e=0;e<n.length;e++){let r=n[e];for(;r.charAt(0)===` `;)r=r.substring(1,r.length);if(r.indexOf(t)===0)return r.substring(t.length,r.length)}return null},remove(e,t){this.create(e,``,-1,t)}},te={name:`cookie`,lookup(e){let{lookupCookie:t}=e;if(t&&typeof document<`u`)return y.read(t)||void 0},cacheUserLanguage(e,t){let{lookupCookie:n,cookieMinutes:r,cookieDomain:i,cookieOptions:a}=t;n&&typeof document<`u`&&y.create(n,e,r,i,a)}},ne={name:`querystring`,lookup(e){let{lookupQuerystring:t}=e,n;if(typeof window<`u`){let{search:e}=window.location;!window.location.search&&window.location.hash?.indexOf(`?`)>-1&&(e=window.location.hash.substring(window.location.hash.indexOf(`?`)));let r=e.substring(1).split(`&`);for(let e=0;e<r.length;e++){let i=r[e].indexOf(`=`);i>0&&r[e].substring(0,i)===t&&(n=r[e].substring(i+1))}}return n}},re={name:`hash`,lookup(e){let{lookupHash:t,lookupFromHashIndex:n}=e,r;if(typeof window<`u`){let{hash:e}=window.location;if(e&&e.length>2){let i=e.substring(1);if(t){let e=i.split(`&`);for(let n=0;n<e.length;n++){let i=e[n].indexOf(`=`);i>0&&e[n].substring(0,i)===t&&(r=e[n].substring(i+1))}}if(r)return r;if(!r&&n>-1){let t=e.match(/\/([a-zA-Z-]*)/g);return Array.isArray(t)?t[typeof n==`number`?n:0]?.replace(`/`,``):void 0}}}return r}},b=null,x=()=>{if(b!==null)return b;try{if(b=typeof window<`u`&&window.localStorage!==null,!b)return!1;let e=`i18next.translate.boo`;window.localStorage.setItem(e,`foo`),window.localStorage.removeItem(e)}catch{b=!1}return b},ie={name:`localStorage`,lookup(e){let{lookupLocalStorage:t}=e;if(t&&x())return window.localStorage.getItem(t)||void 0},cacheUserLanguage(e,t){let{lookupLocalStorage:n}=t;n&&x()&&window.localStorage.setItem(n,e)}},S=null,C=()=>{if(S!==null)return S;try{if(S=typeof window<`u`&&window.sessionStorage!==null,!S)return!1;let e=`i18next.translate.boo`;window.sessionStorage.setItem(e,`foo`),window.sessionStorage.removeItem(e)}catch{S=!1}return S},ae={name:`sessionStorage`,lookup(e){let{lookupSessionStorage:t}=e;if(t&&C())return window.sessionStorage.getItem(t)||void 0},cacheUserLanguage(e,t){let{lookupSessionStorage:n}=t;n&&C()&&window.sessionStorage.setItem(n,e)}},oe={name:`navigator`,lookup(e){let t=[];if(typeof navigator<`u`){let{languages:e,userLanguage:n,language:r}=navigator;if(e)for(let n=0;n<e.length;n++)t.push(e[n]);n&&t.push(n),r&&t.push(r)}return t.length>0?t:void 0}},se={name:`htmlTag`,lookup(e){let{htmlTag:t}=e,n,r=t||(typeof document<`u`?document.documentElement:null);return r&&typeof r.getAttribute==`function`&&(n=r.getAttribute(`lang`)),n}},ce={name:`path`,lookup(e){let{lookupFromPathIndex:t}=e;if(typeof window>`u`)return;let n=window.location.pathname.match(/\/([a-zA-Z-]*)/g);if(Array.isArray(n))return n[typeof t==`number`?t:0]?.replace(`/`,``)}},le={name:`subdomain`,lookup(e){let{lookupFromSubdomainIndex:t}=e,n=typeof t==`number`?t+1:1,r=typeof window<`u`&&window.location?.hostname?.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i);if(r)return r[n]}},w=!1;try{document.cookie,w=!0}catch{}var T=[`querystring`,`cookie`,`localStorage`,`sessionStorage`,`navigator`,`htmlTag`];w||T.splice(1,1);var ue=()=>({order:T,lookupQuerystring:`lng`,lookupCookie:`i18next`,lookupLocalStorage:`i18nextLng`,lookupSessionStorage:`i18nextLng`,caches:[`localStorage`],excludeCacheFor:[`cimode`],convertDetectedLanguage:e=>e}),E=class{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.type=`languageDetector`,this.detectors={},this.init(e,t)}init(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{languageUtils:{}},t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=e,this.options=h(t,this.options||{},ue()),typeof this.options.convertDetectedLanguage==`string`&&this.options.convertDetectedLanguage.indexOf(`15897`)>-1&&(this.options.convertDetectedLanguage=e=>e.replace(`-`,`_`)),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=n,this.addDetector(te),this.addDetector(ne),this.addDetector(ie),this.addDetector(ae),this.addDetector(oe),this.addDetector(se),this.addDetector(ce),this.addDetector(le),this.addDetector(re)}addDetector(e){return this.detectors[e.name]=e,this}detect(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.order,t=[];return e.forEach(e=>{if(this.detectors[e]){let n=this.detectors[e].lookup(this.options);n&&typeof n==`string`&&(n=[n]),n&&(t=t.concat(n))}}),t=t.filter(e=>e!=null&&!g(e)).map(e=>this.options.convertDetectedLanguage(e)),this.services&&this.services.languageUtils&&this.services.languageUtils.getBestMatchFromCodes?t:t.length>0?t[0]:null}cacheUserLanguage(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.caches;t&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(e)>-1||t.forEach(t=>{this.detectors[t]&&this.detectors[t].cacheUserLanguage(e,this.options)}))}};E.type=`languageDetector`;var D={common:{loading:`Loading...`,save:`Save`,saving:`Saving...`,cancel:`Cancel`,delete:`Delete`,edit:`Edit`,close:`Close`,back:`Back`,next:`Next`,confirm:`Confirm`,error:`Error`,success:`Success`,warning:`Warning`,or:`or`,optional:`optional`,enabled:`Enabled`,disabled:`Disabled`,on:`On`,off:`Off`,yes:`Yes`,no:`No`,search:`Search`,noResults:`No results found`,retry:`Retry`,refresh:`Refresh`,download:`Download`,upload:`Upload`,export:`Export`,import:`Import`,reset:`Reset`,apply:`Apply`,clear:`Clear`,all:`All`,none:`None`,default:`Default`,custom:`Custom`,remove:`Remove`,home:`Home`,more:`More`},brand:{name:`Libre WebUI`,shortName:`Libre`},auth:{login:{title:`Welcome Back`,subtitle:`Sign in to your account to continue`,username:`Username`,usernamePlaceholder:`Enter your username`,password:`Password`,passwordPlaceholder:`Enter your password`,signIn:`Sign In`,signingIn:`Signing in...`,noAccount:`Don't have an account?`,signUpHere:`Sign up here`,loginSuccess:`Login successful!`,loginFailed:`Login failed`,checkCredentials:`Login failed. Please check your credentials.`,approvalPending:`Your account is waiting for administrator approval.`,enterBoth:`Please enter both username and password`,githubSuccess:`GitHub login successful!`,githubFailed:`GitHub authentication failed`,githubVerifyFailed:`Failed to verify GitHub authentication`,verificationFailed:`Security verification failed. Please refresh and try again.`},signup:{title:`Create Account`,subtitle:`Sign up for your new account`,username:`Username`,usernamePlaceholder:`Choose a username`,email:`Email`,emailPlaceholder:`your@email.com`,password:`Password`,passwordPlaceholder:`Choose a password`,confirmPassword:`Confirm Password`,confirmPasswordPlaceholder:`Confirm your password`,createAccount:`Create Account`,creatingAccount:`Creating account...`,hasAccount:`Already have an account?`,signInHere:`Sign in here`,signupSuccess:`Account created successfully!`,approvalPending:`Registration received. An administrator must approve your account.`,awaitingApproval:`Awaiting approval`,awaitingApprovalDescription:`Your account has been created, but an administrator must activate it before you can sign in.`,backToSignIn:`Back to sign in`,signupFailed:`Signup failed`,tryAgain:`Signup failed. Please try again.`,usernameRequired:`Username and password are required`,passwordMismatch:`Passwords do not match`,passwordTooShort:`Password must be at least 6 characters long`},logout:{button:`Log out`,success:`Logged out successfully`},oauth:{continueWith:`Continue with {{provider}}`,connectingTo:`Connecting to {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`},checkingAuth:`Checking authentication...`,welcome:`Welcome`,noEmail:`No email provided`,role:`Role`,id:`ID`,userId:`User ID`,signInDescription:`Sign in with your GitHub account to continue`,signInWithGitHub:`Sign in with GitHub`,jwtActive:`JWT Authentication Active`,jwtDescription:`JWT-based authentication with GitHub OAuth`,github:`GitHub`,provider:`Provider`,tagline:`Your AI stack should answer to you.`,selfHosted:`Self-hosted · Apache 2.0`,highlights:{local:{title:`Local first`,body:`Your conversations and files stay on the machine you run this on.`},providers:{title:`Any provider`,body:`Local models through Ollama, plus the remote providers you choose to add.`},work:{title:`Isolated Work`,body:`Give a model a sandboxed workspace with files, a terminal, and a preview.`}},oidc:{defaultProviderName:`Single sign-on`}},setup:{welcome:{title:`Welcome to Libre WebUI`,subtitle:`Let's Get Started`,description:`Set up your Libre WebUI instance in just a few steps`,createAdmin:`Create Admin Account`,features:{secure:{title:`Secure & Private`,description:`Your conversations stay on your device`},fast:{title:`Fast & Responsive`,description:`Optimized for speed and performance`},openSource:{title:`Open Source`,description:`Free and open source software`}}},admin:{title:`Create Admin Account`,subtitle:`Administrator Setup`,description:`Create the first admin account for your Libre WebUI instance`,usernamePlaceholder:`Enter admin username`,passwordPlaceholder:`Enter password (min 6 characters)`,confirmPlaceholder:`Confirm your password`,creating:`Creating...`,createAdmin:`Create Admin`,success:`Admin account created successfully!`,failed:`Failed to create admin account`,approvalUnexpected:`The initial administrator could not be activated. Please try again.`,fillAllFields:`Please fill in all fields`,note:`This will be the primary administrator account for your Libre WebUI instance`},encryptionKey:{title:`Save Your Encryption Key`,subtitle:`Important: Save This Key`,description:`This encryption key protects your sensitive data. Store it securely - you'll need it if you ever need to restore your database.`,warning:`Warning`,warningText:`If you lose this key and need to restore your database, your encrypted data (API keys, preferences) will be unrecoverable.`,label:`Your Encryption Key`,loading:`Loading...`,copyToClipboard:`Copy to clipboard`,copied:`Encryption key copied to clipboard!`,copyFailed:`Failed to copy key to clipboard`,envNote:`This key is also saved in your backend/.env file as ENCRYPTION_KEY`,acknowledgment:`I have saved my encryption key in a secure location and understand that losing it may result in data loss.`,confirmRequired:`Please confirm that you have saved the encryption key`,continue:`Continue to Libre WebUI`}},chat:{greeting:{morning:`Good morning`,afternoon:`Good afternoon`,evening:`Good evening`,night:`Good night`},followUp:`Follow up`,welcome:{helpToday:`What can I help with today?`,helpTonight:`What can I help with tonight?`,variety:{create:{title:`What should we make?`,subtitle:`Start with a thought, a sketch, or a stubborn problem.`},explore:{title:`Where should we begin?`,subtitle:`Bring the question you keep returning to.`},imagine:{title:`What are you imagining?`,subtitle:`We can shape it together.`},focus:{title:`What deserves your attention?`,subtitle:`Let's make the next step clear.`},untangle:{title:`What's tangled?`,subtitle:`Give me the messy version first.`},momentum:{title:`Ready when you are.`,subtitle:`Pick up an idea, plan, or unfinished thread.`},open:{title:`What's on your mind?`,subtitle:`Small thought or ambitious project. Both work.`},challenge:{title:`What are we solving?`,subtitle:`Tell me what isn't working yet.`},draft:{title:`Let's start somewhere.`,subtitle:`It doesn't have to be polished.`},possibility:{title:`What could this become?`,subtitle:`Show me the raw material.`},unexpected:{title:`Make something unexpected.`,subtitle:`Give me a constraint, a mood, or a half-formed idea.`}}},input:{placeholder:`Send a message`,messagePlaceholder:`Message...`,attachImages:`Attach images`,attachments:`Attachments and advanced features`,sendMessage:`Send message`,stopGeneration:`Stop generation`,menu:{uploadImages:`Upload images`,attachDocument:`Attach document`,attachWebpage:`Attach webpage`,structuredOutput:`Structured output`,attach:`Attach`,documentAttached:`Document attached`,webpageAttached:`Webpage attached`,attachFailed:`Could not attach that`,attachKnowledge:`Attach knowledge`,noCollections:`No collections yet — create one in Settings → Documents`},voiceInput:`Voice input`,voiceStop:`Stop listening`,transcriptionSource:`Speech recognition source`,browserSpeech:`Browser speech service`,providerTranscriptionDisclosure:`Record and send audio to {{provider}} for transcription`,webSearchOn:`Web search on — replies use live results`,webSearchOff:`Search the web for this message`,thinkingOn:`Thinking on ({{level}})`,thinkingOff:`Think before answering`},session:{new:`New Chat`,work:`Work`,chat:`Chat`,private:`Private`,incognito:`Incognito Chat`,privateMode:`Private Mode`,privateDescription:`This conversation won't be saved`,privateTooltip:`Start a private conversation that won't be saved`,deleteConfirm:`Are you sure you want to delete this chat?`,generatingTitle:`Generating title`,noChats:`No chats yet`,createFirst:`Create your first chat above`,chats:`Chats`,renameChat:`Rename chat`,openNewTab:`Open in new tab`,pinChat:`Pin`,unpinChat:`Unpin`,deleteChat:`Delete chat`,archiveChat:`Archive chat`,groups:{pinned:`Pinned`,today:`Today`,yesterday:`Yesterday`,previous7Days:`Previous 7 days`,previous30Days:`Previous 30 days`,older:`Older`},folder:{new:`New folder`,namePlaceholder:`Folder name`,move:`Move to folder`,remove:`Remove from folder`,delete:`Delete folder`,deleteConfirm:`Delete this folder? Chats inside are kept.`}},persona:{applied:`Persona applied`,label:`Persona`,loadFailed:`Failed to load persona details`,removeFailed:`Failed to remove persona`},model:{updated:`Model updated`,noModels:`No models available`,noModelsDescription:`No models available. Make sure Ollama is running and has models installed.`,pullCommand:`ollama pull llama3.2:3b`,noModelsTooltip:`No models available. Please ensure Ollama is running and models are installed.`,selectBeforePrivateChat:`Select an available model before starting private chat`,selectBeforeSending:`Select an available model before sending`},footer:{disclaimer:`LLM can make mistakes - verify important information`,images:`{{count}} image`,images_plural:`{{count}} images`,structuredOutput:`Structured output`},mediaUpload:{dropImagesHere:`Drop images here or`,supportedFormats:`Supports: JPG, PNG, GIF, WebP (max 10MB each)`,browse:`browse`},structuredOutput:{title:`Response Format`,none:`None (Natural Language)`,noneDescription:`Default natural language response`,json:`JSON`,jsonDescription:`Structured JSON format`,list:`List`,listDescription:`Array of items`,summary:`Summary`,summaryDescription:`Document summary with key points`,analysis:`Analysis`,analysisDescription:`Structured analysis with pros/cons`,custom:`Custom Schema`,customDescription:`Define your own JSON schema`,customSchema:`Custom JSON schema`,schemaPreview:`Schema Preview`,applySchema:`Apply Schema`,cancel:`Cancel`,enabled:`Structured output enabled`},controls:{title:`Chat controls`,systemPrompt:`System prompt`,systemPromptPlaceholder:`Instructions that apply only to this chat…`,advancedParams:`Advanced parameters`,advancedParamsDescription:`Overrides for this chat. Empty fields use your global defaults.`,fromModel:`from model`,fromModelHint:`This value comes from the model's own recommended settings.`,contextCapped:`Context capped at {{context}} of the {{trained}} this model was trained for, so it still loads.`,saved:`Chat controls saved`,saveFailed:`Could not save chat controls`,params:{temperature:`Temperature`,topP:`Top P`,topK:`Top K`,minP:`Min P`,maxTokens:`Max tokens`,repeatPenalty:`Repeat penalty`,seed:`Seed`,contextLength:`Context length`},thinking:`Thinking`,thinkingDescription:`How much the model reasons before answering. Models that cannot reason ignore this.`,compaction:`Context compaction`,compactionDescription:`When the server compacts long conversations, this chat can opt out and keep its full history.`,compactionDefault:`Server default`,compactionOff:`Off for this chat`},message:{sources:`Sources`},toasts:{chatCreated:`New chat created`,createFailed:`Failed to create session`,loadFailed:`Failed to load sessions`,chatDeleted:`Chat deleted`,deleteFailed:`Failed to delete chat`,deleteSessionFailed:`Failed to delete session`,historyCleared:`All chat history cleared`,historyClearFailed:`Failed to clear chat history`,titleUpdated:`Chat title updated`,updateFailed:`Failed to update session`,noValidSession:`No valid chat session. Please create or select a chat.`,sessionNotFound:`Session not found or invalid. Please select or create a valid chat session.`,noModelProvider:`No model provider is available`,modelUnavailable:`Selected model "{{model}}" is unavailable from {{provider}}. Reactivate that provider or select another model.`,modelSwitched:`Switched to {{model}} (previous model no longer available)`,modelsLoadFailed:`Failed to load models`,modelUpdated:`Model updated for current chat`,modelUpdateFailed:`Failed to update session model`},documents:{title:`Documents in context`},context:{title:`Context window:`,full:`{{percent}}% full`,tokensUsed:`{{used}} / {{budget}} tokens used`,tokensUsedNoBudget:`{{used}} tokens used`,capped:`capped from {{trained}}`}},sidebar:{navigation:{chat:`Chat`,models:`Models`,personas:`Personas`,imagine:`Imagine`,agents:`Agents`,work:`Work`,settings:`Settings`,usageAnalytics:`Provider Usage`,system:`System`,userManagement:`User Management`,signOut:`Sign Out`,exploreLabel:`Explore`,notes:`Notes`,calendar:`Calendar`,automations:`Automations`},toggleSize:`Toggle sidebar size`,expandSidebar:`Expand sidebar`},user:{menu:{changePicture:`Change Picture`,settings:`Settings`,usageAnalytics:`Provider Usage`,system:`System`,userManagement:`User Management`,logout:`Log out`,pinShortcut:`Pin to sidebar`,unpinShortcut:`Unpin from sidebar`},avatar:{title:`Change Profile Picture`,updated:`Profile picture updated`,updateFailed:`Failed to update profile picture`,saving:`Saving...`,label:`Avatar`,uploadAvatarImage:`Upload avatar image`,dragAndDrop:`Drag and drop an image or click to browse`,chooseImage:`Choose Image`,uploading:`Uploading...`,enterImageUrl:`Or enter image URL`,supportedFormats:`Supports: JPG, PNG, GIF, WebP (max 2MB). Square images work best.`,customAvatar:`Custom avatar image`,clickToChange:`Click to change or remove`,removed:`Avatar removed`,uploaded:`Avatar uploaded successfully`,invalidFile:`Please select a valid image file`,fileTooLarge:`Avatar image size must be less than 2MB`,readFailed:`Failed to read image file`,uploadFailed:`Failed to upload avatar image`},profile:{noEmail:`No email provided`}},settings:JSON.parse(`{"title":"Settings","tabs":{"appearance":"Appearance","model":"Model","systemMessage":"System Message","plugins":"Plugins","search":"Search","generation":"Generation","documents":"Documents","tts":"Speech","imageGen":"Images","data":"Data","shortcuts":"Shortcuts","about":"About","sessions":"Sessions","apiKeys":"API keys"},"appearance":{"title":"Appearance","language":{"title":"Language","description":"Select your preferred language"},"theme":{"title":"Theme","light":"Light","dark":"Dark","amoled":"Pure Black","system":"System"},"accent":{"title":"Accent color","custom":"Custom color","useColor":"Use {{color}} accent","behaviorTitle":"Interface palette","behaviorDescription":"Choose whether the accent stays on controls or adapts the entire light or dark interface.","defaultStyle":"Default","defaultStyleDescription":"Keep the neutral light and dark surfaces.","adaptedStyle":"Adapt to accent","adaptedStyleDescription":"Tint surfaces, borders, and text with your accent."},"chatInterface":{"title":"Chat Interface","showUsername":"Show Username","showUsernameDescription":"Display username in chat messages","followUpSuggestions":"Follow-up suggestions","followUpSuggestionsDescription":"Suggest quick replies after each response","hapticFeedback":"Haptic feedback (Android)","hapticFeedbackDescription":"Use subtle vibration for important mobile actions"},"background":{"title":"Background Image","enable":"Enable background image","enableDescription":"Show custom background with blur effect","blur":"Blur","opacity":"Opacity","upload":"Upload background image","dragDrop":"Drag and drop an image or click to browse","chooseImage":"Choose Image"}},"saveSettings":"Save Settings","model":{"title":"Model Settings","defaultModel":"Default Model","defaultModelDescription":"This model will be used by default for new conversations","selectModel":"Select a model","specializedModels":"Specialized Models","visionModel":"Vision Model","selectVisionModel":"Use the current chat model","visionModelDescription":"Used automatically whenever the outgoing chat context contains images. Choose a model that supports image input.","visionModelUpdateFailed":"Failed to update vision model: {{error}}","visionModelNoProvider":"This vision model has no provider identity. Select an available model.","persona":"Persona","updateAll":"Update All Models","updateAllDescription":"Check for updates and pull latest versions of all installed models","updateAllButton":"Update All","updating":"Updating models...","currentModelInfo":"Current Model Info","name":"Name","size":"Size","family":"Family","format":"Format","status":"Status","statusStarting":"Starting...","statusComplete":"Complete","statusError":"Error","bulkOperations":"Bulk Operations","autoTitle":{"title":"Auto Title Generation","enable":"Enable Auto Title","enableDescription":"Automatically generate titles for new conversations","taskModel":"Task Model","selectTaskModel":"Select task model","taskModelDescription":"Model used for generating conversation titles"},"updatingModel":"Updating {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} of {{total}} models"},"systemMessage":{"title":"System Message","description":"Set a custom system message that will be used for all new conversations.","placeholder":"Enter a system message...","saved":"System message saved","saveFailed":"Failed to save system message"},"plugins":{"title":"Plugins","description":"Manage your installed plugins","providerConnections":"Provider connections","providerConnectionsDescription":"Connect, configure, and inspect model providers through plugins.","providers":"Providers","searchProviders":"Search providers","noProvidersFound":"No providers match your search.","selectProvider":"Select a provider","selectProviderDescription":"Choose a provider to inspect its connection and model catalog.","addNew":"Add New Plugin","upload":"Upload Plugin","addJson":"Add JSON","uploading":"Uploading...","jsonPlaceholder":"Paste plugin JSON configuration...","install":"Install Plugin","noPlugins":"No plugins installed","noPluginsDescription":"Add a plugin to extend functionality","loading":"Loading plugins...","installed":"Installed Plugins","active":"Active Plugins","activeLabel":"Active","inactive":"Inactive","activate":"Activate","deactivate":"Deactivate","models":"models","apiKeySet":"API Key Set","apiKeyConfiguration":"API Key Configuration","apiKeyDescription":"Store a personal API key for {{name}}.","apiKeyEnvAlternative":"Alternatively, set the","environmentVariable":"environment variable","apiKeyConfigured":"API key configured","apiKeyPlaceholder":"Enter your API key...","saveApiKey":"Save API Key","showApiKey":"Show API key","hideApiKey":"Hide API key","configure":"Configure","providerSettings":"Provider settings","status":"Status","defaultEndpoint":"Default endpoint","modelCatalog":"Model catalog","modelCatalogDescription":"Discovered and configured models for this provider and its capabilities.","refreshModels":"Refresh models","noModelsConfigured":"No models are configured for this provider.","modelId":"Model ID","capabilities":"Capabilities","modelCatalogUpdated":"Model catalog updated: {{count}} models.","modelCatalogUnchanged":"Model catalog is already up to date.","modelCatalogNeedsApiKey":"Add a valid API key for this provider to load its live model list.","modelCatalogUnavailable":"Could not load the provider's model list.","modelCatalogRefreshFailed":"Failed to refresh the model catalog","capability":{"chat":"Chat","embedding":"Embedding","image":"Image","speech":"Speech","transcription":"Transcription"},"exportPlugin":"Export plugin","deletePlugin":"Delete plugin","apiKey":{"title":"API Key","placeholder":"Enter API key","save":"Save Key","remove":"Remove Key","configured":"API Key Configured","notConfigured":"API Key Required","saved":"API key saved successfully","removed":"API key removed","saveFailed":"Failed to save API key","removeFailed":"Failed to remove API key","enterKey":"Please enter an API key"},"variables":"Variables"},"generation":{"title":"Generation Options","description":"Configure how the AI generates responses","scopeLabel":"Applies to","scopeAll":"All models","scopeModel":"Only {{model}}","scopeAllHint":"The values every model uses unless it has its own.","scopeModelHint":"Saved for this model alone, and it wins over the values above.","advancedSettings":"Advanced generation settings","advancedSettingsDescription":"Sampling, token limits, context, penalties, and stop sequences","coreParameters":"Core Parameters","temperature":"Temperature","temperatureDescription":"Controls randomness. Lower values are more focused, higher values more creative.","topP":"Top P","topPDescription":"Controls diversity via nucleus sampling. Lower values focus on likely tokens.","topK":"Top K","topKDescription":"Limits token selection to top K most likely. Set to 0 to disable.","minP":"Min P","minPDescription":"Minimum probability threshold for token selection.","generationControl":"Generation Control","maxTokens":"Max Tokens","maxTokensDescription":"Maximum number of tokens to generate in the response.","repeatPenalty":"Repeat Penalty","repeatPenaltyDescription":"Penalizes repeated tokens. Higher values reduce repetition.","contextLength":"Context Length","contextLengthDescription":"Maximum context window size for conversations.","seed":"Seed","optional":"optional","random":"Random","seedDescription":"Set a specific seed for reproducible outputs.","advancedOptions":"Advanced Options","presencePenalty":"Presence Penalty","presencePenaltyDescription":"Penalizes tokens that appear in the context.","frequencyPenalty":"Frequency Penalty","frequencyPenaltyDescription":"Penalizes frequently used tokens.","stopSequences":"Stop Sequences","commaSeparated":"comma separated","stopSequencesDescription":"Custom tokens that will stop generation when encountered.","resetDefaults":"Reset to Defaults","saveOptions":"Save Options","embeddingSettings":"Embedding Settings","enableEmbeddings":"Enable Document Embeddings","thinking":"Thinking","thinkingDescription":"Default reasoning effort for replies. Each chat can override it.","thinkingLevels":{"default":"Model default","defaultWith":"Model default ({{level}})","off":"Off","on":"On","low":"Low","medium":"Medium","high":"High"}},"documents":{"title":"Document Settings","embeddings":{"title":"Embeddings","enable":"Enable document embeddings","model":"Embedding Model","modelDescription":"Select the model used for document embedding","chunkSize":"Chunk Size","chunkSizeInTokens":"(in tokens)","chunkSizeDescription":"Size of text chunks for embedding","chunkOverlap":"Chunk Overlap","chunkOverlapInTokens":"(in tokens)","chunkOverlapDescription":"Overlap between consecutive chunks","similarityThreshold":"Similarity Threshold","similarityDescription":"Minimum similarity score to include results","status":"Embedding Status","statusLabel":"Status","available":"Available","unavailable":"Unavailable","chunksWithEmbeddings":"Chunks with embeddings","coverage":"Coverage","regenerate":"Regenerate Embeddings","regenerating":"Regenerating..."},"collections":{"title":"Knowledge collections","description":"Group documents into collections and attach them to any chat.","namePlaceholder":"Collection name","create":"Create","none":"No collection","deleteConfirm":"Delete this collection? Documents inside are kept.","createFailed":"Failed to create the collection","deleteFailed":"Failed to delete the collection","assignFailed":"Failed to move the document"},"library":{"title":"Uploaded documents","description":"Documents available as chat context. A document uploaded in a chat stays in its own conversation; a document with no chat and no collection joins every conversation.","empty":"No documents uploaded yet.","chatScope":"One chat","everyChatScope":"Every chat","deleteConfirm":"Delete \\"{{name}}\\"? It disappears from every chat.","deleteFailed":"Failed to delete the document"}},"tts":{"title":"Text-to-Speech","description":"Configure text-to-speech settings for reading messages aloud","loadingProviders":"Loading TTS providers...","noProviders":"No TTS Providers","noProvidersDescription":"Configure a plugin with TTS support to enable text-to-speech","enable":"Enable TTS","enableDescription":"Allow text-to-speech for assistant messages","autoPlay":"Auto-play Responses","autoPlayDescription":"Automatically read new assistant messages aloud","streamSentences":"Natural Batched Playback","streamSentencesDescription":"Generate several phrase-aware batches ahead and play them as one continuous response.","voiceConfiguration":"Voice Configuration","model":"TTS Model","modelDescription":"Select the model for text-to-speech generation","voice":"Voice","selectVoice":"Select a voice","voiceDescription":"Choose the voice for text-to-speech","providerDefaultVoice":"This model chooses its default voice unless you provide a reference recording when generating speech.","voiceCloningAvailable":"Voice cloning available","voiceCloningAvailableDescription":"Use Imagine → Audio to create speech from a consented reference recording and exact transcript. You can optionally save the reference as a reusable voice.","savedVoiceOption":"{{name}} (saved voice)","savedVoices":"Saved voices","loadingSavedVoices":"Loading saved voices…","deleteSavedVoice":"Delete saved voice {{name}}","deleteSavedVoiceConfirm":"Delete the saved voice “{{name}}”? Its reference recording and transcript will be removed.","savedVoiceDeleted":"Saved voice deleted","savedVoicePreferenceCleanupFailed":"Saved voice deleted, but Speech settings could not be reset","savedVoiceDeleteFailed":"Failed to delete saved voice","speed":"Speed","speedSlow":"0.5x","speedNormal":"1.0x","speedFast":"2.0x","availableProviders":"Available Providers","models":"models","test":"Test","testing":"Testing...","stop":"Stop"},"imageGen":{"title":"Image Generation","description":"Configure image generation settings and providers","loadingProviders":"Loading image generation providers...","noProviders":"No Image Generation Providers","noProvidersDescription":"Configure a plugin with image generation support","enable":"Enable Image Generation","enableDescription":"Allow AI image generation in conversations","configuration":"Configuration","model":"Model","modelDescription":"Select the model for image generation","size":"Size","sizeDescription":"Resolution of generated images","quality":"Quality","qualityDescription":"Quality level of generated images","style":"Style","styleDescription":"Style preset for generated images","availableProviders":"Available Providers","models":"models"},"data":{"title":"Data Management","export":"Export Data","exportDescription":"Download a portable archive of preferences, chat folders, sessions and messages, Notes, knowledge collections, and extracted document text.","archiveScopeV3":"Includes preferences, chats, folders, Notes, knowledge collections, and extracted document text. Excludes accounts and secrets, biometric cloned voices, generated media, personas and memory, and Work data or volumes.","exportAll":"Export Portable Archive","import":"Import Data","importDescription":"Validate and import a Libre WebUI portable archive. Existing records not present in the archive are never deleted.","importData":"Import Data","importing":"Importing...","clearSessions":"Clear Sessions","clearSessionsDescription":"Delete all chat sessions. This action cannot be undone.","clearAll":"Clear All","clearing":"Clearing...","importOptions":"Import Options","importOptionsDescription":"Choose how to handle records with matching IDs. Preferences are merged when duplicates are skipped and replaced when matching records are overwritten.","validatingArchive":"Validating archive and calculating changes…","archiveValidationFailed":"Archive validation failed","preflightReport":"Import preview","preflightIncoming":"{{folders}} folders · {{sessions}} chats · {{messages}} messages · {{notes}} Notes · {{collections}} collections · {{documents}} documents · {{chunks}} chunks","preflightRemappedIds":"{{count}} IDs will be remapped to protect another account's data.","skipDuplicates":"Skip duplicates","overwrite":"Overwrite existing","importResults":"Import Results","preferences":"Preferences","imported":"Imported","failed":"Failed","sessions":"Sessions","sessionFolders":"Session folders","notes":"Notes","knowledgeCollections":"Knowledge collections","importedLabel":"imported","overwrittenLabel":"overwritten","skipped":"skipped","toCreate":"to create","toOverwrite":"to overwrite","toSkip":"to skip","documents":"Documents","warnings":"Warnings","refreshAfterImportFailed":"Data was imported, but some views could not be refreshed. Reload Libre WebUI to see every change.","errors":"Errors","archivedChats":{"title":"Archived chats","empty":"No archived chats","unarchive":"Unarchive"}},"about":{"title":"About","versionLabel":"Version","ollama":{"title":"Ollama Status","version":"Version","healthy":"Healthy","unhealthy":"Unhealthy"},"stats":{"models":"Models","sessions":"Sessions"},"features":{"privacy":{"title":"Privacy First","description":"Your data stays on your device"},"openSource":{"title":"Open Source","description":"Free and open source software"},"localInference":{"title":"Local Inference","description":"Run AI models locally with Ollama"}},"openSourceBy":"Open source by {{company}}","links":{"title":"Links","github":"GitHub","githubDescription":"View source code and contribute","website":"Website","websiteDescription":"Visit our website","documentation":"Documentation","reportIssue":"Report Issues","reportIssueDescription":"Bug reports & feature requests","documentationDescription":"Guides, tutorials and API reference","forgejo":"Forgejo Mirror","forgejoDescription":"Self-hosted Forgejo repository","sponsor":"Sponsor","sponsorDescription":"Help fund the project","star":"Star on GitHub","starDescription":"A star helps others discover the project"},"version":"Version {{version}}","updates":{"checking":"Checking for updates…","upToDate":"You're on the latest version","updateAvailable":"Version {{version}} is available","ahead":"Running ahead of the latest release ({{version}})","checkFailed":"Couldn't check for updates","viewChangelog":"View changelog"}},"groups":{"general":"General","chat":"Chat","media":"Speech & images","connections":"Connections"},"search":{"title":"Web search","description":"Search the web through a self-hosted SearXNG instance. When enabled, the chat composer offers a search toggle and Work tasks with network access can search.","enableLabel":"Enable web search","enableDescription":"Offer web search to chats and Work tasks. Searches run server-side against the configured instance.","urlLabel":"SearXNG URL","urlDescription":"Base URL of the SearXNG instance, reachable from the server. The bundled private deploy stack provides http://searxng:8080.","maxResultsLabel":"Results per search","maxResultsDescription":"How many results feed a reply or tool call, 1-100.","maxResultsInvalid":"Results per search must be between 1 and 100.","safeSearchLabel":"Safe search","safeSearchDescription":"Ask the engine to filter explicit results.","test":"Test connection","testing":"Testing…","testOk":"Search works — {{results}} results returned","testFailed":"Search test failed","save":"Save","saved":"Search settings saved","saveFailed":"Could not save the search settings"},"compaction":{"title":"Context compaction","description":"When a conversation grows past the token threshold, the server summarizes its older messages and keeps only the most recent ones verbatim. Applies to every user on this server.","thresholdLabel":"Token threshold","thresholdDescription":"Estimated context tokens above which older history is summarized, 500-1,000,000.","thresholdInvalid":"Token threshold must be between 500 and 1,000,000.","keepRecentLabel":"Recent messages kept","keepRecentDescription":"How many of the latest messages always stay verbatim, 2-200.","keepRecentInvalid":"Recent messages kept must be between 2 and 200.","modelLabel":"Compaction model","modelDescription":"The model that writes the summaries. The session's own model is used when none is picked.","sessionModelOption":"Use the session's model","promptLabel":"Custom summary prompt","promptPlaceholder":"Leave empty to use the built-in prompt","promptDescription":"The template variables {{previousSummaryVariable}} and {{messagesVariable}} are replaced with the previous summary and the messages being summarized.","saved":"Compaction settings saved","saveFailed":"Could not save the compaction settings","loadFailed":"Could not load the compaction settings"},"sessions":{"title":"Sessions","description":"Everywhere this account is signed in. Signing a session out takes effect immediately; signing in again restores access.","signOutOthers":"Sign out other sessions","signingOutOthers":"Signing out…","signOut":"Sign out","signingOut":"Signing out…","revoked":"Session signed out.","revokeFailed":"The session could not be signed out.","othersRevoked":"Other sessions signed out: {{count}}","loadFailed":"The sessions could not be loaded.","empty":"No sessions found.","current":"This session","revokedBadge":"Signed out","unknownDevice":"Unknown device","createdAt":"Signed in","lastSeenAt":"Last active","expiresAt":"Expires"},"apiKeys":{"title":"API keys","description":"Scoped tokens for scripts and integrations. Each key only has access to the scopes you pick.","newKeyTitle":"Your new API key","copy":"Copy","copied":"Copied to clipboard.","copyFailed":"Copy failed.","showOnceWarning":"Copy it now — it will not be shown again.","dismiss":"Done","createTitle":"Create a key","nameLabel":"Name","namePlaceholder":"e.g. CI pipeline","nameRequired":"Give the key a name.","expiryLabel":"Expires in days (optional)","expiryPlaceholder":"Never","expiryInvalid":"Expiry must be a whole number of days.","scopesLabel":"Scopes","scopesRequired":"Select at least one scope.","create":"Create key","creating":"Creating…","created":"API key created.","createFailed":"The API key could not be created.","revoke":"Revoke","revoking":"Revoking…","revoked":"API key revoked.","revokeFailed":"The API key could not be revoked.","revokedBadge":"Revoked","loadFailed":"The API keys could not be loaded.","empty":"No API keys yet.","createdAt":"Created","lastUsedAt":"Last used","expiresAt":"Expires","neverExpires":"Never"}}`),models:{title:`Models`,subtitle:`Pull, manage, and monitor your Ollama models`,installed:`Installed Models`,available:`Available Models`,pull:`Pull Model`,pulling:`Pulling...`,delete:`Delete Model`,deleting:`Deleting...`,size:`Size`,modified:`Modified`,family:`Family`,parameters:`Parameters`,quantization:`Quantization`,noModels:`No models installed`,pullFirst:`Pull a model to get started`,noModelsFound:`No models found`},personas:{title:`Personas`,create:`Create Persona`,edit:`Edit Persona`,delete:`Delete Persona`,name:`Name`,description:`Description`,systemPrompt:`System Prompt`,model:`Model`,avatar:`Avatar`,background:`Background`,noPersonas:`No personas created`,createFirst:`Create your first persona to customize your chat experience`},gallery:{title:`Gallery`,subtitle:`Your AI-generated images, videos, and audio`,imageCount:`{{count}} images`,generate:`Generate Image`,generateDescription:`Create images with AI`,generating:`Generating...`,prompt:`Prompt`,promptPlaceholder:`Describe the image you want to generate...`,noImages:`No images generated yet`,download:`Download`,delete:`Delete`,regenerate:`Regenerate`,model:`Model`,size:`Size`,quality:`Quality`,created:`Created`},errors:{generic:`An error occurred`,network:`Network error. Please check your connection.`,unauthorized:`You are not authorized to perform this action.`,notFound:`The requested resource was not found.`,serverError:`Server error. Please try again later.`,validation:`Please check your input and try again.`},keyboard:{title:`Keyboard Shortcuts`,toggleSidebar:`Toggle sidebar`,openSettings:`Open settings`,toggleDarkMode:`Toggle dark mode`,showShortcuts:`Show keyboard shortcuts`,closeModals:`Close modals`,groups:{navigation:`Navigation`,general:`General`,chat:`Chat`,workspace:`Workspace`},actions:{sendMessage:`Send message`,newLine:`New line in message`,saveEdit:`Save an edited message`,cancelEdit:`Cancel editing`,saveFile:`Save file`,formatCode:`Format code`},description:`Every keyboard shortcut available in Libre WebUI.`,newChat:`New chat`,newWork:`New Work session`,openPalette:`Open command palette`},modelManager:{title:`Models`,loading:`Loading models...`,systemStatus:{online:`Ollama Online`,offline:`Ollama Offline`,models:`model`,models_plural:`models`,running:`running`,vram:`VRAM`},sections:{pull:`Pull New Model`,library:`Browse Library`,huggingface:`HuggingFace Hub`,running:`Running Models`,local:`Local Models`,advanced:`Advanced Actions`,catalog:`Model Catalog`},catalog:{searchPlaceholder:`Search models by name or provider...`,noModels:`No models are available yet.`,empty:`No models match your search.`,providerOllama:`Ollama`,hidden:`Hidden`,visibilityFailed:`Could not update model visibility.`,filterAll:`All models`,filterLocal:`Local`,filterProviders:`Providers`,filterHidden:`Hidden`,enableAll:`Enable shown`,disableAll:`Disable shown`,rename:`Edit name and picture`,setPicture:`Set picture`,clearPicture:`Remove picture`,pictureInvalid:`Choose an image file.`,pictureTooLarge:`Pictures must be under 192 KB.`,saving:`Saving…`,hide:`Hide from users`,show:`Show to users`},pull:{placeholder:`Enter model name (e.g., llama3.2:3b, deepseek-r1:14b)`,button:`Pull`,cancel:`Cancel`,popular:`Popular models:`,browseAll:`Browse all models on ollama.com`,success:`Model {{name}} pulled successfully`,cancelled:`Model pull cancelled`,failed:`Failed to pull model`,enterName:`Please enter a model name`,restricted:`Model installation is restricted to administrators on this instance.`},progress:{starting:`Initializing...`,pulling:`Downloading model...`,pullingLayer:`pulling`,verifying:`Verifying integrity...`,verifyingDigest:`verifying sha256 digest`,writing:`Writing manifest...`,cleaning:`Cleaning up...`},library:{available:`available`,search:`Search models...`,noResults:`No models found matching your criteria`,installed:`Installed`,more:`+{{count}} more`,refresh:`Refresh Library`},huggingface:{browseAll:`Browse all on HuggingFace`,checkingGguf:`Checking for GGUF files...`,noGgufAvailable:`No GGUF files available for direct Ollama pull`,ggufFilesCount:`GGUF Files ({{count}}) - Pull directly to Ollama`,noModelsFound:`No models found`,noResults:`No models found. Try adjusting your search or filters.`,browseAllLink:`Browse all`,search:`Search HuggingFace models...`,by:`by`,gated:`Gated`,viewOnHF:`View on HuggingFace`,sortDownloads:`Downloads`,sortLikes:`Likes`,sortRecent:`Recent`,taskTextGeneration:`Text Generation`,taskTextToSpeech:`Text to Speech`,taskTextToImage:`Text to Image`,taskSpeechRecognition:`Speech Recognition`,tasks:{textGen:`Text Generation`,tts:`Text to Speech`,image:`Text to Image`,stt:`Speech Recognition`},sort:{downloads:`Most Downloads`,likes:`Most Liked`,recent:`Recently Updated`}},local:{noModels:`No models installed yet`,pullToStart:`Pull a model above to get started`,installed:`installed`,running:`Running`,info:`Info`,copy:`Copy`,delete:`Delete`,deleteConfirm:`Are you sure you want to delete model "{{name}}"?`,deleteSuccess:`Model {{name}} deleted successfully`,deleteFailed:`Failed to delete model`},advanced:{createModel:`Create Model`,fromModelfile:`From Modelfile`,copyModel:`Copy Model`,duplicateExisting:`Duplicate existing`,testEmbeddings:`Test Embeddings`,generateVectors:`Generate vectors`,healthCheck:`Health Check`,testConnection:`Test connection`,healthy:`Ollama is healthy!`},modals:{details:{title:`Model Details`,info:`Model Information`,family:`Family`,parameters:`Parameters`,quantization:`Quantization`,format:`Format`,systemPrompt:`System Prompt`,template:`Template`,license:`License`,modelfile:`Modelfile`,noDetails:`No details available`},copy:{title:`Copy Model`,source:`Source Model`,selectModel:`Select a model...`,newName:`New Model Name`,placeholder:`e.g., my-custom-model`,copying:`Copying...`,button:`Copy Model`,success:`Model copied to {{name}}`,failed:`Failed to copy model`,enterBoth:`Please enter both source and destination names`},create:{title:`Create Custom Model`,name:`Model Name`,namePlaceholder:`e.g., my-assistant`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
|
|
3
|
-
SYSTEM You are a helpful assistant.`,see:`See`,docs:`Modelfile docs`,docsLink:`for syntax reference`,creating:`Creating...`,button:`Create Model`,success:`Model {{name}} created successfully`,failed:`Failed to create model`,enterBoth:`Please enter model name and Modelfile content`},embeddings:{title:`Test Embeddings`,model:`Embedding Model`,selectModel:`Select a model...`,recommended:`Recommended: nomic-embed-text, mxbai-embed-large`,input:`Input Text`,placeholder:`Enter text to generate embeddings for...`,generating:`Generating...`,button:`Generate Embeddings`,result:`Result ({{count}} dimensions)`,success:`Generated {{count}}-dimensional embedding vector`,failed:`Failed to generate embeddings`,enterBoth:`Please select a model and enter text`}}},personaManager:{title:`Personas`,subtitle:`Create and manage AI personas with custom personalities, memories, and behaviors`,loading:`Loading personas...`,createButton:`Create Persona`,importExport:`Import/Export`,stats:{title:`Your Personas`,count:`{{count}} persona created`,count_plural:`{{count}} personas created`},empty:{title:`No personas yet`,description:`Create your first persona to get started with personalized AI interactions`,button:`Create Your First Persona`},deleteConfirm:`Are you sure you want to delete "{{name}}"?`,deleteSuccess:`Persona "{{name}}" deleted successfully`,downloadSuccess:`Persona "{{name}}" downloaded successfully`,failed:`Failed to {{action}} persona`},personaForm:{title:{create:`Create New Persona`,edit:`Edit Persona`},subtitle:{create:`Create a new AI persona with custom personality, memory systems, and adaptive learning capabilities`,edit:`Customize your AI persona with advanced memory, adaptive learning, and intelligent parameters`},loading:`Loading form...`,saved:`Saved`,tabs:{basic:`Basic`,parameters:`Parameters`,memory:`Memory & Learning`,advanced:`Advanced`},basic:{name:`Name`,namePlaceholder:`Enter persona name`,model:`Model`,selectModel:`Select a model`,description:`Description`,descriptionPlaceholder:`Describe your persona...`,systemPrompt:`System Prompt`,systemPromptPlaceholder:`Enter the system prompt that defines your persona behavior...`,systemPromptHint:`The system prompt defines how your persona will behave and respond.`},parameters:{temperature:`Temperature`,temperatureHint:`Controls creativity vs consistency`,topP:`Top-P`,topPHint:`Controls response diversity`,topK:`Top-K`,topKHint:`Limits vocabulary to top-k tokens`,contextWindow:`Context Window`,contextWindowHint:`Maximum conversation history length`,maxTokens:`Max Tokens`,maxTokensHint:`Maximum response length`,repeatPenalty:`Repeat Penalty`,repeatPenaltyHint:`Reduces repetitive responses`},memory:{title:`Memory System`,subtitle:`Persona remembers conversations over time`,enableHint:`Enable the memory system to let your persona remember conversations and build context over time.`,loading:`Loading memory status...`,noData:`No memory data yet`,memories:`Memories`,mbUsed:`MB Used`,lastBackup:`Last Backup`,never:`Never`,maxMemories:`Maximum Memories`,maxMemoriesHint:`How many memories this persona can store`,retention:`Memory Retention`,retentionHint:`Days to keep memories before cleanup`,autoCleanup:`Auto-cleanup old memories`,wipeAll:`Wipe All Memories`,wipeCannot:`This cannot be undone`,wipeButton:`Wipe`,wiping:`Wiping...`,wipeConfirm:`Are you sure you want to wipe all memories? This cannot be undone.`,wipeSuccess:`Wiped {{count}} memories`},learning:{title:`Adaptive Learning`,subtitle:`Persona evolves based on interactions`,enableHint:`Enable adaptive learning to let your persona evolve and personalize responses based on your interactions.`,speed:`Learning Speed`,slow:`Slow`,slowDesc:`Gradual changes`,balanced:`Balanced`,balancedDesc:`Moderate pace`,fast:`Fast`,fastDesc:`Quick adaptation`,autoAdapt:`Auto-adapt to user preferences`,whatLearns:`What the persona learns:`,conversationTone:`Conversation tone`,responseStyle:`Response style`,userPreferences:`User preferences`,topicInterests:`Topic interests`},advanced:{embeddingModel:`Embedding Model`,embeddingHint:`Select the model used for memory encoding and semantic search. Embedding models are shown first, followed by other available models.`,noModels:`No models found`,embeddingModels:`Embedding Models`,otherModels:`Other Models`,installHint:`Install an embedding model:`,recommended:`Recommended: nomic-embed-text, mxbai-embed-large, bge-m3, snowflake-arctic-embed`,aboutTitle:`About Advanced Settings`,aboutDescription:`The embedding model is used by the memory system to understand semantic meaning and find relevant memories during conversations. Choose a model that matches your use case and available resources.`},actions:{cancel:`Cancel`,save:`Save`,saving:`Saving...`,saveClose:`Save & Close`,create:`Create`},success:{created:`Persona created`,updated:`Persona updated`},error:{saveFailed:`Failed to save`}},personaCard:{enhanced:`Enhanced`,systemPrompt:`System Prompt`,memories:`memories`,use:`Use`,editTooltip:`Edit persona`,downloadTooltip:`Download persona`,backup:`Backup`,exportDNA:`Export DNA`,wipeMemories:`Wipe Memories`,wipeConfirm:`Are you sure you want to wipe all memories for this persona? This action cannot be undone.`,wipeSuccess:`Wiped {{count}} memories`,backupSuccess:`Persona backup downloaded successfully`,dnaSuccess:`Persona DNA exported successfully`,failed:`Failed to {{action}}`},userManager:{title:`User Management`,subtitle:`Manage user accounts and permissions`,pageDescription:`Manage user accounts, permissions, and access controls for your Libre WebUI instance.`,loading:`Loading users...`,createUser:`Create User`,search:`Search users...`,noUsers:`No users found`,noUsersMatching:`No users matching your search`,columns:{user:`User`,email:`Email`,role:`Role`,created:`Created`,actions:`Actions`},roles:{admin:`Admin`,user:`User`},noEmail:`No email`,deleteConfirm:`Are you sure you want to delete user "{{name}}"?`,deleteSuccess:`User deleted successfully`,deleteFailed:`Failed to delete user`,cannotDeleteSelf:`You cannot delete your own account`,approval:{title:`Pending approvals`,description:`Review new registrations before allowing them into this instance.`,registered:`Registered`,activate:`Activate account`,reject:`Reject registration`,approved:`{{name}} can now sign in.`,failed:`The account could not be approved.`,notification:`{{count}} registration(s) are waiting for your approval.`,notificationBadge:`{{count}} pending user approvals`},form:{title:{create:`Create User`,edit:`Edit User`},username:`Username`,usernamePlaceholder:`Enter username`,email:`Email`,emailPlaceholder:`Enter email (optional)`,password:`Password`,passwordPlaceholder:`Enter password`,passwordHint:`Leave blank to keep current password`,role:`Role`,creating:`Creating...`,updating:`Updating...`,createButton:`Create User`,updateButton:`Update User`,createSuccess:`User created successfully`,updateSuccess:`User updated successfully`,createFailed:`Failed to create user`,updateFailed:`Failed to update user`},workAccess:{title:`Work access`,description:`Allow all active users to create and run Work tasks in isolated sandboxes. Administrators always have access; host folder workspaces remain admin-only.`,saved:`Work access updated`,saveFailed:`Could not update Work access`},workPolicies:{title:`Work policies`,description:`Named runtime presets (image, limits, idle stop) a task can be created under. Empty fields inherit the global defaults.`,add:`Add policy`,name:`Name`,image:`Image`,memory:`Memory`,cpu:`CPUs`,pids:`PID limit`,workspaceSize:`Workspace size`,idleMinutes:`Idle stop (minutes)`,networkDefault:`Network default`,networkInherit:`Inherit default`,networkOn:`Enabled`,networkOff:`Disabled`,save:`Save`,cancel:`Cancel`,edit:`Edit policy`,delete:`Delete policy`,deleteConfirm:`Delete this policy? Tasks using it fall back to the global defaults.`,empty:`No policies yet. Tasks use the global runtime defaults.`,saved:`Work policy saved`,deleted:`Work policy deleted`,failed:`Could not save the Work policy`,invalidNumber:`PID limit and idle stop must be numbers.`},modelAccess:{title:`Model downloads`,description:`Allow all active users to pull models from Ollama and the Hugging Face browser. Administrators can always download models.`,saved:`Model download access updated`,saveFailed:`Could not update model download access`},webSearchAccess:{title:`Web search`,description:`Allow all active users to use web search in chats and Work tasks. Administrators can always use it. Configure the engine in Settings > Search.`,saved:`Web search access updated`,saveFailed:`Could not update web search access`},agentAccess:{title:`Agents`,description:`Offer the Agents section (Libre Claw) to administrators. Agent CLIs run on the host as the server user, outside the Work sandbox.`,saved:`Agent access updated`,saveFailed:`Could not update agent access`,lockedByEnv:`Pinned by the AGENT_CLI_MODELS_ENABLED environment variable.`},groups:{title:`Groups`,description:`Group accounts to manage shared access, and inspect what any account can effectively do.`,newGroup:`New group`,nameLabel:`Name`,nameRequired:`Give the group a name.`,descriptionLabel:`Description (optional)`,create:`Create group`,creating:`Creating…`,created:`Group created.`,createFailed:`The group could not be created.`,deleted:`Group deleted.`,deleteFailed:`The group could not be deleted.`,deleteGroup:`Delete group`,loadFailed:`The groups could not be loaded.`,empty:`No groups yet.`,memberCount:`Members: {{count}}`,noMembers:`No members yet.`,addedAt:`Added`,addMember:`Add member`,add:`Add`,selectUser:`Select a user…`,memberAdded:`Member added.`,memberAddFailed:`The member could not be added.`,removeMember:`Remove member`,memberRemoved:`Member removed.`,memberRemoveFailed:`The member could not be removed.`,effectiveTitle:`Effective access`,effectiveDescription:`Pick an account to see the access it ends up with across role, groups, and grants.`,accessLookupFailed:`The effective access could not be loaded.`,roleLabel:`Role`,statusLabel:`Status`,memberOf:`Groups`,featuresLabel:`Feature access`,grantsLabel:`Grants`,grantVia:`via`},audit:{title:`Security audit log`,description:`Recent sign-ins, permission checks, and administrative changes on this instance.`,actionFilter:`Action`,actionPlaceholder:`e.g. auth.login`,resultFilter:`Result`,resultSuccess:`Success`,resultDenied:`Denied`,resultFailure:`Failure`,limitFilter:`Limit`,loadFailed:`The audit log could not be loaded.`,empty:`No audit events recorded yet.`,actor:`Actor`,target:`Target`}},usageAnalytics:{eyebrow:`Administration`,title:`Provider Usage`,description:`Follow outbound API calls and model consumption across the enabled plugins on this instance.`,days:`{{count}} days`,refresh:`Refresh usage`,loadFailed:`Provider usage could not be loaded.`,metrics:{calls:`Calls`,tokens:`Tokens`},cards:{calls:`API calls`,callsDetail:`Across {{count}} active user(s)`,tokens:`Reported tokens`,tokensDetail:`Usage reported on {{count}} call(s)`,success:`Success rate`,successDetail:`{{count}} failed call(s)`,latency:`Average latency`,latencyDetail:`End-to-end provider time`},activity:{title:`Consumption over time`,callsDescription:`Daily outbound requests to enabled plugins`,tokensDescription:`Daily token totals reported by providers`,chartLabel:`Daily provider {{metric}} chart`},models:{title:`Model consumption`,description:`The models carrying the most traffic in this period.`,model:`Model`,success:`Success`,latency:`Latency`},providers:{title:`Enabled plugin traffic`},capabilities:{title:`Capability mix`,characters:`{{count}} characters`,bytes:`{{count}} bytes`,images:`{{count}} images`,jobs:`{{count}} video jobs`,inputs:`{{count}} inputs`,reportedTokens:`{{count}} reported tokens`},empty:{title:`No provider calls yet`,description:`Calls will appear here after an enabled plugin handles chat, Work, embedding, image, speech, sound, or video requests.`},privacyNote:`Usage is metered on the server at the outbound plugin boundary. Libre WebUI stores provider, model, timing, status, and reported counters—never prompts, responses, endpoints, credentials, or provider error bodies. Token totals include only calls where the provider returned usage metadata.`,heatmap:{title:`A year of activity`,description:`Daily provider calls over the past year, colored by each day's most-used model.`,calls:`calls`,noCalls:`No calls`,other:`Other models`,less:`Less`,more:`More`,yearTotal:`{{formatted}} calls in the last year`}},systemPage:{eyebrow:`Administration`,title:`System`,description:`Monitor the machine and runtime hosting this Libre WebUI instance.`,updated:`Updated {{date}}`,refresh:`Refresh system information`,loadFailed:`System information could not be loaded.`,cards:{uptime:`Host uptime`,uptimeDetail:`Running since {{date}}`,memory:`Memory used`,memoryDetail:`{{used}} of {{total}}`,freeSpace:`Free space`,freeSpaceDetail:`{{label}} · {{total}} total`,containers:`Running containers`,containersDetail:`{{total}} container(s) known to Docker`,dockerUnavailable:`Docker unavailable`,unavailable:`Unavailable`},host:{title:`Host & runtime`,description:`Operating system, processor, and Libre WebUI process details.`,container:`Container runtime`,native:`Native runtime`,hostname:`Hostname`,operatingSystem:`Operating system`,processor:`Processor`,logicalCpus:`logical CPUs`,loadAverage:`Load average · 1 / 5 / 15 min`,libreVersion:`Libre WebUI`,nodeVersion:`Node.js`,process:`Process`,workingDirectory:`Working directory`},memory:{title:`Memory`,description:`Runtime-visible system memory and application process usage.`,usedOf:`{{used}} used of {{total}}`,free:`{{value}} free`,processRss:`Process RSS`,heapUsed:`V8 heap used`,heapTotal:`V8 heap total`,external:`External memory`},storage:{title:`Storage`,description:`Available space for the runtime filesystem and persistent application data.`,used:`{{value}} used`,free:`{{value}} free`,empty:`Filesystem information is unavailable in this runtime.`},docker:{title:`Docker`,description:`Read-only Docker Engine status and a reduced list of containers.`,connected:`Connected`,unavailable:`Unavailable`,unavailableDetail:`Docker Engine diagnostics are unavailable.`,socketStatus:`Local socket: {{status}}`,mounted:`mounted`,notMounted:`not mounted`,running:`Running`,stopped:`Stopped`,paused:`Paused`,total:`Total`,version:`Version`,host:`Host`,architecture:`Architecture`,cpus:`CPUs`,memory:`Memory`,container:`Container`,image:`Image`,state:`State`,created:`Created`,empty:`Docker is connected and no containers are currently listed.`},network:{title:`Network`,description:`Runtime-visible interfaces, addresses, and Linux traffic counters.`,internal:`internal`,empty:`No network interfaces are visible to the application runtime.`},securityNote:`This page is restricted to administrators. The server returns operational summaries only: it does not expose environment variables, credentials, Docker labels, mounts, container commands, or inspect payloads. When Libre WebUI runs in a container, host-level CPU and memory details come from Docker Engine when its local socket is available; other values describe the application runtime.`,work:{title:`Work`,description:`Sandboxes across every user`,access:`Access`,accessAdmins:`Administrators only`,accessAllUsers:`All users`,runtimeAvailable:`Available`,runtimeUnavailable:`Unavailable`,activeRuntimes:`Active runtimes`,pendingCleanups:`Pending cleanups`,orphans:`Orphaned containers`,owner:`Owner`,task:`Task`,state:`State`,preview:`Preview`,terminals:`Terminals`,updated:`Updated`,stateRunning:`Running`,stateStopped:`Stopped`,stateStarting:`Starting`,stateUnknown:`Unknown`,noTasks:`No Work tasks yet.`}},chatHistory:{label:`Conversation history`,jumpToTurn:`Jump to turn {{index}} of {{total}}`},chatMessage:{you:`You`,assistant:`Assistant`,system:`System`,conversationSummary:`Conversation summary`,restoreCompacted:`Restore the summarized messages`,restoreFailed:`Could not restore the summarized messages`,copy:`Copy`,copyMessage:`Copy message`,copied:`Copied!`,regenerate:`Regenerate`,regenerateResponse:`Regenerate response`,edit:`Edit`,editSystemMessage:`Edit system message`,saveChanges:`Save changes`,cancelEditing:`Cancel editing`,saveAndSubmit:`Save & submit`,goodResponse:`Good response`,badResponse:`Bad response`,delete:`Delete`,deleteConfirm:`Delete this message?`,branch:`Branch`,speaking:`Speaking...`,speakMessage:`Speak message`,stopSpeaking:`Stop speaking`,showMore:`Show more`,showLess:`Show less`,thinking:`Thinking`,thoughtFor:`Thought for {{duration}}`,hiddenLines:`{{count}} hidden lines`,systemMessagePlaceholder:`Enter your system message...`,fullSizeImage:`Full size image`,startConversation:`Start a conversation`,startConversationDescription:`Send a message to begin chatting with your AI assistant. Ask questions, get help with code, or have a natural conversation.`,scrollToBottom:`Scroll to bottom`,newMessages:`New messages`},imageGallery:{title:`Image Gallery`,noImages:`No images yet`,noImagesHint:`Generate your first image using the panel on the right`,delete:`Delete`,download:`Download`,deleteConfirm:`Are you sure you want to delete this image?`,deleteSuccess:`Image deleted`,deleteFailed:`Failed to delete image`,downloadFailed:`Failed to download image`,loadMore:`Load More ({{current}} of {{total}})`,loadFailed:`Failed to load gallery`},imageGeneration:{title:`Generate Image`,prompt:`Prompt`,promptPlaceholder:`Describe the image you want to create...`,model:`Model`,selectModel:`Select model`,noModels:`No image generation models available`,configurePlugin:`Configure a plugin with image generation support`,size:`Size`,quality:`Quality`,style:`Style`,generate:`Generate`,generating:`Generating...`,success:`Image generated successfully`,failed:`Failed to generate image`,enterPrompt:`Please enter a prompt`,promptTooLong:`Prompt exceeds maximum length of {{max}} characters`},mediaGeneration:{title:`Generate media`,description:`Create video, sound, music, or speech with an activated media provider.`,image:`Image`,video:`Video`,audio:`Audio`,sound:`Sound`,speech:`Speech`,model:`Model`,voice:`Voice or voice ID`,cloneVoice:`Clone a reference voice`,cloneVoiceDescription:`Condition this speech on a reference recording instead of a preset voice.`,referenceAudio:`Reference audio`,referenceTranscript:`Exact reference transcript`,referenceTranscriptPlaceholder:`Enter exactly what is spoken in the reference recording…`,referenceAudioTooLarge:`Reference audio must be {{max}} or smaller.`,cloneConsent:`Only clone a voice when you have the speaker’s permission. The recording is sent to the selected provider for this generation and is not saved by Libre WebUI.`,saveVoiceProfile:`Save as a reusable voice`,saveVoiceProfileDescription:`Store this reference recording and transcript securely. Libre WebUI sends them to the selected provider for every Speech batch that uses this voice.`,voiceProfileName:`Saved voice name`,voiceProfileNamePlaceholder:`For example, My voice`,voiceStorageConsent:`I confirm that I have the speaker’s permission to clone and store this voice. The reference stays saved until I delete it.`,resolution:`Resolution`,aspectRatio:`Aspect ratio`,duration:`Duration`,providerDefault:`Provider default`,generateAudio:`Generate audio with the video when supported`,prompt:`Prompt`,text:`Text to speak`,videoPlaceholder:`Describe the scene, motion, camera, and lighting...`,audioPlaceholder:`Enter the text you want the voice to speak...`,soundPlaceholder:`Describe the sound, music, atmosphere, or spoken response you want...`,generate:`Generate`,generating:`Generating… this can take several minutes`,success:`Media generated and saved to Imagine`,successWithSavedVoice:`Media generated and “{{name}}” is now available in Speech settings`,failed:`Failed to generate media`,loadFailed:`Failed to load media providers`,noModels:`No {{kind}} models are available. Activate a compatible provider and save its credential first.`},mediaGallery:{itemCount:`{{count}} items`,empty:`No generated media yet`,emptyHint:`Generate an image, video, or voice clip and it will appear here.`,filters:{all:`All`,image:`Images`,video:`Videos`,audio:`Audio`}},errorBoundary:{title:`Something went wrong`,description:`We encountered an unexpected error. Please try refreshing the page.`,tryAgain:`Refresh Page`,goHome:`Go to Home`,errorDetails:`Error Details (Development)`},documents:{title:`Documents`,upload:`Upload Document`,uploading:`Uploading...`,noDocuments:`No documents uploaded`,uploadHint:`Upload documents to use in your conversations`,delete:`Delete`,deleteConfirm:`Are you sure you want to delete this document?`,deleteSuccess:`Document deleted`,deleteFailed:`Failed to delete document`,uploadSuccess:`Document uploaded successfully`,uploadFailed:`Failed to upload document`,types:`Supported: PDF, TXT, MD, DOCX`,unsupportedFileType:`Only PDF and TXT files are supported`,fileSizeTooLarge:`File size must be less than 10MB`,uploadSuccessWithName:`Document "{{name}}" uploaded successfully`,removeSuccess:`Document removed successfully`,removeFailed:`Failed to remove document`,removeError:`An error occurred while removing the document`,clickToUpload:`Click to upload`,orDragAndDrop:`or drag and drop`,fileTypesAndSize:`PDF or TXT files up to 10MB`,uploadedDocuments:`Uploaded Documents`,removeDocument:`Remove document`},ttsButton:{speak:`Speak`,stop:`Stop`,speaking:`Speaking...`,generateFailed:`Failed to generate speech`,playbackFailed:`Audio playback failed`,stopSpeaking:`Stop speaking`,preparingSpeech:`Preparing speech...`,generatingSpeech:`Generating speech...`,bufferingSpeech:`Buffering speech...`,enableAudio:`Enable audio and read aloud`,enableAudioShort:`Enable audio`,readAloud:`Read aloud`},artifacts:{title:`Artifacts`,code:`Code`,preview:`Preview`,copy:`Copy code`,copied:`Copied!`,download:`Download`,expand:`Expand`,collapse:`Collapse`,openInNewTab:`Open in new tab`,invalidSvg:`Invalid SVG content`,invalidJson:`Invalid JSON content`,previewMode:`Preview mode`,codeMode:`Code mode`,copyContent:`Copy content`,openInPanel:`Open in panel`,openInNewWindow:`Open in new window`,created:`Created`,closePanelEsc:`Close panel (Esc)`,copyButton:`Copy`,open:`Open`,dragEdgeToResize:`Drag edge to resize`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`,versionOf:`Version {{current}} of {{total}}`,previousVersion:`Previous version`,nextVersion:`Next version`},personaImportExport:{title:`Import & Export Personas`,description:`Export your personas to share them or import personas from others`,exportPersonas:`Export Personas`,importPersonas:`Import Personas`,noPersonasToExport:`No personas to export`,personasAvailable:`{{count}} persona available`,personasAvailable_plural:`{{count}} personas available`,exportAll:`Export All`,uploadJsonFile:`Upload JSON File`,pasteJsonLabel:`Paste JSON Data`,pasteJsonPlaceholder:`Paste persona JSON data here...`,importing:`Importing...`,importButton:`Import Persona(s)`,expectedFormat:`Expected JSON Format:`,exportSuccess:`Persona "{{name}}" exported successfully`,exportFailed:`Failed to export persona`,exportAllSuccess:`All {{count}} personas exported successfully`,exportAllFailed:`Failed to export personas`,pasteJsonData:`Please paste the persona JSON data`,importMultipleSuccess:`Successfully imported {{count}} personas`,importMultipleFailed:`Failed to import {{count}} personas`,importNoneFailed:`Failed to import any personas`,importSuccess:`Persona imported successfully`,importFailed:`Failed to import persona`},generationStats:{details:`Details`,promptTokens:`Prompt tokens:`,generatedTokens:`Generated tokens:`,totalTokens:`Total tokens:`,speed:`Speed:`,promptEval:`Prompt eval:`,generation:`Generation:`,modelLoad:`Model load:`,totalTime:`Total time:`,generatedAt:`Generated at:`},userMenu:{loggedOut:`Logged out successfully`,pictureUpdated:`Profile picture updated`,failedUpdateAvatar:`Failed to update avatar`,failedUpdatePicture:`Failed to update profile picture`,noEmail:`No email provided`,changePicture:`Change Picture`,settings:`Settings`,userManagement:`User Management`,signOut:`Sign Out`,changeProfilePicture:`Change Profile Picture`},pluginManager:{title:`Plugin Manager`,upload:`Upload`,addJson:`Add JSON`,browseHF:`Browse HF Hub`,confirmDelete:`Are you sure you want to delete this plugin?`,uploading:`Uploading plugin...`,pasteJson:`Paste plugin JSON here...`,installPlugin:`Install Plugin`,loading:`Loading plugins...`,noPlugins:`No Plugins Installed`,noPluginsDescription:`Upload a plugin file or add a plugin from JSON to get started.`,active:`Active`,id:`ID`,endpoint:`Endpoint`,activate:`Activate`,deactivate:`Deactivate`,activePlugin:`Active Plugin`,activePluginDescription:`All chat requests will be routed through this plugin`,variables:{title:`Variables`,save:`Save`,saving:`Saving...`,saved:`Variables saved`,saveFailed:`Failed to save variables`,resetDefaults:`Reset to Defaults`,reset:`Variables reset to defaults`,resetFailed:`Failed to reset variables`,sensitiveSet:`Value is set (enter new value to change)`,showValue:`Show {{label}} value`,hideValue:`Hide {{label}} value`,connection:`Connection`,advanced:`Advanced parameters`,inherited:`Use provider default`,inheritedValue:`Use provider default ({{value}})`,enabled:`Enabled`,disabled:`Disabled`,required:`A value is required`,fullApiEndpoint:`Full API endpoint URL`,endpointHelp:`Enter the complete request URL, including its operation path (for example, /v1/chat/completions), not only the provider base URL.`,invalidUrl:`Enter a valid full API endpoint URL, for example https://provider.example/v1/chat/completions`,insecureUrl:`API endpoints must use HTTP or HTTPS.`,httpWarning:`HTTP does not encrypt credentials or traffic. Use it only on a trusted network.`,invalidBaseUrl:`Base URLs cannot contain a query string or fragment.`,invalidApiPath:`Must start with / and contain no URL, query, fragment, or .. segment`,tooLong:`Value is too long`}},huggingface:{title:`HuggingFace Model Browser`,subtitle:`Browse and select models from the Hub`,searchPlaceholder:`Search models...`,filters:`Filters`,task:`Task`,sortBy:`Sort By`,noModels:`No models found`,adjustSearch:`Try adjusting your search or filters`,gated:`Gated`,selected:`Selected`,select:`Select`,refresh:`Refresh`,modelsFound:`models found`},demoMode:{title:`Demo Mode`,github:`GitHub`},libreClaw:{title:`Agents`,subtitle:`Local agent runs, approvals, schedules, memory, tools, and usage.`,dashboard:`Dashboard`,connection:{disconnectedTitle:`Libre Claw daemon is not connected`,disconnectedDescription:`Start it locally with <command>libre-claw start</command> or set <env>LIBRE_CLAW_BASE_URL</env> in the backend environment.`},status:{connected:`Connected`,disconnected:`Disconnected`,activeRuns:`{{count}} active`,activeRuns_plural:`{{count}} active`},states:{queued:`Queued`,running:`Running`,blocked:`Blocked`,done:`Done`,failed:`Failed`,cancelled:`Cancelled`},startRun:{title:`Start Agent Run`,placeholder:`Ask Libre Claw to inspect a repo, fix a bug, run a review, schedule a report...`,chatRun:`Chat run`,goalMode:`Goal mode`,providerOverride:`Provider override`,modelOverride:`Model override`,run:`Run`},modelRoute:{title:`Model Route`,providerPlaceholder:`provider`,modelPlaceholder:`model`,persistGlobal:`Persist to Libre Claw global config`,saveModel:`Save model`,theme:`Libre Claw theme`,saveTheme:`Save theme`},runs:{title:`Runs`,empty:`No Libre Claw runs yet.`},timeline:{title:`Run Timeline`,empty:`Select a run to inspect its events.`,streaming:`Streaming...`,assistantResponse:`Assistant response`,resultOk:`ok`,resultError:`error`,labels:{userMessage:`User message`,toolCall:`Tool call`,toolResult:`Tool result`,approvalRequest:`Approval request`,approvalResponse:`Approval response`,runStarted:`Run started`,runFinished:`Run finished`,usage:`Usage`,error:`Error`}},approvals:{needed:`Approval needed`,allowOnce:`Allow once`,alwaysAllowTool:`Always allow tool`,deny:`Deny`,toolApprovalRequested:`Tool approval requested`},automations:{title:`Automations`,namePlaceholder:`Name`,schedulePlaceholder:`daily 09:00`,promptPlaceholder:`Automation prompt`,create:`Create`,empty:`No scheduled Libre Claw automations.`,runNow:`Run now`,pause:`Pause`,resume:`Resume`,routes:{report:`Report`,telegram:`Telegram`},status:{active:`Active`,paused:`Paused`}},usageFallback:{title:`Usage And Fallback`,usage:`Usage`,fallbackRoute:`Fallback Route`,noUsage:`No usage records yet.`},metrics:{provider:`Provider`,model:`Model`,input:`Input`,output:`Output`,cached:`Cached`,reasoning:`Reasoning`,cost:`Cost`,tool:`Tool`,resolution:`Resolution`,state:`State`,stopReason:`Stop reason`,tokens:`{{formatted}} token`,tokens_plural:`{{formatted}} tokens`},fallbacks:{tool:`tool`,unknown:`unknown`,resolved:`resolved`,unknownError:`Unknown error`},toasts:{loadStatusFailed:`Could not load Libre Claw status`,enterTask:`Enter a task for Libre Claw`,runStarted:`Libre Claw run started`,startRunFailed:`Could not start Libre Claw run`,runCancelled:`Run cancelled`,cancelRunFailed:`Could not cancel run`,approved:`Approved`,denied:`Denied`,resolvePermissionFailed:`Could not resolve permission`,providerModelRequired:`Provider and model are required`,modelUpdated:`Libre Claw model updated`,updateModelFailed:`Could not update model`,themeUpdated:`Libre Claw theme updated`,updateThemeFailed:`Could not update theme`,automationRequired:`Automation name, schedule, and prompt are required`,automationCreated:`Automation created`,createAutomationFailed:`Could not create automation`,automationUpdated:`Automation updated`,updateAutomationFailed:`Could not update automation`}},work:{title:`Work`,subtitle:`Isolated model workspaces`,tasks:{title:`Work tasks`,subtitle:`Persistent local workspaces`,new:`New task`,emptyTitle:`No Work tasks yet`,empty:`Your Work tasks will appear here after you send the first message.`,untitled:`Untitled task`,actions:`Task actions`,delete:`Delete task`,deleteNamed:`Delete {{title}}`,deleteConfirm:`Delete “{{title}}” and its workspace permanently?`,close:`Close Work tasks`,open:`Open Work tasks`,rename:`Task title`,loading:`Loading task…`,notFound:`This Work task is unavailable`,back:`Start a new task`,status:`Status: {{status}}`},landing:{title:`Start a new Work task`,description:`Give a local or configured provider model a durable, isolated workspace. It can inspect files, run tools, and continue where it left off when you return.`,isolated:`Isolated`,isolatedBody:`Every task gets its own container and files.`,durable:`Durable`,durableBody:`Return to its conversation and workspace later.`,controlled:`Controlled`,controlledBody:`The runtime and task files stay isolated from the host.`},composer:{placeholder:`Describe what you want to build or change…`,model:`Work model`,noModels:`No Work-compatible models`,cancel:`Stop`,send:`Run`,hint:`Each task keeps its own files and history. Review model output before using it.`,remoteTitle:`Remote provider`,remoteHint:`Conversation and tool output are sent to the configured service. One autonomous run can make multiple provider calls and may incur charges. Workspace files stay local unless a tool returns their contents.`,remoteDismiss:`Dismiss`,remoteDismissLabel:`Dismiss remote provider notice`,remoteDismissFailed:`Could not save the remote provider preference.`,noModelSelected:`No Work-compatible model is selected.`},conversation:{ready:`Workspace ready`,empty:`Continue the task below. This conversation and its files stay attached to this workspace.`,loadOlder:`Load older messages`},status:{preparing:`Preparing isolated workspace…`,running:`Working in the local workspace…`},statusLabels:{idle:`Idle`,thinking:`Thinking`,complete:`Complete`,needsInput:`Needs input`,error:`Error`},live:{connecting:`Connecting to live updates…`,reconnecting:`Reconnecting to live updates…`,unavailable:`Live updates unavailable`,newActivity:`New activity`,skillsLoaded:`Workspace skills · {{count}}`},runtime:{unavailable:`Runtime unavailable`,ready:`Runtime ready`,readyOllama:`Docker ready`,readyPlugin:`Docker + plugin ready`,readyHybrid:`Docker + models ready`,reason:`Docker and an available Ollama or plugin model provider are required.`},workspace:{label:`Workspace views`,files:`Files`,activity:`Activity`,preview:`Preview`,resize:`Resize conversation and workspace`,resizeHint:`Drag to resize. Use arrow keys for precise control. Double-click or press Enter to reset.`,splitSize:`Conversation {{conversation}}%, workspace {{workspace}}%`,terminal:`Terminal`,git:`Git`},files:{discard:`Discard unsaved file changes?`,leaveWithDraft:`Leave this file? Your unsaved edit will remain as a browser draft.`,up:`Parent folder`,back:`Back to files`,empty:`No files in this folder yet.`,select:`Select a file to inspect and edit it.`,editorLabel:`File editor: {{path}}`,format:`Format`,formatted:`Code formatted.`,formatFailed:`Could not format this file.`,formatShortcut:`Format (Shift+Alt+F)`,formatTooLarge:`Formatting is limited to files under 100,000 characters and 4,000 lines.`,formatUnsupported:`Formatting is not available for this file type.`,saveShortcut:`Save (⌘/Ctrl+S)`,highlightPaused:`Live highlighting is paused for large files to keep editing responsive.`,plainTextLarge:`Plain text · large file`,changes:`Changes`,changesSince:`What changed since the last turn`,diffLabel:`Changes since the last turn: {{path}}`,diffFolded:`{{count}} unchanged lines`},activity:{empty:`Commands, file operations, and tool results will appear here.`,toolActivity:`Tool activity`,details:`Details`,kinds:{message:`Message`,toolCall:`Tool call`,toolResult:`Tool result`,error:`Error`}},preview:{command:`Optional start command`,start:`Start preview`,stop:`Stop preview`,open:`Open`,starting:`Starting preview…`,frameTitle:`Workspace preview`,failed:`The preview could not start. Check Activity, then try another command.`,empty:`Start the app inside this workspace to inspect it here.`},mobile:{surface:`Task surface`,conversation:`Conversation`,workspace:`Workspace`},toasts:{runFailed:`Could not start the Work task.`,updateFailed:`Could not update this task.`,renameFailed:`Could not rename this task.`,cancelled:`Work run stopped.`,cancelFailed:`Could not stop the Work run.`,deleteFailed:`Could not delete this Work task.`,saveFailed:`Could not save this file.`,saved:`File saved.`,previewFailed:`Could not start the preview.`,previewStopFailed:`Could not stop the preview.`},terminal:{connecting:`Opening a shell in the sandbox…`,closed:`Terminal session ended.`,failed:`The terminal session could not start.`,reconnect:`Reconnect`,unavailable:`The interactive terminal is not available in this deployment.`,blockedByRun:`The model is using this container. The terminal opens when the turn finishes.`,taskRunning:`Model turn in progress`},policy:{label:`Runtime policy`,default:`Default (global limits)`},git:{actionFailed:`Git action failed.`,blockedByPreview:`Stop the preview before changing Git state.`,blockedByRun:`Git write actions unlock when the model turn finishes.`,branchCreated:`Created {{name}}.`,branchSwitched:`Switched to {{name}}.`,clean:`Working tree is clean.`,commit:`Commit staged changes`,commitMessage:`Commit message`,committed:`Commit created.`,detached:`detached HEAD`,diff:`Diff preview`,diffFailed:`Could not load this diff.`,history:`Local history`,initialize:`Initialize Git`,initializeDescription:`Create a local repository for status, diffs, branches, and commits. No remote credentials are connected.`,initialized:`Git repository initialized.`,loadFailed:`Could not load Git status.`,localOnly:`Local Git only. Push, pull, and pull requests require a separate trusted credential broker.`,newBranch:`New local branch`,noCommits:`No commits yet.`,noDiff:`No textual diff is available yet. Untracked files appear after staging.`,notInitialized:`Git is not initialized`,selectChange:`Select a changed file to inspect its diff.`,selectPath:`Select {{path}}`,stageAll:`Stage all`,stageSelected:`Stage {{count}}`,staged:`Changes staged.`,switchBranch:`Switch local branch`,changes:`Changes`,createBranch:`Create`,filterFiles:`Filter changed files`,noFilterMatches:`No changed files match this filter.`,allChanges:`All changes`,diffTruncated:`This diff is truncated.`,binaryFile:`Binary file, no text diff.`},hostWorkspace:{hint:`Leave blank for an isolated workspace, or point the task at a folder on this machine.`,label:`Workspace folder (optional)`,warning:`The task can read and write this folder directly. Leave blank to use an isolated workspace instead.`}},personaBackground:{label:`Background Image`,uploadBackgroundImage:`Upload background image`,dragAndDrop:`Drag and drop an image or click to browse`,chooseImage:`Choose Image`,uploading:`Uploading...`,enterImageUrl:`Or enter image URL`,supportedFormats:`Supports: JPG, PNG, GIF, WebP (max 5MB). Wide landscape images work best.`,customBackground:`Custom background image`,clickToChange:`Click to change or remove`,removed:`Background removed`,uploaded:`Background uploaded successfully`,invalidFile:`Please select a valid image file`,fileTooLarge:`Background image size must be less than 5MB`,readFailed:`Failed to read image file`,uploadFailed:`Failed to upload background image`},modelSelector:{searchInstalled:`Search installed models...`,searchOllama:`Search Ollama library...`,searchHuggingFace:`Search HuggingFace...`,selectModel:`Select a model`,personas:`Personas`,ollamaModels:`Ollama Models`,pluginModels:`Plugin Models`,actions:`Actions`,installed:`Installed`,use:`Use`,pull:`Pull`,pullRestricted:`Model installation is restricted to administrators on this instance.`,adminOnlyPull:`Admins only`,legacyProvider:`provider not recorded`,providerNotRecorded:`Provider not recorded`,providerUnavailable:`provider unavailable`,reselectProvider:`reselect a provider to pin this model`,unavailable:`unavailable`,unavailableSelections:`Unavailable selections`,agentModels:`Agents`},whatsNew:{title:`What's new`,releaseNotes:`Release notes`,cta:`Okay, let's go`,starAsk:`Enjoying Libre WebUI? Leave a star on GitHub`},notes:{title:`Notes`,new:`New note`,untitled:`Untitled`,empty:`No notes yet`,selectOrCreate:`Select a note or create a new one`,contentPlaceholder:`Write in Markdown…`,saved:`Saved`,saveFailed:`Could not save the note`,createFailed:`Could not create a note`,deleteConfirm:`Delete this note?`,deleteFailed:`Could not delete the note`},calendar:{title:`Calendar`,today:`Today`,month:`Month`,week:`Week`,previous:`Previous`,next:`Next`,newEvent:`New event`,editEvent:`Edit event`,eventTitle:`Title`,titlePlaceholder:`Event title`,date:`Date`,start:`Start`,end:`End`,allDay:`All day`,repeat:`Repeat`,repeatNone:`Does not repeat`,repeatDaily:`Daily`,repeatWeekly:`Weekly`,repeatMonthly:`Monthly`,repeatYearly:`Yearly`,notes:`Notes`,more:`+{{n}} more`,loadFailed:`Failed to load calendar`,saveFailed:`Failed to save event`,deleteFailed:`Failed to delete event`},automations:{title:`Automations`,tab:{automations:`Automations`,runs:`Runs`},newAutomation:`New automation`,editAutomation:`Edit automation`,empty:`No automations yet. Create one to run a task on a schedule.`,loadFailed:`Failed to load automations`,saveFailed:`Failed to save the automation`,actionFailed:`The action failed`,runQueued:`Run started`,status:{active:`Active`,paused:`Paused`},nextRun:`Next run {{when}}`,actions:`Actions`,pause:`Pause`,resume:`Resume`,runNow:`Run now`,openChat:`Open chat`,noRuns:`No runs yet`,deletedAutomation:`Deleted automation`,runHistory:`Run history (last 30 days)`,succeeded:`succeeded`,failed:`failed`,form:{name:`Name`,namePlaceholder:`My automation`,triggers:`Triggers`,addTrigger:`Add trigger`,instructions:`Instructions`,instructionsPlaceholder:`What should run on this schedule?`,model:`Model`,modelAuto:`Auto`,notification:`Notification`,notifyApp:`App`,notifyOff:`Off`,frequency:`Frequency`,time:`Time`,minute:`Minute`,fromHour:`From`,toHour:`To`,weekday:`Weekday`,dayOfMonth:`Day`,month:`Month`},kind:{once:`Once`,hourly:`Hourly`,daily:`Daily`,weekly:`Weekly`,monthly:`Monthly`,yearly:`Yearly`},trigger:{once:`Once on {{when}}`,hourly:`Hourly at :{{minute}}`,daily:`Daily at {{time}}`,weekly:`Weekly on {{day}} at {{time}}`,monthly:`Monthly on day {{day}} at {{time}}`,yearly:`Yearly on {{date}} at {{time}}`},finishedNotification:`{{n}} automation run(s) finished`,templatesTitle:`Templates`,templates:{morningBrief:{name:`Morning brief`,description:`Start the day with headlines and priorities.`},newsDigest:{name:`AI news digest`,description:`Model releases, research, and funding that matter.`},weeklyReview:{name:`Weekly review`,description:`Wrap the week: wins, loose ends, next priorities.`},monthlyReport:{name:`Monthly report`,description:`A status report outline on the first of each month.`}}},home:{active:`active`,continue:`Continue`,start:`Start`,explore:`Explore`},palette:{empty:`No matches.`,placeholder:`Search chats, Work, actions…`,toggleTheme:`Toggle theme`,actions:`Actions`,chats:`Chats`,search:`Search`,settings:`Settings`,work:`Work`},tabs:{actions:`Tab actions`,close:`Close tab`,closeAll:`Close all tabs`,closeOthers:`Close other tabs`,closeRight:`Close tabs to the right`,home:`Home`,label:`Open tabs`,new:`New tab`,newWork:`New Work`,chat:`Chat`,newChat:`New Chat`,work:`Work`}},de={en:{translation:D}},O=[{code:`en`,name:`English`,nativeName:`English`,dir:`ltr`},{code:`ar`,name:`Arabic`,nativeName:`العربية`,dir:`rtl`},{code:`bn`,name:`Bengali`,nativeName:`বাংলা`,dir:`ltr`},{code:`cs`,name:`Czech`,nativeName:`Čeština`,dir:`ltr`},{code:`da`,name:`Danish`,nativeName:`Dansk`,dir:`ltr`},{code:`de`,name:`German`,nativeName:`Deutsch`,dir:`ltr`},{code:`es`,name:`Spanish`,nativeName:`Español`,dir:`ltr`},{code:`fr`,name:`French`,nativeName:`Français`,dir:`ltr`},{code:`hi`,name:`Hindi`,nativeName:`हिन्दी`,dir:`ltr`},{code:`id`,name:`Indonesian`,nativeName:`Bahasa Indonesia`,dir:`ltr`},{code:`is`,name:`Icelandic`,nativeName:`Íslenska`,dir:`ltr`},{code:`it`,name:`Italian`,nativeName:`Italiano`,dir:`ltr`},{code:`ja`,name:`Japanese`,nativeName:`日本語`,dir:`ltr`},{code:`ko`,name:`Korean`,nativeName:`한국어`,dir:`ltr`},{code:`ms`,name:`Malay`,nativeName:`Bahasa Melayu`,dir:`ltr`},{code:`nl`,name:`Dutch`,nativeName:`Nederlands`,dir:`ltr`},{code:`pl`,name:`Polish`,nativeName:`Polski`,dir:`ltr`},{code:`pt`,name:`Portuguese`,nativeName:`Português`,dir:`ltr`},{code:`ru`,name:`Russian`,nativeName:`Русский`,dir:`ltr`},{code:`sv`,name:`Swedish`,nativeName:`Svenska`,dir:`ltr`},{code:`th`,name:`Thai`,nativeName:`ไทย`,dir:`ltr`},{code:`tr`,name:`Turkish`,nativeName:`Türkçe`,dir:`ltr`},{code:`uk`,name:`Ukrainian`,nativeName:`Українська`,dir:`ltr`},{code:`vi`,name:`Vietnamese`,nativeName:`Tiếng Việt`,dir:`ltr`},{code:`zh`,name:`Chinese`,nativeName:`中文`,dir:`ltr`}],fe=[`ar`,`he`,`fa`,`ur`],k=O.map(e=>e.code),pe={en:()=>Promise.resolve(D),ar:()=>e(()=>import(`./ar-CSpi37Gr.js`).then(e=>e.default),[]),bn:()=>e(()=>import(`./bn-CyH1BeDD.js`).then(e=>e.default),[]),cs:()=>e(()=>import(`./cs-Cv2NfRK5.js`).then(e=>e.default),[]),da:()=>e(()=>import(`./da-D6D6IvPK.js`).then(e=>e.default),[]),de:()=>e(()=>import(`./de-BNoJJTrT.js`).then(e=>e.default),[]),es:()=>e(()=>import(`./es-kzo9C7q_.js`).then(e=>e.default),[]),fr:()=>e(()=>import(`./fr-CjHYvJRp.js`).then(e=>e.default),[]),hi:()=>e(()=>import(`./hi-BU98AdCQ.js`).then(e=>e.default),[]),id:()=>e(()=>import(`./id-CpdedejX.js`).then(e=>e.default),[]),is:()=>e(()=>import(`./is-Cp5dDWBH.js`).then(e=>e.default),[]),it:()=>e(()=>import(`./it-CuH_cK4U.js`).then(e=>e.default),[]),ja:()=>e(()=>import(`./ja-BWXXXiHn.js`).then(e=>e.default),[]),ko:()=>e(()=>import(`./ko-DQgv2M1t.js`).then(e=>e.default),[]),ms:()=>e(()=>import(`./ms-DCcRoIcX.js`).then(e=>e.default),[]),nl:()=>e(()=>import(`./nl-CbKR1_EU.js`).then(e=>e.default),[]),pl:()=>e(()=>import(`./pl-CRyJZccn.js`).then(e=>e.default),[]),pt:()=>e(()=>import(`./pt-BXYmHFGH.js`).then(e=>e.default),[]),ru:()=>e(()=>import(`./ru-M9SyZG4b.js`).then(e=>e.default),[]),sv:()=>e(()=>import(`./sv-DJ486LTU.js`).then(e=>e.default),[]),th:()=>e(()=>import(`./th-Ch7gKtZv.js`).then(e=>e.default),[]),tr:()=>e(()=>import(`./tr-ClehWhSC.js`).then(e=>e.default),[]),uk:()=>e(()=>import(`./uk-BqAd5zHF.js`).then(e=>e.default),[]),vi:()=>e(()=>import(`./vi-D9gjlDVB.js`).then(e=>e.default),[]),zh:()=>e(()=>import(`./zh-DKTyHkiR.js`).then(e=>e.default),[])},A=e=>{let t=e?.toLowerCase().split(`-`)[0];return k.includes(t)?t:`en`},j=e=>fe.includes(A(e)),M=e=>{if(typeof document>`u`)return;let t=A(e);document.documentElement.lang=t,document.documentElement.dir=j(t)?`rtl`:`ltr`},me=async e=>{let n=A(e);if(!t.hasResourceBundle(n,`translation`)){let e=await pe[n]();t.addResourceBundle(n,`translation`,e,!0,!0)}return n},he=async e=>{let n=await me(e);return await t.changeLanguage(n),n};if(typeof window<`u`){let e=navigator.language;try{e=window.localStorage.getItem(`i18nextLng`)||e}catch{}M(e),t.on(`languageChanged`,M)}var ge=(async()=>{t.isInitialized||await t.use(E).use(f).init({resources:de,fallbackLng:`en`,supportedLngs:k,nonExplicitSupportedLngs:!0,load:`languageOnly`,debug:!1,interpolation:{escapeValue:!1},detection:{order:[`localStorage`,`navigator`,`htmlTag`],caches:[`localStorage`],lookupLocalStorage:`i18nextLng`}});let e=A(t.language||t.resolvedLanguage);if(e!==`en`)try{await me(e),A(t.language)===e&&await t.changeLanguage(e)}catch{await t.changeLanguage(`en`)}M(t.resolvedLanguage||t.language||`en`)})(),N=t,_e=[`Chat`,`Image`,`Video`,`Audio`,`Speech`,`Transcription`,`Embedding`],ve={chat:`Chat`,completion:`Chat`,embedding:`Embedding`,image:`Image`,audio:`Audio`,stt:`Transcription`,tts:`Speech`,video:`Video`},ye={completion:`Chat`,embedding:`Embedding`,image:`Image`,audio:`Audio`,stt:`Transcription`,tts:`Speech`,video:`Video`};function P(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,ve[e.type]);for(let t of Object.keys(e.capabilities||{}))n(e.capabilities?.[t]?.model_map,ye[t]);return Array.from(t,([e,t])=>({id:e,capabilities:_e.filter(e=>t.has(e))}))}function be(e){return e.type===`chat`||e.type===`completion`}var xe=[`dall-e`,`embed`,`gpt-image`,`moderation`,`rerank`,`sora`,`stable-diffusion`,`text-to-speech`,`tts`,`whisper`];function Se(e){let t=e.toLocaleLowerCase();return!xe.some(e=>t.includes(e))}function Ce(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())&&Se(e))}function we(e,t){let n=t.trim().toLocaleLowerCase();return!n||[e.name,e.id,e.type,...P(e).map(e=>e.id)].some(e=>e?.toLocaleLowerCase().includes(n))}var F=(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 Te(e){return{...e,id:e.id||r(),timestamp:Date.now()}}function I(e,t){return e.currentSession?.isPrivate&&e.currentSession?.id===t}function L(e,t){return e.sessions.some(e=>e.id===t)}function Ee(e,t){return!!e.currentSession&&(I(e,t)||L(e,e.currentSession.id))}function De(e,t,n){if(I(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:{...t,isActive:!1,branchIndex:t.branchIndex??0,siblingCount:(n.branchIndex||0)+1})}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 Oe(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 ke(e,t,n,r,i,a,o){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,thinking:o,statistics:i,...a?{providerMetadata:a}:{}}:e),updatedAt:Date.now()}};let s=e.sessions.map(e=>e.id===t?{...e,messages:e.messages.map(e=>e.id===n?{...e,content:r,thinking:o,statistics:i,...a?{providerMetadata:a}:{}}:e),updatedAt:Date.now()}:e);return{sessions:s,currentSession:e.currentSession?.id===t&&s.find(e=>e.id===t)||e.currentSession}}function R(e){return e.reduce((e,t)=>(e[t.id]=t,e),{})}function Ae(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 je(e){return e.filter(e=>e.active&&e.type!==`tts`&&e.type!==`image`).flatMap(e=>Ce(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,...e.model_context?.[t]?{contextLength:e.model_context[t]}:{},...e.model_reasoning?.[t]===void 0?{}:{reasoningSupport:e.model_reasoning[t]}})))}var z=`persona:`,B=`plugin:`,V=`ollama:`,H=`legacy:`,U=`agent:`,W=e=>{try{return decodeURIComponent(e)}catch{return null}};function G(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.agentId||e.name}:{model:e.name,providerType:`ollama`,providerId:null}}function K(e){return e.providerType?e.providerType===`plugin`&&e.providerId?`${B}${encodeURIComponent(e.providerId)}:${encodeURIComponent(e.model)}`:e.providerType===`agent`&&e.providerId?`${U}${encodeURIComponent(e.providerId)}:${encodeURIComponent(e.model)}`:e.providerType===`ollama`&&e.model.startsWith(z)?`${z}${encodeURIComponent(e.model.slice(8))}`:e.providerType===`ollama`?`${V}${encodeURIComponent(e.model)}`:`${H}${encodeURIComponent(e.model)}`:`${H}${encodeURIComponent(e.model)}`}function q(e){return K(G(e))}function Me(e){if(e.startsWith(z)){let t=W(e.slice(8));return t===null?null:{model:`${z}${t}`,providerType:`ollama`,providerId:null}}if(e.startsWith(B)){let t=e.slice(7),n=t.indexOf(`:`);if(n<1)return null;let r=W(t.slice(0,n)),i=W(t.slice(n+1));return r&&i?{model:i,providerType:`plugin`,providerId:r}:null}if(e.startsWith(U)){let t=e.slice(6),n=t.indexOf(`:`);if(n<1)return null;let r=W(t.slice(0,n)),i=W(t.slice(n+1));return r&&i?{model:i,providerType:`agent`,providerId:r}:null}if(e.startsWith(V)){let t=W(e.slice(7));return t?{model:t,providerType:`ollama`,providerId:null}:null}if(e.startsWith(H)){let t=W(e.slice(7));return t?{model:t,providerType:null,providerId:null}:null}return null}function J(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(z)?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 Ne(e,t){if(!t.providerType)return K(t);let n=J(e,t);return n?q(n):K(t)}function Pe(e,t){let n=e.find(e=>q(e)===t);return n?G(n):Me(t)}function Fe(e){return!e.isPlugin&&!e.isPersona&&!e.isAgent&&!e.isLegacySelection&&!e.isUnavailable}function Ie(e,t){return t.model?!!J(e.filter(e=>!e.isLegacySelection&&!e.isUnavailable),t):!1}function Le(e,t){if(!t.model)return e;if(!t.providerType){if(e.some(e=>e.isLegacySelection&&e.name===t.model))return e;let n=!!J(e,t);return[...e,{name:t.model,model:t.model,size:0,digest:``,modified_at:``,details:{},isLegacySelection:!0,isUnavailable:!n}]}if(J(e,t))return e;let n=t.providerType,r=n===`ollama`&&t.model.startsWith(z),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`,agentId:n===`agent`&&t.providerId||void 0,isPersona:r,personaName:r?t.model.slice(8):void 0,isUnavailable:!0}]}function Y(e){return e.isPlugin&&e.pluginId?`${e.pluginId}/${e.name}`:e.name}var Re=4,ze=10,X=`[Conversation summary] `,Z=e=>e.startsWith(X),Be=/[\u1100-\u11FF\u2E80-\uA4CF\uAC00-\uD7AF\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFFEF]/g,Ve=768,Q=e=>{if(!e)return 0;let t=e.match(Be)?.length??0;return t+Math.ceil((e.length-t)/4)},He=e=>Re+Q(e.content)+Q(e.thinking)+(e.images?.length??0)*Ve;function Ue({model:e,sessionOptions:t,pinnedOptions:n,modelDefaults:r,globalOptions:i}){if(!(!e||e.isAgent))return e.isPlugin?e.contextLength:[t?.num_ctx,n?.num_ctx,r?.num_ctx,i?.num_ctx].find(e=>typeof e==`number`&&e>0)}function We(e,t=ze){let n=e.filter(e=>e.isActive!==!1),r=n.filter(e=>e.role===`system`),i=n.filter(e=>e.role!==`system`).slice(-Math.max(1,t)),a=i.findIndex(e=>e.role===`user`);return[...r,...a>=0?i.slice(a):[]]}function Ge(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n.role!==`assistant`||n.isActive===!1)continue;let r=n.statistics?.prompt_eval_count;if(typeof r==`number`)return{tokens:r+(n.statistics?.eval_count??0),index:t}}}function Ke({messages:e,budget:t,systemPrompt:n,windowMessages:r}){let i=!!n?.trim(),a=We(e,r).filter(e=>!i||e.role!==`system`||Z(e.content)),o=Ge(e);if(o===void 0){let e=Q(n)+a.reduce((e,t)=>e+He(t),0);return{used:e,budget:t,ratio:t?e/t:void 0,measured:!1}}let s=0;for(let t=o.index+1;t<e.length;t+=1){let n=e[t];n.isActive!==!1&&(s+=He(n))}let c=o.tokens+s;return{used:c,budget:t,ratio:t?c/t:void 0,measured:!0}}function qe(e,t){try{return new Intl.NumberFormat(t,{notation:`compact`,maximumFractionDigits:1}).format(e)}catch{return String(e)}}var $=s(`chat-store`),Je=o((t,n)=>({sessions:[],currentSession:null,setCurrentSession:e=>{t({currentSession:e})},draftSessionSettings:{},setDraftSessionSettings:e=>{t({draftSessionSettings:e})},createSession:async(e,n,r,i,o)=>{try{t({loading:!0,error:null});let s=e.startsWith(`persona:`),l=await c.createSession(e,n,r,s?null:i,s?null:o);if(l.success&&l.data){let e=l.data;return t(t=>({sessions:[e,...t.sessions],currentSession:e,loading:!1})),a.success(N.t(`chat.toasts.chatCreated`)),e}}catch(e){let n=F(e,N.t(`chat.toasts.createFailed`));t({error:n,loading:!1}),a.error(n)}},loadSessions:async()=>{try{t({loading:!0,error:null});let e=await c.getSessions();e.success&&e.data&&t(t=>{let n=e.data||[],r=n.map(e=>e.id),i=null;return t.currentSession?.isPrivate?i=t.currentSession:t.currentSession&&r.includes(t.currentSession.id)?i=n.find(e=>e.id===t.currentSession.id)||null:n.length>0&&(i=n[0],t.currentSession&&$.warn(`Previous currentSession not found in backend sessions:`,t.currentSession.id)),{sessions:n,currentSession:i,loading:!1}})}catch(e){let n=F(e,N.t(`chat.toasts.loadFailed`));t({error:n,loading:!1}),a.error(n)}},deleteSession:async e=>{try{let n=await c.deleteSession(e);n.success?(t(t=>{let n=t.sessions.filter(t=>t.id!==e),r=t.currentSession?.id===e?n[0]||null:t.currentSession;return $.debug(`Store: Updating state, sessions count:`,n.length),{sessions:n,currentSession:r}}),a.success(N.t(`chat.toasts.chatDeleted`))):($.error(`Store: deleteSession failed:`,n),a.error(N.t(`chat.toasts.deleteFailed`)))}catch(e){$.error(`Store: deleteSession error:`,e);let t=F(e,N.t(`chat.toasts.deleteSessionFailed`));a.error(t)}},clearAllSessions:async()=>{try{t({loading:!0,error:null});let e=await c.clearAllSessions();e.success?(t({sessions:[],currentSession:null,loading:!1}),a.success(N.t(`chat.toasts.historyCleared`))):($.error(`Store: clearAllSessions failed:`,e),a.error(N.t(`chat.toasts.historyClearFailed`)),t({loading:!1}))}catch(e){$.error(`Store: clearAllSessions error:`,e);let n=F(e,N.t(`chat.toasts.historyClearFailed`));a.error(n),t({loading:!1})}},clearAllState:()=>{t({sessions:[],currentSession:null,models:[],hiddenModels:[],modelMetadata:{},selectedModel:``,selectedProviderType:null,selectedProviderId:null,systemMessage:``,loading:!1,error:null})},applySessionTitle:(e,n,r=Date.now())=>{t(t=>({sessions:t.sessions.map(t=>t.id===e?{...t,title:n,updatedAt:r}:t),currentSession:t.currentSession?.id===e?{...t.currentSession,title:n,updatedAt:r}:t.currentSession}))},updateSessionTitle:async(e,t)=>{try{let r=await c.updateSession(e,{title:t});if(r.success&&r.data){let t=r.data.title,i=r.data.updatedAt??Date.now();n().applySessionTitle(e,t,i),a.success(N.t(`chat.toasts.titleUpdated`))}}catch(e){let t=F(e,N.t(`chat.toasts.updateFailed`));a.error(t)}},addMessage:(e,r)=>{let i=n(),o=I(i,e);if(!Ee(i,e)){a.error(N.t(`chat.toasts.noValidSession`)),$.error(`addMessage blocked: currentSession is not valid`,i.currentSession?.id);return}if(!o&&!L(i,e)){a.error(N.t(`chat.toasts.sessionNotFound`)),$.error(`addMessage blocked: sessionId not found in sessions`,e);return}let s=Te(r);t(t=>De(t,e,s))},updateMessage:(e,n,r)=>{t(t=>Oe(t,e,n,r))},removeMessage:(e,n)=>{let r=e=>{let t=e.find(e=>e.id===n),r=e.filter(e=>e.id!==n);if(!t?.parentId)return r;let i=r.filter(e=>e.id===t.parentId||e.parentId===t.parentId),a=i.reduce((e,t)=>!e||(t.branchIndex??0)>(e.branchIndex??0)?t:e,void 0);return r.map(e=>i.some(t=>t.id===e.id)?{...e,isActive:e.id===a?.id,siblingCount:i.length}:e)};t(t=>({sessions:t.sessions.map(t=>t.id===e?{...t,messages:r(t.messages),updatedAt:Date.now()}:t),currentSession:t.currentSession?.id===e?{...t.currentSession,messages:r(t.currentSession.messages),updatedAt:Date.now()}:t.currentSession}))},updateMessageWithStatistics:(e,n,r,i,a,o)=>{t(t=>ke(t,e,n,r,i,a,o))},rateMessage:async(e,r,i)=>{let a=e=>e.map(e=>e.id===r?{...e,rating:i}:e),o=n().currentSession?.isPrivate;if(t(t=>({sessions:t.sessions.map(t=>t.id===e?{...t,messages:a(t.messages)}:t),currentSession:t.currentSession?.id===e?{...t.currentSession,messages:a(t.currentSession.messages)}:t.currentSession})),!o)try{await c.updateMessage(e,r,{rating:i??null})}catch(e){$.error(`Failed to save message rating:`,e)}},folders:[],loadFolders:async()=>{try{let e=await c.getFolders();e.success&&e.data&&t({folders:e.data})}catch(e){$.error(`Failed to load folders:`,e)}},createFolder:async e=>{try{let n=await c.createFolder(e);if(n.success&&n.data){let e=n.data;return t(t=>({folders:[...t.folders,e].sort((e,t)=>e.name.localeCompare(t.name))})),e}}catch(e){$.error(`Failed to create folder:`,e)}},renameFolder:async(e,n)=>{try{let r=await c.renameFolder(e,n);if(r.success&&r.data){let n=r.data;t(t=>({folders:t.folders.map(t=>t.id===e?n:t).sort((e,t)=>e.name.localeCompare(t.name))}))}}catch(e){$.error(`Failed to rename folder:`,e)}},deleteFolder:async e=>{try{(await c.deleteFolder(e)).success&&t(t=>({folders:t.folders.filter(t=>t.id!==e),sessions:t.sessions.map(t=>t.folderId===e?{...t,folderId:null}:t),currentSession:t.currentSession?.folderId===e?{...t.currentSession,folderId:null}:t.currentSession}))}catch(e){$.error(`Failed to delete folder:`,e)}},moveSessionToFolder:async(e,n)=>{t(t=>({sessions:t.sessions.map(t=>t.id===e?{...t,folderId:n}:t),currentSession:t.currentSession?.id===e?{...t.currentSession,folderId:n}:t.currentSession}));try{await c.updateSession(e,{folderId:n})}catch(e){$.error(`Failed to move session to folder:`,e)}},setSessionArchived:async(e,n)=>{t(t=>({sessions:t.sessions.map(t=>t.id===e?{...t,archived:n}:t),currentSession:t.currentSession?.id===e?{...t.currentSession,archived:n}:t.currentSession}));try{await c.updateSession(e,{archived:n})}catch(r){$.error(`Failed to update session archive state:`,r),t(t=>({sessions:t.sessions.map(t=>t.id===e?{...t,archived:!n}:t)}))}},setSessionPinned:async(e,n)=>{t(t=>({sessions:t.sessions.map(t=>t.id===e?{...t,pinned:n}:t),currentSession:t.currentSession?.id===e?{...t.currentSession,pinned:n}:t.currentSession}));try{await c.updateSession(e,{pinned:n})}catch(r){$.error(`Failed to update session pin state:`,r),t(t=>({sessions:t.sessions.map(t=>t.id===e?{...t,pinned:!n}:t)}))}},truncateMessagesFrom:(e,n)=>{let r=e=>{let t=e.findIndex(e=>e.id===n);return t===-1?e:e.slice(0,t)};t(t=>({sessions:t.sessions.map(t=>t.id===e?{...t,messages:r(t.messages),updatedAt:Date.now()}:t),currentSession:t.currentSession?.id===e?{...t.currentSession,messages:r(t.currentSession.messages),updatedAt:Date.now()}:t.currentSession}))},models:[],hiddenModels:[],setHiddenModels:e=>t({hiddenModels:e}),modelMetadata:{},ollamaConnected:!1,loadModels:async r=>{let i=r?.quiet===!0;try{i||t({loading:!0,error:null}),$.debug(`Loading models from API...`);let r=[],o;try{let e=await ee.getModels();e.success&&e.data?(r=[...e.data],$.debug(`Ollama models loaded:`,e.data.length)):o=Error(e.error||e.message||`Ollama models are unavailable.`)}catch(e){o=e,$.warn(`Ollama models are unavailable; continuing with plugin models:`,e)}try{let e=await d.getAllPlugins();if(e.success&&e.data){let t=e.data.filter(e=>e.active&&e.type!==`tts`&&e.type!==`image`);$.debug(`🔌 Active plugins found:`,t.map(e=>e.name));let n=je(t);r.push(...n),$.debug(`Plugin models added:`,n.length)}}catch(e){$.error(`❌ Failed to load plugin models:`,e),e instanceof Error&&$.error(`❌ Plugin error details:`,{message:e.message,response:e.response?.data,status:e.response?.status,url:e.config?.url})}try{let{agentCliApi:t}=await e(async()=>{let{agentCliApi:e}=await import(`./api-BDtqBtqw.js`).then(e=>e.t);return{agentCliApi:e}},__vite__mapDeps([0,1,2,3,4,5,6,7])),n=await t.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,agentId:e.agentId}));r.push(...e),$.debug(`Agent CLI models added:`,e.length)}}catch(e){$.warn(`Agent CLI models unavailable:`,e)}let s=r.length;try{let{personaApi:n}=await e(async()=>{let{personaApi:e}=await import(`./api-BDtqBtqw.js`).then(e=>e.t);return{personaApi:e}},__vite__mapDeps([0,1,2,3,4,5,6,7])),i=await n.getPersonas();if(i.success&&i.data){let e=R(i.data),n=Ae(i.data);r.push(...n),t(t=>({...t,personas:e}))}}catch(e){$.error(`❌ Failed to load personas:`,e)}let c=[],u=[],f={};try{let e=await ee.getModelVisibility();e.success&&e.data&&(c=e.data.hidden??[],u=e.data.order??[],f=e.data.metadata??{})}catch(e){$.warn(`Model visibility unavailable; showing all models:`,e)}try{let{useAuthStore:t}=await e(async()=>{let{useAuthStore:e}=await import(`./authStore-DbMdvNgJ.js`).then(e=>e.t);return{useAuthStore:e}},__vite__mapDeps([8,1,5,6,7,2,4,3,0,9])),n=t.getState();if(!(n.isAdmin()||n.systemInfo?.requiresAuth===!1)&&c.length>0){let e=new Set(c);r=r.filter(t=>!e.has(Y(t)))}}catch(e){$.warn(`Could not resolve viewer role for model list:`,e)}if(u.length>0){let e=new Map(u.map((e,t)=>[e,t]));r=[...r].sort((t,n)=>(e.get(Y(t))??2**53-1)-(e.get(Y(n))??2**53-1))}t({hiddenModels:c,modelMetadata:f}),$.debug(`Total models loaded:`,r.length);let p=s===0&&o?F(o,N.t(`chat.toasts.noModelProvider`)):null,m=n(),h=m.selectedModel,g={model:h,providerType:m.selectedProviderType,providerId:m.selectedProviderId},_=!!J(r,g),v=m.selectedProviderType===`ollama`||m.selectedProviderType===`plugin`;if(h&&!_&&v){let e=m.selectedProviderType===`plugin`?m.selectedProviderId||`plugin`:`Ollama`,n=N.t(`chat.toasts.modelUnavailable`,{model:h,provider:e});t({models:r,ollamaConnected:!o,loading:!1,error:n}),i||a.error(n);return}if(h&&!_&&r.length>0){let e=G(r[0]);$.debug(`⚠️ Legacy selected model "${h}" no longer available, falling back to "${e.model}"`),t({models:r,ollamaConnected:!o,loading:!1,selectedModel:e.model,selectedProviderType:e.providerType||null,selectedProviderId:e.providerId||null,error:p}),l.setDefaultModel(e.model,e.providerType,e.providerId).catch(e=>{$.warn(`Failed to save fallback default model:`,e)}),a.success(N.t(`chat.toasts.modelSwitched`,{model:e.model}))}else t({models:r,ollamaConnected:!o,loading:!1,error:p});p&&!i&&a.error(p)}catch(e){$.error(`Error loading models:`,e);let n=F(e,N.t(`chat.toasts.modelsLoadFailed`));t({ollamaConnected:!1,error:n,loading:!1}),i||a.error(n)}},contextWindowMessages:10,loadPreferences:async()=>{c.getContextPolicy().then(e=>{e.success&&e.data?.windowMessages&&t({contextWindowMessages:e.data.windowMessages})}).catch(()=>{});try{let e=await l.getPreferences();if(e.success&&e.data){let{defaultModel:n,defaultProviderType:r,defaultProviderId:i,systemMessage:a}=e.data;n&&(t({selectedModel:n,selectedProviderType:r||null,selectedProviderId:r===`plugin`&&i||null}),$.debug(`✅ Loaded default model from backend:`,n)),a!==void 0&&(t({systemMessage:a}),$.debug(`✅ Loaded system message from backend`))}}catch(e){$.warn(`❌ Failed to load preferences from backend:`,e)}},selectedModel:``,selectedProviderType:null,selectedProviderId:null,setSelectedModel:(e,n=null,r=null)=>{let i=(n===`plugin`||n===`agent`)&&r||null;t({selectedModel:e,selectedProviderType:n,selectedProviderId:i}),l.setDefaultModel(e,n,i).catch(e=>{$.warn(`Failed to save default model to backend:`,e)})},updateCurrentSessionModel:async(e,r=null,i=null)=>{let o=n();if(!o.currentSession)throw Error(`No current session to update`);e.startsWith(`persona:`)&&(r=null,i=null);try{let n=await c.updateSession(o.currentSession.id,{model:e,providerType:r,providerId:r===`plugin`||r===`agent`?i:null});n.success&&n.data&&(t(t=>({sessions:t.sessions.map(e=>e.id===t.currentSession?.id?n.data:e),currentSession:n.data,selectedModel:e,selectedProviderType:r,selectedProviderId:(r===`plugin`||r===`agent`)&&i||null})),a.success(N.t(`chat.toasts.modelUpdated`)))}catch(e){let t=F(e,N.t(`chat.toasts.modelUpdateFailed`));throw a.error(t),e}},personas:{},loadPersonas:async()=>{try{t({loading:!0,error:null});let e=await u.getPersonas();if(e.success&&e.data){let n=e.data;t({personas:R(n),loading:!1}),$.debug(`✅ Personas loaded:`,n.length)}}catch(e){let n=F(e,`Failed to load personas`);t({error:n,loading:!1}),$.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:e=>{let r=n();if(t({systemMessage:e}),l.setSystemMessage(e).catch(e=>{$.warn(`Failed to save system message to backend:`,e)}),r.currentSession){let n=r.currentSession.messages.findIndex(e=>e.role===`system`&&!Z(e.content));if(n!==-1){t(t=>{let r=t.sessions.map(r=>{if(r.id===t.currentSession?.id){let t=r.messages.map((t,r)=>r===n&&t.role===`system`?{...t,content:e,timestamp:Date.now()}:t);return{...r,messages:t,updatedAt:Date.now()}}return r});return{sessions:r,currentSession:t.currentSession?r.find(e=>e.id===t.currentSession.id)||t.currentSession:null}});let i=r.currentSession.messages[n];c.updateMessage(r.currentSession.id,i.id,{content:e}).catch(e=>{$.warn(`Failed to sync system message update to backend:`,e)}),$.debug(`✅ Updated system message in current session`)}}},loading:!1,error:null,setError:e=>t({error:e}),generatingTitleForSession:null,setGeneratingTitleForSession:e=>t({generatingTitleForSession:e}),...typeof window<`u`&&{testPluginApi:async()=>{try{$.debug(`🧪 Testing plugin API...`);let e=await d.getAllPlugins();return $.debug(`✅ Plugin API test result:`,e),e}catch(e){return $.error(`❌ Plugin API test failed:`,e),{error:e}}}}}));export{j as C,ge as S,O as T,P as _,Z as a,M as b,q as c,Ne as d,J as f,F as g,Le as h,qe as i,Pe as l,Ie as m,X as n,Ue as o,Fe as p,Ke as r,Y as s,Je as t,G as u,we as v,A as w,he as x,be as y};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var e={common:{loading:`Načítání...`,save:`Uložit`,saving:`Ukládání...`,cancel:`Zrušit`,delete:`Smazat`,edit:`Upravit`,close:`Zavřít`,back:`Zpět`,next:`Další`,confirm:`Potvrdit`,error:`Chyba`,success:`Úspěch`,warning:`Varování`,or:`nebo`,optional:`volitelné`,enabled:`Povoleno`,disabled:`Zakázáno`,on:`Zap.`,off:`Vyp.`,yes:`Ano`,no:`Ne`,search:`Hledat`,noResults:`Žádné výsledky`,retry:`Zkusit znovu`,refresh:`Obnovit`,download:`Stáhnout`,upload:`Nahrát`,export:`Exportovat`,import:`Importovat`,reset:`Resetovat`,apply:`Použít`,clear:`Vymazat`,all:`Vše`,none:`Žádné`,default:`Výchozí`,custom:`Vlastní`,remove:`Odstranit`,home:`Domů`,more:`Více`},brand:{name:`Libre WebUI`,shortName:`Libre`},auth:{login:{title:`Vítejte zpět`,subtitle:`Přihlaste se ke svému účtu a pokračujte`,username:`Uživatelské jméno`,usernamePlaceholder:`Zadejte uživatelské jméno`,password:`Heslo`,passwordPlaceholder:`Zadejte heslo`,signIn:`Přihlásit se`,signingIn:`Přihlašování...`,noAccount:`Nemáte účet?`,signUpHere:`Zaregistrujte se zde`,loginSuccess:`Přihlášení úspěšné!`,loginFailed:`Přihlášení se nezdařilo`,checkCredentials:`Přihlášení se nezdařilo. Zkontrolujte své přihlašovací údaje.`,approvalPending:`Váš účet čeká na schválení správcem.`,enterBoth:`Zadejte uživatelské jméno a heslo`,githubSuccess:`Přihlášení přes GitHub úspěšné!`,githubFailed:`Ověření GitHub se nezdařilo`,githubVerifyFailed:`Nepodařilo se ověřit GitHub autentizaci`,verificationFailed:`Bezpečnostní ověření selhalo. Obnovte stránku a zkuste to znovu.`},signup:{title:`Vytvořit účet`,subtitle:`Zaregistrujte nový účet`,username:`Uživatelské jméno`,usernamePlaceholder:`Zvolte uživatelské jméno`,email:`Email`,emailPlaceholder:`vas@email.cz`,password:`Heslo`,passwordPlaceholder:`Zvolte heslo`,confirmPassword:`Potvrdit heslo`,confirmPasswordPlaceholder:`Potvrďte heslo`,createAccount:`Vytvořit účet`,creatingAccount:`Vytváření účtu...`,hasAccount:`Již máte účet?`,signInHere:`Přihlaste se zde`,signupSuccess:`Účet úspěšně vytvořen!`,approvalPending:`Registrace přijata. Správce musí schválit váš účet.`,awaitingApproval:`Čeká na schválení`,awaitingApprovalDescription:`Váš účet byl vytvořen, ale správce ho musí aktivovat, než se budete moci přihlásit.`,backToSignIn:`Zpět na přihlášení`,signupFailed:`Registrace se nezdařila`,tryAgain:`Registrace se nezdařila. Zkuste to znovu.`,usernameRequired:`Uživatelské jméno a heslo jsou povinné`,passwordMismatch:`Hesla se neshodují`,passwordTooShort:`Heslo musí mít alespoň 6 znaků`},logout:{button:`Odhlásit se`,success:`Úspěšně odhlášeno`},oauth:{continueWith:`Pokračovat s {{provider}}`,connectingTo:`Připojování k {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`},checkingAuth:`Kontrola ověření...`,welcome:`Vítejte`,noEmail:`E-mail nebyl zadán`,role:`Role`,id:`ID`,userId:`ID uživatele`,signInDescription:`Pro pokračování se přihlaste pomocí účtu GitHub`,signInWithGitHub:`Přihlásit se přes GitHub`,jwtActive:`JWT autentizace aktivní`,jwtDescription:`JWT autentizace s GitHub OAuth`,github:`GitHub`,provider:`Poskytovatel`,tagline:`Váš AI stack by měl odpovídat vám.`,selfHosted:`Vlastní hosting · Apache 2.0`,highlights:{local:{title:`Lokální priorita`,body:`Vaše konverzace a soubory zůstávají na počítači, na kterém to spouštíte.`},providers:{title:`Jakýkoliv poskytovatel`,body:`Lokální modely přes Ollama a vzdálení poskytovatelé, které si přidáte.`},work:{title:`Izolovaná práce`,body:`Dejte modelu izolovaný pracovní prostor se soubory, terminálem a náhledem.`}},oidc:{defaultProviderName:`Jednotné přihlášení`}},setup:{welcome:{title:`Vítejte v Libre WebUI`,subtitle:`Začněme`,description:`Nastavte Libre WebUI v několika jednoduchých krocích`,createAdmin:`Vytvořit účet správce`,features:{secure:{title:`Bezpečné a soukromé`,description:`Vaše konverzace zůstávají na vašem zařízení`},fast:{title:`Rychlé a responzivní`,description:`Optimalizováno pro rychlost a výkon`},openSource:{title:`Open source`,description:`Bezplatný software s otevřeným zdrojovým kódem`}}},admin:{title:`Vytvořit účet správce`,subtitle:`Nastavení správce`,description:`Vytvořte první účet správce pro vaši instanci Libre WebUI`,usernamePlaceholder:`Zadejte jméno správce`,passwordPlaceholder:`Zadejte heslo (min. 6 znaků)`,confirmPlaceholder:`Potvrďte heslo`,creating:`Vytváření...`,createAdmin:`Vytvořit správce`,success:`Účet správce úspěšně vytvořen!`,failed:`Nepodařilo se vytvořit účet správce`,approvalUnexpected:`Počátečního správce nebylo možné aktivovat. Zkuste to znovu.`,fillAllFields:`Vyplňte všechna pole`,note:`Toto bude hlavní účet správce pro vaši instanci Libre WebUI`},encryptionKey:{title:`Uložte šifrovací klíč`,subtitle:`Důležité: Uložte tento klíč`,description:`Tento šifrovací klíč chrání vaše citlivá data. Uložte ho bezpečně - budete ho potřebovat, pokud budete někdy muset obnovit databázi.`,warning:`Varování`,warningText:`Pokud tento klíč ztratíte a budete potřebovat obnovit databázi, vaše zašifrovaná data (API klíče, předvolby) budou nenávratně ztracena.`,label:`Váš šifrovací klíč`,loading:`Načítání...`,copyToClipboard:`Kopírovat do schránky`,copied:`Šifrovací klíč zkopírován!`,copyFailed:`Nepodařilo se zkopírovat klíč`,envNote:`Tento klíč je také uložen v souboru backend/.env jako ENCRYPTION_KEY`,acknowledgment:`Uložil jsem šifrovací klíč na bezpečné místo a chápu, že jeho ztráta může vést ke ztrátě dat.`,confirmRequired:`Potvrďte, že jste uložili šifrovací klíč`,continue:`Pokračovat do Libre WebUI`}},chat:{greeting:{morning:`Dobré ráno`,afternoon:`Dobré odpoledne`,evening:`Dobrý večer`,night:`Dobrou noc`},followUp:`Navázat`,welcome:{helpToday:`S čím vám mohu dnes pomoci?`,helpTonight:`S čím vám mohu dnes večer pomoci?`,variety:{create:{title:`Co vytvoříme?`,subtitle:`Začněte myšlenkou, náčrtem nebo zapeklitým problémem.`},explore:{title:`Kde začneme?`,subtitle:`Přineste otázku, ke které se stále vracíte.`},imagine:{title:`Co si představujete?`,subtitle:`Společně tomu můžeme dát tvar.`},focus:{title:`Co si zaslouží vaši pozornost?`,subtitle:`Ujasněme si další krok.`},untangle:{title:`Co je potřeba rozmotat?`,subtitle:`Nejdřív mi ukažte tu neuspořádanou verzi.`},momentum:{title:`Můžeme začít, až budete připraveni.`,subtitle:`Navážeme na nápad, plán nebo rozdělané téma.`},open:{title:`Co máte na mysli?`,subtitle:`Drobná myšlenka nebo ambiciózní projekt. Obojí funguje.`},challenge:{title:`Co řešíme?`,subtitle:`Řekněte mi, co zatím nefunguje.`},draft:{title:`Někde začněme.`,subtitle:`Nemusí to být vybroušené.`},possibility:{title:`Co by z toho mohlo vzniknout?`,subtitle:`Ukažte mi výchozí materiál.`},unexpected:{title:`Vytvořme něco nečekaného.`,subtitle:`Dejte mi omezení, náladu nebo nedokončenou myšlenku.`}}},input:{placeholder:`Odeslat zprávu`,messagePlaceholder:`Zpráva...`,attachImages:`Připojit obrázky`,attachments:`Přílohy a pokročilé funkce`,sendMessage:`Odeslat zprávu`,stopGeneration:`Zastavit generování`,menu:{uploadImages:`Nahrát obrázky`,attachDocument:`Přiložit dokument`,attachWebpage:`Přiložit webovou stránku`,structuredOutput:`Strukturovaný výstup`,attach:`Přiložit`,documentAttached:`Dokument přiložen`,webpageAttached:`Webová stránka přiložena`,attachFailed:`Přiložení se nezdařilo`,attachKnowledge:`Připojit znalosti`,noCollections:`Zatím žádné kolekce — vytvořte ji v Nastavení → Dokumenty`},voiceInput:`Hlasový vstup`,voiceStop:`Zastavit poslech`,transcriptionSource:`Zdroj rozpoznávání řeči`,browserSpeech:`Služba rozpoznávání řeči prohlížeče`,providerTranscriptionDisclosure:`Nahrát a odeslat zvuk službě {{provider}} k přepisu`,webSearchOn:`Vyhledávání zapnuto — odpovědi využívají živé výsledky`,webSearchOff:`Vyhledat tuto zprávu na webu`,thinkingOn:`Přemýšlení zapnuto ({{level}})`,thinkingOff:`Přemýšlet před odpovědí`},session:{new:`Nový chat`,work:`Práce`,chat:`Chat`,private:`Soukromý`,incognito:`Anonymní chat`,privateMode:`Soukromý režim`,privateDescription:`Tato konverzace nebude uložena`,privateTooltip:`Začít soukromou konverzaci, která nebude uložena`,deleteConfirm:`Opravdu chcete smazat tento chat?`,generatingTitle:`Generování titulku`,noChats:`Zatím žádné chaty`,createFirst:`Vytvořte svůj první chat výše`,chats:`Chaty`,renameChat:`Přejmenovat chat`,openNewTab:`Otevřít v nové kartě`,pinChat:`Připnout`,unpinChat:`Odepnout`,deleteChat:`Smazat chat`,archiveChat:`Archivovat chat`,groups:{pinned:`Připnuté`,today:`Dnes`,yesterday:`Včera`,previous7Days:`Posledních 7 dní`,previous30Days:`Posledních 30 dní`,older:`Starší`},folder:{new:`Nová složka`,namePlaceholder:`Název složky`,move:`Přesunout do složky`,remove:`Odebrat ze složky`,delete:`Smazat složku`,deleteConfirm:`Smazat tuto složku? Chaty uvnitř zůstanou.`}},persona:{applied:`Persona použita`,label:`Persona`,loadFailed:`Načtení podrobností persony se nezdařilo`,removeFailed:`Nepodařilo se odebrat personu`},model:{updated:`Model aktualizován`,noModels:`Žádné dostupné modely`,noModelsDescription:`Žádné dostupné modely. Ujistěte se, že Ollama běží a modely jsou nainstalované.`,pullCommand:`ollama pull llama3.2:3b`,noModelsTooltip:`Žádné dostupné modely. Ujistěte se, že Ollama běží a modely jsou nainstalované.`,selectBeforePrivateChat:`Před zahájením soukromého chatu vyberte dostupný model`,selectBeforeSending:`Před odesláním vyberte dostupný model`},footer:{disclaimer:`LLM může dělat chyby - ověřujte důležité informace`,images:`{{count}} obrázek`,images_plural:`{{count}} obrázků`,structuredOutput:`Strukturovaný výstup`},mediaUpload:{dropImagesHere:`Přetáhněte obrázky sem nebo`,supportedFormats:`Podporované: JPG, PNG, GIF, WebP (max 10MB každý)`,browse:`procházet`},structuredOutput:{title:`Formát odpovědi`,none:`Žádný (přirozený jazyk)`,noneDescription:`Výchozí odpověď v přirozeném jazyce`,json:`JSON`,jsonDescription:`Strukturovaný formát JSON`,list:`Seznam`,listDescription:`Pole položek`,summary:`Shrnutí`,summaryDescription:`Shrnutí dokumentu s klíčovými body`,analysis:`Analýza`,analysisDescription:`Strukturovaná analýza s klady/zápory`,custom:`Vlastní schéma`,customDescription:`Definujte vlastní JSON schéma`,customSchema:`Vlastní JSON schéma`,schemaPreview:`Náhled schématu`,applySchema:`Použít schéma`,cancel:`Zrušit`,enabled:`Strukturovaný výstup povolen`},controls:{title:`Ovládání chatu`,systemPrompt:`Systémový prompt`,systemPromptPlaceholder:`Pokyny platné jen pro tento chat…`,advancedParams:`Pokročilé parametry`,advancedParamsDescription:`Přepisy pro tento chat. Prázdná pole používají globální výchozí hodnoty.`,fromModel:`z modelu`,fromModelHint:`Tato hodnota pochází z doporučeného nastavení samotného modelu.`,contextCapped:`Kontext omezen na {{context}} z {{trained}}, pro které byl model trénován, aby se stále načetl.`,saved:`Ovládání uloženo`,saveFailed:`Ovládání se nepodařilo uložit`,params:{temperature:`Teplota`,topP:`Top P`,topK:`Top K`,minP:`Min P`,maxTokens:`Max. tokenů`,repeatPenalty:`Penalizace opakování`,seed:`Seed`,contextLength:`Délka kontextu`},thinking:`Přemýšlení`,thinkingDescription:`Jak moc model přemýšlí, než odpoví. Modely bez uvažování to ignorují.`,compaction:`Zhutnění kontextu`,compactionDescription:`Když server zhutňuje dlouhé konverzace, tento chat se může vyjmout a ponechat si celou historii.`,compactionDefault:`Výchozí nastavení serveru`,compactionOff:`Vypnuto pro tento chat`},message:{sources:`Zdroje`},toasts:{chatCreated:`Nový chat vytvořen`,createFailed:`Vytvoření relace se nezdařilo`,loadFailed:`Načtení relací se nezdařilo`,chatDeleted:`Chat smazán`,deleteFailed:`Smazání chatu se nezdařilo`,deleteSessionFailed:`Smazání relace se nezdařilo`,historyCleared:`Celá historie chatu vymazána`,historyClearFailed:`Vymazání historie chatu se nezdařilo`,titleUpdated:`Název chatu aktualizován`,updateFailed:`Aktualizace relace se nezdařila`,noValidSession:`Žádná platná relace chatu. Vytvořte nebo vyberte chat.`,sessionNotFound:`Relace nebyla nalezena nebo je neplatná. Vyberte nebo vytvořte platnou relaci chatu.`,noModelProvider:`Žádný poskytovatel modelů není k dispozici`,modelUnavailable:`Vybraný model "{{model}}" není od {{provider}} dostupný. Znovu aktivujte tohoto poskytovatele nebo vyberte jiný model.`,modelSwitched:`Přepnuto na {{model}} (předchozí model již není dostupný)`,modelsLoadFailed:`Načtení modelů se nezdařilo`,modelUpdated:`Model pro aktuální chat aktualizován`,modelUpdateFailed:`Aktualizace modelu relace se nezdařila`},documents:{title:`Dokumenty v kontextu`},context:{title:`Kontextové okno:`,full:`{{percent}}% zaplněno`,tokensUsed:`{{used}} / {{budget}} tokenů využito`,tokensUsedNoBudget:`{{used}} tokenů využito`,capped:`omezeno z {{trained}}`}},sidebar:{navigation:{chat:`Chat`,models:`Modely`,personas:`Persony`,imagine:`Generovat`,agents:`Agenti`,work:`Práce`,settings:`Nastavení`,usageAnalytics:`Využití poskytovatelů`,system:`Systém`,userManagement:`Správa uživatelů`,signOut:`Odhlásit se`,exploreLabel:`Prozkoumat`,notes:`Poznámky`,calendar:`Kalendář`,automations:`Automatizace`},toggleSize:`Změnit velikost postranního panelu`,expandSidebar:`Rozbalit postranní panel`},user:{menu:{changePicture:`Změnit obrázek`,settings:`Nastavení`,usageAnalytics:`Využití poskytovatelů`,system:`Systém`,userManagement:`Správa uživatelů`,logout:`Odhlásit se`,pinShortcut:`Připnout na boční panel`,unpinShortcut:`Odepnout z bočního panelu`},avatar:{title:`Změnit profilový obrázek`,updated:`Profilový obrázek aktualizován`,updateFailed:`Nepodařilo se aktualizovat profilový obrázek`,saving:`Ukládání...`,label:`Avatar`,uploadAvatarImage:`Nahrát obrázek avatara`,dragAndDrop:`Přetáhněte obrázek nebo klikněte pro procházení`,chooseImage:`Vybrat obrázek`,uploading:`Nahrávání...`,enterImageUrl:`Nebo zadejte URL obrázku`,supportedFormats:`Podporuje: JPG, PNG, GIF, WebP (max. 2 MB). Čtvercové obrázky fungují nejlépe.`,customAvatar:`Vlastní obrázek avatara`,clickToChange:`Klikněte pro změnu nebo odstranění`,removed:`Avatar odstraněn`,uploaded:`Avatar úspěšně nahrán`,invalidFile:`Prosím vyberte platný soubor obrázku`,fileTooLarge:`Velikost obrázku avatara musí být menší než 2 MB`,readFailed:`Nepodařilo se přečíst soubor obrázku`,uploadFailed:`Nepodařilo se nahrát obrázek avatara`},profile:{noEmail:`Email není uveden`}},settings:JSON.parse(`{"title":"Nastavení","tabs":{"appearance":"Vzhled","model":"Model","systemMessage":"Systémová zpráva","plugins":"Pluginy","search":"Vyhledávání","generation":"Generování","documents":"Dokumenty","tts":"Řeč","imageGen":"Obrázky","data":"Data","shortcuts":"Zkratky","about":"O aplikaci","sessions":"Relace","apiKeys":"API klíče"},"appearance":{"title":"Vzhled","language":{"title":"Jazyk","description":"Vyberte preferovaný jazyk"},"theme":{"title":"Motiv","light":"Světlý","dark":"Tmavý","amoled":"Čistě Černá","system":"Systémový"},"accent":{"title":"Barva zvýraznění","custom":"Vlastní barva","useColor":"Použít barvu zvýraznění {{color}}","behaviorTitle":"Paleta rozhraní","behaviorDescription":"Zvolte, zda se barva zvýraznění použije jen na ovládací prvky, nebo přizpůsobí celé světlé či tmavé rozhraní.","defaultStyle":"Výchozí","defaultStyleDescription":"Zachovat neutrální povrchy světlého a tmavého motivu.","adaptedStyle":"Přizpůsobit zvýraznění","adaptedStyleDescription":"Obarvit povrchy, okraje a text zvolenou barvou."},"chatInterface":{"title":"Rozhraní chatu","showUsername":"Zobrazit uživatelské jméno","showUsernameDescription":"Zobrazovat uživatelské jméno ve zprávách chatu","followUpSuggestions":"Návrhy pokračování","followUpSuggestionsDescription":"Po každé odpovědi navrhnout rychlé reakce","hapticFeedback":"Haptická odezva (Android)","hapticFeedbackDescription":"Použít jemné vibrace pro důležité mobilní akce"},"background":{"title":"Obrázek pozadí","enable":"Povolit obrázek pozadí","enableDescription":"Zobrazit vlastní pozadí s efektem rozmazání","blur":"Rozmazání","opacity":"Průhlednost","upload":"Nahrát obrázek pozadí","dragDrop":"Přetáhněte obrázek nebo klikněte pro procházení","chooseImage":"Vybrat obrázek"}},"saveSettings":"Uložit nastavení","model":{"title":"Nastavení modelu","defaultModel":"Výchozí model","defaultModelDescription":"Tento model bude ve výchozím nastavení použit pro nové konverzace","selectModel":"Vyberte model","specializedModels":"Specializované modely","visionModel":"Vizní model","selectVisionModel":"Použít aktuální chatový model","visionModelDescription":"Používá se automaticky, kdykoli odchozí kontext chatu obsahuje obrázky. Vyberte model, který podporuje vstup obrázků.","visionModelUpdateFailed":"Nepodařilo se aktualizovat vizní model: {{error}}","visionModelNoProvider":"Tento vizní model nemá identitu poskytovatele. Vyberte dostupný model.","persona":"Persona","updateAll":"Aktualizovat všechny modely","updateAllDescription":"Zkontrolovat aktualizace a stáhnout nejnovější verze všech nainstalovaných modelů","updateAllButton":"Aktualizovat vše","updating":"Aktualizace modelů...","currentModelInfo":"Informace o aktuálním modelu","name":"Název","size":"Velikost","family":"Rodina","format":"Formát","status":"Stav","statusStarting":"Spouštění...","statusComplete":"Dokončeno","statusError":"Chyba","bulkOperations":"Hromadné operace","autoTitle":{"title":"Automatické generování titulků","enable":"Povolit automatické titulky","enableDescription":"Automaticky generovat titulky pro nové konverzace","taskModel":"Model úloh","selectTaskModel":"Vyberte model úloh","taskModelDescription":"Model používaný pro generování titulků konverzací"},"updatingModel":"Aktualizace {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} z {{total}} modelů"},"systemMessage":{"title":"Systémová zpráva","description":"Nastavte vlastní systémovou zprávu, která bude použita pro všechny nové konverzace.","placeholder":"Zadejte systémovou zprávu...","saved":"Systémová zpráva uložena","saveFailed":"Nepodařilo se uložit systémovou zprávu"},"plugins":{"title":"Pluginy","description":"Spravujte nainstalované pluginy","providerConnections":"Připojení poskytovatelů","providerConnectionsDescription":"Připojte, nakonfigurujte a prozkoumejte poskytovatele modelů pomocí zásuvných modulů.","providers":"Poskytovatelé","searchProviders":"Hledat poskytovatele","noProvidersFound":"Žádní poskytovatelé neodpovídají vašemu hledání.","selectProvider":"Vybrat poskytovatele","selectProviderDescription":"Vyberte poskytovatele pro zobrazení jeho připojení a katalogu modelů.","addNew":"Přidat nový plugin","upload":"Nahrát plugin","addJson":"Přidat JSON","uploading":"Nahrávání...","jsonPlaceholder":"Vložte JSON konfiguraci pluginu...","install":"Nainstalovat plugin","noPlugins":"Žádné nainstalované pluginy","noPluginsDescription":"Přidejte plugin pro rozšíření funkcionality","loading":"Načítání pluginů...","installed":"Nainstalované pluginy","active":"Aktivní pluginy","activeLabel":"Aktivní","inactive":"Neaktivní","activate":"Aktivovat","deactivate":"Deaktivovat","models":"modelů","apiKeySet":"API klíč nastaven","apiKeyConfiguration":"Konfigurace API klíče","apiKeyDescription":"Uložit osobní API klíč pro {{name}}.","apiKeyEnvAlternative":"Alternativně nastavte","environmentVariable":"proměnnou prostředí","apiKeyConfigured":"API klíč nakonfigurován","apiKeyPlaceholder":"Zadejte API klíč...","saveApiKey":"Uložit API klíč","showApiKey":"Zobrazit API klíč","hideApiKey":"Skrýt API klíč","configure":"Konfigurovat","providerSettings":"Nastavení poskytovatele","status":"Stav","defaultEndpoint":"Výchozí endpoint","modelCatalog":"Katalog modelů","modelCatalogDescription":"Objevené a nakonfigurované modely pro tohoto poskytovatele a jejich schopnosti.","refreshModels":"Obnovit modely","noModelsConfigured":"Pro tohoto poskytovatele nejsou nakonfigurovány žádné modely.","modelId":"ID modelu","capabilities":"Schopnosti","modelCatalogUpdated":"Katalog modelů aktualizován: {{count}} modelů.","modelCatalogUnchanged":"Katalog modelů je již aktuální.","modelCatalogNeedsApiKey":"Přidejte platný API klíč pro tohoto poskytovatele, aby se načetl jeho živý seznam modelů.","modelCatalogUnavailable":"Nelze načíst seznam modelů poskytovatele.","modelCatalogRefreshFailed":"Nepodařilo se obnovit katalog modelů","capability":{"chat":"Chat","embedding":"Embedding","image":"Obrázek","speech":"Řeč","transcription":"Přepis"},"exportPlugin":"Exportovat zásuvný modul","deletePlugin":"Smazat zásuvný modul","apiKey":{"title":"API klíč","placeholder":"Zadejte API klíč","save":"Uložit klíč","remove":"Odstranit klíč","configured":"API klíč nakonfigurován","notConfigured":"Vyžadován API klíč","saved":"API klíč úspěšně uložen","removed":"API klíč odstraněn","saveFailed":"Nepodařilo se uložit API klíč","removeFailed":"Nepodařilo se odstranit API klíč","enterKey":"Zadejte API klíč"},"variables":"Variables"},"generation":{"title":"Možnosti generování","description":"Nakonfigurujte, jak AI generuje odpovědi","scopeLabel":"Platí pro","scopeAll":"Všechny modely","scopeModel":"Pouze {{model}}","scopeAllHint":"Hodnoty, které použije každý model, pokud nemá vlastní nastavení.","scopeModelHint":"Uloží se jen pro tento model a má přednost před obecným nastavením.","advancedSettings":"Pokročilá nastavení generování","advancedSettingsDescription":"Vzorkování, limity tokenů, kontext, penalizace a stop sekvence","coreParameters":"Základní parametry","temperature":"Teplota","temperatureDescription":"Ovládá náhodnost. Nižší hodnoty jsou více zaměřené, vyšší více kreativní.","topP":"Top P","topPDescription":"Ovládá rozmanitost pomocí nucleus sampling. Nižší hodnoty se soustředí na pravděpodobné tokeny.","topK":"Top K","topKDescription":"Omezuje výběr tokenů na K nejpravděpodobnějších. Nastavte 0 pro vypnutí.","minP":"Min P","minPDescription":"Minimální prah pravděpodobnosti pro výběr tokenů.","generationControl":"Ovládání generování","maxTokens":"Max tokenů","maxTokensDescription":"Maximální počet tokenů k vygenerování v odpovědi.","repeatPenalty":"Penalizace opakování","repeatPenaltyDescription":"Penalizuje opakující se tokeny. Vyšší hodnoty snižují opakování.","contextLength":"Délka kontextu","contextLengthDescription":"Maximální velikost kontextového okna pro konverzace.","seed":"Seed","optional":"volitelné","random":"Náhodný","seedDescription":"Nastavte konkrétní seed pro reprodukovatelné výsledky.","advancedOptions":"Pokročilé možnosti","presencePenalty":"Penalizace přítomnosti","presencePenaltyDescription":"Penalizuje tokeny, které se objevují v kontextu.","frequencyPenalty":"Penalizace frekvence","frequencyPenaltyDescription":"Penalizuje často používané tokeny.","stopSequences":"Stop sekvence","commaSeparated":"oddělené čárkou","stopSequencesDescription":"Vlastní tokeny, které zastaví generování při nalezení.","resetDefaults":"Obnovit výchozí","saveOptions":"Uložit možnosti","embeddingSettings":"Nastavení embeddingů","enableEmbeddings":"Povolit embeddingy dokumentů","thinking":"Přemýšlení","thinkingDescription":"Výchozí míra přemýšlení u odpovědí. Každý chat ji může změnit.","thinkingLevels":{"default":"Výchozí podle modelu","defaultWith":"Výchozí podle modelu ({{level}})","off":"Vypnuto","on":"Zapnuto","low":"Nízká","medium":"Střední","high":"Vysoká"}},"documents":{"title":"Nastavení dokumentů","embeddings":{"title":"Embeddingy","enable":"Povolit embeddingy dokumentů","model":"Model embeddingů","modelDescription":"Vyberte model pro embedding dokumentů","chunkSize":"Velikost části","chunkSizeInTokens":"(v tokenech)","chunkSizeDescription":"Velikost textových částí pro embedding","chunkOverlap":"Překryv částí","chunkOverlapInTokens":"(v tokenech)","chunkOverlapDescription":"Překryv mezi po sobě jdoucími částmi","similarityThreshold":"Práh podobnosti","similarityDescription":"Minimální skóre podobnosti pro zahrnutí výsledků","status":"Stav embeddingů","statusLabel":"Stav","available":"Dostupný","unavailable":"Nedostupný","chunksWithEmbeddings":"Části s embeddingy","coverage":"Pokrytí","regenerate":"Regenerovat embeddingy","regenerating":"Regenerování..."},"collections":{"title":"Kolekce znalostí","description":"Seskupte dokumenty do kolekcí a připojte je k libovolnému chatu.","namePlaceholder":"Název kolekce","create":"Vytvořit","none":"Bez kolekce","deleteConfirm":"Smazat tuto kolekci? Dokumenty uvnitř zůstanou.","createFailed":"Kolekci se nepodařilo vytvořit","deleteFailed":"Kolekci se nepodařilo smazat","assignFailed":"Dokument se nepodařilo přesunout"},"library":{"title":"Nahrané dokumenty","description":"Dokumenty dostupné jako kontext chatu. Dokument nahraný v chatu zůstává jen ve své konverzaci; dokument bez chatu a kolekce se připojí ke každé konverzaci.","empty":"Zatím nejsou nahrány žádné dokumenty.","chatScope":"Jeden chat","everyChatScope":"Všechny chaty","deleteConfirm":"Smazat „{{name}}“? Zmizí ze všech chatů.","deleteFailed":"Dokument se nepodařilo smazat"}},"tts":{"title":"Text na řeč","description":"Nakonfigurujte nastavení syntézy řeči pro čtení zpráv","loadingProviders":"Načítání poskytovatelů TTS...","noProviders":"Žádní poskytovatelé TTS","noProvidersDescription":"Nakonfigurujte plugin s podporou TTS pro povolení syntézy řeči","enable":"Povolit TTS","enableDescription":"Povolit syntézu řeči pro zprávy asistenta","autoPlay":"Automatické přehrávání odpovědí","autoPlayDescription":"Automaticky číst nové zprávy asistenta","streamSentences":"Přirozené dávkové přehrávání","streamSentencesDescription":"Předem vygenerovat několik dávek podle frází a přehrát je jako jednu souvislou odpověď.","voiceConfiguration":"Konfigurace hlasu","model":"Model TTS","modelDescription":"Vyberte model pro syntézu řeči","voice":"Hlas","selectVoice":"Vyberte hlas","voiceDescription":"Vyberte hlas pro syntézu řeči","providerDefaultVoice":"Tento model použije svůj výchozí hlas, pokud při generování řeči neposkytnete referenční nahrávku.","voiceCloningAvailable":"Klonování hlasu je dostupné","voiceCloningAvailableDescription":"Pomocí funkce Představit → Zvuk vytvořte řeč z referenční nahrávky pořízené se souhlasem mluvčího a jejího přesného přepisu. Referenci můžete volitelně uložit jako opakovaně použitelný hlas.","savedVoiceOption":"{{name}} (uložený hlas)","savedVoices":"Uložené hlasy","loadingSavedVoices":"Načítání uložených hlasů…","deleteSavedVoice":"Odstranit uložený hlas {{name}}","deleteSavedVoiceConfirm":"Odstranit uložený hlas „{{name}}“? Jeho referenční nahrávka a přepis budou odstraněny.","savedVoiceDeleted":"Uložený hlas byl odstraněn","savedVoicePreferenceCleanupFailed":"Uložený hlas byl odstraněn, ale nastavení řeči se nepodařilo obnovit","savedVoiceDeleteFailed":"Uložený hlas se nepodařilo odstranit","speed":"Rychlost","speedSlow":"0.5x","speedNormal":"1.0x","speedFast":"2.0x","availableProviders":"Dostupní poskytovatelé","models":"modelů","test":"Test","testing":"Testování...","stop":"Stop"},"imageGen":{"title":"Generování obrázků","description":"Nakonfigurujte nastavení a poskytovatele generování obrázků","loadingProviders":"Načítání poskytovatelů generování obrázků...","noProviders":"Žádní poskytovatelé generování obrázků","noProvidersDescription":"Nakonfigurujte plugin s podporou generování obrázků","enable":"Povolit generování obrázků","enableDescription":"Povolit AI generování obrázků v konverzacích","configuration":"Konfigurace","model":"Model","modelDescription":"Vyberte model pro generování obrázků","size":"Velikost","sizeDescription":"Rozlišení generovaných obrázků","quality":"Kvalita","qualityDescription":"Úroveň kvality generovaných obrázků","style":"Styl","styleDescription":"Preset stylu pro generované obrázky","availableProviders":"Dostupní poskytovatelé","models":"modelů"},"data":{"title":"Správa dat","export":"Exportovat data","exportDescription":"Stáhněte přenositelný archiv předvoleb, složek chatů, relací a zpráv, poznámek, znalostních kolekcí a extrahovaného textu dokumentů.","archiveScopeV3":"Zahrnuje předvolby, chaty, složky, poznámky, znalostní kolekce a extrahovaný text dokumentů. Nezahrnuje účty a tajné údaje, biometrické klony hlasů, vygenerovaná média, persony a paměť ani data či svazky Work.","exportAll":"Exportovat všechna data","import":"Importovat data","importDescription":"Importujte data z předchozího exportu.","importData":"Importovat data","importing":"Importování...","clearSessions":"Vymazat relace","clearSessionsDescription":"Smazat všechny chatové relace. Tuto akci nelze vrátit zpět.","clearAll":"Vymazat vše","clearing":"Mazání...","importOptions":"Možnosti importu","importOptionsDescription":"Vyberte, jak zacházet s existujícími daty","validatingArchive":"Ověřování archivu a výpočet změn…","archiveValidationFailed":"Ověření archivu selhalo","preflightReport":"Náhled importu","preflightIncoming":"{{folders}} složek · {{sessions}} chatů · {{messages}} zpráv · {{notes}} poznámek · {{collections}} kolekcí · {{documents}} dokumentů · {{chunks}} úseků","preflightRemappedIds":"{{count}} ID bude přemapováno kvůli ochraně dat jiného účtu.","skipDuplicates":"Přeskočit duplikáty","overwrite":"Přepsat existující","importResults":"Výsledky importu","preferences":"Předvolby","imported":"Importováno","failed":"Selhalo","sessions":"Relace","sessionFolders":"Složky relací","notes":"Poznámky","knowledgeCollections":"Znalostní kolekce","importedLabel":"importováno","overwrittenLabel":"přepsáno","skipped":"přeskočeno","toCreate":"k vytvoření","toOverwrite":"k přepsání","toSkip":"k přeskočení","documents":"Dokumenty","warnings":"Varování","refreshAfterImportFailed":"Data byla importována, ale některá zobrazení se nepodařilo obnovit. Načtěte Libre WebUI znovu, aby se zobrazily všechny změny.","errors":"Chyby","archivedChats":{"title":"Archivované chaty","empty":"Žádné archivované chaty","unarchive":"Obnovit z archivu"}},"about":{"title":"O aplikaci","versionLabel":"Verze","ollama":{"title":"Stav Ollama","version":"Verze","healthy":"V pořádku","unhealthy":"Nefunkční"},"stats":{"models":"Modely","sessions":"Relace"},"features":{"privacy":{"title":"Soukromí na prvním místě","description":"Vaše data zůstávají na vašem zařízení"},"openSource":{"title":"Open source","description":"Bezplatný software s otevřeným zdrojovým kódem"},"localInference":{"title":"Lokální inference","description":"Spouštějte AI modely lokálně s Ollama"}},"openSourceBy":"Open source od {{company}}","links":{"title":"Odkazy","github":"GitHub","githubDescription":"Zobrazit zdrojový kód a přispět","website":"Webová stránka","websiteDescription":"Navštivte naše stránky","documentation":"Dokumentace","reportIssue":"Nahlásit problém","reportIssueDescription":"Hlášení chyb a požadavky na funkce","documentationDescription":"Průvodci, tutoriály a reference API","forgejo":"Forgejo zrcadlo","forgejoDescription":"Vlastní hostovaný Forgejo repozitář","sponsor":"Podpořit","sponsorDescription":"Pomozte financovat projekt","star":"Hvězdička na GitHubu","starDescription":"Hvězdička pomáhá ostatním projekt objevit"},"version":"Verze {{version}}","updates":{"checking":"Kontrola aktualizací…","upToDate":"Máte nejnovější verzi","updateAvailable":"Je k dispozici verze {{version}}","ahead":"Jste před posledním vydáním ({{version}})","checkFailed":"Nepodařilo se zkontrolovat aktualizace","viewChangelog":"Zobrazit seznam změn"}},"groups":{"general":"Obecné","chat":"Chat","media":"Řeč a obrázky","connections":"Připojení"},"search":{"title":"Vyhledávání na webu","description":"Vyhledávejte na webu přes vlastní instanci SearXNG. Po zapnutí nabídne chat přepínač vyhledávání a úlohy Work s přístupem k síti mohou vyhledávat.","enableLabel":"Zapnout vyhledávání na webu","enableDescription":"Nabídnout vyhledávání chatům a úlohám Work. Vyhledávání běží na serveru proti nakonfigurované instanci.","urlLabel":"Adresa SearXNG","urlDescription":"Základní URL instance SearXNG dostupné ze serveru. Přiložený privátní deploy stack poskytuje http://searxng:8080.","maxResultsLabel":"Výsledků na vyhledávání","maxResultsDescription":"Kolik výsledků vstoupí do odpovědi nebo volání nástroje, 1-100.","maxResultsInvalid":"Počet výsledků musí být mezi 1 a 100.","safeSearchLabel":"Bezpečné vyhledávání","safeSearchDescription":"Požádat vyhledávač o filtrování explicitních výsledků.","test":"Otestovat připojení","testing":"Testuje se…","testOk":"Vyhledávání funguje — vráceno {{results}} výsledků","testFailed":"Test vyhledávání selhal","save":"Uložit","saved":"Nastavení vyhledávání uloženo","saveFailed":"Nastavení vyhledávání se nepodařilo uložit"},"compaction":{"title":"Zhutnění kontextu","description":"Jakmile konverzace překročí limit tokenů, server shrne její starší zprávy a doslovně ponechá jen ty nejnovější. Platí pro všechny uživatele tohoto serveru.","thresholdLabel":"Limit tokenů","thresholdDescription":"Odhadovaný počet tokenů kontextu, nad kterým se starší historie shrne, 500-1 000 000.","thresholdInvalid":"Limit tokenů musí být mezi 500 a 1 000 000.","keepRecentLabel":"Ponechané poslední zprávy","keepRecentDescription":"Kolik posledních zpráv zůstane vždy doslovně, 2-200.","keepRecentInvalid":"Počet ponechaných posledních zpráv musí být mezi 2 a 200.","modelLabel":"Model pro zhutnění","modelDescription":"Model, který píše shrnutí. Pokud žádný nevyberete, použije se model dané konverzace.","sessionModelOption":"Použít model konverzace","promptLabel":"Vlastní prompt pro shrnutí","promptPlaceholder":"Ponechte prázdné pro vestavěný prompt","promptDescription":"Proměnné šablony {{previousSummaryVariable}} a {{messagesVariable}} se nahradí předchozím shrnutím a zprávami, které se shrnují.","saved":"Nastavení zhutnění uloženo","saveFailed":"Nastavení zhutnění se nepodařilo uložit","loadFailed":"Nastavení zhutnění se nepodařilo načíst"},"sessions":{"title":"Relace","description":"Všechna místa, kde je tento účet přihlášen. Odhlášení relace se projeví okamžitě; opětovné přihlášení přístup obnoví.","signOutOthers":"Odhlásit ostatní relace","signingOutOthers":"Odhlašování…","signOut":"Odhlásit","signingOut":"Odhlašování…","revoked":"Relace byla odhlášena.","revokeFailed":"Relaci se nepodařilo odhlásit.","othersRevoked":"Odhlášené ostatní relace: {{count}}","loadFailed":"Relace se nepodařilo načíst.","empty":"Nebyly nalezeny žádné relace.","current":"Tato relace","revokedBadge":"Odhlášeno","unknownDevice":"Neznámé zařízení","createdAt":"Přihlášeno","lastSeenAt":"Naposledy aktivní","expiresAt":"Vyprší"},"apiKeys":{"title":"API klíče","description":"Tokeny s omezeným rozsahem pro skripty a integrace. Každý klíč má přístup jen k rozsahům, které vyberete.","newKeyTitle":"Váš nový API klíč","copy":"Kopírovat","copied":"Zkopírováno do schránky.","copyFailed":"Kopírování se nezdařilo.","showOnceWarning":"Zkopírujte si ho hned – znovu se už nezobrazí.","dismiss":"Hotovo","createTitle":"Vytvořit klíč","nameLabel":"Název","namePlaceholder":"např. CI pipeline","nameRequired":"Pojmenujte klíč.","expiryLabel":"Platnost ve dnech (volitelné)","expiryPlaceholder":"Nikdy","expiryInvalid":"Platnost musí být celý počet dní.","scopesLabel":"Rozsahy","scopesRequired":"Vyberte alespoň jeden rozsah.","create":"Vytvořit klíč","creating":"Vytváření…","created":"API klíč vytvořen.","createFailed":"API klíč se nepodařilo vytvořit.","revoke":"Odvolat","revoking":"Odvolávání…","revoked":"API klíč odvolán.","revokeFailed":"API klíč se nepodařilo odvolat.","revokedBadge":"Odvolán","loadFailed":"API klíče se nepodařilo načíst.","empty":"Zatím žádné API klíče.","createdAt":"Vytvořen","lastUsedAt":"Naposledy použit","expiresAt":"Vyprší","neverExpires":"Nikdy"}}`),models:{title:`Modely`,subtitle:`Stahujte, spravujte a monitorujte své modely Ollama`,installed:`Nainstalované modely`,available:`Dostupné modely`,pull:`Stáhnout model`,pulling:`Stahování...`,delete:`Smazat model`,deleting:`Mazání...`,size:`Velikost`,modified:`Upraveno`,family:`Rodina`,parameters:`Parametry`,quantization:`Kvantizace`,noModels:`Žádné nainstalované modely`,pullFirst:`Stáhněte model pro začátek`,noModelsFound:`Žádné modely nenalezeny`},personas:{title:`Persony`,create:`Vytvořit personu`,edit:`Upravit personu`,delete:`Smazat personu`,name:`Název`,description:`Popis`,systemPrompt:`Systémový prompt`,model:`Model`,avatar:`Avatar`,background:`Pozadí`,noPersonas:`Žádné vytvořené persony`,createFirst:`Vytvořte svou první personu pro přizpůsobení zážitku z chatu`},gallery:{title:`Galerie`,subtitle:`Vaše galerie obrázků generovaných AI`,imageCount:`{{count}} obrázků`,generate:`Generovat obrázek`,generateDescription:`Vytvářejte obrázky pomocí AI`,generating:`Generování...`,prompt:`Prompt`,promptPlaceholder:`Popište obrázek, který chcete vygenerovat...`,noImages:`Zatím žádné vygenerované obrázky`,download:`Stáhnout`,delete:`Smazat`,regenerate:`Regenerovat`,model:`Model`,size:`Velikost`,quality:`Kvalita`,created:`Vytvořeno`},errors:{generic:`Došlo k chybě`,network:`Chyba sítě. Zkontrolujte připojení.`,unauthorized:`Nemáte oprávnění provést tuto akci.`,notFound:`Požadovaný prostředek nebyl nalezen.`,serverError:`Chyba serveru. Zkuste to později.`,validation:`Zkontrolujte zadané údaje a zkuste to znovu.`},keyboard:{title:`Klávesové zkratky`,toggleSidebar:`Přepnout postranní panel`,openSettings:`Otevřít nastavení`,toggleDarkMode:`Přepnout tmavý režim`,showShortcuts:`Zobrazit klávesové zkratky`,closeModals:`Zavřít modální okna`,groups:{navigation:`Navigace`,general:`Obecné`,chat:`Chat`,workspace:`Pracovní prostor`},actions:{sendMessage:`Odeslat zprávu`,newLine:`Nový řádek ve zprávě`,saveEdit:`Uložit upravenou zprávu`,cancelEdit:`Zrušit úpravy`,saveFile:`Uložit soubor`,formatCode:`Formátovat kód`},description:`Všechny klávesové zkratky dostupné v Libre WebUI.`,newChat:`Nový chat`,newWork:`Nová relace Work`,openPalette:`Otevřít příkazovou paletu`},modelManager:{title:`Modely`,loading:`Načítání modelů...`,systemStatus:{online:`Ollama online`,offline:`Ollama offline`,models:`model`,models_plural:`modelů`,running:`běží`,vram:`VRAM`},sections:{pull:`Stáhnout nový model`,library:`Procházet knihovnu`,huggingface:`HuggingFace Hub`,running:`Běžící modely`,local:`Lokální modely`,advanced:`Pokročilé akce`,catalog:`Katalog modelů`},catalog:{searchPlaceholder:`Hledat modely podle názvu nebo poskytovatele...`,noModels:`Zatím nejsou k dispozici žádné modely.`,empty:`Vašemu hledání neodpovídají žádné modely.`,providerOllama:`Ollama`,hidden:`Skrytý`,visibilityFailed:`Viditelnost modelu se nepodařilo změnit.`,filterAll:`Všechny modely`,filterLocal:`Místní`,filterProviders:`Poskytovatelé`,filterHidden:`Skryté`,enableAll:`Zapnout zobrazené`,disableAll:`Vypnout zobrazené`,rename:`Upravit název a obrázek`,setPicture:`Nastavit obrázek`,clearPicture:`Odebrat obrázek`,pictureInvalid:`Vyberte obrázkový soubor.`,pictureTooLarge:`Obrázky musí být menší než 192 KB.`,saving:`Ukládání…`,hide:`Skrýt uživatelům`,show:`Zobrazit uživatelům`},pull:{placeholder:`Zadejte název modelu (např. llama3.2:3b, deepseek-r1:14b)`,button:`Stáhnout`,cancel:`Zrušit`,popular:`Populární modely:`,browseAll:`Procházet všechny modely na ollama.com`,success:`Model {{name}} úspěšně stažen`,cancelled:`Stahování modelu zrušeno`,failed:`Nepodařilo se stáhnout model`,enterName:`Zadejte název modelu`,restricted:`Instalace modelů je v této instanci omezena pouze na administrátory.`},progress:{starting:`Inicializace...`,pulling:`Stahování modelu...`,pullingLayer:`stahování`,verifying:`Ověřování integrity...`,verifyingDigest:`ověřování sha256 digestu`,writing:`Zápis manifestu...`,cleaning:`Čištění...`},library:{available:`dostupné`,search:`Hledat modely...`,noResults:`Nebyly nalezeny žádné modely odpovídající kritériím`,installed:`Nainstalováno`,more:`+{{count}} dalších`,refresh:`Obnovit knihovnu`},huggingface:{browseAll:`Procházet vše na HuggingFace`,checkingGguf:`Hledání GGUF souborů...`,noGgufAvailable:`Žádné GGUF soubory nejsou dostupné pro přímé stažení do Ollama`,ggufFilesCount:`GGUF soubory ({{count}}) - Stáhnout přímo do Ollama`,noModelsFound:`Nenalezeny žádné modely`,noResults:`Nenalezeny žádné modely. Zkuste upravit vyhledávání nebo filtry.`,browseAllLink:`Zobrazit vše`,search:`Hledat modely HuggingFace...`,by:`od`,gated:`Omezený přístup`,viewOnHF:`Zobrazit na HuggingFace`,sortDownloads:`Stažení`,sortLikes:`Líbí se`,sortRecent:`Nedávné`,taskTextGeneration:`Generování textu`,taskTextToSpeech:`Text na řeč`,taskTextToImage:`Text na obrázek`,taskSpeechRecognition:`Rozpoznávání řeči`,tasks:{textGen:`Generování textu`,tts:`Text na řeč`,image:`Text na obrázek`,stt:`Rozpoznávání řeči`},sort:{downloads:`Nejstahovanější`,likes:`Nejoblíbenější`,recent:`Nedávno aktualizované`}},local:{noModels:`Zatím žádné nainstalované modely`,pullToStart:`Stáhněte model výše pro začátek`,installed:`nainstalováno`,running:`Běží`,info:`Info`,copy:`Kopírovat`,delete:`Smazat`,deleteConfirm:`Opravdu chcete smazat model "{{name}}"?`,deleteSuccess:`Model {{name}} úspěšně smazán`,deleteFailed:`Nepodařilo se smazat model`},advanced:{createModel:`Vytvořit model`,fromModelfile:`Z Modelfile`,copyModel:`Kopírovat model`,duplicateExisting:`Duplikovat existující`,testEmbeddings:`Testovat embeddingy`,generateVectors:`Generovat vektory`,healthCheck:`Kontrola stavu`,testConnection:`Test připojení`,healthy:`Ollama je v pořádku!`},modals:{details:{title:`Detaily modelu`,info:`Informace o modelu`,family:`Rodina`,parameters:`Parametry`,quantization:`Kvantizace`,format:`Formát`,systemPrompt:`Systémový prompt`,template:`Šablona`,license:`Licence`,modelfile:`Modelfile`,noDetails:`Žádné dostupné detaily`},copy:{title:`Kopírovat model`,source:`Zdrojový model`,selectModel:`Vyberte model...`,newName:`Nový název modelu`,placeholder:`např. muj-vlastni-model`,copying:`Kopírování...`,button:`Kopírovat model`,success:`Model zkopírován jako {{name}}`,failed:`Nepodařilo se zkopírovat model`,enterBoth:`Zadejte zdrojový i cílový název modelu`},create:{title:`Vytvořit vlastní model`,name:`Název modelu`,namePlaceholder:`např. muj-asistent`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
|
|
2
|
-
SYSTEM Jsi užitečný asistent.`,see:`Viz`,docs:`Dokumentace Modelfile`,docsLink:`pro referenci syntaxe`,creating:`Vytváření...`,button:`Vytvořit model`,success:`Model {{name}} úspěšně vytvořen`,failed:`Nepodařilo se vytvořit model`,enterBoth:`Zadejte název modelu a obsah Modelfile`},embeddings:{title:`Testovat embeddingy`,model:`Model embeddingů`,selectModel:`Vyberte model...`,recommended:`Doporučené: nomic-embed-text, mxbai-embed-large`,input:`Vstupní text`,placeholder:`Zadejte text pro generování embeddingů...`,generating:`Generování...`,button:`Generovat embeddingy`,result:`Výsledek ({{count}} dimenzí)`,success:`Vygenerován {{count}}-dimenzionální embedding vektor`,failed:`Nepodařilo se vygenerovat embeddingy`,enterBoth:`Vyberte model a zadejte text`}}},personaManager:{title:`Persony`,subtitle:`Vytvářejte a spravujte AI persony s jedinečnými osobnostmi, pamětí a chováním`,loading:`Načítání person...`,createButton:`Vytvořit personu`,importExport:`Import/Export`,stats:{title:`Vaše persony`,count:`{{count}} persona vytvořena`,count_plural:`{{count}} person vytvořeno`},empty:{title:`Zatím žádné persony`,description:`Vytvořte svou první personu pro personalizované AI interakce`,button:`Vytvořit první personu`},deleteConfirm:`Opravdu chcete smazat "{{name}}"?`,deleteSuccess:`Persona "{{name}}" úspěšně smazána`,downloadSuccess:`Persona "{{name}}" úspěšně stažena`,failed:`Nepodařilo se {{action}} personu`},personaForm:{title:{create:`Vytvořit novou personu`,edit:`Upravit personu`},subtitle:{create:`Vytvořte novou AI personu s jedinečnou osobností, systémem paměti a adaptivním učením`,edit:`Přizpůsobte svou AI personu s pokročilou pamětí, adaptivním učením a inteligentními parametry`},loading:`Načítání formuláře...`,saved:`Uloženo`,tabs:{basic:`Základní`,parameters:`Parametry`,memory:`Paměť a učení`,advanced:`Pokročilé`},basic:{name:`Název`,namePlaceholder:`Zadejte název persony`,model:`Model`,selectModel:`Vyberte model`,description:`Popis`,descriptionPlaceholder:`Popište svou personu...`,systemPrompt:`Systémový prompt`,systemPromptPlaceholder:`Zadejte systémový prompt definující chování persony...`,systemPromptHint:`Systémový prompt definuje, jak se vaše persona bude chovat a odpovídat.`},parameters:{temperature:`Teplota`,temperatureHint:`Ovládá kreativitu vs konzistenci`,topP:`Top-P`,topPHint:`Ovládá rozmanitost odpovědí`,topK:`Top-K`,topKHint:`Omezuje slovník na top-k tokenů`,contextWindow:`Kontextové okno`,contextWindowHint:`Maximální délka historie konverzace`,maxTokens:`Max tokenů`,maxTokensHint:`Maximální délka odpovědi`,repeatPenalty:`Penalizace opakování`,repeatPenaltyHint:`Snižuje opakující se odpovědi`},memory:{title:`Systém paměti`,subtitle:`Persona si pamatuje konverzace v čase`,enableHint:`Povolte systém paměti, aby si vaše persona pamatovala konverzace a budovala kontext v čase.`,loading:`Načítání stavu paměti...`,noData:`Zatím žádná data paměti`,memories:`Vzpomínky`,mbUsed:`MB použito`,lastBackup:`Poslední záloha`,never:`Nikdy`,maxMemories:`Maximum vzpomínek`,maxMemoriesHint:`Kolik vzpomínek může persona uložit`,retention:`Uchování paměti`,retentionHint:`Dny uchování vzpomínek před vyčištěním`,autoCleanup:`Automatické čištění starých vzpomínek`,wipeAll:`Vymazat všechny vzpomínky`,wipeCannot:`Tuto akci nelze vrátit zpět`,wipeButton:`Vymazat`,wiping:`Mazání...`,wipeConfirm:`Opravdu chcete vymazat všechny vzpomínky? Tuto akci nelze vrátit zpět.`,wipeSuccess:`Vymazáno {{count}} vzpomínek`},learning:{title:`Adaptivní učení`,subtitle:`Persona se vyvíjí na základě interakcí`,enableHint:`Povolte adaptivní učení, aby se persona vyvíjela a personalizovala odpovědi na základě vašich interakcí.`,speed:`Rychlost učení`,slow:`Pomalá`,slowDesc:`Postupné změny`,balanced:`Vyvážená`,balancedDesc:`Střední tempo`,fast:`Rychlá`,fastDesc:`Rychlá adaptace`,autoAdapt:`Automatická adaptace na preference uživatele`,whatLearns:`Co se persona učí:`,conversationTone:`Tón konverzace`,responseStyle:`Styl odpovědí`,userPreferences:`Preference uživatele`,topicInterests:`Zájmy o témata`},advanced:{embeddingModel:`Model embeddingů`,embeddingHint:`Vyberte model používaný pro kódování paměti a sémantické vyhledávání. Modely embeddingů jsou zobrazeny první, pak ostatní dostupné modely.`,noModels:`Nebyly nalezeny žádné modely`,embeddingModels:`Modely embeddingů`,otherModels:`Ostatní modely`,installHint:`Nainstalujte model embeddingů:`,recommended:`Doporučené: nomic-embed-text, mxbai-embed-large, bge-m3, snowflake-arctic-embed`,aboutTitle:`O pokročilých nastaveních`,aboutDescription:`Model embeddingů je používán systémem paměti k pochopení sémantického významu a nalezení relevantních vzpomínek během konverzací. Vyberte model odpovídající vašemu případu použití a dostupným prostředkům.`},actions:{cancel:`Zrušit`,save:`Uložit`,saving:`Ukládání...`,saveClose:`Uložit a zavřít`,create:`Vytvořit`},success:{created:`Persona vytvořena`,updated:`Persona aktualizována`},error:{saveFailed:`Nepodařilo se uložit`}},personaCard:{enhanced:`Vylepšená`,systemPrompt:`Systémový prompt`,memories:`vzpomínek`,use:`Použít`,editTooltip:`Upravit personu`,downloadTooltip:`Stáhnout personu`,backup:`Záloha`,exportDNA:`Exportovat DNA`,wipeMemories:`Vymazat vzpomínky`,wipeConfirm:`Opravdu chcete vymazat všechny vzpomínky této persony? Tuto akci nelze vrátit zpět.`,wipeSuccess:`Vymazáno {{count}} vzpomínek`,backupSuccess:`Záloha persony úspěšně stažena`,dnaSuccess:`DNA persony úspěšně exportováno`,failed:`Nepodařilo se {{action}}`},userManager:{title:`Správa uživatelů`,subtitle:`Spravujte uživatelské účty a oprávnění`,pageDescription:`Spravujte uživatelské účty, oprávnění a řízení přístupu pro vaši instanci Libre WebUI.`,loading:`Načítání uživatelů...`,createUser:`Vytvořit uživatele`,search:`Hledat uživatele...`,noUsers:`Nebyli nalezeni žádní uživatelé`,noUsersMatching:`Nebyli nalezeni žádní uživatelé odpovídající hledání`,columns:{user:`Uživatel`,email:`Email`,role:`Role`,created:`Vytvořeno`,actions:`Akce`},roles:{admin:`Správce`,user:`Uživatel`},noEmail:`Žádný email`,deleteConfirm:`Opravdu chcete smazat uživatele "{{name}}"?`,deleteSuccess:`Uživatel úspěšně smazán`,deleteFailed:`Nepodařilo se smazat uživatele`,cannotDeleteSelf:`Nemůžete smazat svůj vlastní účet`,approval:{title:`Nevyřízená schválení`,description:`Zkontrolujte nové registrace před jejich povolením do této instance.`,registered:`Registrováno`,activate:`Aktivovat účet`,reject:`Odmítnout registraci`,approved:`{{name}} se nyní může přihlásit.`,failed:`Účet nebylo možné schválit.`,notification:`{{count}} registrací čeká na vaše schválení.`,notificationBadge:`{{count}} nevyřízených schválení uživatelů`},form:{title:{create:`Vytvořit uživatele`,edit:`Upravit uživatele`},username:`Uživatelské jméno`,usernamePlaceholder:`Zadejte uživatelské jméno`,email:`Email`,emailPlaceholder:`Zadejte email (volitelné)`,password:`Heslo`,passwordPlaceholder:`Zadejte heslo`,passwordHint:`Ponechte prázdné pro zachování současného hesla`,role:`Role`,creating:`Vytváření...`,updating:`Aktualizace...`,createButton:`Vytvořit uživatele`,updateButton:`Aktualizovat uživatele`,createSuccess:`Uživatel úspěšně vytvořen`,updateSuccess:`Uživatel úspěšně aktualizován`,createFailed:`Nepodařilo se vytvořit uživatele`,updateFailed:`Nepodařilo se aktualizovat uživatele`},workAccess:{title:`Přístup k Work`,description:`Povolit všem aktivním uživatelům vytvářet a spouštět úlohy Work v izolovaných sandboxech. Administrátoři mají přístup vždy; pracovní prostory v hostitelských složkách zůstávají jen pro administrátory.`,saved:`Přístup k Work byl aktualizován`,saveFailed:`Přístup k Work se nepodařilo aktualizovat`},workPolicies:{title:`Politiky Work`,description:`Pojmenované běhové předvolby (image, limity, zastavení při nečinnosti), pod kterými lze úlohy vytvářet. Prázdná pole dědí globální výchozí hodnoty.`,add:`Přidat politiku`,name:`Název`,image:`Image`,memory:`Paměť`,cpu:`CPU`,pids:`Limit PID`,workspaceSize:`Velikost pracovního prostoru`,idleMinutes:`Zastavení při nečinnosti (minuty)`,networkDefault:`Výchozí síť`,networkInherit:`Dědit výchozí`,networkOn:`Zapnuto`,networkOff:`Vypnuto`,save:`Uložit`,cancel:`Zrušit`,edit:`Upravit politiku`,delete:`Smazat politiku`,deleteConfirm:`Smazat tuto politiku? Úlohy, které ji používají, se vrátí ke globálním výchozím hodnotám.`,empty:`Zatím žádné politiky. Úlohy používají globální výchozí hodnoty.`,saved:`Politika Work uložena`,deleted:`Politika Work smazána`,failed:`Politiku Work se nepodařilo uložit`,invalidNumber:`Limit PID a zastavení při nečinnosti musí být čísla.`},modelAccess:{title:`Stahování modelů`,description:`Povolit všem aktivním uživatelům stahovat modely z Ollamy a prohlížeče Hugging Face. Administrátoři mohou modely stahovat vždy.`,saved:`Přístup ke stahování modelů byl aktualizován`,saveFailed:`Přístup ke stahování modelů se nepodařilo aktualizovat`},webSearchAccess:{title:`Vyhledávání na webu`,description:`Povolit všem aktivním uživatelům vyhledávání na webu v chatech a úlohách Work. Administrátoři jej mohou používat vždy. Vyhledávač se nastavuje v Nastavení > Vyhledávání.`,saved:`Přístup k vyhledávání na webu byl aktualizován`,saveFailed:`Přístup k vyhledávání na webu se nepodařilo aktualizovat`},agentAccess:{title:`Agenti`,description:`Zpřístupnit administrátorům sekci Agenti (Libre Claw). Agentní CLI běží na hostiteli pod uživatelem serveru, mimo sandbox Work.`,saved:`Přístup k agentům byl aktualizován`,saveFailed:`Přístup k agentům se nepodařilo aktualizovat`,lockedByEnv:`Určeno proměnnou prostředí AGENT_CLI_MODELS_ENABLED.`},groups:{title:`Skupiny`,description:`Seskupte účty pro správu sdíleného přístupu a zjistěte, co který účet ve výsledku může dělat.`,newGroup:`Nová skupina`,nameLabel:`Název`,nameRequired:`Pojmenujte skupinu.`,descriptionLabel:`Popis (volitelné)`,create:`Vytvořit skupinu`,creating:`Vytváření…`,created:`Skupina vytvořena.`,createFailed:`Skupinu se nepodařilo vytvořit.`,deleted:`Skupina smazána.`,deleteFailed:`Skupinu se nepodařilo smazat.`,deleteGroup:`Smazat skupinu`,loadFailed:`Skupiny se nepodařilo načíst.`,empty:`Zatím žádné skupiny.`,memberCount:`Členové: {{count}}`,noMembers:`Zatím žádní členové.`,addedAt:`Přidáno`,addMember:`Přidat člena`,add:`Přidat`,selectUser:`Vyberte uživatele…`,memberAdded:`Člen přidán.`,memberAddFailed:`Člena se nepodařilo přidat.`,removeMember:`Odebrat člena`,memberRemoved:`Člen odebrán.`,memberRemoveFailed:`Člena se nepodařilo odebrat.`,effectiveTitle:`Výsledný přístup`,effectiveDescription:`Vyberte účet a zobrazte přístup, který mu vyplývá z role, skupin a oprávnění.`,accessLookupFailed:`Výsledný přístup se nepodařilo načíst.`,roleLabel:`Role`,statusLabel:`Stav`,memberOf:`Skupiny`,featuresLabel:`Přístup k funkcím`,grantsLabel:`Oprávnění`,grantVia:`přes`},audit:{title:`Bezpečnostní auditní protokol`,description:`Nedávná přihlášení, kontroly oprávnění a administrativní změny na této instanci.`,actionFilter:`Akce`,actionPlaceholder:`např. auth.login`,resultFilter:`Výsledek`,resultSuccess:`Úspěch`,resultDenied:`Zamítnuto`,resultFailure:`Selhání`,limitFilter:`Limit`,loadFailed:`Auditní protokol se nepodařilo načíst.`,empty:`Zatím žádné auditní události.`,actor:`Aktér`,target:`Cíl`}},usageAnalytics:{eyebrow:`Správa`,title:`Využití poskytovatelů`,description:`Sledujte odchozí API volání a spotřebu modelů napříč povolenými zásuvnými moduly v této instanci.`,days:`{{count}} dní`,refresh:`Obnovit využití`,loadFailed:`Využití poskytovatelů nelze načíst.`,metrics:{calls:`Volání`,tokens:`Tokeny`},cards:{calls:`API volání`,callsDetail:`Napříč {{count}} aktivními uživateli`,tokens:`Nahlášené tokeny`,tokensDetail:`Využití nahlášené na {{count}} voláních`,success:`Úspěšnost`,successDetail:`{{count}} neúspěšných volání`,latency:`Průměrná latence`,latencyDetail:`Celková doba odpovědi poskytovatele`},activity:{title:`Spotřeba v čase`,callsDescription:`Denní odchozí požadavky na povolené zásuvné moduly`,tokensDescription:`Denní součty tokenů nahlášené poskytovateli`,chartLabel:`Graf denního {{metric}} poskytovatele`},models:{title:`Spotřeba modelů`,description:`Modely s největším provozem v tomto období.`,model:`Model`,success:`Úspěšnost`,latency:`Latence`},providers:{title:`Provoz povolených zásuvných modulů`},capabilities:{title:`Mix schopností`,characters:`{{count}} znaků`,bytes:`{{count}} bajtů`,images:`{{count}} obrázků`,jobs:`{{count}} video úloh`,inputs:`{{count}} vstupů`,reportedTokens:`{{count}} nahlášených tokenů`},empty:{title:`Zatím žádná volání poskytovatelů`,description:`Volání se zde zobrazí, jakmile povolený zásuvný modul zpracuje požadavky na chat, práci, embedding, obrázek, řeč, zvuk nebo video.`},privacyNote:`Využití se měří na serveru na hranici odchozího zásuvného modulu. Libre WebUI ukládá poskytovatele, model, časování, stav a nahlášené čítače — nikdy výzvy, odpovědi, endpointy, přihlašovací údaje ani těla chyb poskytovatele. Součty tokenů zahrnují pouze volání, kde poskytovatel vrátil metadata o využití.`,heatmap:{title:`Rok aktivity`,description:`Denní volání poskytovatelů za poslední rok, obarvená podle nejpoužívanějšího modelu daného dne.`,calls:`volání`,noCalls:`Žádná volání`,other:`Ostatní modely`,less:`Méně`,more:`Více`,yearTotal:`{{formatted}} volání za poslední rok`}},systemPage:{eyebrow:`Správa`,title:`Systém`,description:`Monitorujte stroj a běhové prostředí hostující tuto instanci Libre WebUI.`,updated:`Aktualizováno {{date}}`,refresh:`Obnovit systémové informace`,loadFailed:`Systémové informace nelze načíst.`,cards:{uptime:`Doba běhu hostitele`,uptimeDetail:`Běží od {{date}}`,memory:`Využitá paměť`,memoryDetail:`{{used}} z {{total}}`,freeSpace:`Volné místo`,freeSpaceDetail:`{{label}} · {{total}} celkem`,containers:`Běžící kontejnery`,containersDetail:`{{total}} kontejnerů známých Dockeru`,dockerUnavailable:`Docker nedostupný`,unavailable:`Nedostupné`},host:{title:`Hostitel a běhové prostředí`,description:`Operační systém, procesor a detaily procesu Libre WebUI.`,container:`Kontejnerové běhové prostředí`,native:`Nativní běhové prostředí`,hostname:`Název hostitele`,operatingSystem:`Operační systém`,processor:`Procesor`,logicalCpus:`logických CPU`,loadAverage:`Průměrné zatížení · 1 / 5 / 15 min`,libreVersion:`Libre WebUI`,nodeVersion:`Node.js`,process:`Proces`,workingDirectory:`Pracovní adresář`},memory:{title:`Paměť`,description:`Systémová paměť viditelná běhovým prostředím a využití procesu aplikace.`,usedOf:`{{used}} využito z {{total}}`,free:`{{value}} volných`,processRss:`RSS procesu`,heapUsed:`V8 halda využito`,heapTotal:`V8 halda celkem`,external:`Externí paměť`},storage:{title:`Úložiště`,description:`Dostupné místo pro běhový souborový systém a trvalá data aplikace.`,used:`{{value}} využito`,free:`{{value}} volných`,empty:`Informace o souborovém systému nejsou v tomto běhovém prostředí dostupné.`},docker:{title:`Docker`,description:`Stav Docker Engine pouze pro čtení a zkrácený seznam kontejnerů.`,connected:`Připojeno`,unavailable:`Nedostupné`,unavailableDetail:`Diagnostika Docker Engine není dostupná.`,socketStatus:`Lokální socket: {{status}}`,mounted:`připojeno`,notMounted:`nepřipojeno`,running:`Běží`,stopped:`Zastaveno`,paused:`Pozastaveno`,total:`Celkem`,version:`Verze`,host:`Hostitel`,architecture:`Architektura`,cpus:`CPU`,memory:`Paměť`,container:`Kontejner`,image:`Obraz`,state:`Stav`,created:`Vytvořeno`,empty:`Docker je připojen a nejsou aktuálně vypsány žádné kontejnery.`},network:{title:`Síť`,description:`Rozhraní, adresy a linuxové čítače provozu viditelné běhovým prostředím.`,internal:`interní`,empty:`Běhovému prostředí aplikace nejsou viditelná žádná síťová rozhraní.`},securityNote:`Tato stránka je přístupná pouze správcům. Server vrací pouze provozní shrnutí: neodhaluje proměnné prostředí, přihlašovací údaje, Docker štítky, připojené svazky, příkazy kontejnerů ani inspect payloady. Když běží Libre WebUI v kontejneru, detaily o CPU a paměti hostitele pocházejí z Docker Engine, pokud je dostupný lokální socket; ostatní hodnoty popisují běhové prostředí aplikace.`,work:{title:`Work`,description:`Sandboxy napříč všemi uživateli`,access:`Přístup`,accessAdmins:`Pouze administrátoři`,accessAllUsers:`Všichni uživatelé`,runtimeAvailable:`Dostupné`,runtimeUnavailable:`Nedostupné`,activeRuntimes:`Aktivní běhová prostředí`,pendingCleanups:`Čekající úklidy`,orphans:`Osiřelé kontejnery`,owner:`Vlastník`,task:`Úloha`,state:`Stav`,preview:`Náhled`,terminals:`Terminály`,updated:`Aktualizováno`,stateRunning:`Běží`,stateStopped:`Zastaveno`,stateStarting:`Spouští se`,stateUnknown:`Neznámý`,noTasks:`Zatím žádné úlohy Work.`}},chatHistory:{label:`Historie konverzace`,jumpToTurn:`Přejít na část {{index}} z {{total}}`},chatMessage:{you:`Vy`,assistant:`Asistent`,system:`Systém`,conversationSummary:`Shrnutí konverzace`,restoreCompacted:`Obnovit shrnuté zprávy`,restoreFailed:`Shrnuté zprávy se nepodařilo obnovit`,copy:`Kopírovat`,copyMessage:`Kopírovat zprávu`,copied:`Zkopírováno!`,regenerate:`Regenerovat`,regenerateResponse:`Regenerovat odpověď`,edit:`Upravit`,editSystemMessage:`Upravit systémovou zprávu`,saveChanges:`Uložit změny`,cancelEditing:`Zrušit úpravy`,saveAndSubmit:`Uložit a odeslat`,goodResponse:`Dobrá odpověď`,badResponse:`Špatná odpověď`,delete:`Smazat`,deleteConfirm:`Smazat tuto zprávu?`,branch:`Větev`,speaking:`Mluvení...`,speakMessage:`Přečíst zprávu`,stopSpeaking:`Zastavit mluvení`,showMore:`Zobrazit více`,showLess:`Zobrazit méně`,thinking:`Přemýšlení`,thoughtFor:`Přemýšlel {{duration}}`,hiddenLines:`Skryté řádky: {{count}}`,systemMessagePlaceholder:`Zadejte systémovou zprávu...`,fullSizeImage:`Plná velikost obrázku`,startConversation:`Zahájit konverzaci`,startConversationDescription:`Pošlete zprávu pro zahájení chatu s AI asistentem. Ptejte se, získejte pomoc s kódem nebo veďte přirozenou konverzaci.`,scrollToBottom:`Posunout dolů`,newMessages:`Nové zprávy`},imageGallery:{title:`Galerie obrázků`,noImages:`Zatím žádné obrázky`,noImagesHint:`Vygenerujte svůj první obrázek pomocí panelu vpravo`,delete:`Smazat`,download:`Stáhnout`,deleteConfirm:`Opravdu chcete smazat tento obrázek?`,deleteSuccess:`Obrázek smazán`,deleteFailed:`Nepodařilo se smazat obrázek`,downloadFailed:`Nepodařilo se stáhnout obrázek`,loadMore:`Načíst více ({{current}} z {{total}})`,loadFailed:`Nepodařilo se načíst galerii`},imageGeneration:{title:`Generovat obrázek`,prompt:`Prompt`,promptPlaceholder:`Popište obrázek, který chcete vytvořit...`,model:`Model`,selectModel:`Vyberte model`,noModels:`Žádné dostupné modely pro generování obrázků`,configurePlugin:`Nakonfigurujte plugin s podporou generování obrázků`,size:`Velikost`,quality:`Kvalita`,style:`Styl`,generate:`Generovat`,generating:`Generování...`,success:`Obrázek úspěšně vygenerován`,failed:`Nepodařilo se vygenerovat obrázek`,enterPrompt:`Zadejte prompt`,promptTooLong:`Prompt překračuje maximální délku {{max}} znaků`},mediaGeneration:{title:`Generovat média`,description:`Vytvořte video, zvuk, hudbu nebo řeč s aktivovaným poskytovatelem médií.`,image:`Obrázek`,video:`Video`,audio:`Audio`,sound:`Zvuk`,speech:`Řeč`,model:`Model`,voice:`Hlas nebo ID hlasu`,cloneVoice:`Naklonovat referenční hlas`,cloneVoiceDescription:`Vytvořit tuto řeč podle referenční nahrávky namísto přednastaveného hlasu.`,referenceAudio:`Referenční zvuk`,referenceTranscript:`Přesný přepis referenční nahrávky`,referenceTranscriptPlaceholder:`Zadejte přesně to, co zazní v referenční nahrávce…`,referenceAudioTooLarge:`Referenční zvuk musí mít velikost nejvýše {{max}}.`,cloneConsent:`Klonujte hlas pouze se souhlasem mluvčího. Nahrávka se pro toto generování odešle vybranému poskytovateli a Libre WebUI ji neukládá.`,saveVoiceProfile:`Uložit jako opakovaně použitelný hlas`,saveVoiceProfileDescription:`Bezpečně uložte tuto referenční nahrávku a přepis. Libre WebUI je odešle vybranému poskytovateli s každou dávkou řeči, která tento hlas používá.`,voiceProfileName:`Název uloženého hlasu`,voiceProfileNamePlaceholder:`Například Můj hlas`,voiceStorageConsent:`Potvrzuji, že mám svolení mluvčího tento hlas klonovat a uložit. Reference zůstane uložená, dokud ji neodstraním.`,resolution:`Rozlišení`,aspectRatio:`Poměr stran`,duration:`Délka`,providerDefault:`Výchozí poskytovatele`,generateAudio:`Generovat zvuk spolu s videem, pokud je podporováno`,prompt:`Výzva`,text:`Text k přečtení`,videoPlaceholder:`Popište scénu, pohyb, kameru a osvětlení...`,audioPlaceholder:`Zadejte text, který má hlas přečíst...`,soundPlaceholder:`Popište zvuk, hudbu, atmosféru nebo mluvenou odpověď, kterou chcete...`,generate:`Generovat`,generating:`Generování… to může trvat několik minut`,success:`Média vygenerována a uložena do Imagine`,successWithSavedVoice:`Médium bylo vytvořeno a hlas „{{name}}“ je nyní k dispozici v nastavení Řeči`,failed:`Nepodařilo se vygenerovat média`,loadFailed:`Nepodařilo se načíst poskytovatele médií`,noModels:`Nejsou dostupné žádné modely typu {{kind}}. Nejprve aktivujte kompatibilního poskytovatele a uložte jeho přihlašovací údaje.`},mediaGallery:{itemCount:`{{count}} položek`,empty:`Zatím žádná vygenerovaná média`,emptyHint:`Vygenerujte obrázek, video nebo hlasový klip a zobrazí se zde.`,filters:{all:`Vše`,image:`Obrázky`,video:`Videa`,audio:`Audio`}},errorBoundary:{title:`Něco se pokazilo`,description:`Došlo k neočekávané chybě. Zkuste obnovit stránku.`,tryAgain:`Obnovit stránku`,goHome:`Přejít domů`,errorDetails:`Detaily chyby (vývoj)`},documents:{title:`Dokumenty`,upload:`Nahrát dokument`,uploading:`Nahrávání...`,noDocuments:`Žádné nahrané dokumenty`,uploadHint:`Nahrajte dokumenty pro použití v konverzacích`,delete:`Smazat`,deleteConfirm:`Opravdu chcete smazat tento dokument?`,deleteSuccess:`Dokument smazán`,deleteFailed:`Nepodařilo se smazat dokument`,uploadSuccess:`Dokument úspěšně nahrán`,uploadFailed:`Nepodařilo se nahrát dokument`,types:`Podporované: PDF, TXT, MD, DOCX`,unsupportedFileType:`Podporovány jsou pouze soubory PDF a TXT`,fileSizeTooLarge:`Velikost souboru musí být menší než 10MB`,uploadSuccessWithName:`Dokument "{{name}}" úspěšně nahrán`,removeSuccess:`Dokument úspěšně odstraněn`,removeFailed:`Nepodařilo se odstranit dokument`,removeError:`Při odstraňování dokumentu došlo k chybě`,clickToUpload:`Klikněte pro nahrání`,orDragAndDrop:`nebo přetáhněte`,fileTypesAndSize:`PDF nebo TXT soubory do 10MB`,uploadedDocuments:`Nahrané dokumenty`,removeDocument:`Odstranit dokument`},ttsButton:{speak:`Mluvit`,stop:`Stop`,speaking:`Mluvení...`,generateFailed:`Nepodařilo se vygenerovat řeč`,playbackFailed:`Přehrávání zvuku se nezdařilo`,stopSpeaking:`Zastavit mluvení`,preparingSpeech:`Příprava řeči...`,generatingSpeech:`Generování řeči...`,bufferingSpeech:`Načítání řeči...`,enableAudio:`Povolit zvuk a přečíst nahlas`,enableAudioShort:`Povolit zvuk`,readAloud:`Přečíst nahlas`},artifacts:{title:`Artefakty`,code:`Kód`,preview:`Náhled`,copy:`Kopírovat kód`,copied:`Zkopírováno!`,download:`Stáhnout`,expand:`Rozbalit`,collapse:`Sbalit`,openInNewTab:`Otevřít v nové záložce`,invalidSvg:`Neplatný obsah SVG`,invalidJson:`Neplatný obsah JSON`,previewMode:`Režim náhledu`,codeMode:`Režim kódu`,copyContent:`Kopírovat obsah`,openInPanel:`Otevřít v panelu`,openInNewWindow:`Otevřít v novém okně`,created:`Vytvořeno`,closePanelEsc:`Zavřít panel (Esc)`,copyButton:`Kopírovat`,open:`Otevřít`,dragEdgeToResize:`Přetáhněte okraj pro změnu velikosti`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`,versionOf:`Verze {{current}} z {{total}}`,previousVersion:`Předchozí verze`,nextVersion:`Další verze`},personaImportExport:{title:`Import a export person`,description:`Exportujte své persony pro sdílení nebo importujte persony ostatních`,exportPersonas:`Exportovat persony`,importPersonas:`Importovat persony`,noPersonasToExport:`Žádné persony k exportu`,personasAvailable:`{{count}} persona dostupná`,personasAvailable_plural:`{{count}} person dostupných`,exportAll:`Exportovat vše`,uploadJsonFile:`Nahrát JSON soubor`,pasteJsonLabel:`Vložit JSON data`,pasteJsonPlaceholder:`Vložte JSON data persony sem...`,importing:`Importování...`,importButton:`Importovat personu(y)`,expectedFormat:`Očekávaný formát JSON:`,exportSuccess:`Persona "{{name}}" úspěšně exportována`,exportFailed:`Nepodařilo se exportovat personu`,exportAllSuccess:`Všechny {{count}} persony úspěšně exportovány`,exportAllFailed:`Nepodařilo se exportovat persony`,pasteJsonData:`Vložte JSON data persony`,importMultipleSuccess:`Úspěšně importováno {{count}} person`,importMultipleFailed:`Nepodařilo se importovat {{count}} person`,importNoneFailed:`Nepodařilo se importovat žádnou personu`,importSuccess:`Persona úspěšně importována`,importFailed:`Nepodařilo se importovat personu`},generationStats:{details:`Podrobnosti`,promptTokens:`Tokeny promptu:`,generatedTokens:`Vygenerované tokeny:`,totalTokens:`Celkem tokenů:`,speed:`Rychlost:`,promptEval:`Vyhodnocení promptu:`,generation:`Generování:`,modelLoad:`Načtení modelu:`,totalTime:`Celkový čas:`,generatedAt:`Vygenerováno v:`},userMenu:{loggedOut:`Úspěšně odhlášeno`,pictureUpdated:`Profilový obrázek aktualizován`,failedUpdateAvatar:`Aktualizace avataru selhala`,failedUpdatePicture:`Aktualizace profilového obrázku selhala`,noEmail:`E-mail nebyl zadán`,changePicture:`Změnit obrázek`,settings:`Nastavení`,userManagement:`Správa uživatelů`,signOut:`Odhlásit se`,changeProfilePicture:`Změnit profilový obrázek`},pluginManager:{title:`Správce pluginů`,upload:`Nahrát`,addJson:`Přidat JSON`,browseHF:`Procházet HF Hub`,confirmDelete:`Opravdu chcete smazat tento plugin?`,uploading:`Nahrávání pluginu...`,pasteJson:`Vložte JSON pluginu...`,installPlugin:`Nainstalovat plugin`,loading:`Načítání pluginů...`,noPlugins:`Žádné nainstalované pluginy`,noPluginsDescription:`Nahrajte soubor pluginu nebo přidejte plugin z JSON.`,active:`Aktivní`,id:`ID`,endpoint:`Endpoint`,activate:`Aktivovat`,deactivate:`Deaktivovat`,activePlugin:`Aktivní plugin`,activePluginDescription:`Všechny chatové požadavky budou směrovány přes tento plugin`,variables:{title:`Proměnné`,save:`Uložit`,saving:`Ukládání...`,saved:`Proměnné uloženy`,saveFailed:`Nepodařilo se uložit proměnné`,resetDefaults:`Obnovit výchozí`,reset:`Proměnné obnoveny na výchozí`,resetFailed:`Nepodařilo se resetovat proměnné`,sensitiveSet:`Hodnota je nastavena (zadejte novou pro změnu)`,showValue:`Zobrazit hodnotu {{label}}`,hideValue:`Skrýt hodnotu {{label}}`,connection:`Připojení`,advanced:`Pokročilé parametry`,inherited:`Použít výchozí poskytovatele`,inheritedValue:`Použít výchozí poskytovatele ({{value}})`,enabled:`Povoleno`,disabled:`Zakázáno`,required:`Hodnota je vyžadována`,fullApiEndpoint:`Úplná URL API endpointu`,endpointHelp:`Zadejte úplnou URL požadavku včetně cesty operace (například /v1/chat/completions), nikoliv pouze základní URL poskytovatele.`,invalidUrl:`Zadejte platnou úplnou URL API endpointu, například https://provider.example/v1/chat/completions`,insecureUrl:`API endpointy musí používat HTTP nebo HTTPS.`,httpWarning:`HTTP nešifruje přihlašovací údaje ani provoz. Používejte jej pouze v důvěryhodné síti.`,invalidBaseUrl:`Základní URL nesmí obsahovat řetězec dotazu ani fragment.`,invalidApiPath:`Musí začínat znakem / a nesmí obsahovat URL, dotaz, fragment ani segment ..`,tooLong:`Hodnota je příliš dlouhá`}},huggingface:{title:`Prohlížeč modelů HuggingFace`,subtitle:`Procházejte a vybírejte modely z Hubu`,searchPlaceholder:`Hledat modely...`,filters:`Filtry`,task:`Úloha`,sortBy:`Řadit podle`,noModels:`Žádné modely nenalezeny`,adjustSearch:`Zkuste upravit hledání nebo filtry`,gated:`Omezený`,selected:`Vybráno`,select:`Vybrat`,refresh:`Obnovit`,modelsFound:`nalezených modelů`},demoMode:{title:`Demo režim`,github:`GitHub`},libreClaw:{title:`Agenti`,subtitle:`Spuštění místního agenta, schvalování, plány, paměť, nástroje a využití.`,dashboard:`Řídicí panel`,connection:{disconnectedTitle:`Démon Libre Claw není připojen`,disconnectedDescription:`Spusťte jej lokálně pomocí <command>libre-claw start</command> nebo nastavte <env>LIBRE_CLAW_BASE_URL</env> v prostředí backendu.`},status:{connected:`Připojeno`,disconnected:`Odpojeno`,activeRuns:`{{count}} aktivní`,activeRuns_plural:`{{count}} aktivní`},states:{queued:`Ve frontě`,running:`Probíhá`,blocked:`Blokováno`,done:`Hotovo`,failed:`Nepodařilo se`,cancelled:`Zrušeno`},startRun:{title:`Spustit úlohu agenta`,placeholder:`Požádejte Libre Claw o kontrolu repo, opravu chyby, spuštění kontroly, naplánování hlášení...`,chatRun:`Spustit chat`,goalMode:`Cílový režim`,providerOverride:`Přepsání poskytovatele`,modelOverride:`Přepsání modelu`,run:`Spustit`},modelRoute:{title:`Modelová cesta`,providerPlaceholder:`poskytovatel`,modelPlaceholder:`model`,persistGlobal:`Trvejte na Libre Claw globální konfiguraci`,saveModel:`Uložit model`,theme:`Motiv Libre Claw`,saveTheme:`Uložit motiv`},runs:{title:`Úlohy`,empty:`Zatím žádné úlohy Libre Claw.`},timeline:{title:`Časová osa úlohy`,empty:`Vyberte běh pro kontrolu jeho událostí.`,streaming:`Streamování...`,assistantResponse:`Odpověď asistenta`,resultOk:`dobře`,resultError:`chyba`,labels:{userMessage:`Uživatelská zpráva`,toolCall:`Volání nástroje`,toolResult:`Výsledek nástroje`,approvalRequest:`Žádost o schválení`,approvalResponse:`Odpověď na schválení`,runStarted:`Úloha spuštěna`,runFinished:`Úloha dokončena`,usage:`Využití`,error:`Chyba`}},approvals:{needed:`Je potřeba schválení`,allowOnce:`Povolit jednou`,alwaysAllowTool:`Vždy povolte nástroj`,deny:`Odmítnout`,toolApprovalRequested:`Požadováno schválení nástroje`},automations:{title:`Automatizace`,namePlaceholder:`Jméno`,schedulePlaceholder:`daily 09:00`,promptPlaceholder:`Výzva k automatizaci`,create:`Vytvořit`,empty:`Žádná naplánovaná automatizace Libre Claw.`,runNow:`Spustit nyní`,pause:`Pauza`,resume:`Pokračovat`,routes:{report:`Zpráva`,telegram:`Telegram`},status:{active:`Aktivní`,paused:`Pozastaveno`}},usageFallback:{title:`Použití a záložní`,usage:`Využití`,fallbackRoute:`Záložní trasa`,noUsage:`Zatím žádné záznamy o použití.`},metrics:{provider:`Poskytovatel`,model:`Model`,input:`Vstup`,output:`Výstup`,cached:`Uloženo do mezipaměti`,reasoning:`Zdůvodnění`,cost:`náklady`,tool:`Nástroj`,resolution:`Rozlišení`,state:`Stav`,stopReason:`Důvod zastavení`,tokens:`{{formatted}} token`,tokens_plural:`{{formatted}} tokeny`},fallbacks:{tool:`nástroj`,unknown:`neznámý`,resolved:`vyřešeno`,unknownError:`Neznámá chyba`},toasts:{loadStatusFailed:`Stav Libre Claw nelze načíst`,enterTask:`Zadejte úkol pro Libre Claw`,runStarted:`Úloha Libre Claw spuštěna`,startRunFailed:`Úlohu Libre Claw se nepodařilo spustit`,runCancelled:`Úloha zrušena`,cancelRunFailed:`Úlohu se nepodařilo zrušit`,approved:`Schváleno`,denied:`Zamítnuto`,resolvePermissionFailed:`Oprávnění se nepodařilo vyřešit`,providerModelRequired:`Poskytovatel a model jsou vyžadovány`,modelUpdated:`Model Libre Claw aktualizován`,updateModelFailed:`Model nelze aktualizovat`,themeUpdated:`Motiv Libre Claw aktualizován`,updateThemeFailed:`Motiv nelze aktualizovat`,automationRequired:`Je vyžadován název automatizace, plán a výzva`,automationCreated:`Automatizace vytvořena`,createAutomationFailed:`Nelze vytvořit automatizaci`,automationUpdated:`Automatizace aktualizována`,updateAutomationFailed:`Automatizaci nelze aktualizovat`}},work:{title:`Práce`,subtitle:`Izolované pracovní prostory modelů`,tasks:{title:`Pracovní úlohy`,subtitle:`Trvalé místní pracovní prostory`,new:`Nová úloha`,emptyTitle:`Zatím žádné pracovní úlohy`,empty:`Vaše pracovní úlohy se zde zobrazí po odeslání první zprávy.`,untitled:`Úloha bez názvu`,actions:`Akce úlohy`,delete:`Smazat úlohu`,deleteNamed:`Smazat „{{title}}“`,deleteConfirm:`Trvale smazat „{{title}}“ i její pracovní prostor?`,close:`Zavřít pracovní úlohy`,open:`Otevřít pracovní úlohy`,rename:`Název úlohy`,loading:`Načítání úlohy…`,notFound:`Tato pracovní úloha není dostupná`,back:`Spustit novou úlohu`,status:`Stav: {{status}}`},landing:{title:`Spustit novou pracovní úlohu`,description:`Poskytněte místnímu modelu nebo modelu nakonfigurovaného poskytovatele trvalý izolovaný pracovní prostor. Může procházet soubory, spouštět nástroje a po vašem návratu pokračovat tam, kde skončil.`,isolated:`Izolované`,isolatedBody:`Každá úloha má vlastní kontejner a soubory.`,durable:`Trvalé`,durableBody:`Později se můžete vrátit ke konverzaci i pracovnímu prostoru.`,controlled:`Kontrolované`,controlledBody:`Běhové prostředí a soubory úlohy zůstávají izolované od hostitele.`},composer:{placeholder:`Popište, co chcete vytvořit nebo změnit…`,model:`Pracovní model`,noModels:`Žádné modely kompatibilní s režimem Práce`,cancel:`Zastavit`,send:`Spustit`,hint:`Každá úloha uchovává vlastní soubory a historii. Před použitím výstup modelu zkontrolujte.`,remoteTitle:`Vzdálený poskytovatel`,remoteHint:`Konverzace a výstup nástrojů se odesílají do nakonfigurované služby. Jedno autonomní spuštění může poskytovatele kontaktovat vícekrát a způsobit poplatky. Soubory pracovního prostoru zůstávají místní, pokud nástroj nevrátí jejich obsah.`,remoteDismiss:`Skrýt`,remoteDismissLabel:`Skrýt upozornění na vzdáleného poskytovatele`,remoteDismissFailed:`Předvolbu vzdáleného poskytovatele se nepodařilo uložit.`,noModelSelected:`Není vybrán žádný model kompatibilní s režimem Práce.`},conversation:{ready:`Pracovní prostor je připraven`,empty:`Pokračujte v úloze níže. Tato konverzace a její soubory zůstávají připojené k tomuto pracovnímu prostoru.`,loadOlder:`Načíst starší zprávy`},status:{preparing:`Příprava izolovaného pracovního prostoru…`,running:`Práce v místním pracovním prostoru…`},statusLabels:{idle:`Nečinné`,thinking:`Přemýšlí`,complete:`Dokončeno`,needsInput:`Vyžaduje vstup`,error:`Chyba`},live:{connecting:`Připojování k živým aktualizacím…`,reconnecting:`Obnovování připojení k živým aktualizacím…`,unavailable:`Živé aktualizace nejsou dostupné`,newActivity:`Nová aktivita`,skillsLoaded:`Dovednosti pracovního prostoru · {{count}}`},runtime:{unavailable:`Běhové prostředí není dostupné`,ready:`Běhové prostředí je připraveno`,readyOllama:`Docker je připraven`,readyPlugin:`Docker + plugin jsou připraveny`,readyHybrid:`Docker + modely jsou připraveny`,reason:`Je vyžadován Docker a dostupný poskytovatel modelu Ollama nebo pluginu.`},workspace:{label:`Zobrazení pracovního prostoru`,files:`Soubory`,activity:`Aktivita`,preview:`Náhled`,resize:`Změnit velikost konverzace a pracovního prostoru`,resizeHint:`Velikost změníte přetažením. Pro přesné nastavení použijte klávesy se šipkami. Dvojitým kliknutím nebo klávesou Enter obnovíte výchozí velikost.`,splitSize:`Konverzace {{conversation}} %, pracovní prostor {{workspace}} %`,terminal:`Terminál`,git:`Git`},files:{discard:`Zahodit neuložené změny souboru?`,leaveWithDraft:`Opustit tento soubor? Neuložená úprava zůstane v prohlížeči jako koncept.`,up:`Nadřazená složka`,back:`Zpět k souborům`,empty:`V této složce zatím nejsou žádné soubory.`,select:`Vyberte soubor, který chcete prohlédnout a upravit.`,editorLabel:`Editor souboru: {{path}}`,format:`Formátovat`,formatted:`Kód byl naformátován.`,formatFailed:`Tento soubor se nepodařilo naformátovat.`,formatShortcut:`Formátovat (Shift+Alt+F)`,formatTooLarge:`Formátování je omezeno na soubory do 100 000 znaků a 4 000 řádků.`,formatUnsupported:`Pro tento typ souboru není formátování dostupné.`,saveShortcut:`Uložit (⌘/Ctrl+S)`,highlightPaused:`U velkých souborů je živé zvýrazňování pozastaveno, aby editor zůstal plynulý.`,plainTextLarge:`Prostý text · velký soubor`,changes:`Změny`,changesSince:`Co se změnilo od posledního tahu`,diffLabel:`Změny od posledního tahu: {{path}}`,diffFolded:`{{count}} nezměněných řádků`},activity:{empty:`Zde se zobrazí příkazy, operace se soubory a výsledky nástrojů.`,toolActivity:`Aktivita nástrojů`,details:`Podrobnosti`,kinds:{message:`Zpráva`,toolCall:`Volání nástroje`,toolResult:`Výsledek nástroje`,error:`Chyba`}},preview:{command:`Volitelný spouštěcí příkaz`,start:`Spustit náhled`,stop:`Zastavit náhled`,open:`Otevřít`,starting:`Spouštění náhledu…`,frameTitle:`Náhled pracovního prostoru`,failed:`Náhled se nepodařilo spustit. Zkontrolujte Aktivitu a zkuste jiný příkaz.`,empty:`Spusťte aplikaci v tomto pracovním prostoru, abyste ji zde mohli prohlédnout.`},mobile:{surface:`Plocha úlohy`,conversation:`Konverzace`,workspace:`Pracovní prostor`},toasts:{runFailed:`Pracovní úlohu se nepodařilo spustit.`,updateFailed:`Tuto úlohu se nepodařilo aktualizovat.`,renameFailed:`Tuto úlohu se nepodařilo přejmenovat.`,cancelled:`Běh pracovní úlohy byl zastaven.`,cancelFailed:`Běh pracovní úlohy se nepodařilo zastavit.`,deleteFailed:`Tuto pracovní úlohu se nepodařilo smazat.`,saveFailed:`Tento soubor se nepodařilo uložit.`,saved:`Soubor byl uložen.`,previewFailed:`Náhled se nepodařilo spustit.`,previewStopFailed:`Náhled se nepodařilo zastavit.`},terminal:{connecting:`Otevírá se shell v sandboxu…`,closed:`Relace terminálu skončila.`,failed:`Relaci terminálu se nepodařilo spustit.`,reconnect:`Znovu připojit`,unavailable:`Interaktivní terminál není v tomto nasazení dostupný.`,blockedByRun:`Model používá tento kontejner. Terminál se otevře po dokončení tahu.`,taskRunning:`Probíhá tah modelu`},policy:{label:`Běhová politika`,default:`Výchozí (globální limity)`},git:{actionFailed:`Akce Gitu selhala.`,blockedByPreview:`Před změnou stavu Gitu zastavte náhled.`,blockedByRun:`Zápisové akce Gitu se odemknou po skončení tahu modelu.`,branchCreated:`Vytvořeno {{name}}.`,branchSwitched:`Přepnuto na {{name}}.`,clean:`Pracovní strom je čistý.`,commit:`Commitnout připravené změny`,commitMessage:`Zpráva commitu`,committed:`Commit vytvořen.`,detached:`odpojený HEAD`,diff:`Náhled diffu`,diffFailed:`Tento diff se nepodařilo načíst.`,history:`Místní historie`,initialize:`Inicializovat Git`,initializeDescription:`Vytvořte místní repozitář pro stav, diffy, větve a commity. Žádné vzdálené přihlašovací údaje se nepřipojují.`,initialized:`Repozitář Git inicializován.`,loadFailed:`Stav Gitu se nepodařilo načíst.`,localOnly:`Pouze místní Git. Push, pull a pull requesty vyžadují samostatného důvěryhodného zprostředkovatele přihlašovacích údajů.`,newBranch:`Nová místní větev`,noCommits:`Zatím žádné commity.`,noDiff:`Textový diff zatím není k dispozici. Nesledované soubory se objeví po přípravě.`,notInitialized:`Git není inicializován`,selectChange:`Vyberte změněný soubor pro zobrazení diffu.`,selectPath:`Vybrat {{path}}`,stageAll:`Připravit vše`,stageSelected:`Připravit {{count}}`,staged:`Změny připraveny.`,switchBranch:`Přepnout místní větev`,changes:`Změny`,createBranch:`Vytvořit`,filterFiles:`Filtrovat změněné soubory`,noFilterMatches:`Tomuto filtru neodpovídají žádné změněné soubory.`,allChanges:`Všechny změny`,diffTruncated:`Tento diff je zkrácen.`,binaryFile:`Binární soubor, bez textového diffu.`},hostWorkspace:{hint:`Nechte prázdné pro izolovaný pracovní prostor, nebo nasměrujte úlohu na složku na tomto počítači.`,label:`Složka pracovního prostoru (volitelné)`,warning:`Úloha může tuto složku přímo číst i zapisovat. Pro izolovaný pracovní prostor nechte prázdné.`}},personaBackground:{label:`Obrázek pozadí`,uploadBackgroundImage:`Nahrát obrázek pozadí`,dragAndDrop:`Přetáhněte obrázek nebo klikněte pro procházení`,chooseImage:`Vybrat obrázek`,uploading:`Nahrávání...`,enterImageUrl:`Nebo zadejte URL obrázku`,supportedFormats:`Podporuje: JPG, PNG, GIF, WebP (max 5MB). Široké obrázky na šířku fungují nejlépe.`,customBackground:`Vlastní obrázek pozadí`,clickToChange:`Klikněte pro změnu nebo odstranění`,removed:`Pozadí odstraněno`,uploaded:`Pozadí úspěšně nahráno`,invalidFile:`Vyberte platný soubor obrázku`,fileTooLarge:`Velikost obrázku pozadí musí být menší než 5MB`,readFailed:`Nepodařilo se přečíst soubor obrázku`,uploadFailed:`Nepodařilo se nahrát obrázek pozadí`},modelSelector:{searchInstalled:`Hledat nainstalované modely...`,searchOllama:`Hledat v knihovně Ollama...`,searchHuggingFace:`Hledat na HuggingFace...`,selectModel:`Vybrat model`,personas:`Persony`,ollamaModels:`Modely Ollama`,pluginModels:`Modely pluginů`,actions:`Akce`,installed:`Nainstalováno`,use:`Použít`,pull:`Stáhnout`,pullRestricted:`Instalace modelů je v této instanci omezena pouze na administrátory.`,adminOnlyPull:`Pouze administrátoři`,legacyProvider:`poskytovatel nezaznamenán`,providerNotRecorded:`Poskytovatel nezaznamenán`,providerUnavailable:`poskytovatel nedostupný`,reselectProvider:`znovu vyberte poskytovatele pro připnutí modelu`,unavailable:`nedostupné`,unavailableSelections:`Nedostupné volby`,agentModels:`Agenti`},whatsNew:{title:`Co je nového`,releaseNotes:`Poznámky k vydání`,cta:`Dobře, jdeme na to`,starAsk:`Líbí se vám Libre WebUI? Dejte hvězdičku na GitHubu`},notes:{title:`Poznámky`,new:`Nová poznámka`,untitled:`Bez názvu`,empty:`Zatím žádné poznámky`,selectOrCreate:`Vyberte poznámku nebo vytvořte novou`,contentPlaceholder:`Pište v Markdownu…`,saved:`Uloženo`,saveFailed:`Poznámku se nepodařilo uložit`,createFailed:`Poznámku se nepodařilo vytvořit`,deleteConfirm:`Smazat tuto poznámku?`,deleteFailed:`Poznámku se nepodařilo smazat`},calendar:{title:`Kalendář`,today:`Dnes`,month:`Měsíc`,week:`Týden`,previous:`Předchozí`,next:`Další`,newEvent:`Nová událost`,editEvent:`Upravit událost`,eventTitle:`Název`,titlePlaceholder:`Název události`,date:`Datum`,start:`Začátek`,end:`Konec`,allDay:`Celý den`,repeat:`Opakovat`,repeatNone:`Neopakuje se`,repeatDaily:`Denně`,repeatWeekly:`Týdně`,repeatMonthly:`Měsíčně`,repeatYearly:`Ročně`,notes:`Poznámky`,more:`+{{n}} dalších`,loadFailed:`Kalendář se nepodařilo načíst`,saveFailed:`Událost se nepodařilo uložit`,deleteFailed:`Událost se nepodařilo smazat`},automations:{title:`Automatizace`,tab:{automations:`Automatizace`,runs:`Běhy`},newAutomation:`Nová automatizace`,editAutomation:`Upravit automatizaci`,empty:`Zatím žádné automatizace. Vytvořte si úlohu běžící podle plánu.`,loadFailed:`Automatizace se nepodařilo načíst`,saveFailed:`Automatizaci se nepodařilo uložit`,actionFailed:`Akce se nezdařila`,runQueued:`Běh zahájen`,status:{active:`Aktivní`,paused:`Pozastaveno`},nextRun:`Další běh {{when}}`,actions:`Akce`,pause:`Pozastavit`,resume:`Obnovit`,runNow:`Spustit teď`,openChat:`Otevřít chat`,noRuns:`Zatím žádné běhy`,deletedAutomation:`Smazaná automatizace`,runHistory:`Historie běhů (posledních 30 dní)`,succeeded:`úspěšných`,failed:`neúspěšných`,form:{name:`Název`,namePlaceholder:`Moje automatizace`,triggers:`Spouštěče`,addTrigger:`Přidat spouštěč`,instructions:`Instrukce`,instructionsPlaceholder:`Co se má podle tohoto plánu spouštět?`,model:`Model`,modelAuto:`Automaticky`,notification:`Oznámení`,notifyApp:`Aplikace`,notifyOff:`Vypnuto`,frequency:`Frekvence`,time:`Čas`,minute:`Minuta`,fromHour:`Od`,toHour:`Do`,weekday:`Den v týdnu`,dayOfMonth:`Den`,month:`Měsíc`},kind:{once:`Jednou`,hourly:`Každou hodinu`,daily:`Denně`,weekly:`Týdně`,monthly:`Měsíčně`,yearly:`Ročně`},trigger:{once:`Jednou {{when}}`,hourly:`Každou hodinu v :{{minute}}`,daily:`Denně v {{time}}`,weekly:`Týdně v {{day}} v {{time}}`,monthly:`Měsíčně {{day}}. den v {{time}}`,yearly:`Ročně {{date}} v {{time}}`},finishedNotification:`Dokončeno {{n}} běhů automatizace`,templatesTitle:`Šablony`,templates:{morningBrief:{name:`Ranní přehled`,description:`Začněte den titulky a prioritami.`},newsDigest:{name:`Přehled zpráv o AI`,description:`Vydání modelů, výzkum a financování, na kterých záleží.`},weeklyReview:{name:`Týdenní rekapitulace`,description:`Uzavřete týden: úspěchy, resty, priority.`},monthlyReport:{name:`Měsíční zpráva`,description:`Osnova stavové zprávy prvního dne v měsíci.`}}},home:{active:`aktivní`,continue:`Pokračovat`,start:`Začít`,explore:`Prozkoumat`},palette:{empty:`Žádné shody.`,placeholder:`Hledat chaty, Work, akce…`,toggleTheme:`Přepnout motiv`,actions:`Akce`,chats:`Chaty`,search:`Hledat`,settings:`Nastavení`,work:`Práce`},tabs:{actions:`Akce karty`,close:`Zavřít kartu`,closeAll:`Zavřít všechny karty`,closeOthers:`Zavřít ostatní karty`,closeRight:`Zavřít karty vpravo`,home:`Domů`,label:`Otevřené karty`,new:`Nová karta`,newWork:`Nový Work`,chat:`Chat`,newChat:`Nový chat`,work:`Práce`}};export{e as default};
|