From 42772a31edabbb7cdb1ac30cebeb0dff05aa4a53 Mon Sep 17 00:00:00 2001 From: InnovA AI Date: Mon, 16 Mar 2026 21:47:37 +0000 Subject: [PATCH] Initial release: DictIA v0.8.14-alpha (fork de Speakr, AGPL-3.0) --- .dockerignore | 63 + .gitattributes | 29 + .gitignore | 60 + .upstream-version | 1 + CHANGES.md | 121 + Dockerfile | 82 + LICENSE | 661 ++ NOTICE | 5 + README.md | 35 + VERSION | 1 + client_docs/depannage/fonctionnalites.md | 175 + client_docs/depannage/index.md | 49 + client_docs/depannage/performance.md | 93 + client_docs/depannage/transcription.md | 136 + client_docs/guide-admin/gestion-groupes.md | 227 + .../guide-admin/gestion-utilisateurs.md | 84 + client_docs/guide-admin/index.md | 135 + client_docs/guide-admin/modeles-ia.md | 62 + client_docs/guide-admin/parametres-systeme.md | 115 + client_docs/guide-admin/prompts.md | 121 + .../guide-admin/recherche-semantique.md | 60 + client_docs/guide-admin/retention.md | 212 + client_docs/guide-admin/sso.md | 103 + client_docs/guide-admin/statistiques.md | 82 + .../guide-utilisateur/application-mobile.md | 197 + client_docs/guide-utilisateur/dossiers.md | 115 + .../guide-utilisateur/enregistrement.md | 197 + client_docs/guide-utilisateur/groupes.md | 139 + client_docs/guide-utilisateur/index.md | 49 + client_docs/guide-utilisateur/parametres.md | 205 + client_docs/guide-utilisateur/partage.md | 105 + client_docs/guide-utilisateur/premiers-pas.md | 123 + client_docs/guide-utilisateur/recherche-ia.md | 80 + .../guide-utilisateur/transcriptions.md | 184 + client_docs/index.md | 48 + config/docker-compose.example.yml | 65 + config/env.asr.example | 259 + config/env.email.example | 109 + config/env.sso.example | 32 + config/env.transcription.example | 289 + config/env.whisper.example | 256 + config/env.whisperx.example | 241 + constraints.txt | 1 + deployment/README.md | 105 + deployment/asr-proxy/.gitignore | 5 + deployment/asr-proxy/asr-proxy.service | 22 + deployment/asr-proxy/dashboard.html | 1534 ++++ deployment/asr-proxy/proxy.py | 741 ++ deployment/asr-proxy/requirements.txt | 5 + deployment/asr-proxy/setup.sh | 87 + deployment/config/nginx/dictia.conf | 83 + deployment/config/systemd/dictia.service | 15 + deployment/config/tailscale/setup-serve.sh | 52 + deployment/docker/.env.example | 124 + deployment/docker/docker-compose.cloud.yml | 40 + .../docker/docker-compose.local-cpu.yml | 64 + .../docker/docker-compose.local-gpu.yml | 69 + deployment/docs/LOCAL-SETUP.md | 118 + deployment/docs/MAINTENANCE.md | 136 + deployment/docs/QUICKSTART.md | 90 + deployment/docs/TROUBLESHOOTING.md | 177 + deployment/docs/VPS-SETUP.md | 148 + .../profiles/docker-compose.dictia16.yml | 101 + .../profiles/docker-compose.dictia8.yml | 75 + deployment/profiles/env.dictia16.example | 134 + deployment/profiles/env.dictia8.example | 126 + deployment/security/docker-daemon.json | 8 + deployment/security/docker-iptables.service | 12 + deployment/security/iptables-rules.sh | 36 + deployment/setup.sh | 300 + deployment/tools/backup.sh | 89 + deployment/tools/health-check.sh | 157 + deployment/tools/restore.sh | 101 + deployment/tools/update.sh | 105 + requirements-embeddings.txt | 2 + requirements.txt | 25 + scripts/create_admin.py | 94 + scripts/docker-entrypoint.sh | 25 + scripts/docker_create_admin.py | 92 + scripts/download_offline_deps.py | 116 + scripts/migrate_docker.sh | 44 + scripts/migrate_existing_recordings.py | 142 + scripts/migrate_team_to_group.py | 137 + scripts/parse_asr_json.py | 219 + scripts/pre-commit | 21 + scripts/reset_db.py | 130 + scripts/resize_logo.py | 163 + scripts/resize_logo.sh | 83 + scripts/test-docs-build.sh | 44 + scripts/update_version.py | 60 + src/api/__init__.py | 0 src/api/admin.py | 1157 +++ src/api/api_v1.py | 2259 ++++++ src/api/audit.py | 107 + src/api/auth.py | 886 ++ src/api/docs.py | 201 + src/api/events.py | 173 + src/api/export_templates.py | 162 + src/api/folders.py | 665 ++ src/api/groups.py | 394 + src/api/inquire.py | 859 ++ src/api/naming_templates.py | 298 + src/api/push_notifications.py | 232 + src/api/recordings.py | 4080 ++++++++++ src/api/shares.py | 641 ++ src/api/speakers.py | 583 ++ src/api/system.py | 299 + src/api/tags.py | 430 + src/api/templates.py | 232 + src/api/tokens.py | 187 + src/app.py | 668 ++ src/audio_chunking.py | 1203 +++ src/auth/sso.py | 188 + src/config/__init__.py | 0 src/config/app_config.py | 164 + src/config/startup.py | 158 + src/config/version.py | 29 + src/database.py | 12 + src/file_exporter.py | 555 ++ src/file_monitor.py | 509 ++ src/init_db.py | 748 ++ src/models/__init__.py | 73 + src/models/access_log.py | 97 + src/models/api_token.py | 51 + src/models/audit.py | 109 + src/models/auth_log.py | 94 + src/models/events.py | 43 + src/models/export_template.py | 37 + src/models/inquire.py | 45 + src/models/naming_template.py | 114 + src/models/organization.py | 240 + src/models/processing_job.py | 63 + src/models/push_subscription.py | 37 + src/models/recording.py | 338 + src/models/sharing.py | 236 + src/models/speaker_snippet.py | 43 + src/models/system.py | 77 + src/models/templates.py | 37 + src/models/token_usage.py | 44 + src/models/transcription_usage.py | 42 + src/models/user.py | 98 + src/services/__init__.py | 34 + src/services/audit.py | 211 + src/services/calendar.py | 102 + src/services/document.py | 296 + src/services/email.py | 443 + src/services/embeddings.py | 422 + src/services/job_queue.py | 631 ++ src/services/llm.py | 498 ++ src/services/retention.py | 219 + src/services/speaker.py | 217 + src/services/speaker_cleanup.py | 295 + src/services/speaker_embedding_matcher.py | 453 ++ src/services/speaker_identification.py | 228 + src/services/speaker_merge.py | 226 + src/services/speaker_snippets.py | 371 + src/services/token_tracking.py | 270 + src/services/transcription/__init__.py | 98 + src/services/transcription/base.py | 243 + .../transcription/connectors/__init__.py | 15 + .../transcription/connectors/asr_endpoint.py | 337 + .../connectors/azure_openai_transcribe.py | 370 + .../connectors/openai_transcribe.py | 329 + .../connectors/openai_whisper.py | 153 + src/services/transcription/exceptions.py | 32 + src/services/transcription/registry.py | 353 + src/services/transcription_tracking.py | 312 + src/tasks/__init__.py | 30 + src/tasks/processing.py | 2232 +++++ src/utils/__init__.py | 81 + src/utils/audio_conversion.py | 405 + src/utils/database.py | 227 + src/utils/datetime.py | 46 + src/utils/error_formatting.py | 365 + src/utils/ffmpeg_utils.py | 448 + src/utils/ffprobe.py | 499 ++ src/utils/file_hash.py | 24 + src/utils/json_parser.py | 215 + src/utils/localization.py | 214 + src/utils/markdown.py | 132 + src/utils/security.py | 65 + src/utils/token_auth.py | 108 + src/utils/vapid_keys.py | 101 + static/css/loading.css | 83 + static/css/styles.css | 4266 ++++++++++ static/img/dark-mode.png | Bin 0 -> 337744 bytes static/img/edit_transcription.png | Bin 0 -> 300932 bytes static/img/favicon.ico | Bin 0 -> 9662 bytes static/img/icon-16x16.png | Bin 0 -> 1410 bytes static/img/icon-180x180.png | Bin 0 -> 39604 bytes static/img/icon-192x192.png | Bin 0 -> 43749 bytes static/img/icon-32x32.png | Bin 0 -> 2935 bytes static/img/icon-512x512.png | Bin 0 -> 234415 bytes static/img/icon-maskable-512x512.png | Bin 0 -> 97832 bytes .../img/intuitive-speaker-identification.png | Bin 0 -> 428690 bytes static/img/light-mode.png | Bin 0 -> 370031 bytes static/img/logo-dictia.png | Bin 0 -> 109058 bytes static/img/main.png | Bin 0 -> 333851 bytes static/img/main2.png | Bin 0 -> 389483 bytes .../manual-auto-speaker-identification.png | Bin 0 -> 465241 bytes static/img/multilingual-support.png | Bin 0 -> 401180 bytes static/img/rec1.png | Bin 0 -> 61009 bytes static/img/rec2.png | Bin 0 -> 52221 bytes static/img/rec3.png | Bin 0 -> 47197 bytes static/img/screenshots/main-view.png | Bin 0 -> 424799 bytes static/img/screenshots/mobile-view.png | Bin 0 -> 154173 bytes .../img/screenshots/recording-interface.png | Bin 0 -> 154540 bytes static/img/screenshots/transcript-view.png | Bin 0 -> 348539 bytes static/img/simple-transcription-view.png | Bin 0 -> 393082 bytes static/img/speaker-suggestions.png | Bin 0 -> 152856 bytes static/img/tags.png | Bin 0 -> 141132 bytes static/img/transcription-bubble-view.png | Bin 0 -> 389713 bytes static/img/transcription-chat-bubble-view.png | Bin 0 -> 350257 bytes static/js/app.modular.js | 2603 ++++++ static/js/composables/index.js | 17 + static/js/composables/useAudioRecorder.js | 217 + static/js/composables/useChat.js | 234 + static/js/composables/useFilters.js | 128 + static/js/composables/usePagination.js | 95 + static/js/composables/usePlayer.js | 147 + static/js/composables/useRecordings.js | 327 + static/js/composables/useSharing.js | 195 + static/js/composables/useTranscript.js | 209 + static/js/composables/useUI.js | 147 + static/js/composables/useUpload.js | 280 + static/js/config/push-config.js | 78 + static/js/csrf-refresh.js | 206 + static/js/i18n.js | 297 + static/js/loading.js | 201 + static/js/modules/composables/audio.js | 895 ++ static/js/modules/composables/audioPlayer.js | 338 + .../js/modules/composables/bulk-operations.js | 475 ++ .../js/modules/composables/bulk-selection.js | 111 + static/js/modules/composables/chat.js | 380 + static/js/modules/composables/folders.js | 173 + static/js/modules/composables/index.js | 33 + static/js/modules/composables/modals.js | 659 ++ static/js/modules/composables/pwa.js | 518 ++ static/js/modules/composables/recordings.js | 482 ++ static/js/modules/composables/reprocess.js | 450 + static/js/modules/composables/sharing.js | 659 ++ static/js/modules/composables/speakers.js | 1251 +++ static/js/modules/composables/tags.js | 297 + static/js/modules/composables/tokens.js | 286 + .../js/modules/composables/transcription.js | 484 ++ static/js/modules/composables/ui.js | 2110 +++++ static/js/modules/composables/upload.js | 824 ++ .../js/modules/composables/virtualScroll.js | 204 + static/js/modules/computed/index.js | 26 + static/js/modules/db/failed-uploads.js | 272 + static/js/modules/db/incognito-storage.js | 76 + static/js/modules/db/recording-persistence.js | 267 + static/js/modules/state/audio.js | 95 + static/js/modules/state/chat.js | 23 + static/js/modules/state/core.js | 164 + static/js/modules/state/index.js | 11 + static/js/modules/state/modals.js | 193 + static/js/modules/state/pwa.js | 39 + static/js/modules/state/sharing.js | 66 + static/js/modules/state/ui.js | 109 + static/js/modules/state/upload.js | 77 + static/js/modules/utils/api.js | 61 + static/js/modules/utils/colors.js | 50 + static/js/modules/utils/dates.js | 67 + static/js/modules/utils/errorDisplay.js | 271 + static/js/modules/utils/formatters.js | 139 + static/js/modules/utils/index.js | 9 + static/js/modules/utils/toast.js | 91 + static/js/shared-components.js | 262 + static/js/utils/apiClient.js | 119 + static/js/utils/audioUtils.js | 61 + static/js/utils/dateUtils.js | 83 + static/locales/de.json | 1505 ++++ static/locales/en.json | 1506 ++++ static/locales/es.json | 1505 ++++ static/locales/fr.json | 1532 ++++ static/locales/ru.json | 1505 ++++ static/locales/zh.json | 1656 ++++ static/manifest.json | 122 + static/offline.html | 64 + static/robots.txt | 65 + static/sw.js | 541 ++ templates/account.html | 7207 +++++++++++++++++ templates/admin.html | 3689 +++++++++ templates/auth/check_email.html | 127 + templates/auth/forgot_password.html | 105 + templates/auth/reset_password.html | 114 + templates/auth/verify_success.html | 85 + templates/components/banner.html | 11 + templates/components/detail-view.html | 57 + templates/components/detail/audio-player.html | 236 + .../detail/desktop-chat-section.html | 115 + .../components/detail/desktop-events-tab.html | 65 + .../components/detail/desktop-header.html | 220 + .../components/detail/desktop-notes-tab.html | 57 + .../detail/desktop-right-panel.html | 272 + .../detail/desktop-summary-tab.html | 71 + .../detail/desktop-transcription-panel.html | 263 + templates/components/detail/empty-state.html | 12 + .../components/detail/mobile-chat-panel.html | 59 + .../detail/mobile-events-panel.html | 65 + .../components/detail/mobile-header.html | 153 + .../components/detail/mobile-notes-panel.html | 26 + .../detail/mobile-summary-panel.html | 45 + .../detail/mobile-transcript-panel.html | 130 + .../components/detail/tab-navigation.html | 20 + templates/components/dictia/help-tab.html | 91 + templates/components/header.html | 99 + templates/components/progress-popup.html | 189 + templates/components/recording-view.html | 403 + templates/components/sidebar.html | 604 ++ .../components/token_budget_indicator.html | 17 + templates/components/upload-view.html | 404 + templates/group-admin.html | 1617 ++++ templates/includes/loading_overlay.html | 69 + templates/index.html | 171 + templates/inquire.html | 969 +++ templates/login.html | 178 + templates/modals/add-speaker-modal.html | 77 + templates/modals/asr-editor-modal.html | 154 + templates/modals/bulk-action-bar.html | 79 + templates/modals/bulk-delete-modal.html | 48 + templates/modals/bulk-reprocess-modal.html | 89 + templates/modals/bulk-tag-modal.html | 101 + templates/modals/color-scheme-modal.html | 51 + templates/modals/datetime-picker-modal.html | 132 + templates/modals/delete-modal.html | 32 + templates/modals/duplicates-modal.html | 40 + templates/modals/edit-modal.html | 50 + templates/modals/edit-participants-modal.html | 61 + templates/modals/edit-speakers-modal.html | 63 + templates/modals/edit-tags-modal.html | 85 + templates/modals/edit-text-modal.html | 38 + templates/modals/global-error.html | 18 + .../modals/recording-disclaimer-modal.html | 36 + .../modals/recording-recovery-modal.html | 64 + templates/modals/reprocess-modal.html | 184 + templates/modals/reset-modal.html | 31 + templates/modals/share-delete-modal.html | 52 + templates/modals/share-modal.html | 82 + templates/modals/shares-list-modal.html | 46 + templates/modals/speaker-modal.html | 353 + templates/modals/system-audio-help-modal.html | 53 + templates/modals/text-editor-modal.html | 32 + templates/modals/toast-container.html | 2 + templates/modals/unified-share-modal.html | 281 + templates/modals/upload-disclaimer-modal.html | 36 + templates/register.html | 164 + templates/share.html | 898 ++ tests/test_api_v1_speakers.py | 971 +++ tests/test_api_v1_upload.py | 82 + tests/test_audit.py | 331 + tests/test_bugfixes.py | 239 + tests/test_connector_architecture.py | 564 ++ tests/test_ffprobe_codec_detection.py | 319 + tests/test_hotwords.sh | 241 + tests/test_inquire_mode.py | 187 + tests/test_job_queue_race_condition.py | 281 + tests/test_json_fix.py | 58 + tests/test_json_preprocessing.py | 291 + tests/test_json_standalone.py | 340 + tests/test_migration_compatibility.py | 251 + tests/test_postgres_migrations.py | 165 + tests/test_video_passthrough.py | 435 + tests/test_video_retention.py | 370 + 365 files changed, 103572 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .upstream-version create mode 100644 CHANGES.md create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 NOTICE create mode 100644 README.md create mode 100644 VERSION create mode 100644 client_docs/depannage/fonctionnalites.md create mode 100644 client_docs/depannage/index.md create mode 100644 client_docs/depannage/performance.md create mode 100644 client_docs/depannage/transcription.md create mode 100644 client_docs/guide-admin/gestion-groupes.md create mode 100644 client_docs/guide-admin/gestion-utilisateurs.md create mode 100644 client_docs/guide-admin/index.md create mode 100644 client_docs/guide-admin/modeles-ia.md create mode 100644 client_docs/guide-admin/parametres-systeme.md create mode 100644 client_docs/guide-admin/prompts.md create mode 100644 client_docs/guide-admin/recherche-semantique.md create mode 100644 client_docs/guide-admin/retention.md create mode 100644 client_docs/guide-admin/sso.md create mode 100644 client_docs/guide-admin/statistiques.md create mode 100644 client_docs/guide-utilisateur/application-mobile.md create mode 100644 client_docs/guide-utilisateur/dossiers.md create mode 100644 client_docs/guide-utilisateur/enregistrement.md create mode 100644 client_docs/guide-utilisateur/groupes.md create mode 100644 client_docs/guide-utilisateur/index.md create mode 100644 client_docs/guide-utilisateur/parametres.md create mode 100644 client_docs/guide-utilisateur/partage.md create mode 100644 client_docs/guide-utilisateur/premiers-pas.md create mode 100644 client_docs/guide-utilisateur/recherche-ia.md create mode 100644 client_docs/guide-utilisateur/transcriptions.md create mode 100644 client_docs/index.md create mode 100644 config/docker-compose.example.yml create mode 100644 config/env.asr.example create mode 100644 config/env.email.example create mode 100644 config/env.sso.example create mode 100644 config/env.transcription.example create mode 100644 config/env.whisper.example create mode 100644 config/env.whisperx.example create mode 100644 constraints.txt create mode 100644 deployment/README.md create mode 100644 deployment/asr-proxy/.gitignore create mode 100644 deployment/asr-proxy/asr-proxy.service create mode 100644 deployment/asr-proxy/dashboard.html create mode 100644 deployment/asr-proxy/proxy.py create mode 100644 deployment/asr-proxy/requirements.txt create mode 100644 deployment/asr-proxy/setup.sh create mode 100644 deployment/config/nginx/dictia.conf create mode 100644 deployment/config/systemd/dictia.service create mode 100644 deployment/config/tailscale/setup-serve.sh create mode 100644 deployment/docker/.env.example create mode 100644 deployment/docker/docker-compose.cloud.yml create mode 100644 deployment/docker/docker-compose.local-cpu.yml create mode 100644 deployment/docker/docker-compose.local-gpu.yml create mode 100644 deployment/docs/LOCAL-SETUP.md create mode 100644 deployment/docs/MAINTENANCE.md create mode 100644 deployment/docs/QUICKSTART.md create mode 100644 deployment/docs/TROUBLESHOOTING.md create mode 100644 deployment/docs/VPS-SETUP.md create mode 100644 deployment/profiles/docker-compose.dictia16.yml create mode 100644 deployment/profiles/docker-compose.dictia8.yml create mode 100644 deployment/profiles/env.dictia16.example create mode 100644 deployment/profiles/env.dictia8.example create mode 100644 deployment/security/docker-daemon.json create mode 100644 deployment/security/docker-iptables.service create mode 100644 deployment/security/iptables-rules.sh create mode 100755 deployment/setup.sh create mode 100644 deployment/tools/backup.sh create mode 100644 deployment/tools/health-check.sh create mode 100644 deployment/tools/restore.sh create mode 100644 deployment/tools/update.sh create mode 100644 requirements-embeddings.txt create mode 100644 requirements.txt create mode 100644 scripts/create_admin.py create mode 100644 scripts/docker-entrypoint.sh create mode 100644 scripts/docker_create_admin.py create mode 100644 scripts/download_offline_deps.py create mode 100644 scripts/migrate_docker.sh create mode 100644 scripts/migrate_existing_recordings.py create mode 100755 scripts/migrate_team_to_group.py create mode 100755 scripts/parse_asr_json.py create mode 100755 scripts/pre-commit create mode 100644 scripts/reset_db.py create mode 100644 scripts/resize_logo.py create mode 100755 scripts/resize_logo.sh create mode 100755 scripts/test-docs-build.sh create mode 100644 scripts/update_version.py create mode 100644 src/api/__init__.py create mode 100644 src/api/admin.py create mode 100644 src/api/api_v1.py create mode 100644 src/api/audit.py create mode 100644 src/api/auth.py create mode 100644 src/api/docs.py create mode 100644 src/api/events.py create mode 100644 src/api/export_templates.py create mode 100644 src/api/folders.py create mode 100644 src/api/groups.py create mode 100644 src/api/inquire.py create mode 100644 src/api/naming_templates.py create mode 100644 src/api/push_notifications.py create mode 100644 src/api/recordings.py create mode 100644 src/api/shares.py create mode 100644 src/api/speakers.py create mode 100644 src/api/system.py create mode 100644 src/api/tags.py create mode 100644 src/api/templates.py create mode 100644 src/api/tokens.py create mode 100644 src/app.py create mode 100644 src/audio_chunking.py create mode 100644 src/auth/sso.py create mode 100644 src/config/__init__.py create mode 100644 src/config/app_config.py create mode 100644 src/config/startup.py create mode 100644 src/config/version.py create mode 100644 src/database.py create mode 100644 src/file_exporter.py create mode 100644 src/file_monitor.py create mode 100644 src/init_db.py create mode 100644 src/models/__init__.py create mode 100644 src/models/access_log.py create mode 100644 src/models/api_token.py create mode 100644 src/models/audit.py create mode 100644 src/models/auth_log.py create mode 100644 src/models/events.py create mode 100644 src/models/export_template.py create mode 100644 src/models/inquire.py create mode 100644 src/models/naming_template.py create mode 100644 src/models/organization.py create mode 100644 src/models/processing_job.py create mode 100644 src/models/push_subscription.py create mode 100644 src/models/recording.py create mode 100644 src/models/sharing.py create mode 100644 src/models/speaker_snippet.py create mode 100644 src/models/system.py create mode 100644 src/models/templates.py create mode 100644 src/models/token_usage.py create mode 100644 src/models/transcription_usage.py create mode 100644 src/models/user.py create mode 100644 src/services/__init__.py create mode 100644 src/services/audit.py create mode 100644 src/services/calendar.py create mode 100644 src/services/document.py create mode 100644 src/services/email.py create mode 100644 src/services/embeddings.py create mode 100644 src/services/job_queue.py create mode 100644 src/services/llm.py create mode 100644 src/services/retention.py create mode 100644 src/services/speaker.py create mode 100644 src/services/speaker_cleanup.py create mode 100644 src/services/speaker_embedding_matcher.py create mode 100644 src/services/speaker_identification.py create mode 100644 src/services/speaker_merge.py create mode 100644 src/services/speaker_snippets.py create mode 100644 src/services/token_tracking.py create mode 100644 src/services/transcription/__init__.py create mode 100644 src/services/transcription/base.py create mode 100644 src/services/transcription/connectors/__init__.py create mode 100644 src/services/transcription/connectors/asr_endpoint.py create mode 100644 src/services/transcription/connectors/azure_openai_transcribe.py create mode 100644 src/services/transcription/connectors/openai_transcribe.py create mode 100644 src/services/transcription/connectors/openai_whisper.py create mode 100644 src/services/transcription/exceptions.py create mode 100644 src/services/transcription/registry.py create mode 100644 src/services/transcription_tracking.py create mode 100644 src/tasks/__init__.py create mode 100644 src/tasks/processing.py create mode 100644 src/utils/__init__.py create mode 100644 src/utils/audio_conversion.py create mode 100644 src/utils/database.py create mode 100644 src/utils/datetime.py create mode 100644 src/utils/error_formatting.py create mode 100644 src/utils/ffmpeg_utils.py create mode 100644 src/utils/ffprobe.py create mode 100644 src/utils/file_hash.py create mode 100644 src/utils/json_parser.py create mode 100644 src/utils/localization.py create mode 100644 src/utils/markdown.py create mode 100644 src/utils/security.py create mode 100644 src/utils/token_auth.py create mode 100644 src/utils/vapid_keys.py create mode 100644 static/css/loading.css create mode 100644 static/css/styles.css create mode 100644 static/img/dark-mode.png create mode 100644 static/img/edit_transcription.png create mode 100644 static/img/favicon.ico create mode 100644 static/img/icon-16x16.png create mode 100644 static/img/icon-180x180.png create mode 100644 static/img/icon-192x192.png create mode 100644 static/img/icon-32x32.png create mode 100644 static/img/icon-512x512.png create mode 100644 static/img/icon-maskable-512x512.png create mode 100644 static/img/intuitive-speaker-identification.png create mode 100644 static/img/light-mode.png create mode 100644 static/img/logo-dictia.png create mode 100644 static/img/main.png create mode 100644 static/img/main2.png create mode 100644 static/img/manual-auto-speaker-identification.png create mode 100644 static/img/multilingual-support.png create mode 100644 static/img/rec1.png create mode 100644 static/img/rec2.png create mode 100644 static/img/rec3.png create mode 100644 static/img/screenshots/main-view.png create mode 100644 static/img/screenshots/mobile-view.png create mode 100644 static/img/screenshots/recording-interface.png create mode 100644 static/img/screenshots/transcript-view.png create mode 100644 static/img/simple-transcription-view.png create mode 100644 static/img/speaker-suggestions.png create mode 100644 static/img/tags.png create mode 100644 static/img/transcription-bubble-view.png create mode 100644 static/img/transcription-chat-bubble-view.png create mode 100644 static/js/app.modular.js create mode 100644 static/js/composables/index.js create mode 100644 static/js/composables/useAudioRecorder.js create mode 100644 static/js/composables/useChat.js create mode 100644 static/js/composables/useFilters.js create mode 100644 static/js/composables/usePagination.js create mode 100644 static/js/composables/usePlayer.js create mode 100644 static/js/composables/useRecordings.js create mode 100644 static/js/composables/useSharing.js create mode 100644 static/js/composables/useTranscript.js create mode 100644 static/js/composables/useUI.js create mode 100644 static/js/composables/useUpload.js create mode 100644 static/js/config/push-config.js create mode 100644 static/js/csrf-refresh.js create mode 100644 static/js/i18n.js create mode 100644 static/js/loading.js create mode 100644 static/js/modules/composables/audio.js create mode 100644 static/js/modules/composables/audioPlayer.js create mode 100644 static/js/modules/composables/bulk-operations.js create mode 100644 static/js/modules/composables/bulk-selection.js create mode 100644 static/js/modules/composables/chat.js create mode 100644 static/js/modules/composables/folders.js create mode 100644 static/js/modules/composables/index.js create mode 100644 static/js/modules/composables/modals.js create mode 100644 static/js/modules/composables/pwa.js create mode 100644 static/js/modules/composables/recordings.js create mode 100644 static/js/modules/composables/reprocess.js create mode 100644 static/js/modules/composables/sharing.js create mode 100644 static/js/modules/composables/speakers.js create mode 100644 static/js/modules/composables/tags.js create mode 100644 static/js/modules/composables/tokens.js create mode 100644 static/js/modules/composables/transcription.js create mode 100644 static/js/modules/composables/ui.js create mode 100644 static/js/modules/composables/upload.js create mode 100644 static/js/modules/composables/virtualScroll.js create mode 100644 static/js/modules/computed/index.js create mode 100644 static/js/modules/db/failed-uploads.js create mode 100644 static/js/modules/db/incognito-storage.js create mode 100644 static/js/modules/db/recording-persistence.js create mode 100644 static/js/modules/state/audio.js create mode 100644 static/js/modules/state/chat.js create mode 100644 static/js/modules/state/core.js create mode 100644 static/js/modules/state/index.js create mode 100644 static/js/modules/state/modals.js create mode 100644 static/js/modules/state/pwa.js create mode 100644 static/js/modules/state/sharing.js create mode 100644 static/js/modules/state/ui.js create mode 100644 static/js/modules/state/upload.js create mode 100644 static/js/modules/utils/api.js create mode 100644 static/js/modules/utils/colors.js create mode 100644 static/js/modules/utils/dates.js create mode 100644 static/js/modules/utils/errorDisplay.js create mode 100644 static/js/modules/utils/formatters.js create mode 100644 static/js/modules/utils/index.js create mode 100644 static/js/modules/utils/toast.js create mode 100644 static/js/shared-components.js create mode 100644 static/js/utils/apiClient.js create mode 100644 static/js/utils/audioUtils.js create mode 100644 static/js/utils/dateUtils.js create mode 100644 static/locales/de.json create mode 100644 static/locales/en.json create mode 100644 static/locales/es.json create mode 100644 static/locales/fr.json create mode 100644 static/locales/ru.json create mode 100644 static/locales/zh.json create mode 100644 static/manifest.json create mode 100644 static/offline.html create mode 100644 static/robots.txt create mode 100644 static/sw.js create mode 100644 templates/account.html create mode 100644 templates/admin.html create mode 100644 templates/auth/check_email.html create mode 100644 templates/auth/forgot_password.html create mode 100644 templates/auth/reset_password.html create mode 100644 templates/auth/verify_success.html create mode 100644 templates/components/banner.html create mode 100644 templates/components/detail-view.html create mode 100644 templates/components/detail/audio-player.html create mode 100644 templates/components/detail/desktop-chat-section.html create mode 100644 templates/components/detail/desktop-events-tab.html create mode 100644 templates/components/detail/desktop-header.html create mode 100644 templates/components/detail/desktop-notes-tab.html create mode 100644 templates/components/detail/desktop-right-panel.html create mode 100644 templates/components/detail/desktop-summary-tab.html create mode 100644 templates/components/detail/desktop-transcription-panel.html create mode 100644 templates/components/detail/empty-state.html create mode 100644 templates/components/detail/mobile-chat-panel.html create mode 100644 templates/components/detail/mobile-events-panel.html create mode 100644 templates/components/detail/mobile-header.html create mode 100644 templates/components/detail/mobile-notes-panel.html create mode 100644 templates/components/detail/mobile-summary-panel.html create mode 100644 templates/components/detail/mobile-transcript-panel.html create mode 100644 templates/components/detail/tab-navigation.html create mode 100644 templates/components/dictia/help-tab.html create mode 100644 templates/components/header.html create mode 100644 templates/components/progress-popup.html create mode 100644 templates/components/recording-view.html create mode 100644 templates/components/sidebar.html create mode 100644 templates/components/token_budget_indicator.html create mode 100644 templates/components/upload-view.html create mode 100644 templates/group-admin.html create mode 100644 templates/includes/loading_overlay.html create mode 100644 templates/index.html create mode 100644 templates/inquire.html create mode 100644 templates/login.html create mode 100644 templates/modals/add-speaker-modal.html create mode 100644 templates/modals/asr-editor-modal.html create mode 100644 templates/modals/bulk-action-bar.html create mode 100644 templates/modals/bulk-delete-modal.html create mode 100644 templates/modals/bulk-reprocess-modal.html create mode 100644 templates/modals/bulk-tag-modal.html create mode 100644 templates/modals/color-scheme-modal.html create mode 100644 templates/modals/datetime-picker-modal.html create mode 100644 templates/modals/delete-modal.html create mode 100644 templates/modals/duplicates-modal.html create mode 100644 templates/modals/edit-modal.html create mode 100644 templates/modals/edit-participants-modal.html create mode 100644 templates/modals/edit-speakers-modal.html create mode 100644 templates/modals/edit-tags-modal.html create mode 100644 templates/modals/edit-text-modal.html create mode 100644 templates/modals/global-error.html create mode 100644 templates/modals/recording-disclaimer-modal.html create mode 100644 templates/modals/recording-recovery-modal.html create mode 100644 templates/modals/reprocess-modal.html create mode 100644 templates/modals/reset-modal.html create mode 100644 templates/modals/share-delete-modal.html create mode 100644 templates/modals/share-modal.html create mode 100644 templates/modals/shares-list-modal.html create mode 100644 templates/modals/speaker-modal.html create mode 100644 templates/modals/system-audio-help-modal.html create mode 100644 templates/modals/text-editor-modal.html create mode 100644 templates/modals/toast-container.html create mode 100644 templates/modals/unified-share-modal.html create mode 100644 templates/modals/upload-disclaimer-modal.html create mode 100644 templates/register.html create mode 100644 templates/share.html create mode 100644 tests/test_api_v1_speakers.py create mode 100644 tests/test_api_v1_upload.py create mode 100644 tests/test_audit.py create mode 100644 tests/test_bugfixes.py create mode 100644 tests/test_connector_architecture.py create mode 100644 tests/test_ffprobe_codec_detection.py create mode 100755 tests/test_hotwords.sh create mode 100644 tests/test_inquire_mode.py create mode 100644 tests/test_job_queue_race_condition.py create mode 100644 tests/test_json_fix.py create mode 100644 tests/test_json_preprocessing.py create mode 100644 tests/test_json_standalone.py create mode 100644 tests/test_migration_compatibility.py create mode 100644 tests/test_postgres_migrations.py create mode 100644 tests/test_video_passthrough.py create mode 100644 tests/test_video_retention.py diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..1a676ef --- /dev/null +++ b/.dockerignore @@ -0,0 +1,63 @@ +# Git +.git +.gitignore + +# Docker +.dockerignore +Dockerfile +docker-compose*.yml + +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg +venv/ +.venv/ + +# Data directories (mounted as volumes) +data/ +uploads/ +instance/ +exports/ +auto-process/ + +# Non-runtime directories +temp/ +docs/ +site/ +plan/ +unraid/ +tests/ +.claude/ +.migrate/ +.github/ + +# IDE and editor files +.idea/ +.vscode/ +*.swp +*.swo + +# Logs and misc +*.log +*.md +!requirements*.txt +LICENSE +CLAUDE.md diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8653a3f --- /dev/null +++ b/.gitattributes @@ -0,0 +1,29 @@ +# Ensure shell scripts always use LF line endings, even on Windows +*.sh text eol=lf + +# Ensure Python files use LF line endings +*.py text eol=lf + +# Docker files should use LF +Dockerfile text eol=lf +docker-compose*.yml text eol=lf +.dockerignore text eol=lf + +# Config files should use LF +*.example text eol=lf +*.conf text eol=lf +*.config text eol=lf + +# Documentation uses LF +*.md text eol=lf + +# Binary files +*.png binary +*.jpg binary +*.jpeg binary +*.ico binary +*.gif binary +*.webp binary +*.db binary +*.pyc binary + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a6326e7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,60 @@ +.playwright-mcp/ +venv/ +__pycache__/ +instance/ +uploads/ +*.db +*.db-journal +__pycache__/ +*.pyc +*.log +*.env +.migrate/ +project_files.md +*.md +notes.md +docker-compose.yml +changes.txt + +!README.md +!CLA.md +!CONTRIBUTING.md +!CHANGES.md +!UPSTREAM-SYNC.md +!.github/CLA-SETUP.md +!docs/**/*.md +!deployment/**/*.md +!client_docs/**/*.md +!client_docs/*.md +docker-compose.dev.yml +docker-compose.lite.yml +docker-compose.postgres.yml +.clinerules +temp/ +.claude/ +plan/ + +# Offline vendor dependencies (downloaded during Docker build) +static/vendor/ + +# Docs build artifacts +docs/_site/ +docs/.jekyll-cache/ +docs/README.md +site/ +.cache/ +docs/overrides/.cache/ + +# Documentation deployment files (examples only) +docs/.github-deploy.yml + +# Documentation conversion scripts (one-time use) +scripts/convert_to_mkdocs.py +unraid/ + +# Internal ops files — do not commit to public repo +CLAUDE.md +UPSTREAM-SYNC.md +sync-upstream.sh +scripts/pre-sync-check.sh +scripts/check-dictia.sh diff --git a/.upstream-version b/.upstream-version new file mode 100644 index 0000000..d8fc6e6 --- /dev/null +++ b/.upstream-version @@ -0,0 +1 @@ +v0.8.14-alpha diff --git a/CHANGES.md b/CHANGES.md new file mode 100644 index 0000000..59d20cc --- /dev/null +++ b/CHANGES.md @@ -0,0 +1,121 @@ +# CHANGES — DictIA (fork de Speakr) + +Ce fichier documente les modifications apportees par InnovA AI au projet +[Speakr](https://github.com/murtaza-nasir/speakr) original, conformement a +la licence AGPL-3.0 (section 5). + +--- + +## [dictia-fr-prompts] — 2026-03-09 + +### Traduction FR et amelioration des prompts LLM + +**Prompts traduits et optimises** : +- Prompt de resume fallback : traduit en FR avec sections claires (Sujets, Decisions, Actions) +- Message systeme de resume : role prompting en FR ("expert en redaction de comptes rendus") +- Prompt d'identification des locuteurs : traduit en FR avec exemples francophones +- Prompt d'extraction d'evenements : traduit en FR avec exemples negatifs/positifs adaptes +- Message systeme d'extraction d'evenements : traduit en FR +- Labels de contexte (date, dossier, etiquettes, info utilisateur) : tous traduits en FR +- Directives linguistiques traduites en FR + +**Templates traduits (fallback text)** : +- `account.html` : section Nommage complete, Hotwords, Invite initiale, langues, poste, entreprise +- `account.html` : liste des langues de transcription (Anglais, Francais, etc.) +- `account.html` : onglets Transcription/Exportation/Nommage +- `admin.html` : tags d'equipe (langue, intervenants, retention, partage auto, protection) +- `fr.json` : correction "Created" → "Cree" + +--- + +## [v0.8.13-sync] — 2026-02-26 + +### Sync upstream Speakr v0.8.9-alpha → v0.8.13-alpha + +Mise a jour majeure incluant 4 releases upstream : + +**Nouvelles features (depuis upstream)** : +- Video retention (`VIDEO_RETENTION=true`) — garde les videos pour lecture in-browser +- Uploads paralleles (`MAX_CONCURRENT_UPLOADS=3`) +- Detection de doublons SHA-256 +- Speaker API avec authentification bearer token +- Volume controls sur tous les players audio/video +- Speaker search/filter sur la page management +- Auto-scroll follow-along sur les pages partagees +- Fix ffprobe timeout dynamique pour gros fichiers video + +**Bugfixes upstream inclus** : +- Fix enregistrements incognito pas affiches apres transcription +- Fix parametre langue pour connecteurs sans diarisation +- Fix defaults PostgreSQL double-quotes +- Fix MAX_CONTENT_LENGTH pas mis a jour +- Fix copyright dynamique sur pages partagees + +### Reorganisation du repo + +- **Branche unique `dictia`** : remplace les 6 anciennes branches (dictia-branding, dictia-deployment, feature/defaults-fr, feature/loi25-audit-trail, feat/logo-dictia, fix/logo-size) +- **Miroir upstream** : nouveau repo `Innova-AI/speakr-upstream` sur Gitea, sync auto toutes les 8h +- **Process simplifie** : mise a jour upstream = 3 commandes (fetch + merge + build) +- Anciennes branches supprimees, `dictia` est la branche par defaut +- Documentation mise a jour (CLAUDE.md, UPSTREAM-SYNC.md) + +--- + +## [dictia-branding] — 2026-02-11 + +### Rebranding visuel Speakr → DictIA + +Toutes les occurrences visuelles modifiees : + +**Titres de pages** : index, login, register, account, admin, group-admin, inquire, auth/* +**Headers et logos** : header principal, login, register, account, admin, group-admin, inquire, share, auth/* +**PWA** : manifest.json, sw.js, offline.html, loading_overlay.html +**Traductions** : footer d export dans les 6 fichiers locales +**Logo** : logo-dictia.png (micro + ondes + reseau IA) +**Traductions FR** : page login complete, modal aide audio systeme + +### Footer legal (Loi 25 du Quebec + AGPL-3.0) + +Footer sur toutes les pages contenant : +- Lien vers le code source (obligation AGPL-3.0) +- Lien Politique de confidentialite (Loi 25) +- Lien Conditions d utilisation (Loi 25) + +--- + +## [dictia-audit] — 2026-02-11 + +### Audit trail Loi 25 + +- `src/models/access_log.py` : modele AccessLog +- `src/models/auth_log.py` : modele AuthLog +- `src/api/audit.py` : endpoints API audit +- Integration dans `src/app.py` (ENABLE_AUDIT_LOG) + +--- + +## [dictia-defaults] — 2026-02-11 + +### Defaults FR + +- `src/init_db.py` : dossiers actives, prompt FR structure, limites augmentees +- `enable_folders=true`, `max_file_size_mb=10000`, `transcript_length_limit=50000` + +--- + +## [dictia-deployment] — 2026-02-11 + +### Infrastructure de deploiement + +- Docker Compose : cloud, local-gpu, local-cpu +- ASR Proxy GCP GPU (fallback multi-zone Canada) +- Securite : iptables, Docker log rotation +- Nginx reverse proxy + Tailscale HTTPS +- Scripts : backup, restore, update, health-check +- Documentation : quickstart, VPS setup, maintenance, troubleshooting + +--- + +Projet original : Speakr par Murtaza Nasir — https://github.com/murtaza-nasir/speakr +Copyright original : (c) Speakr contributors, sous licence AGPL-3.0 +Modifications : (c) 2026 InnovA AI — https://innova-ai.ca diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9a38473 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,82 @@ +############################################################################### +# Stage 1: Builder — install Python deps and download vendor assets +############################################################################### +FROM python:3.11-slim AS builder + +ARG PRODUCTION=0 +ARG LIGHTWEIGHT=1 + +WORKDIR /app + +# gcc is needed to compile C extensions during pip install +RUN apt-get update && apt-get install -y --no-install-recommends gcc \ + && rm -rf /var/lib/apt/lists/* + +# Install Python dependencies +COPY requirements.txt requirements-embeddings.txt constraints.txt ./ +RUN pip install --no-cache-dir --prefix=/install -c constraints.txt -r requirements.txt && \ + if [ "$LIGHTWEIGHT" = "0" ]; then \ + pip install --no-cache-dir --prefix=/install -c constraints.txt -r requirements-embeddings.txt; \ + fi + +# Download vendor assets (JS/CSS/fonts) +RUN mkdir -p /app/static/vendor +COPY scripts/download_offline_deps.py scripts/ +RUN pip install --no-cache-dir requests && \ + PRODUCTION=${PRODUCTION} python scripts/download_offline_deps.py && \ + echo "✓ Vendor dependencies downloaded successfully" + +############################################################################### +# Stage 2: FFmpeg — download static binaries (much smaller than apt ffmpeg) +############################################################################### +FROM python:3.11-slim AS ffmpeg-stage + +RUN apt-get update && apt-get install -y --no-install-recommends wget xz-utils \ + && rm -rf /var/lib/apt/lists/* \ + && ARCH=$(dpkg --print-architecture) \ + && wget -q https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-${ARCH}-static.tar.xz -O /tmp/ff.tar.xz \ + && mkdir -p /tmp/ffmpeg-dir \ + && tar xf /tmp/ff.tar.xz -C /tmp/ffmpeg-dir --strip-components=1 \ + && mv /tmp/ffmpeg-dir/ffmpeg /usr/local/bin/ffmpeg \ + && mv /tmp/ffmpeg-dir/ffprobe /usr/local/bin/ffprobe \ + && chmod +x /usr/local/bin/ffmpeg /usr/local/bin/ffprobe \ + && rm -rf /tmp/ff.tar.xz /tmp/ffmpeg-dir + +############################################################################### +# Stage 3: Runtime — lean final image with only what's needed +############################################################################### +FROM python:3.11-slim + +WORKDIR /app + +# Copy static ffmpeg binaries (~150MB vs ~450MB from apt) +COPY --from=ffmpeg-stage /usr/local/bin/ffmpeg /usr/local/bin/ffmpeg +COPY --from=ffmpeg-stage /usr/local/bin/ffprobe /usr/local/bin/ffprobe + +# Copy installed Python packages from builder +COPY --from=builder /install /usr/local + +# Copy downloaded vendor assets from builder +COPY --from=builder /app/static/vendor /app/static/vendor + +# Copy application code +COPY . . + +# Create necessary directories +RUN mkdir -p /data/uploads /data/instance && chmod 755 /data/uploads /data/instance + +# Set environment variables +ENV FLASK_APP=src/app.py +ENV SQLALCHEMY_DATABASE_URI=sqlite:////data/instance/transcriptions.db +ENV UPLOAD_FOLDER=/data/uploads +ENV PYTHONPATH=/app +ENV HF_HOME=/data/instance/huggingface + +# Add entrypoint script +COPY scripts/docker-entrypoint.sh /usr/local/bin/ +RUN chmod +x /usr/local/bin/docker-entrypoint.sh + +EXPOSE 8899 + +ENTRYPOINT ["docker-entrypoint.sh"] +CMD ["gunicorn", "--workers", "3", "--bind", "0.0.0.0:8899", "--timeout", "600", "src.app:app"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0ad25db --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..178d8f7 --- /dev/null +++ b/NOTICE @@ -0,0 +1,5 @@ +DictIA — Transcription Audio par IA +Copyright (C) 2026 InnovA AI + +AGPL-3.0 — voir LICENSE +Oeuvre originale: github.com/murtaza-nasir/speakr (C) 2024-2026 Murtaza Nasir diff --git a/README.md b/README.md new file mode 100644 index 0000000..e5ae33a --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# DictIA — Transcription Audio par IA + +Application de transcription audio propulsee par l'intelligence artificielle. Transformez vos enregistrements en texte structure avec identification des locuteurs, resumes automatiques et recherche semantique. + +## Fonctionnalites + +- Transcription automatique avec diarisation (identification des locuteurs) +- Resumes et points d'action generes par IA +- Recherche semantique dans vos transcriptions (mode Inquire) +- Interface web moderne (PWA installable) +- Support multilingue (francais, anglais, allemand, espagnol, russe, chinois) +- Gestion des dossiers, tags et partage +- Conformite Loi 25 (Quebec) — journal d'audit integre +- 100% auto-heberge — vos donnees restent chez vous + +## Demarrage rapide + +Voir le [guide de demarrage](client_docs/guide-utilisateur/premiers-pas.md). + +## Documentation + +- [Guide utilisateur](client_docs/guide-utilisateur/index.md) +- [Guide administrateur](client_docs/guide-admin/index.md) +- [Depannage](client_docs/depannage/index.md) + +## Deploiement + +Voir le [guide de deploiement](deployment/README.md) et les profils Docker dans `deployment/profiles/`. + +## Licence + +AGPL-3.0 — voir [LICENSE](LICENSE). +Base sur le projet open source [Speakr](https://github.com/murtaza-nasir/speakr) par Murtaza Nasir. + +Copyright (C) 2026 InnovA AI diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..d8fc6e6 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +v0.8.14-alpha diff --git a/client_docs/depannage/fonctionnalites.md b/client_docs/depannage/fonctionnalites.md new file mode 100644 index 0000000..b4c3a1d --- /dev/null +++ b/client_docs/depannage/fonctionnalites.md @@ -0,0 +1,175 @@ +# Dépannage : Fonctionnalités + +Ce guide couvre les problèmes liés aux fonctionnalités spécifiques de DictIA et les solutions pour les résoudre. + +--- + +## Identification des locuteurs + +### Les locuteurs ne sont pas identifiés + +Si vos transcriptions n'affichent aucune distinction entre les locuteurs (tout le texte est attribué à un seul intervenant), cela peut être dû à la configuration du service de transcription. + +**Que faire** : + +- Vérifiez que l'identification des locuteurs est bien activée dans vos paramètres. Lors du téléversement ou du retraitement d'un enregistrement, assurez-vous que l'option d'identification des locuteurs est cochée. +- Vérifiez les paramètres de nombre de locuteurs. Si le nombre minimum et maximum sont tous les deux réglés à 1, l'identification est effectivement désactivée. Utilisez une plage raisonnable, par exemple 2 à 6 locuteurs pour la plupart des réunions. +- Si le problème persiste, contactez le support InnovA AI. + +### Tous les locuteurs affichent « LOCUTEUR INCONNU » + +Si la transcription affiche « LOCUTEUR INCONNU » au lieu de locuteurs numérotés (LOCUTEUR_00, LOCUTEUR_01, etc.), cela indique un problème de configuration du service de transcription côté serveur. + +**Que faire** : + +- Contactez le support InnovA AI pour vérifier la configuration du service de transcription. + +### Comment identifier les locuteurs après la transcription + +Après la transcription, les locuteurs apparaissent avec des étiquettes génériques (LOCUTEUR_01, LOCUTEUR_02, etc.). Pour les identifier : + +1. Cliquez sur l'étiquette d'un locuteur dans la transcription. +2. Attribuez-lui un nom (par exemple, « Marie Tremblay »). +3. Ce profil de locuteur est sauvegardé dans votre bibliothèque personnelle. +4. Lors de futurs enregistrements, DictIA peut suggérer automatiquement l'identité des locuteurs en fonction de leurs profils vocaux. + +Gérez votre bibliothèque de locuteurs dans *Paramètres du compte* > *Gestion des locuteurs*. + +--- + +## Partage d'enregistrements + +### Le bouton de partage est désactivé + +Le partage par lien externe nécessite que votre instance DictIA soit accessible via une connexion sécurisée (HTTPS). Si le bouton de partage est désactivé ou affiche une erreur, cela signifie que cette condition n'est pas remplie. + +**Que faire** : + +- Contactez le support InnovA AI pour configurer l'accès HTTPS sur votre instance. + +### Les liens de partage ne fonctionnent pas + +Si vous avez créé un lien de partage mais que les destinataires ne peuvent pas y accéder : + +**Que faire** : + +- Vérifiez que le lien n'a pas été révoqué. Consultez vos partages actifs dans l'interface de gestion des partages. +- Assurez-vous que le destinataire dispose d'une connexion internet et utilise un navigateur récent. +- Si le problème persiste, contactez le support InnovA AI. + +### Partage interne (entre utilisateurs) + +Pour partager un enregistrement avec un collègue qui dispose d'un compte DictIA : + +- Utilisez la fonction de partage interne plutôt que les liens externes. +- Recherchez l'utilisateur par son nom d'utilisateur et définissez le niveau d'accès souhaité : lecture seule, modification ou re-partage. +- Le destinataire verra l'enregistrement partagé dans sa liste. + +--- + +## Recherche IA (recherche sémantique) + +### La Recherche IA ne retourne aucun résultat + +La Recherche IA utilise une technologie de recherche sémantique qui comprend le sens et le contexte de vos questions, plutôt que de chercher des mots-clés exacts. + +**Causes possibles** : + +- **Enregistrements non indexés** : Vos enregistrements doivent être traités et indexés avant d'être consultables via la Recherche IA. Ce processus peut prendre un certain temps après la transcription. +- **Formulation de la question** : La Recherche IA fonctionne mieux avec des questions complètes plutôt qu'avec des mots isolés. + +**Que faire** : + +- Posez des questions complètes. Par exemple, « Qu'avons-nous décidé concernant le budget? » fonctionne mieux que simplement « budget décision ». +- Patientez quelques minutes après une nouvelle transcription pour que l'indexation soit complétée. +- Si aucun enregistrement n'apparaît jamais dans les résultats de recherche, contactez le support InnovA AI pour vérifier que la recherche sémantique est activée et fonctionnelle. + +### Résultats de recherche non pertinents + +**Que faire** : + +- Reformulez votre question de manière plus précise ou plus détaillée. +- Essayez différentes formulations pour le même sujet. +- Gardez en tête que la Recherche IA comprend le sens, pas les mots exacts. « Combien coûte le projet? » trouvera du contenu qui parle de « budget » ou de « montant estimé ». + +--- + +## Application mobile + +### Installation de l'application mobile + +DictIA est une application web progressive (PWA). Cela signifie que vous n'avez pas besoin de l'installer depuis un magasin d'applications. Pour l'installer sur votre appareil : + +**Sur iPhone/iPad (Safari)** : + +1. Ouvrez DictIA dans Safari. +2. Appuyez sur le bouton de partage (icône avec une flèche vers le haut). +3. Sélectionnez « Sur l'écran d'accueil ». + +**Sur Android (Chrome)** : + +1. Ouvrez DictIA dans Chrome. +2. Appuyez sur le menu (trois points) en haut à droite. +3. Sélectionnez « Installer l'application » ou « Ajouter à l'écran d'accueil ». + +### L'application mobile ne fonctionne pas correctement + +**Que faire** : + +- Assurez-vous d'utiliser un navigateur compatible (Safari sur iOS, Chrome sur Android). +- Vérifiez votre connexion internet. +- Essayez de supprimer l'application de votre écran d'accueil et de la réinstaller. +- Videz le cache du navigateur si l'application se comporte de manière inattendue. + +### L'enregistrement audio ne fonctionne pas sur mobile + +Certains navigateurs mobiles ont des restrictions sur l'accès au microphone. + +**Que faire** : + +- Assurez-vous que DictIA a la permission d'accéder au microphone de votre appareil. +- Sur iOS, utilisez Safari (les autres navigateurs peuvent avoir des limitations). +- Vérifiez que votre navigateur est à jour. + +--- + +## Connexion et accès au compte + +### Impossible de se connecter + +**Que faire** : + +- Vérifiez que vous utilisez le bon nom d'utilisateur et le bon mot de passe. Ceux-ci sont sensibles à la casse (majuscules/minuscules). +- Si vous avez oublié votre mot de passe, utilisez la fonction de réinitialisation du mot de passe sur la page de connexion (si disponible sur votre instance). +- Contactez votre administrateur ou le support InnovA AI si vous ne parvenez pas à récupérer l'accès à votre compte. + +### Compte verrouillé + +Si votre compte semble verrouillé ou désactivé : + +**Que faire** : + +- Contactez votre administrateur DictIA pour vérifier le statut de votre compte. + +--- + +## Avis d'enregistrement (conformité légale) + +Dans de nombreuses juridictions, vous devez informer les participants qu'ils sont enregistrés. DictIA permet d'afficher un avis de consentement avant tout enregistrement. + +Si l'avis d'enregistrement ne s'affiche pas alors qu'il devrait : + +**Que faire** : + +- Contactez votre administrateur ou le support InnovA AI pour activer et configurer l'avis d'enregistrement dans les paramètres système. + +--- + +## Besoin d'aide supplémentaire? + +Si les solutions ci-dessus ne résolvent pas votre problème, contactez le support InnovA AI en fournissant : + +- La description du problème et les étapes pour le reproduire. +- Le navigateur et l'appareil utilisés. +- Des captures d'écran si possible. +- Votre version de DictIA (disponible dans *Paramètres* > *À propos*). diff --git a/client_docs/depannage/index.md b/client_docs/depannage/index.md new file mode 100644 index 0000000..b8cf839 --- /dev/null +++ b/client_docs/depannage/index.md @@ -0,0 +1,49 @@ +# Dépannage + +Cette section vous aide à identifier et résoudre les problèmes courants que vous pourriez rencontrer avec DictIA. Les guides sont organisés par catégorie pour vous permettre de trouver rapidement la solution appropriée. + +--- + +## Guides de dépannage + +### [Problèmes de transcription](transcription.md) + +Résolvez les problèmes liés à la transcription de vos enregistrements : + +- Qualité de transcription insuffisante +- Problèmes de langue et de détection automatique +- Vocabulaire personnalisé et termes spécialisés +- Résumés qui ne se génèrent pas correctement +- Formats audio non reconnus + +### [Problèmes de performance](performance.md) + +Résolvez les problèmes de lenteur et de traitement : + +- Interface web lente ou saccadée +- Fichiers volumineux et délais de traitement +- Enregistrements bloqués dans la file d'attente +- Délais d'expiration sur les longs enregistrements + +### [Problèmes de fonctionnalités](fonctionnalites.md) + +Résolvez les problèmes liés aux fonctionnalités spécifiques : + +- Identification des locuteurs +- Partage d'enregistrements +- Recherche IA (recherche sémantique) +- Application mobile +- Connexion et accès au compte + +--- + +## Informations utiles pour le support + +Si les solutions proposées ne résolvent pas votre problème, contactez le support InnovA AI en fournissant les informations suivantes : + +- **Version de DictIA** : Disponible dans l'onglet *À propos* des paramètres de votre compte. +- **Description du problème** : Décrivez les étapes que vous avez suivies et le comportement observé. +- **Messages d'erreur** : Notez tout message d'erreur affiché à l'écran. +- **Navigateur utilisé** : Indiquez le navigateur et sa version (ex. : Chrome 120, Firefox 121). + +**Contact** : Communiquez avec l'équipe InnovA AI via les canaux de support mis à votre disposition par votre administrateur. diff --git a/client_docs/depannage/performance.md b/client_docs/depannage/performance.md new file mode 100644 index 0000000..bae06e3 --- /dev/null +++ b/client_docs/depannage/performance.md @@ -0,0 +1,93 @@ +# Dépannage : Performance + +Ce guide couvre les problèmes de performance courants dans DictIA et les solutions pour les résoudre. + +--- + +## Transcription lente + +Le temps de traitement d'une transcription dépend de plusieurs facteurs : + +- **Durée de l'enregistrement** : Plus le fichier audio est long, plus le traitement prend de temps. Un enregistrement d'une heure prend naturellement plus de temps qu'un enregistrement de 5 minutes. +- **Taille du fichier** : Les fichiers volumineux nécessitent plus de temps de transfert et de traitement. +- **Charge du système** : Si plusieurs utilisateurs téléversent des enregistrements simultanément, les temps de traitement augmentent. +- **Modèle de transcription** : Les modèles plus précis sont généralement plus lents. Un modèle optimisé pour la vitesse traite plus rapidement mais peut être légèrement moins précis. + +**Que faire** : + +- Patientez. La plupart des transcriptions se complètent en quelques minutes pour des enregistrements de durée normale (moins de 30 minutes). +- Pour les fichiers très volumineux, prévoyez un temps de traitement plus long. +- Si les transcriptions sont systématiquement très lentes, contactez le support InnovA AI. + +--- + +## Fichiers volumineux qui échouent + +Certains fichiers très volumineux (plus de 25 Mo) peuvent échouer lors du traitement si le service de transcription impose des limites de taille. + +**Que faire** : + +- DictIA peut être configuré pour découper automatiquement les fichiers volumineux en segments plus petits. Si vos fichiers échouent systématiquement, contactez le support InnovA AI pour activer ou ajuster le découpage automatique. +- Si possible, compressez vos fichiers audio avant de les téléverser (par exemple, convertissez un fichier WAV en MP3). + +--- + +## Délai d'expiration sur les longs enregistrements + +Les enregistrements très longs (plus de 30 minutes) peuvent dépasser le délai d'attente maximal du service de transcription. + +**Que faire** : + +- Si un enregistrement long échoue avec un message de délai d'expiration, contactez le support InnovA AI pour ajuster le paramètre de délai maximal. +- En attendant, vous pouvez découper votre enregistrement en segments plus courts (par exemple, par tranches de 30 minutes) et les téléverser séparément. + +--- + +## Enregistrements bloqués après un redémarrage + +Si le système a été redémarré pendant le traitement d'enregistrements, ceux-ci reprennent automatiquement au prochain démarrage. La file d'attente est persistante, donc aucun téléversement n'est perdu. + +**Que faire** : + +- Patientez quelques minutes après un redémarrage pour que les enregistrements en cours reprennent leur traitement. +- Si un enregistrement reste bloqué plus de 30 minutes après un redémarrage, contactez le support InnovA AI. + +--- + +## L'interface web est lente ou saccadée + +La performance du navigateur peut se dégrader dans certaines situations : + +### Transcriptions très longues + +Les enregistrements de plus de 2 heures génèrent un volume important de texte que certains navigateurs peinent à afficher de manière fluide. L'affichage en mode « bulles » pour les transcriptions avec identification des locuteurs est particulièrement exigeant en ressources. + +**Que faire** : + +- Utilisez l'affichage simple plutôt que l'affichage en bulles pour les transcriptions très longues. +- Fermez les autres onglets de votre navigateur pour libérer de la mémoire. + +### Cache du navigateur + +Le cache local peut devenir volumineux ou corrompu avec le temps, ce qui ralentit l'interface. + +**Que faire** : + +- Effectuez un rafraîchissement complet de la page avec **Ctrl+Maj+R** (Windows) ou **Cmd+Maj+R** (Mac). +- Videz le cache de votre navigateur si le problème persiste. + +### Navigateur et appareil + +- Assurez-vous d'utiliser une version récente de votre navigateur (Chrome, Firefox, Edge ou Safari). +- Sur les appareils mobiles ou les ordinateurs plus anciens, la performance peut être réduite avec de très longues transcriptions. + +--- + +## Besoin d'aide supplémentaire? + +Si les solutions ci-dessus ne résolvent pas votre problème, contactez le support InnovA AI en fournissant : + +- La description du problème et les étapes pour le reproduire. +- Le navigateur et l'appareil utilisés. +- La durée approximative de l'enregistrement concerné. +- Votre version de DictIA (disponible dans *Paramètres* > *À propos*). diff --git a/client_docs/depannage/transcription.md b/client_docs/depannage/transcription.md new file mode 100644 index 0000000..0c24c98 --- /dev/null +++ b/client_docs/depannage/transcription.md @@ -0,0 +1,136 @@ +# Dépannage : Transcription + +Ce guide couvre les problèmes courants liés à la transcription de vos enregistrements dans DictIA et les solutions à appliquer. + +--- + +## La transcription ne démarre pas + +Lorsqu'un enregistrement reste au statut « En attente » ou « En file d'attente » pendant une période prolongée, voici les causes possibles : + +**Statut « En file d'attente »** : Les enregistrements affichent ce statut lorsqu'ils attendent un processus de traitement disponible. Si plusieurs enregistrements sont en file d'attente, ils seront traités dans un ordre équitable entre les utilisateurs. Aucun utilisateur ne peut monopoliser la file d'attente. + +**Que faire** : + +- Patientez quelques minutes. Si votre instance est partagée avec d'autres utilisateurs, votre enregistrement sera traité à son tour. +- Si l'enregistrement reste bloqué plus de 30 minutes, contactez le support InnovA AI. + +--- + +## La transcription échoue immédiatement + +Un échec rapide de la transcription indique généralement un problème de configuration côté serveur. + +**Que faire** : + +- Vérifiez que votre fichier audio n'est pas corrompu en l'écoutant dans un autre lecteur. +- Réessayez le téléversement de votre fichier. +- Si le problème persiste, contactez le support InnovA AI. + +--- + +## Qualité de transcription insuffisante + +La précision de la transcription dépend fortement de la qualité audio. Voici les facteurs qui influencent les résultats : + +### Qualité audio + +- **Bruit de fond** : Le bruit ambiant, la musique ou les conversations en arrière-plan dégradent considérablement les résultats. +- **Chevauchement des voix** : Lorsque plusieurs personnes parlent en même temps, la transcription devient imprécise. +- **Microphone** : Un mauvais positionnement du microphone ou un micro de faible qualité affecte la clarté. + +**Bonnes pratiques pour un enregistrement de qualité** : + +- Enregistrez dans un environnement calme. +- Utilisez un microphone de bonne qualité, positionné près des intervenants. +- Pour les réunions, placez le micro au centre de la table. +- Évitez la musique de fond ou les bruits parasites. + +### Problème de langue + +Si la langue de transcription configurée ne correspond pas à la langue réellement parlée dans l'enregistrement, la précision diminue fortement. + +**Que faire** : + +- Vérifiez le paramètre de langue dans vos réglages de compte, sous *Préférences de langue*. +- Vous pouvez sélectionner une langue spécifique ou laisser la détection automatique si vos enregistrements sont dans des langues variées. +- Pour la transcription en chinois, assurez-vous que le modèle utilisé est compatible. Certains modèles simplifiés ne prennent pas correctement en charge le chinois. Si vous obtenez du texte romanisé au lieu de caractères chinois, contactez le support InnovA AI. + +--- + +## Termes spécialisés mal transcrits + +Il est fréquent que les noms propres, acronymes, termes techniques ou noms de marque soient mal transcrits. DictIA offre deux fonctionnalités pour corriger cela : + +### Vocabulaire personnalisé + +Fournissez une liste de termes séparés par des virgules que le moteur de transcription doit prioriser. Par exemple, si « PyAnnote » est systématiquement transcrit comme « piano » ou « pie annotate », ajoutez-le à votre vocabulaire personnalisé. + +### Indice de transcription (Initial Prompt) + +Donnez au moteur de transcription un contexte plus large sur le contenu de votre enregistrement, ce qui l'aide à faire de meilleurs choix lexicaux. + +### Niveaux de configuration + +Ces paramètres peuvent être définis à plusieurs niveaux, du plus prioritaire au moins prioritaire : + +1. **Par téléversement** : Dans les options avancées lors du téléversement d'un fichier. +2. **Par étiquette** : Dans les paramètres d'une étiquette (appliqué automatiquement lorsque cette étiquette est sélectionnée). +3. **Par dossier** : Dans les paramètres d'un dossier (appliqué à tous les enregistrements du dossier). +4. **Par utilisateur** : Dans les *Paramètres du compte*, section *Options de transcription* (vos valeurs par défaut personnelles). + +--- + +## Erreur « Format non reconnu » + +Si vous recevez une erreur indiquant que le format audio n'est pas reconnu, cela signifie que le service de transcription ne prend pas en charge le codec de votre fichier. + +**Que faire** : + +- Convertissez votre fichier audio dans un format plus courant (MP3 ou WAV) avant de le téléverser. +- Si le problème se produit fréquemment, contactez le support InnovA AI pour qu'une solution automatique soit configurée. + +--- + +## Le résumé ne se génère pas + +Si aucun résumé n'est produit après la transcription : + +**Que faire** : + +- Vérifiez que la transcription elle-même a été complétée avec succès. +- Essayez de retraiter le résumé en cliquant sur « Retraiter le résumé » dans la page de l'enregistrement. +- Si le problème persiste, contactez le support InnovA AI. + +--- + +## La langue du résumé ne correspond pas à vos préférences + +Si les résumés sont générés dans une langue différente de celle configurée dans vos préférences : + +**Que faire** : + +- Vérifiez vos préférences de langue dans *Paramètres du compte* > *Préférences de langue*. +- Essayez de retraiter le résumé après avoir confirmé vos préférences. +- Si le problème persiste malgré des préférences correctes, contactez le support InnovA AI. Ce comportement peut être lié au modèle IA utilisé par votre instance. + +--- + +## Transcription modifiable + +Sachez que les transcriptions sont entièrement modifiables après leur génération. Si vous constatez des erreurs : + +- Cliquez sur le bouton *Modifier* au-dessus de la transcription. +- Corrigez les termes mal transcrits, les noms propres ou les attributions de locuteurs. +- Vos modifications sont préservées, même si vous retraitez le résumé ou utilisez la Conversation IA. + +--- + +## Besoin d'aide supplémentaire? + +Si les solutions ci-dessus ne résolvent pas votre problème, contactez le support InnovA AI en fournissant : + +- La description du problème et les étapes pour le reproduire. +- Le format et la durée approximative de votre fichier audio. +- Tout message d'erreur affiché à l'écran. +- Votre version de DictIA (disponible dans *Paramètres* > *À propos*). diff --git a/client_docs/guide-admin/gestion-groupes.md b/client_docs/guide-admin/gestion-groupes.md new file mode 100644 index 0000000..8b34ffc --- /dev/null +++ b/client_docs/guide-admin/gestion-groupes.md @@ -0,0 +1,227 @@ +# Gestion des groupes + +Les groupes permettent d'organiser la collaboration dans votre instance DictIA en regroupant les utilisateurs et en automatisant l'accès aux enregistrements grâce à des étiquettes de groupe. Cette fonctionnalité réduit la charge administrative tout en maintenant la sécurité et le contrôle sur l'accès au contenu. + +## Prérequis + +La fonctionnalité de groupes repose sur le partage interne de DictIA. Le partage interne et la visibilité des noms d'utilisateur doivent être activés pour que l'onglet Groupes apparaisse dans le tableau de bord d'administration. Contactez le support InnovA AI pour ajuster ces paramètres. + +### Considérations de confidentialité + +La visibilité des noms d'utilisateur affecte l'ensemble de l'instance : + +- **Noms visibles** : Les utilisateurs voient les noms d'utilisateur réels lorsqu'ils recherchent des collègues et consultent du contenu partagé. Recommandé pour les petits groupes de confiance. +- **Noms masqués** : Les noms d'utilisateur sont cachés de l'interface. Les utilisateurs doivent connaître le nom d'utilisateur exact de leurs collègues pour partager des enregistrements. Approche axée sur la confidentialité, conforme à la Loi 25. + +La fonctionnalité de groupe fonctionne de manière identique dans les deux modes; seul l'affichage change. + +## Créer et gérer des groupes + +Les groupes sont créés et gérés exclusivement par les administrateurs via le tableau de bord d'administration. + +### Créer un groupe + +1. Accédez au **Tableau de bord d'administration** et sélectionnez l'onglet **Groupes** +2. Cliquez sur **Créer un groupe** +3. Fournissez un nom qui identifie clairement l'objectif du groupe (ex. : "Ingénierie", "Ventes Québec", "Projet Alpha") +4. Ajoutez une description (optionnel mais recommandé) expliquant le rôle du groupe +5. Cliquez sur **Créer un groupe** pour finaliser + +Le groupe apparaît immédiatement dans la liste, sans aucun membre. Vous devez ajouter explicitement les membres, y compris vous-même si nécessaire. + +### Gérer les membres + +Cliquez sur l'icône de gestion des utilisateurs à côté d'un groupe pour ouvrir la fenêtre de gestion. Cette interface affiche les membres actuels, leurs rôles et fournit les outils pour ajouter ou retirer des membres. + +Pour ajouter un membre, sélectionnez un utilisateur dans le menu déroulant et choisissez son rôle : + +- **Membre** : Peut utiliser les étiquettes de groupe et accéder aux enregistrements étiquetés. Convient à la plupart des participants. +- **Administrateur de groupe** : Toutes les capacités d'un membre, plus la gestion des membres du groupe, la création et suppression d'étiquettes de groupe, et l'accès aux fonctions de gestion du groupe. + +Cliquez sur **Ajouter un membre** pour accorder l'accès. L'utilisateur obtient immédiatement la visibilité sur les étiquettes du groupe. Il n'obtient pas automatiquement l'accès aux enregistrements existants, uniquement aux nouveaux enregistrements étiquetés après son ajout. + +### Modifier les rôles des membres + +Les rôles peuvent évoluer selon les responsabilités. Cliquez sur le menu déroulant de rôle à côté d'un membre pour le basculer entre Membre et Administrateur de groupe. Les changements prennent effet immédiatement. + +### Retirer des membres + +Cliquez sur l'icône de suppression à côté d'un membre pour le retirer du groupe. Le retrait est immédiat : + +- L'utilisateur perd l'accès aux étiquettes de groupe +- Il ne recevra plus les nouveaux enregistrements étiquetés +- Son accès aux enregistrements déjà partagés est conservé +- Ses notes personnelles sur les enregistrements du groupe sont préservées + +Pour révoquer complètement l'accès aux enregistrements existants, vous devez révoquer manuellement les partages internes individuels. + +### Supprimer un groupe + +Cliquez sur l'icône de suppression à côté d'un groupe pour le supprimer entièrement. Une confirmation est demandée. La suppression : + +- Retire tous les membres +- Supprime toutes les étiquettes du groupe +- Préserve tous les enregistrements (y compris ceux précédemment étiquetés) +- Préserve tous les partages internes créés par les étiquettes + +La suppression est irréversible. Si vous souhaitez temporairement désactiver un groupe, retirez plutôt tous les membres. + +## Étiquettes de groupe + +Les étiquettes de groupe automatisent le partage au sein des groupes. Contrairement aux étiquettes personnelles qui organisent le contenu individuel, les étiquettes de groupe déclenchent des autorisations d'accès pour tous les membres du groupe lorsqu'elles sont appliquées. + +### Créer des étiquettes de groupe + +Depuis l'onglet Groupes, cliquez sur l'icône d'étiquettes à côté du groupe concerné. Fournissez : + +- **Nom de l'étiquette** : Un nom décrivant le type de contenu ou l'objectif (ex. : "Revues de sprint", "Appels clients", "Contrats juridiques"). Évitez les noms génériques comme "Important" ou "Groupe". +- **Couleur** : Pour distinguer visuellement l'étiquette. Établissez des conventions de couleurs (ex. : bleu pour le technique, vert pour les ventes, rouge pour le juridique). + +### Politiques de rétention par étiquette + +Les étiquettes de groupe peuvent remplacer les paramètres globaux de rétention avec des périodes spécifiques. Cette fonctionnalité permet à différents types de contenu d'avoir des cycles de vie différents. + +- **Champ vide** : Utilise les paramètres globaux de rétention +- **Nombre de jours** : Les enregistrements avec cette étiquette seront supprimés automatiquement après la période spécifiée + +Exemples de configuration : + +| Type de contenu | Rétention | Justification | +|----------------|-----------|---------------| +| Réunions juridiques | 2555 jours (7 ans) | Conformité et archivage légal | +| Réunions quotidiennes | 14 jours | Contenu éphémère quotidien | +| Planification marketing | 180 jours | Cycle de planification de campagne | + +Lorsqu'un enregistrement possède plusieurs étiquettes avec différentes périodes de rétention, la période la **plus courte** s'applique. Cela garantit la conformité avec la politique la plus restrictive, tel que recommandé par la Loi 25. + +### Protection contre la suppression + +Activez **Protéger contre la suppression** pour rendre les enregistrements avec cette étiquette immunisés contre la suppression automatique, peu importe leur âge ou les paramètres de rétention. + +Utilisez la protection pour les enregistrements qui doivent être conservés indéfiniment : + +- Documents juridiques et de conformité +- Décisions d'affaires critiques +- Matériel de formation et d'intégration +- Documentation de référence + +La protection peut être retirée ultérieurement en modifiant l'étiquette. + +### Paramètres de partage automatique + +Les étiquettes de groupe offrent deux niveaux de partage automatique qui se déclenchent lorsqu'un membre du groupe applique l'étiquette : + +- **Partager avec tous les membres du groupe** (par défaut et recommandé) : L'enregistrement est partagé avec tous les membres du groupe, en mode consultation et modification. +- **Partager avec les administrateurs de groupe seulement** : Seuls les utilisateurs avec le rôle administrateur dans ce groupe reçoivent automatiquement l'accès. Convient au contenu sensible nécessitant une supervision. + +### Gérer les étiquettes existantes + +Les étiquettes existantes apparaissent dans la fenêtre de gestion avec leurs paramètres actuels. Cliquez sur l'icône de modification pour ajuster le nom, la couleur, la rétention, la protection ou les paramètres de partage. Les modifications s'appliquent aux futurs usages sans affecter rétroactivement les partages déjà effectués. + +La suppression d'une étiquette la retire de tous les enregistrements, mais ne supprime ni les enregistrements ni les accès déjà accordés. + +### Synchroniser les partages de groupe + +Si des membres ont été ajoutés après que des enregistrements aient déjà été étiquetés, la fonctionnalité **Synchroniser les partages de groupe** permet d'appliquer rétroactivement le partage automatique. + +Cliquez sur **Synchroniser les partages de groupe** dans la fenêtre de gestion. L'opération : + +- Identifie tous les enregistrements avec les étiquettes du groupe +- Vérifie les partages existants avec les membres actuels +- Crée les partages manquants +- Respecte les paramètres de partage de chaque étiquette +- Évite les doublons + +La synchronisation est sécuritaire et peut être exécutée plusieurs fois sans effet indésirable. + +## Rôle d'administrateur de groupe + +Les administrateurs de groupe sont des membres avec des permissions élevées, limitées à la portée de leur groupe. + +### Capacités + +Les administrateurs de groupe peuvent : + +- Ajouter et retirer des membres +- Modifier les rôles des membres +- Créer, modifier et supprimer des étiquettes de groupe +- Synchroniser les partages du groupe + +Les administrateurs de groupe ne peuvent **pas** : + +- Créer ou supprimer des groupes +- Gérer des groupes dont ils ne sont pas administrateurs +- Accéder aux fonctionnalités d'administration du système +- Voir les statistiques d'autres groupes + +Cette délégation permet de distribuer la gestion aux responsables d'équipe tout en maintenant le contrôle centralisé. + +## Bonnes pratiques + +### Structure des groupes + +**Petites organisations (moins de 10 utilisateurs)** : Créez des groupes par département (Ingénierie, Ventes, RH). Utilisez les étiquettes de groupe pour les noms de projets ou types de contenu. + +**Grandes organisations (plus de 10 utilisateurs)** : Créez des groupes par produit, division ou projet majeur. Des groupes plus sélectifs évitent la surcharge d'information. + +### Conventions de nommage des étiquettes + +Établissez des conventions dès le début : + +- Par projet : "Projet-Alpha", "Initiative-T3-2026" +- Par type de contenu : "Revues-Sprint", "Appels-Clients", "Contrats-Juridiques" +- Par département : "Ing-Architecture", "Ventes-Formation", "RH-Entrevues" + +### Stratégie de rétention + +Définissez des valeurs par défaut réfléchies qui équilibrent les coûts de stockage avec les besoins de conformité, particulièrement en regard de la Loi 25 : + +- **Rétention globale** : 90 jours (capture la plupart du contenu) +- **Étiquettes juridiques** : 2555 jours (7 ans pour les archives légales) +- **Étiquettes de conformité** : Protégées (rétention permanente) +- **Réunions d'équipe** : 180 jours (fenêtre de collaboration raisonnable) +- **Réunions quotidiennes** : 14 jours (contenu éphémère) + +Révisez vos politiques de rétention chaque trimestre. + +## Intégration avec les autres fonctionnalités + +### Recherche IA + +Les étiquettes de groupe apparaissent automatiquement dans les filtres de la Recherche IA, permettant une recherche sémantique ciblée par groupe. Les enregistrements partagés via les étiquettes de groupe sont inclus dans les résultats de recherche sémantique. + +### Rétention et suppression automatique + +Les politiques de rétention par étiquette s'intègrent au système de suppression automatique de DictIA : + +1. Si l'enregistrement a des étiquettes protégées → Jamais supprimé +2. Si l'enregistrement a des étiquettes avec rétention personnalisée → La période la plus courte s'applique +3. Sinon → La rétention globale s'applique + +### Partage public + +L'appartenance à un groupe n'affecte pas les capacités de partage public. La capacité d'un utilisateur à créer des liens de partage public est contrôlée indépendamment par ses permissions individuelles. + +--- + +## Dépannage + +### L'onglet Groupes n'est pas visible + +Le partage interne n'est peut-être pas activé. Contactez le support InnovA AI pour vérifier la configuration. + +### Les utilisateurs ne voient pas les étiquettes de groupe + +Vérifiez que l'utilisateur est bien membre du groupe et qu'il est connecté. Rafraîchissez la page pour charger les listes d'étiquettes mises à jour. + +### Le partage automatique ne fonctionne pas + +Modifiez l'étiquette de groupe et vérifiez que l'option de partage est bien activée. Si le problème persiste, contactez le support InnovA AI. + +### Un administrateur de groupe ne peut pas accéder à l'interface de gestion + +Vérifiez que le rôle de l'utilisateur est bien "Administrateur" dans le groupe. Demandez-lui de se déconnecter et de se reconnecter pour rafraîchir sa session. Le lien **Gestion des groupes** devrait apparaître dans son menu utilisateur. + +--- + +Retour au [Guide d'administration](index.md) → diff --git a/client_docs/guide-admin/gestion-utilisateurs.md b/client_docs/guide-admin/gestion-utilisateurs.md new file mode 100644 index 0000000..1f39dbb --- /dev/null +++ b/client_docs/guide-admin/gestion-utilisateurs.md @@ -0,0 +1,84 @@ +# Gestion des utilisateurs + +La section Gestion des utilisateurs est le centre de contrôle pour gérer les accès à votre instance DictIA et les permissions de chaque utilisateur. Chaque compte utilisateur est géré ici, de la création initiale jusqu'à la désactivation éventuelle. Pour les tendances d'utilisation à l'échelle du système, consultez les [statistiques du système](statistiques.md). + +## Comprendre le tableau des utilisateurs + +En ouvrant la section Gestion des utilisateurs, vous accédez à un tableau complet de tous les utilisateurs de votre système. Chaque ligne présente les informations essentielles : l'adresse courriel identifie l'utilisateur, le badge administrateur indique son niveau de privilège, le nombre d'enregistrements révèle son niveau d'activité, et la mesure du stockage montre sa consommation de ressources. + +La barre de recherche en haut du tableau filtre les résultats instantanément à mesure que vous tapez, ce qui facilite la recherche d'utilisateurs spécifiques. Le tableau se met à jour en temps réel lorsque vous apportez des modifications. + +## Ajouter un nouvel utilisateur + +Pour créer un compte utilisateur, cliquez sur le bouton **Ajouter un utilisateur** dans le coin supérieur droit. La fenêtre qui apparaît demande les informations essentielles : nom d'utilisateur, adresse courriel et mot de passe. Vous décidez également immédiatement si cette personne a besoin de privilèges d'administrateur, bien que vous puissiez toujours modifier cela ultérieurement. + +Le nom d'utilisateur devient l'identité de l'utilisateur dans DictIA, apparaissant dans l'interface et organisant ses enregistrements. L'adresse courriel sert à la fois d'identifiant de connexion et de point de contact. Le mot de passe que vous définissez est temporaire; les utilisateurs devraient le changer immédiatement après leur première connexion via leurs [paramètres de compte](../guide-utilisateur/parametres.md). + +Les privilèges d'administrateur sont puissants et devraient être accordés avec parcimonie. Les utilisateurs administrateurs peuvent voir et modifier tous les [paramètres du système](parametres-systeme.md), gérer les autres utilisateurs, configurer les [consignes par défaut](prompts.md) et surveiller la [recherche sémantique](recherche-semantique.md). La plupart des utilisateurs n'auront jamais besoin de ces capacités. + +### Permissions des utilisateurs + +Au-delà du rôle d'administrateur, DictIA offre des permissions granulaires par utilisateur qui contrôlent des capacités spécifiques. + +**Permission de partage public** : Le bouton d'icône globe dans la ligne de chaque utilisateur active ou désactive sa capacité à créer des liens de partage public. Lorsque cette option est activée (vert), l'utilisateur peut générer des liens sécurisés pour partager des enregistrements à l'externe avec n'importe qui. Lorsqu'elle est désactivée (gris), l'utilisateur ne peut utiliser que le partage interne avec d'autres utilisateurs DictIA. + +Utilisez cette permission pour contrôler le partage d'informations à l'externe par utilisateur. Vous pourriez accorder le partage public aux gestionnaires, aux équipes de vente ou au personnel marketing qui communiquent régulièrement avec des parties prenantes externes, tout en le restreignant pour les utilisateurs qui manipulent des données internes sensibles. + +### Gestion du budget de jetons IA + +Contrôlez les coûts d'IA en définissant des budgets mensuels de jetons pour chaque utilisateur. Lors de la création ou de la modification d'un utilisateur, vous pouvez spécifier une limite mensuelle de jetons qui restreint son utilisation de l'IA. + +**Fonctionnement des budgets de jetons** : + +- **Avertissement à 80 %** : Les utilisateurs voient un indicateur jaune lorsqu'ils atteignent 80 % de leur budget mensuel +- **Bloqué à 100 %** : Une fois le budget épuisé, les opérations d'IA (conversation IA, résumé, etc.) sont bloquées jusqu'au mois suivant +- **Réinitialisation du budget** : Les compteurs se réinitialisent automatiquement au début de chaque mois civil +- **Sans limite** : Laissez le champ de budget vide pour une utilisation illimitée + +Les budgets de jetons sont définis par incréments de 10 000 jetons avec un minimum de 100 000. Le budget couvre toutes les opérations d'IA, y compris la génération de résumés, la conversation IA, la génération de titres et l'extraction d'événements. Consultez les statistiques détaillées d'utilisation des jetons dans la section [Statistiques du système](statistiques.md#statistiques-dutilisation-des-jetons). + +### Gestion du budget de transcription + +Contrôlez les coûts de transcription en définissant des budgets mensuels de transcription (en minutes) pour chaque utilisateur. + +**Fonctionnement des budgets de transcription** : + +- **Avertissement à 80 %** : Les utilisateurs voient un indicateur jaune lorsqu'ils atteignent 80 % de leur budget mensuel de transcription +- **Bloqué à 100 %** : Une fois le budget épuisé, les nouvelles transcriptions sont bloquées jusqu'au mois suivant +- **Réinitialisation du budget** : Les minutes de transcription se réinitialisent automatiquement au début de chaque mois civil +- **Sans limite** : Laissez le champ de budget vide pour une utilisation illimitée de la transcription + +Les budgets de transcription sont définis en minutes avec un minimum de 10 minutes. Consultez les statistiques détaillées de transcription dans la section [Statistiques du système](statistiques.md#statistiques-dutilisation-de-la-transcription). + +## Gérer les utilisateurs existants + +Chaque ligne d'utilisateur comprend des boutons d'action qui vous donnent un contrôle complet sur ce compte. + +**Modifier** : Le bouton de modification ouvre une fenêtre où vous pouvez mettre à jour le nom d'utilisateur ou l'adresse courriel. Utile lorsqu'une personne change de nom, d'adresse courriel ou lorsque vous devez corriger des erreurs de saisie initiale. + +**Basculer le rôle d'administrateur** : Promouvoir un utilisateur au rôle d'administrateur lui accorde l'accès à tout ce que vous pouvez voir et faire. Rétrograder un administrateur révoque immédiatement toutes ses capacités administratives. Le système vous empêche de retirer vos propres droits d'administrateur pour éviter tout verrouillage accidentel. + +**Supprimer** : La suppression d'un utilisateur est permanente et ne peut pas être annulée. Tous ses enregistrements, notes et paramètres seront supprimés avec son compte. Le système demande une confirmation avant de procéder. + +## Surveiller les tendances d'utilisation + +Les colonnes de nombre d'enregistrements et de stockage révèlent comment les utilisateurs interagissent avec votre instance DictIA. + +- Un nombre élevé d'enregistrements peut indiquer des utilisateurs avancés qui dépendent fortement du système +- Un nombre faible peut suggérer des utilisateurs qui ont besoin de formation ou qui n'ont peut-être pas besoin de compte +- Un stockage disproportionnellement élevé peut indiquer le téléversement d'enregistrements très longs + +Ces informations vous aident à établir des politiques d'utilisation appropriées et à planifier la capacité du système. + +## Considérations de sécurité + +Chaque compte utilisateur est un vecteur de sécurité potentiel. Voici les bonnes pratiques à suivre : + +- **Mots de passe robustes** : Encouragez les utilisateurs à utiliser des mots de passe uniques et à les changer régulièrement +- **Comptes administrateurs** : Limitez l'accès administrateur au strict minimum nécessaire. Lorsqu'une personne n'a plus besoin de ces privilèges, révoquez-les immédiatement +- **Comptes inactifs** : Effectuez des audits réguliers pour identifier et supprimer les comptes inactifs qui pourraient présenter des risques +- **Conformité Loi 25** : Assurez-vous que seuls les utilisateurs légitimes ont accès aux enregistrements contenant des renseignements personnels + +--- + +Suivant : [Statistiques du système](statistiques.md) → diff --git a/client_docs/guide-admin/index.md b/client_docs/guide-admin/index.md new file mode 100644 index 0000000..4b9d5b8 --- /dev/null +++ b/client_docs/guide-admin/index.md @@ -0,0 +1,135 @@ +# Guide d'administration + +Bienvenue dans le guide d'administration de DictIA. En tant qu'administrateur, vous contrôlez l'ensemble de votre instance DictIA : gestion des utilisateurs, surveillance du système et configuration de l'intelligence artificielle. + +## Sections administratives + +
+
+
👥
+

Gestion des utilisateurs

+

Créez des comptes, gérez les permissions, surveillez l'utilisation et contrôlez l'accès à votre instance DictIA.

+ Gérer les utilisateurs → +
+ +
+
🤝
+

Gestion des groupes

+

Créez des groupes, attribuez des rôles, configurez les étiquettes de partage automatique et facilitez la collaboration.

+ Gérer les groupes → +
+ +
+
📊
+

Statistiques du système

+

Surveillez la santé du système, suivez les tendances d'utilisation et identifiez les enjeux avant qu'ils n'affectent vos utilisateurs.

+ Voir les statistiques → +
+ +
+
🔧
+

Paramètres du système

+

Configurez les limites globales, les délais d'attente, les tailles de fichiers et les comportements qui s'appliquent à tous les utilisateurs.

+ Configurer le système → +
+ +
+
🤖
+

Modèles d'IA

+

Découvrez les modèles d'intelligence artificielle utilisés pour la génération de résumés, la conversation IA et plus encore.

+ Voir les modèles → +
+ +
+
+

Consignes par défaut

+

Personnalisez le comportement de l'IA avec des consignes de résumé qui façonnent le traitement du contenu.

+ Configurer les consignes → +
+ +
+
🔍
+

Recherche sémantique

+

Gérez les capacités de recherche intelligente, surveillez l'état de l'indexation sémantique et contrôlez la Recherche IA.

+ Gérer la recherche → +
+ +
+
🗑️
+

Rétention et suppression automatique

+

Configurez la gestion automatisée du cycle de vie des données avec des politiques de rétention flexibles, conformes à la Loi 25.

+ Gérer la rétention → +
+ +
+
🔐
+

Authentification unique (SSO)

+

Intégrez DictIA avec votre fournisseur d'identité pour simplifier la connexion de vos utilisateurs.

+ Configurer le SSO → +
+
+ +## Actions rapides + +
+
+ +
+ Ajouter un utilisateur +

Gestion des utilisateurs → Bouton Ajouter → Saisir les informations → Définir les permissions

+
+
+ +
+ 🤝 +
+ Créer un groupe +

Gestion des groupes → Créer un groupe → Ajouter des membres → Configurer les étiquettes

+
+
+ +
+ 📈 +
+ Vérifier la santé du système +

Statistiques → Consulter les métriques → Vérifier le traitement → Surveiller le stockage

+
+
+ +
+ ⚙️ +
+ Modifier les paramètres +

Paramètres du système → Ajuster les limites → Configurer les délais → Enregistrer

+
+
+ +
+ 🔄 +
+ Vérifier l'indexation sémantique +

Recherche sémantique → Vérifier le statut → Traiter les éléments en attente → Suivre la progression

+
+
+
+ +## Besoin d'aide? + +
+
+ 📖 + Consultez le Guide de dépannage +
+
+ 📧 + Contactez le support InnovA AI pour toute question technique +
+
+ 💾 + InnovA AI effectue des sauvegardes régulières de vos données +
+
+ +--- + +Prêt à administrer votre instance DictIA? Commencez par la [Gestion des utilisateurs](gestion-utilisateurs.md) → diff --git a/client_docs/guide-admin/modeles-ia.md b/client_docs/guide-admin/modeles-ia.md new file mode 100644 index 0000000..986b446 --- /dev/null +++ b/client_docs/guide-admin/modeles-ia.md @@ -0,0 +1,62 @@ +# Modèles d'IA + +DictIA utilise des modèles d'intelligence artificielle pour plusieurs fonctionnalités clés de la plateforme. Cette section explique à quoi servent ces modèles et ce qui peut être ajusté. + +## Fonctionnalités alimentées par l'IA + +Les modèles d'IA de DictIA sont utilisés pour : + +- **Génération de résumés** : Création de résumés intelligents de vos transcriptions +- **Génération de titres** : Attribution automatique de titres descriptifs aux enregistrements +- **Extraction d'événements** : Identification d'événements dignes d'être ajoutés au calendrier +- **Conversation IA** : Réponses aux questions sur vos enregistrements +- **Identification des locuteurs** : Détection des noms des locuteurs à partir du contexte de la conversation + +## Configuration des modèles + +La configuration technique des modèles d'IA (choix du fournisseur, clés d'API, paramètres du modèle) est gérée par l'équipe InnovA AI. Contactez le support InnovA AI pour ajuster ces paramètres. + +### Ce que vous pouvez contrôler via l'interface + +Bien que la configuration technique soit gérée par InnovA AI, vous pouvez influencer le comportement de l'IA via : + +- **[Consignes par défaut](prompts.md)** : Personnalisez les instructions envoyées à l'IA pour la génération de résumés. C'est le moyen le plus direct d'adapter l'IA à vos besoins. +- **[Limite de longueur de transcription](parametres-systeme.md#limite-de-longueur-de-transcription)** : Contrôlez la quantité de texte envoyée à l'IA, ce qui affecte la qualité et les coûts. +- **[Budgets de jetons par utilisateur](gestion-utilisateurs.md#gestion-du-budget-de-jetons-ia)** : Définissez des limites mensuelles de consommation d'IA pour chaque utilisateur. + +### Modèles disponibles + +DictIA peut être configuré avec différents modèles d'IA selon vos besoins : + +- **Modèles pour les résumés** : Des modèles de différentes capacités sont disponibles, du plus économique au plus performant +- **Modèle distinct pour la conversation IA** : Un modèle séparé peut être configuré spécifiquement pour les interactions en temps réel, permettant d'optimiser le rapport qualité/coût + +### Optimisation des coûts + +Pour réduire les coûts tout en maintenant la qualité : + +1. **Ajustez les consignes** : Des consignes bien rédigées produisent de meilleurs résultats avec moins de jetons +2. **Définissez des budgets** : Utilisez les budgets de jetons pour contrôler la consommation par utilisateur +3. **Ajustez la limite de transcription** : Limitez la quantité de texte envoyée à l'IA pour les longs enregistrements + +Pour des ajustements plus avancés (changement de modèle, modification des paramètres techniques), contactez le support InnovA AI. + +### Qualité des résumés + +Si la qualité des résumés ne répond pas à vos attentes, voici les actions que vous pouvez entreprendre : + +1. **Révisez vos [consignes par défaut](prompts.md)** : C'est souvent la solution la plus efficace +2. **Vérifiez la limite de transcription** : Une limite trop basse peut empêcher l'IA d'avoir suffisamment de contexte +3. **Contactez le support InnovA AI** : L'équipe peut recommander un modèle plus performant ou ajuster les paramètres techniques + +### Coûts élevés + +Si vous observez des coûts d'IA plus élevés que prévu : + +1. Vérifiez les [statistiques d'utilisation des jetons](statistiques.md#statistiques-dutilisation-des-jetons) pour identifier les gros consommateurs +2. Ajustez les [budgets de jetons](gestion-utilisateurs.md#gestion-du-budget-de-jetons-ia) pour les utilisateurs concernés +3. Contactez le support InnovA AI pour explorer les options de modèles plus économiques + +--- + +Suivant : [Consignes par défaut](prompts.md) | Retour au [Guide d'administration](index.md) diff --git a/client_docs/guide-admin/parametres-systeme.md b/client_docs/guide-admin/parametres-systeme.md new file mode 100644 index 0000000..5f8e31d --- /dev/null +++ b/client_docs/guide-admin/parametres-systeme.md @@ -0,0 +1,115 @@ +# Paramètres du système + +Les paramètres du système permettent de configurer les comportements fondamentaux qui affectent chaque utilisateur et chaque enregistrement de votre instance DictIA. Ces paramètres globaux façonnent le fonctionnement du système, des limites techniques aux fonctionnalités visibles par les utilisateurs. + +## Limite de longueur de transcription + +La limite de longueur de transcription détermine la quantité de texte envoyée à l'IA lors de la génération de résumés ou de la conversation IA. Ce paramètre a un effet important sur la qualité et les coûts. + +- **Sans limite** : La transcription complète est envoyée à l'IA, peu importe la longueur. Cela garantit un contexte complet, mais peut devenir coûteux pour les longs enregistrements. Cette limite s'applique également à la détection automatique des locuteurs. +- **Avec limite** (ex. : 50 000 caractères) : Crée un plafond sur la consommation d'API. Les transcriptions très longues seront tronquées, n'envoyant que le début à l'IA. + +Pour les réunions typiques de moins d'une heure, 50 000 caractères capturent généralement tout. Pour les sessions plus longues, vous pouvez augmenter cette limite ou encourager les utilisateurs à diviser leurs enregistrements. + +## Taille maximale des fichiers + +La taille maximale protège votre système contre les téléversements trop volumineux tout en permettant aux utilisateurs de travailler avec des enregistrements raisonnables. La valeur par défaut de 300 Mo accommode plusieurs heures d'audio compressé. + +Augmenter cette limite permet des enregistrements plus longs mais nécessite une considération attentive. Les fichiers plus gros prennent plus de temps à téléverser, consomment plus de stockage et pourraient expirer durant le traitement. + +Si les utilisateurs atteignent fréquemment la limite, demandez-vous s'ils ont réellement besoin d'enregistrements aussi longs. Souvent, diviser les longues sessions en segments logiques produit de meilleurs résultats. + +## Délai d'attente de la transcription + +Le délai d'attente détermine combien de temps DictIA attendra que le service de transcription complète son travail. La valeur par défaut de 1 800 secondes (30 minutes) convient à la plupart des enregistrements. + +- **Trop court** : Les enregistrements plus longs échouent même si le service fonctionne normalement +- **Trop long** : Les ressources système restent mobilisées inutilement en cas d'échec réel + +Ajustez ce paramètre en fonction de vos enregistrements les plus longs typiques. Pour les enregistrements de plusieurs heures, une valeur de 3 600 secondes ou plus peut être nécessaire. Contactez le support InnovA AI pour ajuster ce paramètre si nécessaire. + +## Avis d'enregistrement + +L'avis d'enregistrement s'affiche avant que les utilisateurs ne démarrent une session d'enregistrement. Idéal pour les mentions légales, les rappels de politiques ou les directives d'utilisation. Ce message en format Markdown garantit que les utilisateurs comprennent leurs responsabilités avant de créer du contenu. + +Les organisations utilisent souvent cet avis pour les exigences de conformité, notamment la Loi 25 au Québec : + +- Rappeler les exigences de consentement +- Référencer les politiques de gestion des données +- Mentionner les directives d'utilisation appropriée + +!!! info "Support complet du Markdown" + L'avis d'enregistrement supporte le formatage Markdown complet : titres, listes, gras, italique, liens, blocs de code et citations. + + Exemple : + ```markdown + ## Consentement requis + + En démarrant cet enregistrement, vous acceptez de : + + 1. Obtenir le consentement de tous les participants + 2. Respecter la [politique de confidentialité](https://exemple.com/confidentialite) + 3. Traiter les enregistrements conformément à la **Loi 25** + + > **Important** : Les enregistrements contenant des renseignements personnels + > doivent être gérés selon la politique de rétention en vigueur. + ``` + +Gardez les avis concis et pertinents. Les utilisateurs voient ce message fréquemment; un texte trop long sera simplement ignoré. + +## Avis de téléversement + +L'avis de téléversement fonctionne comme l'avis d'enregistrement, mais s'affiche lorsque les utilisateurs téléversent des fichiers. Chaque fois qu'un utilisateur glisse-dépose des fichiers ou les sélectionne pour téléversement, il voit cet avis et doit l'accepter. + +Utile lorsque les fichiers téléversés peuvent contenir du contenu de tiers ou lorsque votre organisation doit rappeler les politiques de gestion des données. Supporte le formatage Markdown complet. + +Laissez ce champ vide pour désactiver complètement l'avis de téléversement. + +## Bannière personnalisée + +La bannière personnalisée affiche un message persistant en haut de la zone de contenu principal pour tous les utilisateurs. Utile pour les annonces, les avis de maintenance ou les rappels de conformité. + +La bannière apparaît sous l'en-tête et au-dessus du contenu principal. Les utilisateurs peuvent la fermer en cliquant sur le X, mais elle réapparaît au rafraîchissement de la page. + +Exemples d'utilisation : + +```markdown +**Mise à jour système** — DictIA sera brièvement indisponible dimanche de 22h à minuit pour maintenance. +``` + +```markdown +Tous les enregistrements sont assujettis à notre [politique d'utilisation](https://exemple.com/politique). Contactez le support pour toute question. +``` + +Laissez ce champ vide pour masquer la bannière. + +## Impact à l'échelle du système + +Chaque paramètre de cette page affecte tous les utilisateurs immédiatement. Les modifications prennent effet dès l'enregistrement, sans nécessiter de redémarrage. Cette application immédiate signifie que vous devriez tester les changements avec soin et communiquer les modifications importantes à vos utilisateurs. + +Le bouton de rafraîchissement recharge les paramètres, utile si plusieurs administrateurs effectuent des changements simultanément. + +## Paramètres supplémentaires + +Certains paramètres du système ne sont pas accessibles via l'interface web et nécessitent une intervention technique. Ces paramètres incluent notamment : + +- **Collaboration et partage** : Activation du partage interne, du partage public et de la visibilité des noms d'utilisateur +- **Permissions utilisateur** : Contrôle de la capacité des utilisateurs à supprimer leurs propres enregistrements +- **Rétention et suppression automatique** : Voir la section [Rétention](retention.md) pour plus de détails +- **Dossiers** : Activation de la fonctionnalité de dossiers pour organiser les enregistrements +- **Compression audio** : Configuration de la compression automatique des fichiers audio +- **Conservation vidéo** : Option de conserver les fichiers vidéo pour la lecture dans le navigateur + +Contactez le support InnovA AI pour ajuster ces paramètres. + +## Dépannage + +Lorsque les enregistrements échouent de manière constante, vérifiez s'ils dépassent vos limites configurées. Les utilisateurs ne réalisent pas toujours que leurs enregistrements dépassent les limites, surtout lorsqu'ils téléversent du contenu existant. + +Si les coûts d'API augmentent de façon inattendue, vérifiez votre limite de longueur de transcription. Un seul utilisateur téléversant de nombreux longs enregistrements pourrait augmenter considérablement la consommation si aucune limite n'est définie. + +Pour tout problème technique, contactez le support InnovA AI. + +--- + +Suivant : [Modèles d'IA](modeles-ia.md) → diff --git a/client_docs/guide-admin/prompts.md b/client_docs/guide-admin/prompts.md new file mode 100644 index 0000000..0110958 --- /dev/null +++ b/client_docs/guide-admin/prompts.md @@ -0,0 +1,121 @@ +# Consignes par défaut + +L'onglet Consignes par défaut vous permet de façonner la manière dont l'IA interprète et résume les enregistrements dans l'ensemble de votre instance DictIA. C'est ici que vous établissez l'intelligence de base que les utilisateurs expérimentent lorsqu'ils n'ont pas personnalisé leurs propres consignes. + +## Comprendre la hiérarchie des consignes + +DictIA utilise une hiérarchie pour déterminer quelle consigne utiliser pour chaque enregistrement. Ce système offre de la flexibilité tout en maintenant le contrôle. + +1. **Consignes par étiquette** (priorité la plus haute) : Lorsqu'un enregistrement possède des étiquettes avec des consignes associées, celles-ci ont la priorité absolue. Plusieurs consignes d'étiquettes se combinent intelligemment, permettant des configurations sophistiquées pour des types de contenu spécialisés. + +2. **Consigne personnelle de l'utilisateur** : Définie dans les paramètres du compte de l'utilisateur. Permet aux individus d'adapter les résumés à leurs besoins spécifiques sans affecter les autres. + +3. **Consigne par défaut de l'administrateur** : Configurée sur cette page, elle sert de fondation pour la majorité des résumés. C'est ce que les nouveaux utilisateurs expérimentent et ce sur quoi les utilisateurs à long terme comptent. + +4. **Consigne système de secours** : Si tout le reste échoue, une consigne intégrée garantit que des résumés sont toujours générés. + +## Rédiger des consignes efficaces + +Votre consigne par défaut est plus qu'une instruction technique : c'est un modèle de compréhension. Considérez votre base d'utilisateurs lors de la conception : + +- Un cabinet juridique pourrait se concentrer sur les détails de dossiers et les précédents +- Une institution de recherche pourrait mettre l'accent sur les méthodologies et les résultats +- Une agence créative pourrait mettre en valeur les concepts et les commentaires des clients + +### Conseils de rédaction + +- **Structurez clairement** : Utilisez des listes à puces ou des sections numérotées pour organiser la sortie +- **Spécifiez le niveau de détail** : "Aperçu bref" versus "Analyse complète" produisent des résultats très différents +- **Concevez pour la polyvalence** : Cette consigne s'applique à tout, des vérifications de 5 minutes aux ateliers de 2 heures +- **Évitez les exigences trop spécifiques** : Pas tous les enregistrements contiennent des "décisions" ou des "éléments d'action" +- **Utilisez un langage conditionnel** : Des phrases comme "si applicable" ou "lorsque discuté" permettent à l'IA de sauter les sections non pertinentes + +## L'éditeur de consignes + +La zone de texte affiche votre consigne actuelle avec le support complet du Markdown. Les modifications sont enregistrées immédiatement lorsque vous cliquez sur **Enregistrer les modifications**. Il n'y a pas de brouillon ni de mise en attente : les modifications affectent tous les nouveaux résumés instantanément. + +Les utilisateurs peuvent régénérer les résumés pour appliquer les consignes mises à jour aux enregistrements existants. + +Le bouton **Réinitialiser par défaut** offre un filet de sécurité, permettant de revenir à la consigne originale si vos personnalisations ne produisent pas les résultats attendus. + +L'horodatage indique la dernière modification, utile pour coordonner les changements entre plusieurs administrateurs. + +## Voir la structure complète de la consigne IA + +La section dépliable **Voir la structure complète de la consigne IA** révèle comment votre consigne s'intègre dans l'instruction complète envoyée à l'IA. Cette vue technique montre la consigne système, votre consigne personnalisée et l'intégration de la transcription. + +Comprendre cette structure vous aide à : + +- Éviter de répéter des instructions déjà gérées par la consigne système +- Comprendre pourquoi certaines formulations fonctionnent mieux +- Diagnostiquer les problèmes lorsque les résumés ne répondent pas aux attentes + +## Cas d'utilisation créatifs avec les étiquettes + +Les étiquettes avec des consignes personnalisées permettent des transformations puissantes du contenu : + +### Enregistrements de recettes + +Créez une étiquette "Recette" avec une consigne comme : "Convertis cette narration culinaire en une recette formatée avec la liste des ingrédients, les étapes, les temps de cuisson et le nombre de portions." + +L'IA transforme un flux de conscience désordonné en une recette propre et utilisable. + +### Notes de cours + +Une étiquette "Cours" pourrait utiliser : "Extrais les concepts principaux, les exemples, la terminologie clé avec définitions et les applications pratiques mentionnées. Organise en format plan pour des notes d'étude." + +### Éléments d'action de réunion + +Créez une étiquette "Réunion de projet" avec : "Concentre-toi exclusivement sur les éléments d'action, les décisions prises et les prochaines étapes. Pour chaque élément d'action, identifie le responsable et les échéances mentionnées." + +### Sessions de remue-méninges + +Une étiquette "Idées" avec : "Liste chaque idée distincte mentionnée, peu importe la brièveté de la discussion. Pour chaque idée, note les réactions ou préoccupations immédiates." + +### Revues de code + +Étiquette "Revue de code" : "Pour chaque morceau de code ou système discuté, liste : 1) Ce qui a été revu, 2) Problèmes identifiés, 3) Changements suggérés, 4) Qui implémentera les correctifs." + +## Combinaison d'étiquettes et ordre + +Lorsqu'un enregistrement possède plusieurs étiquettes avec des consignes, elles se combinent dans l'ordre d'application. Exemples : + +### Cours personnel + cours spécifique + +- Étiquette "Mes cours" : "Organise comme notes d'étude avec des en-têtes clairs." +- Étiquette "Biologie 301" : "Porte une attention particulière aux processus biologiques et à la terminologie." +- **Résultat** : Des notes d'étude formatées avec un focus sur le contenu biologique. + +### Réunion client + revue juridique + +- Étiquette "Réunion client" : "Extrais les exigences, préoccupations et préférences du client." +- Étiquette "Revue juridique" : "Identifie les considérations légales et les facteurs de risque mentionnés." +- **Résultat** : Les besoins du client plus les implications juridiques dans un seul résumé. + +### Ordre des étiquettes + +Les consignes plus spécifiques devraient généralement venir en dernier, car elles raffinent la sortie des consignes générales. Commencez large (type de format) puis ajoutez les spécificités (domaines de focus). + +Testez vos combinaisons d'étiquettes avec des enregistrements de référence pour voir quel ordre produit les résultats souhaités. + +## Coordonner avec les consignes utilisateur + +Votre consigne par défaut devrait compléter, et non rivaliser avec, la personnalisation des utilisateurs. Concevez-la comme une base solide qui fonctionne pour la plupart des cas, tout en encourageant les utilisateurs avancés à personnaliser selon leurs besoins. + +Communiquez votre stratégie de consignes aux utilisateurs pour qu'ils puissent décider si la personnalisation leur serait bénéfique. Si certains départements ont besoin de résumés spécialisés, fournissez des consignes recommandées qu'ils peuvent utiliser. + +## Mesurer l'efficacité des consignes + +- **Fréquence des modifications** : Si les utilisateurs modifient souvent les résumés générés, votre consigne pourrait avoir besoin d'ajustement +- **Échantillonnage périodique** : Révisez un échantillon de résumés régulièrement pour évaluer la qualité +- **Rétroaction des utilisateurs** : Sollicitez des commentaires sur la qualité des résumés, en particulier auprès des utilisateurs qui n'ont pas personnalisé leurs consignes + +## Pièges courants à éviter + +- **Consignes trop restrictives** : Pas tous les enregistrements contiennent des "décisions" ou des "éléments d'action". Forcer l'IA à trouver ces éléments quand ils n'existent pas produit du contenu de remplissage sans valeur. +- **Demandes impossibles** : Demander les "préoccupations non exprimées" ou "ce qui n'a pas été discuté" dépasse les capacités de l'analyse de transcription. L'IA ne peut travailler qu'avec ce qui a été réellement dit. +- **Consignes trop longues** : Chaque instruction ajoute de la complexité. Concentrez-vous sur l'essentiel plutôt que d'essayer de capturer chaque détail possible. + +--- + +Suivant : [Recherche sémantique](recherche-semantique.md) → diff --git a/client_docs/guide-admin/recherche-semantique.md b/client_docs/guide-admin/recherche-semantique.md new file mode 100644 index 0000000..e9eb258 --- /dev/null +++ b/client_docs/guide-admin/recherche-semantique.md @@ -0,0 +1,60 @@ +# Recherche sémantique + +La section Recherche sémantique contrôle l'intelligence derrière la Recherche IA, la capacité de recherche sémantique de DictIA qui permet aux utilisateurs de trouver de l'information dans tous leurs enregistrements en posant des questions en langage naturel. + +## Comprendre la Recherche IA + +La Recherche IA fonctionne en plusieurs étapes : + +1. Chaque transcription est découpée en segments de texte qui se chevauchent +2. Ces segments sont convertis en représentations mathématiques (indexation sémantique) +3. Les segments indexés sont stockés dans un format permettant la recherche +4. Lorsqu'un utilisateur pose une question, celle-ci est convertie dans le même format mathématique et comparée à tous les segments stockés + +Cette approche va bien au-delà de la simple correspondance de mots-clés. Le système comprend que "préoccupations budgétaires" est lié à "contraintes financières" et "dépassements de coûts", même si les mots exacts diffèrent. Cette compréhension sémantique rend la Recherche IA très puissante pour découvrir de l'information que les utilisateurs ne se rappellent pas précisément. + +## Statut du traitement + +Les cartes de statut donnent un aperçu immédiat de la santé de votre recherche sémantique : + +- **Enregistrements totaux** : Le nombre de fichiers audio dans votre système +- **Traités pour la Recherche IA** : Le nombre d'enregistrements convertis en segments indexés et recherchables. Ce nombre devrait éventuellement correspondre au total, avec un léger décalage pendant le traitement +- **En attente de traitement** : Les enregistrements en attente d'indexation sémantique. Ce nombre augmente lorsque les utilisateurs téléversent du nouveau contenu et diminue à mesure que le traitement avance +- **Segments totaux** : Les morceaux détaillés dans lesquels vos enregistrements ont été divisés. Un enregistrement typique d'une heure génère environ 50 à 60 segments +- **Statut de l'indexation** : Un indicateur rapide de santé. "Disponible" en vert signifie que tout fonctionne correctement + +## Progression du traitement + +La barre de progression montre l'avancement en temps réel dans la file d'attente d'indexation sémantique : + +- **100 %** : Tous les enregistrements sont traités et recherchables +- **Pourcentages inférieurs** : Le traitement est en cours +- **Barre bloquée** : Le traitement s'est peut-être arrêté. Contactez le support InnovA AI + +## Gérer la file d'attente + +Le bouton **Actualiser le statut** met à jour toutes les statistiques et indicateurs de progression. L'interface ne se rafraîchit pas automatiquement; des actualisations manuelles garantissent que vous voyez les informations actuelles. + +Si le système indique que des enregistrements nécessitent un traitement mais que la progression n'avance pas, contactez le support InnovA AI pour diagnostiquer le problème. + +Le système de traitement est conçu pour être résilient. Si le traitement échoue pour un enregistrement spécifique, le système le marque et passe au suivant plutôt que de rester bloqué. + +## Conseils pour de meilleurs résultats de recherche + +La qualité des résultats de recherche dépend en partie de la formulation des requêtes. Encouragez les utilisateurs à : + +- **Poser des questions complètes** plutôt que de taper des mots-clés. "Qu'est-ce que Marie a dit au sujet du budget?" fonctionne mieux que simplement "Marie budget". +- **Utiliser des termes variés** : La recherche sémantique comprend les synonymes et les concepts connexes +- **Être spécifique** lorsque c'est possible : Plus la question est précise, plus les résultats seront pertinents + +## Considérations de performance + +La recherche sémantique croît de façon prévisible avec votre contenu. Chaque segment nécessite environ 2 Ko de stockage. Un enregistrement typique d'une heure nécessite environ 100 Ko de stockage d'indexation. Le système maintient des performances rapides même avec de grandes quantités de données. + +Si votre instance croît de façon significative, les politiques de [rétention](retention.md) aident à gérer à la fois le stockage et la performance de la recherche. La recherche sémantique n'inclut que les enregistrements actifs; la suppression du contenu obsolète améliore les performances de recherche. + +Pour toute question technique sur la performance de la recherche sémantique, contactez le support InnovA AI. + +--- + +Retour au [Guide d'administration](index.md) → diff --git a/client_docs/guide-admin/retention.md b/client_docs/guide-admin/retention.md new file mode 100644 index 0000000..2ab42d7 --- /dev/null +++ b/client_docs/guide-admin/retention.md @@ -0,0 +1,212 @@ +# Rétention et suppression automatique + +Le système de suppression automatique assure une gestion du cycle de vie de vos enregistrements, en conformité avec vos politiques de rétention des données et les exigences de la Loi 25 du Québec. + +## Vue d'ensemble + +Le système de rétention automatisée vous aide à : + +- **Respecter les politiques de rétention** : Suppression automatique des enregistrements après une période définie, conformément à la Loi 25 +- **Gérer le stockage** : Prévenir la croissance illimitée des fichiers audio +- **Préserver les données essentielles** : Conserver les transcriptions et métadonnées même après la suppression de l'audio +- **Protéger les enregistrements importants** : Exempter des enregistrements spécifiques de la suppression automatique + +## Modes de suppression + +DictIA offre deux modes de suppression : + +### Mode audio seulement + +- **Supprime** : Le fichier audio uniquement +- **Conserve** : La transcription, le résumé, les notes et les métadonnées +- **Cas d'utilisation** : Conservation à long terme avec optimisation du stockage +- **Résultat** : Les enregistrements apparaissent en mode "Archivé", la transcription reste recherchable + +### Mode suppression complète + +- **Supprime** : L'enregistrement complet, incluant l'audio, la transcription, le résumé et les notes +- **Conserve** : Rien - l'enregistrement est définitivement supprimé +- **Cas d'utilisation** : Suppression complète des données pour la conformité à la Loi 25 +- **Résultat** : L'enregistrement est entièrement retiré du système + +## Système de rétention multiniveau + +DictIA utilise un système hiérarchique de politiques de rétention : + +### 1. Rétention globale (à l'échelle du système) + +La période de rétention globale s'applique à tous les enregistrements, sauf si elle est remplacée par une étiquette spécifique. Contactez le support InnovA AI pour ajuster ce paramètre. + +### 2. Rétention par étiquette + +Les étiquettes peuvent remplacer la période de rétention globale avec des périodes personnalisées. Cela est particulièrement puissant avec les étiquettes de groupe. + +| Type de contenu | Rétention | Justification | +|----------------|-----------|---------------| +| Enregistrements sans étiquette | Globale (ex. : 90 jours) | Valeur par défaut du système | +| Archives légales | 2555 jours (7 ans) | Conformité juridique | +| Réunions quotidiennes | 14 jours | Contenu éphémère | + +Lorsqu'un enregistrement possède plusieurs étiquettes avec différentes périodes de rétention, la période la **plus courte** s'applique. Cela garantit la conformité avec la politique la plus restrictive. + +### 3. Protection par étiquette + +Les étiquettes individuelles peuvent protéger les enregistrements contre la suppression automatique de manière permanente. + +**Hiérarchie d'exemple** : + +- Rétention globale : 90 jours +- Étiquette "Revues de sprint" : 180 jours (plus long que la globale) +- Étiquette "Réunions quotidiennes" : 14 jours (plus court que la globale) +- Étiquette "Juridique" avec protection activée : Jamais supprimé (permanent) + +## Protéger des enregistrements + +Pour protéger des enregistrements contre la suppression automatique : + +1. Accédez à **Paramètres du compte** → onglet **Étiquettes** +2. Cliquez sur **Créer une étiquette** ou **Modifier** une étiquette existante +3. Activez la case **Protéger contre la suppression automatique** +4. Appliquez cette étiquette aux enregistrements à protéger + +Les enregistrements avec des étiquettes protégées sont exemptés de la suppression automatique, peu importe leur âge ou la période de rétention. + +## Enregistrements archivés + +Lorsque le mode de suppression est "audio seulement", les enregistrements deviennent "archivés" après la suppression de l'audio. + +### Accéder aux enregistrements archivés + +1. Ouvrez la barre latérale **Enregistrements** +2. Cliquez sur **Filtres avancés** +3. Activez l'option **Enregistrements archivés** + +### Fonctionnalités disponibles pour les enregistrements archivés + +| Fonctionnalité | Disponible | Notes | +|----------------|------------|-------| +| Lire la transcription | Oui | Transcription complète accessible | +| Rechercher le contenu | Oui | La recherche textuelle fonctionne toujours | +| Lire le résumé | Oui | Le résumé IA est préservé | +| Voir/modifier les notes | Oui | Toutes les métadonnées accessibles | +| Écouter l'audio | Non | Le fichier audio a été supprimé | +| Retraiter | Non | L'audio source n'est plus disponible | +| Partager | Oui | La transcription peut être partagée | +| Exporter | Oui | Téléchargement de la transcription, du résumé et des notes | + +### Indicateurs d'archivage + +- **Barre latérale** : Badge gris "Archivé" à côté du titre de l'enregistrement +- **Lecteur** : Bannière informative indiquant que l'audio a été supprimé mais que la transcription reste disponible +- **Filtre** : Option de vue "Archivé" dans les filtres avancés + +## Nettoyage des profils de locuteurs + +Par défaut, les profils de locuteurs et les empreintes vocales sont préservés même lorsque tous les enregistrements associés sont supprimés. Cela est dû au fait que les empreintes vocales sont des données agrégées qui ne peuvent pas être reconstruites à partir d'enregistrements individuels. + +Pour les déploiements qui doivent traiter les empreintes vocales comme des données biométriques (conformité Loi 25), le nettoyage automatique peut être activé. Contactez le support InnovA AI pour ajuster ce paramètre. + +### Conformité Loi 25 et protection de la vie privée + +Lorsque le nettoyage automatique est activé : + +- **Minimisation des données** : Les données vocales sont supprimées lorsqu'elles ne sont plus nécessaires +- **Droit à l'effacement** : Les profils vocaux sont supprimés lorsque les enregistrements sont retirés +- **Transparence** : L'activité de nettoyage est journalisée à des fins d'audit +- **Automatisation** : Aucune intervention manuelle n'est requise lorsque combiné aux politiques de rétention + +## Cas d'utilisation pratiques + +### Usage personnel + +Vous enregistrez tout pendant votre journée de travail. La plupart de ces enregistrements sont éphémères. Configurez une rétention globale de 30 jours avec suppression audio seulement. Après un mois, les fichiers audio disparaissent mais les transcriptions recherchables demeurent. Si quelque chose s'avère important, étiquetez-le avec une étiquette protégée avant l'expiration. + +### Collaboration de groupe + +| Type de contenu | Approche de rétention | Raison | +|----------------|----------------------|--------| +| Réunions quotidiennes | Étiquette avec rétention de 14 jours | Mises à jour de routine, aucune valeur à long terme | +| Planification de sprint | Étiquette avec rétention de 90 jours | Valeur de référence pour le trimestre en cours | +| Décisions d'architecture | Étiquette avec protection activée | Documenter les choix importants de façon permanente | +| Appels clients (ventes) | Étiquette avec rétention de 1 an | Durée du cycle de vente + suivi | +| Entrevues (RH) | Étiquette avec rétention de 2 ans | Délai typique de litige en emploi | +| Réunions juridiques | Étiquette protégée | Rétention indéfinie pour conformité | + +Chaque groupe configure ses étiquettes une seule fois. Les membres n'ont qu'à étiqueter normalement leurs enregistrements et la gestion du cycle de vie se fait automatiquement. + +### Exigences de conformité (Loi 25) + +La Loi 25 du Québec exige que les organisations gèrent adéquatement les renseignements personnels, incluant leur durée de conservation. Le système de rétention de DictIA vous aide à : + +- Établir des périodes de rétention conformes à vos obligations légales +- Automatiser la suppression des données lorsque la période de conservation est expirée +- Protéger les enregistrements qui doivent être conservés pour des raisons légales +- Documenter vos politiques de rétention de manière transparente + +### Gestion des coûts de stockage + +Les fichiers audio sont volumineux (une réunion d'une heure peut représenter 50 à 100 Mo). Les transcriptions sont légères (10 à 20 Ko pour la même réunion). Le mode suppression audio seulement conserve le texte recherchable tout en libérant le stockage. + +Avec une rétention de 90 jours en mode audio seulement, les enregistrements de plus de 90 jours perdent leur audio mais restent entièrement recherchables via la Recherche IA. Vous pouvez lire les transcriptions, consulter les résumés et voir les notes, mais vous ne pouvez plus écouter l'audio original. + +## Bonnes pratiques + +### Pour la conformité Loi 25 + +1. Définissez des périodes de rétention appropriées à votre secteur d'activité +2. Utilisez des étiquettes protégées pour les documents nécessitant une rétention indéfinie (ex. : "Rétention légale", "Permanent") +3. Documentez votre politique de rétention dans la documentation de conformité de votre organisation +4. Activez le nettoyage des profils de locuteurs si les empreintes vocales constituent des renseignements personnels dans votre contexte + +### Pour la gestion du stockage + +1. Commencez avec le mode suppression audio seulement pour préserver les transcriptions recherchables +2. Utilisez des périodes plus courtes pour le contenu de routine +3. Protégez le contenu important avec des étiquettes dédiées + +### Pour les groupes + +1. Établissez une rétention globale conservatrice comme base +2. Configurez des étiquettes de groupe avec des rétentions personnalisées selon les besoins +3. Utilisez des étiquettes protégées pour le contenu nécessitant une conservation permanente +4. Documentez les politiques de rétention pour que les membres du groupe comprennent les attentes + +## Processus de suppression + +Le processus de suppression automatique fonctionne ainsi : + +1. **Vérification automatique** (quotidienne) +2. **Identification** des enregistrements plus anciens que la période de rétention +3. **Pour chaque enregistrement** : + - Vérification des étiquettes de protection + - Si protégé → l'enregistrement est exempt +4. **Suppression** selon le mode configuré (audio seulement ou complet) + +## Dépannage + +### La suppression automatique ne fonctionne pas + +Contactez le support InnovA AI pour vérifier que le système est correctement configuré et actif. + +### Trop d'enregistrements sont supprimés + +1. Vérifiez vos étiquettes de protection et assurez-vous qu'elles sont appliquées aux enregistrements importants +2. Contactez le support InnovA AI pour augmenter la période de rétention globale + +### Les enregistrements archivés n'apparaissent pas + +1. Activez le filtre **Enregistrements archivés** dans la barre latérale +2. Vérifiez que le mode de suppression est bien "audio seulement" (le mode suppression complète ne crée pas d'archives) + +## Sécurité et irréversibilité + +- La suppression automatique est irréversible : les fichiers audio supprimés ne peuvent pas être récupérés +- Les enregistrements protégés ne sont jamais supprimés automatiquement +- L'activité de suppression est journalisée à des fins d'audit et de conformité Loi 25 +- Seuls les administrateurs peuvent configurer les politiques de rétention + +Pour toute question ou problème concernant la suppression automatique, contactez le support InnovA AI. + +--- + +Retour au [Guide d'administration](index.md) → diff --git a/client_docs/guide-admin/sso.md b/client_docs/guide-admin/sso.md new file mode 100644 index 0000000..07ba501 --- /dev/null +++ b/client_docs/guide-admin/sso.md @@ -0,0 +1,103 @@ +# Authentification unique (SSO) + +DictIA supporte l'authentification unique (SSO) via le protocole OpenID Connect (OIDC), vous permettant d'intégrer la plateforme avec votre fournisseur d'identité existant. + +## Qu'est-ce que le SSO? + +L'authentification unique permet à vos utilisateurs de se connecter à DictIA en utilisant les mêmes identifiants que pour les autres applications de votre organisation. Au lieu de gérer un mot de passe séparé pour DictIA, les utilisateurs se connectent via votre fournisseur d'identité centralisé. + +### Avantages du SSO + +- **Simplicité pour les utilisateurs** : Un seul ensemble d'identifiants pour toutes les applications +- **Sécurité renforcée** : Politique de mots de passe centralisée, authentification multifacteur gérée par le fournisseur d'identité +- **Administration simplifiée** : Gestion centralisée des accès, désactivation rapide des comptes +- **Conformité Loi 25** : Meilleur contrôle de l'accès aux renseignements personnels grâce à la gestion centralisée des identités + +## Fournisseurs d'identité supportés + +DictIA est compatible avec tout fournisseur d'identité supportant le protocole OpenID Connect (OIDC), notamment : + +- **Microsoft Entra ID** (anciennement Azure AD) +- **Google Workspace** +- **Keycloak** +- **Auth0** +- **Okta** +- Et tout autre fournisseur OIDC compatible + +## Configuration + +La configuration technique du SSO (identifiants client, URL de découverte, redirections) est effectuée par l'équipe InnovA AI. Contactez le support InnovA AI pour mettre en place le SSO sur votre instance. + +### Informations à fournir + +Pour configurer le SSO, vous devrez fournir à InnovA AI : + +- Le **fournisseur d'identité** que vous utilisez +- Les **identifiants client** (Client ID et Client Secret) émis par votre fournisseur +- L'**URL de découverte** OIDC de votre fournisseur +- Les **domaines de courriel autorisés** pour l'auto-inscription (si souhaité) + +### Options de configuration + +Lors de la mise en place, vous pourrez choisir parmi les options suivantes : + +**Auto-inscription** : Les nouveaux utilisateurs sont automatiquement créés lors de leur première connexion SSO, à condition que leur domaine de courriel soit autorisé. Cela élimine le besoin de créer manuellement chaque compte. + +**Restriction de domaine** : Limitez l'accès SSO aux courriels de domaines spécifiques (ex. : votre-entreprise.com). Utile pour s'assurer que seuls les employés autorisés peuvent accéder à DictIA. + +**Désactivation de la connexion par mot de passe** : Forcez l'utilisation exclusive du SSO pour tous les utilisateurs réguliers. Les administrateurs conservent la possibilité de se connecter par mot de passe comme mécanisme de secours. + +## Expérience utilisateur + +### Première connexion + +Lors de sa première connexion via SSO, l'utilisateur : + +1. Clique sur le bouton de connexion SSO sur la page de connexion de DictIA +2. Est redirigé vers la page de connexion de votre fournisseur d'identité +3. Se connecte avec ses identifiants habituels +4. Est automatiquement redirigé vers DictIA avec une session active + +Si l'auto-inscription est activée, le compte DictIA est créé automatiquement. Sinon, un administrateur doit d'abord créer le compte. + +### Lier un compte existant + +Les utilisateurs qui possèdent déjà un compte DictIA peuvent lier leur compte SSO : + +1. Se connecter à DictIA avec leur mot de passe habituel +2. Accéder à **Compte** → **Authentification unique** +3. Cliquer sur **Lier le compte** pour associer leur identité SSO + +Une fois lié, l'utilisateur peut se connecter via SSO ou par mot de passe (si la connexion par mot de passe n'est pas désactivée). + +### Délier un compte SSO + +Les utilisateurs peuvent délier leur compte SSO depuis **Compte** → **Authentification unique**. Les utilisateurs qui ont créé leur compte via SSO (sans mot de passe) doivent d'abord définir un mot de passe avant de pouvoir délier leur compte SSO. + +## Considérations de sécurité + +- Lorsqu'un utilisateur se connecte via SSO avec un courriel correspondant à un compte DictIA existant, les comptes sont automatiquement liés +- La sécurité de l'accès SSO dépend de votre fournisseur d'identité : assurez-vous que celui-ci est correctement sécurisé (authentification multifacteur, politique de mots de passe forte) +- Utilisez la restriction de domaine pour limiter l'accès aux seuls courriels de votre organisation + +## Dépannage + +### La connexion SSO échoue immédiatement + +Les identifiants client ou l'URL de découverte sont peut-être incorrects. Contactez le support InnovA AI pour vérifier la configuration. + +### Un utilisateur est créé sans adresse courriel + +Certains fournisseurs d'identité ne retournent pas l'adresse courriel par défaut. Contactez le support InnovA AI pour ajuster la configuration des attributs (claims). + +### Le domaine de courriel est rejeté + +Vérifiez que le domaine de courriel de l'utilisateur fait partie de la liste des domaines autorisés. Contactez le support InnovA AI pour ajouter un domaine si nécessaire. + +### Un compte SSO est déjà lié à un autre utilisateur + +Chaque identité SSO ne peut être liée qu'à un seul compte DictIA. L'utilisateur peut délier son compte SSO depuis ses paramètres de compte, puis le relié à un autre compte. + +--- + +Retour au [Guide d'administration](index.md) → diff --git a/client_docs/guide-admin/statistiques.md b/client_docs/guide-admin/statistiques.md new file mode 100644 index 0000000..5e5566c --- /dev/null +++ b/client_docs/guide-admin/statistiques.md @@ -0,0 +1,82 @@ +# Statistiques du système + +La section Statistiques du système transforme les données brutes en informations exploitables sur votre instance DictIA. D'un coup d'oeil, vous pouvez voir combien d'utilisateurs vous desservez, combien d'enregistrements ils ont créés, combien de stockage ils consomment et si tout se traite correctement. + +## Vue d'ensemble des métriques clés + +Quatre cartes en haut de la page de statistiques vous donnent un aperçu immédiat de l'envergure de votre système : + +- **Utilisateurs totaux** : La taille de votre base d'utilisateurs actuelle +- **Enregistrements totaux** : Le contenu cumulatif dans votre système +- **Stockage total** : L'espace disque réellement consommé +- **Requêtes totales** : L'utilisation de la Recherche IA (lorsque activée) + +Ces chiffres racontent une histoire sur la santé et la croissance de votre instance. Une base d'utilisateurs en croissance avec une augmentation proportionnelle des enregistrements suggère une adoption saine. Un stockage qui croît plus rapidement que les enregistrements peut indiquer que les utilisateurs téléversent des fichiers plus longs. + +## Distribution des statuts d'enregistrement + +Cette section décompose vos enregistrements en quatre états : + +- **Complétés** : Entièrement traités et prêts à l'utilisation. Cela devrait représenter la grande majorité de votre contenu. +- **En traitement** : En cours de transcription ou d'analyse. +- **En attente** : En file d'attente. Un nombre élevé constant pourrait indiquer une surcharge du système. +- **En erreur** : Des problèmes ont été rencontrés. Ces cas méritent toujours une investigation. + +Dans un système en santé, vous verrez principalement des enregistrements complétés avec peut-être quelques-uns en traitement à tout moment. + +## Analyse du stockage + +La section **Principaux utilisateurs par stockage** révèle qui consomme le plus de ressources. Chaque utilisateur est listé avec sa consommation totale de stockage et son nombre d'enregistrements, vous donnant le contexte pour comprendre s'ils ont plusieurs petits fichiers ou quelques gros fichiers. + +Ces informations sont précieuses pour la planification de la capacité. Si un utilisateur consomme un stockage disproportionné, il peut être utile de comprendre son cas d'utilisation et d'adapter les politiques en conséquence. + +## Comprendre les tendances d'utilisation + +Les statistiques ne sont pas que des chiffres : ce sont des informations qui attendent d'être découvertes. + +- Les pics soudains d'enregistrements peuvent coïncider avec des lancements de projets ou des périodes de pointe +- Une croissance du stockage qui dépasse celle des enregistrements pourrait indiquer des fichiers audio plus longs ou de meilleure qualité +- Un suivi régulier vous aide à repérer les tendances avant qu'elles ne deviennent des problèmes + +## Planification de la capacité + +Les statistiques du système sont votre boule de cristal pour les besoins d'infrastructure. Les tendances de croissance du stockage vous indiquent quand une augmentation de capacité sera nécessaire. Utilisez ces informations de manière proactive pour anticiper les besoins. Contactez le support InnovA AI si vous observez une croissance rapide qui pourrait nécessiter une augmentation des ressources. + +## Statistiques d'utilisation des jetons + +La section Utilisation des jetons offre une visibilité sur la consommation d'API de modèles d'IA à travers votre instance. + +**Cartes de résumé** : Affichent l'utilisation quotidienne, les totaux mensuels, les coûts estimés et les utilisateurs approchant de leurs limites de budget. + +**Graphiques quotidiens et mensuels** : Des graphiques interactifs affichent les tendances de consommation de jetons sur les 30 derniers jours et les 12 derniers mois. + +**Ventilation par utilisateur** : Un tableau détaillé montre la consommation mensuelle de jetons de chaque utilisateur avec sa limite de budget (si définie). Les barres de progression indiquent le pourcentage utilisé : + +- **Vert** : Sous 80 % du budget +- **Jaune** : Entre 80 et 100 % (zone d'avertissement) +- **Rouge** : À 100 % ou plus (bloqué) + +Utilisez ces statistiques pour identifier les gros utilisateurs, valider les allocations de budget et prévoir les coûts d'API. Si certains utilisateurs atteignent régulièrement leurs limites, vous pourriez avoir besoin d'augmenter leurs budgets ou d'examiner leurs habitudes d'utilisation. Consultez la [Gestion du budget de jetons](gestion-utilisateurs.md#gestion-du-budget-de-jetons-ia) pour définir les limites individuelles. + +## Statistiques d'utilisation de la transcription + +La section Utilisation de la transcription offre une visibilité sur la consommation de services de transcription vocale, distincte de l'utilisation des jetons. + +**Cartes de résumé** : + +- **Minutes aujourd'hui** : Minutes de transcription utilisées aujourd'hui par tous les utilisateurs +- **Ce mois-ci** : Total des minutes transcrites dans le mois civil en cours +- **Coût mensuel** : Coûts estimés basés sur le service de transcription utilisé +- **Alertes de budget** : Nombre d'utilisateurs approchant (80 %+) ou dépassant (100 %) leurs budgets + +**Ventilation par utilisateur** : Une liste détaillée montre l'utilisation mensuelle de transcription de chaque utilisateur avec sa limite de budget (si définie). Les barres de progression indiquent la consommation : + +- **Vert** : Sous 80 % du budget +- **Jaune** : Entre 80 et 100 % (zone d'avertissement) +- **Rouge** : À 100 % ou plus (bloqué pour les nouvelles transcriptions) + +Utilisez ces statistiques pour surveiller les tendances d'utilisation et valider les allocations de budget. Consultez la [Gestion du budget de transcription](gestion-utilisateurs.md#gestion-du-budget-de-transcription) pour définir les limites individuelles. + +--- + +Suivant : [Paramètres du système](parametres-systeme.md) → diff --git a/client_docs/guide-utilisateur/application-mobile.md b/client_docs/guide-utilisateur/application-mobile.md new file mode 100644 index 0000000..970312a --- /dev/null +++ b/client_docs/guide-utilisateur/application-mobile.md @@ -0,0 +1,197 @@ +# Application mobile + +DictIA est une application web progressive (PWA) qui peut etre installee sur votre appareil pour une experience similaire a une application native, avec la prevention de la mise en veille de l'ecran pendant l'enregistrement. + +## Avantages de l'application mobile + +- **Installable** : ajoutez DictIA a votre ecran d'accueil comme une application native. +- **Chargement rapide** : les ressources mises en cache se chargent instantanement. +- **Prevention de la mise en veille** : empeche l'ecran de s'eteindre automatiquement pendant l'enregistrement. +- **Pas de boutique d'applications** : installez directement depuis votre navigateur. +- **Mises a jour automatiques** : vous obtenez toujours la derniere version. + +## Installer DictIA sur votre appareil + +### Sur Android (Chrome ou Edge) + +1. **Ouvrez DictIA** dans Chrome ou Edge. +2. Recherchez l'invite **« Ajouter a l'ecran d'accueil »** en bas de l'ecran. +3. Appuyez sur **Ajouter** ou **Installer**. +4. Si l'invite n'apparait pas : + - Appuyez sur le menu a trois points (⋮) dans le navigateur. + - Selectionnez **« Ajouter a l'ecran d'accueil »** ou **« Installer l'application »**. + - Suivez les instructions. +5. **Lancez** l'application depuis votre ecran d'accueil. + +!!! tip "Invite d'installation" + Si vous ne voyez pas l'invite d'installation, visitez DictIA quelques fois. Le navigateur propose l'installation apres avoir detecte une utilisation reguliere. + +### Sur iOS (Safari) + +1. **Ouvrez DictIA** dans Safari. +2. Appuyez sur le bouton **Partager** (icone carre avec fleche vers le haut) en bas de l'ecran. +3. Faites defiler et appuyez sur **« Sur l'ecran d'accueil »**. +4. Modifiez le nom si desire et appuyez sur **Ajouter**. +5. **Lancez** l'application depuis votre ecran d'accueil. + +!!! note "Limitations iOS" + - La prevention de la mise en veille necessite iOS 16.4 ou superieur. + - L'execution en arriere-plan est plus limitee que sur Android. + - Certaines fonctionnalites fonctionnent mieux sur iOS 17 et versions ulterieures. + +### Sur ordinateur de bureau (Chrome, Edge ou Brave) + +1. **Ouvrez DictIA** dans votre navigateur. +2. Recherchez l'**icone d'installation** (⊕) dans la barre d'adresse. +3. Cliquez dessus et selectionnez **Installer**. +4. Si l'icone n'apparait pas : + - Cliquez sur le menu a trois points. + - Selectionnez **« Installer DictIA »** ou **« Ajouter aux applications »**. +5. **Lancez** depuis votre menu d'applications ou votre raccourci de bureau. + +## Fonctionnalites de l'application mobile + +### Prevention de la mise en veille de l'ecran + +Empeche l'ecran de votre appareil de s'eteindre automatiquement pendant l'enregistrement : + +- **Activation automatique** : s'active des que vous commencez un enregistrement. +- **Ecran toujours allume** : empeche la mise en veille tant que l'application est au premier plan. +- **Recuperation automatique** : se reactive si l'ecran se reveille pendant un enregistrement. +- **Consideration de la batterie** : actif uniquement pendant les sessions d'enregistrement. + +### Notifications persistantes + +Affiche l'etat de l'enregistrement dans votre barre de notifications (mobile uniquement) : + +- Rappel visuel que l'enregistrement est actif +- Retour rapide a l'application en un seul appui +- Silencieuse : pas de son ni de vibration + +### Acces hors connexion + +Une fois installee, DictIA met en cache les fichiers essentiels pour un acces hors ligne : + +- Interface de l'application +- Feuilles de style et polices +- Code de l'application + +!!! info "Limites hors connexion" + La transcription et les fonctionnalites d'IA necessitent une connexion internet. L'acces hors ligne permet de consulter l'interface, mais les appels au serveur ne sont pas disponibles. + +## Enregistrement sur mobile — Limitation importante + +!!! danger "Gardez l'application visible sur les appareils mobiles" + **Les navigateurs mobiles (Chrome, Safari, etc.) suspendent l'enregistrement audio lorsque l'application est reduite ou l'ecran verrouille.** Il s'agit d'une limitation fondamentale des navigateurs qui ne peut pas etre contournee. + + **Ce que cela signifie :** + + - L'enregistrement **se met en pause** si vous reduisez la fenetre. + - L'enregistrement **se met en pause** si vous verrouillez votre ecran. + - L'enregistrement **se met en pause** si vous passez a une autre application. + - L'enregistrement **continue** si vous gardez DictIA visible au premier plan. + - La prevention de la mise en veille **empeche l'ecran de s'eteindre automatiquement** pendant que DictIA est visible. + + **Pour les longues reunions sur mobile :** + + 1. Gardez DictIA ouvert et visible (ne reduisez pas, ne verrouillez pas, ne changez pas d'application). + 2. Ou utilisez l'enregistreur vocal natif de votre telephone, puis televersez le fichier dans DictIA par la suite. + + **Les navigateurs de bureau fonctionnent differemment** : l'enregistrement continue meme lorsque la fenetre est reduite. + +**Si vous reduisez accidentellement l'application :** + +- L'audio de l'enregistrement se met en pause (silence). +- Le minuteur continue de compter. +- Lorsque vous revenez a l'application, l'enregistrement reprend. +- Un silence sera present dans l'enregistrement final. + +## Permissions + +### Permissions requises + +- **Acces au microphone** : demande lors du premier enregistrement. Actif uniquement pendant l'enregistrement. +- **Acces a l'audio systeme** (ordinateur de bureau) : pour capturer l'audio des onglets de navigateur ou des applications. + +### Permissions recommandees + +- **Notifications** (mobile) : pour afficher un rappel visuel pendant l'enregistrement actif. Demande lors du premier enregistrement sur mobile. + +!!! tip "Reactiver les permissions" + Si vous refusez accidentellement une permission, vous pouvez la reinitialiser dans les parametres de votre navigateur ou appareil : + + - **Android Chrome** : Parametres > Parametres du site > URL de DictIA > Permissions + - **iOS Safari** : Reglages > Safari > URL de DictIA > Permissions + - **Ordinateur** : Cliquez sur l'icone de cadenas dans la barre d'adresse > Permissions + +## Compatibilite des navigateurs + +### Navigateurs mobiles + +| Fonctionnalite | Chrome Android | Safari iOS | Samsung Internet | +|----------------|----------------|------------|------------------| +| Installation | Android 5+ | iOS 11.3+ | 4.0+ | +| Prevention mise en veille | Chrome 84+ | iOS 16.4+ | 13.0+ | +| Notifications | Chrome 42+ | iOS 16.4+ | 4.0+ | + +### Navigateurs de bureau + +| Fonctionnalite | Chrome | Edge | Brave | Firefox | Safari | +|----------------|--------|------|-------|---------|--------| +| Installation | 73+ | 79+ | Toutes | Limitee | Limitee | +| Prevention mise en veille | 84+ | 84+ | Toutes | Non | 16.4+ | + +!!! info "Firefox et Safari sur ordinateur" + Firefox et Safari ont un support limite pour l'installation en tant qu'application sur ordinateur, mais toutes les fonctionnalites principales fonctionnent dans le navigateur. + +## Depannage + +### L'enregistrement s'arrete lorsque l'ecran se verrouille + +C'est un comportement attendu sur les navigateurs mobiles. Gardez l'application visible ou utilisez l'enregistreur vocal natif de votre telephone. + +### L'installation n'est pas proposee + +- Visitez DictIA plusieurs fois (le navigateur peut necessiter plusieurs visites). +- Essayez un autre navigateur (Chrome ou Edge offrent le meilleur support). +- Videz le cache du navigateur et rechargez. + +## Bonnes pratiques + +### Pour l'enregistrement mobile + +1. **Gardez l'application visible** : ne reduisez pas, ne verrouillez pas, ne changez pas d'application. +2. **Gardez votre telephone branche** pour les longs enregistrements. +3. **Fermez les applications inutiles** pour liberer de la memoire. +4. **Evitez de recevoir des appels** pendant l'enregistrement (cela mettra en pause l'enregistrement). +5. **Pour les longues reunions** : envisagez d'utiliser l'enregistreur natif de votre telephone. + +### Pour des performances optimales + +1. **Installez DictIA comme application** pour de meilleures performances. +2. **Gardez votre navigateur a jour** pour beneficier des dernieres fonctionnalites. +3. **Surveillez le stockage** dans les parametres de votre appareil. + +## Desinstaller l'application + +### Android + +1. Appuyez longuement sur l'icone de l'application sur l'ecran d'accueil. +2. Selectionnez **Infos sur l'appli** ou glissez vers **Supprimer**. +3. Appuyez sur **Desinstaller**. + +### iOS + +1. Appuyez longuement sur l'icone de l'application. +2. Selectionnez **Supprimer l'app**. +3. Confirmez la suppression. + +### Ordinateur de bureau + +1. Ouvrez l'application installee. +2. Cliquez sur le menu a trois points. +3. Selectionnez **Desinstaller DictIA**. + +--- + +Si vous avez des questions sur les fonctionnalites de l'application mobile, contactez le support InnovA AI. diff --git a/client_docs/guide-utilisateur/dossiers.md b/client_docs/guide-utilisateur/dossiers.md new file mode 100644 index 0000000..706e34d --- /dev/null +++ b/client_docs/guide-utilisateur/dossiers.md @@ -0,0 +1,115 @@ +# Dossiers + +Les dossiers offrent un moyen simple d'organiser vos enregistrements en groupes logiques. Contrairement aux etiquettes qui peuvent etre appliquees plusieurs fois pour categoriser le contenu, chaque enregistrement appartient a un seul dossier (ou a aucun). Pensez aux dossiers comme a des repertoires sur votre ordinateur : une facon claire et hierarchique de regrouper les enregistrements lies. + +## Creer des dossiers + +Accedez a la gestion des dossiers depuis **Parametres du compte > Dossiers**. + +Cliquez sur **Creer un dossier** pour ajouter un nouveau dossier. Chaque dossier possede : + +- **Nom** : un nom court et descriptif (obligatoire). +- **Couleur** : un identifiant visuel affiche sur les pastilles de dossier et dans la barre laterale. + +### Parametres du dossier + +Chaque dossier peut avoir des parametres personnalises qui s'appliquent aux enregistrements qui y sont places : + +| Parametre | Description | +|-----------|-------------| +| **Consigne personnalisee** | Instructions de resume IA specifiques a ce dossier | +| **Langue par defaut** | Langue de transcription pour les nouveaux enregistrements | +| **Min/Max locuteurs** | Indications sur le nombre de locuteurs pour l'identification | +| **Vocabulaire personnalise** | Liste de mots ou expressions a prioriser par le moteur de transcription | +| **Consigne de transcription** | Description du contexte pour guider la transcription | +| **Jours de retention** | Duree de conservation specifique au dossier | +| **Protection** | Exempter le contenu du dossier de la suppression automatique | + +## Utiliser les dossiers + +### Selecteur de dossier dans la barre laterale + +La barre laterale inclut un menu deroulant de dossiers en haut. Utilisez-le pour : + +- **Filtrer par dossier** : selectionnez un dossier pour n'afficher que ses enregistrements. +- **Voir tous les enregistrements** : selectionnez « Tous les dossiers ». +- **Voir les enregistrements non classes** : selectionnez « Aucun dossier ». + +### Deplacer des enregistrements dans les dossiers + +Plusieurs facons d'assigner un enregistrement a un dossier : + +1. **Pendant le televersement** : selectionnez un dossier avant de televerser. +2. **Depuis le detail de l'enregistrement** : utilisez le selecteur de dossier dans l'en-tete. +3. **Operations en lot** : selectionnez plusieurs enregistrements et utilisez l'action de dossier. + +### Pastilles de dossier + +Les enregistrements affichent une petite pastille coloree indiquant leur dossier. Elle apparait dans : + +- La liste des enregistrements dans la barre laterale +- L'en-tete du detail de l'enregistrement +- Les resultats de recherche + +Cliquez sur la pastille pour filtrer rapidement par ce dossier. + +## Dossiers de groupe + +Si votre organisation utilise les groupes, les dossiers peuvent etre partages : + +- **Dossiers personnels** : visibles uniquement par vous. +- **Dossiers de groupe** : partages avec tous les membres du groupe. + +Les dossiers de groupe peuvent avoir le partage automatique active : lorsque vous deplacez un enregistrement dans un dossier de groupe, tous les membres du groupe recoivent automatiquement l'acces. + +## Dossiers vs Etiquettes + +Les deux outils aident a organiser vos enregistrements, mais servent des objectifs differents : + +| Aspect | Dossiers | Etiquettes | +|--------|----------|------------| +| **Attribution** | Un seul dossier par enregistrement | Plusieurs etiquettes par enregistrement | +| **Objectif** | Organisation principale | Categorisation et filtrage | +| **Parametres** | Consigne IA, langue, retention | Consigne IA, langue, retention | +| **Visuel** | Pastille, filtre dans la barre laterale | Pastilles colorees | + +**Utilisez les dossiers pour** : l'organisation par projet, la separation par client, les types de reunions. + +**Utilisez les etiquettes pour** : les preoccupations transversales, le suivi de statut, la categorisation par sujet. + +Vous pouvez utiliser les deux ensemble : placez un enregistrement dans le dossier « Client A » et etiquetez-le avec « Actions a suivre » et « Suivi requis ». + +## Bonnes pratiques + +### Conventions de nommage + +Choisissez des noms de dossier clairs et coherents : + +- **Par projet** : « Refonte du site web », « Planification T1 », « Lancement produit » +- **Par client** : « Acme Corp », « Beta Inc », « Gamma LLC » +- **Par type** : « Meles d'equipe », « Appels clients », « Entrevues » + +### Consignes de dossier + +Utilisez des consignes specifiques au dossier pour des resumes coherents. Par exemple, pour les reunions clients : + +``` +Creer un resume avec : +- Sujets discutes +- Demandes et preoccupations du client +- Engagements pris +- Prochaines etapes avec responsables +``` + +### Strategies de retention + +Definissez la retention au niveau du dossier selon les besoins : + +- **Projets actifs** : aucune limite de retention +- **Projets termines** : 90 jours apres la cloture +- **Reunions de routine** : 30 jours +- **Enregistrements de conformite** : utilisez le drapeau de protection + +--- + +Suivant : [Groupes](groupes.md) diff --git a/client_docs/guide-utilisateur/enregistrement.md b/client_docs/guide-utilisateur/enregistrement.md new file mode 100644 index 0000000..fbd2c6f --- /dev/null +++ b/client_docs/guide-utilisateur/enregistrement.md @@ -0,0 +1,197 @@ +# Enregistrement et televersement + +DictIA offre deux facons d'ajouter du contenu a votre bibliotheque : televerser des fichiers audio existants ou enregistrer directement dans votre navigateur. Les deux methodes incluent les memes fonctionnalites d'organisation, d'etiquetage et de traitement. + +## Acceder a l'ecran d'enregistrement + +Cliquez sur le bouton **+ Nouvel enregistrement** dans la barre de navigation superieure pour ouvrir l'interface d'enregistrement. + +## Televerser des fichiers audio + +L'interface de televersement propose une zone de glisser-deposer en haut de l'ecran. Vous pouvez : + +- **Glisser** des fichiers audio directement depuis votre explorateur de fichiers vers cette zone. +- **Cliquer** sur la zone pour ouvrir un selecteur de fichiers. + +### Formats pris en charge + +DictIA prend en charge un large eventail de formats audio et video : + +- **Audio** : MP3, WAV, M4A, FLAC, AAC, OGG +- **Video** : MP4, MOV, AVI (DictIA extrait et traite la piste audio) +- **Mobile** : AMR, 3GP, 3GPP + +La taille maximale par defaut est de 500 Mo. Votre administrateur peut modifier cette limite. + +!!! info "Compression audio automatique" + DictIA compresse automatiquement les fichiers sans perte (WAV, AIFF) pour economiser l'espace de stockage. Un fichier WAV de 500 Mo devient generalement environ 50 Mo apres compression. Les formats deja compresses comme le MP3 sont conserves tels quels. + +Lorsque vous televersez un fichier, il apparait immediatement dans la file d'attente avec une barre de progression. Une fois televerse, vous pouvez ajouter des etiquettes, definir un titre personnalise et configurer les options de traitement avant de lancer la transcription. + +## Enregistrer de l'audio en direct + +Sous la zone de televersement, trois modes d'enregistrement sont disponibles : + +### Enregistrement au microphone + +Le bouton rouge du microphone capture l'audio depuis votre microphone selectionne. Ce mode est ideal pour : + +- Les reunions en personne +- Les notes vocales personnelles +- Les entrevues + +Votre navigateur vous demandera l'autorisation d'acceder au microphone si elle n'a pas deja ete accordee. Vous pouvez selectionner quel microphone utiliser si plusieurs appareils sont connectes. + +### Enregistrement de l'audio systeme + +Le bouton bleu capture tout le son joue par votre ordinateur. Ce mode est ideal pour : + +- Les reunions en ligne lorsque vous ecoutez principalement +- Les webinaires et presentations en ligne +- Les balados ou tout contenu audio diffuse sur votre ordinateur + +Lorsque vous cliquez sur ce bouton, une fenetre de partage d'ecran apparait. Il est essentiel de cocher la case **« Partager l'audio du systeme »** pour que l'enregistrement fonctionne. + +### Enregistrement combine (microphone + systeme) + +Le bouton violet enregistre simultanement votre microphone et l'audio systeme dans une seule piste synchronisee. C'est le mode recommande pour les reunions en ligne ou vous participez activement, car il capture les deux cotes de la conversation. + +## Activer l'enregistrement de l'audio systeme + +### Enregistrer depuis un onglet du navigateur + +Choisissez l'option **onglet** si l'audio provient d'un onglet specifique (YouTube, Google Meet, Zoom dans le navigateur, etc.). + +Selectionnez l'onglet contenant votre source audio, puis **cochez la case « Partager l'audio de l'onglet »** en bas de la fenetre de dialogue. Sans cette case cochee, vous n'enregistrerez que du silence. + +### Enregistrer depuis l'ecran complet + +Choisissez l'option **ecran** si l'audio provient d'applications de bureau ou de plusieurs sources : + +- Applications comme Zoom, Microsoft Teams, Skype ou Discord +- Audio de plusieurs onglets simultanement +- Sons systeme + +Selectionnez votre ecran (peu importe lequel si vous avez plusieurs moniteurs, DictIA n'enregistre que l'audio). **Cochez la case « Partager l'audio du systeme »** en bas de la fenetre. + +!!! warning "Limitation macOS" + L'option « Partager l'audio du systeme » est disponible sur Windows et Linux, mais peut ne pas etre disponible sur macOS en raison de restrictions du systeme d'exploitation. Les utilisateurs macOS peuvent generalement enregistrer l'audio des onglets de navigateur uniquement. + +## Pendant l'enregistrement + +### Surveillance audio en temps reel + +L'interface affiche des visualiseurs audio en direct pour chaque source active, confirmant que l'audio est bien capture. Un minuteur affiche le temps ecoule et une estimation de la taille du fichier. + +### Prise de notes en direct avec Markdown + +Vous pouvez prendre des notes structurees pendant l'enregistrement. La zone de notes supporte le format Markdown complet avec une barre de formatage. Vos notes sont enregistrees automatiquement et seront associees a l'enregistrement. + +Utilisations courantes des notes en direct : + +- Capturer les actions a suivre et les echeances +- Noter les noms des participants et leurs roles +- Documenter les decisions et leur justification +- Ajouter du contexte non perceptible dans l'audio + +## Finaliser votre enregistrement + +Apres avoir arrete un enregistrement ou selectionne un fichier televerse, l'ecran de finalisation vous permet d'ajouter des metadonnees et de configurer les options de traitement. + +### Ajouter des etiquettes + +Les etiquettes sont des pastilles colorees que vous pouvez selectionner pour categoriser votre enregistrement. Vous pouvez appliquer plusieurs etiquettes a un seul enregistrement. + +!!! tip "Selectionnez vos etiquettes avant le televersement" + Les etiquettes peuvent avoir des consignes IA personnalisees associees. En les selectionnant avant le traitement, les bonnes consignes de resume seront appliquees automatiquement. + +**Empilage intelligent des consignes** : lorsque vous selectionnez plusieurs etiquettes, leurs consignes sont concatenees dans l'ordre de selection. Vous pouvez ainsi combiner une etiquette generale (ex. : « Reunions ») avec une etiquette specifique (ex. : un client ou un projet). + +### Options avancees de transcription + +Si votre administrateur a configure un service de transcription avec identification des locuteurs, une section **Options avancees** est disponible. Vous pouvez y specifier : + +- **La langue de transcription** si votre contenu n'est pas en francais. +- **Le nombre minimum et maximum de locuteurs** pour une meilleure precision de l'identification. + +#### Vocabulaire personnalise + +Le champ **Vocabulaire personnalise** vous permet de fournir une liste de mots ou expressions (separees par des virgules) que le moteur de transcription doit prioriser. Utile pour les termes techniques, noms propres, acronymes ou noms de marques. + +Exemple : `DictIA, InnovA AI, WhisperX` + +#### Consigne de transcription + +Le champ **Consigne de transcription** fournit du contexte au moteur de transcription. Par exemple : « Ceci est une reunion sur les outils de transcription audio par IA. » + +!!! info "Hierarchie de priorite" + Les valeurs saisies dans le formulaire de televersement ont priorite sur les parametres par defaut des etiquettes, qui ont priorite sur ceux des dossiers, qui ont priorite sur vos parametres personnels dans les [parametres du compte](parametres.md). + +### Actions finales + +- **Televerser / Lancer le traitement** : demarre la transcription immediatement avec vos parametres. +- **Supprimer** : supprime l'enregistrement sans le sauvegarder. + +## Recuperation apres un incident + +DictIA sauvegarde automatiquement vos enregistrements en cours toutes les 5 secondes dans le stockage de votre navigateur. Si votre navigateur plante, si l'onglet se ferme accidentellement ou si votre ordinateur redemarre, vous ne perdrez pas votre travail. + +**Ce qui est recupere :** + +- Tout l'audio enregistre jusqu'au moment de l'interruption +- Le mode d'enregistrement (microphone, audio systeme ou combine) +- Les notes saisies +- Les etiquettes et parametres selectionnes + +**Comment ca fonctionne :** + +1. Lorsque vous revenez sur DictIA apres un incident, une fenetre de recuperation apparait automatiquement. +2. Examinez les details de l'enregistrement (duree, taille, horodatage). +3. Cliquez sur **Restaurer l'enregistrement** pour continuer, ou **Supprimer** pour recommencer. + +!!! warning "Limitations" + - Les donnees de recuperation sont stockees dans le navigateur (par navigateur, par appareil). + - Effacer les donnees du navigateur supprime les informations de recuperation. + - Jusqu'a 5 secondes d'audio peuvent etre perdues. + +## Bonnes pratiques + +### Enregistrement sur appareils mobiles + +!!! danger "Gardez l'application visible sur les appareils mobiles" + Les navigateurs mobiles (Chrome, Safari, etc.) **mettent en pause l'enregistrement audio** lorsque vous reduisez l'application ou verrouillez votre ecran. Il s'agit d'une limitation fondamentale des navigateurs. + + **Pour enregistrer avec succes sur mobile :** + + - Gardez DictIA **visible** au premier plan en tout temps. + - Ne **reduisez pas** la fenetre et ne changez pas d'application. + - Ne **verrouillez pas** votre ecran pendant l'enregistrement. + + **Pour les longues reunions sur mobile :** + + 1. Gardez DictIA ouvert et visible (le verrouillage d'ecran est empeche automatiquement). + 2. Ou utilisez l'enregistreur vocal natif de votre telephone, puis televersez le fichier dans DictIA. + + **Les navigateurs de bureau n'ont pas cette limitation** : l'enregistrement continue meme lorsque la fenetre est reduite. + +Pour une meilleure experience mobile, installez DictIA comme application mobile. Consultez le [guide de l'application mobile](application-mobile.md). + +### Optimiser la qualite audio + +- Trouvez un endroit calme avec un minimum d'echo et de bruit de fond. +- Positionnez votre microphone a 15-30 cm de votre bouche. +- Pour l'enregistrement d'audio systeme, fermez les applications inutiles qui pourraient produire des sons de notification. +- Lors de l'enregistrement combine (microphone + systeme), **utilisez des ecouteurs** pour eviter l'echo. + +!!! info "Enregistrements avec telephone" + Les telephones intelligents ont des algorithmes de reduction de bruit qui peuvent filtrer les voix eloignees lors d'enregistrements multi-locuteurs. Pour de meilleurs resultats, utilisez un microphone externe ou placez le telephone a distance egale de tous les locuteurs. + +### Organisation des le depart + +- Incluez des informations cles dans les titres (type de reunion, sujet, projet). +- Appliquez les etiquettes immediatement pendant que le contexte est frais. +- Utilisez la prise de notes en direct pour capturer les informations non audibles (noms des participants, decisions visuelles partagees, etc.). + +--- + +Suivant : [Travailler avec les transcriptions](transcriptions.md) diff --git a/client_docs/guide-utilisateur/groupes.md b/client_docs/guide-utilisateur/groupes.md new file mode 100644 index 0000000..ebfcb6d --- /dev/null +++ b/client_docs/guide-utilisateur/groupes.md @@ -0,0 +1,139 @@ +# Collaboration en groupe + +Les groupes transforment la facon dont les equipes collaborent dans DictIA en permettant un partage automatique sans effort manuel. Lorsque votre organisation utilise des groupes, les enregistrements atteignent automatiquement les bonnes personnes au bon moment. + +## Comprendre les groupes + +Les groupes dans DictIA sont des ensembles d'utilisateurs qui ont regulierement besoin d'acceder aux memes enregistrements. Contrairement au partage individuel ou vous accordez l'acces utilisateur par utilisateur, les groupes utilisent des etiquettes intelligentes qui partagent automatiquement le contenu avec tous les membres lorsqu'elles sont appliquees. + +Votre administrateur cree et gere les groupes. Une fois ajoute a un groupe, vous avez acces aux etiquettes de groupe et recevez automatiquement les enregistrements lorsque des collegues appliquent ces etiquettes. + +Les groupes fonctionnent aux cotes de vos outils d'organisation personnels : vos etiquettes personnelles restent privees et independantes, tandis que les etiquettes de groupe creent un contexte partage. + +## Etiquettes de groupe + +Les etiquettes de groupe sont le moteur de la collaboration. Elles ressemblent aux etiquettes regulieres, mais lorsque quelqu'un en applique une a un enregistrement, tous les membres du groupe recoivent automatiquement l'acces. + +### Reconnaitre les etiquettes de groupe + +Les etiquettes de groupe s'affichent avec une icone distinctive d'utilisateurs dans toute l'interface DictIA. Dans votre interface de gestion des etiquettes, les etiquettes de groupe affichent le nom du groupe et ne peuvent pas etre supprimees par les utilisateurs reguliers. + +### Appliquer les etiquettes de groupe + +Appliquer une etiquette de groupe fonctionne exactement comme une etiquette personnelle : ouvrez un enregistrement, cliquez sur le bouton d'etiquettes et selectionnez parmi vos etiquettes disponibles. La difference se fait en coulisse : DictIA cree automatiquement des partages internes pour chaque membre du groupe. + +Le partage automatique accorde aux membres du groupe l'acces en consultation et en edition. Ils peuvent lire les transcriptions et les resumes, ecouter l'audio, modifier les notes et les metadonnees, et ajouter leurs propres etiquettes. Cependant, seul le proprietaire original peut supprimer l'enregistrement. + +!!! info "Partage intelligent" + - Si un membre a deja acces par un partage precedent, aucun doublon n'est cree. + - Les personnes ajoutees au groupe ulterieurement ne recoivent pas automatiquement acces aux anciens enregistrements, uniquement aux nouveaux. + +### Utiliser les etiquettes de groupe efficacement + +- **Appliquez les etiquettes immediatement** apres les reunions ou discussions importantes pour assurer la visibilite de l'equipe. +- **Combinez etiquettes de groupe et personnelles** : utilisez les etiquettes de groupe pour identifier l'audience et vos etiquettes personnelles pour le suivi de votre travail. +- **Utilisez plusieurs etiquettes de groupe** lorsque les enregistrements concernent plusieurs equipes, mais assurez-vous que chaque groupe etiquete a reellement besoin d'y acceder. + +### Fonctionnalites avancees des etiquettes de groupe + +Votre administrateur peut configurer des fonctionnalites speciales sur les etiquettes de groupe : + +- **Politiques de retention** : une etiquette « Documents juridiques » pourrait conserver les enregistrements sept ans, tandis qu'une etiquette « Melees quotidiennes » pourrait les supprimer automatiquement apres deux semaines. +- **Protection** : les etiquettes protegees empechent toute suppression automatique, quel que soit l'age de l'enregistrement. +- **Consignes IA personnalisees** : chaque etiquette peut avoir sa propre consigne de resume. Les revues techniques recoivent des resumes techniques detailles, tandis que les comptes rendus executifs obtiennent des vues d'ensemble de haut niveau. + +## Travailler avec les enregistrements de groupe + +Les enregistrements partages via les etiquettes de groupe apparaissent dans votre interface principale aux cotes de vos propres enregistrements. + +### Identifier le contenu de groupe + +Les cartes d'enregistrement affichent plusieurs indicateurs : + +- **Badge « Groupe »** (bleu) : indique que l'enregistrement a des etiquettes de groupe. +- **Badge « Partage »** (violet) : apparait si vous n'etes pas le proprietaire. +- **Icone d'utilisateurs** sur les etiquettes : distingue les etiquettes de groupe des etiquettes personnelles. + +Le filtre **Partages avec moi** dans la barre laterale isole les enregistrements partages, y compris ceux partages via les etiquettes de groupe. + +### Vos permissions sur les enregistrements de groupe + +En tant que membre du groupe, vous recevez la permission d'edition sur les enregistrements avec des etiquettes de groupe. Vous pouvez : + +- Modifier le titre, la liste des participants, la date de reunion +- Editer les notes et ajouter du contexte +- Ajouter des etiquettes pour une meilleure organisation + +Limitations importantes : + +- Vous **ne pouvez pas supprimer** les enregistrements de groupe, meme avec la permission d'edition. +- Vous **ne pouvez pas partager** les enregistrements de groupe avec des utilisateurs en dehors du groupe sans permission de repartage. + +### Notes personnelles sur les enregistrements de groupe + +Vous pouvez ajouter des notes personnelles qui restent completement privees. Ces notes ne sont jamais visibles par le proprietaire de l'enregistrement ni par les autres membres du groupe. + +Les notes personnelles persistent tant que vous avez acces a l'enregistrement. Si vous quittez le groupe, vos notes sont automatiquement supprimees. + +## Adhesion au groupe + +### Rejoindre un groupe + +L'adhesion est geree par les administrateurs. Lorsque vous etes ajoute a un groupe : + +- Vous avez immediatement acces aux etiquettes du groupe. +- Vous commencez a recevoir les enregistrements lorsque des collegues utilisent les etiquettes de groupe a l'avenir. +- Vous n'avez **pas** acces retroactif aux anciens enregistrements etiquetes. + +### Roles dans le groupe + +- **Membres reguliers** : peuvent utiliser les etiquettes de groupe et acceder aux enregistrements etiquetes par d'autres. +- **Administrateurs de groupe** : peuvent ajouter ou retirer des membres, creer et modifier des etiquettes de groupe, et gerer la structure organisationnelle du groupe. + +### Quitter un groupe + +Lorsque vous quittez un groupe : + +- Les etiquettes de groupe disparaissent de vos selecteurs. +- Votre acces aux enregistrements precedemment partages est conserve, mais vous ne recevrez plus de nouveaux enregistrements. +- Vos notes personnelles sur les enregistrements de groupe sont conservees si vous gardez l'acces par d'autres mecanismes de partage. + +## Administration de groupe (pour les administrateurs de groupe) + +Si vous etes administrateur de groupe, vous avez acces a une interface de gestion via le lien **Gestion de groupe** dans votre menu de compte. + +### Gerer les membres + +- Recherchez des utilisateurs par nom, selectionnez leur role initial et ajoutez-les. +- Changez les roles entre membre et administrateur. +- Le retrait d'un membre coupe l'acces aux futurs enregistrements de groupe. + +### Creer et gerer les etiquettes de groupe + +Les etiquettes de groupe sont le vocabulaire organisationnel de votre equipe. Creez des etiquettes qui correspondent a la facon dont votre equipe pense le contenu : noms de projets, types de contenu, categories de reunions. + +Lors de la creation, vous pouvez definir des periodes de retention personnalisees et des drapeaux de protection selon les besoins du groupe. + +### Synchroniser les partages de groupe + +Si votre groupe a commence a utiliser des etiquettes avant que le partage automatique soit pleinement en place, la fonctionnalite **Synchroniser les partages de groupe** applique retroactivement le partage aux enregistrements deja etiquetes. + +## Integration avec la Recherche IA + +Les etiquettes de groupe apparaissent dans les options de filtrage de la Recherche IA, ce qui vous permet de cibler vos recherches dans le contexte d'un groupe specifique. + +Les enregistrements partages via les etiquettes de groupe sont automatiquement inclus dans vos recherches en Recherche IA, creant une base de connaissances complete qui couvre a la fois vos enregistrements personnels et le contenu de groupe. + +Vos notes personnelles sur les enregistrements de groupe restent privees meme dans la Recherche IA. + +## Bonnes pratiques + +- **Utilisez les etiquettes de groupe des le debut** d'un projet pour batir un historique complet. +- **Etablissez des conventions d'equipe** sur quand utiliser les etiquettes de groupe versus le partage individuel. +- **Choisissez des noms descriptifs** comme « Planification sprint » ou « Retours clients » plutot que des noms generiques comme « Important ». +- **Revisez periodiquement** les etiquettes de groupe avec votre administrateur pour vous assurer qu'elles restent pertinentes. +- **Utilisez vos notes personnelles** liberalement pour votre suivi individuel : elles ne sont visibles que par vous. + +--- + +Suivant : [Parametres du compte](parametres.md) diff --git a/client_docs/guide-utilisateur/index.md b/client_docs/guide-utilisateur/index.md new file mode 100644 index 0000000..0ba8309 --- /dev/null +++ b/client_docs/guide-utilisateur/index.md @@ -0,0 +1,49 @@ +# Guide utilisateur + +Bienvenue dans le guide utilisateur de DictIA. Cette section vous accompagne pas a pas dans l'utilisation quotidienne de la plateforme, de la creation de vos premiers enregistrements jusqu'aux fonctionnalites avancees de collaboration et de recherche par intelligence artificielle. + +DictIA transforme vos enregistrements audio en transcriptions intelligentes, enrichies de resumes automatiques, d'identification des locuteurs et de fonctionnalites de recherche semantique. + +--- + +## Sections du guide + +
+ +- :material-rocket-launch: **[Premiers pas](premiers-pas.md)** + + Decouvrez l'interface de DictIA, la navigation et la disposition des panneaux principaux. + +- :material-microphone: **[Enregistrement et televersement](enregistrement.md)** + + Enregistrez de l'audio directement dans votre navigateur ou televersez des fichiers existants. + +- :material-text-box-outline: **[Transcriptions](transcriptions.md)** + + Consultez, modifiez et exportez vos transcriptions. Utilisez le resume IA, les notes et la conversation IA. + +- :material-magnify: **[Recherche IA](recherche-ia.md)** + + Interrogez l'ensemble de vos enregistrements en langage naturel grace a la recherche semantique. + +- :material-share-variant: **[Partage](partage.md)** + + Partagez vos enregistrements avec des collegues ou creez des liens publics securises. + +- :material-folder-outline: **[Dossiers](dossiers.md)** + + Organisez vos enregistrements dans des dossiers pour une gestion par projet, client ou type de contenu. + +- :material-account-group: **[Groupes](groupes.md)** + + Collaborez en equipe grace aux groupes et aux etiquettes de groupe avec partage automatique. + +- :material-cog: **[Parametres du compte](parametres.md)** + + Personnalisez votre experience : langue, consignes IA, gestion des locuteurs et des etiquettes. + +- :material-cellphone: **[Application mobile](application-mobile.md)** + + Installez DictIA sur votre appareil mobile pour un acces rapide et l'enregistrement en deplacement. + +
diff --git a/client_docs/guide-utilisateur/parametres.md b/client_docs/guide-utilisateur/parametres.md new file mode 100644 index 0000000..72dbf9b --- /dev/null +++ b/client_docs/guide-utilisateur/parametres.md @@ -0,0 +1,205 @@ +# Parametres du compte + +Les parametres de votre compte sont le centre de controle pour personnaliser DictIA selon vos besoins. Chaque preference que vous definissez ici facon votre experience quotidienne. Accedez a ces parametres en cliquant sur votre nom d'utilisateur dans la barre de navigation, puis en selectionnant **Compte**. + +## Onglet Informations du compte + +### Informations personnelles + +Mettez a jour votre nom complet, votre titre de poste et votre organisation. Ces informations aident a vous identifier dans les environnements collaboratifs. + +### Preferences linguistiques + +Trois parametres de langue distincts faconnent votre experience : + +- **Langue de l'interface** : transforme tous les menus, boutons et messages dans la langue choisie (francais, anglais, espagnol, chinois ou allemand). +- **Langue de transcription** : accepte un code de langue ISO (ex. : « fr » ou « en ») pour optimiser la precision de la reconnaissance. Laissez vide pour activer la detection automatique du contenu multilingue. +- **Langue du resume et de la conversation IA** : assure que tout le contenu genere par l'IA apparait dans votre langue preferee, peu importe la langue de l'audio source. + +### Statistiques du compte + +Le panneau de droite affiche vos metriques d'enregistrement : + +- Nombre total d'enregistrements et nombre de traitements termines +- Enregistrements en cours de traitement et ceux en erreur + +### Preferences de traitement + +#### Resume automatique + +L'option **Resume automatique** controle si les resumes sont generes automatiquement apres la transcription. Active par defaut. Desactivez-la si vous preferez declencher manuellement la generation de resumes. + +#### Identification automatique des locuteurs + +Lorsque vous avez des profils vocaux avec des empreintes (provenant du service de transcription avancee), l'**Identification automatique des locuteurs** peut reconnaitre et etiqueter les locuteurs dans les nouveaux enregistrements. + +- **Activer/Desactiver** : activez l'identification automatique. +- **Seuil de confiance** : + - **Bas** : plus de correspondances, mais possibilite de faux positifs. + - **Moyen** : precision equilibree (recommande). + - **Eleve** : moins de correspondances, mais confiance plus elevee. + +!!! tip "Construire des profils vocaux" + L'identification automatique necessite des profils vocaux avec empreintes. Ceux-ci sont crees lorsque vous identifiez des locuteurs dans des enregistrements traites avec le service de transcription avancee. Plus vous identifiez un locuteur dans differents enregistrements, meilleure sera la reconnaissance. + +### Actions du compte + +- **Aller aux enregistrements** : acces direct a votre bibliotheque. +- **Changer le mot de passe** : ouvre un dialogue securise pour mettre a jour vos identifiants. +- **Gerer les locuteurs** : raccourci vers la gestion des profils de locuteurs. + +## Onglet Consignes personnalisees + +### Votre consigne de resume personnalisee + +Le grand champ de texte accepte des instructions detaillees en langage naturel qui deviennent les directives de l'IA pour generer vos resumes. Pensez-y comme a l'enseignement a un assistant de la facon exacte dont vous souhaitez que vos notes de reunion soient preparees. + +Par exemple, vous pourriez demander des sections specifiques comme « Decisions techniques cles » pour les reunions d'ingenierie ou « Observations sur les patients » pour des consultations medicales. + +### Consigne par defaut en cours + +Sous votre consigne personnalisee, vous pouvez voir la consigne par defaut qui s'applique lorsque vous laissez la votre vide. Cette transparence montre exactement quelles instructions de base l'IA suit. + +### Hierarchie des consignes + +Comprendre l'ordre de priorite vous aide a utiliser cette fonctionnalite efficacement : + +1. **Consignes des etiquettes** (priorite la plus elevee) +2. **Votre consigne personnalisee** +3. **Consigne par defaut de l'administrateur** +4. **Consigne systeme** (dernier recours) + +### Empilage des consignes + +Les consignes de plusieurs etiquettes se combinent intelligemment lorsqu'elles sont appliquees ensemble. Un enregistrement etiquete a la fois « Client » et « Technique » recoit les deux jeux d'instructions. + +### Indications de transcription + +Sous la consigne de resume, deux champs ameliorent la precision de la transcription : + +- **Vocabulaire personnalise par defaut** : liste de mots ou expressions separees par des virgules que le moteur de transcription doit prioriser (ex. : noms de marques, acronymes, terminologie technique). +- **Consigne de transcription par defaut** : breve description du contenu typique de vos enregistrements (ex. : « Ceci est une reunion sur le developpement logiciel et les outils d'IA. »). + +Ces valeurs par defaut s'appliquent a tous vos enregistrements, sauf si elles sont remplacees par les parametres d'etiquettes, de dossiers ou les valeurs saisies dans le formulaire de televersement. + +!!! tip "Vocabulaire personnalise vs Consigne de transcription" + Utilisez le **vocabulaire personnalise** pour les termes specifiques que le modele a tendance a mal orthographier. Utilisez la **consigne de transcription** pour un contexte plus large qui aide le modele a mieux comprendre le domaine. + +### Rediger des consignes efficaces + +Redigez vos consignes en fonction de la facon dont vous utilisez reellement les resumes. Cherchez-vous a extraire des actions a suivre ? A identifier des decisions strategiques ? A documenter des details techniques ? Votre consigne devrait demander exactement ce dont vous avez besoin. + +## Onglet Transcriptions partagees + +Cet onglet offre une visibilite et un controle complets sur tous les enregistrements que vous avez partages via des liens publics. + +### Informations de partage + +Chaque entree affiche le titre de l'enregistrement, la date de creation du lien, les options selectionnees (resume et/ou notes) et l'URL complete. + +### Gerer les options de partage + +Modifiez a tout moment ce qui est inclus dans un partage en basculant les cases du resume et des notes. Les changements prennent effet immediatement pour toute personne accedant au lien, sans generer de nouveau lien. + +### Revoquer l'acces + +Le bouton de suppression (icone corbeille) revoque instantanement l'acces. Une fois supprime, toute personne tentant d'acceder au lien verra un message d'erreur. + +## Onglet Gestion des locuteurs + +Cet onglet fournit une interface complete pour gerer tous les locuteurs identifies a travers vos enregistrements. + +### Creation automatique des locuteurs + +Les locuteurs sont automatiquement sauvegardes lorsque vous les identifiez lors de l'edition de transcriptions. Le systeme construit votre bibliotheque au fil du temps. + +### Informations sur les fiches de locuteur + +Chaque fiche affiche : + +- Le nom du locuteur +- Les statistiques d'utilisation (nombre d'identifications) +- La date de derniere utilisation +- La date d'ajout + +#### Profil vocal + +Pour les locuteurs avec des donnees de reconnaissance vocale : + +- **Badge de profil vocal** : indique le niveau de confiance (eleve, moyen, bas). +- **Nombre d'echantillons** : nombre d'empreintes vocales collectees. +- **Bouton d'echantillons vocaux** : ecoutez des extraits representatifs pour verification. +- **Indicateur de force du profil** : retour visuel sur la capacite du systeme a reconnaitre ce locuteur. + +### Maintenance + +- Supprimez des locuteurs individuellement avec l'icone corbeille. +- Utilisez **Tout supprimer** pour reinitialiser votre base. +- Revisez regulierement pour retirer les locuteurs obsoletes et consolider les doublons. + +## Onglet Gestion des etiquettes + +La gestion des etiquettes transforme de simples libelles en instructions de traitement puissantes. Chaque etiquette porte plusieurs capacites : une couleur, une consigne IA optionnelle, des parametres de transcription, des politiques de retention et des configurations de partage. + +### Affichage et indicateurs visuels + +Chaque carte d'etiquette affiche des badges visuels indiquant sa configuration : + +- **Badges de retention** : periode de retention (ex. : « 90 jours ») ou statut de protection (symbole infini) +- **Badges de partage** : indique s'il s'agit d'une etiquette de groupe avec partage automatique +- **Badges de langue** : parametres de langue personnalises +- **Badges de locuteurs** : parametres par defaut (ex. : « Max 10 » locuteurs) +- **Consignes personnalisees** : apercu des instructions de resume IA + +### Creer une etiquette + +Cliquez sur **Creer une etiquette**. Le systeme vous guide pour : + +1. Choisir un nom +2. Selectionner une couleur +3. Optionnellement ajouter une consigne personnalisee +4. Definir les parametres par defaut de transcription (nombre de locuteurs attendu, vocabulaire personnalise, consigne de transcription) + +### Empilage des consignes + +Les consignes s'empilent intelligemment lorsque plusieurs etiquettes sont appliquees. Par exemple, etiqueter un enregistrement avec « Reunions BSB » et « Reunions etudiantes » combine les deux consignes pour un resume complet. + +### Vocabulaire personnalise et consigne de transcription par etiquette + +Les etiquettes peuvent avoir un **vocabulaire personnalise** et une **consigne de transcription** par defaut. Par exemple, une etiquette « Rondes medicales » pourrait inclure `epinephrine, tachycardie, intubation` comme vocabulaire et « Discussion d'equipe medicale en contexte de soins intensifs » comme consigne. + +### Gerer les etiquettes + +Les boutons de modification et de suppression sur chaque carte offrent un controle complet. Supprimer une etiquette ne modifie pas les enregistrements deja etiquetes : ils conservent leurs etiquettes pour reference historique. + +## Onglet A propos + +L'onglet A propos presente une vue d'ensemble de votre installation DictIA : version, configuration systeme, fonctionnalites principales et liens vers les ressources. + +### Informations de version + +Le badge de version vous indique quelle version de DictIA vous utilisez, information essentielle pour le depannage. + +### Configuration systeme + +Cette section detaille les capacites de votre instance : le modele d'IA utilise pour les resumes et la conversation IA, ainsi que la configuration de votre service de transcription. + +### Liens utiles + +Des boutons d'acces rapide vous connectent aux ressources essentielles : documentation et support. + +## Securite et confidentialite + +- **Deconnectez-vous** lorsque vous utilisez un ordinateur partage. +- **Revisez regulierement** vos enregistrements partages et revoquez l'acces lorsque ce n'est plus necessaire. +- **Tenez compte des implications** des parametres de langue dans les contextes internationaux. + +## Optimiser vos parametres + +Commencez par une configuration de base : nom, preferences de langue et une consigne simple. A mesure que vous vous familiarisez avec DictIA, ajoutez des etiquettes, affinez vos consignes et construisez votre bibliotheque de locuteurs. + +Si vous avez des questions ou rencontrez des problemes, contactez le support InnovA AI. + +--- + +Retour au [Guide utilisateur](index.md) diff --git a/client_docs/guide-utilisateur/partage.md b/client_docs/guide-utilisateur/partage.md new file mode 100644 index 0000000..44c7b5b --- /dev/null +++ b/client_docs/guide-utilisateur/partage.md @@ -0,0 +1,105 @@ +# Partage et collaboration + +DictIA offre des options de collaboration flexibles pour s'adapter a votre flux de travail. Partagez des enregistrements en interne avec des collegues, organisez l'acces via des groupes, ou creez des liens publics pour des parties prenantes externes. + +## Partage interne (utilisateur a utilisateur) + +Le partage interne permet la collaboration directe entre les utilisateurs de votre instance DictIA. Le destinataire doit se connecter pour acceder a l'enregistrement et ses permissions sont suivies et applicables. + +### Partager un enregistrement + +Lorsque vous consultez un enregistrement, cliquez sur l'icone de partage (icone d'utilisateurs) dans la barre d'outils. Dans la fenetre de partage : + +1. Recherchez le nom de l'utilisateur (saisissez au moins deux caracteres). +2. Choisissez le niveau de permission : + + - **Consultation seule** : le destinataire peut lire la transcription, consulter le resume, ecouter l'audio et utiliser la conversation IA. Il ne peut rien modifier. + - **Edition** : en plus de la consultation, le destinataire peut modifier le titre, les participants, la date, le resume partage et les etiquettes. Il ne peut pas supprimer l'enregistrement ni le partager avec d'autres. + - **Repartage** : toutes les capacites d'edition, plus la possibilite de partager l'enregistrement avec d'autres utilisateurs et de gerer ces partages. Seul le proprietaire original peut supprimer l'enregistrement. + +3. Cliquez sur le nom de l'utilisateur pour l'ajouter. Le partage prend effet immediatement. + +### Gerer vos partages + +La fenetre de partage affiche toutes les personnes ayant acces a un enregistrement, avec leurs permissions et la date d'octroi. L'icone rouge de suppression permet de revoquer instantanement l'acces. + +La revocation est immediate et complete : le destinataire perd l'acces et ses notes personnelles sur l'enregistrement sont supprimees. + +### Notes personnelles sur les enregistrements partages + +Lorsqu'un enregistrement est partage avec vous, vous pouvez ajouter vos propres notes privees, invisibles pour le proprietaire et les autres destinataires. + +!!! info "Notes vs Resume" + - **Notes** : toujours personnelles et privees. Chaque utilisateur peut creer ses propres notes sans permission speciale. + - **Resume** : partage globalement. Visible par tous les utilisateurs ayant acces. Seuls ceux avec la permission d'edition peuvent le modifier. + +### Boite de reception et favoris independants + +Chaque utilisateur maintient son propre etat de boite de reception et de favoris pour les enregistrements partages. Marquer un enregistrement comme lu ou en favori n'affecte pas les autres utilisateurs. + +### Voir les enregistrements partages avec vous + +Les enregistrements partages apparaissent dans votre liste principale avec des indicateurs visuels distinctifs (titre colore et bordure subtile). Utilisez le filtre **Partages avec moi** dans la barre laterale pour voir uniquement ces enregistrements. + +## Liens de partage publics + +Vous pouvez creer des liens securises pour partager un enregistrement avec des personnes qui n'ont pas de compte DictIA. + +### Creer un lien de partage + +En consultant un enregistrement, cliquez sur le bouton de partage dans la barre d'outils. Deux options vous sont proposees : + +- **Partager le resume** : permet aux destinataires de voir le resume genere par l'IA. +- **Partager les notes** : permet aux destinataires de voir vos notes personnelles. + +La transcription est toujours incluse comme contenu principal. + +Cliquez sur **Creer un lien de partage** pour generer l'URL securisee. Le lien est permanent jusqu'a sa revocation explicite. + +### Ce que les destinataires voient + +Les destinataires accedent a une vue epuree et professionnelle de votre enregistrement : + +- Le titre de l'enregistrement +- Le lecteur audio avec controles de lecture complets +- La transcription avec les etiquettes de locuteurs et les options d'affichage (vue simple et a bulles) +- Le resume et/ou les notes (selon vos choix) +- Un bouton de copie pour extraire facilement le texte + +L'experience est en lecture seule : les destinataires ne peuvent rien modifier et n'ont acces a aucune autre partie de votre compte. + +### Gerer vos liens de partage + +Tous vos liens de partage sont centralises dans l'onglet **Transcriptions partagees** de vos [parametres du compte](parametres.md). Vous pouvez : + +- Modifier les options de partage (resume et/ou notes) sans generer de nouveaux liens. +- Copier a nouveau l'URL si necessaire. +- Supprimer un partage pour revoquer instantanement l'acces. + +## Scenarios pratiques + +| Scenario | Approche | Pourquoi | +|----------|----------|----------| +| Enregistrements familiaux | Creer un groupe « Famille », etiqueter les evenements | Acces automatique pour tous les membres | +| Club de lecture | Creer un groupe avec etiquette protegee | Enregistrements preserves, partage automatique | +| Projet temporaire a 3 personnes | Partage individuel avec edition | Collaboration temporaire, facile a revoquer | +| Reunions de departement | Creer un groupe, etiqueter les reunions | Nouveaux membres recoivent les futures reunions | +| Presentations clients | Partage individuel en consultation seule | Acces controle, pas de modification accidentelle | + +## Combiner les approches + +Utilisez les groupes pour la collaboration reguliere et le partage individuel pour les exceptions. Votre equipe a un acces automatique aux discussions via les etiquettes de groupe. Quand une decision necessite un examen par la direction, partagez cet enregistrement specifique individuellement. + +## Bonnes pratiques + +- **Partagez rapidement** apres les reunions pendant que le contexte est frais. +- **Utilisez la consultation seule par defaut** et n'accordez l'edition que lorsque les destinataires doivent vraiment contribuer. +- **Revisez periodiquement** vos enregistrements partages pour vous assurer que l'acces reste approprie. +- **Traitez les liens de partage** avec le meme soin que des documents sensibles : partagez-les uniquement par des canaux securises. + +!!! warning "Rappel important" + Les liens de partage ne necessitent pas d'authentification. Toute personne disposant du lien peut acceder a l'enregistrement. Revoquer un lien empeche tout acces futur, mais ne peut pas recuperer l'information deja consultee ou telechargee. + +--- + +Suivant : [Dossiers](dossiers.md) diff --git a/client_docs/guide-utilisateur/premiers-pas.md b/client_docs/guide-utilisateur/premiers-pas.md new file mode 100644 index 0000000..96771a4 --- /dev/null +++ b/client_docs/guide-utilisateur/premiers-pas.md @@ -0,0 +1,123 @@ +# Premiers pas + +L'interface principale de DictIA est l'endroit ou vous passerez la majorite de votre temps. Elle est concue en trois panneaux qui facilitent la navigation entre vos enregistrements, la lecture des transcriptions et l'interaction avec votre contenu. + +## Comprendre la disposition de l'interface + +L'interface principale est organisee en trois sections qui fonctionnent ensemble. + +- **Panneau de gauche** : la barre laterale liste tous vos enregistrements audio avec des options de filtrage et de recherche. +- **Panneau central** : affiche la transcription complete de l'enregistrement selectionne, avec identification des locuteurs si disponible. +- **Panneau de droite** : contient le lecteur audio, le resume genere par l'IA, vos notes personnelles et la conversation IA. + +Au-dessus des panneaux central et droit, une barre de metadonnees affiche les informations de l'enregistrement et les boutons d'action. + +## Barre de navigation superieure + +La barre de navigation en haut de l'ecran offre un acces rapide aux fonctionnalites essentielles : + +- **Logo DictIA** : vous ramene a la vue principale depuis n'importe quelle page. +- **Bouton Recherche IA** : ouvre l'interface de recherche semantique pour interroger l'ensemble de vos enregistrements en langage naturel. +- **Bouton Nouvel enregistrement** : permet de televerser un fichier audio ou d'enregistrer directement dans votre navigateur. +- **Menu utilisateur** (a droite) : acces aux parametres du compte, aux preferences de langue et a la deconnexion. + +## Barre laterale gauche — Liste et filtres + +La barre laterale est votre centre de commande pour organiser et retrouver vos enregistrements. + +### Barre de recherche + +En haut de la barre laterale, un champ de recherche vous permet de retrouver rapidement un enregistrement par son titre ou son contenu. + +### Utiliser les filtres + +Cliquez sur **Filtres actifs** pour deployer le panneau de filtrage. Vous pouvez filtrer par : + +- **Etiquettes** : selectionnez ou deselectionnez les etiquettes affichees sous forme de pastilles colorees. +- **Plage de dates** : utilisez les raccourcis (Aujourd'hui, Hier, Cette semaine, Semaine derniere) ou definissez une plage personnalisee. +- **Partages** : activez le filtre **Partages avec moi** pour voir uniquement les enregistrements partages par d'autres utilisateurs. + +Lorsque des filtres sont actifs, leur nombre s'affiche a cote du libelle. Un bouton permet de reinitialiser tous les filtres d'un coup. + +### Cartes d'enregistrement + +Chaque enregistrement s'affiche sous forme de carte montrant : + +- Le titre +- Les participants (si l'identification des locuteurs a ete utilisee) +- La date et la duree +- Les etiquettes sous forme de pastilles colorees +- Des icones indiquant l'etat du traitement (termine, en cours ou en erreur) + +## Panneau central — Vue de la transcription + +Le panneau central affiche le texte complet de votre enregistrement. Si l'identification des locuteurs est activee, chaque intervention est etiquetee avec un indicateur de couleur (LOCUTEUR_01, LOCUTEUR_02, etc.). Vous pouvez cliquer sur n'importe quelle phrase pour positionner le lecteur audio a cet endroit precis. + +### Options d'affichage + +- **Bouton Copier** : copie la transcription complete dans le presse-papier. +- **Bouton Modifier** : active l'edition en ligne pour corriger la transcription. +- **Bascule Simple / Bulles** : alterne entre un affichage en texte continu et un format de conversation a bulles (disponible uniquement avec l'identification des locuteurs). + +## Barre de metadonnees de l'enregistrement + +Cette barre affiche le titre, les participants, la date, la taille du fichier et la duree. Les boutons d'action a droite permettent de : + +- **Marquer en favori** (icone etoile) +- **Modifier les details** (icone crayon) +- **Gerer les etiquettes** (icone etiquette) +- **Retraiter la transcription** (icone rafraichir) +- **Partager** (icone partage) +- **Supprimer** (icone corbeille) + +## Panneau de droite — Lecture, resume, notes et conversation IA + +### Controles de lecture + +Le lecteur audio en haut du panneau de droite vous permet de lire, mettre en pause et naviguer dans l'enregistrement. Vous pouvez ajuster la vitesse de lecture de 0,5x a 2x. Si l'identification des locuteurs est activee, cliquer sur une phrase dans la transcription positionne automatiquement le lecteur a ce moment precis. + +### Onglet Resume + +L'onglet **Resume** affiche une vue d'ensemble generee par l'IA : points cles, decisions prises et actions a suivre. Le resume est cree automatiquement apres la transcription et peut etre regenere avec differents parametres. + +### Onglet Notes + +L'onglet **Notes** est votre espace personnel pour ajouter du contexte, des reflexions ou des suivis lies a l'enregistrement. Ces notes sont privees et consultables uniquement par vous. Elles prennent en charge le format Markdown. + +### Onglet Conversation IA + +L'onglet **Conversation IA** met a votre disposition un assistant qui peut repondre a vos questions sur l'enregistrement. Posez des questions comme « Quelles sont les decisions prises ? » ou « Qu'a dit Marie a propos du budget ? » et l'IA analysera la transcription pour vous fournir des reponses pertinentes. + +## Options de retraitement + +DictIA offre deux types de retraitement pour mettre a jour vos enregistrements : + +### Retraitement complet + +Le retraitement complet retranscrit entierement votre fichier audio. Ceci est utile lorsque vous souhaitez modifier les parametres d'identification des locuteurs ou utiliser un modele de transcription different. **Attention** : le retraitement complet ecrase les modifications manuelles apportees a la transcription. + +### Retraitement du resume + +Le retraitement du resume genere un nouveau titre et un nouveau resume a partir de la transcription existante, sans modifier le texte transcrit. Cette option est plus rapide et preserve vos corrections manuelles. + +## Travailler avec plusieurs enregistrements + +Vous pouvez combiner plusieurs filtres pour retrouver exactement ce que vous cherchez. Par exemple, filtrer par l'etiquette « Reunion » et la semaine derniere, puis rechercher « budget » dans le contenu. + +Les options de tri permettent d'organiser vos enregistrements par date de creation (televersement) ou par date de reunion (date reelle de l'enregistrement). + +## Conseils pour une utilisation efficace + +- **Adoptez une strategie d'etiquetage coherente** des le depart. Creez des etiquettes par projet, client ou type de reunion. +- **Utilisez la recherche avec des termes precis** : noms de projets, sujets specifiques ou termes techniques. +- **Prenez des notes immediatement** apres vos reunions pendant que le contexte est frais. +- **Pour les longs enregistrements**, utilisez la conversation IA pour poser des questions specifiques plutot que de relire la transcription en entier. +- L'interface se met a jour en temps reel : pas besoin de recharger la page apres un televersement ou un traitement. + +## Fonctionnalites de collaboration + +Si vous travaillez en equipe, les fonctionnalites de collaboration de DictIA permettent de partager automatiquement les enregistrements avec les bonnes personnes. Consultez les sections [Partage](partage.md) et [Groupes](groupes.md) pour en savoir plus. + +--- + +Suivant : [Enregistrement et televersement](enregistrement.md) diff --git a/client_docs/guide-utilisateur/recherche-ia.md b/client_docs/guide-utilisateur/recherche-ia.md new file mode 100644 index 0000000..e6a4ff7 --- /dev/null +++ b/client_docs/guide-utilisateur/recherche-ia.md @@ -0,0 +1,80 @@ +# Recherche IA + +La Recherche IA transforme l'ensemble de votre bibliotheque d'enregistrements en une base de connaissances intelligente que vous pouvez interroger en langage naturel. Plutot que de chercher dans chaque enregistrement individuellement, posez simplement vos questions et recevez des reponses completes tirees de tous vos enregistrements pertinents. + +## Comprendre la Recherche IA + +La Recherche IA fonctionne comme un assistant qui a ecoute chacun de vos enregistrements et peut instantanement retrouver et synthetiser l'information de n'importe lequel d'entre eux. + +Cette capacite de recherche semantique va bien au-dela de la simple correspondance de mots cles. Le systeme comprend les concepts, les relations et le contexte. Si vous demandez « preoccupations budgetaires », il trouvera les discussions sur les contraintes financieres, les depassements de couts ou les problemes de financement, meme si l'expression exacte « preoccupations budgetaires » n'a jamais ete prononcee. + +## Acceder a la Recherche IA + +Cliquez sur le bouton **Recherche IA** dans la barre de navigation superieure. L'interface s'ouvre avec une zone de recherche en haut et des options de filtrage sur le cote gauche. + +La beaute de la Recherche IA reside dans sa simplicite : tapez votre question comme vous la poseriez a un collegue, et le systeme se charge de la complexite. + +## Utiliser les filtres pour cibler votre recherche + +La barre laterale gauche contient des filtres qui vous aident a circonscrire votre recherche avant de poser votre question : + +- **Filtre par etiquettes** : selectionnez les enregistrements avec des etiquettes specifiques. Ideal pour chercher au sein d'un projet ou d'un type de reunion particulier. +- **Filtre par locuteur** : concentrez-vous sur ce qu'une personne specifique a dit a travers tous les enregistrements. Tres utile pour suivre les engagements d'une personne ou comprendre sa perspective. +- **Filtre par plage de dates** : ciblez des discussions recentes ou une periode specifique. Utile pour suivre l'evolution des discussions au fil du temps. + +## Poser des questions efficaces + +La cle pour obtenir d'excellents resultats est de poser des questions claires et specifiques avec du contexte. + +Au lieu de chercher un mot isole comme « echeance », posez une question complete : **« Quelles sont les echeances a venir pour le projet de refonte du site web ? »** + +Le systeme excelle avec differents types de requetes : + +- **Syntheses thematiques** : « Qu'a-t-on discute au sujet de la migration vers le nuage au cours du dernier mois ? » +- **Listes d'actions** : « Quelles sont les actions a suivre assignees lors des reunions de cette semaine ? » +- **Recherches specifiques** : « Quels engagements ont ete pris envers le client Acme ? » +- **Analyses de tendances** : « Comment les priorites du projet ont-elles evolue au cours du dernier trimestre ? » +- **Identification de problemes** : « Quels risques ont ete identifies pour le lancement du produit ? » + +## Comprendre vos resultats + +Les resultats de la Recherche IA ne sont pas une simple liste de correspondances : il s'agit d'une reponse coherente qui combine l'information provenant de plusieurs enregistrements en une synthese unifiee. + +Chaque element d'information inclut une citation au format **(Enregistrement ID : XX)** qui renvoie directement a l'enregistrement source. Cliquez sur ces liens pour acceder au contexte complet et verifier l'information. + +Le systeme organise intelligemment l'information en regroupant les points connexes et en les presentant dans un flux logique. Si plusieurs enregistrements traitent du meme sujet, la reponse synthetise ces discussions en montrant l'evolution de la conversation au fil du temps. + +## Applications pratiques + +### Preparation de reunions + +Passez en revue rapidement ce qui a ete discute precedemment sur les sujets a l'ordre du jour, les questions restees sans reponse et les engagements pris. + +### Gestion de projets + +Suivez les decisions prises lors de reunions multiples, identifiez les actions a suivre assignees aux membres de l'equipe et surveillez l'evolution des exigences. + +### Recherche et analyse + +Analysez les tendances dans les commentaires clients, suivez les mentions de concurrents ou identifiez les themes recurrents dans vos entrevues. + +### Conformite et documentation + +Retrouvez rapidement les engagements pris envers des clients, localisez les discussions sur les exigences reglementaires ou verifiez ce qui a ete convenu lors de negociations. + +## Strategies de recherche avancees + +- **Commencez par des questions larges** pour comprendre le paysage de l'information disponible, puis affinez avec des questions de plus en plus specifiques. +- **Combinez les filtres strategiquement** : pour preparer une reunion client, filtrez par l'etiquette du client et la plage de dates pertinente, puis demandez les enjeux en suspens. +- **Utilisez la terminologie de vos discussions** : le systeme apprend des modeles dans vos enregistrements, donc utiliser un vocabulaire coherent donne de meilleurs resultats. + +## Limites a garder en tete + +- La Recherche IA interroge uniquement le texte transcrit, pas l'audio directement. Les erreurs de transcription peuvent affecter les resultats. +- Le systeme ne peut pas inferer l'information qui n'a pas ete explicitement dite dans les enregistrements. +- Les enregistrements doivent etre entierement traites avant d'etre interrogeables ; les enregistrements tres recents pourraient ne pas apparaitre immediatement. +- La prise en charge linguistique est optimisee pour le francais et l'anglais. Les autres langues peuvent fonctionner avec des resultats variables. + +--- + +Suivant : [Partage](partage.md) diff --git a/client_docs/guide-utilisateur/transcriptions.md b/client_docs/guide-utilisateur/transcriptions.md new file mode 100644 index 0000000..ff84930 --- /dev/null +++ b/client_docs/guide-utilisateur/transcriptions.md @@ -0,0 +1,184 @@ +# Travailler avec les transcriptions + +Une fois votre audio traite, DictIA met a votre disposition un ensemble d'outils pour consulter, modifier et interagir avec vos transcriptions. + +## Vue de la transcription + +Lorsque vous selectionnez un enregistrement dans la barre laterale, le panneau central affiche la transcription complete avec des indicateurs visuels pour les differents locuteurs. + +## Identification des locuteurs + +Si votre enregistrement a ete traite avec l'identification des locuteurs activee, chaque intervention est etiquetee avec des indicateurs colores (LOCUTEUR_01, LOCUTEUR_02, etc.). + +### Identifier les locuteurs + +Pour attribuer de vrais noms aux etiquettes generiques, cliquez sur le bouton d'identification des locuteurs dans la barre d'outils. Une fenetre s'ouvre ou vous pouvez : + +- Voir un echantillon du dialogue de chaque locuteur detecte pour vous aider a les identifier. +- Beneficier de suggestions intelligentes basees sur les profils vocaux de vos enregistrements precedents, avec des scores de confiance. +- Saisir les vrais noms pour chaque locuteur : ils remplaceront les etiquettes generiques dans toute la transcription. + +Le systeme memorise ces attributions et construit des profils vocaux, rendant l'identification plus rapide et plus precise dans les enregistrements suivants. + +### Gerer les locuteurs enregistres + +Tous les locuteurs que vous identifiez sont automatiquement sauvegardes dans votre base de locuteurs. Vous pouvez les gerer depuis l'onglet **Gestion des locuteurs** dans vos [parametres du compte](parametres.md). + +Chaque fiche de locuteur affiche le nom, les statistiques d'utilisation, la date de derniere utilisation et la date d'ajout. Vous pouvez supprimer des locuteurs individuellement ou utiliser le bouton **Tout supprimer** pour reinitialiser votre base. + +## Modifier les transcriptions + +DictIA propose deux modes d'edition selon le type de transcription. + +### Edition de texte simple + +Pour les transcriptions sans identification des locuteurs, cliquez sur **Modifier** dans la barre d'outils pour acceder a un editeur de texte simple. Vous pouvez corriger les erreurs, ajouter de la ponctuation et ameliorer le formatage. Vos modifications sont conservees meme lors de la regeneration des resumes. + +### Edition avancee par segments + +Pour les transcriptions avec identification des locuteurs, DictIA offre un editeur par segments qui preserve la structure et le minutage. + +Pour chaque segment, vous pouvez : + +- **Modifier le nom du locuteur** : cliquez sur le champ du locuteur pour le changer, avec des suggestions intelligentes depuis votre base de locuteurs. +- **Ajuster les horodatages** : affinez les heures de debut et de fin de chaque segment. +- **Modifier le texte** : corrigez les erreurs de transcription directement dans le champ texte. +- **Gerer les segments** : supprimez les segments indesirables ou ajoutez-en de nouveaux. + +Vos modifications sont sauvegardees lorsque vous cliquez sur **Enregistrer les modifications**. + +!!! warning "Retraitement complet" + Si vous lancez un retraitement complet de la transcription, vos modifications manuelles seront ecrasees. Pour conserver vos corrections, utilisez plutot le retraitement du resume uniquement. + +## Options d'affichage + +### Vue simple + +La vue par defaut presente la transcription sous forme de texte continu avec des etiquettes de locuteurs en ligne. Ideale pour la lecture rapide et la copie de texte. + +### Vue a bulles + +La vue a bulles formate la transcription comme une conversation avec des bulles de message distinctes pour chaque locuteur. Particulierement utile pour les entrevues, debats ou tout echange rapide. + +## Synchronisation audio et mode suivi + +Pour les enregistrements avec identification des locuteurs, DictIA offre une synchronisation bidirectionnelle entre le lecteur audio et la transcription. + +### Navigation par clic + +Cliquez sur n'importe quelle partie de la transcription pour acceder directement a ce moment dans l'audio. Fonctionne dans les deux modes d'affichage. + +### Mise en evidence du segment actif + +Pendant la lecture audio, DictIA met automatiquement en evidence le texte actuellement prononce avec un encadre arrondi et une animation subtile. + +### Mode suivi avec defilement automatique + +Activez le mode suivi en cochant la case dans l'en-tete de la transcription (icone de fleches verticales). La transcription defilera automatiquement pour garder le segment actif au centre de la vue. Particulierement utile pour : + +- Suivre de longs enregistrements sans defilement manuel +- Reviser des sections specifiques a differentes vitesses de lecture +- Maintenir la synchronisation entre le visuel et l'audio + +Votre preference de mode suivi est sauvegardee automatiquement et persiste entre les sessions. + +## Utiliser le resume + +L'onglet **Resume** dans le panneau de droite contient une vue d'ensemble generee par l'IA. Le resume capture typiquement : + +- Les principaux sujets abordes +- Les decisions ou conclusions prises +- Les actions a suivre et les responsables +- Les dates ou echeances importantes mentionnees +- Les problemes ou preoccupations souleves + +### Personnaliser les consignes de resume + +DictIA permet de personnaliser la generation du resume a trois niveaux : + +1. **Niveau administrateur** : consigne par defaut pour tous les utilisateurs. +2. **Niveau utilisateur** : votre consigne personnelle dans les [parametres du compte](parametres.md), qui remplace celle de l'administrateur. +3. **Niveau etiquette** : chaque etiquette peut avoir sa propre consigne. Par exemple, une etiquette « Reunion juridique » pourrait se concentrer sur la conformite, tandis qu'une etiquette « Planification produit » mettrait l'accent sur les fonctionnalites et les echeances. + +### Ordre de priorite des consignes + +1. **Consignes des etiquettes** (priorite la plus elevee) : si l'enregistrement a des etiquettes avec des consignes, celles-ci priment. Plusieurs etiquettes combinent leurs consignes intelligemment. +2. **Consigne utilisateur** : appliquee en l'absence de consignes d'etiquettes. +3. **Consigne administrateur** : utilisee lorsque aucune consigne utilisateur n'est configuree. +4. **Consigne systeme** : dernier recours si aucune consigne n'existe a aucun niveau. + +### Modifier et exporter les resumes + +Le resume est entierement modifiable avec un editeur Markdown. Cliquez sur l'icone crayon pour entrer en mode edition. Les modifications sont enregistrees automatiquement. + +Vous pouvez exporter le resume de deux facons : + +- **Copier** : copie le resume au format Markdown dans le presse-papier. +- **Telecharger** : exporte le resume en fichier Microsoft Word (.docx). + +### Retraiter le resume avec des consignes differentes + +Cliquez sur le bouton de retraitement dans la barre d'outils du resume pour regenerer le resume. Trois options sont disponibles : + +- **Consigne par defaut** : applique la hierarchie de consignes standard. +- **Consigne d'une etiquette** : selectionnez n'importe quelle etiquette pour appliquer sa consigne, meme si l'enregistrement n'a pas cette etiquette. Ideal pour experimenter. +- **Consigne personnalisee** : saisissez une consigne unique pour cette seule regeneration (ex. : « Extraire tous les termes techniques et leurs definitions »). + +Le retraitement du resume ne modifie jamais votre transcription, y compris vos corrections manuelles. + +## Extraction d'evenements + +Lorsque l'extraction d'evenements est activee dans vos parametres du compte, DictIA identifie automatiquement les evenements dignes d'etre ajoutes a votre calendrier : reunions, echeances, rendez-vous et autres elements sensibles au temps. + +### Consulter les evenements extraits + +Apres le traitement, un onglet **Evenements** apparait dans le panneau de droite si des evenements ont ete detectes. Chaque evenement affiche le titre, la date, l'heure et une description extraite de la conversation. + +### Exporter vers le calendrier + +Chaque evenement peut etre exporte en fichier ICS compatible avec Google Agenda, Outlook, Apple Calendar et Thunderbird. Cliquez sur le bouton de telechargement a cote de l'evenement. Lorsque aucune heure precise n'est mentionnee, les evenements sont programmes a 9 h par defaut. + +## Conversation IA + +L'onglet **Conversation IA** met a votre disposition un assistant qui peut repondre a des questions sur votre enregistrement. Particulierement utile pour les longs enregistrements ou la recherche d'informations specifiques prendrait beaucoup de temps. + +### Poser des questions efficaces + +Vous pouvez poser differents types de questions : + +- Questions factuelles : « Qu'a dit Marie a propos du budget ? » +- Questions d'analyse : « Quelles sont les principales preoccupations soulevees ? » +- Questions de synthese : « Resume les actions a suivre pour l'equipe marketing. » + +La conversation IA maintient le contexte, vous pouvez donc poser des questions de suivi. + +### Exporter les conversations IA + +- **Copier dans le presse-papier** : copie la conversation complete au format question-reponse. +- **Telecharger en Word** : exporte l'historique complet en fichier Microsoft Word (.docx). + +## Notes personnelles + +L'onglet **Notes** est votre espace personnel et prive pour ajouter du contexte et des reflexions sur l'enregistrement. + +!!! info "Notes vs Resume" + - **Notes** : toujours privees et visibles uniquement par vous, meme sur les enregistrements partages. Aucune permission speciale n'est requise pour ajouter des notes. + - **Resume** : contenu partage visible par tous les utilisateurs ayant acces a l'enregistrement. Seuls les utilisateurs avec la permission d'edition peuvent modifier le resume. + +Les notes supportent le format Markdown complet et sont entierement consultables via la recherche, aux cotes des transcriptions. Elles sont enregistrees automatiquement au fur et a mesure de la saisie. + +## Copier et exporter + +### Copier la transcription + +Le bouton **Copier** dans la barre d'outils copie la transcription complete en texte brut dans le presse-papier, en conservant la structure des paragraphes. + +### Telecharger la transcription + +Le bouton **Telecharger** offre des options d'exportation flexibles grace a des modeles personnalisables. Selectionnez parmi vos modeles de transcription enregistres ou exportez la transcription brute. Les modeles vous permettent de controler le formatage : horodatages pour les sous-titres, format centre sur les locuteurs pour les entrevues, etc. + +Si l'identification des locuteurs est activee, le texte exporte inclut les noms des locuteurs (generiques ou reels si vous les avez identifies). + +--- + +Suivant : [Recherche IA](recherche-ia.md) diff --git a/client_docs/index.md b/client_docs/index.md new file mode 100644 index 0000000..3cb7907 --- /dev/null +++ b/client_docs/index.md @@ -0,0 +1,48 @@ +# Bienvenue sur DictIA + +DictIA est une plateforme de transcription intelligente propulsée par l'intelligence artificielle, développée par **InnovA AI**. Elle transforme vos enregistrements audio en contenu structuré, consultable et exploitable : transcriptions, résumés automatiques, identification des locuteurs et recherche sémantique. + +--- + +## Sections de la documentation + +
+
+

Guide Utilisateur

+

Apprenez à enregistrer, transcrire et organiser vos contenus audio avec DictIA.

+ Consulter le guide utilisateur +
+ +
+

Guide Administrateur

+

Configurez les utilisateurs, les groupes, les modèles IA et les paramètres système de votre instance DictIA.

+ Consulter le guide administrateur +
+ +
+

Dépannage

+

Résolvez les problèmes courants liés à la transcription, à la performance et aux fonctionnalités.

+ Consulter le dépannage +
+
+ +--- + +## Fonctionnalités principales + +- **Transcription IA** : Convertissez vos enregistrements audio en texte avec une précision élevée, dans plusieurs langues. +- **Résumés automatiques** : Obtenez un résumé structuré de chaque enregistrement, avec les points clés et les actions à suivre. +- **Identification des locuteurs** : Distinguez automatiquement les différents intervenants dans un enregistrement. +- **Recherche IA** : Posez des questions en langage naturel pour retrouver l'information à travers tous vos enregistrements. +- **Conversation IA** : Interagissez avec vos transcriptions pour extraire des informations, générer des rapports ou poser des questions. +- **Organisation flexible** : Classez vos enregistrements avec des étiquettes, des dossiers et des groupes. +- **Partage sécurisé** : Partagez des enregistrements avec vos collègues ou via des liens externes sécurisés. +- **Application mobile** : Accédez à DictIA depuis votre appareil mobile grâce à l'application web progressive. + +--- + +## Besoin d'aide? + +Si vous rencontrez un problème ou avez une question, consultez la section [Dépannage](depannage/index.md) ou contactez le support InnovA AI. + +**Support InnovA AI** : Pour toute question technique ou demande d'assistance, contactez l'équipe InnovA AI via les canaux de support mis à votre disposition par votre administrateur. diff --git a/config/docker-compose.example.yml b/config/docker-compose.example.yml new file mode 100644 index 0000000..385b6a7 --- /dev/null +++ b/config/docker-compose.example.yml @@ -0,0 +1,65 @@ +services: + app: + # Use 'lite' tag for a smaller image (~700MB vs ~4.4GB) without PyTorch + # Semantic search in Inquire Mode falls back to text search; all other features work normally + image: dictia:latest + container_name: dictia + restart: unless-stopped + ports: + - "8899:8899" + + # --- Configuration --- + # Environment variables are loaded from the .env file. + # + # To get started: + # 1. Copy this file to your project root: + # cp config/docker-compose.example.yml docker-compose.yml + # + # 2. Copy the unified transcription config (RECOMMENDED): + # cp config/env.transcription.example .env + # + # This supports all providers with auto-detection: + # - OpenAI GPT-4o with diarization (set TRANSCRIPTION_MODEL=gpt-4o-transcribe-diarize) + # - Self-hosted ASR/WhisperX (set ASR_BASE_URL=http://your-asr:9000) + # - Legacy Whisper (set TRANSCRIPTION_MODEL=whisper-1) + # + # Legacy config files (still supported): + # - config/env.whisper.example - Standard Whisper API + # - config/env.whisperx.example - WhisperX with voice profiles + # - config/env.asr.example - Basic ASR with diarization + # + # 3. Edit the .env file to add your API keys: + # - TRANSCRIPTION_API_KEY (for OpenAI) or ASR_BASE_URL (for self-hosted) + # - TEXT_MODEL_API_KEY (REQUIRED for summaries, titles, and chat) + # + # 4. Start DictIA: + # docker compose up -d + env_file: + - .env + + environment: + # Set log level for troubleshooting + # Use ERROR for production (minimal logs) + # Use INFO for debugging issues (recommended when troubleshooting) + # Use DEBUG for detailed development logging + - LOG_LEVEL=ERROR + + # --- Volume Configuration --- + # Choose ONE of the following volume configurations. + # Option 1 (Recommended): Bind mounts to local folders. + volumes: + - ./uploads:/data/uploads + - ./instance:/data/instance + # Optional: Uncomment if using auto-export feature (ENABLE_AUTO_EXPORT=true) + # - ./exports:/data/exports + # Optional: Uncomment if using auto-processing feature (ENABLE_AUTO_PROCESSING=true) + # - ./auto-process:/data/auto-process + + # Option 2: Docker-managed volumes. + # volumes: + # - dictia-uploads:/data/uploads + # - dictia-instance:/data/instance + # # Optional: Uncomment if using auto-export feature + # # - dictia-exports:/data/exports + # # Optional: Uncomment if using auto-processing feature + # # - dictia-auto-process:/data/auto-process diff --git a/config/env.asr.example b/config/env.asr.example new file mode 100644 index 0000000..b8cb8de --- /dev/null +++ b/config/env.asr.example @@ -0,0 +1,259 @@ +# ----------------------------------------------------------------------------- +# DictIA Configuration: ASR Endpoint (Legacy) +# +# ⚠️ DEPRECATION NOTICE: This configuration style is still supported but +# we recommend using the new unified configuration in env.transcription.example +# which supports all transcription providers with auto-detection. +# +# Migration: Simply set ASR_BASE_URL and the connector will auto-detect ASR mode. +# USE_ASR_ENDPOINT=true is no longer required (but still works for backwards compat). +# +# Instructions: +# 1. Copy this file to a new file named .env +# cp env.asr.example .env +# 2. Fill in the required URLs, API keys, and settings below. +# ----------------------------------------------------------------------------- + +# --- Text Generation Model (for summaries, titles, etc.) --- +TEXT_MODEL_BASE_URL=https://openrouter.ai/api/v1 +TEXT_MODEL_API_KEY=your_openrouter_api_key +TEXT_MODEL_NAME=openai/gpt-4o-mini + +# --- GPT-5 Specific Settings (only used with OpenAI API and GPT-5 models) --- +# If using GPT-5 models (gpt-5, gpt-5-mini, gpt-5-nano, gpt-5-chat-latest) with OpenAI API, +# these parameters will be used instead of temperature. +# +# Example GPT-5 configuration: +# TEXT_MODEL_BASE_URL=https://api.openai.com/v1 +# TEXT_MODEL_NAME=gpt-5-mini +# +# Reasoning effort: minimal, low, medium, high (default: medium) +# - minimal: Fastest responses, minimal reasoning tokens +# - low: Fast responses with basic reasoning +# - medium: Balanced reasoning and speed (recommended) +# - high: Maximum reasoning for complex tasks +GPT5_REASONING_EFFORT=medium +# +# Verbosity: low, medium, high (default: medium) +# - low: Concise responses +# - medium: Balanced detail +# - high: Detailed explanations +GPT5_VERBOSITY=medium + +# --- Chat Model Configuration (Optional) --- +# Configure a separate model for real-time chat interactions. +# If not set, chat will use the TEXT_MODEL_* settings above. +# +# Use cases: +# - Use a faster model for chat while using a more capable model for summarization +# - Use a cheaper model for interactive chat to reduce costs +# - Use different service tiers for different operations +# +# CHAT_MODEL_API_KEY=your_chat_api_key +# CHAT_MODEL_BASE_URL=https://openrouter.ai/api/v1 +# CHAT_MODEL_NAME=openai/gpt-4o + +# --- Chat GPT-5 Settings (only used with OpenAI API and GPT-5 chat models) --- +# These settings allow independent control of GPT-5 parameters for chat. +# If not set, falls back to the main GPT5_* settings above. +# +# CHAT_GPT5_REASONING_EFFORT=medium +# CHAT_GPT5_VERBOSITY=medium + +# --- LLM Streaming Compatibility --- +# Some LLM servers (e.g., certain vLLM configurations) don't support OpenAI's +# stream_options parameter. If chat streaming hangs or fails, try disabling this. +# Note: When disabled, token usage tracking for chat will not be available. +# ENABLE_STREAM_OPTIONS=false + +# --- Transcription Service (ASR Endpoint) --- +# New connector architecture auto-detects ASR mode when ASR_BASE_URL is set. +# USE_ASR_ENDPOINT=true is deprecated but still works for backwards compatibility. +# +# Note: ASR endpoints handle chunking internally - CHUNK_LIMIT settings are ignored. + +# ASR Endpoint URL (setting this auto-enables ASR mode) +# For containers in same docker-compose: Use container name and internal port +# Example: http://whisper-asr:9000 (NOT the host port 6002 or external IP) +# For external ASR: Use http://192.168.1.100:9000 or http://asr.example.com:9000 +ASR_BASE_URL=http://whisper-asr:9000 + +# Deprecated: No longer needed, kept for backwards compatibility +# USE_ASR_ENDPOINT=true + +# Speaker diarization options +ASR_DIARIZE=true +# ASR_MIN_SPEAKERS=1 # Hint for minimum speakers +# ASR_MAX_SPEAKERS=5 # Hint for maximum speakers +# ASR_RETURN_SPEAKER_EMBEDDINGS=false # Only enable for WhisperX ASR service + +# --- ASR Chunking (for GPUs with limited memory) --- +# Self-hosted ASR services may crash on long files due to GPU memory exhaustion. +# Enable app-level chunking to split long files before sending to ASR. +# Default: false (ASR service handles files internally) +# ASR_ENABLE_CHUNKING=true + +# Maximum audio duration per chunk in seconds (default: 7200 = 2 hours) +# Lower this value if your GPU runs out of memory on long files. +# Common values: 600 (10 min), 1200 (20 min), 1800 (30 min), 3600 (1 hour) +# ASR_MAX_DURATION_SECONDS=7200 + +# --- Application Settings --- +# Set to "true" to allow user registration, "false" to disable +ALLOW_REGISTRATION=false +# Comma-separated list of allowed email domains for registration. +# Leave empty to allow all domains. Example: company.com,subsidiary.org +REGISTRATION_ALLOWED_DOMAINS= +SUMMARY_MAX_TOKENS=8000 +CHAT_MAX_TOKENS=5000 + +# Timezone for displaying dates and times in the UI +# Use a valid TZ database name (e.g., "America/New_York", "Europe/London", "UTC") +TIMEZONE="UTC" + +# Set the logging level for the application. +# Options: DEBUG, INFO, WARNING, ERROR +LOG_LEVEL="INFO" + +# --- Audio Compression --- +# Automatically compress lossless uploads (WAV, AIFF) to save storage +AUDIO_COMPRESS_UPLOADS=true + +# Target codec: mp3 (lossy, smallest), flac (lossless), opus (lossy, efficient) +AUDIO_CODEC=mp3 + +# Bitrate for lossy codecs (ignored for FLAC) +AUDIO_BITRATE=128k + +# Unsupported codecs - comma-separated list of codecs to exclude from supported list +# Use this if your transcription service doesn't support certain codecs +# Supported codecs by default: pcm_s16le, pcm_s24le, pcm_f32le, mp3, flac, opus, vorbis, aac +# Example: AUDIO_UNSUPPORTED_CODECS=opus,vorbis +# AUDIO_UNSUPPORTED_CODECS= + +# --- Admin User (created on first run) --- +ADMIN_USERNAME=admin +ADMIN_EMAIL=admin@example.com +ADMIN_PASSWORD=changeme + +# --- Inquire Mode (AI search across all recordings) --- +# Set to "true" to enable semantic search and chat across all recordings +# Requires additional dependencies (already included in Docker image) +ENABLE_INQUIRE_MODE=false + +# --- Automated File Processing (Black Hole Directory) --- +# Set to "true" to enable automated file processing +ENABLE_AUTO_PROCESSING=false + +# --- Automated Export Settings --- +# Automatically export transcriptions and summaries to markdown files +ENABLE_AUTO_EXPORT=false + +# Directory where exports will be saved (per-user subdirectories created automatically) +AUTO_EXPORT_DIR=/data/exports + +# What to include in exports +AUTO_EXPORT_TRANSCRIPTION=true +AUTO_EXPORT_SUMMARY=true + +# Processing mode: admin_only, user_directories, or single_user +AUTO_PROCESS_MODE=admin_only + +# Directory to watch for new audio files +AUTO_PROCESS_WATCH_DIR=/data/auto-process + +# How often to check for new files (seconds) +AUTO_PROCESS_CHECK_INTERVAL=30 + +# How long to wait (seconds) to confirm a file has stopped changing before processing. +# Increase for slow network transfers (NFS, SMB). Default: 5 +# AUTO_PROCESS_STABILITY_TIME=5 + +# Default username for single_user mode (only used if AUTO_PROCESS_MODE=single_user) +# AUTO_PROCESS_DEFAULT_USERNAME=admin + +# --- Auto-Deletion & Retention Settings --- +# Enable automated deletion of old recordings +ENABLE_AUTO_DELETION=false + +# Number of days to retain recordings (0 = disabled) +# Example: 90 means recordings older than 90 days will be processed +GLOBAL_RETENTION_DAYS=90 + +# Deletion mode: 'audio_only' keeps transcription, 'full_recording' deletes everything +# audio_only: Deletes audio file but keeps transcription/summary/notes (recommended) +# full_recording: Permanently deletes the entire recording from database +DELETION_MODE=audio_only + +# --- Permission-Based Deletion Controls --- +# Allow all users to delete their recordings, or restrict to admins only +# true: All users can delete their own recordings (default) +# false: Only admins can delete recordings +USERS_CAN_DELETE=true + +# Delete speaker profiles when all their recordings are removed. +# Default: false (speaker profiles and voice embeddings are preserved) +# Set to true for privacy-sensitive deployments where biometric voice data +# should not outlive the recordings it was derived from. +# DELETE_ORPHANED_SPEAKERS=false + +# --- Internal Sharing Settings --- +# Enable user-to-user sharing of recordings (works independently of groups) +ENABLE_INTERNAL_SHARING=false + +# Show usernames in the UI (when sharing/viewing shared recordings) +# true: Display usernames throughout the interface +# false: Hide usernames (users must know each other's usernames to share) +SHOW_USERNAMES_IN_UI=false + +# --- Public Sharing Settings --- +# Enable creation of public share links (anonymous access) +# true: Users can create public links to share recordings externally (default) +# false: Public sharing is disabled globally +ENABLE_PUBLIC_SHARING=true + +# Note: Admins can control public sharing permissions per-user in the admin dashboard +# even when ENABLE_PUBLIC_SHARING is true + +# --- Incognito Mode (HIPAA-friendly) --- +# Enable incognito mode for privacy-sensitive transcriptions +# When enabled, users can upload recordings that are: +# - Processed on the server but NOT saved to the database +# - Stored only in the browser's sessionStorage (lost when tab closes) +# - Audio files are immediately deleted after processing +# Useful for HIPAA compliance or sensitive recordings +# Default: false (feature hidden) +ENABLE_INCOGNITO_MODE=false + +# Make incognito mode the default for in-app recordings (toggle starts ON) +INCOGNITO_MODE_DEFAULT=false + +# --- Video Retention --- +# When enabled, uploaded video files keep their video stream for in-browser playback +# The audio is extracted to a temp file for transcription, then cleaned up +# Default: false (video uploads extract audio only, video stream is discarded) +VIDEO_RETENTION=false + +# --- Concurrent Uploads --- +# Maximum number of simultaneous file uploads (default: 3) +MAX_CONCURRENT_UPLOADS=3 + +# --- Background Processing Queues --- +# Separate queues for transcription (slow) and summary (fast) jobs +# This prevents slow ASR jobs from blocking quick summary generation + +# Transcription queue workers (for ASR processing, default: 2) +JOB_QUEUE_WORKERS=2 + +# Summary queue workers (for LLM summarization, default: 2) +SUMMARY_QUEUE_WORKERS=2 + +# Maximum retry attempts for failed jobs (default: 3) +JOB_MAX_RETRIES=3 + +# --- Docker Settings (rarely need to be changed) --- +# Database URI - SQLite (default) or PostgreSQL +SQLALCHEMY_DATABASE_URI=sqlite:////data/instance/transcriptions.db +# For PostgreSQL, use: postgresql://username:password@hostname:5432/database_name +# Example: postgresql://speakr:password@postgres:5432/speakr +UPLOAD_FOLDER=/data/uploads diff --git a/config/env.email.example b/config/env.email.example new file mode 100644 index 0000000..80590f7 --- /dev/null +++ b/config/env.email.example @@ -0,0 +1,109 @@ +############################################################################### +# Email Verification & Password Reset Configuration +############################################################################### + +# Enable email verification for new user registrations. +# When enabled, new users must verify their email before full access. +# Default: false +ENABLE_EMAIL_VERIFICATION=false + +# Require email verification to log in. +# Only effective when ENABLE_EMAIL_VERIFICATION=true. +# When true, users cannot log in until they verify their email. +# Default: false +REQUIRE_EMAIL_VERIFICATION=false + +############################################################################### +# SMTP Configuration +############################################################################### + +# SMTP server hostname (required for email functionality) +# Examples: smtp.gmail.com, smtp.sendgrid.net, smtp.mailgun.org +SMTP_HOST=smtp.gmail.com + +# SMTP server port +# Common ports: 587 (TLS/STARTTLS), 465 (SSL), 25 (unencrypted) +# Default: 587 +SMTP_PORT=587 + +# SMTP authentication username (usually your email address) +SMTP_USERNAME=your-email@gmail.com + +# SMTP authentication password +# For Gmail: Use an App Password (not your regular password) +# https://support.google.com/accounts/answer/185833 +SMTP_PASSWORD=your-app-password + +# Use TLS/STARTTLS encryption (recommended for port 587) +# Default: true +SMTP_USE_TLS=true + +# Use SSL encryption (for port 465) +# Note: Only enable one of SMTP_USE_TLS or SMTP_USE_SSL +# Default: false +SMTP_USE_SSL=false + +# Email address that appears in the "From" field +# Should be a valid email address, ideally matching your domain +SMTP_FROM_ADDRESS=noreply@yourdomain.com + +# Display name that appears alongside the from address +# Default: Speakr +SMTP_FROM_NAME=Speakr + +############################################################################### +# Provider-Specific Examples +############################################################################### + +# --- Gmail --- +# SMTP_HOST=smtp.gmail.com +# SMTP_PORT=587 +# SMTP_USE_TLS=true +# SMTP_USERNAME=your-email@gmail.com +# SMTP_PASSWORD=your-app-password # Generate at https://myaccount.google.com/apppasswords + +# --- SendGrid --- +# SMTP_HOST=smtp.sendgrid.net +# SMTP_PORT=587 +# SMTP_USE_TLS=true +# SMTP_USERNAME=apikey +# SMTP_PASSWORD=your-sendgrid-api-key + +# --- Mailgun --- +# SMTP_HOST=smtp.mailgun.org +# SMTP_PORT=587 +# SMTP_USE_TLS=true +# SMTP_USERNAME=postmaster@your-domain.mailgun.org +# SMTP_PASSWORD=your-mailgun-password + +# --- Amazon SES --- +# SMTP_HOST=email-smtp.us-east-1.amazonaws.com +# SMTP_PORT=587 +# SMTP_USE_TLS=true +# SMTP_USERNAME=your-ses-smtp-username +# SMTP_PASSWORD=your-ses-smtp-password + +# --- Microsoft 365 / Outlook --- +# SMTP_HOST=smtp.office365.com +# SMTP_PORT=587 +# SMTP_USE_TLS=true +# SMTP_USERNAME=your-email@yourdomain.com +# SMTP_PASSWORD=your-password + +############################################################################### +# Notes +############################################################################### + +# Token Expiry Times: +# - Email verification links expire after 24 hours +# - Password reset links expire after 1 hour + +# Migration Behavior: +# - Existing users are automatically marked as email_verified=true +# - New users (when feature is enabled) start as email_verified=false + +# Security Recommendations: +# - Always use TLS or SSL encryption +# - Use app-specific passwords when available (Gmail, etc.) +# - Consider using a dedicated email service (SendGrid, Mailgun, SES) +# - Set a strong SECRET_KEY in your Flask configuration diff --git a/config/env.sso.example b/config/env.sso.example new file mode 100644 index 0000000..418c9d6 --- /dev/null +++ b/config/env.sso.example @@ -0,0 +1,32 @@ +############################################################################### +# SSO (OIDC) Authentication +############################################################################### + +# Enable SSO (Single Sign-On) authentication. Requires discovery URL and client credentials. +ENABLE_SSO=false + +# Display name for the provider (shown in UI button) +SSO_PROVIDER_NAME=Keycloak + +# OIDC client credentials +SSO_CLIENT_ID=speakr +SSO_CLIENT_SECRET=change-me + +# OIDC discovery document URL (well-known endpoint) +SSO_DISCOVERY_URL=https://keycloak.example.com/realms/master/.well-known/openid-configuration + +# Public redirect URI exposed by Speakr (must be registered in the IdP) +SSO_REDIRECT_URI=https://speakr.example.com/auth/sso/callback + +# Auto-registration settings +# Allow automatic account creation for new users signing in via SSO. +SSO_AUTO_REGISTER=true + +# Comma-separated list of allowed email domains for auto-registration. +# Leave empty to allow all domains (e.g., example.com,company.org). +SSO_ALLOWED_DOMAINS= + +# Claims used to map user profile fields +SSO_DEFAULT_USERNAME_CLAIM=preferred_username +SSO_DEFAULT_NAME_CLAIM=name + diff --git a/config/env.transcription.example b/config/env.transcription.example new file mode 100644 index 0000000..fc16712 --- /dev/null +++ b/config/env.transcription.example @@ -0,0 +1,289 @@ +# ============================================================================= +# Transcription Connector Configuration +# ============================================================================= +# +# DictIA supports multiple transcription providers through a connector-based +# architecture. This file documents all available configuration options. +# +# Quick Start (Simplified): +# 1. For OpenAI with diarization: Set TRANSCRIPTION_MODEL=gpt-4o-transcribe-diarize +# 2. For self-hosted ASR: Set ASR_BASE_URL=http://your-asr:9000 +# 3. For legacy Whisper: Set TRANSCRIPTION_API_KEY and optionally TRANSCRIPTION_MODEL +# +# Auto-Detection Priority: +# 1. TRANSCRIPTION_CONNECTOR - explicit connector name (if you need full control) +# 2. ASR_BASE_URL - if set, uses ASR endpoint connector +# 3. TRANSCRIPTION_MODEL contains 'gpt-4o' - uses OpenAI Transcribe connector +# 4. Default - uses OpenAI Whisper connector with TRANSCRIPTION_MODEL or whisper-1 + +# ============================================================================= +# TEXT GENERATION MODEL (REQUIRED for summaries, titles, chat) +# ============================================================================= +# DictIA uses a text/LLM model for generating summaries, titles, and chat. +# This is separate from the transcription model (STT). +# +# You can use OpenRouter (recommended - access to many models) or direct OpenAI API. + +# OpenRouter example (recommended - supports many models): +TEXT_MODEL_BASE_URL=https://openrouter.ai/api/v1 +TEXT_MODEL_API_KEY=your_openrouter_api_key +TEXT_MODEL_NAME=openai/gpt-4o-mini + +# OpenAI direct example: +# TEXT_MODEL_BASE_URL=https://api.openai.com/v1 +# TEXT_MODEL_API_KEY=sk-your_openai_api_key +# TEXT_MODEL_NAME=gpt-4o-mini + +# --- GPT-5 Specific Settings (only used with OpenAI API and GPT-5 models) --- +# Reasoning effort: minimal, low, medium, high (default: medium) +GPT5_REASONING_EFFORT=medium +# Verbosity: low, medium, high (default: medium) +GPT5_VERBOSITY=medium + +# --- Chat Model Configuration (Optional) --- +# Configure a separate model for real-time chat interactions. +# If not set, chat will use the TEXT_MODEL_* settings above. +# CHAT_MODEL_API_KEY=your_chat_api_key +# CHAT_MODEL_BASE_URL=https://openrouter.ai/api/v1 +# CHAT_MODEL_NAME=openai/gpt-4o + +# ============================================================================= +# CONNECTOR SELECTION (Auto-detected if not set) +# ============================================================================= +# Options: openai_whisper, openai_transcribe, asr_endpoint +# Leave empty to auto-detect based on other settings +# TRANSCRIPTION_CONNECTOR= + +# Feature flag to enable/disable new connector architecture (default: true) +# Set to false to use legacy code path for troubleshooting +# USE_NEW_TRANSCRIPTION_ARCHITECTURE=true + +# ============================================================================= +# OPENAI CONFIGURATION (Required for openai_whisper and openai_transcribe) +# ============================================================================= +TRANSCRIPTION_API_KEY=your_openai_api_key +TRANSCRIPTION_BASE_URL=https://api.openai.com/v1 + +# Model Selection - determines which connector is used: +# +# whisper-1 - Legacy Whisper model, no diarization, $0.006/min +# Supports: srt, vtt, json, verbose_json output formats +# +# gpt-4o-transcribe - High quality transcription, no diarization, $0.006/min +# Better accuracy than whisper-1, accepts prompts +# +# gpt-4o-mini-transcribe - Cost-effective option, no diarization, $0.003/min +# Good for high-volume, budget-conscious use +# +# gpt-4o-transcribe-diarize - Speaker diarization!, $0.006/min +# Identifies speakers as A, B, C, D... +# Requires chunking_strategy for audio >30s +# +TRANSCRIPTION_MODEL=gpt-4o-transcribe-diarize + +# Legacy Whisper model name (used when TRANSCRIPTION_MODEL is not set) +# WHISPER_MODEL=whisper-1 + +# ============================================================================= +# ASR ENDPOINT CONFIGURATION (For self-hosted whisper services) +# ============================================================================= +# Note: USE_ASR_ENDPOINT is deprecated. Just set ASR_BASE_URL instead. +# The connector will auto-detect ASR mode when ASR_BASE_URL is set. +# USE_ASR_ENDPOINT=true # Deprecated - kept for backwards compatibility + +# Base URL of your ASR service (required if USE_ASR_ENDPOINT=true) +# Supports: whisper-asr-webservice, WhisperX, and compatible services +# ASR_BASE_URL=http://whisper-asr:9000 + +# Request timeout in seconds (default: 1800 = 30 minutes) +# Increase for very long audio files +# ASR_TIMEOUT=1800 + +# Enable speaker diarization (default: true) +# ASR_DIARIZE=true + +# Speaker count hints (optional, helps with diarization accuracy) +# ASR_MIN_SPEAKERS=1 +# ASR_MAX_SPEAKERS=5 + +# Return speaker embeddings for speaker identification (WhisperX only) +# Enables automatic speaker matching across recordings +# ASR_RETURN_SPEAKER_EMBEDDINGS=false + +# ============================================================================= +# CHUNKING CONFIGURATION (For large files) +# ============================================================================= +# Chunking is now connector-aware with this priority: +# 1. Connector handles internally (openai_transcribe, asr_endpoint) → No app chunking +# 2. ENABLE_CHUNKING=false → Disable chunking (only affects openai_whisper) +# 3. CHUNK_LIMIT set → Use your settings +# 4. Connector defaults → Use connector's recommended limits +# 5. App default → 20MB size-based +# +# For openai_transcribe/asr_endpoint: These settings are IGNORED (connector handles it) +# For openai_whisper: These settings control chunking behavior + +# ENABLE_CHUNKING=false # Uncomment to disable chunking for openai_whisper + +# Chunk limit - supports size (20MB) or duration (600s, 10m) +CHUNK_LIMIT=20MB + +# Overlap between chunks in seconds (helps with transcription accuracy at boundaries) +CHUNK_OVERLAP_SECONDS=3 + +# ============================================================================= +# EXAMPLE CONFIGURATIONS (Simplified) +# ============================================================================= +# +# --- OpenAI with Speaker Diarization (Recommended) --- +# Just two environment variables needed: +# TRANSCRIPTION_API_KEY=sk-xxx +# TRANSCRIPTION_MODEL=gpt-4o-transcribe-diarize +# +# --- Self-hosted WhisperX (Best for privacy) --- +# Just one environment variable needed (auto-detects ASR mode): +# ASR_BASE_URL=http://whisper-asr:9000 +# Optional: +# ASR_DIARIZE=true +# ASR_RETURN_SPEAKER_EMBEDDINGS=true +# +# --- OpenAI Whisper (Legacy, no diarization) --- +# TRANSCRIPTION_API_KEY=sk-xxx +# TRANSCRIPTION_MODEL=whisper-1 +# +# --- Custom Whisper model (local or compatible endpoint) --- +# TRANSCRIPTION_API_KEY=not-needed +# TRANSCRIPTION_BASE_URL=http://localhost:8080/v1 +# TRANSCRIPTION_MODEL=Systran/faster-distil-whisper-large-v3 + +# ============================================================================= +# APPLICATION SETTINGS +# ============================================================================= + +# --- Admin User (created on first run) --- +ADMIN_USERNAME=admin +ADMIN_EMAIL=admin@example.com +ADMIN_PASSWORD=changeme + +# --- Registration & Access --- +ALLOW_REGISTRATION=false +# Comma-separated list of allowed email domains for registration. +# Leave empty to allow all domains. Example: company.com,subsidiary.org +REGISTRATION_ALLOWED_DOMAINS= + +# --- Token Limits --- +SUMMARY_MAX_TOKENS=8000 +CHAT_MAX_TOKENS=5000 + +# --- Timezone --- +# Use a valid TZ database name (e.g., "America/New_York", "Europe/London", "UTC") +TIMEZONE="UTC" + +# --- Logging --- +LOG_LEVEL="INFO" + +# ============================================================================= +# AUDIO PROCESSING +# ============================================================================= + +# --- Audio Compression --- +# Automatically compress lossless uploads (WAV, AIFF) to save storage +AUDIO_COMPRESS_UPLOADS=true + +# Target codec: mp3 (lossy, smallest), flac (lossless), opus (lossy, efficient) +AUDIO_CODEC=mp3 + +# Bitrate for lossy codecs (ignored for FLAC) +AUDIO_BITRATE=128k + +# Unsupported codecs - comma-separated list of codecs to exclude +# Example: AUDIO_UNSUPPORTED_CODECS=opus,vorbis +# AUDIO_UNSUPPORTED_CODECS= + +# ============================================================================= +# OPTIONAL FEATURES +# ============================================================================= + +# --- Inquire Mode (AI search across all recordings) --- +ENABLE_INQUIRE_MODE=false + +# --- Automated File Processing (Black Hole Directory) --- +ENABLE_AUTO_PROCESSING=false +# AUTO_PROCESS_MODE=admin_only +# AUTO_PROCESS_WATCH_DIR=/data/auto-process + +# --- Automated Export --- +ENABLE_AUTO_EXPORT=false +# AUTO_EXPORT_DIR=/data/exports + +# --- Auto-Deletion & Retention --- +ENABLE_AUTO_DELETION=false +# GLOBAL_RETENTION_DAYS=90 +# DELETION_MODE=audio_only + +# --- Sharing Settings --- +ENABLE_INTERNAL_SHARING=false +ENABLE_PUBLIC_SHARING=true +# SHOW_USERNAMES_IN_UI=false + +# --- Permission Controls --- +USERS_CAN_DELETE=true + +# Delete speaker profiles when all their recordings are removed. +# Default: false (speaker profiles and voice embeddings are preserved) +# Set to true for privacy-sensitive deployments where biometric voice data +# should not outlive the recordings it was derived from. +# DELETE_ORPHANED_SPEAKERS=false + +# --- Video Retention --- +# When enabled, uploaded video files keep their video stream for in-browser playback +# The audio is extracted to a temp file for transcription, then cleaned up +# Default: false (video uploads extract audio only, video stream is discarded) +VIDEO_RETENTION=false + +# --- Video Passthrough to ASR --- +# Send original video files directly to ASR without extracting audio. +# Useful for custom ASR backends that handle video internally (e.g., multi-track audio extraction). +# When enabled, video files bypass audio extraction, codec conversion, and chunking. +# Only affects video files — audio uploads are processed normally. +# Default: false +# VIDEO_PASSTHROUGH_ASR=false + +# --- Concurrent Uploads --- +# Maximum number of simultaneous file uploads (default: 3) +MAX_CONCURRENT_UPLOADS=3 + +# ============================================================================= +# BACKGROUND PROCESSING +# ============================================================================= + +# Transcription queue workers (default: 2) +JOB_QUEUE_WORKERS=2 + +# Summary queue workers (default: 2) +SUMMARY_QUEUE_WORKERS=2 + +# Maximum retry attempts for failed jobs (default: 3) +JOB_MAX_RETRIES=3 + +# ============================================================================= +# DOCKER/DATABASE SETTINGS +# ============================================================================= + +# Database URI - SQLite (default) or PostgreSQL +SQLALCHEMY_DATABASE_URI=sqlite:////data/instance/transcriptions.db +# For PostgreSQL: postgresql://username:password@hostname:5432/database_name + +UPLOAD_FOLDER=/data/uploads + +# ============================================================================= +# FUTURE: Additional Provider Notes +# ============================================================================= +# The connector architecture is designed to support additional providers. +# Future connectors may include: +# +# - Deepgram: Known for excellent diarization and real-time transcription +# - AssemblyAI: Strong diarization with speaker labels +# - Google Cloud Speech-to-Text: Enterprise-grade with speaker diarization +# +# To request a new connector, please open an issue on GitHub. diff --git a/config/env.whisper.example b/config/env.whisper.example new file mode 100644 index 0000000..1640040 --- /dev/null +++ b/config/env.whisper.example @@ -0,0 +1,256 @@ +# ----------------------------------------------------------------------------- +# DictIA Configuration: Standard Whisper API (Legacy) +# +# ⚠️ DEPRECATION NOTICE: This configuration style is still supported but +# we recommend using the new unified configuration in env.transcription.example +# which supports all transcription providers with auto-detection. +# +# Migration: See TRANSCRIPTION_CONNECTOR documentation in env.transcription.example +# For OpenAI Whisper, simply set: +# TRANSCRIPTION_API_KEY=your_key +# TRANSCRIPTION_MODEL=whisper-1 (or gpt-4o-transcribe-diarize for diarization) +# +# Instructions: +# 1. Copy this file to a new file named .env +# cp env.whisper.example .env +# 2. Fill in the required API keys and settings below. +# ----------------------------------------------------------------------------- + +# --- Text Generation Model (for summaries, titles, etc.) --- +TEXT_MODEL_BASE_URL=https://openrouter.ai/api/v1 +TEXT_MODEL_API_KEY=your_openrouter_api_key +TEXT_MODEL_NAME=openai/gpt-4o-mini + +# --- GPT-5 Specific Settings (only used with OpenAI API and GPT-5 models) --- +# If using GPT-5 models (gpt-5, gpt-5-mini, gpt-5-nano, gpt-5-chat-latest) with OpenAI API, +# these parameters will be used instead of temperature. +# +# Example GPT-5 configuration: +# TEXT_MODEL_BASE_URL=https://api.openai.com/v1 +# TEXT_MODEL_NAME=gpt-5-mini +# +# Reasoning effort: minimal, low, medium, high (default: medium) +# - minimal: Fastest responses, minimal reasoning tokens +# - low: Fast responses with basic reasoning +# - medium: Balanced reasoning and speed (recommended) +# - high: Maximum reasoning for complex tasks +GPT5_REASONING_EFFORT=medium +# +# Verbosity: low, medium, high (default: medium) +# - low: Concise responses +# - medium: Balanced detail +# - high: Detailed explanations +GPT5_VERBOSITY=medium + +# --- Chat Model Configuration (Optional) --- +# Configure a separate model for real-time chat interactions. +# If not set, chat will use the TEXT_MODEL_* settings above. +# +# Use cases: +# - Use a faster model for chat while using a more capable model for summarization +# - Use a cheaper model for interactive chat to reduce costs +# - Use different service tiers for different operations +# +# CHAT_MODEL_API_KEY=your_chat_api_key +# CHAT_MODEL_BASE_URL=https://openrouter.ai/api/v1 +# CHAT_MODEL_NAME=openai/gpt-4o + +# --- Chat GPT-5 Settings (only used with OpenAI API and GPT-5 chat models) --- +# These settings allow independent control of GPT-5 parameters for chat. +# If not set, falls back to the main GPT5_* settings above. +# +# CHAT_GPT5_REASONING_EFFORT=medium +# CHAT_GPT5_VERBOSITY=medium + +# --- LLM Streaming Compatibility --- +# Some LLM servers (e.g., certain vLLM configurations) don't support OpenAI's +# stream_options parameter. If chat streaming hangs or fails, try disabling this. +# Note: When disabled, token usage tracking for chat will not be available. +# ENABLE_STREAM_OPTIONS=false + +# --- Transcription Service (OpenAI Whisper API) --- +# New connector architecture is enabled by default. +# Available models: +# whisper-1 - Legacy, no diarization +# gpt-4o-transcribe - High quality, no diarization +# gpt-4o-mini-transcribe - Cost-effective, no diarization +# gpt-4o-transcribe-diarize - Speaker diarization! (recommended) +TRANSCRIPTION_BASE_URL=https://api.openai.com/v1 +TRANSCRIPTION_API_KEY=your_openai_api_key +TRANSCRIPTION_MODEL=whisper-1 + +# Legacy model name (deprecated, use TRANSCRIPTION_MODEL instead) +# WHISPER_MODEL=whisper-1 + +# --- Application Settings --- +# Set to "true" to allow user registration, "false" to disable +ALLOW_REGISTRATION=false +# Comma-separated list of allowed email domains for registration. +# Leave empty to allow all domains. Example: company.com,subsidiary.org +REGISTRATION_ALLOWED_DOMAINS= +SUMMARY_MAX_TOKENS=8000 +CHAT_MAX_TOKENS=5000 + +# Timezone for displaying dates and times in the UI +# Use a valid TZ database name (e.g., "America/New_York", "Europe/London", "UTC") +TIMEZONE="UTC" + +# Set the logging level for the application. +# Options: DEBUG, INFO, WARNING, ERROR +LOG_LEVEL="INFO" + +# --- Large File Chunking --- +# Chunking is now connector-aware: +# - openai_transcribe/asr_endpoint: Handled internally, these settings ignored +# - openai_whisper: Uses these settings for files >25MB +# +# ENABLE_CHUNKING=false # Uncomment to disable (only for openai_whisper) + +# Chunk limit - supports size (20MB) or duration (600s, 10m) +CHUNK_LIMIT=20MB + +# Overlap between chunks (seconds) +CHUNK_OVERLAP_SECONDS=3 + +# --- Audio Compression --- +# Automatically compress lossless uploads (WAV, AIFF) to save storage +AUDIO_COMPRESS_UPLOADS=true + +# Target codec: mp3 (lossy, smallest), flac (lossless), opus (lossy, efficient) +AUDIO_CODEC=mp3 + +# Bitrate for lossy codecs (ignored for FLAC) +AUDIO_BITRATE=128k + +# Unsupported codecs - comma-separated list of codecs to exclude from supported list +# Use this if your transcription service doesn't support certain codecs +# Supported codecs by default: pcm_s16le, pcm_s24le, pcm_f32le, mp3, flac, opus, vorbis, aac +# Example: AUDIO_UNSUPPORTED_CODECS=opus,vorbis +# AUDIO_UNSUPPORTED_CODECS= + +# --- Admin User (created on first run) --- +ADMIN_USERNAME=admin +ADMIN_EMAIL=admin@example.com +ADMIN_PASSWORD=changeme + +# --- Inquire Mode (AI search across all recordings) --- +# Set to "true" to enable semantic search and chat across all recordings +# Requires additional dependencies (already included in Docker image) +ENABLE_INQUIRE_MODE=false + +# --- Automated File Processing (Black Hole Directory) --- +# Set to "true" to enable automated file processing +ENABLE_AUTO_PROCESSING=false + +# --- Automated Export Settings --- +# Automatically export transcriptions and summaries to markdown files +ENABLE_AUTO_EXPORT=false + +# Directory where exports will be saved (per-user subdirectories created automatically) +AUTO_EXPORT_DIR=/data/exports + +# What to include in exports +AUTO_EXPORT_TRANSCRIPTION=true +AUTO_EXPORT_SUMMARY=true + +# Processing mode: admin_only, user_directories, or single_user +AUTO_PROCESS_MODE=admin_only + +# Directory to watch for new audio files +AUTO_PROCESS_WATCH_DIR=/data/auto-process + +# How often to check for new files (seconds) +AUTO_PROCESS_CHECK_INTERVAL=30 + +# How long to wait (seconds) to confirm a file has stopped changing before processing. +# Increase for slow network transfers (NFS, SMB). Default: 5 +# AUTO_PROCESS_STABILITY_TIME=5 + +# Default username for single_user mode (only used if AUTO_PROCESS_MODE=single_user) +# AUTO_PROCESS_DEFAULT_USERNAME=admin + +# --- Auto-Deletion & Retention Settings --- +# Enable automated deletion of old recordings +ENABLE_AUTO_DELETION=false + +# Number of days to retain recordings (0 = disabled) +# Example: 90 means recordings older than 90 days will be processed +GLOBAL_RETENTION_DAYS=90 + +# Deletion mode: 'audio_only' keeps transcription, 'full_recording' deletes everything +# audio_only: Deletes audio file but keeps transcription/summary/notes (recommended) +# full_recording: Permanently deletes the entire recording from database +DELETION_MODE=audio_only + +# --- Permission-Based Deletion Controls --- +# Allow all users to delete their recordings, or restrict to admins only +# true: All users can delete their own recordings (default) +# false: Only admins can delete recordings +USERS_CAN_DELETE=true + +# Delete speaker profiles when all their recordings are removed. +# Default: false (speaker profiles and voice embeddings are preserved) +# Set to true for privacy-sensitive deployments where biometric voice data +# should not outlive the recordings it was derived from. +# DELETE_ORPHANED_SPEAKERS=false + +# --- Internal Sharing Settings --- +# Enable user-to-user sharing of recordings (works independently of groups) +ENABLE_INTERNAL_SHARING=false + +# Show usernames in the UI (when sharing/viewing shared recordings) +# true: Display usernames throughout the interface +# false: Hide usernames (users must know each other's usernames to share) +SHOW_USERNAMES_IN_UI=false + +# --- Public Sharing Settings --- +# Enable creation of public share links (anonymous access) +# true: Users can create public links to share recordings externally (default) +# false: Public sharing is disabled globally +ENABLE_PUBLIC_SHARING=true + +# Note: Admins can control public sharing permissions per-user in the admin dashboard +# even when ENABLE_PUBLIC_SHARING is true + +# --- Incognito Mode (HIPAA-friendly) --- +# Enable incognito mode for privacy-sensitive transcriptions +# When enabled, users can upload recordings that are: +# - Processed on the server but NOT saved to the database +# - Stored only in the browser's sessionStorage (lost when tab closes) +# - Audio files are immediately deleted after processing +# Useful for HIPAA compliance or sensitive recordings +# Default: false (feature hidden) +ENABLE_INCOGNITO_MODE=false + +# Make incognito mode the default for in-app recordings (toggle starts ON) +INCOGNITO_MODE_DEFAULT=false + +# --- Video Retention --- +# When enabled, uploaded video files keep their video stream for in-browser playback +# The audio is extracted to a temp file for transcription, then cleaned up +# Default: false (video uploads extract audio only, video stream is discarded) +VIDEO_RETENTION=false + +# --- Concurrent Uploads --- +# Maximum number of simultaneous file uploads (default: 3) +MAX_CONCURRENT_UPLOADS=3 + +# --- Background Processing Queues --- +# Separate queues for transcription (slow) and summary (fast) jobs +# This prevents slow ASR jobs from blocking quick summary generation + +# Transcription queue workers (for ASR processing, default: 2) +JOB_QUEUE_WORKERS=2 + +# Summary queue workers (for LLM summarization, default: 2) +SUMMARY_QUEUE_WORKERS=2 + +# Maximum retry attempts for failed jobs (default: 3) +JOB_MAX_RETRIES=3 + +# --- Docker Settings (rarely need to be changed) --- +# Database URI - SQLite (default) or PostgreSQL +SQLALCHEMY_DATABASE_URI=sqlite:////data/instance/transcriptions.db +# For PostgreSQL, use: postgresql://username:password@hostname:5432/database_name +# Example: postgresql://speakr:password@postgres:5432/speakr +UPLOAD_FOLDER=/data/uploads diff --git a/config/env.whisperx.example b/config/env.whisperx.example new file mode 100644 index 0000000..0a8fa75 --- /dev/null +++ b/config/env.whisperx.example @@ -0,0 +1,241 @@ +# ----------------------------------------------------------------------------- +# DictIA Configuration: WhisperX ASR Endpoint (with Voice Profiles) +# +# ⚠️ DEPRECATION NOTICE: This configuration style is still supported but +# we recommend using the new unified configuration in env.transcription.example +# which supports all transcription providers with auto-detection. +# +# Migration: Simply set ASR_BASE_URL and the connector will auto-detect ASR mode. +# USE_ASR_ENDPOINT=true is no longer required (but still works for backwards compat). +# +# This configuration is for use with the WhisperX ASR Service: +# https://github.com/murtaza-nasir/whisperx-asr-service +# +# Features supported: +# - Speaker diarization with pyannote/speaker-diarization-community-1 +# - Voice profile embeddings (256-dimensional) for speaker recognition +# - Automatic speaker matching across recordings +# - Better timestamp alignment between speakers and words +# +# Instructions: +# 1. Copy this file to a new file named .env +# cp config/env.whisperx.example .env +# 2. Fill in the required URLs, API keys, and settings below. +# 3. Set up WhisperX ASR Service (see installation guide) +# ----------------------------------------------------------------------------- + +# --- Text Generation Model (for summaries, titles, etc.) --- +TEXT_MODEL_BASE_URL=https://openrouter.ai/api/v1 +TEXT_MODEL_API_KEY=your_openrouter_api_key +TEXT_MODEL_NAME=openai/gpt-4o-mini + +# --- GPT-5 Specific Settings (only used with OpenAI API and GPT-5 models) --- +# If using GPT-5 models (gpt-5, gpt-5-mini, gpt-5-nano, gpt-5-chat-latest) with OpenAI API, +# these parameters will be used instead of temperature. +# +# Example GPT-5 configuration: +# TEXT_MODEL_BASE_URL=https://api.openai.com/v1 +# TEXT_MODEL_NAME=gpt-5-mini +# +# Reasoning effort: minimal, low, medium, high (default: medium) +# - minimal: Fastest responses, minimal reasoning tokens +# - low: Fast responses with basic reasoning +# - medium: Balanced reasoning and speed (recommended) +# - high: Maximum reasoning for complex tasks +GPT5_REASONING_EFFORT=medium +# +# Verbosity: low, medium, high (default: medium) +# - low: Concise responses +# - medium: Balanced detail +# - high: Detailed explanations +GPT5_VERBOSITY=medium + +# --- Auto-Identify Speaker Response Format --- +# When enabled, auto-identify uses JSON Schema response format (structured outputs) +# to constrain LLM output to valid SPEAKER_XX keys. Falls back to json_object mode +# if the model doesn't support it. Leave disabled for widest model compatibility. +# AUTO_IDENTIFY_RESPONSE_SCHEMA=1 + +# --- Chat Model Configuration (Optional) --- +# Configure a separate model for real-time chat interactions. +# If not set, chat will use the TEXT_MODEL_* settings above. +# +# Use cases: +# - Use a faster model for chat while using a more capable model for summarization +# - Use a cheaper model for interactive chat to reduce costs +# - Use different service tiers for different operations +# +# CHAT_MODEL_API_KEY=your_chat_api_key +# CHAT_MODEL_BASE_URL=https://openrouter.ai/api/v1 +# CHAT_MODEL_NAME=openai/gpt-4o + +# --- Chat GPT-5 Settings (only used with OpenAI API and GPT-5 chat models) --- +# These settings allow independent control of GPT-5 parameters for chat. +# If not set, falls back to the main GPT5_* settings above. +# +# CHAT_GPT5_REASONING_EFFORT=medium +# CHAT_GPT5_VERBOSITY=medium + +# --- Transcription Service (WhisperX ASR Endpoint) --- +# New connector architecture auto-detects ASR mode when ASR_BASE_URL is set. +# USE_ASR_ENDPOINT=true is deprecated but still works for backwards compatibility. +# +# Note: ASR endpoints handle chunking internally - CHUNK_LIMIT settings are ignored. + +# WhisperX ASR Endpoint URL (setting this auto-enables ASR mode) +# For containers in same docker-compose: Use container name and internal port +# Example: http://whisperx-asr:9000 (NOT the host port or external IP) +# For external ASR: Use http://192.168.1.100:9000 or http://asr.example.com:9000 +ASR_BASE_URL=http://whisperx-asr:9000 + +# Deprecated: No longer needed, kept for backwards compatibility +# USE_ASR_ENDPOINT=true + +# Speaker diarization options +ASR_DIARIZE=true +# ASR_MIN_SPEAKERS=1 # Hint for minimum speakers +# ASR_MAX_SPEAKERS=5 # Default maximum speakers + +# Enable speaker embeddings for voice profile matching (WhisperX only) +ASR_RETURN_SPEAKER_EMBEDDINGS=true + +# --- Application Settings --- +# Set to "true" to allow user registration, "false" to disable +ALLOW_REGISTRATION=false +# Comma-separated list of allowed email domains for registration. +# Leave empty to allow all domains. Example: company.com,subsidiary.org +REGISTRATION_ALLOWED_DOMAINS= +SUMMARY_MAX_TOKENS=8000 +CHAT_MAX_TOKENS=5000 + +# Timezone for displaying dates and times in the UI +# Use a valid TZ database name (e.g., "America/New_York", "Europe/London", "UTC") +TIMEZONE="UTC" + +# Set the logging level for the application. +# Options: DEBUG, INFO, WARNING, ERROR +LOG_LEVEL="INFO" + +# --- Audio Compression --- +# Automatically compress lossless uploads (WAV, AIFF) to save storage +AUDIO_COMPRESS_UPLOADS=true + +# Target codec: mp3 (lossy, smallest), flac (lossless), opus (lossy, efficient) +AUDIO_CODEC=mp3 + +# Bitrate for lossy codecs (ignored for FLAC) +AUDIO_BITRATE=128k + +# --- Admin User (created on first run) --- +ADMIN_USERNAME=admin +ADMIN_EMAIL=admin@example.com +ADMIN_PASSWORD=changeme + +# --- Inquire Mode (AI search across all recordings) --- +# Set to "true" to enable semantic search and chat across all recordings +# Requires additional dependencies (already included in Docker image) +ENABLE_INQUIRE_MODE=false + +# --- Automated File Processing (Black Hole Directory) --- +# Set to "true" to enable automated file processing +ENABLE_AUTO_PROCESSING=false + +# --- Automated Export Settings --- +# Automatically export transcriptions and summaries to markdown files +ENABLE_AUTO_EXPORT=false + +# Directory where exports will be saved (per-user subdirectories created automatically) +AUTO_EXPORT_DIR=/data/exports + +# What to include in exports +AUTO_EXPORT_TRANSCRIPTION=true +AUTO_EXPORT_SUMMARY=true + +# Processing mode: admin_only, user_directories, or single_user +AUTO_PROCESS_MODE=admin_only + +# Directory to watch for new audio files +AUTO_PROCESS_WATCH_DIR=/data/auto-process + +# How often to check for new files (seconds) +AUTO_PROCESS_CHECK_INTERVAL=30 + +# How long to wait (seconds) to confirm a file has stopped changing before processing. +# Increase for slow network transfers (NFS, SMB). Default: 5 +# AUTO_PROCESS_STABILITY_TIME=5 + +# Default username for single_user mode (only used if AUTO_PROCESS_MODE=single_user) +# AUTO_PROCESS_DEFAULT_USERNAME=admin + +# --- Auto-Deletion & Retention Settings --- +# Enable automated deletion of old recordings +ENABLE_AUTO_DELETION=false + +# Number of days to retain recordings (0 = disabled) +# Example: 90 means recordings older than 90 days will be processed +GLOBAL_RETENTION_DAYS=90 + +# Deletion mode: 'audio_only' keeps transcription, 'full_recording' deletes everything +# audio_only: Deletes audio file but keeps transcription/summary/notes (recommended) +# full_recording: Permanently deletes the entire recording from database +DELETION_MODE=audio_only + +# --- Permission-Based Deletion Controls --- +# Allow all users to delete their recordings, or restrict to admins only +# true: All users can delete their own recordings (default) +# false: Only admins can delete recordings +USERS_CAN_DELETE=true + +# Delete speaker profiles when all their recordings are removed. +# Default: false (speaker profiles and voice embeddings are preserved) +# Set to true for privacy-sensitive deployments where biometric voice data +# should not outlive the recordings it was derived from. +# DELETE_ORPHANED_SPEAKERS=false + +# --- Internal Sharing Settings --- +# Enable user-to-user sharing of recordings (works independently of groups) +ENABLE_INTERNAL_SHARING=false + +# Show usernames in the UI (when sharing/viewing shared recordings) +# true: Display usernames throughout the interface +# false: Hide usernames (users must know each other's usernames to share) +SHOW_USERNAMES_IN_UI=false + +# --- Public Sharing Settings --- +# Enable creation of public share links (anonymous access) +# true: Users can create public links to share recordings externally (default) +# false: Public sharing is disabled globally +ENABLE_PUBLIC_SHARING=true + +# Note: Admins can control public sharing permissions per-user in the admin dashboard +# even when ENABLE_PUBLIC_SHARING is true + +# --- Video Retention --- +# When enabled, uploaded video files keep their video stream for in-browser playback +# The audio is extracted to a temp file for transcription, then cleaned up +# Default: false (video uploads extract audio only, video stream is discarded) +VIDEO_RETENTION=false + +# --- Concurrent Uploads --- +# Maximum number of simultaneous file uploads (default: 3) +MAX_CONCURRENT_UPLOADS=3 + +# --- Background Processing Queues --- +# Separate queues for transcription (slow) and summary (fast) jobs +# This prevents slow ASR jobs from blocking quick summary generation + +# Transcription queue workers (for ASR processing, default: 2) +JOB_QUEUE_WORKERS=2 + +# Summary queue workers (for LLM summarization, default: 2) +SUMMARY_QUEUE_WORKERS=2 + +# Maximum retry attempts for failed jobs (default: 3) +JOB_MAX_RETRIES=3 + +# --- Docker Settings (rarely need to be changed) --- +# Database URI - SQLite (default) or PostgreSQL +SQLALCHEMY_DATABASE_URI=sqlite:////data/instance/transcriptions.db +# For PostgreSQL, use: postgresql://username:password@hostname:5432/database_name +# Example: postgresql://speakr:password@postgres:5432/speakr +UPLOAD_FOLDER=/data/uploads diff --git a/constraints.txt b/constraints.txt new file mode 100644 index 0000000..51369e3 --- /dev/null +++ b/constraints.txt @@ -0,0 +1 @@ +scipy<1.15 diff --git a/deployment/README.md b/deployment/README.md new file mode 100644 index 0000000..0569f71 --- /dev/null +++ b/deployment/README.md @@ -0,0 +1,105 @@ +# DictIA — Deployment Infrastructure + +Infrastructure de deploiement reproductible pour DictIA . + +## Choix de profil + +``` +Quel est ton setup? + | + +-- VPS / serveur cloud? + | --> cloud (ASR Proxy GCP GPU on demand) + | + +-- Machine locale avec GPU NVIDIA? + | --> local-gpu (WhisperX sur GPU, le plus rapide) + | + +-- Machine locale sans GPU? + --> local-cpu (WhisperX sur CPU, lent mais fonctionnel) +``` + +## Quickstart + +```bash +git clone https://gitea.innova-ai.ca/Innova-AI/dictia-public.git +cd dictia +git checkout dictia-branding +bash deployment/setup.sh +``` + +Le script detecte le hardware et guide l'installation. + +## Architecture + +``` +deployment/ +├── setup.sh # Installateur principal +├── docker/ +│ ├── docker-compose.cloud.yml +│ ├── docker-compose.local-cpu.yml +│ ├── docker-compose.local-gpu.yml +│ └── .env.example +├── asr-proxy/ # Proxy GCP GPU (cloud seulement) +│ ├── proxy.py +│ ├── dashboard.html +│ ├── requirements.txt +│ ├── setup.sh +│ └── asr-proxy.service +├── security/ # Securite Docker (cloud) +│ ├── docker-daemon.json +│ ├── iptables-rules.sh +│ └── docker-iptables.service +├── config/ +│ ├── nginx/dictia.conf +│ ├── tailscale/setup-serve.sh +│ └── systemd/dictia.service +├── tools/ +│ ├── backup.sh +│ ├── restore.sh +│ ├── update.sh +│ └── health-check.sh +└── docs/ + ├── QUICKSTART.md + ├── VPS-SETUP.md + ├── LOCAL-SETUP.md + ├── MAINTENANCE.md + └── TROUBLESHOOTING.md +``` + +### Profil Cloud + +``` +Internet --> Tailscale --> VPS + | + DictIA :8899 + | + ASR Proxy :9090 + | + GCP GPU (auto start/stop) + | + WhisperX :9000 +``` + +### Profil Local GPU/CPU + +``` +localhost:8899 --> DictIA container + | + WhisperX container :9000 + | + GPU local (ou CPU) +``` + +## Documentation + +- [QUICKSTART.md](docs/QUICKSTART.md) — Demarrage rapide par profil +- [VPS-SETUP.md](docs/VPS-SETUP.md) — Setup VPS complet from scratch +- [LOCAL-SETUP.md](docs/LOCAL-SETUP.md) — Setup local GPU/CPU +- [MAINTENANCE.md](docs/MAINTENANCE.md) — Backup, restore, update, monitoring +- [TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) — Problemes courants + solutions + +## Mise a jour upstream + +Tous les fichiers dans `deployment/` sont specifiques a DictIA. +Aucun conflit lors des merges upstream, sauf `deployment/setup.sh` +(qui remplace le setup.sh original de Speakr). + diff --git a/deployment/asr-proxy/.gitignore b/deployment/asr-proxy/.gitignore new file mode 100644 index 0000000..8ff2efb --- /dev/null +++ b/deployment/asr-proxy/.gitignore @@ -0,0 +1,5 @@ +gcp-credentials.json +usage-stats.json +venv/ +__pycache__/ +*.pyc diff --git a/deployment/asr-proxy/asr-proxy.service b/deployment/asr-proxy/asr-proxy.service new file mode 100644 index 0000000..917ec8a --- /dev/null +++ b/deployment/asr-proxy/asr-proxy.service @@ -0,0 +1,22 @@ +# TEMPLATE — Ne pas copier directement dans /etc/systemd/system/. +# Les variables ${ASR_PROXY_USER} et ${ASR_PROXY_DIR} sont des placeholders. +# Le fichier service réel est généré par setup.sh (via heredoc bash) avec les +# valeurs résolues de $SERVICE_USER et $INSTALL_DIR. +# Usage : sudo bash setup.sh (installe et active le service automatiquement) + +[Unit] +Description=DictIA ASR Proxy - GPU Auto-Start/Stop for WhisperX +After=network.target + +[Service] +Type=simple +User=${ASR_PROXY_USER} +Restart=always +RestartSec=10 +WorkingDirectory=${ASR_PROXY_DIR} +ExecStart=${ASR_PROXY_DIR}/venv/bin/python proxy.py +Environment=GOOGLE_APPLICATION_CREDENTIALS=${ASR_PROXY_DIR}/gcp-credentials.json +Environment=STATS_FILE=${ASR_PROXY_DIR}/usage-stats.json + +[Install] +WantedBy=multi-user.target diff --git a/deployment/asr-proxy/dashboard.html b/deployment/asr-proxy/dashboard.html new file mode 100644 index 0000000..ba1ca7b --- /dev/null +++ b/deployment/asr-proxy/dashboard.html @@ -0,0 +1,1534 @@ + + + + + +DictIA GPU Monitor + + + + + + + +
+ Connection error: unable to reach proxy +
+ +
+ + +
+

DICTIA GPU MONITOR

+
+
+ proxy: connecting... +
+
+ + +
+
+
+
+
+
+
---
+
---
+
+ 0 active requests +
+
+ + +
+
+
--
+
GPU Time
+
This Month
+
+
+
--
+
Estimated Cost
+
USD
+
+
+
--
+
Total Requests
+
This Month
+
+
+
--
+
Remaining
+
of --h
+
+
+ + +
+
+
+ Monthly Budget + --% +
+
+
+
+
--h / --h
+
+
+ + +
+ + +
+ + +
+
+
Instance Details
+
+
+
IP
+
---
+
+
+
Machine
+
---
+
+
+
GPU
+
---
+
+
+
Idle
+
---
+
+
+
OAuth Token
+
---
+
+
+
Cost Rate
+
---
+
+
+
+
+ + +
+
+
Zone Fallback Map
+
+ +
+
+
+ + +
+
+
Request History
+
+ + + + + + + + + + + + + +
TimeTypeDurationStatusZone
No requests yet
+
+
+
+ + +
+
+
Event Log
+
+
Waiting for data...
+
+
+
+ + + + +
+ + + + + diff --git a/deployment/asr-proxy/proxy.py b/deployment/asr-proxy/proxy.py new file mode 100644 index 0000000..db20d1a --- /dev/null +++ b/deployment/asr-proxy/proxy.py @@ -0,0 +1,741 @@ +"""DictIA ASR Proxy - Auto-start/stop GCP GPU for WhisperX + Ollama. + +Uses Google Cloud Compute REST API directly (no gcloud CLI needed). +Proxies both ASR (WhisperX) and LLM (Ollama) requests. +Multi-zone fallback across Canada (Montreal + Toronto). +""" + +import asyncio +import json +import logging +import os +import time + +import httpx +import jwt as pyjwt +from pathlib import Path + +from fastapi import FastAPI, Request +from fastapi.responses import HTMLResponse, JSONResponse, Response + +logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") +log = logging.getLogger("asr-proxy") + +# Config — paths relative to this script's directory by default +SCRIPT_DIR = Path(__file__).parent +GCP_PROJECT = os.getenv("GCP_PROJECT", "speakr-gpu") +WHISPERX_PORT = int(os.getenv("WHISPERX_PORT", "9000")) +OLLAMA_PORT = int(os.getenv("OLLAMA_PORT", "11434")) +IDLE_TIMEOUT = int(os.getenv("IDLE_TIMEOUT", "300")) +CREDS_FILE = os.getenv("GOOGLE_APPLICATION_CREDENTIALS", str(SCRIPT_DIR / "gcp-credentials.json")) +STATS_FILE = os.getenv("STATS_FILE", str(SCRIPT_DIR / "usage-stats.json")) +MONTHLY_LIMIT_HOURS = float(os.getenv("MONTHLY_LIMIT_HOURS", "30")) +# Real GCP cost per GPU-hour (g2-standard-4 + L4): GPU ($0.837) + vCPU ($0.151) + RAM ($0.069) +GPU_COST_PER_HOUR = float(os.getenv("GPU_COST_PER_HOUR", "1.06")) +# Fixed monthly costs: SSD disks ($5.66) + snapshots ($4.19) ≈ $9.85/month +FIXED_MONTHLY_COST = float(os.getenv("FIXED_MONTHLY_COST", "9.85")) +SNAPSHOT_NAME = "whisperx-gpu-snapshot" +HEALTH_POLL_INTERVAL = 5 +BOOT_TIMEOUT = 300 + +# Zone fallback order — Canada only, Montreal first +ZONE_FALLBACKS = [ + { + "zone": "northamerica-northeast1-b", + "instance": "whisperx-gpu-mtl1", + "machine_type": "g2-standard-4", + "accelerator": "nvidia-l4", + "accel_count": 1, + "label": "Montreal-b (L4)", + }, + { + "zone": "northamerica-northeast1-c", + "instance": "whisperx-gpu-mtl2", + "machine_type": "n1-standard-4", + "accelerator": "nvidia-tesla-t4", + "accel_count": 1, + "label": "Montreal-c (T4)", + }, + { + "zone": "northamerica-northeast2-a", + "instance": "whisperx-gpu-tor1", + "machine_type": "g2-standard-4", + "accelerator": "nvidia-l4", + "accel_count": 1, + "label": "Toronto-a (L4)", + }, + { + "zone": "northamerica-northeast2-b", + "instance": "whisperx-gpu", + "machine_type": "g2-standard-4", + "accelerator": "nvidia-l4", + "accel_count": 1, + "label": "Toronto-b (L4)", + }, +] + +STARTUP_SCRIPT = """#!/bin/bash +systemctl start docker +sleep 5 +docker start whisperx-asr 2>/dev/null || true +systemctl start ollama 2>/dev/null || true +""" + +app = FastAPI(title="DictIA ASR Proxy") + +# State +last_request_time = 0.0 +active_requests = 0 +gpu_ip: str | None = None +active_zone: dict | None = None +shutdown_task: asyncio.Task | None = None + +# Request history tracking (in-memory, last 20 requests) +request_history: list[dict] = [] +MAX_HISTORY = 20 + +# Zone status tracking +zone_status: dict[str, dict] = {} + +# Startup lock and failure cooldown +_startup_lock: asyncio.Lock | None = None +_last_failure_time: float = 0 +FAILURE_COOLDOWN = 180 + +# OAuth2 token cache +_access_token: str | None = None +_token_expiry: float = 0 + + +# --- Usage Stats --- + +def load_stats() -> dict: + try: + with open(STATS_FILE) as f: + return json.load(f) + except (FileNotFoundError, json.JSONDecodeError): + return {"gpu_seconds": 0, "month": time.strftime("%Y-%m"), "requests": 0, "last_start": 0} + + +def save_stats(stats: dict): + with open(STATS_FILE, "w") as f: + json.dump(stats, f, indent=2) + + +def track_gpu_time(): + stats = load_stats() + current_month = time.strftime("%Y-%m") + if stats.get("month") != current_month: + stats = {"gpu_seconds": 0, "month": current_month, "requests": 0, "last_start": 0} + if stats.get("last_start", 0) > 0: + elapsed = time.time() - stats["last_start"] + stats["gpu_seconds"] += elapsed + stats["last_start"] = 0 + save_stats(stats) + + +def check_budget() -> tuple[bool, float]: + stats = load_stats() + current_month = time.strftime("%Y-%m") + if stats.get("month") != current_month: + return True, 0.0 + hours_used = stats.get("gpu_seconds", 0) / 3600 + return hours_used < MONTHLY_LIMIT_HOURS, hours_used + + +# --- GCP Auth --- + +async def get_access_token() -> str: + global _access_token, _token_expiry + if _access_token and time.time() < _token_expiry - 60: + return _access_token + with open(CREDS_FILE) as f: + creds = json.load(f) + cred_type = creds.get("type", "authorized_user") + async with httpx.AsyncClient() as client: + if cred_type == "service_account": + now = int(time.time()) + payload = { + "iss": creds["client_email"], + "scope": "https://www.googleapis.com/auth/compute", + "aud": "https://oauth2.googleapis.com/token", + "iat": now, + "exp": now + 3600, + } + signed = pyjwt.encode(payload, creds["private_key"], algorithm="RS256") + resp = await client.post( + "https://oauth2.googleapis.com/token", + data={ + "grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer", + "assertion": signed, + }, + ) + else: + resp = await client.post( + "https://oauth2.googleapis.com/token", + data={ + "client_id": creds["client_id"], + "client_secret": creds["client_secret"], + "refresh_token": creds["refresh_token"], + "grant_type": "refresh_token", + }, + ) + resp.raise_for_status() + data = resp.json() + _access_token = data["access_token"] + _token_expiry = time.time() + data.get("expires_in", 3600) + log.info(f"Refreshed GCP access token ({cred_type})") + return _access_token + + +# --- GCP Compute API --- + +COMPUTE_BASE = "https://compute.googleapis.com/compute/v1" + + +async def gcp_api(method: str, url: str, **kwargs) -> httpx.Response: + token = await get_access_token() + async with httpx.AsyncClient(timeout=60) as client: + resp = await client.request( + method, url, + headers={"Authorization": f"Bearer {token}"}, + **kwargs, + ) + return resp + + +async def get_instance_info(zone: str, instance: str) -> dict | None: + url = f"{COMPUTE_BASE}/projects/{GCP_PROJECT}/zones/{zone}/instances/{instance}" + resp = await gcp_api("GET", url) + if resp.status_code == 404: + return None + if resp.status_code >= 400: + log.error(f"GCP API error {resp.status_code}: {resp.text}") + return None + return resp.json() + + +def extract_ip(instance_data: dict) -> str: + interfaces = instance_data.get("networkInterfaces", []) + if interfaces: + access = interfaces[0].get("accessConfigs", []) + if access: + return access[0].get("natIP", "") + return "" + + +async def start_instance_in_zone(zone: str, instance: str) -> bool: + url = f"{COMPUTE_BASE}/projects/{GCP_PROJECT}/zones/{zone}/instances/{instance}/start" + resp = await gcp_api("POST", url) + if resp.status_code < 400: + log.info(f"Start requested: {instance} in {zone}") + return True + log.warning(f"Failed to start {instance} in {zone}: {resp.status_code} {resp.text}") + return False + + +async def stop_instance_in_zone(zone: str, instance: str): + url = f"{COMPUTE_BASE}/projects/{GCP_PROJECT}/zones/{zone}/instances/{instance}/stop" + resp = await gcp_api("POST", url) + if resp.status_code < 400: + log.info(f"Stop requested: {instance} in {zone}") + else: + log.error(f"Failed to stop {instance} in {zone}: {resp.status_code}") + + +async def create_instance_from_snapshot(config: dict) -> bool: + zone = config["zone"] + instance = config["instance"] + machine = config["machine_type"] + accel = config["accelerator"] + accel_count = config["accel_count"] + + log.info(f"Creating {instance} in {zone} from snapshot...") + + body = { + "name": instance, + "machineType": f"zones/{zone}/machineTypes/{machine}", + "disks": [{ + "boot": True, + "autoDelete": True, + "initializeParams": { + "diskSizeGb": "50", + "diskType": f"zones/{zone}/diskTypes/pd-ssd", + "sourceSnapshot": f"global/snapshots/{SNAPSHOT_NAME}", + }, + }], + "networkInterfaces": [{ + "network": "global/networks/default", + "accessConfigs": [{"type": "ONE_TO_ONE_NAT", "name": "External NAT"}], + }], + "guestAccelerators": [{ + "acceleratorType": f"zones/{zone}/acceleratorTypes/{accel}", + "acceleratorCount": accel_count, + }], + "scheduling": { + "onHostMaintenance": "TERMINATE", + "automaticRestart": False, + }, + "tags": {"items": ["whisperx-gpu"]}, + "metadata": { + "items": [{"key": "startup-script", "value": STARTUP_SCRIPT}], + }, + } + + url = f"{COMPUTE_BASE}/projects/{GCP_PROJECT}/zones/{zone}/instances" + resp = await gcp_api("POST", url, json=body) + + if resp.status_code < 400: + log.info(f"Created {instance} in {zone}") + return True + + error_text = resp.text + if "ZONE_RESOURCE_POOL_EXHAUSTED" in error_text: + log.warning(f"No capacity in {zone} -- skipping") + elif "QUOTA" in error_text.upper(): + log.warning(f"Quota exceeded for {zone}: {error_text[:200]}") + else: + log.error(f"Failed to create in {zone}: {resp.status_code} {error_text[:200]}") + return False + + +# --- Core Logic --- + +async def wait_for_running(zone: str, instance: str, timeout: int = 120, grace: int = 15) -> bool: + gone_count = 0 + start_time = time.time() + for _ in range(timeout // 5): + info = await get_instance_info(zone, instance) + if info and info.get("status") == "RUNNING": + return True + status = info.get("status", "UNKNOWN") if info else "GONE" + elapsed = time.time() - start_time + if status == "GONE": + gone_count += 1 + if gone_count >= 2: + log.warning(f"{instance} in {zone}: instance disappeared (no capacity)") + return False + if status in ("STOPPING",): + log.warning(f"{instance} in {zone}: status {status} (no capacity)") + return False + if status in ("TERMINATED", "STOPPED") and elapsed > grace: + log.warning(f"{instance} in {zone}: status {status} after {elapsed:.0f}s (no capacity)") + return False + await asyncio.sleep(5) + return False + + +async def delete_instance(zone: str, instance: str): + url = f"{COMPUTE_BASE}/projects/{GCP_PROJECT}/zones/{zone}/instances/{instance}" + resp = await gcp_api("DELETE", url) + if resp.status_code < 400: + log.info(f"Deleted {instance} in {zone} to free quota") + elif resp.status_code == 404: + pass + else: + log.warning(f"Failed to delete {instance} in {zone}: {resp.status_code}") + + +async def ensure_gpu_running() -> str: + global gpu_ip, active_zone, _last_failure_time + + if _last_failure_time > 0: + remaining = FAILURE_COOLDOWN - (time.time() - _last_failure_time) + if remaining > 0: + log.info(f"GPU cooldown active ({int(remaining)}s remaining), waiting...") + await asyncio.sleep(remaining) + _last_failure_time = 0 + + async with _startup_lock: + ok, hours = check_budget() + if not ok: + raise RuntimeError(f"Monthly GPU limit reached ({hours:.1f}h / {MONTHLY_LIMIT_HOURS}h)") + + if active_zone: + info = await get_instance_info(active_zone["zone"], active_zone["instance"]) + if info and info.get("status") == "RUNNING": + gpu_ip = extract_ip(info) + if gpu_ip: + return gpu_ip + + errors = [] + + for config in ZONE_FALLBACKS: + zone = config["zone"] + instance = config["instance"] + label = config["label"] + + log.info(f"Trying {label}...") + info = await get_instance_info(zone, instance) + + if info is None: + created = await create_instance_from_snapshot(config) + if not created: + zone_status[label] = { + "status": "no_capacity", + "last_tried": time.strftime("%Y-%m-%dT%H:%M:%S"), + "last_error": "no capacity", + } + errors.append(f"{label}: no capacity") + continue + if not await wait_for_running(zone, instance, grace=30): + zone_status[label] = { + "status": "error", + "last_tried": time.strftime("%Y-%m-%dT%H:%M:%S"), + "last_error": "created but failed to start", + } + errors.append(f"{label}: created but failed to start") + await delete_instance(zone, instance) + await asyncio.sleep(3) + continue + else: + status = info.get("status", "UNKNOWN") + + if status == "RUNNING": + pass + elif status in ("TERMINATED", "STOPPED"): + zone_status[label] = { + "status": "starting", + "last_tried": time.strftime("%Y-%m-%dT%H:%M:%S"), + "last_error": None, + } + started = await start_instance_in_zone(zone, instance) + if not started: + zone_status[label] = { + "status": "error", + "last_tried": time.strftime("%Y-%m-%dT%H:%M:%S"), + "last_error": "start rejected", + } + errors.append(f"{label}: start rejected") + continue + if not await wait_for_running(zone, instance, grace=20): + zone_status[label] = { + "status": "error", + "last_tried": time.strftime("%Y-%m-%dT%H:%M:%S"), + "last_error": "didn't reach RUNNING", + } + errors.append(f"{label}: didn't reach RUNNING") + continue + elif status in ("STAGING", "PROVISIONING"): + zone_status[label] = { + "status": "starting", + "last_tried": time.strftime("%Y-%m-%dT%H:%M:%S"), + "last_error": None, + } + if not await wait_for_running(zone, instance): + zone_status[label] = { + "status": "error", + "last_tried": time.strftime("%Y-%m-%dT%H:%M:%S"), + "last_error": f"stuck in {status}", + } + errors.append(f"{label}: stuck in {status}") + continue + elif status == "STOPPING": + log.info(f"{label}: STOPPING, deleting to free quota") + await delete_instance(zone, instance) + await asyncio.sleep(3) + zone_status[label] = { + "status": "error", + "last_tried": time.strftime("%Y-%m-%dT%H:%M:%S"), + "last_error": "was STOPPING, deleted", + } + errors.append(f"{label}: was STOPPING, deleted") + continue + + info = await get_instance_info(zone, instance) + if info and info.get("status") == "RUNNING": + gpu_ip = extract_ip(info) + if gpu_ip: + active_zone = config + _last_failure_time = 0 + zone_status[label] = { + "status": "running", + "last_tried": time.strftime("%Y-%m-%dT%H:%M:%S"), + "last_error": None, + } + stats = load_stats() + stats["last_start"] = time.time() + stats["requests"] = stats.get("requests", 0) + 1 + stats["active_zone"] = label + save_stats(stats) + log.info(f"GPU ready in {label}, IP: {gpu_ip}") + return gpu_ip + + zone_status[label] = { + "status": "error", + "last_tried": time.strftime("%Y-%m-%dT%H:%M:%S"), + "last_error": "running but no IP", + } + errors.append(f"{label}: running but no IP") + + _last_failure_time = time.time() + raise RuntimeError( + f"No GPU available in any Canadian zone. Tried: {'; '.join(errors)}" + ) + + +async def ensure_gpu_ready() -> str: + ip = await ensure_gpu_running() + url = f"http://{ip}:{WHISPERX_PORT}/health" + log.info(f"Waiting for WhisperX at {url}...") + async with httpx.AsyncClient(timeout=10) as client: + for _ in range(BOOT_TIMEOUT // HEALTH_POLL_INTERVAL): + try: + resp = await client.get(url) + if resp.status_code == 200: + log.info("WhisperX is healthy!") + return ip + except (httpx.ConnectError, httpx.ConnectTimeout, httpx.ReadTimeout): + pass + await asyncio.sleep(HEALTH_POLL_INTERVAL) + raise RuntimeError("WhisperX did not become healthy in time") + + +async def ensure_ollama_ready() -> str: + ip = await ensure_gpu_running() + url = f"http://{ip}:{OLLAMA_PORT}/api/tags" + log.info(f"Waiting for Ollama at {url}...") + async with httpx.AsyncClient(timeout=10) as client: + for _ in range(BOOT_TIMEOUT // HEALTH_POLL_INTERVAL): + try: + resp = await client.get(url) + if resp.status_code == 200: + log.info("Ollama is healthy!") + return ip + except (httpx.ConnectError, httpx.ConnectTimeout, httpx.ReadTimeout): + pass + await asyncio.sleep(HEALTH_POLL_INTERVAL) + raise RuntimeError("Ollama did not become healthy in time") + + +async def idle_shutdown_loop(): + while True: + await asyncio.sleep(60) + if last_request_time == 0 or active_zone is None: + continue + if active_requests > 0: + continue + elapsed = time.time() - last_request_time + if elapsed >= IDLE_TIMEOUT: + try: + zone = active_zone["zone"] + instance = active_zone["instance"] + label = active_zone["label"] + info = await get_instance_info(zone, instance) + if info and info.get("status") == "RUNNING": + log.info(f"Idle {int(elapsed)}s -- stopping {label}") + await stop_instance_in_zone(zone, instance) + track_gpu_time() + except Exception as e: + log.error(f"Error stopping: {e}") + + +# --- Endpoints --- + +@app.on_event("startup") +async def on_startup(): + global shutdown_task, _startup_lock + _startup_lock = asyncio.Lock() + await get_access_token() + shutdown_task = asyncio.create_task(idle_shutdown_loop()) + zones = ", ".join(c["label"] for c in ZONE_FALLBACKS) + log.info(f"DictIA ASR Proxy started. Zones: [{zones}]. Idle: {IDLE_TIMEOUT}s, limit: {MONTHLY_LIMIT_HOURS}h") + + +@app.post("/asr") +async def asr_proxy(request: Request): + global last_request_time, active_requests + + body = await request.body() + headers = { + k: v for k, v in request.headers.items() + if k.lower() not in ("host", "transfer-encoding") + } + + last_request_time = time.time() + active_requests += 1 + start_time = time.time() + result_status = 200 + try: + ip = await ensure_gpu_ready() + target = f"http://{ip}:{WHISPERX_PORT}/asr" + log.info(f"Forwarding {len(body)} bytes to {target}") + async with httpx.AsyncClient(timeout=httpx.Timeout(7200.0)) as client: + resp = await client.post(target, content=body, headers=headers) + last_request_time = time.time() + result_status = resp.status_code + ct = resp.headers.get("content-type", "") + if "application/json" in ct: + return JSONResponse(content=resp.json(), status_code=resp.status_code) + else: + return JSONResponse(content=resp.text, status_code=resp.status_code) + except httpx.ReadTimeout: + result_status = 504 + return JSONResponse({"error": "Transcription timeout (2h)"}, status_code=504) + except Exception as e: + result_status = 502 + log.error(f"Proxy error: {e}") + return JSONResponse({"error": str(e)}, status_code=502) + finally: + active_requests -= 1 + last_request_time = time.time() + request_history.insert(0, { + "time": time.strftime("%Y-%m-%dT%H:%M:%S"), + "type": "ASR", + "duration_sec": round(time.time() - start_time, 1), + "status": result_status, + "zone": active_zone["label"] if active_zone else "none", + }) + if len(request_history) > MAX_HISTORY: + request_history.pop() + + +@app.get("/health") +async def health(): + zone_label = active_zone["label"] if active_zone else "none" + gpu_status = "unknown" + if active_zone: + try: + info = await get_instance_info(active_zone["zone"], active_zone["instance"]) + gpu_status = info.get("status", "unknown") if info else "not_found" + except Exception: + pass + ok, hours = check_budget() + stats = load_stats() + return { + "proxy": "healthy", + "gpu_instance": gpu_status, + "gpu_zone": zone_label, + "active_requests": active_requests, + "idle_timeout": IDLE_TIMEOUT, + "usage": { + "month": stats.get("month"), + "gpu_hours": round(hours, 2), + "gpu_limit_hours": MONTHLY_LIMIT_HOURS, + "requests_count": stats.get("requests", 0), + "budget_ok": ok, + }, + "gpu_ip": gpu_ip, + "machine_type": active_zone.get("machine_type", "unknown") if active_zone else "unknown", + "gpu_model": active_zone.get("accelerator", "unknown") if active_zone else "unknown", + "idle_seconds": round(time.time() - last_request_time) if last_request_time > 0 else 0, + "auto_shutdown_in": max(0, IDLE_TIMEOUT - round(time.time() - last_request_time)) if last_request_time > 0 and active_zone else None, + "token_expires_in": round(_token_expiry - time.time()) if _token_expiry > 0 else None, + } + + +@app.get("/stats") +async def get_stats(): + stats = load_stats() + hours = stats.get("gpu_seconds", 0) / 3600 + gpu_cost = hours * GPU_COST_PER_HOUR + total_cost = gpu_cost + FIXED_MONTHLY_COST + return { + "month": stats.get("month"), + "gpu_hours": round(hours, 2), + "gpu_minutes": round(hours * 60, 1), + "estimated_cost_usd": round(total_cost, 2), + "gpu_cost_usd": round(gpu_cost, 2), + "fixed_cost_usd": FIXED_MONTHLY_COST, + "monthly_limit_hours": MONTHLY_LIMIT_HOURS, + "remaining_hours": round(MONTHLY_LIMIT_HOURS - hours, 2), + "requests_count": stats.get("requests", 0), + "active_zone": stats.get("active_zone", "none"), + "cost_per_hour": GPU_COST_PER_HOUR, + "recent_requests": request_history[:10], + "zone_fallbacks": [ + { + "label": config["label"], + "zone": config["zone"], + "machine": config["machine_type"], + "gpu": config["accelerator"], + **zone_status.get(config["label"], {"status": "unknown", "last_tried": None, "last_error": None}), + } + for config in ZONE_FALLBACKS + ], + } + + +@app.post("/gpu/start") +async def gpu_start(): + try: + ip = await ensure_gpu_ready() + label = active_zone["label"] if active_zone else "unknown" + return {"status": "running", "ip": ip, "zone": label} + except Exception as e: + return JSONResponse({"error": str(e)}, status_code=503) + + +@app.post("/gpu/stop") +async def gpu_stop(): + if not active_zone: + return {"status": "no active instance"} + try: + await stop_instance_in_zone(active_zone["zone"], active_zone["instance"]) + track_gpu_time() + return {"status": "stopped", "zone": active_zone["label"]} + except Exception as e: + return JSONResponse({"error": str(e)}, status_code=500) + + +DASHBOARD_HTML = Path(__file__).parent / "dashboard.html" + + +@app.get("/", response_class=HTMLResponse) +async def dashboard(): + if DASHBOARD_HTML.exists(): + return HTMLResponse(DASHBOARD_HTML.read_text(encoding="utf-8")) + return HTMLResponse("

Dashboard not found

Place dashboard.html next to proxy.py

", status_code=404) + + +@app.api_route("/v1/{path:path}", methods=["POST", "GET"]) +async def llm_proxy(request: Request, path: str): + global last_request_time, active_requests + + body = await request.body() + headers = { + k: v for k, v in request.headers.items() + if k.lower() not in ("host", "transfer-encoding") + } + + last_request_time = time.time() + active_requests += 1 + start_time = time.time() + result_status = 200 + try: + ip = await ensure_ollama_ready() + target = f"http://{ip}:{OLLAMA_PORT}/v1/{path}" + log.info(f"Forwarding LLM request to {target}") + async with httpx.AsyncClient(timeout=httpx.Timeout(300.0)) as client: + resp = await client.request(request.method, target, content=body, headers=headers) + last_request_time = time.time() + result_status = resp.status_code + return Response( + content=resp.content, + status_code=resp.status_code, + media_type=resp.headers.get("content-type"), + ) + except httpx.ReadTimeout: + result_status = 504 + return JSONResponse({"error": "LLM timeout (5min)"}, status_code=504) + except Exception as e: + result_status = 502 + log.error(f"LLM proxy error: {e}") + return JSONResponse({"error": str(e)}, status_code=502) + finally: + active_requests -= 1 + last_request_time = time.time() + request_history.insert(0, { + "time": time.strftime("%Y-%m-%dT%H:%M:%S"), + "type": "LLM", + "duration_sec": round(time.time() - start_time, 1), + "status": result_status, + "zone": active_zone["label"] if active_zone else "none", + }) + if len(request_history) > MAX_HISTORY: + request_history.pop() + + +if __name__ == "__main__": + import uvicorn + uvicorn.run(app, host="0.0.0.0", port=9090) diff --git a/deployment/asr-proxy/requirements.txt b/deployment/asr-proxy/requirements.txt new file mode 100644 index 0000000..f301f93 --- /dev/null +++ b/deployment/asr-proxy/requirements.txt @@ -0,0 +1,5 @@ +fastapi==0.115.0 +uvicorn==0.30.0 +httpx==0.27.0 +PyJWT==2.9.0 +cryptography>=43.0.0 diff --git a/deployment/asr-proxy/setup.sh b/deployment/asr-proxy/setup.sh new file mode 100644 index 0000000..f0d88f8 --- /dev/null +++ b/deployment/asr-proxy/setup.sh @@ -0,0 +1,87 @@ +#!/usr/bin/env bash +# DictIA ASR Proxy — Setup script +# Installs the GCP GPU proxy for cloud deployments. +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +INSTALL_DIR="${ASR_PROXY_DIR:-$SCRIPT_DIR}" +SERVICE_USER="${ASR_PROXY_USER:-$(whoami)}" + +echo "=== DictIA ASR Proxy Setup ===" +echo "Install directory: $INSTALL_DIR" +echo "Service user: $SERVICE_USER" +echo + +# 1. Create virtual environment +if [ ! -d "$INSTALL_DIR/venv" ]; then + echo "[1/4] Creating Python virtual environment..." + python3 -m venv "$INSTALL_DIR/venv" +else + echo "[1/4] Virtual environment already exists." +fi + +# 2. Install dependencies +echo "[2/4] Installing Python dependencies..." +"$INSTALL_DIR/venv/bin/pip" install --quiet --upgrade pip +"$INSTALL_DIR/venv/bin/pip" install --quiet -r "$INSTALL_DIR/requirements.txt" + +# 3. GCP credentials +if [ ! -f "$INSTALL_DIR/gcp-credentials.json" ]; then + echo "[3/4] GCP credentials not found." + echo " Place your GCP service account or OAuth credentials at:" + echo " $INSTALL_DIR/gcp-credentials.json" + echo + echo " For service account: download JSON from GCP Console > IAM > Service Accounts" + echo " For user credentials: run 'gcloud auth application-default login' and copy the file" + echo + read -rp " Path to credentials file (or press Enter to skip): " CREDS_PATH + if [ -n "$CREDS_PATH" ] && [ -f "$CREDS_PATH" ]; then + cp "$CREDS_PATH" "$INSTALL_DIR/gcp-credentials.json" + chmod 600 "$INSTALL_DIR/gcp-credentials.json" + echo " Credentials copied." + else + echo " Skipped. You must add credentials before starting the proxy." + fi +else + echo "[3/4] GCP credentials found." +fi + +# 4. Install systemd service +echo "[4/4] Installing systemd service..." +SERVICE_FILE="/etc/systemd/system/asr-proxy.service" + +cat > /tmp/asr-proxy.service </dev/null 2>&1; then + echo "ERROR: Tailscale is not running or not connected." + echo " Install: curl -fsSL https://tailscale.com/install.sh | sh" + echo " Connect: sudo tailscale up" + exit 1 +fi + +HOSTNAME=$(tailscale status --json | python3 -c "import sys,json; print(json.load(sys.stdin)['Self']['DNSName'].rstrip('.'))" 2>/dev/null || echo "unknown") +echo "Tailscale hostname: $HOSTNAME" +echo + +# DictIA app on :443 → localhost:8899 +echo "[1/2] Setting up DictIA app (port 443 → 8899)..." +if [ "$MODE" = "funnel" ]; then + tailscale funnel --bg --https=443 http://localhost:8899 +else + tailscale serve --bg --https=443 http://localhost:8899 +fi + +# ASR Proxy dashboard on :9443 → localhost:9090 +echo "[2/2] Setting up ASR Proxy dashboard (port 9443 → 9090)..." +if [ "$MODE" = "funnel" ]; then + tailscale funnel --bg --https=9443 http://localhost:9090 +else + tailscale serve --bg --https=9443 http://localhost:9090 +fi + +echo +echo "=== Setup complete ===" +echo "DictIA: https://$HOSTNAME/" +echo "ASR Dashboard: https://$HOSTNAME:9443/" +echo +echo "Verify with: tailscale serve status" diff --git a/deployment/docker/.env.example b/deployment/docker/.env.example new file mode 100644 index 0000000..fc204f9 --- /dev/null +++ b/deployment/docker/.env.example @@ -0,0 +1,124 @@ +# ============================================================================= +# DictIA — Unified Environment Configuration +# ============================================================================= +# +# Copy this file to the project root as .env and edit the values. +# cp deployment/docker/.env.example .env +# +# This template combines upstream settings with DictIA deployment vars. +# See: config/env.transcription.example for full upstream documentation. + +# ============================================================================= +# FLASK SECRET KEY (REQUIRED — auto-generated by setup.sh) +# ============================================================================= +SECRET_KEY=change-me-to-a-random-string + +# ============================================================================= +# DEPLOYMENT PROFILE (used by deployment scripts) +# ============================================================================= +# Options: cloud, local-cpu, local-gpu +DICTIA_PROFILE=cloud + +# ============================================================================= +# TEXT GENERATION MODEL (REQUIRED for summaries, titles, chat) +# ============================================================================= +TEXT_MODEL_BASE_URL=https://openrouter.ai/api/v1 +TEXT_MODEL_API_KEY=your_openrouter_api_key +TEXT_MODEL_NAME=openai/gpt-4o-mini + +# ============================================================================= +# TRANSCRIPTION CONFIGURATION +# ============================================================================= +# For cloud profile (ASR Proxy → GCP GPU): +# ASR_BASE_URL is set automatically in docker-compose.cloud.yml +# No need to set it here. +# +# For local profiles (WhisperX sidecar): +# ASR_BASE_URL is set automatically in docker-compose.local-*.yml +# No need to set it here. +# +# For OpenAI API instead of self-hosted ASR: +# TRANSCRIPTION_API_KEY=sk-your_openai_api_key +# TRANSCRIPTION_MODEL=gpt-4o-transcribe-diarize + +# ASR model (for local WhisperX profiles) +ASR_MODEL=large-v3 + +# HuggingFace token (required for diarization with pyannote) +# Get yours at: https://huggingface.co/settings/tokens +# Must accept: https://huggingface.co/pyannote/speaker-diarization-3.1 +HF_TOKEN= + +# ============================================================================= +# ASR PROXY — CLOUD PROFILE ONLY +# ============================================================================= +# GCP project for GPU instances +# GCP_PROJECT=your-gcp-project + +# Monthly GPU budget limit in hours (default: 50) +# MONTHLY_LIMIT_HOURS=50 + +# Idle timeout before auto-stopping GPU (seconds, default: 300) +# IDLE_TIMEOUT=300 + +# ============================================================================= +# APPLICATION SETTINGS +# ============================================================================= +ADMIN_USERNAME=admin +ADMIN_EMAIL=admin@example.com +ADMIN_PASSWORD=changeme + +ALLOW_REGISTRATION=false +TIMEZONE="America/Toronto" +LOG_LEVEL=ERROR +LOCALE=fr_CA +DEFAULT_LANGUAGE=fr +SHOW_USERNAMES_IN_UI=true +SESSION_COOKIE_HTTPONLY=true +SESSION_COOKIE_SAMESITE=Lax +SESSION_COOKIE_SECURE=true + +# ============================================================================= +# OPTIONAL FEATURES +# ============================================================================= +ENABLE_INQUIRE_MODE=false +ENABLE_AUTO_PROCESSING=false +ENABLE_AUTO_EXPORT=false +ENABLE_AUTO_DELETION=false +ENABLE_INTERNAL_SHARING=true +ENABLE_PUBLIC_SHARING=true +ENABLE_FOLDERS=true +VIDEO_RETENTION=true +USERS_CAN_DELETE=true + +# ============================================================================= +# BACKGROUND PROCESSING +# ============================================================================= +JOB_QUEUE_WORKERS=4 +SUMMARY_QUEUE_WORKERS=4 +JOB_MAX_RETRIES=3 +MAX_CONCURRENT_UPLOADS=3 + +# ============================================================================= +# TRANSCRIPTION SETTINGS +# ============================================================================= +TRANSCRIPTION_CONNECTOR=asr_endpoint +USE_NEW_TRANSCRIPTION_ARCHITECTURE=true +ENABLE_CHUNKING=true +CHUNK_LIMIT=2400s +CHUNK_OVERLAP_SECONDS=5 + +# ============================================================================= +# LLM / SUMMARY SETTINGS +# ============================================================================= +SUMMARY_LANGUAGE=fr +SUMMARY_MAX_TOKENS=16000 +CHAT_MAX_TOKENS=12000 +ENABLE_STREAM_OPTIONS=false +ENABLE_THINKING=false + +# ============================================================================= +# DOCKER/DATABASE +# ============================================================================= +SQLALCHEMY_DATABASE_URI=sqlite:////data/instance/transcriptions.db +UPLOAD_FOLDER=/data/uploads diff --git a/deployment/docker/docker-compose.cloud.yml b/deployment/docker/docker-compose.cloud.yml new file mode 100644 index 0000000..d4ae233 --- /dev/null +++ b/deployment/docker/docker-compose.cloud.yml @@ -0,0 +1,40 @@ +# DictIA — Cloud deployment (VPS + ASR Proxy GCP GPU) +# +# Usage: +# docker compose -f deployment/docker/docker-compose.cloud.yml up -d +# +# ASR is handled by the external asr-proxy (port 9090) which auto-starts +# a GCP GPU instance on demand. DictIA connects via host.docker.internal. + +services: + dictia: + build: + context: ../.. + dockerfile: Dockerfile + image: innova-ai/dictia:latest + container_name: dictia + restart: unless-stopped + ports: + - "8899:8899" + env_file: + - ../../.env + environment: + - LOG_LEVEL=${LOG_LEVEL:-ERROR} + - ASR_BASE_URL=http://host.docker.internal:9090 + volumes: + - ../../data/uploads:/data/uploads + - ../../data/instance:/data/instance + extra_hosts: + - "host.docker.internal:host-gateway" + healthcheck: + test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8899/health')"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s + networks: + - dictia-network + +networks: + dictia-network: + driver: bridge diff --git a/deployment/docker/docker-compose.local-cpu.yml b/deployment/docker/docker-compose.local-cpu.yml new file mode 100644 index 0000000..0a0f060 --- /dev/null +++ b/deployment/docker/docker-compose.local-cpu.yml @@ -0,0 +1,64 @@ +# DictIA — Local CPU deployment (WhisperX on CPU + DictIA) +# +# Usage: +# docker compose -f deployment/docker/docker-compose.local-cpu.yml up -d +# +# Warning: CPU transcription is significantly slower than GPU. +# Expect ~10x real-time for large files (e.g., 1h audio = ~10h processing). + +services: + whisperx-asr: + image: ghcr.io/jim60105/whisperx-asr:latest + container_name: whisperx-asr + restart: unless-stopped + ports: + - "9000:9000" + environment: + - ASR_MODEL=${ASR_MODEL:-large-v3} + - ASR_ENGINE=whisperx + - DEVICE=cpu + - COMPUTE_TYPE=float32 + - HF_TOKEN=${HF_TOKEN:-} + volumes: + - whisperx-cache:/root/.cache + deploy: + resources: + limits: + memory: 18G + networks: + - dictia-network + + dictia: + build: + context: ../.. + dockerfile: Dockerfile + image: innova-ai/dictia:latest + container_name: dictia + restart: unless-stopped + ports: + - "8899:8899" + env_file: + - ../../.env + environment: + - LOG_LEVEL=${LOG_LEVEL:-ERROR} + - ASR_BASE_URL=http://whisperx-asr:9000 + volumes: + - ../../data/uploads:/data/uploads + - ../../data/instance:/data/instance + depends_on: + - whisperx-asr + healthcheck: + test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8899/health')"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s + networks: + - dictia-network + +volumes: + whisperx-cache: + +networks: + dictia-network: + driver: bridge diff --git a/deployment/docker/docker-compose.local-gpu.yml b/deployment/docker/docker-compose.local-gpu.yml new file mode 100644 index 0000000..488fd74 --- /dev/null +++ b/deployment/docker/docker-compose.local-gpu.yml @@ -0,0 +1,69 @@ +# DictIA — Local GPU deployment (WhisperX on NVIDIA GPU + DictIA) +# +# Usage: +# docker compose -f deployment/docker/docker-compose.local-gpu.yml up -d +# +# Prerequisites: +# - NVIDIA GPU with CUDA support +# - nvidia-container-toolkit installed +# - Docker configured with nvidia runtime + +services: + whisperx-asr: + image: ghcr.io/jim60105/whisperx-asr:latest-cuda + container_name: whisperx-asr + restart: unless-stopped + ports: + - "9000:9000" + environment: + - ASR_MODEL=${ASR_MODEL:-large-v3} + - ASR_ENGINE=whisperx + - DEVICE=cuda + - COMPUTE_TYPE=float16 + - HF_TOKEN=${HF_TOKEN:-} + volumes: + - whisperx-cache:/root/.cache + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: 1 + capabilities: [gpu] + networks: + - dictia-network + + dictia: + build: + context: ../.. + dockerfile: Dockerfile + image: innova-ai/dictia:latest + container_name: dictia + restart: unless-stopped + ports: + - "8899:8899" + env_file: + - ../../.env + environment: + - LOG_LEVEL=${LOG_LEVEL:-ERROR} + - ASR_BASE_URL=http://whisperx-asr:9000 + volumes: + - ../../data/uploads:/data/uploads + - ../../data/instance:/data/instance + depends_on: + - whisperx-asr + healthcheck: + test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8899/health')"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s + networks: + - dictia-network + +volumes: + whisperx-cache: + +networks: + dictia-network: + driver: bridge diff --git a/deployment/docs/LOCAL-SETUP.md b/deployment/docs/LOCAL-SETUP.md new file mode 100644 index 0000000..f534972 --- /dev/null +++ b/deployment/docs/LOCAL-SETUP.md @@ -0,0 +1,118 @@ +# Setup Local — DictIA + +Guide pour deployer DictIA localement avec GPU NVIDIA ou CPU. + +## Profil local-gpu + +### Prerequis + +- NVIDIA GPU avec support CUDA +- [nvidia-container-toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html) +- Docker + Docker Compose V2 +- 8GB+ RAM (16GB recommande) +- Token HuggingFace (pour la diarisation) + +### Installation nvidia-container-toolkit + +```bash +# Ubuntu/Debian +curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \ + sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg +curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ + sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ + sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list +sudo apt-get update +sudo apt-get install -y nvidia-container-toolkit +sudo nvidia-ctk runtime configure --runtime=docker +sudo systemctl restart docker + +# Verifier +docker run --rm --gpus all nvidia/cuda:12.0-base nvidia-smi +``` + +### Setup DictIA + +```bash +cd dictia +bash deployment/setup.sh --profile local-gpu +``` + +Le setup va verifier: +- nvidia-container-toolkit installe +- GPU accessible depuis Docker +- Assez de RAM disponible + +### Configuration du modele + +Par defaut, WhisperX utilise `large-v3`. Pour changer: + +```bash +# Editer .env +ASR_MODEL=large-v3 # Meilleure qualite +# ASR_MODEL=medium # Plus rapide, qualite correcte +# ASR_MODEL=small # Tres rapide, qualite reduite +``` + +--- + +## Profil local-cpu + +### Prerequis + +- Docker + Docker Compose V2 +- 18GB+ RAM (WhisperX CPU est gourmand) +- Patience (transcription ~10x temps reel) + +### Setup + +```bash +cd dictia +bash deployment/setup.sh --profile local-cpu +``` + +### Limitations + +- Transcription lente: 1h d'audio prend ~10h +- Utilise float32 (pas de GPU acceleration) +- Limite memoire a 18GB par defaut +- Recommande pour: tests, petits fichiers, demos + +Pour reduire l'utilisation memoire, utiliser un modele plus petit: + +```bash +# Editer .env +ASR_MODEL=small # ou medium, base, tiny +``` + +--- + +## Verification + +```bash +# Health check +bash deployment/tools/health-check.sh + +# Test rapide: ouvrir le navigateur +open http://localhost:8899 + +# Verifier WhisperX +curl http://localhost:9000/health +``` + +## Gestion des containers + +```bash +COMPOSE_FILE=deployment/docker/docker-compose.local-gpu.yml # ou local-cpu + +# Logs +docker compose -f $COMPOSE_FILE logs -f + +# Redemarrer +docker compose -f $COMPOSE_FILE restart + +# Arreter +docker compose -f $COMPOSE_FILE down + +# Voir l'utilisation GPU +nvidia-smi # (profil GPU seulement) +``` diff --git a/deployment/docs/MAINTENANCE.md b/deployment/docs/MAINTENANCE.md new file mode 100644 index 0000000..f43b963 --- /dev/null +++ b/deployment/docs/MAINTENANCE.md @@ -0,0 +1,136 @@ +# Maintenance — DictIA + +## Backup + +```bash +# Backup complet (data, .env, volumes, stats ASR) +bash deployment/tools/backup.sh + +# Backup dans un repertoire specifique +bash deployment/tools/backup.sh /mnt/backups +``` + +Les backups sont sauvegardes dans `backups/` avec rotation automatique (garde les 5 derniers). + +Contenu d'un backup: +- `data/` — uploads et base de donnees SQLite +- `dot-env` — fichier de configuration +- `asr-usage-stats.json` — stats d'utilisation GPU +- `whisperx-cache.tar.gz` — cache modeles (si volume Docker) +- `manifest.json` — metadonnees du backup + +### Schedule recommande + +| Frequence | Action | +|-----------|--------| +| Quotidien | `bash deployment/tools/backup.sh` | +| Hebdomadaire | Copier le backup sur un stockage externe | +| Mensuel | Verifier la restauration sur un environnement de test | + +Pour automatiser avec cron: + +```bash +# Backup quotidien a 3h du matin +0 3 * * * /opt/dictia/deployment/tools/backup.sh >> /var/log/dictia-backup.log 2>&1 +``` + +## Restore + +```bash +# Lister les backups disponibles +ls -la backups/ + +# Restaurer un backup +bash deployment/tools/restore.sh backups/dictia-20260211-030000.tar.gz +``` + +Le script: +1. Valide l'archive (presence du manifest) +2. Demande confirmation +3. Arrete les containers +4. Restaure les fichiers +5. Redemarre les containers + +## Mise a jour + +```bash +# Mise a jour complete (git pull + rebuild + restart) +bash deployment/tools/update.sh + +# Rebuild seulement (sans git pull) +bash deployment/tools/update.sh --no-pull + +# Git pull seulement (sans rebuild) +bash deployment/tools/update.sh --no-build +``` + +Le script: +1. Detecte le profil actif automatiquement +2. `git pull origin dictia-branding` +3. `docker build -t innova-ai/dictia:latest .` +4. Pull WhisperX upstream (profils locaux) +5. `docker compose down && up -d` +6. Attend le health check +7. Nettoie les images dangling + +## Monitoring + +### Health check + +```bash +# Diagnostic complet (humain) +bash deployment/tools/health-check.sh + +# JSON (pour alertes/scripts) +bash deployment/tools/health-check.sh --json + +# Code de sortie seulement (0=ok, 1=probleme) +bash deployment/tools/health-check.sh --quiet +``` + +### Logs + +```bash +# DictIA +docker logs dictia -f --tail 100 + +# WhisperX (profils locaux) +docker logs whisperx-asr -f --tail 100 + +# ASR Proxy (profil cloud) +journalctl -u asr-proxy -f +``` + +### Dashboard GPU (profil cloud) + +Le dashboard de monitoring GPU est accessible a: +- `http://localhost:9090` (local) +- `https://votre-hostname.tailnet.ts.net:9443` (Tailscale) + +Affiche: statut GPU, cout mensuel, historique des requetes, zones de fallback. + +### Metriques cles + +```bash +# Espace disque (les transcriptions grossissent) +df -h /opt/dictia/data/ + +# Utilisation memoire (WhisperX est gourmand) +docker stats --no-stream + +# Stats GPU (profil cloud) +curl -s http://localhost:9090/stats | python3 -m json.tool +``` + +## Maintenance Docker + +```bash +# Nettoyer les images orphelines +docker image prune -f + +# Nettoyer tout (attention: supprime les volumes non utilises) +# docker system prune -a --volumes + +# Verifier l'espace Docker +docker system df +``` diff --git a/deployment/docs/QUICKSTART.md b/deployment/docs/QUICKSTART.md new file mode 100644 index 0000000..f057175 --- /dev/null +++ b/deployment/docs/QUICKSTART.md @@ -0,0 +1,90 @@ +# Quickstart — DictIA + +## Prerequis communs + +- Docker + Docker Compose V2 +- Git +- 2GB+ RAM disponible + +```bash +git clone https://gitea.innova-ai.ca/Innova-AI/dictia.git +cd dictia +git checkout dictia-branding +``` + +--- + +## Profil Cloud (VPS + GCP GPU) + +Le GPU demarre automatiquement quand quelqu'un transcrit, et s'arrete apres 5 min d'inactivite. + +```bash +# 1. Setup interactif +bash deployment/setup.sh --profile cloud + +# 2. Setup ASR Proxy (GCP credentials requises) +bash deployment/asr-proxy/setup.sh + +# 3. Optionnel: Tailscale Serve pour HTTPS +bash deployment/config/tailscale/setup-serve.sh +``` + +**Requis**: credentials GCP (service account ou OAuth) dans `deployment/asr-proxy/gcp-credentials.json`. + +--- + +## Profil Local GPU + +Transcription locale sur GPU NVIDIA. Le plus rapide. + +```bash +# Prerequis: nvidia-container-toolkit +# https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html + +# Setup +bash deployment/setup.sh --profile local-gpu +``` + +**Requis**: token HuggingFace pour la diarisation (pyannote). + +--- + +## Profil Local CPU + +Transcription sur CPU. Lent mais fonctionnel pour tester. + +```bash +bash deployment/setup.sh --profile local-cpu +``` + +Prevoir ~10x le temps reel (1h audio = ~10h de traitement). + +--- + +## Apres l'installation + +```bash +# Verifier que tout fonctionne +bash deployment/tools/health-check.sh + +# Ouvrir DictIA +open http://localhost:8899 +``` + +Se connecter avec les identifiants admin configures pendant le setup. + +## Commandes utiles + +```bash +# Logs en temps reel +docker compose -f deployment/docker/docker-compose..yml logs -f + +# Redemarrer +docker compose -f deployment/docker/docker-compose..yml restart + +# Mise a jour +bash deployment/tools/update.sh + +# Backup +bash deployment/tools/backup.sh +``` diff --git a/deployment/docs/TROUBLESHOOTING.md b/deployment/docs/TROUBLESHOOTING.md new file mode 100644 index 0000000..d733a7c --- /dev/null +++ b/deployment/docs/TROUBLESHOOTING.md @@ -0,0 +1,177 @@ +# Troubleshooting — DictIA + +## WhisperX OOM (Out of Memory) + +**Symptome**: Container `whisperx-asr` crash ou restart en boucle. + +**Cause**: Modele trop gros pour la RAM/VRAM disponible. + +**Solutions**: +```bash +# Utiliser un modele plus petit dans .env +ASR_MODEL=medium # au lieu de large-v3 + +# Augmenter la limite memoire (local-cpu) +# Editer docker-compose.local-cpu.yml +deploy: + resources: + limits: + memory: 24G # au lieu de 18G +``` + +## Diarisation 403 Forbidden + +**Symptome**: Erreur 403 lors de la transcription avec diarisation. + +**Cause**: Token HuggingFace manquant ou conditions non acceptees. + +**Solution**: +1. Creer un token: https://huggingface.co/settings/tokens +2. Accepter les conditions: https://huggingface.co/pyannote/speaker-diarization-3.1 +3. Ajouter dans `.env`: +```bash +HF_TOKEN=hf_votre_token +``` +4. Redemarrer: `docker compose -f deployment/docker/docker-compose..yml restart` + +## GPU non detecte (local-gpu) + +**Symptome**: `nvidia-smi` fonctionne mais Docker ne voit pas le GPU. + +**Solution**: +```bash +# Installer nvidia-container-toolkit +sudo apt install -y nvidia-container-toolkit +sudo nvidia-ctk runtime configure --runtime=docker +sudo systemctl restart docker + +# Verifier +docker run --rm --gpus all nvidia/cuda:12.0-base nvidia-smi +``` + +## Upload echoue (fichiers volumineux) + +**Symptome**: Upload de gros fichiers (>100MB) echoue. + +**Causes possibles**: +- Timeout Nginx/reverse proxy +- Limite upload trop basse + +**Solutions**: +```bash +# Si Nginx: verifier client_max_body_size dans dictia.conf +client_max_body_size 500M; + +# Si Tailscale Serve: pas de limite cote Tailscale + +# Timeout gunicorn (dans le Dockerfile, deja a 600s) +# Pour des fichiers tres longs, augmenter dans docker-compose: +environment: + - GUNICORN_TIMEOUT=1200 +``` + +## Container dictia "unhealthy" + +**Symptome**: `docker ps` montre "unhealthy" pour le container dictia. + +**Diagnostic**: +```bash +# Voir les logs +docker logs dictia --tail 50 + +# Tester manuellement +docker exec dictia python3 -c "import urllib.request; urllib.request.urlopen('http://localhost:8899/health')" +``` + +**Causes courantes**: +- `.env` mal configure (SECRET_KEY manquant) +- Base de donnees corrompue (restaurer backup) +- Port 8899 deja utilise + +## ASR Proxy: "No GPU available" + +**Symptome**: Transcription echoue avec "No GPU available in any Canadian zone". + +**Causes**: +- GCP n'a pas de GPU disponible (capacite epuisee) +- Credentials GCP expirees +- Budget mensuel atteint + +**Diagnostic**: +```bash +# Verifier le statut du proxy +curl -s http://localhost:9090/health | python3 -m json.tool + +# Verifier les stats (budget) +curl -s http://localhost:9090/stats | python3 -m json.tool + +# Voir les logs +journalctl -u asr-proxy --since "1 hour ago" +``` + +**Solutions**: +- Attendre (GCP libere des GPUs regulierement) +- Le proxy reessaie automatiquement apres un cooldown de 3 minutes +- Verifier le dashboard: http://localhost:9090 + +## Build Docker lent/echoue + +**Symptome**: `docker build` prend trop de temps ou echoue. + +**Solutions**: +```bash +# Limiter les ressources si le VPS est petit +docker build --memory=2g --cpus=2 -t innova-ai/dictia:latest . + +# Nettoyer le cache Docker si le disque est plein +docker builder prune -f +docker image prune -f +``` + +## Base de donnees corrompue + +**Symptome**: Erreur SQLite au demarrage. + +**Solution**: +```bash +# Restaurer le dernier backup +bash deployment/tools/restore.sh backups/dictia-LATEST.tar.gz + +# Ou recreer la base (perd les donnees) +rm data/instance/transcriptions.db +docker compose -f deployment/docker/docker-compose..yml restart +``` + +## Port 8899 deja utilise + +```bash +# Trouver qui utilise le port +sudo lsof -i :8899 +# ou +sudo ss -tlnp | grep 8899 + +# Arreter le processus ou changer le port dans docker-compose +ports: + - "8900:8899" # utiliser 8900 a la place +``` + +## Mise a jour qui casse tout + +```bash +# Rollback: revenir au commit precedent +cd dictia +git log --oneline -5 # trouver le bon commit +git checkout + +# Rebuild et redemarrer +docker build -t innova-ai/dictia:latest . +docker compose -f deployment/docker/docker-compose..yml down +docker compose -f deployment/docker/docker-compose..yml up -d +``` + +## Commande de diagnostic rapide + +```bash +# Tout verifier d'un coup +bash deployment/tools/health-check.sh --json | python3 -m json.tool +``` diff --git a/deployment/docs/VPS-SETUP.md b/deployment/docs/VPS-SETUP.md new file mode 100644 index 0000000..deff17d --- /dev/null +++ b/deployment/docs/VPS-SETUP.md @@ -0,0 +1,148 @@ +# Setup VPS from scratch — DictIA + +Guide complet pour deployer DictIA sur un VPS Ubuntu. +Teste sur OVH VPS avec Ubuntu 22.04/24.04. + +## 1. Preparation du VPS + +```bash +# Mise a jour systeme +sudo apt update && sudo apt upgrade -y + +# Installer les essentiels +sudo apt install -y curl git +``` + +## 2. Docker + +```bash +# Installer Docker (methode officielle) +curl -fsSL https://get.docker.com | sh + +# Ajouter l'utilisateur au groupe docker +sudo usermod -aG docker $USER + +# Se reconnecter pour appliquer le groupe +exit +# (reconnecter via SSH) + +# Verifier +docker --version +docker compose version +``` + +## 3. Tailscale (recommande) + +Tailscale fournit un VPN mesh pour acceder au VPS sans exposer de ports publics. + +```bash +# Installer Tailscale +curl -fsSL https://tailscale.com/install.sh | sh + +# Connecter au tailnet +sudo tailscale up + +# Verifier +tailscale status +``` + +## 4. DictIA + +```bash +# Cloner le repo +cd ~ +git clone https://gitea.innova-ai.ca/Innova-AI/dictia.git +cd dictia +git checkout dictia-branding + +# Lancer le setup +bash deployment/setup.sh --profile cloud +``` + +Le setup va: +- Generer le `.env` avec vos identifiants +- Creer les repertoires de donnees +- Builder l'image Docker +- Demarrer les containers + +## 5. ASR Proxy (GCP GPU) + +```bash +# Installer le proxy +bash deployment/asr-proxy/setup.sh + +# Ajouter les credentials GCP +# Copier votre fichier de credentials dans: +cp ~/gcp-credentials.json deployment/asr-proxy/gcp-credentials.json + +# Demarrer le service +sudo systemctl start asr-proxy +sudo systemctl status asr-proxy +``` + +## 6. Securite + +```bash +# Docker daemon config (log rotation) +sudo cp deployment/security/docker-daemon.json /etc/docker/daemon.json +sudo systemctl restart docker + +# Firewall iptables (bloque trafic non-Tailscale) +sudo bash deployment/security/iptables-rules.sh + +# Service systemd pour les regles au boot +sudo cp deployment/security/docker-iptables.service /etc/systemd/system/ +sudo systemctl daemon-reload +sudo systemctl enable docker-iptables +``` + +## 7. Tailscale Serve (HTTPS) + +```bash +# Expose DictIA et le dashboard ASR via Tailscale HTTPS +bash deployment/config/tailscale/setup-serve.sh + +# Verifier +tailscale serve status +``` + +DictIA sera accessible a `https://votre-hostname.tailnet.ts.net/`. + +## 8. Service systemd (auto-start) + +```bash +# Adapter le chemin dans le fichier si necessaire +sudo cp deployment/config/systemd/dictia.service /etc/systemd/system/ +sudo systemctl daemon-reload +sudo systemctl enable dictia +``` + +## 9. Verification + +```bash +# Health check complet +bash deployment/tools/health-check.sh + +# Verifier les endpoints +curl -s http://localhost:8899/health +curl -s http://localhost:9090/health +``` + +## 10. Premier backup + +```bash +bash deployment/tools/backup.sh +``` + +--- + +## Checklist post-installation + +- [ ] DictIA repond sur :8899 +- [ ] ASR Proxy repond sur :9090 +- [ ] Tailscale Serve configure +- [ ] iptables: seul Tailscale peut acceder +- [ ] Docker: log rotation configuree +- [ ] Service systemd enable (auto-start au boot) +- [ ] Premier backup effectue +- [ ] Identifiants admin testes diff --git a/deployment/profiles/docker-compose.dictia16.yml b/deployment/profiles/docker-compose.dictia16.yml new file mode 100644 index 0000000..a553bb7 --- /dev/null +++ b/deployment/profiles/docker-compose.dictia16.yml @@ -0,0 +1,101 @@ +# ============================================================================= +# DictIA 16 — Docker Compose +# GPU : RTX 5070 Ti (16 Go VRAM) +# ============================================================================= +# +# Services : +# - dictia : Application principale DictIA +# - whisperx-asr : Service de transcription WhisperX Large-v3 +# - ollama : LLM local Mistral 7B (résumés, chat, Q&A) +# +# Démarrage : +# 1. cp config/env.dictia16.example .env +# 2. docker compose -f config/docker-compose.dictia16.yml up -d +# 3. Télécharger Mistral : docker exec ollama ollama pull mistral +# +# Note : Aucune clé API nécessaire — tout tourne en local (100% privé). +# ============================================================================= + +services: + + # --------------------------------------------------------------------------- + # Application DictIA + # --------------------------------------------------------------------------- + dictia: + image: dictia:latest + container_name: dictia + restart: unless-stopped + ports: + - "8899:8899" + env_file: + - ../.env + environment: + - LOG_LEVEL=ERROR + volumes: + - ../uploads:/data/uploads + - ../instance:/data/instance + # Décommenter pour l'export automatique : + # - ../exports:/data/exports + # Décommenter pour le traitement automatique : + # - ../auto-process:/data/auto-process + depends_on: + - whisperx-asr + - ollama + networks: + - dictia-net + + # --------------------------------------------------------------------------- + # WhisperX ASR — Transcription locale (WhisperX Large-v3) + # RTX 5070 Ti : BATCH_SIZE=32, COMPUTE_TYPE=float16 + # --------------------------------------------------------------------------- + whisperx-asr: + image: murtazanasir/whisperx-asr-service:latest + container_name: whisperx-asr + restart: unless-stopped + environment: + - HF_TOKEN=${HF_TOKEN} + - DEVICE=cuda + - COMPUTE_TYPE=float16 + - BATCH_SIZE=32 + - DEFAULT_MODEL=large-v3 + volumes: + - whisperx-models:/root/.cache + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: 1 + capabilities: [gpu] + networks: + - dictia-net + + # --------------------------------------------------------------------------- + # Ollama — LLM local Mistral 7B + # Résumés, points d'action, Q&A — 100% local, aucune donnée externe + # --------------------------------------------------------------------------- + ollama: + image: ollama/ollama:latest + container_name: ollama + restart: unless-stopped + volumes: + - ollama-models:/root/.ollama + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: 1 + capabilities: [gpu] + networks: + - dictia-net + +networks: + dictia-net: + driver: bridge + +volumes: + whisperx-models: + driver: local + ollama-models: + driver: local diff --git a/deployment/profiles/docker-compose.dictia8.yml b/deployment/profiles/docker-compose.dictia8.yml new file mode 100644 index 0000000..dc4c6ed --- /dev/null +++ b/deployment/profiles/docker-compose.dictia8.yml @@ -0,0 +1,75 @@ +# ============================================================================= +# DictIA 8 — Docker Compose +# GPU : RTX 5060 (8 Go VRAM) +# ============================================================================= +# +# Services : +# - dictia : Application principale DictIA +# - whisperx-asr : Service de transcription WhisperX Large-v3 +# +# Démarrage : +# 1. cp config/env.dictia8.example .env +# 2. Remplir TEXT_MODEL_API_KEY dans .env +# 3. docker compose -f config/docker-compose.dictia8.yml up -d +# ============================================================================= + +services: + + # --------------------------------------------------------------------------- + # Application DictIA + # --------------------------------------------------------------------------- + dictia: + image: dictia:latest + container_name: dictia + restart: unless-stopped + ports: + - "8899:8899" + env_file: + - ../.env + environment: + - LOG_LEVEL=ERROR + volumes: + - ../uploads:/data/uploads + - ../instance:/data/instance + # Décommenter pour l'export automatique : + # - ../exports:/data/exports + # Décommenter pour le traitement automatique : + # - ../auto-process:/data/auto-process + depends_on: + - whisperx-asr + networks: + - dictia-net + + # --------------------------------------------------------------------------- + # WhisperX ASR — Transcription locale (WhisperX Large-v3) + # RTX 5060 : BATCH_SIZE=16, COMPUTE_TYPE=float16 + # --------------------------------------------------------------------------- + whisperx-asr: + image: murtazanasir/whisperx-asr-service:latest + container_name: whisperx-asr + restart: unless-stopped + environment: + - HF_TOKEN=${HF_TOKEN} + - DEVICE=cuda + - COMPUTE_TYPE=float16 + - BATCH_SIZE=16 + - DEFAULT_MODEL=large-v3 + volumes: + - whisperx-models:/root/.cache + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: 1 + capabilities: [gpu] + networks: + - dictia-net + +networks: + dictia-net: + driver: bridge + +volumes: + whisperx-models: + driver: local diff --git a/deployment/profiles/env.dictia16.example b/deployment/profiles/env.dictia16.example new file mode 100644 index 0000000..8335fe1 --- /dev/null +++ b/deployment/profiles/env.dictia16.example @@ -0,0 +1,134 @@ +# ============================================================================= +# DictIA 16 — Configuration (.env) +# GPU : RTX 5070 Ti (16 Go VRAM) +# ============================================================================= +# +# Architecture : +# - Transcription : WhisperX Large-v3 (local, ~5,5 Go VRAM) +# - LLM (résumés) : Mistral 7B local via Ollama (~6,4 Go VRAM) +# - Mode : Séquentiel (transcription puis résumé) +# - Total VRAM : ~11,9 Go / 16 Go (marge ~4,1 Go) +# +# Démarrage rapide : +# 1. cp config/env.dictia16.example .env +# 2. Aucune clé API nécessaire — tout tourne en local +# 3. docker compose -f config/docker-compose.dictia16.yml up -d +# ============================================================================= + +# ============================================================================= +# MODÈLE DE TEXTE — Résumés, titres, chat (LLM LOCAL) +# ============================================================================= +# DictIA 16 utilise Mistral 7B en local via Ollama. +# Aucune donnée ne quitte le serveur — 100% privé. + +TEXT_MODEL_BASE_URL=http://ollama:11434/v1 +TEXT_MODEL_API_KEY=not-required +TEXT_MODEL_NAME=mistral + +# --- Modèle de chat séparé (optionnel) --- +# Même modèle par défaut, mais peut être changé pour un modèle plus rapide. +# CHAT_MODEL_API_KEY=not-required +# CHAT_MODEL_BASE_URL=http://ollama:11434/v1 +# CHAT_MODEL_NAME=mistral + +# ============================================================================= +# TRANSCRIPTION — WhisperX ASR local (REQUIS) +# ============================================================================= +# WhisperX tourne en local dans un conteneur Docker séparé. +# Le service ASR est défini dans docker-compose.dictia16.yml. + +ASR_BASE_URL=http://whisperx-asr:9000 + +# Diarisation (identification automatique des locuteurs) — recommandé +ASR_DIARIZE=true +ASR_RETURN_SPEAKER_EMBEDDINGS=true + +# Nombre de locuteurs attendus (optionnel — aide la précision) +# ASR_MIN_SPEAKERS=1 +# ASR_MAX_SPEAKERS=6 + +# ============================================================================= +# PARAMÈTRES ADMINISTRATEUR +# ============================================================================= +ADMIN_USERNAME=admin +ADMIN_EMAIL=admin@votreentreprise.com +ADMIN_PASSWORD=changeme + +# ============================================================================= +# ACCÈS ET INSCRIPTION +# ============================================================================= +# Désactiver l'inscription publique (accès sur invitation uniquement) +ALLOW_REGISTRATION=false + +# Restreindre l'inscription aux domaines autorisés +# Exemple : REGISTRATION_ALLOWED_DOMAINS=votreentreprise.com +REGISTRATION_ALLOWED_DOMAINS= + +# ============================================================================= +# FUSEAU HORAIRE +# ============================================================================= +# Exemples : America/Toronto, America/Montreal, America/New_York, UTC +TIMEZONE="America/Toronto" + +# ============================================================================= +# LIMITES DE TOKENS +# ============================================================================= +SUMMARY_MAX_TOKENS=8000 +CHAT_MAX_TOKENS=5000 + +# ============================================================================= +# COMPRESSION AUDIO +# ============================================================================= +AUDIO_COMPRESS_UPLOADS=true +AUDIO_CODEC=mp3 +AUDIO_BITRATE=128k + +# ============================================================================= +# FONCTIONNALITÉS OPTIONNELLES +# ============================================================================= + +# Inquire Mode — recherche IA sur tous les enregistrements +# Peut être activé sur DictIA 16 (plus de VRAM disponible) +ENABLE_INQUIRE_MODE=false + +# Traitement automatique de fichiers (dossier surveillé) +ENABLE_AUTO_PROCESSING=false +# AUTO_PROCESS_MODE=admin_only +# AUTO_PROCESS_WATCH_DIR=/data/auto-process + +# Export automatique +ENABLE_AUTO_EXPORT=false +# AUTO_EXPORT_DIR=/data/exports +# AUTO_EXPORT_TRANSCRIPTION=true +# AUTO_EXPORT_SUMMARY=true + +# Suppression automatique / rétention +ENABLE_AUTO_DELETION=false +# GLOBAL_RETENTION_DAYS=90 +# DELETION_MODE=audio_only + +# ============================================================================= +# PARTAGE +# ============================================================================= +ENABLE_INTERNAL_SHARING=false +ENABLE_PUBLIC_SHARING=true +USERS_CAN_DELETE=true + +# ============================================================================= +# FILES D'ATTENTE DE TRAITEMENT +# ============================================================================= +JOB_QUEUE_WORKERS=2 +SUMMARY_QUEUE_WORKERS=2 +JOB_MAX_RETRIES=3 + +# ============================================================================= +# BASE DE DONNÉES ET STOCKAGE +# ============================================================================= +SQLALCHEMY_DATABASE_URI=sqlite:////data/instance/transcriptions.db +UPLOAD_FOLDER=/data/uploads + +# ============================================================================= +# JOURNALISATION +# ============================================================================= +# ERROR = production (minimal), INFO = débogage, DEBUG = développement +LOG_LEVEL=ERROR diff --git a/deployment/profiles/env.dictia8.example b/deployment/profiles/env.dictia8.example new file mode 100644 index 0000000..3efbbe5 --- /dev/null +++ b/deployment/profiles/env.dictia8.example @@ -0,0 +1,126 @@ +# ============================================================================= +# DictIA 8 — Configuration (.env) +# GPU : RTX 5060 (8 Go VRAM) +# ============================================================================= +# +# Architecture : +# - Transcription : WhisperX Large-v3 (local, ~5,5 Go VRAM) +# - LLM (résumés) : API cloud via OpenRouter (VRAM insuffisante pour LLM local) +# +# Démarrage rapide : +# 1. cp config/env.dictia8.example .env +# 2. Remplir TRANSCRIPTION_API_KEY et TEXT_MODEL_API_KEY +# 3. docker compose -f config/docker-compose.dictia8.yml up -d +# ============================================================================= + +# ============================================================================= +# MODÈLE DE TEXTE — Résumés, titres, chat (REQUIS) +# ============================================================================= +# DictIA 8 utilise un LLM cloud via OpenRouter (VRAM insuffisante pour LLM local). +# Inscrivez-vous sur https://openrouter.ai pour obtenir une clé API. + +TEXT_MODEL_BASE_URL=https://openrouter.ai/api/v1 +TEXT_MODEL_API_KEY=votre_cle_openrouter +TEXT_MODEL_NAME=openai/gpt-4o-mini + +# ============================================================================= +# TRANSCRIPTION — WhisperX ASR local (REQUIS) +# ============================================================================= +# WhisperX tourne en local dans un conteneur Docker séparé. +# Le service ASR est défini dans docker-compose.dictia8.yml. + +ASR_BASE_URL=http://whisperx-asr:9000 + +# Diarisation (identification automatique des locuteurs) — recommandé +ASR_DIARIZE=true +ASR_RETURN_SPEAKER_EMBEDDINGS=true + +# Nombre de locuteurs attendus (optionnel — aide la précision) +# ASR_MIN_SPEAKERS=1 +# ASR_MAX_SPEAKERS=6 + +# ============================================================================= +# PARAMÈTRES ADMINISTRATEUR +# ============================================================================= +ADMIN_USERNAME=admin +ADMIN_EMAIL=admin@votreentreprise.com +ADMIN_PASSWORD=changeme + +# ============================================================================= +# ACCÈS ET INSCRIPTION +# ============================================================================= +# Désactiver l'inscription publique (accès sur invitation uniquement) +ALLOW_REGISTRATION=false + +# Restreindre l'inscription aux domaines autorisés +# Exemple : REGISTRATION_ALLOWED_DOMAINS=votreentreprise.com +REGISTRATION_ALLOWED_DOMAINS= + +# ============================================================================= +# FUSEAU HORAIRE +# ============================================================================= +# Exemples : America/Toronto, America/Montreal, America/New_York, UTC +TIMEZONE="America/Toronto" + +# ============================================================================= +# LIMITES DE TOKENS +# ============================================================================= +SUMMARY_MAX_TOKENS=8000 +CHAT_MAX_TOKENS=5000 + +# ============================================================================= +# COMPRESSION AUDIO +# ============================================================================= +AUDIO_COMPRESS_UPLOADS=true +AUDIO_CODEC=mp3 +AUDIO_BITRATE=128k + +# ============================================================================= +# FONCTIONNALITÉS OPTIONNELLES +# ============================================================================= + +# Inquire Mode — recherche IA sur tous les enregistrements +# Désactivé sur DictIA 8 (VRAM insuffisante pour embeddings locaux) +ENABLE_INQUIRE_MODE=false + +# Traitement automatique de fichiers (dossier surveillé) +ENABLE_AUTO_PROCESSING=false +# AUTO_PROCESS_MODE=admin_only +# AUTO_PROCESS_WATCH_DIR=/data/auto-process + +# Export automatique +ENABLE_AUTO_EXPORT=false +# AUTO_EXPORT_DIR=/data/exports +# AUTO_EXPORT_TRANSCRIPTION=true +# AUTO_EXPORT_SUMMARY=true + +# Suppression automatique / rétention +ENABLE_AUTO_DELETION=false +# GLOBAL_RETENTION_DAYS=90 +# DELETION_MODE=audio_only + +# ============================================================================= +# PARTAGE +# ============================================================================= +ENABLE_INTERNAL_SHARING=false +ENABLE_PUBLIC_SHARING=true +USERS_CAN_DELETE=true + +# ============================================================================= +# FILES D'ATTENTE DE TRAITEMENT +# ============================================================================= +JOB_QUEUE_WORKERS=2 +SUMMARY_QUEUE_WORKERS=2 +JOB_MAX_RETRIES=3 + +# ============================================================================= +# BASE DE DONNÉES ET STOCKAGE +# ============================================================================= +SQLALCHEMY_DATABASE_URI=sqlite:////data/instance/transcriptions.db +UPLOAD_FOLDER=/data/uploads + +# ============================================================================= +# JOURNALISATION +# ============================================================================= +# ERROR = production (minimal), INFO = débogage, DEBUG = développement +LOG_LEVEL=ERROR diff --git a/deployment/security/docker-daemon.json b/deployment/security/docker-daemon.json new file mode 100644 index 0000000..217a460 --- /dev/null +++ b/deployment/security/docker-daemon.json @@ -0,0 +1,8 @@ +{ + "log-driver": "json-file", + "log-opts": { + "max-size": "10m", + "max-file": "3" + }, + "storage-driver": "overlay2" +} diff --git a/deployment/security/docker-iptables.service b/deployment/security/docker-iptables.service new file mode 100644 index 0000000..5a78b28 --- /dev/null +++ b/deployment/security/docker-iptables.service @@ -0,0 +1,12 @@ +[Unit] +Description=DictIA Docker iptables rules +After=docker.service tailscaled.service +Requires=docker.service + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/bin/bash /opt/dictia/deployment/security/iptables-rules.sh + +[Install] +WantedBy=multi-user.target diff --git a/deployment/security/iptables-rules.sh b/deployment/security/iptables-rules.sh new file mode 100644 index 0000000..376cd7c --- /dev/null +++ b/deployment/security/iptables-rules.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# DictIA — iptables rules for cloud VPS +# +# Allows Docker internal traffic to reach the ASR proxy on port 9090. +# Blocks direct external access to Docker container IPs. +# Tailscale + UFW handle the main firewall — this script adds Docker-specific rules. +# +# Usage: sudo bash iptables-rules.sh +set -euo pipefail + +echo "=== DictIA iptables rules ===" + +# Allow Docker containers (172.16.0.0/12) to reach ASR proxy on port 9090 +# This rule goes BEFORE the default DROP policy so containers can talk to the proxy +iptables -C INPUT -s 172.16.0.0/12 -p tcp --dport 9090 -j ACCEPT 2>/dev/null \ + || iptables -I INPUT 1 -s 172.16.0.0/12 -p tcp --dport 9090 -j ACCEPT + +# Block direct external access to Docker container IPs (raw table, before conntrack) +# Protects containers on non-default bridge networks (e.g., dictia-network) +for NETWORK_ID in $(docker network ls --filter driver=bridge --format '{{.ID}}' 2>/dev/null); do + BRIDGE=$(docker network inspect "$NETWORK_ID" --format '{{.Options.com.docker.network.bridge.name}}' 2>/dev/null || echo "") + [ -z "$BRIDGE" ] && continue + [ "$BRIDGE" = "docker0" ] && continue + + for CONTAINER_IP in $(docker network inspect "$NETWORK_ID" \ + --format '{{range .Containers}}{{.IPv4Address}} {{end}}' 2>/dev/null); do + IP="${CONTAINER_IP%/*}" + [ -z "$IP" ] && continue + iptables -t raw -C PREROUTING -d "$IP" ! -i "$BRIDGE" -j DROP 2>/dev/null \ + || iptables -t raw -A PREROUTING -d "$IP" ! -i "$BRIDGE" -j DROP + echo " Protected $IP on $BRIDGE" + done +done + +echo "Rules applied. Tailscale + Docker internal traffic allowed." +echo "Verify with: sudo iptables -L -n -t raw" diff --git a/deployment/setup.sh b/deployment/setup.sh new file mode 100755 index 0000000..dbf7fe3 --- /dev/null +++ b/deployment/setup.sh @@ -0,0 +1,300 @@ +#!/usr/bin/env bash +# DictIA — Main setup script +# +# Interactive installer that detects hardware and configures the appropriate +# deployment profile (cloud, local-cpu, local-gpu). +# +# Usage: +# bash deployment/setup.sh # Interactive mode +# bash deployment/setup.sh --profile cloud # Non-interactive +# bash deployment/setup.sh --profile local-gpu +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +PROFILE="" + +for arg in "$@"; do + case "$arg" in + --profile=*) PROFILE="${arg#*=}" ;; + --profile) shift_next=true ;; + *) + if [ "${shift_next:-false}" = true ]; then + PROFILE="$arg" + shift_next=false + fi + ;; + esac +done + +# --- Colors --- +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +CYAN='\033[0;36m' +NC='\033[0m' + +info() { echo -e "${CYAN}[INFO]${NC} $*"; } +ok() { echo -e "${GREEN}[OK]${NC} $*"; } +warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } +err() { echo -e "${RED}[ERROR]${NC} $*"; } + +echo +echo -e "${CYAN}========================================${NC}" +echo -e "${CYAN} DictIA — Setup${NC}" +echo -e "${CYAN}========================================${NC}" +echo + +# ========================================================================== +# 1. Hardware Detection +# ========================================================================== +info "Detecting hardware..." + +# Docker +if command -v docker &>/dev/null && docker info &>/dev/null; then + DOCKER_VERSION=$(docker --version | grep -oP '\d+\.\d+\.\d+' | head -1) + ok "Docker $DOCKER_VERSION" +else + err "Docker not found or not running." + echo " Install Docker: https://docs.docker.com/engine/install/" + exit 1 +fi + +# Docker Compose +if docker compose version &>/dev/null; then + COMPOSE_VERSION=$(docker compose version --short 2>/dev/null || echo "unknown") + ok "Docker Compose $COMPOSE_VERSION" +else + err "Docker Compose not found." + echo " Docker Compose V2 is required (comes with Docker Desktop or docker-compose-plugin)" + exit 1 +fi + +# GPU +HAS_GPU=false +if command -v nvidia-smi &>/dev/null; then + GPU_NAME=$(nvidia-smi --query-gpu=name --format=csv,noheader 2>/dev/null | head -1 || echo "") + if [ -n "$GPU_NAME" ]; then + HAS_GPU=true + ok "NVIDIA GPU: $GPU_NAME" + # Check nvidia-container-toolkit + if docker info 2>/dev/null | grep -qi nvidia; then + ok "nvidia-container-toolkit detected" + else + warn "nvidia-container-toolkit not detected. Required for local-gpu profile." + echo " Install: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html" + fi + fi +else + info "No NVIDIA GPU detected" +fi + +# RAM +if command -v free &>/dev/null; then + RAM_GB=$(free -g | awk '/Mem:/{print $2}') + info "RAM: ${RAM_GB}GB" +fi + +# Disk +DISK_AVAIL=$(df -h "$PROJECT_DIR" 2>/dev/null | awk 'NR==2{print $4}') +info "Disk available: $DISK_AVAIL" + +echo + +# ========================================================================== +# 2. Profile Selection +# ========================================================================== +if [ -z "$PROFILE" ]; then + echo -e "${CYAN}Select deployment profile:${NC}" + echo + echo " 1) cloud — VPS with ASR Proxy (GCP GPU on demand)" + echo " Best for: remote servers, pay-per-use GPU" + echo + echo " 2) local-gpu — Local NVIDIA GPU for transcription" + echo " Best for: dedicated GPU server, fastest" + if [ "$HAS_GPU" = false ]; then + echo -e " ${YELLOW}(No GPU detected on this machine)${NC}" + fi + echo + echo " 3) local-cpu — CPU-only transcription (slow)" + echo " Best for: testing, low-volume usage" + echo + read -rp "Choice [1-3]: " CHOICE + case "$CHOICE" in + 1) PROFILE="cloud" ;; + 2) PROFILE="local-gpu" ;; + 3) PROFILE="local-cpu" ;; + *) err "Invalid choice"; exit 1 ;; + esac +fi + +COMPOSE_FILE="$SCRIPT_DIR/docker/docker-compose.$PROFILE.yml" +if [ ! -f "$COMPOSE_FILE" ]; then + err "Compose file not found: $COMPOSE_FILE" + exit 1 +fi + +ok "Profile: $PROFILE" +echo + +# ========================================================================== +# 3. Generate .env +# ========================================================================== +ENV_FILE="$PROJECT_DIR/.env" + +if [ -f "$ENV_FILE" ]; then + warn ".env already exists. Keeping existing configuration." + echo " To reconfigure, delete .env and re-run setup." +else + info "Generating .env..." + + # Generate secret key + SECRET_KEY=$(python3 -c "import secrets; print(secrets.token_hex(32))" 2>/dev/null \ + || openssl rand -hex 32 2>/dev/null \ + || head -c 64 /dev/urandom | xxd -p | head -c 64) + + # Prompt for admin credentials + read -rp "Admin username [admin]: " ADMIN_USER + ADMIN_USER="${ADMIN_USER:-admin}" + read -rp "Admin email [admin@example.com]: " ADMIN_EMAIL + ADMIN_EMAIL="${ADMIN_EMAIL:-admin@example.com}" + read -rsp "Admin password: " ADMIN_PASS + echo + ADMIN_PASS="${ADMIN_PASS:-changeme}" + + # Prompt for text model API key + echo + info "DictIA needs a text/LLM API key for summaries, titles, and chat." + echo " Recommended: OpenRouter (https://openrouter.ai) — access to many models" + read -rp "Text model API key (or press Enter to skip): " TEXT_API_KEY + TEXT_API_KEY="${TEXT_API_KEY:-your_openrouter_api_key}" + + # HuggingFace token for diarization + if [ "$PROFILE" != "cloud" ]; then + echo + info "For speaker diarization, a HuggingFace token is needed." + echo " Get one at: https://huggingface.co/settings/tokens" + echo " Accept model: https://huggingface.co/pyannote/speaker-diarization-3.1" + read -rp "HuggingFace token (or press Enter to skip): " HF_TOKEN + HF_TOKEN="${HF_TOKEN:-}" + else + HF_TOKEN="" + fi + + # Write .env + cp "$SCRIPT_DIR/docker/.env.example" "$ENV_FILE" + sed -i "s|SECRET_KEY=.*|SECRET_KEY=$SECRET_KEY|" "$ENV_FILE" + sed -i "s|DICTIA_PROFILE=.*|DICTIA_PROFILE=$PROFILE|" "$ENV_FILE" + sed -i "s|ADMIN_USERNAME=.*|ADMIN_USERNAME=$ADMIN_USER|" "$ENV_FILE" + sed -i "s|ADMIN_EMAIL=.*|ADMIN_EMAIL=$ADMIN_EMAIL|" "$ENV_FILE" + sed -i "s|ADMIN_PASSWORD=.*|ADMIN_PASSWORD=$ADMIN_PASS|" "$ENV_FILE" + sed -i "s|TEXT_MODEL_API_KEY=.*|TEXT_MODEL_API_KEY=$TEXT_API_KEY|" "$ENV_FILE" + sed -i "s|HF_TOKEN=.*|HF_TOKEN=$HF_TOKEN|" "$ENV_FILE" + + ok ".env generated" +fi +echo + +# ========================================================================== +# 4. Create data directories +# ========================================================================== +info "Creating data directories..." +mkdir -p "$PROJECT_DIR/data/uploads" "$PROJECT_DIR/data/instance" +ok "data/uploads and data/instance created" +echo + +# ========================================================================== +# 5. Profile-specific setup +# ========================================================================== +case "$PROFILE" in + cloud) + info "Cloud profile — setting up ASR Proxy..." + if [ -f "$SCRIPT_DIR/asr-proxy/setup.sh" ]; then + echo " Run the ASR proxy setup separately:" + echo " bash $SCRIPT_DIR/asr-proxy/setup.sh" + fi + echo + info "Setting up iptables rules..." + if [ -f "$SCRIPT_DIR/security/iptables-rules.sh" ] && [ "$(id -u)" -eq 0 ]; then + bash "$SCRIPT_DIR/security/iptables-rules.sh" + else + echo " Run as root: sudo bash $SCRIPT_DIR/security/iptables-rules.sh" + fi + echo + info "Setting up Tailscale Serve..." + if command -v tailscale &>/dev/null; then + echo " Run: bash $SCRIPT_DIR/config/tailscale/setup-serve.sh" + else + warn "Tailscale not installed." + echo " Install: curl -fsSL https://tailscale.com/install.sh | sh" + fi + ;; + local-gpu) + info "Local GPU profile — verifying NVIDIA runtime..." + if docker info 2>/dev/null | grep -qi nvidia; then + ok "NVIDIA Docker runtime available" + # Quick GPU test + if docker run --rm --gpus all nvidia/cuda:12.0-base nvidia-smi &>/dev/null; then + ok "GPU test passed" + else + warn "GPU test failed. Check nvidia-container-toolkit installation." + fi + else + err "NVIDIA Docker runtime not found." + echo " Install nvidia-container-toolkit and restart Docker." + echo " https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html" + fi + ;; + local-cpu) + warn "CPU-only transcription is significantly slower than GPU." + echo " Expect ~10x real-time (1h audio = ~10h processing)." + echo " Consider local-gpu or cloud profile for better performance." + ;; +esac + +echo + +# ========================================================================== +# 6. Build and start +# ========================================================================== +info "Building DictIA Docker image..." +cd "$PROJECT_DIR" +docker build -t innova-ai/dictia:latest . +ok "Image built" + +echo +info "Starting DictIA ($PROFILE profile)..." +docker compose -f "$COMPOSE_FILE" up -d +ok "Containers started" + +# ========================================================================== +# 7. Health check +# ========================================================================== +echo +info "Waiting for DictIA to become healthy..." +RETRIES=30 +for i in $(seq 1 $RETRIES); do + if curl -sf -o /dev/null -m 5 http://localhost:8899/health 2>/dev/null; then + ok "DictIA is healthy!" + break + fi + if [ "$i" -eq "$RETRIES" ]; then + warn "Health check timeout. Check logs: docker compose -f $COMPOSE_FILE logs" + fi + sleep 5 +done + +echo +echo -e "${GREEN}========================================${NC}" +echo -e "${GREEN} DictIA is ready!${NC}" +echo -e "${GREEN}========================================${NC}" +echo +echo " App: http://localhost:8899" +echo " Profile: $PROFILE" +echo " Compose: $COMPOSE_FILE" +echo +echo " Tools:" +echo " Update: bash deployment/tools/update.sh" +echo " Backup: bash deployment/tools/backup.sh" +echo " Health check: bash deployment/tools/health-check.sh" +echo diff --git a/deployment/tools/backup.sh b/deployment/tools/backup.sh new file mode 100644 index 0000000..17ee50a --- /dev/null +++ b/deployment/tools/backup.sh @@ -0,0 +1,89 @@ +#!/usr/bin/env bash +# DictIA — Backup script +# +# Creates a timestamped backup of data, env, and Docker volumes. +# Keeps the last N backups (default: 5). +# +# Usage: bash backup.sh [BACKUP_DIR] +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +PROJECT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)" +BACKUP_BASE="${1:-$PROJECT_DIR/backups}" +KEEP_COUNT=5 +TIMESTAMP=$(date +%Y%m%d-%H%M%S) +BACKUP_DIR="$BACKUP_BASE/dictia-$TIMESTAMP" + +echo "=== DictIA Backup ===" +echo "Project: $PROJECT_DIR" +echo "Backup: $BACKUP_DIR" +echo + +mkdir -p "$BACKUP_DIR" + +# 1. Data directory +if [ -d "$PROJECT_DIR/data" ]; then + echo "[1/4] Backing up data/..." + cp -a "$PROJECT_DIR/data" "$BACKUP_DIR/data" +else + echo "[1/4] No data/ directory found, skipping." +fi + +# 2. Environment file +if [ -f "$PROJECT_DIR/.env" ]; then + echo "[2/4] Backing up .env..." + cp "$PROJECT_DIR/.env" "$BACKUP_DIR/dot-env" +else + echo "[2/4] No .env found, skipping." +fi + +# 3. ASR Proxy stats +ASR_STATS="$PROJECT_DIR/deployment/asr-proxy/usage-stats.json" +if [ -f "$ASR_STATS" ]; then + echo "[3/4] Backing up ASR proxy stats..." + cp "$ASR_STATS" "$BACKUP_DIR/asr-usage-stats.json" +else + echo "[3/4] No ASR proxy stats, skipping." +fi + +# 4. Docker volumes (if using managed volumes) +echo "[4/4] Checking Docker volumes..." +if docker volume ls --format '{{.Name}}' 2>/dev/null | grep -q "whisperx-cache"; then + echo " Exporting whisperx-cache volume..." + docker run --rm -v whisperx-cache:/source -v "$BACKUP_DIR":/backup \ + alpine tar czf /backup/whisperx-cache.tar.gz -C /source . 2>/dev/null || true +fi + +# Write manifest +cat > "$BACKUP_DIR/manifest.json" </dev/null | wc -l) +if [ "$BACKUP_COUNT" -gt "$KEEP_COUNT" ]; then + echo + echo "Rotating backups (keeping last $KEEP_COUNT)..." + ls -1t "$BACKUP_BASE"/dictia-*.tar.gz | tail -n +"$((KEEP_COUNT + 1))" | xargs rm -f +fi + +echo +echo "=== Backup complete ===" diff --git a/deployment/tools/health-check.sh b/deployment/tools/health-check.sh new file mode 100644 index 0000000..8075289 --- /dev/null +++ b/deployment/tools/health-check.sh @@ -0,0 +1,157 @@ +#!/usr/bin/env bash +# DictIA — Health check diagnostic +# +# Checks Docker, containers, endpoints, disk, RAM, and GPU. +# +# Usage: +# bash health-check.sh # Human-readable output +# bash health-check.sh --json # JSON output +# bash health-check.sh --quiet # Exit code only (0=ok, 1=issue) +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +PROJECT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)" +OUTPUT="human" +ISSUES=0 + +for arg in "$@"; do + case "$arg" in + --json) OUTPUT="json" ;; + --quiet) OUTPUT="quiet" ;; + esac +done + +declare -A CHECKS + +check() { + local name="$1" + local status="$2" + local detail="${3:-}" + CHECKS["$name"]="$status|$detail" + if [ "$status" = "error" ] || [ "$status" = "warning" ]; then + ISSUES=$((ISSUES + 1)) + fi +} + +# --- Docker --- +if command -v docker &>/dev/null && docker info &>/dev/null; then + check "docker" "ok" "Docker daemon running" +else + check "docker" "error" "Docker not available" +fi + +# --- Containers --- +DICTIA_STATUS=$(docker inspect --format='{{.State.Health.Status}}' dictia 2>/dev/null || echo "not_found") +if [ "$DICTIA_STATUS" = "healthy" ]; then + check "container_dictia" "ok" "healthy" +elif [ "$DICTIA_STATUS" = "not_found" ]; then + check "container_dictia" "error" "container not found" +else + check "container_dictia" "warning" "$DICTIA_STATUS" +fi + +WHISPERX_STATUS=$(docker inspect --format='{{.State.Status}}' whisperx-asr 2>/dev/null || echo "not_found") +if [ "$WHISPERX_STATUS" = "running" ]; then + check "container_whisperx" "ok" "running" +elif [ "$WHISPERX_STATUS" = "not_found" ]; then + check "container_whisperx" "info" "not present (cloud profile?)" +else + check "container_whisperx" "warning" "$WHISPERX_STATUS" +fi + +# --- Endpoints --- +if curl -sf -o /dev/null -m 5 http://localhost:8899/health 2>/dev/null; then + check "endpoint_dictia" "ok" "http://localhost:8899 responding" +else + check "endpoint_dictia" "error" "http://localhost:8899 not responding" +fi + +if curl -sf -o /dev/null -m 5 http://localhost:9000/health 2>/dev/null; then + check "endpoint_whisperx" "ok" "http://localhost:9000 responding" +else + check "endpoint_whisperx" "info" "http://localhost:9000 not responding" +fi + +if curl -sf -o /dev/null -m 5 http://localhost:9090/health 2>/dev/null; then + check "endpoint_asr_proxy" "ok" "http://localhost:9090 responding" +else + check "endpoint_asr_proxy" "info" "http://localhost:9090 not responding" +fi + +# --- Disk --- +DISK_USED=$(df -h "$PROJECT_DIR" 2>/dev/null | awk 'NR==2{print $5}' | tr -d '%') +if [ -n "$DISK_USED" ]; then + if [ "$DISK_USED" -gt 90 ]; then + check "disk" "error" "${DISK_USED}% used" + elif [ "$DISK_USED" -gt 80 ]; then + check "disk" "warning" "${DISK_USED}% used" + else + check "disk" "ok" "${DISK_USED}% used" + fi +fi + +# --- RAM --- +if command -v free &>/dev/null; then + MEM_TOTAL=$(free -m | awk '/Mem:/{print $2}') + MEM_AVAIL=$(free -m | awk '/Mem:/{print $7}') + MEM_USED_PCT=$(( (MEM_TOTAL - MEM_AVAIL) * 100 / MEM_TOTAL )) + if [ "$MEM_USED_PCT" -gt 90 ]; then + check "memory" "warning" "${MEM_USED_PCT}% used (${MEM_AVAIL}MB available)" + else + check "memory" "ok" "${MEM_USED_PCT}% used (${MEM_AVAIL}MB available)" + fi +fi + +# --- GPU --- +if command -v nvidia-smi &>/dev/null; then + GPU_INFO=$(nvidia-smi --query-gpu=name,memory.used,memory.total --format=csv,noheader 2>/dev/null || echo "error") + if [ "$GPU_INFO" != "error" ]; then + check "gpu" "ok" "$GPU_INFO" + else + check "gpu" "warning" "nvidia-smi present but query failed" + fi +fi + +# --- Output --- +if [ "$OUTPUT" = "json" ]; then + echo "{" + echo " \"timestamp\": \"$(date -Is)\"," + echo " \"issues\": $ISSUES," + echo " \"checks\": {" + FIRST=true + for name in "${!CHECKS[@]}"; do + IFS='|' read -r status detail <<< "${CHECKS[$name]}" + if [ "$FIRST" = true ]; then + FIRST=false + else + echo "," + fi + printf ' "%s": {"status": "%s", "detail": "%s"}' "$name" "$status" "$detail" + done + echo + echo " }" + echo "}" +elif [ "$OUTPUT" = "quiet" ]; then + exit $( [ "$ISSUES" -eq 0 ] && echo 0 || echo 1 ) +else + echo "=== DictIA Health Check ===" + echo + for name in docker container_dictia container_whisperx endpoint_dictia endpoint_whisperx endpoint_asr_proxy disk memory gpu; do + if [ -n "${CHECKS[$name]+x}" ]; then + IFS='|' read -r status detail <<< "${CHECKS[$name]}" + case "$status" in + ok) ICON="[OK]" ;; + warning) ICON="[!!]" ;; + error) ICON="[ERR]" ;; + info) ICON="[--]" ;; + esac + printf " %-22s %s %s\n" "$name" "$ICON" "$detail" + fi + done + echo + if [ "$ISSUES" -eq 0 ]; then + echo "All checks passed." + else + echo "$ISSUES issue(s) found." + fi +fi diff --git a/deployment/tools/restore.sh b/deployment/tools/restore.sh new file mode 100644 index 0000000..4c9d46a --- /dev/null +++ b/deployment/tools/restore.sh @@ -0,0 +1,101 @@ +#!/usr/bin/env bash +# DictIA — Restore script +# +# Restores a DictIA backup archive created by backup.sh. +# +# Usage: bash restore.sh [PROJECT_DIR] +set -euo pipefail + +ARCHIVE="${1:-}" +PROJECT_DIR="${2:-$(cd "$(dirname "$0")/../.." && pwd)}" + +if [ -z "$ARCHIVE" ] || [ ! -f "$ARCHIVE" ]; then + echo "Usage: bash restore.sh [project-dir]" + echo + echo "Available backups:" + ls -1t "$PROJECT_DIR/backups"/dictia-*.tar.gz 2>/dev/null | head -5 || echo " (none found)" + exit 1 +fi + +echo "=== DictIA Restore ===" +echo "Archive: $ARCHIVE" +echo "Target: $PROJECT_DIR" +echo + +# Validate archive +echo "Validating archive..." +TMPDIR=$(mktemp -d) +tar xzf "$ARCHIVE" -C "$TMPDIR" +BACKUP_DIR=$(ls -1d "$TMPDIR"/dictia-* | head -1) + +if [ ! -f "$BACKUP_DIR/manifest.json" ]; then + echo "ERROR: Invalid backup archive (no manifest.json)" + rm -rf "$TMPDIR" + exit 1 +fi + +echo "Manifest:" +cat "$BACKUP_DIR/manifest.json" +echo +echo + +# Confirmation +read -rp "This will overwrite current data. Continue? [y/N] " CONFIRM +if [ "$CONFIRM" != "y" ] && [ "$CONFIRM" != "Y" ]; then + echo "Aborted." + rm -rf "$TMPDIR" + exit 0 +fi + +# Stop services +echo +echo "Stopping DictIA services..." +COMPOSE_FILE="" +for f in cloud local-cpu local-gpu; do + if [ -f "$PROJECT_DIR/deployment/docker/docker-compose.$f.yml" ]; then + COMPOSE_FILE="$PROJECT_DIR/deployment/docker/docker-compose.$f.yml" + fi +done +if [ -n "$COMPOSE_FILE" ]; then + docker compose -f "$COMPOSE_FILE" down 2>/dev/null || true +fi + +# Restore data +if [ -d "$BACKUP_DIR/data" ]; then + echo "Restoring data/..." + rm -rf "$PROJECT_DIR/data" + cp -a "$BACKUP_DIR/data" "$PROJECT_DIR/data" +fi + +# Restore .env +if [ -f "$BACKUP_DIR/dot-env" ]; then + echo "Restoring .env..." + cp "$BACKUP_DIR/dot-env" "$PROJECT_DIR/.env" +fi + +# Restore ASR stats +if [ -f "$BACKUP_DIR/asr-usage-stats.json" ]; then + echo "Restoring ASR proxy stats..." + cp "$BACKUP_DIR/asr-usage-stats.json" "$PROJECT_DIR/deployment/asr-proxy/usage-stats.json" +fi + +# Restore Docker volumes +if [ -f "$BACKUP_DIR/whisperx-cache.tar.gz" ]; then + echo "Restoring whisperx-cache volume..." + docker volume create whisperx-cache 2>/dev/null || true + docker run --rm -v whisperx-cache:/target -v "$BACKUP_DIR":/backup \ + alpine sh -c "cd /target && tar xzf /backup/whisperx-cache.tar.gz" 2>/dev/null || true +fi + +# Cleanup +rm -rf "$TMPDIR" + +# Restart services +echo +echo "Restarting DictIA..." +if [ -n "$COMPOSE_FILE" ]; then + docker compose -f "$COMPOSE_FILE" up -d +fi + +echo +echo "=== Restore complete ===" diff --git a/deployment/tools/update.sh b/deployment/tools/update.sh new file mode 100644 index 0000000..54be4b7 --- /dev/null +++ b/deployment/tools/update.sh @@ -0,0 +1,105 @@ +#!/usr/bin/env bash +# DictIA — Update script +# +# Pulls latest code, rebuilds Docker image, and restarts services. +# Detects the active deployment profile automatically. +# +# Usage: bash update.sh [--no-pull] [--no-build] +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +PROJECT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)" +NO_PULL=false +NO_BUILD=false + +for arg in "$@"; do + case "$arg" in + --no-pull) NO_PULL=true ;; + --no-build) NO_BUILD=true ;; + *) echo "Unknown option: $arg"; exit 1 ;; + esac +done + +echo "=== DictIA Update ===" +echo "Project: $PROJECT_DIR" +echo + +# 1. Detect active compose file +COMPOSE_FILE="" +PROFILE="" +for f in cloud local-cpu local-gpu; do + CF="$PROJECT_DIR/deployment/docker/docker-compose.$f.yml" + if [ -f "$CF" ] && docker compose -f "$CF" ps --quiet 2>/dev/null | grep -q .; then + COMPOSE_FILE="$CF" + PROFILE="$f" + break + fi +done + +if [ -z "$COMPOSE_FILE" ]; then + # Fallback: check .env for profile + if [ -f "$PROJECT_DIR/.env" ]; then + PROFILE=$(grep -E '^DICTIA_PROFILE=' "$PROJECT_DIR/.env" 2>/dev/null | cut -d= -f2 || echo "cloud") + fi + PROFILE="${PROFILE:-cloud}" + COMPOSE_FILE="$PROJECT_DIR/deployment/docker/docker-compose.$PROFILE.yml" +fi + +echo "Profile: $PROFILE" +echo "Compose: $COMPOSE_FILE" +echo + +# 2. Git pull +if [ "$NO_PULL" = false ]; then + echo "[1/5] Pulling latest code..." + cd "$PROJECT_DIR" + git pull origin dictia-branding +else + echo "[1/5] Skipping git pull (--no-pull)" +fi + +# 3. Rebuild DictIA image +if [ "$NO_BUILD" = false ]; then + echo "[2/5] Building DictIA image..." + cd "$PROJECT_DIR" + docker build -t innova-ai/dictia:latest . +else + echo "[2/5] Skipping build (--no-build)" +fi + +# 3b. Pull upstream images (WhisperX) if local profile +if [ "$PROFILE" != "cloud" ] && [ "$NO_BUILD" = false ]; then + echo "[3/5] Pulling upstream images (WhisperX)..." + docker compose -f "$COMPOSE_FILE" pull whisperx-asr 2>/dev/null || true +else + echo "[3/5] Skipping upstream pull (cloud profile or --no-build)" +fi + +# 4. Restart containers +echo "[4/5] Restarting containers..." +docker compose -f "$COMPOSE_FILE" down +docker compose -f "$COMPOSE_FILE" up -d + +# 5. Wait for health +echo "[5/5] Waiting for health check..." +RETRIES=30 +for i in $(seq 1 $RETRIES); do + if docker compose -f "$COMPOSE_FILE" ps | grep -q "healthy"; then + echo " DictIA is healthy!" + break + fi + if [ "$i" -eq "$RETRIES" ]; then + echo " WARNING: Health check timeout. Check: docker compose -f $COMPOSE_FILE logs" + fi + sleep 5 +done + +# Cleanup dangling images +echo +echo "Cleaning up old images..." +docker image prune -f 2>/dev/null || true + +echo +echo "=== Update complete ===" +echo "DictIA: http://localhost:8899" +docker compose -f "$COMPOSE_FILE" ps diff --git a/requirements-embeddings.txt b/requirements-embeddings.txt new file mode 100644 index 0000000..81a9a1e --- /dev/null +++ b/requirements-embeddings.txt @@ -0,0 +1,2 @@ +sentence-transformers==2.7.0 +huggingface-hub>=0.19.0 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..3f53295 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,25 @@ +flask==2.3.3 +flask-sqlalchemy==3.1.1 +flask-login==0.6.3 +flask-wtf==1.2.2 +flask-bcrypt==1.0.1 +Flask-Limiter==3.5.0 +flask-openapi3>=3.0.0 +pydantic>=2.0.0 +authlib>=1.3.0 +itsdangerous>=2.1.0 +email-validator==2.2.0 +openai>=2.2.0 +pywebpush==1.14.0 +werkzeug==2.3.7 +gunicorn==21.2.0 +python-dotenv==1.0.0 +markdown==3.5.1 +pytz==2024.1 +Babel==2.12.1 +bleach==6.1.0 +python-docx==1.1.0 +numpy==1.24.3 +scikit-learn==1.3.0 +scipy<1.15 +psycopg2-binary>=2.9.0 diff --git a/scripts/create_admin.py b/scripts/create_admin.py new file mode 100644 index 0000000..62b4917 --- /dev/null +++ b/scripts/create_admin.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 + +import os +import sys +import getpass +from email_validator import validate_email, EmailNotValidError + +# Add parent directory to path for imports +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +# Try to import from app context +try: + from flask import current_app + app = current_app._get_current_object() + with app.app_context(): + db = app.extensions['sqlalchemy'].db + User = app.extensions['sqlalchemy'].db.metadata.tables['user'] + bcrypt = app.extensions.get('bcrypt') +except (RuntimeError, AttributeError, KeyError): + # If not in app context, import directly + try: + from src.app import app, db, User, bcrypt + except ImportError as e: + print(f"Error: Could not import required modules: {e}") + print("Make sure create_admin.py is runnable and PYTHONPATH is set.") + sys.exit(1) + +def create_admin_user(): + """ + Create an admin user interactively. + """ + print("Creating admin user for Speakr application") + print("=========================================") + + # Get username + while True: + username = input("Enter username (min 3 characters): ").strip() + if len(username) < 3: + print("Username must be at least 3 characters long.") + continue + + # Check if username already exists + with app.app_context(): + existing_user = db.session.query(User).filter_by(username=username).first() + if existing_user: + print(f"Username '{username}' already exists. Please choose another.") + continue + break + + # Get email + skip_domain_check = os.environ.get('SKIP_EMAIL_DOMAIN_CHECK', 'false').lower() == 'true' + while True: + email = input("Enter email address: ").strip() + try: + # Validate email (skip DNS/MX check if SKIP_EMAIL_DOMAIN_CHECK=true) + validate_email(email, check_deliverability=not skip_domain_check) + + # Check if email already exists + with app.app_context(): + existing_email = db.session.query(User).filter_by(email=email).first() + if existing_email: + print(f"Email '{email}' already exists. Please use another.") + continue + break + except EmailNotValidError as e: + print(f"Invalid email: {str(e)}") + + # Get password + while True: + password = getpass.getpass("Enter password (min 8 characters): ") + if len(password) < 8: + print("Password must be at least 8 characters long.") + continue + + confirm_password = getpass.getpass("Confirm password: ") + if password != confirm_password: + print("Passwords do not match. Please try again.") + continue + break + + # Create user + with app.app_context(): + hashed_password = bcrypt.generate_password_hash(password).decode('utf-8') + new_user = User(username=username, email=email, password=hashed_password, is_admin=True) + db.session.add(new_user) + db.session.commit() + + print("\nAdmin user created successfully!") + print(f"Username: {username}") + print(f"Email: {email}") + print("You can now log in to the application with these credentials.") + +if __name__ == "__main__": + create_admin_user() diff --git a/scripts/docker-entrypoint.sh b/scripts/docker-entrypoint.sh new file mode 100644 index 0000000..8da7d0d --- /dev/null +++ b/scripts/docker-entrypoint.sh @@ -0,0 +1,25 @@ +#!/bin/bash +set -e + +# Create necessary directories +mkdir -p /data/uploads /data/instance +chmod 755 /data/uploads /data/instance + +# Initialize the database if it doesn't exist +if [ ! -f /data/instance/transcriptions.db ]; then + echo "Database doesn't exist. Creating new database..." + python -c "from src.app import app, db; app.app_context().push(); db.create_all()" + echo "Database created successfully." +else + echo "Database exists. Checking for schema updates..." + python -c "from src.app import app; app.app_context().push()" +fi + +# Check if we need to create an admin user (regardless of whether the database exists) +if [ -n "$ADMIN_USERNAME" ] && [ -n "$ADMIN_EMAIL" ] && [ -n "$ADMIN_PASSWORD" ]; then + echo "Creating admin user using environment variables..." + cd /app && python scripts/docker_create_admin.py +fi + +# Start the application +exec "$@" diff --git a/scripts/docker_create_admin.py b/scripts/docker_create_admin.py new file mode 100644 index 0000000..801afba --- /dev/null +++ b/scripts/docker_create_admin.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 + +import os +import sys +from email_validator import validate_email, EmailNotValidError + +# Add parent directory to path for imports +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +# Try to import from app context +try: + from flask import current_app + app = current_app._get_current_object() + with app.app_context(): + db = app.extensions['sqlalchemy'].db + User = app.extensions['sqlalchemy'].db.metadata.tables['user'] + bcrypt = app.extensions.get('bcrypt') +except (RuntimeError, AttributeError, KeyError): + # If not in app context, import directly + try: + from src.app import app, db, User, bcrypt + except ImportError as e: + print(f"Error: Could not import required modules: {e}") + print("Make sure docker_create_admin.py is runnable and PYTHONPATH is set.") + sys.exit(1) + +def create_admin_user_from_env(): + """ + Create an admin user from environment variables. + Required environment variables: + - ADMIN_USERNAME + - ADMIN_EMAIL + - ADMIN_PASSWORD + """ + print("Creating admin user for Speakr application from environment variables") + print("=================================================================") + + # Get values from environment variables + username = os.environ.get('ADMIN_USERNAME') + email = os.environ.get('ADMIN_EMAIL') + password = os.environ.get('ADMIN_PASSWORD') + + # Validate required environment variables + if not username or not email or not password: + print("Error: ADMIN_USERNAME, ADMIN_EMAIL, and ADMIN_PASSWORD environment variables must be set.") + sys.exit(1) + + # Validate username + if len(username) < 3: + print("Error: Username must be at least 3 characters long.") + sys.exit(1) + + # Validate email (skip DNS/MX check if SKIP_EMAIL_DOMAIN_CHECK=true) + skip_domain_check = os.environ.get('SKIP_EMAIL_DOMAIN_CHECK', 'false').lower() == 'true' + try: + validate_email(email, check_deliverability=not skip_domain_check) + except EmailNotValidError as e: + print(f"Error: Invalid email: {str(e)}") + sys.exit(1) + + # Validate password + if len(password) < 8: + print("Error: Password must be at least 8 characters long.") + sys.exit(1) + + # Create user + with app.app_context(): + # Check if username already exists + existing_user = db.session.query(User).filter_by(username=username).first() + if existing_user: + print(f"User with username '{username}' already exists.") + sys.exit(0) + + # Check if email already exists + existing_email = db.session.query(User).filter_by(email=email).first() + if existing_email: + print(f"User with email '{email}' already exists.") + sys.exit(0) + + # Create new admin user + hashed_password = bcrypt.generate_password_hash(password).decode('utf-8') + new_user = User(username=username, email=email, password=hashed_password, is_admin=True) + db.session.add(new_user) + db.session.commit() + + print("\nAdmin user created successfully!") + print(f"Username: {username}") + print(f"Email: {email}") + print("You can now log in to the application with these credentials.") + +if __name__ == "__main__": + create_admin_user_from_env() diff --git a/scripts/download_offline_deps.py b/scripts/download_offline_deps.py new file mode 100644 index 0000000..67c81cd --- /dev/null +++ b/scripts/download_offline_deps.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python3 +""" +Download all CDN dependencies for offline deployment +""" + +import os +import requests +from pathlib import Path + +# Base directory for vendor files +VENDOR_DIR = Path(__file__).parent.parent / "static" / "vendor" + +# Dependencies to download +DEPENDENCIES = { + "css": { + "fontawesome.min.css": "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css", + "easymde.min.css": "https://cdn.jsdelivr.net/npm/easymde/dist/easymde.min.css", + }, + "js": { + "tailwind.min.js": "https://cdn.tailwindcss.com/3.4.0", + "vue.global.js": "https://cdn.jsdelivr.net/npm/vue@3/dist/vue.global.js", + "marked.min.js": "https://cdn.jsdelivr.net/npm/marked/marked.min.js", + "easymde.min.js": "https://cdn.jsdelivr.net/npm/easymde/dist/easymde.min.js", + "axios.min.js": "https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js", + } +} + +# Font Awesome webfonts +FONTAWESOME_FONTS = [ + "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/webfonts/fa-brands-400.ttf", + "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/webfonts/fa-brands-400.woff2", + "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/webfonts/fa-regular-400.ttf", + "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/webfonts/fa-regular-400.woff2", + "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/webfonts/fa-solid-900.ttf", + "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/webfonts/fa-solid-900.woff2", + "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/webfonts/fa-v4compatibility.ttf", + "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/webfonts/fa-v4compatibility.woff2", +] + +def download_file(url, filepath): + """Download a file from URL to filepath""" + print(f"Downloading {url} to {filepath}") + try: + response = requests.get(url, timeout=30) + response.raise_for_status() + + # Create directory if it doesn't exist + filepath.parent.mkdir(parents=True, exist_ok=True) + + # Write file + with open(filepath, 'wb') as f: + f.write(response.content) + print(f" ✓ Downloaded {filepath.name}") + return True + except Exception as e: + print(f" ✗ Failed to download {url}: {e}") + return False + +def main(): + print("Downloading offline dependencies...") + print(f"Vendor directory: {VENDOR_DIR}") + + # Check if we're in production mode + is_production = os.environ.get('FLASK_ENV') == 'production' or os.environ.get('PRODUCTION') == '1' + + if is_production: + print("⚙️ PRODUCTION MODE: Using production builds") + # Replace Vue.js development build with production build + DEPENDENCIES['js']['vue.global.js'] = "https://cdn.jsdelivr.net/npm/vue@3/dist/vue.global.prod.js" + else: + print("⚙️ DEVELOPMENT MODE: Using development builds") + + # Download CSS and JS files + for file_type, files in DEPENDENCIES.items(): + print(f"\n{file_type.upper()} Files:") + for filename, url in files.items(): + filepath = VENDOR_DIR / file_type / filename + download_file(url, filepath) + + # Download Font Awesome fonts + print("\nFont Awesome Webfonts:") + for url in FONTAWESOME_FONTS: + filename = url.split("/")[-1] + filepath = VENDOR_DIR / "fonts" / "webfonts" / filename + download_file(url, filepath) + + # Update Font Awesome CSS to use local fonts + fa_css_path = VENDOR_DIR / "css" / "fontawesome.min.css" + if fa_css_path.exists(): + print("\nUpdating Font Awesome CSS to use local fonts...") + with open(fa_css_path, 'r') as f: + content = f.read() + + # Replace CDN URLs with local paths - handle both relative and absolute URLs + content = content.replace( + "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/webfonts/", + "../fonts/webfonts/" + ) + # Also replace any relative URLs that might be in the minified CSS + content = content.replace( + "../webfonts/", + "../fonts/webfonts/" + ) + content = content.replace( + "./webfonts/", + "../fonts/webfonts/" + ) + + with open(fa_css_path, 'w') as f: + f.write(content) + print(" ✓ Updated Font Awesome CSS paths") + + print("\n✅ All dependencies downloaded successfully!") + +if __name__ == "__main__": + main() diff --git a/scripts/migrate_docker.sh b/scripts/migrate_docker.sh new file mode 100644 index 0000000..c2eaa7c --- /dev/null +++ b/scripts/migrate_docker.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# Manual migration script for Docker deployments +# NOTE: The first 10 recordings are processed automatically on startup. +# This script is for processing any remaining recordings. + +echo "🎯 Inquire Mode Manual Migration for Docker" +echo "=============================================" + +# Check if container is running +if ! docker compose ps | grep -q "speakr.*Up"; then + echo "❌ Speakr container is not running. Please start it first with:" + echo " docker compose up -d" + exit 1 +fi + +echo "ℹ️ Note: The first 10 recordings are processed automatically on startup." +echo "ℹ️ This script processes any remaining recordings that need chunking." +echo "" +echo "🔍 Checking how many recordings still need processing..." + +# First, do a dry run to see what would be processed +docker compose exec app python migrate_existing_recordings.py --dry-run + +echo "" +echo "⚠️ Do you want to proceed with processing these recordings?" +echo "⚠️ This will create embeddings and may take several minutes." +read -p "Continue? (y/N): " -n 1 -r +echo + +if [[ $REPLY =~ ^[Yy]$ ]]; then + echo "🚀 Starting migration..." + docker compose exec app python migrate_existing_recordings.py --process --batch-size 5 + + if [ $? -eq 0 ]; then + echo "✅ Migration completed successfully!" + echo "🎉 Your existing recordings are now ready for Inquire Mode!" + else + echo "❌ Migration failed. Check the logs above for details." + exit 1 + fi +else + echo "❌ Migration cancelled." + exit 0 +fi \ No newline at end of file diff --git a/scripts/migrate_existing_recordings.py b/scripts/migrate_existing_recordings.py new file mode 100644 index 0000000..203ea00 --- /dev/null +++ b/scripts/migrate_existing_recordings.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python3 +""" +Migration script to process existing recordings for Inquire Mode. +This script will chunk and vectorize all existing recordings that haven't been processed yet. +""" +import os +import sys +from src.app import app, db, Recording, TranscriptChunk, process_recording_chunks + +def count_recordings_needing_processing(): + """Count how many recordings need chunk processing.""" + with app.app_context(): + # Get all completed recordings + completed_recordings = Recording.query.filter_by(status='COMPLETED').all() + + # Check which ones don't have chunks + recordings_needing_processing = [] + for recording in completed_recordings: + if recording.transcription: # Has transcription + chunk_count = TranscriptChunk.query.filter_by(recording_id=recording.id).count() + if chunk_count == 0: # No chunks yet + recordings_needing_processing.append(recording) + + return recordings_needing_processing + +def migrate_existing_recordings(batch_size=10, dry_run=False): + """ + Process existing recordings in batches to create chunks and embeddings. + + Args: + batch_size (int): Number of recordings to process at once + dry_run (bool): If True, just show what would be processed + """ + with app.app_context(): + recordings_to_process = count_recordings_needing_processing() + + print(f"🔍 Found {len(recordings_to_process)} recordings that need chunk processing") + + if len(recordings_to_process) == 0: + print("✅ All recordings are already processed!") + return True + + if dry_run: + print("\n📋 Recordings that would be processed:") + for i, recording in enumerate(recordings_to_process, 1): + print(f" {i}. {recording.title} (ID: {recording.id}) - {len(recording.transcription)} chars") + print(f"\nThis is a dry run. Use --process to actually run the migration.") + return True + + print(f"🚀 Processing {len(recordings_to_process)} recordings in batches of {batch_size}") + + processed = 0 + errors = 0 + + for i in range(0, len(recordings_to_process), batch_size): + batch = recordings_to_process[i:i + batch_size] + print(f"\n📦 Processing batch {i//batch_size + 1} ({len(batch)} recordings)...") + + for recording in batch: + try: + print(f" ⏳ Processing: {recording.title} (ID: {recording.id})") + + success = process_recording_chunks(recording.id) + if success: + processed += 1 + # Get chunk count to report + chunk_count = TranscriptChunk.query.filter_by(recording_id=recording.id).count() + print(f" ✅ Created {chunk_count} chunks") + else: + errors += 1 + print(f" ❌ Failed to process recording {recording.id}") + + except Exception as e: + errors += 1 + print(f" ❌ Error processing recording {recording.id}: {e}") + + # Commit batch + try: + db.session.commit() + print(f" 💾 Batch committed successfully") + except Exception as e: + db.session.rollback() + print(f" ❌ Error committing batch: {e}") + errors += len(batch) + + print(f"\n📊 Migration Summary:") + print(f" ✅ Successfully processed: {processed}") + print(f" ❌ Errors: {errors}") + print(f" 📈 Success rate: {(processed/(processed+errors)*100):.1f}%" if (processed+errors) > 0 else "N/A") + + return errors == 0 + +def main(): + """Main function to handle command line arguments.""" + import argparse + + parser = argparse.ArgumentParser(description='Migrate existing recordings for Inquire Mode') + parser.add_argument('--dry-run', action='store_true', + help='Show what would be processed without actually processing') + parser.add_argument('--process', action='store_true', + help='Actually process the recordings') + parser.add_argument('--batch-size', type=int, default=10, + help='Number of recordings to process in each batch (default: 10)') + + args = parser.parse_args() + + if not args.dry_run and not args.process: + print("❌ Please specify either --dry-run or --process") + print("Use --help for more information") + return False + + print("🎯 Inquire Mode Migration Tool") + print("=" * 40) + + try: + if args.dry_run: + success = migrate_existing_recordings(args.batch_size, dry_run=True) + else: + print("⚠️ This will process all existing recordings and create embeddings.") + print("⚠️ This may take a while and use significant CPU/memory.") + + confirm = input("Continue? (y/N): ") + if confirm.lower() != 'y': + print("❌ Migration cancelled by user") + return False + + success = migrate_existing_recordings(args.batch_size, dry_run=False) + + return success + + except KeyboardInterrupt: + print("\n❌ Migration cancelled by user") + return False + except Exception as e: + print(f"❌ Migration failed: {e}") + import traceback + traceback.print_exc() + return False + +if __name__ == "__main__": + success = main() + sys.exit(0 if success else 1) \ No newline at end of file diff --git a/scripts/migrate_team_to_group.py b/scripts/migrate_team_to_group.py new file mode 100755 index 0000000..e7546c4 --- /dev/null +++ b/scripts/migrate_team_to_group.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 +""" +Migration script to rename team tables to group tables. +This handles the refactoring from team-based to group-based terminology. +""" +import sys +import os + +# Add the parent directory to the path to import app modules +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + +from src.app import app, db +from sqlalchemy import text + +def migrate_tables(): + """Copy data from team tables to group tables and remove old tables.""" + with app.app_context(): + try: + # Check if old tables exist + inspector = db.inspect(db.engine) + existing_tables = inspector.get_table_names() + + print("Existing tables:", existing_tables) + + # Check if we need to migrate data + if 'team' in existing_tables and 'group' in existing_tables: + # Both tables exist - need to copy data + print("\nBoth 'team' and 'group' tables exist. Copying data...") + + # Check if there's data in the old table + result = db.session.execute(text('SELECT COUNT(*) FROM team')) + old_count = result.scalar() + print(f"Found {old_count} records in 'team' table") + + if old_count > 0: + # Copy data from team to group + print("Copying data from 'team' to 'group'...") + db.session.execute(text( + 'INSERT INTO "group" (id, name, description, created_at) ' + 'SELECT id, name, description, created_at FROM team' + )) + db.session.commit() + print(f"✓ Copied {old_count} records to 'group' table") + + # Drop the old team table + print("Dropping old 'team' table...") + db.session.execute(text('DROP TABLE team')) + db.session.commit() + print("✓ Dropped old 'team' table") + + elif 'team' in existing_tables and 'group' not in existing_tables: + # Only old table exists - rename it + print("\nRenaming 'team' table to 'group'...") + db.session.execute(text('ALTER TABLE team RENAME TO "group"')) + db.session.commit() + print("✓ Renamed 'team' to 'group'") + else: + print("\n'team' table not found or already migrated") + + # Migrate team_membership + if 'team_membership' in existing_tables and 'group_membership' in existing_tables: + # Both tables exist - need to copy data + print("\nBoth 'team_membership' and 'group_membership' tables exist. Copying data...") + + # Check if there's data in the old table + result = db.session.execute(text('SELECT COUNT(*) FROM team_membership')) + old_count = result.scalar() + print(f"Found {old_count} records in 'team_membership' table") + + if old_count > 0: + # Copy data from team_membership to group_membership + print("Copying data from 'team_membership' to 'group_membership'...") + db.session.execute(text( + 'INSERT INTO group_membership (id, user_id, group_id, role, joined_at) ' + 'SELECT id, user_id, team_id, role, joined_at FROM team_membership' + )) + db.session.commit() + print(f"✓ Copied {old_count} records to 'group_membership' table") + + # Drop the old team_membership table + print("Dropping old 'team_membership' table...") + db.session.execute(text('DROP TABLE team_membership')) + db.session.commit() + print("✓ Dropped old 'team_membership' table") + + elif 'team_membership' in existing_tables and 'group_membership' not in existing_tables: + # Only old table exists - rename it + print("\nRenaming 'team_membership' table to 'group_membership'...") + db.session.execute(text('ALTER TABLE team_membership RENAME TO group_membership')) + db.session.commit() + print("✓ Renamed 'team_membership' to 'group_membership'") + else: + print("\n'team_membership' table not found or already migrated") + + # Migrate team_id to group_id in tags table + print("\nMigrating tag associations from team_id to group_id...") + result = db.session.execute(text( + 'UPDATE tag SET group_id = team_id WHERE team_id IS NOT NULL AND group_id IS NULL' + )) + db.session.commit() + print(f"✓ Migrated {result.rowcount} tag associations") + + # Migrate share_with_team_lead to share_with_group_lead in tags + result = db.session.execute(text( + 'UPDATE tag SET share_with_group_lead = share_with_team_lead WHERE share_with_team_lead IS NOT NULL AND share_with_group_lead IS NULL' + )) + db.session.commit() + print(f"✓ Migrated {result.rowcount} share_with_lead settings") + + print("\n✅ Migration completed successfully!") + print("\nPlease restart the application for changes to take full effect.") + + except Exception as e: + print(f"\n❌ Error during migration: {e}") + db.session.rollback() + sys.exit(1) + +if __name__ == '__main__': + print("=" * 60) + print("Team to Group Migration Script") + print("=" * 60) + print("\nThis script will rename database tables:") + print(" - 'team' → 'group'") + print(" - 'team_membership' → 'group_membership'") + + # Check for --yes flag to skip confirmation + if '--yes' in sys.argv or '-y' in sys.argv: + print("\nAuto-confirming migration (--yes flag detected)...\n") + else: + print("\nPress Ctrl+C to cancel, or Enter to continue...") + try: + input() + except KeyboardInterrupt: + print("\n\nMigration cancelled.") + sys.exit(0) + + migrate_tables() diff --git a/scripts/parse_asr_json.py b/scripts/parse_asr_json.py new file mode 100755 index 0000000..b394eba --- /dev/null +++ b/scripts/parse_asr_json.py @@ -0,0 +1,219 @@ +#!/usr/bin/env python3 +""" +ASR JSON Parser - Analyzes speaker information in ASR response JSON files +""" + +import json +import sys +from collections import defaultdict, Counter + +def analyze_asr_json(json_data): + """ + Analyze ASR JSON data to understand speaker distribution and identify issues + """ + if not isinstance(json_data, dict) or 'segments' not in json_data: + print("ERROR: Invalid JSON structure. Expected dict with 'segments' key.") + return + + segments = json_data['segments'] + if not isinstance(segments, list): + print("ERROR: 'segments' should be a list.") + return + + print(f"=== ASR JSON Analysis ===") + print(f"Total segments: {len(segments)}") + print() + + # Track segment-level speakers + segment_speakers = [] + segments_with_speaker = 0 + segments_without_speaker = 0 + + # Track word-level speakers + word_speakers = [] + words_with_speaker = 0 + words_without_speaker = 0 + + # Track segments with null speakers + null_speaker_segments = [] + + for i, segment in enumerate(segments): + # Analyze segment-level speaker + segment_speaker = segment.get('speaker') + if segment_speaker is not None: + segment_speakers.append(segment_speaker) + segments_with_speaker += 1 + else: + segments_without_speaker += 1 + null_speaker_segments.append(i) + + # Analyze word-level speakers + words = segment.get('words', []) + for word_data in words: + word_speaker = word_data.get('speaker') + if word_speaker is not None: + word_speakers.append(word_speaker) + words_with_speaker += 1 + else: + words_without_speaker += 1 + + # Print segment-level analysis + print("=== SEGMENT-LEVEL SPEAKERS ===") + print(f"Segments with speakers: {segments_with_speaker}") + print(f"Segments without speakers: {segments_without_speaker}") + + if segment_speakers: + segment_speaker_counts = Counter(segment_speakers) + print(f"Unique segment speakers: {sorted(segment_speaker_counts.keys())}") + print("Segment speaker distribution:") + for speaker, count in segment_speaker_counts.most_common(): + print(f" {speaker}: {count} segments") + else: + print("No segment-level speakers found!") + + print() + + # Print word-level analysis + print("=== WORD-LEVEL SPEAKERS ===") + print(f"Words with speakers: {words_with_speaker}") + print(f"Words without speakers: {words_without_speaker}") + + if word_speakers: + word_speaker_counts = Counter(word_speakers) + print(f"Unique word speakers: {sorted(word_speaker_counts.keys())}") + print("Word speaker distribution:") + for speaker, count in word_speaker_counts.most_common(): + print(f" {speaker}: {count} words") + else: + print("No word-level speakers found!") + + print() + + # Analyze segments without speakers + if null_speaker_segments: + print("=== SEGMENTS WITHOUT SPEAKERS ===") + print(f"Segment indices without speakers: {null_speaker_segments[:10]}{'...' if len(null_speaker_segments) > 10 else ''}") + + print("\nFirst few segments without speakers:") + for i in null_speaker_segments[:5]: + segment = segments[i] + text = segment.get('text', '').strip() + start = segment.get('start') + end = segment.get('end') + words = segment.get('words', []) + + print(f" Segment {i}: '{text}' ({start}-{end}s)") + print(f" Keys: {list(segment.keys())}") + + # Check if words have speakers even when segment doesn't + word_speakers_in_segment = [w.get('speaker') for w in words if w.get('speaker')] + if word_speakers_in_segment: + word_speaker_counts = Counter(word_speakers_in_segment) + print(f" Word speakers: {dict(word_speaker_counts)}") + else: + print(f" No word speakers either") + print() + + # Suggest speaker assignment strategy + print("=== SPEAKER ASSIGNMENT STRATEGY ===") + if segments_without_speaker > 0: + print(f"Found {segments_without_speaker} segments without speakers.") + + if words_with_speaker > 0: + print("RECOMMENDATION: Use word-level speaker information to assign segment speakers.") + print("Strategy: For segments without speakers, find the most common speaker among their words.") + else: + print("RECOMMENDATION: Assign a default speaker label (e.g., 'UNKNOWN_SPEAKER') to segments without speakers.") + else: + print("All segments have speakers assigned. No action needed.") + +def suggest_preprocessing_fix(json_data): + """ + Suggest how to fix the preprocessing based on the JSON structure + """ + print("\n=== PREPROCESSING FIX SUGGESTION ===") + + segments = json_data.get('segments', []) + if not segments: + return + + # Check if we can derive segment speakers from word speakers + segments_fixable = 0 + for segment in segments: + if segment.get('speaker') is None: + words = segment.get('words', []) + word_speakers = [w.get('speaker') for w in words if w.get('speaker')] + if word_speakers: + segments_fixable += 1 + + if segments_fixable > 0: + print(f"✅ {segments_fixable} segments can be fixed using word-level speaker information.") + print("\nSuggested code fix:") + print(""" +# In the ASR processing function, replace the segment processing with: +for i, segment in enumerate(asr_response_data['segments']): + speaker = segment.get('speaker') + text = segment.get('text', '').strip() + + # If segment doesn't have a speaker, try to derive from words + if speaker is None: + words = segment.get('words', []) + word_speakers = [w.get('speaker') for w in words if w.get('speaker')] + if word_speakers: + # Use the most common speaker among the words + from collections import Counter + speaker_counts = Counter(word_speakers) + speaker = speaker_counts.most_common(1)[0][0] + app.logger.info(f"Derived speaker '{speaker}' for segment {i} from word-level data") + else: + speaker = 'UNKNOWN_SPEAKER' + app.logger.warning(f"No speaker info available for segment {i}, using UNKNOWN_SPEAKER") + + simplified_segments.append({ + 'speaker': speaker, + 'sentence': text, + 'start_time': segment.get('start'), + 'end_time': segment.get('end') + }) +""") + else: + print("❌ Segments cannot be fixed using word-level data.") + print("Recommendation: Assign 'UNKNOWN_SPEAKER' to segments without speakers.") + +def main(): + if len(sys.argv) != 2: + print("Usage: python parse_asr_json.py ") + print(" or: python parse_asr_json.py -") + print(" (use '-' to read from stdin)") + sys.exit(1) + + filename = sys.argv[1] + + try: + if filename == '-': + # Read from stdin + json_text = sys.stdin.read() + else: + # Read from file + with open(filename, 'r', encoding='utf-8') as f: + json_text = f.read() + + # Parse JSON + json_data = json.loads(json_text) + + # Analyze the data + analyze_asr_json(json_data) + suggest_preprocessing_fix(json_data) + + except FileNotFoundError: + print(f"ERROR: File '{filename}' not found.") + sys.exit(1) + except json.JSONDecodeError as e: + print(f"ERROR: Invalid JSON - {e}") + sys.exit(1) + except Exception as e: + print(f"ERROR: {e}") + sys.exit(1) + +if __name__ == "__main__": + main() diff --git a/scripts/pre-commit b/scripts/pre-commit new file mode 100755 index 0000000..592cd0d --- /dev/null +++ b/scripts/pre-commit @@ -0,0 +1,21 @@ +#!/bin/sh +# +# Pre-commit hook: runs PostgreSQL migration compatibility tests +# when migration-related files are staged. +# +# Install: ln -sf ../../scripts/pre-commit .git/hooks/pre-commit + +STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM) + +# Only run if migration-related files are staged +if echo "$STAGED_FILES" | grep -qE '^(src/init_db\.py|src/utils/database\.py|src/models/)'; then + echo "Migration files changed — running PostgreSQL compatibility checks..." + python tests/test_migration_compatibility.py + if [ $? -ne 0 ]; then + echo "" + echo "Pre-commit hook FAILED: PostgreSQL migration compatibility issues found." + echo "Fix the issues above before committing." + exit 1 + fi + echo "All migration compatibility checks passed." +fi diff --git a/scripts/reset_db.py b/scripts/reset_db.py new file mode 100644 index 0000000..240fc7a --- /dev/null +++ b/scripts/reset_db.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python3 + +# Add this near the top if you run this standalone often outside app context +import os +import sys +import shutil +# Add project root to path if necessary for 'app' import +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + +# Load environment variables in case DB path relies on them (optional here) +# from dotenv import load_dotenv +# load_dotenv() + +# Check if running within app context already (e.g., via Flask command) +try: + from flask import current_app + # Ensure app context is pushed if needed for config access + app = current_app._get_current_object() + # Make sure db is initialized within the app context if needed + # (SQLAlchemy initialization in app.py handles this mostly) + with app.app_context(): + db = app.extensions['sqlalchemy'].db # Access db via extensions +except (RuntimeError, AttributeError, KeyError): + # If not in app context, import directly + try: + # Ensure this import reflects the updated app.py with the new model + from src.app import app, db + except ImportError as e: + print(f"Error: Could not import 'app' and 'db': {e}") + print("Make sure reset_db.py is runnable and PYTHONPATH is set.") + sys.exit(1) + +def reset_database(delete_uploads=True): + # Determine the database path relative to the instance folder + # Use app config if available + instance_path = app.instance_path if hasattr(app, 'instance_path') else os.path.join(os.getcwd(), 'instance') + try: + # Ensure app context for config access if not already present + with app.app_context(): + # Use absolute path from config + db_uri = app.config.get('SQLALCHEMY_DATABASE_URI', 'sqlite:///instance/transcriptions.db') + # Handle relative vs absolute paths specified in URI + if db_uri.startswith('sqlite:///'): + # Assume absolute path from URI root if starts with '///' + db_path = db_uri.replace('sqlite:///', '/', 1) # Replace only first + # Ensure instance path reflects the directory containing the DB + instance_path = os.path.dirname(db_path) + elif db_uri.startswith('sqlite://'): + # Assume relative path from instance folder + db_filename = db_uri.split('/')[-1] + db_path = os.path.join(instance_path, db_filename) + else: # Handle other DB types or formats if needed + print(f"Warning: Non-SQLite URI detected: {db_uri}. Deletion logic might need adjustment.") + # Attempt to parse or fallback + db_filename = db_uri.split('/')[-1] # Best guess + db_path = os.path.join(instance_path, db_filename) + + except Exception as config_e: + print(f"Error accessing app config for DB path: {config_e}. Using default.") + # Fallback if config access fails + instance_path = os.path.join(os.getcwd(), 'instance') + db_filename = 'transcriptions.db' + db_path = os.path.join(instance_path, db_filename) + + # Ensure instance directory exists + print(f"Ensuring instance directory exists: {instance_path}") + os.makedirs(instance_path, exist_ok=True) + print(f"Database path identified as: {db_path}") + + # Remove existing database if it exists + if os.path.exists(db_path): + print(f"Removing existing database at {db_path}") + try: + os.remove(db_path) + # Also remove journal file if it exists + journal_path = db_path + "-journal" + if os.path.exists(journal_path): + os.remove(journal_path) + print(f"Removing existing journal file at {journal_path}") + except OSError as e: + print(f"Error removing database file: {e}. Check permissions or if it's in use.") + # Decide whether to exit or continue + # sys.exit(1) + + # Create application context to work with the database + try: + with app.app_context(): + print("Creating new database schema (including 'summary' column)...") + # Create all tables defined in models (app.py) + db.create_all() + print("Database schema created successfully!") + except Exception as e: + print(f"Error creating database schema: {e}") + # Attempt rollback if possible (though less relevant for create_all) + try: + db.session.rollback() + except Exception as rb_e: + print(f"Rollback attempt failed: {rb_e}") + sys.exit(1) + + # Delete all files in the uploads directory if requested + if delete_uploads: + try: + uploads_dir = os.path.join(os.getcwd(), 'uploads') + if os.path.exists(uploads_dir): + print(f"Deleting all files in uploads directory: {uploads_dir}") + for filename in os.listdir(uploads_dir): + file_path = os.path.join(uploads_dir, filename) + try: + if os.path.isfile(file_path): + os.remove(file_path) + print(f"Deleted file: {file_path}") + elif os.path.isdir(file_path): + shutil.rmtree(file_path) + print(f"Deleted directory: {file_path}") + except Exception as e: + print(f"Error deleting {file_path}: {e}") + print("All files in uploads directory have been deleted.") + else: + print(f"Uploads directory not found: {uploads_dir}") + # Create the directory if it doesn't exist + os.makedirs(uploads_dir, exist_ok=True) + print(f"Created uploads directory: {uploads_dir}") + except Exception as e: + print(f"Error cleaning uploads directory: {e}") + +if __name__ == "__main__": + print("Attempting to reset the database and clean up all data...") + reset_database(delete_uploads=True) + print("Database reset process finished.") diff --git a/scripts/resize_logo.py b/scripts/resize_logo.py new file mode 100644 index 0000000..58399ad --- /dev/null +++ b/scripts/resize_logo.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python3 +""" +Logo Resizer Script for Speakr +Resizes a source PNG image to all required icon sizes for PWA and favicon support. + +Usage: + python resize_logo.py + +Requirements: + pip install Pillow + +This script will create all the necessary icon sizes in the static/img/ directory. +""" + +import sys +import os +from PIL import Image, ImageDraw +import argparse + +def create_maskable_version(image, size): + """Create a maskable version with safe zone padding (20% on all sides)""" + # Calculate the size of the logo with padding + logo_size = int(size * 0.6) # Logo takes 60% of the canvas (20% padding on each side) + + # Create new image with transparent background + maskable = Image.new('RGBA', (size, size), (0, 0, 0, 0)) + + # Resize the original logo + logo_resized = image.resize((logo_size, logo_size), Image.Resampling.LANCZOS) + + # Calculate position to center the logo + x = (size - logo_size) // 2 + y = (size - logo_size) // 2 + + # Paste the logo onto the center of the canvas + maskable.paste(logo_resized, (x, y), logo_resized if logo_resized.mode == 'RGBA' else None) + + return maskable + +def resize_logo(source_path, output_dir="static/img"): + """Resize the source image to all required sizes""" + + # Check if source file exists + if not os.path.exists(source_path): + print(f"Error: Source file '{source_path}' not found!") + return False + + # Create output directory if it doesn't exist + os.makedirs(output_dir, exist_ok=True) + + try: + # Open the source image + with Image.open(source_path) as img: + # Convert to RGBA if not already (for transparency support) + if img.mode != 'RGBA': + img = img.convert('RGBA') + + print(f"Source image: {img.size[0]}x{img.size[1]} pixels") + print(f"Output directory: {output_dir}") + print() + + # Define all the sizes we need + sizes = { + # Essential PWA icons + 'icon-192x192.png': 192, + 'icon-512x512.png': 512, + + # Additional recommended icons + 'icon-16x16.png': 16, + 'icon-32x32.png': 32, + 'icon-180x180.png': 180, # Apple touch icon + + # Maskable version + 'icon-maskable-512x512.png': 512, + } + + # Resize to each required size + for filename, size in sizes.items(): + output_path = os.path.join(output_dir, filename) + + if 'maskable' in filename: + # Create maskable version with safe zone + resized = create_maskable_version(img, size) + print(f"✓ Created maskable icon: {filename} ({size}x{size})") + else: + # Regular resize + resized = img.resize((size, size), Image.Resampling.LANCZOS) + print(f"✓ Created icon: {filename} ({size}x{size})") + + # Save the resized image + resized.save(output_path, 'PNG', optimize=True) + + print() + print("🎉 All icons created successfully!") + print() + print("Next steps:") + print("1. Replace static/img/favicon.svg with your SVG version (if you have one)") + print("2. Clear browser cache and test the new icons") + print("3. Test PWA installation to verify icons appear correctly") + + return True + + except Exception as e: + print(f"Error processing image: {e}") + return False + +def create_ico_favicon(source_path, output_dir="static/img"): + """Create a multi-size ICO favicon file""" + try: + with Image.open(source_path) as img: + if img.mode != 'RGBA': + img = img.convert('RGBA') + + # Create different sizes for the ICO file + sizes = [16, 32, 48] + images = [] + + for size in sizes: + resized = img.resize((size, size), Image.Resampling.LANCZOS) + images.append(resized) + + # Save as ICO file + ico_path = os.path.join(output_dir, 'favicon.ico') + images[0].save(ico_path, format='ICO', sizes=[(img.width, img.height) for img in images]) + print(f"✓ Created favicon.ico with sizes: {sizes}") + + except Exception as e: + print(f"Warning: Could not create favicon.ico: {e}") + +def main(): + parser = argparse.ArgumentParser(description='Resize logo for Speakr PWA icons') + parser.add_argument('source', help='Source PNG image file') + parser.add_argument('--output-dir', default='static/img', help='Output directory (default: static/img)') + parser.add_argument('--create-ico', action='store_true', help='Also create favicon.ico file') + + args = parser.parse_args() + + print("🎨 Speakr Logo Resizer") + print("=" * 50) + + # Resize the logo + success = resize_logo(args.source, args.output_dir) + + if success and args.create_ico: + print() + create_ico_favicon(args.source, args.output_dir) + + if success: + print() + print("📁 Files created in", args.output_dir + ":") + for file in os.listdir(args.output_dir): + if file.startswith('icon-') and file.endswith('.png'): + file_path = os.path.join(args.output_dir, file) + size = os.path.getsize(file_path) + print(f" {file} ({size:,} bytes)") + +if __name__ == "__main__": + if len(sys.argv) < 2: + print("Usage: python resize_logo.py ") + print("Example: python resize_logo.py my_logo.png") + sys.exit(1) + + main() diff --git a/scripts/resize_logo.sh b/scripts/resize_logo.sh new file mode 100755 index 0000000..dcf0e06 --- /dev/null +++ b/scripts/resize_logo.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +# Logo Resizer Script for Speakr (ImageMagick version) +# Resizes a source PNG image to all required icon sizes for PWA and favicon support. +# +# Usage: ./resize_logo.sh +# Requirements: ImageMagick (sudo apt install imagemagick) + +set -e + +# Check if source file is provided +if [ $# -eq 0 ]; then + echo "Usage: $0 " + echo "Example: $0 my_logo.png" + exit 1 +fi + +SOURCE_FILE="$1" +OUTPUT_DIR="static/img" + +# Check if source file exists +if [ ! -f "$SOURCE_FILE" ]; then + echo "Error: Source file '$SOURCE_FILE' not found!" + exit 1 +fi + +# Check if ImageMagick is installed +if ! command -v convert &> /dev/null; then + echo "Error: ImageMagick is not installed!" + echo "Install it with: sudo apt install imagemagick" + exit 1 +fi + +# Create output directory if it doesn't exist +mkdir -p "$OUTPUT_DIR" + +echo "🎨 Speakr Logo Resizer (ImageMagick)" +echo "==================================================" +echo "Source file: $SOURCE_FILE" +echo "Output directory: $OUTPUT_DIR" +echo + +# Define sizes +declare -A SIZES=( + ["icon-16x16.png"]=16 + ["icon-32x32.png"]=32 + ["icon-180x180.png"]=180 + ["icon-192x192.png"]=192 + ["icon-512x512.png"]=512 +) + +# Resize to each size +for filename in "${!SIZES[@]}"; do + size=${SIZES[$filename]} + output_path="$OUTPUT_DIR/$filename" + + convert "$SOURCE_FILE" -resize "${size}x${size}" "$output_path" + echo "✓ Created icon: $filename (${size}x${size})" +done + +# Create maskable version with padding +echo "✓ Creating maskable icon with safe zone..." +convert "$SOURCE_FILE" -resize 307x307 -gravity center -extent 512x512 -background transparent "$OUTPUT_DIR/icon-maskable-512x512.png" +echo "✓ Created maskable icon: icon-maskable-512x512.png (512x512)" + +# Create favicon.ico (optional) +if command -v convert &> /dev/null; then + echo "✓ Creating favicon.ico..." + convert "$SOURCE_FILE" -resize 16x16 -resize 32x32 -resize 48x48 "$OUTPUT_DIR/favicon.ico" + echo "✓ Created favicon.ico" +fi + +echo +echo "🎉 All icons created successfully!" +echo +echo "📁 Files created:" +ls -la "$OUTPUT_DIR"/icon-*.png "$OUTPUT_DIR"/favicon.ico 2>/dev/null || true + +echo +echo "Next steps:" +echo "1. Replace static/img/favicon.svg with your SVG version (if you have one)" +echo "2. Clear browser cache and test the new icons" +echo "3. Test PWA installation to verify icons appear correctly" diff --git a/scripts/test-docs-build.sh b/scripts/test-docs-build.sh new file mode 100755 index 0000000..f59b9c4 --- /dev/null +++ b/scripts/test-docs-build.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +# Test script to validate documentation build locally +# This mimics what the GitHub Actions workflow does + +set -e + +echo "Testing documentation build..." + +# Check if we're in the right directory +if [ ! -f "docs/mkdocs.yml" ]; then + echo "Error: docs/mkdocs.yml not found. Run this script from the project root." + exit 1 +fi + +# Create a virtual environment for testing +echo "Creating virtual environment..." +python3 -m venv .venv-docs-test +source .venv-docs-test/bin/activate + +# Install dependencies +echo "Installing dependencies..." +pip install --upgrade pip +pip install -r docs/requirements-docs.txt + +# Build the documentation +echo "Building documentation..." +cd docs +export CI=true # Enable git plugin in CI mode +mkdocs build --strict --site-dir _test_site + +echo "" +echo "✅ Documentation build successful!" +echo "Built site is in: docs/_test_site" +echo "" +echo "To serve locally for testing:" +echo " cd docs && mkdocs serve" + +# Cleanup +cd .. +deactivate +rm -rf .venv-docs-test + +echo "Cleanup complete." \ No newline at end of file diff --git a/scripts/update_version.py b/scripts/update_version.py new file mode 100644 index 0000000..1512864 --- /dev/null +++ b/scripts/update_version.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +""" +Simple script to update the VERSION file. +Usage: python update_version.py v0.4.3 +""" +import sys +import re + +def update_version(new_version): + # Validate version format (basic check) + if not re.match(r'^v?\d+\.\d+\.\d+', new_version): + print(f"Warning: Version '{new_version}' doesn't follow standard format (v1.2.3)") + + # Ensure version starts with 'v' + if not new_version.startswith('v'): + new_version = 'v' + new_version + + # Write to VERSION file + try: + with open('VERSION', 'w') as f: + f.write(new_version) + print(f"✅ Updated VERSION file to: {new_version}") + + # Optional: Create git tag if in a git repo + import subprocess + try: + # Check if we're in a git repo + subprocess.check_output(['git', 'status'], stderr=subprocess.DEVNULL) + + # Create and push tag + subprocess.check_output(['git', 'tag', new_version], stderr=subprocess.DEVNULL) + print(f"✅ Created git tag: {new_version}") + + # Ask user if they want to push + response = input("Push tag to remote? (y/N): ").strip().lower() + if response == 'y': + subprocess.check_output(['git', 'push', 'origin', new_version]) + print(f"✅ Pushed tag {new_version} to remote") + + except subprocess.CalledProcessError: + print("ℹ️ Not in a git repo or git tag already exists") + except Exception as e: + print(f"ℹ️ Git operations failed: {e}") + + except Exception as e: + print(f"❌ Failed to update VERSION file: {e}") + return False + + return True + +if __name__ == "__main__": + if len(sys.argv) != 2: + print("Usage: python update_version.py ") + print("Example: python update_version.py v0.4.3") + print("Example: python update_version.py 0.4.3-alpha") + sys.exit(1) + + new_version = sys.argv[1] + success = update_version(new_version) + sys.exit(0 if success else 1) \ No newline at end of file diff --git a/src/api/__init__.py b/src/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/api/admin.py b/src/api/admin.py new file mode 100644 index 0000000..cb6e9ab --- /dev/null +++ b/src/api/admin.py @@ -0,0 +1,1157 @@ +""" +Administrative functions and user management. + +This blueprint was auto-generated from app.py route extraction. +""" + +import os +import json +import time +from datetime import datetime, timedelta +from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify, send_file, Response, current_app +from flask_login import login_required, current_user +from werkzeug.utils import secure_filename + +from src.database import db +from src.models import * +from src.utils import * +from src.services.retention import is_recording_exempt_from_deletion, get_retention_days_for_recording, process_auto_deletion +from src.services.embeddings import EMBEDDINGS_AVAILABLE, process_recording_chunks +from src.services.token_tracking import token_tracker +from src.services.audit import audit_delete, audit_edit +from src.services.transcription_tracking import transcription_tracker +from src.config.startup import get_file_monitor_functions + +# Create blueprint +admin_bp = Blueprint('admin', __name__) + +# Configuration from environment +ENABLE_INQUIRE_MODE = os.environ.get('ENABLE_INQUIRE_MODE', 'false').lower() == 'true' +ENABLE_AUTO_DELETION = os.environ.get('ENABLE_AUTO_DELETION', 'false').lower() == 'true' +USERS_CAN_DELETE = os.environ.get('USERS_CAN_DELETE', 'true').lower() == 'true' +ENABLE_INTERNAL_SHARING = os.environ.get('ENABLE_INTERNAL_SHARING', 'false').lower() == 'true' +USE_ASR_ENDPOINT = os.environ.get('USE_ASR_ENDPOINT', 'false').lower() == 'true' +GLOBAL_RETENTION_DAYS = int(os.environ.get('GLOBAL_RETENTION_DAYS', '0')) +DELETION_MODE = os.environ.get('DELETION_MODE', 'hard') + +# Global helpers (will be injected from app) +has_recording_access = None +bcrypt = None +csrf = None +limiter = None + +def init_admin_helpers(**kwargs): + """Initialize helper functions and extensions from app.""" + global has_recording_access, bcrypt, csrf, limiter + has_recording_access = kwargs.get('has_recording_access') + bcrypt = kwargs.get('bcrypt') + csrf = kwargs.get('csrf') + limiter = kwargs.get('limiter') + + +def csrf_exempt(f): + """Decorator placeholder for CSRF exemption - applied after initialization.""" + from functools import wraps + @wraps(f) + def wrapper(*args, **kwargs): + return f(*args, **kwargs) + wrapper._csrf_exempt = True + return wrapper + + +# --- Routes --- + +@admin_bp.route('/admin', methods=['GET']) +@login_required +def admin(): + # Check if user is admin OR group admin + is_team_admin = GroupMembership.query.filter_by( + user_id=current_user.id, + role='admin' + ).first() is not None + + if not current_user.is_admin and not is_team_admin: + flash('You do not have permission to access the admin page.', 'danger') + return redirect(url_for('recordings.index')) + + # Redirect group admins to their dedicated management page + if is_team_admin and not current_user.is_admin: + return redirect(url_for('admin.group_management')) + + # Full admins only get here + user_language = current_user.ui_language if current_user.is_authenticated and current_user.ui_language else 'en' + return render_template('admin.html', + title='Admin Dashboard', + inquire_mode_enabled=ENABLE_INQUIRE_MODE, + global_retention_days=GLOBAL_RETENTION_DAYS, + is_group_admin_only=False, + user_language=user_language) + + +@admin_bp.route('/group-management', methods=['GET']) +@login_required +def group_management(): + """Dedicated group management page for group admins (non-full admins).""" + # Check if user is a group admin + is_team_admin = GroupMembership.query.filter_by( + user_id=current_user.id, + role='admin' + ).first() is not None + + if not is_team_admin: + flash('You do not have permission to access group management.', 'danger') + return redirect(url_for('recordings.index')) + + # If they're a full admin, redirect to main admin dashboard + if current_user.is_admin: + return redirect(url_for('admin.admin')) + + user_language = current_user.ui_language if current_user.is_authenticated and current_user.ui_language else 'en' + return render_template('group-admin.html', + title='Group Management', + global_retention_days=GLOBAL_RETENTION_DAYS, + user_language=user_language) + + + +@admin_bp.route('/admin/users', methods=['GET']) +@login_required +def admin_get_users(): + # Check if user is admin OR group admin + is_team_admin = GroupMembership.query.filter_by( + user_id=current_user.id, + role='admin' + ).first() is not None + + if not current_user.is_admin and not is_team_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + users = User.query.all() + user_data = [] + + for user in users: + # Get recordings count and storage used + recordings_count = len(user.recordings) + storage_used = sum(r.file_size for r in user.recordings if r.file_size) or 0 + + # Get current month token usage + current_usage = token_tracker.get_monthly_usage(user.id) + usage_percentage = (current_usage / user.monthly_token_budget * 100) if user.monthly_token_budget else 0 + + # Get current month transcription usage + current_transcription_usage = transcription_tracker.get_monthly_usage(user.id) + transcription_usage_percentage = (current_transcription_usage / user.monthly_transcription_budget * 100) if user.monthly_transcription_budget else 0 + + user_data.append({ + 'id': user.id, + 'username': user.username, + 'email': user.email, + 'is_admin': user.is_admin, + 'can_share_publicly': user.can_share_publicly, + 'recordings_count': recordings_count, + 'storage_used': storage_used, + 'monthly_token_budget': user.monthly_token_budget, + 'current_token_usage': current_usage, + 'token_usage_percentage': round(usage_percentage, 1), + 'monthly_transcription_budget': user.monthly_transcription_budget, + 'monthly_transcription_budget_minutes': (user.monthly_transcription_budget // 60) if user.monthly_transcription_budget else None, + 'current_transcription_usage': current_transcription_usage, + 'current_transcription_usage_minutes': current_transcription_usage // 60, + 'transcription_usage_percentage': round(transcription_usage_percentage, 1) + }) + + return jsonify(user_data) + + + +@admin_bp.route('/admin/users', methods=['POST']) +@login_required +def admin_add_user(): + # Check if user is admin + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + data = request.json + if not data: + return jsonify({'error': 'No data provided'}), 400 + + # Validate required fields + required_fields = ['username', 'email', 'password'] + for field in required_fields: + if field not in data: + return jsonify({'error': f'Missing required field: {field}'}), 400 + + # Check if username or email already exists + if User.query.filter_by(username=data['username']).first(): + return jsonify({'error': 'Username already exists'}), 400 + + if User.query.filter_by(email=data['email']).first(): + return jsonify({'error': 'Email already exists'}), 400 + + # Create new user + hashed_password = bcrypt.generate_password_hash(data['password']).decode('utf-8') + new_user = User( + username=data['username'], + email=data['email'], + password=hashed_password, + is_admin=data.get('is_admin', False), + monthly_token_budget=data.get('monthly_token_budget'), + monthly_transcription_budget=data.get('monthly_transcription_budget') + ) + + db.session.add(new_user) + db.session.commit() + + return jsonify({ + 'id': new_user.id, + 'username': new_user.username, + 'email': new_user.email, + 'is_admin': new_user.is_admin, + 'recordings_count': 0, + 'storage_used': 0, + 'monthly_token_budget': new_user.monthly_token_budget, + 'current_token_usage': 0, + 'token_usage_percentage': 0, + 'monthly_transcription_budget': new_user.monthly_transcription_budget, + 'monthly_transcription_budget_minutes': (new_user.monthly_transcription_budget // 60) if new_user.monthly_transcription_budget else None, + 'current_transcription_usage': 0, + 'current_transcription_usage_minutes': 0, + 'transcription_usage_percentage': 0 + }), 201 + + + +@admin_bp.route('/admin/users/', methods=['PUT']) +@login_required +def admin_update_user(user_id): + # Check if user is admin + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + user = db.session.get(User, user_id) + if not user: + return jsonify({'error': 'User not found'}), 404 + + data = request.json + if not data: + return jsonify({'error': 'No data provided'}), 400 + + # Update user fields + if 'username' in data and data['username'] != user.username: + # Check if username already exists + if User.query.filter_by(username=data['username']).first(): + return jsonify({'error': 'Username already exists'}), 400 + user.username = data['username'] + + if 'email' in data and data['email'] != user.email: + # Check if email already exists + if User.query.filter_by(email=data['email']).first(): + return jsonify({'error': 'Email already exists'}), 400 + user.email = data['email'] + + if 'password' in data and data['password']: + user.password = bcrypt.generate_password_hash(data['password']).decode('utf-8') + + if 'is_admin' in data: + user.is_admin = data['is_admin'] + + if 'can_share_publicly' in data: + user.can_share_publicly = data['can_share_publicly'] + + if 'monthly_token_budget' in data: + # Allow setting to None (unlimited) or a positive integer + budget = data['monthly_token_budget'] + if budget is None or budget == '' or budget == 0: + user.monthly_token_budget = None + else: + user.monthly_token_budget = int(budget) + + if 'monthly_transcription_budget' in data: + # Allow setting to None (unlimited) or a positive integer (in seconds) + budget = data['monthly_transcription_budget'] + if budget is None or budget == '' or budget == 0: + user.monthly_transcription_budget = None + else: + user.monthly_transcription_budget = int(budget) + + db.session.commit() + + # Get recordings count and storage used + recordings_count = len(user.recordings) + storage_used = sum(r.file_size for r in user.recordings if r.file_size) or 0 + + # Get current month token usage + current_usage = token_tracker.get_monthly_usage(user.id) + usage_percentage = (current_usage / user.monthly_token_budget * 100) if user.monthly_token_budget else 0 + + # Get current month transcription usage + current_transcription_usage = transcription_tracker.get_monthly_usage(user.id) + transcription_usage_percentage = (current_transcription_usage / user.monthly_transcription_budget * 100) if user.monthly_transcription_budget else 0 + + return jsonify({ + 'id': user.id, + 'username': user.username, + 'email': user.email, + 'is_admin': user.is_admin, + 'can_share_publicly': user.can_share_publicly, + 'recordings_count': recordings_count, + 'storage_used': storage_used, + 'monthly_token_budget': user.monthly_token_budget, + 'current_token_usage': current_usage, + 'token_usage_percentage': round(usage_percentage, 1), + 'monthly_transcription_budget': user.monthly_transcription_budget, + 'monthly_transcription_budget_minutes': (user.monthly_transcription_budget // 60) if user.monthly_transcription_budget else None, + 'current_transcription_usage': current_transcription_usage, + 'current_transcription_usage_minutes': current_transcription_usage // 60, + 'transcription_usage_percentage': round(transcription_usage_percentage, 1) + }) + + + +@admin_bp.route('/admin/users/', methods=['DELETE']) +@login_required +def admin_delete_user(user_id): + # Check if user is admin + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + # Prevent deleting self + if user_id == current_user.id: + return jsonify({'error': 'Cannot delete your own account'}), 400 + + user = db.session.get(User, user_id) + if not user: + return jsonify({'error': 'User not found'}), 404 + + # Capture details before deletion for audit + _audit_details = {'username': user.username, 'email': user.email} + + # Delete user's recordings and audio files + total_chunks = 0 + if ENABLE_INQUIRE_MODE: + total_chunks = TranscriptChunk.query.filter_by(user_id=user_id).count() + if total_chunks > 0: + current_app.logger.info(f"Deleting {total_chunks} transcript chunks with embeddings for user {user_id}") + + for recording in user.recordings: + try: + if recording.audio_path and os.path.exists(recording.audio_path): + os.remove(recording.audio_path) + except Exception as e: + current_app.logger.error(f"Error deleting audio file {recording.audio_path}: {e}") + + # Delete user (cascade will handle all related data including chunks/embeddings) + db.session.delete(user) + db.session.commit() + + # Audit AFTER successful deletion to avoid logging failures + audit_delete('user', user_id, details=_audit_details) + db.session.commit() + + if ENABLE_INQUIRE_MODE and total_chunks > 0: + current_app.logger.info(f"Successfully deleted {total_chunks} embeddings and chunks for user {user_id}") + + return jsonify({'success': True}) + + + +@admin_bp.route('/admin/users//toggle-admin', methods=['POST']) +@login_required +def admin_toggle_admin(user_id): + # Check if user is admin + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + # Prevent changing own admin status + if user_id == current_user.id: + return jsonify({'error': 'Cannot change your own admin status'}), 400 + + user = db.session.get(User, user_id) + if not user: + return jsonify({'error': 'User not found'}), 404 + + # Toggle admin status + user.is_admin = not user.is_admin + db.session.commit() + + return jsonify({'success': True, 'is_admin': user.is_admin}) + + + +@admin_bp.route('/admin/stats', methods=['GET']) +@login_required +def admin_get_stats(): + # Check if user is admin + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + # Get total users + total_users = User.query.count() + + # Get total recordings + total_recordings = Recording.query.count() + + # Get recordings by status + completed_recordings = Recording.query.filter_by(status='COMPLETED').count() + processing_recordings = Recording.query.filter(Recording.status.in_(['PROCESSING', 'SUMMARIZING'])).count() + pending_recordings = Recording.query.filter_by(status='PENDING').count() + failed_recordings = Recording.query.filter_by(status='FAILED').count() + + # Get total storage used + total_storage = db.session.query(db.func.sum(Recording.file_size)).scalar() or 0 + + # Get top users by storage + top_users_query = db.session.query( + User.id, + User.username, + db.func.count(Recording.id).label('recordings_count'), + db.func.sum(Recording.file_size).label('storage_used') + ).join(Recording, User.id == Recording.user_id, isouter=True) \ + .group_by(User.id) \ + .order_by(db.func.sum(Recording.file_size).desc()) \ + .limit(5) + + top_users = [] + for user_id, username, recordings_count, storage_used in top_users_query: + top_users.append({ + 'id': user_id, + 'username': username, + 'recordings_count': recordings_count or 0, + 'storage_used': storage_used or 0 + }) + + # Get total queries (chat requests) + # This is a placeholder - you would need to track this in your database + total_queries = 0 + + return jsonify({ + 'total_users': total_users, + 'total_recordings': total_recordings, + 'completed_recordings': completed_recordings, + 'processing_recordings': processing_recordings, + 'pending_recordings': pending_recordings, + 'failed_recordings': failed_recordings, + 'total_storage': total_storage, + 'top_users': top_users, + 'total_queries': total_queries + }) + + +# --- Token Usage Stats --- + +@admin_bp.route('/admin/token-stats', methods=['GET']) +@login_required +def admin_get_token_stats(): + """Get overall token usage statistics.""" + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + try: + # Get today's usage + today_usage = token_tracker.get_today_usage() + + # Get current month usage for all users + monthly_stats = token_tracker.get_monthly_stats(months=1) + current_month = monthly_stats[-1] if monthly_stats else {'tokens': 0, 'cost': 0} + + # Get per-user stats for current month + user_stats = token_tracker.get_user_stats() + + # Calculate totals + total_monthly_tokens = current_month.get('tokens', 0) + total_monthly_cost = current_month.get('cost', 0) + + return jsonify({ + 'today': today_usage, + 'current_month': { + 'tokens': total_monthly_tokens, + 'cost': total_monthly_cost + }, + 'user_count_with_usage': len([u for u in user_stats if u['current_usage'] > 0]), + 'users_over_80_percent': len([u for u in user_stats if u['percentage'] >= 80]), + 'users_at_100_percent': len([u for u in user_stats if u['percentage'] >= 100]) + }) + + except Exception as e: + current_app.logger.error(f"Error getting token stats: {e}") + return jsonify({'error': str(e)}), 500 + + +@admin_bp.route('/admin/token-stats/daily', methods=['GET']) +@login_required +def admin_get_daily_token_stats(): + """Get daily token usage for charts (last 30 days).""" + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + try: + days = request.args.get('days', 30, type=int) + user_id = request.args.get('user_id', type=int) + + daily_stats = token_tracker.get_daily_stats(days=days, user_id=user_id) + + return jsonify({ + 'stats': daily_stats, + 'days': days + }) + + except Exception as e: + current_app.logger.error(f"Error getting daily token stats: {e}") + return jsonify({'error': str(e)}), 500 + + +@admin_bp.route('/admin/token-stats/monthly', methods=['GET']) +@login_required +def admin_get_monthly_token_stats(): + """Get monthly token usage for charts (last 12 months).""" + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + try: + months = request.args.get('months', 12, type=int) + + monthly_stats = token_tracker.get_monthly_stats(months=months) + + return jsonify({ + 'stats': monthly_stats, + 'months': months + }) + + except Exception as e: + current_app.logger.error(f"Error getting monthly token stats: {e}") + return jsonify({'error': str(e)}), 500 + + +@admin_bp.route('/admin/token-stats/users', methods=['GET']) +@login_required +def admin_get_user_token_stats(): + """Get per-user token usage for current month.""" + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + try: + user_stats = token_tracker.get_user_stats() + + return jsonify({ + 'users': user_stats + }) + + except Exception as e: + current_app.logger.error(f"Error getting user token stats: {e}") + return jsonify({'error': str(e)}), 500 + + +# --- Transcription Usage Stats --- + + +@admin_bp.route('/admin/transcription-stats', methods=['GET']) +@login_required +def admin_get_transcription_stats(): + """Get overall transcription usage statistics.""" + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + try: + # Get today's usage + today_usage = transcription_tracker.get_today_usage() + + # Get current month usage for all users + monthly_stats = transcription_tracker.get_monthly_stats(months=1) + current_month = monthly_stats[-1] if monthly_stats else {'seconds': 0, 'minutes': 0, 'cost': 0} + + # Get per-user stats for current month + user_stats = transcription_tracker.get_user_stats() + + # Calculate totals + total_monthly_seconds = current_month.get('seconds', 0) + total_monthly_cost = current_month.get('cost', 0) + + return jsonify({ + 'today': today_usage, + 'current_month': { + 'seconds': total_monthly_seconds, + 'minutes': total_monthly_seconds // 60, + 'cost': total_monthly_cost + }, + 'user_count_with_usage': len([u for u in user_stats if u['current_usage_seconds'] > 0]), + 'users_over_80_percent': len([u for u in user_stats if u['percentage'] >= 80]), + 'users_at_100_percent': len([u for u in user_stats if u['percentage'] >= 100]) + }) + + except Exception as e: + current_app.logger.error(f"Error getting transcription stats: {e}") + return jsonify({'error': str(e)}), 500 + + +@admin_bp.route('/admin/transcription-stats/daily', methods=['GET']) +@login_required +def admin_get_daily_transcription_stats(): + """Get daily transcription usage for charts (last 30 days).""" + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + try: + days = request.args.get('days', 30, type=int) + user_id = request.args.get('user_id', type=int) + + daily_stats = transcription_tracker.get_daily_stats(days=days, user_id=user_id) + + return jsonify({ + 'stats': daily_stats, + 'days': days + }) + + except Exception as e: + current_app.logger.error(f"Error getting daily transcription stats: {e}") + return jsonify({'error': str(e)}), 500 + + +@admin_bp.route('/admin/transcription-stats/monthly', methods=['GET']) +@login_required +def admin_get_monthly_transcription_stats(): + """Get monthly transcription usage for charts (last 12 months).""" + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + try: + months = request.args.get('months', 12, type=int) + + monthly_stats = transcription_tracker.get_monthly_stats(months=months) + + return jsonify({ + 'stats': monthly_stats, + 'months': months + }) + + except Exception as e: + current_app.logger.error(f"Error getting monthly transcription stats: {e}") + return jsonify({'error': str(e)}), 500 + + +@admin_bp.route('/admin/transcription-stats/users', methods=['GET']) +@login_required +def admin_get_user_transcription_stats(): + """Get per-user transcription usage for current month.""" + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + try: + user_stats = transcription_tracker.get_user_stats() + + return jsonify({ + 'users': user_stats + }) + + except Exception as e: + current_app.logger.error(f"Error getting user transcription stats: {e}") + return jsonify({'error': str(e)}), 500 + + +# --- Transcript Template Routes --- + + +@admin_bp.route('/admin/settings', methods=['GET']) +@login_required +def admin_get_settings(): + # Check if user is admin + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + settings = SystemSetting.query.all() + return jsonify([setting.to_dict() for setting in settings]) + + + +@admin_bp.route('/admin/settings', methods=['POST']) +@login_required +def admin_update_setting(): + # Check if user is admin + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + data = request.json + if not data: + return jsonify({'error': 'No data provided'}), 400 + + key = data.get('key') + value = data.get('value') + description = data.get('description') + setting_type = data.get('setting_type', 'string') + + if not key: + return jsonify({'error': 'Setting key is required'}), 400 + + # Validate setting type + valid_types = ['string', 'integer', 'boolean', 'float'] + if setting_type not in valid_types: + return jsonify({'error': f'Invalid setting type. Must be one of: {", ".join(valid_types)}'}), 400 + + # Validate value based on type + if setting_type == 'integer': + try: + int(value) if value is not None and value != '' else None + except (ValueError, TypeError): + return jsonify({'error': 'Value must be a valid integer'}), 400 + elif setting_type == 'float': + try: + float(value) if value is not None and value != '' else None + except (ValueError, TypeError): + return jsonify({'error': 'Value must be a valid number'}), 400 + elif setting_type == 'boolean': + if value not in ['true', 'false', '1', '0', 'yes', 'no', True, False, 1, 0]: + return jsonify({'error': 'Value must be a valid boolean (true/false, 1/0, yes/no)'}), 400 + + try: + setting = SystemSetting.set_setting(key, value, description, setting_type) + + # Update Flask's MAX_CONTENT_LENGTH immediately when file size limit changes + if key == 'max_file_size_mb' and value: + try: + new_limit = int(value) * 1024 * 1024 + current_app.config['MAX_CONTENT_LENGTH'] = new_limit + current_app.logger.info(f"Updated MAX_CONTENT_LENGTH to {value}MB") + except (ValueError, TypeError): + pass + + return jsonify(setting.to_dict()) + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error updating setting {key}: {e}") + return jsonify({'error': str(e)}), 500 + +# --- Configuration API --- + + +@admin_bp.route('/admin/auto-deletion/run', methods=['POST']) +@login_required +@csrf_exempt # Exempt since already protected by admin authentication +def run_auto_deletion(): + """Admin endpoint to manually trigger auto-deletion process.""" + if not current_user.is_admin: + return jsonify({'error': 'Admin access required'}), 403 + + try: + stats = process_auto_deletion() + return jsonify(stats) + except Exception as e: + current_app.logger.error(f"Error running auto-deletion: {e}") + return jsonify({'error': str(e)}), 500 + + + +@admin_bp.route('/admin/auto-deletion/stats', methods=['GET']) +@login_required +def get_auto_deletion_stats(): + """Get statistics about recordings eligible for auto-deletion.""" + if not current_user.is_admin: + return jsonify({'error': 'Admin access required'}), 403 + + try: + stats = { + 'enabled': ENABLE_AUTO_DELETION, + 'global_retention_days': GLOBAL_RETENTION_DAYS, + 'deletion_mode': DELETION_MODE, + 'eligible_count': 0, + 'exempted_count': 0, + 'no_retention_count': 0, + 'archived_count': 0 + } + + if ENABLE_AUTO_DELETION: + # Check ALL completed recordings (per-recording retention) + all_recordings = Recording.query.filter( + Recording.status == 'COMPLETED' + ).all() + + eligible = 0 + exempted = 0 + no_retention = 0 + current_time = datetime.utcnow() + + for recording in all_recordings: + # Check if exempt from deletion entirely + if is_recording_exempt_from_deletion(recording): + exempted += 1 + continue + + # Get the effective retention period for this recording + retention_days = get_retention_days_for_recording(recording) + + if not retention_days: + no_retention += 1 + continue + + # Calculate cutoff for this specific recording + cutoff_date = current_time - timedelta(days=retention_days) + + # Check if past retention period + if recording.created_at < cutoff_date: + eligible += 1 + + stats['eligible_count'] = eligible + stats['exempted_count'] = exempted + stats['no_retention_count'] = no_retention + + # Count already archived recordings + stats['archived_count'] = Recording.query.filter( + Recording.audio_deleted_at.is_not(None) + ).count() + + return jsonify(stats) + except Exception as e: + current_app.logger.error(f"Error fetching auto-deletion stats: {e}") + return jsonify({'error': str(e)}), 500 + + + +@admin_bp.route('/admin/auto-deletion/preview', methods=['GET']) +@login_required +def preview_auto_deletion(): + """Preview what would be deleted without actually deleting (dry-run).""" + if not current_user.is_admin: + return jsonify({'error': 'Admin access required'}), 403 + + try: + if not ENABLE_AUTO_DELETION: + return jsonify({'error': 'Auto-deletion is not enabled'}), 400 + + # Check ALL completed recordings (per-recording retention) + all_recordings = Recording.query.filter( + Recording.status == 'COMPLETED' + ).all() + + preview_data = { + 'total_checked': len(all_recordings), + 'would_delete': [], + 'would_exempt': [], + 'no_retention': [], + 'deletion_mode': DELETION_MODE, + 'global_retention_days': GLOBAL_RETENTION_DAYS, + 'supports_per_recording_retention': True + } + + current_time = datetime.utcnow() + + for recording in all_recordings: + rec_data = { + 'id': recording.id, + 'title': recording.title, + 'created_at': recording.created_at.isoformat(), + 'age_days': (current_time - recording.created_at).days, + 'tags': [tag.tag.name for tag in recording.tag_associations] + } + + # Check if exempt from deletion entirely + if is_recording_exempt_from_deletion(recording): + rec_data['exempt_reason'] = [] + if recording.deletion_exempt: + rec_data['exempt_reason'].append('manually_exempted') + for tag_assoc in recording.tag_associations: + if tag_assoc.tag.protect_from_deletion: + rec_data['exempt_reason'].append(f'tag:{tag_assoc.tag.name}') + preview_data['would_exempt'].append(rec_data) + continue + + # Get the effective retention period for this recording + retention_days = get_retention_days_for_recording(recording) + + if not retention_days: + rec_data['reason'] = 'no_retention_policy' + preview_data['no_retention'].append(rec_data) + continue + + rec_data['retention_days'] = retention_days + + # Calculate cutoff for this specific recording + cutoff_date = current_time - timedelta(days=retention_days) + + # Check if past retention period + if recording.created_at < cutoff_date: + rec_data['days_past_retention'] = (current_time - cutoff_date).days + preview_data['would_delete'].append(rec_data) + + return jsonify(preview_data) + except Exception as e: + current_app.logger.error(f"Error previewing auto-deletion: {e}") + return jsonify({'error': str(e)}), 500 + + + +@admin_bp.route('/api/admin/migrate_recordings', methods=['POST']) +@login_required +def migrate_existing_recordings_api(): + """API endpoint to migrate existing recordings for inquire mode (admin only).""" + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized. Admin access required.'}), 403 + + try: + # Count recordings that need processing + completed_recordings = Recording.query.filter_by(status='COMPLETED').all() + recordings_needing_processing = [] + + for recording in completed_recordings: + if recording.transcription: # Has transcription + chunk_count = TranscriptChunk.query.filter_by(recording_id=recording.id).count() + if chunk_count == 0: # No chunks yet + recordings_needing_processing.append(recording) + + if len(recordings_needing_processing) == 0: + return jsonify({ + 'success': True, + 'message': 'All recordings are already processed for inquire mode', + 'processed': 0, + 'total': len(completed_recordings) + }) + + # Process in small batches to avoid timeout + batch_size = min(5, len(recordings_needing_processing)) # Process max 5 at a time + processed = 0 + errors = 0 + + for i in range(min(batch_size, len(recordings_needing_processing))): + recording = recordings_needing_processing[i] + try: + success = process_recording_chunks(recording.id) + if success: + processed += 1 + else: + errors += 1 + except Exception as e: + current_app.logger.error(f"Error processing recording {recording.id} for migration: {e}") + errors += 1 + + remaining = max(0, len(recordings_needing_processing) - batch_size) + + return jsonify({ + 'success': True, + 'message': f'Processed {processed} recordings. {remaining} remaining.', + 'processed': processed, + 'errors': errors, + 'remaining': remaining, + 'total': len(recordings_needing_processing) + }) + + except Exception as e: + current_app.logger.error(f"Error in migration API: {e}") + return jsonify({'error': str(e)}), 500 + + +# --- Auto-Processing File Monitor Integration --- + + +@admin_bp.route('/admin/auto-process/status', methods=['GET']) +@login_required +def admin_get_auto_process_status(): + """Get the status of the automated file processing system.""" + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + try: + _, _, get_file_monitor_status = get_file_monitor_functions() + status = get_file_monitor_status() + + # Add configuration info + config = { + 'enabled': os.environ.get('ENABLE_AUTO_PROCESSING', 'false').lower() == 'true', + 'watch_directory': os.environ.get('AUTO_PROCESS_WATCH_DIR', '/data/auto-process'), + 'check_interval': int(os.environ.get('AUTO_PROCESS_CHECK_INTERVAL', '30')), + 'mode': os.environ.get('AUTO_PROCESS_MODE', 'admin_only'), + 'default_username': os.environ.get('AUTO_PROCESS_DEFAULT_USERNAME') + } + + return jsonify({ + 'status': status, + 'config': config + }) + + except Exception as e: + current_app.logger.error(f"Error getting auto-process status: {e}") + return jsonify({'error': str(e)}), 500 + + + +@admin_bp.route('/admin/auto-process/start', methods=['POST']) +@login_required +def admin_start_auto_process(): + """Start the automated file processing system.""" + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + try: + start_file_monitor, _, _ = get_file_monitor_functions() + start_file_monitor() + return jsonify({'success': True, 'message': 'Auto-processing started'}) + except Exception as e: + current_app.logger.error(f"Error starting auto-process: {e}") + return jsonify({'error': str(e)}), 500 + + + +@admin_bp.route('/admin/auto-process/stop', methods=['POST']) +@login_required +def admin_stop_auto_process(): + """Stop the automated file processing system.""" + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + try: + _, stop_file_monitor, _ = get_file_monitor_functions() + stop_file_monitor() + return jsonify({'success': True, 'message': 'Auto-processing stopped'}) + except Exception as e: + current_app.logger.error(f"Error stopping auto-process: {e}") + return jsonify({'error': str(e)}), 500 + + + +@admin_bp.route('/admin/auto-process/config', methods=['POST']) +@login_required +def admin_update_auto_process_config(): + """Update auto-processing configuration (requires restart).""" + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + try: + data = request.json + if not data: + return jsonify({'error': 'No configuration data provided'}), 400 + + # This endpoint would typically update environment variables or config files + # For now, we'll just return the current config and note that restart is required + return jsonify({ + 'success': True, + 'message': 'Configuration updated. Restart required to apply changes.', + 'note': 'Environment variables need to be updated manually and application restarted.' + }) + + except Exception as e: + current_app.logger.error(f"Error updating auto-process config: {e}") + return jsonify({'error': str(e)}), 500 + + + +@admin_bp.route('/admin/inquire/process-recordings', methods=['POST']) +@login_required +def admin_process_recordings_for_inquire(): + """Process all remaining recordings for inquire mode (chunk and embed them).""" + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + try: + # Get optional parameters from request + data = request.json or {} + batch_size = data.get('batch_size', 10) + max_recordings = data.get('max_recordings', None) + + # Find recordings that need processing + completed_recordings = Recording.query.filter_by(status='COMPLETED').all() + recordings_needing_processing = [] + + for recording in completed_recordings: + if recording.transcription: # Has transcription + chunk_count = TranscriptChunk.query.filter_by(recording_id=recording.id).count() + if chunk_count == 0: # No chunks yet + recordings_needing_processing.append(recording) + if max_recordings and len(recordings_needing_processing) >= max_recordings: + break + + total_to_process = len(recordings_needing_processing) + + if total_to_process == 0: + return jsonify({ + 'success': True, + 'message': 'All recordings are already processed for inquire mode.', + 'processed': 0, + 'total': 0 + }) + + # Process recordings in batches + processed = 0 + failed = [] + + for recording in recordings_needing_processing: + try: + success = process_recording_chunks(recording.id) + if success: + processed += 1 + current_app.logger.info(f"Admin API: Processed chunks for recording: {recording.title} ({recording.id})") + else: + failed.append({'id': recording.id, 'title': recording.title, 'reason': 'Processing returned false'}) + except Exception as e: + current_app.logger.error(f"Admin API: Failed to process recording {recording.id}: {e}") + failed.append({'id': recording.id, 'title': recording.title, 'reason': str(e)}) + + # Commit after each batch + if processed % batch_size == 0: + db.session.commit() + + # Final commit + db.session.commit() + + return jsonify({ + 'success': True, + 'message': f'Processed {processed} out of {total_to_process} recordings.', + 'processed': processed, + 'total': total_to_process, + 'failed': failed + }) + + except Exception as e: + current_app.logger.error(f"Error in admin process recordings endpoint: {e}") + db.session.rollback() + return jsonify({'error': str(e)}), 500 + + + +@admin_bp.route('/admin/inquire/status', methods=['GET']) +@login_required +def admin_inquire_status(): + """Get the status of recordings for inquire mode.""" + if not current_user.is_admin: + return jsonify({'error': 'Unauthorized'}), 403 + + try: + # Count total completed recordings + total_completed = Recording.query.filter_by(status='COMPLETED').count() + + # Count recordings with transcriptions + recordings_with_transcriptions = Recording.query.filter( + Recording.status == 'COMPLETED', + Recording.transcription.isnot(None), + Recording.transcription != '' + ).count() + + # Count recordings that have been processed for inquire mode + processed_recordings = db.session.query(Recording.id).join( + TranscriptChunk, Recording.id == TranscriptChunk.recording_id + ).distinct().count() + + # Count recordings that still need processing + completed_recordings = Recording.query.filter_by(status='COMPLETED').all() + need_processing = 0 + + for recording in completed_recordings: + if recording.transcription: # Has transcription + chunk_count = TranscriptChunk.query.filter_by(recording_id=recording.id).count() + if chunk_count == 0: # No chunks yet + need_processing += 1 + + # Get total chunks and embeddings count + total_chunks = TranscriptChunk.query.count() + + return jsonify({ + 'total_completed_recordings': total_completed, + 'recordings_with_transcriptions': recordings_with_transcriptions, + 'processed_for_inquire': processed_recordings, + 'need_processing': need_processing, + 'total_chunks': total_chunks, + 'embeddings_available': EMBEDDINGS_AVAILABLE + }) + + except Exception as e: + current_app.logger.error(f"Error getting inquire status: {e}") + return jsonify({'error': str(e)}), 500 + +# --- Group Management API (Admin Only) --- + + diff --git a/src/api/api_v1.py b/src/api/api_v1.py new file mode 100644 index 0000000..74cb081 --- /dev/null +++ b/src/api/api_v1.py @@ -0,0 +1,2259 @@ +""" +API v1 - RESTful API for external integrations. + +This blueprint provides a comprehensive REST API for: +- Dashboard widgets (gethomepage.dev, etc.) +- Automation tools (n8n, Zapier, etc.) +- Third-party integrations + +All endpoints require token authentication via: +- Authorization: Bearer +- X-API-Token: +- API-Token: +- ?token= query parameter +""" + +import os +import re +import json +from datetime import datetime, date, timedelta +from typing import Optional + +from flask import Blueprint, jsonify, request, current_app, send_file +from flask_login import login_required, current_user +from sqlalchemy import func, extract, or_, and_ + +from src.database import db +from src.models import Recording, User, Tag, RecordingTag, Speaker, Event +from src.models.processing_job import ProcessingJob +from src.models.token_usage import TokenUsage +from src.models.transcription_usage import TranscriptionUsage +from src.services.token_tracking import TokenTracker +from src.services.transcription_tracking import transcription_tracker +from src.file_exporter import format_transcription_with_template +from src.api.recordings import upload_file as _upload_file_ui + +# Create blueprint with /api/v1 prefix +api_v1_bp = Blueprint('api_v1', __name__, url_prefix='/api/v1') + +# Global helpers (will be injected from app) +has_recording_access = None +get_user_recording_status = None +set_user_recording_status = None +enrich_recording_dict_with_user_status = None +bcrypt = None +csrf = None +limiter = None +chunking_service = None + +# Token tracker instance +token_tracker = TokenTracker() + + +def init_api_v1_helpers(**kwargs): + """Initialize helper functions and extensions from app.""" + global has_recording_access, get_user_recording_status, set_user_recording_status + global enrich_recording_dict_with_user_status, bcrypt, csrf, limiter, chunking_service + has_recording_access = kwargs.get('has_recording_access') + get_user_recording_status = kwargs.get('get_user_recording_status') + set_user_recording_status = kwargs.get('set_user_recording_status') + enrich_recording_dict_with_user_status = kwargs.get('enrich_recording_dict_with_user_status') + bcrypt = kwargs.get('bcrypt') + csrf = kwargs.get('csrf') + limiter = kwargs.get('limiter') + chunking_service = kwargs.get('chunking_service') + + +def format_bytes(bytes_value: int) -> str: + """Format bytes to human-readable string.""" + if bytes_value is None: + bytes_value = 0 + for unit in ['B', 'KB', 'MB', 'GB', 'TB']: + if bytes_value < 1024: + return f"{bytes_value:.1f} {unit}" + bytes_value /= 1024 + return f"{bytes_value:.1f} PB" + + +# ============================================================================= +# OpenAPI Documentation +# ============================================================================= + +OPENAPI_SPEC = { + "openapi": "3.0.3", + "info": { + "title": "Speakr API", + "description": "REST API for Speakr - Audio transcription and note-taking application.\n\n## Authentication\nAll endpoints require token authentication via one of:\n- `Authorization: Bearer `\n- `X-API-Token: `\n- `API-Token: `\n- `?token=` query parameter\n\nGenerate tokens in Settings > API Tokens.", + "version": "1.0.0" + }, + "servers": [{"url": "/api/v1", "description": "API v1"}], + "components": { + "securitySchemes": { + "bearerAuth": {"type": "http", "scheme": "bearer"}, + "apiKeyHeader": {"type": "apiKey", "in": "header", "name": "X-API-Token"}, + "apiKeyQuery": {"type": "apiKey", "in": "query", "name": "token"} + }, + "schemas": { + "Recording": { + "type": "object", + "properties": { + "id": {"type": "integer"}, + "title": {"type": "string"}, + "status": {"type": "string", "enum": ["PENDING", "PROCESSING", "SUMMARIZING", "COMPLETED", "FAILED"]}, + "created_at": {"type": "string", "format": "date-time"}, + "meeting_date": {"type": "string", "format": "date-time"}, + "file_size": {"type": "integer"}, + "participants": {"type": "string"}, + "is_inbox": {"type": "boolean"}, + "is_highlighted": {"type": "boolean"}, + "tags": {"type": "array", "items": {"$ref": "#/components/schemas/Tag"}} + } + }, + "Tag": { + "type": "object", + "properties": { + "id": {"type": "integer"}, + "name": {"type": "string"}, + "color": {"type": "string"}, + "custom_prompt": {"type": "string"}, + "default_language": {"type": "string"}, + "default_min_speakers": {"type": "integer"}, + "default_max_speakers": {"type": "integer"} + } + }, + "Speaker": { + "type": "object", + "properties": { + "id": {"type": "integer"}, + "name": {"type": "string"}, + "use_count": {"type": "integer"}, + "has_voice_profile": {"type": "boolean"} + } + }, + "Error": { + "type": "object", + "properties": {"error": {"type": "string"}} + } + } + }, + "security": [{"bearerAuth": []}, {"apiKeyHeader": []}, {"apiKeyQuery": []}], + "paths": { + "/stats": { + "get": { + "tags": ["Stats"], + "summary": "Get system statistics", + "description": "Returns stats compatible with gethomepage.dev widgets", + "parameters": [{"name": "scope", "in": "query", "schema": {"type": "string", "enum": ["user", "all"], "default": "user"}, "description": "user=personal stats, all=global (admin only)"}], + "responses": {"200": {"description": "Stats object"}} + } + }, + "/recordings": { + "get": { + "tags": ["Recordings"], + "summary": "List recordings", + "parameters": [ + {"name": "page", "in": "query", "schema": {"type": "integer", "default": 1}}, + {"name": "per_page", "in": "query", "schema": {"type": "integer", "default": 25, "maximum": 100}}, + {"name": "status", "in": "query", "schema": {"type": "string", "enum": ["all", "pending", "processing", "completed", "failed"]}}, + {"name": "sort_by", "in": "query", "schema": {"type": "string", "enum": ["created_at", "meeting_date", "title", "file_size"]}}, + {"name": "sort_order", "in": "query", "schema": {"type": "string", "enum": ["asc", "desc"]}}, + {"name": "tag_id", "in": "query", "schema": {"type": "integer"}}, + {"name": "q", "in": "query", "schema": {"type": "string"}, "description": "Search query"} + ], + "responses": {"200": {"description": "Paginated list of recordings"}} + } + }, + "/recordings/{id}": { + "get": { + "tags": ["Recordings"], + "summary": "Get recording details", + "parameters": [ + {"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}, + {"name": "format", "in": "query", "schema": {"type": "string", "enum": ["full", "minimal"]}, "description": "minimal excludes large text fields"}, + {"name": "include", "in": "query", "schema": {"type": "string"}, "description": "Comma-separated: transcription,summary,notes"} + ], + "responses": {"200": {"description": "Recording details"}, "404": {"description": "Not found"}} + }, + "patch": { + "tags": ["Recordings"], + "summary": "Update recording", + "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], + "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"title": {"type": "string"}, "participants": {"type": "string"}, "notes": {"type": "string"}, "summary": {"type": "string"}, "meeting_date": {"type": "string"}, "is_inbox": {"type": "boolean"}, "is_highlighted": {"type": "boolean"}}}}}}, + "responses": {"200": {"description": "Updated recording"}} + }, + "delete": { + "tags": ["Recordings"], + "summary": "Delete recording", + "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], + "responses": {"200": {"description": "Deleted"}, "403": {"description": "Permission denied"}} + } + }, + "/recordings/{id}/transcript": { + "get": { + "tags": ["Recordings"], + "summary": "Get transcript", + "parameters": [ + {"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}, + {"name": "format", "in": "query", "schema": {"type": "string", "enum": ["json", "text", "srt", "vtt"], "default": "json"}} + ], + "responses": {"200": {"description": "Transcript in requested format"}} + } + }, + "/recordings/{id}/summary": { + "get": {"tags": ["Recordings"], "summary": "Get summary", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], "responses": {"200": {"description": "Summary markdown"}}}, + "put": {"tags": ["Recordings"], "summary": "Replace summary", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "required": ["summary"], "properties": {"summary": {"type": "string"}}}}}}, "responses": {"200": {"description": "Updated"}}} + }, + "/recordings/{id}/notes": { + "get": {"tags": ["Recordings"], "summary": "Get notes", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], "responses": {"200": {"description": "Notes markdown"}}}, + "put": {"tags": ["Recordings"], "summary": "Replace notes", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "required": ["notes"], "properties": {"notes": {"type": "string"}}}}}}, "responses": {"200": {"description": "Updated"}}} + }, + "/recordings/{id}/status": { + "get": {"tags": ["Recordings"], "summary": "Get processing status", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], "responses": {"200": {"description": "Status with queue position"}}} + }, + "/recordings/{id}/transcribe": { + "post": {"tags": ["Processing"], "summary": "Queue transcription", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"language": {"type": "string"}, "min_speakers": {"type": "integer"}, "max_speakers": {"type": "integer"}}}}}}, "responses": {"200": {"description": "Job queued"}}} + }, + "/recordings/{id}/summarize": { + "post": {"tags": ["Processing"], "summary": "Queue summarization", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"custom_prompt": {"type": "string"}}}}}}, "responses": {"200": {"description": "Job queued"}}} + }, + "/recordings/{id}/chat": { + "post": {"tags": ["Chat"], "summary": "Chat about recording", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "required": ["message"], "properties": {"message": {"type": "string"}, "conversation_history": {"type": "array"}}}}}}, "responses": {"200": {"description": "Chat response"}}} + }, + "/recordings/{id}/events": { + "get": {"tags": ["Events"], "summary": "Get calendar events", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], "responses": {"200": {"description": "List of events"}}} + }, + "/recordings/{id}/events/ics": { + "get": {"tags": ["Events"], "summary": "Download events as ICS", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], "responses": {"200": {"description": "ICS file", "content": {"text/calendar": {}}}}} + }, + "/recordings/{id}/audio": { + "get": {"tags": ["Audio"], "summary": "Download audio", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}, {"name": "download", "in": "query", "schema": {"type": "boolean"}}], "responses": {"200": {"description": "Audio file"}}} + }, + "/recordings/{id}/tags": { + "post": {"tags": ["Tags"], "summary": "Add tags to recording", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"tag_ids": {"type": "array", "items": {"type": "integer"}}}}}}}, "responses": {"200": {"description": "Tags added"}}} + }, + "/recordings/{id}/tags/{tag_id}": { + "delete": {"tags": ["Tags"], "summary": "Remove tag from recording", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}, {"name": "tag_id", "in": "path", "required": True, "schema": {"type": "integer"}}], "responses": {"200": {"description": "Tag removed"}}} + }, + "/recordings/{id}/speakers": { + "get": {"tags": ["Speakers"], "summary": "Get speakers in recording", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], "responses": {"200": {"description": "Speakers with suggestions"}}} + }, + "/recordings/{id}/speakers/assign": { + "put": { + "tags": ["Speakers"], + "summary": "Assign speaker names to transcription", + "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], + "requestBody": {"content": {"application/json": {"schema": {"type": "object", "required": ["speaker_map"], "properties": {"speaker_map": {"type": "object", "description": "Map of speaker labels to names. Values can be: string (name) or object {name, isMe}."}, "regenerate_summary": {"type": "boolean", "default": False}}}}}}, + "responses": {"200": {"description": "Speakers assigned"}, "404": {"description": "Recording not found"}, "403": {"description": "Permission denied"}} + } + }, + "/recordings/{id}/speakers/identify": { + "post": { + "tags": ["Speakers"], + "summary": "Auto-identify speakers via LLM", + "description": "Analyzes transcript context to suggest speaker names. Returns suggestions only - does not modify the recording.", + "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], + "responses": {"200": {"description": "Speaker identification suggestions"}, "400": {"description": "Transcription not available or unsupported format"}} + } + }, + "/recordings/batch": { + "patch": {"tags": ["Batch"], "summary": "Batch update recordings", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "required": ["recording_ids", "updates"], "properties": {"recording_ids": {"type": "array", "items": {"type": "integer"}}, "updates": {"type": "object"}}}}}}, "responses": {"200": {"description": "Batch results"}}}, + "delete": {"tags": ["Batch"], "summary": "Batch delete recordings", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "required": ["recording_ids"], "properties": {"recording_ids": {"type": "array", "items": {"type": "integer"}}}}}}}, "responses": {"200": {"description": "Batch results"}}} + }, + "/recordings/batch/transcribe": { + "post": {"tags": ["Batch"], "summary": "Batch queue transcriptions", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "required": ["recording_ids"], "properties": {"recording_ids": {"type": "array", "items": {"type": "integer"}}}}}}}, "responses": {"200": {"description": "Batch results"}}} + }, + "/recordings/upload": { + "post": { + "tags": ["Recordings"], + "summary": "Upload a recording (multipart form-data) and queue transcription", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "required": ["file"], + "properties": { + "file": {"type": "string", "format": "binary"}, + "notes": {"type": "string"}, + "file_last_modified": {"type": "string"}, + "language": {"type": "string"}, + "min_speakers": {"type": "integer"}, + "max_speakers": {"type": "integer"}, + "tag_id": {"type": "integer"}, + "tag_ids[0]": {"type": "integer"}, + "tag_ids[1]": {"type": "integer"} + } + } + } + } + }, + "responses": {"202": {"description": "Upload accepted and queued"}} + } + }, + "/tags": { + "get": {"tags": ["Tags"], "summary": "List tags", "responses": {"200": {"description": "List of tags"}}}, + "post": {"tags": ["Tags"], "summary": "Create tag", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "required": ["name"], "properties": {"name": {"type": "string"}, "color": {"type": "string"}, "custom_prompt": {"type": "string"}, "default_language": {"type": "string"}, "default_min_speakers": {"type": "integer"}, "default_max_speakers": {"type": "integer"}}}}}}, "responses": {"201": {"description": "Tag created"}}} + }, + "/tags/{id}": { + "put": {"tags": ["Tags"], "summary": "Update tag", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"name": {"type": "string"}, "color": {"type": "string"}, "custom_prompt": {"type": "string"}}}}}}, "responses": {"200": {"description": "Tag updated"}}}, + "delete": {"tags": ["Tags"], "summary": "Delete tag", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], "responses": {"200": {"description": "Tag deleted"}}} + }, + "/speakers": { + "get": {"tags": ["Speakers"], "summary": "List speakers", "responses": {"200": {"description": "List of speakers"}}}, + "post": {"tags": ["Speakers"], "summary": "Create speaker", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "required": ["name"], "properties": {"name": {"type": "string"}}}}}}, "responses": {"201": {"description": "Speaker created"}}} + }, + "/speakers/{id}": { + "put": {"tags": ["Speakers"], "summary": "Update speaker", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"name": {"type": "string"}}}}}}, "responses": {"200": {"description": "Speaker updated"}}}, + "delete": {"tags": ["Speakers"], "summary": "Delete speaker", "parameters": [{"name": "id", "in": "path", "required": True, "schema": {"type": "integer"}}], "responses": {"200": {"description": "Speaker deleted"}}} + }, + "/settings/auto-summarization": { + "put": { + "tags": ["Settings"], + "summary": "Toggle auto-summarization", + "description": "Enable or disable auto-summarization for the current user.", + "requestBody": {"content": {"application/json": {"schema": {"type": "object", "required": ["enabled"], "properties": {"enabled": {"type": "boolean"}}}}}}, + "responses": {"200": {"description": "Setting updated"}} + } + } + }, + "tags": [ + {"name": "Stats", "description": "System statistics for dashboards"}, + {"name": "Recordings", "description": "Recording CRUD operations"}, + {"name": "Processing", "description": "Transcription and summarization"}, + {"name": "Chat", "description": "Chat with recordings"}, + {"name": "Events", "description": "Calendar events"}, + {"name": "Audio", "description": "Audio file operations"}, + {"name": "Tags", "description": "Tag management"}, + {"name": "Speakers", "description": "Speaker management"}, + {"name": "Batch", "description": "Batch operations"}, + {"name": "Settings", "description": "User settings"} + ] +} + + +@api_v1_bp.route('/openapi.json', methods=['GET']) +def get_openapi_spec(): + """Return OpenAPI specification.""" + return jsonify(OPENAPI_SPEC) + + +@api_v1_bp.route('/docs', methods=['GET']) +def get_docs(): + """Serve Swagger UI documentation.""" + from flask import Response + html = ''' + + + Speakr API v1 Documentation + + + +
+ + + +''' + return Response(html, mimetype='text/html') + + +# ============================================================================= +# Stats Endpoint (Homepage Widget Compatible) +# ============================================================================= + +@api_v1_bp.route('/stats', methods=['GET']) +@login_required +def get_stats(): + """ + Get system/user statistics for dashboard widgets. + + Query params: + scope: 'user' (default) or 'all' (admin only) + + Returns JSON compatible with gethomepage.dev custom API widget: + { + "recordings": {"total": N, "completed": N, "processing": N, "pending": N, "failed": N}, + "storage": {"used_bytes": N, "used_human": "X.X GB"}, + "queue": {"jobs_queued": N, "jobs_processing": N}, + "tokens": {"used_this_month": N, "budget": N, "percentage": N}, + "transcription": {"used_this_month_seconds": N, "used_this_month_minutes": N, "budget_seconds": N, "budget_minutes": N, "percentage": N, "estimated_cost": N}, + "activity": {"recordings_today": N, "last_transcription": "ISO datetime"} + } + """ + scope = request.args.get('scope', 'user') + + # Admin-only for global stats + if scope == 'all' and not current_user.is_admin: + return jsonify({'error': 'Admin access required for global stats'}), 403 + + # Build query filters based on scope + if scope == 'user': + recording_filter = Recording.user_id == current_user.id + job_filter = ProcessingJob.user_id == current_user.id + user_id_for_tokens = current_user.id + else: + recording_filter = True # No filter = all recordings + job_filter = True + user_id_for_tokens = None # Will aggregate all users + + # Recording counts by status + total = Recording.query.filter(recording_filter).count() + completed = Recording.query.filter(recording_filter, Recording.status == 'COMPLETED').count() + processing = Recording.query.filter( + recording_filter, + Recording.status.in_(['PROCESSING', 'SUMMARIZING']) + ).count() + pending = Recording.query.filter(recording_filter, Recording.status == 'PENDING').count() + failed = Recording.query.filter(recording_filter, Recording.status == 'FAILED').count() + + # Storage calculation + storage_query = db.session.query(func.sum(Recording.file_size)).filter(recording_filter) + storage_bytes = storage_query.scalar() or 0 + + # Queue status + jobs_queued = ProcessingJob.query.filter( + job_filter, + ProcessingJob.status == 'queued' + ).count() + jobs_processing = ProcessingJob.query.filter( + job_filter, + ProcessingJob.status == 'processing' + ).count() + + # Token usage + tokens_data = {} + if user_id_for_tokens: + # Single user stats + monthly_usage = token_tracker.get_monthly_usage(user_id_for_tokens) + user = db.session.get(User, user_id_for_tokens) + budget = user.monthly_token_budget if user else None + + tokens_data = { + 'used_this_month': monthly_usage, + 'budget': budget, + 'percentage': round((monthly_usage / budget * 100), 1) if budget else None + } + else: + # Aggregate all users (admin scope) + current_year = date.today().year + current_month = date.today().month + total_usage = db.session.query(func.sum(TokenUsage.total_tokens)).filter( + extract('year', TokenUsage.date) == current_year, + extract('month', TokenUsage.date) == current_month + ).scalar() or 0 + + tokens_data = { + 'used_this_month': total_usage, + 'budget': None, + 'percentage': None + } + + # Transcription usage + transcription_data = {} + if user_id_for_tokens: + # Single user stats + monthly_transcription = transcription_tracker.get_monthly_usage(user_id_for_tokens) + monthly_cost = transcription_tracker.get_monthly_cost(user_id_for_tokens) + user = db.session.get(User, user_id_for_tokens) + transcription_budget = user.monthly_transcription_budget if user else None + + transcription_data = { + 'used_this_month_seconds': monthly_transcription, + 'used_this_month_minutes': monthly_transcription // 60, + 'budget_seconds': transcription_budget, + 'budget_minutes': transcription_budget // 60 if transcription_budget else None, + 'percentage': round((monthly_transcription / transcription_budget * 100), 1) if transcription_budget else None, + 'estimated_cost': round(monthly_cost, 4) + } + else: + # Aggregate all users (admin scope) + current_year = date.today().year + current_month = date.today().month + total_seconds = db.session.query(func.sum(TranscriptionUsage.audio_duration_seconds)).filter( + extract('year', TranscriptionUsage.date) == current_year, + extract('month', TranscriptionUsage.date) == current_month + ).scalar() or 0 + total_cost = db.session.query(func.sum(TranscriptionUsage.estimated_cost)).filter( + extract('year', TranscriptionUsage.date) == current_year, + extract('month', TranscriptionUsage.date) == current_month + ).scalar() or 0 + + transcription_data = { + 'used_this_month_seconds': total_seconds, + 'used_this_month_minutes': total_seconds // 60, + 'budget_seconds': None, + 'budget_minutes': None, + 'percentage': None, + 'estimated_cost': round(total_cost, 4) + } + + # Recent activity + today_start = datetime.combine(date.today(), datetime.min.time()) + recordings_today = Recording.query.filter( + recording_filter, + Recording.created_at >= today_start + ).count() + + # Last completed transcription + last_completed = Recording.query.filter( + recording_filter, + Recording.status == 'COMPLETED', + Recording.completed_at.isnot(None) + ).order_by(Recording.completed_at.desc()).first() + + last_transcription = last_completed.completed_at.isoformat() if last_completed and last_completed.completed_at else None + + # Build response + response = { + 'recordings': { + 'total': total, + 'completed': completed, + 'processing': processing, + 'pending': pending, + 'failed': failed + }, + 'storage': { + 'used_bytes': storage_bytes, + 'used_human': format_bytes(storage_bytes) + }, + 'queue': { + 'jobs_queued': jobs_queued, + 'jobs_processing': jobs_processing + }, + 'tokens': tokens_data, + 'transcription': transcription_data, + 'activity': { + 'recordings_today': recordings_today, + 'last_transcription': last_transcription + } + } + + # Add user counts for admin scope + if scope == 'all' and current_user.is_admin: + total_users = User.query.count() + # Active = users with recordings in last 30 days + cutoff = datetime.utcnow() - timedelta(days=30) + active_users = db.session.query(func.count(func.distinct(Recording.user_id))).filter( + Recording.created_at >= cutoff + ).scalar() or 0 + + response['users'] = { + 'total': total_users, + 'active': active_users + } + + return jsonify(response) + + +# ============================================================================= +# Recordings List with Enhanced Filtering +# ============================================================================= + +@api_v1_bp.route('/recordings', methods=['GET']) +@login_required +def list_recordings(): + """ + List recordings with filtering and pagination. + + Query params: + page: Page number (default: 1) + per_page: Items per page (default: 25, max: 100) + status: Filter by status (pending, processing, completed, failed, all) + sort_by: Sort field (created_at, meeting_date, title, file_size, status) + sort_order: asc or desc (default: desc) + date_from: Filter from date (ISO format) + date_to: Filter to date (ISO format) + tag_id: Filter by tag ID + q: Search query (title, participants) + inbox: Filter by inbox status (true/false) + starred: Filter by starred status (true/false) + """ + # Parse query parameters + page = request.args.get('page', 1, type=int) + per_page = min(request.args.get('per_page', 25, type=int), 100) + status_filter = request.args.get('status', 'all').lower() + sort_by = request.args.get('sort_by', 'created_at') + sort_order = request.args.get('sort_order', 'desc').lower() + date_from = request.args.get('date_from') + date_to = request.args.get('date_to') + tag_id = request.args.get('tag_id', type=int) + search_query = request.args.get('q', '').strip() + inbox_filter = request.args.get('inbox') + starred_filter = request.args.get('starred') + + # Base query - user's recordings + query = Recording.query.filter(Recording.user_id == current_user.id) + + # Status filter + if status_filter == 'pending': + query = query.filter(Recording.status == 'PENDING') + elif status_filter == 'processing': + query = query.filter(Recording.status.in_(['PROCESSING', 'SUMMARIZING'])) + elif status_filter == 'completed': + query = query.filter(Recording.status == 'COMPLETED') + elif status_filter == 'failed': + query = query.filter(Recording.status == 'FAILED') + # 'all' = no status filter + + # Date filters + if date_from: + try: + from_date = datetime.fromisoformat(date_from.replace('Z', '+00:00')) + query = query.filter(Recording.created_at >= from_date) + except ValueError: + pass + + if date_to: + try: + to_date = datetime.fromisoformat(date_to.replace('Z', '+00:00')) + query = query.filter(Recording.created_at <= to_date) + except ValueError: + pass + + # Tag filter + if tag_id: + query = query.join(RecordingTag).filter(RecordingTag.tag_id == tag_id) + + # Search filter + if search_query: + search_pattern = f'%{search_query}%' + query = query.filter( + or_( + Recording.title.ilike(search_pattern), + Recording.participants.ilike(search_pattern) + ) + ) + + # Inbox filter + if inbox_filter is not None: + is_inbox = inbox_filter.lower() == 'true' + query = query.filter(Recording.is_inbox == is_inbox) + + # Starred filter + if starred_filter is not None: + is_starred = starred_filter.lower() == 'true' + query = query.filter(Recording.is_highlighted == is_starred) + + # Sorting + sort_columns = { + 'created_at': Recording.created_at, + 'meeting_date': Recording.meeting_date, + 'title': Recording.title, + 'file_size': Recording.file_size, + 'status': Recording.status + } + sort_column = sort_columns.get(sort_by, Recording.created_at) + + if sort_order == 'asc': + query = query.order_by(sort_column.asc()) + else: + query = query.order_by(sort_column.desc()) + + # Pagination + pagination = query.paginate(page=page, per_page=per_page, error_out=False) + + # Build response + recordings = [] + for r in pagination.items: + recordings.append({ + 'id': r.id, + 'title': r.title, + 'status': r.status, + 'created_at': r.created_at.isoformat() if r.created_at else None, + 'meeting_date': r.meeting_date.isoformat() if r.meeting_date else None, + 'file_size': r.file_size, + 'original_filename': r.original_filename, + 'participants': r.participants, + 'is_inbox': r.is_inbox, + 'is_highlighted': r.is_highlighted, + 'audio_available': r.audio_deleted_at is None, + 'has_transcription': bool(r.transcription), + 'has_summary': bool(r.summary), + 'error_message': r.error_message if r.status == 'FAILED' else None, + 'tags': [{'id': t.id, 'name': t.name, 'color': t.color} for t in r.tags] + }) + + return jsonify({ + 'recordings': recordings, + 'pagination': { + 'page': pagination.page, + 'per_page': pagination.per_page, + 'total': pagination.total, + 'total_pages': pagination.pages, + 'has_next': pagination.has_next, + 'has_prev': pagination.has_prev + } + }) + + +# ============================================================================= +# Recording Detail +# ============================================================================= + +@api_v1_bp.route('/recordings/', methods=['GET']) +@login_required +def get_recording(recording_id): + """ + Get full recording details. + + Query params: + include: Comma-separated fields to include (transcription, summary, notes) + Default: all fields + format: 'full' (default) or 'minimal' (excludes large text fields) + """ + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'Permission denied'}), 403 + + include = request.args.get('include', 'transcription,summary,notes') + include_fields = [f.strip() for f in include.split(',')] + format_type = request.args.get('format', 'full') + + response = { + 'id': recording.id, + 'title': recording.title, + 'status': recording.status, + 'participants': recording.participants, + 'created_at': recording.created_at.isoformat() if recording.created_at else None, + 'meeting_date': recording.meeting_date.isoformat() if recording.meeting_date else None, + 'completed_at': recording.completed_at.isoformat() if recording.completed_at else None, + 'file_size': recording.file_size, + 'original_filename': recording.original_filename, + 'mime_type': recording.mime_type, + 'is_inbox': recording.is_inbox, + 'is_highlighted': recording.is_highlighted, + 'audio_available': recording.audio_deleted_at is None, + 'processing_time_seconds': recording.processing_time_seconds, + 'error_message': recording.error_message if recording.status == 'FAILED' else None, + 'tags': [{'id': t.id, 'name': t.name, 'color': t.color} for t in recording.tags], + 'duplicate_info': recording.get_duplicate_info() + } + + # Include large text fields based on params + if format_type != 'minimal': + if 'transcription' in include_fields: + # Format transcription using user's default template + response['transcription'] = format_transcription_with_template( + recording.transcription, current_user + ) if recording.transcription else None + if 'summary' in include_fields: + response['summary'] = recording.summary + if 'notes' in include_fields: + response['notes'] = recording.notes + + return jsonify(response) + + +# ============================================================================= +# Recording Transcript/Summary/Notes Individual Endpoints +# ============================================================================= + +@api_v1_bp.route('/recordings//transcript', methods=['GET']) +@login_required +def get_transcript(recording_id): + """ + Get transcript in various formats. + + Query params: + format: json (default), text, srt, vtt + """ + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'Permission denied'}), 403 + + if not recording.transcription: + return jsonify({'error': 'No transcription available'}), 404 + + format_type = request.args.get('format', 'json').lower() + + if format_type == 'json': + try: + segments = json.loads(recording.transcription) + return jsonify({ + 'format': 'json', + 'segments': segments + }) + except json.JSONDecodeError: + return jsonify({ + 'format': 'json', + 'segments': [], + 'raw': recording.transcription + }) + + elif format_type == 'text': + # Use user's default template for text format + formatted = format_transcription_with_template(recording.transcription, current_user) + return jsonify({ + 'format': 'text', + 'content': formatted + }) + + elif format_type in ['srt', 'vtt']: + try: + segments = json.loads(recording.transcription) + lines = [] + + if format_type == 'vtt': + lines.append('WEBVTT') + lines.append('') + + for i, seg in enumerate(segments, 1): + start = seg.get('start_time', seg.get('start', 0)) + end = seg.get('end_time', seg.get('end', start + 1)) + text = seg.get('sentence') or seg.get('text', '') + speaker = seg.get('speaker', '') + + # Format timestamps + def fmt_time(seconds, use_comma=False): + h = int(seconds // 3600) + m = int((seconds % 3600) // 60) + s = int(seconds % 60) + ms = int((seconds - int(seconds)) * 1000) + sep = ',' if use_comma else '.' + return f"{h:02d}:{m:02d}:{s:02d}{sep}{ms:03d}" + + if format_type == 'srt': + lines.append(str(i)) + lines.append(f"{fmt_time(start, True)} --> {fmt_time(end, True)}") + else: + lines.append(f"{fmt_time(start)} --> {fmt_time(end)}") + + if speaker: + lines.append(f"{text}") + else: + lines.append(text) + lines.append('') + + return jsonify({ + 'format': format_type, + 'content': '\n'.join(lines) + }) + except (json.JSONDecodeError, TypeError): + return jsonify({'error': 'Cannot generate subtitle format from transcript'}), 400 + + return jsonify({'error': f'Unknown format: {format_type}'}), 400 + + +@api_v1_bp.route('/recordings//summary', methods=['GET']) +@login_required +def get_summary(recording_id): + """Get summary markdown.""" + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'Permission denied'}), 403 + + return jsonify({ + 'summary': recording.summary, + 'has_summary': bool(recording.summary) + }) + + +@api_v1_bp.route('/recordings//notes', methods=['GET']) +@login_required +def get_notes(recording_id): + """Get notes markdown.""" + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'Permission denied'}), 403 + + return jsonify({ + 'notes': recording.notes, + 'has_notes': bool(recording.notes) + }) + + +# ============================================================================= +# Recording Update Operations +# ============================================================================= + +@api_v1_bp.route('/recordings/', methods=['PATCH']) +@login_required +def update_recording(recording_id): + """ + Update recording metadata, notes, or summary. + + Request body (all fields optional): + { + "title": "Updated Title", + "participants": "Alice, Bob", + "notes": "Updated notes...", + "summary": "Updated summary...", + "meeting_date": "2024-01-15T09:00:00Z", + "is_inbox": false, + "is_highlighted": true + } + """ + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'Permission denied'}), 403 + + data = request.get_json() + if not data: + return jsonify({'error': 'No data provided'}), 400 + + # Update fields if provided + if 'title' in data: + recording.title = data['title'] + if 'participants' in data: + recording.participants = data['participants'] + if 'notes' in data: + recording.notes = data['notes'] + if 'summary' in data: + recording.summary = data['summary'] + if 'meeting_date' in data: + try: + if data['meeting_date']: + recording.meeting_date = datetime.fromisoformat(data['meeting_date'].replace('Z', '+00:00')) + else: + recording.meeting_date = None + except ValueError: + return jsonify({'error': 'Invalid meeting_date format'}), 400 + if 'is_inbox' in data: + recording.is_inbox = bool(data['is_inbox']) + if 'is_highlighted' in data: + recording.is_highlighted = bool(data['is_highlighted']) + + db.session.commit() + + return jsonify({ + 'success': True, + 'recording': { + 'id': recording.id, + 'title': recording.title, + 'participants': recording.participants, + 'notes': recording.notes, + 'summary': recording.summary, + 'meeting_date': recording.meeting_date.isoformat() if recording.meeting_date else None, + 'is_inbox': recording.is_inbox, + 'is_highlighted': recording.is_highlighted + } + }) + + +@api_v1_bp.route('/recordings//notes', methods=['PUT']) +@login_required +def replace_notes(recording_id): + """Replace notes entirely.""" + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'Permission denied'}), 403 + + data = request.get_json() + if not data or 'notes' not in data: + return jsonify({'error': 'notes field required'}), 400 + + recording.notes = data['notes'] + db.session.commit() + + return jsonify({'success': True, 'notes': recording.notes}) + + +@api_v1_bp.route('/recordings//summary', methods=['PUT']) +@login_required +def replace_summary(recording_id): + """Replace summary entirely.""" + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'Permission denied'}), 403 + + data = request.get_json() + if not data or 'summary' not in data: + return jsonify({'error': 'summary field required'}), 400 + + recording.summary = data['summary'] + db.session.commit() + + return jsonify({'success': True, 'summary': recording.summary}) + + +# ============================================================================= +# Recording Delete +# ============================================================================= + +@api_v1_bp.route('/recordings/', methods=['DELETE']) +@login_required +def delete_recording(recording_id): + """Delete a recording.""" + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + # Check ownership (only owner can delete) + if recording.user_id != current_user.id: + return jsonify({'error': 'Permission denied - only owner can delete'}), 403 + + # Check if deletion is allowed + USERS_CAN_DELETE = os.environ.get('USERS_CAN_DELETE', 'true').lower() == 'true' + if not USERS_CAN_DELETE and not current_user.is_admin: + return jsonify({'error': 'Deletion not allowed'}), 403 + + # Delete associated files + if recording.audio_path: + try: + audio_path = os.path.join(current_app.config.get('UPLOAD_FOLDER', 'uploads'), recording.audio_path) + if os.path.exists(audio_path): + os.remove(audio_path) + except Exception: + pass # Continue with DB deletion even if file deletion fails + + # Delete from database + db.session.delete(recording) + db.session.commit() + + return jsonify({'success': True, 'message': 'Recording deleted'}) + + +# ============================================================================= +# Recording Status +# ============================================================================= + +@api_v1_bp.route('/recordings//status', methods=['GET']) +@login_required +def get_recording_status(recording_id): + """Get processing status of a recording.""" + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'Permission denied'}), 403 + + # Get queue position if pending/processing + queue_position = None + if recording.status in ['PENDING', 'PROCESSING', 'SUMMARIZING']: + # Count jobs ahead of this one + job = ProcessingJob.query.filter_by( + recording_id=recording_id, + status='queued' + ).first() + + if job: + queue_position = ProcessingJob.query.filter( + ProcessingJob.status == 'queued', + ProcessingJob.created_at < job.created_at + ).count() + 1 + + return jsonify({ + 'id': recording.id, + 'status': recording.status, + 'queue_position': queue_position, + 'error_message': recording.error_message if recording.status == 'FAILED' else None, + 'completed_at': recording.completed_at.isoformat() if recording.completed_at else None + }) + + +# ============================================================================= +# Tag Management +# ============================================================================= + +@api_v1_bp.route('/tags', methods=['GET']) +@login_required +def list_tags(): + """List available tags (personal + group tags user has access to).""" + from src.models.organization import GroupMembership + + # Get user's personal tags + user_tags = Tag.query.filter_by(user_id=current_user.id, group_id=None).order_by(Tag.name).all() + + # Get user's team memberships + memberships = GroupMembership.query.filter_by(user_id=current_user.id).all() + team_roles = {m.group_id: m.role for m in memberships} + team_ids = list(team_roles.keys()) + + # Get group tags + team_tags = [] + if team_ids: + team_tags = Tag.query.filter(Tag.group_id.in_(team_ids)).order_by(Tag.name).all() + + result = [] + + # Personal tags + for tag in user_tags: + result.append({ + 'id': tag.id, + 'name': tag.name, + 'color': tag.color, + 'is_group_tag': False, + 'group_id': None, + 'custom_prompt': tag.custom_prompt, + 'default_language': tag.default_language, + 'default_min_speakers': tag.default_min_speakers, + 'default_max_speakers': tag.default_max_speakers, + 'protect_from_deletion': tag.protect_from_deletion, + 'can_edit': True + }) + + # Group tags + for tag in team_tags: + user_role = team_roles.get(tag.group_id, 'member') + result.append({ + 'id': tag.id, + 'name': tag.name, + 'color': tag.color, + 'is_group_tag': True, + 'group_id': tag.group_id, + 'custom_prompt': tag.custom_prompt, + 'default_language': tag.default_language, + 'default_min_speakers': tag.default_min_speakers, + 'default_max_speakers': tag.default_max_speakers, + 'protect_from_deletion': tag.protect_from_deletion, + 'can_edit': (user_role == 'admin') + }) + + return jsonify({'tags': result}) + + +@api_v1_bp.route('/tags', methods=['POST']) +@login_required +def create_tag(): + """Create a new tag.""" + from src.models.organization import GroupMembership + + data = request.get_json() + if not data or not data.get('name'): + return jsonify({'error': 'Tag name is required'}), 400 + + group_id = data.get('group_id') + + # If group tag, verify admin permission + if group_id: + membership = GroupMembership.query.filter_by( + group_id=group_id, + user_id=current_user.id + ).first() + if not membership or membership.role != 'admin': + return jsonify({'error': 'Only group admins can create group tags'}), 403 + + # Check for duplicate + existing = Tag.query.filter_by(name=data['name'], group_id=group_id).first() + if existing: + return jsonify({'error': 'Tag with this name already exists for this group'}), 400 + else: + # Check for duplicate personal tag + existing = Tag.query.filter_by(name=data['name'], user_id=current_user.id, group_id=None).first() + if existing: + return jsonify({'error': 'Tag with this name already exists'}), 400 + + tag = Tag( + name=data['name'], + user_id=current_user.id, + group_id=group_id, + color=data.get('color', '#3B82F6'), + custom_prompt=data.get('custom_prompt'), + default_language=data.get('default_language'), + default_min_speakers=data.get('default_min_speakers'), + default_max_speakers=data.get('default_max_speakers'), + protect_from_deletion=data.get('protect_from_deletion', False) + ) + + db.session.add(tag) + db.session.commit() + + return jsonify({ + 'id': tag.id, + 'name': tag.name, + 'color': tag.color, + 'is_group_tag': tag.group_id is not None, + 'group_id': tag.group_id, + 'custom_prompt': tag.custom_prompt, + 'default_language': tag.default_language, + 'default_min_speakers': tag.default_min_speakers, + 'default_max_speakers': tag.default_max_speakers, + 'protect_from_deletion': tag.protect_from_deletion + }), 201 + + +@api_v1_bp.route('/tags/', methods=['PUT']) +@login_required +def update_tag(tag_id): + """Update a tag.""" + from src.models.organization import GroupMembership + + tag = db.session.get(Tag, tag_id) + if not tag: + return jsonify({'error': 'Tag not found'}), 404 + + # Check permission + if tag.group_id: + membership = GroupMembership.query.filter_by( + group_id=tag.group_id, + user_id=current_user.id + ).first() + if not membership or membership.role != 'admin': + return jsonify({'error': 'Only group admins can edit group tags'}), 403 + else: + if tag.user_id != current_user.id: + return jsonify({'error': 'Permission denied'}), 403 + + data = request.get_json() + if not data: + return jsonify({'error': 'No data provided'}), 400 + + if 'name' in data: + tag.name = data['name'] + if 'color' in data: + tag.color = data['color'] + if 'custom_prompt' in data: + tag.custom_prompt = data['custom_prompt'] + if 'default_language' in data: + tag.default_language = data['default_language'] + if 'default_min_speakers' in data: + tag.default_min_speakers = data['default_min_speakers'] + if 'default_max_speakers' in data: + tag.default_max_speakers = data['default_max_speakers'] + if 'protect_from_deletion' in data: + tag.protect_from_deletion = data['protect_from_deletion'] + + db.session.commit() + + return jsonify({'success': True, 'tag': { + 'id': tag.id, + 'name': tag.name, + 'color': tag.color, + 'custom_prompt': tag.custom_prompt, + 'default_language': tag.default_language, + 'default_min_speakers': tag.default_min_speakers, + 'default_max_speakers': tag.default_max_speakers, + 'protect_from_deletion': tag.protect_from_deletion + }}) + + +@api_v1_bp.route('/tags/', methods=['DELETE']) +@login_required +def delete_tag(tag_id): + """Delete a tag.""" + from src.models.organization import GroupMembership + + tag = db.session.get(Tag, tag_id) + if not tag: + return jsonify({'error': 'Tag not found'}), 404 + + # Check permission + if tag.group_id: + membership = GroupMembership.query.filter_by( + group_id=tag.group_id, + user_id=current_user.id + ).first() + if not membership or membership.role != 'admin': + return jsonify({'error': 'Only group admins can delete group tags'}), 403 + else: + if tag.user_id != current_user.id: + return jsonify({'error': 'Permission denied'}), 403 + + # Remove all recording associations + RecordingTag.query.filter_by(tag_id=tag_id).delete() + + db.session.delete(tag) + db.session.commit() + + return jsonify({'success': True, 'message': 'Tag deleted'}) + + +@api_v1_bp.route('/recordings//tags', methods=['POST']) +@login_required +def add_tags_to_recording(recording_id): + """Add tag(s) to a recording.""" + from src.models.organization import GroupMembership + + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'Permission denied'}), 403 + + data = request.get_json() + tag_ids = data.get('tag_ids', []) + if not tag_ids: + # Support single tag_id for backward compatibility + tag_id = data.get('tag_id') + if tag_id: + tag_ids = [tag_id] + else: + return jsonify({'error': 'tag_ids or tag_id required'}), 400 + + added_tags = [] + errors = [] + + for tag_id in tag_ids: + tag = db.session.get(Tag, tag_id) + if not tag: + errors.append(f'Tag {tag_id} not found') + continue + + # Check permission for this tag + if tag.group_id: + membership = GroupMembership.query.filter_by( + group_id=tag.group_id, + user_id=current_user.id + ).first() + if not membership: + errors.append(f'No access to tag {tag_id}') + continue + else: + if tag.user_id != current_user.id: + errors.append(f'No access to tag {tag_id}') + continue + + # Check if already exists + existing = RecordingTag.query.filter_by( + recording_id=recording_id, + tag_id=tag_id + ).first() + if existing: + continue # Skip, already added + + # Get next order position + max_order = db.session.query(func.max(RecordingTag.order)).filter_by( + recording_id=recording_id + ).scalar() or 0 + + recording_tag = RecordingTag( + recording_id=recording_id, + tag_id=tag_id, + order=max_order + 1 + ) + db.session.add(recording_tag) + added_tags.append({'id': tag.id, 'name': tag.name}) + + db.session.commit() + + return jsonify({ + 'success': True, + 'added_tags': added_tags, + 'errors': errors if errors else None + }) + + +@api_v1_bp.route('/recordings//tags/', methods=['DELETE']) +@login_required +def remove_tag_from_recording(recording_id, tag_id): + """Remove a tag from a recording.""" + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'Permission denied'}), 403 + + recording_tag = RecordingTag.query.filter_by( + recording_id=recording_id, + tag_id=tag_id + ).first() + + if not recording_tag: + return jsonify({'error': 'Tag not on this recording'}), 404 + + db.session.delete(recording_tag) + db.session.commit() + + return jsonify({'success': True, 'message': 'Tag removed'}) + + +# ============================================================================= +# Speaker Management +# ============================================================================= + +@api_v1_bp.route('/speakers', methods=['GET']) +@login_required +def list_speakers(): + """List all speakers for the current user.""" + speakers = Speaker.query.filter_by(user_id=current_user.id)\ + .order_by(Speaker.use_count.desc(), Speaker.last_used.desc())\ + .all() + + return jsonify({ + 'speakers': [{ + 'id': s.id, + 'name': s.name, + 'use_count': s.use_count, + 'last_used': s.last_used.isoformat() if s.last_used else None, + 'confidence_score': s.confidence_score, + 'has_voice_profile': s.average_embedding is not None + } for s in speakers] + }) + + +@api_v1_bp.route('/speakers', methods=['POST']) +@login_required +def create_speaker(): + """Create a new speaker.""" + data = request.get_json() + if not data or not data.get('name'): + return jsonify({'error': 'Speaker name is required'}), 400 + + name = data['name'].strip() + + # Check if already exists + existing = Speaker.query.filter_by(user_id=current_user.id, name=name).first() + if existing: + return jsonify({'error': 'Speaker with this name already exists'}), 400 + + speaker = Speaker( + name=name, + user_id=current_user.id, + use_count=0, + created_at=datetime.utcnow() + ) + db.session.add(speaker) + db.session.commit() + + return jsonify({ + 'id': speaker.id, + 'name': speaker.name, + 'use_count': speaker.use_count, + 'created_at': speaker.created_at.isoformat() + }), 201 + + +@api_v1_bp.route('/speakers/', methods=['PUT']) +@login_required +def update_speaker(speaker_id): + """Update a speaker (cascades name changes to recordings).""" + speaker = db.session.get(Speaker, speaker_id) + if not speaker: + return jsonify({'error': 'Speaker not found'}), 404 + + if speaker.user_id != current_user.id: + return jsonify({'error': 'Permission denied'}), 403 + + data = request.get_json() + if not data: + return jsonify({'error': 'No data provided'}), 400 + + old_name = speaker.name + new_name = data.get('name', '').strip() + + if not new_name: + return jsonify({'error': 'Speaker name is required'}), 400 + + if new_name != old_name: + # Update speaker name + speaker.name = new_name + + # Update all recordings that have this speaker in their transcription + from src.services.speaker import update_speaker_in_recordings + try: + update_speaker_in_recordings(current_user.id, old_name, new_name) + except Exception as e: + current_app.logger.error(f"Error updating speaker in recordings: {e}") + + db.session.commit() + + return jsonify({ + 'success': True, + 'speaker': { + 'id': speaker.id, + 'name': speaker.name, + 'use_count': speaker.use_count + } + }) + + +@api_v1_bp.route('/speakers/', methods=['DELETE']) +@login_required +def delete_speaker(speaker_id): + """Delete a speaker.""" + speaker = db.session.get(Speaker, speaker_id) + if not speaker: + return jsonify({'error': 'Speaker not found'}), 404 + + if speaker.user_id != current_user.id: + return jsonify({'error': 'Permission denied'}), 403 + + db.session.delete(speaker) + db.session.commit() + + return jsonify({'success': True, 'message': 'Speaker deleted'}) + + +@api_v1_bp.route('/recordings//speakers', methods=['GET']) +@login_required +def get_recording_speakers(recording_id): + """Get speakers in a recording with suggestions.""" + from src.services.speaker_embedding_matcher import find_matching_speakers + + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'Permission denied'}), 403 + + # Parse transcription to get speakers + speakers_in_recording = [] + speaker_counts = {} + + if recording.transcription: + try: + segments = json.loads(recording.transcription) + for seg in segments: + speaker = seg.get('speaker', 'Unknown') + speaker_counts[speaker] = speaker_counts.get(speaker, 0) + 1 + except (json.JSONDecodeError, TypeError): + pass + + # Build speaker list with identification info + for label, count in speaker_counts.items(): + # Check if this speaker label has been identified + identified_name = None + speaker_id = None + + # Look for speaker in user's speakers by checking recordings + # This is a simplified check - actual implementation would check speaker_embeddings + speakers_in_recording.append({ + 'label': label, + 'identified_name': identified_name, + 'speaker_id': speaker_id, + 'segment_count': count + }) + + # Get voice-based suggestions + suggestions = {} + if recording.speaker_embeddings: + try: + matches = find_matching_speakers(current_user.id, recording.speaker_embeddings) + for label, speaker_matches in matches.items(): + suggestions[label] = [{ + 'speaker_id': m['speaker_id'], + 'name': m['name'], + 'similarity': round(m['similarity'] * 100, 1) + } for m in speaker_matches[:3]] + except Exception as e: + current_app.logger.error(f"Error getting speaker suggestions: {e}") + + return jsonify({ + 'speakers': speakers_in_recording, + 'suggestions': suggestions + }) + + +@api_v1_bp.route('/recordings//speakers/assign', methods=['PUT']) +@login_required +def assign_speakers(recording_id): + """ + Assign speaker names to a recording's transcription segments. + + Accepts the same speaker_map format as the web UI, plus convenience + formats for API callers (plain strings). + + Request body: + { + "speaker_map": { + "SPEAKER_00": "Jane Doe", // string shorthand + "SPEAKER_01": {"name": "Bob", "isMe": false} // full object + }, + "regenerate_summary": false + } + """ + from src.services.speaker import update_speaker_usage + from src.services.speaker_embedding_matcher import update_speaker_embedding + from src.services.speaker_snippets import create_speaker_snippets + from src.services.job_queue import job_queue + + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'Permission denied'}), 403 + + data = request.get_json() + if not data or 'speaker_map' not in data: + return jsonify({'error': 'speaker_map is required'}), 400 + + raw_speaker_map = data['speaker_map'] + regenerate_summary = data.get('regenerate_summary', False) + + if not isinstance(raw_speaker_map, dict): + return jsonify({'error': 'speaker_map must be an object'}), 400 + + # Normalize values to {name, isMe} format (same as web UI expects) + speaker_map = {} + for label, value in raw_speaker_map.items(): + if isinstance(value, str): + speaker_map[label] = {'name': value.strip(), 'isMe': False} + elif isinstance(value, dict): + speaker_map[label] = { + 'name': value.get('name', '').strip() if value.get('name') else '', + 'isMe': value.get('isMe', False) + } + else: + return jsonify({'error': f'Invalid value type for speaker "{label}"'}), 400 + + # --- Apply names to transcription (same logic as update_speakers in recordings.py) --- + transcription_text = recording.transcription or '' + is_json = False + try: + transcription_data = json.loads(transcription_text) + is_json = isinstance(transcription_data, list) + except (json.JSONDecodeError, TypeError): + is_json = False + + speaker_names_used = [] + + if is_json: + for segment in transcription_data: + original_speaker_label = segment.get('speaker') + if original_speaker_label in speaker_map: + new_name_info = speaker_map[original_speaker_label] + new_name = new_name_info.get('name', '').strip() + if new_name_info.get('isMe') and not new_name: + new_name = current_user.name or 'Me' + if new_name: + segment['speaker'] = new_name + if new_name not in speaker_names_used: + speaker_names_used.append(new_name) + + recording.transcription = json.dumps(transcription_data) + + # Update participants - exclude unresolved SPEAKER_XX labels + final_speakers = set() + for seg in transcription_data: + speaker = seg.get('speaker') + if speaker and str(speaker).strip(): + if not re.match(r'^SPEAKER_\d+$', str(speaker), re.IGNORECASE): + final_speakers.add(speaker) + recording.participants = ', '.join(sorted(list(final_speakers))) + else: + # Plain text transcript + new_participants = [] + for speaker_label, new_name_info in speaker_map.items(): + new_name = new_name_info.get('name', '').strip() + if new_name_info.get('isMe') and not new_name: + new_name = current_user.name or 'Me' + if new_name: + transcription_text = re.sub( + r'\[\s*' + re.escape(speaker_label) + r'\s*\]', + f'[{new_name}]', + transcription_text, + flags=re.IGNORECASE + ) + if new_name not in new_participants: + new_participants.append(new_name) + + recording.transcription = transcription_text + recording.participants = ', '.join(new_participants) + speaker_names_used = new_participants + + # Update speaker usage statistics + if speaker_names_used: + update_speaker_usage(speaker_names_used) + + # Update speaker voice embeddings if available + embeddings_updated = 0 + snippets_created = 0 + if recording.speaker_embeddings and speaker_map: + try: + embeddings_data = json.loads(recording.speaker_embeddings) if isinstance(recording.speaker_embeddings, str) else recording.speaker_embeddings + + speaker_label_to_name = {} + for speaker_label, speaker_info in speaker_map.items(): + name = speaker_info.get('name', '').strip() + if speaker_info.get('isMe') and not name: + name = current_user.name or 'Me' + if name and not re.match(r'^SPEAKER_\d+$', name, re.IGNORECASE): + speaker_label_to_name[speaker_label] = name + + for speaker_label, embedding in embeddings_data.items(): + if speaker_label in speaker_label_to_name and embedding and len(embedding) == 256: + speaker_name = speaker_label_to_name[speaker_label] + speaker_obj = Speaker.query.filter_by( + user_id=current_user.id, + name=speaker_name + ).first() + if speaker_obj: + update_speaker_embedding(speaker_obj, embedding, recording.id) + embeddings_updated += 1 + + if speaker_label_to_name: + snippets_created = create_speaker_snippets(recording.id, speaker_map) + except Exception as e: + current_app.logger.error(f"Error updating speaker embeddings: {e}", exc_info=True) + + db.session.commit() + + summary_queued = False + if regenerate_summary: + job_queue.enqueue( + user_id=current_user.id, + recording_id=recording.id, + job_type='summarize', + params={'user_id': current_user.id} + ) + summary_queued = True + + return jsonify({ + 'success': True, + 'message': 'Speakers updated successfully.', + 'recording': { + 'id': recording.id, + 'title': recording.title, + 'participants': recording.participants, + 'status': recording.status + }, + 'summary_queued': summary_queued, + 'embeddings_updated': embeddings_updated, + 'snippets_created': snippets_created + }) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error assigning speakers for recording {recording_id}: {e}", exc_info=True) + return jsonify({'error': str(e)}), 500 + + +@api_v1_bp.route('/recordings//speakers/identify', methods=['POST']) +@login_required +def identify_speakers(recording_id): + """ + Trigger LLM-based auto-identification of speakers from transcript context. + Returns suggestions only - does not modify the recording. + + Uses the shared identification service with JSON schema support, + name sanitization, and fallback logic. + """ + from src.services.speaker_identification import identify_speakers_from_transcript + + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'Permission denied'}), 403 + + if not recording.transcription: + return jsonify({'error': 'No transcription available for speaker identification'}), 400 + + try: + transcription_data = json.loads(recording.transcription) + except (json.JSONDecodeError, TypeError): + return jsonify({'error': 'Transcription format not supported for auto-identification'}), 400 + + if not isinstance(transcription_data, list): + return jsonify({'error': 'Transcription format not supported for auto-identification'}), 400 + + speaker_map = identify_speakers_from_transcript(transcription_data, current_user.id) + + if not speaker_map: + return jsonify({'error': 'No speakers found in transcription'}), 400 + + return jsonify({'success': True, 'speaker_map': speaker_map}) + + except ValueError as ve: + return jsonify({'error': str(ve)}), 503 + except Exception as e: + current_app.logger.error(f"Error during auto speaker identification for recording {recording_id}: {e}", exc_info=True) + return jsonify({'error': f'An unexpected error occurred: {str(e)}'}), 500 + + +# ============================================================================= +# Processing Operations +# ============================================================================= + +@api_v1_bp.route('/recordings//transcribe', methods=['POST']) +@login_required +def start_transcription(recording_id): + """Queue transcription for a recording.""" + from src.services.job_queue import job_queue + + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'Permission denied'}), 403 + + # Check if audio is available + if recording.audio_deleted_at: + return jsonify({'error': 'Audio has been deleted'}), 400 + + data = request.get_json() or {} + + params = { + 'language': data.get('language'), + 'min_speakers': data.get('min_speakers'), + 'max_speakers': data.get('max_speakers') + } + + # Queue the job + job_id = job_queue.enqueue( + user_id=current_user.id, + recording_id=recording_id, + job_type='reprocess_transcription', + params={k: v for k, v in params.items() if v is not None} + ) + + return jsonify({ + 'success': True, + 'job_id': job_id, + 'status': 'QUEUED', + 'message': 'Transcription queued' + }) + + +@api_v1_bp.route('/recordings//summarize', methods=['POST']) +@login_required +def start_summarization(recording_id): + """Queue summarization for a recording with optional custom prompt.""" + from src.services.job_queue import job_queue + + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'Permission denied'}), 403 + + # Check if transcription exists + if not recording.transcription: + return jsonify({'error': 'No transcription available - transcribe first'}), 400 + + data = request.get_json() or {} + + params = { + 'custom_prompt': data.get('custom_prompt'), + 'user_id': current_user.id + } + + # Queue the job + job_id = job_queue.enqueue( + user_id=current_user.id, + recording_id=recording_id, + job_type='reprocess_summary', + params={k: v for k, v in params.items() if v is not None} + ) + + return jsonify({ + 'success': True, + 'job_id': job_id, + 'status': 'QUEUED', + 'message': 'Summarization queued' + }) + + +# ============================================================================= +# Chat with Recording +# ============================================================================= + +@api_v1_bp.route('/recordings//chat', methods=['POST']) +@login_required +def chat_with_recording(recording_id): + """Chat about a recording's content.""" + from src.services.llm import chat_client, call_chat_completion + from src.tasks.processing import format_transcription_for_llm + from src.models import SystemSetting + + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'Permission denied'}), 403 + + if not recording.transcription: + return jsonify({'error': 'No transcription available'}), 400 + + data = request.get_json() + if not data or not data.get('message'): + return jsonify({'error': 'message is required'}), 400 + + user_message = data['message'] + conversation_history = data.get('conversation_history', []) + + # Check if chat client is available + if chat_client is None: + return jsonify({'error': 'Chat service not available'}), 503 + + # Format transcription + formatted_transcription = format_transcription_for_llm(recording.transcription) + + # Get transcript limit + transcript_limit = SystemSetting.get_setting('transcript_length_limit', 30000) + if transcript_limit != -1: + formatted_transcription = formatted_transcription[:transcript_limit] + + # Build system prompt + system_prompt = f"""Tu es un assistant expert en analyse de transcriptions audio. Réponds de façon directe et professionnelle en français, en te basant sur la transcription ci-dessous. + +**Enregistrement :** {recording.title} +**Participants :** {recording.participants or 'Non précisé'} + +**Transcription :** +{formatted_transcription} + +**Notes :** {recording.notes or 'Aucune note.'} +""" + + # Build messages + messages = [{"role": "system", "content": system_prompt}] + messages.extend(conversation_history) + messages.append({"role": "user", "content": user_message}) + + try: + response = call_chat_completion(messages, user_id=current_user.id) + + return jsonify({ + 'response': response, + 'sources': [] # Could be enhanced to extract relevant segments + }) + except Exception as e: + current_app.logger.error(f"Chat error: {e}") + return jsonify({'error': 'Chat failed'}), 500 + + +# ============================================================================= +# Calendar Events +# ============================================================================= + +@api_v1_bp.route('/recordings//events', methods=['GET']) +@login_required +def get_recording_events(recording_id): + """Get calendar events extracted from a recording.""" + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'Permission denied'}), 403 + + events = Event.query.filter_by(recording_id=recording_id).all() + + return jsonify({ + 'events': [{ + 'id': e.id, + 'title': e.title, + 'start_datetime': e.start_datetime.isoformat() if e.start_datetime else None, + 'end_datetime': e.end_datetime.isoformat() if e.end_datetime else None, + 'description': e.description, + 'location': e.location + } for e in events] + }) + + +@api_v1_bp.route('/recordings//events/ics', methods=['GET']) +@login_required +def download_events_ics(recording_id): + """Download all events as ICS file.""" + from src.api.events import generate_ics_content + + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'Permission denied'}), 403 + + events = Event.query.filter_by(recording_id=recording_id).all() + if not events: + return jsonify({'error': 'No events found'}), 404 + + # Generate combined ICS + ics_lines = ['BEGIN:VCALENDAR', 'VERSION:2.0', 'PRODID:-//Speakr//Events//EN'] + + for event in events: + ics_lines.append('BEGIN:VEVENT') + ics_lines.append(f'UID:{event.id}@speakr') + ics_lines.append(f'SUMMARY:{event.title}') + if event.start_datetime: + ics_lines.append(f'DTSTART:{event.start_datetime.strftime("%Y%m%dT%H%M%S")}') + if event.end_datetime: + ics_lines.append(f'DTEND:{event.end_datetime.strftime("%Y%m%dT%H%M%S")}') + if event.description: + ics_lines.append(f'DESCRIPTION:{event.description}') + if event.location: + ics_lines.append(f'LOCATION:{event.location}') + ics_lines.append('END:VEVENT') + + ics_lines.append('END:VCALENDAR') + + from flask import Response + return Response( + '\r\n'.join(ics_lines), + mimetype='text/calendar', + headers={'Content-Disposition': f'attachment; filename=events-{recording_id}.ics'} + ) + + +# ============================================================================= +# Audio Download +# ============================================================================= + +@api_v1_bp.route('/recordings//audio', methods=['GET']) +@login_required +def download_audio(recording_id): + """Download or stream audio file.""" + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'Permission denied'}), 403 + + if recording.audio_deleted_at: + return jsonify({'error': 'Audio has been deleted'}), 404 + + if not recording.audio_path: + return jsonify({'error': 'No audio file'}), 404 + + audio_path = os.path.join(current_app.config.get('UPLOAD_FOLDER', 'uploads'), recording.audio_path) + if not os.path.exists(audio_path): + return jsonify({'error': 'Audio file not found'}), 404 + + download = request.args.get('download', 'false').lower() == 'true' + + return send_file( + audio_path, + mimetype=recording.mime_type or 'audio/mpeg', + as_attachment=download, + download_name=recording.original_filename or f'recording-{recording_id}.mp3' + ) + + +# ============================================================================= +# Batch Operations +# ============================================================================= + +@api_v1_bp.route('/recordings/batch', methods=['PATCH']) +@login_required +def batch_update_recordings(): + """Batch update multiple recordings.""" + data = request.get_json() + if not data: + return jsonify({'error': 'No data provided'}), 400 + + recording_ids = data.get('recording_ids', []) + updates = data.get('updates', {}) + + if not recording_ids: + return jsonify({'error': 'recording_ids required'}), 400 + + results = [] + for recording_id in recording_ids: + recording = db.session.get(Recording, recording_id) + if not recording: + results.append({'id': recording_id, 'success': False, 'error': 'Not found'}) + continue + + if not has_recording_access(recording, current_user, require_edit=True): + results.append({'id': recording_id, 'success': False, 'error': 'Permission denied'}) + continue + + try: + if 'is_inbox' in updates: + recording.is_inbox = bool(updates['is_inbox']) + if 'is_highlighted' in updates: + recording.is_highlighted = bool(updates['is_highlighted']) + + # Handle tag additions + if 'add_tag_ids' in updates: + for tag_id in updates['add_tag_ids']: + existing = RecordingTag.query.filter_by( + recording_id=recording_id, + tag_id=tag_id + ).first() + if not existing: + max_order = db.session.query(func.max(RecordingTag.order)).filter_by( + recording_id=recording_id + ).scalar() or 0 + recording_tag = RecordingTag( + recording_id=recording_id, + tag_id=tag_id, + order=max_order + 1 + ) + db.session.add(recording_tag) + + # Handle tag removals + if 'remove_tag_ids' in updates: + for tag_id in updates['remove_tag_ids']: + RecordingTag.query.filter_by( + recording_id=recording_id, + tag_id=tag_id + ).delete() + + results.append({'id': recording_id, 'success': True}) + except Exception as e: + results.append({'id': recording_id, 'success': False, 'error': str(e)}) + + db.session.commit() + + success_count = sum(1 for r in results if r['success']) + return jsonify({ + 'success': True, + 'updated': success_count, + 'failed': len(results) - success_count, + 'results': results + }) + + +@api_v1_bp.route('/recordings/batch', methods=['DELETE']) +@login_required +def batch_delete_recordings(): + """Batch delete multiple recordings.""" + data = request.get_json() + if not data: + return jsonify({'error': 'No data provided'}), 400 + + recording_ids = data.get('recording_ids', []) + if not recording_ids: + return jsonify({'error': 'recording_ids required'}), 400 + + USERS_CAN_DELETE = os.environ.get('USERS_CAN_DELETE', 'true').lower() == 'true' + if not USERS_CAN_DELETE and not current_user.is_admin: + return jsonify({'error': 'Deletion not allowed'}), 403 + + results = [] + for recording_id in recording_ids: + recording = db.session.get(Recording, recording_id) + if not recording: + results.append({'id': recording_id, 'success': False, 'error': 'Not found'}) + continue + + if recording.user_id != current_user.id and not current_user.is_admin: + results.append({'id': recording_id, 'success': False, 'error': 'Permission denied'}) + continue + + try: + # Delete audio file + if recording.audio_path: + audio_path = os.path.join(current_app.config.get('UPLOAD_FOLDER', 'uploads'), recording.audio_path) + if os.path.exists(audio_path): + os.remove(audio_path) + + db.session.delete(recording) + results.append({'id': recording_id, 'success': True}) + except Exception as e: + results.append({'id': recording_id, 'success': False, 'error': str(e)}) + + db.session.commit() + + success_count = sum(1 for r in results if r['success']) + return jsonify({ + 'success': True, + 'deleted': success_count, + 'failed': len(results) - success_count, + 'results': results + }) + + +@api_v1_bp.route('/recordings/batch/transcribe', methods=['POST']) +@login_required +def batch_transcribe_recordings(): + """Batch queue transcriptions for multiple recordings.""" + from src.services.job_queue import job_queue + + data = request.get_json() + if not data: + return jsonify({'error': 'No data provided'}), 400 + + recording_ids = data.get('recording_ids', []) + if not recording_ids: + return jsonify({'error': 'recording_ids required'}), 400 + + results = [] + for recording_id in recording_ids: + recording = db.session.get(Recording, recording_id) + if not recording: + results.append({'id': recording_id, 'success': False, 'error': 'Not found'}) + continue + + if not has_recording_access(recording, current_user, require_edit=True): + results.append({'id': recording_id, 'success': False, 'error': 'Permission denied'}) + continue + + if recording.audio_deleted_at: + results.append({'id': recording_id, 'success': False, 'error': 'Audio deleted'}) + continue + + try: + job_id = job_queue.enqueue( + user_id=current_user.id, + recording_id=recording_id, + job_type='reprocess_transcription', + params={} + ) + results.append({'id': recording_id, 'success': True, 'job_id': job_id}) + except Exception as e: + results.append({'id': recording_id, 'success': False, 'error': str(e)}) + + success_count = sum(1 for r in results if r['success']) + return jsonify({ + 'success': True, + 'queued': success_count, + 'failed': len(results) - success_count, + 'results': results + }) + + +# ============================================================================= +# Settings +# ============================================================================= + +@api_v1_bp.route('/settings/auto-summarization', methods=['PUT']) +@login_required +def update_auto_summarization(): + """Toggle auto-summarization for the current user.""" + data = request.get_json() + + if data is None: + return jsonify({'error': 'Invalid JSON'}), 400 + + if 'enabled' not in data: + return jsonify({'error': 'enabled field is required'}), 400 + + current_user.auto_summarization = bool(data['enabled']) + db.session.commit() + + return jsonify({ + 'success': True, + 'auto_summarization': current_user.auto_summarization + }) + + +@api_v1_bp.route('/recordings/upload', methods=['POST']) +@login_required +def upload_recording(): + """ + Upload a recording and queue transcription (API). + + Multipart form-data fields: + - file (required) + - notes (optional) + - file_last_modified (optional, ms epoch) + - language (optional) + - min_speakers (optional) + - max_speakers (optional) + - tag_ids[0], tag_ids[1], ... (optional) + - tag_id (optional, legacy) + """ + return _upload_file_ui() diff --git a/src/api/audit.py b/src/api/audit.py new file mode 100644 index 0000000..cd6c899 --- /dev/null +++ b/src/api/audit.py @@ -0,0 +1,107 @@ +""" +Admin API endpoints for audit log queries. + +Loi 25 compliance: allows administrators to review access and auth logs. +""" + +from flask import Blueprint, request, jsonify + +from src.services.audit import get_access_logs, get_auth_logs, is_audit_enabled +from src.utils import admin_required + +audit_bp = Blueprint('audit', __name__) + + +@audit_bp.route('/api/admin/audit/status', methods=['GET']) +@admin_required +def audit_status(): + """Check if audit logging is enabled.""" + return jsonify({'enabled': is_audit_enabled()}) + + +@audit_bp.route('/api/admin/audit/access', methods=['GET']) +@admin_required +def list_access_logs(): + """List access logs with pagination and filters.""" + page = request.args.get('page', 1, type=int) + per_page = min(request.args.get('per_page', 50, type=int), 200) + user_id = request.args.get('user_id', type=int) + resource_type = request.args.get('resource_type') + resource_id = request.args.get('resource_id', type=int) + action = request.args.get('action') + + result = get_access_logs( + page=page, per_page=per_page, + user_id=user_id, resource_type=resource_type, + resource_id=resource_id, action=action, + ) + + return jsonify({ + 'logs': [log.to_dict() for log in result.items], + 'total': result.total, + 'page': result.page, + 'per_page': per_page, + 'pages': result.pages, + }) + + +@audit_bp.route('/api/admin/audit/auth', methods=['GET']) +@admin_required +def list_auth_logs(): + """List authentication logs with pagination and filters.""" + page = request.args.get('page', 1, type=int) + per_page = min(request.args.get('per_page', 50, type=int), 200) + user_id = request.args.get('user_id', type=int) + action = request.args.get('action') + + result = get_auth_logs(page=page, per_page=per_page, user_id=user_id, action=action) + + return jsonify({ + 'logs': [log.to_dict() for log in result.items], + 'total': result.total, + 'page': result.page, + 'per_page': per_page, + 'pages': result.pages, + }) + + +@audit_bp.route('/api/admin/audit/recording/', methods=['GET']) +@admin_required +def recording_access_logs(recording_id): + """Get all access logs for a specific recording.""" + page = request.args.get('page', 1, type=int) + per_page = min(request.args.get('per_page', 50, type=int), 200) + + result = get_access_logs(page=page, per_page=per_page, resource_type='recording', resource_id=recording_id) + + return jsonify({ + 'logs': [log.to_dict() for log in result.items], + 'total': result.total, + 'page': result.page, + 'per_page': per_page, + 'pages': result.pages, + }) + + +@audit_bp.route('/api/admin/audit/user/', methods=['GET']) +@admin_required +def user_audit_logs(user_id): + """Get all audit logs (access + auth) for a specific user.""" + page = request.args.get('page', 1, type=int) + per_page = min(request.args.get('per_page', 50, type=int), 200) + + access_result = get_access_logs(page=page, per_page=per_page, user_id=user_id) + auth_result = get_auth_logs(page=page, per_page=per_page, user_id=user_id) + + return jsonify({ + 'access_logs': { + 'logs': [log.to_dict() for log in access_result.items], + 'total': access_result.total, + }, + 'auth_logs': { + 'logs': [log.to_dict() for log in auth_result.items], + 'total': auth_result.total, + }, + 'page': page, + 'per_page': per_page, + }) diff --git a/src/api/auth.py b/src/api/auth.py new file mode 100644 index 0000000..8aa8e21 --- /dev/null +++ b/src/api/auth.py @@ -0,0 +1,886 @@ +""" +Authentication and user management routes. + +This blueprint handles user registration, login, logout, account management, +and password changes. +""" + +import os +import re +import hashlib +import mimetypes +from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify, session, current_app +from flask_login import login_user, logout_user, login_required, current_user +from flask_wtf import FlaskForm +from wtforms import StringField, PasswordField, SubmitField, BooleanField +from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError +from werkzeug.security import generate_password_hash, check_password_hash +from urllib.parse import urlparse, urljoin +import markdown + +from src.database import db +from src.models import User, SystemSetting, GroupMembership +from src.utils import password_check +from src.auth.sso import ( + init_sso_client, + is_sso_enabled, + get_sso_config, + get_sso_client, + create_or_update_sso_user, + is_domain_allowed, + link_sso_to_existing_user, + update_user_profile_from_claims, +) +from src.services.audit import ( + audit_login, audit_logout, audit_failed_login, + audit_register, audit_password_change, audit_password_reset, audit_sso_login, +) +from src.services.email import ( + is_email_verification_enabled, + is_email_verification_required, + is_smtp_configured, + send_verification_email, + send_password_reset_email, + verify_email_token, + verify_reset_token, + can_resend_verification, + can_resend_password_reset, +) + +# Create blueprint +auth_bp = Blueprint('auth', __name__) + +# Import these from app after initialization +bcrypt = None +csrf = None +limiter = None + +def init_auth_extensions(_bcrypt, _csrf, _limiter): + """Initialize extensions after app creation.""" + global bcrypt, csrf, limiter + bcrypt = _bcrypt + csrf = _csrf + limiter = _limiter + + +def rate_limit(limit_string): + """Decorator that applies rate limiting if limiter is available.""" + def decorator(f): + from functools import wraps + @wraps(f) + def wrapper(*args, **kwargs): + return f(*args, **kwargs) + # Store the limit string for later application + wrapper._rate_limit = limit_string + return wrapper + return decorator + + +def csrf_exempt(f): + """Decorator placeholder for CSRF exemption - applied after initialization.""" + from functools import wraps + @wraps(f) + def wrapper(*args, **kwargs): + return f(*args, **kwargs) + wrapper._csrf_exempt = True + return wrapper + + +# --- Forms --- + +class RegistrationForm(FlaskForm): + username = StringField('Username', validators=[DataRequired(), Length(min=2, max=20)]) + email = StringField('Email', validators=[DataRequired(), Email()]) + password = PasswordField('Password', validators=[DataRequired(), password_check]) + confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')]) + submit = SubmitField('Sign Up') + + def validate_username(self, username): + user = User.query.filter_by(username=username.data).first() + if user: + raise ValidationError('That username is already taken. Please choose a different one.') + + def validate_email(self, email): + user = User.query.filter_by(email=email.data).first() + if user: + raise ValidationError('That email is already registered. Please use a different one.') + + +class LoginForm(FlaskForm): + email = StringField('Email', validators=[DataRequired(), Email()]) + password = PasswordField('Mot de passe', validators=[DataRequired()]) + remember = BooleanField('Se souvenir de moi') + submit = SubmitField('Se connecter') + + +# --- Helper Functions --- + +def is_safe_url(target): + ref_url = urlparse(request.host_url) + test_url = urlparse(urljoin(request.host_url, target)) + return test_url.scheme in ('http', 'https') and ref_url.netloc == test_url.netloc + + +def is_registration_domain_allowed(email: str) -> bool: + """Check if email domain is allowed for registration. + + Returns True if no domain restrictions are configured or if the + email domain is in the allowed list. + """ + if not email: + return False + + domains_env = os.environ.get('REGISTRATION_ALLOWED_DOMAINS', '') + if not domains_env or not domains_env.strip(): + return True # No restriction configured + + allowed = [d.strip().lower() for d in domains_env.split(',') if d.strip()] + if not allowed: + return True # Empty after parsing + + parts = email.lower().rsplit('@', 1) + if len(parts) != 2: + return False # Invalid email format + + domain = parts[1] + return domain in allowed + + +# --- Routes --- + +@auth_bp.route('/register', methods=['GET', 'POST']) +@rate_limit("10 per minute") +def register(): + # Check if registration is allowed + allow_registration = os.environ.get('ALLOW_REGISTRATION', 'true').lower() == 'true' + + if not allow_registration: + flash('Registration is currently disabled. Please contact the administrator.', 'danger') + return redirect(url_for('auth.login')) + + if current_user.is_authenticated: + return redirect(url_for('recordings.index')) + + form = RegistrationForm() + if form.validate_on_submit(): + # Check if email domain is allowed + if not is_registration_domain_allowed(form.email.data): + flash('Registration is restricted. Please contact the administrator.', 'danger') + return render_template('register.html', title='Register', form=form) + + hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8') + + # Set email_verified based on whether verification is enabled + # If verification is enabled, new users start unverified + # If disabled, new users are considered verified by default + email_verified = not is_email_verification_enabled() + + user = User( + username=form.username.data, + email=form.email.data, + password=hashed_password, + email_verified=email_verified + ) + db.session.add(user) + db.session.commit() + audit_register(user.id) + + # Send verification email if enabled + if is_email_verification_enabled() and is_smtp_configured(): + if send_verification_email(user): + return render_template('auth/check_email.html', + title='Check Your Email', + email=user.email, + action='verification') + else: + # Email failed to send, but account was created + flash('Your account has been created, but we could not send a verification email. Please contact support.', 'warning') + return redirect(url_for('auth.login')) + + flash('Your account has been created! You can now log in.', 'success') + return redirect(url_for('auth.login')) + + return render_template('register.html', title='Register', form=form) + + +@auth_bp.route('/login', methods=['GET', 'POST']) +@rate_limit("10 per minute") +def login(): + if current_user.is_authenticated: + return redirect(url_for('recordings.index')) + + sso_enabled = is_sso_enabled() + sso_config = get_sso_config() + if sso_enabled: + init_sso_client(current_app) + + password_login_disabled = sso_enabled and sso_config.get('disable_password_login', False) + + form = LoginForm() + if form.validate_on_submit(): + user = User.query.filter_by(email=form.email.data).first() + if user and user.password: + # Check if password login is disabled for non-admins + if password_login_disabled and not user.is_admin: + flash('Password login is disabled. Please sign in with SSO.', 'warning') + elif bcrypt.check_password_hash(user.password, form.password.data): + # Check email verification if required + if is_email_verification_required() and not user.email_verified: + # Store user email in session for resend functionality + session['unverified_email'] = user.email + return render_template('auth/check_email.html', + title='Email Verification Required', + email=user.email, + action='verification_required', + show_resend=True) + + login_user(user, remember=form.remember.data) + audit_login(user.id) + next_page = request.args.get('next') + if not is_safe_url(next_page): + return redirect(url_for('recordings.index')) + return redirect(next_page) if next_page else redirect(url_for('recordings.index')) + else: + _email_hash = hashlib.sha256(form.email.data.lower().encode()).hexdigest()[:16] + audit_failed_login(details={'email_hash': _email_hash, 'reason': 'wrong_password'}) + flash('Login unsuccessful. Please check email and password.', 'danger') + elif user and not user.password: + _email_hash = hashlib.sha256(form.email.data.lower().encode()).hexdigest()[:16] + audit_failed_login(details={'email_hash': _email_hash, 'reason': 'sso_only_account'}) + flash('This account uses SSO login. Please sign in with SSO.', 'warning') + else: + _email_hash = hashlib.sha256(form.email.data.lower().encode()).hexdigest()[:16] + audit_failed_login(details={'email_hash': _email_hash, 'reason': 'user_not_found'}) + flash('Login unsuccessful. Please check email and password.', 'danger') + + return render_template( + 'login.html', + title='Login', + form=form, + sso_enabled=sso_enabled, + sso_provider_name=sso_config.get('provider_name', 'SSO'), + password_login_disabled=password_login_disabled + ) + + +@auth_bp.route('/auth/sso/login') +@rate_limit("10 per minute") +def sso_login(): + if not is_sso_enabled(): + flash('SSO is not configured. Please contact the administrator.', 'danger') + return redirect(url_for('auth.login')) + + oauth = get_sso_client() or init_sso_client(current_app) + if not oauth: + flash('Failed to initialize SSO client. Check server logs.', 'danger') + return redirect(url_for('auth.login')) + + next_url = request.args.get('next') + if next_url and is_safe_url(next_url): + session['sso_next'] = next_url + else: + session.pop('sso_next', None) + + try: + return oauth.sso.authorize_redirect(redirect_uri=get_sso_config().get('redirect_uri')) + except Exception as e: + current_app.logger.error(f"SSO redirect failed: {e}") + flash('Impossible de joindre le fournisseur SSO. Vérifiez la connexion réseau du serveur.', 'danger') + return redirect(url_for('auth.login')) + + +@auth_bp.route('/auth/sso/callback') +@rate_limit("20 per minute") +def sso_callback(): + if not is_sso_enabled(): + flash('SSO is not configured. Please contact the administrator.', 'danger') + return redirect(url_for('auth.login')) + + oauth = get_sso_client() or init_sso_client(current_app) + if not oauth: + flash('Failed to initialize SSO client. Check server logs.', 'danger') + return redirect(url_for('auth.login')) + + try: + token = oauth.sso.authorize_access_token() + userinfo = token.get('userinfo') or oauth.sso.userinfo() + except Exception as e: + current_app.logger.warning(f"SSO callback error: {e}") + flash('SSO login failed. Please try again.', 'danger') + return redirect(url_for('auth.login')) + + subject = userinfo.get('sub') + if not subject: + flash('SSO response did not include a subject identifier.', 'danger') + return redirect(url_for('auth.login')) + + link_user_id = session.pop('sso_link_user_id', None) + next_url = session.pop('sso_next', None) + cfg = get_sso_config() + + if link_user_id: + target_user = db.session.get(User, int(link_user_id)) + if not target_user: + flash('Could not link account: user not found.', 'danger') + return redirect(url_for('auth.account')) + + existing = User.query.filter_by(sso_subject=subject).first() + if existing and existing.id != target_user.id: + flash('This SSO account is already linked to another user.', 'danger') + return redirect(url_for('auth.account')) + + update_user_profile_from_claims(target_user, userinfo) + target_user.sso_provider = cfg.get('provider_name', 'SSO') + target_user.sso_subject = subject + db.session.commit() + flash('SSO account linked successfully.', 'success') + return redirect(url_for('auth.account')) + + try: + user = create_or_update_sso_user(userinfo) + except PermissionError as e: + flash(str(e), 'danger') + return redirect(url_for('auth.login')) + except ValueError as e: + flash(str(e), 'danger') + return redirect(url_for('auth.login')) + except Exception as e: + current_app.logger.warning(f"SSO login error: {e}") + flash('Could not complete SSO login. Please try again.', 'danger') + return redirect(url_for('auth.login')) + + login_user(user, remember=True) + audit_sso_login(user.id, details={'provider': cfg.get('provider_name', 'SSO')}) + + if next_url and is_safe_url(next_url): + return redirect(next_url) + return redirect(url_for('recordings.index')) + + +@auth_bp.route('/auth/sso/link', methods=['POST']) +@login_required +def sso_link(): + if not is_sso_enabled(): + flash('SSO is not configured. Please contact the administrator.', 'danger') + return redirect(url_for('auth.account')) + + session['sso_link_user_id'] = current_user.id + session['sso_next'] = url_for('auth.account') + + return redirect(url_for('auth.sso_login')) + + +@auth_bp.route('/auth/sso/unlink', methods=['POST']) +@login_required +def sso_unlink(): + if not current_user.sso_subject: + flash('Your account is not linked to SSO.', 'warning') + return redirect(url_for('auth.account')) + + if not current_user.password: + flash('Cannot unlink SSO - you have no password set. Please set a password first.', 'danger') + return redirect(url_for('auth.account')) + + current_user.sso_provider = None + current_user.sso_subject = None + db.session.commit() + flash('SSO account unlinked successfully.', 'success') + return redirect(url_for('auth.account')) + + +@auth_bp.route('/logout') +@csrf_exempt +def logout(): + if current_user.is_authenticated: + audit_logout(current_user.id) + logout_user() + return redirect(url_for('auth.login')) + + +# --- Email Verification Routes --- + +@auth_bp.route('/verify-email/') +def verify_email(token): + """Verify email address using token from email link.""" + user_id = verify_email_token(token) + + if user_id is None: + flash('The verification link is invalid or has expired.', 'danger') + return redirect(url_for('auth.login')) + + user = db.session.get(User, user_id) + if not user: + flash('User not found.', 'danger') + return redirect(url_for('auth.login')) + + if user.email_verified: + flash('Your email has already been verified.', 'info') + return redirect(url_for('auth.login')) + + # Verify the email + user.email_verified = True + user.email_verification_token = None # Clear the token + db.session.commit() + + return render_template('auth/verify_success.html', title='Email Verified') + + +@auth_bp.route('/resend-verification', methods=['POST']) +@rate_limit("3 per minute") +def resend_verification(): + """Resend verification email.""" + if not is_email_verification_enabled(): + flash('Email verification is not enabled.', 'danger') + return redirect(url_for('auth.login')) + + if not is_smtp_configured(): + flash('Email service is not configured.', 'danger') + return redirect(url_for('auth.login')) + + # Get email from session (set during failed login) or form + email = session.get('unverified_email') or request.form.get('email') + + if not email: + flash('Email address is required.', 'danger') + return redirect(url_for('auth.login')) + + user = User.query.filter_by(email=email).first() + + if not user: + # Don't reveal if user exists + flash('If an account exists with this email, a verification link has been sent.', 'info') + return redirect(url_for('auth.login')) + + if user.email_verified: + flash('Your email has already been verified.', 'info') + return redirect(url_for('auth.login')) + + # Check cooldown + can_resend, remaining = can_resend_verification(user) + if not can_resend: + flash(f'Please wait {remaining} seconds before requesting another verification email.', 'warning') + return render_template('auth/check_email.html', + title='Check Your Email', + email=email, + action='verification_required', + show_resend=True) + + if send_verification_email(user): + flash('A new verification email has been sent.', 'success') + else: + flash('Failed to send verification email. Please try again later.', 'danger') + + return render_template('auth/check_email.html', + title='Check Your Email', + email=email, + action='verification', + show_resend=True) + + +# --- Password Reset Routes --- + +@auth_bp.route('/forgot-password', methods=['GET', 'POST']) +@rate_limit("5 per minute") +def forgot_password(): + """Show and handle forgot password form.""" + if current_user.is_authenticated: + return redirect(url_for('recordings.index')) + + if not is_smtp_configured(): + flash('Password reset is not available. Please contact the administrator.', 'warning') + return redirect(url_for('auth.login')) + + if request.method == 'POST': + email = request.form.get('email') + + if not email: + flash('Email address is required.', 'danger') + return render_template('auth/forgot_password.html', title='Forgot Password') + + user = User.query.filter_by(email=email).first() + + # Always show the same message to prevent email enumeration + if user: + # Check if user has a password (not SSO-only) + if user.password: + # Check cooldown + can_resend, remaining = can_resend_password_reset(user) + if not can_resend: + flash(f'Please wait {remaining} seconds before requesting another reset email.', 'warning') + else: + send_password_reset_email(user) + + flash('If an account exists with this email, a password reset link has been sent.', 'info') + return render_template('auth/check_email.html', + title='Check Your Email', + email=email, + action='password_reset') + + return render_template('auth/forgot_password.html', title='Forgot Password') + + +@auth_bp.route('/reset-password/', methods=['GET', 'POST']) +@rate_limit("10 per minute") +def reset_password(token): + """Handle password reset form.""" + if current_user.is_authenticated: + return redirect(url_for('recordings.index')) + + user_id = verify_reset_token(token) + + if user_id is None: + flash('The password reset link is invalid or has expired.', 'danger') + return redirect(url_for('auth.forgot_password')) + + user = db.session.get(User, user_id) + if not user: + flash('User not found.', 'danger') + return redirect(url_for('auth.forgot_password')) + + if request.method == 'POST': + password = request.form.get('password') + confirm_password = request.form.get('confirm_password') + + if not password or not confirm_password: + flash('Both password fields are required.', 'danger') + return render_template('auth/reset_password.html', title='Reset Password', token=token) + + if password != confirm_password: + flash('Passwords do not match.', 'danger') + return render_template('auth/reset_password.html', title='Reset Password', token=token) + + # Validate password + try: + password_check(None, type('obj', (object,), {'data': password})) + except ValidationError as e: + flash(str(e), 'danger') + return render_template('auth/reset_password.html', title='Reset Password', token=token) + + # Update password + hashed_password = bcrypt.generate_password_hash(password).decode('utf-8') + user.password = hashed_password + user.password_reset_token = None # Clear the token + user.password_reset_sent_at = None + + # Also verify email if not already verified + if not user.email_verified: + user.email_verified = True + + db.session.commit() + audit_password_reset(user.id) + + flash('Your password has been reset. You can now log in with your new password.', 'success') + return redirect(url_for('auth.login')) + + return render_template('auth/reset_password.html', title='Reset Password', token=token) + + +@auth_bp.route('/account', methods=['GET', 'POST']) +@login_required +def account(): + # Import here to avoid circular imports + from flask import current_app + + if request.method == 'POST': + # Only update fields that are present in the form submission + # This prevents clearing data when switching between tabs + + # Check if this is the account information form (has user_name field) + if 'user_name' in request.form: + # Handle personal information updates + user_name = request.form.get('user_name') + user_job_title = request.form.get('user_job_title') + user_company = request.form.get('user_company') + ui_lang = request.form.get('ui_language') + transcription_lang = request.form.get('transcription_language') + output_lang = request.form.get('output_language') + + current_user.name = user_name if user_name else None + current_user.job_title = user_job_title if user_job_title else None + current_user.company = user_company if user_company else None + current_user.ui_language = ui_lang if ui_lang else 'en' + current_user.transcription_language = transcription_lang if transcription_lang else None + current_user.output_language = output_lang if output_lang else None + + # Check if this is the custom prompts form (has summary_prompt field) + elif 'summary_prompt' in request.form: + # Handle custom prompt updates + summary_prompt_text = request.form.get('summary_prompt') + current_user.summary_prompt = summary_prompt_text if summary_prompt_text else None + # Handle event extraction setting + current_user.extract_events = 'extract_events' in request.form + # Handle transcription hints + hotwords = request.form.get('transcription_hotwords') + current_user.transcription_hotwords = hotwords if hotwords else None + initial_prompt = request.form.get('transcription_initial_prompt') + current_user.transcription_initial_prompt = initial_prompt if initial_prompt else None + + # Only update diarize if it's not locked by env var + if 'ASR_DIARIZE' not in os.environ: + current_user.diarize = 'diarize' in request.form + + db.session.commit() + + # Return JSON response for AJAX requests + if request.headers.get('X-Requested-With') == 'XMLHttpRequest' or request.accept_mimetypes.best == 'application/json': + return jsonify({'success': True, 'message': 'Account details updated successfully!'}) + + # Regular form submission with redirect + flash('Account details updated successfully!', 'success') + + # Preserve the active tab when redirecting + if 'summary_prompt' in request.form: + return redirect(url_for('auth.account') + '#prompts') + else: + return redirect(url_for('auth.account')) + + # Get admin default prompt from system settings + admin_default_prompt = SystemSetting.get_setting('admin_default_summary_prompt', None) + if admin_default_prompt: + default_summary_prompt_text = admin_default_prompt + else: + # Fallback to hardcoded default if admin hasn't set one + default_summary_prompt_text = """Generate a comprehensive summary that includes the following sections: +- **Key Issues Discussed**: A bulleted list of the main topics +- **Key Decisions Made**: A bulleted list of any decisions reached +- **Action Items**: A bulleted list of tasks assigned, including who is responsible if mentioned""" + + asr_diarize_locked = 'ASR_DIARIZE' in os.environ + ASR_DIARIZE = os.environ.get('ASR_DIARIZE', 'false').lower() == 'true' + USE_ASR_ENDPOINT = os.environ.get('USE_ASR_ENDPOINT', 'false').lower() == 'true' + USE_NEW_TRANSCRIPTION_ARCHITECTURE = os.environ.get('USE_NEW_TRANSCRIPTION_ARCHITECTURE', 'true').lower() == 'true' + ENABLE_AUTO_DELETION = os.environ.get('ENABLE_AUTO_DELETION', 'false').lower() == 'true' + ENABLE_INTERNAL_SHARING = os.environ.get('ENABLE_INTERNAL_SHARING', 'false').lower() == 'true' + ASR_RETURN_SPEAKER_EMBEDDINGS = os.environ.get('ASR_RETURN_SPEAKER_EMBEDDINGS', 'false').lower() == 'true' + ENABLE_AUTO_EXPORT = os.environ.get('ENABLE_AUTO_EXPORT', 'false').lower() == 'true' + + # Get connector diarization support (new architecture) + connector_supports_diarization = USE_ASR_ENDPOINT # Default to USE_ASR_ENDPOINT for backwards compat + if USE_NEW_TRANSCRIPTION_ARCHITECTURE: + try: + from src.services.transcription import get_registry + registry = get_registry() + connector = registry.get_active_connector() + if connector: + connector_supports_diarization = connector.supports_diarization + except Exception as e: + current_app.logger.warning(f"Could not get connector diarization support: {e}") + + # Check if user is a team admin and get their admin groups + admin_memberships = GroupMembership.query.filter_by( + user_id=current_user.id, + role='admin' + ).all() + + is_team_admin = len(admin_memberships) > 0 + + # Build list of groups where user is admin (for tag assignment) + user_admin_groups = [] + for membership in admin_memberships: + if membership.group: + user_admin_groups.append({ + 'id': membership.group.id, + 'name': membership.group.name + }) + + sso_config = get_sso_config() + sso_enabled = is_sso_enabled() + if sso_enabled: + init_sso_client(current_app) + sso_linked = bool(current_user.sso_subject) + + password_login_disabled = sso_enabled and sso_config.get('disable_password_login', False) + + # Check if admin has globally disabled auto-summarization + admin_setting = SystemSetting.get_setting('disable_auto_summarization', False) + admin_disabled_auto_summarization = admin_setting if isinstance(admin_setting, bool) else str(admin_setting).lower() == 'true' + + # Get user's UI language preference + user_language = current_user.ui_language if current_user.ui_language else 'en' + + return render_template('account.html', + title='Account', + default_summary_prompt_text=default_summary_prompt_text, + use_asr_endpoint=USE_ASR_ENDPOINT, + connector_supports_diarization=connector_supports_diarization, + enable_auto_deletion=ENABLE_AUTO_DELETION, + enable_internal_sharing=ENABLE_INTERNAL_SHARING, + user_admin_groups=user_admin_groups, + asr_diarize_locked=asr_diarize_locked, + asr_diarize_env_value=ASR_DIARIZE, + is_team_admin=is_team_admin, + sso_enabled=sso_enabled, + sso_provider_name=sso_config.get('provider_name', 'SSO'), + sso_linked=sso_linked, + sso_subject=current_user.sso_subject, + has_password=bool(current_user.password), + password_login_disabled=password_login_disabled, + speaker_embeddings_enabled=ASR_RETURN_SPEAKER_EMBEDDINGS, + auto_speaker_labelling=current_user.auto_speaker_labelling, + auto_speaker_labelling_threshold=current_user.auto_speaker_labelling_threshold or 'medium', + admin_disabled_auto_summarization=admin_disabled_auto_summarization, + auto_summarization=current_user.auto_summarization if current_user.auto_summarization is not None else True, + user_language=user_language, + enable_auto_export=ENABLE_AUTO_EXPORT) + + +@auth_bp.route('/api/user/auto-speaker-labelling', methods=['POST']) +@login_required +def update_auto_speaker_labelling(): + """Update user's auto speaker labelling settings.""" + data = request.get_json() + + if data is None: + return jsonify({'success': False, 'error': 'Invalid JSON'}), 400 + + # Update enabled state + if 'enabled' in data: + current_user.auto_speaker_labelling = bool(data['enabled']) + + # Update threshold (validate value) + if 'threshold' in data: + threshold = data['threshold'] + if threshold in ('low', 'medium', 'high'): + current_user.auto_speaker_labelling_threshold = threshold + else: + return jsonify({'success': False, 'error': 'Invalid threshold value'}), 400 + + db.session.commit() + + return jsonify({ + 'success': True, + 'auto_speaker_labelling': current_user.auto_speaker_labelling, + 'auto_speaker_labelling_threshold': current_user.auto_speaker_labelling_threshold + }) + + +@auth_bp.route('/api/user/auto-summarization', methods=['POST']) +@login_required +def update_auto_summarization(): + """Update user's auto summarization setting.""" + data = request.get_json() + + if data is None: + return jsonify({'success': False, 'error': 'Invalid JSON'}), 400 + + if 'enabled' in data: + current_user.auto_summarization = bool(data['enabled']) + db.session.commit() + + return jsonify({ + 'success': True, + 'auto_summarization': current_user.auto_summarization + }) + + +@auth_bp.route('/change_password', methods=['POST']) +@login_required +@rate_limit("10 per minute") +def change_password(): + # Check if password management is disabled for non-admins + sso_config = get_sso_config() + password_login_disabled = is_sso_enabled() and sso_config.get('disable_password_login', False) + if password_login_disabled and not current_user.is_admin: + flash('Password management is disabled. Please use SSO to sign in.', 'warning') + return redirect(url_for('auth.account')) + + current_password = request.form.get('current_password') + new_password = request.form.get('new_password') + confirm_password = request.form.get('confirm_password') + + # Check if user has an existing password + has_existing_password = bool(current_user.password) + + # Validate form data - current password only required if user has one + if has_existing_password and not current_password: + flash('Current password is required.', 'danger') + return redirect(url_for('auth.account')) + + if not new_password or not confirm_password: + flash('New password and confirmation are required.', 'danger') + return redirect(url_for('auth.account')) + + if new_password != confirm_password: + flash('New password and confirmation do not match.', 'danger') + return redirect(url_for('auth.account')) + + # Custom validation for new password + try: + password_check(None, type('obj', (object,), {'data': new_password})) + except ValidationError as e: + flash(str(e), 'danger') + return redirect(url_for('auth.account')) + + # Verify current password only if user has one + if has_existing_password: + if not bcrypt.check_password_hash(current_user.password, current_password): + flash('Current password is incorrect.', 'danger') + return redirect(url_for('auth.account')) + + # Update password + hashed_password = bcrypt.generate_password_hash(new_password).decode('utf-8') + current_user.password = hashed_password + db.session.commit() + audit_password_change(current_user.id) + + flash('Your password has been updated!', 'success') + return redirect(url_for('auth.account')) + + +@auth_bp.route('/docs/transcript-templates-guide') +def transcript_templates_guide(): + """Serve the transcript templates documentation.""" + from flask import current_app + + docs_path = os.path.join(current_app.root_path, '..', 'docs', 'transcript-templates-guide.md') + + if not os.path.exists(docs_path): + return "Documentation not found", 404 + + with open(docs_path, 'r', encoding='utf-8') as f: + content = f.read() + + # Convert markdown to HTML + html_content = markdown.markdown(content, extensions=['tables', 'fenced_code', 'codehilite']) + + # Wrap in basic HTML template with Speakr styling + html_template = f''' + + + + + + Transcript Templates Guide - Speakr + + + + + +
+ ← Back to App + {html_content} +
+ + + ''' + + return html_template diff --git a/src/api/docs.py b/src/api/docs.py new file mode 100644 index 0000000..5ffae71 --- /dev/null +++ b/src/api/docs.py @@ -0,0 +1,201 @@ +"""Documentation API - serves client documentation pages.""" +import os +import markdown +from markupsafe import escape +from flask import Blueprint, jsonify +from flask_login import login_required +from src.utils import sanitize_html + +docs_bp = Blueprint('docs', __name__) + +# Path to client documentation files +DOCS_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), 'client_docs') + +# Singleton Markdown instance (performance: avoid reinitializing extensions on every call) +_docs_md = markdown.Markdown( + extensions=[ + 'tables', + 'fenced_code', + 'toc', + 'admonition', + 'attr_list', + 'md_in_html', + 'sane_lists' + ], + extension_configs={ + 'toc': {'permalink': False, 'toc_depth': 3} + } +) + + +def _read_doc_file(filepath): + """Read and cache a documentation file. Returns content string.""" + mtime = os.path.getmtime(filepath) + cache = getattr(_read_doc_file, '_cache', {}) + cached = cache.get(filepath) + if cached and cached[0] == mtime: + return cached[1] + with open(filepath, 'r', encoding='utf-8') as f: + content = f.read() + cache[filepath] = (mtime, content) + _read_doc_file._cache = cache + return content + + +def get_nav_structure(is_admin=False): + """Return navigation structure for documentation.""" + sections = [ + { + "title": "Guide Utilisateur", + "icon": "fa-book-open", + "slug": "guide-utilisateur", + "pages": [ + {"title": "Vue d'ensemble", "slug": "index"}, + {"title": "Premiers pas", "slug": "premiers-pas"}, + {"title": "Enregistrement", "slug": "enregistrement"}, + {"title": "Transcriptions", "slug": "transcriptions"}, + {"title": "Recherche IA", "slug": "recherche-ia"}, + {"title": "Partage", "slug": "partage"}, + {"title": "Dossiers", "slug": "dossiers"}, + {"title": "Groupes", "slug": "groupes"}, + {"title": "Paramètres", "slug": "parametres"}, + {"title": "Application mobile", "slug": "application-mobile"} + ] + }, + { + "title": "Dépannage", + "icon": "fa-life-ring", + "slug": "depannage", + "pages": [ + {"title": "Vue d'ensemble", "slug": "index"}, + {"title": "Transcription", "slug": "transcription"}, + {"title": "Performance", "slug": "performance"}, + {"title": "Fonctionnalités", "slug": "fonctionnalites"} + ] + } + ] + + if is_admin: + sections.insert(1, { + "title": "Guide Administrateur", + "icon": "fa-shield-alt", + "slug": "guide-admin", + "pages": [ + {"title": "Vue d'ensemble", "slug": "index"}, + {"title": "Gestion des utilisateurs", "slug": "gestion-utilisateurs"}, + {"title": "Gestion des groupes", "slug": "gestion-groupes"}, + {"title": "Statistiques", "slug": "statistiques"}, + {"title": "Paramètres système", "slug": "parametres-systeme"}, + {"title": "Modèles IA", "slug": "modeles-ia"}, + {"title": "Prompts", "slug": "prompts"}, + {"title": "Recherche sémantique", "slug": "recherche-semantique"}, + {"title": "Rétention", "slug": "retention"}, + {"title": "SSO", "slug": "sso"} + ] + }) + + return sections + + +def render_markdown_content(md_text): + """Render markdown to sanitized HTML with extensions for admonitions, tables, etc.""" + _docs_md.reset() + html = _docs_md.convert(md_text) + toc_html = getattr(_docs_md, 'toc', '') + # Sanitize rendered HTML to prevent XSS + html = sanitize_html(html) + return html, toc_html + + +@docs_bp.route('/api/docs/nav') +@login_required +def docs_nav(): + """Return navigation structure based on user role.""" + from flask_login import current_user + is_admin = getattr(current_user, 'is_admin', False) + sections = get_nav_structure(is_admin) + return jsonify({"sections": sections}) + + +@docs_bp.route('/api/docs/page/
/') +@login_required +def docs_page(section, page): + """Return rendered HTML for a documentation page.""" + # Sanitize path components to prevent directory traversal + safe_section = os.path.basename(section) + safe_page = os.path.basename(page) + + allowed_sections = ['guide-utilisateur', 'guide-admin', 'depannage'] + if safe_section not in allowed_sections: + return jsonify({"error": "Section invalide"}), 404 + + # Admin guide requires admin role + if safe_section == 'guide-admin': + from flask_login import current_user + if not getattr(current_user, 'is_admin', False): + return jsonify({"error": "Accès refusé"}), 403 + + filepath = os.path.join(DOCS_DIR, safe_section, f"{safe_page}.md") + + if not os.path.isfile(filepath): + return jsonify({"error": "Page non trouvée"}), 404 + + content = _read_doc_file(filepath) + html, toc = render_markdown_content(content) + + return jsonify({ + "html": html, + "toc": toc, + "section": safe_section, + "page": safe_page + }) + + +@docs_bp.route('/api/docs/search') +@login_required +def docs_search(): + """Simple text search across all documentation pages.""" + from flask import request + from flask_login import current_user + + query = request.args.get('q', '').strip().lower() + if not query or len(query) < 2: + return jsonify({"results": []}) + + is_admin = getattr(current_user, 'is_admin', False) + results = [] + + sections = get_nav_structure(is_admin) + + for section in sections: + section_dir = os.path.join(DOCS_DIR, section['slug']) + if not os.path.isdir(section_dir): + continue + + for page_info in section['pages']: + filepath = os.path.join(section_dir, f"{page_info['slug']}.md") + if not os.path.isfile(filepath): + continue + + content = _read_doc_file(filepath) + + content_lower = content.lower() + if query in content_lower: + # Find matching line for context + lines = content.split('\n') + snippet = '' + for line in lines: + if query in line.lower(): + # HTML-escape snippet to prevent XSS + snippet = str(escape(line.strip()[:150])) + break + + results.append({ + "section": section['slug'], + "section_title": section['title'], + "page": page_info['slug'], + "page_title": page_info['title'], + "snippet": snippet + }) + + return jsonify({"results": results}) diff --git a/src/api/events.py b/src/api/events.py new file mode 100644 index 0000000..5735995 --- /dev/null +++ b/src/api/events.py @@ -0,0 +1,173 @@ +""" +Calendar event extraction and export. + +This blueprint was auto-generated from app.py route extraction. +""" + +import os +import json +from datetime import datetime, timedelta +from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify, send_file, Response, current_app, make_response +from flask_login import login_required, current_user +from werkzeug.utils import secure_filename + +from src.database import db +from src.models import * +from src.utils import * +from src.services.calendar import generate_ics_content + +# Create blueprint +events_bp = Blueprint('events', __name__) + +# Configuration from environment +ENABLE_INQUIRE_MODE = os.environ.get('ENABLE_INQUIRE_MODE', 'false').lower() == 'true' +ENABLE_AUTO_DELETION = os.environ.get('ENABLE_AUTO_DELETION', 'false').lower() == 'true' +USERS_CAN_DELETE = os.environ.get('USERS_CAN_DELETE', 'true').lower() == 'true' +ENABLE_INTERNAL_SHARING = os.environ.get('ENABLE_INTERNAL_SHARING', 'false').lower() == 'true' +USE_ASR_ENDPOINT = os.environ.get('USE_ASR_ENDPOINT', 'false').lower() == 'true' + +# Global helpers (will be injected from app) +has_recording_access = None +bcrypt = None +csrf = None +limiter = None + +def init_events_helpers(**kwargs): + """Initialize helper functions and extensions from app.""" + global has_recording_access, bcrypt, csrf, limiter + has_recording_access = kwargs.get('has_recording_access') + bcrypt = kwargs.get('bcrypt') + csrf = kwargs.get('csrf') + limiter = kwargs.get('limiter') + + +# --- Routes --- + +@events_bp.route('/api/recording//events', methods=['GET']) +@login_required +def get_recording_events(recording_id): + """Get all events extracted from a recording.""" + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'Unauthorized'}), 403 + + events = Event.query.filter_by(recording_id=recording_id).all() + return jsonify({'events': [event.to_dict() for event in events]}) + + except Exception as e: + current_app.logger.error(f"Error fetching events for recording {recording_id}: {e}") + return jsonify({'error': str(e)}), 500 + + +@events_bp.route('/api/event//ics', methods=['GET']) +@login_required +def download_event_ics(event_id): + """Generate and download an ICS file for a single event.""" + try: + event = db.session.get(Event, event_id) + if not event: + return jsonify({'error': 'Event not found'}), 404 + + # Check permissions through recording access + if not has_recording_access(event.recording, current_user): + return jsonify({'error': 'Unauthorized'}), 403 + + # Generate ICS content + ics_content = generate_ics_content(event) + + # Create response with ICS file + response = make_response(ics_content) + response.headers['Content-Type'] = 'text/calendar; charset=utf-8' + response.headers['Content-Disposition'] = f'attachment; filename="{secure_filename(event.title)}.ics"' + + return response + + except Exception as e: + current_app.logger.error(f"Error generating ICS for event {event_id}: {e}") + return jsonify({'error': str(e)}), 500 + + +@events_bp.route('/api/recording//events/ics', methods=['GET']) +@login_required +def download_all_events_ics(recording_id): + """Generate and download an ICS file containing all events from a recording.""" + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'Unauthorized'}), 403 + + # Get all events for this recording + events = Event.query.filter_by(recording_id=recording_id).all() + if not events: + return jsonify({'error': 'No events found for this recording'}), 404 + + # Generate combined ICS content + ics_lines = [] + ics_lines.append("BEGIN:VCALENDAR") + ics_lines.append("VERSION:2.0") + ics_lines.append("PRODID:-//Speakr//Event Export//EN") + ics_lines.append("CALSCALE:GREGORIAN") + ics_lines.append("METHOD:PUBLISH") + + # Add each event + for event in events: + # Get the individual event's ICS content and extract just the VEVENT portion + individual_ics = generate_ics_content(event) + # Extract VEVENT block from individual ICS + lines = individual_ics.split('\n') + in_event = False + for line in lines: + if line.startswith('BEGIN:VEVENT'): + in_event = True + if in_event: + ics_lines.append(line) + if line.startswith('END:VEVENT'): + in_event = False + + ics_lines.append("END:VCALENDAR") + ics_content = '\r\n'.join(ics_lines) + + # Create response with ICS file + response = make_response(ics_content) + response.headers['Content-Type'] = 'text/calendar; charset=utf-8' + safe_title = secure_filename(recording.title) if recording.title else f'recording-{recording_id}' + response.headers['Content-Disposition'] = f'attachment; filename="{safe_title}-events.ics"' + + return response + + except Exception as e: + current_app.logger.error(f"Error generating ICS for all events in recording {recording_id}: {e}") + return jsonify({'error': str(e)}), 500 + + +@events_bp.route('/api/event/', methods=['DELETE']) +@login_required +def delete_event(event_id): + """Delete a single event.""" + try: + event = db.session.get(Event, event_id) + if not event: + return jsonify({'error': 'Event not found'}), 404 + + # Check permissions through recording access + if not has_recording_access(event.recording, current_user): + return jsonify({'error': 'Unauthorized'}), 403 + + db.session.delete(event) + db.session.commit() + + return jsonify({'success': True}) + + except Exception as e: + current_app.logger.error(f"Error deleting event {event_id}: {e}") + db.session.rollback() + return jsonify({'error': str(e)}), 500 + + diff --git a/src/api/export_templates.py b/src/api/export_templates.py new file mode 100644 index 0000000..aa35374 --- /dev/null +++ b/src/api/export_templates.py @@ -0,0 +1,162 @@ +""" +Export template management API. + +This blueprint provides CRUD operations for export templates, +following the same pattern as transcript templates. +""" + +import os +from datetime import datetime +from flask import Blueprint, request, jsonify, current_app +from flask_login import login_required, current_user + +from src.database import db +from src.models import ExportTemplate + +# Create blueprint +export_templates_bp = Blueprint('export_templates', __name__) + +# Configuration from environment +ENABLE_AUTO_EXPORT = os.environ.get('ENABLE_AUTO_EXPORT', 'false').lower() == 'true' + + +# --- Routes --- + +@export_templates_bp.route('/api/export-templates', methods=['GET']) +@login_required +def get_export_templates(): + """Get all export templates for the current user.""" + templates = ExportTemplate.query.filter_by(user_id=current_user.id).all() + return jsonify([template.to_dict() for template in templates]) + + +@export_templates_bp.route('/api/export-templates', methods=['POST']) +@login_required +def create_export_template(): + """Create a new export template.""" + data = request.json + if not data or not data.get('name') or not data.get('template'): + return jsonify({'error': 'Name and template are required'}), 400 + + # If this is set as default, unset other defaults + if data.get('is_default'): + ExportTemplate.query.filter_by( + user_id=current_user.id, + is_default=True + ).update({'is_default': False}) + + template = ExportTemplate( + user_id=current_user.id, + name=data['name'], + template=data['template'], + description=data.get('description'), + is_default=data.get('is_default', False) + ) + + db.session.add(template) + db.session.commit() + + return jsonify(template.to_dict()), 201 + + +@export_templates_bp.route('/api/export-templates/', methods=['PUT']) +@login_required +def update_export_template(template_id): + """Update an existing export template.""" + template = ExportTemplate.query.filter_by( + id=template_id, + user_id=current_user.id + ).first() + + if not template: + return jsonify({'error': 'Template not found'}), 404 + + data = request.json + if not data: + return jsonify({'error': 'No data provided'}), 400 + + # If this is set as default, unset other defaults + if data.get('is_default'): + ExportTemplate.query.filter_by( + user_id=current_user.id, + is_default=True + ).update({'is_default': False}) + + template.name = data.get('name', template.name) + template.template = data.get('template', template.template) + template.description = data.get('description', template.description) + template.is_default = data.get('is_default', template.is_default) + template.updated_at = datetime.utcnow() + + db.session.commit() + + return jsonify(template.to_dict()) + + +@export_templates_bp.route('/api/export-templates/', methods=['DELETE']) +@login_required +def delete_export_template(template_id): + """Delete an export template.""" + template = ExportTemplate.query.filter_by( + id=template_id, + user_id=current_user.id + ).first() + + if not template: + return jsonify({'error': 'Template not found'}), 404 + + db.session.delete(template) + db.session.commit() + + return jsonify({'success': True}) + + +@export_templates_bp.route('/api/export-templates/create-defaults', methods=['POST']) +@login_required +def create_default_export_templates(): + """Create default export template for the user if they don't have any.""" + existing_templates = ExportTemplate.query.filter_by(user_id=current_user.id).count() + + if existing_templates > 0: + return jsonify({'message': 'User already has templates'}), 200 + + # Default template with localized labels + default_template = ExportTemplate( + user_id=current_user.id, + name="Standard Export", + template="""# {{title}} + +## {{label.metadata}} + +{{#if meeting_date}}- **{{label.date}}:** {{meeting_date}} +{{/if}}{{#if created_at}}- **{{label.created}}:** {{created_at}} +{{/if}}{{#if original_filename}}- **{{label.originalFile}}:** {{original_filename}} +{{/if}}{{#if file_size}}- **{{label.fileSize}}:** {{file_size}} +{{/if}}{{#if participants}}- **{{label.participants}}:** {{participants}} +{{/if}}{{#if tags}}- **{{label.tags}}:** {{tags}} +{{/if}} + +{{#if notes}}## {{label.notes}} + +{{notes}} + +{{/if}}{{#if summary}}## {{label.summary}} + +{{summary}} + +{{/if}}{{#if transcription}}## {{label.transcription}} + +{{transcription}} + +{{/if}}""", + description="Default export template with localized labels", + is_default=True + ) + + db.session.add(default_template) + db.session.commit() + + return jsonify({ + 'success': True, + 'templates': [default_template.to_dict()] + }), 201 diff --git a/src/api/folders.py b/src/api/folders.py new file mode 100644 index 0000000..71888fd --- /dev/null +++ b/src/api/folders.py @@ -0,0 +1,665 @@ +""" +Folder management and assignment. + +This blueprint handles folder CRUD operations and recording-folder assignments. +Folders are one-to-many (a recording can only belong to one folder). +""" + +import os +from datetime import datetime +from flask import Blueprint, request, jsonify, current_app +from flask_login import login_required, current_user + +from sqlalchemy.exc import IntegrityError + +from src.database import db +from src.services.audit import audit_access +from src.models import * + +# Create blueprint +folders_bp = Blueprint('folders', __name__) + +# Configuration from environment +ENABLE_AUTO_DELETION = os.environ.get('ENABLE_AUTO_DELETION', 'false').lower() == 'true' +ENABLE_INTERNAL_SHARING = os.environ.get('ENABLE_INTERNAL_SHARING', 'false').lower() == 'true' + +# Global helpers (will be injected from app) +has_recording_access = None +bcrypt = None +csrf = None +limiter = None + + +def init_folders_helpers(**kwargs): + """Initialize helper functions and extensions from app.""" + global has_recording_access, bcrypt, csrf, limiter + has_recording_access = kwargs.get('has_recording_access') + bcrypt = kwargs.get('bcrypt') + csrf = kwargs.get('csrf') + limiter = kwargs.get('limiter') + + +# --- Routes --- + +@folders_bp.route('/api/folders', methods=['GET']) +@login_required +def get_folders(): + """Get all folders for the current user, including group folders they have access to.""" + # Check if folders feature is enabled - return empty array if not + folders_enabled = SystemSetting.get_setting('enable_folders', False) + if not folders_enabled: + return jsonify([]) + + # Get user's personal folders + user_folders = Folder.query.filter_by(user_id=current_user.id, group_id=None).order_by(Folder.name).all() + + # Get user's team memberships with roles + memberships = GroupMembership.query.filter_by(user_id=current_user.id).all() + team_roles = {m.group_id: m.role for m in memberships} + team_ids = list(team_roles.keys()) + + # Get group folders for all teams the user is a member of + team_folders = [] + if team_ids: + team_folders = Folder.query.filter(Folder.group_id.in_(team_ids)).order_by(Folder.name).all() + + # Build response with edit permissions + result = [] + + # Personal folders - user can always edit their own + for folder in user_folders: + folder_dict = folder.to_dict() + folder_dict['can_edit'] = True + folder_dict['user_role'] = None + result.append(folder_dict) + + # Group folders - only admins can edit + for folder in team_folders: + folder_dict = folder.to_dict() + user_role = team_roles.get(folder.group_id, 'member') + folder_dict['can_edit'] = (user_role == 'admin') + folder_dict['user_role'] = user_role + result.append(folder_dict) + + return jsonify(result) + + +@folders_bp.route('/api/folders', methods=['POST']) +@login_required +def create_folder(): + """Create a new folder (personal or group folder).""" + # Check if folders feature is enabled + folders_enabled = SystemSetting.get_setting('enable_folders', False) + if not folders_enabled: + return jsonify({'error': 'Folders feature is not enabled'}), 403 + + data = request.get_json() + + if not data or not data.get('name'): + return jsonify({'error': 'Folder name is required'}), 400 + + group_id = data.get('group_id') + + # If creating a group folder, verify user is admin of that group + if group_id: + membership = GroupMembership.query.filter_by( + group_id=group_id, + user_id=current_user.id + ).first() + + if not membership or membership.role != 'admin': + return jsonify({'error': 'Only group admins can create group folders'}), 403 + + # Check if group folder with same name already exists for this group + existing_folder = Folder.query.filter_by(name=data['name'], group_id=group_id).first() + if existing_folder: + return jsonify({'error': 'A folder with this name already exists for this group'}), 400 + else: + # Check if personal folder with same name already exists for this user + existing_folder = Folder.query.filter_by(name=data['name'], user_id=current_user.id, group_id=None).first() + if existing_folder: + return jsonify({'error': 'Folder with this name already exists'}), 400 + + # Handle retention_days: -1 means protected from deletion + retention_days = data.get('retention_days') + protect_from_deletion = False + + if retention_days == -1: + # -1 indicates infinite retention (protected from auto-deletion) + protect_from_deletion = True if ENABLE_AUTO_DELETION else False + + # Validate naming_template_id if provided + naming_template_id = data.get('naming_template_id') + if naming_template_id: + template = NamingTemplate.query.filter_by(id=naming_template_id, user_id=current_user.id).first() + if not template: + return jsonify({'error': 'Naming template not found'}), 404 + + # Validate export_template_id if provided + export_template_id = data.get('export_template_id') + if export_template_id: + template = ExportTemplate.query.filter_by(id=export_template_id, user_id=current_user.id).first() + if not template: + return jsonify({'error': 'Export template not found'}), 404 + + folder = Folder( + name=data['name'], + user_id=current_user.id, + group_id=group_id, + color=data.get('color', '#10B981'), + custom_prompt=data.get('custom_prompt'), + default_language=data.get('default_language'), + default_min_speakers=data.get('default_min_speakers'), + default_max_speakers=data.get('default_max_speakers'), + default_hotwords=data.get('default_hotwords'), + default_initial_prompt=data.get('default_initial_prompt'), + protect_from_deletion=protect_from_deletion, + retention_days=retention_days, + auto_share_on_apply=data.get('auto_share_on_apply', True) if group_id else True, + share_with_group_lead=data.get('share_with_group_lead', True) if group_id else True, + naming_template_id=naming_template_id, + export_template_id=export_template_id + ) + + db.session.add(folder) + + try: + db.session.commit() + except IntegrityError as e: + db.session.rollback() + current_app.logger.error(f"Folder creation failed due to integrity constraint: {str(e)}") + return jsonify({'error': 'A folder with this name already exists'}), 400 + + return jsonify(folder.to_dict()), 201 + + +@folders_bp.route('/api/folders/', methods=['PUT']) +@login_required +def update_folder(folder_id): + """Update a folder.""" + # Check if folders feature is enabled + folders_enabled = SystemSetting.get_setting('enable_folders', False) + if not folders_enabled: + return jsonify({'error': 'Folders feature is not enabled'}), 403 + + folder = db.session.get(Folder, folder_id) + if not folder: + return jsonify({'error': 'Folder not found'}), 404 + + # Check permissions + if folder.group_id: + # Group folder - user must be a team admin + membership = GroupMembership.query.filter_by( + group_id=folder.group_id, + user_id=current_user.id + ).first() + + if not membership or membership.role != 'admin': + return jsonify({'error': 'Only group admins can edit group folders'}), 403 + else: + # Personal folder - must be the owner + if folder.user_id != current_user.id: + return jsonify({'error': 'You do not have permission to edit this folder'}), 403 + + data = request.get_json() + + if 'name' in data: + # Check if new name conflicts with another folder + if folder.group_id: + existing_folder = Folder.query.filter_by(name=data['name'], group_id=folder.group_id).filter(Folder.id != folder_id).first() + else: + existing_folder = Folder.query.filter_by(name=data['name'], user_id=current_user.id).filter(Folder.id != folder_id).first() + + if existing_folder: + return jsonify({'error': 'Another folder with this name already exists'}), 400 + folder.name = data['name'] + + # Handle group_id changes (converting between personal and group folders) + if 'group_id' in data: + new_group_id = data['group_id'] if data['group_id'] else None + + # If changing to a group folder, verify user is admin of that group + if new_group_id: + membership = GroupMembership.query.filter_by( + group_id=new_group_id, + user_id=current_user.id + ).first() + + if not membership or membership.role != 'admin': + return jsonify({'error': 'Only group admins can assign folders to groups'}), 403 + + folder.group_id = new_group_id + + if 'color' in data: + folder.color = data['color'] + if 'custom_prompt' in data: + folder.custom_prompt = data['custom_prompt'] + if 'default_language' in data: + folder.default_language = data['default_language'] + if 'default_min_speakers' in data: + folder.default_min_speakers = data['default_min_speakers'] + if 'default_max_speakers' in data: + folder.default_max_speakers = data['default_max_speakers'] + if 'default_hotwords' in data: + folder.default_hotwords = data['default_hotwords'] or None + if 'default_initial_prompt' in data: + folder.default_initial_prompt = data['default_initial_prompt'] or None + + # Handle retention_days: -1 means protected from deletion + if 'retention_days' in data: + retention_days = data['retention_days'] + + if retention_days == -1: + # -1 indicates infinite retention (protected from auto-deletion) + if ENABLE_AUTO_DELETION: + folder.protect_from_deletion = True + folder.retention_days = -1 + else: + # Regular retention period or null (use global) + folder.protect_from_deletion = False + folder.retention_days = retention_days if retention_days else None + if 'auto_share_on_apply' in data: + # Only applicable to group folders + if folder.group_id: + folder.auto_share_on_apply = bool(data['auto_share_on_apply']) + if 'share_with_group_lead' in data: + # Only applicable to group folders + if folder.group_id: + folder.share_with_group_lead = bool(data['share_with_group_lead']) + if 'naming_template_id' in data: + naming_template_id = data['naming_template_id'] + if naming_template_id: + template = NamingTemplate.query.filter_by(id=naming_template_id, user_id=current_user.id).first() + if not template: + return jsonify({'error': 'Naming template not found'}), 404 + folder.naming_template_id = naming_template_id if naming_template_id else None + if 'export_template_id' in data: + export_template_id = data['export_template_id'] + if export_template_id: + template = ExportTemplate.query.filter_by(id=export_template_id, user_id=current_user.id).first() + if not template: + return jsonify({'error': 'Export template not found'}), 404 + folder.export_template_id = export_template_id if export_template_id else None + + folder.updated_at = datetime.utcnow() + + try: + db.session.commit() + except IntegrityError as e: + db.session.rollback() + current_app.logger.error(f"Folder update failed due to integrity constraint: {str(e)}") + return jsonify({'error': 'A folder with this name already exists'}), 400 + + return jsonify(folder.to_dict()) + + +@folders_bp.route('/api/folders/', methods=['DELETE']) +@login_required +def delete_folder(folder_id): + """Delete a folder. Recordings in this folder will have folder_id set to NULL.""" + # Check if folders feature is enabled + folders_enabled = SystemSetting.get_setting('enable_folders', False) + if not folders_enabled: + return jsonify({'error': 'Folders feature is not enabled'}), 403 + + folder = db.session.get(Folder, folder_id) + if not folder: + return jsonify({'error': 'Folder not found'}), 404 + + # Check permissions + if folder.group_id: + # Group folder - user must be a team admin + membership = GroupMembership.query.filter_by( + group_id=folder.group_id, + user_id=current_user.id + ).first() + + if not membership or membership.role != 'admin': + return jsonify({'error': 'Only group admins can delete group folders'}), 403 + else: + # Personal folder - must belong to the user + if folder.user_id != current_user.id: + return jsonify({'error': 'You do not have permission to delete this folder'}), 403 + + # Recordings in this folder will have folder_id set to NULL via ondelete='SET NULL' + db.session.delete(folder) + db.session.commit() + return jsonify({'success': True}) + + +@folders_bp.route('/api/groups//folders', methods=['POST']) +@login_required +def create_group_folder(group_id): + """Create a group-scoped folder (group admins only).""" + # Check if folders feature is enabled + folders_enabled = SystemSetting.get_setting('enable_folders', False) + if not folders_enabled: + return jsonify({'error': 'Folders feature is not enabled'}), 403 + + if not ENABLE_INTERNAL_SHARING: + return jsonify({'error': 'Group folders require internal sharing to be enabled. Please set ENABLE_INTERNAL_SHARING=true in your configuration.'}), 403 + + # Verify team exists + team = db.session.get(Group, group_id) + if not team: + return jsonify({'error': 'Group not found'}), 404 + + # Verify user is a team admin + membership = GroupMembership.query.filter_by( + group_id=group_id, + user_id=current_user.id + ).first() + + if not membership or membership.role != 'admin': + return jsonify({'error': 'Only group admins can create group folders'}), 403 + + data = request.get_json() + name = data.get('name', '').strip() + + if not name: + return jsonify({'error': 'Folder name is required'}), 400 + + # Check if a group folder with this name already exists for this team + existing_folder = Folder.query.filter_by( + name=name, + group_id=group_id + ).first() + + if existing_folder: + return jsonify({'error': 'A group folder with this name already exists'}), 400 + + # Validate naming_template_id if provided + naming_template_id = data.get('naming_template_id') + if naming_template_id: + template = NamingTemplate.query.filter_by(id=naming_template_id, user_id=current_user.id).first() + if not template: + return jsonify({'error': 'Naming template not found'}), 404 + + # Validate export_template_id if provided + export_template_id = data.get('export_template_id') + if export_template_id: + template = ExportTemplate.query.filter_by(id=export_template_id, user_id=current_user.id).first() + if not template: + return jsonify({'error': 'Export template not found'}), 404 + + # Create the group folder with all supported parameters + folder = Folder( + name=name, + user_id=current_user.id, # Creator + group_id=group_id, + color=data.get('color', '#10B981'), + custom_prompt=data.get('custom_prompt'), + default_language=data.get('default_language'), + default_min_speakers=data.get('default_min_speakers'), + default_max_speakers=data.get('default_max_speakers'), + default_hotwords=data.get('default_hotwords'), + default_initial_prompt=data.get('default_initial_prompt'), + protect_from_deletion=data.get('protect_from_deletion', False), + retention_days=data.get('retention_days'), + auto_share_on_apply=data.get('auto_share_on_apply', True), # Default to True for group folders + share_with_group_lead=data.get('share_with_group_lead', True), # Default to True for group folders + naming_template_id=naming_template_id, + export_template_id=export_template_id + ) + + db.session.add(folder) + + try: + db.session.commit() + except IntegrityError as e: + db.session.rollback() + current_app.logger.error(f"Folder creation failed due to integrity constraint: {str(e)}") + return jsonify({'error': 'A folder with this name already exists'}), 400 + + return jsonify(folder.to_dict()), 201 + + +@folders_bp.route('/api/groups//folders', methods=['GET']) +@login_required +def get_group_folders(group_id): + """Get all folders for a team (team members only).""" + # Check if folders feature is enabled + folders_enabled = SystemSetting.get_setting('enable_folders', False) + if not folders_enabled: + return jsonify({'error': 'Folders feature is not enabled'}), 403 + + # Verify team exists + team = db.session.get(Group, group_id) + if not team: + return jsonify({'error': 'Group not found'}), 404 + + # Verify user is a team member + membership = GroupMembership.query.filter_by( + group_id=group_id, + user_id=current_user.id + ).first() + + if not membership: + return jsonify({'error': 'You must be a team member to view group folders'}), 403 + + # Get all group folders + folders = Folder.query.filter_by(group_id=group_id).all() + + return jsonify({'folders': [folder.to_dict() for folder in folders]}) + + +@folders_bp.route('/api/recordings//folder', methods=['PUT']) +@login_required +def assign_recording_folder(recording_id): + """Assign a recording to a folder (or move to a different folder).""" + # Check if folders feature is enabled + folders_enabled = SystemSetting.get_setting('enable_folders', False) + if not folders_enabled: + return jsonify({'error': 'Folders feature is not enabled'}), 403 + + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + # Check access to recording (require edit permission) + if has_recording_access: + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'You do not have permission to modify this recording'}), 403 + else: + # Fallback: only owner can assign folder + if recording.user_id != current_user.id: + return jsonify({'error': 'You do not have permission to modify this recording'}), 403 + + data = request.get_json() + folder_id = data.get('folder_id') + + if folder_id: + # Verify folder exists and user has access + folder = db.session.get(Folder, folder_id) + if not folder: + return jsonify({'error': 'Folder not found'}), 404 + + # Check if user can use this folder + if folder.group_id: + # Group folder - user must be a member + membership = GroupMembership.query.filter_by( + group_id=folder.group_id, + user_id=current_user.id + ).first() + if not membership: + return jsonify({'error': 'You do not have access to this folder'}), 403 + else: + # Personal folder - must be owner + if folder.user_id != current_user.id: + return jsonify({'error': 'You do not have access to this folder'}), 403 + + # Handle auto-sharing for group folders + old_folder_id = recording.folder_id + recording.folder_id = folder_id + + # Apply auto-shares if moving to a group folder + if folder.group_id and (folder.auto_share_on_apply or folder.share_with_group_lead): + _apply_folder_auto_shares(recording, folder) + + audit_access('move_folder', 'recording', recording_id, details={'folder_id': folder_id, 'old_folder_id': old_folder_id}) + db.session.commit() # commit folder + audit en une transaction atomique + current_app.logger.info(f"Recording {recording_id} moved to folder {folder_id} by user {current_user.id}") + else: + # Remove from folder + recording.folder_id = None + db.session.commit() + current_app.logger.info(f"Recording {recording_id} removed from folder by user {current_user.id}") + + return jsonify(recording.to_dict(include_html=False, viewer_user=current_user)) + + +@folders_bp.route('/api/recordings//folder', methods=['DELETE']) +@login_required +def remove_recording_folder(recording_id): + """Remove a recording from its folder.""" + # Check if folders feature is enabled + folders_enabled = SystemSetting.get_setting('enable_folders', False) + if not folders_enabled: + return jsonify({'error': 'Folders feature is not enabled'}), 403 + + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + # Check access to recording (require edit permission) + if has_recording_access: + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'You do not have permission to modify this recording'}), 403 + else: + # Fallback: only owner can remove folder + if recording.user_id != current_user.id: + return jsonify({'error': 'You do not have permission to modify this recording'}), 403 + + recording.folder_id = None + db.session.commit() + current_app.logger.info(f"Recording {recording_id} removed from folder by user {current_user.id}") + + return jsonify({'success': True}) + + +@folders_bp.route('/api/recordings/bulk/folder', methods=['POST']) +@login_required +def bulk_assign_folder(): + """Assign multiple recordings to a folder.""" + # Check if folders feature is enabled + folders_enabled = SystemSetting.get_setting('enable_folders', False) + if not folders_enabled: + return jsonify({'error': 'Folders feature is not enabled'}), 403 + + data = request.get_json() + recording_ids = data.get('recording_ids', []) + folder_id = data.get('folder_id') # Can be None to remove from folder + + if not recording_ids: + return jsonify({'error': 'No recordings specified'}), 400 + + # Verify folder if specified + folder = None + if folder_id: + folder = db.session.get(Folder, folder_id) + if not folder: + return jsonify({'error': 'Folder not found'}), 404 + + # Check if user can use this folder + if folder.group_id: + membership = GroupMembership.query.filter_by( + group_id=folder.group_id, + user_id=current_user.id + ).first() + if not membership: + return jsonify({'error': 'You do not have access to this folder'}), 403 + else: + if folder.user_id != current_user.id: + return jsonify({'error': 'You do not have access to this folder'}), 403 + + updated_count = 0 + for rec_id in recording_ids: + recording = db.session.get(Recording, rec_id) + if not recording: + continue + + # Check access (require edit permission) + if has_recording_access: + if not has_recording_access(recording, current_user, require_edit=True): + continue + else: + if recording.user_id != current_user.id: + continue + + recording.folder_id = folder_id + + # Apply auto-shares if moving to a group folder + if folder and folder.group_id and (folder.auto_share_on_apply or folder.share_with_group_lead): + _apply_folder_auto_shares(recording, folder) + + updated_count += 1 + + db.session.commit() + action = f"moved to folder {folder_id}" if folder_id else "removed from folder" + current_app.logger.info(f"Bulk folder update: {updated_count} recordings {action} by user {current_user.id}") + + return jsonify({'success': True, 'updated_count': updated_count}) + + +def _apply_folder_auto_shares(recording, folder): + """ + Apply auto-shares for a group folder when a recording is assigned to it. + + Args: + recording: Recording being assigned to the folder + folder: Folder with auto-share settings + """ + if not ENABLE_INTERNAL_SHARING: + return + + if not folder.group_id: + return + + # Determine who to share with + if folder.auto_share_on_apply: + group_members = GroupMembership.query.filter_by(group_id=folder.group_id).all() + elif folder.share_with_group_lead: + group_members = GroupMembership.query.filter_by(group_id=folder.group_id, role='admin').all() + else: + return + + shares_created = 0 + + for membership in group_members: + # Skip the recording owner + if membership.user_id == recording.user_id: + continue + + # Check if already shared + existing_share = InternalShare.query.filter_by( + recording_id=recording.id, + shared_with_user_id=membership.user_id + ).first() + + if not existing_share: + # Create internal share with correct permissions + share = InternalShare( + recording_id=recording.id, + owner_id=recording.user_id, + shared_with_user_id=membership.user_id, + can_edit=(membership.role == 'admin'), + can_reshare=False, + source_type='group_folder', + source_tag_id=None # We don't use this field for folders + ) + db.session.add(share) + + # Create SharedRecordingState with default values for the recipient + state = SharedRecordingState( + recording_id=recording.id, + user_id=membership.user_id, + is_inbox=True, + is_highlighted=False + ) + db.session.add(state) + + shares_created += 1 + current_app.logger.info(f"Auto-shared recording {recording.id} with user {membership.user_id} via group folder '{folder.name}'") + + if shares_created > 0: + current_app.logger.info(f"Created {shares_created} auto-shares for recording {recording.id} via folder assignment") diff --git a/src/api/groups.py b/src/api/groups.py new file mode 100644 index 0000000..2eed567 --- /dev/null +++ b/src/api/groups.py @@ -0,0 +1,394 @@ +""" +Group management and collaboration. + +This blueprint was auto-generated from app.py route extraction. +""" + +import os +import json +import re +from datetime import datetime, timedelta +from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify, send_file, Response, current_app +from flask_login import login_required, current_user +from werkzeug.utils import secure_filename + +from src.database import db +from src.models import * +from src.utils import * + +# Create blueprint +groups_bp = Blueprint('groups', __name__) + +# Configuration from environment +ENABLE_INQUIRE_MODE = os.environ.get('ENABLE_INQUIRE_MODE', 'false').lower() == 'true' +ENABLE_AUTO_DELETION = os.environ.get('ENABLE_AUTO_DELETION', 'false').lower() == 'true' +USERS_CAN_DELETE = os.environ.get('USERS_CAN_DELETE', 'true').lower() == 'true' +ENABLE_INTERNAL_SHARING = os.environ.get('ENABLE_INTERNAL_SHARING', 'false').lower() == 'true' +USE_ASR_ENDPOINT = os.environ.get('USE_ASR_ENDPOINT', 'false').lower() == 'true' + +# Global helpers (will be injected from app) +has_recording_access = None +bcrypt = None +csrf = None +limiter = None + +def init_groups_helpers(**kwargs): + """Initialize helper functions and extensions from app.""" + global has_recording_access, bcrypt, csrf, limiter + has_recording_access = kwargs.get('has_recording_access') + bcrypt = kwargs.get('bcrypt') + csrf = kwargs.get('csrf') + limiter = kwargs.get('limiter') + + +# --- Routes --- + +@groups_bp.route('/api/groups//sync-shares', methods=['POST']) +@login_required +def sync_team_tag_shares(group_id): + """Retroactively share recordings with group members based on group tags with auto-sharing enabled.""" + # Verify group exists + group = db.session.get(Group, group_id) + if not group: + return jsonify({'error': 'Group not found'}), 404 + + # Verify user is a group admin + membership = GroupMembership.query.filter_by( + group_id=group_id, + user_id=current_user.id, + role='admin' + ).first() + + if not membership: + return jsonify({'error': 'Only group admins can sync shares'}), 403 + + if not ENABLE_INTERNAL_SHARING: + return jsonify({'error': 'Internal sharing is not enabled'}), 403 + + # Get all group tags with auto-sharing enabled + group_tags = Tag.query.filter( + Tag.group_id == group_id, + db.or_( + Tag.auto_share_on_apply == True, + Tag.share_with_group_lead == True + ) + ).all() + + shares_created = 0 + recordings_processed = 0 + + for tag in group_tags: + # Get all completed recordings with this tag + recordings = db.session.query(Recording).join(RecordingTag).filter( + RecordingTag.tag_id == tag.id, + Recording.status == 'COMPLETED' + ).all() + + for recording in recordings: + recordings_processed += 1 + + # Determine who to share with + if tag.auto_share_on_apply: + group_members = GroupMembership.query.filter_by(group_id=group_id).all() + elif tag.share_with_group_lead: + group_members = GroupMembership.query.filter_by(group_id=group_id, role='admin').all() + else: + continue + + for membership_to_share in group_members: + # Skip the recording owner + if membership_to_share.user_id == recording.user_id: + continue + + # Check if already shared + existing_share = InternalShare.query.filter_by( + recording_id=recording.id, + shared_with_user_id=membership_to_share.user_id + ).first() + + if not existing_share: + # Create internal share with correct permissions + # Group admins get edit permission, regular members get read-only + share = InternalShare( + recording_id=recording.id, + owner_id=recording.user_id, + shared_with_user_id=membership_to_share.user_id, + can_edit=(membership_to_share.role == 'admin'), + can_reshare=False, + source_type='group_tag', + source_tag_id=tag.id + ) + db.session.add(share) + + # Create SharedRecordingState with default values for the recipient + state = SharedRecordingState( + recording_id=recording.id, + user_id=membership_to_share.user_id, + is_inbox=True, # New shares appear in inbox by default + is_highlighted=False # Not favorited by default + ) + db.session.add(state) + + shares_created += 1 + current_app.logger.info(f"Synced share: Recording {recording.id} with user {membership_to_share.user_id} (role={membership_to_share.role}) via group tag '{tag.name}'") + + db.session.commit() + + return jsonify({ + 'success': True, + 'shares_created': shares_created, + 'recordings_processed': recordings_processed, + 'message': f'Created {shares_created} new shares across {recordings_processed} recordings' + }) + + + +@groups_bp.route('/api/admin/groups', methods=['GET']) +@login_required +def get_teams(): + """Get all groups (admin) or groups user is admin of (group admin).""" + # Check if user is admin OR group admin + is_group_admin = GroupMembership.query.filter_by( + user_id=current_user.id, + role='admin' + ).first() is not None + + if not current_user.is_admin and not is_group_admin: + return jsonify({'error': 'Admin access required'}), 403 + + # If full admin, return all groups; if group admin, return only their groups + if current_user.is_admin: + groups = Group.query.all() + else: + # Get groups where user is an admin + group_memberships = GroupMembership.query.filter_by( + user_id=current_user.id, + role='admin' + ).all() + groups = [m.group for m in group_memberships] + + return jsonify({'groups': [group.to_dict() for group in groups]}) + + + +@groups_bp.route('/api/admin/groups', methods=['POST']) +@login_required +def create_team(): + """Create a new group (admin only).""" + if not current_user.is_admin: + return jsonify({'error': 'Admin access required'}), 403 + + if not ENABLE_INTERNAL_SHARING: + return jsonify({'error': 'Groups require internal sharing to be enabled. Please set ENABLE_INTERNAL_SHARING=true in your configuration.'}), 403 + + data = request.get_json() + name = data.get('name', '').strip() + description = data.get('description', '').strip() + + if not name: + return jsonify({'error': 'Group name is required'}), 400 + + # Check if group name already exists + existing = Group.query.filter_by(name=name).first() + if existing: + return jsonify({'error': 'A group with this name already exists'}), 400 + + group = Group(name=name, description=description) + db.session.add(group) + db.session.commit() + + current_app.logger.info(f"Admin {current_user.username} created group: {name}") + return jsonify(group.to_dict()), 201 + + + +@groups_bp.route('/api/admin/groups/', methods=['GET']) +@login_required +def get_team(group_id): + """Get group details (admin or group admin).""" + group = db.session.get(Group, group_id) + if not group: + return jsonify({'error': 'Group not found'}), 404 + + # Check if user is admin OR admin of this specific group + is_group_admin = GroupMembership.query.filter_by( + group_id=group_id, + user_id=current_user.id, + role='admin' + ).first() is not None + + if not current_user.is_admin and not is_group_admin: + return jsonify({'error': 'Admin access required'}), 403 + + group_dict = group.to_dict() + group_dict['members'] = [m.to_dict() for m in group.memberships] + return jsonify(group_dict) + + + +@groups_bp.route('/api/admin/groups/', methods=['PUT']) +@login_required +def update_team(group_id): + """Update group (admin or group admin).""" + group = db.session.get(Group, group_id) + if not group: + return jsonify({'error': 'Group not found'}), 404 + + # Check if user is admin OR admin of this specific group + is_group_admin = GroupMembership.query.filter_by( + group_id=group_id, + user_id=current_user.id, + role='admin' + ).first() is not None + + if not current_user.is_admin and not is_group_admin: + return jsonify({'error': 'Admin access required'}), 403 + + data = request.get_json() + name = data.get('name', '').strip() + description = data.get('description', '').strip() + + if name: + # Check if new name conflicts with another group + existing = Group.query.filter(Group.name == name, Group.id != group_id).first() + if existing: + return jsonify({'error': 'A group with this name already exists'}), 400 + group.name = name + + group.description = description + db.session.commit() + + current_app.logger.info(f"Admin {current_user.username} updated group: {group.name}") + return jsonify(group.to_dict()) + + + +@groups_bp.route('/api/admin/groups/', methods=['DELETE']) +@login_required +def delete_team(group_id): + """Delete group (admin only).""" + if not current_user.is_admin: + return jsonify({'error': 'Admin access required'}), 403 + + group = db.session.get(Group, group_id) + if not group: + return jsonify({'error': 'Group not found'}), 404 + + group_name = group.name + db.session.delete(group) + db.session.commit() + + current_app.logger.info(f"Admin {current_user.username} deleted group: {group_name}") + return jsonify({'success': True}) + + + +@groups_bp.route('/api/admin/groups//members', methods=['POST']) +@login_required +def add_team_member(group_id): + """Add a member to a group (admin or group admin).""" + if not ENABLE_INTERNAL_SHARING: + return jsonify({'error': 'Groups require internal sharing to be enabled. Please set ENABLE_INTERNAL_SHARING=true in your configuration.'}), 403 + + group = db.session.get(Group, group_id) + if not group: + return jsonify({'error': 'Group not found'}), 404 + + # Check if user is admin OR admin of this specific group + is_group_admin = GroupMembership.query.filter_by( + group_id=group_id, + user_id=current_user.id, + role='admin' + ).first() is not None + + if not current_user.is_admin and not is_group_admin: + return jsonify({'error': 'Admin access required'}), 403 + + data = request.get_json() + user_id = data.get('user_id') + role = data.get('role', 'member') + + if not user_id: + return jsonify({'error': 'User ID is required'}), 400 + + if role not in ['admin', 'member']: + return jsonify({'error': 'Role must be "admin" or "member"'}), 400 + + user = db.session.get(User, user_id) + if not user: + return jsonify({'error': 'User not found'}), 404 + + # Check if already a member + existing = GroupMembership.query.filter_by(group_id=group_id, user_id=user_id).first() + if existing: + return jsonify({'error': 'User is already a member of this group'}), 400 + + membership = GroupMembership(group_id=group_id, user_id=user_id, role=role) + db.session.add(membership) + db.session.commit() + + current_app.logger.info(f"Admin {current_user.username} added {user.username} to group {group.name} as {role}") + return jsonify(membership.to_dict()), 201 + + + +@groups_bp.route('/api/admin/groups//members/', methods=['PUT']) +@login_required +def update_team_member(group_id, user_id): + """Update group member role (admin or group admin).""" + membership = GroupMembership.query.filter_by(group_id=group_id, user_id=user_id).first() + if not membership: + return jsonify({'error': 'Membership not found'}), 404 + + # Check if user is admin OR admin of this specific group + is_group_admin = GroupMembership.query.filter_by( + group_id=group_id, + user_id=current_user.id, + role='admin' + ).first() is not None + + if not current_user.is_admin and not is_group_admin: + return jsonify({'error': 'Admin access required'}), 403 + + data = request.get_json() + role = data.get('role') + + if role not in ['admin', 'member']: + return jsonify({'error': 'Role must be "admin" or "member"'}), 400 + + membership.role = role + db.session.commit() + + current_app.logger.info(f"Admin {current_user.username} updated {membership.user.username} role to {role} in group {membership.group.name}") + return jsonify(membership.to_dict()) + + + +@groups_bp.route('/api/admin/groups//members/', methods=['DELETE']) +@login_required +def remove_team_member(group_id, user_id): + """Remove a member from a group (admin or group admin).""" + membership = GroupMembership.query.filter_by(group_id=group_id, user_id=user_id).first() + if not membership: + return jsonify({'error': 'Membership not found'}), 404 + + # Check if user is admin OR admin of this specific group + is_group_admin = GroupMembership.query.filter_by( + group_id=group_id, + user_id=current_user.id, + role='admin' + ).first() is not None + + if not current_user.is_admin and not is_group_admin: + return jsonify({'error': 'Admin access required'}), 403 + + username = membership.user.username + group_name = membership.group.name + db.session.delete(membership) + db.session.commit() + + current_app.logger.info(f"Admin {current_user.username} removed {username} from group {group_name}") + return jsonify({'success': True}) + + + diff --git a/src/api/inquire.py b/src/api/inquire.py new file mode 100644 index 0000000..6b00087 --- /dev/null +++ b/src/api/inquire.py @@ -0,0 +1,859 @@ +""" +Semantic search and chat functionality. + +This blueprint was auto-generated from app.py route extraction. +""" + +import os +import json +import re +import time +from datetime import datetime, timedelta +from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify, send_file, Response, current_app +from flask_login import login_required, current_user +from werkzeug.utils import secure_filename + +from src.database import db +from src.models import * +from src.utils import * +from src.services.embeddings import get_accessible_recording_ids, semantic_search_chunks, EMBEDDINGS_AVAILABLE +from src.services.llm import call_llm_completion, call_chat_completion, process_streaming_with_thinking, client, chat_client, TokenBudgetExceeded + +# Create blueprint +inquire_bp = Blueprint('inquire', __name__) + +# Configuration from environment +ENABLE_INQUIRE_MODE = os.environ.get('ENABLE_INQUIRE_MODE', 'false').lower() == 'true' +ENABLE_AUTO_DELETION = os.environ.get('ENABLE_AUTO_DELETION', 'false').lower() == 'true' +USERS_CAN_DELETE = os.environ.get('USERS_CAN_DELETE', 'true').lower() == 'true' +ENABLE_INTERNAL_SHARING = os.environ.get('ENABLE_INTERNAL_SHARING', 'false').lower() == 'true' +USE_ASR_ENDPOINT = os.environ.get('USE_ASR_ENDPOINT', 'false').lower() == 'true' + +# Global helpers (will be injected from app) +has_recording_access = None +bcrypt = None +csrf = None +limiter = None + +def init_inquire_helpers(**kwargs): + """Initialize helper functions and extensions from app.""" + global has_recording_access, bcrypt, csrf, limiter + has_recording_access = kwargs.get('has_recording_access') + bcrypt = kwargs.get('bcrypt') + csrf = kwargs.get('csrf') + limiter = kwargs.get('limiter') + + +# --- Routes --- + +@inquire_bp.route('/inquire') +@login_required +def inquire(): + # Check if inquire mode is enabled + if not ENABLE_INQUIRE_MODE: + flash('Inquire mode is not enabled on this server.', 'warning') + return redirect(url_for('recordings.index')) + + # Check if user is a group admin + is_team_admin = GroupMembership.query.filter_by( + user_id=current_user.id, + role='admin' + ).first() is not None + + # Render the inquire page with user context for theming + return render_template('inquire.html', + use_asr_endpoint=USE_ASR_ENDPOINT, + current_user=current_user, + is_team_admin=is_team_admin) + + + +@inquire_bp.route('/api/inquire/sessions', methods=['GET']) +@login_required +def get_inquire_sessions(): + """Get all inquire sessions for the current user.""" + if not ENABLE_INQUIRE_MODE: + return jsonify({'error': 'Inquire mode is not enabled'}), 403 + try: + sessions = InquireSession.query.filter_by(user_id=current_user.id).order_by(InquireSession.last_used.desc()).all() + return jsonify([session.to_dict() for session in sessions]) + except Exception as e: + current_app.logger.error(f"Error getting inquire sessions: {e}") + return jsonify({'error': str(e)}), 500 + + + +@inquire_bp.route('/api/inquire/sessions', methods=['POST']) +@login_required +def create_inquire_session(): + """Create a new inquire session with filters.""" + if not ENABLE_INQUIRE_MODE: + return jsonify({'error': 'Inquire mode is not enabled'}), 403 + try: + data = request.json + if not data: + return jsonify({'error': 'No data provided'}), 400 + + session = InquireSession( + user_id=current_user.id, + session_name=data.get('session_name'), + filter_tags=json.dumps(data.get('filter_tags', [])), + filter_speakers=json.dumps(data.get('filter_speakers', [])), + filter_date_from=datetime.fromisoformat(data['filter_date_from']).date() if data.get('filter_date_from') else None, + filter_date_to=datetime.fromisoformat(data['filter_date_to']).date() if data.get('filter_date_to') else None, + filter_recording_ids=json.dumps(data.get('filter_recording_ids', [])) + ) + + db.session.add(session) + db.session.commit() + + return jsonify(session.to_dict()), 201 + + except Exception as e: + current_app.logger.error(f"Error creating inquire session: {e}") + return jsonify({'error': str(e)}), 500 + + + +@inquire_bp.route('/api/inquire/search', methods=['POST']) +@login_required +def inquire_search(): + """Perform semantic search within filtered transcriptions.""" + if not ENABLE_INQUIRE_MODE: + return jsonify({'error': 'Inquire mode is not enabled'}), 403 + try: + data = request.json + if not data: + return jsonify({'error': 'No data provided'}), 400 + + query = data.get('query') + if not query: + return jsonify({'error': 'No query provided'}), 400 + + # Build filters from request + filters = {} + if data.get('filter_tags'): + filters['tag_ids'] = data['filter_tags'] + if data.get('filter_speakers'): + filters['speaker_names'] = data['filter_speakers'] + if data.get('filter_recording_ids'): + filters['recording_ids'] = data['filter_recording_ids'] + if data.get('filter_date_from'): + filters['date_from'] = datetime.fromisoformat(data['filter_date_from']).date() + if data.get('filter_date_to'): + filters['date_to'] = datetime.fromisoformat(data['filter_date_to']).date() + + # Perform semantic search + top_k = data.get('top_k', 5) + chunk_results = semantic_search_chunks(current_user.id, query, filters, top_k) + + # Format results + results = [] + for chunk, similarity in chunk_results: + result = chunk.to_dict() + result['similarity'] = similarity + result['recording_title'] = chunk.recording.title + result['recording_meeting_date'] = local_datetime_filter(chunk.recording.meeting_date) + results.append(result) + + return jsonify({'results': results}) + + except Exception as e: + current_app.logger.error(f"Error in inquire search: {e}") + return jsonify({'error': str(e)}), 500 + + + +@inquire_bp.route('/api/inquire/chat', methods=['POST']) +@login_required +def inquire_chat(): + """Chat with filtered transcriptions using RAG.""" + if not ENABLE_INQUIRE_MODE: + return jsonify({'error': 'Inquire mode is not enabled'}), 403 + try: + data = request.json + if not data: + return jsonify({'error': 'No data provided'}), 400 + + user_message = data.get('message') + message_history = data.get('message_history', []) + + if not user_message: + return jsonify({'error': 'No message provided'}), 400 + + # Check if OpenRouter client is available + if client is None: + return jsonify({'error': 'Chat service is not available (OpenRouter client not configured)'}), 503 + + # Build filters from request + filters = {} + if data.get('filter_tags'): + filters['tag_ids'] = data['filter_tags'] + if data.get('filter_speakers'): + filters['speaker_names'] = data['filter_speakers'] + if data.get('filter_recording_ids'): + filters['recording_ids'] = data['filter_recording_ids'] + if data.get('filter_date_from'): + filters['date_from'] = datetime.fromisoformat(data['filter_date_from']).date() + if data.get('filter_date_to'): + filters['date_to'] = datetime.fromisoformat(data['filter_date_to']).date() + + # Debug logging + current_app.logger.info(f"Inquire chat - User: {current_user.username}, Query: '{user_message}', Filters: {filters}") + + # Capture user context and app before generator to avoid context issues + user_id = current_user.id + user_name = current_user.name if current_user.name else "the user" + user_title = current_user.job_title if current_user.job_title else "professional" + user_company = current_user.company if current_user.company else "their organization" + user_output_language = current_user.output_language if current_user.output_language else None + app = current_app._get_current_object() # Capture app for use in generator + + # Enhanced query processing with enrichment and debugging + def create_status_response(status, message): + """Helper to create SSE status updates""" + return f"data: {json.dumps({'status': status, 'message': message})}\n\n" + + def generate_enhanced_chat(): + # Explicitly reference outer scope variables + nonlocal user_id, user_name, user_title, user_company, user_output_language, data, filters + + # Push app context for entire generator execution + # This is needed because call_llm_completion uses current_app.logger internally + ctx = app.app_context() + ctx.push() + + try: + # Send initial status + yield create_status_response('processing', 'Analyzing your query...') + + # Step 1: Router - Determine if RAG lookup is needed + router_prompt = f"""Analyse cette requête pour déterminer si elle nécessite une recherche dans les transcriptions ou si c'est une demande de reformatage/clarification. + +Requête : "{user_message}" + +Réponds UNIQUEMENT avec "RAG" si la requête demande du contenu des transcriptions (informations, conversations, faits précis). +Réponds UNIQUEMENT avec "DIRECT" si c'est une demande de mise en forme, reformulation de la réponse précédente, ou sans besoin de recherche. + +Exemples : +- "Qu'est-ce que Marie a dit sur le budget ?" → RAG +- "Peux-tu reformater en titres séparés ?" → DIRECT +- "Qui a mentionné l'échéancier ?" → RAG +- "Rends ça plus structuré" → DIRECT""" + + try: + router_response = call_llm_completion( + messages=[ + {"role": "system", "content": "You are a query router. Respond with only 'RAG' or 'DIRECT'."}, + {"role": "user", "content": router_prompt} + ], + temperature=0.1, + max_tokens=10, + user_id=user_id, + operation_type='query_routing' + ) + + raw_decision = router_response.choices[0].message.content + if not raw_decision or not raw_decision.strip(): + app.logger.warning("Router returned empty response, defaulting to RAG") + raise ValueError("Empty router response") + + route_decision = raw_decision.strip().upper() + app.logger.info(f"Router decision: {route_decision}") + + if route_decision == "DIRECT": + # Direct response without RAG lookup + yield create_status_response('responding', 'Generating direct response...') + + direct_prompt = f"""Tu assistes {user_name}. Réponds directement à sa demande de façon professionnelle et concise. Utilise le formatage Markdown (## titres, **gras**, listes -). + +Demande : "{user_message}" + +Contexte de conversation (si pertinent) : +{json.dumps(message_history[-2:] if message_history else [])}""" + + stream = call_llm_completion( + messages=[ + {"role": "system", "content": direct_prompt}, + {"role": "user", "content": user_message} + ], + temperature=0.7, + max_tokens=int(os.environ.get("CHAT_MAX_TOKENS", "2000")), + stream=True, + user_id=user_id, + operation_type='chat' + ) + + # Use helper function to process streaming with thinking tag support + for response in process_streaming_with_thinking(stream, user_id=user_id, operation_type='chat', model_name=os.environ.get('LLM_MODEL')): + yield response + return + + except Exception as e: + app.logger.warning(f"Router failed, defaulting to RAG: {e}") + + # Step 2: Query enrichment - generate better search terms based on user intent + yield create_status_response('enriching', 'Enriching search query...') + + # Use captured user context for personalized search terms + + if EMBEDDINGS_AVAILABLE: + enrichment_prompt = f"""Tu es un assistant spécialisé en recherche sémantique. Génère 3-5 termes ou phrases de recherche alternatifs pour retrouver du contenu pertinent dans des transcriptions. + +Contexte utilisateur : +- Nom : {user_name} +- Titre : {user_title} +- Organisation : {user_company} + +Question : "{user_message}" +Intervenants disponibles : {', '.join(data.get('filter_speakers', []))}. + +Génère des termes de recherche qui retrouveront le contenu pertinent. Priorités : +1. Concepts clés et sujets — utilise le nom réel de l'utilisateur au lieu de "moi" ou "je" +2. Terminologie spécifique au contexte professionnel +3. Reformulations avec les noms propres +4. Termes connexes susceptibles d'apparaître dans les transcriptions + +Exemples : +- Au lieu de "ce que Marie m'a dit" → "ce que Marie a dit à {user_name}" +- Au lieu de "ma dernière réunion" → "réunion de {user_name}" + +Réponds UNIQUEMENT avec un tableau JSON de chaînes : ["terme1", "terme2", "terme3", ...]""" + else: + enrichment_prompt = f"""Tu es un assistant spécialisé en extraction de mots-clés pour la recherche textuelle (SQL LIKE). Extrais 3-5 termes essentiels de la question. + +Contexte utilisateur : +- Nom : {user_name} + +Question : "{user_message}" + +Règles : +- Retourne UNIQUEMENT les termes qui apparaîtraient réellement dans une transcription +- Chaque terme : 1-3 mots maximum +- Remplace les pronoms "moi", "mon", "je" par le nom de l'utilisateur "{user_name}" +- Priorité aux noms propres, termes spécifiques, phrases distinctives +- N'inclus PAS de mots génériques comme "réunion", "discussion", "plan" sauf s'ils sont le sujet + +Exemples : +- "qu'est-ce qui se passe avec le Régime de retraite" → ["Régime de retraite", "retraite"] +- "quand Marie a-t-elle mentionné l'échéance" → ["Marie", "échéance", "délai"] + +Réponds UNIQUEMENT avec un tableau JSON : ["terme1", "terme2", ...]""" + + try: + enrichment_response = call_llm_completion( + messages=[ + {"role": "system", "content": "You are a query enhancement assistant. Respond only with valid JSON arrays of search terms."}, + {"role": "user", "content": enrichment_prompt} + ], + temperature=0.3, + max_tokens=200, + user_id=user_id, + operation_type='query_enrichment' + ) + + raw_content = enrichment_response.choices[0].message.content + if not raw_content or not raw_content.strip(): + app.logger.warning(f"Query enrichment returned empty response") + raise ValueError("Empty response from LLM") + + # Try to extract JSON array if wrapped in other text + content = raw_content.strip() + if content.startswith('['): + enriched_terms = json.loads(content) + else: + # Try to find JSON array in the response + match = re.search(r'\[.*?\]', content, re.DOTALL) + if match: + enriched_terms = json.loads(match.group()) + else: + app.logger.warning(f"Query enrichment response not JSON: {content[:200]}") + raise ValueError("No JSON array found in response") + + app.logger.info(f"Enriched search terms: {enriched_terms}") + + # Combine original query with enriched terms for search + search_queries = [user_message] + enriched_terms[:3] # Use original + top 3 enriched terms + + except Exception as e: + app.logger.warning(f"Query enrichment failed, using original query: {e}") + search_queries = [user_message] + + # Step 2: Semantic search with multiple queries + yield create_status_response('searching', 'Searching transcriptions...') + + all_chunks = [] + seen_chunk_ids = set() + + for query in search_queries: + with app.app_context(): + chunk_results = semantic_search_chunks(user_id, query, filters, 8) + app.logger.info(f"Search query '{query}' returned {len(chunk_results)} chunks") + + for chunk, similarity in chunk_results: + if chunk and chunk.id not in seen_chunk_ids: + all_chunks.append((chunk, similarity)) + seen_chunk_ids.add(chunk.id) + + # Sort by similarity and take top results + all_chunks.sort(key=lambda x: x[1], reverse=True) + chunk_results = all_chunks[:data.get('context_chunks', 8)] + + app.logger.info(f"Final chunk results: {len(chunk_results)} chunks with similarities: {[f'{s:.3f}' for _, s in chunk_results]}") + + # Step 2.5: Auto-detect mentioned speakers and apply filters if needed + with app.app_context(): + # Get available speakers + recordings_with_participants = Recording.query.filter_by(user_id=user_id).filter( + Recording.participants.isnot(None), + Recording.participants != '' + ).all() + + available_speakers = set() + for recording in recordings_with_participants: + if recording.participants: + participants = [p.strip() for p in recording.participants.split(',') if p.strip()] + available_speakers.update(participants) + + # Check if any speakers are mentioned in the user query but missing from results + mentioned_speakers = [] + for speaker in available_speakers: + if speaker.lower() in user_message.lower(): + # Check if this speaker appears in current chunk results + speaker_in_results = False + for chunk, _ in chunk_results: + if chunk and ( + (chunk.speaker_name and speaker.lower() in chunk.speaker_name.lower()) or + (chunk.recording and chunk.recording.participants and speaker.lower() in chunk.recording.participants.lower()) + ): + speaker_in_results = True + break + + if not speaker_in_results: + mentioned_speakers.append(speaker) + + # If we found mentioned speakers not in results, automatically apply speaker filter + if mentioned_speakers and not data.get('filter_speakers'): # Only if no speaker filter already applied + app.logger.info(f"Auto-detected mentioned speakers not in results: {mentioned_speakers}") + yield create_status_response('filtering', f'Detected mention of {", ".join(mentioned_speakers)}, applying speaker filter...') + + # Apply automatic speaker filter + auto_filters = filters.copy() + auto_filters['speaker_names'] = mentioned_speakers + + # Re-run semantic search with speaker filter + auto_filtered_chunks = [] + auto_filtered_seen_ids = set() + + for query in search_queries: + with app.app_context(): + auto_filtered_results = semantic_search_chunks(user_id, query, auto_filters, data.get('context_chunks', 8)) + app.logger.info(f"Auto-filtered search for '{query}' with speakers {mentioned_speakers} returned {len(auto_filtered_results)} chunks") + + for chunk, similarity in auto_filtered_results: + if chunk and chunk.id not in auto_filtered_seen_ids: + auto_filtered_chunks.append((chunk, similarity)) + auto_filtered_seen_ids.add(chunk.id) + + # If auto-filter found better results, use them + if len(auto_filtered_chunks) > 0: + auto_filtered_chunks.sort(key=lambda x: x[1], reverse=True) + chunk_results = auto_filtered_chunks[:data.get('context_chunks', 8)] + app.logger.info(f"Auto speaker filter found {len(chunk_results)} relevant chunks, using filtered results") + filters = auto_filters # Update filters for context building + + # Step 3: Evaluate results and re-query if needed + if len(chunk_results) < 2: # If we got very few results, try a broader search + yield create_status_response('requerying', 'Expanding search scope...') + + # Try without speaker filter if it was applied + broader_filters = filters.copy() + if 'speaker_names' in broader_filters: + del broader_filters['speaker_names'] + app.logger.info("Retrying search without speaker filter...") + + for query in search_queries: + with app.app_context(): + chunk_results_broader = semantic_search_chunks(user_id, query, broader_filters, 6) + for chunk, similarity in chunk_results_broader: + if chunk and chunk.id not in seen_chunk_ids: + all_chunks.append((chunk, similarity)) + seen_chunk_ids.add(chunk.id) + + # Re-sort and limit + all_chunks.sort(key=lambda x: x[1], reverse=True) + chunk_results = all_chunks[:data.get('context_chunks', 8)] + app.logger.info(f"Broader search returned {len(chunk_results)} total chunks") + + # Build context from retrieved chunks + yield create_status_response('contextualizing', 'Building context...') + + # Group chunks by recording and organize properly + recording_chunks = {} + recording_ids_in_context = set() + + for chunk, similarity in chunk_results: + if not chunk or not chunk.recording: + continue + recording_id = chunk.recording.id + recording_ids_in_context.add(recording_id) + + if recording_id not in recording_chunks: + recording_chunks[recording_id] = { + 'recording': chunk.recording, + 'chunks': [] + } + + recording_chunks[recording_id]['chunks'].append({ + 'chunk': chunk, + 'similarity': similarity + }) + + # Build organized context pieces + context_pieces = [] + + for recording_id, data in recording_chunks.items(): + recording = data['recording'] + chunks = data['chunks'] + + # Sort chunks by their index to maintain chronological order + chunks.sort(key=lambda x: x['chunk'].chunk_index) + + # Build recording header with complete metadata + header = f"=== {recording.title} [Recording ID: {recording_id}] ===" + if recording.meeting_date: + header += f" ({recording.meeting_date})" + + # Add participants information + if recording.participants: + participants_list = [p.strip() for p in recording.participants.split(',') if p.strip()] + header += f"\\nParticipants: {', '.join(participants_list)}" + + context_piece = header + "\\n\\n" + + # Process chunks and detect non-continuity + prev_chunk_index = None + for chunk_data in chunks: + chunk = chunk_data['chunk'] + similarity = chunk_data['similarity'] + + # Check for non-continuity + if prev_chunk_index is not None and chunk.chunk_index != prev_chunk_index + 1: + context_piece += "\\n[... gap in transcript - non-consecutive chunks ...]\\n\\n" + + # Add speaker information if available + speaker_info = "" + if chunk.speaker_name: + speaker_info = f"{chunk.speaker_name}: " + elif chunk.start_time is not None: + speaker_info = f"[{chunk.start_time:.1f}s]: " + + # Add timing info if available + timing_info = "" + if chunk.start_time is not None and chunk.end_time is not None: + timing_info = f" [{chunk.start_time:.1f}s-{chunk.end_time:.1f}s]" + + context_piece += f"{speaker_info}{chunk.content}{timing_info} (similarity: {similarity:.3f})\\n\\n" + prev_chunk_index = chunk.chunk_index + + context_pieces.append(context_piece) + + app.logger.info(f"Built context from {len(chunk_results)} chunks across {len(recording_chunks)} recordings") + + # Generate response + yield create_status_response('responding', 'Generating response...') + + # Prepare system prompt + language_instruction = f"Réponds en {user_output_language}." if user_output_language else "Réponds toujours en français." + + # Build filter description for context + filter_description = [] + with app.app_context(): + if data.get('filter_tags'): + tag_names = [tag.name for tag in Tag.query.filter(Tag.id.in_(data['filter_tags'])).all()] + filter_description.append(f"tags: {', '.join(tag_names)}") + if data.get('filter_speakers'): + filter_description.append(f"speakers: {', '.join(data['filter_speakers'])}") + if data.get('filter_date_from') or data.get('filter_date_to'): + date_range = [] + if data.get('filter_date_from'): + date_range.append(f"from {data['filter_date_from']}") + if data.get('filter_date_to'): + date_range.append(f"to {data['filter_date_to']}") + filter_description.append(f"dates: {' '.join(date_range)}") + + filter_text = f" (filtered by {'; '.join(filter_description)})" if filter_description else "" + + context_text = "\n\n".join(context_pieces) if context_pieces else "No relevant context found." + + # Get transcript length limit setting and available speakers + with app.app_context(): + transcript_limit = SystemSetting.get_setting('transcript_length_limit', 30000) + + # Get all available speakers for this user + recordings_with_participants = Recording.query.filter_by(user_id=user_id).filter( + Recording.participants.isnot(None), + Recording.participants != '' + ).all() + + available_speakers = set() + for recording in recordings_with_participants: + if recording.participants: + participants = [p.strip() for p in recording.participants.split(',') if p.strip()] + available_speakers.update(participants) + + available_speakers = sorted(list(available_speakers)) + + user_context = f", {user_title} chez {user_company}" if user_title and user_company else "" + system_prompt = f"""Tu es un assistant expert en analyse de transcriptions audio et de réunions, qui assiste {user_name}{user_context}. {language_instruction} + +Tu analyses des transcriptions de plusieurs enregistrements{filter_text}. Le contexte suivant a été récupéré par recherche sémantique : + +<> +{context_text} +<> + +Recherche : {len(chunk_results)} extrait(s) de {len(recording_ids_in_context)} enregistrement(s). + +**Intervenants disponibles** : {', '.join(available_speakers) if available_speakers else 'Non précisé'} + +**IDs des enregistrements** : {list(recording_ids_in_context)} + +CONSIGNES DE FORMATAGE : +- Utilise le Markdown (## titres, **gras**, listes -) +- Commence par une synthèse concise si pertinent +- Organise par source avec le format : `## [Titre de l'enregistrement] - [Date]` +- Indique les intervenants en **gras** pour les citations directes +- Présente les enregistrements du plus récent au plus ancien + +**Exemple de structure :** + +## Réunion de planification — 2024-06-18 +- **Marie** a mentionné que "la mise en œuvre nécessite un soutien important" +- **Jean** a confirmé la prochaine rencontre avec l'équipe technique +- Points abordés : + - Planification budgétaire + - Coordination des échéanciers""" + + # Prepare messages array + messages = [{"role": "system", "content": system_prompt}] + if message_history: + messages.extend(message_history) + messages.append({"role": "user", "content": user_message}) + + # Enable streaming + stream = call_chat_completion( + messages=messages, + temperature=0.7, + max_tokens=int(os.environ.get("CHAT_MAX_TOKENS", "2000")), + stream=True, + user_id=user_id, + operation_type='chat' + ) + + # Buffer content to detect full transcript requests + response_buffer = "" + + # Buffer content to detect full transcript requests + response_buffer = "" + content_buffer = "" + in_thinking = False + thinking_buffer = "" + + for chunk in stream: + content = chunk.choices[0].delta.content + if content: + response_buffer += content + content_buffer += content + + # Check if this is a full transcript request + if response_buffer.strip().startswith("REQUEST_FULL_TRANSCRIPT:"): + lines = response_buffer.split('\n') + request_line = lines[0].strip() + + if ':' in request_line: + try: + recording_id = int(request_line.split(':')[1]) + app.logger.info(f"Agent requested full transcript for recording {recording_id}") + + # Fetch full transcript + yield create_status_response('fetching', f'Retrieving full transcript for recording {recording_id}...') + + with app.app_context(): + recording = db.session.get(Recording, recording_id) + if recording and recording.user_id == user_id and recording.transcription: + # Apply transcript length limit + if transcript_limit == -1: + full_transcript = recording.transcription + else: + full_transcript = recording.transcription[:transcript_limit] + + # Add full transcript to context + full_context = f"{context_text}\n\n<>\n{full_transcript}\n<>" + + # Update system prompt with full transcript + updated_system_prompt = system_prompt.replace( + f"<>\n{context_text}\n<>", + f"<>\n{full_context}\n<>" + ) + + # Create new messages with updated context + updated_messages = [{"role": "system", "content": updated_system_prompt}] + if message_history: + updated_messages.extend(message_history) + updated_messages.append({"role": "user", "content": user_message}) + + # Generate new response with full context + yield create_status_response('responding', 'Analyzing full transcript...') + + new_stream = call_chat_completion( + messages=updated_messages, + temperature=0.7, + max_tokens=int(os.environ.get("CHAT_MAX_TOKENS", "2000")), + stream=True, + user_id=user_id, + operation_type='chat' + ) + + # Use helper function to process streaming with thinking tag support + for response in process_streaming_with_thinking(new_stream, user_id=user_id, operation_type='chat', model_name=os.environ.get('CHAT_MODEL')): + yield response + return + else: + # Recording not found or no permission + error_msg = f"\n\nError: Unable to access full transcript for recording {recording_id}. Recording may not exist or you may not have permission." + yield f"data: {json.dumps({'delta': error_msg})}\n\n" + yield f"data: {json.dumps({'end_of_stream': True})}\n\n" + return + + except (ValueError, IndexError): + app.logger.warning(f"Invalid transcript request format: {request_line}") + # Continue with normal streaming + pass + + # Process the buffer to detect and handle thinking tags + while True: + if not in_thinking: + # Look for opening thinking tag + think_start = re.search(r'', content_buffer, re.IGNORECASE) + if think_start: + # Send any content before the thinking tag + before_thinking = content_buffer[:think_start.start()] + if before_thinking: + yield f"data: {json.dumps({'delta': before_thinking})}\n\n" + + # Start capturing thinking content + in_thinking = True + content_buffer = content_buffer[think_start.end():] + thinking_buffer = "" + else: + # No thinking tag found, send accumulated content + if content_buffer: + yield f"data: {json.dumps({'delta': content_buffer})}\n\n" + content_buffer = "" + break + else: + # We're inside a thinking tag, look for closing tag + think_end = re.search(r'', content_buffer, re.IGNORECASE) + if think_end: + # Capture thinking content up to the closing tag + thinking_buffer += content_buffer[:think_end.start()] + + # Send the thinking content as a special type + if thinking_buffer.strip(): + yield f"data: {json.dumps({'thinking': thinking_buffer.strip()})}\n\n" + + # Continue processing after the closing tag + in_thinking = False + content_buffer = content_buffer[think_end.end():] + thinking_buffer = "" + else: + # Still inside thinking tag, accumulate content + thinking_buffer += content_buffer + content_buffer = "" + break + + # Handle any remaining content + if in_thinking and thinking_buffer: + # Unclosed thinking tag - send as thinking content + yield f"data: {json.dumps({'thinking': thinking_buffer.strip()})}\n\n" + elif content_buffer: + # Regular content + yield f"data: {json.dumps({'delta': content_buffer})}\n\n" + + yield f"data: {json.dumps({'end_of_stream': True})}\n\n" + + except TokenBudgetExceeded as e: + app.logger.warning(f"Token budget exceeded for user {user_id}: {e}") + yield f"data: {json.dumps({'error': str(e), 'budget_exceeded': True})}\n\n" + except Exception as e: + app.logger.error(f"Error in enhanced chat generation: {e}") + yield f"data: {json.dumps({'error': str(e)})}\n\n" + finally: + ctx.pop() + + return Response(generate_enhanced_chat(), mimetype='text/event-stream') + + except Exception as e: + current_app.logger.error(f"Error in inquire chat endpoint: {str(e)}") + return jsonify({'error': str(e)}), 500 + + + +@inquire_bp.route('/api/inquire/available_filters', methods=['GET']) +@login_required +def get_available_filters(): + """Get available filter options for the user (includes shared recordings).""" + if not ENABLE_INQUIRE_MODE: + return jsonify({'error': 'Inquire mode is not enabled'}), 403 + try: + # Get user's personal tags + user_tags = Tag.query.filter_by(user_id=current_user.id, group_id=None).all() + + # Get group tags from user's teams + group_tags = [] + memberships = GroupMembership.query.filter_by(user_id=current_user.id).all() + group_ids = [m.group_id for m in memberships] + if group_ids: + group_tags = Tag.query.filter(Tag.group_id.in_(group_ids)).all() + + # Combine all tags + all_tags = user_tags + group_tags + + # Get all accessible recording IDs (own + shared) + accessible_recording_ids = get_accessible_recording_ids(current_user.id) + + # Get unique speakers from accessible recordings' participants field + recordings_with_participants = Recording.query.filter( + Recording.id.in_(accessible_recording_ids), + Recording.participants.isnot(None), + Recording.participants != '' + ).all() + + speaker_names = set() + for recording in recordings_with_participants: + if recording.participants: + # Split participants by comma and clean up + participants = [p.strip() for p in recording.participants.split(',') if p.strip()] + speaker_names.update(participants) + + speaker_names = sorted(list(speaker_names)) + + # Get accessible recordings for recording-specific filtering + recordings = Recording.query.filter( + Recording.id.in_(accessible_recording_ids), + Recording.status == 'COMPLETED' + ).order_by(Recording.created_at.desc()).all() + + return jsonify({ + 'tags': [tag.to_dict() for tag in all_tags], + 'speakers': speaker_names, + 'recordings': [{'id': r.id, 'title': r.title, 'meeting_date': f"{r.meeting_date.isoformat()}T00:00:00" if r.meeting_date else None} for r in recordings] + }) + + except Exception as e: + current_app.logger.error(f"Error getting available filters: {e}") + return jsonify({'error': str(e)}), 500 + + + diff --git a/src/api/naming_templates.py b/src/api/naming_templates.py new file mode 100644 index 0000000..0724d5b --- /dev/null +++ b/src/api/naming_templates.py @@ -0,0 +1,298 @@ +""" +Naming template management. + +This blueprint handles CRUD operations for naming templates, +which define how recording titles are generated from filenames, +metadata, and AI-generated content. +""" + +import json +from datetime import datetime +from flask import Blueprint, request, jsonify, current_app +from flask_login import login_required, current_user + +from src.database import db +from src.models import NamingTemplate + +# Create blueprint +naming_templates_bp = Blueprint('naming_templates', __name__) + + +# --- Routes --- + +@naming_templates_bp.route('/api/naming-templates', methods=['GET']) +@login_required +def get_naming_templates(): + """Get all naming templates for the current user.""" + templates = NamingTemplate.query.filter_by(user_id=current_user.id).all() + return jsonify([template.to_dict() for template in templates]) + + +@naming_templates_bp.route('/api/naming-templates', methods=['POST']) +@login_required +def create_naming_template(): + """Create a new naming template.""" + data = request.json + if not data or not data.get('name') or not data.get('template'): + return jsonify({'error': 'Name and template are required'}), 400 + + # Validate regex patterns if provided + regex_patterns = data.get('regex_patterns', {}) + if regex_patterns: + if not isinstance(regex_patterns, dict): + return jsonify({'error': 'regex_patterns must be a dictionary'}), 400 + # Validate each regex pattern + import re + for var_name, pattern in regex_patterns.items(): + try: + re.compile(pattern) + except re.error as e: + return jsonify({'error': f'Invalid regex pattern for "{var_name}": {str(e)}'}), 400 + + # If this is set as default, unset other defaults + if data.get('is_default'): + NamingTemplate.query.filter_by( + user_id=current_user.id, + is_default=True + ).update({'is_default': False}) + + template = NamingTemplate( + user_id=current_user.id, + name=data['name'], + template=data['template'], + description=data.get('description'), + regex_patterns=json.dumps(regex_patterns) if regex_patterns else None, + is_default=data.get('is_default', False) + ) + + db.session.add(template) + db.session.commit() + + return jsonify(template.to_dict()), 201 + + +@naming_templates_bp.route('/api/naming-templates/', methods=['GET']) +@login_required +def get_naming_template(template_id): + """Get a specific naming template.""" + template = NamingTemplate.query.filter_by( + id=template_id, + user_id=current_user.id + ).first() + + if not template: + return jsonify({'error': 'Template not found'}), 404 + + return jsonify(template.to_dict()) + + +@naming_templates_bp.route('/api/naming-templates/', methods=['PUT']) +@login_required +def update_naming_template(template_id): + """Update an existing naming template.""" + template = NamingTemplate.query.filter_by( + id=template_id, + user_id=current_user.id + ).first() + + if not template: + return jsonify({'error': 'Template not found'}), 404 + + data = request.json + if not data: + return jsonify({'error': 'No data provided'}), 400 + + # Validate regex patterns if provided + if 'regex_patterns' in data: + regex_patterns = data['regex_patterns'] + if regex_patterns: + if not isinstance(regex_patterns, dict): + return jsonify({'error': 'regex_patterns must be a dictionary'}), 400 + import re + for var_name, pattern in regex_patterns.items(): + try: + re.compile(pattern) + except re.error as e: + return jsonify({'error': f'Invalid regex pattern for "{var_name}": {str(e)}'}), 400 + + # If this is set as default, unset other defaults + if data.get('is_default'): + NamingTemplate.query.filter_by( + user_id=current_user.id, + is_default=True + ).update({'is_default': False}) + + template.name = data.get('name', template.name) + template.template = data.get('template', template.template) + template.description = data.get('description', template.description) + template.is_default = data.get('is_default', template.is_default) + + if 'regex_patterns' in data: + regex_patterns = data['regex_patterns'] + template.regex_patterns = json.dumps(regex_patterns) if regex_patterns else None + + template.updated_at = datetime.utcnow() + + db.session.commit() + + return jsonify(template.to_dict()) + + +@naming_templates_bp.route('/api/naming-templates/', methods=['DELETE']) +@login_required +def delete_naming_template(template_id): + """Delete a naming template.""" + template = NamingTemplate.query.filter_by( + id=template_id, + user_id=current_user.id + ).first() + + if not template: + return jsonify({'error': 'Template not found'}), 404 + + # Check if any tags are using this template + from src.models import Tag + tags_using = Tag.query.filter_by(naming_template_id=template_id).count() + if tags_using > 0: + return jsonify({ + 'error': f'Cannot delete template: {tags_using} tag(s) are using this template' + }), 400 + + db.session.delete(template) + db.session.commit() + + return jsonify({'success': True}) + + +@naming_templates_bp.route('/api/naming-templates/create-defaults', methods=['POST']) +@login_required +def create_default_naming_templates(): + """Create default naming templates for the user if they don't have any.""" + existing_templates = NamingTemplate.query.filter_by(user_id=current_user.id).count() + + if existing_templates > 0: + return jsonify({'message': 'User already has naming templates'}), 200 + + templates = [] + + # Default template 1: Titre IA uniquement (default) + template1 = NamingTemplate( + user_id=current_user.id, + name="Titre IA uniquement", + template="{{ai_title}}", + description="Utilise le titre généré par l'IA depuis le contenu de la transcription", + is_default=True + ) + templates.append(template1) + + # Default template 2: Date + Titre IA + template2 = NamingTemplate( + user_id=current_user.id, + name="Date + Titre IA", + template="{{date}} - {{ai_title}}", + description="Date de l'enregistrement suivie du titre IA — format recommandé pour le classement", + is_default=False + ) + templates.append(template2) + + # Default template 3: Date, heure et titre + template3 = NamingTemplate( + user_id=current_user.id, + name="Date, heure et titre", + template="{{datetime}} {{ai_title}}", + description="Inclut la date et l'heure avant le titre IA — utile quand plusieurs enregistrements par jour", + is_default=False + ) + templates.append(template3) + + # Add all templates to database + for template in templates: + db.session.add(template) + + db.session.commit() + + return jsonify({ + 'success': True, + 'templates': [template.to_dict() for template in templates] + }), 201 + + +@naming_templates_bp.route('/api/naming-templates//test', methods=['POST']) +@login_required +def test_naming_template(template_id): + """Test a naming template with sample data.""" + template = NamingTemplate.query.filter_by( + id=template_id, + user_id=current_user.id + ).first() + + if not template: + return jsonify({'error': 'Template not found'}), 404 + + data = request.json or {} + sample_filename = data.get('filename', 'sample-recording-2026-01-15.mp3') + sample_date = data.get('date') + sample_ai_title = data.get('ai_title', 'Meeting with Team') + + # Parse sample date + meeting_date = None + if sample_date: + try: + meeting_date = datetime.fromisoformat(sample_date) + except ValueError: + pass + + if not meeting_date: + meeting_date = datetime.now() + + # Apply template + result = template.apply( + original_filename=sample_filename, + meeting_date=meeting_date, + ai_title=sample_ai_title + ) + + return jsonify({ + 'result': result or '(empty - would fall back to AI title or filename)', + 'needs_ai_title': template.needs_ai_title(), + 'input': { + 'filename': sample_filename, + 'date': meeting_date.isoformat() if meeting_date else None, + 'ai_title': sample_ai_title + } + }) + + +@naming_templates_bp.route('/api/naming-templates/default', methods=['GET']) +@login_required +def get_default_naming_template(): + """Get the user's default naming template.""" + return jsonify({ + 'default_naming_template_id': current_user.default_naming_template_id + }) + + +@naming_templates_bp.route('/api/naming-templates/default', methods=['PUT']) +@login_required +def set_default_naming_template(): + """Set the user's default naming template.""" + data = request.json + template_id = data.get('template_id') if data else None + + if template_id: + # Verify template belongs to user + template = NamingTemplate.query.filter_by( + id=template_id, + user_id=current_user.id + ).first() + + if not template: + return jsonify({'error': 'Template not found'}), 404 + + current_user.default_naming_template_id = template_id if template_id else None + db.session.commit() + + return jsonify({ + 'success': True, + 'default_naming_template_id': current_user.default_naming_template_id + }) diff --git a/src/api/push_notifications.py b/src/api/push_notifications.py new file mode 100644 index 0000000..f7b18ec --- /dev/null +++ b/src/api/push_notifications.py @@ -0,0 +1,232 @@ +""" +Push Notification API Endpoints +Handles push notification subscriptions and delivery +""" +from flask import Blueprint, request, jsonify +from flask_login import login_required, current_user +from src.database import db +from src.models.push_subscription import PushSubscription +import json + + +push_bp = Blueprint('push', __name__) + +# VAPID config is loaded lazily to avoid startup issues +_vapid_config = None + + +def _get_vapid_config(): + """Load VAPID configuration lazily""" + global _vapid_config + if _vapid_config is None: + try: + from src.utils.vapid_keys import VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY, VAPID_ENABLED + _vapid_config = { + 'enabled': VAPID_ENABLED, + 'public_key': VAPID_PUBLIC_KEY, + 'private_key': VAPID_PRIVATE_KEY + } + except Exception as e: + print(f"[Push] Failed to load VAPID config: {e}") + _vapid_config = { + 'enabled': False, + 'public_key': None, + 'private_key': None + } + return _vapid_config + + +@push_bp.route('/api/push/config', methods=['GET']) +def get_push_config(): + """Get push notification configuration for client""" + config = _get_vapid_config() + return jsonify({ + 'enabled': config['enabled'], + 'public_key': config['public_key'] if config['enabled'] else None + }) + + +@push_bp.route('/api/push/subscribe', methods=['POST']) +@login_required +def subscribe(): + """Store push subscription for current user""" + config = _get_vapid_config() + if not config['enabled']: + return jsonify({ + 'success': False, + 'error': 'Push notifications not available' + }), 503 + + try: + subscription_data = request.json + + if not subscription_data or 'endpoint' not in subscription_data: + return jsonify({ + 'success': False, + 'error': 'Invalid subscription data' + }), 400 + + # Check if subscription already exists + existing = PushSubscription.query.filter_by( + user_id=current_user.id, + endpoint=subscription_data['endpoint'] + ).first() + + if existing: + return jsonify({ + 'success': True, + 'message': 'Already subscribed', + 'subscription_id': existing.id + }) + + # Create new subscription + subscription = PushSubscription( + user_id=current_user.id, + endpoint=subscription_data['endpoint'], + p256dh_key=subscription_data.get('keys', {}).get('p256dh', ''), + auth_key=subscription_data.get('keys', {}).get('auth', '') + ) + + db.session.add(subscription) + db.session.commit() + + return jsonify({ + 'success': True, + 'message': 'Subscription saved', + 'subscription_id': subscription.id + }) + + except Exception as e: + db.session.rollback() + print(f"[Push] Subscription error: {e}") + return jsonify({ + 'success': False, + 'error': str(e) + }), 500 + + +@push_bp.route('/api/push/unsubscribe', methods=['POST']) +@login_required +def unsubscribe(): + """Remove push subscription for current user""" + config = _get_vapid_config() + if not config['enabled']: + return jsonify({'success': True, 'message': 'Push notifications not enabled'}) + + try: + subscription_data = request.json + + if not subscription_data or 'endpoint' not in subscription_data: + return jsonify({ + 'success': False, + 'error': 'Invalid subscription data' + }), 400 + + subscription = PushSubscription.query.filter_by( + user_id=current_user.id, + endpoint=subscription_data['endpoint'] + ).first() + + if subscription: + db.session.delete(subscription) + db.session.commit() + return jsonify({ + 'success': True, + 'message': 'Subscription removed' + }) + + return jsonify({ + 'success': False, + 'error': 'Subscription not found' + }), 404 + + except Exception as e: + db.session.rollback() + print(f"[Push] Unsubscribe error: {e}") + return jsonify({ + 'success': False, + 'error': str(e) + }), 500 + + +def send_push_notification(user_id, title, body, data=None, url=None): + """ + Send push notification to all subscriptions for a user + + Args: + user_id: User ID to send notification to + title: Notification title + body: Notification body text + data: Optional dictionary of extra data + url: Optional URL to open when notification is clicked + """ + config = _get_vapid_config() + if not config['enabled']: + print("[Push] Push notifications not enabled, skipping") + return + + try: + from pywebpush import webpush, WebPushException + + subscriptions = PushSubscription.query.filter_by(user_id=user_id).all() + + if not subscriptions: + print(f"[Push] No subscriptions found for user {user_id}") + return + + notification_data = { + 'title': title, + 'body': body, + 'icon': '/static/img/icon-192x192.png', + 'badge': '/static/img/icon-192x192.png', + 'data': data or {} + } + + if url: + notification_data['data']['url'] = url + + sent_count = 0 + failed_count = 0 + + for subscription in subscriptions: + try: + webpush( + subscription_info={ + 'endpoint': subscription.endpoint, + 'keys': { + 'p256dh': subscription.p256dh_key, + 'auth': subscription.auth_key + } + }, + data=json.dumps(notification_data), + vapid_private_key=config['private_key'], + vapid_claims={ + 'sub': 'mailto:admin@speakr.app' + } + ) + sent_count += 1 + print(f'[Push] Sent notification to user {user_id} subscription {subscription.id}') + + except WebPushException as e: + failed_count += 1 + print(f'[Push] Failed to send to subscription {subscription.id}: {e}') + + # Remove expired subscriptions + if e.response and e.response.status_code in [404, 410]: + print(f'[Push] Removing expired subscription {subscription.id}') + db.session.delete(subscription) + + except Exception as e: + failed_count += 1 + print(f'[Push] Unexpected error sending to subscription {subscription.id}: {e}') + + # Commit any deletions + if failed_count > 0: + db.session.commit() + + print(f'[Push] Sent {sent_count} notifications, {failed_count} failed') + + except ImportError: + print("[Push] pywebpush not installed, cannot send notifications") + except Exception as e: + print(f"[Push] Error sending notifications: {e}") diff --git a/src/api/recordings.py b/src/api/recordings.py new file mode 100644 index 0000000..0793075 --- /dev/null +++ b/src/api/recordings.py @@ -0,0 +1,4080 @@ +""" +Recording upload, processing, and management. + +This blueprint was auto-generated from app.py route extraction. +""" + +import os +import json +import re +import mimetypes +import time +import subprocess +from datetime import datetime, timedelta +from src.services.job_queue import job_queue +from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify, send_file, Response, current_app, make_response +from flask_login import login_required, current_user +from werkzeug.utils import secure_filename +from werkzeug.exceptions import RequestEntityTooLarge +from sqlalchemy import select +from email.utils import encode_rfc2231 + +from src.database import db +from src.models import * +from src.utils import * +from src.config.app_config import ASR_MIN_SPEAKERS, ASR_MAX_SPEAKERS, ASR_DIARIZE, USE_NEW_TRANSCRIPTION_ARCHITECTURE +from src.tasks.processing import format_transcription_for_llm +from src.utils.ffmpeg_utils import FFmpegError, FFmpegNotFoundError +from src.services.speaker import update_speaker_usage, identify_unidentified_speakers_from_text +from src.services.speaker_embedding_matcher import update_speaker_embedding +from src.services.speaker_snippets import create_speaker_snippets +from src.services.audit import audit_access, audit_view, audit_download, audit_edit, audit_delete, audit_export + +# Incognito mode - disabled by default, enable via environment variable +ENABLE_INCOGNITO_MODE = os.environ.get('ENABLE_INCOGNITO_MODE', 'false').lower() == 'true' +from src.services.document import process_markdown_to_docx +from src.services.llm import client, chat_client, call_llm_completion, call_chat_completion, process_streaming_with_thinking, TokenBudgetExceeded +from src.services.embeddings import process_recording_chunks +from src.file_exporter import export_recording, mark_export_as_deleted +from src.utils.ffprobe import get_codec_info, get_creation_date, FFProbeError +from src.utils.audio_conversion import convert_if_needed +from src.utils.file_hash import compute_file_sha256 + +# Create blueprint +recordings_bp = Blueprint('recordings', __name__) + +# Configuration from environment +ENABLE_INQUIRE_MODE = os.environ.get('ENABLE_INQUIRE_MODE', 'false').lower() == 'true' +ENABLE_AUTO_DELETION = os.environ.get('ENABLE_AUTO_DELETION', 'false').lower() == 'true' +DELETION_MODE = os.environ.get('DELETION_MODE', 'full_recording') # 'audio_only' or 'full_recording' +USERS_CAN_DELETE = os.environ.get('USERS_CAN_DELETE', 'true').lower() == 'true' +ENABLE_INTERNAL_SHARING = os.environ.get('ENABLE_INTERNAL_SHARING', 'false').lower() == 'true' +VIDEO_RETENTION = os.environ.get('VIDEO_RETENTION', 'false').lower() == 'true' +VIDEO_PASSTHROUGH_ASR = os.environ.get('VIDEO_PASSTHROUGH_ASR', 'false').lower() == 'true' +USE_ASR_ENDPOINT = os.environ.get('USE_ASR_ENDPOINT', 'false').lower() == 'true' +ENABLE_CHUNKING = os.environ.get('ENABLE_CHUNKING', 'true').lower() == 'true' + +# Global helpers (will be injected from app) +has_recording_access = None +get_user_recording_status = None +set_user_recording_status = None +enrich_recording_dict_with_user_status = None +bcrypt = None +csrf = None +limiter = None +chunking_service = None + +def init_recordings_helpers(**kwargs): + """Initialize helper functions and extensions from app.""" + global has_recording_access, get_user_recording_status, set_user_recording_status, enrich_recording_dict_with_user_status, bcrypt, csrf, limiter, chunking_service + has_recording_access = kwargs.get('has_recording_access') + get_user_recording_status = kwargs.get('get_user_recording_status') + set_user_recording_status = kwargs.get('set_user_recording_status') + enrich_recording_dict_with_user_status = kwargs.get('enrich_recording_dict_with_user_status') + bcrypt = kwargs.get('bcrypt') + csrf = kwargs.get('csrf') + limiter = kwargs.get('limiter') + chunking_service = kwargs.get('chunking_service') + + +# --- Routes --- + +@recordings_bp.route('/recording//download/transcript') +@login_required +def download_transcript_with_template(recording_id): + """Download transcript with custom template formatting.""" + try: + import re + from datetime import timedelta + + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'You do not have permission to access this recording'}), 403 + + if not recording.transcription: + return jsonify({'error': 'No transcription available for this recording'}), 400 + + try: + audit_download('transcript', recording_id) + db.session.commit() + except Exception: + db.session.rollback() + current_app.logger.warning(f'Audit log failed for transcript {recording_id}', exc_info=True) + + # Get template ID from query params + template_id = request.args.get('template_id', type=int) + + # Get the template + if template_id: + template = TranscriptTemplate.query.filter_by( + id=template_id, + user_id=current_user.id + ).first() + else: + # Use default template + template = TranscriptTemplate.query.filter_by( + user_id=current_user.id, + is_default=True + ).first() + + # If no template found, use a basic format + if not template: + template_format = "[{{speaker}}]: {{text}}" + else: + template_format = template.template + + # Helper functions for formatting + def format_time(seconds): + """Format seconds to HH:MM:SS""" + if seconds is None: + return "00:00:00" + td = timedelta(seconds=seconds) + hours = int(td.total_seconds() // 3600) + minutes = int((td.total_seconds() % 3600) // 60) + secs = int(td.total_seconds() % 60) + return f"{hours:02d}:{minutes:02d}:{secs:02d}" + + def format_srt_time(seconds): + """Format seconds to SRT format HH:MM:SS,mmm""" + if seconds is None: + return "00:00:00,000" + td = timedelta(seconds=seconds) + hours = int(td.total_seconds() // 3600) + minutes = int((td.total_seconds() % 3600) // 60) + secs = int(td.total_seconds() % 60) + millis = int((td.total_seconds() % 1) * 1000) + return f"{hours:02d}:{minutes:02d}:{secs:02d},{millis:03d}" + + # Parse transcription - handle both JSON (diarized) and plain text formats + is_diarized = False + transcription_data = None + try: + transcription_data = json.loads(recording.transcription) + if isinstance(transcription_data, list): + is_diarized = True + except (json.JSONDecodeError, TypeError): + # Not JSON, treat as plain text + pass + + # If plain text transcription, return it as-is (no template formatting applies) + if not is_diarized: + formatted_transcript = recording.transcription + else: + # Generate formatted transcript from diarized segments + output_lines = [] + for index, segment in enumerate(transcription_data, 1): + line = template_format + + # Replace variables + replacements = { + '{{index}}': str(index), + '{{speaker}}': segment.get('speaker', 'Unknown'), + '{{text}}': segment.get('sentence', ''), + '{{start_time}}': format_time(segment.get('start_time')), + '{{end_time}}': format_time(segment.get('end_time')), + } + + for key, value in replacements.items(): + line = line.replace(key, value) + + # Handle filters + # Upper case filter + line = re.sub(r'{{(.*?)\|upper}}', lambda m: replacements.get('{{' + m.group(1) + '}}', '').upper(), line) + # SRT time filter + line = re.sub(r'{{start_time\|srt}}', format_srt_time(segment.get('start_time')), line) + line = re.sub(r'{{end_time\|srt}}', format_srt_time(segment.get('end_time')), line) + + output_lines.append(line) + + # Join lines + formatted_transcript = '\n'.join(output_lines) + + # Create response + response = make_response(formatted_transcript) + if is_diarized and template: + filename = f"{recording.title or 'transcript'}_{template.name}.txt" + elif is_diarized: + filename = f"{recording.title or 'transcript'}_formatted.txt" + else: + # Plain text transcription + filename = f"{recording.title or 'transcript'}.txt" + filename = re.sub(r'[^a-zA-Z0-9_\-\.]', '_', filename) + response.headers['Content-Type'] = 'text/plain; charset=utf-8' + response.headers['Content-Disposition'] = f'attachment; filename="{filename}"' + + return response + + except Exception as e: + current_app.logger.error(f"Error downloading transcript: {e}") + return jsonify({'error': 'Failed to generate transcript download'}), 500 + + + + + +@recordings_bp.route('/recording//download/transcript/word') +@login_required +def download_transcript_word(recording_id): + """Download transcript as a formatted Word document with timestamps.""" + try: + from docx import Document + from docx.shared import Pt, RGBColor, Inches + from docx.enum.text import WD_ALIGN_PARAGRAPH + from io import BytesIO + from datetime import timedelta + import json as json_mod + + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'You do not have permission to access this recording'}), 403 + + if not recording.transcription: + return jsonify({'error': 'No transcription available for this recording'}), 400 + + try: + audit_download('transcript', recording_id) + db.session.commit() + except Exception: + db.session.rollback() + current_app.logger.warning(f'Audit log failed for transcript word {recording_id}', exc_info=True) + + def format_time(seconds): + if seconds is None: + return "00:00:00" + td = timedelta(seconds=float(seconds)) + h = int(td.total_seconds() // 3600) + m = int((td.total_seconds() % 3600) // 60) + s = int(td.total_seconds() % 60) + return f"{h:02d}:{m:02d}:{s:02d}" + + # Parse transcription + is_diarized = False + segments = [] + try: + data = json_mod.loads(recording.transcription) + if isinstance(data, list): + is_diarized = True + segments = data + except (json_mod.JSONDecodeError, TypeError): + pass + + # Build Word document + doc = Document() + + # Page margins + for section in doc.sections: + section.top_margin = Inches(1) + section.bottom_margin = Inches(1) + section.left_margin = Inches(1.2) + section.right_margin = Inches(1.2) + + # Title + title_para = doc.add_heading(recording.title or 'Transcription', 0) + title_para.alignment = WD_ALIGN_PARAGRAPH.LEFT + + # Metadata block + meta_lines = [] + meta_lines.append(f"Date : {recording.created_at.strftime('%Y-%m-%d %H:%M')}") + if recording.meeting_date: + meta_lines.append(f"Date de l'enregistrement : {recording.meeting_date.strftime('%Y-%m-%d')}") + if recording.participants: + meta_lines.append(f"Participants : {recording.participants}") + visible_tags = recording.get_visible_tags(current_user) + if visible_tags: + meta_lines.append(f"Etiquettes : {', '.join(t.name for t in visible_tags)}") + + for line in meta_lines: + p = doc.add_paragraph(line) + p.runs[0].font.size = Pt(10) + p.runs[0].font.color.rgb = RGBColor(0x66, 0x66, 0x66) + + doc.add_paragraph() # spacer + + from docx.oxml.ns import qn + from docx.oxml import OxmlElement + + def add_horizontal_rule(doc): + p = doc.add_paragraph() + pPr = p._p.get_or_add_pPr() + pBdr = OxmlElement('w:pBdr') + bottom = OxmlElement('w:bottom') + bottom.set(qn('w:val'), 'single') + bottom.set(qn('w:sz'), '6') + bottom.set(qn('w:space'), '1') + bottom.set(qn('w:color'), 'CCCCCC') + pBdr.append(bottom) + pPr.append(pBdr) + return p + + add_horizontal_rule(doc) + doc.add_paragraph() + + # Transcript content + if not is_diarized: + for line in recording.transcription.split('\n'): + if line.strip(): + doc.add_paragraph(line.strip()) + else: + speaker_colors = {} + palette = [ + RGBColor(0x1a, 0x56, 0xdb), + RGBColor(0x05, 0x96, 0x69), + RGBColor(0x97, 0x16, 0x2d), + RGBColor(0x92, 0x40, 0xbd), + RGBColor(0xc2, 0x74, 0x03), + ] + + for segment in segments: + speaker = segment.get('speaker', 'Inconnu') + text = segment.get('sentence', '').strip() + start = segment.get('start_time') + end = segment.get('end_time') + + if not text: + continue + + if speaker not in speaker_colors: + speaker_colors[speaker] = palette[len(speaker_colors) % len(palette)] + color = speaker_colors[speaker] + + # Timestamp line + ts_para = doc.add_paragraph() + ts_run = ts_para.add_run(f"{format_time(start)} -> {format_time(end)}") + ts_run.font.size = Pt(8) + ts_run.font.color.rgb = RGBColor(0x99, 0x99, 0x99) + ts_para.paragraph_format.space_before = Pt(8) + ts_para.paragraph_format.space_after = Pt(0) + + # Speaker + text + seg_para = doc.add_paragraph() + seg_para.paragraph_format.space_before = Pt(0) + seg_para.paragraph_format.space_after = Pt(2) + + spk_run = seg_para.add_run(f"{speaker} ") + spk_run.bold = True + spk_run.font.size = Pt(10) + spk_run.font.color.rgb = color + + txt_run = seg_para.add_run(text) + txt_run.font.size = Pt(10) + + # Footer + doc.add_paragraph() + add_horizontal_rule(doc) + footer_para = doc.add_paragraph("Genere par DictIA — Confidentiel") + footer_para.runs[0].font.size = Pt(8) + footer_para.runs[0].font.color.rgb = RGBColor(0xAA, 0xAA, 0xAA) + footer_para.alignment = WD_ALIGN_PARAGRAPH.RIGHT + + doc_stream = BytesIO() + doc.save(doc_stream) + doc_stream.seek(0) + + safe_title = re.sub(r'[<>:"/\\|?*]', '', recording.title or 'Untitled') + safe_title = re.sub(r'[-\s]+', '-', safe_title).strip('-') + filename = f'transcript-{safe_title}.docx' if safe_title else f'transcript-{recording_id}.docx' + + response = send_file( + doc_stream, + as_attachment=False, + mimetype='application/vnd.openxmlformats-officedocument.wordprocessingml.document' + ) + try: + filename.encode('ascii') + response.headers['Content-Disposition'] = f'attachment; filename="{filename}"' + except UnicodeEncodeError: + try: + encoded_value = encode_rfc2231(filename, charset='utf-8') + response.headers['Content-Disposition'] = f'attachment; filename*={encoded_value}' + except Exception: + response.headers['Content-Disposition'] = f'attachment; filename="transcript-{recording_id}.docx"' + + return response + + except Exception as e: + current_app.logger.error(f"Error generating transcript Word document: {e}") + return jsonify({'error': 'Failed to generate transcript Word document'}), 500 + + +@recordings_bp.route('/recording//download/summary') +@login_required +def download_summary_word(recording_id): + """Download recording summary as a Word document.""" + try: + from docx import Document + from docx.shared import Inches + import re + from io import BytesIO + + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'You do not have permission to access this recording'}), 403 + + if not recording.summary: + return jsonify({'error': 'No summary available for this recording'}), 400 + + # Create Word document + doc = Document() + + # Add title + title_text = f'Summary: {recording.title or "Untitled Recording"}' + title = doc.add_heading(title_text, 0) + # Check if title needs Unicode font support + try: + title_text.encode('ascii') + except UnicodeEncodeError: + # Title contains non-ASCII characters + from docx.oxml.ns import qn + for run in title.runs: + run.font.name = 'Arial' + r = run._element + r.rPr.rFonts.set(qn('w:eastAsia'), 'Arial') + + # Helper function to add paragraph with Unicode support + def add_unicode_paragraph(doc, text): + p = doc.add_paragraph(text) + try: + text.encode('ascii') + except UnicodeEncodeError: + from docx.oxml.ns import qn + for run in p.runs: + run.font.name = 'Arial' + r = run._element + r.rPr.rFonts.set(qn('w:eastAsia'), 'Arial') + return p + + # Add metadata + add_unicode_paragraph(doc, f'Uploaded: {recording.created_at.strftime("%Y-%m-%d %H:%M")}') + if recording.meeting_date: + add_unicode_paragraph(doc, f'Recording Date: {recording.meeting_date.strftime("%Y-%m-%d")}') + if recording.participants: + add_unicode_paragraph(doc, f'Participants: {recording.participants}') + visible_tags = recording.get_visible_tags(current_user) + if visible_tags: + tags_str = ', '.join([tag.name for tag in visible_tags]) + add_unicode_paragraph(doc, f'Tags: {tags_str}') + doc.add_paragraph('') # Empty line + + # Process markdown content using the helper function + process_markdown_to_docx(doc, recording.summary) + + # Save to BytesIO + doc_stream = BytesIO() + doc.save(doc_stream) + doc_stream.seek(0) + + # Create safe filename + safe_title = re.sub(r'[<>:"/\\|?*]', '', recording.title or 'Untitled') + safe_title = re.sub(r'[-\s]+', '-', safe_title).strip('-') + filename = f'summary-{safe_title}.docx' if safe_title else f'summary-recording-{recording_id}.docx' + + # Create ASCII fallback for send_file - if title has non-ASCII chars, use generic name with ID + ascii_filename = filename.encode('ascii', 'ignore').decode('ascii') + if not ascii_filename.strip() or ascii_filename.strip() in ['summary-.docx', 'summary-recording-.docx']: + ascii_filename = f'summary-recording-{recording_id}.docx' + + response = send_file( + doc_stream, + as_attachment=False, + mimetype='application/vnd.openxmlformats-officedocument.wordprocessingml.document' + ) + # Properly encode filename for international characters + # Check if filename contains non-ASCII characters + try: + # Try to encode as ASCII - if this works, use simple format + filename.encode('ascii') + # ASCII-only filename, use simple format + response.headers['Content-Disposition'] = f'attachment; filename="{filename}"' + except UnicodeEncodeError: + # Contains non-ASCII characters, use proper RFC 2231 encoding + try: + # Use Python's built-in RFC 2231 encoder + encoded_value = encode_rfc2231(filename, charset='utf-8') + header_value = f'attachment; filename*={encoded_value}' + current_app.logger.info(f"DEBUG CHINESE FILENAME (RFC2231): Original='{filename}', Header='{header_value}'") + response.headers['Content-Disposition'] = header_value + except Exception as e: + # Fallback to simple attachment with generic name + current_app.logger.error(f"RFC2231 encoding failed: {e}, using fallback") + response.headers['Content-Disposition'] = f'attachment; filename="download-{recording_id}.docx"' + return response + + except Exception as e: + current_app.logger.error(f"Error generating summary Word document: {e}") + return jsonify({'error': 'Failed to generate Word document'}), 500 + + + +@recordings_bp.route('/recording//download/chat', methods=['POST']) +@login_required +def download_chat_word(recording_id): + """Download chat conversation as a Word document.""" + try: + from docx import Document + from docx.shared import Inches + import re + from io import BytesIO + + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'You do not have permission to access this recording'}), 403 + + # Get chat messages from request + data = request.json + if not data or 'messages' not in data: + return jsonify({'error': 'No messages provided'}), 400 + + messages = data['messages'] + if not messages: + return jsonify({'error': 'No messages to download'}), 400 + + # Create Word document + doc = Document() + + # Add title + title_text = f'Chat Conversation: {recording.title or "Untitled Recording"}' + title = doc.add_heading(title_text, 0) + # Check if title needs Unicode font support + try: + title_text.encode('ascii') + except UnicodeEncodeError: + from docx.oxml.ns import qn + for run in title.runs: + run.font.name = 'Arial' + r = run._element + r.rPr.rFonts.set(qn('w:eastAsia'), 'Arial') + + # Helper function to add paragraph with Unicode support + def add_unicode_paragraph(doc, text): + p = doc.add_paragraph(text) + try: + text.encode('ascii') + except UnicodeEncodeError: + from docx.oxml.ns import qn + for run in p.runs: + run.font.name = 'Arial' + r = run._element + r.rPr.rFonts.set(qn('w:eastAsia'), 'Arial') + return p + + # Add metadata + add_unicode_paragraph(doc, f'Recording Date: {recording.created_at.strftime("%Y-%m-%d %H:%M")}') + add_unicode_paragraph(doc, f'Chat Export Date: {datetime.utcnow().strftime("%Y-%m-%d %H:%M")}') + doc.add_paragraph('') # Empty line + + # Add chat messages + for message in messages: + role = message.get('role', 'unknown') + content = message.get('content', '') + thinking = message.get('thinking', '') + + # Add role header + if role == 'user': + p = doc.add_paragraph() + run = p.add_run('You: ') + run.bold = True + elif role == 'assistant': + p = doc.add_paragraph() + run = p.add_run('Assistant: ') + run.bold = True + else: + p = doc.add_paragraph() + run = p.add_run(f'{role.title()}: ') + run.bold = True + + # Add thinking content if present + if thinking and role == 'assistant': + p = doc.add_paragraph() + p.add_run('[Model Reasoning]\n').italic = True + p.add_run(thinking).italic = True + doc.add_paragraph('') # Empty line + + # Add message content with markdown formatting + process_markdown_to_docx(doc, content) + + doc.add_paragraph('') # Empty line between messages + + # Save to BytesIO + doc_stream = BytesIO() + doc.save(doc_stream) + doc_stream.seek(0) + + # Create safe filename + safe_title = re.sub(r'[<>:"/\\|?*]', '', recording.title or 'Untitled') + safe_title = re.sub(r'[-\s]+', '-', safe_title).strip('-') + filename = f'chat-{safe_title}.docx' if safe_title else f'chat-recording-{recording_id}.docx' + + # Create ASCII fallback for send_file - if title has non-ASCII chars, use generic name with ID + ascii_filename = filename.encode('ascii', 'ignore').decode('ascii') + if not ascii_filename.strip() or ascii_filename.strip() in ['chat-.docx', 'chat-recording-.docx']: + ascii_filename = f'chat-recording-{recording_id}.docx' + + response = send_file( + doc_stream, + as_attachment=False, + mimetype='application/vnd.openxmlformats-officedocument.wordprocessingml.document' + ) + + # Properly encode filename for international characters + # Check if filename contains non-ASCII characters + try: + # Try to encode as ASCII - if this works, use simple format + filename.encode('ascii') + # ASCII-only filename, use simple format + response.headers['Content-Disposition'] = f'attachment; filename="{filename}"' + except UnicodeEncodeError: + # Contains non-ASCII characters, use proper RFC 2231 encoding + try: + # Use Python's built-in RFC 2231 encoder + encoded_value = encode_rfc2231(filename, charset='utf-8') + header_value = f'attachment; filename*={encoded_value}' + current_app.logger.info(f"DEBUG CHINESE FILENAME (RFC2231): Original='{filename}', Header='{header_value}'") + response.headers['Content-Disposition'] = header_value + except Exception as e: + # Fallback to simple attachment with generic name + current_app.logger.error(f"RFC2231 encoding failed: {e}, using fallback") + response.headers['Content-Disposition'] = f'attachment; filename="download-{recording_id}.docx"' + return response + + except Exception as e: + current_app.logger.error(f"Error generating chat Word document: {e}") + return jsonify({'error': 'Failed to generate Word document'}), 500 + + + +@recordings_bp.route('/recording//download/notes') +@login_required +def download_notes_word(recording_id): + """Download recording notes as a Word document.""" + try: + from docx import Document + from docx.shared import Inches + import re + from io import BytesIO + + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'You do not have permission to access this recording'}), 403 + + if not recording.notes: + return jsonify({'error': 'No notes available for this recording'}), 400 + + # Create Word document + doc = Document() + + # Add title + title_text = f'Notes: {recording.title or "Untitled Recording"}' + title = doc.add_heading(title_text, 0) + # Check if title needs Unicode font support + try: + title_text.encode('ascii') + except UnicodeEncodeError: + from docx.oxml.ns import qn + for run in title.runs: + run.font.name = 'Arial' + r = run._element + r.rPr.rFonts.set(qn('w:eastAsia'), 'Arial') + + # Helper function to add paragraph with Unicode support + def add_unicode_paragraph(doc, text): + p = doc.add_paragraph(text) + try: + text.encode('ascii') + except UnicodeEncodeError: + from docx.oxml.ns import qn + for run in p.runs: + run.font.name = 'Arial' + r = run._element + r.rPr.rFonts.set(qn('w:eastAsia'), 'Arial') + return p + + # Add metadata + add_unicode_paragraph(doc, f'Uploaded: {recording.created_at.strftime("%Y-%m-%d %H:%M")}') + if recording.meeting_date: + add_unicode_paragraph(doc, f'Recording Date: {recording.meeting_date.strftime("%Y-%m-%d")}') + if recording.participants: + add_unicode_paragraph(doc, f'Participants: {recording.participants}') + visible_tags = recording.get_visible_tags(current_user) + if visible_tags: + tags_str = ', '.join([tag.name for tag in visible_tags]) + add_unicode_paragraph(doc, f'Tags: {tags_str}') + doc.add_paragraph('') # Empty line + + # Process markdown content using the helper function + process_markdown_to_docx(doc, recording.notes) + + # Save to BytesIO + doc_stream = BytesIO() + doc.save(doc_stream) + doc_stream.seek(0) + + # Create safe filename + safe_title = re.sub(r'[<>:"/\\|?*]', '', recording.title or 'Untitled') + safe_title = re.sub(r'[-\s]+', '-', safe_title).strip('-') + filename = f'notes-{safe_title}.docx' if safe_title else f'notes-recording-{recording_id}.docx' + + # Create ASCII fallback for send_file - if title has non-ASCII chars, use generic name with ID + ascii_filename = filename.encode('ascii', 'ignore').decode('ascii') + if not ascii_filename.strip() or ascii_filename.strip() in ['notes-.docx', 'notes-recording-.docx']: + ascii_filename = f'notes-recording-{recording_id}.docx' + + response = send_file( + doc_stream, + as_attachment=False, + mimetype='application/vnd.openxmlformats-officedocument.wordprocessingml.document' + ) + # Properly encode filename for international characters + # Check if filename contains non-ASCII characters + try: + # Try to encode as ASCII - if this works, use simple format + filename.encode('ascii') + # ASCII-only filename, use simple format + response.headers['Content-Disposition'] = f'attachment; filename="{filename}"' + except UnicodeEncodeError: + # Contains non-ASCII characters, use proper RFC 2231 encoding + try: + # Use Python's built-in RFC 2231 encoder + encoded_value = encode_rfc2231(filename, charset='utf-8') + header_value = f'attachment; filename*={encoded_value}' + current_app.logger.info(f"DEBUG CHINESE FILENAME (RFC2231): Original='{filename}', Header='{header_value}'") + response.headers['Content-Disposition'] = header_value + except Exception as e: + # Fallback to simple attachment with generic name + current_app.logger.error(f"RFC2231 encoding failed: {e}, using fallback") + response.headers['Content-Disposition'] = f'attachment; filename="download-{recording_id}.docx"' + return response + + except Exception as e: + current_app.logger.error(f"Error generating notes Word document: {e}") + return jsonify({'error': 'Failed to generate Word document'}), 500 + + + +@recordings_bp.route('/recording//generate_summary', methods=['POST']) +@login_required +def generate_summary_endpoint(recording_id): + """Generate summary for a recording that doesn't have one.""" + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'You do not have permission to generate summary for this recording'}), 403 + + # Check if transcription exists + if not recording.transcription or len(recording.transcription.strip()) < 10: + return jsonify({'error': 'No valid transcription available for summary generation'}), 400 + + # Check if transcription is an error message (not actual content) + if is_transcription_error(recording.transcription): + return jsonify({'error': 'Cannot generate summary: transcription failed. Please reprocess the transcription first.'}), 400 + + # Check if already processing + if recording.status in ['PROCESSING', 'SUMMARIZING']: + return jsonify({'error': 'Recording is already being processed'}), 400 + + # Check if OpenRouter client is available + if client is None: + return jsonify({'error': 'Summary service is not available (OpenRouter client not configured)'}), 503 + + current_app.logger.info(f"Queueing summary generation for recording {recording_id}") + + # Queue summary generation job + job_queue.enqueue( + user_id=current_user.id, + recording_id=recording.id, + job_type='summarize', + params={'user_id': current_user.id} + ) + + return jsonify({ + 'success': True, + 'message': 'Summary generation queued' + }) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error starting summary generation for recording {recording_id}: {e}") + return jsonify({'error': str(e)}), 500 + + + +@recordings_bp.route('/recording//update_speakers', methods=['POST']) +@login_required +def update_speakers(recording_id): + """Updates speaker labels in a transcription with provided names.""" + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'You do not have permission to edit this recording'}), 403 + + data = request.json + speaker_map = data.get('speaker_map') + regenerate_summary = data.get('regenerate_summary', False) + + if speaker_map is None: + return jsonify({'error': 'No speaker map provided'}), 400 + + transcription_text = recording.transcription + is_json = False + try: + transcription_data = json.loads(transcription_text) + # Updated check for our new simplified JSON format (a list of segment objects) + is_json = isinstance(transcription_data, list) + except (json.JSONDecodeError, TypeError): + is_json = False + + speaker_names_used = [] + + if is_json: + # Handle new simplified JSON transcript (list of segments) + for segment in transcription_data: + original_speaker_label = segment.get('speaker') + if original_speaker_label in speaker_map: + new_name_info = speaker_map[original_speaker_label] + new_name = new_name_info.get('name', '').strip() + # If isMe is checked but no name provided, use current user's name + if new_name_info.get('isMe') and not new_name: + new_name = current_user.name or 'Me' + + if new_name: + segment['speaker'] = new_name + if new_name not in speaker_names_used: + speaker_names_used.append(new_name) + + recording.transcription = json.dumps(transcription_data) + + # Update participants only from speakers that were actually given names (not default labels) + final_speakers = set() + for seg in transcription_data: + speaker = seg.get('speaker') + if speaker and str(speaker).strip(): + # Only include speakers that have been given actual names (not default labels like "SPEAKER_01", "SPEAKER_09", etc.) + # Check if this speaker was updated with a real name (not a default label) + if not re.match(r'^SPEAKER_\d+$', str(speaker), re.IGNORECASE): + final_speakers.add(speaker) + recording.participants = ', '.join(sorted(list(final_speakers))) + + else: + # Handle plain text transcript + new_participants = [] + for speaker_label, new_name_info in speaker_map.items(): + new_name = new_name_info.get('name', '').strip() + # If isMe is checked but no name provided, use current user's name + if new_name_info.get('isMe') and not new_name: + new_name = current_user.name or 'Me' + + if new_name: + transcription_text = re.sub(r'\[\s*' + re.escape(speaker_label) + r'\s*\]', f'[{new_name}]', transcription_text, flags=re.IGNORECASE) + if new_name not in new_participants: + new_participants.append(new_name) + + recording.transcription = transcription_text + if new_participants: + recording.participants = ', '.join(new_participants) + speaker_names_used = new_participants + + # Update speaker usage statistics + if speaker_names_used: + update_speaker_usage(speaker_names_used) + + # Update speaker voice embeddings if available + embeddings_updated = 0 + snippets_created = 0 + if recording.speaker_embeddings and speaker_map: + try: + # Parse embeddings from recording + embeddings_data = json.loads(recording.speaker_embeddings) if isinstance(recording.speaker_embeddings, str) else recording.speaker_embeddings + + # Build reverse map: SPEAKER_XX -> actual name assigned + speaker_label_to_name = {} + for speaker_label, speaker_info in speaker_map.items(): + name = speaker_info.get('name', '').strip() + # Handle isMe checkbox + if speaker_info.get('isMe') and not name: + name = current_user.name or 'Me' + + # Only include speakers that were given real names (not SPEAKER_XX) + if name and not re.match(r'^SPEAKER_\d+$', name, re.IGNORECASE): + speaker_label_to_name[speaker_label] = name + + # Update embeddings for each identified speaker + for speaker_label, embedding in embeddings_data.items(): + if speaker_label in speaker_label_to_name and embedding and len(embedding) == 256: + speaker_name = speaker_label_to_name[speaker_label] + + # Find or create the speaker + speaker = Speaker.query.filter_by( + user_id=current_user.id, + name=speaker_name + ).first() + + if speaker: + # Update the speaker's voice embedding + similarity = update_speaker_embedding(speaker, embedding, recording.id) + embeddings_updated += 1 + + if similarity is not None: + current_app.logger.info( + f"Updated voice profile for '{speaker_name}' " + f"(similarity: {similarity*100:.1f}%)" + ) + else: + current_app.logger.info( + f"Created initial voice profile for '{speaker_name}'" + ) + + # Create snippets for identified speakers + if speaker_label_to_name: + snippets_created = create_speaker_snippets(recording.id, speaker_map) + if snippets_created > 0: + current_app.logger.info(f"Created {snippets_created} speaker snippets") + + except Exception as e: + current_app.logger.error(f"Error updating speaker embeddings: {e}", exc_info=True) + # Don't fail the whole request if embedding update fails + + db.session.commit() + + summary_queued = False + if regenerate_summary: + current_app.logger.info(f"Queueing summary regeneration for recording {recording_id} after speaker update.") + job_queue.enqueue( + user_id=current_user.id, + recording_id=recording.id, + job_type='summarize', + params={'user_id': current_user.id} + ) + summary_queued = True + + # Return recording with per-user status + recording_dict = recording.to_dict(viewer_user=current_user) + enrich_recording_dict_with_user_status(recording_dict, recording, current_user) + return jsonify({ + 'success': True, + 'message': 'Speakers updated successfully.', + 'recording': recording_dict, + 'summary_queued': summary_queued + }) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error updating speakers for recording {recording_id}: {e}", exc_info=True) + return jsonify({'error': str(e)}), 500 + + + +@recordings_bp.route('/recording//update_transcript', methods=['POST']) +@login_required +def update_transcript(recording_id): + """Updates the complete transcript data including text edits and speaker changes.""" + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'You do not have permission to edit this recording'}), 403 + + audit_edit('transcript', recording_id) + + data = request.json + transcript_data = data.get('transcript_data') + speaker_map = data.get('speaker_map', {}) + regenerate_summary = data.get('regenerate_summary', False) + + if not transcript_data or not isinstance(transcript_data, list): + return jsonify({'error': 'Invalid transcript data provided'}), 400 + + # Update speaker names in the transcript data + speaker_names_used = [] + for segment in transcript_data: + original_speaker_label = segment.get('speaker') + + # Apply speaker name mapping if provided + if original_speaker_label in speaker_map: + new_name_info = speaker_map[original_speaker_label] + new_name = new_name_info.get('name', '').strip() + if new_name_info.get('isMe'): + new_name = current_user.name or 'Me' + + if new_name: + segment['speaker'] = new_name + if new_name not in speaker_names_used: + speaker_names_used.append(new_name) + + # Save the updated transcript + recording.transcription = json.dumps(transcript_data) + + # Update participants + final_speakers = set() + for seg in transcript_data: + speaker = seg.get('speaker') + if speaker and str(speaker).strip(): + # Only include speakers with real names (not default labels) + if not re.match(r'^SPEAKER_\d+$', str(speaker), re.IGNORECASE): + final_speakers.add(speaker) + recording.participants = ', '.join(sorted(list(final_speakers))) + + # Update speaker usage statistics + if speaker_names_used: + update_speaker_usage(speaker_names_used) + + db.session.commit() + + summary_queued = False + if regenerate_summary: + current_app.logger.info(f"Queueing summary regeneration for recording {recording_id} after transcript update.") + job_queue.enqueue( + user_id=current_user.id, + recording_id=recording.id, + job_type='summarize', + params={'user_id': current_user.id} + ) + summary_queued = True + # Export will happen after summary regenerates + else: + # Re-export the recording if auto-export is enabled + export_recording(recording_id) + + # Return recording with per-user status + recording_dict = recording.to_dict(viewer_user=current_user) + enrich_recording_dict_with_user_status(recording_dict, recording, current_user) + return jsonify({ + 'success': True, + 'message': 'Transcript updated successfully.', + 'recording': recording_dict, + 'summary_queued': summary_queued + }) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error updating transcript for recording {recording_id}: {e}", exc_info=True) + return jsonify({'error': str(e)}), 500 + + + +@recordings_bp.route('/recording//auto_identify_speakers', methods=['POST']) +@login_required +def auto_identify_speakers(recording_id): + """ + Automatically identifies speakers in a transcription using an LLM. + Strips existing names and re-identifies all speakers from scratch. + """ + from src.services.speaker_identification import identify_speakers_from_transcript + + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'You do not have permission to modify this recording'}), 403 + + if not recording.transcription: + return jsonify({'error': 'No transcription available for speaker identification'}), 400 + + try: + transcription_data = json.loads(recording.transcription) + except (json.JSONDecodeError, TypeError): + return jsonify({'error': 'Transcription format not supported for auto-identification'}), 400 + + if not isinstance(transcription_data, list): + return jsonify({'error': 'Transcription format not supported for auto-identification'}), 400 + + speaker_map = identify_speakers_from_transcript(transcription_data, current_user.id) + + if not speaker_map: + return jsonify({'error': 'No speakers found in transcription'}), 400 + + return jsonify({'success': True, 'speaker_map': speaker_map}) + + except ValueError as ve: + return jsonify({'error': str(ve)}), 503 + except Exception as e: + current_app.logger.error(f"Error during auto speaker identification for recording {recording_id}: {e}", exc_info=True) + return jsonify({'error': f'An unexpected error occurred: {str(e)}'}), 500 + +# --- Chat with Transcription --- + + +@recordings_bp.route('/recording//reprocess_transcription', methods=['POST']) +@login_required +def reprocess_transcription(recording_id): + """Reprocess transcription for a given recording.""" + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'You do not have permission to reprocess this recording'}), 403 + + if not recording.audio_path or not os.path.exists(recording.audio_path): + return jsonify({'error': 'Audio file not found for reprocessing'}), 404 + + if recording.status in ['QUEUED', 'PROCESSING', 'SUMMARIZING']: + return jsonify({'error': 'Recording is already being processed'}), 400 + + # File path and name for processing (conversion handled in background task if needed) + filepath = recording.audio_path + filename_for_asr = recording.original_filename or os.path.basename(filepath) + + # --- Proceed with reprocessing --- + recording.transcription = None + recording.summary = None + recording.status = 'QUEUED' # Will change to PROCESSING when job starts + + # Clear existing events since they depend on the transcription + Event.query.filter_by(recording_id=recording_id).delete() + + db.session.commit() + + current_app.logger.info(f"Queueing transcription reprocessing for recording {recording_id}") + + # Prepare job parameters + data = request.json or {} + start_time = datetime.utcnow() + app_context = current_app._get_current_object().app_context() + + # Build job parameters - language handling: + # - If 'language' key exists with a value (e.g., 'es'), use that language + # - If 'language' key exists but is empty string, keep as empty string (signals auto-detect) + # - If 'language' key doesn't exist at all, fall back to user's default (backwards compat) + if 'language' in data: + # User explicitly chose a language (or auto-detect with empty string) + language = data.get('language') # Could be 'es', '', or None + else: + # Language not provided - use user's default (backwards compatibility) + language = recording.owner.transcription_language if recording.owner else None + + min_speakers = data.get('min_speakers') or None + max_speakers = data.get('max_speakers') or None + + # Convert to int if provided + if min_speakers: + try: + min_speakers = int(min_speakers) + except (ValueError, TypeError): + min_speakers = None + if max_speakers: + try: + max_speakers = int(max_speakers) + except (ValueError, TypeError): + max_speakers = None + + # Apply tag defaults if no user input provided (for connectors that support speaker count) + if (min_speakers is None or max_speakers is None) and recording.tags: + for tag_association in sorted(recording.tag_associations, key=lambda x: x.order): + tag = tag_association.tag + if min_speakers is None and tag.default_min_speakers: + min_speakers = tag.default_min_speakers + if max_speakers is None and tag.default_max_speakers: + max_speakers = tag.default_max_speakers + if min_speakers is not None and max_speakers is not None: + break + + # Apply environment variable defaults + if min_speakers is None and ASR_MIN_SPEAKERS: + try: + min_speakers = int(ASR_MIN_SPEAKERS) + except (ValueError, TypeError): + min_speakers = None + if max_speakers is None and ASR_MAX_SPEAKERS: + try: + max_speakers = int(ASR_MAX_SPEAKERS) + except (ValueError, TypeError): + max_speakers = None + + # Enqueue the job with all parameters + job_params = { + 'language': language, + 'min_speakers': min_speakers, + 'max_speakers': max_speakers + } + + job_id = job_queue.enqueue( + user_id=current_user.id, + recording_id=recording.id, + job_type='reprocess_transcription', + params=job_params + ) + + # Get queue position for response + queue_position = job_queue.get_position_in_queue(recording.id) + queue_status = job_queue.get_queue_status() + + # Return recording with per-user status and queue info + recording_dict = recording.to_dict(viewer_user=current_user) + enrich_recording_dict_with_user_status(recording_dict, recording, current_user) + return jsonify({ + 'success': True, + 'message': 'Transcription reprocessing queued', + 'recording': recording_dict, + 'queue_position': queue_position, + 'queue_status': queue_status + }) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error reprocessing transcription for recording {recording_id}: {e}") + return jsonify({'error': str(e)}), 500 + + + + +@recordings_bp.route('/recording//reprocess_summary', methods=['POST']) +@login_required +def reprocess_summary(recording_id): + """Reprocess summary for a given recording (requires existing transcription).""" + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'You do not have permission to reprocess this recording'}), 403 + + # Check if transcription exists + if not recording.transcription or len(recording.transcription.strip()) < 10: + return jsonify({'error': 'No valid transcription available for summary generation'}), 400 + + # Check if transcription is an error message (not actual content) + if is_transcription_error(recording.transcription): + return jsonify({'error': 'Cannot generate summary: transcription failed. Please reprocess the transcription first.'}), 400 + + # Check if already processing + if recording.status in ['PROCESSING', 'SUMMARIZING']: + return jsonify({'error': 'Recording is already being processed'}), 400 + + # Check if OpenRouter client is available + if client is None: + return jsonify({'error': 'Summary service is not available (OpenRouter client not configured)'}), 503 + + # Get custom prompt from request if provided + data = request.get_json() or {} + custom_prompt = data.get('custom_prompt', '').strip() if data.get('custom_prompt') else None + + # Debug logging + if custom_prompt: + current_app.logger.info(f"Received custom prompt override for recording {recording_id} (length: {len(custom_prompt)})") + else: + current_app.logger.info(f"No custom prompt override provided for recording {recording_id}, will use default priority") + + # Clear existing summary (status will be set to QUEUED by job_queue.enqueue) + recording.summary = None + + # Clear existing events since they might be re-extracted during summary generation + Event.query.filter_by(recording_id=recording_id).delete() + + db.session.commit() + + current_app.logger.info(f"Queueing summary reprocessing for recording {recording_id}" + + (f" with custom prompt (length: {len(custom_prompt)})" if custom_prompt else "")) + + # Queue summary generation job + job_params = { + 'custom_prompt': custom_prompt, + 'user_id': current_user.id + } + job_queue.enqueue( + user_id=current_user.id, + recording_id=recording.id, + job_type='reprocess_summary', + params=job_params + ) + + # Refresh recording to get updated status + db.session.refresh(recording) + + # Return recording with per-user status + recording_dict = recording.to_dict(viewer_user=current_user) + enrich_recording_dict_with_user_status(recording_dict, recording, current_user) + return jsonify({ + 'success': True, + 'message': 'Summary reprocessing started', + 'recording': recording_dict + }) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error reprocessing summary for recording {recording_id}: {e}") + return jsonify({'error': str(e)}), 500 + + + +@recordings_bp.route('/recording//reset_status', methods=['POST']) +@login_required +def reset_status(recording_id): + """Resets the status of a stuck or failed recording.""" + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'You do not have permission to modify this recording'}), 403 + + # Allow resetting if it's stuck or failed + if recording.status in ['PENDING', 'PROCESSING', 'SUMMARIZING', 'FAILED']: + recording.status = 'FAILED' + recording.error_message = "Manually reset from stuck or failed state." + db.session.commit() + current_app.logger.info(f"Manually reset status for recording {recording_id} to FAILED.") + + # Return recording with per-user status + recording_dict = recording.to_dict(viewer_user=current_user) + enrich_recording_dict_with_user_status(recording_dict, recording, current_user) + return jsonify({'success': True, 'message': 'Recording status has been reset.', 'recording': recording_dict}) + else: + return jsonify({'error': f'Recording is not in a state that can be reset. Current status: {recording.status}'}), 400 + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error resetting status for recording {recording_id}: {e}") + return jsonify({'error': str(e)}), 500 + +# --- Authentication Routes --- + + +@recordings_bp.route('/') +@login_required +def index(): + # Check if user is a group admin + is_team_admin = GroupMembership.query.filter_by( + user_id=current_user.id, + role='admin' + ).first() is not None + + # Pass the ASR config, inquire mode config, and user language preference to the template + user_language = current_user.ui_language if current_user.is_authenticated and current_user.ui_language else 'en' + + # Calculate if archive toggle should be shown (only when audio-only deletion mode is active) + enable_archive_toggle = ENABLE_AUTO_DELETION and DELETION_MODE == 'audio_only' + + # Get connector capabilities (new architecture) + # Defaults to USE_ASR_ENDPOINT for backwards compatibility + connector_supports_diarization = USE_ASR_ENDPOINT + connector_supports_speaker_count = USE_ASR_ENDPOINT # ASR endpoint supports min/max speakers + if USE_NEW_TRANSCRIPTION_ARCHITECTURE: + try: + from src.services.transcription import get_registry + registry = get_registry() + connector = registry.get_active_connector() + if connector: + connector_supports_diarization = connector.supports_diarization + connector_supports_speaker_count = connector.supports_speaker_count_control + except Exception as e: + current_app.logger.warning(f"Could not get connector capabilities: {e}") + + return render_template('index.html', + use_asr_endpoint=USE_ASR_ENDPOINT, # Backwards compat + connector_supports_diarization=connector_supports_diarization, + connector_supports_speaker_count=connector_supports_speaker_count, + inquire_mode_enabled=ENABLE_INQUIRE_MODE, + enable_archive_toggle=enable_archive_toggle, + enable_internal_sharing=ENABLE_INTERNAL_SHARING, + user_language=user_language, + is_team_admin=is_team_admin) + + + +def get_accessible_recording_ids(user_id): + """ + Get all recording IDs that a user has access to. + + Includes: + - Recordings owned by the user + - Recordings shared with the user via InternalShare + - Recordings shared via group tags (if team membership exists) + + Args: + user_id (int): User ID to check access for + + Returns: + list: List of recording IDs the user can access + """ + accessible_ids = set() + + # 1. User's own recordings + own_recordings = db.session.query(Recording.id).filter_by(user_id=user_id).all() + accessible_ids.update([r.id for r in own_recordings]) + + # 2. Internally shared recordings + if ENABLE_INTERNAL_SHARING: + shared_recordings = db.session.query(InternalShare.recording_id).filter_by( + shared_with_user_id=user_id + ).all() + accessible_ids.update([r.recording_id for r in shared_recordings]) + + return list(accessible_ids) + + +@recordings_bp.route('/recordings', methods=['GET']) +def get_recordings(): + """Get all recordings for the current user (simple list).""" + try: + # Check if user is logged in + if not current_user.is_authenticated: + return jsonify([]) # Return empty array if not logged in + + # Filter recordings by the current user + stmt = select(Recording).where(Recording.user_id == current_user.id).order_by(Recording.created_at.desc()) + recordings = db.session.execute(stmt).scalars().all() + return jsonify([recording.to_dict(viewer_user=current_user) for recording in recordings]) + except Exception as e: + current_app.logger.error(f"Error fetching recordings: {e}") + return jsonify({'error': str(e)}), 500 + + +@recordings_bp.route('/api/recordings', methods=['GET']) +@login_required +def get_recordings_paginated(): + """Get recordings with pagination and server-side filtering (includes shared recordings).""" + import re + try: + # Parse query parameters + page = request.args.get('page', 1, type=int) + per_page = min(request.args.get('per_page', 25, type=int), 100) # Cap at 100 per page + search_query = request.args.get('q', '').strip() + show_archived = request.args.get('archived', '').lower() == 'true' + show_shared = request.args.get('shared', '').lower() == 'true' + show_starred = request.args.get('starred', '').lower() == 'true' + show_inbox = request.args.get('inbox', '').lower() == 'true' + sort_by = request.args.get('sort_by', 'created_at') # 'created_at' or 'meeting_date' + folder_filter = request.args.get('folder', '').strip() # folder_id or 'none' for no folder + + # Get all accessible recording IDs (own + shared) + accessible_recording_ids = get_accessible_recording_ids(current_user.id) + + if not accessible_recording_ids: + return jsonify({ + 'recordings': [], + 'pagination': { + 'page': page, + 'per_page': per_page, + 'total': 0, + 'total_pages': 0, + 'has_next': False, + 'has_prev': False + } + }) + + # Build base query to include accessible recordings + stmt = select(Recording).where(Recording.id.in_(accessible_recording_ids)) + + # Apply archived filter (AND with other filters) + if show_archived: + # Only show recordings where audio has been deleted + stmt = stmt.where(Recording.audio_deleted_at.is_not(None)) + + # Apply shared filter (AND with other filters) + if show_shared: + # Only show recordings shared with current user (not owned by them) + stmt = stmt.where(Recording.user_id != current_user.id) + + # Apply starred filter (AND with other filters) + # For starred/inbox we need to consider both owned recordings and shared recordings + if show_starred: + from src.models.sharing import SharedRecordingState + # For owned recordings: check Recording.is_highlighted + # For shared recordings: check SharedRecordingState.is_highlighted + starred_subq = select(SharedRecordingState.recording_id).where( + db.and_( + SharedRecordingState.user_id == current_user.id, + SharedRecordingState.is_highlighted == True + ) + ).scalar_subquery() + stmt = stmt.where( + db.or_( + db.and_(Recording.user_id == current_user.id, Recording.is_highlighted == True), + Recording.id.in_(starred_subq) + ) + ) + + # Apply inbox filter (AND with other filters) + if show_inbox: + from src.models.sharing import SharedRecordingState + # For owned recordings: check Recording.is_inbox + # For shared recordings: check SharedRecordingState.is_inbox + inbox_subq = select(SharedRecordingState.recording_id).where( + db.and_( + SharedRecordingState.user_id == current_user.id, + SharedRecordingState.is_inbox == True + ) + ).scalar_subquery() + stmt = stmt.where( + db.or_( + db.and_(Recording.user_id == current_user.id, Recording.is_inbox == True), + Recording.id.in_(inbox_subq) + ) + ) + + # Apply folder filter (AND with other filters) + if folder_filter: + if folder_filter.lower() == 'none': + # Filter recordings with no folder + stmt = stmt.where(Recording.folder_id.is_(None)) + else: + # Filter by specific folder_id + try: + folder_id = int(folder_filter) + stmt = stmt.where(Recording.folder_id == folder_id) + except ValueError: + pass # Invalid folder_id, ignore filter + + # Apply search filters if provided + if search_query: + # Extract date filters + date_filters = re.findall(r'date:(\S+)', search_query.lower()) + date_from_filters = re.findall(r'date_from:(\S+)', search_query.lower()) + date_to_filters = re.findall(r'date_to:(\S+)', search_query.lower()) + tag_filters = re.findall(r'tag:(\S+)', search_query.lower()) + speaker_filters = re.findall(r'speaker:(\S+)', search_query.lower()) + + # Remove special syntax to get text search + text_query = re.sub(r'date:\S+', '', search_query, flags=re.IGNORECASE) + text_query = re.sub(r'date_from:\S+', '', text_query, flags=re.IGNORECASE) + text_query = re.sub(r'date_to:\S+', '', text_query, flags=re.IGNORECASE) + text_query = re.sub(r'tag:\S+', '', text_query, flags=re.IGNORECASE) + text_query = re.sub(r'speaker:\S+', '', text_query, flags=re.IGNORECASE).strip() + + # Apply date filters + for date_filter in date_filters: + if date_filter == 'today': + today = datetime.now().date() + stmt = stmt.where( + db.or_( + db.func.date(Recording.meeting_date) == today, + db.and_( + Recording.meeting_date.is_(None), + db.func.date(Recording.created_at) == today + ) + ) + ) + elif date_filter == 'yesterday': + yesterday = datetime.now().date() - timedelta(days=1) + stmt = stmt.where( + db.or_( + db.func.date(Recording.meeting_date) == yesterday, + db.and_( + Recording.meeting_date.is_(None), + db.func.date(Recording.created_at) == yesterday + ) + ) + ) + elif date_filter == 'thisweek': + today = datetime.now().date() + start_of_week = today - timedelta(days=today.weekday()) + stmt = stmt.where( + db.or_( + Recording.meeting_date >= start_of_week, + db.and_( + Recording.meeting_date.is_(None), + db.func.date(Recording.created_at) >= start_of_week + ) + ) + ) + elif date_filter == 'lastweek': + today = datetime.now().date() + end_of_last_week = today - timedelta(days=today.weekday()) + start_of_last_week = end_of_last_week - timedelta(days=7) + stmt = stmt.where( + db.or_( + db.and_( + Recording.meeting_date >= start_of_last_week, + Recording.meeting_date < end_of_last_week + ), + db.and_( + Recording.meeting_date.is_(None), + db.func.date(Recording.created_at) >= start_of_last_week, + db.func.date(Recording.created_at) < end_of_last_week + ) + ) + ) + elif date_filter == 'thismonth': + today = datetime.now().date() + start_of_month = today.replace(day=1) + stmt = stmt.where( + db.or_( + Recording.meeting_date >= start_of_month, + db.and_( + Recording.meeting_date.is_(None), + db.func.date(Recording.created_at) >= start_of_month + ) + ) + ) + elif date_filter == 'lastmonth': + today = datetime.now().date() + first_day_this_month = today.replace(day=1) + last_day_last_month = first_day_this_month - timedelta(days=1) + first_day_last_month = last_day_last_month.replace(day=1) + stmt = stmt.where( + db.or_( + db.and_( + Recording.meeting_date >= first_day_last_month, + Recording.meeting_date <= last_day_last_month + ), + db.and_( + Recording.meeting_date.is_(None), + db.func.date(Recording.created_at) >= first_day_last_month, + db.func.date(Recording.created_at) <= last_day_last_month + ) + ) + ) + elif re.match(r'^\d{4}-\d{2}-\d{2}$', date_filter): + # Specific date format YYYY-MM-DD + target_date = datetime.strptime(date_filter, '%Y-%m-%d').date() + stmt = stmt.where( + db.or_( + db.func.date(Recording.meeting_date) == target_date, + db.and_( + Recording.meeting_date.is_(None), + db.func.date(Recording.created_at) == target_date + ) + ) + ) + elif re.match(r'^\d{4}-\d{2}$', date_filter): + # Month format YYYY-MM + year, month = map(int, date_filter.split('-')) + stmt = stmt.where( + db.or_( + db.and_( + db.extract('year', Recording.meeting_date) == year, + db.extract('month', Recording.meeting_date) == month + ), + db.and_( + Recording.meeting_date.is_(None), + db.extract('year', Recording.created_at) == year, + db.extract('month', Recording.created_at) == month + ) + ) + ) + elif re.match(r'^\d{4}$', date_filter): + # Year format YYYY + year = int(date_filter) + stmt = stmt.where( + db.or_( + db.extract('year', Recording.meeting_date) == year, + db.and_( + Recording.meeting_date.is_(None), + db.extract('year', Recording.created_at) == year + ) + ) + ) + + # Apply date range filters + if date_from_filters and date_from_filters[0]: + try: + date_from = datetime.strptime(date_from_filters[0], '%Y-%m-%d').date() + stmt = stmt.where( + db.or_( + Recording.meeting_date >= date_from, + db.and_( + Recording.meeting_date.is_(None), + db.func.date(Recording.created_at) >= date_from + ) + ) + ) + except ValueError: + pass # Invalid date format, ignore + + if date_to_filters and date_to_filters[0]: + try: + date_to = datetime.strptime(date_to_filters[0], '%Y-%m-%d').date() + stmt = stmt.where( + db.or_( + Recording.meeting_date <= date_to, + db.and_( + Recording.meeting_date.is_(None), + db.func.date(Recording.created_at) <= date_to + ) + ) + ) + except ValueError: + pass # Invalid date format, ignore + + # Apply tag filters + if tag_filters: + # Join with tags table and filter by tag names + tag_conditions = [] + for tag_filter in tag_filters: + # Replace underscores back to spaces for matching + tag_name = tag_filter.replace('_', ' ') + tag_conditions.append(Tag.name.ilike(f'%{tag_name}%')) + + stmt = stmt.join(RecordingTag).join(Tag).where(db.or_(*tag_conditions)) + + # Apply speaker filters + if speaker_filters: + speaker_conditions = [] + for speaker_filter in speaker_filters: + # Replace underscores back to spaces for matching + speaker_name = speaker_filter.replace('_', ' ') + speaker_conditions.append(Recording.participants.ilike(f'%{speaker_name}%')) + stmt = stmt.where(db.or_(*speaker_conditions)) + + # Apply text search + if text_query: + from src.models.sharing import SharedRecordingState + + # Search in user-specific notes: + # - For owned recordings: search Recording.notes + # - For shared recordings: search SharedRecordingState.personal_notes + + text_conditions = [ + Recording.title.ilike(f'%{text_query}%'), + Recording.participants.ilike(f'%{text_query}%'), + Recording.transcription.ilike(f'%{text_query}%'), + # Search owner's notes for owned recordings + db.and_( + Recording.user_id == current_user.id, + Recording.notes.ilike(f'%{text_query}%') + ) + ] + + # Add search for personal notes in shared recordings + # Use a subquery to check if personal_notes match + shared_notes_subq = select(SharedRecordingState.recording_id).where( + db.and_( + SharedRecordingState.user_id == current_user.id, + SharedRecordingState.personal_notes.ilike(f'%{text_query}%') + ) + ).scalar_subquery() + + text_conditions.append(Recording.id.in_(shared_notes_subq)) + + stmt = stmt.where(db.or_(*text_conditions)) + + # Apply ordering based on sort_by parameter + if sort_by == 'meeting_date': + # Sort by meeting_date first, fall back to created_at if no meeting_date + stmt = stmt.order_by( + db.case( + (Recording.meeting_date.is_not(None), Recording.meeting_date), + else_=db.func.date(Recording.created_at) + ).desc(), + Recording.created_at.desc() + ) + else: + # Default: sort by created_at (upload/processing date) + stmt = stmt.order_by(Recording.created_at.desc()) + + # Get total count for pagination info + count_stmt = select(db.func.count()).select_from(stmt.subquery()) + total_count = db.session.execute(count_stmt).scalar() + + # Apply pagination + offset = (page - 1) * per_page + stmt = stmt.offset(offset).limit(per_page) + + # Execute query + recordings = db.session.execute(stmt).scalars().all() + + # Enrich recordings with sharing metadata + enriched_recordings = [] + for recording in recordings: + rec_dict = recording.to_list_dict(viewer_user=current_user) + + # Add sharing metadata + is_owner = recording.user_id == current_user.id + rec_dict['is_owner'] = is_owner + + # Get per-user status (owner uses Recording fields, recipients use SharedRecordingState) + user_inbox, user_highlighted = get_user_recording_status(recording, current_user) + rec_dict['is_inbox'] = user_inbox + rec_dict['is_highlighted'] = user_highlighted + + # Add edit permission info (uses has_recording_access which checks group admin status) + rec_dict['can_edit'] = has_recording_access(recording, current_user, require_edit=True) + + # Add delete permission info (only owner can delete) + rec_dict['can_delete'] = is_owner and (USERS_CAN_DELETE or current_user.is_admin) + + if not is_owner: + # This is a shared recording - get owner info and share permissions + owner = User.query.get(recording.user_id) + rec_dict['owner_username'] = owner.username if owner else "Unknown" + rec_dict['is_shared'] = True + # Don't show outgoing share count for recordings you don't own + rec_dict['shared_with_count'] = 0 + rec_dict['public_share_count'] = 0 + + # Get share permissions + share = InternalShare.query.filter_by( + recording_id=recording.id, + shared_with_user_id=current_user.id + ).first() + + if share: + rec_dict['share_info'] = { + 'share_id': share.id, + 'owner_username': owner.username if owner else "Unknown", + 'can_edit': share.can_edit, + 'can_reshare': share.can_reshare, + 'shared_at': share.created_at.isoformat() + } + else: + # Fallback if share record not found (shouldn't happen) + rec_dict['share_info'] = { + 'can_edit': False, + 'can_reshare': False + } + else: + rec_dict['is_shared'] = False + + # Check if recording has group tags (among visible tags) + visible_tags = recording.get_visible_tags(current_user) + has_group_tags = any(tag.is_group_tag for tag in visible_tags) + rec_dict['has_group_tags'] = has_group_tags + + enriched_recordings.append(rec_dict) + + # Calculate pagination metadata + total_pages = (total_count + per_page - 1) // per_page + has_next = page < total_pages + has_prev = page > 1 + + return jsonify({ + 'recordings': enriched_recordings, + 'pagination': { + 'page': page, + 'per_page': per_page, + 'total': total_count, + 'total_pages': total_pages, + 'has_next': has_next, + 'has_prev': has_prev + } + }) + + except Exception as e: + current_app.logger.error(f"Error fetching paginated recordings: {e}") + return jsonify({'error': str(e)}), 500 + + +@recordings_bp.route('/save', methods=['POST']) +@login_required +def save_metadata(): + """Save recording metadata (title, participants, notes, summary, etc.).""" + try: + data = request.json + if not data: + return jsonify({'error': 'No data provided'}), 400 + recording_id = data.get('id') + if not recording_id: + return jsonify({'error': 'No recording ID provided'}), 400 + + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + # Check if user has at least view access + if not has_recording_access(recording, current_user, require_edit=False): + return jsonify({'error': 'You do not have permission to access this recording'}), 403 + + # Handle notes separately - no edit permission required (user-specific) + if 'notes' in data: + if recording.user_id == current_user.id: + # Owner saves to Recording.notes + recording.notes = sanitize_html(data['notes']) if data['notes'] else data['notes'] + else: + # Shared user saves to personal_notes (requires SharedRecordingState) + from src.models.sharing import SharedRecordingState + state = SharedRecordingState.query.filter_by( + recording_id=recording.id, + user_id=current_user.id + ).first() + + if not state: + # Create SharedRecordingState if it doesn't exist + state = SharedRecordingState( + recording_id=recording.id, + user_id=current_user.id, + is_inbox=True, + is_highlighted=False + ) + db.session.add(state) + + state.personal_notes = sanitize_html(data['notes']) if data['notes'] else data['notes'] + + # Determine if any fields requiring edit permission are being updated + edit_fields = ['title', 'participants', 'summary', 'meeting_date'] + requires_edit = any(field in data for field in edit_fields) + + # If edit fields are present, check for edit permission + if requires_edit and not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'You do not have permission to edit this recording'}), 403 + + # Update fields requiring edit permission + if requires_edit: + if 'title' in data: + recording.title = data['title'] + if 'participants' in data: + recording.participants = data['participants'] + if 'summary' in data: + recording.summary = sanitize_html(data['summary']) if data['summary'] else data['summary'] + if 'meeting_date' in data: + try: + date_str = data['meeting_date'] + if date_str: + # Try to parse as full ISO datetime first + try: + recording.meeting_date = datetime.fromisoformat(date_str.replace('Z', '+00:00')) + except (ValueError, AttributeError): + # Fall back to date-only format, preserve existing time if available + parsed_date = datetime.strptime(date_str, '%Y-%m-%d') + if recording.meeting_date: + # Preserve existing time + existing_time = recording.meeting_date.time() + recording.meeting_date = datetime.combine(parsed_date.date(), existing_time) + else: + # No existing time, use the parsed date with midnight time + recording.meeting_date = parsed_date + else: + recording.meeting_date = None + except (ValueError, TypeError) as e: + current_app.logger.warning(f"Could not parse meeting_date '{data.get('meeting_date')}': {e}") + + # Handle per-user status fields (only requires view permission) + if 'is_inbox' in data or 'is_highlighted' in data: + set_user_recording_status( + recording, + current_user, + is_inbox=data.get('is_inbox'), + is_highlighted=data.get('is_highlighted') + ) + + db.session.commit() + + # Re-export the recording if auto-export is enabled and editable fields were changed + if requires_edit: + export_recording(recording_id) + + # Return recording with per-user status + recording_dict = recording.to_dict(viewer_user=current_user) + enrich_recording_dict_with_user_status(recording_dict, recording, current_user) + return jsonify({'success': True, 'recording': recording_dict}) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error saving metadata for recording {data.get('id')}: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred while saving.'}), 500 + + +@recordings_bp.route('/recording//update_transcription', methods=['POST']) +@login_required +def update_transcription(recording_id): + """Updates the transcription content for a recording.""" + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'You do not have permission to edit this recording'}), 403 + + data = request.json + new_transcription = data.get('transcription') + + if new_transcription is None: + return jsonify({'error': 'No transcription data provided'}), 400 + + # The incoming data could be a JSON string (from ASR edit) or plain text + recording.transcription = new_transcription + + # Optional: If the transcription changes, we might want to indicate that the summary is outdated. + # For now, we'll just save the transcript. A "regenerate summary" button could be a good follow-up. + + db.session.commit() + current_app.logger.info(f"Transcription for recording {recording_id} was updated.") + + # Re-export the recording if auto-export is enabled + export_recording(recording_id) + + # Return recording with per-user status + recording_dict = recording.to_dict(viewer_user=current_user) + enrich_recording_dict_with_user_status(recording_dict, recording, current_user) + return jsonify({'success': True, 'message': 'Transcription updated successfully.', 'recording': recording_dict}) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error updating transcription for recording {recording_id}: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred while updating the transcription.'}), 500 + +# Toggle inbox status endpoint + + +@recordings_bp.route('/recording//toggle_inbox', methods=['POST']) +@login_required +def toggle_inbox(recording_id): + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + # Only require view access (not edit) - users can manage their own inbox status + if not has_recording_access(recording, current_user, require_edit=False): + return jsonify({'error': 'You do not have permission to view this recording'}), 403 + + # Get current status and toggle it + current_inbox, current_highlighted = get_user_recording_status(recording, current_user) + new_inbox, new_highlighted = set_user_recording_status(recording, current_user, is_inbox=not current_inbox) + + return jsonify({'success': True, 'is_inbox': new_inbox}) + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error toggling inbox status for recording {recording_id}: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred.'}), 500 + +# Toggle highlighted status endpoint + + +@recordings_bp.route('/recording//toggle_highlight', methods=['POST']) +@login_required +def toggle_highlight(recording_id): + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + # Only require view access (not edit) - users can manage their own highlight status + if not has_recording_access(recording, current_user, require_edit=False): + return jsonify({'error': 'You do not have permission to view this recording'}), 403 + + # Get current status and toggle it + current_inbox, current_highlighted = get_user_recording_status(recording, current_user) + new_inbox, new_highlighted = set_user_recording_status(recording, current_user, is_highlighted=not current_highlighted) + + return jsonify({'success': True, 'is_highlighted': new_highlighted}) + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error toggling highlighted status for recording {recording_id}: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred.'}), 500 + + + + +@recordings_bp.route('/upload', methods=['POST']) +@login_required +def upload_file(): + try: + if 'file' not in request.files: + return jsonify({'error': 'No file provided'}), 400 + + file = request.files['file'] + if file.filename == '': + return jsonify({'error': 'No file selected'}), 400 + + original_filename = file.filename + safe_filename = secure_filename(original_filename) + filepath = os.path.join(current_app.config['UPLOAD_FOLDER'], f"{datetime.now().strftime('%Y%m%d%H%M%S')}_{safe_filename}") + + # Get original file size + file.seek(0, os.SEEK_END) + original_file_size = file.tell() + file.seek(0) + + # Check size limit before saving - only enforce if chunking is disabled or connector handles it + max_content_length = current_app.config.get('MAX_CONTENT_LENGTH') + + # Get connector specifications for chunking decisions + connector_specs = None + if USE_NEW_TRANSCRIPTION_ARCHITECTURE: + try: + from src.services.transcription import get_registry + registry = get_registry() + connector = registry.get_active_connector() + if connector: + connector_specs = connector.specifications + except Exception as e: + current_app.logger.warning(f"Could not get connector specs for upload: {e}") + + # Skip size check if chunking is enabled (app-level or connector handles internally) + should_enforce_size_limit = True + if chunking_service: + from src.audio_chunking import get_effective_chunking_config + chunking_config = get_effective_chunking_config(connector_specs) + if chunking_config.enabled or chunking_config.source == 'connector_internal': + should_enforce_size_limit = False + if chunking_config.source == 'connector_internal': + current_app.logger.info(f"Connector handles chunking internally - skipping {original_file_size/1024/1024:.1f}MB size limit check") + elif chunking_config.mode == 'size': + current_app.logger.info(f"Size-based chunking enabled ({chunking_config.limit_value}MB, source={chunking_config.source}) - skipping {original_file_size/1024/1024:.1f}MB size limit check") + else: + current_app.logger.info(f"Duration-based chunking enabled ({chunking_config.limit_value}s, source={chunking_config.source}) - skipping {original_file_size/1024/1024:.1f}MB size limit check") + + if should_enforce_size_limit and max_content_length and original_file_size > max_content_length: + raise RequestEntityTooLarge() + + file.save(filepath) + current_app.logger.info(f"File saved to {filepath}") + + # Compute file hash on the ORIGINAL upload before any conversion/compression. + # Lossy re-encoding (e.g. FLAC→MP3) produces different bytes each run, + # so hashing after conversion would miss duplicates. + file_hash = None + duplicate_warning = None + try: + file_hash = compute_file_sha256(filepath) + existing = Recording.query.filter_by( + user_id=current_user.id, file_hash=file_hash + ).first() + if existing: + duplicate_warning = { + 'existing_recording_id': existing.id, + 'existing_title': existing.title, + 'existing_created_at': existing.created_at.isoformat() if existing.created_at else None + } + current_app.logger.info( + f"Duplicate file detected for user {current_user.id}: " + f"hash={file_hash[:12]}... matches recording {existing.id}" + ) + except Exception as e: + current_app.logger.warning(f"Could not compute file hash: {e}") + + # --- Convert files only when chunking is needed --- + filename_lower = original_filename.lower() + + # Check if chunking will be needed for this file (uses connector-aware logic) + needs_chunking_for_processing = bool( + chunking_service and + chunking_service.needs_chunking(filepath, USE_ASR_ENDPOINT, connector_specs) + ) + + # Probe once and use shared conversion utility + # Scale timeout based on file size — large files (especially MP4 with moov at end) need more time + file_size_mb = os.path.getsize(filepath) / (1024 * 1024) + probe_timeout = max(10, min(60, int(file_size_mb / 10))) # 10s min, scales ~1s per 10MB, 60s max + codec_info = None + try: + codec_info = get_codec_info(filepath, timeout=probe_timeout) + current_app.logger.info( + f"Detected codec for {original_filename}: " + f"audio_codec={codec_info.get('audio_codec')}, " + f"has_video={codec_info.get('has_video', False)}" + ) + except FFProbeError as e: + current_app.logger.warning(f"Failed to probe {original_filename} (timeout={probe_timeout}s): {e}. Will attempt conversion.") + codec_info = None + + # Video retention/passthrough: skip conversion for videos, processing pipeline handles extraction + has_video = codec_info.get('has_video', False) if codec_info else False + + # Fallback: if probe failed but VIDEO_RETENTION or VIDEO_PASSTHROUGH_ASR is on, check file extension + # to avoid silently discarding video from files we couldn't probe + if codec_info is None and (VIDEO_RETENTION or VIDEO_PASSTHROUGH_ASR) and not has_video: + video_extensions = {'.mp4', '.mov', '.mkv', '.avi', '.webm', '.m4v', '.wmv', '.flv', '.ts', '.mts'} + file_ext = os.path.splitext(original_filename)[1].lower() + if file_ext in video_extensions: + has_video = True + current_app.logger.info( + f"Probe failed but file extension '{file_ext}' indicates video — " + f"treating as video for {'VIDEO_PASSTHROUGH_ASR' if VIDEO_PASSTHROUGH_ASR else 'VIDEO_RETENTION'}" + ) + if (VIDEO_RETENTION or VIDEO_PASSTHROUGH_ASR) and has_video: + current_app.logger.info(f"Video {'passthrough' if VIDEO_PASSTHROUGH_ASR else 'retention'}: keeping original video, skipping conversion") + else: + # Use shared conversion utility - handles ALL conversion needs (codec conversion + compression) + try: + result = convert_if_needed( + filepath, + original_filename=original_filename, + codec_info=codec_info, + needs_chunking=needs_chunking_for_processing, + is_asr_endpoint=USE_ASR_ENDPOINT, + delete_original=True, + connector_specs=connector_specs # Pass connector specs for codec restrictions + ) + filepath = result.output_path + + # Log what happened + if result.was_converted: + current_app.logger.info(f"File converted: {result.original_codec} -> {result.final_codec}") + if result.was_compressed: + current_app.logger.info(f"File compressed: {result.size_reduction_percent:.1f}% size reduction") + + except FFmpegNotFoundError as e: + current_app.logger.error(f"FFmpeg not found: {e}") + return jsonify({'error': 'Audio conversion tool (FFmpeg) not found on server.'}), 500 + except FFmpegError as e: + current_app.logger.error(f"FFmpeg conversion failed for {filepath}: {e}") + return jsonify({'error': f'Failed to convert audio file: {str(e)}'}), 500 + + # Get final file size (of original or converted file) + final_file_size = os.path.getsize(filepath) + + # (file_hash and duplicate_warning already computed above, before conversion) + + # Determine MIME type of the final file + mime_type, _ = mimetypes.guess_type(filepath) + current_app.logger.info(f"Final MIME type: {mime_type} for file {filepath}") + + # Get notes from the form + notes = request.form.get('notes') + + # Get file's lastModified timestamp from client (milliseconds since epoch) + file_last_modified = request.form.get('file_last_modified') + + # Get selected tags if provided (multiple tags support) + selected_tags = [] + tag_index = 0 + while True: + tag_id_key = f'tag_ids[{tag_index}]' + tag_id = request.form.get(tag_id_key) + if not tag_id: + break + + # Check if tag belongs to user OR is a group tag where user is a member + tag = Tag.query.filter_by(id=tag_id).first() + if tag: + # Allow tag if it's user's own tag OR it's a group tag where user is a member + if tag.user_id == current_user.id or (tag.group_id and GroupMembership.query.filter_by(group_id=tag.group_id, user_id=current_user.id).first()): + selected_tags.append(tag) + tag_index += 1 + + # For backward compatibility with single tag uploads + if not selected_tags: + single_tag_id = request.form.get('tag_id') + if single_tag_id: + # Check if tag belongs to user OR is a group tag where user is a member + tag = Tag.query.filter_by(id=single_tag_id).first() + if tag and (tag.user_id == current_user.id or (tag.group_id and GroupMembership.query.filter_by(group_id=tag.group_id, user_id=current_user.id).first())): + selected_tags.append(tag) + + # Get folder_id if provided + selected_folder = None + folder_id = request.form.get('folder_id') + if folder_id: + folder = Folder.query.filter_by(id=folder_id).first() + if folder: + # Allow folder if it's user's own folder OR it's a group folder where user is a member + if folder.user_id == current_user.id or (folder.group_id and GroupMembership.query.filter_by(group_id=folder.group_id, user_id=current_user.id).first()): + selected_folder = folder + + # Get ASR advanced options if provided + language = request.form.get('language', '') + min_speakers = request.form.get('min_speakers') or None + max_speakers = request.form.get('max_speakers') or None + hotwords = request.form.get('hotwords', '').strip() or None + initial_prompt = request.form.get('initial_prompt', '').strip() or None + + # Convert to int if provided + if min_speakers: + try: + min_speakers = int(min_speakers) + except (ValueError, TypeError): + min_speakers = None + if max_speakers: + try: + max_speakers = int(max_speakers) + except (ValueError, TypeError): + max_speakers = None + + # Apply precedence hierarchy: user input > tag defaults > folder defaults > environment variables > user defaults > auto-detect + + # Apply folder defaults first (lower priority than tags) + if selected_folder and not selected_tags: + # Only apply folder defaults if no tags are selected (tags take priority) + if not language and selected_folder.default_language: + language = selected_folder.default_language + if min_speakers is None and selected_folder.default_min_speakers: + min_speakers = selected_folder.default_min_speakers + if max_speakers is None and selected_folder.default_max_speakers: + max_speakers = selected_folder.default_max_speakers + if not hotwords and selected_folder.default_hotwords: + hotwords = selected_folder.default_hotwords + if not initial_prompt and selected_folder.default_initial_prompt: + initial_prompt = selected_folder.default_initial_prompt + + # Apply tag defaults if tags are selected and values are not explicitly provided by user + # Use first tag's defaults (highest priority - overrides folder) + if selected_tags: + first_tag = selected_tags[0] + if not language and first_tag.default_language: + language = first_tag.default_language + if min_speakers is None and first_tag.default_min_speakers: + min_speakers = first_tag.default_min_speakers + if max_speakers is None and first_tag.default_max_speakers: + max_speakers = first_tag.default_max_speakers + if not hotwords and first_tag.default_hotwords: + hotwords = first_tag.default_hotwords + if not initial_prompt and first_tag.default_initial_prompt: + initial_prompt = first_tag.default_initial_prompt + + # Apply environment variable defaults if still no values are set + if min_speakers is None and ASR_MIN_SPEAKERS: + try: + min_speakers = int(ASR_MIN_SPEAKERS) + except (ValueError, TypeError): + min_speakers = None + if max_speakers is None and ASR_MAX_SPEAKERS: + try: + max_speakers = int(ASR_MAX_SPEAKERS) + except (ValueError, TypeError): + max_speakers = None + + # Fall back to user defaults if still not set + if not language and current_user.transcription_language: + language = current_user.transcription_language + current_app.logger.info(f"Using user's default transcription language: {language}") + if not hotwords and current_user.transcription_hotwords: + hotwords = current_user.transcription_hotwords + if not initial_prompt and current_user.transcription_initial_prompt: + initial_prompt = current_user.transcription_initial_prompt + + # Create initial database entry + now = datetime.utcnow() + + # Determine meeting_date: prefer client-provided lastModified, then file metadata, then current time + meeting_date = None + + # First try client-provided file lastModified (most reliable for uploads) + if file_last_modified: + try: + # JavaScript lastModified is in milliseconds since epoch + timestamp_ms = int(file_last_modified) + meeting_date = datetime.fromtimestamp(timestamp_ms / 1000) + current_app.logger.info(f"Using client file lastModified: {meeting_date}") + except (ValueError, TypeError, OSError) as e: + current_app.logger.warning(f"Could not parse file_last_modified '{file_last_modified}': {e}") + + # Fall back to file metadata (creation_time, date tags, etc.) + if not meeting_date: + meeting_date = get_creation_date(filepath, use_file_mtime=False) + if meeting_date: + current_app.logger.info(f"Using file metadata creation date: {meeting_date}") + + # Final fallback to current time + if not meeting_date: + meeting_date = now + current_app.logger.debug("No file date available, using current time") + + recording = Recording( + audio_path=filepath, + original_filename=original_filename, + title=f"Recording - {original_filename}", + file_size=final_file_size, + status='PENDING', + meeting_date=meeting_date, + user_id=current_user.id, + mime_type=mime_type, + notes=notes, + folder_id=selected_folder.id if selected_folder else None, + processing_source='upload', # Track that this was manually uploaded + file_hash=file_hash + ) + db.session.add(recording) + audit_access('upload', 'recording', recording.id, details={'filename': original_filename, 'size_bytes': original_file_size}) + db.session.commit() # commit recording + audit en une transaction atomique + + # Add tags to recording if selected (preserve order) + for order, tag in enumerate(selected_tags, 1): + new_association = RecordingTag( + recording_id=recording.id, + tag_id=tag.id, + order=order, + added_at=datetime.utcnow() + ) + db.session.add(new_association) + + if selected_tags: + db.session.commit() + tag_names = [tag.name for tag in selected_tags] + current_app.logger.info(f"Added {len(selected_tags)} tags to recording {recording.id}: {', '.join(tag_names)}") + + current_app.logger.info(f"Initial recording record created with ID: {recording.id}") + + # --- Queue transcription job --- + first_tag = selected_tags[0] if selected_tags else None + job_params = { + 'language': language, + 'min_speakers': min_speakers, + 'max_speakers': max_speakers, + 'tag_id': first_tag.id if first_tag else None, + 'hotwords': hotwords, + 'initial_prompt': initial_prompt, + } + + current_app.logger.info(f"Queueing transcription for recording {recording.id} with params: {job_params}") + job_queue.enqueue( + user_id=current_user.id, + recording_id=recording.id, + job_type='transcribe', + params=job_params, + is_new_upload=True + ) + current_app.logger.info(f"Transcription job queued for recording ID: {recording.id}") + + response_data = recording.to_dict(viewer_user=current_user) + if duplicate_warning: + response_data['duplicate_warning'] = duplicate_warning + return jsonify(response_data), 202 + + except RequestEntityTooLarge: + max_size_mb = current_app.config['MAX_CONTENT_LENGTH'] / (1024 * 1024) + current_app.logger.warning(f"Upload failed: File too large (>{max_size_mb}MB)") + return jsonify({ + 'error': f'File too large. Maximum size is {max_size_mb:.0f} MB.', + 'max_size_mb': max_size_mb + }), 413 + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error during file upload: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred during upload.'}), 500 + + +@recordings_bp.route('/api/recordings/incognito', methods=['POST']) +@login_required +def upload_incognito(): + """ + Process audio in incognito mode - no database storage. + Returns transcript/summary directly in response. + + This endpoint is designed for HIPAA-friendly transcription where + audio data is processed but never persisted to the database. + Results are returned directly and only stored client-side in sessionStorage. + """ + # Check if incognito mode is enabled + if not ENABLE_INCOGNITO_MODE: + return jsonify({'error': 'Incognito mode is not enabled on this server'}), 403 + + import tempfile + from datetime import datetime + from src.tasks.processing import transcribe_incognito, generate_incognito_summary + + temp_filepath = None + + try: + if 'file' not in request.files: + return jsonify({'error': 'No file provided'}), 400 + + file = request.files['file'] + if file.filename == '': + return jsonify({'error': 'No file selected'}), 400 + + original_filename = file.filename + safe_filename = secure_filename(original_filename) + + # Get file size + file.seek(0, os.SEEK_END) + file_size = file.tell() + file.seek(0) + + # Check size limit + max_content_length = current_app.config.get('MAX_CONTENT_LENGTH') + if max_content_length and file_size > max_content_length: + max_size_mb = max_content_length / (1024 * 1024) + return jsonify({ + 'error': f'File too large. Maximum size is {max_size_mb:.0f} MB.', + 'max_size_mb': max_size_mb + }), 413 + + # Save to temp file - use secure temp directory + with tempfile.NamedTemporaryFile(delete=False, suffix=f'_{safe_filename}') as tmp: + temp_filepath = tmp.name + file.save(temp_filepath) + current_app.logger.info(f"[Incognito] Temp file saved: {temp_filepath}") + + # Get optional parameters + # Note: Empty string '' means auto-detect, don't convert to None + language = request.form.get('language', '') + min_speakers = request.form.get('min_speakers') + max_speakers = request.form.get('max_speakers') + auto_summarize = request.form.get('auto_summarize', 'false').lower() == 'true' + + # Convert to int if provided + if min_speakers: + try: + min_speakers = int(min_speakers) + except (ValueError, TypeError): + min_speakers = None + if max_speakers: + try: + max_speakers = int(max_speakers) + except (ValueError, TypeError): + max_speakers = None + + # Log only metadata - NEVER log content for HIPAA compliance + current_app.logger.info(f"[Incognito] Processing request from user {current_user.id}: " + f"filename={original_filename}, size={file_size/1024/1024:.2f}MB, " + f"language={language}, auto_summarize={auto_summarize}") + + # Perform transcription synchronously (no database operations) + result = transcribe_incognito( + filepath=temp_filepath, + original_filename=original_filename, + language=language, + min_speakers=min_speakers, + max_speakers=max_speakers, + user=current_user + ) + + if result.get('error'): + current_app.logger.error(f"[Incognito] Transcription failed: {result['error']}") + return jsonify({ + 'incognito': True, + 'error': result['error'] + }), 500 + + # Optionally generate summary + summary = None + if auto_summarize and result.get('transcription'): + current_app.logger.info(f"[Incognito] Auto-summarize requested, generating summary...") + summary = generate_incognito_summary(result['transcription'], current_user) + + # Build response + # Render markdown to HTML for summary display + summary_html = None + if summary: + summary_html = md_to_html(summary) + + response_data = { + 'incognito': True, + 'transcription': result.get('transcription'), + 'summary': summary, + 'summary_html': summary_html, + 'title': result.get('title', 'Incognito Recording'), + 'audio_duration_seconds': result.get('audio_duration_seconds'), + 'processing_time_seconds': result.get('processing_time_seconds'), + 'created_at': datetime.utcnow().isoformat() + 'Z', + 'original_filename': original_filename, + 'file_size': file_size + } + + current_app.logger.info(f"[Incognito] Request completed successfully for user {current_user.id}") + + return jsonify(response_data), 200 + + except RequestEntityTooLarge: + max_size_mb = current_app.config['MAX_CONTENT_LENGTH'] / (1024 * 1024) + current_app.logger.warning(f"[Incognito] Upload failed: File too large (>{max_size_mb}MB)") + return jsonify({ + 'incognito': True, + 'error': f'File too large. Maximum size is {max_size_mb:.0f} MB.', + 'max_size_mb': max_size_mb + }), 413 + + except Exception as e: + current_app.logger.error(f"[Incognito] Error during processing: {e}", exc_info=True) + return jsonify({ + 'incognito': True, + 'error': 'An unexpected error occurred during processing.' + }), 500 + + finally: + # CRITICAL: Always delete temp file for HIPAA compliance + if temp_filepath and os.path.exists(temp_filepath): + try: + os.remove(temp_filepath) + current_app.logger.info(f"[Incognito] Temp file deleted: {temp_filepath}") + except Exception as cleanup_error: + current_app.logger.error(f"[Incognito] Failed to delete temp file {temp_filepath}: {cleanup_error}") + + +@recordings_bp.route('/api/recordings/incognito/chat', methods=['POST']) +@login_required +def chat_incognito(): + """ + Chat with an incognito recording's transcription. + Since incognito recordings don't exist in the database, the transcription + is passed directly in the request. + """ + # Check if incognito mode is enabled + if not ENABLE_INCOGNITO_MODE: + return jsonify({'error': 'Incognito mode is not enabled on this server'}), 403 + + from src.tasks.processing import format_transcription_for_llm + + try: + data = request.json + if not data: + return jsonify({'error': 'No data provided'}), 400 + + transcription = data.get('transcription') + user_message = data.get('message') + message_history = data.get('message_history', []) + participants = data.get('participants', '') + notes = data.get('notes', '') + + if not transcription: + return jsonify({'error': 'No transcription provided'}), 400 + if not user_message: + return jsonify({'error': 'No message provided'}), 400 + + # Check if chat client is available + if chat_client is None: + return jsonify({'error': 'Chat service is not available (chat client not configured)'}), 503 + + # Prepare the system prompt with the transcription + user_chat_output_language = current_user.output_language if current_user.is_authenticated else None + + language_instruction = "Réponds toujours en français." + if user_chat_output_language: + language_instruction = f"Réponds en {user_chat_output_language}." + + user_name = current_user.name if current_user.is_authenticated and current_user.name else "l'utilisateur" + user_title = current_user.job_title if current_user.is_authenticated and current_user.job_title else None + user_company = current_user.company if current_user.is_authenticated and current_user.company else None + + formatted_transcription = format_transcription_for_llm(transcription) + + # Get configurable transcript length limit for chat + transcript_limit = SystemSetting.get_setting('transcript_length_limit', 30000) + if transcript_limit == -1: + chat_transcript = formatted_transcription + else: + chat_transcript = formatted_transcription[:transcript_limit] + + user_context = f", {user_title} chez {user_company}" if user_title and user_company else "" + + system_prompt = f"""Tu es un assistant expert en analyse de transcriptions audio et de réunions, qui assiste {user_name}{user_context}. {language_instruction} + +Réponds de façon directe et professionnelle. Utilise le formatage Markdown (## titres, **gras**, listes -). + +**Participants :** +{participants or "Non précisé"} + +**Transcription :** +<> +{chat_transcript or "Transcription non disponible."} +<> + +**Notes et contexte :** +{notes or "Aucune note."} + +Note : Cet enregistrement est en mode incognito — aucune donnée n'est conservée sur le serveur. +""" + + # Prepare messages array with system prompt and conversation history + messages = [{"role": "system", "content": system_prompt}] + if message_history: + messages.extend(message_history) + messages.append({"role": "user", "content": user_message}) + + # Get model info + chat_model = os.environ.get('TEXT_MODEL_NAME', os.environ.get('OPENAI_CHAT_MODEL', 'gpt-4o-mini')) + user_id = current_user.id + + current_app.logger.info(f"[Incognito Chat] User {user_id} sending message") + + def generate(): + """Stream the chat response.""" + try: + response = chat_client.chat.completions.create( + model=chat_model, + messages=messages, + temperature=0.7, + stream=True + ) + + for chunk in response: + if chunk.choices and len(chunk.choices) > 0: + delta = chunk.choices[0].delta + if hasattr(delta, 'content') and delta.content: + yield f"data: {json.dumps({'content': delta.content})}\n\n" + + yield "data: [DONE]\n\n" + + except Exception as e: + current_app.logger.error(f"[Incognito Chat] Error during streaming: {e}") + # Provide more helpful error message for connection issues + error_msg = str(e).lower() + if 'connection' in error_msg or 'connect' in error_msg or 'refused' in error_msg: + yield f"data: {json.dumps({'error': 'Could not connect to LLM server. Please check that your LLM service is running.'})}\n\n" + else: + yield f"data: {json.dumps({'error': str(e)})}\n\n" + + return Response(generate(), mimetype='text/event-stream') + + except Exception as e: + current_app.logger.error(f"[Incognito Chat] Error: {e}", exc_info=True) + # Provide more helpful error message for connection issues + error_msg = str(e).lower() + if 'connection' in error_msg or 'connect' in error_msg or 'refused' in error_msg: + return jsonify({'error': 'Could not connect to LLM server. Please check that your LLM service is running.'}), 503 + return jsonify({'error': 'An error occurred during chat'}), 500 + + +@recordings_bp.route('/api/recordings/incognito/summary', methods=['POST']) +@login_required +def generate_incognito_summary_endpoint(): + """ + Generate summary for an incognito recording on demand. + Since incognito recordings don't exist in the database, the transcription + is passed directly in the request. + """ + # Check if incognito mode is enabled + if not ENABLE_INCOGNITO_MODE: + return jsonify({'error': 'Incognito mode is not enabled on this server'}), 403 + + from src.tasks.processing import generate_incognito_summary + from src.utils import md_to_html + + try: + data = request.json + if not data: + return jsonify({'error': 'No data provided'}), 400 + + transcription = data.get('transcription') + if not transcription: + return jsonify({'error': 'No transcription provided'}), 400 + + # Check if LLM client is available + if client is None: + return jsonify({'error': 'Summary service is not available (LLM client not configured)'}), 503 + + current_app.logger.info(f"[Incognito Summary] User {current_user.id} requesting summary generation") + + # Generate summary using existing function + summary = generate_incognito_summary(transcription, current_user) + + if summary: + summary_html = md_to_html(summary) + return jsonify({ + 'summary': summary, + 'summary_html': summary_html + }) + else: + return jsonify({'error': 'Failed to generate summary. Please check that your LLM service is running.'}), 503 + + except Exception as e: + current_app.logger.error(f"[Incognito Summary] Error: {e}", exc_info=True) + # Provide more helpful error message for connection issues + error_msg = str(e).lower() + if 'connection' in error_msg or 'connect' in error_msg or 'refused' in error_msg: + return jsonify({'error': 'Could not connect to LLM server. Please check that your LLM service is running.'}), 503 + return jsonify({'error': f'Failed to generate summary: {str(e)}'}), 500 + + +# Status Endpoint + + +@recordings_bp.route('/recording/', methods=['DELETE']) +@login_required +def delete_recording(recording_id): + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + # Check if the recording belongs to the current user + if recording.user_id and recording.user_id != current_user.id: + return jsonify({'error': 'You do not have permission to delete this recording'}), 403 + + # Check deletion permissions (admin-only if USERS_CAN_DELETE is false) + if not USERS_CAN_DELETE and not current_user.is_admin: + return jsonify({'error': 'Only administrators can delete recordings'}), 403 + + # Capture details before deletion for audit + _audit_details = {'title': recording.title} + + # Delete the audio file first + try: + if recording.audio_path and os.path.exists(recording.audio_path): + os.remove(recording.audio_path) + current_app.logger.info(f"Deleted audio file: {recording.audio_path}") + except Exception as e: + current_app.logger.error(f"Error deleting audio file {recording.audio_path}: {e}") + + # Log embeddings cleanup for Inquire Mode if enabled + if ENABLE_INQUIRE_MODE: + chunk_count = TranscriptChunk.query.filter_by(recording_id=recording_id).count() + if chunk_count > 0: + current_app.logger.info(f"Deleting {chunk_count} transcript chunks with embeddings for recording {recording_id}") + + # Delete associated records with NOT NULL recording_id constraints + from src.models.speaker_snippet import SpeakerSnippet + deleted_snippets = SpeakerSnippet.query.filter_by(recording_id=recording_id).delete() + if deleted_snippets > 0: + current_app.logger.info(f"Deleted {deleted_snippets} speaker snippets for recording {recording_id}") + + from src.models.processing_job import ProcessingJob + deleted_jobs = ProcessingJob.query.filter_by(recording_id=recording_id).delete() + if deleted_jobs > 0: + current_app.logger.info(f"Deleted {deleted_jobs} processing jobs for recording {recording_id}") + + # Delete the database record (cascade will handle chunks/embeddings) + db.session.delete(recording) + db.session.commit() + current_app.logger.info(f"Deleted recording record ID: {recording_id}") + + # Audit AFTER successful deletion + audit_delete('recording', recording_id, details=_audit_details) + db.session.commit() + + if ENABLE_INQUIRE_MODE and chunk_count > 0: + current_app.logger.info(f"Successfully deleted embeddings and chunks for recording {recording_id}") + + # Mark the export file as deleted + mark_export_as_deleted(recording_id) + + # Clean up orphaned speakers (run after successful deletion) + # This is a best-effort cleanup; failures are logged but don't affect the delete operation + try: + from src.services.speaker_cleanup import cleanup_orphaned_speakers + speaker_stats = cleanup_orphaned_speakers() + if speaker_stats.get('speakers_deleted', 0) > 0: + current_app.logger.info( + f"Cleaned up {speaker_stats['speakers_deleted']} orphaned speakers after recording deletion" + ) + except Exception as cleanup_error: + # Log the error but don't fail the deletion + current_app.logger.warning(f"Speaker cleanup after recording deletion failed: {cleanup_error}") + + return jsonify({'success': True}) + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error deleting recording {recording_id}: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred while deleting.'}), 500 + + +# --- Inbox and Archive Endpoints --- + +@recordings_bp.route('/api/inbox_recordings', methods=['GET']) +@login_required +def get_inbox_recordings(): + """Get recordings that are in the inbox and currently processing.""" + from sqlalchemy import select + try: + stmt = select(Recording).where( + Recording.user_id == current_user.id, + Recording.is_inbox == True, + Recording.status.in_(['PENDING', 'PROCESSING', 'SUMMARIZING']) + ).order_by(Recording.created_at.desc()) + + recordings = db.session.execute(stmt).scalars().all() + return jsonify([recording.to_list_dict(viewer_user=current_user) for recording in recordings]) + except Exception as e: + current_app.logger.error(f"Error fetching inbox recordings: {e}") + return jsonify({'error': str(e)}), 500 + + +@recordings_bp.route('/api/recordings/archived', methods=['GET']) +@login_required +def get_archived_recordings(): + """Get recordings where audio has been deleted but transcription remains.""" + from sqlalchemy import select + try: + search_query = request.args.get('q', '').strip() + + # Find recordings owned by current user where audio_deleted_at is not null + stmt = select(Recording).where( + Recording.user_id == current_user.id, + Recording.audio_deleted_at.is_not(None) + ).order_by(Recording.audio_deleted_at.desc()) + + recordings = db.session.execute(stmt).scalars().all() + return jsonify([recording.to_list_dict(viewer_user=current_user) for recording in recordings]) + except Exception as e: + current_app.logger.error(f"Error fetching archived recordings: {e}") + return jsonify({'error': str(e)}), 500 + + +# --- Recording Detail and Audio Endpoints --- + +@recordings_bp.route('/api/recordings/', methods=['GET']) +@login_required +def get_recording_detail(recording_id): + """Get full details for a specific recording including markdown HTML.""" + try: + recording = db.session.get(Recording, recording_id) + + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + # Check ownership or shared access + has_access = recording.user_id == current_user.id + + # Check if recording has been shared with current user (if internal sharing is enabled) + if not has_access and ENABLE_INTERNAL_SHARING: + share = InternalShare.query.filter_by( + recording_id=recording_id, + shared_with_user_id=current_user.id + ).first() + has_access = share is not None + + if not has_access: + return jsonify({'error': 'Access denied'}), 403 + + try: + audit_view('recording', recording_id) + db.session.commit() + except Exception: + db.session.rollback() + current_app.logger.warning(f'Audit log failed for recording {recording_id}', exc_info=True) + + # Return full detail with HTML conversion + rec_dict = recording.to_dict(include_html=True, viewer_user=current_user) + + # Add sharing metadata + is_owner = recording.user_id == current_user.id + rec_dict['is_owner'] = is_owner + + # Add edit permission info (uses has_recording_access which checks group admin status) + rec_dict['can_edit'] = has_recording_access(recording, current_user, require_edit=True) + + # Add delete permission info (only owner can delete) + rec_dict['can_delete'] = is_owner and (USERS_CAN_DELETE or current_user.is_admin) + + # Add sharing-related fields + if not is_owner: + # This is a shared recording - get owner info and share permissions + owner = User.query.get(recording.user_id) + rec_dict['owner_username'] = owner.username if owner else "Unknown" + rec_dict['is_shared'] = True + # Don't show outgoing share count for recordings you don't own + rec_dict['shared_with_count'] = 0 + rec_dict['public_share_count'] = 0 + + # Get share permissions + share = InternalShare.query.filter_by( + recording_id=recording.id, + shared_with_user_id=current_user.id + ).first() + + if share: + rec_dict['share_info'] = { + 'share_id': share.id, + 'owner_username': owner.username if owner else "Unknown", + 'can_edit': share.can_edit, + 'can_reshare': share.can_reshare, + 'shared_at': share.created_at.isoformat() + } + else: + # Fallback if share record not found (shouldn't happen) + rec_dict['share_info'] = { + 'can_edit': False, + 'can_reshare': False + } + else: + rec_dict['is_shared'] = False + + # Check if recording has group tags (among visible tags) + visible_tags = recording.get_visible_tags(current_user) + has_group_tags = any(tag.is_group_tag for tag in visible_tags) if visible_tags else False + rec_dict['has_group_tags'] = has_group_tags + + # Enrich with per-user status + enrich_recording_dict_with_user_status(rec_dict, recording, current_user) + + return jsonify(rec_dict) + except Exception as e: + current_app.logger.error(f"Error fetching recording detail: {e}") + return jsonify({'error': str(e)}), 500 + + +@recordings_bp.route('/recording//status', methods=['GET']) +@login_required +def get_recording_status_only(recording_id): + """ + Lightweight endpoint that returns only the status field. + Used for polling during processing/summarization. + Note: Rate limiting exemption is configured at app level. + """ + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'You do not have permission to view this recording'}), 403 + + # Return only the status field + return jsonify({'status': recording.status}) + except Exception as e: + current_app.logger.error(f"Error fetching status for recording {recording_id}: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred.'}), 500 + + +@recordings_bp.route('/api/recordings/batch-status', methods=['POST']) +@login_required +def get_batch_recording_status(): + """ + Batch endpoint to get status for multiple recordings at once. + More efficient than polling individual status endpoints. + + Request body: {"recording_ids": [1, 2, 3]} + Response: {"statuses": {"1": "COMPLETED", "2": "PROCESSING", "3": "FAILED"}} + """ + try: + data = request.get_json() + if not data or 'recording_ids' not in data: + return jsonify({'error': 'recording_ids is required'}), 400 + + recording_ids = data['recording_ids'] + if not isinstance(recording_ids, list): + return jsonify({'error': 'recording_ids must be a list'}), 400 + + # Limit batch size to prevent abuse + if len(recording_ids) > 50: + return jsonify({'error': 'Maximum 50 recordings per batch'}), 400 + + # Query all recordings at once + recordings = Recording.query.filter(Recording.id.in_(recording_ids)).all() + + # Build response with only accessible recordings + statuses = {} + for recording in recordings: + if has_recording_access(recording, current_user): + statuses[str(recording.id)] = recording.status + + return jsonify({'statuses': statuses}) + except Exception as e: + current_app.logger.error(f"Error fetching batch status: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred.'}), 500 + + +@recordings_bp.route('/api/recordings/job-queue-status', methods=['GET']) +@login_required +def get_job_queue_status(): + """ + Get detailed job queue status for all jobs (active, completed, and failed). + Returns status for the user's jobs within the last hour. + """ + try: + from src.models import ProcessingJob + from src.services.job_queue import TRANSCRIPTION_JOBS, SUMMARY_JOBS + from datetime import timedelta + + # Expire all cached objects to ensure we see latest data from worker threads + db.session.expire_all() + + # Get all jobs for the user (active + recent completed/failed within last hour) + cutoff_time = datetime.utcnow() - timedelta(hours=1) + all_jobs = ProcessingJob.query.filter( + ProcessingJob.user_id == current_user.id, + db.or_( + ProcessingJob.status.in_(['queued', 'processing']), + db.and_( + ProcessingJob.status.in_(['completed', 'failed']), + ProcessingJob.completed_at >= cutoff_time + ) + ) + ).order_by(ProcessingJob.created_at.desc()).all() + + job_details = [] + for job in all_jobs: + recording = db.session.get(Recording, job.recording_id) + recording_title = None + if recording: + recording_title = recording.title or recording.original_filename or 'Untitled' + + # Determine queue type + queue_type = 'summary' if job.job_type in SUMMARY_JOBS else 'transcription' + + # Calculate position if queued + position = None + if job.status == 'queued': + job_types = SUMMARY_JOBS if job.job_type in SUMMARY_JOBS else TRANSCRIPTION_JOBS + ahead_in_queue = ProcessingJob.query.filter( + ProcessingJob.status == 'queued', + ProcessingJob.job_type.in_(job_types), + ProcessingJob.created_at < job.created_at + ).count() + currently_processing = ProcessingJob.query.filter( + ProcessingJob.status == 'processing', + ProcessingJob.job_type.in_(job_types) + ).count() + position = ahead_in_queue + currently_processing + 1 + + job_details.append({ + 'id': job.id, + 'recording_id': job.recording_id, + 'recording_title': recording_title, + 'job_status': job.status, + 'job_type': job.job_type, + 'queue_type': queue_type, + 'position': position, + 'is_new_upload': job.is_new_upload, + 'error_message': job.error_message, + 'created_at': job.created_at.isoformat() if job.created_at else None, + 'started_at': job.started_at.isoformat() if job.started_at else None, + 'completed_at': job.completed_at.isoformat() if job.completed_at else None + }) + + return jsonify({'jobs': job_details}) + except Exception as e: + current_app.logger.error(f"Error fetching job queue status: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred.'}), 500 + + +@recordings_bp.route('/api/recordings/jobs//retry', methods=['POST']) +@login_required +def retry_failed_job(job_id): + """Retry a failed job.""" + try: + from src.models import ProcessingJob + + job = db.session.get(ProcessingJob, job_id) + if not job: + return jsonify({'error': 'Job not found'}), 404 + + if job.user_id != current_user.id: + return jsonify({'error': 'Access denied'}), 403 + + if job.status != 'failed': + return jsonify({'error': 'Only failed jobs can be retried'}), 400 + + # Reset job for retry + job.status = 'queued' + job.error_message = None + job.retry_count = 0 + job.started_at = None + job.completed_at = None + db.session.commit() + + current_app.logger.info(f"Job {job_id} queued for retry by user {current_user.id}") + return jsonify({'success': True, 'message': 'Job queued for retry'}) + + except Exception as e: + current_app.logger.error(f"Error retrying job {job_id}: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred.'}), 500 + + +@recordings_bp.route('/api/recordings/jobs/', methods=['DELETE']) +@login_required +def delete_job(job_id): + """Delete a job (clear from queue or history).""" + try: + from src.models import ProcessingJob + import os + + job = db.session.get(ProcessingJob, job_id) + if not job: + return jsonify({'error': 'Job not found'}), 404 + + if job.user_id != current_user.id: + return jsonify({'error': 'Access denied'}), 403 + + # If it's a failed new upload, also delete the recording + if job.status == 'failed' and job.is_new_upload: + recording = db.session.get(Recording, job.recording_id) + if recording: + # Delete audio file + if recording.audio_path and os.path.exists(recording.audio_path): + try: + os.remove(recording.audio_path) + except Exception as e: + current_app.logger.error(f"Error deleting audio file: {e}") + # Delete ALL processing jobs for this recording first + ProcessingJob.query.filter_by(recording_id=recording.id).delete() + db.session.delete(recording) + else: + # Just delete this job + db.session.delete(job) + db.session.commit() + + current_app.logger.info(f"Job {job_id} deleted by user {current_user.id}") + return jsonify({'success': True, 'message': 'Job deleted'}) + + except Exception as e: + current_app.logger.error(f"Error deleting job {job_id}: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred.'}), 500 + + +@recordings_bp.route('/api/recordings/jobs/clear-completed', methods=['POST']) +@login_required +def clear_completed_jobs(): + """Clear all completed jobs for the current user.""" + try: + from src.models import ProcessingJob + + deleted = ProcessingJob.query.filter( + ProcessingJob.user_id == current_user.id, + ProcessingJob.status == 'completed' + ).delete(synchronize_session=False) + + db.session.commit() + current_app.logger.info(f"Cleared {deleted} completed jobs for user {current_user.id}") + return jsonify({'success': True, 'deleted': deleted}) + + except Exception as e: + current_app.logger.error(f"Error clearing completed jobs: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred.'}), 500 + + +@recordings_bp.route('/status/', methods=['GET']) +@login_required +def get_status(recording_id): + """Endpoint to check the transcription/summarization status (full recording data).""" + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'You do not have permission to view this recording'}), 403 + + # Ensure events are loaded (refresh the recording to get latest relationships) + db.session.refresh(recording) + + # Get recording dict and enrich with per-user status + recording_dict = recording.to_dict(viewer_user=current_user) + enrich_recording_dict_with_user_status(recording_dict, recording, current_user) + + return jsonify(recording_dict) + except Exception as e: + current_app.logger.error(f"Error fetching status for recording {recording_id}: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred.'}), 500 + + +@recordings_bp.route('/audio/') +@login_required +def get_audio(recording_id): + """Serve audio file for a recording. + + Query parameters: + download: If 'true', serves file as attachment for download + """ + try: + recording = db.session.get(Recording, recording_id) + if not recording or not recording.audio_path: + return jsonify({'error': 'Recording or audio file not found'}), 404 + + # Check if the recording belongs to the current user or has been shared with them + has_access = recording.user_id == current_user.id + + # Check if recording has been shared with current user (if internal sharing is enabled) + if not has_access and ENABLE_INTERNAL_SHARING: + share = InternalShare.query.filter_by( + recording_id=recording_id, + shared_with_user_id=current_user.id + ).first() + has_access = share is not None + + if not has_access: + return jsonify({'error': 'You do not have permission to access this audio file'}), 403 + if not os.path.exists(recording.audio_path): + current_app.logger.error(f"Audio file missing from server: {recording.audio_path}") + return jsonify({'error': 'Audio file missing from server'}), 404 + + # Check if download is requested + download = request.args.get('download', 'false').lower() == 'true' + + # Audit log for audio access + try: + if download: + audit_download('audio', recording_id) + else: + audit_view('audio', recording_id) + db.session.commit() + except Exception: + db.session.rollback() + current_app.logger.warning(f'Audit log failed for audio {recording_id}', exc_info=True) + + if download: + # Generate filename from recording title or use default + filename = recording.title or f'recording_{recording_id}' + # Sanitize filename and add extension + filename = "".join(c for c in filename if c.isalnum() or c in (' ', '-', '_')).strip() + ext = os.path.splitext(recording.audio_path)[1] or '.mp3' + filename = f"{filename}{ext}" + return send_file(recording.audio_path, as_attachment=True, download_name=filename, mimetype=recording.mime_type, conditional=True) + + return send_file(recording.audio_path, mimetype=recording.mime_type, conditional=True) + except Exception as e: + current_app.logger.error(f"Error serving audio for recording {recording_id}: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred.'}), 500 + + +# --- Chat with Transcription --- + +@recordings_bp.route('/chat', methods=['POST']) +@login_required +def chat_with_transcription(): + """Chat with a specific recording's transcription.""" + try: + data = request.json + if not data: + return jsonify({'error': 'No data provided'}), 400 + + recording_id = data.get('recording_id') + user_message = data.get('message') + message_history = data.get('message_history', []) + + if not recording_id: + return jsonify({'error': 'No recording ID provided'}), 400 + if not user_message: + return jsonify({'error': 'No message provided'}), 400 + + # Get the recording + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user): + return jsonify({'error': 'You do not have permission to chat with this recording'}), 403 + + # Check if transcription exists + if not recording.transcription or len(recording.transcription.strip()) < 10: + return jsonify({'error': 'No transcription available for this recording'}), 400 + + # Check if transcription is an error message (not actual content) + if is_transcription_error(recording.transcription): + return jsonify({'error': 'Cannot chat: transcription failed. Please reprocess the transcription first.'}), 400 + + # Check if chat client is available + if chat_client is None: + return jsonify({'error': 'Chat service is not available (chat client not configured)'}), 503 + + # Prepare the system prompt with the transcription + user_chat_output_language = current_user.output_language if current_user.is_authenticated else None + + language_instruction = "Réponds toujours en français." + if user_chat_output_language: + language_instruction = f"Réponds en {user_chat_output_language}." + + user_name = current_user.name if current_user.is_authenticated and current_user.name else "l'utilisateur" + user_title = current_user.job_title if current_user.is_authenticated and current_user.job_title else None + user_company = current_user.company if current_user.is_authenticated and current_user.company else None + + formatted_transcription = format_transcription_for_llm(recording.transcription) + + # Get configurable transcript length limit for chat + transcript_limit = SystemSetting.get_setting('transcript_length_limit', 30000) + if transcript_limit == -1: + chat_transcript = formatted_transcription + else: + chat_transcript = formatted_transcription[:transcript_limit] + + user_context = f", {user_title} chez {user_company}" if user_title and user_company else "" + + system_prompt = f"""Tu es un assistant expert en analyse de transcriptions audio et de réunions, qui assiste {user_name}{user_context}. {language_instruction} + +Réponds de façon directe et professionnelle. Utilise le formatage Markdown (## titres, **gras**, listes -). + +**Participants :** +{recording.participants or "Non précisé"} + +**Transcription :** +<> +{chat_transcript or "Transcription non disponible."} +<> + +**Notes et contexte :** +{recording.notes or "Aucune note."} +""" + + # Prepare messages array with system prompt and conversation history + messages = [{"role": "system", "content": system_prompt}] + if message_history: + messages.extend(message_history) + messages.append({"role": "user", "content": user_message}) + + # Capture context before generator starts (app context may not be available inside generator) + user_id = current_user.id + app = current_app._get_current_object() + + def generate(): + # Push app context for entire generator execution + # This is needed because call_chat_completion checks budget which requires db access + ctx = app.app_context() + ctx.push() + try: + # Enable streaming with user_id for budget enforcement + stream = call_chat_completion( + messages=messages, + temperature=0.7, + max_tokens=int(os.environ.get("CHAT_MAX_TOKENS", "2000")), + stream=True, + user_id=user_id, + operation_type='chat' + ) + + # Use helper function to process streaming with thinking tag support + for response in process_streaming_with_thinking(stream, user_id=user_id, operation_type='chat', app=app): + yield response + + except TokenBudgetExceeded as e: + app.logger.warning(f"Token budget exceeded for user {user_id}: {e}") + yield f"data: {json.dumps({'error': str(e), 'budget_exceeded': True})}\n\n" + except Exception as e: + app.logger.error(f"Error during chat stream generation: {str(e)}") + # Provide more helpful error message for connection issues + error_msg = str(e).lower() + if 'connection' in error_msg or 'connect' in error_msg or 'refused' in error_msg: + yield f"data: {json.dumps({'error': 'Could not connect to LLM server. Please check that your LLM service is running.'})}\n\n" + else: + yield f"data: {json.dumps({'error': str(e)})}\n\n" + finally: + ctx.pop() + + return Response(generate(), mimetype='text/event-stream') + + except Exception as e: + current_app.logger.error(f"Error in chat endpoint: {str(e)}") + error_msg = str(e).lower() + if 'connection' in error_msg or 'connect' in error_msg or 'refused' in error_msg: + return jsonify({'error': 'Could not connect to LLM server. Please check that your LLM service is running.'}), 503 + return jsonify({'error': str(e)}), 500 + + +# --- Tag Management for Recordings --- + +@recordings_bp.route('/api/recordings//tags', methods=['POST']) +@login_required +def add_tag_to_recording(recording_id): + """Add a tag to a recording. Triggers auto-share for group tags.""" + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + # Check if user has view access to this recording + # (Edit permission will be checked for group tags specifically) + if not has_recording_access(recording, current_user, require_edit=False): + return jsonify({'error': 'You do not have permission to access this recording'}), 403 + + data = request.get_json() + tag_id = data.get('tag_id') + + if not tag_id: + return jsonify({'error': 'Tag ID is required'}), 400 + + tag = db.session.get(Tag, tag_id) + if not tag: + return jsonify({'error': 'Tag not found'}), 404 + + # Check if user has access to this tag and permission to apply it + if tag.group_id: + # Group tag - check membership first + membership = GroupMembership.query.filter_by( + group_id=tag.group_id, + user_id=current_user.id + ).first() + if not membership: + return jsonify({'error': 'You do not have access to this tag'}), 403 + + # Only file owner or group admin can apply group tags + if recording.user_id != current_user.id and membership.role != 'admin': + return jsonify({'error': 'Only recording owner or group admin can apply group tags'}), 403 + + # Group tags require edit permission + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'You do not have permission to apply group tags to this recording'}), 403 + else: + # Personal tag - only the tag owner can use it (view access is sufficient) + if tag.user_id != current_user.id: + return jsonify({'error': 'You can only apply your own personal tags'}), 403 + + # Check if tag is already on the recording + existing = RecordingTag.query.filter_by( + recording_id=recording_id, + tag_id=tag_id + ).first() + + if existing: + return jsonify({'error': 'Tag is already on this recording'}), 400 + + # Get the next order position + max_order = db.session.query(db.func.max(RecordingTag.order)).filter_by( + recording_id=recording_id + ).scalar() or 0 + + # Add the tag + recording_tag = RecordingTag( + recording_id=recording_id, + tag_id=tag_id, + order=max_order + 1 + ) + db.session.add(recording_tag) + + # If this is a group tag with sharing enabled, automatically share the recording + # Only auto-share if recording is completed (not during processing) + if tag.group_id and ENABLE_INTERNAL_SHARING and recording.status == 'COMPLETED' and (tag.auto_share_on_apply or tag.share_with_group_lead): + # Determine who to share with + if tag.auto_share_on_apply: + group_members = GroupMembership.query.filter_by(group_id=tag.group_id).all() + elif tag.share_with_group_lead: + group_members = GroupMembership.query.filter_by(group_id=tag.group_id, role='admin').all() + else: + group_members = [] + + shares_created = 0 + for membership_to_share in group_members: + # Skip the recording owner + if membership_to_share.user_id == recording.user_id: + continue + + # Check if already shared + existing_share = InternalShare.query.filter_by( + recording_id=recording_id, + shared_with_user_id=membership_to_share.user_id + ).first() + + if not existing_share: + # Create internal share with correct permissions + # Group admins get edit permission, regular members get read-only + share = InternalShare( + recording_id=recording_id, + owner_id=recording.user_id, + shared_with_user_id=membership_to_share.user_id, + can_edit=(membership_to_share.role == 'admin'), + can_reshare=False, + source_type='group_tag', + source_tag_id=tag.id + ) + db.session.add(share) + + # Check if SharedRecordingState already exists (might exist from previous share) + existing_state = SharedRecordingState.query.filter_by( + recording_id=recording_id, + user_id=membership_to_share.user_id + ).first() + + if not existing_state: + # Create SharedRecordingState with default values for the recipient + state = SharedRecordingState( + recording_id=recording_id, + user_id=membership_to_share.user_id, + is_inbox=True, # New shares appear in inbox by default + is_highlighted=False # Not favorited by default + ) + db.session.add(state) + + shares_created += 1 + current_app.logger.info(f"Auto-shared recording {recording_id} with user {membership_to_share.user_id} (role={membership_to_share.role}) via group tag '{tag.name}'") + + if shares_created > 0: + current_app.logger.info(f"Created {shares_created} auto-shares for recording {recording_id} via group tag '{tag.name}'") + + db.session.commit() + + # Return updated recording with per-user status + recording_dict = recording.to_dict(viewer_user=current_user) + enrich_recording_dict_with_user_status(recording_dict, recording, current_user) + return jsonify({ + 'success': True, + 'recording': recording_dict, + 'tag': tag.to_dict() + }) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error adding tag to recording {recording_id}: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred.'}), 500 + + +@recordings_bp.route('/api/recordings//tags/', methods=['DELETE']) +@login_required +def remove_tag_from_recording(recording_id, tag_id): + """Remove a tag from a recording. Cleans up auto-shares for group tags.""" + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + # Check if user has view access to this recording + # (Edit permission will be checked for group tags specifically) + if not has_recording_access(recording, current_user, require_edit=False): + return jsonify({'error': 'You do not have permission to access this recording'}), 403 + + # Find the recording-tag association + recording_tag = RecordingTag.query.filter_by( + recording_id=recording_id, + tag_id=tag_id + ).first() + + if not recording_tag: + return jsonify({'error': 'Tag is not on this recording'}), 404 + + # Get the tag to check permissions and for cleanup + tag = db.session.get(Tag, tag_id) + if tag: + # Check permissions to remove this specific tag + if tag.group_id: + # Group tag - only file owner or group admin can remove + membership = GroupMembership.query.filter_by( + group_id=tag.group_id, + user_id=current_user.id + ).first() + if recording.user_id != current_user.id: + if not membership or membership.role != 'admin': + return jsonify({'error': 'Only recording owner or group admin can remove group tags'}), 403 + + # Group tags require edit permission + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'You do not have permission to remove group tags from this recording'}), 403 + else: + # Personal tag - can be removed by tag owner (view access) or recording owner (edit access) + if tag.user_id != current_user.id: + # Not the tag owner, must be recording owner with edit permission + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'You can only remove your own personal tags'}), 403 + + # Remove the association + db.session.delete(recording_tag) + + # Clean up shares created by this group tag + if tag and tag.group_id and ENABLE_INTERNAL_SHARING: + shares_to_check = InternalShare.query.filter_by( + recording_id=recording_id, + source_tag_id=tag_id + ).all() + + shares_removed = 0 + for share in shares_to_check: + # Check if user still has access via another group tag on this recording + other_team_tag_access = db.session.query(Tag).join( + RecordingTag, RecordingTag.tag_id == Tag.id + ).join( + GroupMembership, GroupMembership.group_id == Tag.group_id + ).filter( + RecordingTag.recording_id == recording_id, + GroupMembership.user_id == share.shared_with_user_id, + Tag.id != tag_id, # Exclude the tag being removed + Tag.group_id.isnot(None), + db.or_(Tag.auto_share_on_apply == True, Tag.share_with_group_lead == True) + ).first() + + # Only remove share if user has no other group tag access + if not other_team_tag_access: + db.session.delete(share) + shares_removed += 1 + current_app.logger.info(f"Removed auto-share for user {share.shared_with_user_id} from recording {recording_id} (group tag '{tag.name}' removed)") + + if shares_removed > 0: + current_app.logger.info(f"Cleaned up {shares_removed} auto-shares for recording {recording_id} after removing group tag '{tag.name}'") + + db.session.commit() + + # Return updated recording with per-user status + recording_dict = recording.to_dict(viewer_user=current_user) + enrich_recording_dict_with_user_status(recording_dict, recording, current_user) + return jsonify({ + 'success': True, + 'recording': recording_dict + }) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error removing tag from recording {recording_id}: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred.'}), 500 + + +@recordings_bp.route('/api/recordings//tags/reorder', methods=['PUT']) +@login_required +def reorder_recording_tags(recording_id): + """Reorder tags on a recording. Updates the order field for each RecordingTag.""" + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + # Check if user has edit access to this recording + if not has_recording_access(recording, current_user, require_edit=True): + return jsonify({'error': 'You do not have permission to modify this recording'}), 403 + + data = request.get_json() + if not data or 'tag_ids' not in data: + return jsonify({'error': 'Missing tag_ids in request body'}), 400 + + tag_ids = data.get('tag_ids', []) + if not isinstance(tag_ids, list): + return jsonify({'error': 'tag_ids must be a list'}), 400 + + # Update order for each tag + for order, tag_id in enumerate(tag_ids, 1): + recording_tag = RecordingTag.query.filter_by( + recording_id=recording_id, + tag_id=tag_id + ).first() + if recording_tag: + recording_tag.order = order + + db.session.commit() + + # Return updated recording + recording_dict = recording.to_dict(viewer_user=current_user) + enrich_recording_dict_with_user_status(recording_dict, recording, current_user) + return jsonify({ + 'success': True, + 'recording': recording_dict + }) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error reordering tags on recording {recording_id}: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred.'}), 500 + + +# --- Bulk Operations --- + +@recordings_bp.route('/api/recordings/bulk', methods=['DELETE']) +@login_required +def bulk_delete_recordings(): + """Delete multiple recordings at once.""" + try: + data = request.get_json() + if not data or 'recording_ids' not in data: + return jsonify({'error': 'Missing recording_ids'}), 400 + + recording_ids = data.get('recording_ids', []) + if not isinstance(recording_ids, list) or len(recording_ids) == 0: + return jsonify({'error': 'recording_ids must be a non-empty list'}), 400 + + # Limit bulk operations to prevent abuse + if len(recording_ids) > 100: + return jsonify({'error': 'Cannot delete more than 100 recordings at once'}), 400 + + # Check deletion permissions + if not USERS_CAN_DELETE and not current_user.is_admin: + return jsonify({'error': 'Only administrators can delete recordings'}), 403 + + deleted_ids = [] + errors = [] + + for recording_id in recording_ids: + try: + recording = db.session.get(Recording, recording_id) + if not recording: + errors.append(f"Recording {recording_id} not found") + continue + + # Check ownership + if recording.user_id and recording.user_id != current_user.id: + errors.append(f"No permission for recording {recording_id}") + continue + + # Delete audio file + if recording.audio_path and os.path.exists(recording.audio_path): + try: + os.remove(recording.audio_path) + except Exception as e: + current_app.logger.error(f"Error deleting audio file {recording.audio_path}: {e}") + + # Delete associated records with NOT NULL recording_id constraints + from src.models import ProcessingJob + from src.models.speaker_snippet import SpeakerSnippet + SpeakerSnippet.query.filter_by(recording_id=recording_id).delete() + ProcessingJob.query.filter_by(recording_id=recording_id).delete() + + # Delete the recording (audit après commit réussi) + _audit_titles = getattr(current_app, '_bulk_delete_titles', {}) + _audit_titles[recording_id] = recording.title + current_app._bulk_delete_titles = _audit_titles + db.session.delete(recording) + deleted_ids.append(recording_id) + + except Exception as e: + current_app.logger.error(f"Error deleting recording {recording_id}: {e}") + errors.append(f"Error with recording {recording_id}") + + db.session.commit() + + # Audit APRÈS commit réussi (atomicité garantie) + try: + titles = getattr(current_app, '_bulk_delete_titles', {}) + for rid in deleted_ids: + audit_delete('recording', rid, details={'title': titles.get(rid)}) + if deleted_ids: + db.session.commit() + current_app._bulk_delete_titles = {} + except Exception: + current_app.logger.warning('Audit bulk delete failed', exc_info=True) + + return jsonify({ + 'success': True, + 'deleted_ids': deleted_ids, + 'deleted_count': len(deleted_ids), + 'errors': errors if errors else None + }) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error in bulk delete: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred'}), 500 + + +@recordings_bp.route('/api/recordings/bulk-tags', methods=['POST']) +@login_required +def bulk_update_tags(): + """Add or remove a tag from multiple recordings.""" + try: + data = request.get_json() + if not data: + return jsonify({'error': 'Missing request body'}), 400 + + recording_ids = data.get('recording_ids', []) + tag_id = data.get('tag_id') + action = data.get('action', 'add') # 'add' or 'remove' + + if not recording_ids or not tag_id: + return jsonify({'error': 'Missing recording_ids or tag_id'}), 400 + + if action not in ['add', 'remove']: + return jsonify({'error': 'Action must be "add" or "remove"'}), 400 + + if len(recording_ids) > 100: + return jsonify({'error': 'Cannot update more than 100 recordings at once'}), 400 + + # Verify tag exists and user has access + tag = db.session.get(Tag, tag_id) + if not tag: + return jsonify({'error': 'Tag not found'}), 404 + + if tag.user_id != current_user.id and not tag.group_id: + return jsonify({'error': 'No permission to use this tag'}), 403 + + affected_ids = [] + + for recording_id in recording_ids: + try: + recording = db.session.get(Recording, recording_id) + if not recording: + continue + + # Check ownership or edit access + if not has_recording_access(recording, current_user, require_edit=True): + continue + + if action == 'add': + # Check if tag already exists + existing = RecordingTag.query.filter_by( + recording_id=recording_id, + tag_id=tag_id + ).first() + + if not existing: + # Get max order for this recording + max_order = db.session.query(db.func.max(RecordingTag.order)).filter_by( + recording_id=recording_id + ).scalar() or 0 + + new_tag = RecordingTag( + recording_id=recording_id, + tag_id=tag_id, + order=max_order + 1 + ) + db.session.add(new_tag) + affected_ids.append(recording_id) + + else: # remove + recording_tag = RecordingTag.query.filter_by( + recording_id=recording_id, + tag_id=tag_id + ).first() + + if recording_tag: + db.session.delete(recording_tag) + affected_ids.append(recording_id) + + except Exception as e: + current_app.logger.error(f"Error updating tag for recording {recording_id}: {e}") + + db.session.commit() + + return jsonify({ + 'success': True, + 'affected_ids': affected_ids, + 'affected_count': len(affected_ids) + }) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error in bulk tag update: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred'}), 500 + + +@recordings_bp.route('/api/recordings/bulk-reprocess', methods=['POST']) +@login_required +def bulk_reprocess(): + """Queue multiple recordings for reprocessing.""" + try: + data = request.get_json() + if not data: + return jsonify({'error': 'Missing request body'}), 400 + + recording_ids = data.get('recording_ids', []) + reprocess_type = data.get('type', 'summary') # 'transcription' or 'summary' + + if not recording_ids: + return jsonify({'error': 'Missing recording_ids'}), 400 + + if reprocess_type not in ['transcription', 'summary']: + return jsonify({'error': 'Type must be "transcription" or "summary"'}), 400 + + if len(recording_ids) > 50: + return jsonify({'error': 'Cannot reprocess more than 50 recordings at once'}), 400 + + queued_ids = [] + + for recording_id in recording_ids: + try: + recording = db.session.get(Recording, recording_id) + if not recording: + continue + + # Check ownership + if recording.user_id != current_user.id: + continue + + # Only reprocess completed or failed recordings + if recording.status not in ['COMPLETED', 'FAILED']: + continue + + # For transcription reprocess, need audio file + if reprocess_type == 'transcription': + if not recording.audio_path or not os.path.exists(recording.audio_path): + continue + job_type = 'reprocess_transcription' + else: + # For summary, need transcription + if not recording.transcription: + continue + job_type = 'reprocess_summary' + + # Queue the job + job_queue.enqueue( + user_id=current_user.id, + recording_id=recording.id, + job_type=job_type, + params={'user_id': current_user.id} + ) + + queued_ids.append(recording_id) + + except Exception as e: + current_app.logger.error(f"Error queueing reprocess for recording {recording_id}: {e}") + + db.session.commit() + + return jsonify({ + 'success': True, + 'queued_ids': queued_ids, + 'queued_count': len(queued_ids) + }) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error in bulk reprocess: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred'}), 500 + + +@recordings_bp.route('/api/recordings/bulk-toggle', methods=['POST']) +@login_required +def bulk_toggle(): + """Toggle inbox or highlight for multiple recordings.""" + try: + data = request.get_json() + if not data: + return jsonify({'error': 'Missing request body'}), 400 + + recording_ids = data.get('recording_ids', []) + field = data.get('field') # 'inbox' or 'highlight' + value = data.get('value') # True or False + + if not recording_ids or field is None or value is None: + return jsonify({'error': 'Missing recording_ids, field, or value'}), 400 + + if field not in ['inbox', 'highlight']: + return jsonify({'error': 'Field must be "inbox" or "highlight"'}), 400 + + if len(recording_ids) > 100: + return jsonify({'error': 'Cannot update more than 100 recordings at once'}), 400 + + affected_ids = [] + + for recording_id in recording_ids: + try: + recording = db.session.get(Recording, recording_id) + if not recording: + continue + + # Use set_user_recording_status which handles both owners and shared users + if field == 'inbox': + set_user_recording_status(recording, current_user, is_inbox=value) + else: + set_user_recording_status(recording, current_user, is_highlighted=value) + + affected_ids.append(recording_id) + + except Exception as e: + current_app.logger.error(f"Error toggling {field} for recording {recording_id}: {e}") + + db.session.commit() + + return jsonify({ + 'success': True, + 'affected_ids': affected_ids, + 'affected_count': len(affected_ids) + }) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error in bulk toggle: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred'}), 500 + + +# --- Auto-deletion and Chunks Processing --- + +@recordings_bp.route('/api/recordings//toggle_deletion_exempt', methods=['POST']) +@login_required +def toggle_deletion_exempt(recording_id): + """Toggle the deletion_exempt flag for a recording.""" + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + # Check ownership + if recording.user_id != current_user.id and not current_user.is_admin: + return jsonify({'error': 'Permission denied'}), 403 + + # Toggle the flag + recording.deletion_exempt = not recording.deletion_exempt + db.session.commit() + + return jsonify({ + 'success': True, + 'deletion_exempt': recording.deletion_exempt + }) + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error toggling deletion exempt for recording {recording_id}: {e}") + return jsonify({'error': str(e)}), 500 + + +@recordings_bp.route('/api/recording//process_chunks', methods=['POST']) +@login_required +def process_recording_chunks_endpoint(recording_id): + """Process chunks for a specific recording.""" + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if recording.user_id != current_user.id: + return jsonify({'error': 'Permission denied'}), 403 + + success = process_recording_chunks(recording_id) + if success: + return jsonify({'message': 'Chunks processed successfully'}) + else: + return jsonify({'error': 'Failed to process chunks'}), 500 + + except Exception as e: + current_app.logger.error(f"Error in process chunks endpoint: {e}") + return jsonify({'error': str(e)}), 500 + + +# --- Inquire Mode API Endpoints --- diff --git a/src/api/shares.py b/src/api/shares.py new file mode 100644 index 0000000..ad0466d --- /dev/null +++ b/src/api/shares.py @@ -0,0 +1,641 @@ +""" +Sharing routes for public and internal recording shares. + +This blueprint handles: +- Public sharing (shareable links) +- Internal sharing (user-to-user sharing) +- Share management (CRUD operations) +""" + +import os +import re +import json +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, send_file, current_app +from flask_login import login_required, current_user + +from src.database import db +from src.models import Recording, Share, InternalShare, SharedRecordingState, User, TranscriptChunk, ShareAuditLog +from src.utils import md_to_html +from src.services.audit import audit_access + +# Configuration from environment +ENABLE_PUBLIC_SHARING = os.environ.get('ENABLE_PUBLIC_SHARING', 'true').lower() == 'true' +ENABLE_INTERNAL_SHARING = os.environ.get('ENABLE_INTERNAL_SHARING', 'false').lower() == 'true' +SHOW_USERNAMES_IN_UI = os.environ.get('SHOW_USERNAMES_IN_UI', 'false').lower() == 'true' +ENABLE_INQUIRE_MODE = os.environ.get('ENABLE_INQUIRE_MODE', 'false').lower() == 'true' +READABLE_PUBLIC_LINKS = os.environ.get('READABLE_PUBLIC_LINKS', 'false').lower() == 'true' + +# Create blueprint +shares_bp = Blueprint('shares', __name__) + +# Import has_recording_access from app context +has_recording_access = None + +def init_shares_helpers(_has_recording_access): + """Initialize helper functions from app.""" + global has_recording_access + has_recording_access = _has_recording_access + + +def process_transcription_for_template(transcription_str): + """ + Process transcription JSON into a format ready for server-side rendering. + + Returns a dict with: + - is_json: bool - whether transcription is valid JSON + - has_speakers: bool - whether diarization data exists + - segments: list - processed segments with speaker info and colors + - speakers: list - unique speakers with colors + - plain_text: str - plain text version for non-JSON or fallback + """ + if not transcription_str: + return {'is_json': False, 'has_speakers': False, 'segments': [], 'speakers': [], 'plain_text': ''} + + try: + data = json.loads(transcription_str) + except (json.JSONDecodeError, TypeError): + # Plain text transcription + return { + 'is_json': False, + 'has_speakers': False, + 'segments': [], + 'speakers': [], + 'plain_text': transcription_str + } + + if not isinstance(data, list): + return { + 'is_json': False, + 'has_speakers': False, + 'segments': [], + 'speakers': [], + 'plain_text': transcription_str + } + + # Check if diarized (has speaker info) + has_speakers = any(seg.get('speaker') for seg in data) + + # Get unique speakers and assign colors + speakers = [] + speaker_colors = {} + if has_speakers: + unique_speakers = list(dict.fromkeys(seg.get('speaker') for seg in data if seg.get('speaker'))) + for i, speaker in enumerate(unique_speakers): + color = f'speaker-color-{(i % 8) + 1}' + speaker_colors[speaker] = color + speakers.append({'name': speaker, 'color': color}) + + # Process segments + segments = [] + last_speaker = None + for seg in data: + speaker = seg.get('speaker', '') + segment = { + 'text': seg.get('sentence', ''), + 'speaker': speaker, + 'start_time': seg.get('start_time') or seg.get('startTime', ''), + 'end_time': seg.get('end_time') or seg.get('endTime', ''), + 'color': speaker_colors.get(speaker, 'speaker-color-1'), + 'show_speaker': speaker != last_speaker + } + segments.append(segment) + last_speaker = speaker + + # Build plain text version + if has_speakers: + plain_text = '\n'.join(f"[{seg['speaker']}]: {seg['text']}" for seg in segments) + else: + plain_text = '\n'.join(seg['text'] for seg in segments) + + return { + 'is_json': True, + 'has_speakers': has_speakers, + 'segments': segments, + 'speakers': speakers, + 'plain_text': plain_text + } + + +# --- Public Sharing Routes --- + +@shares_bp.route('/share/', methods=['GET']) +def view_shared_recording(public_id): + """View a publicly shared recording.""" + share = Share.query.filter_by(public_id=public_id).first_or_404() + recording = share.recording + + # Audit: log public share access avec dédup IP/1h pour éviter flood + try: + from datetime import datetime, timedelta + from src.models.access_log import AccessLog + _ip = request.remote_addr + _cutoff = datetime.utcnow() - timedelta(hours=1) + _recent = AccessLog.query.filter( + AccessLog.action == 'share_view', + AccessLog.resource_id == recording.id, + AccessLog.ip_address == _ip, + AccessLog.timestamp >= _cutoff + ).first() + if not _recent: + audit_access('share_view', 'recording', recording.id, details={'public_id': public_id, 'anonymous': True}) + db.session.commit() + except Exception: + db.session.rollback() + current_app.logger.warning('Audit share_view failed', exc_info=True) + + # Process transcription for server-side rendering (only if READABLE_PUBLIC_LINKS is enabled) + processed_transcript = None + if READABLE_PUBLIC_LINKS: + processed_transcript = process_transcription_for_template(recording.transcription) + + # Create a limited dictionary for the public view + recording_data = { + 'id': recording.id, + 'public_id': share.public_id, + 'title': recording.title, + 'participants': recording.participants, + 'transcription': recording.transcription, + 'summary': md_to_html(recording.summary) if share.share_summary else None, + 'summary_raw': recording.summary if share.share_summary else None, + 'notes': md_to_html(recording.notes) if share.share_notes else None, + 'notes_raw': recording.notes if share.share_notes else None, + 'meeting_date': f"{recording.meeting_date.isoformat()}T00:00:00" if recording.meeting_date else None, + 'mime_type': recording.mime_type, + 'audio_deleted_at': recording.audio_deleted_at.isoformat() if recording.audio_deleted_at else None, + 'audio_duration': recording.get_audio_duration() + } + + return render_template('share.html', recording=recording_data, transcript=processed_transcript, readable_mode=READABLE_PUBLIC_LINKS) + + +@shares_bp.route('/share/audio/') +def get_shared_audio(public_id): + """Serve audio file for a publicly shared recording.""" + try: + share = Share.query.filter_by(public_id=public_id).first_or_404() + recording = share.recording + if not recording or not recording.audio_path: + return jsonify({'error': 'Recording or audio file not found'}), 404 + if not os.path.exists(recording.audio_path): + current_app.logger.error(f"Audio file missing from server: {recording.audio_path}") + return jsonify({'error': 'Audio file missing from server'}), 404 + return send_file(recording.audio_path, conditional=True) + except Exception as e: + current_app.logger.error(f"Error serving shared audio for public_id {public_id}: {e}", exc_info=True) + return jsonify({'error': 'An unexpected error occurred.'}), 500 + + +@shares_bp.route('/api/recording//share', methods=['GET']) +@login_required +def get_existing_share(recording_id): + """Check if a share already exists for this recording.""" + recording = db.session.get(Recording, recording_id) + if not recording or recording.user_id != current_user.id: + return jsonify({'error': 'Recording not found or you do not have permission to view it.'}), 404 + + existing_share = Share.query.filter_by( + recording_id=recording.id, + user_id=current_user.id + ).order_by(Share.created_at.desc()).first() + + if existing_share: + share_url = url_for('shares.view_shared_recording', public_id=existing_share.public_id, _external=True) + return jsonify({ + 'success': True, + 'exists': True, + 'share_url': share_url, + 'share': existing_share.to_dict() + }), 200 + else: + return jsonify({ + 'success': True, + 'exists': False + }), 200 + + +@shares_bp.route('/api/recording//share', methods=['POST']) +@login_required +def create_share(recording_id): + """Create a public share link for a recording.""" + # Check if public sharing is globally enabled + if not ENABLE_PUBLIC_SHARING: + return jsonify({'error': 'Public sharing is not enabled on this server'}), 403 + + # Check if user has permission to create public shares + if not current_user.can_share_publicly: + return jsonify({'error': 'You do not have permission to create public share links. Contact your administrator.'}), 403 + + if not request.is_secure: + return jsonify({'error': 'Sharing is only available over a secure (HTTPS) connection.'}), 403 + + recording = db.session.get(Recording, recording_id) + if not recording or recording.user_id != current_user.id: + return jsonify({'error': 'Recording not found or you do not have permission to share it.'}), 404 + + data = request.json + share_summary = data.get('share_summary', True) + share_notes = data.get('share_notes', True) + force_new = data.get('force_new', False) + + # Check if ANY share already exists for this recording by this user + existing_share = Share.query.filter_by( + recording_id=recording.id, + user_id=current_user.id + ).order_by(Share.created_at.desc()).first() + + if existing_share and not force_new: + # Update the share permissions if they've changed + if existing_share.share_summary != share_summary or existing_share.share_notes != share_notes: + existing_share.share_summary = share_summary + existing_share.share_notes = share_notes + db.session.commit() + + # Return existing share info + share_url = url_for('shares.view_shared_recording', public_id=existing_share.public_id, _external=True) + return jsonify({ + 'success': True, + 'share_url': share_url, + 'share': existing_share.to_dict(), + 'existing': True, + 'message': 'Using existing share link for this recording' + }), 200 + + # Create new share + share = Share( + recording_id=recording.id, + user_id=current_user.id, + share_summary=share_summary, + share_notes=share_notes + ) + db.session.add(share) + db.session.commit() + + share_url = url_for('shares.view_shared_recording', public_id=share.public_id, _external=True) + + return jsonify({ + 'success': True, + 'share_url': share_url, + 'share': share.to_dict(), + 'existing': False + }), 201 + + +@shares_bp.route('/api/shares', methods=['GET']) +@login_required +def get_shares(): + """Get all public shares for the current user.""" + shares = Share.query.filter_by(user_id=current_user.id).order_by(Share.created_at.desc()).all() + return jsonify([share.to_dict() for share in shares]) + + +@shares_bp.route('/api/share/', methods=['PUT']) +@login_required +def update_share(share_id): + """Update a public share's settings.""" + share = Share.query.filter_by(id=share_id, user_id=current_user.id).first_or_404() + data = request.json + + if 'share_summary' in data: + share.share_summary = data['share_summary'] + if 'share_notes' in data: + share.share_notes = data['share_notes'] + + db.session.commit() + return jsonify({'success': True, 'share': share.to_dict()}) + + +@shares_bp.route('/api/share/', methods=['DELETE']) +@login_required +def delete_share(share_id): + """Delete a public share.""" + share = Share.query.filter_by(id=share_id, user_id=current_user.id).first_or_404() + db.session.delete(share) + db.session.commit() + return jsonify({'success': True}) + + +# --- Internal Sharing Routes --- + +@shares_bp.route('/api/users/search', methods=['GET']) +@login_required +def search_users(): + """Search for users by username (for internal sharing).""" + if not ENABLE_INTERNAL_SHARING: + return jsonify({'error': 'Internal sharing is not enabled'}), 403 + + query = request.args.get('q', '').strip() + + # If SHOW_USERNAMES_IN_UI is enabled and no query, return all users for quick selection + if SHOW_USERNAMES_IN_UI and len(query) < 2: + users = User.query.filter(User.id != current_user.id).order_by(User.username).all() + elif len(query) < 2: + # If usernames are hidden and no query, return empty + return jsonify([]) + else: + if SHOW_USERNAMES_IN_UI: + # If usernames are shown, allow partial match (autocomplete) + users = User.query.filter( + User.id != current_user.id, + User.username.ilike(f'%{query}%') + ).limit(10).all() + else: + # If usernames are hidden (privacy mode), require exact match only + users = User.query.filter( + User.id != current_user.id, + User.username == query + ).all() + + return jsonify([{ + 'id': user.id, + 'username': user.username, + 'email': user.email if SHOW_USERNAMES_IN_UI else None + } for user in users]) + + +@shares_bp.route('/api/recordings//share-internal', methods=['POST']) +@login_required +def share_recording_internal(recording_id): + """Share a recording with another user internally.""" + if not ENABLE_INTERNAL_SHARING: + return jsonify({'error': 'Internal sharing is not enabled'}), 403 + + try: + data = request.json + shared_with_user_id = data.get('user_id') + can_edit = data.get('can_edit', False) + can_reshare = data.get('can_reshare', False) + + if not shared_with_user_id: + return jsonify({'error': 'User ID is required'}), 400 + + # Check recording exists and user has permission to share it + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_reshare=True): + return jsonify({'error': 'You do not have permission to share this recording'}), 403 + + # Check target user exists + target_user = db.session.get(User, shared_with_user_id) + if not target_user: + return jsonify({'error': 'Target user not found'}), 404 + + # Prevent sharing back to owner (circular share) + if shared_with_user_id == recording.user_id: + return jsonify({'error': 'Cannot share a recording with its owner'}), 400 + + # Prevent sharing with self + if shared_with_user_id == current_user.id: + return jsonify({'error': 'Cannot share a recording with yourself'}), 400 + + # Check if already shared + existing_share = InternalShare.query.filter_by( + recording_id=recording_id, + shared_with_user_id=shared_with_user_id + ).first() + + if existing_share: + return jsonify({'error': 'Recording already shared with this user'}), 409 + + # PERMISSION VALIDATION: Validate that current user can grant the requested permissions + requested_permissions = {'can_edit': can_edit, 'can_reshare': can_reshare} + is_valid, error_message = InternalShare.validate_reshare_permissions( + recording, current_user, requested_permissions + ) + + if not is_valid: + return jsonify({'error': error_message}), 403 + + # Get current user's permissions for audit log + actor_permissions = InternalShare.get_user_max_permissions(recording, current_user) + + # Create share + share = InternalShare( + recording_id=recording_id, + owner_id=current_user.id, + shared_with_user_id=shared_with_user_id, + can_edit=can_edit, + can_reshare=can_reshare + ) + db.session.add(share) + + # Create or update SharedRecordingState for the recipient + state = SharedRecordingState.query.filter_by( + recording_id=recording_id, + user_id=shared_with_user_id + ).first() + + if not state: + # Create new state if it doesn't exist + state = SharedRecordingState( + recording_id=recording_id, + user_id=shared_with_user_id, + is_inbox=True, # New shares appear in inbox by default + is_highlighted=False # Not favorited by default + ) + db.session.add(state) + else: + # Reset to inbox if it already exists (e.g., from previous share that was deleted) + state.is_inbox = True + + db.session.commit() + + # AUDIT LOGGING: Log the share creation + try: + ShareAuditLog.log_share_created( + recording_id=recording_id, + actor_id=current_user.id, + target_user_id=shared_with_user_id, + permissions={'can_edit': can_edit, 'can_reshare': can_reshare}, + actor_permissions=actor_permissions, + notes=f"Shared by {'owner' if recording.user_id == current_user.id else 'delegated user'}", + ip_address=request.remote_addr + ) + db.session.commit() + except Exception as audit_error: + # Don't fail the share if audit logging fails + current_app.logger.error(f"Failed to log share creation: {audit_error}") + + return jsonify({ + 'success': True, + 'share': share.to_dict() + }), 201 + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error sharing recording internally: {e}") + return jsonify({'error': str(e)}), 500 + + +@shares_bp.route('/api/recordings//shares-internal', methods=['GET']) +@login_required +def get_internal_shares(recording_id): + """Get list of users a recording is shared with, including owner.""" + if not ENABLE_INTERNAL_SHARING: + return jsonify({'error': 'Internal sharing is not enabled'}), 403 + + # Check recording exists and user has permission to view shares + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_reshare=True): + return jsonify({'error': 'You do not have permission to view shares for this recording'}), 403 + + # Get all internal shares + shares = InternalShare.query.filter_by(recording_id=recording_id).all() + shares_list = [share.to_dict() for share in shares] + + # Add owner as first entry (owner always has full permissions) + owner = db.session.get(User, recording.user_id) + if owner: + owner_entry = { + 'id': None, # No share ID for owner + 'recording_id': recording_id, + 'owner_id': owner.id, + 'owner_username': owner.username, + 'user_id': owner.id, + 'username': owner.username, + 'can_edit': True, + 'can_reshare': True, + 'is_owner': True, # Mark as owner + 'source_type': 'owner', + 'source_tag_id': None, + 'created_at': recording.created_at.isoformat() if recording.created_at else None + } + # Insert owner at the beginning + shares_list.insert(0, owner_entry) + + return jsonify({'shares': shares_list}) + + +@shares_bp.route('/api/internal-shares/', methods=['DELETE']) +@login_required +def revoke_internal_share(share_id): + """Revoke an internal share with cascade revocation.""" + if not ENABLE_INTERNAL_SHARING: + return jsonify({'error': 'Internal sharing is not enabled'}), 403 + + share = db.session.get(InternalShare, share_id) + if not share: + return jsonify({'error': 'Share not found'}), 404 + + # Only owner can revoke + if share.owner_id != current_user.id: + return jsonify({'error': 'You do not have permission to revoke this share'}), 403 + + recording_id = share.recording_id + revoked_user_id = share.shared_with_user_id + revoked_count = 0 + + try: + # CASCADE REVOCATION: Find downstream shares created by the user losing access + downstream_shares = InternalShare.find_downstream_shares(recording_id, revoked_user_id) + + # Recursively revoke downstream shares that don't have alternate paths + for downstream in downstream_shares: + # Check for alternate access paths (diamond pattern protection) + has_alternate = InternalShare.has_alternate_access_path( + recording_id, + downstream.shared_with_user_id, + excluding_grantor_id=revoked_user_id + ) + + if not has_alternate: + # No alternate path - cascade revoke + # Audit log cascade revocation + try: + ShareAuditLog.log_share_revoked( + share_id=downstream.id, + recording_id=recording_id, + actor_id=current_user.id, + target_user_id=downstream.shared_with_user_id, + was_cascade=True, + notes=f"Cascaded from revoking user {revoked_user_id}", + ip_address=request.remote_addr + ) + except Exception as audit_error: + current_app.logger.error(f"Failed to log cascade revocation: {audit_error}") + + db.session.delete(downstream) + revoked_count += 1 + + # Audit log the primary revocation + try: + ShareAuditLog.log_share_revoked( + share_id=share.id, + recording_id=recording_id, + actor_id=current_user.id, + target_user_id=revoked_user_id, + was_cascade=False, + notes=f"Revoked by user {current_user.id}, cascaded to {revoked_count} downstream shares", + ip_address=request.remote_addr + ) + except Exception as audit_error: + current_app.logger.error(f"Failed to log revocation: {audit_error}") + + # Delete the primary share + db.session.delete(share) + db.session.commit() + + return jsonify({ + 'success': True, + 'revoked_count': revoked_count + 1, # Include primary share + 'cascaded': revoked_count + }) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error revoking internal share: {e}") + return jsonify({'error': str(e)}), 500 + + +@shares_bp.route('/api/recordings/shared-with-me', methods=['GET']) +@login_required +def get_shared_with_me(): + """Get recordings that have been shared with the current user.""" + if not ENABLE_INTERNAL_SHARING: + return jsonify({'error': 'Internal sharing is not enabled'}), 403 + + try: + # Get shares where current user is the recipient + shares = InternalShare.query.filter_by(shared_with_user_id=current_user.id).all() + + result = [] + for share in shares: + recording = share.recording + if recording and recording.status == 'COMPLETED': + rec_data = recording.to_list_dict(viewer_user=current_user) + # Mark as shared recording with owner info + rec_data['is_shared'] = True + rec_data['owner_username'] = share.owner.username if SHOW_USERNAMES_IN_UI else None + # Don't show outgoing share counts for recordings you don't own + rec_data['shared_with_count'] = 0 + rec_data['public_share_count'] = 0 + # Check if recording has group tags (among visible tags) + visible_tags = recording.get_visible_tags(current_user) + rec_data['has_group_tags'] = any(tag.is_group_tag for tag in visible_tags) if visible_tags else False + rec_data['share_info'] = { + 'share_id': share.id, + 'owner_username': share.owner.username if SHOW_USERNAMES_IN_UI else None, + 'can_edit': share.can_edit, + 'can_reshare': share.can_reshare, + 'shared_at': share.created_at.isoformat() + } + result.append(rec_data) + + return jsonify(result) + + except Exception as e: + current_app.logger.error(f"Error fetching shared recordings: {e}") + return jsonify({'error': str(e)}), 500 + + +@shares_bp.route('/api/permissions/can-share-publicly', methods=['GET']) +@login_required +def can_share_publicly(): + """Check if the current user has permission to create public shares.""" + return jsonify({ + 'can_share_publicly': current_user.can_share_publicly and ENABLE_PUBLIC_SHARING + }) diff --git a/src/api/speakers.py b/src/api/speakers.py new file mode 100644 index 0000000..2151edf --- /dev/null +++ b/src/api/speakers.py @@ -0,0 +1,583 @@ +""" +Speaker identification and management. + +This blueprint was auto-generated from app.py route extraction. +""" + +import os +import json +import time +from datetime import datetime, timedelta +from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify, send_file, Response, current_app +from flask_login import login_required, current_user +from werkzeug.utils import secure_filename + +from src.database import db +from src.models import * +from src.utils import * +from src.utils.ffmpeg_utils import extract_audio_segment, FFmpegError, FFmpegNotFoundError +from src.utils.ffprobe import get_codec_info, FFProbeError +from src.services.speaker_embedding_matcher import find_matching_speakers +from src.services.speaker_snippets import get_speaker_snippets, get_speaker_recordings_with_snippets +from src.services.speaker_merge import merge_speakers, preview_merge, can_merge_speakers + +# Create blueprint +speakers_bp = Blueprint('speakers', __name__) + +# Configuration from environment +ENABLE_INQUIRE_MODE = os.environ.get('ENABLE_INQUIRE_MODE', 'false').lower() == 'true' +ENABLE_AUTO_DELETION = os.environ.get('ENABLE_AUTO_DELETION', 'false').lower() == 'true' +USERS_CAN_DELETE = os.environ.get('USERS_CAN_DELETE', 'true').lower() == 'true' +ENABLE_INTERNAL_SHARING = os.environ.get('ENABLE_INTERNAL_SHARING', 'false').lower() == 'true' +USE_ASR_ENDPOINT = os.environ.get('USE_ASR_ENDPOINT', 'false').lower() == 'true' + +# Global helpers (will be injected from app) +has_recording_access = None +bcrypt = None +csrf = None +limiter = None + +def init_speakers_helpers(**kwargs): + """Initialize helper functions and extensions from app.""" + global has_recording_access, bcrypt, csrf, limiter + has_recording_access = kwargs.get('has_recording_access') + bcrypt = kwargs.get('bcrypt') + csrf = kwargs.get('csrf') + limiter = kwargs.get('limiter') + + +# --- Routes --- + +@speakers_bp.route('/speakers', methods=['GET']) +@login_required +def get_speakers(): + """Get all speakers for the current user, ordered by usage frequency and recency.""" + try: + speakers = Speaker.query.filter_by(user_id=current_user.id)\ + .order_by(Speaker.use_count.desc(), Speaker.last_used.desc())\ + .all() + return jsonify([speaker.to_dict() for speaker in speakers]) + except Exception as e: + current_app.logger.error(f"Error fetching speakers: {e}") + return jsonify({'error': str(e)}), 500 + + + +@speakers_bp.route('/speakers/search', methods=['GET']) +@login_required +def search_speakers(): + """Search speakers by name for autocomplete functionality.""" + try: + query = request.args.get('q', '').strip() + if not query: + return jsonify([]) + + speakers = Speaker.query.filter_by(user_id=current_user.id)\ + .filter(Speaker.name.ilike(f'%{query}%'))\ + .order_by(Speaker.use_count.desc(), Speaker.last_used.desc())\ + .limit(10)\ + .all() + + return jsonify([speaker.to_dict() for speaker in speakers]) + except Exception as e: + current_app.logger.error(f"Error searching speakers: {e}") + return jsonify({'error': str(e)}), 500 + + + +@speakers_bp.route('/speakers', methods=['POST']) +@login_required +def create_speaker(): + """Create a new speaker or update existing one.""" + try: + data = request.json + name = data.get('name', '').strip() + + if not name: + return jsonify({'error': 'Speaker name is required'}), 400 + + # Check if speaker already exists for this user + existing_speaker = Speaker.query.filter_by(user_id=current_user.id, name=name).first() + + if existing_speaker: + # Update usage statistics + existing_speaker.use_count += 1 + existing_speaker.last_used = datetime.utcnow() + db.session.commit() + return jsonify(existing_speaker.to_dict()) + else: + # Create new speaker + speaker = Speaker( + name=name, + user_id=current_user.id, + use_count=1, + created_at=datetime.utcnow(), + last_used=datetime.utcnow() + ) + db.session.add(speaker) + db.session.commit() + return jsonify(speaker.to_dict()), 201 + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error creating speaker: {e}") + return jsonify({'error': str(e)}), 500 + + + +@speakers_bp.route('/speakers/', methods=['PUT']) +@login_required +def update_speaker(speaker_id): + """Update a speaker's name and cascade the change to all recordings.""" + try: + speaker = Speaker.query.filter_by(id=speaker_id, user_id=current_user.id).first() + if not speaker: + return jsonify({'error': 'Speaker not found'}), 404 + + data = request.json + new_name = data.get('name', '').strip() + + if not new_name: + return jsonify({'error': 'Speaker name cannot be empty'}), 400 + + # Check if another speaker with this name already exists for this user + existing_speaker = Speaker.query.filter_by(user_id=current_user.id, name=new_name).first() + if existing_speaker and existing_speaker.id != speaker_id: + return jsonify({'error': f'A speaker named "{new_name}" already exists'}), 400 + + # Store old name for updating transcript chunks and recordings + old_name = speaker.name + + # Update the speaker name + speaker.name = new_name + + # Update all transcript chunks that reference this speaker's old name + # This ensures the name change cascades to all recordings + from src.models import TranscriptChunk + chunks_updated = TranscriptChunk.query.filter_by( + user_id=current_user.id, + speaker_name=old_name + ).update({'speaker_name': new_name}) + + # Update Recording.participants field (comma-separated list of speakers) + # AND update speaker names in the transcription JSON + recordings_updated = 0 + user_recordings = Recording.query.filter_by(user_id=current_user.id).all() + + for recording in user_recordings: + updated = False + + # Update participants field if it contains the old name + if recording.participants and old_name in recording.participants: + # Replace exact speaker name matches in participants list + # Handle various formats: "Ross", "Ross, John", "John, Ross", etc. + participants_list = [p.strip() for p in recording.participants.split(',')] + if old_name in participants_list: + # Replace the old name with new name + participants_list = [new_name if p == old_name else p for p in participants_list] + recording.participants = ', '.join(participants_list) + updated = True + + # Update speaker names in the transcription JSON + # This is what displays in the transcript view speaker badges + if recording.transcription: + try: + transcription_data = json.loads(recording.transcription) + + # Handle JSON format (array of segments with speaker field) + if isinstance(transcription_data, list): + segments_updated = False + for segment in transcription_data: + if segment.get('speaker') == old_name: + segment['speaker'] = new_name + segments_updated = True + + if segments_updated: + recording.transcription = json.dumps(transcription_data) + updated = True + except (json.JSONDecodeError, TypeError): + # Not JSON or invalid format, skip + pass + + if updated: + recordings_updated += 1 + + db.session.commit() + + current_app.logger.info( + f"Updated speaker {speaker_id} from '{old_name}' to '{new_name}': " + f"{chunks_updated} transcript chunks, {recordings_updated} recordings" + ) + + return jsonify({ + 'success': True, + 'speaker': speaker.to_dict(), + 'chunks_updated': chunks_updated, + 'recordings_updated': recordings_updated + }) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error updating speaker: {e}") + return jsonify({'error': str(e)}), 500 + + +@speakers_bp.route('/speakers/', methods=['DELETE']) +@login_required +def delete_speaker(speaker_id): + """Delete a speaker.""" + try: + speaker = Speaker.query.filter_by(id=speaker_id, user_id=current_user.id).first() + if not speaker: + return jsonify({'error': 'Speaker not found'}), 404 + + db.session.delete(speaker) + db.session.commit() + return jsonify({'success': True}) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error deleting speaker: {e}") + return jsonify({'error': str(e)}), 500 + + + +@speakers_bp.route('/speakers/delete_all', methods=['DELETE']) +@login_required +def delete_all_speakers(): + """Delete all speakers for the current user.""" + try: + deleted_count = Speaker.query.filter_by(user_id=current_user.id).delete() + db.session.commit() + return jsonify({'success': True, 'deleted_count': deleted_count}) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error deleting all speakers: {e}") + return jsonify({'error': str(e)}), 500 + + +@speakers_bp.route('/speakers/suggestions/', methods=['GET']) +@login_required +def get_speaker_suggestions(recording_id): + """ + Get speaker suggestions based on voice embeddings from a recording. + + For each speaker in the recording, returns matching speakers from the user's + speaker database based on voice similarity. + + Returns: + { + 'SPEAKER_00': [ + {'speaker_id': 5, 'name': 'John', 'similarity': 85.3, 'confidence': 0.92}, + ... + ], + 'SPEAKER_01': [...], + ... + } + """ + try: + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_edit=False): + return jsonify({'error': 'You do not have permission to access this recording'}), 403 + + # Get speaker embeddings from recording + if not recording.speaker_embeddings: + return jsonify({'suggestions': {}, 'message': 'No speaker embeddings available'}), 200 + + try: + embeddings_data = json.loads(recording.speaker_embeddings) if isinstance(recording.speaker_embeddings, str) else recording.speaker_embeddings + except (json.JSONDecodeError, TypeError): + return jsonify({'error': 'Invalid speaker embeddings data'}), 500 + + # Get similarity threshold from query params (default 70%) + threshold = float(request.args.get('threshold', 0.70)) + + # Find matches for each speaker + suggestions = {} + for speaker_label, embedding in embeddings_data.items(): + if embedding and len(embedding) == 256: # Validate embedding dimension + matches = find_matching_speakers(embedding, current_user.id, threshold) + suggestions[speaker_label] = matches + else: + suggestions[speaker_label] = [] + + return jsonify({ + 'success': True, + 'suggestions': suggestions, + 'recording_id': recording_id + }) + + except Exception as e: + current_app.logger.error(f"Error getting speaker suggestions: {e}") + return jsonify({'error': str(e)}), 500 + + +@speakers_bp.route('/speakers//snippets', methods=['GET']) +@login_required +def get_snippets(speaker_id): + """ + Get representative speech snippets for a speaker. + + Returns recent quotes from recordings where this speaker appeared. + """ + try: + # Verify speaker belongs to user + speaker = Speaker.query.filter_by(id=speaker_id, user_id=current_user.id).first() + if not speaker: + return jsonify({'error': 'Speaker not found'}), 404 + + limit = int(request.args.get('limit', 5)) + snippets = get_speaker_snippets(speaker_id, limit) + + return jsonify({ + 'success': True, + 'speaker_id': speaker_id, + 'speaker_name': speaker.name, + 'snippets': snippets + }) + + except Exception as e: + current_app.logger.error(f"Error getting speaker snippets: {e}") + return jsonify({'error': str(e)}), 500 + + +@speakers_bp.route('/speakers//recordings', methods=['GET']) +@login_required +def get_speaker_recordings(speaker_id): + """ + Get list of recordings that contain snippets from this speaker. + + Returns recording metadata with snippet counts. + """ + try: + # Verify speaker belongs to user + speaker = Speaker.query.filter_by(id=speaker_id, user_id=current_user.id).first() + if not speaker: + return jsonify({'error': 'Speaker not found'}), 404 + + recordings = get_speaker_recordings_with_snippets(speaker_id) + + return jsonify({ + 'success': True, + 'speaker_id': speaker_id, + 'speaker_name': speaker.name, + 'recordings': recordings + }) + + except Exception as e: + current_app.logger.error(f"Error getting speaker recordings: {e}") + return jsonify({'error': str(e)}), 500 + + +@speakers_bp.route('/speakers//clear_embeddings', methods=['POST']) +@login_required +def clear_speaker_embeddings(speaker_id): + """ + Clear all voice embeddings for a speaker. + + This removes all voice recognition data but keeps the speaker name and metadata. + Useful for resetting voice profiles or removing outdated/incorrect voice data. + """ + try: + # Verify speaker belongs to user + speaker = Speaker.query.filter_by(id=speaker_id, user_id=current_user.id).first() + if not speaker: + return jsonify({'error': 'Speaker not found'}), 404 + + # Clear all embeddings + speaker.voice_embeddings = None + speaker.embedding_count = 0 + speaker.confidence_score = None + + db.session.commit() + + current_app.logger.info(f"Cleared voice embeddings for speaker {speaker_id} ({speaker.name})") + + return jsonify({ + 'success': True, + 'message': f'Voice profile cleared for {speaker.name}', + 'speaker': { + 'id': speaker.id, + 'name': speaker.name, + 'embedding_count': 0 + } + }) + + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error clearing speaker embeddings: {e}") + return jsonify({'error': str(e)}), 500 + + +@speakers_bp.route('/speakers/snippet-audio/', methods=['GET']) +@login_required +def get_snippet_audio(recording_id): + """ + Serve a short audio snippet from a recording. + + Query parameters: + start: Start time in seconds (float) + duration: Duration in seconds (float, max 5.0) + + Returns: + Audio file segment in the original format + """ + import tempfile + import os + from pathlib import Path + + try: + # Get query parameters + start_time = float(request.args.get('start', 0)) + duration = min(float(request.args.get('duration', 4.0)), 5.0) # Max 5 seconds + + # Get the recording + recording = db.session.get(Recording, recording_id) + if not recording: + return jsonify({'error': 'Recording not found'}), 404 + + if not has_recording_access(recording, current_user, require_edit=False): + return jsonify({'error': 'You do not have permission to access this recording'}), 403 + + if recording.audio_deleted_at: + return jsonify({'error': 'Audio file has been deleted'}), 410 + + if not recording.audio_path or not os.path.exists(recording.audio_path): + return jsonify({'error': 'Audio file not found'}), 404 + + # Detect audio codec to pick the right output container for stream copy + codec_to_container = { + 'mp3': ('.mp3', 'audio/mpeg'), + 'aac': ('.m4a', 'audio/mp4'), + 'opus': ('.ogg', 'audio/ogg'), + 'vorbis': ('.ogg', 'audio/ogg'), + 'flac': ('.flac', 'audio/flac'), + 'pcm_s16le': ('.wav', 'audio/wav'), + 'pcm_s24le': ('.wav', 'audio/wav'), + 'pcm_s32le': ('.wav', 'audio/wav'), + 'pcm_f32le': ('.wav', 'audio/wav'), + } + snippet_ext = '.mp3' + snippet_mime = 'audio/mpeg' + try: + codec_info = get_codec_info(recording.audio_path, timeout=10) + audio_codec = codec_info.get('audio_codec') + if audio_codec and audio_codec in codec_to_container: + snippet_ext, snippet_mime = codec_to_container[audio_codec] + except FFProbeError: + pass # Fall back to mp3 + + # Create temporary file for the snippet + with tempfile.NamedTemporaryFile(delete=False, suffix=snippet_ext) as tmp_file: + output_path = tmp_file.name + + try: + # Use centralized FFmpeg utility to extract the audio segment + extract_audio_segment( + recording.audio_path, + output_path, + start_time, + duration + ) + + # Send the file + response = send_file( + output_path, + mimetype=snippet_mime, + as_attachment=False, + download_name=f'snippet_{recording_id}_{start_time:.1f}s{snippet_ext}' + ) + + # Clean up temporary file after sending + @response.call_on_close + def cleanup(): + try: + os.unlink(output_path) + except: + pass + + return response + + except FFmpegNotFoundError as e: + current_app.logger.error(f"FFmpeg not found: {e}") + try: + os.unlink(output_path) + except: + pass + return jsonify({'error': 'FFmpeg not found on server'}), 500 + except FFmpegError as e: + current_app.logger.error(f"FFmpeg error extracting snippet: {e}") + try: + os.unlink(output_path) + except: + pass + return jsonify({'error': 'Failed to extract audio snippet'}), 500 + + except ValueError: + return jsonify({'error': 'Invalid start time or duration'}), 400 + except Exception as e: + current_app.logger.error(f"Error serving audio snippet: {e}") + return jsonify({'error': str(e)}), 500 + + +@speakers_bp.route('/speakers/merge', methods=['POST']) +@login_required +def merge_speaker_profiles(): + """ + Merge multiple speaker profiles into one. + + Request body: + { + 'target_id': 5, # Speaker to keep + 'source_ids': [6, 7, 8], # Speakers to merge into target + 'preview': false # Optional: if true, just preview without executing + } + + Returns merged speaker data or preview statistics. + """ + try: + data = request.json + target_id = data.get('target_id') + source_ids = data.get('source_ids', []) + preview = data.get('preview', False) + + if not target_id: + return jsonify({'error': 'target_id is required'}), 400 + + if not source_ids or not isinstance(source_ids, list): + return jsonify({'error': 'source_ids must be a non-empty list'}), 400 + + # Validate speakers can be merged + can_merge, error_msg = can_merge_speakers([target_id] + source_ids, current_user.id) + if not can_merge: + return jsonify({'error': error_msg}), 400 + + if preview: + # Just return preview statistics + preview_data = preview_merge(target_id, source_ids, current_user.id) + return jsonify({ + 'success': True, + 'preview': preview_data + }) + else: + # Execute the merge + merged_speaker = merge_speakers(target_id, source_ids, current_user.id) + return jsonify({ + 'success': True, + 'message': f'Successfully merged {len(source_ids)} speaker(s) into {merged_speaker.name}', + 'speaker': merged_speaker.to_dict() + }) + + except ValueError as e: + return jsonify({'error': str(e)}), 400 + except Exception as e: + db.session.rollback() + current_app.logger.error(f"Error merging speakers: {e}") + return jsonify({'error': str(e)}), 500 + + + diff --git a/src/api/system.py b/src/api/system.py new file mode 100644 index 0000000..046aa78 --- /dev/null +++ b/src/api/system.py @@ -0,0 +1,299 @@ +""" +System info and configuration. + +This blueprint was auto-generated from app.py route extraction. +""" + +import os +import json +from datetime import datetime, timedelta +from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify, send_file, Response, current_app +from flask_login import login_required, current_user +from werkzeug.utils import secure_filename + +from src.database import db +from src.models import * +from src.utils import * +from src.config.version import get_version +from src.services.llm import TEXT_MODEL_BASE_URL, TEXT_MODEL_NAME +from src.config.app_config import ASR_BASE_URL, USE_NEW_TRANSCRIPTION_ARCHITECTURE +from src.services.token_tracking import token_tracker +from src.services.transcription import TranscriptionCapability + +# Create blueprint +system_bp = Blueprint('system', __name__) + +# Configuration from environment +ENABLE_INQUIRE_MODE = os.environ.get('ENABLE_INQUIRE_MODE', 'false').lower() == 'true' +ENABLE_AUTO_DELETION = os.environ.get('ENABLE_AUTO_DELETION', 'false').lower() == 'true' +DELETION_MODE = os.environ.get('DELETION_MODE', 'full_recording') # 'audio_only' or 'full_recording' +USERS_CAN_DELETE = os.environ.get('USERS_CAN_DELETE', 'true').lower() == 'true' +ENABLE_INTERNAL_SHARING = os.environ.get('ENABLE_INTERNAL_SHARING', 'false').lower() == 'true' +USE_ASR_ENDPOINT = os.environ.get('USE_ASR_ENDPOINT', 'false').lower() == 'true' +ENABLE_CHUNKING = os.environ.get('ENABLE_CHUNKING', 'true').lower() == 'true' +SHOW_USERNAMES_IN_UI = os.environ.get('SHOW_USERNAMES_IN_UI', 'false').lower() == 'true' +ENABLE_AUTO_EXPORT = os.environ.get('ENABLE_AUTO_EXPORT', 'false').lower() == 'true' +ENABLE_INCOGNITO_MODE = os.environ.get('ENABLE_INCOGNITO_MODE', 'false').lower() == 'true' +INCOGNITO_MODE_DEFAULT = os.environ.get('INCOGNITO_MODE_DEFAULT', 'false').lower() == 'true' +VIDEO_RETENTION = os.environ.get('VIDEO_RETENTION', 'false').lower() == 'true' +MAX_CONCURRENT_UPLOADS = int(os.environ.get('MAX_CONCURRENT_UPLOADS', '3')) + +# Import chunking service (will be set from app) +chunking_service = None + +# Global helpers (will be injected from app) +has_recording_access = None +bcrypt = None +csrf = None +limiter = None + +def init_system_helpers(**kwargs): + """Initialize helper functions and extensions from app.""" + global has_recording_access, bcrypt, csrf, limiter, chunking_service + has_recording_access = kwargs.get('has_recording_access') + bcrypt = kwargs.get('bcrypt') + csrf = kwargs.get('csrf') + limiter = kwargs.get('limiter') + chunking_service = kwargs.get('chunking_service') + + +def csrf_exempt(f): + """Decorator placeholder for CSRF exemption - applied after initialization.""" + from functools import wraps + @wraps(f) + def wrapper(*args, **kwargs): + return f(*args, **kwargs) + wrapper._csrf_exempt = True + return wrapper + + +# --- Routes --- + +@system_bp.route('/api/user/preferences', methods=['POST']) +@login_required +def save_user_preferences(): + """Save user preferences including UI language""" + data = request.json + + if 'language' in data: + current_user.ui_language = data['language'] + + db.session.commit() + + return jsonify({ + 'success': True, + 'message': 'Preferences saved successfully', + 'ui_language': current_user.ui_language + }) + + +@system_bp.route('/api/user/token-budget', methods=['GET']) +@login_required +def get_user_token_budget(): + """Get current user's token budget status.""" + try: + user = current_user + + # If user has no budget, return null to indicate unlimited + if not user.monthly_token_budget: + return jsonify({ + 'has_budget': False, + 'budget': None, + 'usage': 0, + 'percentage': 0 + }) + + # Get current usage + current_usage = token_tracker.get_monthly_usage(user.id) + percentage = (current_usage / user.monthly_token_budget) * 100 + + return jsonify({ + 'has_budget': True, + 'budget': user.monthly_token_budget, + 'usage': current_usage, + 'percentage': round(percentage, 1) + }) + except Exception as e: + current_app.logger.error(f"Error getting token budget for user {current_user.id}: {e}") + return jsonify({'error': str(e)}), 500 + + +# --- System Info API Endpoint --- + + +@system_bp.route('/api/system/info', methods=['GET']) +def get_system_info(): + """Get system information including version and model details.""" + try: + # Use the same version detection logic as startup + version = get_version() + + # Get transcription connector info + transcription_info = { + 'connector': 'unknown', + 'model': None, + 'supports_diarization': USE_ASR_ENDPOINT, # Backwards compatible default + 'supports_speaker_embeddings': False, + } + + if USE_NEW_TRANSCRIPTION_ARCHITECTURE: + try: + from src.services.transcription import get_registry + registry = get_registry() + connector = registry.get_active_connector() + if connector: + transcription_info = { + 'connector': registry.get_active_connector_name(), + 'model': getattr(connector, 'model', None), # Model name if available + 'supports_diarization': connector.supports_diarization, + 'supports_speaker_embeddings': connector.supports(TranscriptionCapability.SPEAKER_EMBEDDINGS), + } + except Exception as e: + current_app.logger.warning(f"Could not get connector info: {e}") + + # Determine ASR status from connector (new arch) or env var (legacy) + is_asr_connector = transcription_info.get('connector') == 'asr_endpoint' + asr_enabled = is_asr_connector or USE_ASR_ENDPOINT + + # Determine the active transcription endpoint based on which connector is in use + if asr_enabled: + active_endpoint = ASR_BASE_URL + else: + active_endpoint = os.environ.get('TRANSCRIPTION_BASE_URL', 'https://api.openai.com/v1') + + return jsonify({ + 'version': version, + 'llm_endpoint': TEXT_MODEL_BASE_URL, + 'llm_model': TEXT_MODEL_NAME, + 'transcription_endpoint': active_endpoint, # The actual endpoint being used + 'asr_enabled': asr_enabled, + # Legacy fields for backwards compatibility + 'whisper_endpoint': os.environ.get('TRANSCRIPTION_BASE_URL', 'https://api.openai.com/v1'), + 'asr_endpoint': ASR_BASE_URL if asr_enabled else None, + 'transcription': transcription_info, + }) + except Exception as e: + current_app.logger.error(f"Error getting system info: {e}") + return jsonify({'error': 'Unable to retrieve system information'}), 500 + +# --- Tag API Endpoints --- + + +@system_bp.route('/api/config', methods=['GET']) +def get_config(): + """Get application configuration settings for the frontend.""" + try: + # Get configurable file size limit + max_file_size_mb = SystemSetting.get_setting('max_file_size_mb', 250) + + # Get chunking configuration (supports both legacy and new formats) + chunking_info = {} + if ENABLE_CHUNKING and chunking_service: + mode, limit_value = chunking_service.parse_chunk_limit() + chunking_info = { + 'chunking_enabled': True, + 'chunking_mode': mode, # 'size' or 'duration' + 'chunking_limit': limit_value, # Value in MB or seconds + 'chunking_limit_display': f"{limit_value}{'MB' if mode == 'size' else 's'}" + } + else: + chunking_info = { + 'chunking_enabled': False, + 'chunking_mode': 'size', + 'chunking_limit': 20, + 'chunking_limit_display': '20MB' + } + + # Check if current user can delete (for authenticated requests) + can_delete = True # Default to true for unauthenticated config requests + try: + from flask_login import current_user + if current_user and current_user.is_authenticated: + can_delete = USERS_CAN_DELETE or current_user.is_admin + except: + pass # If not authenticated, use default + + # Calculate if archive toggle should be shown (only when audio-only deletion mode is active) + enable_archive_toggle = ENABLE_AUTO_DELETION and DELETION_MODE == 'audio_only' + + # Get connector capabilities (new architecture) + # Defaults to USE_ASR_ENDPOINT for backwards compatibility + connector_supports_diarization = USE_ASR_ENDPOINT + connector_supports_speaker_count = USE_ASR_ENDPOINT # ASR endpoint supports min/max speakers + is_asr_connector = False + if USE_NEW_TRANSCRIPTION_ARCHITECTURE: + try: + from src.services.transcription import get_registry + registry = get_registry() + connector = registry.get_active_connector() + if connector: + connector_supports_diarization = connector.supports_diarization + connector_supports_speaker_count = connector.supports_speaker_count_control + is_asr_connector = registry.get_active_connector_name() == 'asr_endpoint' + except Exception as e: + current_app.logger.warning(f"Could not get connector capabilities: {e}") + + # Derive ASR status from connector or legacy env var + asr_enabled = is_asr_connector or USE_ASR_ENDPOINT + + return jsonify({ + 'max_file_size_mb': max_file_size_mb, + 'recording_disclaimer': SystemSetting.get_setting('recording_disclaimer', ''), + 'upload_disclaimer': SystemSetting.get_setting('upload_disclaimer', ''), + 'custom_banner': SystemSetting.get_setting('custom_banner', ''), + 'use_asr_endpoint': asr_enabled, # Derived from connector or legacy env var + 'connector_supports_diarization': connector_supports_diarization, # Connector capability + 'connector_supports_speaker_count': connector_supports_speaker_count, # Min/max speakers + 'enable_internal_sharing': ENABLE_INTERNAL_SHARING, + 'enable_archive_toggle': enable_archive_toggle, + 'show_usernames_in_ui': SHOW_USERNAMES_IN_UI, + 'can_delete_recordings': can_delete, + 'users_can_delete_enabled': USERS_CAN_DELETE, + 'enable_incognito_mode': ENABLE_INCOGNITO_MODE, + 'incognito_mode_default': INCOGNITO_MODE_DEFAULT, + 'enable_folders': SystemSetting.get_setting('enable_folders', False) == True, + 'enable_auto_export': ENABLE_AUTO_EXPORT, + 'video_retention': VIDEO_RETENTION, + 'max_concurrent_uploads': MAX_CONCURRENT_UPLOADS, + **chunking_info + }) + except Exception as e: + current_app.logger.error(f"Error fetching configuration: {e}") + return jsonify({'error': str(e)}), 500 + + + + +@system_bp.route('/api/csrf-token', methods=['GET']) +@csrf_exempt # Exempt this endpoint from CSRF protection since it's providing tokens +def get_csrf_token(): + """Get a fresh CSRF token for the frontend.""" + try: + from flask_wtf.csrf import generate_csrf + token = generate_csrf() + current_app.logger.info("Fresh CSRF token generated successfully") + return jsonify({'csrf_token': token}) + except Exception as e: + current_app.logger.error(f"Error generating CSRF token: {e}") + return jsonify({'error': str(e)}), 500 + +# --- Flask Routes --- + + +@system_bp.route('/api/permissions/can-delete', methods=['GET']) +@login_required +def check_deletion_permission(): + """Check if the current user can delete recordings.""" + try: + can_delete = USERS_CAN_DELETE or current_user.is_admin + return jsonify({ + 'can_delete': can_delete, + 'is_admin': current_user.is_admin, + 'users_can_delete_enabled': USERS_CAN_DELETE + }) + except Exception as e: + current_app.logger.error(f"Error checking deletion permissions: {e}") + return jsonify({'error': str(e)}), 500 + + + diff --git a/src/api/tags.py b/src/api/tags.py new file mode 100644 index 0000000..084fb61 --- /dev/null +++ b/src/api/tags.py @@ -0,0 +1,430 @@ +""" +Tag management and assignment. + +This blueprint was auto-generated from app.py route extraction. +""" + +import os +import json +import time +from datetime import datetime, timedelta +from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify, send_file, Response, current_app +from flask_login import login_required, current_user +from werkzeug.utils import secure_filename + +from sqlalchemy.exc import IntegrityError + +from src.database import db +from src.models import * +from src.utils import * + +# Create blueprint +tags_bp = Blueprint('tags', __name__) + +# Configuration from environment +ENABLE_INQUIRE_MODE = os.environ.get('ENABLE_INQUIRE_MODE', 'false').lower() == 'true' +ENABLE_AUTO_DELETION = os.environ.get('ENABLE_AUTO_DELETION', 'false').lower() == 'true' +USERS_CAN_DELETE = os.environ.get('USERS_CAN_DELETE', 'true').lower() == 'true' +ENABLE_INTERNAL_SHARING = os.environ.get('ENABLE_INTERNAL_SHARING', 'false').lower() == 'true' +USE_ASR_ENDPOINT = os.environ.get('USE_ASR_ENDPOINT', 'false').lower() == 'true' + +# Global helpers (will be injected from app) +has_recording_access = None +bcrypt = None +csrf = None +limiter = None + +def init_tags_helpers(**kwargs): + """Initialize helper functions and extensions from app.""" + global has_recording_access, bcrypt, csrf, limiter + has_recording_access = kwargs.get('has_recording_access') + bcrypt = kwargs.get('bcrypt') + csrf = kwargs.get('csrf') + limiter = kwargs.get('limiter') + + +# --- Routes --- + +@tags_bp.route('/api/tags', methods=['GET']) +@login_required +def get_tags(): + """Get all tags for the current user, including group tags they have access to.""" + # Get user's personal tags + user_tags = Tag.query.filter_by(user_id=current_user.id, group_id=None).order_by(Tag.name).all() + + # Get user's team memberships with roles + memberships = GroupMembership.query.filter_by(user_id=current_user.id).all() + team_roles = {m.group_id: m.role for m in memberships} + team_ids = list(team_roles.keys()) + + # Get group tags for all teams the user is a member of + team_tags = [] + if team_ids: + team_tags = Tag.query.filter(Tag.group_id.in_(team_ids)).order_by(Tag.name).all() + + # Build response with edit permissions + result = [] + + # Personal tags - user can always edit their own + for tag in user_tags: + tag_dict = tag.to_dict() + tag_dict['can_edit'] = True + tag_dict['user_role'] = None + result.append(tag_dict) + + # Group tags - only admins can edit + for tag in team_tags: + tag_dict = tag.to_dict() + user_role = team_roles.get(tag.group_id, 'member') + tag_dict['can_edit'] = (user_role == 'admin') + tag_dict['user_role'] = user_role + result.append(tag_dict) + + return jsonify(result) + + + +@tags_bp.route('/api/tags', methods=['POST']) +@login_required +def create_tag(): + """Create a new tag (personal or group tag).""" + data = request.get_json() + + if not data or not data.get('name'): + return jsonify({'error': 'Tag name is required'}), 400 + + group_id = data.get('group_id') + + # If creating a group tag, verify user is admin of that group + if group_id: + membership = GroupMembership.query.filter_by( + group_id=group_id, + user_id=current_user.id + ).first() + + if not membership or membership.role != 'admin': + return jsonify({'error': 'Only group admins can create group tags'}), 403 + + # Check if group tag with same name already exists for this group + existing_tag = Tag.query.filter_by(name=data['name'], group_id=group_id).first() + if existing_tag: + return jsonify({'error': 'A tag with this name already exists for this group'}), 400 + else: + # Check if personal tag with same name already exists for this user + existing_tag = Tag.query.filter_by(name=data['name'], user_id=current_user.id, group_id=None).first() + if existing_tag: + return jsonify({'error': 'Tag with this name already exists'}), 400 + + # Handle retention_days: -1 means protected from deletion + retention_days = data.get('retention_days') + protect_from_deletion = False + + if retention_days == -1: + # -1 indicates infinite retention (protected from auto-deletion) + protect_from_deletion = True if ENABLE_AUTO_DELETION else False + + # Validate naming_template_id if provided + naming_template_id = data.get('naming_template_id') + if naming_template_id: + from src.models import NamingTemplate + template = NamingTemplate.query.filter_by(id=naming_template_id, user_id=current_user.id).first() + if not template: + return jsonify({'error': 'Naming template not found'}), 404 + + # Validate export_template_id if provided + export_template_id = data.get('export_template_id') + if export_template_id: + from src.models import ExportTemplate + template = ExportTemplate.query.filter_by(id=export_template_id, user_id=current_user.id).first() + if not template: + return jsonify({'error': 'Export template not found'}), 404 + + tag = Tag( + name=data['name'], + user_id=current_user.id, + group_id=group_id, + color=data.get('color', '#3B82F6'), + custom_prompt=data.get('custom_prompt'), + default_language=data.get('default_language'), + default_min_speakers=data.get('default_min_speakers'), + default_max_speakers=data.get('default_max_speakers'), + default_hotwords=data.get('default_hotwords'), + default_initial_prompt=data.get('default_initial_prompt'), + protect_from_deletion=protect_from_deletion, + retention_days=retention_days, + auto_share_on_apply=data.get('auto_share_on_apply', True) if group_id else True, + share_with_group_lead=data.get('share_with_group_lead', True) if group_id else True, + naming_template_id=naming_template_id, + export_template_id=export_template_id + ) + + db.session.add(tag) + + try: + db.session.commit() + except IntegrityError as e: + db.session.rollback() + current_app.logger.error(f"Tag creation failed due to integrity constraint: {str(e)}") + return jsonify({'error': 'A tag with this name already exists'}), 400 + + return jsonify(tag.to_dict()), 201 + + + +@tags_bp.route('/api/tags/', methods=['PUT']) +@login_required +def update_tag(tag_id): + """Update a tag.""" + tag = db.session.get(Tag, tag_id) + if not tag: + return jsonify({'error': 'Tag not found'}), 404 + + # Check permissions + if tag.group_id: + # Group tag - user must be a team admin + membership = GroupMembership.query.filter_by( + group_id=tag.group_id, + user_id=current_user.id + ).first() + + if not membership or membership.role != 'admin': + return jsonify({'error': 'Only group admins can edit group tags'}), 403 + else: + # Personal tag - must be the owner + if tag.user_id != current_user.id: + return jsonify({'error': 'You do not have permission to edit this tag'}), 403 + + data = request.get_json() + + if 'name' in data: + # Check if new name conflicts with another tag + if tag.group_id: + existing_tag = Tag.query.filter_by(name=data['name'], group_id=tag.group_id).filter(Tag.id != tag_id).first() + else: + existing_tag = Tag.query.filter_by(name=data['name'], user_id=current_user.id).filter(Tag.id != tag_id).first() + + if existing_tag: + return jsonify({'error': 'Another tag with this name already exists'}), 400 + tag.name = data['name'] + + # Handle group_id changes (converting between personal and group tags) + if 'group_id' in data: + new_group_id = data['group_id'] if data['group_id'] else None + + # If changing to a group tag, verify user is admin of that group + if new_group_id: + membership = GroupMembership.query.filter_by( + group_id=new_group_id, + user_id=current_user.id + ).first() + + if not membership or membership.role != 'admin': + return jsonify({'error': 'Only group admins can assign tags to groups'}), 403 + + tag.group_id = new_group_id + + if 'color' in data: + tag.color = data['color'] + if 'custom_prompt' in data: + tag.custom_prompt = data['custom_prompt'] + if 'default_language' in data: + tag.default_language = data['default_language'] + if 'default_min_speakers' in data: + tag.default_min_speakers = data['default_min_speakers'] + if 'default_max_speakers' in data: + tag.default_max_speakers = data['default_max_speakers'] + if 'default_hotwords' in data: + tag.default_hotwords = data['default_hotwords'] or None + if 'default_initial_prompt' in data: + tag.default_initial_prompt = data['default_initial_prompt'] or None + + # Handle retention_days: -1 means protected from deletion + if 'retention_days' in data: + retention_days = data['retention_days'] + + if retention_days == -1: + # -1 indicates infinite retention (protected from auto-deletion) + if ENABLE_AUTO_DELETION: + tag.protect_from_deletion = True + tag.retention_days = -1 + else: + # Regular retention period or null (use global) + tag.protect_from_deletion = False + tag.retention_days = retention_days if retention_days else None + if 'auto_share_on_apply' in data: + # Only applicable to group tags + if tag.group_id: + tag.auto_share_on_apply = bool(data['auto_share_on_apply']) + if 'share_with_group_lead' in data: + # Only applicable to group tags + if tag.group_id: + tag.share_with_group_lead = bool(data['share_with_group_lead']) + if 'naming_template_id' in data: + naming_template_id = data['naming_template_id'] + if naming_template_id: + from src.models import NamingTemplate + template = NamingTemplate.query.filter_by(id=naming_template_id, user_id=current_user.id).first() + if not template: + return jsonify({'error': 'Naming template not found'}), 404 + tag.naming_template_id = naming_template_id if naming_template_id else None + if 'export_template_id' in data: + export_template_id = data['export_template_id'] + if export_template_id: + from src.models import ExportTemplate + template = ExportTemplate.query.filter_by(id=export_template_id, user_id=current_user.id).first() + if not template: + return jsonify({'error': 'Export template not found'}), 404 + tag.export_template_id = export_template_id if export_template_id else None + + tag.updated_at = datetime.utcnow() + + try: + db.session.commit() + except IntegrityError as e: + db.session.rollback() + current_app.logger.error(f"Tag update failed due to integrity constraint: {str(e)}") + return jsonify({'error': 'A tag with this name already exists'}), 400 + + return jsonify(tag.to_dict()) + + + +@tags_bp.route('/api/tags/', methods=['DELETE']) +@login_required +def delete_tag(tag_id): + """Delete a tag.""" + tag = db.session.get(Tag, tag_id) + if not tag: + return jsonify({'error': 'Tag not found'}), 404 + + # Check permissions + if tag.group_id: + # Group tag - user must be a team admin + membership = GroupMembership.query.filter_by( + group_id=tag.group_id, + user_id=current_user.id + ).first() + + if not membership or membership.role != 'admin': + return jsonify({'error': 'Only group admins can delete group tags'}), 403 + else: + # Personal tag - must belong to the user + if tag.user_id != current_user.id: + return jsonify({'error': 'You do not have permission to delete this tag'}), 403 + + db.session.delete(tag) + db.session.commit() + return jsonify({'success': True}) + + + +@tags_bp.route('/api/groups//tags', methods=['POST']) +@login_required +def create_group_tag(group_id): + """Create a group-scoped tag (group admins only).""" + if not ENABLE_INTERNAL_SHARING: + return jsonify({'error': 'Group tags require internal sharing to be enabled. Please set ENABLE_INTERNAL_SHARING=true in your configuration.'}), 403 + + # Verify team exists + team = db.session.get(Group, group_id) + if not team: + return jsonify({'error': 'Group not found'}), 404 + + # Verify user is a team admin + membership = GroupMembership.query.filter_by( + group_id=group_id, + user_id=current_user.id + ).first() + + if not membership or membership.role != 'admin': + return jsonify({'error': 'Only group admins can create group tags'}), 403 + + data = request.get_json() + name = data.get('name', '').strip() + + if not name: + return jsonify({'error': 'Tag name is required'}), 400 + + # Check if a group tag with this name already exists for this team + existing_tag = Tag.query.filter_by( + name=name, + group_id=group_id + ).first() + + if existing_tag: + return jsonify({'error': 'A group tag with this name already exists'}), 400 + + # Validate naming_template_id if provided + naming_template_id = data.get('naming_template_id') + if naming_template_id: + from src.models import NamingTemplate + template = NamingTemplate.query.filter_by(id=naming_template_id, user_id=current_user.id).first() + if not template: + return jsonify({'error': 'Naming template not found'}), 404 + + # Validate export_template_id if provided + export_template_id = data.get('export_template_id') + if export_template_id: + from src.models import ExportTemplate + template = ExportTemplate.query.filter_by(id=export_template_id, user_id=current_user.id).first() + if not template: + return jsonify({'error': 'Export template not found'}), 404 + + # Create the group tag with all supported parameters + tag = Tag( + name=name, + user_id=current_user.id, # Creator + group_id=group_id, + color=data.get('color', '#3B82F6'), + custom_prompt=data.get('custom_prompt'), + default_language=data.get('default_language'), + default_min_speakers=data.get('default_min_speakers'), + default_max_speakers=data.get('default_max_speakers'), + default_hotwords=data.get('default_hotwords'), + default_initial_prompt=data.get('default_initial_prompt'), + protect_from_deletion=data.get('protect_from_deletion', False), + retention_days=data.get('retention_days'), + auto_share_on_apply=data.get('auto_share_on_apply', True), # Default to True for group tags + share_with_group_lead=data.get('share_with_group_lead', True), # Default to True for group tags + naming_template_id=naming_template_id, + export_template_id=export_template_id + ) + + db.session.add(tag) + + try: + db.session.commit() + except IntegrityError as e: + db.session.rollback() + current_app.logger.error(f"Tag creation failed due to integrity constraint: {str(e)}") + return jsonify({'error': 'A tag with this name already exists'}), 400 + + return jsonify(tag.to_dict()), 201 + + + +@tags_bp.route('/api/groups//tags', methods=['GET']) +@login_required +def get_group_tags(group_id): + """Get all tags for a team (team members only).""" + # Verify team exists + team = db.session.get(Group, group_id) + if not team: + return jsonify({'error': 'Group not found'}), 404 + + # Verify user is a team member + membership = GroupMembership.query.filter_by( + group_id=group_id, + user_id=current_user.id + ).first() + + if not membership: + return jsonify({'error': 'You must be a team member to view group tags'}), 403 + + # Get all group tags + tags = Tag.query.filter_by(group_id=group_id).all() + + return jsonify({'tags': [tag.to_dict() for tag in tags]}) + + + diff --git a/src/api/templates.py b/src/api/templates.py new file mode 100644 index 0000000..34ef834 --- /dev/null +++ b/src/api/templates.py @@ -0,0 +1,232 @@ +""" +Transcript template management. + +This blueprint was auto-generated from app.py route extraction. +""" + +import os +import json +import time +from datetime import datetime, timedelta +from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify, send_file, Response, current_app +from flask_login import login_required, current_user +from werkzeug.utils import secure_filename + +from src.database import db +from src.models import * +from src.utils import * + +# Create blueprint +templates_bp = Blueprint('templates', __name__) + +# Configuration from environment +ENABLE_INQUIRE_MODE = os.environ.get('ENABLE_INQUIRE_MODE', 'false').lower() == 'true' +ENABLE_AUTO_DELETION = os.environ.get('ENABLE_AUTO_DELETION', 'false').lower() == 'true' +USERS_CAN_DELETE = os.environ.get('USERS_CAN_DELETE', 'true').lower() == 'true' +ENABLE_INTERNAL_SHARING = os.environ.get('ENABLE_INTERNAL_SHARING', 'false').lower() == 'true' +USE_ASR_ENDPOINT = os.environ.get('USE_ASR_ENDPOINT', 'false').lower() == 'true' + +# Global helpers (will be injected from app) +has_recording_access = None +bcrypt = None +csrf = None +limiter = None + +def init_templates_helpers(**kwargs): + """Initialize helper functions and extensions from app.""" + global has_recording_access, bcrypt, csrf, limiter + has_recording_access = kwargs.get('has_recording_access') + bcrypt = kwargs.get('bcrypt') + csrf = kwargs.get('csrf') + limiter = kwargs.get('limiter') + + +# --- Routes --- + +@templates_bp.route('/api/transcript-templates', methods=['GET']) +@login_required +def get_transcript_templates(): + """Get all transcript templates for the current user.""" + templates = TranscriptTemplate.query.filter_by(user_id=current_user.id).all() + return jsonify([template.to_dict() for template in templates]) + + + +@templates_bp.route('/api/transcript-templates', methods=['POST']) +@login_required +def create_transcript_template(): + """Create a new transcript template.""" + data = request.json + if not data or not data.get('name') or not data.get('template'): + return jsonify({'error': 'Name and template are required'}), 400 + + # If this is set as default, unset other defaults + if data.get('is_default'): + TranscriptTemplate.query.filter_by( + user_id=current_user.id, + is_default=True + ).update({'is_default': False}) + + template = TranscriptTemplate( + user_id=current_user.id, + name=data['name'], + template=data['template'], + description=data.get('description'), + is_default=data.get('is_default', False) + ) + + db.session.add(template) + db.session.commit() + + return jsonify(template.to_dict()), 201 + + + +@templates_bp.route('/api/transcript-templates/', methods=['PUT']) +@login_required +def update_transcript_template(template_id): + """Update an existing transcript template.""" + template = TranscriptTemplate.query.filter_by( + id=template_id, + user_id=current_user.id + ).first() + + if not template: + return jsonify({'error': 'Template not found'}), 404 + + data = request.json + if not data: + return jsonify({'error': 'No data provided'}), 400 + + # If this is set as default, unset other defaults + if data.get('is_default'): + TranscriptTemplate.query.filter_by( + user_id=current_user.id, + is_default=True + ).update({'is_default': False}) + + template.name = data.get('name', template.name) + template.template = data.get('template', template.template) + template.description = data.get('description', template.description) + template.is_default = data.get('is_default', template.is_default) + template.updated_at = datetime.utcnow() + + db.session.commit() + + return jsonify(template.to_dict()) + + + +@templates_bp.route('/api/transcript-templates/', methods=['DELETE']) +@login_required +def delete_transcript_template(template_id): + """Delete a transcript template.""" + template = TranscriptTemplate.query.filter_by( + id=template_id, + user_id=current_user.id + ).first() + + if not template: + return jsonify({'error': 'Template not found'}), 404 + + db.session.delete(template) + db.session.commit() + + return jsonify({'success': True}) + + + +@templates_bp.route('/api/transcript-templates/create-defaults', methods=['POST']) +@login_required +def create_default_templates(): + """Create default templates for the user if they don't have any.""" + existing_templates = TranscriptTemplate.query.filter_by(user_id=current_user.id).count() + + if existing_templates > 0: + return jsonify({'message': 'User already has templates'}), 200 + + templates = [] + + # Default template 1: Conversation simple + template1 = TranscriptTemplate( + user_id=current_user.id, + name="Conversation simple", + template="{{speaker}}: {{text}}", + description="Format épuré avec noms des intervenants et texte", + is_default=True + ) + templates.append(template1) + + # Default template 2: Horodaté + template2 = TranscriptTemplate( + user_id=current_user.id, + name="Horodaté", + template="[{{start_time}} - {{end_time}}] {{speaker}}: {{text}}", + description="Format avec horodatage et noms des intervenants", + is_default=False + ) + templates.append(template2) + + # Default template 3: Entrevue / Interrogatoire + template3 = TranscriptTemplate( + user_id=current_user.id, + name="Entrevue / Interrogatoire", + template="{{speaker|upper}}:\n{{text}}\n", + description="Format questions-réponses avec noms en majuscules — idéal pour interrogatoires et entrevues", + is_default=False + ) + templates.append(template3) + + # Default template 4: Consultation client + template4 = TranscriptTemplate( + user_id=current_user.id, + name="Consultation client", + template="[{{start_time}}] {{speaker}}: {{text}}", + description="Rencontres client avec horodatage — consultation juridique, prise de notes", + is_default=False + ) + templates.append(template4) + + # Default template 5: Verbatim numéroté + template5 = TranscriptTemplate( + user_id=current_user.id, + name="Verbatim numéroté", + template="{{index}} [{{start_time}}] {{speaker|upper}}: {{text}}", + description="Transcription certifiable avec numéros de ligne et horodatage — dépositions, audiences", + is_default=False + ) + templates.append(template5) + + # Default template 6: Dictée juridique + template6 = TranscriptTemplate( + user_id=current_user.id, + name="Dictée juridique", + template="{{text}}", + description="Texte continu sans locuteur — pour dictées de lettres, mises en demeure, procédures", + is_default=False + ) + templates.append(template6) + + # Default template 7: Procès-verbal formel + template7 = TranscriptTemplate( + user_id=current_user.id, + name="Procès-verbal formel", + template="• [{{start_time}}] {{speaker}}: {{text}}", + description="Format à puces horodatées — PV de réunion, assemblées, conseil d'administration", + is_default=False + ) + templates.append(template7) + + # Add all templates to database + for template in templates: + db.session.add(template) + + db.session.commit() + + return jsonify({ + 'success': True, + 'templates': [template.to_dict() for template in templates] + }), 201 + + + diff --git a/src/api/tokens.py b/src/api/tokens.py new file mode 100644 index 0000000..1c19339 --- /dev/null +++ b/src/api/tokens.py @@ -0,0 +1,187 @@ +""" +API Token management routes. + +This blueprint handles creating, listing, and revoking API tokens +for user authentication. +""" + +import secrets +from datetime import datetime, timedelta +from flask import Blueprint, request, jsonify +from flask_login import login_required, current_user + +from src.database import db +from src.models import APIToken +from src.utils.token_auth import hash_token + +# Create blueprint +tokens_bp = Blueprint('tokens', __name__, url_prefix='/api/tokens') + +# Extensions (injected after app initialization) +bcrypt = None +csrf = None +limiter = None + + +def init_tokens_helpers(_bcrypt, _csrf, _limiter): + """Initialize extensions after app creation.""" + global bcrypt, csrf, limiter + bcrypt = _bcrypt + csrf = _csrf + limiter = _limiter + + +def rate_limit(limit_string): + """Decorator that applies rate limiting if limiter is available.""" + def decorator(f): + from functools import wraps + @wraps(f) + def wrapper(*args, **kwargs): + return f(*args, **kwargs) + wrapper._rate_limit = limit_string + return wrapper + return decorator + + +def generate_token(): + """ + Generate a secure random API token. + + Returns: + str: A cryptographically secure random token + """ + return secrets.token_urlsafe(32) + + +@tokens_bp.route('', methods=['GET']) +@login_required +def list_tokens(): + """ + List all API tokens for the current user. + + Returns: + JSON: List of token objects (without the actual token values) + """ + tokens = APIToken.query.filter_by(user_id=current_user.id).all() + return jsonify({ + 'tokens': [token.to_dict() for token in tokens] + }) + + +@tokens_bp.route('', methods=['POST']) +@login_required +@rate_limit("10 per hour") +def create_token(): + """ + Create a new API token for the current user. + + Request JSON: + name (str, optional): A friendly name for the token + expires_in_days (int, optional): Number of days until expiration (0 = no expiration) + + Returns: + JSON: The new token object including the plaintext token (shown only once) + """ + data = request.get_json() + + # Validate input + name = data.get('name', 'Unnamed Token') + expires_in_days = data.get('expires_in_days', 0) + + # Validate expiration + if not isinstance(expires_in_days, int) or expires_in_days < 0: + return jsonify({'error': 'expires_in_days must be a non-negative integer'}), 400 + + # Generate the token + plaintext_token = generate_token() + token_hash = hash_token(plaintext_token) + + # Calculate expiration date + expires_at = None + if expires_in_days > 0: + expires_at = datetime.utcnow() + timedelta(days=expires_in_days) + + # Create the token record + api_token = APIToken( + user_id=current_user.id, + token_hash=token_hash, + name=name, + expires_at=expires_at + ) + + db.session.add(api_token) + db.session.commit() + + # Return the token data INCLUDING the plaintext token + # This is the only time the plaintext token will be shown + response = api_token.to_dict() + response['token'] = plaintext_token + + return jsonify(response), 201 + + +@tokens_bp.route('/', methods=['DELETE']) +@login_required +@rate_limit("20 per hour") +def revoke_token(token_id): + """ + Revoke (delete) an API token. + + Args: + token_id (int): The ID of the token to revoke + + Returns: + JSON: Success message + """ + # Find the token + api_token = APIToken.query.filter_by( + id=token_id, + user_id=current_user.id + ).first() + + if not api_token: + return jsonify({'error': 'Token not found'}), 404 + + # Delete the token + db.session.delete(api_token) + db.session.commit() + + return jsonify({'message': 'Token revoked successfully'}), 200 + + +@tokens_bp.route('/', methods=['PATCH']) +@login_required +@rate_limit("20 per hour") +def update_token(token_id): + """ + Update an API token's metadata (name only). + + Args: + token_id (int): The ID of the token to update + + Request JSON: + name (str): The new name for the token + + Returns: + JSON: Updated token object + """ + # Find the token + api_token = APIToken.query.filter_by( + id=token_id, + user_id=current_user.id + ).first() + + if not api_token: + return jsonify({'error': 'Token not found'}), 404 + + # Update the name + data = request.get_json() + new_name = data.get('name') + + if not new_name: + return jsonify({'error': 'name is required'}), 400 + + api_token.name = new_name + db.session.commit() + + return jsonify(api_token.to_dict()), 200 diff --git a/src/app.py b/src/app.py new file mode 100644 index 0000000..3f78311 --- /dev/null +++ b/src/app.py @@ -0,0 +1,668 @@ +# Speakr - Audio Transcription and Summarization App +import os +import sys +from flask import Flask, render_template, request, jsonify, send_file, redirect, url_for, flash, Response, make_response +from urllib.parse import urlparse, urljoin, quote +from email.utils import encode_rfc2231 +from markupsafe import Markup +from flask_sqlalchemy import SQLAlchemy +from datetime import datetime, timedelta +from openai import OpenAI # Keep using the OpenAI library +import json +from werkzeug.utils import secure_filename +from werkzeug.exceptions import RequestEntityTooLarge +from werkzeug.middleware.proxy_fix import ProxyFix +from sqlalchemy import select +from sqlalchemy.orm import joinedload +import threading +from dotenv import load_dotenv # Import load_dotenv +import httpx +import re +import subprocess +import mimetypes +import markdown +import bleach + +# Add common audio MIME type mappings that might be missing +mimetypes.add_type('audio/mp4', '.m4a') +mimetypes.add_type('audio/aac', '.aac') +mimetypes.add_type('audio/x-m4a', '.m4a') +mimetypes.add_type('audio/webm', '.webm') +mimetypes.add_type('audio/flac', '.flac') +mimetypes.add_type('audio/ogg', '.ogg') +from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required, current_user +from flask_bcrypt import Bcrypt +from flask_wtf import FlaskForm +from flask_wtf.csrf import CSRFProtect +from wtforms import StringField, PasswordField, SubmitField, BooleanField +from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError +from flask_limiter import Limiter +from flask_limiter.util import get_remote_address +import pytz +from babel.dates import format_datetime +import ast +import logging +import secrets +import time +from src.audio_chunking import AudioChunkingService, ChunkProcessingError, ChunkingNotSupportedError + +# Optional imports for embedding functionality +try: + import numpy as np + from sentence_transformers import SentenceTransformer + from sklearn.metrics.pairwise import cosine_similarity + EMBEDDINGS_AVAILABLE = True +except ImportError as e: + EMBEDDINGS_AVAILABLE = False + # Create dummy classes to prevent import errors + class SentenceTransformer: + def __init__(self, *args, **kwargs): + pass + def encode(self, *args, **kwargs): + return [] + + np = None + cosine_similarity = None + +# Load environment variables from .env file +load_dotenv() + +# Early check for Inquire Mode configuration (needed for startup message) +ENABLE_INQUIRE_MODE = os.environ.get('ENABLE_INQUIRE_MODE', 'false').lower() == 'true' + +# Auto-deletion and retention configuration +ENABLE_AUTO_DELETION = os.environ.get('ENABLE_AUTO_DELETION', 'false').lower() == 'true' +GLOBAL_RETENTION_DAYS = int(os.environ.get('GLOBAL_RETENTION_DAYS', '0')) # 0 = disabled +DELETION_MODE = os.environ.get('DELETION_MODE', 'full_recording') # 'audio_only' or 'full_recording' + +# Permission-based deletion control +USERS_CAN_DELETE = os.environ.get('USERS_CAN_DELETE', 'true').lower() == 'true' # true = all users can delete, false = admin only + +# Internal sharing configuration +ENABLE_INTERNAL_SHARING = os.environ.get('ENABLE_INTERNAL_SHARING', 'false').lower() == 'true' +SHOW_USERNAMES_IN_UI = os.environ.get('SHOW_USERNAMES_IN_UI', 'false').lower() == 'true' + +# Public sharing configuration +ENABLE_PUBLIC_SHARING = os.environ.get('ENABLE_PUBLIC_SHARING', 'true').lower() == 'true' + +# Video retention - when enabled, video files keep their video stream for playback +VIDEO_RETENTION = os.environ.get('VIDEO_RETENTION', 'false').lower() == 'true' + +# Audit logging for Loi 25 compliance +ENABLE_AUDIT_LOG = os.environ.get('ENABLE_AUDIT_LOG', 'false').lower() == 'true' + +# Log embedding status on startup +if ENABLE_INQUIRE_MODE and EMBEDDINGS_AVAILABLE: + print("✅ Inquire Mode: Full semantic search enabled (embeddings available)") +elif ENABLE_INQUIRE_MODE and not EMBEDDINGS_AVAILABLE: + print("⚠️ Inquire Mode: Basic text search only (embedding dependencies not available)") + print(" To enable semantic search, install: pip install sentence-transformers==2.7.0 huggingface-hub>=0.19.0") +elif not ENABLE_INQUIRE_MODE: + print("ℹ️ Inquire Mode: Disabled (set ENABLE_INQUIRE_MODE=true to enable)") + +# Log auto-deletion status +if ENABLE_AUTO_DELETION: + if GLOBAL_RETENTION_DAYS > 0: + print(f"✅ Auto-deletion: Enabled (global retention: {GLOBAL_RETENTION_DAYS} days, mode: {DELETION_MODE})") + else: + print("⚠️ Auto-deletion: Enabled but no global retention period set (configure GLOBAL_RETENTION_DAYS)") +else: + print("ℹ️ Auto-deletion: Disabled (set ENABLE_AUTO_DELETION=true to enable)") + +# Log deletion permissions +if USERS_CAN_DELETE: + print("ℹ️ User deletion: Enabled (all users can delete their recordings)") +else: + print("🔒 User deletion: Restricted (only admins can delete recordings)") + +# Log internal sharing status +if ENABLE_INTERNAL_SHARING: + username_visibility = "visible" if SHOW_USERNAMES_IN_UI else "hidden" + print(f"✅ Internal sharing: Enabled (usernames {username_visibility})") +else: + print("ℹ️ Internal sharing: Disabled (set ENABLE_INTERNAL_SHARING=true to enable)") + +# Log public sharing status +if ENABLE_PUBLIC_SHARING: + print("✅ Public sharing: Enabled (users can create public share links)") +else: + print("🔒 Public sharing: Disabled (public share links are not allowed)") + +# Log video retention status +if VIDEO_RETENTION: + print("✅ Video retention: Enabled (video files preserve video stream for playback)") +else: + print("ℹ️ Video retention: Disabled (video uploads extract audio only)") + +# Log audit status +if ENABLE_AUDIT_LOG: + print("✅ Audit logging: Enabled (Loi 25 compliance - access and auth events tracked)") +else: + print("ℹ️ Audit logging: Disabled (set ENABLE_AUDIT_LOG=true for Loi 25 compliance)") + +# Configure logging +log_level = os.environ.get('LOG_LEVEL', 'INFO').upper() +handler = logging.StreamHandler(sys.stdout) +handler.setLevel(log_level) +formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') +handler.setFormatter(formatter) + +# Get the root logger and clear any existing handlers to avoid duplicates +root_logger = logging.getLogger() +root_logger.handlers.clear() +root_logger.setLevel(log_level) +root_logger.addHandler(handler) + +# Silence noisy markdown extension debug logs +markdown_logger = logging.getLogger('MARKDOWN') +markdown_logger.setLevel(logging.WARNING) + +# --- Initialize Markdown Once (Performance Optimization) --- +# Create a single reusable Markdown instance to avoid reinitializing extensions on every call +_markdown_instance = markdown.Markdown(extensions=[ + 'fenced_code', # Fenced code blocks + 'tables', # Table support + 'attr_list', # Attribute lists + 'def_list', # Definition lists + 'footnotes', # Footnotes + 'abbr', # Abbreviations + 'codehilite', # Syntax highlighting for code blocks + 'smarty' # Smart quotes, dashes, etc. +]) + +# --- Rate Limiting Setup (will be configured after app creation) --- +# TEMPORARILY INCREASED FOR TESTING - REVERT FOR PRODUCTION! +limiter = Limiter( + get_remote_address, + app=None, # Defer initialization + default_limits=["5000 per day", "1000 per hour"] # Increased from 200/day, 50/hour for testing +) + +# --- Utility Functions --- +# Utility functions (JSON parsing, markdown, datetime, security) have been extracted +# to src/utils/ and imported at the top of this file + +def has_recording_access(recording, user, require_edit=False, require_reshare=False): + """ + Check if a user has access to a recording. + + Args: + recording: Recording object to check access for + user: User object (typically current_user) + require_edit: If True, check for edit permission (default: False for view-only) + require_reshare: If True, check for reshare permission (default: False) + + Returns: + Boolean indicating if user has the required access level + """ + # Owner always has full access + if recording.user_id == user.id: + return True + + # If internal sharing is not enabled, only owner has access + if not ENABLE_INTERNAL_SHARING: + return False + + # Check for shared access + share = InternalShare.query.filter_by( + recording_id=recording.id, + shared_with_user_id=user.id + ).first() + + if not share: + return False + + # If edit permission is required, check for it + if require_edit: + # First check if share directly grants edit permission + if share.can_edit: + pass # Has direct edit permission + else: + # Check if user is a group admin for any group tag on this recording + # This grants edit permission even if share.can_edit is False + is_group_admin_for_recording = db.session.query(GroupMembership).join( + Tag, Tag.group_id == GroupMembership.group_id + ).join( + RecordingTag, RecordingTag.tag_id == Tag.id + ).filter( + RecordingTag.recording_id == recording.id, + GroupMembership.user_id == user.id, + GroupMembership.role == 'admin', + Tag.group_id.isnot(None), + db.or_(Tag.auto_share_on_apply == True, Tag.share_with_group_lead == True) + ).first() + + if not is_group_admin_for_recording: + return False + + # If reshare permission is required, check for it + if require_reshare and not share.can_reshare: + return False + + # User has at least view access + return True + + +def get_user_recording_status(recording, user): + """ + Get the inbox and highlighted status for a recording from a user's perspective. + + For owners: Returns status from Recording model + For shared recipients: Returns status from SharedRecordingState (creates default if not exists) + + Args: + recording: Recording object + user: User object (typically current_user) + + Returns: + Tuple of (is_inbox, is_highlighted) + """ + # Owner uses the Recording model's global fields + if recording.user_id == user.id: + return (recording.is_inbox, recording.is_highlighted) + + # Shared recipient uses SharedRecordingState + state = SharedRecordingState.query.filter_by( + recording_id=recording.id, + user_id=user.id + ).first() + + if state: + return (state.is_inbox, state.is_highlighted) + else: + # Return defaults if no state exists yet (inbox=True, highlighted=False) + return (True, False) + + +def set_user_recording_status(recording, user, is_inbox=None, is_highlighted=None): + """ + Set the inbox and/or highlighted status for a recording from a user's perspective. + + For owners: Updates Recording model + For shared recipients: Updates or creates SharedRecordingState + + Args: + recording: Recording object + user: User object (typically current_user) + is_inbox: Boolean or None (None means don't change) + is_highlighted: Boolean or None (None means don't change) + + Returns: + Tuple of (is_inbox, is_highlighted) after update + """ + # Owner updates the Recording model's global fields + if recording.user_id == user.id: + if is_inbox is not None: + recording.is_inbox = is_inbox + if is_highlighted is not None: + recording.is_highlighted = is_highlighted + db.session.commit() + return (recording.is_inbox, recording.is_highlighted) + + # Shared recipient uses SharedRecordingState + state = SharedRecordingState.query.filter_by( + recording_id=recording.id, + user_id=user.id + ).first() + + if not state: + # Create new state with defaults + state = SharedRecordingState( + recording_id=recording.id, + user_id=user.id, + is_inbox=True, + is_highlighted=False + ) + db.session.add(state) + + # Update the requested fields + if is_inbox is not None: + state.is_inbox = is_inbox + if is_highlighted is not None: + state.is_highlighted = is_highlighted + + db.session.commit() + return (state.is_inbox, state.is_highlighted) + + +def enrich_recording_dict_with_user_status(recording_dict, recording, user): + """ + Enrich a recording dictionary with per-user status (inbox, highlighted). + + This should be called after recording.to_dict() or recording.to_list_dict() + to replace the owner's status with the current user's per-user status. + + Args: + recording_dict: Dictionary from recording.to_dict() or recording.to_list_dict() + recording: Recording object + user: User object (typically current_user) + + Returns: + The enriched recording_dict (modified in place, but also returned for convenience) + """ + user_inbox, user_highlighted = get_user_recording_status(recording, user) + recording_dict['is_inbox'] = user_inbox + recording_dict['is_highlighted'] = user_highlighted + return recording_dict + + +app = Flask(__name__, + template_folder='../templates', + static_folder='../static') +# Use environment variables or default paths for Docker compatibility +app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('SQLALCHEMY_DATABASE_URI', 'sqlite:////data/instance/transcriptions.db') +app.config['UPLOAD_FOLDER'] = os.environ.get('UPLOAD_FOLDER', '/data/uploads') + +# SQLite concurrency settings for multi-worker job queue +if 'sqlite' in app.config['SQLALCHEMY_DATABASE_URI']: + app.config['SQLALCHEMY_ENGINE_OPTIONS'] = { + 'connect_args': { + 'timeout': 30, # Wait up to 30 seconds for locked database + 'check_same_thread': False # Allow multi-threaded access + }, + 'pool_pre_ping': True # Verify connections before use + } +# MAX_CONTENT_LENGTH will be set dynamically after database initialization +# Set a secret key for session management and CSRF protection +app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY', 'default-dev-key-change-in-production') + +# Apply ProxyFix to handle headers from a reverse proxy (like Nginx or Caddy) +# This is crucial for request.is_secure to work correctly behind an SSL-terminating proxy. +trusted_proxy_hops = int(os.environ.get('TRUSTED_PROXY_HOPS', '1')) +app.wsgi_app = ProxyFix( + app.wsgi_app, + x_for=trusted_proxy_hops, + x_proto=trusted_proxy_hops, + x_host=trusted_proxy_hops, + x_prefix=trusted_proxy_hops +) + +# --- Secure Session Cookie Configuration --- +# For local network usage, disable secure cookies to allow HTTP connections +# Only enable secure cookies in production when HTTPS is actually being used +app.config['SESSION_COOKIE_SECURE'] = False # Allow HTTP for local network usage +app.config['SESSION_COOKIE_HTTPONLY'] = True # Still protect against XSS +app.config['SESSION_COOKIE_SAMESITE'] = 'Lax' # CSRF protection + +# Import database instance from extracted module +from src.database import db +db.init_app(app) + +# Import all models from extracted modules +from src.models import ( + User, Speaker, Recording, TranscriptChunk, Share, InternalShare, + SharedRecordingState, Group, GroupMembership, Tag, RecordingTag, + Event, TranscriptTemplate, InquireSession, SystemSetting, PushSubscription, + APIToken, NamingTemplate, Folder, SpeakerSnippet, ShareAuditLog, + ProcessingJob, TokenUsage, TranscriptionUsage, + AccessLog, AuthLog, +) + +# Import utility functions from extracted modules +from src.utils import ( + auto_close_json, safe_json_loads, preprocess_json_escapes, extract_json_object, + md_to_html, sanitize_html, local_datetime_filter, password_check, + add_column_if_not_exists, is_safe_url +) + +# Import service layer functions +from src.services.embeddings import ( + get_embedding_model, chunk_transcription, generate_embeddings, + serialize_embedding, deserialize_embedding, get_accessible_recording_ids, + process_recording_chunks, basic_text_search_chunks, semantic_search_chunks +) +from src.services.llm import ( + is_gpt5_model, is_using_openai_api, call_llm_completion, format_api_error_message +) +from src.services.document import process_markdown_to_docx +from src.services.retention import ( + is_recording_exempt_from_deletion, get_retention_days_for_recording, process_auto_deletion +) +from src.services.calendar import generate_ics_content, escape_ical_text +from src.services.speaker import ( + update_speaker_usage, identify_speakers_from_text, identify_unidentified_speakers_from_text +) + +# Import background task functions +from src.tasks.processing import ( + generate_title_task, generate_summary_only_task, extract_events_from_transcript, + extract_audio_from_video, transcribe_audio_task, transcribe_with_connector, + transcribe_chunks_with_connector, transcribe_incognito +) + +# Import configuration helpers +from src.config.version import get_version + +# Initialize Flask-Login and other extensions +login_manager = LoginManager() +login_manager.init_app(app) +login_manager.login_view = 'auth.login' +login_manager.login_message_category = 'info' +bcrypt = Bcrypt() +bcrypt.init_app(app) +limiter.init_app(app) # Initialize the limiter (uses in-memory storage by default) + +# Exempt frequently-polled status endpoints from rate limiting +@limiter.request_filter +def exempt_status_endpoints(): + """Exempt status polling endpoints from rate limiting.""" + from flask import request + # Exempt status endpoints that are polled frequently during processing + if '/status' in request.path and request.method == 'GET': + return True + if request.path.endswith('/batch-status') and request.method == 'POST': + return True + # Exempt job queue status polling (polled every 5-30 seconds during processing) + if request.path == '/api/recordings/job-queue-status' and request.method == 'GET': + return True + return False + +csrf = CSRFProtect(app) + +# Return JSON (not HTML) for CSRF errors so frontend can handle them +from flask_wtf.csrf import CSRFError + +@app.errorhandler(CSRFError) +def handle_csrf_error(e): + return jsonify({ + 'error': 'Session expirée, veuillez rafraîchir la page.', + 'csrf_error': True + }), 400 + + +# Exempt token-authenticated requests from CSRF protection +@csrf.exempt +@app.before_request +def csrf_exempt_for_api_tokens(): + """ + Exempt API token-authenticated requests from CSRF validation. + + This allows automation tools (n8n, Zapier, curl, etc.) to make + authenticated requests without needing CSRF tokens. + """ + from src.utils.token_auth import is_token_authenticated + + # If request has a valid token, skip CSRF check + if is_token_authenticated(): + # Mark this view as CSRF exempt + if hasattr(request, 'endpoint') and request.endpoint: + view_func = app.view_functions.get(request.endpoint) + if view_func: + csrf.exempt(view_func) + + +# Add context processor to make 'now' available to all templates +@app.context_processor +def inject_now(): + return {'now': datetime.now()} + +@app.context_processor +def inject_group_admin_status(): + """Inject is_group_admin flag into all templates.""" + from flask_login import current_user + from src.models.organization import GroupMembership + + is_group_admin = False + if current_user.is_authenticated: + is_group_admin = GroupMembership.query.filter_by( + user_id=current_user.id, + role='admin' + ).first() is not None + + return {'is_group_admin': is_group_admin} + +# --- Timezone Formatting Filter --- +@app.template_filter('localdatetime') +def local_datetime_filter(dt): + """Format a UTC datetime object to the user's local timezone.""" + if dt is None: + return "" + + # Get timezone from .env, default to UTC + user_tz_name = os.environ.get('TIMEZONE', 'UTC') + try: + user_tz = pytz.timezone(user_tz_name) + except pytz.UnknownTimeZoneError: + user_tz = pytz.utc + app.logger.warning(f"Invalid TIMEZONE '{user_tz_name}' in .env. Defaulting to UTC.") + + # If the datetime object is naive, assume it's UTC + if dt.tzinfo is None: + dt = pytz.utc.localize(dt) + + # Convert to the user's timezone + local_dt = dt.astimezone(user_tz) + + # Format it nicely + return format_datetime(local_dt, format='medium', locale='en_US') + +# Ensure upload and instance directories exist +os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) + +# Ensure upload and instance directories exist +os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) +# Assuming the instance folder is handled correctly by Flask or created by setup.sh +# os.makedirs(os.path.dirname(app.config['SQLALCHEMY_DATABASE_URI'].replace('sqlite:///', '/')), exist_ok=True) + + +# --- User loader for Flask-Login --- +@login_manager.user_loader +def load_user(user_id): + return db.session.get(User, int(user_id)) + + +@login_manager.request_loader +def load_user_from_request(request): + """ + Load user from API token in the request. + + This enables token-based authentication for API access + (e.g., from curl, n8n, Zapier, etc.). + """ + from src.utils.token_auth import load_user_from_token + return load_user_from_token() + + +# --- Embedding and Chunking Utilities --- + +from src.api.auth import auth_bp, init_auth_extensions +from src.api.tokens import tokens_bp, init_tokens_helpers +from src.api.shares import shares_bp, init_shares_helpers +from src.api.recordings import recordings_bp, init_recordings_helpers +from src.api.tags import tags_bp, init_tags_helpers +from src.api.folders import folders_bp, init_folders_helpers +from src.api.groups import groups_bp, init_groups_helpers +from src.api.admin import admin_bp, init_admin_helpers +from src.api.speakers import speakers_bp, init_speakers_helpers +from src.api.inquire import inquire_bp, init_inquire_helpers +from src.api.templates import templates_bp, init_templates_helpers +from src.api.naming_templates import naming_templates_bp +from src.api.export_templates import export_templates_bp +from src.api.events import events_bp, init_events_helpers +from src.api.system import system_bp, init_system_helpers +from src.api.push_notifications import push_bp +from src.api.api_v1 import api_v1_bp, init_api_v1_helpers +from src.api.audit import audit_bp +from src.api.docs import docs_bp + +# Database initialization (extracted to src/init_db.py) +from src.init_db import initialize_database +with app.app_context(): + initialize_database(app) + +# Application configuration (extracted to src/config/app_config.py) +from src.config.app_config import initialize_config +client, chunking_service, version = initialize_config(app) + +# Initialize blueprint helpers (inject extensions and utility functions) +init_auth_extensions(bcrypt, csrf, limiter) +init_tokens_helpers(bcrypt, csrf, limiter) +init_shares_helpers(has_recording_access) +init_recordings_helpers(has_recording_access=has_recording_access, get_user_recording_status=get_user_recording_status, set_user_recording_status=set_user_recording_status, enrich_recording_dict_with_user_status=enrich_recording_dict_with_user_status, bcrypt=bcrypt, csrf=csrf, limiter=limiter, chunking_service=chunking_service) +init_tags_helpers(has_recording_access=has_recording_access, bcrypt=bcrypt, csrf=csrf, limiter=limiter) +init_folders_helpers(has_recording_access=has_recording_access, bcrypt=bcrypt, csrf=csrf, limiter=limiter) +init_groups_helpers(has_recording_access=has_recording_access, bcrypt=bcrypt, csrf=csrf, limiter=limiter) +init_admin_helpers(has_recording_access=has_recording_access, bcrypt=bcrypt, csrf=csrf, limiter=limiter) +init_speakers_helpers(has_recording_access=has_recording_access, bcrypt=bcrypt, csrf=csrf, limiter=limiter) +init_inquire_helpers(has_recording_access=has_recording_access, bcrypt=bcrypt, csrf=csrf, limiter=limiter) +init_templates_helpers(has_recording_access=has_recording_access, bcrypt=bcrypt, csrf=csrf, limiter=limiter) +init_events_helpers(has_recording_access=has_recording_access, bcrypt=bcrypt, csrf=csrf, limiter=limiter) +init_system_helpers(has_recording_access=has_recording_access, bcrypt=bcrypt, csrf=csrf, limiter=limiter, chunking_service=chunking_service) +init_api_v1_helpers(has_recording_access=has_recording_access, get_user_recording_status=get_user_recording_status, set_user_recording_status=set_user_recording_status, enrich_recording_dict_with_user_status=enrich_recording_dict_with_user_status, bcrypt=bcrypt, csrf=csrf, limiter=limiter, chunking_service=chunking_service) + +# Register blueprints +app.register_blueprint(auth_bp) +app.register_blueprint(tokens_bp) +app.register_blueprint(shares_bp) +app.register_blueprint(recordings_bp) +app.register_blueprint(tags_bp) +app.register_blueprint(folders_bp) +app.register_blueprint(groups_bp) +app.register_blueprint(admin_bp) +app.register_blueprint(speakers_bp) +app.register_blueprint(inquire_bp) +app.register_blueprint(templates_bp) +app.register_blueprint(naming_templates_bp) +app.register_blueprint(export_templates_bp) +app.register_blueprint(events_bp) +app.register_blueprint(system_bp) +app.register_blueprint(push_bp) +app.register_blueprint(api_v1_bp) +csrf.exempt(api_v1_bp) # API v1 uses token auth, not CSRF +app.register_blueprint(audit_bp) +app.register_blueprint(docs_bp) + +# File monitor and scheduler initialization functions below + +# Startup functions (extracted to src/config/startup.py) +from src.config.startup import initialize_file_monitor, get_file_monitor_functions, initialize_auto_deletion_scheduler, run_startup_tasks + +# Run startup tasks +run_startup_tasks(app) + +# --- No-Crawl System: HTTP Headers --- +@app.after_request +def add_no_crawl_headers(response): + """ + Add HTTP headers to discourage search engine crawling and indexing. + This provides defense-in-depth alongside robots.txt and meta tags. + """ + response.headers['X-Robots-Tag'] = 'noindex, nofollow, noarchive, nosnippet, noimageindex' + return response + +# --- No-Crawl System: Serve robots.txt --- +@app.route('/robots.txt') +def robots_txt(): + """Serve robots.txt to instruct crawlers not to index the site.""" + return send_file(os.path.join(app.static_folder, 'robots.txt'), mimetype='text/plain') + +if __name__ == '__main__': + import argparse + parser = argparse.ArgumentParser() + parser.add_argument('--debug', action='store_true', help='Run in debug mode') + args = parser.parse_args() + + # Consider using waitress or gunicorn for production + # waitress-serve --host 0.0.0.0 --port 8899 app:app + # For development: + app.run(host='0.0.0.0', port=8899, debug=args.debug) diff --git a/src/audio_chunking.py b/src/audio_chunking.py new file mode 100644 index 0000000..4992816 --- /dev/null +++ b/src/audio_chunking.py @@ -0,0 +1,1203 @@ +""" +Audio Chunking Service for Large File Processing with OpenAI Whisper API + +This module provides functionality to split large audio files into smaller chunks +that comply with OpenAI's 25MB file size limit, process them individually, +and reassemble the transcriptions while maintaining accuracy and speaker continuity. +""" + +import os +import json +import subprocess +import tempfile +import logging +import math +import re +from dataclasses import dataclass +from typing import List, Dict, Any, Optional, Tuple, TYPE_CHECKING +from datetime import datetime +import mimetypes + +from src.utils.ffmpeg_utils import convert_to_mp3, FFmpegError, FFmpegNotFoundError + +if TYPE_CHECKING: + from src.services.transcription.base import ConnectorSpecifications + +# Configure logging +logger = logging.getLogger(__name__) + + +@dataclass +class EffectiveChunkingConfig: + """Effective chunking configuration after resolving connector specs and ENV settings.""" + enabled: bool + mode: str # 'size' or 'duration' + limit_value: float # MB for size, seconds for duration + overlap_seconds: int + source: str # 'disabled', 'connector_internal', 'env', 'connector_default', 'app_default' + + +def get_effective_chunking_config( + connector_specs: Optional['ConnectorSpecifications'] = None +) -> EffectiveChunkingConfig: + """ + Determine effective chunking configuration based on connector specs and ENV settings. + + Logic: + 1. Gather connector constraints (max_duration_seconds, max_file_size_bytes) + 2. Gather user settings (CHUNK_LIMIT, CHUNK_SIZE_MB, ENABLE_CHUNKING) + 3. If connector has hard limits: + - Chunking is REQUIRED (can't disable) + - Use MIN(connector_limit, user_limit) - user can go smaller but not larger + 4. If connector has no hard limits: + - If handles_chunking_internally=True → no app chunking + - If ENABLE_CHUNKING=false → no chunking + - Otherwise use user settings or app defaults + + Args: + connector_specs: Optional ConnectorSpecifications from the active connector + + Returns: + EffectiveChunkingConfig with resolved settings + """ + overlap_seconds = int(os.environ.get('CHUNK_OVERLAP_SECONDS', '3')) + enable_chunking_env = os.environ.get('ENABLE_CHUNKING', '').lower() + + # --- Step 1: Determine connector's hard limits --- + connector_duration_limit = None + connector_size_limit_mb = None + + if connector_specs: + if connector_specs.max_duration_seconds: + # Use recommended if available, otherwise 85% of max for safety + if connector_specs.recommended_chunk_seconds: + connector_duration_limit = connector_specs.recommended_chunk_seconds + else: + connector_duration_limit = int(connector_specs.max_duration_seconds * 0.85) + + if connector_specs.max_file_size_bytes: + # Use 80% of max for safety margin + connector_size_limit_mb = (connector_specs.max_file_size_bytes / (1024 * 1024)) * 0.8 + + has_hard_limits = connector_duration_limit is not None or connector_size_limit_mb is not None + + # --- Step 2: Parse user settings --- + user_duration_limit = None + user_size_limit_mb = None + + chunk_limit = os.environ.get('CHUNK_LIMIT', '').strip() + chunk_size_mb_env = os.environ.get('CHUNK_SIZE_MB', '').strip() + + if chunk_limit: + chunk_limit_upper = chunk_limit.upper() + try: + if chunk_limit_upper.endswith('MB'): + user_size_limit_mb = float(re.sub(r'[^0-9.]', '', chunk_limit_upper)) + elif chunk_limit_upper.endswith('S'): + user_duration_limit = float(re.sub(r'[^0-9.]', '', chunk_limit_upper)) + elif chunk_limit_upper.endswith('M') and not chunk_limit_upper.endswith('MB'): + user_duration_limit = float(re.sub(r'[^0-9.]', '', chunk_limit_upper)) * 60 + except ValueError: + logger.warning(f"Invalid CHUNK_LIMIT format: {chunk_limit}") + elif chunk_size_mb_env: + try: + user_size_limit_mb = float(chunk_size_mb_env) + except ValueError: + logger.warning(f"Invalid CHUNK_SIZE_MB format: {chunk_size_mb_env}") + + # --- Step 3: If connector has hard limits, chunking is REQUIRED --- + if has_hard_limits: + # Prefer duration-based if connector has duration limit + if connector_duration_limit is not None: + # Use minimum of connector limit and user limit (if user set one) + if user_duration_limit is not None: + effective_limit = min(connector_duration_limit, user_duration_limit) + source = 'user_and_connector' + logger.info(f"Chunking: Using MIN(connector={connector_duration_limit}s, user={user_duration_limit}s) = {effective_limit}s") + else: + effective_limit = connector_duration_limit + source = 'connector_limit' + logger.info(f"Chunking: Connector requires duration limit {effective_limit}s (max_duration={connector_specs.max_duration_seconds}s)") + + return EffectiveChunkingConfig( + enabled=True, + mode='duration', + limit_value=effective_limit, + overlap_seconds=overlap_seconds, + source=source + ) + + # Fall back to size-based if only size limit exists + elif connector_size_limit_mb is not None: + if user_size_limit_mb is not None: + effective_limit = min(connector_size_limit_mb, user_size_limit_mb) + source = 'user_and_connector' + logger.info(f"Chunking: Using MIN(connector={connector_size_limit_mb:.1f}MB, user={user_size_limit_mb}MB) = {effective_limit:.1f}MB") + else: + effective_limit = connector_size_limit_mb + source = 'connector_limit' + logger.info(f"Chunking: Connector requires size limit {effective_limit:.1f}MB (max_size={connector_specs.max_file_size_bytes/(1024*1024):.1f}MB)") + + return EffectiveChunkingConfig( + enabled=True, + mode='size', + limit_value=effective_limit, + overlap_seconds=overlap_seconds, + source=source + ) + + # --- Step 4: No hard limits - chunking is optional --- + + # Connector handles chunking internally + if connector_specs and connector_specs.handles_chunking_internally: + logger.info("Chunking: Connector handles chunking internally, no app-level chunking needed") + return EffectiveChunkingConfig( + enabled=False, + mode='none', + limit_value=0, + overlap_seconds=overlap_seconds, + source='connector_internal' + ) + + # User explicitly disabled chunking + if enable_chunking_env == 'false': + logger.info("Chunking: Disabled via ENABLE_CHUNKING=false") + return EffectiveChunkingConfig( + enabled=False, + mode='none', + limit_value=0, + overlap_seconds=overlap_seconds, + source='disabled' + ) + + # User set explicit limits - use them + if user_duration_limit is not None: + logger.info(f"Chunking: Using user CHUNK_LIMIT={user_duration_limit}s") + return EffectiveChunkingConfig( + enabled=True, + mode='duration', + limit_value=user_duration_limit, + overlap_seconds=overlap_seconds, + source='env' + ) + + if user_size_limit_mb is not None: + logger.info(f"Chunking: Using user CHUNK_LIMIT={user_size_limit_mb}MB") + return EffectiveChunkingConfig( + enabled=True, + mode='size', + limit_value=user_size_limit_mb, + overlap_seconds=overlap_seconds, + source='env' + ) + + # Connector has recommended settings (but no hard limits) + if connector_specs and connector_specs.recommended_chunk_seconds: + logger.info(f"Chunking: Using connector recommended={connector_specs.recommended_chunk_seconds}s") + return EffectiveChunkingConfig( + enabled=True, + mode='duration', + limit_value=connector_specs.recommended_chunk_seconds, + overlap_seconds=overlap_seconds, + source='connector_recommended' + ) + + # App defaults + if enable_chunking_env != 'false': + logger.info("Chunking: Using app defaults (20MB size-based)") + return EffectiveChunkingConfig( + enabled=True, + mode='size', + limit_value=20.0, + overlap_seconds=overlap_seconds, + source='app_default' + ) + + # Final fallback: disabled + return EffectiveChunkingConfig( + enabled=False, + mode='none', + limit_value=0, + overlap_seconds=overlap_seconds, + source='disabled' + ) + +class AudioChunkingService: + """Service for chunking large audio files and processing them with OpenAI Whisper API.""" + + def __init__(self, max_chunk_size_mb: int = 20, overlap_seconds: int = 3, max_chunk_duration_seconds: int = None): + """ + Initialize the chunking service. + + Args: + max_chunk_size_mb: Maximum size for each chunk in MB (default 20MB for safety margin) + overlap_seconds: Overlap between chunks in seconds for context continuity + max_chunk_duration_seconds: Maximum duration for each chunk in seconds (optional) + """ + self.max_chunk_size_mb = max_chunk_size_mb + self.overlap_seconds = overlap_seconds + self.max_chunk_size_bytes = max_chunk_size_mb * 1024 * 1024 + self.max_chunk_duration_seconds = max_chunk_duration_seconds + self.chunk_stats = [] # Track processing statistics + + def needs_chunking( + self, + file_path: str, + use_asr_endpoint: bool = False, + connector_specs: Optional['ConnectorSpecifications'] = None + ) -> bool: + """ + Check if a file needs to be chunked based on connector specs, ENV settings, and file size. + + Priority order for chunking configuration: + 1. If connector handles_chunking_internally=True → no app-level chunking + 2. If ENABLE_CHUNKING=false → no chunking + 3. If CHUNK_LIMIT or CHUNK_SIZE_MB is explicitly set → use ENV settings + 4. If connector has specs → use connector defaults + 5. Fallback: 20MB size-based chunking + + NOTE: For duration-based limits, this may return True even if chunking isn't needed, + because we need to convert the file first to check duration. The actual chunking + decision is made after conversion in calculate_optimal_chunking(). + + Args: + file_path: Path to the audio file + use_asr_endpoint: DEPRECATED - use connector_specs instead + connector_specs: Optional ConnectorSpecifications from the active connector + + Returns: + True if file might need chunking, False otherwise + """ + # Get effective chunking configuration + chunking_config = get_effective_chunking_config(connector_specs) + + # If chunking is disabled (by connector or user), return False + if not chunking_config.enabled: + logger.info(f"Chunking disabled (source: {chunking_config.source})") + return False + + # Legacy fallback: if no connector_specs provided, check use_asr_endpoint + if connector_specs is None and use_asr_endpoint: + logger.info("Chunking: ASR endpoint detected (legacy), no chunking needed") + return False + + try: + file_size = os.path.getsize(file_path) + + if chunking_config.mode == 'size': + # For size-based limits, we can determine immediately + chunk_size_bytes = chunking_config.limit_value * 1024 * 1024 + needs_it = file_size > chunk_size_bytes + logger.info(f"Chunking check (size, source={chunking_config.source}): " + f"{file_size/1024/1024:.1f}MB vs limit {chunking_config.limit_value}MB - needs chunking: {needs_it}") + return needs_it + elif chunking_config.mode == 'duration': + # For duration-based limits, we need to check the actual duration + # Try to get duration without conversion first (fast check) + duration = self.get_audio_duration(file_path) + if duration: + needs_it = duration > chunking_config.limit_value + logger.info(f"Chunking check (duration, source={chunking_config.source}): " + f"{duration:.1f}s vs limit {chunking_config.limit_value}s - needs chunking: {needs_it}") + return needs_it + else: + # Can't determine duration without conversion, assume might need chunking + logger.info(f"Duration-based limit set ({chunking_config.limit_value}s) but can't check duration yet - will check after conversion") + return True # Proceed to conversion and check + else: + # Mode is 'none', shouldn't reach here but handle gracefully + return False + + except OSError: + logger.error(f"Could not get file size for {file_path}") + return False + + def needs_chunking_with_config( + self, + file_path: str, + connector_specs: Optional['ConnectorSpecifications'] = None + ) -> Tuple[bool, EffectiveChunkingConfig]: + """ + Check if a file needs chunking and return the effective configuration. + + This is useful when you need both the decision and the configuration + for subsequent processing. + + Args: + file_path: Path to the audio file + connector_specs: Optional ConnectorSpecifications from the active connector + + Returns: + Tuple of (needs_chunking, EffectiveChunkingConfig) + """ + chunking_config = get_effective_chunking_config(connector_specs) + needs_it = self.needs_chunking(file_path, connector_specs=connector_specs) + return needs_it, chunking_config + + def get_audio_duration(self, file_path: str) -> Optional[float]: + """ + Get the duration of an audio file in seconds using ffprobe. + + Args: + file_path: Path to the audio file + + Returns: + Duration in seconds, or None if unable to determine + """ + try: + result = subprocess.run([ + 'ffprobe', '-v', 'error', '-show_entries', 'format=duration', + '-of', 'default=noprint_wrappers=1:nokey=1', file_path + ], capture_output=True, text=True, check=True) + + duration = float(result.stdout.strip()) + return duration + except (subprocess.CalledProcessError, ValueError, FileNotFoundError) as e: + logger.error(f"Error getting audio duration for {file_path}: {e}") + return None + + def convert_to_mp3_and_get_info(self, file_path: str, temp_dir: str) -> Tuple[str, float, float]: + """ + Convert the input file to MP3 format for consistency and get its size and duration info. + + If the input is already MP3, skips conversion and just copies it. + + Args: + file_path: Path to the source audio file + temp_dir: Directory to store the temporary MP3 file + + Returns: + Tuple of (mp3_file_path, duration_seconds, size_bytes) + """ + try: + import shutil + + # Generate MP3 filename + base_name = os.path.splitext(os.path.basename(file_path))[0] + mp3_filename = f"{base_name}_converted.mp3" + mp3_path = os.path.join(temp_dir, mp3_filename) + + # Check if input is already MP3 - skip conversion + file_ext = os.path.splitext(file_path)[1].lower() + if file_ext == '.mp3': + logger.info(f"Input {file_path} is already MP3, skipping conversion") + shutil.copy2(file_path, mp3_path) + else: + logger.info(f"Converting {file_path} to 128kbps MP3 format for chunking...") + # Use centralized FFmpeg utility for conversion + convert_to_mp3(file_path, mp3_path) + + if not os.path.exists(mp3_path): + raise ValueError("MP3 file was not created") + + # Get the size and duration of the MP3 file + mp3_size = os.path.getsize(mp3_path) + mp3_duration = self.get_audio_duration(mp3_path) + + if not mp3_duration: + raise ValueError("Could not determine MP3 file duration") + + logger.info(f"MP3 ready for chunking: {mp3_size/1024/1024:.1f}MB, {mp3_duration:.1f}s") + + # Optionally preserve converted file for debugging (set PRESERVE_CHUNK_DEBUG=true in env) + if os.getenv('PRESERVE_CHUNK_DEBUG', 'false').lower() == 'true': + # Save debug files in /data/uploads/debug/ directory + debug_dir = '/data/uploads/debug' + os.makedirs(debug_dir, exist_ok=True) + debug_filename = os.path.basename(mp3_path).replace('_converted', '_converted_debug') + debug_path = os.path.join(debug_dir, debug_filename) + shutil.copy2(mp3_path, debug_path) + logger.info(f"Debug: Preserved converted file as {debug_path}") + + return mp3_path, mp3_duration, mp3_size + + except (FFmpegError, FFmpegNotFoundError) as e: + logger.error(f"Error converting file to MP3: {e}") + raise + except Exception as e: + logger.error(f"Error converting file to MP3: {e}") + raise + + def parse_chunk_limit(self) -> Tuple[str, float]: + """ + Parse the CHUNK_LIMIT environment variable to determine chunking mode and value. + + Supports formats: + - Size-based: "20MB", "10MB" + - Duration-based: "1200s", "20m" + - Legacy: CHUNK_SIZE_MB environment variable (for backwards compatibility) + + Returns: + Tuple of (mode, value) where mode is 'size' or 'duration' + """ + chunk_limit = os.environ.get('CHUNK_LIMIT', '').strip().upper() + + # Check for new CHUNK_LIMIT format + if chunk_limit: + # Size-based: ends with MB + if chunk_limit.endswith('MB'): + try: + size_mb = float(re.sub(r'[^0-9.]', '', chunk_limit)) + return 'size', size_mb + except ValueError: + logger.warning(f"Invalid CHUNK_LIMIT format: {chunk_limit}") + + # Duration-based: ends with s or m + elif chunk_limit.endswith('S'): + try: + seconds = float(re.sub(r'[^0-9.]', '', chunk_limit)) + return 'duration', seconds + except ValueError: + logger.warning(f"Invalid CHUNK_LIMIT format: {chunk_limit}") + + elif chunk_limit.endswith('M'): + try: + minutes = float(re.sub(r'[^0-9.]', '', chunk_limit)) + return 'duration', minutes * 60 + except ValueError: + logger.warning(f"Invalid CHUNK_LIMIT format: {chunk_limit}") + + # Fallback to legacy CHUNK_SIZE_MB for backwards compatibility + legacy_size = os.environ.get('CHUNK_SIZE_MB', '20') + try: + size_mb = float(legacy_size) + logger.info(f"Using legacy CHUNK_SIZE_MB: {size_mb}MB") + return 'size', size_mb + except ValueError: + logger.warning(f"Invalid CHUNK_SIZE_MB format: {legacy_size}") + return 'size', 20.0 # Ultimate fallback + + def calculate_optimal_chunking(self, converted_size: float, total_duration: float, connector_specs=None) -> Tuple[int, float]: + """ + Calculate optimal number of chunks and chunk duration based on the configured limit. + + Args: + converted_size: Size of the converted audio file in bytes + total_duration: Total duration of the audio file in seconds + connector_specs: Optional ConnectorSpecifications with hard limits + + Returns: + Tuple of (num_chunks, chunk_duration_seconds) + """ + try: + # Use effective chunking config which respects connector hard limits + chunking_config = get_effective_chunking_config(connector_specs) + mode = chunking_config.mode + limit_value = chunking_config.limit_value + + logger.info(f"Chunking config: mode={mode}, limit={limit_value}, source={chunking_config.source}") + + if mode == 'size': + # Size-based chunking + max_size_bytes = limit_value * 1024 * 1024 * 0.95 # 95% safety factor + num_chunks = max(1, math.ceil(converted_size / max_size_bytes)) + + logger.info(f"Size-based chunking: {limit_value}MB limit") + logger.info(f"File size {converted_size/1024/1024:.1f}MB requires {num_chunks} chunks") + + else: # duration-based + # Duration-based chunking with API safety limit + effective_limit = min(limit_value, 1400) # Cap at OpenAI safe limit + num_chunks = max(1, math.ceil(total_duration / effective_limit)) + + logger.info(f"Duration-based chunking: {limit_value}s limit (effective: {effective_limit}s)") + logger.info(f"File duration {total_duration:.1f}s requires {num_chunks} chunks") + + # Calculate chunk duration + chunk_duration = total_duration / num_chunks + + # Apply minimum duration (5 minutes) but don't exceed file duration + chunk_duration = min(max(300, chunk_duration), total_duration) + + # Log final chunking plan + expected_chunk_size_mb = (converted_size / num_chunks) / (1024 * 1024) + logger.info(f"Chunking plan: {num_chunks} chunks of ~{chunk_duration:.1f}s each (~{expected_chunk_size_mb:.1f}MB each)") + + return num_chunks, chunk_duration + + except Exception as e: + logger.error(f"Error calculating optimal chunking: {e}") + # Conservative fallback + fallback_chunks = max(2, math.ceil(total_duration / 600)) # 10-minute chunks + fallback_duration = total_duration / fallback_chunks + return fallback_chunks, fallback_duration + + def create_chunks(self, file_path: str, temp_dir: str, connector_specs=None) -> List[Dict[str, Any]]: + """ + Split audio file into overlapping chunks. + + First converts the file to MP3 format to get accurate size information, + then calculates optimal chunk duration based on the actual MP3 file size. + + Args: + file_path: Path to the source audio file + temp_dir: Directory to store temporary chunk files + connector_specs: Optional ConnectorSpecifications with hard limits + + Returns: + List of chunk information dictionaries + """ + chunks = [] + wav_path = None + + try: + # Step 1: Convert to MP3 and get accurate size/duration info + mp3_path, mp3_duration, mp3_size = self.convert_to_mp3_and_get_info(file_path, temp_dir) + + # Step 2: Calculate optimal chunking strategy (respects connector hard limits) + num_chunks, chunk_duration = self.calculate_optimal_chunking(mp3_size, mp3_duration, connector_specs) + + # If only 1 chunk needed, no actual chunking required + if num_chunks == 1: + logger.info(f"File duration {mp3_duration:.1f}s is within limit - no chunking needed") + # Return the single "chunk" as the whole file + base_name = os.path.splitext(os.path.basename(file_path))[0] + chunk_filename = f"{base_name}_chunk_000.mp3" + chunk_path = os.path.join(temp_dir, chunk_filename) + + # Copy the converted file as the single chunk + import shutil + shutil.copy2(mp3_path, chunk_path) + + chunk_info = { + 'index': 0, + 'path': chunk_path, + 'filename': chunk_filename, + 'start_time': 0, + 'end_time': mp3_duration, + 'duration': mp3_duration, + 'size_bytes': mp3_size, + 'size_mb': mp3_size / (1024 * 1024) + } + chunks.append(chunk_info) + logger.info(f"Created single chunk for entire file: {mp3_duration:.1f}s") + return chunks + + # Calculate step size to create exactly num_chunks with overlap + # Total coverage needed: mp3_duration + (overlap * (num_chunks - 1)) + # Each chunk covers: chunk_duration + # Step between chunks to get exactly num_chunks + if num_chunks > 1: + step_duration = (mp3_duration - chunk_duration) / (num_chunks - 1) + else: + step_duration = mp3_duration + + current_start = 0 + chunk_index = 0 + + logger.info(f"Splitting {file_path} into {num_chunks} chunks of ~{chunk_duration:.1f}s with {self.overlap_seconds}s overlap") + + for chunk_index in range(num_chunks): + # Calculate start position for this chunk + if chunk_index > 0: + current_start = chunk_index * step_duration + + # Calculate end time for this chunk + chunk_end = min(current_start + chunk_duration, mp3_duration) + actual_duration = chunk_end - current_start + + # Skip very short chunks at the end (shouldn't happen with proper calculation) + if actual_duration < 10: # Less than 10 seconds + logger.warning(f"Skipping short chunk {chunk_index}: {actual_duration:.1f}s") + break + + # Generate chunk filename + base_name = os.path.splitext(os.path.basename(file_path))[0] + chunk_filename = f"{base_name}_chunk_{chunk_index:03d}.mp3" + chunk_path = os.path.join(temp_dir, chunk_filename) + + # Extract chunk from the converted MP3 file (more efficient than re-converting) + cmd = [ + 'ffmpeg', '-i', mp3_path, + '-ss', str(current_start), + '-t', str(actual_duration), + '-acodec', 'copy', # Copy codec since it's already in the right format + '-y', # Overwrite output file + chunk_path + ] + + result = subprocess.run(cmd, capture_output=True, text=True) + if result.returncode != 0: + logger.error(f"ffmpeg failed for chunk {chunk_index}: {result.stderr}") + continue + + # Verify chunk was created and get its size + if os.path.exists(chunk_path): + chunk_size = os.path.getsize(chunk_path) + + # Verify chunk size is within limits + if chunk_size > self.max_chunk_size_bytes: + logger.warning(f"Chunk {chunk_index} is {chunk_size/1024/1024:.1f}MB, exceeds {self.max_chunk_size_mb}MB limit") + + chunk_info = { + 'index': chunk_index, + 'path': chunk_path, + 'filename': chunk_filename, + 'start_time': current_start, + 'end_time': chunk_end, + 'duration': actual_duration, + 'size_bytes': chunk_size, + 'size_mb': chunk_size / (1024 * 1024) + } + + chunks.append(chunk_info) + logger.info(f"Created chunk {chunk_index}: {current_start:.1f}s-{chunk_end:.1f}s ({chunk_size/1024/1024:.1f}MB)") + + # Optionally preserve chunks for debugging (set PRESERVE_CHUNK_DEBUG=true in env) + if os.getenv('PRESERVE_CHUNK_DEBUG', 'false').lower() == 'true': + import shutil + # Save debug chunks in /data/uploads/debug/ directory + debug_dir = '/data/uploads/debug' + os.makedirs(debug_dir, exist_ok=True) + debug_filename = os.path.basename(chunk_path).replace('.mp3', '_debug.mp3') + debug_path = os.path.join(debug_dir, debug_filename) + shutil.copy2(chunk_path, debug_path) + logger.info(f"Debug: Preserved chunk as {debug_path}") + else: + logger.error(f"Chunk file not created: {chunk_path}") + + logger.info(f"Created {len(chunks)} chunks for {file_path}") + return chunks + + except Exception as e: + logger.error(f"Error creating chunks for {file_path}: {e}") + # Clean up any partial chunks + for chunk in chunks: + try: + if os.path.exists(chunk['path']): + os.remove(chunk['path']) + except Exception: + pass + raise + finally: + # Clean up the temporary WAV file + if wav_path and os.path.exists(wav_path): + try: + os.remove(wav_path) + logger.debug(f"Cleaned up temporary WAV file: {wav_path}") + except Exception as e: + logger.warning(f"Error cleaning up temporary WAV file: {e}") + + def merge_transcriptions(self, chunk_results: List[Dict[str, Any]]) -> str: + """ + Merge transcription results from multiple chunks, handling overlaps. + + Args: + chunk_results: List of transcription results from chunks + + Returns: + Merged transcription text + """ + if not chunk_results: + return "" + + if len(chunk_results) == 1: + return chunk_results[0].get('transcription', '') + + # Sort chunks by start time to ensure correct order + sorted_chunks = sorted(chunk_results, key=lambda x: x.get('start_time', 0)) + + merged_text = "" + + for i, chunk in enumerate(sorted_chunks): + chunk_text = chunk.get('transcription', '').strip() + + if not chunk_text: + continue + + if i == 0: + # First chunk: use entire transcription + merged_text = chunk_text + else: + # Subsequent chunks: try to handle overlap + merged_text = self._merge_overlapping_text( + merged_text, + chunk_text, + chunk.get('start_time', 0), + sorted_chunks[i-1].get('end_time', 0) + ) + + return merged_text + + def _merge_overlapping_text(self, existing_text: str, new_text: str, + new_start_time: float, prev_end_time: float) -> str: + """ + Merge overlapping transcription text, attempting to remove duplicates. + + Args: + existing_text: Previously merged text + new_text: New chunk text to merge + new_start_time: Start time of new chunk + prev_end_time: End time of previous chunk + + Returns: + Merged text with overlaps handled + """ + # If there's no overlap, just concatenate + overlap_duration = prev_end_time - new_start_time + if overlap_duration <= 0: + return f"{existing_text}\n{new_text}" + + # For overlapping chunks, try to find common text and merge intelligently + # This is a simplified approach - in practice, you might want more sophisticated + # text similarity matching + + # Split texts into sentences/phrases + existing_sentences = self._split_into_sentences(existing_text) + new_sentences = self._split_into_sentences(new_text) + + if not existing_sentences or not new_sentences: + return f"{existing_text}\n{new_text}" + + # Try to find overlap by comparing last few sentences of existing text + # with first few sentences of new text + overlap_found = False + merge_point = len(existing_sentences) + + # Look for common sentences (simple approach) + for i in range(min(3, len(existing_sentences))): # Check last 3 sentences + last_sentence = existing_sentences[-(i+1)].strip().lower() + + for j in range(min(3, len(new_sentences))): # Check first 3 sentences + first_sentence = new_sentences[j].strip().lower() + + # If sentences are similar enough, consider it an overlap + if last_sentence and first_sentence and self._sentences_similar(last_sentence, first_sentence): + merge_point = len(existing_sentences) - i + new_start_index = j + 1 + overlap_found = True + break + + if overlap_found: + break + + if overlap_found: + # Merge at the found overlap point + merged_sentences = existing_sentences[:merge_point] + new_sentences[new_start_index:] + return ' '.join(merged_sentences) + else: + # No clear overlap found, concatenate with a separator + return f"{existing_text}\n{new_text}" + + def _split_into_sentences(self, text: str) -> List[str]: + """Split text into sentences for overlap detection.""" + import re + # Simple sentence splitting - could be improved with more sophisticated NLP + sentences = re.split(r'[.!?]+', text) + return [s.strip() for s in sentences if s.strip()] + + def _sentences_similar(self, sent1: str, sent2: str, threshold: float = 0.8) -> bool: + """Check if two sentences are similar enough to be considered the same.""" + # Simple similarity check based on common words + words1 = set(sent1.split()) + words2 = set(sent2.split()) + + if not words1 or not words2: + return False + + intersection = len(words1.intersection(words2)) + union = len(words1.union(words2)) + + similarity = intersection / union if union > 0 else 0 + return similarity >= threshold + + def analyze_chunk_audio_properties(self, chunk_path: str) -> Dict[str, Any]: + """ + Analyze audio properties of a chunk that might affect processing time. + + Args: + chunk_path: Path to the chunk file + + Returns: + Dictionary with audio analysis results + """ + try: + # Get detailed audio information using ffprobe + cmd = [ + 'ffprobe', '-v', 'quiet', '-print_format', 'json', + '-show_format', '-show_streams', chunk_path + ] + + result = subprocess.run(cmd, capture_output=True, text=True, check=True) + probe_data = json.loads(result.stdout) + + audio_stream = None + for stream in probe_data.get('streams', []): + if stream.get('codec_type') == 'audio': + audio_stream = stream + break + + if not audio_stream: + return {'error': 'No audio stream found'} + + format_info = probe_data.get('format', {}) + + analysis = { + 'duration': float(format_info.get('duration', 0)), + 'size_bytes': int(format_info.get('size', 0)), + 'bitrate': int(format_info.get('bit_rate', 0)), + 'sample_rate': int(audio_stream.get('sample_rate', 0)), + 'channels': int(audio_stream.get('channels', 0)), + 'codec': audio_stream.get('codec_name', 'unknown'), + 'bits_per_sample': int(audio_stream.get('bits_per_raw_sample', 0)), + } + + # Calculate some derived metrics + if analysis['duration'] > 0: + analysis['effective_bitrate'] = (analysis['size_bytes'] * 8) / analysis['duration'] + analysis['compression_ratio'] = analysis['bitrate'] / analysis['effective_bitrate'] if analysis['effective_bitrate'] > 0 else 0 + + return analysis + + except Exception as e: + logger.warning(f"Error analyzing chunk audio properties: {e}") + return {'error': str(e)} + + def log_processing_statistics(self, chunk_results: List[Dict[str, Any]]) -> None: + """ + Log detailed statistics about chunk processing performance. + + Args: + chunk_results: List of chunk processing results with timing info + """ + if not chunk_results: + return + + logger.info("=== CHUNK PROCESSING STATISTICS ===") + + total_chunks = len(chunk_results) + processing_times = [] + sizes = [] + durations = [] + + for i, result in enumerate(chunk_results): + processing_time = result.get('processing_time', 0) + chunk_size = result.get('size_mb', 0) + chunk_duration = result.get('duration', 0) + + processing_times.append(processing_time) + sizes.append(chunk_size) + durations.append(chunk_duration) + + # Log individual chunk stats + rate = chunk_duration / processing_time if processing_time > 0 else 0 + logger.info(f"Chunk {i+1}: {processing_time:.1f}s processing, {chunk_size:.1f}MB, {chunk_duration:.1f}s audio (rate: {rate:.2f}x)") + + # Calculate summary statistics + if processing_times: + avg_time = sum(processing_times) / len(processing_times) + min_time = min(processing_times) + max_time = max(processing_times) + + avg_size = sum(sizes) / len(sizes) + avg_duration = sum(durations) / len(durations) + + total_audio_time = sum(durations) + total_processing_time = sum(processing_times) + overall_rate = total_audio_time / total_processing_time if total_processing_time > 0 else 0 + + logger.info(f"Summary: {total_chunks} chunks, {total_audio_time:.1f}s audio in {total_processing_time:.1f}s") + logger.info(f"Average: {avg_time:.1f}s processing, {avg_size:.1f}MB, {avg_duration:.1f}s audio") + logger.info(f"Range: {min_time:.1f}s - {max_time:.1f}s processing time") + logger.info(f"Overall rate: {overall_rate:.2f}x realtime") + + # Identify performance outliers + if max_time > avg_time * 2: + slow_chunks = [i for i, t in enumerate(processing_times) if t > avg_time * 1.5] + logger.warning(f"Performance outliers detected: chunks {[i+1 for i in slow_chunks]} took significantly longer") + + # Suggest possible causes + logger.info("Possible causes for slow processing:") + logger.info("- OpenAI API server load/performance variations") + logger.info("- Network latency or connection issues") + logger.info("- Audio content complexity (silence, noise, multiple speakers)") + logger.info("- Temporary API rate limiting or throttling") + + logger.info("=== END STATISTICS ===") + + def get_performance_recommendations(self, chunk_results: List[Dict[str, Any]]) -> List[str]: + """ + Generate performance recommendations based on processing results. + + Args: + chunk_results: List of chunk processing results + + Returns: + List of recommendation strings + """ + recommendations = [] + + if not chunk_results: + return recommendations + + processing_times = [r.get('processing_time', 0) for r in chunk_results] + + if processing_times: + avg_time = sum(processing_times) / len(processing_times) + max_time = max(processing_times) + + # Check for high variance in processing times + if max_time > avg_time * 3: + recommendations.append("High variance in processing times detected. Consider implementing retry logic with exponential backoff.") + + # Check for overall slow processing + total_audio = sum(r.get('duration', 0) for r in chunk_results) + total_processing = sum(processing_times) + rate = total_audio / total_processing if total_processing > 0 else 0 + + if rate < 0.5: # Less than 0.5x realtime + recommendations.append("Overall processing is slow. Consider using smaller chunks or a different transcription service.") + + # Check for timeout issues + if any(t > 300 for t in processing_times): # 5+ minutes + recommendations.append("Some chunks took over 5 minutes. Consider implementing timeout handling and chunk retry logic.") + + # Check chunk size optimization + avg_size = sum(r.get('size_mb', 0) for r in chunk_results) / len(chunk_results) + if avg_size < 10: + recommendations.append("Chunks are relatively small. Consider increasing chunk size for better efficiency.") + elif avg_size > 22: + recommendations.append("Chunks are close to size limit. Consider reducing chunk size for more reliable processing.") + + return recommendations + + def cleanup_chunks(self, chunks: List[Dict[str, Any]], temp_mp3_path: str = None) -> None: + """ + Clean up temporary chunk files and MP3 file. + + Args: + chunks: List of chunk information dictionaries + temp_mp3_path: Optional path to temporary MP3 file to clean up + """ + for chunk in chunks: + try: + chunk_path = chunk.get('path') + if chunk_path and os.path.exists(chunk_path): + os.remove(chunk_path) + logger.debug(f"Cleaned up chunk file: {chunk_path}") + except Exception as e: + logger.warning(f"Error cleaning up chunk {chunk.get('filename', 'unknown')}: {e}") + + # Clean up temporary MP3 file if provided + if temp_mp3_path and os.path.exists(temp_mp3_path): + try: + os.remove(temp_mp3_path) + logger.debug(f"Cleaned up temporary MP3 file: {temp_mp3_path}") + except Exception as e: + logger.warning(f"Error cleaning up temporary MP3 file: {e}") + +def get_audio_duration_ffprobe(file_path: str) -> Optional[float]: + """Get actual audio duration using ffprobe.""" + try: + result = subprocess.run([ + 'ffprobe', '-v', 'error', '-show_entries', 'format=duration', + '-of', 'default=noprint_wrappers=1:nokey=1', file_path + ], capture_output=True, text=True, check=True) + return float(result.stdout.strip()) + except Exception: + return None + + +def extract_speaker_samples( + audio_path: str, + segments: List[Dict[str, Any]], + output_dir: str, + min_duration: float = 1.5, # OpenAI minimum is 1.2s, use 1.5s for safety + max_duration: float = 9.0, # OpenAI maximum is 10.0s, use 9.0s for safety + max_speakers: int = 4 +) -> Dict[str, str]: + """ + Extract audio samples for each unique speaker from diarized segments. + + This is used to maintain speaker identity across chunks when processing + long audio files with the gpt-4o-transcribe-diarize model. + + Args: + audio_path: Path to the source audio file (should be the converted chunk MP3) + segments: List of diarized segments with speaker, start_time, end_time + output_dir: Directory to store extracted speaker samples + min_duration: Minimum duration for a speaker sample (OpenAI requires 1.2-10s) + max_duration: Maximum duration for a speaker sample + max_speakers: Maximum number of speakers to extract (OpenAI supports up to 4) + + Returns: + Dict mapping speaker label (e.g., "A", "B") to path of extracted audio sample + """ + # OpenAI's actual limits + OPENAI_MIN_DURATION = 1.2 + OPENAI_MAX_DURATION = 10.0 + + # Group segments by speaker + speaker_segments: Dict[str, List[Dict]] = {} + for seg in segments: + # Handle both dict and object segments + if isinstance(seg, dict): + speaker = seg.get('speaker', 'Unknown') + start = seg.get('start_time') or seg.get('start') + end = seg.get('end_time') or seg.get('end') + else: + speaker = getattr(seg, 'speaker', 'Unknown') + start = getattr(seg, 'start_time', None) or getattr(seg, 'start', None) + end = getattr(seg, 'end_time', None) or getattr(seg, 'end', None) + + if speaker == 'Unknown' or start is None or end is None: + continue + + if speaker not in speaker_segments: + speaker_segments[speaker] = [] + speaker_segments[speaker].append({'start': start, 'end': end}) + + if not speaker_segments: + logger.warning("No valid speaker segments found for sample extraction") + return {} + + # Sort speakers to get consistent ordering (A, B, C, D...) + sorted_speakers = sorted(speaker_segments.keys())[:max_speakers] + logger.info(f"Extracting samples for {len(sorted_speakers)} speakers: {sorted_speakers}") + + speaker_samples = {} + + for speaker in sorted_speakers: + segs = speaker_segments[speaker] + + # Find the best segment for this speaker (ideally 1.5-9 seconds) + best_segment = None + best_duration = 0 + + for seg in segs: + duration = seg['end'] - seg['start'] + + # Prefer segments in the ideal range + if min_duration <= duration <= max_duration: + if duration > best_duration: + best_segment = seg + best_duration = duration + + # If no segment in ideal range, try to find one we can trim + if not best_segment: + for seg in segs: + duration = seg['end'] - seg['start'] + if duration >= min_duration: + # Trim to max_duration if needed + best_segment = { + 'start': seg['start'], + 'end': min(seg['end'], seg['start'] + max_duration) + } + best_duration = best_segment['end'] - best_segment['start'] + break + + # Still no segment? Try combining multiple short segments + if not best_segment and len(segs) > 1: + # Sort by start time and try to find consecutive segments + sorted_segs = sorted(segs, key=lambda x: x['start']) + combined_start = sorted_segs[0]['start'] + combined_end = sorted_segs[0]['end'] + + for i in range(1, len(sorted_segs)): + # If segments are close (within 1 second), combine them + if sorted_segs[i]['start'] - combined_end < 1.0: + combined_end = sorted_segs[i]['end'] + if combined_end - combined_start >= min_duration: + break + + combined_duration = combined_end - combined_start + if combined_duration >= min_duration: + best_segment = { + 'start': combined_start, + 'end': min(combined_end, combined_start + max_duration) + } + best_duration = best_segment['end'] - best_segment['start'] + + if not best_segment: + logger.warning(f"Could not find suitable segment for speaker {speaker}") + continue + + # Extract the audio sample using ffmpeg + sample_filename = f"speaker_{speaker}_sample.mp3" + sample_path = os.path.join(output_dir, sample_filename) + + try: + cmd = [ + 'ffmpeg', '-i', audio_path, + '-ss', str(best_segment['start']), + '-t', str(best_duration), + '-acodec', 'libmp3lame', + '-b:a', '128k', + '-y', + sample_path + ] + + result = subprocess.run(cmd, capture_output=True, text=True) + if result.returncode != 0: + logger.error(f"Failed to extract sample for speaker {speaker}: {result.stderr}") + continue + + if os.path.exists(sample_path) and os.path.getsize(sample_path) > 0: + # Verify actual duration meets OpenAI requirements + actual_duration = get_audio_duration_ffprobe(sample_path) + if actual_duration: + logger.info(f"Speaker {speaker} sample: expected {best_duration:.2f}s, actual {actual_duration:.2f}s") + + if actual_duration < OPENAI_MIN_DURATION: + logger.warning(f"Sample for speaker {speaker} too short ({actual_duration:.2f}s < {OPENAI_MIN_DURATION}s), skipping") + os.remove(sample_path) + continue + elif actual_duration > OPENAI_MAX_DURATION: + logger.warning(f"Sample for speaker {speaker} too long ({actual_duration:.2f}s > {OPENAI_MAX_DURATION}s), skipping") + os.remove(sample_path) + continue + + speaker_samples[speaker] = sample_path + logger.info(f"Extracted {actual_duration:.1f}s sample for speaker {speaker} " + f"(from {best_segment['start']:.1f}s to {best_segment['end']:.1f}s)") + else: + logger.warning(f"Sample file not created for speaker {speaker}") + + except Exception as e: + logger.error(f"Error extracting sample for speaker {speaker}: {e}") + + return speaker_samples + + +def samples_to_data_urls(speaker_samples: Dict[str, str]) -> Dict[str, str]: + """ + Convert speaker sample file paths to base64-encoded data URLs. + + OpenAI's known_speaker_references requires audio samples as data URLs + when using multipart form data. + + Args: + speaker_samples: Dict mapping speaker label to file path + + Returns: + Dict mapping speaker label to data URL + """ + import base64 + + data_urls = {} + + for speaker, path in speaker_samples.items(): + try: + with open(path, 'rb') as f: + audio_data = f.read() + + # Encode as base64 data URL + b64_data = base64.b64encode(audio_data).decode('utf-8') + data_url = f"data:audio/mpeg;base64,{b64_data}" + data_urls[speaker] = data_url + + logger.debug(f"Converted speaker {speaker} sample to data URL ({len(b64_data)} bytes)") + + except Exception as e: + logger.error(f"Error converting speaker {speaker} sample to data URL: {e}") + + return data_urls + + +class ChunkProcessingError(Exception): + """Exception raised when chunk processing fails.""" + pass + +class ChunkingNotSupportedError(Exception): + """Exception raised when chunking is not supported for the current configuration.""" + pass diff --git a/src/auth/sso.py b/src/auth/sso.py new file mode 100644 index 0000000..36e5601 --- /dev/null +++ b/src/auth/sso.py @@ -0,0 +1,188 @@ +import os +import re +from typing import Dict, Optional + +from authlib.integrations.flask_client import OAuth +from flask import current_app + +from src.database import db +from src.models import User + +# Keep a single OAuth client instance +_oauth: Optional[OAuth] = None + + +def _str_to_bool(value: str) -> bool: + return str(value or "").lower() == "true" + + +def get_sso_config() -> Dict[str, Optional[str]]: + """Load SSO configuration from environment variables.""" + return { + "enabled": _str_to_bool(os.environ.get("ENABLE_SSO", "false")), + "provider_name": os.environ.get("SSO_PROVIDER_NAME", "SSO"), + "client_id": os.environ.get("SSO_CLIENT_ID"), + "client_secret": os.environ.get("SSO_CLIENT_SECRET"), + "discovery_url": os.environ.get("SSO_DISCOVERY_URL"), + "redirect_uri": os.environ.get("SSO_REDIRECT_URI"), + "auto_register": _str_to_bool(os.environ.get("SSO_AUTO_REGISTER", "true")), + "allowed_domains": os.environ.get("SSO_ALLOWED_DOMAINS"), + "username_claim": os.environ.get("SSO_DEFAULT_USERNAME_CLAIM", "preferred_username"), + "name_claim": os.environ.get("SSO_DEFAULT_NAME_CLAIM", "name"), + "disable_password_login": _str_to_bool(os.environ.get("SSO_DISABLE_PASSWORD_LOGIN", "false")), + } + + +def is_sso_enabled() -> bool: + cfg = get_sso_config() + return bool( + cfg["enabled"] + and cfg["client_id"] + and cfg["client_secret"] + and cfg["discovery_url"] + and cfg["redirect_uri"] + ) + + +def init_sso_client(app) -> Optional[OAuth]: + """Initialize OAuth client if SSO is enabled.""" + global _oauth + if not is_sso_enabled(): + return None + + if _oauth: + return _oauth + + cfg = get_sso_config() + oauth = OAuth(app) + oauth.register( + name="sso", + server_metadata_url=cfg["discovery_url"], + client_id=cfg["client_id"], + client_secret=cfg["client_secret"], + client_kwargs={"scope": "openid email profile"}, + ) + _oauth = oauth + app.logger.info("SSO client initialized with discovery URL %s", cfg["discovery_url"]) + return _oauth + + +def get_sso_client() -> Optional[OAuth]: + """Return initialized OAuth client or None.""" + return _oauth + + +def is_domain_allowed(email: Optional[str]) -> bool: + """Check if email domain is allowed for auto-registration.""" + if not email: + return False + cfg = get_sso_config() + domains_env = cfg["allowed_domains"] + if not domains_env: + return True # no restriction + + allowed = [d.strip().lower() for d in domains_env.split(",") if d.strip()] + if not allowed: + return True + + parts = email.lower().rsplit("@", 1) + if len(parts) != 2: + return False + domain = parts[1] + return domain in allowed + + +def _sanitize_username(candidate: str) -> str: + sanitized = re.sub(r"[^a-zA-Z0-9._-]", "", candidate or "") + return sanitized or "user" + + +def generate_unique_username(preferred: Optional[str]) -> str: + """Generate a unique username based on preferred value.""" + base = _sanitize_username(preferred or "user") + base = base[:20] + + suffix = 0 + candidate = base + while User.query.filter_by(username=candidate).first(): + suffix += 1 + candidate = f"{base[:18]}{suffix:02d}" + return candidate + + +def create_or_update_sso_user(userinfo: Dict[str, str]) -> User: + """Create or update a user from SSO (OIDC) claims.""" + cfg = get_sso_config() + subject = userinfo.get("sub") + email = userinfo.get("email") + username_claim = cfg["username_claim"] + name_claim = cfg["name_claim"] + + if not subject: + raise ValueError("SSO userinfo does not include 'sub'") + + if not cfg["auto_register"] and not User.query.filter_by(sso_subject=subject).first(): + raise PermissionError("SSO auto-registration is disabled") + + if email and not is_domain_allowed(email): + raise PermissionError("Email domain is not allowed for SSO sign-up") + + # Existing by subject + user = User.query.filter_by(sso_subject=subject).first() + if user: + _update_profile_fields(user, userinfo, name_claim) + db.session.commit() + return user + + # Existing by email: attach SSO + if email: + existing_email_user = User.query.filter_by(email=email).first() + if existing_email_user: + existing_email_user.sso_provider = cfg["provider_name"] + existing_email_user.sso_subject = subject + _update_profile_fields(existing_email_user, userinfo, name_claim) + db.session.commit() + return existing_email_user + + # Create new user + preferred_username = userinfo.get(username_claim) or (email.split("@")[0] if email else None) + username = generate_unique_username(preferred_username) + name_value = userinfo.get(name_claim) if name_claim else userinfo.get("name") + + user = User( + username=username, + email=email or f"{subject}@placeholder.local", + password=None, + sso_provider=cfg["provider_name"], + sso_subject=subject, + name=name_value, + ) + db.session.add(user) + db.session.commit() + return user + + +def _update_profile_fields(user: User, userinfo: Dict[str, str], name_claim: Optional[str]) -> None: + """Update optional profile fields from SSO claims.""" + if not user.email and userinfo.get("email"): + user.email = userinfo["email"] + if name_claim and userinfo.get(name_claim): + user.name = userinfo[name_claim] + + +def update_user_profile_from_claims(user: User, userinfo: Dict[str, str]) -> None: + """Expose profile update for external callers (e.g., account linking).""" + cfg = get_sso_config() + _update_profile_fields(user, userinfo, cfg["name_claim"]) + + +def link_sso_to_existing_user(user: User, provider: str, subject: str) -> User: + """Link SSO identity to an existing user account.""" + if user.sso_subject and user.sso_subject != subject: + raise ValueError("Account already linked to another SSO identity") + + user.sso_provider = provider + user.sso_subject = subject + db.session.commit() + return user + diff --git a/src/config/__init__.py b/src/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/config/app_config.py b/src/config/app_config.py new file mode 100644 index 0000000..1c665cd --- /dev/null +++ b/src/config/app_config.py @@ -0,0 +1,164 @@ +""" +Application configuration and initialization. +""" + +import os +import sys +import httpx +from openai import OpenAI + +from src.audio_chunking import AudioChunkingService +from src.config.version import get_version + +# Configuration from environment +TEXT_MODEL_API_KEY = os.environ.get("TEXT_MODEL_API_KEY") +TEXT_MODEL_BASE_URL = os.environ.get("TEXT_MODEL_BASE_URL", "https://openrouter.ai/api/v1") +if TEXT_MODEL_BASE_URL: + TEXT_MODEL_BASE_URL = TEXT_MODEL_BASE_URL.split('#')[0].strip() +TEXT_MODEL_NAME = os.environ.get("TEXT_MODEL_NAME", "openai/gpt-3.5-turbo") + +transcription_api_key = os.environ.get("TRANSCRIPTION_API_KEY", "") +transcription_base_url = os.environ.get("TRANSCRIPTION_BASE_URL", "") +if transcription_base_url: + transcription_base_url = transcription_base_url.split('#')[0].strip() + +# New transcription connector configuration +# TRANSCRIPTION_CONNECTOR: explicit connector name (openai_whisper, openai_transcribe, asr_endpoint) +# TRANSCRIPTION_MODEL: model to use (e.g., gpt-4o-transcribe-diarize for diarization) +TRANSCRIPTION_CONNECTOR = os.environ.get('TRANSCRIPTION_CONNECTOR', '').lower().strip() +TRANSCRIPTION_MODEL = os.environ.get('TRANSCRIPTION_MODEL', '') +if TRANSCRIPTION_MODEL: + TRANSCRIPTION_MODEL = TRANSCRIPTION_MODEL.split('#')[0].strip() + +# Feature flag for new transcription architecture (default: enabled) +USE_NEW_TRANSCRIPTION_ARCHITECTURE = os.environ.get( + 'USE_NEW_TRANSCRIPTION_ARCHITECTURE', 'true' +).lower() == 'true' + +USE_ASR_ENDPOINT = os.environ.get('USE_ASR_ENDPOINT', 'false').lower() == 'true' +ASR_BASE_URL = os.environ.get('ASR_BASE_URL') +if ASR_BASE_URL: + ASR_BASE_URL = ASR_BASE_URL.split('#')[0].strip() + +if USE_ASR_ENDPOINT: + ASR_DIARIZE = os.environ.get('ASR_DIARIZE', 'true').lower() == 'true' + ASR_MIN_SPEAKERS = os.environ.get('ASR_MIN_SPEAKERS') + ASR_MAX_SPEAKERS = os.environ.get('ASR_MAX_SPEAKERS') + # Speaker embeddings are only supported by WhisperX ASR service, not the basic whisper-asr-webservice + ASR_RETURN_SPEAKER_EMBEDDINGS = os.environ.get('ASR_RETURN_SPEAKER_EMBEDDINGS', 'false').lower() == 'true' +else: + ASR_DIARIZE = False + ASR_MIN_SPEAKERS = None + ASR_MAX_SPEAKERS = None + ASR_RETURN_SPEAKER_EMBEDDINGS = False + +# ASR chunking configuration - enables app-level chunking for self-hosted ASR services +# that may crash on long files due to GPU memory exhaustion +ASR_ENABLE_CHUNKING = os.environ.get('ASR_ENABLE_CHUNKING', 'false').lower() == 'true' +ASR_MAX_DURATION_SECONDS = int(os.environ.get('ASR_MAX_DURATION_SECONDS', '7200')) # 2 hours default + +ENABLE_CHUNKING = os.environ.get('ENABLE_CHUNKING', 'true').lower() == 'true' +CHUNK_SIZE_MB = int(os.environ.get('CHUNK_SIZE_MB', '20')) +CHUNK_OVERLAP_SECONDS = int(os.environ.get('CHUNK_OVERLAP_SECONDS', '3')) + +# Audio compression settings - compress lossless uploads (WAV, AIFF) to save storage +AUDIO_COMPRESS_UPLOADS = os.environ.get('AUDIO_COMPRESS_UPLOADS', 'true').lower() == 'true' +AUDIO_CODEC = os.environ.get('AUDIO_CODEC', 'mp3').lower() # mp3, flac, opus +AUDIO_BITRATE = os.environ.get('AUDIO_BITRATE', '128k') # For lossy codecs + +# Video passthrough - send original video files directly to ASR without extracting audio +# Useful for custom ASR backends that handle video/multi-track audio internally +VIDEO_PASSTHROUGH_ASR = os.environ.get('VIDEO_PASSTHROUGH_ASR', 'false').lower() == 'true' + +# Unsupported codecs - comma-separated list of codecs to exclude from the default supported list +# Useful when your transcription service doesn't support certain codecs (e.g., vllm doesn't support opus) +# Example: AUDIO_UNSUPPORTED_CODECS=opus,vorbis +_unsupported_codecs_str = os.environ.get('AUDIO_UNSUPPORTED_CODECS', '') +AUDIO_UNSUPPORTED_CODECS = {c.strip().lower() for c in _unsupported_codecs_str.split(',') if c.strip()} + +# Email verification configuration +ENABLE_EMAIL_VERIFICATION = os.environ.get('ENABLE_EMAIL_VERIFICATION', 'false').lower() == 'true' +REQUIRE_EMAIL_VERIFICATION = os.environ.get('REQUIRE_EMAIL_VERIFICATION', 'false').lower() == 'true' +SMTP_HOST = os.environ.get('SMTP_HOST', '') +SMTP_PORT = int(os.environ.get('SMTP_PORT', '587')) +SMTP_USERNAME = os.environ.get('SMTP_USERNAME', '') +SMTP_PASSWORD = os.environ.get('SMTP_PASSWORD', '') +SMTP_USE_TLS = os.environ.get('SMTP_USE_TLS', 'true').lower() == 'true' +SMTP_USE_SSL = os.environ.get('SMTP_USE_SSL', 'false').lower() == 'true' +SMTP_FROM_ADDRESS = os.environ.get('SMTP_FROM_ADDRESS', 'noreply@yourdomain.com') +SMTP_FROM_NAME = os.environ.get('SMTP_FROM_NAME', 'Speakr') + +# Create chunking service at module level so it can be imported by processing.py +# Always initialize the service - the needs_chunking() method will check ENABLE_CHUNKING +# and return False when appropriate. This allows connectors with hard limits (e.g., +# max_duration_seconds) to still enforce chunking even when ENABLE_CHUNKING=false. +chunking_service = AudioChunkingService(CHUNK_SIZE_MB, CHUNK_OVERLAP_SECONDS) + + +def initialize_config(app): + """Initialize application configuration.""" + app_headers = { + "HTTP-Referer": "https://github.com/murtaza-nasir/speakr", + "X-Title": "Speakr - AI Audio Transcription", + "User-Agent": "Speakr/1.0 (https://github.com/murtaza-nasir/speakr)" + } + + http_client_no_proxy = httpx.Client(verify=True, headers=app_headers) + + client = None + try: + api_key = TEXT_MODEL_API_KEY or "not-needed" + client = OpenAI(api_key=api_key, base_url=TEXT_MODEL_BASE_URL, http_client=http_client_no_proxy) + app.logger.info(f"LLM client initialized: {TEXT_MODEL_BASE_URL} / {TEXT_MODEL_NAME}") + except Exception as e: + app.logger.error(f"Failed to initialize LLM client: {e}") + + # Use module-level chunking_service (already created above) + version = get_version() + + app.logger.info(f"=== DictIA {version} Starting Up ===") + + # Initialize transcription connector + if USE_NEW_TRANSCRIPTION_ARCHITECTURE: + try: + from src.services.transcription import get_registry + registry = get_registry() + connector = registry.initialize_from_env() + connector_name = registry.get_active_connector_name() + capabilities = [c.name for c in connector.get_capabilities()] + app.logger.info(f"Transcription connector initialized: {connector_name}") + app.logger.info(f"Connector capabilities: {capabilities}") + + # Log diarization support prominently + diarize_default = getattr(connector, 'default_diarize', connector.supports_diarization) + if not connector.supports_diarization: + app.logger.info("Speaker diarization: NOT AVAILABLE (connector does not support it)") + elif not diarize_default: + app.logger.info("Speaker diarization: DISABLED (ASR_DIARIZE=false)") + else: + app.logger.info("Speaker diarization: ENABLED") + + except Exception as e: + app.logger.error(f"Failed to initialize transcription connector: {e}") + app.logger.error("Falling back to legacy transcription configuration validation") + # Fall through to legacy validation + _validate_legacy_transcription_config(app) + else: + # Legacy configuration validation + _validate_legacy_transcription_config(app) + + return client, chunking_service, version + + +def _validate_legacy_transcription_config(app): + """Validate legacy transcription configuration (backwards compatibility).""" + if USE_ASR_ENDPOINT: + if not ASR_BASE_URL: + app.logger.error("ERROR: ASR enabled but ASR_BASE_URL not configured!") + sys.exit(1) + app.logger.info(f"Using ASR endpoint: {ASR_BASE_URL}") + else: + if not transcription_base_url or not transcription_api_key: + app.logger.error("ERROR: No transcription service configured!") + sys.exit(1) + app.logger.info(f"Using Whisper API: {transcription_base_url}") diff --git a/src/config/startup.py b/src/config/startup.py new file mode 100644 index 0000000..2d4f072 --- /dev/null +++ b/src/config/startup.py @@ -0,0 +1,158 @@ +""" +Application startup functions. +""" + +import os +import time +import threading +from datetime import datetime, timedelta +from flask import current_app + +ENABLE_AUTO_DELETION = os.environ.get('ENABLE_AUTO_DELETION', 'false').lower() == 'true' +GLOBAL_RETENTION_DAYS = int(os.environ.get('GLOBAL_RETENTION_DAYS', '0')) + + +def initialize_file_monitor(app): + """Initialize file monitor after app is fully loaded to avoid circular imports.""" + try: + # Import here to avoid circular imports + import src.file_monitor as file_monitor + file_monitor.start_file_monitor() + app.logger.info("File monitor initialization completed") + except Exception as e: + app.logger.warning(f"File monitor initialization failed: {e}") + +def get_file_monitor_functions(app): + """Get file monitor functions, handling import errors gracefully.""" + try: + import src.file_monitor as file_monitor + return file_monitor.start_file_monitor, file_monitor.stop_file_monitor, file_monitor.get_file_monitor_status + except ImportError as e: + app.logger.warning(f"File monitor not available: {e}") + + # Create stub functions if file_monitor is not available + def start_file_monitor(): + pass + def stop_file_monitor(): + pass + def get_file_monitor_status(): + return {'running': False, 'error': 'File monitor module not available'} + + return start_file_monitor, stop_file_monitor, get_file_monitor_status + +# --- Auto-Processing API Endpoints --- +def initialize_auto_deletion_scheduler(app): + """Initialize the daily auto-deletion scheduler if enabled.""" + from src.services.retention import process_auto_deletion + + if not ENABLE_AUTO_DELETION: + app.logger.info("Auto-deletion scheduler not started (ENABLE_AUTO_DELETION=false)") + return + + if GLOBAL_RETENTION_DAYS <= 0: + app.logger.info("Auto-deletion scheduler not started (GLOBAL_RETENTION_DAYS not set)") + return + + def run_daily_deletion(): + """Background thread that runs auto-deletion daily at 2 AM.""" + import time + from datetime import datetime, timedelta + + app.logger.info("Auto-deletion scheduler started - will run daily at 2:00 AM") + + while True: + try: + # Calculate time until next 2 AM + now = datetime.now() + next_run = now.replace(hour=2, minute=0, second=0, microsecond=0) + + # If it's past 2 AM today, schedule for tomorrow + if now.hour >= 2: + next_run += timedelta(days=1) + + sleep_seconds = (next_run - now).total_seconds() + + app.logger.info(f"Next auto-deletion scheduled for: {next_run.strftime('%Y-%m-%d %H:%M:%S')} (in {sleep_seconds/3600:.1f} hours)") + + # Sleep until next run time + time.sleep(sleep_seconds) + + # Run auto-deletion + app.logger.info("Running scheduled auto-deletion...") + with app.app_context(): + stats = process_auto_deletion() + app.logger.info(f"Scheduled auto-deletion completed: {stats}") + + except Exception as e: + app.logger.error(f"Error in auto-deletion scheduler: {e}", exc_info=True) + # Sleep for 1 hour before retrying on error + time.sleep(3600) + + # Start the scheduler thread + import threading + scheduler_thread = threading.Thread(target=run_daily_deletion, daemon=True, name="AutoDeletionScheduler") + scheduler_thread.start() + app.logger.info("✅ Auto-deletion scheduler initialized - running daily at 2:00 AM") + + +def initialize_file_exporter(app): + """Initialize file exporter after app is fully loaded.""" + try: + from src.file_exporter import initialize_export_directory, ENABLE_AUTO_EXPORT + if ENABLE_AUTO_EXPORT: + initialize_export_directory() + app.logger.info("✅ Auto-export initialized") + else: + app.logger.info("ℹ️ Auto-export: Disabled (set ENABLE_AUTO_EXPORT=true to enable)") + except Exception as e: + app.logger.warning(f"File exporter initialization failed: {e}") + + +def initialize_job_queue(app): + """Initialize and start the background job queue with orphan recovery.""" + try: + from src.services.job_queue import job_queue + + # Initialize job queue with app context + job_queue.init_app(app) + + # Recover any jobs that were processing when the app crashed + job_queue.recover_orphaned_jobs() + + # Start worker threads + job_queue.start() + + # Get queue status + status = job_queue.get_queue_status() + t_queue = status['transcription_queue'] + s_queue = status['summary_queue'] + app.logger.info( + f"Job queues started: " + f"transcription ({t_queue['workers']} workers, {t_queue['queued']} queued), " + f"summary ({s_queue['workers']} workers, {s_queue['queued']} queued)" + ) + except Exception as e: + app.logger.error(f"Failed to start job queue: {e}", exc_info=True) + + +def run_startup_tasks(app): + """Run all startup tasks that need to happen after app creation.""" + from src.models import SystemSetting + + with app.app_context(): + # Set dynamic MAX_CONTENT_LENGTH based on database setting + max_file_size_mb = SystemSetting.get_setting('max_file_size_mb', 250) + app.config['MAX_CONTENT_LENGTH'] = max_file_size_mb * 1024 * 1024 + app.logger.info(f"Set MAX_CONTENT_LENGTH to {max_file_size_mb}MB from database setting") + + # Initialize job queue for background processing + initialize_job_queue(app) + + # Initialize file monitor after app setup + initialize_file_monitor(app) + + # Initialize file exporter + initialize_file_exporter(app) + + # Initialize auto-deletion scheduler + initialize_auto_deletion_scheduler(app) diff --git a/src/config/version.py b/src/config/version.py new file mode 100644 index 0000000..19d66be --- /dev/null +++ b/src/config/version.py @@ -0,0 +1,29 @@ +""" +Version information helper. +""" + +import os + + + +def get_version(): + # Try reading VERSION file first (works in Docker) + try: + with open('VERSION', 'r') as f: + return f.read().strip() + except FileNotFoundError: + pass + + # Fall back to git tags (works in development) + try: + import subprocess + return subprocess.check_output(['git', 'describe', '--tags', '--abbrev=0'], + stderr=subprocess.DEVNULL).decode().strip() + except: + pass + + # Final fallback + return "unknown" + + + diff --git a/src/database.py b/src/database.py new file mode 100644 index 0000000..2b14697 --- /dev/null +++ b/src/database.py @@ -0,0 +1,12 @@ +""" +Database initialization module. + +This module creates and exports the SQLAlchemy database instance +that is used across all models. +""" + +from flask_sqlalchemy import SQLAlchemy + +# Create the SQLAlchemy database instance +# This will be initialized with the Flask app using db.init_app(app) +db = SQLAlchemy() diff --git a/src/file_exporter.py b/src/file_exporter.py new file mode 100644 index 0000000..deff627 --- /dev/null +++ b/src/file_exporter.py @@ -0,0 +1,555 @@ +#!/usr/bin/env python3 +""" +File Exporter for Automated Recording Export + +Exports transcriptions and summaries as markdown files to a configured directory. +Supports per-user subdirectories based on username. +Supports customizable export templates with localized labels. +""" + +import os +import re +import json +import logging +from datetime import datetime, timedelta +from pathlib import Path +from werkzeug.utils import secure_filename + +# Configuration from environment +ENABLE_AUTO_EXPORT = os.environ.get('ENABLE_AUTO_EXPORT', 'false').lower() == 'true' +AUTO_EXPORT_DIR = os.environ.get('AUTO_EXPORT_DIR', '/data/exports') +AUTO_EXPORT_TRANSCRIPTION = os.environ.get('AUTO_EXPORT_TRANSCRIPTION', 'true').lower() == 'true' +AUTO_EXPORT_SUMMARY = os.environ.get('AUTO_EXPORT_SUMMARY', 'true').lower() == 'true' + +# Setup logging +logger = logging.getLogger('file_exporter') +logger.setLevel(logging.INFO) + + +def format_transcription_with_template(transcription_text, user): + """ + Format transcription using the user's default template. + + Args: + transcription_text: Raw transcription (JSON or plain text) + user: User object to get template from + + Returns: + Formatted transcription string + """ + # Import here to avoid circular imports + from src.models import TranscriptTemplate + + # Try to parse as JSON + try: + transcription_data = json.loads(transcription_text) + if not isinstance(transcription_data, list): + # Not our expected format, return as-is + return transcription_text + except (json.JSONDecodeError, TypeError): + # Not JSON, return as-is + return transcription_text + + # Get user's default template + template = TranscriptTemplate.query.filter_by( + user_id=user.id, + is_default=True + ).first() + + # Default format if no template set + if not template: + template_format = "[{{speaker}}]: {{text}}" + else: + template_format = template.template + + # Helper functions for formatting + def format_time(seconds): + """Format seconds to HH:MM:SS""" + if seconds is None: + return "00:00:00" + td = timedelta(seconds=seconds) + hours = int(td.total_seconds() // 3600) + minutes = int((td.total_seconds() % 3600) // 60) + secs = int(td.total_seconds() % 60) + return f"{hours:02d}:{minutes:02d}:{secs:02d}" + + def format_srt_time(seconds): + """Format seconds to SRT format HH:MM:SS,mmm""" + if seconds is None: + return "00:00:00,000" + td = timedelta(seconds=seconds) + hours = int(td.total_seconds() // 3600) + minutes = int((td.total_seconds() % 3600) // 60) + secs = int(td.total_seconds() % 60) + millis = int((td.total_seconds() % 1) * 1000) + return f"{hours:02d}:{minutes:02d}:{secs:02d},{millis:03d}" + + # Generate formatted transcript + output_lines = [] + for index, segment in enumerate(transcription_data, 1): + line = template_format + + # Replace variables + replacements = { + '{{index}}': str(index), + '{{speaker}}': segment.get('speaker', 'Unknown'), + '{{text}}': segment.get('sentence', ''), + '{{start_time}}': format_time(segment.get('start_time')), + '{{end_time}}': format_time(segment.get('end_time')), + } + + for key, value in replacements.items(): + line = line.replace(key, value) + + # Handle filters + # Upper case filter + line = re.sub(r'{{(.*?)\|upper}}', lambda m: replacements.get('{{' + m.group(1) + '}}', '').upper(), line) + # SRT time filter + line = re.sub(r'{{start_time\|srt}}', format_srt_time(segment.get('start_time')), line) + line = re.sub(r'{{end_time\|srt}}', format_srt_time(segment.get('end_time')), line) + + output_lines.append(line) + + return '\n'.join(output_lines) + + +def get_export_directory(user): + """Get the export directory for a user, creating if needed.""" + base_dir = Path(AUTO_EXPORT_DIR) + + # Create per-user subdirectory based on username + user_dir = base_dir / secure_filename(user.username) + user_dir.mkdir(parents=True, exist_ok=True) + + return user_dir + + +def generate_safe_filename(recording): + """Generate a safe filename for the export based on recording ID only.""" + # Use only recording ID for consistent filename that doesn't change + return f"recording_{recording.id}" + + +def get_export_filepath(user, recording): + """Get the full export filepath for a recording.""" + export_dir = get_export_directory(user) + filename = generate_safe_filename(recording) + return export_dir / f"{filename}.md" + + +def mark_export_as_deleted(recording_id): + """ + Rename the export file to indicate the recording was deleted. + + Args: + recording_id: ID of the deleted recording + + Returns: + New filepath if renamed, None otherwise + """ + if not ENABLE_AUTO_EXPORT: + return None + + # Import here to avoid circular imports + from src.app import app, db + from src.models import Recording, User + + with app.app_context(): + try: + # We need to find the file - check all user directories + base_dir = Path(AUTO_EXPORT_DIR) + if not base_dir.exists(): + return None + + # Look for the file in all user subdirectories + for user_dir in base_dir.iterdir(): + if user_dir.is_dir(): + old_filepath = user_dir / f"recording_{recording_id}.md" + if old_filepath.exists(): + new_filepath = user_dir / f"[deleted]_recording_{recording_id}.md" + old_filepath.rename(new_filepath) + logger.info(f"Marked export as deleted: {new_filepath}") + return str(new_filepath) + + return None + + except Exception as e: + logger.error(f"Failed to mark export as deleted for recording {recording_id}: {e}") + return None + + +def format_duration(seconds): + """Format duration in seconds to human-readable string.""" + if not seconds: + return "" + + hours = seconds // 3600 + minutes = (seconds % 3600) // 60 + secs = seconds % 60 + + if hours > 0: + return f"{hours}h {minutes}m {secs}s" + elif minutes > 0: + return f"{minutes}m {secs}s" + else: + return f"{secs}s" + + +def format_file_size(bytes_size): + """Format file size in bytes to human-readable string.""" + if not bytes_size: + return "" + + for unit in ['B', 'KB', 'MB', 'GB']: + if bytes_size < 1024: + return f"{bytes_size:.1f} {unit}" + bytes_size /= 1024 + return f"{bytes_size:.1f} TB" + + +def get_user_export_template(user, recording=None): + """ + Get the export template to use for a recording. + + Resolution order: + 1. Folder's export_template_id (if recording is in a folder) + 2. Tag's export_template_id (first matching tag with an export template) + 3. User's default export template (is_default=True) + + Args: + user: User object + recording: Optional Recording object (for folder/tag lookup) + + Returns: + ExportTemplate object or None + """ + from src.models import ExportTemplate + + # 1. Check folder's export template + if recording and recording.folder and recording.folder.export_template_id: + template = ExportTemplate.query.get(recording.folder.export_template_id) + if template: + return template + + # 2. Check tags' export templates + if recording and recording.tags: + for tag in recording.tags: + if tag.export_template_id: + template = ExportTemplate.query.get(tag.export_template_id) + if template: + return template + + # 3. Fall back to user's default + return ExportTemplate.query.filter_by( + user_id=user.id, + is_default=True + ).first() + + +def render_export_template(template_str, context, labels): + """ + Render an export template with variable substitution and conditionals. + + Args: + template_str: Template string with {{variables}} and {{#if var}}...{{/if}} blocks + context: Dictionary of variable values + labels: Dictionary of localized labels + + Returns: + Rendered string + """ + result = template_str + + # Process conditionals first: {{#if variable}}content{{/if}} + def replace_conditional(match): + var_name = match.group(1) + content = match.group(2) + # Check if the variable exists and is truthy + value = context.get(var_name, '') + if value: + return content + return '' + + # Match {{#if var}}...{{/if}} blocks (non-greedy) + conditional_pattern = r'\{\{#if\s+(\w+)\}\}(.*?)\{\{/if\}\}' + result = re.sub(conditional_pattern, replace_conditional, result, flags=re.DOTALL) + + # Replace label variables: {{label.key}} + def replace_label(match): + key = match.group(1) + return labels.get(key, key) + + result = re.sub(r'\{\{label\.(\w+)\}\}', replace_label, result) + + # Replace context variables: {{variable}} + for key, value in context.items(): + placeholder = '{{' + key + '}}' + result = result.replace(placeholder, str(value) if value else '') + + return result + + +def generate_markdown_content(recording, user, include_transcription=True, include_summary=True): + """Generate markdown content for a recording export. + + Args: + recording: Recording object to export + user: User object for getting template preferences + include_transcription: Whether to include transcription + include_summary: Whether to include summary + """ + from src.utils.localization import get_export_labels, format_date_localized, format_datetime_localized + + # Get user's language preference (default to English) + user_language = getattr(user, 'ui_language', 'en') or 'en' + + # Get localized labels + labels = get_export_labels(user_language) + + # Get export template (checks folder, tags, then user default) + export_template = get_user_export_template(user, recording) + + if export_template: + # Use custom template + return generate_from_template( + recording, user, export_template.template, labels, user_language, + include_transcription, include_summary + ) + else: + # Use default (backwards compatible) behavior + return generate_default_markdown( + recording, user, labels, user_language, + include_transcription, include_summary + ) + + +def generate_from_template(recording, user, template_str, labels, user_language, + include_transcription=True, include_summary=True): + """ + Generate markdown content using a custom template. + + Args: + recording: Recording object + user: User object + template_str: Template string + labels: Localized labels dictionary + user_language: User's language code + include_transcription: Whether to include transcription + include_summary: Whether to include summary + + Returns: + Rendered markdown string + """ + from src.utils.localization import format_date_localized, format_datetime_localized + + # Build context with all available variables + context = { + 'title': recording.title or f"Recording {recording.id}", + 'meeting_date': format_date_localized(recording.meeting_date, user_language) if recording.meeting_date else '', + 'created_at': format_datetime_localized(recording.created_at, user_language) if recording.created_at else '', + 'original_filename': recording.original_filename or '', + 'file_size': format_file_size(recording.file_size) if recording.file_size else '', + 'participants': recording.participants or '', + 'tags': ', '.join([tag.name for tag in recording.tags]) if recording.tags else '', + 'transcription_duration': format_duration(recording.transcription_duration_seconds) if recording.transcription_duration_seconds else '', + 'summarization_duration': format_duration(recording.summarization_duration_seconds) if recording.summarization_duration_seconds else '', + 'notes': recording.notes or '' if include_summary else '', # Notes included with summary setting + 'summary': recording.summary or '' if include_summary else '', + 'transcription': '', # Will be set below + } + + # Format transcription if included + if include_transcription and recording.transcription: + context['transcription'] = format_transcription_with_template(recording.transcription, user) + + # Render template + rendered = render_export_template(template_str, context, labels) + + # Always append hardcoded footer + footer = labels.get('footer', 'Generated with [Speakr](https://github.com/learnedmachine/speakr)') + rendered += f"\n\n---\n\n*{footer}*\n" + + return rendered + + +def generate_default_markdown(recording, user, labels, user_language, + include_transcription=True, include_summary=True): + """ + Generate markdown using the default (backwards compatible) format. + + Args: + recording: Recording object + user: User object + labels: Localized labels dictionary + user_language: User's language code + include_transcription: Whether to include transcription + include_summary: Whether to include summary + + Returns: + Rendered markdown string + """ + from src.utils.localization import format_date_localized, format_datetime_localized + + lines = [] + + # Header with title + title = recording.title or f"Recording {recording.id}" + lines.append(f"# {title}") + lines.append("") + + # Metadata section + lines.append(f"## {labels.get('metadata', 'Metadata')}") + lines.append("") + + if recording.meeting_date: + date_str = format_date_localized(recording.meeting_date, user_language) + lines.append(f"- **{labels.get('date', 'Date')}:** {date_str}") + + if recording.created_at: + created_str = format_datetime_localized(recording.created_at, user_language) + lines.append(f"- **{labels.get('created', 'Created')}:** {created_str}") + + if recording.original_filename: + lines.append(f"- **{labels.get('originalFile', 'Original File')}:** {recording.original_filename}") + + if recording.file_size: + lines.append(f"- **{labels.get('fileSize', 'File Size')}:** {format_file_size(recording.file_size)}") + + if recording.participants: + lines.append(f"- **{labels.get('participants', 'Participants')}:** {recording.participants}") + + if recording.tags: + tag_names = [tag.name for tag in recording.tags] + lines.append(f"- **{labels.get('tags', 'Tags')}:** {', '.join(tag_names)}") + + if recording.transcription_duration_seconds: + lines.append(f"- **{labels.get('transcriptionTime', 'Transcription Time')}:** {format_duration(recording.transcription_duration_seconds)}") + + if recording.summarization_duration_seconds: + lines.append(f"- **{labels.get('summarizationTime', 'Summarization Time')}:** {format_duration(recording.summarization_duration_seconds)}") + + lines.append("") + + # Notes section (if available) + if recording.notes: + lines.append(f"## {labels.get('notes', 'Notes')}") + lines.append("") + lines.append(recording.notes) + lines.append("") + + # Summary section + if include_summary and recording.summary: + lines.append(f"## {labels.get('summary', 'Summary')}") + lines.append("") + lines.append(recording.summary) + lines.append("") + + # Transcription section + if include_transcription and recording.transcription: + lines.append(f"## {labels.get('transcription', 'Transcription')}") + lines.append("") + # Format transcription using user's template + formatted_transcription = format_transcription_with_template(recording.transcription, user) + lines.append(formatted_transcription) + lines.append("") + + # Footer + lines.append("---") + lines.append("") + footer = labels.get('footer', 'Generated with [Speakr](https://github.com/learnedmachine/speakr)') + lines.append(f"*{footer}*") + lines.append("") + + return "\n".join(lines) + + +def export_recording(recording_id): + """ + Export a recording to markdown file. + + Args: + recording_id: ID of the recording to export + + Returns: + Path to the exported file, or None if export failed/disabled + """ + if not ENABLE_AUTO_EXPORT: + return None + + # Check if we should export anything + if not AUTO_EXPORT_TRANSCRIPTION and not AUTO_EXPORT_SUMMARY: + logger.warning("Auto-export is enabled but both transcription and summary export are disabled") + return None + + # Import here to avoid circular imports + from src.app import app, db + from src.models import Recording, User + + with app.app_context(): + try: + recording = db.session.get(Recording, recording_id) + if not recording: + logger.error(f"Recording {recording_id} not found for export") + return None + + # Get the owner + user = db.session.get(User, recording.user_id) + if not user: + logger.error(f"User not found for recording {recording_id}") + return None + + # Check if we have content to export + has_transcription = bool(recording.transcription) and AUTO_EXPORT_TRANSCRIPTION + has_summary = bool(recording.summary) and AUTO_EXPORT_SUMMARY + + if not has_transcription and not has_summary: + logger.debug(f"Recording {recording_id} has no content to export") + return None + + # Get export directory for user + export_dir = get_export_directory(user) + + # Generate filename and path + filename = generate_safe_filename(recording) + filepath = export_dir / f"{filename}.md" + + # Generate content + content = generate_markdown_content( + recording, + user, + include_transcription=AUTO_EXPORT_TRANSCRIPTION, + include_summary=AUTO_EXPORT_SUMMARY + ) + + # Write to file (overwrites if exists) + filepath.write_text(content, encoding='utf-8') + + logger.info(f"Exported recording {recording_id} to {filepath}") + return str(filepath) + + except Exception as e: + logger.error(f"Failed to export recording {recording_id}: {e}") + return None + + +def initialize_export_directory(): + """Initialize the export directory on startup.""" + if not ENABLE_AUTO_EXPORT: + return + + try: + export_dir = Path(AUTO_EXPORT_DIR) + export_dir.mkdir(parents=True, exist_ok=True) + logger.info(f"Auto-export enabled, directory: {AUTO_EXPORT_DIR}") + + if AUTO_EXPORT_TRANSCRIPTION and AUTO_EXPORT_SUMMARY: + logger.info("Exporting: transcription and summary") + elif AUTO_EXPORT_TRANSCRIPTION: + logger.info("Exporting: transcription only") + elif AUTO_EXPORT_SUMMARY: + logger.info("Exporting: summary only") + else: + logger.warning("Auto-export enabled but no content types selected") + + except Exception as e: + logger.error(f"Failed to initialize export directory: {e}") diff --git a/src/file_monitor.py b/src/file_monitor.py new file mode 100644 index 0000000..f7755fb --- /dev/null +++ b/src/file_monitor.py @@ -0,0 +1,509 @@ +#!/usr/bin/env python3 +""" +File Monitor for Automated Audio Processing +Monitors directories for new audio files and automatically processes them. +Supports multiple user modes: +1. Admin-only: Files go to admin user only +2. User-specific directories: Each user has their own folder (e.g., /auto-process/user123/) +3. Single default user: All files go to one specified user +""" + +import os +import time +import threading +import logging +from datetime import datetime +from pathlib import Path +import mimetypes +from werkzeug.utils import secure_filename +from src.utils.ffprobe import get_codec_info, get_creation_date, FFProbeError +from src.utils.ffmpeg_utils import FFmpegError, FFmpegNotFoundError +from src.utils.audio_conversion import convert_if_needed + +# Video retention - when enabled, video files keep their video stream for playback +VIDEO_RETENTION = os.environ.get('VIDEO_RETENTION', 'false').lower() == 'true' + +# Video passthrough - send original video files directly to ASR without extracting audio +VIDEO_PASSTHROUGH_ASR = os.environ.get('VIDEO_PASSTHROUGH_ASR', 'false').lower() == 'true' + +# Flask app components will be imported inside functions to avoid circular imports + +class FileMonitor: + def __init__(self, base_watch_directory, check_interval=30, mode='admin_only'): + """ + Initialize the file monitor. + + Args: + base_watch_directory (str): Base directory to monitor for new files + check_interval (int): How often to check for new files (seconds) + mode (str): Processing mode - 'admin_only', 'user_directories', or 'single_user' + """ + self.base_watch_directory = Path(base_watch_directory) + self.check_interval = check_interval + self.mode = mode + self.running = False + self.thread = None + + # Ensure base directory exists + self.base_watch_directory.mkdir(parents=True, exist_ok=True) + + # Setup logging + self.logger = logging.getLogger('file_monitor') + self.logger.setLevel(logging.INFO) + + # Supported audio file extensions + # We'll use ffprobe to detect audio files instead of extensions + # Keep a basic list for initial filtering to avoid probing every file + self.potential_audio_extensions = { + '.wav', '.mp3', '.flac', '.amr', '.3gp', '.3gpp', + '.m4a', '.aac', '.ogg', '.wma', '.webm', '.mp4', '.mov', + '.opus', '.caf', '.aiff', '.ts', '.mts', '.mkv', '.avi', + '.m4v', '.wmv', '.flv', '.mpeg', '.mpg', '.ogv', '.vob', '.asf' + } + + # Cache for admin user and valid users + self._admin_user_id = None + self._valid_users = {} # Maps user_id to username + self._username_to_id = {} # Maps username to user_id + self._last_user_cache_update = 0 + + def start(self): + """Start the file monitoring in a background thread.""" + if self.running: + self.logger.warning("File monitor is already running") + return + + self.running = True + self.thread = threading.Thread(target=self._monitor_loop, daemon=True) + self.thread.start() + self.logger.info(f"File monitor started in '{self.mode}' mode, watching: {self.base_watch_directory}") + + def stop(self): + """Stop the file monitoring.""" + self.running = False + if self.thread: + self.thread.join(timeout=5) + self.logger.info("File monitor stopped") + + def _update_user_cache(self): + """Update the cache of valid users and admin user.""" + current_time = time.time() + # Update cache every 5 minutes + if current_time - self._last_user_cache_update < 300: + return + + # Import Flask components inside function to avoid circular imports + from src.app import app, db, User + + with app.app_context(): + try: + # Find admin user + admin_user = User.query.filter_by(is_admin=True).first() + self._admin_user_id = admin_user.id if admin_user else None + + # Cache all valid users + users = User.query.all() + self._valid_users = {user.id: user.username for user in users} + self._username_to_id = {user.username: user.id for user in users} + + self._last_user_cache_update = current_time + self.logger.debug(f"Updated user cache: {len(self._valid_users)} users, admin: {self._admin_user_id}") + + except Exception as e: + self.logger.error(f"Error updating user cache: {e}") + + def _monitor_loop(self): + """Main monitoring loop.""" + while self.running: + try: + self._update_user_cache() + + if self.mode == 'admin_only': + self._scan_admin_directory() + elif self.mode == 'user_directories': + self._scan_user_directories() + elif self.mode == 'single_user': + self._scan_single_user_directory() + + except Exception as e: + self.logger.error(f"Error during directory scan: {e}", exc_info=True) + + # Wait for next check + time.sleep(self.check_interval) + + def _scan_admin_directory(self): + """Scan the main directory for files to process as admin user.""" + if not self._admin_user_id: + self.logger.warning("No admin user found, skipping admin directory scan") + return + + self._scan_directory_for_user(self.base_watch_directory, self._admin_user_id) + + def _scan_user_directories(self): + """Scan user-specific subdirectories.""" + if not self.base_watch_directory.exists(): + return + + # Look for user directories (e.g., user123, user456) + for item in self.base_watch_directory.iterdir(): + if not item.is_dir(): + continue + + # Extract user ID from directory name + user_id = self._extract_user_id_from_dirname(item.name) + if user_id and user_id in self._valid_users: + self._scan_directory_for_user(item, user_id) + elif item.name.startswith('user'): + self.logger.warning(f"Found user directory '{item.name}' but user ID {user_id} is not valid") + + def _scan_single_user_directory(self): + """Scan directory for a single configured user.""" + default_username = os.environ.get('AUTO_PROCESS_DEFAULT_USERNAME') + if not default_username: + self.logger.warning("AUTO_PROCESS_DEFAULT_USERNAME not configured for single_user mode") + return + + user_id = self._username_to_id.get(default_username) + if user_id: + self._scan_directory_for_user(self.base_watch_directory, user_id) + else: + self.logger.warning(f"Configured default username '{default_username}' is not valid") + + def _scan_directory_for_user(self, directory, user_id): + """Scan a specific directory for files to process for a specific user.""" + if not directory.exists(): + return + + for file_path in directory.iterdir(): + if not file_path.is_file(): + continue + + # Skip hidden files, processing files, or non-supported files + if file_path.name.startswith('.') or file_path.suffix == '.processing': + continue + + if file_path.suffix.lower() not in self.potential_audio_extensions: + continue + + # Check if file is still being written (size stability check) + stability_time = int(os.environ.get('AUTO_PROCESS_STABILITY_TIME', '5')) + try: + if not self._is_file_stable(file_path, stability_time): + continue + except FileNotFoundError: + # File might have been picked up by another worker after iterdir() + continue + + self.logger.info(f"Found potential audio file for user {user_id}: {file_path}") + + # --- Atomic Lock via Rename --- + processing_path = file_path.with_suffix(file_path.suffix + '.processing') + + try: + file_path.rename(processing_path) + self.logger.info(f"Acquired lock for {file_path}, renamed to {processing_path}") + except FileNotFoundError: + self.logger.debug(f"Could not acquire lock for {file_path}, already processed by another worker.") + continue + except Exception as e: + self.logger.error(f"Error acquiring lock for {file_path}: {e}") + continue + + # --- Process the locked file --- + try: + self._process_file(processing_path, user_id) + except Exception as e: + self.logger.error(f"Error processing file {processing_path}: {e}", exc_info=True) + # If processing fails, unlock the file by renaming it back + try: + original_path = processing_path.with_suffix(processing_path.suffix.replace('.processing', '')) + processing_path.rename(original_path) + self.logger.info(f"Unlocked file {processing_path} back to {original_path} after processing error.") + except Exception as rename_err: + self.logger.error(f"CRITICAL: Failed to unlock file {processing_path} after error: {rename_err}") + + def _extract_user_id_from_dirname(self, dirname): + """ + Extract user ID from directory name. + + Expected formats: user123, 123 + + Args: + dirname (str): Directory name + + Returns: + int or None: User ID if found, None otherwise + """ + import re + + # Pattern: user123 or just 123 + patterns = [ + r'^user(\d+)$', # user123 + r'^(\d+)$' # 123 + ] + + for pattern in patterns: + match = re.match(pattern, dirname, re.IGNORECASE) + if match: + try: + return int(match.group(1)) + except ValueError: + continue + + return None + + def _is_file_stable(self, file_path, stability_time=5): + """ + Check if a file is stable (not being written to). + + Args: + file_path (Path): Path to the file + stability_time (int): Time in seconds to wait for size stability + + Returns: + bool: True if file appears stable + """ + try: + initial_size = file_path.stat().st_size + initial_mtime = file_path.stat().st_mtime + + # Wait a bit and check again + time.sleep(stability_time) + + current_size = file_path.stat().st_size + current_mtime = file_path.stat().st_mtime + + # File is stable if size and modification time haven't changed + return initial_size == current_size and initial_mtime == current_mtime + + except (OSError, FileNotFoundError): + return False + + def _process_file(self, processing_path, user_id): + """ + Process a single locked audio file for a specific user. + + Args: + processing_path (Path): Path to the locked audio file (e.g., file.mp3.processing) + user_id (int): ID of the user to assign the recording to + """ + # Import Flask components inside function to avoid circular imports + from src.app import app, db, Recording, User, transcribe_audio_task + + with app.app_context(): + try: + # Verify user exists + user = db.session.get(User, user_id) + if not user: + self.logger.error(f"User ID {user_id} not found in database for file {processing_path}") + # We must raise an exception to trigger the unlock mechanism + raise ValueError(f"User ID {user_id} not found") + + # Derive original filename by removing .processing suffix + original_filename = processing_path.name.replace('.processing', '') + safe_filename = secure_filename(original_filename) + timestamp = datetime.now().strftime('%Y%m%d%H%M%S') + new_filename = f"auto_{timestamp}_{safe_filename}" + + uploads_dir = Path(app.config['UPLOAD_FOLDER']) + uploads_dir.mkdir(parents=True, exist_ok=True) + destination_path = uploads_dir / new_filename + + # Copy locked file to uploads directory + import shutil + shutil.copy(str(processing_path), str(destination_path)) + self.logger.info(f"Copied {processing_path} to {destination_path}") + + # Delete the locked file from watch directory after successful copy + try: + processing_path.unlink() + self.logger.info(f"Deleted locked file: {processing_path}") + except FileNotFoundError: + # This should not happen if the lock is held, but good to log + self.logger.warning(f"Locked file {processing_path} was already deleted.") + + # Compute file hash on the ORIGINAL file before any conversion/compression. + # Lossy re-encoding produces different bytes each run, so hashing after + # conversion would miss duplicates. + file_hash = None + try: + from src.utils.file_hash import compute_file_sha256 + file_hash = compute_file_sha256(str(destination_path)) + except Exception as e: + self.logger.warning(f"Could not compute file hash: {e}") + + # Probe once to get codec info, then pass through pipeline to avoid redundant calls + codec_info = None + try: + codec_info = get_codec_info(str(destination_path), timeout=10) + self.logger.info(f"Detected codec for {original_filename}: audio_codec={codec_info.get('audio_codec')}, has_video={codec_info.get('has_video', False)}") + except FFProbeError as e: + self.logger.warning(f"Failed to probe {original_filename}: {e}. Will attempt conversion.") + + # Get connector specs for codec restrictions + connector_specs = None + try: + from src.services.transcription import get_registry + registry = get_registry() + connector = registry.get_active_connector() + if connector: + connector_specs = connector.specifications + except Exception as e: + self.logger.warning(f"Could not get connector specs: {e}") + + # Check if this is a video file (for video retention logic) + has_video = codec_info.get('has_video', False) if codec_info else False + + # Video passthrough or retention: skip conversion for videos + if (VIDEO_PASSTHROUGH_ASR or VIDEO_RETENTION) and has_video: + self.logger.info(f"Video {'passthrough' if VIDEO_PASSTHROUGH_ASR else 'retention'}: keeping original video, skipping conversion") + final_path = destination_path + else: + # Convert/compress file if necessary - convert_if_needed handles ALL conversion needs + try: + result = convert_if_needed( + str(destination_path), + original_filename=original_filename, + codec_info=codec_info, + needs_chunking=False, + is_asr_endpoint=False, + delete_original=True, # Clean up original after conversion + connector_specs=connector_specs # Pass connector specs for codec restrictions + ) + final_path = Path(result.output_path) + + # Log what happened + if result.was_converted: + self.logger.info(f"File converted: {result.original_codec} -> {result.final_codec}") + if result.was_compressed: + self.logger.info(f"File compressed: {result.size_reduction_percent:.1f}% size reduction") + + except FFmpegNotFoundError as e: + self.logger.error(f"FFmpeg not found: {e}") + raise + except FFmpegError as e: + self.logger.error(f"FFmpeg conversion failed: {e}") + raise + + # (file_hash already computed above, before conversion) + + # Get file size and MIME type + file_size = final_path.stat().st_size + mime_type, _ = mimetypes.guess_type(str(final_path)) + + # Create database record + now = datetime.utcnow() + + # Try to extract creation date from file metadata, fall back to current time + meeting_date = get_creation_date(str(final_path)) + if meeting_date: + self.logger.info(f"Using file metadata creation date: {meeting_date}") + else: + meeting_date = now + self.logger.debug("No metadata creation date found, using current time") + + # Check for duplicate + if file_hash: + existing = Recording.query.filter_by(user_id=user_id, file_hash=file_hash).first() + if existing: + self.logger.warning( + f"Duplicate file detected for user {user_id}: " + f"hash={file_hash[:12]}... matches recording {existing.id} " + f"({existing.title}). Processing anyway." + ) + + recording = Recording( + audio_path=str(final_path), + original_filename=original_filename, + title=f"Auto-processed - {original_filename}", + file_size=file_size, + status='PENDING', + meeting_date=meeting_date, + user_id=user_id, + mime_type=mime_type, + is_inbox=True, # Auto-processed files go to inbox + processing_source='auto_process', # Track that this was auto-processed + file_hash=file_hash + ) + + db.session.add(recording) + db.session.commit() + + self.logger.info(f"Created recording record with ID: {recording.id} for user: {user.username}") + + # Queue for background processing + from src.services.job_queue import job_queue + job_queue.enqueue( + user_id=user.id, + recording_id=recording.id, + job_type='transcribe', + params={}, + is_new_upload=True + ) + + self.logger.info(f"Queued background processing for recording ID: {recording.id}") + self.logger.info(f"Successfully processed and moved file from: {processing_path}") + + except Exception as e: + self.logger.error(f"Error processing file {processing_path} for user {user_id}: {e}", exc_info=True) + # Re-raise the exception to be caught by the calling method, which will handle unlocking. + raise + + + + +# Global file monitor instance +file_monitor = None + +def start_file_monitor(): + """Start the file monitor with configuration from environment variables.""" + global file_monitor + + if file_monitor and file_monitor.running: + return + + # Import Flask app inside function to avoid circular imports + from src.app import app + + # Get configuration from environment + watch_dir = os.environ.get('AUTO_PROCESS_WATCH_DIR', '/data/auto-process') + check_interval = int(os.environ.get('AUTO_PROCESS_CHECK_INTERVAL', '30')) + mode = os.environ.get('AUTO_PROCESS_MODE', 'admin_only') # admin_only, user_directories, single_user + + # Validate mode + valid_modes = ['admin_only', 'user_directories', 'single_user'] + if mode not in valid_modes: + app.logger.error(f"Invalid AUTO_PROCESS_MODE: {mode}. Must be one of: {valid_modes}") + return + + # Only start if auto-processing is enabled + if os.environ.get('ENABLE_AUTO_PROCESSING', 'false').lower() == 'true': + file_monitor = FileMonitor( + base_watch_directory=watch_dir, + check_interval=check_interval, + mode=mode + ) + file_monitor.start() + app.logger.info(f"Automated file processing started in '{mode}' mode") + else: + app.logger.info("Automated file processing is disabled") + +def stop_file_monitor(): + """Stop the file monitor.""" + global file_monitor + if file_monitor: + file_monitor.stop() + file_monitor = None + +def get_file_monitor_status(): + """Get the current status of the file monitor.""" + global file_monitor + if file_monitor and file_monitor.running: + return { + 'running': True, + 'mode': file_monitor.mode, + 'watch_directory': str(file_monitor.base_watch_directory), + 'check_interval': file_monitor.check_interval + } + else: + return {'running': False} diff --git a/src/init_db.py b/src/init_db.py new file mode 100644 index 0000000..857224a --- /dev/null +++ b/src/init_db.py @@ -0,0 +1,748 @@ +""" +Database initialization and migration logic. + +This module handles: +- Database schema creation +- Column migrations (adding missing columns to existing tables) +- Default system settings initialization +- Existing recordings migration for inquire mode +""" + +import os +import fcntl +import tempfile +from sqlalchemy import text, inspect + +from src.database import db +from src.models import Recording, TranscriptChunk, SystemSetting +from src.services.embeddings import process_recording_chunks +from src.utils import add_column_if_not_exists, migrate_column_type, create_index_if_not_exists + +# Configuration +ENABLE_INQUIRE_MODE = os.environ.get('ENABLE_INQUIRE_MODE', 'false').lower() == 'true' + + +def initialize_database(app): + """ + Initialize database schema and run migrations. + + This function should be called within an app context. + """ + db.create_all() + + # Check and add new columns if they don't exist + engine = db.engine + + # Enable WAL mode for SQLite (better concurrent write performance) + if engine.name == 'sqlite': + try: + with engine.connect() as conn: + conn.execute(text('PRAGMA journal_mode=WAL')) + conn.commit() + app.logger.info("SQLite WAL mode enabled for better concurrency") + except Exception as e: + app.logger.warning(f"Could not enable WAL mode: {e}") + + try: + # Add is_inbox column with default value of 1 (True) + if add_column_if_not_exists(engine, 'recording', 'is_inbox', 'BOOLEAN DEFAULT 1'): + app.logger.info("Added is_inbox column to recording table") + + # Add is_highlighted column with default value of 0 (False) + if add_column_if_not_exists(engine, 'recording', 'is_highlighted', 'BOOLEAN DEFAULT 0'): + app.logger.info("Added is_highlighted column to recording table") + + # Add language preference columns to User table + if add_column_if_not_exists(engine, 'user', 'transcription_language', 'VARCHAR(10)'): + app.logger.info("Added transcription_language column to user table") + + # Add extract_events column to User table + if add_column_if_not_exists(engine, 'user', 'extract_events', 'BOOLEAN DEFAULT 0'): + app.logger.info("Added extract_events column to user table") + if add_column_if_not_exists(engine, 'user', 'output_language', 'VARCHAR(50)'): + app.logger.info("Added output_language column to user table") + if add_column_if_not_exists(engine, 'user', 'summary_prompt', 'TEXT'): + app.logger.info("Added summary_prompt column to user table") + if add_column_if_not_exists(engine, 'user', 'name', 'VARCHAR(100)'): + app.logger.info("Added name column to user table") + if add_column_if_not_exists(engine, 'user', 'job_title', 'VARCHAR(100)'): + app.logger.info("Added job_title column to user table") + if add_column_if_not_exists(engine, 'user', 'company', 'VARCHAR(100)'): + app.logger.info("Added company column to user table") + if add_column_if_not_exists(engine, 'user', 'diarize', 'BOOLEAN'): + app.logger.info("Added diarize column to user table") + if add_column_if_not_exists(engine, 'user', 'ui_language', "VARCHAR(10) DEFAULT 'en'"): + app.logger.info("Added ui_language column to user table") + if add_column_if_not_exists(engine, 'user', 'sso_provider', 'VARCHAR(100)'): + app.logger.info("Added sso_provider column to user table") + if add_column_if_not_exists(engine, 'user', 'sso_subject', 'VARCHAR(255)'): + app.logger.info("Added sso_subject column to user table") + + # Make password column nullable for SSO users + try: + inspector = inspect(engine) + if 'user' in inspector.get_table_names(): + if engine.name == 'sqlite': + # SQLite doesn't support ALTER COLUMN, so we need to check and recreate + with engine.connect() as conn: + result = conn.execute(text("SELECT sql FROM sqlite_master WHERE type='table' AND name='user'")) + schema = result.scalar() + + if schema and 'password VARCHAR(60) NOT NULL' in schema: + app.logger.info("Migrating user table to make password nullable for SSO support...") + + conn.execute(text(""" + CREATE TABLE user_new ( + id INTEGER NOT NULL, + username VARCHAR(20) NOT NULL, + email VARCHAR(120) NOT NULL, + password VARCHAR(60), + is_admin BOOLEAN, + can_share_publicly BOOLEAN, + transcription_language VARCHAR(10), + output_language VARCHAR(50), + ui_language VARCHAR(10), + summary_prompt TEXT, + extract_events BOOLEAN, + name VARCHAR(100), + job_title VARCHAR(100), + company VARCHAR(100), + diarize BOOLEAN, + sso_provider VARCHAR(100), + sso_subject VARCHAR(255), + PRIMARY KEY (id), + UNIQUE (username), + UNIQUE (email) + ) + """)) + conn.execute(text(""" + INSERT INTO user_new + SELECT id, username, email, password, is_admin, can_share_publicly, + transcription_language, output_language, ui_language, + summary_prompt, extract_events, name, job_title, company, + diarize, sso_provider, sso_subject + FROM user + """)) + conn.execute(text("DROP TABLE user")) + conn.execute(text("ALTER TABLE user_new RENAME TO user")) + conn.execute(text('CREATE UNIQUE INDEX IF NOT EXISTS ix_user_sso_subject ON "user" (sso_subject)')) + conn.commit() + app.logger.info("Successfully made password column nullable for SSO support") + else: + app.logger.info("Password column is already nullable, skipping migration") + + elif engine.name == 'postgresql': + # PostgreSQL supports ALTER COLUMN directly + with engine.connect() as conn: + result = conn.execute(text(""" + SELECT is_nullable FROM information_schema.columns + WHERE table_name = 'user' AND column_name = 'password' + """)) + row = result.fetchone() + if row and row[0] == 'NO': + conn.execute(text('ALTER TABLE "user" ALTER COLUMN password DROP NOT NULL')) + conn.commit() + app.logger.info("Made password column nullable for SSO support (PostgreSQL)") + else: + app.logger.info("Password column is already nullable, skipping migration") + except Exception as e: + app.logger.warning(f"Could not migrate password column to nullable (may cause issues with SSO): {e}") + + if add_column_if_not_exists(engine, 'recording', 'mime_type', 'VARCHAR(100)'): + app.logger.info("Added mime_type column to recording table") + if add_column_if_not_exists(engine, 'recording', 'completed_at', 'DATETIME'): + app.logger.info("Added completed_at column to recording table") + if add_column_if_not_exists(engine, 'recording', 'processing_time_seconds', 'INTEGER'): + app.logger.info("Added processing_time_seconds column to recording table") + if add_column_if_not_exists(engine, 'recording', 'transcription_duration_seconds', 'INTEGER'): + app.logger.info("Added transcription_duration_seconds column to recording table") + if add_column_if_not_exists(engine, 'recording', 'summarization_duration_seconds', 'INTEGER'): + app.logger.info("Added summarization_duration_seconds column to recording table") + if add_column_if_not_exists(engine, 'recording', 'processing_source', "VARCHAR(50) DEFAULT 'upload'"): + app.logger.info("Added processing_source column to recording table") + if add_column_if_not_exists(engine, 'recording', 'error_message', 'TEXT'): + app.logger.info("Added error_message column to recording table") + + # Add columns to recording_tags for order tracking + if add_column_if_not_exists(engine, 'recording_tags', 'added_at', 'DATETIME'): + app.logger.info("Added added_at column to recording_tags table") + if add_column_if_not_exists(engine, 'recording_tags', 'order', '"order" INTEGER DEFAULT 0'): + app.logger.info("Added order column to recording_tags table") + + # Add auto-deletion and retention columns + if add_column_if_not_exists(engine, 'recording', 'audio_deleted_at', 'DATETIME'): + app.logger.info("Added audio_deleted_at column to recording table") + if add_column_if_not_exists(engine, 'recording', 'deletion_exempt', 'BOOLEAN DEFAULT 0'): + app.logger.info("Added deletion_exempt column to recording table") + if add_column_if_not_exists(engine, 'tag', 'protect_from_deletion', 'BOOLEAN DEFAULT 0'): + app.logger.info("Added protect_from_deletion column to tag table") + + # Add speaker embeddings column for storing voice embeddings from diarization + if add_column_if_not_exists(engine, 'recording', 'speaker_embeddings', 'JSON'): + app.logger.info("Added speaker_embeddings column to recording table") + + # Add speaker voice profile embedding fields + if add_column_if_not_exists(engine, 'speaker', 'average_embedding', 'BLOB'): + app.logger.info("Added average_embedding column to speaker table") + if add_column_if_not_exists(engine, 'speaker', 'embeddings_history', 'JSON'): + app.logger.info("Added embeddings_history column to speaker table") + if add_column_if_not_exists(engine, 'speaker', 'embedding_count', 'INTEGER DEFAULT 0'): + app.logger.info("Added embedding_count column to speaker table") + if add_column_if_not_exists(engine, 'speaker', 'confidence_score', 'REAL'): + app.logger.info("Added confidence_score column to speaker table") + + # Add is_new_upload column to processing_job table for tracking upload vs reprocessing jobs + if add_column_if_not_exists(engine, 'processing_job', 'is_new_upload', 'BOOLEAN DEFAULT 0'): + app.logger.info("Added is_new_upload column to processing_job table") + + if add_column_if_not_exists(engine, 'tag', 'group_id', 'INTEGER'): + app.logger.info("Added group_id column to tag table") + + if add_column_if_not_exists(engine, 'tag', 'retention_days', 'INTEGER'): + app.logger.info("Added retention_days column to tag table") + + # Migrate existing protected tags to use retention_days = -1 for consistency + # This standardizes the protection mechanism: retention_days = -1 means protected/infinite retention + try: + with engine.connect() as conn: + # Find tags with protect_from_deletion=True but retention_days != -1 + result = conn.execute(text(""" + SELECT COUNT(*) FROM tag + WHERE protect_from_deletion = TRUE + AND (retention_days IS NULL OR retention_days != -1) + """)) + count = result.scalar() + + if count and count > 0: + # Migrate these tags to use retention_days = -1 + conn.execute(text(""" + UPDATE tag + SET retention_days = -1 + WHERE protect_from_deletion = TRUE + AND (retention_days IS NULL OR retention_days != -1) + """)) + conn.commit() + app.logger.info(f"Migrated {count} protected tags to use retention_days=-1 (standardized protection format)") + except Exception as e: + app.logger.warning(f"Could not migrate protected tags to retention_days=-1: {e}") + + if add_column_if_not_exists(engine, 'tag', 'auto_share_on_apply', 'BOOLEAN DEFAULT 1'): + app.logger.info("Added auto_share_on_apply column to tag table") + + if add_column_if_not_exists(engine, 'tag', 'share_with_group_lead', 'BOOLEAN DEFAULT 1'): + app.logger.info("Added share_with_group_lead column to tag table") + + if add_column_if_not_exists(engine, 'user', 'can_share_publicly', 'BOOLEAN DEFAULT 1'): + app.logger.info("Added can_share_publicly column to user table") + + # Token budget for rate limiting + if add_column_if_not_exists(engine, 'user', 'monthly_token_budget', 'INTEGER'): + app.logger.info("Added monthly_token_budget column to user table") + + # Transcription budget for rate limiting (in seconds) + if add_column_if_not_exists(engine, 'user', 'monthly_transcription_budget', 'INTEGER'): + app.logger.info("Added monthly_transcription_budget column to user table") + + # Naming templates feature + if add_column_if_not_exists(engine, 'user', 'default_naming_template_id', 'INTEGER'): + app.logger.info("Added default_naming_template_id column to user table") + + # Email verification fields + email_verified_added = add_column_if_not_exists(engine, 'user', 'email_verified', 'BOOLEAN DEFAULT 0') + if email_verified_added: + app.logger.info("Added email_verified column to user table") + # Set all existing users to email_verified=True (grandfathered) + try: + with engine.connect() as conn: + conn.execute(text('UPDATE "user" SET email_verified = TRUE WHERE email_verified = FALSE OR email_verified IS NULL')) + conn.commit() + app.logger.info("Set email_verified=True for all existing users (grandfathered)") + except Exception as e: + app.logger.warning(f"Could not update existing users email_verified status: {e}") + + if add_column_if_not_exists(engine, 'user', 'email_verification_token', 'VARCHAR(200)'): + app.logger.info("Added email_verification_token column to user table") + if add_column_if_not_exists(engine, 'user', 'email_verification_sent_at', 'DATETIME'): + app.logger.info("Added email_verification_sent_at column to user table") + if add_column_if_not_exists(engine, 'user', 'password_reset_token', 'VARCHAR(200)'): + app.logger.info("Added password_reset_token column to user table") + if add_column_if_not_exists(engine, 'user', 'password_reset_sent_at', 'DATETIME'): + app.logger.info("Added password_reset_sent_at column to user table") + + # Auto speaker labelling settings + if add_column_if_not_exists(engine, 'user', 'auto_speaker_labelling', 'BOOLEAN DEFAULT 0'): + app.logger.info("Added auto_speaker_labelling column to user table") + if add_column_if_not_exists(engine, 'user', 'auto_speaker_labelling_threshold', "VARCHAR(10) DEFAULT 'medium'"): + app.logger.info("Added auto_speaker_labelling_threshold column to user table") + + # Auto summarization setting (per-user, default enabled) + if add_column_if_not_exists(engine, 'user', 'auto_summarization', 'BOOLEAN DEFAULT 1'): + app.logger.info("Added auto_summarization column to user table") + + # Transcription hints (hotwords and initial prompt for improving ASR accuracy) + if add_column_if_not_exists(engine, 'user', 'transcription_hotwords', 'TEXT'): + app.logger.info("Added transcription_hotwords column to user table") + if add_column_if_not_exists(engine, 'user', 'transcription_initial_prompt', 'TEXT'): + app.logger.info("Added transcription_initial_prompt column to user table") + if add_column_if_not_exists(engine, 'tag', 'default_hotwords', 'TEXT'): + app.logger.info("Added default_hotwords column to tag table") + if add_column_if_not_exists(engine, 'tag', 'default_initial_prompt', 'TEXT'): + app.logger.info("Added default_initial_prompt column to tag table") + if add_column_if_not_exists(engine, 'folder', 'default_hotwords', 'TEXT'): + app.logger.info("Added default_hotwords column to folder table") + if add_column_if_not_exists(engine, 'folder', 'default_initial_prompt', 'TEXT'): + app.logger.info("Added default_initial_prompt column to folder table") + + # Create indexes for token lookups (for faster token verification) + try: + if create_index_if_not_exists(engine, 'ix_user_email_verification_token', 'user', 'email_verification_token'): + app.logger.info("Created index ix_user_email_verification_token on user.email_verification_token") + if create_index_if_not_exists(engine, 'ix_user_password_reset_token', 'user', 'password_reset_token'): + app.logger.info("Created index ix_user_password_reset_token on user.password_reset_token") + except Exception as e: + app.logger.warning(f"Could not create token indexes: {e}") + if add_column_if_not_exists(engine, 'tag', 'naming_template_id', 'INTEGER'): + app.logger.info("Added naming_template_id column to tag table") + + # Export template assignments for tags and folders + if add_column_if_not_exists(engine, 'tag', 'export_template_id', 'INTEGER'): + app.logger.info("Added export_template_id column to tag table") + if add_column_if_not_exists(engine, 'folder', 'export_template_id', 'INTEGER'): + app.logger.info("Added export_template_id column to folder table") + + # Add source tracking columns to internal_share table + if add_column_if_not_exists(engine, 'internal_share', 'source_type', "VARCHAR(20) DEFAULT 'manual'"): + app.logger.info("Added source_type column to internal_share table") + + if add_column_if_not_exists(engine, 'internal_share', 'source_tag_id', 'INTEGER'): + app.logger.info("Added source_tag_id column to internal_share table") + + # Migrate existing shares: infer source based on group tag presence + try: + with engine.connect() as conn: + # For each existing share, check if it was likely created by a group tag + # by looking for group tags on the recording where the shared user is a group member + result = conn.execute(text(''' + UPDATE internal_share + SET source_type = 'group_tag', + source_tag_id = ( + SELECT t.id FROM tag t + INNER JOIN recording_tags rt ON rt.tag_id = t.id + INNER JOIN group_membership gm ON gm.group_id = t.group_id + WHERE rt.recording_id = internal_share.recording_id + AND gm.user_id = internal_share.shared_with_user_id + AND t.group_id IS NOT NULL + AND (t.auto_share_on_apply = TRUE OR t.share_with_group_lead = TRUE) + LIMIT 1 + ) + WHERE source_type = 'manual' + AND EXISTS ( + SELECT 1 FROM tag t + INNER JOIN recording_tags rt ON rt.tag_id = t.id + INNER JOIN group_membership gm ON gm.group_id = t.group_id + WHERE rt.recording_id = internal_share.recording_id + AND gm.user_id = internal_share.shared_with_user_id + AND t.group_id IS NOT NULL + AND (t.auto_share_on_apply = TRUE OR t.share_with_group_lead = TRUE) + ) + ''')) + conn.commit() + app.logger.info("Inferred source tracking for existing shares based on group tag presence") + except Exception as e: + app.logger.warning(f"Could not infer source tracking for existing shares: {e}") + + # Update existing records to have proper order values (approximate by tag_id) + try: + with engine.connect() as conn: + # Get existing associations without order values and assign them + existing_associations = conn.execute(text(''' + SELECT recording_id, tag_id, + ROW_NUMBER() OVER (PARTITION BY recording_id ORDER BY tag_id) as row_num + FROM recording_tags + WHERE "order" = 0 + ''')).fetchall() + + for assoc in existing_associations: + conn.execute(text(''' + UPDATE recording_tags + SET "order" = :order_num + WHERE recording_id = :rec_id AND tag_id = :tag_id + '''), {"order_num": assoc.row_num, "rec_id": assoc.recording_id, "tag_id": assoc.tag_id}) + + conn.commit() + app.logger.info(f"Updated order values for {len(existing_associations)} existing tag associations") + except Exception as e: + app.logger.warning(f"Could not update existing tag order values: {e}") + + # Add per-user status columns to shared_recording_state table + if add_column_if_not_exists(engine, 'shared_recording_state', 'is_inbox', 'BOOLEAN DEFAULT 1'): + app.logger.info("Added is_inbox column to shared_recording_state table") + + # Handle is_starred -> is_highlighted migration + inspector = inspect(engine) + if 'shared_recording_state' in inspector.get_table_names(): + columns = [col['name'] for col in inspector.get_columns('shared_recording_state')] + has_is_starred = 'is_starred' in columns + has_is_highlighted = 'is_highlighted' in columns + + if has_is_starred and not has_is_highlighted: + # Rename is_starred to is_highlighted by copying data + try: + # Add is_highlighted column using utility (handles PostgreSQL boolean defaults) + add_column_if_not_exists(engine, 'shared_recording_state', 'is_highlighted', 'BOOLEAN DEFAULT 0') + # Copy data from is_starred to is_highlighted + with engine.connect() as conn: + conn.execute(text('UPDATE shared_recording_state SET is_highlighted = is_starred')) + conn.commit() + app.logger.info("Migrated is_starred to is_highlighted in shared_recording_state table") + # Note: We keep is_starred for now to avoid breaking existing code during transition + except Exception as e: + app.logger.warning(f"Could not migrate is_starred to is_highlighted: {e}") + elif not has_is_highlighted: + # Neither column exists, add is_highlighted + if add_column_if_not_exists(engine, 'shared_recording_state', 'is_highlighted', 'BOOLEAN DEFAULT 0'): + app.logger.info("Added is_highlighted column to shared_recording_state table") + + # Migrate meeting_date from DATE to DATETIME format + # This migration handles both: + # 1. Converting existing DATE columns to DATETIME (for fresh pulls) + # 2. Restoring NULL dates from created_at (for failed migrations) + try: + inspector = inspect(engine) + columns_info = {col['name']: col for col in inspector.get_columns('recording')} + + if 'meeting_date' in columns_info: + col_type = str(columns_info['meeting_date']['type']).upper() + + # Check if column needs migration from DATE to DATETIME + needs_migration = False + + # For SQLite: Both DATE and DATETIME are TEXT, check data format + if engine.name == 'sqlite': + with engine.connect() as conn: + # Check if we have date-only format (no time component) + result = conn.execute(text(""" + SELECT meeting_date FROM recording + WHERE meeting_date IS NOT NULL + AND meeting_date NOT LIKE '%:%' + LIMIT 1 + """)) + has_date_only = result.fetchone() is not None + needs_migration = has_date_only + + # For PostgreSQL/MySQL: Check actual column type + elif 'DATE' in col_type and 'DATETIME' not in col_type and 'TIMESTAMP' not in col_type: + needs_migration = True + + if needs_migration: + app.logger.info(f"Migrating meeting_date from DATE to DATETIME format (engine: {engine.name})") + + with engine.connect() as conn: + if engine.name == 'sqlite': + # SQLite: Add time component to date-only values + conn.execute(text(""" + UPDATE recording + SET meeting_date = datetime(date(meeting_date) || ' 12:00:00') + WHERE meeting_date IS NOT NULL + AND meeting_date NOT LIKE '%:%' + """)) + conn.commit() + app.logger.info("Migrated SQLite meeting_date to include time") + + elif engine.name == 'postgresql': + # PostgreSQL: Change column type + conn.execute(text(""" + ALTER TABLE recording + ALTER COLUMN meeting_date TYPE TIMESTAMP + USING (meeting_date + TIME '12:00:00') + """)) + conn.commit() + app.logger.info("Migrated PostgreSQL meeting_date to TIMESTAMP") + + elif engine.name == 'mysql': + # MySQL: Change column type + conn.execute(text(""" + ALTER TABLE recording + MODIFY COLUMN meeting_date DATETIME + """)) + # Add time component to existing date values + conn.execute(text(""" + UPDATE recording + SET meeting_date = TIMESTAMP(meeting_date, '12:00:00') + WHERE meeting_date IS NOT NULL + """)) + conn.commit() + app.logger.info("Migrated MySQL meeting_date to DATETIME") + else: + app.logger.info("meeting_date already in DATETIME format, skipping migration") + + # Safety net: Restore any NULL meeting_dates from created_at + with engine.connect() as conn: + result = conn.execute(text(""" + SELECT COUNT(*) FROM recording + WHERE meeting_date IS NULL AND created_at IS NOT NULL + """)) + null_count = result.scalar() + + if null_count and null_count > 0: + conn.execute(text(""" + UPDATE recording + SET meeting_date = created_at + WHERE meeting_date IS NULL AND created_at IS NOT NULL + """)) + conn.commit() + app.logger.info(f"Restored {null_count} NULL meeting dates from created_at") + + except Exception as e: + app.logger.warning(f"Error during meeting_date migration: {e}") + app.logger.warning("New recordings will work correctly, but existing dates may need manual migration") + + # Add index on TranscriptChunk.speaker_name for performance + # This improves speaker rename operations which update all chunks + try: + inspector = inspect(engine) + if 'transcript_chunk' in inspector.get_table_names(): + existing_indexes = [idx['name'] for idx in inspector.get_indexes('transcript_chunk')] + + # Create composite index on (user_id, speaker_name) if it doesn't exist + if 'idx_user_speaker_name' not in existing_indexes: + with engine.connect() as conn: + conn.execute(text( + 'CREATE INDEX IF NOT EXISTS idx_user_speaker_name ON transcript_chunk (user_id, speaker_name)' + )) + conn.commit() + app.logger.info("Created index idx_user_speaker_name on transcript_chunk (user_id, speaker_name) for speaker rename performance") + + # Create single-column index on speaker_name if it doesn't exist + if 'ix_transcript_chunk_speaker_name' not in existing_indexes: + with engine.connect() as conn: + conn.execute(text( + 'CREATE INDEX IF NOT EXISTS ix_transcript_chunk_speaker_name ON transcript_chunk (speaker_name)' + )) + conn.commit() + app.logger.info("Created index ix_transcript_chunk_speaker_name on transcript_chunk (speaker_name)") + except Exception as e: + app.logger.warning(f"Could not create speaker_name indexes: {e}") + + # Add unique index for SSO subject to prevent duplicate linking + try: + if create_index_if_not_exists(engine, 'ix_user_sso_subject', 'user', 'sso_subject', unique=True): + app.logger.info("Created unique index ix_user_sso_subject on user.sso_subject") + except Exception as e: + app.logger.warning(f"Could not create unique index on user.sso_subject: {e}") + + # Add file_hash column for duplicate detection + if add_column_if_not_exists(engine, 'recording', 'file_hash', 'VARCHAR(64)'): + app.logger.info("Added file_hash column to recording table") + try: + if create_index_if_not_exists(engine, 'ix_recording_user_file_hash', 'recording', 'user_id, file_hash'): + app.logger.info("Created index ix_recording_user_file_hash on recording (user_id, file_hash)") + except Exception as e: + app.logger.warning(f"Could not create index on recording (user_id, file_hash): {e}") + + # Add folder_id column to recording table for folders feature + if add_column_if_not_exists(engine, 'recording', 'folder_id', 'INTEGER'): + app.logger.info("Added folder_id column to recording table") + # Create index for folder_id + try: + if create_index_if_not_exists(engine, 'ix_recording_folder_id', 'recording', 'folder_id'): + app.logger.info("Created index ix_recording_folder_id on recording.folder_id") + except Exception as e: + app.logger.warning(f"Could not create index on recording.folder_id: {e}") + + # Add indexes for audit log tables (Loi 25 compliance) + try: + inspector = inspect(engine) + if 'access_log' in inspector.get_table_names(): + if create_index_if_not_exists(engine, 'ix_access_log_user_id', 'access_log', 'user_id'): + app.logger.info("Created index ix_access_log_user_id") + if create_index_if_not_exists(engine, 'ix_access_log_resource', 'access_log', 'resource_type, resource_id'): + app.logger.info("Created index ix_access_log_resource") + if 'auth_log' in inspector.get_table_names(): + if create_index_if_not_exists(engine, 'ix_auth_log_user_id', 'auth_log', 'user_id'): + app.logger.info("Created index ix_auth_log_user_id") + except Exception as e: + app.logger.warning(f"Could not create audit log indexes: {e}") + + # Initialize default system settings + if not SystemSetting.query.filter_by(key='transcript_length_limit').first(): + SystemSetting.set_setting( + key='transcript_length_limit', + value='50000', + description='Maximum number of characters to send from transcript to LLM for summarization and chat. Use -1 for no limit.', + setting_type='integer' + ) + app.logger.info("Initialized default transcript_length_limit setting") + + if not SystemSetting.query.filter_by(key='max_file_size_mb').first(): + SystemSetting.set_setting( + key='max_file_size_mb', + value='10000', + description='Maximum file size allowed for audio uploads in megabytes (MB).', + setting_type='integer' + ) + app.logger.info("Initialized default max_file_size_mb setting") + + if not SystemSetting.query.filter_by(key='asr_timeout_seconds').first(): + SystemSetting.set_setting( + key='asr_timeout_seconds', + value='1800', + description='Maximum time in seconds to wait for ASR transcription to complete. Default is 1800 seconds (30 minutes).', + setting_type='integer' + ) + app.logger.info("Initialized default asr_timeout_seconds setting") + + if not SystemSetting.query.filter_by(key='admin_default_summary_prompt').first(): + default_prompt = """Tu es un assistant expert en prise de notes. Analyse cette transcription et extrais toutes les informations importantes en français. + + ## 📝 RÉSUMÉ + Synthèse claire et concise de la conversation en 4-6 phrases. + + ## 🔑 POINTS CLÉS + • Les informations essentielles à retenir + • Les faits importants mentionnés + • Les opinions ou positions exprimées + + ## 📊 DONNÉES & CHIFFRES + • Montants, dates, délais, pourcentages + • Noms de personnes, entreprises, lieux + • Références techniques ou spécifiques + + ## 💬 CITATIONS MARQUANTES + > Phrases importantes ou révélatrices (entre guillemets) + + ## ⚠️ PROBLÈMES & PRÉOCCUPATIONS + • Difficultés ou obstacles mentionnés + • Risques identifiés + • Points de friction ou désaccords + + ## 💡 IDÉES & SUGGESTIONS + • Propositions faites durant la conversation + • Solutions envisagées + • Opportunités mentionnelles + + ## ✅ DÉCISIONS & PROCHAINES ÉTAPES + • Ce qui a été décidé ou convenu + • Actions à entreprendre + • Suivis nécessaires + + --- + Instructions : Sois exhaustif et n'omets aucun détail pertinent. Utilise un langage clair et professionnel. Adapte les sections selon le contenu — si une section ne s'applique pas, omets-la.""" + SystemSetting.set_setting( + key='admin_default_summary_prompt', + value=default_prompt, + description='Default summarization prompt used when users have not set their own prompt. This serves as the base prompt for all users.', + setting_type='string' + ) + app.logger.info("Initialized admin_default_summary_prompt setting") + + if not SystemSetting.query.filter_by(key='recording_disclaimer').first(): + SystemSetting.set_setting( + key='recording_disclaimer', + value='', + description='Legal disclaimer shown to users before recording starts. Supports Markdown formatting. Leave empty to disable.', + setting_type='string' + ) + app.logger.info("Initialized recording_disclaimer setting") + + if not SystemSetting.query.filter_by(key='upload_disclaimer').first(): + SystemSetting.set_setting( + key='upload_disclaimer', + value='', + description='Legal disclaimer shown before file uploads. Supports Markdown. Leave empty to disable.', + setting_type='string' + ) + app.logger.info("Initialized upload_disclaimer setting") + + if not SystemSetting.query.filter_by(key='custom_banner').first(): + SystemSetting.set_setting( + key='custom_banner', + value='', + description='Custom banner shown at the top of the page. Supports Markdown. Leave empty to disable.', + setting_type='string' + ) + app.logger.info("Initialized custom_banner setting") + + if not SystemSetting.query.filter_by(key='disable_auto_summarization').first(): + SystemSetting.set_setting( + key='disable_auto_summarization', + value='false', + description='Disable automatic summarization after transcription completes. When enabled, recordings will only be transcribed and users must manually trigger summarization.', + setting_type='boolean' + ) + app.logger.info("Initialized disable_auto_summarization setting") + + if not SystemSetting.query.filter_by(key='enable_folders').first(): + SystemSetting.set_setting( + key='enable_folders', + value='true', + description='Enable the Folders feature, allowing users to organize recordings into folders with custom prompts and ASR settings.', + setting_type='boolean' + ) + app.logger.info("Initialized enable_folders setting") + + # Process existing recordings for inquire mode (chunk and embed them) + # Only run if inquire mode is enabled + if ENABLE_INQUIRE_MODE: + # Use a file lock to prevent multiple workers from running this simultaneously + lock_file_path = os.path.join(tempfile.gettempdir(), 'inquire_migration.lock') + + try: + with open(lock_file_path, 'w') as lock_file: + # Try to acquire exclusive lock (non-blocking) + try: + fcntl.flock(lock_file.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB) + app.logger.info("Acquired migration lock, checking for existing recordings that need chunking for inquire mode...") + + completed_recordings = Recording.query.filter_by(status='COMPLETED').all() + recordings_needing_processing = [] + + for recording in completed_recordings: + if recording.transcription: # Has transcription + chunk_count = TranscriptChunk.query.filter_by(recording_id=recording.id).count() + if chunk_count == 0: # No chunks yet + recordings_needing_processing.append(recording) + + if recordings_needing_processing: + app.logger.info(f"Found {len(recordings_needing_processing)} recordings that need chunking for inquire mode") + app.logger.info("Processing first 10 recordings automatically. Use admin API or migration script for remaining recordings.") + + # Process first 10 recordings automatically to avoid long startup times + batch_size = min(10, len(recordings_needing_processing)) + processed = 0 + + for i in range(batch_size): + recording = recordings_needing_processing[i] + try: + success = process_recording_chunks(recording.id) + if success: + processed += 1 + app.logger.info(f"Processed chunks for recording: {recording.title} ({recording.id})") + except Exception as e: + app.logger.warning(f"Failed to process chunks for recording {recording.id}: {e}") + + remaining = len(recordings_needing_processing) - processed + if remaining > 0: + app.logger.info(f"Successfully processed {processed} recordings. {remaining} recordings remaining.") + app.logger.info("Use the admin migration API or run 'python migrate_existing_recordings.py' to process remaining recordings.") + else: + app.logger.info(f"Successfully processed all {processed} recordings for inquire mode.") + else: + app.logger.info("All existing recordings are already processed for inquire mode.") + + except BlockingIOError: + app.logger.info("Migration already running in another worker, skipping...") + + except Exception as e: + app.logger.warning(f"Error during existing recordings migration: {e}") + app.logger.info("Existing recordings can be migrated later using the admin API or migration script.") + + except Exception as e: + app.logger.error(f"Error during database migration: {e}") + + +if __name__ == '__main__': + # For standalone migration script + from src.app import app + with app.app_context(): + initialize_database(app) diff --git a/src/models/__init__.py b/src/models/__init__.py new file mode 100644 index 0000000..17551cc --- /dev/null +++ b/src/models/__init__.py @@ -0,0 +1,73 @@ +""" +Database models package for the Speakr application. + +This package contains all database models organized by domain: +- User and authentication models +- Recording and transcript models +- Sharing models (public and internal) +- Organization models (groups and tags) +- Event, template, and search session models +- System configuration models +""" + +# Import database instance +from src.database import db + +# Import all models +from .user import User, Speaker +from .api_token import APIToken +from .speaker_snippet import SpeakerSnippet +from .recording import Recording, TranscriptChunk +from .sharing import Share, InternalShare, SharedRecordingState +from .organization import Group, GroupMembership, Tag, RecordingTag, Folder +from .events import Event +from .templates import TranscriptTemplate +from .naming_template import NamingTemplate +from .export_template import ExportTemplate +from .inquire import InquireSession +from .system import SystemSetting +from .audit import ShareAuditLog +from .access_log import AccessLog +from .auth_log import AuthLog +from .push_subscription import PushSubscription +from .processing_job import ProcessingJob +from .token_usage import TokenUsage +from .transcription_usage import TranscriptionUsage + +# Export all models +__all__ = [ + # Database instance + 'db', + # User models + 'User', + 'Speaker', + 'APIToken', + 'SpeakerSnippet', + # Recording models + 'Recording', + 'TranscriptChunk', + # Sharing models + 'Share', + 'InternalShare', + 'SharedRecordingState', + 'ShareAuditLog', + 'AccessLog', + 'AuthLog', + # Organization models + 'Group', + 'GroupMembership', + 'Tag', + 'RecordingTag', + 'Folder', + # Other models + 'Event', + 'TranscriptTemplate', + 'NamingTemplate', + 'ExportTemplate', + 'InquireSession', + 'SystemSetting', + 'PushSubscription', + 'ProcessingJob', + 'TokenUsage', + 'TranscriptionUsage', +] diff --git a/src/models/access_log.py b/src/models/access_log.py new file mode 100644 index 0000000..5919e47 --- /dev/null +++ b/src/models/access_log.py @@ -0,0 +1,97 @@ +""" +Access audit log model for tracking data access operations. + +Provides traceability for Loi 25 compliance: who accessed what, when, from where. +""" + +from datetime import datetime +from src.database import db + + +class AccessLog(db.Model): + """Audit trail for data access operations (view, download, edit, delete).""" + + __tablename__ = 'access_log' + + id = db.Column(db.Integer, primary_key=True) + + # Who + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=True) # nullable for anonymous/public access + user = db.relationship('User', backref=db.backref('access_logs', lazy='dynamic')) + + # What action + action = db.Column(db.String(30), nullable=False) # 'view', 'download', 'edit', 'delete', 'export', 'share' + + # What resource + resource_type = db.Column(db.String(50), nullable=False) # 'recording', 'audio', 'transcript', 'user', 'summary' + resource_id = db.Column(db.Integer, nullable=True) + + # When + timestamp = db.Column(db.DateTime, default=datetime.utcnow, nullable=False, index=True) + + # Where from + ip_address = db.Column(db.String(45), nullable=True) + user_agent = db.Column(db.String(500), nullable=True) + + # Result + status = db.Column(db.String(20), default='success', nullable=False) # 'success', 'denied', 'error' + + # Extra context (JSON) + details = db.Column(db.JSON, nullable=True) + + def to_dict(self): + """Convert to dictionary for API responses.""" + return { + 'id': self.id, + 'user_id': self.user_id, + 'username': self.user.username if self.user else None, + 'action': self.action, + 'resource_type': self.resource_type, + 'resource_id': self.resource_id, + 'timestamp': self.timestamp.isoformat() if self.timestamp else None, + 'ip_address': self.ip_address, + 'user_agent': self.user_agent, + 'status': self.status, + 'details': self.details, + } + + @staticmethod + def log_access(action, resource_type, resource_id=None, user_id=None, status='success', details=None, ip_address=None, user_agent=None): + """Log a data access event.""" + log = AccessLog( + user_id=user_id, + action=action, + resource_type=resource_type, + resource_id=resource_id, + status=status, + details=details, + ip_address=ip_address, + user_agent=user_agent, + ) + db.session.add(log) + return log + + @staticmethod + def log_view(resource_type, resource_id, user_id=None, ip_address=None, user_agent=None, details=None): + """Log a view/read access.""" + return AccessLog.log_access('view', resource_type, resource_id, user_id=user_id, ip_address=ip_address, user_agent=user_agent, details=details) + + @staticmethod + def log_download(resource_type, resource_id, user_id=None, ip_address=None, user_agent=None, details=None): + """Log a download access.""" + return AccessLog.log_access('download', resource_type, resource_id, user_id=user_id, ip_address=ip_address, user_agent=user_agent, details=details) + + @staticmethod + def log_edit(resource_type, resource_id, user_id=None, ip_address=None, user_agent=None, details=None): + """Log an edit/modification.""" + return AccessLog.log_access('edit', resource_type, resource_id, user_id=user_id, ip_address=ip_address, user_agent=user_agent, details=details) + + @staticmethod + def log_delete(resource_type, resource_id, user_id=None, ip_address=None, user_agent=None, details=None): + """Log a deletion.""" + return AccessLog.log_access('delete', resource_type, resource_id, user_id=user_id, ip_address=ip_address, user_agent=user_agent, details=details) + + @staticmethod + def log_export(resource_type, resource_id, user_id=None, ip_address=None, user_agent=None, details=None): + """Log a data export.""" + return AccessLog.log_access('export', resource_type, resource_id, user_id=user_id, ip_address=ip_address, user_agent=user_agent, details=details) diff --git a/src/models/api_token.py b/src/models/api_token.py new file mode 100644 index 0000000..37a6a04 --- /dev/null +++ b/src/models/api_token.py @@ -0,0 +1,51 @@ +""" +API Token database model. + +This module defines the APIToken model for managing user API tokens +that allow authentication via Bearer tokens for automation tools. +""" + +from datetime import datetime +from src.database import db + + +class APIToken(db.Model): + """API Token model for token-based authentication.""" + + __tablename__ = 'api_token' + + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + token_hash = db.Column(db.String(64), unique=True, nullable=False, index=True) + name = db.Column(db.String(100), nullable=True) # User-friendly label (e.g., "n8n", "CLI") + created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False) + last_used_at = db.Column(db.DateTime, nullable=True) + expires_at = db.Column(db.DateTime, nullable=True) + revoked = db.Column(db.Boolean, default=False, nullable=False, index=True) + + # Relationship to User + user = db.relationship('User', backref=db.backref('api_tokens', lazy=True, cascade='all, delete-orphan')) + + def __repr__(self): + return f"APIToken(name='{self.name}', user_id={self.user_id}, revoked={self.revoked})" + + def to_dict(self): + """Convert token to dictionary for API responses.""" + return { + 'id': self.id, + 'name': self.name, + 'created_at': self.created_at.isoformat() if self.created_at else None, + 'last_used_at': self.last_used_at.isoformat() if self.last_used_at else None, + 'expires_at': self.expires_at.isoformat() if self.expires_at else None, + 'revoked': self.revoked + } + + def is_expired(self): + """Check if token has expired.""" + if not self.expires_at: + return False + return self.expires_at < datetime.utcnow() + + def is_valid(self): + """Check if token is valid (not revoked and not expired).""" + return not self.revoked and not self.is_expired() diff --git a/src/models/audit.py b/src/models/audit.py new file mode 100644 index 0000000..beecedd --- /dev/null +++ b/src/models/audit.py @@ -0,0 +1,109 @@ +""" +Audit logging models for tracking share operations. + +Provides comprehensive audit trail for security and compliance. +""" + +from datetime import datetime +from src.database import db + + +class ShareAuditLog(db.Model): + """Audit trail for share operations.""" + + __tablename__ = 'share_audit_log' + + id = db.Column(db.Integer, primary_key=True) + + # Action details + action = db.Column(db.String(20), nullable=False) # 'created', 'modified', 'revoked', 'cascade_revoked' + recording_id = db.Column(db.Integer, db.ForeignKey('recording.id', ondelete='CASCADE'), nullable=False) + + # Actor (who performed the action) + actor_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + actor = db.relationship('User', foreign_keys=[actor_id], backref='audit_actions_performed') + + # Target (who was affected - optional for some actions) + target_user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=True) + target_user = db.relationship('User', foreign_keys=[target_user_id]) + + # Permission snapshot at time of action + permissions_granted = db.Column(db.JSON, nullable=True) # What was granted/revoked + actor_permissions = db.Column(db.JSON, nullable=True) # What actor had at time + + # Metadata + timestamp = db.Column(db.DateTime, default=datetime.utcnow, nullable=False) + share_id = db.Column(db.Integer, nullable=True) # Reference to share if applicable + + # Context and notes + notes = db.Column(db.Text, nullable=True) # System-generated notes (e.g., "Permission constrained", "Cascade revocation") + ip_address = db.Column(db.String(45), nullable=True) # Actor's IP address + + # Recording relationship + recording = db.relationship('Recording', backref=db.backref('share_audit_logs', cascade='all, delete-orphan')) + + def to_dict(self): + """Convert to dictionary for API responses.""" + return { + 'id': self.id, + 'action': self.action, + 'recording_id': self.recording_id, + 'actor_id': self.actor_id, + 'actor_username': self.actor.username if self.actor else None, + 'target_user_id': self.target_user_id, + 'target_username': self.target_user.username if self.target_user else None, + 'permissions_granted': self.permissions_granted, + 'actor_permissions': self.actor_permissions, + 'timestamp': self.timestamp.isoformat() if self.timestamp else None, + 'share_id': self.share_id, + 'notes': self.notes, + 'ip_address': self.ip_address + } + + @staticmethod + def log_share_created(recording_id, actor_id, target_user_id, permissions, actor_permissions=None, notes=None, ip_address=None): + """Log share creation.""" + log = ShareAuditLog( + action='created', + recording_id=recording_id, + actor_id=actor_id, + target_user_id=target_user_id, + permissions_granted=permissions, + actor_permissions=actor_permissions, + notes=notes, + ip_address=ip_address + ) + db.session.add(log) + return log + + @staticmethod + def log_share_modified(share_id, recording_id, actor_id, target_user_id, old_permissions, new_permissions, notes=None, ip_address=None): + """Log share modification.""" + log = ShareAuditLog( + action='modified', + recording_id=recording_id, + actor_id=actor_id, + target_user_id=target_user_id, + permissions_granted={'old': old_permissions, 'new': new_permissions}, + share_id=share_id, + notes=notes, + ip_address=ip_address + ) + db.session.add(log) + return log + + @staticmethod + def log_share_revoked(share_id, recording_id, actor_id, target_user_id, was_cascade=False, notes=None, ip_address=None): + """Log share revocation.""" + action = 'cascade_revoked' if was_cascade else 'revoked' + log = ShareAuditLog( + action=action, + recording_id=recording_id, + actor_id=actor_id, + target_user_id=target_user_id, + share_id=share_id, + notes=notes, + ip_address=ip_address + ) + db.session.add(log) + return log diff --git a/src/models/auth_log.py b/src/models/auth_log.py new file mode 100644 index 0000000..33fe2dc --- /dev/null +++ b/src/models/auth_log.py @@ -0,0 +1,94 @@ +""" +Authentication audit log model for tracking auth events. + +Provides traceability for Loi 25 compliance: login/logout history, failed attempts. +""" + +from datetime import datetime +from src.database import db + + +class AuthLog(db.Model): + """Audit trail for authentication events.""" + + __tablename__ = 'auth_log' + + id = db.Column(db.Integer, primary_key=True) + + # Who (nullable for failed logins where user doesn't exist) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=True) + user = db.relationship('User', backref=db.backref('auth_logs', lazy='dynamic')) + + # What + action = db.Column(db.String(30), nullable=False) # 'login', 'logout', 'failed_login', 'register', 'password_change', 'password_reset', 'sso_login' + + # When + timestamp = db.Column(db.DateTime, default=datetime.utcnow, nullable=False, index=True) + + # Where from + ip_address = db.Column(db.String(45), nullable=True) + user_agent = db.Column(db.String(500), nullable=True) + + # Extra context (JSON) — e.g. email attempted, SSO provider, reason for failure + details = db.Column(db.JSON, nullable=True) + + def to_dict(self): + """Convert to dictionary for API responses.""" + return { + 'id': self.id, + 'user_id': self.user_id, + 'username': self.user.username if self.user else None, + 'action': self.action, + 'timestamp': self.timestamp.isoformat() if self.timestamp else None, + 'ip_address': self.ip_address, + 'user_agent': self.user_agent, + 'details': self.details, + } + + @staticmethod + def log_auth(action, user_id=None, ip_address=None, user_agent=None, details=None): + """Log an authentication event.""" + log = AuthLog( + user_id=user_id, + action=action, + ip_address=ip_address, + user_agent=user_agent, + details=details, + ) + db.session.add(log) + return log + + @staticmethod + def log_login(user_id, ip_address=None, user_agent=None, details=None): + """Log a successful login.""" + return AuthLog.log_auth('login', user_id=user_id, ip_address=ip_address, user_agent=user_agent, details=details) + + @staticmethod + def log_logout(user_id, ip_address=None, user_agent=None): + """Log a logout.""" + return AuthLog.log_auth('logout', user_id=user_id, ip_address=ip_address, user_agent=user_agent) + + @staticmethod + def log_failed_login(ip_address=None, user_agent=None, details=None): + """Log a failed login attempt.""" + return AuthLog.log_auth('failed_login', ip_address=ip_address, user_agent=user_agent, details=details) + + @staticmethod + def log_register(user_id, ip_address=None, user_agent=None): + """Log a new user registration.""" + return AuthLog.log_auth('register', user_id=user_id, ip_address=ip_address, user_agent=user_agent) + + @staticmethod + def log_password_change(user_id, ip_address=None, user_agent=None, details=None): + """Log a password change.""" + return AuthLog.log_auth('password_change', user_id=user_id, ip_address=ip_address, user_agent=user_agent, details=details) + + @staticmethod + def log_password_reset(user_id, ip_address=None, user_agent=None): + """Log a password reset.""" + return AuthLog.log_auth('password_reset', user_id=user_id, ip_address=ip_address, user_agent=user_agent) + + @staticmethod + def log_sso_login(user_id, ip_address=None, user_agent=None, details=None): + """Log an SSO login.""" + return AuthLog.log_auth('sso_login', user_id=user_id, ip_address=ip_address, user_agent=user_agent, details=details) diff --git a/src/models/events.py b/src/models/events.py new file mode 100644 index 0000000..d967b68 --- /dev/null +++ b/src/models/events.py @@ -0,0 +1,43 @@ +""" +Event model for calendar events extracted from transcripts. + +This module defines the Event model for storing calendar events +that are extracted from transcriptions. +""" + +import json +from datetime import datetime +from src.database import db + + +class Event(db.Model): + """Calendar events extracted from transcripts.""" + + id = db.Column(db.Integer, primary_key=True) + recording_id = db.Column(db.Integer, db.ForeignKey('recording.id'), nullable=False) + title = db.Column(db.String(200), nullable=False) + description = db.Column(db.Text, nullable=True) + start_datetime = db.Column(db.DateTime, nullable=False) + end_datetime = db.Column(db.DateTime, nullable=True) + location = db.Column(db.String(500), nullable=True) + attendees = db.Column(db.Text, nullable=True) # JSON list of attendees + reminder_minutes = db.Column(db.Integer, nullable=True, default=15) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + + # Relationship + recording = db.relationship('Recording', backref=db.backref('events', lazy=True, cascade='all, delete-orphan')) + + def to_dict(self): + """Convert model to dictionary representation.""" + return { + 'id': self.id, + 'recording_id': self.recording_id, + 'title': self.title, + 'description': self.description, + 'start_datetime': self.start_datetime.isoformat() if self.start_datetime else None, + 'end_datetime': self.end_datetime.isoformat() if self.end_datetime else None, + 'location': self.location, + 'attendees': json.loads(self.attendees) if self.attendees else [], + 'reminder_minutes': self.reminder_minutes, + 'created_at': self.created_at.isoformat() if self.created_at else None + } diff --git a/src/models/export_template.py b/src/models/export_template.py new file mode 100644 index 0000000..dc13278 --- /dev/null +++ b/src/models/export_template.py @@ -0,0 +1,37 @@ +""" +ExportTemplate model for user-defined export formatting. + +This module defines the ExportTemplate model for storing +custom templates for markdown export formatting. +""" + +from datetime import datetime +from src.database import db + + +class ExportTemplate(db.Model): + """Stores user-defined templates for markdown export formatting.""" + + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + name = db.Column(db.String(100), nullable=False) + template = db.Column(db.Text, nullable=False) + description = db.Column(db.String(500), nullable=True) + is_default = db.Column(db.Boolean, default=False) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + # Relationships + user = db.relationship('User', backref=db.backref('export_templates', lazy=True, cascade='all, delete-orphan')) + + def to_dict(self): + """Convert model to dictionary representation.""" + return { + 'id': self.id, + 'name': self.name, + 'template': self.template, + 'description': self.description, + 'is_default': self.is_default, + 'created_at': self.created_at.isoformat() if self.created_at else None, + 'updated_at': self.updated_at.isoformat() if self.updated_at else None + } diff --git a/src/models/inquire.py b/src/models/inquire.py new file mode 100644 index 0000000..eb84186 --- /dev/null +++ b/src/models/inquire.py @@ -0,0 +1,45 @@ +""" +InquireSession model for semantic search sessions. + +This module defines the InquireSession model for tracking +inquire mode sessions and their filtering criteria. +""" + +import json +from datetime import datetime +from src.database import db + + +class InquireSession(db.Model): + """Tracks inquire mode sessions and their filtering criteria.""" + + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + session_name = db.Column(db.String(200), nullable=True) # Optional user-defined name + + # Filter criteria (JSON stored as text) + filter_tags = db.Column(db.Text, nullable=True) # JSON array of tag IDs + filter_speakers = db.Column(db.Text, nullable=True) # JSON array of speaker names + filter_date_from = db.Column(db.Date, nullable=True) + filter_date_to = db.Column(db.Date, nullable=True) + filter_recording_ids = db.Column(db.Text, nullable=True) # JSON array of specific recording IDs + + created_at = db.Column(db.DateTime, default=datetime.utcnow) + last_used = db.Column(db.DateTime, default=datetime.utcnow) + + # Relationships + user = db.relationship('User', backref=db.backref('inquire_sessions', lazy=True, cascade='all, delete-orphan')) + + def to_dict(self): + """Convert model to dictionary representation.""" + return { + 'id': self.id, + 'session_name': self.session_name, + 'filter_tags': json.loads(self.filter_tags) if self.filter_tags else [], + 'filter_speakers': json.loads(self.filter_speakers) if self.filter_speakers else [], + 'filter_date_from': self.filter_date_from.isoformat() if self.filter_date_from else None, + 'filter_date_to': self.filter_date_to.isoformat() if self.filter_date_to else None, + 'filter_recording_ids': json.loads(self.filter_recording_ids) if self.filter_recording_ids else [], + 'created_at': self.created_at.isoformat() if self.created_at else None, + 'last_used': self.last_used.isoformat() if self.last_used else None + } diff --git a/src/models/naming_template.py b/src/models/naming_template.py new file mode 100644 index 0000000..f09dc89 --- /dev/null +++ b/src/models/naming_template.py @@ -0,0 +1,114 @@ +""" +NamingTemplate model for user-defined recording title formatting. + +This module defines the NamingTemplate model for storing +custom templates for generating recording titles from filenames, +metadata, and AI-generated content. +""" + +import json +import re +import os +from datetime import datetime +from src.database import db + + +class NamingTemplate(db.Model): + """Stores user-defined templates for recording title generation.""" + + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + name = db.Column(db.String(100), nullable=False) + template = db.Column(db.Text, nullable=False) # e.g., "{{phone}} - {{date}} {{ai_title}}" + description = db.Column(db.String(500), nullable=True) + regex_patterns = db.Column(db.Text, nullable=True) # JSON: {"phone": "\\d{10}", "caller": "^([^-]+)"} + is_default = db.Column(db.Boolean, default=False) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + # Relationships + user = db.relationship('User', foreign_keys=[user_id], backref=db.backref('naming_templates', lazy=True, cascade='all, delete-orphan')) + + def to_dict(self): + """Convert model to dictionary representation.""" + return { + 'id': self.id, + 'name': self.name, + 'template': self.template, + 'description': self.description, + 'regex_patterns': json.loads(self.regex_patterns) if self.regex_patterns else {}, + 'is_default': self.is_default, + 'created_at': self.created_at.isoformat() if self.created_at else None, + 'updated_at': self.updated_at.isoformat() if self.updated_at else None + } + + def get_regex_patterns(self): + """Parse and return regex patterns as dictionary.""" + if not self.regex_patterns: + return {} + try: + return json.loads(self.regex_patterns) + except json.JSONDecodeError: + return {} + + def needs_ai_title(self): + """Check if template requires AI-generated title.""" + return '{{ai_title}}' in self.template + + def apply(self, original_filename, meeting_date=None, ai_title=None): + """ + Apply this template to generate a recording title. + + Args: + original_filename: The original filename of the recording + meeting_date: Optional datetime of the recording + ai_title: Optional AI-generated title + + Returns: + Generated title string, or None if template produces empty result + """ + # Start with template + result = self.template + + # Get filename without extension for {{filename}} + filename_no_ext = os.path.splitext(original_filename)[0] if original_filename else '' + + # Build built-in variables + variables = { + 'ai_title': ai_title or '', + 'filename': filename_no_ext, + 'filename_full': original_filename or '', + 'date': meeting_date.strftime('%Y-%m-%d') if meeting_date else '', + 'datetime': meeting_date.strftime('%Y-%m-%d %H:%M') if meeting_date else '', + 'time': meeting_date.strftime('%H:%M') if meeting_date else '', + 'year': meeting_date.strftime('%Y') if meeting_date else '', + 'month': meeting_date.strftime('%m') if meeting_date else '', + 'day': meeting_date.strftime('%d') if meeting_date else '', + } + + # Extract custom variables from filename using regex patterns + regex_patterns = self.get_regex_patterns() + for var_name, pattern in regex_patterns.items(): + try: + match = re.search(pattern, filename_no_ext) + if match: + # Use first capture group if exists, else full match + variables[var_name] = match.group(1) if match.groups() else match.group(0) + else: + variables[var_name] = '' + except re.error as e: + # Invalid regex - log and treat as empty + variables[var_name] = '' + + # Replace all variables in template + for var_name, value in variables.items(): + result = result.replace('{{' + var_name + '}}', value) + + # Clean up result + result = result.strip() + + # If result is empty or only whitespace, return None + if not result: + return None + + return result diff --git a/src/models/organization.py b/src/models/organization.py new file mode 100644 index 0000000..1e536ed --- /dev/null +++ b/src/models/organization.py @@ -0,0 +1,240 @@ +""" +Organization models for groups, tags, and related structures. + +This module defines models for organizing users into groups and tagging recordings. +""" + +from datetime import datetime +from src.database import db + + +class Group(db.Model): + """Groups for organizing users and sharing recordings.""" + + __tablename__ = 'group' + + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(100), nullable=False, unique=True) + description = db.Column(db.Text, nullable=True) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + # Relationships + memberships = db.relationship('GroupMembership', back_populates='group', cascade='all, delete-orphan') + + def to_dict(self): + """Convert model to dictionary representation.""" + return { + 'id': self.id, + 'name': self.name, + 'description': self.description, + 'member_count': len(self.memberships), + 'created_at': self.created_at.isoformat() if self.created_at else None, + 'updated_at': self.updated_at.isoformat() if self.updated_at else None + } + + +class GroupMembership(db.Model): + """Tracks user membership in groups with roles.""" + + __tablename__ = 'group_membership' + + id = db.Column(db.Integer, primary_key=True) + group_id = db.Column(db.Integer, db.ForeignKey('group.id', ondelete='CASCADE'), nullable=False) + user_id = db.Column(db.Integer, db.ForeignKey('user.id', ondelete='CASCADE'), nullable=False) + role = db.Column(db.String(20), default='member') # 'admin' or 'member' + joined_at = db.Column(db.DateTime, default=datetime.utcnow) + + # Relationships + group = db.relationship('Group', back_populates='memberships') + user = db.relationship('User', backref=db.backref('group_memberships', lazy=True)) + + # Unique constraint: user can only be in a group once + __table_args__ = (db.UniqueConstraint('group_id', 'user_id', name='unique_group_membership'),) + + def to_dict(self): + """Convert model to dictionary representation.""" + return { + 'id': self.id, + 'group_id': self.group_id, + 'group_name': self.group.name if self.group else None, + 'user_id': self.user_id, + 'username': self.user.username if self.user else None, + 'role': self.role, + 'joined_at': self.joined_at.isoformat() if self.joined_at else None + } + + +class RecordingTag(db.Model): + """Many-to-many relationship table for recordings and tags.""" + + __tablename__ = 'recording_tags' + + recording_id = db.Column(db.Integer, db.ForeignKey('recording.id'), primary_key=True) + tag_id = db.Column(db.Integer, db.ForeignKey('tag.id'), primary_key=True) + added_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=True) + order = db.Column(db.Integer, nullable=False, default=0) + + # Relationships + recording = db.relationship('Recording', back_populates='tag_associations') + tag = db.relationship('Tag', back_populates='recording_associations') + + +class Folder(db.Model): + """Folders for organizing recordings (one-to-many relationship).""" + + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(50), nullable=False) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + group_id = db.Column(db.Integer, db.ForeignKey('group.id', ondelete='CASCADE'), nullable=True) # Group-scoped folder + color = db.Column(db.String(7), default='#10B981') # Hex color for UI (green to differentiate from tags) + + # Custom settings for this folder + custom_prompt = db.Column(db.Text, nullable=True) # Custom summarization prompt + default_language = db.Column(db.String(10), nullable=True) # Default transcription language + default_min_speakers = db.Column(db.Integer, nullable=True) # Default min speakers for ASR + default_max_speakers = db.Column(db.Integer, nullable=True) # Default max speakers for ASR + + # Transcription hints + default_hotwords = db.Column(db.Text, nullable=True) # Comma-separated words to bias recognition + default_initial_prompt = db.Column(db.Text, nullable=True) # Initial prompt to steer transcription + + # Retention and deletion settings + protect_from_deletion = db.Column(db.Boolean, default=False) # Exempt recordings in folder from auto-deletion + retention_days = db.Column(db.Integer, nullable=True) # Folder-specific retention override + + # Group folder settings + auto_share_on_apply = db.Column(db.Boolean, default=True) # Auto-share recording with group when moved to folder + share_with_group_lead = db.Column(db.Boolean, default=True) # Share with group admins when moved to folder + + # Naming template for recordings in this folder + naming_template_id = db.Column(db.Integer, db.ForeignKey('naming_template.id', ondelete='SET NULL'), nullable=True) + + # Export template for recordings in this folder + export_template_id = db.Column(db.Integer, db.ForeignKey('export_template.id', ondelete='SET NULL'), nullable=True) + + created_at = db.Column(db.DateTime, default=datetime.utcnow) + updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + # Relationships + user = db.relationship('User', backref=db.backref('folders', lazy=True, cascade='all, delete-orphan')) + group = db.relationship('Group', backref=db.backref('folders', lazy=True)) + naming_template = db.relationship('NamingTemplate', foreign_keys=[naming_template_id]) + export_template = db.relationship('ExportTemplate', foreign_keys=[export_template_id]) + # One-to-many relationship with recordings + recordings = db.relationship('Recording', back_populates='folder', lazy=True) + + # Unique constraint: folder name must be unique per user + __table_args__ = (db.UniqueConstraint('name', 'user_id', name='_user_folder_uc'),) + + @property + def is_group_folder(self): + """Check if this is a group-scoped folder.""" + return self.group_id is not None + + def to_dict(self): + """Convert model to dictionary representation.""" + return { + 'id': self.id, + 'name': self.name, + 'color': self.color, + 'group_id': self.group_id, + 'is_group_folder': self.is_group_folder, + 'group_name': self.group.name if self.group else None, + 'custom_prompt': self.custom_prompt, + 'default_language': self.default_language, + 'default_min_speakers': self.default_min_speakers, + 'default_max_speakers': self.default_max_speakers, + 'default_hotwords': self.default_hotwords, + 'default_initial_prompt': self.default_initial_prompt, + 'protect_from_deletion': self.protect_from_deletion, + 'retention_days': self.retention_days, + 'auto_share_on_apply': self.auto_share_on_apply, + 'share_with_group_lead': self.share_with_group_lead, + 'naming_template_id': self.naming_template_id, + 'naming_template_name': self.naming_template.name if self.naming_template else None, + 'export_template_id': self.export_template_id, + 'export_template_name': self.export_template.name if self.export_template else None, + 'created_at': self.created_at.isoformat() if self.created_at else None, + 'recording_count': len(self.recordings) if self.recordings else 0 + } + + +class Tag(db.Model): + """Tags for organizing and categorizing recordings.""" + + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(50), nullable=False) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + group_id = db.Column(db.Integer, db.ForeignKey('group.id', ondelete='CASCADE'), nullable=True) # Group-scoped tag + color = db.Column(db.String(7), default='#3B82F6') # Hex color for UI + + # Custom settings for this tag + custom_prompt = db.Column(db.Text, nullable=True) # Custom summarization prompt + default_language = db.Column(db.String(10), nullable=True) # Default transcription language + default_min_speakers = db.Column(db.Integer, nullable=True) # Default min speakers for ASR + default_max_speakers = db.Column(db.Integer, nullable=True) # Default max speakers for ASR + + # Transcription hints + default_hotwords = db.Column(db.Text, nullable=True) # Comma-separated words to bias recognition + default_initial_prompt = db.Column(db.Text, nullable=True) # Initial prompt to steer transcription + + # Retention and deletion settings + protect_from_deletion = db.Column(db.Boolean, default=False) # Exempt tagged recordings from auto-deletion + retention_days = db.Column(db.Integer, nullable=True) # Group-specific retention override (overrides global) + + # Group tag settings + auto_share_on_apply = db.Column(db.Boolean, default=True) # Auto-share recording with group when this tag is applied + share_with_group_lead = db.Column(db.Boolean, default=True) # Share with group admins when this tag is applied + + # Naming template for recordings with this tag + naming_template_id = db.Column(db.Integer, db.ForeignKey('naming_template.id', ondelete='SET NULL'), nullable=True) + + # Export template for recordings with this tag + export_template_id = db.Column(db.Integer, db.ForeignKey('export_template.id', ondelete='SET NULL'), nullable=True) + + created_at = db.Column(db.DateTime, default=datetime.utcnow) + updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + # Relationships + user = db.relationship('User', backref=db.backref('tags', lazy=True, cascade='all, delete-orphan')) + group = db.relationship('Group', backref=db.backref('tags', lazy=True)) + naming_template = db.relationship('NamingTemplate', foreign_keys=[naming_template_id]) + export_template = db.relationship('ExportTemplate', foreign_keys=[export_template_id]) + # Use association object for many-to-many with order tracking + recording_associations = db.relationship('RecordingTag', back_populates='tag', cascade='all, delete-orphan') + + # Unique constraint: tag name must be unique per user (or per group if group_id is set) + __table_args__ = (db.UniqueConstraint('name', 'user_id', name='_user_tag_uc'),) + + @property + def is_group_tag(self): + """Check if this is a group-scoped tag.""" + return self.group_id is not None + + def to_dict(self): + """Convert model to dictionary representation.""" + return { + 'id': self.id, + 'name': self.name, + 'color': self.color, + 'group_id': self.group_id, + 'is_group_tag': self.is_group_tag, + 'group_name': self.group.name if self.group else None, + 'custom_prompt': self.custom_prompt, + 'default_language': self.default_language, + 'default_min_speakers': self.default_min_speakers, + 'default_max_speakers': self.default_max_speakers, + 'default_hotwords': self.default_hotwords, + 'default_initial_prompt': self.default_initial_prompt, + 'protect_from_deletion': self.protect_from_deletion, + 'retention_days': self.retention_days, + 'auto_share_on_apply': self.auto_share_on_apply, + 'share_with_group_lead': self.share_with_group_lead, + 'naming_template_id': self.naming_template_id, + 'naming_template_name': self.naming_template.name if self.naming_template else None, + 'export_template_id': self.export_template_id, + 'export_template_name': self.export_template.name if self.export_template else None, + 'created_at': self.created_at.isoformat() if self.created_at else None, + 'recording_count': len(self.recording_associations) + } diff --git a/src/models/processing_job.py b/src/models/processing_job.py new file mode 100644 index 0000000..375e1cd --- /dev/null +++ b/src/models/processing_job.py @@ -0,0 +1,63 @@ +""" +ProcessingJob database model for persistent job queue. + +This model stores background processing jobs in the database to ensure +they survive application restarts and support fair scheduling across users. +""" + +from datetime import datetime +from src.database import db + + +class ProcessingJob(db.Model): + """Database model for tracking background processing jobs.""" + + __tablename__ = 'processing_job' + + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False, index=True) + recording_id = db.Column(db.Integer, db.ForeignKey('recording.id', ondelete='CASCADE'), nullable=False, index=True) + + # Job type: transcribe, summarize, reprocess_transcription, reprocess_summary + job_type = db.Column(db.String(50), nullable=False) + + # Status: queued, processing, completed, failed + status = db.Column(db.String(20), default='queued', nullable=False, index=True) + + # JSON blob for job-specific parameters (language, min_speakers, custom_prompt, etc.) + params = db.Column(db.Text, nullable=True) + + # Error tracking + error_message = db.Column(db.Text, nullable=True) + retry_count = db.Column(db.Integer, default=0, nullable=False) + + # Track if this is a new upload (vs reprocessing) - for cleanup on failure + is_new_upload = db.Column(db.Boolean, default=False, nullable=False) + + # Timestamps + created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False, index=True) + started_at = db.Column(db.DateTime, nullable=True) + completed_at = db.Column(db.DateTime, nullable=True) + + # Relationships + user = db.relationship('User', backref=db.backref('processing_jobs', lazy='dynamic')) + recording = db.relationship('Recording', backref=db.backref('processing_jobs', lazy='dynamic', cascade='all, delete-orphan')) + + def __repr__(self): + return f'' + + def to_dict(self): + """Convert job to dictionary for API responses.""" + return { + 'id': self.id, + 'user_id': self.user_id, + 'recording_id': self.recording_id, + 'job_type': self.job_type, + 'status': self.status, + 'retry_count': self.retry_count, + 'is_new_upload': self.is_new_upload, + 'created_at': self.created_at.isoformat() if self.created_at else None, + 'started_at': self.started_at.isoformat() if self.started_at else None, + 'completed_at': self.completed_at.isoformat() if self.completed_at else None, + 'error_message': self.error_message + } diff --git a/src/models/push_subscription.py b/src/models/push_subscription.py new file mode 100644 index 0000000..d44662d --- /dev/null +++ b/src/models/push_subscription.py @@ -0,0 +1,37 @@ +""" +Push Subscription Model +Stores web push notification subscriptions for users +""" +from datetime import datetime +from src.database import db + + +class PushSubscription(db.Model): + """Web Push notification subscription""" + __tablename__ = 'push_subscriptions' + + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + + # Push subscription endpoint (unique per browser/device) + endpoint = db.Column(db.String(500), nullable=False, unique=True) + + # Encryption keys for sending push messages + p256dh_key = db.Column(db.String(200), nullable=False) + auth_key = db.Column(db.String(100), nullable=False) + + # Timestamps + created_at = db.Column(db.DateTime, default=datetime.utcnow) + updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + def __repr__(self): + return f'' + + def to_dict(self): + """Convert to dictionary""" + return { + 'id': self.id, + 'user_id': self.user_id, + 'endpoint': self.endpoint, + 'created_at': self.created_at.isoformat() if self.created_at else None + } diff --git a/src/models/recording.py b/src/models/recording.py new file mode 100644 index 0000000..ec3ece5 --- /dev/null +++ b/src/models/recording.py @@ -0,0 +1,338 @@ +""" +Recording and TranscriptChunk database models. + +This module defines models for audio recordings and their chunked transcriptions. +""" + +import logging +import os +from datetime import datetime +from sqlalchemy import func +from src.database import db +from src.utils import local_datetime_filter, md_to_html + +logger = logging.getLogger(__name__) + + +class Recording(db.Model): + """Main recording model storing audio files and their metadata.""" + + # Add user_id foreign key to associate recordings with users + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=True) + id = db.Column(db.Integer, primary_key=True) + # Title will now often be AI-generated, maybe start with filename? + title = db.Column(db.String(200), nullable=True) # Allow Null initially + participants = db.Column(db.String(500)) + notes = db.Column(db.Text) + transcription = db.Column(db.Text, nullable=True) + summary = db.Column(db.Text, nullable=True) + status = db.Column(db.String(50), default='PENDING') # PENDING, PROCESSING, SUMMARIZING, COMPLETED, FAILED + audio_path = db.Column(db.String(500)) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + meeting_date = db.Column(db.DateTime, nullable=True) + file_size = db.Column(db.Integer) # Store file size in bytes + original_filename = db.Column(db.String(500), nullable=True) # Store the original uploaded filename + is_inbox = db.Column(db.Boolean, default=True) # New recordings are marked as inbox by default + is_highlighted = db.Column(db.Boolean, default=False) # Recordings can be highlighted by the user + mime_type = db.Column(db.String(100), nullable=True) + completed_at = db.Column(db.DateTime, nullable=True) + processing_time_seconds = db.Column(db.Integer, nullable=True) + transcription_duration_seconds = db.Column(db.Integer, nullable=True) # Time taken for transcription + summarization_duration_seconds = db.Column(db.Integer, nullable=True) # Time taken for summarization + processing_source = db.Column(db.String(50), default='upload') # upload, auto_process, recording + error_message = db.Column(db.Text, nullable=True) # Store detailed error messages + file_hash = db.Column(db.String(64), nullable=True) # SHA-256 hash for duplicate detection + + # Auto-deletion and archival fields + audio_deleted_at = db.Column(db.DateTime, nullable=True) # When audio file was deleted (null = not deleted) + deletion_exempt = db.Column(db.Boolean, default=False) # Manual exemption from auto-deletion + + # Speaker embeddings from diarization (JSON dict mapping speaker IDs to 256-dimensional vectors) + speaker_embeddings = db.Column(db.JSON, nullable=True) + + # Folder relationship (one-to-many: a recording belongs to at most one folder) + folder_id = db.Column(db.Integer, db.ForeignKey('folder.id', ondelete='SET NULL'), nullable=True, index=True) + + # Relationships + folder = db.relationship('Folder', back_populates='recordings') + tag_associations = db.relationship('RecordingTag', back_populates='recording', cascade='all, delete-orphan', order_by='RecordingTag.order') + + @property + def tags(self): + """Get tags ordered by the order they were added to this recording.""" + return [assoc.tag for assoc in sorted(self.tag_associations, key=lambda x: x.order)] + + def get_visible_tags(self, viewer_user): + """ + Get tags that are visible to a specific user viewing this recording. + + Visibility rules: + - Group tags: visible if viewer is a member of the tag's group + - Personal tags: visible only to the tag creator + + Note: These rules apply to ALL users, including the recording owner. + Personal tags are private to their creator regardless of recording ownership. + + Args: + viewer_user: User object viewing the recording (or None for backward compatibility) + + Returns: + List of Tag objects visible to the viewer + """ + # If no viewer specified, return all tags (backward compatibility) + if viewer_user is None: + return self.tags + + if not self.tags: + return [] + + # Import here to avoid circular dependencies + from src.models.organization import GroupMembership + + visible_tags = [] + for tag in self.tags: + # Group tags: visible if viewer is a member of the group + if tag.group_id: + membership = GroupMembership.query.filter_by( + group_id=tag.group_id, + user_id=viewer_user.id + ).first() + if membership: + visible_tags.append(tag) + # Personal tags: visible only to tag creator + else: + if tag.user_id == viewer_user.id: + visible_tags.append(tag) + + return visible_tags + + def get_user_notes(self, user): + """ + Get notes from user's perspective (owner or shared recipient). + + - Recording owner sees Recording.notes + - Shared users see their personal_notes from SharedRecordingState + + Args: + user: User object viewing the recording + + Returns: + String notes content or None + """ + if user is None: + return self.notes + + if self.user_id == user.id: + return self.notes # Owner sees Recording.notes + else: + # Shared user sees their personal notes + from src.models.sharing import SharedRecordingState + state = SharedRecordingState.query.filter_by( + recording_id=self.id, + user_id=user.id + ).first() + return state.personal_notes if state else None + + def get_audio_duration(self): + """ + Get the audio duration in seconds using ffprobe. + + Returns: + Float duration in seconds, or None if unavailable + """ + if self.audio_deleted_at is not None: + return None + + if not self.audio_path or not os.path.exists(self.audio_path): + return None + + try: + from src.utils.ffprobe import get_duration + # Allow longer timeout for packet scanning fallback on files without duration metadata + duration = get_duration(self.audio_path, timeout=30) + return duration + except Exception as e: + logger.warning(f"Failed to get duration for recording {self.id}: {e}") + return None + + def get_duplicate_info(self): + """Check if other recordings share the same file_hash for this user. + + Returns: + Dict with total copy count and list of copies, or None. + """ + if not self.file_hash: + return None + dupes = Recording.query.filter( + Recording.user_id == self.user_id, + Recording.file_hash == self.file_hash, + ).with_entities( + Recording.id, Recording.title, Recording.created_at + ).order_by(Recording.created_at).all() + if len(dupes) > 1: + return { + 'total_copies': len(dupes), + 'copies': [ + { + 'id': d.id, + 'title': d.title or f'#{d.id}', + 'created_at': local_datetime_filter(d.created_at), + 'is_self': d.id == self.id + } + for d in dupes + ] + } + return None + + def to_list_dict(self, viewer_user=None): + """ + Lightweight dict for list views - excludes expensive HTML conversions. + + Args: + viewer_user: User viewing the recording (for tag visibility filtering) + """ + # Import here to avoid circular dependencies + from src.models.sharing import InternalShare, Share + + # Count internal shares for this recording + shared_with_count = db.session.query(func.count(InternalShare.id)).filter( + InternalShare.recording_id == self.id + ).scalar() or 0 + + # Count public shares (link shares) for this recording + public_share_count = db.session.query(func.count(Share.id)).filter( + Share.recording_id == self.id + ).scalar() or 0 + + # Get visible tags for this viewer + visible_tags = self.get_visible_tags(viewer_user) + + return { + 'id': self.id, + 'title': self.title, + 'participants': self.participants, + 'status': self.status, + 'created_at': local_datetime_filter(self.created_at), + 'completed_at': local_datetime_filter(self.completed_at), + 'meeting_date': local_datetime_filter(self.meeting_date), + 'file_size': self.file_size, + 'original_filename': self.original_filename, + 'is_inbox': self.is_inbox, + 'is_highlighted': self.is_highlighted, + 'audio_deleted_at': local_datetime_filter(self.audio_deleted_at), + 'audio_available': self.audio_deleted_at is None, + 'deletion_exempt': self.deletion_exempt, + 'folder_id': self.folder_id, + 'folder': self.folder.to_dict() if self.folder else None, + 'tags': [tag.to_dict() for tag in visible_tags] if visible_tags else [], + 'duplicate_info': self.get_duplicate_info(), + 'shared_with_count': shared_with_count, + 'public_share_count': public_share_count + } + + def to_dict(self, include_html=True, viewer_user=None): + """ + Full dict with optional HTML conversion for notes/summary. + + Args: + include_html: Whether to include HTML-rendered markdown fields + viewer_user: User viewing the recording (for tag visibility filtering) + """ + # Import here to avoid circular dependencies + from src.models.sharing import InternalShare, Share + + # Count internal shares for this recording + shared_with_count = db.session.query(func.count(InternalShare.id)).filter( + InternalShare.recording_id == self.id + ).scalar() or 0 + + # Count public shares (link shares) for this recording + public_share_count = db.session.query(func.count(Share.id)).filter( + Share.recording_id == self.id + ).scalar() or 0 + + # Get visible tags for this viewer + visible_tags = self.get_visible_tags(viewer_user) + + # Get user-specific notes + user_notes = self.get_user_notes(viewer_user) + + data = { + 'id': self.id, + 'title': self.title, + 'participants': self.participants, + 'notes': user_notes, + 'transcription': self.transcription, + 'summary': self.summary, + 'status': self.status, + 'created_at': local_datetime_filter(self.created_at), + 'completed_at': local_datetime_filter(self.completed_at), + 'processing_time_seconds': self.processing_time_seconds, + 'transcription_duration_seconds': self.transcription_duration_seconds, + 'summarization_duration_seconds': self.summarization_duration_seconds, + 'meeting_date': local_datetime_filter(self.meeting_date), + 'file_size': self.file_size, + 'original_filename': self.original_filename, + 'user_id': self.user_id, + 'is_inbox': self.is_inbox, + 'is_highlighted': self.is_highlighted, + 'mime_type': self.mime_type, + 'audio_deleted_at': local_datetime_filter(self.audio_deleted_at), + 'audio_available': self.audio_deleted_at is None, + 'audio_duration': self.get_audio_duration(), + 'deletion_exempt': self.deletion_exempt, + 'folder_id': self.folder_id, + 'folder': self.folder.to_dict() if self.folder else None, + 'tags': [tag.to_dict() for tag in visible_tags] if visible_tags else [], + 'events': [event.to_dict() for event in self.events] if self.events else [], + 'duplicate_info': self.get_duplicate_info(), + 'shared_with_count': shared_with_count, + 'public_share_count': public_share_count + } + + # Only compute expensive HTML conversions when explicitly requested + if include_html: + data['notes_html'] = md_to_html(user_notes) if user_notes else "" + data['summary_html'] = md_to_html(self.summary) if self.summary else "" + else: + data['notes_html'] = "" + data['summary_html'] = "" + + return data + + +class TranscriptChunk(db.Model): + """Stores chunked transcription segments for efficient retrieval and embedding.""" + + id = db.Column(db.Integer, primary_key=True) + recording_id = db.Column(db.Integer, db.ForeignKey('recording.id'), nullable=False) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + chunk_index = db.Column(db.Integer, nullable=False) # Order within the recording + content = db.Column(db.Text, nullable=False) # The actual text chunk + start_time = db.Column(db.Float, nullable=True) # Start time in seconds (if available) + end_time = db.Column(db.Float, nullable=True) # End time in seconds (if available) + speaker_name = db.Column(db.String(100), nullable=True, index=True) # Speaker for this chunk (indexed for speaker rename operations) + embedding = db.Column(db.LargeBinary, nullable=True) # Stored as binary vector + created_at = db.Column(db.DateTime, default=datetime.utcnow) + + # Composite index for efficient speaker name lookups scoped to user + __table_args__ = ( + db.Index('idx_user_speaker_name', 'user_id', 'speaker_name'), + ) + + # Relationships + recording = db.relationship('Recording', backref=db.backref('chunks', lazy=True, cascade='all, delete-orphan')) + user = db.relationship('User', backref=db.backref('transcript_chunks', lazy=True, cascade='all, delete-orphan')) + + def to_dict(self): + """Convert model to dictionary representation.""" + return { + 'id': self.id, + 'recording_id': self.recording_id, + 'chunk_index': self.chunk_index, + 'content': self.content, + 'start_time': self.start_time, + 'end_time': self.end_time, + 'speaker_name': self.speaker_name, + 'created_at': self.created_at.isoformat() if self.created_at else None + } diff --git a/src/models/sharing.py b/src/models/sharing.py new file mode 100644 index 0000000..83bf3a6 --- /dev/null +++ b/src/models/sharing.py @@ -0,0 +1,236 @@ +""" +Sharing models for public and internal recording shares. + +This module defines models for sharing recordings both publicly (via links) +and internally (between users). +""" + +import os +import secrets +from datetime import datetime +from src.database import db +from src.utils import local_datetime_filter + + +# Get sharing configuration from environment +SHOW_USERNAMES_IN_UI = os.environ.get('SHOW_USERNAMES_IN_UI', 'false').lower() == 'true' + + +class Share(db.Model): + """Public sharing via shareable links.""" + + id = db.Column(db.Integer, primary_key=True) + public_id = db.Column(db.String(32), unique=True, nullable=False, default=lambda: secrets.token_urlsafe(16)) + recording_id = db.Column(db.Integer, db.ForeignKey('recording.id'), nullable=False) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + share_summary = db.Column(db.Boolean, default=True) + share_notes = db.Column(db.Boolean, default=True) + + user = db.relationship('User', backref=db.backref('shares', lazy=True, cascade='all, delete-orphan')) + recording = db.relationship('Recording', backref=db.backref('shares', lazy=True, cascade='all, delete-orphan')) + + def to_dict(self): + """Convert model to dictionary representation.""" + return { + 'id': self.id, + 'public_id': self.public_id, + 'recording_id': self.recording_id, + 'created_at': local_datetime_filter(self.created_at), + 'share_summary': self.share_summary, + 'share_notes': self.share_notes, + 'recording_title': self.recording.title if self.recording else "N/A", + 'audio_available': self.recording.audio_deleted_at is None if self.recording else True + } + + +class InternalShare(db.Model): + """Tracks internal sharing of recordings between users (independent of teams).""" + + __tablename__ = 'internal_share' + + id = db.Column(db.Integer, primary_key=True) + recording_id = db.Column(db.Integer, db.ForeignKey('recording.id', ondelete='CASCADE'), nullable=False) + owner_id = db.Column(db.Integer, db.ForeignKey('user.id', ondelete='CASCADE'), nullable=False) # User who shared + shared_with_user_id = db.Column(db.Integer, db.ForeignKey('user.id', ondelete='CASCADE'), nullable=False) # User it was shared with + + # Permissions + can_edit = db.Column(db.Boolean, default=False) # Can edit notes/metadata + can_reshare = db.Column(db.Boolean, default=False) # Can share with others + + # Source tracking for share cleanup + source_type = db.Column(db.String(20), default='manual') # 'manual' or 'group_tag' + source_tag_id = db.Column(db.Integer, db.ForeignKey('tag.id', ondelete='SET NULL'), nullable=True) + + created_at = db.Column(db.DateTime, default=datetime.utcnow) + + # Relationship for source tag + source_tag = db.relationship('Tag', foreign_keys=[source_tag_id], backref=db.backref('created_shares', lazy=True)) + + # Relationships + recording = db.relationship('Recording', backref=db.backref('internal_shares', lazy=True, cascade='all, delete-orphan')) + owner = db.relationship('User', foreign_keys=[owner_id], backref=db.backref('shared_recordings', lazy=True)) + shared_with = db.relationship('User', foreign_keys=[shared_with_user_id], backref=db.backref('received_shares', lazy=True)) + + # Unique constraint: can't share same recording with same user twice + __table_args__ = (db.UniqueConstraint('recording_id', 'shared_with_user_id', name='unique_recording_share'),) + + def to_dict(self): + """Convert model to dictionary representation.""" + return { + 'id': self.id, + 'recording_id': self.recording_id, + 'owner_id': self.owner_id, + 'owner_username': self.owner.username if SHOW_USERNAMES_IN_UI else None, + 'user_id': self.shared_with_user_id, # For frontend compatibility + 'username': self.shared_with.username, # Always include username + 'can_edit': self.can_edit, + 'can_reshare': self.can_reshare, + 'source_type': self.source_type, + 'source_tag_id': self.source_tag_id, + 'created_at': self.created_at.isoformat() if self.created_at else None + } + + @staticmethod + def get_user_max_permissions(recording, user): + """ + Get the maximum permissions a user can grant for a recording. + + Args: + recording: Recording object + user: User object attempting to share + + Returns: + Dict with 'can_edit' and 'can_reshare' boolean flags + """ + # Owner has unlimited permissions + if recording.user_id == user.id: + return {'can_edit': True, 'can_reshare': True} + + # Get user's share for this recording + user_share = InternalShare.query.filter_by( + recording_id=recording.id, + shared_with_user_id=user.id + ).first() + + if not user_share: + # User has no access + return {'can_edit': False, 'can_reshare': False} + + # User can only grant what they have + return { + 'can_edit': user_share.can_edit, + 'can_reshare': user_share.can_reshare + } + + @staticmethod + def validate_reshare_permissions(recording, grantor_user, requested_permissions): + """ + Validate that a user can grant the requested permissions. + + Args: + recording: Recording object being shared + grantor_user: User attempting to share (current_user) + requested_permissions: Dict with 'can_edit' and 'can_reshare' flags + + Returns: + Tuple of (is_valid: bool, error_message: str or None) + """ + # Owner can grant anything + if recording.user_id == grantor_user.id: + return True, None + + # Get grantor's permissions + max_permissions = InternalShare.get_user_max_permissions(recording, grantor_user) + + # Validate edit permission + if requested_permissions.get('can_edit', False) and not max_permissions['can_edit']: + return False, "You cannot grant edit permission because you do not have edit access" + + # Validate reshare permission + if requested_permissions.get('can_reshare', False) and not max_permissions['can_reshare']: + return False, "You cannot grant reshare permission because you do not have reshare access" + + return True, None + + @staticmethod + def find_downstream_shares(recording_id, user_id): + """ + Find all shares created by a specific user for a recording. + Used for cascade revocation. + + Args: + recording_id: ID of the recording + user_id: ID of the user whose downstream shares to find + + Returns: + List of InternalShare objects + """ + return InternalShare.query.filter_by( + recording_id=recording_id, + owner_id=user_id + ).all() + + @staticmethod + def has_alternate_access_path(recording_id, user_id, excluding_grantor_id=None): + """ + Check if a user has alternate access to a recording through other shares. + Used to prevent cascade revocation when user has multiple access paths (diamond pattern). + + Args: + recording_id: ID of the recording + user_id: ID of the user to check + excluding_grantor_id: Exclude shares from this grantor (the one being revoked) + + Returns: + Boolean - True if user has alternate access path + """ + query = InternalShare.query.filter( + InternalShare.recording_id == recording_id, + InternalShare.shared_with_user_id == user_id + ) + + if excluding_grantor_id is not None: + query = query.filter(InternalShare.owner_id != excluding_grantor_id) + + return query.count() > 0 + + +class SharedRecordingState(db.Model): + """Tracks per-user state for shared recordings (notes, highlights, etc).""" + + __tablename__ = 'shared_recording_state' + + id = db.Column(db.Integer, primary_key=True) + recording_id = db.Column(db.Integer, db.ForeignKey('recording.id', ondelete='CASCADE'), nullable=False) + user_id = db.Column(db.Integer, db.ForeignKey('user.id', ondelete='CASCADE'), nullable=False) + + # User-specific state + personal_notes = db.Column(db.Text, nullable=True) # Private notes only this user can see + is_inbox = db.Column(db.Boolean, default=True) # User's personal inbox status + is_highlighted = db.Column(db.Boolean, default=False) # User's personal highlight/favorite status + last_viewed = db.Column(db.DateTime, default=datetime.utcnow) + + created_at = db.Column(db.DateTime, default=datetime.utcnow) + updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + # Relationships + recording = db.relationship('Recording', backref=db.backref('user_states', lazy=True, cascade='all, delete-orphan')) + user = db.relationship('User', backref=db.backref('recording_states', lazy=True)) + + # Unique constraint: one state per user per recording + __table_args__ = (db.UniqueConstraint('recording_id', 'user_id', name='unique_user_recording_state'),) + + def to_dict(self): + """Convert model to dictionary representation.""" + return { + 'id': self.id, + 'recording_id': self.recording_id, + 'user_id': self.user_id, + 'personal_notes': self.personal_notes, + 'is_inbox': self.is_inbox, + 'is_highlighted': self.is_highlighted, + 'last_viewed': self.last_viewed.isoformat() if self.last_viewed else None, + 'created_at': self.created_at.isoformat() if self.created_at else None, + 'updated_at': self.updated_at.isoformat() if self.updated_at else None + } diff --git a/src/models/speaker_snippet.py b/src/models/speaker_snippet.py new file mode 100644 index 0000000..53d7779 --- /dev/null +++ b/src/models/speaker_snippet.py @@ -0,0 +1,43 @@ +""" +SpeakerSnippet database model. + +This module defines the SpeakerSnippet model for storing example quotes/snippets +from recordings that feature specific speakers. These snippets provide context +when viewing speaker profiles and help users verify speaker identifications. +""" + +from datetime import datetime +from src.database import db + + +class SpeakerSnippet(db.Model): + """Model for storing representative speech snippets from speakers.""" + + __tablename__ = 'speaker_snippet' + + id = db.Column(db.Integer, primary_key=True) + speaker_id = db.Column(db.Integer, db.ForeignKey('speaker.id', ondelete='CASCADE'), nullable=False) + recording_id = db.Column(db.Integer, db.ForeignKey('recording.id', ondelete='CASCADE'), nullable=False) + segment_index = db.Column(db.Integer, nullable=False) # Index in the transcript + text_snippet = db.Column(db.String(200), nullable=False) # The actual quote + timestamp = db.Column(db.Float, nullable=True) # Seconds into the recording + created_at = db.Column(db.DateTime, default=datetime.utcnow) + + # Relationships + speaker = db.relationship('Speaker', backref=db.backref('snippets', lazy=True, cascade='all, delete-orphan')) + recording = db.relationship('Recording', backref=db.backref('speaker_snippets', lazy=True, cascade='all, delete-orphan')) + + def to_dict(self): + """Convert model to dictionary representation.""" + return { + 'id': self.id, + 'speaker_id': self.speaker_id, + 'recording_id': self.recording_id, + 'text': self.text_snippet, + 'timestamp': self.timestamp, + 'recording_title': self.recording.title if self.recording else 'Unknown', + 'created_at': self.created_at.isoformat() if self.created_at else None + } + + def __repr__(self): + return f"SpeakerSnippet(speaker_id={self.speaker_id}, recording_id={self.recording_id}, text='{self.text_snippet[:30]}...')" diff --git a/src/models/system.py b/src/models/system.py new file mode 100644 index 0000000..a3aae98 --- /dev/null +++ b/src/models/system.py @@ -0,0 +1,77 @@ +""" +SystemSetting model for application configuration. + +This module defines the SystemSetting model for storing +dynamic system configuration in the database. +""" + +from datetime import datetime +from src.database import db + + +class SystemSetting(db.Model): + """Stores system-wide configuration settings.""" + + id = db.Column(db.Integer, primary_key=True) + key = db.Column(db.String(100), unique=True, nullable=False) + value = db.Column(db.Text, nullable=True) + description = db.Column(db.Text, nullable=True) + setting_type = db.Column(db.String(50), nullable=False, default='string') # string, integer, boolean, float + created_at = db.Column(db.DateTime, default=datetime.utcnow) + updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + def to_dict(self): + """Convert model to dictionary representation.""" + return { + 'id': self.id, + 'key': self.key, + 'value': self.value, + 'description': self.description, + 'setting_type': self.setting_type, + 'created_at': self.created_at, + 'updated_at': self.updated_at + } + + @staticmethod + def get_setting(key, default_value=None): + """Get a system setting value by key, with optional default.""" + setting = SystemSetting.query.filter_by(key=key).first() + if setting: + # Convert value based on type + if setting.setting_type == 'integer': + try: + return int(setting.value) if setting.value is not None else default_value + except (ValueError, TypeError): + return default_value + elif setting.setting_type == 'boolean': + return setting.value.lower() in ('true', '1', 'yes') if setting.value else default_value + elif setting.setting_type == 'float': + try: + return float(setting.value) if setting.value is not None else default_value + except (ValueError, TypeError): + return default_value + else: # string + return setting.value if setting.value is not None else default_value + return default_value + + @staticmethod + def set_setting(key, value, description=None, setting_type='string'): + """Set a system setting value.""" + setting = SystemSetting.query.filter_by(key=key).first() + if setting: + setting.value = str(value) if value is not None else None + setting.updated_at = datetime.utcnow() + if description: + setting.description = description + if setting_type: + setting.setting_type = setting_type + else: + setting = SystemSetting( + key=key, + value=str(value) if value is not None else None, + description=description, + setting_type=setting_type + ) + db.session.add(setting) + db.session.commit() + return setting diff --git a/src/models/templates.py b/src/models/templates.py new file mode 100644 index 0000000..1d98da1 --- /dev/null +++ b/src/models/templates.py @@ -0,0 +1,37 @@ +""" +TranscriptTemplate model for user-defined transcript formatting. + +This module defines the TranscriptTemplate model for storing +custom templates for transcript formatting. +""" + +from datetime import datetime +from src.database import db + + +class TranscriptTemplate(db.Model): + """Stores user-defined templates for transcript formatting.""" + + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + name = db.Column(db.String(100), nullable=False) + template = db.Column(db.Text, nullable=False) + description = db.Column(db.String(500), nullable=True) + is_default = db.Column(db.Boolean, default=False) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + # Relationships + user = db.relationship('User', backref=db.backref('transcript_templates', lazy=True, cascade='all, delete-orphan')) + + def to_dict(self): + """Convert model to dictionary representation.""" + return { + 'id': self.id, + 'name': self.name, + 'template': self.template, + 'description': self.description, + 'is_default': self.is_default, + 'created_at': self.created_at.isoformat() if self.created_at else None, + 'updated_at': self.updated_at.isoformat() if self.updated_at else None + } diff --git a/src/models/token_usage.py b/src/models/token_usage.py new file mode 100644 index 0000000..0868fff --- /dev/null +++ b/src/models/token_usage.py @@ -0,0 +1,44 @@ +""" +Token usage tracking model for monitoring LLM API consumption. +""" + +from datetime import datetime, date +from src.database import db + + +class TokenUsage(db.Model): + """Daily token usage aggregates per user per operation type.""" + __tablename__ = 'token_usage' + + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + date = db.Column(db.Date, nullable=False, default=date.today) + operation_type = db.Column(db.String(50), nullable=False) + + # Token counts (from API response.usage) + prompt_tokens = db.Column(db.Integer, default=0) + completion_tokens = db.Column(db.Integer, default=0) + total_tokens = db.Column(db.Integer, default=0) + + # Cost tracking (OpenRouter provides this) + cost = db.Column(db.Float, default=0.0) + + # Request count for this day/operation + request_count = db.Column(db.Integer, default=0) + + # Model info + model_name = db.Column(db.String(100), nullable=True) + + created_at = db.Column(db.DateTime, default=datetime.utcnow) + updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + # Relationships + user = db.relationship('User', backref=db.backref('token_usage', lazy='dynamic')) + + __table_args__ = ( + db.UniqueConstraint('user_id', 'date', 'operation_type', name='uq_user_date_op'), + db.Index('idx_token_user_date', 'user_id', 'date'), + ) + + def __repr__(self): + return f'' diff --git a/src/models/transcription_usage.py b/src/models/transcription_usage.py new file mode 100644 index 0000000..6697dc2 --- /dev/null +++ b/src/models/transcription_usage.py @@ -0,0 +1,42 @@ +""" +Transcription usage tracking model for monitoring audio transcription consumption. +""" + +from datetime import datetime, date +from src.database import db + + +class TranscriptionUsage(db.Model): + """Daily transcription usage aggregates per user per connector type.""" + __tablename__ = 'transcription_usage' + + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + date = db.Column(db.Date, nullable=False, default=date.today) + connector_type = db.Column(db.String(50), nullable=False) # 'openai_whisper', 'openai_transcribe', 'asr_endpoint' + + # Audio duration tracking (in seconds for precision) + audio_duration_seconds = db.Column(db.Integer, default=0) + + # Cost tracking ($0 for self-hosted ASR) + estimated_cost = db.Column(db.Float, default=0.0) + + # Request count for this day/connector + request_count = db.Column(db.Integer, default=0) + + # Model info (e.g., 'whisper-1', 'gpt-4o-transcribe', 'asr-endpoint') + model_name = db.Column(db.String(100), nullable=True) + + created_at = db.Column(db.DateTime, default=datetime.utcnow) + updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + # Relationships + user = db.relationship('User', backref=db.backref('transcription_usage', lazy='dynamic')) + + __table_args__ = ( + db.UniqueConstraint('user_id', 'date', 'connector_type', name='uq_user_date_connector'), + db.Index('idx_transcription_user_date', 'user_id', 'date'), + ) + + def __repr__(self): + return f'' diff --git a/src/models/user.py b/src/models/user.py new file mode 100644 index 0000000..364334a --- /dev/null +++ b/src/models/user.py @@ -0,0 +1,98 @@ +""" +User and Speaker database models. + +This module defines the User model for authentication and user profiles, +and the Speaker model for tracking speaker profiles used in diarization. +""" + +from datetime import datetime +from flask_login import UserMixin +from src.database import db + + +class User(db.Model, UserMixin): + """User model for authentication and profile management.""" + + id = db.Column(db.Integer, primary_key=True) + username = db.Column(db.String(20), unique=True, nullable=False) + email = db.Column(db.String(120), unique=True, nullable=False) + password = db.Column(db.String(60), nullable=True) + sso_provider = db.Column(db.String(100), nullable=True) + sso_subject = db.Column(db.String(255), unique=True, nullable=True) + is_admin = db.Column(db.Boolean, default=False) + can_share_publicly = db.Column(db.Boolean, default=True) # Permission to create public share links + recordings = db.relationship('Recording', backref='owner', lazy=True) + transcription_language = db.Column(db.String(10), nullable=True) # For ISO 639-1 codes + output_language = db.Column(db.String(50), nullable=True) # For full language names like "Spanish" + ui_language = db.Column(db.String(10), nullable=True, default='en') # For UI language preference (en, es, fr, zh) + summary_prompt = db.Column(db.Text, nullable=True) + extract_events = db.Column(db.Boolean, default=False) # Enable event extraction from transcripts + name = db.Column(db.String(100), nullable=True) + job_title = db.Column(db.String(100), nullable=True) + company = db.Column(db.String(100), nullable=True) + diarize = db.Column(db.Boolean, default=False) + + # Default naming template for title generation + default_naming_template_id = db.Column(db.Integer, db.ForeignKey('naming_template.id', ondelete='SET NULL'), nullable=True) + default_naming_template = db.relationship('NamingTemplate', foreign_keys=[default_naming_template_id]) + + # Token budget (None = unlimited) + monthly_token_budget = db.Column(db.Integer, nullable=True) + + # Transcription budget in seconds (None = unlimited) + monthly_transcription_budget = db.Column(db.Integer, nullable=True) + + # Email verification fields + email_verified = db.Column(db.Boolean, default=False) + email_verification_token = db.Column(db.String(200), nullable=True, index=True) + email_verification_sent_at = db.Column(db.DateTime, nullable=True) + + # Password reset fields + password_reset_token = db.Column(db.String(200), nullable=True, index=True) + password_reset_sent_at = db.Column(db.DateTime, nullable=True) + + # Auto speaker labelling settings + auto_speaker_labelling = db.Column(db.Boolean, default=False) # Enable auto-labelling when voice confidence exceeds threshold + auto_speaker_labelling_threshold = db.Column(db.String(10), nullable=True, default='medium') # 'low', 'medium', 'high' + + # Auto summarization setting (user can disable if admin hasn't globally disabled) + auto_summarization = db.Column(db.Boolean, default=True) + + # Transcription hints (hotwords and initial prompt for improving ASR accuracy) + transcription_hotwords = db.Column(db.Text, nullable=True) + transcription_initial_prompt = db.Column(db.Text, nullable=True) + + def __repr__(self): + return f"User('{self.username}', '{self.email}')" + + +class Speaker(db.Model): + """Speaker model for tracking voice profiles used in diarization.""" + + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(100), nullable=False) + user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + last_used = db.Column(db.DateTime, default=datetime.utcnow) + use_count = db.Column(db.Integer, default=1) + + # Voice embedding fields (256 dimensions from WhisperX) + average_embedding = db.Column(db.LargeBinary, nullable=True) # Binary numpy array (256 × 4 bytes = 1024 bytes) + embeddings_history = db.Column(db.JSON, nullable=True) # List of metadata: [{recording_id, timestamp, similarity}, ...] + embedding_count = db.Column(db.Integer, default=0) # Number of embeddings collected + confidence_score = db.Column(db.Float, nullable=True) # 0-1 score based on embedding consistency + + # Relationship to user + user = db.relationship('User', backref=db.backref('speakers', lazy=True, cascade='all, delete-orphan')) + + def to_dict(self): + """Convert model to dictionary representation.""" + return { + 'id': self.id, + 'name': self.name, + 'created_at': self.created_at, + 'last_used': self.last_used, + 'use_count': self.use_count, + 'embedding_count': self.embedding_count, + 'confidence_score': self.confidence_score + } diff --git a/src/services/__init__.py b/src/services/__init__.py new file mode 100644 index 0000000..4aea0de --- /dev/null +++ b/src/services/__init__.py @@ -0,0 +1,34 @@ +""" +Service layer for business logic. +""" + +from .embeddings import * +from .llm import * +from .document import * +from .retention import * + +__all__ = [ + # Embedding services + 'get_embedding_model', + 'chunk_transcription', + 'generate_embeddings', + 'serialize_embedding', + 'deserialize_embedding', + 'get_accessible_recording_ids', + 'process_recording_chunks', + 'basic_text_search_chunks', + 'semantic_search_chunks', + # LLM services + 'is_gpt5_model', + 'is_using_openai_api', + 'call_llm_completion', + 'call_chat_completion', + 'chat_client', + 'format_api_error_message', + # Document services + 'process_markdown_to_docx', + # Retention services + 'is_recording_exempt_from_deletion', + 'get_retention_days_for_recording', + 'process_auto_deletion', +] diff --git a/src/services/audit.py b/src/services/audit.py new file mode 100644 index 0000000..7c673d5 --- /dev/null +++ b/src/services/audit.py @@ -0,0 +1,211 @@ +""" +Central audit service for Loi 25 compliance. + +Wraps AccessLog and AuthLog with request context helpers. +All logging is gated behind ENABLE_AUDIT_LOG env var. + +NOTE: ENABLE_AUDIT_LOG is read once at import time. Changing the env var +requires an application restart to take effect. + +NOTE: Audit helpers do NOT commit the session — the caller's transaction +will persist the log entry when it commits. This avoids interfering with +ongoing transactions (e.g. a delete operation that audits then deletes). +""" + +import os +import logging +from datetime import datetime, timedelta +from flask import request, has_request_context +from flask_login import current_user + +from src.database import db +from src.models.access_log import AccessLog +from src.models.auth_log import AuthLog + +logger = logging.getLogger(__name__) + +# Read once at import — requires restart to change. +ENABLE_AUDIT_LOG = os.environ.get('ENABLE_AUDIT_LOG', 'false').lower() == 'true' + + +def is_audit_enabled(): + """Check if audit logging is enabled.""" + return ENABLE_AUDIT_LOG + + +def _get_request_context(): + """Extract IP address and user agent from current request.""" + if not has_request_context(): + return None, None + ip = request.remote_addr + ua = request.headers.get('User-Agent', '')[:500] + return ip, ua + + +def _get_current_user_id(): + """Get current user ID if authenticated.""" + if has_request_context() and current_user and current_user.is_authenticated: + return current_user.id + return None + + +# --- Access logging helpers --- + +_DEDUP_WINDOW_SECONDS = 300 # 5 minutes + + +def _is_recent_duplicate(action, resource_type, resource_id, user_id): + """Return True if the same user already logged this action on this resource in the last 5 min. + + Prevents unbounded log growth for high-frequency read operations (e.g. view on every GET). + """ + if user_id is None or resource_id is None: + return False + cutoff = datetime.utcnow() - timedelta(seconds=_DEDUP_WINDOW_SECONDS) + return AccessLog.query.filter( + AccessLog.user_id == user_id, + AccessLog.action == action, + AccessLog.resource_type == resource_type, + AccessLog.resource_id == resource_id, + AccessLog.timestamp >= cutoff, + ).first() is not None + + +def audit_access(action, resource_type, resource_id=None, user_id=None, status='success', details=None): + """Log a data access event if audit is enabled. + + Does NOT commit — the log is added to the current session and will be + persisted when the caller (or Flask teardown) commits. + + View events are deduplicated: the same user viewing the same resource within + 5 minutes is logged only once to avoid unbounded log growth. + """ + if not ENABLE_AUDIT_LOG: + return None + try: + ip, ua = _get_request_context() + if user_id is None: + user_id = _get_current_user_id() + if action == 'view' and _is_recent_duplicate(action, resource_type, resource_id, user_id): + return None + log = AccessLog.log_access( + action=action, + resource_type=resource_type, + resource_id=resource_id, + user_id=user_id, + status=status, + details=details, + ip_address=ip, + user_agent=ua, + ) + return log + except Exception as e: + logger.warning(f"Failed to write access audit log: {e}") + return None + + +def audit_view(resource_type, resource_id, **kwargs): + """Log a view access.""" + return audit_access('view', resource_type, resource_id, **kwargs) + + +def audit_download(resource_type, resource_id, **kwargs): + """Log a download access.""" + return audit_access('download', resource_type, resource_id, **kwargs) + + +def audit_edit(resource_type, resource_id, **kwargs): + """Log an edit.""" + return audit_access('edit', resource_type, resource_id, **kwargs) + + +def audit_delete(resource_type, resource_id, **kwargs): + """Log a deletion.""" + return audit_access('delete', resource_type, resource_id, **kwargs) + + +def audit_export(resource_type, resource_id, **kwargs): + """Log a data export.""" + return audit_access('export', resource_type, resource_id, **kwargs) + + +# --- Auth logging helpers --- +# Auth events (login/logout/failed) are standalone operations, so they +# commit their own transaction since the caller typically redirects after. + +def _audit_auth(func, *args, **kwargs): + """Wrapper for auth audit helpers that commits independently.""" + if not ENABLE_AUDIT_LOG: + return None + try: + ip, ua = _get_request_context() + log = func(*args, ip_address=ip, user_agent=ua, **kwargs) + db.session.commit() + return log + except Exception as e: + logger.warning(f"Failed to write auth audit log: {e}") + db.session.rollback() + return None + + +def audit_login(user_id, details=None): + """Log a successful login.""" + return _audit_auth(AuthLog.log_login, user_id, details=details) + + +def audit_logout(user_id=None): + """Log a logout.""" + if user_id is None: + user_id = _get_current_user_id() + return _audit_auth(AuthLog.log_logout, user_id) + + +def audit_failed_login(details=None): + """Log a failed login.""" + return _audit_auth(AuthLog.log_failed_login, details=details) + + +def audit_register(user_id): + """Log a registration.""" + return _audit_auth(AuthLog.log_register, user_id) + + +def audit_password_change(user_id, details=None): + """Log a password change.""" + return _audit_auth(AuthLog.log_password_change, user_id, details=details) + + +def audit_password_reset(user_id): + """Log a password reset.""" + return _audit_auth(AuthLog.log_password_reset, user_id) + + +def audit_sso_login(user_id, details=None): + """Log an SSO login.""" + return _audit_auth(AuthLog.log_sso_login, user_id, details=details) + + +# --- Query helpers for admin --- + +def get_access_logs(page=1, per_page=50, user_id=None, resource_type=None, resource_id=None, action=None): + """Query access logs with pagination and filters.""" + query = AccessLog.query.order_by(AccessLog.timestamp.desc()) + if user_id is not None: + query = query.filter_by(user_id=user_id) + if resource_type is not None: + query = query.filter_by(resource_type=resource_type) + if resource_id is not None: + query = query.filter_by(resource_id=resource_id) + if action is not None: + query = query.filter_by(action=action) + return query.paginate(page=page, per_page=per_page, error_out=False) + + +def get_auth_logs(page=1, per_page=50, user_id=None, action=None): + """Query auth logs with pagination and filters.""" + query = AuthLog.query.order_by(AuthLog.timestamp.desc()) + if user_id is not None: + query = query.filter_by(user_id=user_id) + if action is not None: + query = query.filter_by(action=action) + return query.paginate(page=page, per_page=per_page, error_out=False) diff --git a/src/services/calendar.py b/src/services/calendar.py new file mode 100644 index 0000000..9266b43 --- /dev/null +++ b/src/services/calendar.py @@ -0,0 +1,102 @@ +""" +Calendar/ICS file generation services. +""" + +import json +import uuid +from datetime import datetime, timedelta + + +def generate_ics_content(event): + """Generate ICS calendar file content for an event.""" + import uuid + from datetime import datetime, timedelta + + # Generate unique ID for the event + uid = f"{event.id}-{uuid.uuid4()}@speakr.app" + + # Format dates in iCalendar format (YYYYMMDDTHHMMSS) + def format_ical_date(dt): + if dt: + return dt.strftime('%Y%m%dT%H%M%S') + return None + + # Start building ICS content + lines = [ + 'BEGIN:VCALENDAR', + 'VERSION:2.0', + 'PRODID:-//Speakr//Event Export//EN', + 'CALSCALE:GREGORIAN', + 'METHOD:PUBLISH', + 'BEGIN:VEVENT', + f'UID:{uid}', + f'DTSTAMP:{format_ical_date(datetime.utcnow())}', + ] + + # Add event details + if event.start_datetime: + lines.append(f'DTSTART:{format_ical_date(event.start_datetime)}') + + if event.end_datetime: + lines.append(f'DTEND:{format_ical_date(event.end_datetime)}') + elif event.start_datetime: + # If no end time, default to 1 hour after start + end_time = event.start_datetime + timedelta(hours=1) + lines.append(f'DTEND:{format_ical_date(end_time)}') + + # Add title and description + lines.append(f'SUMMARY:{escape_ical_text(event.title)}') + + if event.description: + lines.append(f'DESCRIPTION:{escape_ical_text(event.description)}') + + # Add location if available + if event.location: + lines.append(f'LOCATION:{escape_ical_text(event.location)}') + + # Add attendees if available + if event.attendees: + try: + attendees_list = json.loads(event.attendees) + for attendee in attendees_list: + if attendee: + lines.append(f'ATTENDEE:CN={escape_ical_text(attendee)}:mailto:{attendee.replace(" ", ".").lower()}@example.com') + except: + pass + + # Add reminder/alarm if specified + if event.reminder_minutes and event.reminder_minutes > 0: + lines.extend([ + 'BEGIN:VALARM', + 'TRIGGER:-PT{}M'.format(event.reminder_minutes), + 'ACTION:DISPLAY', + f'DESCRIPTION:Reminder: {escape_ical_text(event.title)}', + 'END:VALARM' + ]) + + # Close event and calendar + lines.extend([ + 'STATUS:CONFIRMED', + 'TRANSP:OPAQUE', + 'END:VEVENT', + 'END:VCALENDAR' + ]) + + return '\r\n'.join(lines) + + + +def escape_ical_text(text): + """Escape special characters for iCalendar format.""" + if not text: + return '' + # Escape special characters + text = str(text) + text = text.replace('\\', '\\\\') + text = text.replace(',', '\\,') + text = text.replace(';', '\\;') + text = text.replace('\n', '\\n') + return text + + + diff --git a/src/services/document.py b/src/services/document.py new file mode 100644 index 0000000..aae988a --- /dev/null +++ b/src/services/document.py @@ -0,0 +1,296 @@ +""" +Document processing and conversion services. +""" + +import re +from docx import Document +from docx.shared import Pt, RGBColor + + + +def process_markdown_to_docx(doc, content): + """Convert markdown content to properly formatted Word document elements. + + Supports: + - Tables (markdown pipe tables) + - Headings (# ## ###) + - Bold text (**text**) + - Italic text (*text* or _text_) + - Bold italic (***text***) + - Inline code (`code`) + - Code blocks (```code```) + - Strikethrough (~~text~~) + - Links ([text](url)) + - Bullet lists (- or *) + - Numbered lists (1. 2. 3.) + - Horizontal rules (--- or ***) + """ + from docx.shared import RGBColor, Pt + from docx.enum.text import WD_PARAGRAPH_ALIGNMENT + from docx.oxml.ns import qn + import re + + def ensure_unicode_font(run, text): + """Ensure the run uses a font that supports the characters in the text.""" + # Check if text contains non-ASCII characters + try: + text.encode('ascii') + # Text is pure ASCII, no special font needed + except UnicodeEncodeError: + # Text contains non-ASCII characters, use a font with better Unicode support + # Use Arial for broad compatibility - it has good Unicode support on most systems + run.font.name = 'Arial' + # Set the East Asian font for CJK (Chinese, Japanese, Korean) text + # This ensures proper rendering in Word + r = run._element + r.rPr.rFonts.set(qn('w:eastAsia'), 'Arial') + return run + + def add_formatted_run(paragraph, text): + """Add a run with inline formatting to a paragraph.""" + if not text: + return + + # Pattern for all inline formatting + # Order matters: check triple asterisk before double/single + patterns = [ + (r'\*\*\*(.*?)\*\*\*', lambda p, t: (lambda r: (setattr(r, 'bold', True), setattr(r, 'italic', True), ensure_unicode_font(r, t)))(p.add_run(t))), # Bold italic + (r'\*\*(.*?)\*\*', lambda p, t: (lambda r: (setattr(r, 'bold', True), ensure_unicode_font(r, t)))(p.add_run(t))), # Bold + (r'(? 0: + run = paragraph.add_run(remaining_text[:earliest_pos]) + ensure_unicode_font(run, remaining_text[:earliest_pos]) + + # Apply formatting for the matched text + if '[' in earliest_match.group(0) and '](' in earliest_match.group(0): + # Special handling for links (two groups) + matched_pattern(paragraph, earliest_match.group(1), earliest_match.group(2)) + else: + matched_pattern(paragraph, earliest_match.group(1)) + + # Continue with remaining text + remaining_text = remaining_text[earliest_match.end():] + else: + # No more patterns, add the rest as plain text + run = paragraph.add_run(remaining_text) + ensure_unicode_font(run, remaining_text) + break + + def parse_table(lines, start_idx): + """Parse a markdown table starting at the given index.""" + if start_idx >= len(lines): + return None, start_idx + + # Check if this looks like a table + if '|' not in lines[start_idx]: + return None, start_idx + + table_data = [] + idx = start_idx + + while idx < len(lines) and '|' in lines[idx]: + # Skip separator lines + if re.match(r'^[\s\|\-:]+$', lines[idx]): + idx += 1 + continue + + # Parse cells + cells = [cell.strip() for cell in lines[idx].split('|')] + # Remove empty cells at start and end + if cells and not cells[0]: + cells = cells[1:] + if cells and not cells[-1]: + cells = cells[:-1] + + if cells: + table_data.append(cells) + idx += 1 + + if table_data: + return table_data, idx + return None, start_idx + + # Split content into lines + lines = content.split('\n') + i = 0 + in_code_block = False + code_block_content = [] + + while i < len(lines): + line = lines[i] + + # Handle code blocks + if line.strip().startswith('```'): + if not in_code_block: + in_code_block = True + code_block_content = [] + else: + # End of code block - add it as preformatted text + in_code_block = False + if code_block_content: + p = doc.add_paragraph() + p.style = 'Normal' + code_text = '\n'.join(code_block_content) + run = p.add_run(code_text) + run.font.name = 'Courier New' + run.font.size = Pt(10) + run.font.color.rgb = RGBColor(64, 64, 64) + # Check if we need Unicode support for code blocks + try: + code_text.encode('ascii') + except UnicodeEncodeError: + r = run._element + r.rPr.rFonts.set(qn('w:eastAsia'), 'Consolas') + i += 1 + continue + + if in_code_block: + code_block_content.append(line) + i += 1 + continue + + # Check for table + table_data, end_idx = parse_table(lines, i) + if table_data: + # Create Word table + table = doc.add_table(rows=len(table_data), cols=len(table_data[0])) + table.style = 'Table Grid' + + # Populate table + for row_idx, row_data in enumerate(table_data): + for col_idx, cell_text in enumerate(row_data): + if col_idx < len(table.rows[row_idx].cells): + cell = table.rows[row_idx].cells[col_idx] + # Clear existing paragraphs and add new one + cell.text = "" + p = cell.add_paragraph() + add_formatted_run(p, cell_text) + # Make header row bold + if row_idx == 0: + for run in p.runs: + run.bold = True + + doc.add_paragraph('') # Space after table + i = end_idx + continue + + line = line.rstrip() + + # Skip empty lines + if not line: + doc.add_paragraph('') + i += 1 + continue + + # Horizontal rule + if re.match(r'^(\*{3,}|-{3,}|_{3,})$', line.strip()): + p = doc.add_paragraph('─' * 50) + p.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER + i += 1 + continue + + # Headings + if line.startswith('# '): + doc.add_heading(line[2:], 1) + elif line.startswith('## '): + doc.add_heading(line[3:], 2) + elif line.startswith('### '): + doc.add_heading(line[4:], 3) + elif line.startswith('#### '): + doc.add_heading(line[5:], 4) + # Bullet points + elif line.lstrip().startswith('- ') or line.lstrip().startswith('* '): + # Get the indentation level + indent = len(line) - len(line.lstrip()) + bullet_text = line.lstrip()[2:] + p = doc.add_paragraph(style='List Bullet') + # Add indentation if nested + if indent > 0: + p.paragraph_format.left_indent = Pt(indent * 10) + add_formatted_run(p, bullet_text) + # Numbered lists + elif re.match(r'^\s*\d+\.', line): + match = re.match(r'^(\s*)(\d+)\.\s*(.*)', line) + if match: + indent = len(match.group(1)) + list_text = match.group(3) + p = doc.add_paragraph(style='List Number') + if indent > 0: + p.paragraph_format.left_indent = Pt(indent * 10) + add_formatted_run(p, list_text) + # Blockquote + elif line.startswith('> '): + p = doc.add_paragraph() + p.paragraph_format.left_indent = Pt(30) + add_formatted_run(p, line[2:]) + # Add a gray color to indicate quote + for run in p.runs: + run.font.color.rgb = RGBColor(100, 100, 100) + else: + # Regular paragraph + p = doc.add_paragraph() + add_formatted_run(p, line) + + i += 1 + +# --- Database Models --- +# --- Database Models --- +# Models have been extracted to src/models/ and imported at the top of this file + +# --- Forms for Authentication --- +# --- Custom Password Validator --- +# password_check utility has been extracted to src/utils/security.py + + +# --- Blueprint Registration --- +# Import and register all blueprints for modular route organization + + + diff --git a/src/services/email.py b/src/services/email.py new file mode 100644 index 0000000..a5f84d0 --- /dev/null +++ b/src/services/email.py @@ -0,0 +1,443 @@ +""" +Email service for verification and password reset. + +This module provides email functionality using Python's built-in smtplib. +All email features are opt-in via environment variables. +""" + +import os +import smtplib +import logging +from email.mime.text import MIMEText +from email.mime.multipart import MIMEMultipart +from datetime import datetime, timedelta +from typing import Optional + +from itsdangerous import URLSafeTimedSerializer, SignatureExpired, BadSignature +from flask import current_app, url_for + +logger = logging.getLogger(__name__) + +# Token expiry times +EMAIL_VERIFICATION_EXPIRY = 24 * 60 * 60 # 24 hours in seconds +PASSWORD_RESET_EXPIRY = 1 * 60 * 60 # 1 hour in seconds + + +def get_email_config(): + """Get email configuration from environment variables.""" + return { + 'enabled': os.environ.get('ENABLE_EMAIL_VERIFICATION', 'false').lower() == 'true', + 'required': os.environ.get('REQUIRE_EMAIL_VERIFICATION', 'false').lower() == 'true', + 'smtp_host': os.environ.get('SMTP_HOST', ''), + 'smtp_port': int(os.environ.get('SMTP_PORT', '587')), + 'smtp_username': os.environ.get('SMTP_USERNAME', ''), + 'smtp_password': os.environ.get('SMTP_PASSWORD', ''), + 'smtp_use_tls': os.environ.get('SMTP_USE_TLS', 'true').lower() == 'true', + 'smtp_use_ssl': os.environ.get('SMTP_USE_SSL', 'false').lower() == 'true', + 'from_address': os.environ.get('SMTP_FROM_ADDRESS', 'noreply@yourdomain.com'), + 'from_name': os.environ.get('SMTP_FROM_NAME', 'Speakr'), + } + + +def is_email_verification_enabled() -> bool: + """Check if email verification is enabled.""" + return get_email_config()['enabled'] + + +def is_email_verification_required() -> bool: + """Check if email verification is required for login.""" + config = get_email_config() + return config['enabled'] and config['required'] + + +def is_smtp_configured() -> bool: + """Check if SMTP settings are properly configured.""" + config = get_email_config() + return bool(config['smtp_host'] and config['smtp_username'] and config['smtp_password']) + + +def get_serializer(salt: str) -> URLSafeTimedSerializer: + """Get a URL-safe timed serializer for token generation.""" + secret_key = current_app.config.get('SECRET_KEY', 'default-dev-key') + return URLSafeTimedSerializer(secret_key, salt=salt) + + +def generate_verification_token(user_id: int) -> str: + """Generate an email verification token.""" + serializer = get_serializer('email-verification') + return serializer.dumps(user_id) + + +def generate_password_reset_token(user_id: int) -> str: + """Generate a password reset token.""" + serializer = get_serializer('password-reset') + return serializer.dumps(user_id) + + +def verify_email_token(token: str) -> Optional[int]: + """ + Verify an email verification token. + + Returns the user_id if valid, None otherwise. + """ + serializer = get_serializer('email-verification') + try: + user_id = serializer.loads(token, max_age=EMAIL_VERIFICATION_EXPIRY) + return user_id + except SignatureExpired: + logger.warning("Email verification token expired") + return None + except BadSignature: + logger.warning("Invalid email verification token") + return None + + +def verify_reset_token(token: str) -> Optional[int]: + """ + Verify a password reset token. + + Returns the user_id if valid, None otherwise. + """ + serializer = get_serializer('password-reset') + try: + user_id = serializer.loads(token, max_age=PASSWORD_RESET_EXPIRY) + return user_id + except SignatureExpired: + logger.warning("Password reset token expired") + return None + except BadSignature: + logger.warning("Invalid password reset token") + return None + + +def _send_email(to_email: str, subject: str, html_body: str, text_body: str = None) -> bool: + """ + Send an email using SMTP. + + Returns True if successful, False otherwise. + """ + config = get_email_config() + + if not is_smtp_configured(): + logger.error("SMTP is not configured. Cannot send email.") + return False + + try: + msg = MIMEMultipart('alternative') + msg['Subject'] = subject + msg['From'] = f"{config['from_name']} <{config['from_address']}>" + msg['To'] = to_email + + # Add plain text version + if text_body: + part1 = MIMEText(text_body, 'plain') + msg.attach(part1) + + # Add HTML version + part2 = MIMEText(html_body, 'html') + msg.attach(part2) + + # Connect to SMTP server + if config['smtp_use_ssl']: + server = smtplib.SMTP_SSL(config['smtp_host'], config['smtp_port']) + else: + server = smtplib.SMTP(config['smtp_host'], config['smtp_port']) + if config['smtp_use_tls']: + server.starttls() + + server.login(config['smtp_username'], config['smtp_password']) + server.sendmail(config['from_address'], to_email, msg.as_string()) + server.quit() + + logger.info(f"Email sent successfully to {to_email}") + return True + + except smtplib.SMTPAuthenticationError as e: + logger.error(f"SMTP authentication failed: {e}") + return False + except smtplib.SMTPException as e: + logger.error(f"SMTP error sending email: {e}") + return False + except Exception as e: + logger.error(f"Error sending email: {e}") + return False + + +def _get_email_template(content_html: str, content_text: str, subject: str) -> tuple[str, str]: + """ + Wrap content in the Speakr email template. + + Returns (html_body, text_body) + """ + # Get the base URL for the logo + try: + logo_url = url_for('static', filename='img/icon-192x192.png', _external=True) + except RuntimeError: + # Outside of request context, use a placeholder + logo_url = "" + + html_body = f""" + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + +
+ + + + + + +
+ Speakr + +

Speakr

+
+
+

AI-Powered Audio Transcription

+
+
+ {content_html} +
+ + + + +
+

+ This email was sent by Speakr. If you have questions, please contact your administrator. +

+

+ © {datetime.utcnow().year} Speakr · AI-Powered Audio Transcription +

+
+
+
+ + +""" + + text_body = f""" +{subject} +{'=' * len(subject)} + +{content_text} + +--- +This email was sent by Speakr - AI-Powered Audio Transcription. +If you have questions, please contact your administrator. +""" + + return html_body, text_body + + +def send_verification_email(user) -> bool: + """ + Send a verification email to a user. + + Args: + user: User model instance + + Returns True if email was sent successfully, False otherwise. + """ + from src.database import db + + if not is_email_verification_enabled(): + logger.debug("Email verification is disabled") + return False + + if not is_smtp_configured(): + logger.warning("Cannot send verification email: SMTP not configured") + return False + + # Generate token and store it + token = generate_verification_token(user.id) + user.email_verification_token = token + user.email_verification_sent_at = datetime.utcnow() + db.session.commit() + + # Build verification URL + verify_url = url_for('auth.verify_email', token=token, _external=True) + + subject = "Verify your email address - Speakr" + + content_html = f""" +

Verify Your Email Address

+ +

Hi {user.username},

+ +

+ Welcome to Speakr! To complete your registration and start transcribing your audio recordings, please verify your email address. +

+ + + +

Or copy and paste this link into your browser:

+

{verify_url}

+ +
+

+ This link will expire in 24 hours.
+ If you didn't create an account on Speakr, you can safely ignore this email. +

+
+""" + + content_text = f"""Hi {user.username}, + +Welcome to Speakr! To complete your registration and start transcribing your audio recordings, please verify your email address. + +Click here to verify: {verify_url} + +This link will expire in 24 hours. + +If you didn't create an account on Speakr, you can safely ignore this email.""" + + html_body, text_body = _get_email_template(content_html, content_text, subject) + return _send_email(user.email, subject, html_body, text_body) + + +def send_password_reset_email(user) -> bool: + """ + Send a password reset email to a user. + + Args: + user: User model instance + + Returns True if email was sent successfully, False otherwise. + """ + from src.database import db + + if not is_smtp_configured(): + logger.warning("Cannot send password reset email: SMTP not configured") + return False + + # Generate token and store it + token = generate_password_reset_token(user.id) + user.password_reset_token = token + user.password_reset_sent_at = datetime.utcnow() + db.session.commit() + + # Build reset URL + reset_url = url_for('auth.reset_password', token=token, _external=True) + + subject = "Reset your password - Speakr" + + content_html = f""" +

Reset Your Password

+ +

Hi {user.username},

+ +

+ We received a request to reset your Speakr account password. Click the button below to create a new password. +

+ + + +

Or copy and paste this link into your browser:

+

{reset_url}

+ +
+ + + + + +
+ ⚠️ + +

+ This link will expire in 1 hour.
+ If you didn't request a password reset, you can safely ignore this email. Your password will remain unchanged. +

+
+
+""" + + content_text = f"""Hi {user.username}, + +We received a request to reset your Speakr account password. Click the link below to create a new password: + +{reset_url} + +This link will expire in 1 hour. + +If you didn't request a password reset, you can safely ignore this email. Your password will remain unchanged.""" + + html_body, text_body = _get_email_template(content_html, content_text, subject) + return _send_email(user.email, subject, html_body, text_body) + + +def can_resend_verification(user) -> tuple[bool, Optional[int]]: + """ + Check if a verification email can be resent. + + Returns (can_resend, seconds_until_can_resend) + """ + if not user.email_verification_sent_at: + return True, None + + # Allow resend after 60 seconds + cooldown = timedelta(seconds=60) + time_since_last = datetime.utcnow() - user.email_verification_sent_at + + if time_since_last >= cooldown: + return True, None + + remaining = (cooldown - time_since_last).seconds + return False, remaining + + +def can_resend_password_reset(user) -> tuple[bool, Optional[int]]: + """ + Check if a password reset email can be resent. + + Returns (can_resend, seconds_until_can_resend) + """ + if not user.password_reset_sent_at: + return True, None + + # Allow resend after 60 seconds + cooldown = timedelta(seconds=60) + time_since_last = datetime.utcnow() - user.password_reset_sent_at + + if time_since_last >= cooldown: + return True, None + + remaining = (cooldown - time_since_last).seconds + return False, remaining diff --git a/src/services/embeddings.py b/src/services/embeddings.py new file mode 100644 index 0000000..fb42a37 --- /dev/null +++ b/src/services/embeddings.py @@ -0,0 +1,422 @@ +""" +Embedding generation and semantic search services. +""" + +import os +import numpy as np +from flask import current_app +from sqlalchemy.orm import joinedload + +try: + from sentence_transformers import SentenceTransformer + from sklearn.metrics.pairwise import cosine_similarity + EMBEDDINGS_AVAILABLE = True +except ImportError: + EMBEDDINGS_AVAILABLE = False + cosine_similarity = None + +from src.database import db +from src.models import Recording, TranscriptChunk, InternalShare, RecordingTag + +ENABLE_INTERNAL_SHARING = os.environ.get('ENABLE_INTERNAL_SHARING', 'false').lower() == 'true' + +# Initialize embedding model (lazy loading) +_embedding_model = None + + + +def get_embedding_model(): + """Get or initialize the sentence transformer model.""" + global _embedding_model + + if not EMBEDDINGS_AVAILABLE: + return None + + if _embedding_model is None: + try: + _embedding_model = SentenceTransformer('all-MiniLM-L6-v2') + current_app.logger.info("Embedding model loaded successfully") + except Exception as e: + current_app.logger.error(f"Failed to load embedding model: {e}") + return None + return _embedding_model + + + +def chunk_transcription(transcription, max_chunk_length=500, overlap=50): + """ + Split transcription into overlapping chunks for better context retrieval. + + Args: + transcription (str): The full transcription text + max_chunk_length (int): Maximum characters per chunk + overlap (int): Character overlap between chunks + + Returns: + list: List of text chunks + """ + if not transcription or len(transcription) <= max_chunk_length: + return [transcription] if transcription else [] + + chunks = [] + start = 0 + + while start < len(transcription): + end = start + max_chunk_length + + # Try to break at sentence boundaries + if end < len(transcription): + # Look for sentence endings within the last 100 characters + sentence_end = -1 + for i in range(max(0, end - 100), end): + if transcription[i] in '.!?': + # Check if it's not an abbreviation + if i + 1 < len(transcription) and transcription[i + 1].isspace(): + sentence_end = i + 1 + + if sentence_end > start: + end = sentence_end + + chunk = transcription[start:end].strip() + if chunk: + chunks.append(chunk) + + # Move start position with overlap + start = max(start + 1, end - overlap) + + # Prevent infinite loop + if start >= len(transcription): + break + + return chunks + + + +def generate_embeddings(texts): + """ + Generate embeddings for a list of texts. + + Args: + texts (list): List of text strings + + Returns: + list: List of embedding vectors as numpy arrays, or empty list if embeddings unavailable + """ + if not EMBEDDINGS_AVAILABLE: + current_app.logger.warning("Embeddings not available - skipping embedding generation") + return [] + + model = get_embedding_model() + if not model or not texts: + return [] + + try: + embeddings = model.encode(texts) + return [embedding.astype(np.float32) for embedding in embeddings] + except Exception as e: + current_app.logger.error(f"Error generating embeddings: {e}") + return [] + + + +def serialize_embedding(embedding): + """Convert numpy array to binary for database storage.""" + if embedding is None or not EMBEDDINGS_AVAILABLE: + return None + return embedding.tobytes() + + + +def deserialize_embedding(binary_data): + """Convert binary data back to numpy array.""" + if binary_data is None or not EMBEDDINGS_AVAILABLE: + return None + return np.frombuffer(binary_data, dtype=np.float32) + + + +def get_accessible_recording_ids(user_id): + """ + Get all recording IDs that a user has access to. + + Includes: + - Recordings owned by the user + - Recordings shared with the user via InternalShare + - Recordings shared via group tags (if team membership exists) + + Args: + user_id (int): User ID to check access for + + Returns: + list: List of recording IDs the user can access + """ + accessible_ids = set() + + # 1. User's own recordings + own_recordings = db.session.query(Recording.id).filter_by(user_id=user_id).all() + accessible_ids.update([r.id for r in own_recordings]) + + # 2. Internally shared recordings + if ENABLE_INTERNAL_SHARING: + shared_recordings = db.session.query(InternalShare.recording_id).filter_by( + shared_with_user_id=user_id + ).all() + accessible_ids.update([r.recording_id for r in shared_recordings]) + + return list(accessible_ids) + + + +def process_recording_chunks(recording_id): + """ + Process a recording by creating chunks and generating embeddings. + This should be called after a recording is transcribed. + """ + try: + recording = db.session.get(Recording, recording_id) + if not recording or not recording.transcription: + return False + + # Delete existing chunks for this recording + TranscriptChunk.query.filter_by(recording_id=recording_id).delete() + + # Create chunks + chunks = chunk_transcription(recording.transcription) + + if not chunks: + return True + + # Generate embeddings + embeddings = generate_embeddings(chunks) + + # Store chunks in database + for i, (chunk_text, embedding) in enumerate(zip(chunks, embeddings)): + chunk = TranscriptChunk( + recording_id=recording_id, + user_id=recording.user_id, + chunk_index=i, + content=chunk_text, + embedding=serialize_embedding(embedding) if embedding is not None else None + ) + db.session.add(chunk) + + db.session.commit() + current_app.logger.info(f"Created {len(chunks)} chunks for recording {recording_id}") + return True + + except Exception as e: + current_app.logger.error(f"Error processing chunks for recording {recording_id}: {e}") + db.session.rollback() + return False + + + +def basic_text_search_chunks(user_id, query, filters=None, top_k=5): + """ + Basic text search fallback when embeddings are not available. + Uses simple text matching instead of semantic search. + Searches across user's own recordings and recordings shared with them. + """ + try: + # Get all accessible recording IDs (own + shared) + accessible_recording_ids = get_accessible_recording_ids(user_id) + + if not accessible_recording_ids: + return [] + + # Build base query for chunks from accessible recordings with eager loading + chunks_query = TranscriptChunk.query.options(joinedload(TranscriptChunk.recording)).filter( + TranscriptChunk.recording_id.in_(accessible_recording_ids) + ) + + # Apply filters if provided + if filters: + if filters.get('tag_ids'): + chunks_query = chunks_query.join(Recording).join( + RecordingTag, Recording.id == RecordingTag.recording_id + ).filter(RecordingTag.tag_id.in_(filters['tag_ids'])) + + if filters.get('speaker_names'): + # Filter by participants field in recordings instead of chunk speaker_name + if not any(hasattr(desc, 'name') and desc.name == 'recording' for desc in chunks_query.column_descriptions): + chunks_query = chunks_query.join(Recording) + + # Build OR conditions for each speaker name in participants + speaker_conditions = [] + for speaker_name in filters['speaker_names']: + speaker_conditions.append( + Recording.participants.ilike(f'%{speaker_name}%') + ) + + chunks_query = chunks_query.filter(db.or_(*speaker_conditions)) + current_app.logger.info(f"Applied speaker filter for: {filters['speaker_names']}") + + if filters.get('recording_ids'): + chunks_query = chunks_query.filter( + TranscriptChunk.recording_id.in_(filters['recording_ids']) + ) + + if filters.get('date_from') or filters.get('date_to'): + chunks_query = chunks_query.join(Recording) + if filters.get('date_from'): + chunks_query = chunks_query.filter(Recording.meeting_date >= filters['date_from']) + if filters.get('date_to'): + chunks_query = chunks_query.filter(Recording.meeting_date <= filters['date_to']) + + # Text search - filter stop words and rank by match count + stop_words = {'a', 'an', 'the', 'is', 'are', 'was', 'were', 'be', 'been', + 'being', 'have', 'has', 'had', 'do', 'does', 'did', 'will', + 'would', 'could', 'should', 'may', 'might', 'shall', 'can', + 'to', 'of', 'in', 'for', 'on', 'with', 'at', 'by', 'from', + 'up', 'about', 'into', 'through', 'during', 'before', 'after', + 'and', 'but', 'or', 'nor', 'not', 'so', 'yet', 'both', + 'it', 'its', 'this', 'that', 'these', 'those', 'what', 'which', + 'who', 'whom', 'how', 'when', 'where', 'why', + 'i', 'me', 'my', 'we', 'our', 'you', 'your', 'he', 'she', + 'his', 'her', 'they', 'them', 'their'} + + query_words = [w for w in query.lower().split() if w not in stop_words and len(w) > 1] + + if not query_words: + # If all words were stop words, fall back to using original query words + query_words = [w for w in query.lower().split() if len(w) > 1] + + if query_words: + from sqlalchemy import or_, func, case, literal + + # Filter: match ANY keyword (OR) to get candidates + text_conditions = [] + for word in query_words: + text_conditions.append(TranscriptChunk.content.ilike(f'%{word}%')) + chunks_query = chunks_query.filter(or_(*text_conditions)) + + # Fetch more candidates than needed so we can rank them + chunks = chunks_query.limit(top_k * 5).all() + + # Rank by how many query words each chunk matches + scored_chunks = [] + for chunk in chunks: + content_lower = chunk.content.lower() + match_count = sum(1 for word in query_words if word in content_lower) + score = match_count / len(query_words) # 0.0 to 1.0 + scored_chunks.append((chunk, score)) + + # Sort by score descending, take top_k + scored_chunks.sort(key=lambda x: x[1], reverse=True) + return scored_chunks[:top_k] + + # No usable query words + return [] + + except Exception as e: + current_app.logger.error(f"Error in basic text search: {e}") + return [] + + + +def semantic_search_chunks(user_id, query, filters=None, top_k=5): + """ + Perform semantic search on transcript chunks with filtering. + Searches across user's own recordings and recordings shared with them. + + Args: + user_id (int): User ID for permission filtering + query (str): Search query + filters (dict): Optional filters for tags, speakers, dates, recording_ids + top_k (int): Number of top chunks to return + + Returns: + list: List of relevant chunks with similarity scores + """ + try: + # If embeddings are not available, fall back to basic text search + if not EMBEDDINGS_AVAILABLE: + current_app.logger.info("Embeddings not available - using basic text search as fallback") + return basic_text_search_chunks(user_id, query, filters, top_k) + + # Generate embedding for the query + model = get_embedding_model() + if not model: + return basic_text_search_chunks(user_id, query, filters, top_k) + + query_embedding = model.encode([query])[0] + + # Get all accessible recording IDs (own + shared) + accessible_recording_ids = get_accessible_recording_ids(user_id) + + if not accessible_recording_ids: + return [] + + # Build base query for chunks from accessible recordings with eager loading + chunks_query = TranscriptChunk.query.options(joinedload(TranscriptChunk.recording)).filter( + TranscriptChunk.recording_id.in_(accessible_recording_ids) + ) + + # Apply filters if provided + if filters: + if filters.get('tag_ids'): + # Join with recordings that have specified tags + chunks_query = chunks_query.join(Recording).join( + RecordingTag, Recording.id == RecordingTag.recording_id + ).filter(RecordingTag.tag_id.in_(filters['tag_ids'])) + + if filters.get('speaker_names'): + # Filter by participants field in recordings instead of chunk speaker_name + if not any(hasattr(desc, 'name') and desc.name == 'recording' for desc in chunks_query.column_descriptions): + chunks_query = chunks_query.join(Recording) + + # Build OR conditions for each speaker name in participants + speaker_conditions = [] + for speaker_name in filters['speaker_names']: + speaker_conditions.append( + Recording.participants.ilike(f'%{speaker_name}%') + ) + + chunks_query = chunks_query.filter(db.or_(*speaker_conditions)) + current_app.logger.info(f"Applied speaker filter for: {filters['speaker_names']}") + + if filters.get('recording_ids'): + chunks_query = chunks_query.filter( + TranscriptChunk.recording_id.in_(filters['recording_ids']) + ) + + if filters.get('date_from') or filters.get('date_to'): + chunks_query = chunks_query.join(Recording) + if filters.get('date_from'): + chunks_query = chunks_query.filter(Recording.meeting_date >= filters['date_from']) + if filters.get('date_to'): + chunks_query = chunks_query.filter(Recording.meeting_date <= filters['date_to']) + + # Get chunks that have embeddings + chunks = chunks_query.filter(TranscriptChunk.embedding.isnot(None)).all() + + if not chunks: + return [] + + # Calculate similarities + chunk_similarities = [] + for chunk in chunks: + try: + chunk_embedding = deserialize_embedding(chunk.embedding) + if chunk_embedding is not None: + similarity = cosine_similarity( + query_embedding.reshape(1, -1), + chunk_embedding.reshape(1, -1) + )[0][0] + chunk_similarities.append((chunk, float(similarity))) + except Exception as e: + current_app.logger.warning(f"Error calculating similarity for chunk {chunk.id}: {e}") + continue + + # Sort by similarity and return top k + chunk_similarities.sort(key=lambda x: x[1], reverse=True) + return chunk_similarities[:top_k] + + except Exception as e: + current_app.logger.error(f"Error in semantic search: {e}") + return [] + +# --- Helper Functions for Document Processing --- + + + diff --git a/src/services/job_queue.py b/src/services/job_queue.py new file mode 100644 index 0000000..d3a0d28 --- /dev/null +++ b/src/services/job_queue.py @@ -0,0 +1,631 @@ +""" +Fair database-backed job queue for background processing tasks. + +This queue ensures: +- Jobs persist across application restarts +- Fair round-robin scheduling between users +- Separate queues for transcription (slow) and summary (fast) jobs +- Limited concurrency to prevent overwhelming external services +- Automatic recovery of orphaned jobs +""" + +import os +import json +import threading +import time +import logging +from datetime import datetime +from typing import Optional, Dict, Any, List +from contextlib import contextmanager + +logger = logging.getLogger(__name__) + +# Configuration +TRANSCRIPTION_WORKERS = int(os.environ.get('JOB_QUEUE_WORKERS', '2')) +SUMMARY_WORKERS = int(os.environ.get('SUMMARY_QUEUE_WORKERS', '2')) +MAX_RETRIES = int(os.environ.get('JOB_MAX_RETRIES', '3')) +POLL_INTERVAL = 1.0 # seconds between checking for new jobs + +# Job type categories +TRANSCRIPTION_JOBS = ['transcribe', 'reprocess_transcription'] +SUMMARY_JOBS = ['summarize', 'reprocess_summary'] + + +class FairJobQueue: + """ + A database-backed job queue with fair scheduling across users. + + Uses separate queues for transcription and summary jobs to prevent + slow transcription jobs from blocking fast summary jobs. + """ + + _instance = None + _lock = threading.Lock() + + def __new__(cls): + """Singleton pattern to ensure only one queue exists.""" + if cls._instance is None: + with cls._lock: + if cls._instance is None: + cls._instance = super().__new__(cls) + cls._instance._initialized = False + return cls._instance + + def __init__(self): + """Initialize the job queue.""" + if self._initialized: + return + + self._transcription_workers = [] + self._summary_workers = [] + self._running = False + self._app = None + # Separate round-robin tracking for each queue + self._last_user_id_transcription = None + self._last_user_id_summary = None + # Lock for claiming jobs (SQLite doesn't support row-level locking) + self._claim_lock = threading.Lock() + self._initialized = True + + logger.info(f"FairJobQueue initialized: {TRANSCRIPTION_WORKERS} transcription workers, {SUMMARY_WORKERS} summary workers") + + def init_app(self, app): + """Initialize with Flask app for context management.""" + self._app = app + + @contextmanager + def _app_context(self): + """Get application context for database operations.""" + if self._app: + with self._app.app_context(): + yield + else: + yield + + def start(self): + """Start the worker threads for both queues.""" + if self._running: + return + + self._running = True + + # Start transcription workers + for i in range(TRANSCRIPTION_WORKERS): + worker = threading.Thread( + target=self._worker_loop, + args=(TRANSCRIPTION_JOBS, 'transcription'), + name=f"TranscriptionWorker-{i}", + daemon=True + ) + worker.start() + self._transcription_workers.append(worker) + + # Start summary workers + for i in range(SUMMARY_WORKERS): + worker = threading.Thread( + target=self._worker_loop, + args=(SUMMARY_JOBS, 'summary'), + name=f"SummaryWorker-{i}", + daemon=True + ) + worker.start() + self._summary_workers.append(worker) + + logger.info(f"Started {TRANSCRIPTION_WORKERS} transcription workers and {SUMMARY_WORKERS} summary workers") + + def stop(self): + """Stop the worker threads gracefully.""" + self._running = False + for worker in self._transcription_workers + self._summary_workers: + worker.join(timeout=5) + self._transcription_workers.clear() + self._summary_workers.clear() + logger.info("Job queue workers stopped") + + def _worker_loop(self, job_types: List[str], queue_name: str): + """Main worker loop that processes jobs of specific types.""" + while self._running: + try: + job = self._claim_next_job(job_types, queue_name) + if job: + self._process_job(job) + else: + # No jobs available, sleep briefly + time.sleep(POLL_INTERVAL) + except Exception as e: + logger.error(f"{queue_name.capitalize()} worker error: {e}", exc_info=True) + time.sleep(POLL_INTERVAL) + + def _claim_next_job(self, job_types: List[str], queue_name: str): + """ + Claim the next job of specified types using fair round-robin scheduling. + + Args: + job_types: List of job types this worker handles + queue_name: Name of the queue ('transcription' or 'summary') + + Returns the claimed job or None if no jobs available. + """ + # Use lock to prevent race conditions (SQLite doesn't support row-level locking) + with self._claim_lock: + with self._app_context(): + from src.database import db + from src.models import ProcessingJob + + try: + # Get list of users with queued jobs of our types + users_with_jobs = db.session.query( + ProcessingJob.user_id + ).filter( + ProcessingJob.status == 'queued', + ProcessingJob.job_type.in_(job_types) + ).group_by( + ProcessingJob.user_id + ).order_by( + db.func.min(ProcessingJob.created_at) + ).all() + + if not users_with_jobs: + return None + + user_ids = [u[0] for u in users_with_jobs] + + # Get last user ID for this queue type + last_user_id = (self._last_user_id_transcription + if queue_name == 'transcription' + else self._last_user_id_summary) + + # Round-robin: pick next user after last processed + next_user_id = None + if last_user_id is not None and last_user_id in user_ids: + idx = user_ids.index(last_user_id) + next_user_id = user_ids[(idx + 1) % len(user_ids)] + else: + next_user_id = user_ids[0] + + # Get oldest queued job of our types for this user + candidate_job = ProcessingJob.query.filter( + ProcessingJob.user_id == next_user_id, + ProcessingJob.status == 'queued', + ProcessingJob.job_type.in_(job_types) + ).order_by( + ProcessingJob.created_at + ).first() + + if candidate_job: + # Atomically claim the job - only succeeds if status is still 'queued' + # This prevents race conditions when multiple workers try to claim the same job + from sqlalchemy import update + claim_time = datetime.utcnow() + result = db.session.execute( + update(ProcessingJob) + .where( + ProcessingJob.id == candidate_job.id, + ProcessingJob.status == 'queued' # Critical: only claim if still queued + ) + .values(status='processing', started_at=claim_time) + ) + + if result.rowcount == 0: + # Job was already claimed by another worker - this is expected with multiple workers + logger.debug(f"[{queue_name.upper()}] Job {candidate_job.id} already claimed by another worker") + db.session.rollback() + return None + + # Also update Recording.status to reflect active processing + from src.models import Recording + recording = db.session.get(Recording, candidate_job.recording_id) + if recording and recording.status == 'QUEUED': + recording.status = 'PROCESSING' + + db.session.commit() + + # Refresh the job object to get updated values + db.session.refresh(candidate_job) + + # Update last user ID for this queue + if queue_name == 'transcription': + self._last_user_id_transcription = next_user_id + else: + self._last_user_id_summary = next_user_id + + wait_time = (claim_time - candidate_job.created_at).total_seconds() + logger.info(f"[{queue_name.upper()}] Claimed job {candidate_job.id} (type={candidate_job.job_type}) for user {candidate_job.user_id}, recording {candidate_job.recording_id} (waited {wait_time:.1f}s)") + return candidate_job + + return None + + except Exception as e: + logger.error(f"Error claiming {queue_name} job: {e}", exc_info=True) + db.session.rollback() + return None + + def _is_permanent_error(self, error_str: str) -> bool: + """ + Detect if an error is permanent and should not be retried. + + Permanent errors include: + - 400: Bad request (invalid format, invalid parameters) + - 413: File too large (user needs to enable chunking or compress file) + - 401/403: Authentication/authorization errors (credentials issue) + - 402: Payment required (billing issue) + - 404: Resource not found (model doesn't exist) + - Invalid format errors (file needs to be converted) + """ + error_lower = error_str.lower() + + # HTTP status codes that indicate permanent errors + permanent_codes = ['400', '413', '401', '402', '403', '404'] + for code in permanent_codes: + if f'error code: {code}' in error_lower or f'status {code}' in error_lower: + return True + + # Specific error patterns that are permanent (simple substring matching) + permanent_patterns = [ + 'maximum content size limit', + 'file too large', + 'payload too large', + 'invalid api key', + 'incorrect api key', + 'authentication failed', + 'unauthorized', + 'permission denied', + 'access denied', + 'billing', + 'payment required', + 'quota exceeded', + 'insufficient funds', + 'model not found', + 'invalid model', + 'unsupported format', + 'invalid file format', + 'invalid_request_error', + 'bad request', + ] + + for pattern in permanent_patterns: + if pattern in error_lower: + return True + + return False + + def _process_job(self, job): + """Process a single job by dispatching to the appropriate task function.""" + job_id = job.id + job_type = job.job_type + recording_id = job.recording_id + params_str = job.params + is_new_upload = job.is_new_upload + + with self._app_context(): + from src.database import db + from src.models import ProcessingJob, Recording + from flask import current_app + + try: + # Parse job parameters + params = json.loads(params_str) if params_str else {} + + # Re-fetch the job in this session context to ensure it's attached + job = db.session.get(ProcessingJob, job_id) + if not job: + logger.error(f"Job {job_id} not found when trying to process") + return + + # Get recording + recording = db.session.get(Recording, recording_id) + if not recording: + raise ValueError(f"Recording {recording_id} not found") + + # Dispatch based on job type + if job_type == 'transcribe': + self._run_transcription(job, recording, params) + elif job_type == 'summarize': + self._run_summarization(job, recording, params) + elif job_type == 'reprocess_transcription': + self._run_reprocess_transcription(job, recording, params) + elif job_type == 'reprocess_summary': + self._run_reprocess_summary(job, recording, params) + else: + raise ValueError(f"Unknown job type: {job_type}") + + # Mark as completed - re-fetch to ensure we have latest state + job = db.session.get(ProcessingJob, job_id) + if job: + job.status = 'completed' + job.completed_at = datetime.utcnow() + db.session.commit() + logger.info(f"Job {job_id} completed successfully") + + except Exception as e: + error_str = str(e) + logger.error(f"Job {job_id} failed: {e}", exc_info=True) + + # Check if this is a permanent error that shouldn't be retried + is_permanent_error = self._is_permanent_error(error_str) + + # Re-fetch job to update it + job = db.session.get(ProcessingJob, job_id) + if job: + job.error_message = error_str + job.retry_count += 1 + + # Only retry if: not a permanent error AND under retry limit + if not is_permanent_error and job.retry_count < MAX_RETRIES: + # Re-queue for retry + job.status = 'queued' + job.started_at = None + logger.info(f"Job {job_id} re-queued for retry ({job.retry_count}/{MAX_RETRIES})") + else: + job.status = 'failed' + job.completed_at = datetime.utcnow() + recording = db.session.get(Recording, recording_id) + + if is_permanent_error: + logger.info(f"Job {job_id} failed with permanent error (no retry): {error_str[:100]}") + + # Always keep recordings with FAILED status so users can see the error + # and reprocess later (e.g., when ASR server recovers) + if recording: + # Keep the recording with FAILED status so user can see the error and fix settings + recording.status = 'FAILED' + # Format the error for nice display + from src.utils.error_formatting import format_error_for_storage + recording.transcription = format_error_for_storage(error_str) + + if is_permanent_error: + logger.error(f"Job {job_id} failed permanently (non-retryable error)") + else: + logger.error(f"Job {job_id} failed permanently after {MAX_RETRIES} retries") + + db.session.commit() + + def _run_transcription(self, job, recording, params): + """Run transcription task. Status updates handled by task function.""" + from src.tasks.processing import transcribe_audio_task + from flask import current_app + + filepath = recording.audio_path + filename_for_asr = recording.original_filename or os.path.basename(filepath) + + transcribe_audio_task( + current_app._get_current_object().app_context(), + recording.id, + filepath, + filename_for_asr, + datetime.utcnow(), + language=params.get('language'), + min_speakers=params.get('min_speakers'), + max_speakers=params.get('max_speakers'), + tag_id=params.get('tag_id'), + hotwords=params.get('hotwords'), + initial_prompt=params.get('initial_prompt'), + ) + + def _run_summarization(self, job, recording, params): + """Run summarization-only task. Status updates handled by task function.""" + from src.tasks.processing import generate_summary_only_task + from flask import current_app + + generate_summary_only_task( + current_app._get_current_object().app_context(), + recording.id, + custom_prompt_override=params.get('custom_prompt'), + user_id=params.get('user_id') + ) + + def _run_reprocess_transcription(self, job, recording, params): + """Run transcription reprocessing task. Status updates handled by task function.""" + from src.tasks.processing import transcribe_audio_task + from flask import current_app + + filepath = recording.audio_path + filename_for_asr = recording.original_filename or os.path.basename(filepath) + + transcribe_audio_task( + current_app._get_current_object().app_context(), + recording.id, + filepath, + filename_for_asr, + datetime.utcnow(), + language=params.get('language'), + min_speakers=params.get('min_speakers'), + max_speakers=params.get('max_speakers'), + tag_id=params.get('tag_id'), + hotwords=params.get('hotwords'), + initial_prompt=params.get('initial_prompt'), + ) + + def _run_reprocess_summary(self, job, recording, params): + """Run summary reprocessing task. Status updates handled by task function.""" + from src.tasks.processing import generate_summary_only_task + from flask import current_app + + generate_summary_only_task( + current_app._get_current_object().app_context(), + recording.id, + custom_prompt_override=params.get('custom_prompt'), + user_id=params.get('user_id') + ) + + def enqueue( + self, + user_id: int, + recording_id: int, + job_type: str, + params: Dict[str, Any] = None, + is_new_upload: bool = False + ) -> int: + """ + Add a job to the database queue. + + Args: + user_id: ID of the user who owns this job + recording_id: ID of the recording to process + job_type: Type of job (transcribe, summarize, reprocess_transcription, reprocess_summary) + params: Optional parameters for the job + is_new_upload: True if this is a new file upload (for cleanup on failure) + + Returns: + The created job ID + """ + with self._app_context(): + from src.database import db + from src.models import ProcessingJob, Recording + + # Check for existing active job of the SAME TYPE for this recording + # Allow different job types to coexist (e.g., transcribe and summarize) + existing = ProcessingJob.query.filter( + ProcessingJob.recording_id == recording_id, + ProcessingJob.job_type == job_type, + ProcessingJob.status.in_(['queued', 'processing']) + ).first() + + if existing: + logger.warning(f"Job of type {job_type} already exists for recording {recording_id}: {existing.id}") + return existing.id + + # Create new job + job = ProcessingJob( + user_id=user_id, + recording_id=recording_id, + job_type=job_type, + params=json.dumps(params) if params else None, + is_new_upload=is_new_upload + ) + db.session.add(job) + + # Update recording status based on job type + recording = db.session.get(Recording, recording_id) + if recording: + if job_type in SUMMARY_JOBS: + recording.status = 'SUMMARIZING' + else: + recording.status = 'QUEUED' + + db.session.commit() + + # Auto-start workers if not running + if not self._running: + self.start() + + queue_name = 'summary' if job_type in SUMMARY_JOBS else 'transcription' + logger.info(f"Enqueued {queue_name} job {job.id} (type={job_type}) for user {user_id}, recording {recording_id}") + return job.id + + def recover_orphaned_jobs(self): + """ + Recover jobs that were processing when the app crashed. + Call this on startup to reset orphaned jobs back to queued. + """ + with self._app_context(): + from src.database import db + from src.models import ProcessingJob + + orphaned = ProcessingJob.query.filter( + ProcessingJob.status == 'processing' + ).all() + + for job in orphaned: + job.status = 'queued' + job.started_at = None + queue_name = 'summary' if job.job_type in SUMMARY_JOBS else 'transcription' + logger.info(f"Recovered orphaned {queue_name} job {job.id} for recording {job.recording_id}") + + if orphaned: + db.session.commit() + logger.info(f"Recovered {len(orphaned)} orphaned jobs") + + def get_queue_status(self) -> Dict[str, Any]: + """Get the current queue status for both queues.""" + with self._app_context(): + from src.models import ProcessingJob + + transcription_queued = ProcessingJob.query.filter( + ProcessingJob.status == 'queued', + ProcessingJob.job_type.in_(TRANSCRIPTION_JOBS) + ).count() + transcription_processing = ProcessingJob.query.filter( + ProcessingJob.status == 'processing', + ProcessingJob.job_type.in_(TRANSCRIPTION_JOBS) + ).count() + + summary_queued = ProcessingJob.query.filter( + ProcessingJob.status == 'queued', + ProcessingJob.job_type.in_(SUMMARY_JOBS) + ).count() + summary_processing = ProcessingJob.query.filter( + ProcessingJob.status == 'processing', + ProcessingJob.job_type.in_(SUMMARY_JOBS) + ).count() + + return { + "transcription_queue": { + "queued": transcription_queued, + "processing": transcription_processing, + "workers": TRANSCRIPTION_WORKERS + }, + "summary_queue": { + "queued": summary_queued, + "processing": summary_processing, + "workers": SUMMARY_WORKERS + }, + "is_running": self._running + } + + def get_position_in_queue(self, recording_id: int) -> Optional[int]: + """Get the position of a recording's job in its respective queue (1-indexed).""" + with self._app_context(): + from src.models import ProcessingJob + + job = ProcessingJob.query.filter( + ProcessingJob.recording_id == recording_id, + ProcessingJob.status == 'queued' + ).first() + + if not job: + return None + + # Determine which queue this job is in + job_types = SUMMARY_JOBS if job.job_type in SUMMARY_JOBS else TRANSCRIPTION_JOBS + + # Count jobs of the same type created before this one + position = ProcessingJob.query.filter( + ProcessingJob.status == 'queued', + ProcessingJob.job_type.in_(job_types), + ProcessingJob.created_at < job.created_at + ).count() + 1 + + return position + + def get_job_for_recording(self, recording_id: int): + """Get the active job for a recording.""" + with self._app_context(): + from src.models import ProcessingJob + + return ProcessingJob.query.filter( + ProcessingJob.recording_id == recording_id, + ProcessingJob.status.in_(['queued', 'processing']) + ).first() + + def cleanup_old_jobs(self, max_age_hours: int = 24): + """Remove completed/failed jobs older than max_age_hours.""" + with self._app_context(): + from src.database import db + from src.models import ProcessingJob + from datetime import timedelta + + cutoff = datetime.utcnow() - timedelta(hours=max_age_hours) + + deleted = ProcessingJob.query.filter( + ProcessingJob.status.in_(['completed', 'failed']), + ProcessingJob.completed_at < cutoff + ).delete(synchronize_session=False) + + if deleted: + db.session.commit() + logger.info(f"Cleaned up {deleted} old jobs") + + +# Global job queue instance +job_queue = FairJobQueue() diff --git a/src/services/llm.py b/src/services/llm.py new file mode 100644 index 0000000..c8e9f6b --- /dev/null +++ b/src/services/llm.py @@ -0,0 +1,498 @@ +""" +LLM API integration services (OpenAI/OpenRouter). +""" + +import os +import re +import json +import logging +import httpx +from openai import OpenAI + +# Use standard logging instead of current_app.logger for context independence +logger = logging.getLogger(__name__) + + +class TokenBudgetExceeded(Exception): + """Raised when user exceeds their token budget.""" + def __init__(self, message, usage_percentage=100): + self.message = message + self.usage_percentage = usage_percentage + super().__init__(message) + +from src.utils import safe_json_loads, extract_json_object + +# Configuration - use TEXT_MODEL_* variables for LLM +TEXT_MODEL_API_KEY = os.environ.get("TEXT_MODEL_API_KEY") +TEXT_MODEL_BASE_URL = os.environ.get("TEXT_MODEL_BASE_URL", "https://openrouter.ai/api/v1") +if TEXT_MODEL_BASE_URL: + TEXT_MODEL_BASE_URL = TEXT_MODEL_BASE_URL.split('#')[0].strip() +TEXT_MODEL_NAME = os.environ.get("TEXT_MODEL_NAME", "openai/gpt-3.5-turbo") + +# Chat model configuration (optional - falls back to TEXT_MODEL_* if not set) +CHAT_MODEL_API_KEY = os.environ.get("CHAT_MODEL_API_KEY") +CHAT_MODEL_BASE_URL = os.environ.get("CHAT_MODEL_BASE_URL") +if CHAT_MODEL_BASE_URL: + CHAT_MODEL_BASE_URL = CHAT_MODEL_BASE_URL.split('#')[0].strip() +CHAT_MODEL_NAME = os.environ.get("CHAT_MODEL_NAME") + +# Chat-specific GPT-5 settings (optional - falls back to main GPT5_* settings) +CHAT_GPT5_REASONING_EFFORT = os.environ.get("CHAT_GPT5_REASONING_EFFORT") +CHAT_GPT5_VERBOSITY = os.environ.get("CHAT_GPT5_VERBOSITY") + +# Streaming options - disable for LLM servers that don't support OpenAI's stream_options +ENABLE_STREAM_OPTIONS = os.environ.get("ENABLE_STREAM_OPTIONS", "true").lower() == "true" + + +def get_chat_config(): + """ + Get chat model configuration, falling back to TEXT_MODEL if not set. + + Returns a dict with api_key, base_url, model_name, and GPT-5 settings. + """ + if CHAT_MODEL_API_KEY and CHAT_MODEL_NAME: + return { + 'api_key': CHAT_MODEL_API_KEY, + 'base_url': CHAT_MODEL_BASE_URL or TEXT_MODEL_BASE_URL, + 'model_name': CHAT_MODEL_NAME, + 'gpt5_reasoning_effort': CHAT_GPT5_REASONING_EFFORT or os.environ.get("GPT5_REASONING_EFFORT", "medium"), + 'gpt5_verbosity': CHAT_GPT5_VERBOSITY or os.environ.get("GPT5_VERBOSITY", "medium") + } + return { + 'api_key': TEXT_MODEL_API_KEY, + 'base_url': TEXT_MODEL_BASE_URL, + 'model_name': TEXT_MODEL_NAME, + 'gpt5_reasoning_effort': os.environ.get("GPT5_REASONING_EFFORT", "medium"), + 'gpt5_verbosity': os.environ.get("GPT5_VERBOSITY", "medium") + } + + +# Set up HTTP client with custom headers for OpenRouter app identification +app_headers = { + "HTTP-Referer": "https://github.com/murtaza-nasir/speakr", + "X-Title": "Speakr - AI Audio Transcription", + "User-Agent": "Speakr/1.0 (https://github.com/murtaza-nasir/speakr)" +} + +http_client_no_proxy = httpx.Client( + verify=True, + headers=app_headers +) + +# Create client with placeholder key if not provided (allows app to start) +try: + api_key = TEXT_MODEL_API_KEY or "not-needed" + client = OpenAI( + api_key=api_key, + base_url=TEXT_MODEL_BASE_URL, + http_client=http_client_no_proxy + ) +except Exception as client_init_e: + client = None + +# Create chat client (may be same as main client if no separate config) +chat_client = None +try: + chat_config = get_chat_config() + if chat_config['api_key']: + if CHAT_MODEL_API_KEY and CHAT_MODEL_API_KEY != TEXT_MODEL_API_KEY: + # Separate chat configuration - create dedicated client + chat_client = OpenAI( + api_key=chat_config['api_key'], + base_url=chat_config['base_url'], + http_client=http_client_no_proxy + ) + logger.info(f"Separate chat client initialized: {chat_config['base_url']} / {chat_config['model_name']}") + else: + # Use same client as main LLM + chat_client = client +except Exception as chat_client_init_e: + logger.warning(f"Failed to initialize chat client, falling back to main client: {chat_client_init_e}") + chat_client = client + + +def is_gpt5_model(model_name): + """ + Check if the model is a GPT-5 series model that requires special API parameters. + + Args: + model_name: The model name string + + Returns: + Boolean indicating if this is a GPT-5 model + """ + if not model_name: + return False + model_lower = model_name.lower() + return model_lower.startswith('gpt-5') or model_lower in ['gpt-5', 'gpt-5-mini', 'gpt-5-nano', 'gpt-5-chat-latest'] + + + +def is_using_openai_api(): + """ + Check if we're using the official OpenAI API (not OpenRouter or other providers). + + Returns: + Boolean indicating if this is the OpenAI API + """ + return TEXT_MODEL_BASE_URL and 'api.openai.com' in TEXT_MODEL_BASE_URL + + + +def call_llm_completion(messages, temperature=0.7, response_format=None, stream=False, max_tokens=None, + user_id=None, operation_type=None): + """ + Centralized function for LLM API calls with proper error handling and logging. + + Args: + messages: List of message dicts with 'role' and 'content' + temperature: Sampling temperature (0-1) - ignored for GPT-5 models + response_format: Optional response format dict (e.g., {"type": "json_object"}) + stream: Whether to stream the response + max_tokens: Optional maximum tokens to generate + user_id: Optional user ID for token tracking and budget enforcement + operation_type: Optional operation type for token tracking (e.g., 'summarization', 'chat') + + Returns: + OpenAI completion object or generator (if streaming) + """ + if not client: + raise ValueError("LLM client not initialized") + + if not TEXT_MODEL_API_KEY: + raise ValueError("TEXT_MODEL_API_KEY not configured") + + # Check budget before making the call + if user_id and operation_type: + try: + from src.services.token_tracking import token_tracker + can_proceed, usage_pct, msg = token_tracker.check_budget(user_id) + if not can_proceed: + raise TokenBudgetExceeded(msg, usage_pct) + if usage_pct >= 80: + logger.warning(f"User {user_id} at {usage_pct:.1f}% of token budget") + except TokenBudgetExceeded: + raise + except Exception as e: + # Log but don't block on budget check errors + logger.warning(f"Budget check failed for user {user_id}: {e}") + + try: + # Check if we're using GPT-5 with OpenAI API + using_gpt5 = is_gpt5_model(TEXT_MODEL_NAME) and is_using_openai_api() + + completion_args = { + "model": TEXT_MODEL_NAME, + "messages": messages, + "stream": stream + } + + # Add stream_options to get usage in final chunk for streaming + # Some LLM servers don't support this OpenAI-specific option + if stream and ENABLE_STREAM_OPTIONS: + completion_args["stream_options"] = {"include_usage": True} + + if using_gpt5: + # GPT-5 models don't support temperature, top_p, or logprobs + # They use reasoning_effort and verbosity instead + logger.debug(f"Using GPT-5 model: {TEXT_MODEL_NAME} - applying GPT-5 specific parameters") + + # Get GPT-5 specific parameters from environment variables + reasoning_effort = os.environ.get("GPT5_REASONING_EFFORT", "medium") # minimal, low, medium, high + verbosity = os.environ.get("GPT5_VERBOSITY", "medium") # low, medium, high + + # Add GPT-5 specific parameters + completion_args["reasoning_effort"] = reasoning_effort + completion_args["verbosity"] = verbosity + + # Use max_completion_tokens instead of max_tokens for GPT-5 + if max_tokens: + completion_args["max_completion_tokens"] = max_tokens + else: + # Non-GPT-5 models use standard parameters + completion_args["temperature"] = temperature + + if max_tokens: + completion_args["max_tokens"] = max_tokens + + if response_format: + completion_args["response_format"] = response_format + + response = client.chat.completions.create(**completion_args) + + # Track usage for non-streaming calls + if user_id and operation_type and not stream and response.usage: + try: + from src.services.token_tracking import token_tracker + token_tracker.record_usage( + user_id=user_id, + operation_type=operation_type, + prompt_tokens=response.usage.prompt_tokens, + completion_tokens=response.usage.completion_tokens, + total_tokens=response.usage.total_tokens, + model_name=TEXT_MODEL_NAME, + cost=getattr(response.usage, 'cost', None) + ) + except Exception as e: + logger.warning(f"Failed to record token usage: {e}") + + # Debug log for empty responses + if not stream and response.choices: + content = response.choices[0].message.content + if not content: + logger.warning(f"LLM returned empty content. Model: {TEXT_MODEL_NAME}, finish_reason: {response.choices[0].finish_reason}") + # Log more details if available + if hasattr(response.choices[0].message, 'refusal'): + logger.warning(f"Refusal: {response.choices[0].message.refusal}") + if hasattr(response.choices[0].message, 'tool_calls') and response.choices[0].message.tool_calls: + logger.warning(f"Tool calls present: {response.choices[0].message.tool_calls}") + + return response + + except TokenBudgetExceeded: + raise + except Exception as e: + logger.error(f"LLM API call failed: {e}") + raise + + +def call_chat_completion(messages, temperature=0.7, response_format=None, stream=False, max_tokens=None, + user_id=None, operation_type=None): + """ + Chat-specific LLM completion function. Uses dedicated chat model if configured, + otherwise falls back to standard TEXT_MODEL configuration. + + Args: + messages: List of message dicts with 'role' and 'content' + temperature: Sampling temperature (0-1) - ignored for GPT-5 models + response_format: Optional response format dict (e.g., {"type": "json_object"}) + stream: Whether to stream the response + max_tokens: Optional maximum tokens to generate + user_id: Optional user ID for token tracking and budget enforcement + operation_type: Optional operation type for token tracking (e.g., 'chat') + + Returns: + OpenAI completion object or generator (if streaming) + """ + effective_client = chat_client if chat_client else client + chat_config = get_chat_config() + + if not effective_client: + raise ValueError("Chat LLM client not initialized") + + if not chat_config['api_key']: + raise ValueError("Chat model API key not configured") + + # Check budget before making the call + if user_id and operation_type: + try: + from src.services.token_tracking import token_tracker + can_proceed, usage_pct, msg = token_tracker.check_budget(user_id) + if not can_proceed: + raise TokenBudgetExceeded(msg, usage_pct) + if usage_pct >= 80: + logger.warning(f"User {user_id} at {usage_pct:.1f}% of token budget") + except TokenBudgetExceeded: + raise + except Exception as e: + # Log but don't block on budget check errors + logger.warning(f"Budget check failed for user {user_id}: {e}") + + try: + model_name = chat_config['model_name'] + base_url = chat_config['base_url'] or '' + + # Check if we're using GPT-5 with OpenAI API + using_gpt5 = is_gpt5_model(model_name) and 'api.openai.com' in base_url + + completion_args = { + "model": model_name, + "messages": messages, + "stream": stream + } + + # Add stream_options to get usage in final chunk for streaming + # Some LLM servers don't support this OpenAI-specific option + if stream and ENABLE_STREAM_OPTIONS: + completion_args["stream_options"] = {"include_usage": True} + + if using_gpt5: + logger.debug(f"Using GPT-5 chat model: {model_name}") + # Use chat-specific GPT-5 settings from config + completion_args["reasoning_effort"] = chat_config['gpt5_reasoning_effort'] + completion_args["verbosity"] = chat_config['gpt5_verbosity'] + + if max_tokens: + completion_args["max_completion_tokens"] = max_tokens + else: + completion_args["temperature"] = temperature + if max_tokens: + completion_args["max_tokens"] = max_tokens + + if response_format: + completion_args["response_format"] = response_format + + response = effective_client.chat.completions.create(**completion_args) + + # Track usage for non-streaming calls + if user_id and operation_type and not stream and response.usage: + try: + from src.services.token_tracking import token_tracker + token_tracker.record_usage( + user_id=user_id, + operation_type=operation_type, + prompt_tokens=response.usage.prompt_tokens, + completion_tokens=response.usage.completion_tokens, + total_tokens=response.usage.total_tokens, + model_name=model_name, + cost=getattr(response.usage, 'cost', None) + ) + except Exception as e: + logger.warning(f"Failed to record token usage: {e}") + + # Debug log for empty responses + if not stream and response.choices: + content = response.choices[0].message.content + if not content: + logger.warning(f"Chat LLM returned empty content. Model: {model_name}, finish_reason: {response.choices[0].finish_reason}") + + return response + + except TokenBudgetExceeded: + raise + except Exception as e: + logger.error(f"Chat LLM API call failed: {e}") + raise + + +def format_api_error_message(error_str): + """ + Formats API error messages to be more user-friendly. + Specifically handles token limit errors with helpful suggestions. + """ + error_lower = error_str.lower() + + # Check for token limit errors + if 'maximum context length' in error_lower and 'tokens' in error_lower: + return "[Summary generation failed: The transcription is too long for AI processing. Request your admin to try using a different LLM with a larger context size, or set a limit for the transcript_length_limit in the system settings.]" + + # Check for other common API errors + if 'rate limit' in error_lower: + return "[Summary generation failed: API rate limit exceeded. Please try again in a few minutes.]" + + if 'insufficient funds' in error_lower or 'quota exceeded' in error_lower: + return "[Summary generation failed: API quota exceeded. Please contact support.]" + + if 'timeout' in error_lower: + return "[Summary generation failed: Request timed out. Please try again.]" + + # For other errors, show a generic message + return f"[Summary generation failed: {error_str}]" + + +def process_streaming_with_thinking(stream, user_id=None, operation_type=None, model_name=None, app=None): + """ + Generator that processes a streaming response and separates thinking content. + Yields SSE-formatted data with 'delta' for regular content and 'thinking' for thinking content. + + Args: + stream: The streaming response from the LLM API + user_id: Optional user ID for token tracking + operation_type: Optional operation type for token tracking + model_name: Optional model name for token tracking + app: Optional Flask app instance for database context in generators + """ + content_buffer = "" + in_thinking = False + thinking_buffer = "" + + for chunk in stream: + # Check for usage in final chunk (from stream_options={'include_usage': True}) + if hasattr(chunk, 'usage') and chunk.usage and user_id and operation_type: + try: + from src.services.token_tracking import token_tracker + # Use app context if provided (needed for generators where context may be lost) + if app: + with app.app_context(): + token_tracker.record_usage( + user_id=user_id, + operation_type=operation_type, + prompt_tokens=chunk.usage.prompt_tokens, + completion_tokens=chunk.usage.completion_tokens, + total_tokens=chunk.usage.total_tokens, + model_name=model_name or TEXT_MODEL_NAME, + cost=getattr(chunk.usage, 'cost', None) + ) + else: + token_tracker.record_usage( + user_id=user_id, + operation_type=operation_type, + prompt_tokens=chunk.usage.prompt_tokens, + completion_tokens=chunk.usage.completion_tokens, + total_tokens=chunk.usage.total_tokens, + model_name=model_name or TEXT_MODEL_NAME, + cost=getattr(chunk.usage, 'cost', None) + ) + except Exception as e: + logger.warning(f"Failed to record streaming token usage: {e}") + + # Process content delta + if chunk.choices and chunk.choices[0].delta.content: + content = chunk.choices[0].delta.content + content_buffer += content + + # Process the buffer to detect and handle thinking tags + while True: + if not in_thinking: + # Look for opening thinking tag + think_start = re.search(r'', content_buffer, re.IGNORECASE) + if think_start: + # Send any content before the thinking tag + before_thinking = content_buffer[:think_start.start()] + if before_thinking: + yield f"data: {json.dumps({'delta': before_thinking})}\n\n" + + # Start capturing thinking content + in_thinking = True + content_buffer = content_buffer[think_start.end():] + thinking_buffer = "" + else: + # No thinking tag found, send accumulated content + if content_buffer: + yield f"data: {json.dumps({'delta': content_buffer})}\n\n" + content_buffer = "" + break + else: + # We're inside a thinking tag, look for closing tag + think_end = re.search(r'', content_buffer, re.IGNORECASE) + if think_end: + # Capture thinking content up to the closing tag + thinking_buffer += content_buffer[:think_end.start()] + + # Send the thinking content as a special type + if thinking_buffer.strip(): + yield f"data: {json.dumps({'thinking': thinking_buffer.strip()})}\n\n" + + # Continue processing after the closing tag + in_thinking = False + content_buffer = content_buffer[think_end.end():] + thinking_buffer = "" + else: + # Still inside thinking tag, accumulate content + thinking_buffer += content_buffer + content_buffer = "" + break + + # Handle any remaining content + if in_thinking and thinking_buffer: + # Unclosed thinking tag - send as thinking content + yield f"data: {json.dumps({'thinking': thinking_buffer.strip()})}\n\n" + elif content_buffer: + # Regular content + yield f"data: {json.dumps({'delta': content_buffer})}\n\n" + + # Signal the end of the stream + yield f"data: {json.dumps({'end_of_stream': True})}\n\n" + + + diff --git a/src/services/retention.py b/src/services/retention.py new file mode 100644 index 0000000..35af4d7 --- /dev/null +++ b/src/services/retention.py @@ -0,0 +1,219 @@ +""" +Recording retention and auto-deletion services. +""" + +import os +from datetime import datetime, timedelta +from flask import current_app + +from src.database import db +from src.models import Recording, RecordingTag, Tag + +ENABLE_AUTO_DELETION = os.environ.get('ENABLE_AUTO_DELETION', 'false').lower() == 'true' +GLOBAL_RETENTION_DAYS = int(os.environ.get('GLOBAL_RETENTION_DAYS', '0')) +DELETION_MODE = os.environ.get('DELETION_MODE', 'full_recording') + + + +def is_recording_exempt_from_deletion(recording): + """ + Check if a recording is exempt from auto-deletion. + + Args: + recording: Recording object to check + + Returns: + Boolean indicating if the recording should be kept + """ + # Manual exemption flag + if recording.deletion_exempt: + return True + + # Check if any of the recording's tags protect it from deletion + # Protection can be indicated by either protect_from_deletion flag OR retention_days == -1 + for tag_assoc in recording.tag_associations: + if tag_assoc.tag.protect_from_deletion: + return True + if tag_assoc.tag.retention_days == -1: + return True + + return False + + + +def get_retention_days_for_recording(recording): + """ + Get the effective retention period for a recording. + Multi-tier system: tag retention (shortest) → global retention + + Tags with retention_days set override the global retention policy. + If multiple tags have retention_days, the SHORTEST period is used (most conservative). + Note: retention_days == -1 indicates infinite retention (protected), which is handled separately. + + Args: + recording: Recording object + + Returns: + Integer days for retention period, or None if no retention applies + """ + # Collect all tag-level retention periods + # Skip -1 (infinite retention/protected) as that's handled in is_recording_exempt_from_deletion + tag_retention_periods = [] + for tag_assoc in recording.tag_associations: + if tag_assoc.tag.retention_days and tag_assoc.tag.retention_days > 0: + tag_retention_periods.append(tag_assoc.tag.retention_days) + + # If any tags have retention periods, use the shortest one (most conservative) + if tag_retention_periods: + return min(tag_retention_periods) + + # Fall back to global retention + if GLOBAL_RETENTION_DAYS > 0: + return GLOBAL_RETENTION_DAYS + + return None + + + +def process_auto_deletion(): + """ + Process auto-deletion of recordings based on retention policies. + This can be called by a scheduled job or admin endpoint. + + Supports per-recording retention via tag-level retention_days overrides. + Tags with retention_days set take precedence over global retention. + + Returns: + Dictionary with deletion statistics + """ + if not ENABLE_AUTO_DELETION: + return {'error': 'Auto-deletion is not enabled'} + + # Check if any retention policy exists (global or tag-level) + has_global_retention = GLOBAL_RETENTION_DAYS > 0 + # We'll check for tag-level retention on a per-recording basis + + if not has_global_retention: + # Still check recordings in case they have tag-level retention + current_app.logger.info("No global retention configured, checking for tag-level retention policies") + + stats = { + 'checked': 0, + 'deleted_audio_only': 0, + 'deleted_full': 0, + 'exempted': 0, + 'skipped_no_retention': 0, + 'errors': 0 + } + + try: + # Get completed recordings to check + # In audio_only mode: Skip recordings where audio was already deleted + # In full_recording mode: Include all (to catch audio-only deletions for full cleanup) + if DELETION_MODE == 'audio_only': + all_recordings = Recording.query.filter( + Recording.status == 'COMPLETED', + Recording.audio_deleted_at.is_(None) # Skip already-deleted audio + ).all() + else: # full_recording mode + all_recordings = Recording.query.filter( + Recording.status == 'COMPLETED' + ).all() + + stats['checked'] = len(all_recordings) + current_time = datetime.utcnow() + + for recording in all_recordings: + try: + # Check if exempt from deletion entirely + if is_recording_exempt_from_deletion(recording): + stats['exempted'] += 1 + continue + + # Get the effective retention period for this specific recording + retention_days = get_retention_days_for_recording(recording) + + if not retention_days: + # No retention policy applies to this recording + stats['skipped_no_retention'] += 1 + continue + + # Calculate the cutoff date for this specific recording + cutoff_date = current_time - timedelta(days=retention_days) + + # Check if recording is past its retention period + if recording.created_at >= cutoff_date: + # Recording is still within retention period + continue + + # Recording is past retention period - process deletion + + # Determine deletion mode + if DELETION_MODE == 'audio_only': + # Delete only the audio file, keep transcription + if recording.audio_path and os.path.exists(recording.audio_path): + current_app.logger.info(f"Recording {recording.id} is past retention ({retention_days} days), deleting audio") + os.remove(recording.audio_path) + current_app.logger.info(f"Auto-deleted audio file: {recording.audio_path}") + recording.audio_deleted_at = datetime.utcnow() + db.session.commit() + stats['deleted_audio_only'] += 1 + else: + # Audio already deleted or doesn't exist - just mark timestamp + if not recording.audio_deleted_at: + recording.audio_deleted_at = datetime.utcnow() + db.session.commit() + current_app.logger.debug(f"Recording {recording.id} audio file not found, marked as deleted") + + else: # full_recording mode + # Check if this is completing a previous audio_only deletion + if recording.audio_deleted_at: + current_app.logger.info(f"Recording {recording.id} has deleted audio (mode changed), completing full deletion") + else: + current_app.logger.info(f"Recording {recording.id} is past retention ({retention_days} days), deleting fully") + + # Delete audio file if it exists + if recording.audio_path and os.path.exists(recording.audio_path): + os.remove(recording.audio_path) + + # Delete associated processing jobs (required due to NOT NULL constraint) + from src.models.processing_job import ProcessingJob + ProcessingJob.query.filter_by(recording_id=recording.id).delete() + + # Delete the database record (cascades to chunks, shares, etc.) + db.session.delete(recording) + db.session.commit() + stats['deleted_full'] += 1 + current_app.logger.info(f"Auto-deleted full recording ID: {recording.id}") + + except Exception as e: + stats['errors'] += 1 + current_app.logger.error(f"Error auto-deleting recording {recording.id}: {e}") + db.session.rollback() + + # After processing recording deletions, clean up orphaned speaker profiles + try: + from src.services.speaker_cleanup import cleanup_orphaned_speakers + speaker_stats = cleanup_orphaned_speakers() + stats['speakers_deleted'] = speaker_stats['speakers_deleted'] + stats['embeddings_cleaned'] = speaker_stats['embeddings_removed'] + stats['speakers_evaluated'] = speaker_stats['speakers_evaluated'] + current_app.logger.info( + f"Speaker cleanup completed: {speaker_stats['speakers_deleted']} speakers deleted, " + f"{speaker_stats['embeddings_removed']} embedding references removed" + ) + except Exception as e: + current_app.logger.error(f"Error during speaker cleanup: {e}", exc_info=True) + stats['speaker_cleanup_error'] = str(e) + + current_app.logger.info(f"Auto-deletion completed: {stats}") + return stats + + except Exception as e: + current_app.logger.error(f"Error during auto-deletion process: {e}", exc_info=True) + return {'error': str(e)} + +# --- API client setup for OpenRouter --- +# Use environment variables from .env + + diff --git a/src/services/speaker.py b/src/services/speaker.py new file mode 100644 index 0000000..7c0bff5 --- /dev/null +++ b/src/services/speaker.py @@ -0,0 +1,217 @@ +""" +Speaker identification and management services. +""" + +import os +import re +from datetime import datetime +from flask import current_app +from flask_login import current_user + +from src.database import db +from src.models import Speaker, SystemSetting +from src.services.llm import call_llm_completion +from src.utils import safe_json_loads + +# NOTE: format_transcription_for_llm is referenced but not defined - needs to be implemented +def format_transcription_for_llm(transcription): + """ + Format transcription for LLM processing. + + TODO: This function needs proper implementation. + If transcription is JSON, extract and format the text. + Otherwise return as-is. + """ + if isinstance(transcription, str): + try: + import json + data = json.loads(transcription) + # If it's JSON diarized format, extract text + if isinstance(data, list): + return '\n'.join([f"[{seg.get('speaker', 'UNKNOWN')}] {seg.get('text', '')}" + for seg in data if 'text' in seg]) + except: + pass + return str(transcription) + +# Import TEXT_MODEL_API_KEY from llm service +from src.services.llm import TEXT_MODEL_API_KEY + + +def update_speaker_usage(speaker_names): + """Helper function to update speaker usage statistics.""" + if not speaker_names or not current_user.is_authenticated: + return + + try: + for name in speaker_names: + name = name.strip() + if not name: + continue + + speaker = Speaker.query.filter_by(user_id=current_user.id, name=name).first() + if speaker: + speaker.use_count += 1 + speaker.last_used = datetime.utcnow() + else: + # Create new speaker + speaker = Speaker( + name=name, + user_id=current_user.id, + use_count=1, + created_at=datetime.utcnow(), + last_used=datetime.utcnow() + ) + db.session.add(speaker) + + db.session.commit() + except Exception as e: + current_app.logger.error(f"Error updating speaker usage: {e}") + db.session.rollback() + + + +def identify_speakers_from_text(transcription): + """ + Uses an LLM to identify speakers from a transcription. + """ + if not TEXT_MODEL_API_KEY: + raise ValueError("TEXT_MODEL_API_KEY not configured.") + + # The transcription passed here could be JSON, so we format it. + formatted_transcription = format_transcription_for_llm(transcription) + + # Extract existing speaker labels (e.g., SPEAKER_00, SPEAKER_01) in order of appearance + all_labels = re.findall(r'\[(SPEAKER_\d+)\]', formatted_transcription) + seen = set() + speaker_labels = [x for x in all_labels if not (x in seen or seen.add(x))] + + if not speaker_labels: + return {} + + # Get configurable transcript length limit + transcript_limit = SystemSetting.get_setting('transcript_length_limit', 30000) + if transcript_limit == -1: + # No limit + transcript_text = formatted_transcription + else: + transcript_text = formatted_transcription[:transcript_limit] + + prompt = f"""Analyze the following transcription and identify the names of the speakers. The speakers are labeled as {', '.join(speaker_labels)}. Based on the context of the conversation, determine the most likely name for each speaker label. + +Transcription: +--- +{transcript_text} +--- + +Respond with a single JSON object where keys are the speaker labels (e.g., "SPEAKER_00") and values are the identified full names. If a name cannot be determined, use the value "Unknown". + +Example: +{{ + "SPEAKER_00": "John Doe", + "SPEAKER_01": "Jane Smith", + "SPEAKER_02": "Unknown" +}} + +JSON Response: +""" + + try: + completion = call_llm_completion( + messages=[ + {"role": "system", "content": "You are an expert in analyzing conversation transcripts to identify speakers. Your response must be a single, valid JSON object."}, + {"role": "user", "content": prompt} + ], + temperature=0.2 + ) + response_content = completion.choices[0].message.content + speaker_map = safe_json_loads(response_content, {}) + + # Post-process the map to replace "Unknown" with an empty string + for speaker_label, identified_name in speaker_map.items(): + if identified_name.strip().lower() == "unknown": + speaker_map[speaker_label] = "" + + return speaker_map + except Exception as e: + current_app.logger.error(f"Error calling LLM for speaker identification: {e}") + raise + + +def identify_unidentified_speakers_from_text(transcription, unidentified_speakers): + """ + Uses an LLM to identify only the unidentified speakers from a transcription. + """ + if not TEXT_MODEL_API_KEY: + raise ValueError("TEXT_MODEL_API_KEY not configured.") + + # The transcription passed here could be JSON, so we format it. + formatted_transcription = format_transcription_for_llm(transcription) + + if not unidentified_speakers: + return {} + + # Get configurable transcript length limit + transcript_limit = SystemSetting.get_setting('transcript_length_limit', 30000) + if transcript_limit == -1: + # No limit + transcript_text = formatted_transcription + else: + transcript_text = formatted_transcription[:transcript_limit] + + prompt = f"""Analyze the following conversation transcript and identify the names of the UNIDENTIFIED speakers based on the context and content of their dialogue. + +The speakers that need to be identified are: {', '.join(unidentified_speakers)} + +Look for clues in the conversation such as: +- Names mentioned by other speakers when addressing someone +- Self-introductions or references to their own name +- Context clues about roles, relationships, or positions +- Any direct mentions of names in the dialogue + +Here is the complete conversation transcript: + +{transcript_text} + +Based on the conversation above, identify the most likely real names for the unidentified speakers. Pay close attention to how speakers address each other and any names that are mentioned in the dialogue. + +Respond with a single JSON object where keys are the speaker labels (e.g., "SPEAKER_01") and values are the identified full names. If a name cannot be determined from the conversation context, use an empty string "". + +Example format: +{{ + "SPEAKER_01": "Jane Smith", + "SPEAKER_03": "Bob Johnson", + "SPEAKER_05": "" +}} + +JSON Response: +""" + + try: + current_app.logger.info(f"[Auto-Identify] Calling LLM to identify speakers: {unidentified_speakers}") + current_app.logger.info(f"[Auto-Identify] Transcript excerpt (first 500 chars): {transcript_text[:500]}") + + completion = call_llm_completion( + messages=[ + {"role": "system", "content": "You are an expert in analyzing conversation transcripts to identify speakers based on contextual clues in the dialogue. Analyze the conversation carefully to find names mentioned when speakers address each other or introduce themselves. Your response must be a single, valid JSON object containing only the requested speaker identifications."}, + {"role": "user", "content": prompt} + ], + temperature=0.2 + ) + response_content = completion.choices[0].message.content + current_app.logger.info(f"[Auto-Identify] LLM Raw Response: {response_content}") + + speaker_map = safe_json_loads(response_content, {}) + current_app.logger.info(f"[Auto-Identify] Parsed speaker_map: {speaker_map}") + + # Post-process the map to replace "Unknown" with an empty string + for speaker_label, identified_name in speaker_map.items(): + if identified_name and identified_name.strip().lower() in ["unknown", "n/a", "not available", "unclear"]: + speaker_map[speaker_label] = "" + + current_app.logger.info(f"[Auto-Identify] Final speaker_map after post-processing: {speaker_map}") + return speaker_map + except Exception as e: + current_app.logger.error(f"Error calling LLM for speaker identification: {e}", exc_info=True) + raise + diff --git a/src/services/speaker_cleanup.py b/src/services/speaker_cleanup.py new file mode 100644 index 0000000..80c147a --- /dev/null +++ b/src/services/speaker_cleanup.py @@ -0,0 +1,295 @@ +""" +Speaker cleanup service for managing orphaned speaker voice profiles. + +This module provides automatic cleanup of speaker records when their associated +recordings are deleted through auto-deletion or manual deletion processes. + +By default, speaker profiles (including voice embeddings) are preserved even +when all their recordings are deleted, since embeddings are aggregated and +represent hours of manual identification work. Set DELETE_ORPHANED_SPEAKERS=true +to enable automatic cleanup of speakers with no remaining recordings. +""" + +import os +import logging +import json +from datetime import datetime +from sqlalchemy import exists +from src.database import db +from src.models import Speaker, SpeakerSnippet, Recording + +logger = logging.getLogger(__name__) + + +def cleanup_orphaned_speakers(dry_run=False): + """ + Clean up speaker records that no longer have any associated recordings. + + Only runs if DELETE_ORPHANED_SPEAKERS=true is set. By default, speaker + profiles are preserved because voice embeddings are aggregated values + that can't be reconstructed from recordings alone. + + A speaker is considered orphaned when: + - It has no SpeakerSnippet records + - Its embeddings_history contains no valid recording references + + Args: + dry_run (bool): If True, only report what would be deleted without actually deleting + + Returns: + dict: Statistics about cleanup operation + { + 'speakers_deleted': int, + 'embeddings_removed': int, + 'speakers_evaluated': int, + 'orphaned_speakers': list of dict (if dry_run=True) + } + """ + delete_orphans = os.environ.get('DELETE_ORPHANED_SPEAKERS', 'false').lower() in ('true', '1', 'yes') + + if not delete_orphans: + logger.debug("Speaker cleanup skipped (DELETE_ORPHANED_SPEAKERS is not enabled)") + return { + 'speakers_deleted': 0, + 'embeddings_removed': 0, + 'speakers_evaluated': 0, + 'orphaned_speakers': [] + } + + logger.info("Starting speaker cleanup process (dry_run=%s)", dry_run) + + stats = { + 'speakers_deleted': 0, + 'embeddings_removed': 0, + 'speakers_evaluated': 0, + 'orphaned_speakers': [] + } + + try: + # Clean embeddings_history references first + embeddings_cleaned = clean_embeddings_history_references(dry_run=dry_run) + stats['embeddings_removed'] = embeddings_cleaned + + # Find and process orphaned speakers + orphaned_speaker_ids = get_orphaned_speakers() + stats['speakers_evaluated'] = Speaker.query.count() + + if not orphaned_speaker_ids: + logger.info("No orphaned speakers found") + return stats + + logger.info("Found %d orphaned speaker(s)", len(orphaned_speaker_ids)) + + if dry_run: + # Report what would be deleted + for speaker_id in orphaned_speaker_ids: + speaker = Speaker.query.get(speaker_id) + if speaker: + stats['orphaned_speakers'].append({ + 'id': speaker.id, + 'name': speaker.name, + 'user_id': speaker.user_id, + 'embedding_count': speaker.embedding_count + }) + logger.info("Dry run: Would delete %d speakers", len(orphaned_speaker_ids)) + else: + # Actually delete orphaned speakers + for speaker_id in orphaned_speaker_ids: + speaker = Speaker.query.get(speaker_id) + if speaker: + logger.debug( + "Deleting orphaned speaker: id=%d, name='%s', user_id=%d, embedding_count=%d", + speaker.id, speaker.name, speaker.user_id, speaker.embedding_count or 0 + ) + db.session.delete(speaker) + stats['speakers_deleted'] += 1 + + # Commit all deletions + db.session.commit() + logger.info("Speaker cleanup completed: %d speakers deleted", stats['speakers_deleted']) + + # Warning if large number deleted + if stats['speakers_deleted'] >= 50: + logger.warning( + "Large number of speakers deleted (%d). Review cleanup logic if unexpected.", + stats['speakers_deleted'] + ) + + return stats + + except Exception as e: + db.session.rollback() + logger.error("Error during speaker cleanup: %s", str(e), exc_info=True) + raise + + +def clean_embeddings_history_references(dry_run=False): + """ + Clean embeddings_history JSON fields to remove references to deleted recordings. + + Scans all speakers' embeddings_history and removes entries where the + recording_id no longer exists in the database. + + Args: + dry_run (bool): If True, only count what would be cleaned + + Returns: + int: Number of embedding references removed + """ + logger.debug("Cleaning embeddings_history references (dry_run=%s)", dry_run) + + references_removed = 0 + + try: + # Get all speakers with embeddings_history + speakers = Speaker.query.filter(Speaker.embeddings_history.isnot(None)).all() + + for speaker in speakers: + try: + # Parse embeddings_history JSON + if not speaker.embeddings_history: + continue + + history = speaker.embeddings_history if isinstance(speaker.embeddings_history, list) else json.loads(speaker.embeddings_history) + + if not history or not isinstance(history, list): + continue + + # Filter out entries with deleted recording_ids + cleaned_history = [] + for entry in history: + if not isinstance(entry, dict) or 'recording_id' not in entry: + continue + + recording_id = entry['recording_id'] + + # Check if recording still exists + recording_exists = db.session.query( + exists().where(Recording.id == recording_id) + ).scalar() + + if recording_exists: + cleaned_history.append(entry) + else: + references_removed += 1 + logger.debug( + "Removing deleted recording reference: speaker_id=%d, recording_id=%d", + speaker.id, recording_id + ) + + # Update speaker if history changed + if len(cleaned_history) < len(history): + if not dry_run: + speaker.embeddings_history = cleaned_history + logger.debug( + "Updated speaker %d embeddings_history: %d -> %d entries", + speaker.id, len(history), len(cleaned_history) + ) + + except (json.JSONDecodeError, TypeError, KeyError) as e: + logger.warning( + "Error processing embeddings_history for speaker %d: %s", + speaker.id, str(e) + ) + continue + + if not dry_run and references_removed > 0: + db.session.commit() + logger.debug("Cleaned %d embedding references", references_removed) + + return references_removed + + except Exception as e: + db.session.rollback() + logger.error("Error cleaning embeddings_history: %s", str(e), exc_info=True) + raise + + +def get_orphaned_speakers(user_id=None): + """ + Get list of speaker IDs that are orphaned (no associated recordings). + + A speaker is orphaned when: + - It has no SpeakerSnippet records + - After cleaning embeddings_history, it has no valid recording references + + Args: + user_id (int, optional): Filter to specific user's speakers + + Returns: + list: List of speaker IDs that are orphaned + """ + logger.debug("Finding orphaned speakers (user_id=%s)", user_id) + + # Query for speakers with no snippets + query = Speaker.query.filter( + ~exists().where(SpeakerSnippet.speaker_id == Speaker.id) + ) + + if user_id is not None: + query = query.filter(Speaker.user_id == user_id) + + speakers_without_snippets = query.all() + + orphaned_ids = [] + + for speaker in speakers_without_snippets: + # Check if embeddings_history has any valid recording references + has_valid_recordings = False + + if speaker.embeddings_history: + try: + history = speaker.embeddings_history if isinstance(speaker.embeddings_history, list) else json.loads(speaker.embeddings_history) + + if history and isinstance(history, list): + for entry in history: + if isinstance(entry, dict) and 'recording_id' in entry: + recording_id = entry['recording_id'] + + # Check if this recording exists + recording_exists = db.session.query( + exists().where(Recording.id == recording_id) + ).scalar() + + if recording_exists: + has_valid_recordings = True + break + except (json.JSONDecodeError, TypeError, KeyError): + pass + + # If no snippets AND no valid recording references, it's orphaned + if not has_valid_recordings: + orphaned_ids.append(speaker.id) + logger.debug( + "Speaker %d ('%s') is orphaned: no snippets, no valid recordings", + speaker.id, speaker.name + ) + + return orphaned_ids + + +def get_speaker_cleanup_statistics(): + """ + Get statistics about speaker data for monitoring. + + Returns: + dict: Statistics about speakers + { + 'total_speakers': int, + 'speakers_with_snippets': int, + 'speakers_with_embeddings': int, + 'potential_orphans': int + } + """ + stats = { + 'total_speakers': Speaker.query.count(), + 'speakers_with_snippets': db.session.query(Speaker.id).join( + SpeakerSnippet, Speaker.id == SpeakerSnippet.speaker_id + ).distinct().count(), + 'speakers_with_embeddings': Speaker.query.filter( + Speaker.average_embedding.isnot(None) + ).count(), + 'potential_orphans': len(get_orphaned_speakers()) + } + + return stats diff --git a/src/services/speaker_embedding_matcher.py b/src/services/speaker_embedding_matcher.py new file mode 100644 index 0000000..eab91bc --- /dev/null +++ b/src/services/speaker_embedding_matcher.py @@ -0,0 +1,453 @@ +""" +Speaker Embedding Matcher Service. + +This service handles voice embedding comparison and matching for speaker identification. +It provides functions to: +- Serialize/deserialize speaker embeddings for database storage +- Calculate cosine similarity between voice embeddings +- Find matching speakers based on voice similarity +- Update speaker profiles with new embeddings +- Calculate confidence scores for speaker profiles + +Uses 256-dimensional embeddings from WhisperX diarization. +""" + +import json +import numpy as np +from datetime import datetime +try: + from sklearn.metrics.pairwise import cosine_similarity +except ImportError: + cosine_similarity = None +from src.database import db +from src.models import Speaker + + +def serialize_embedding(embedding_array): + """ + Convert numpy array or list to binary for database storage. + + Args: + embedding_array: numpy array or list of floats (256 dimensions) + + Returns: + bytes: Binary representation (1,024 bytes for 256 × float32) + """ + return np.array(embedding_array, dtype=np.float32).tobytes() + + +def deserialize_embedding(binary_data): + """ + Convert binary data back to numpy array. + + Args: + binary_data: bytes from database (1,024 bytes) + + Returns: + numpy.ndarray: 256-dimensional float32 array + """ + return np.frombuffer(binary_data, dtype=np.float32) + + +def calculate_similarity(embedding1, embedding2): + """ + Compute cosine similarity between two 256-dimensional voice embeddings. + + Args: + embedding1: numpy array, list, or binary data + embedding2: numpy array, list, or binary data + + Returns: + float: Similarity score (0-1, where 1 is identical) + """ + # Convert to numpy arrays if needed + e1 = np.array(embedding1, dtype=np.float32).reshape(1, -1) + e2 = np.array(embedding2, dtype=np.float32).reshape(1, -1) + + # Cosine similarity returns values from -1 to 1 + # For voice embeddings, we typically see 0.6-0.99 range + return float(cosine_similarity(e1, e2)[0][0]) + + +def find_matching_speakers(target_embedding, user_id, threshold=0.70): + """ + Find speakers matching a target voice embedding for a specific user. + + Args: + target_embedding: The voice embedding to match against (256-dim array/list) + user_id: User ID to search within + threshold: Minimum similarity score (0-1, default 0.70 = 70%) + + Returns: + list: Sorted list of matching speakers with scores + [{'speaker_id': 5, 'name': 'John', 'similarity': 85.3, 'confidence': 0.92}, ...] + """ + # Get all speakers with embeddings for this user + speakers = Speaker.query.filter_by(user_id=user_id).filter( + Speaker.average_embedding.isnot(None) + ).all() + + if not speakers: + return [] + + matches = [] + for speaker in speakers: + try: + # Deserialize and compare + speaker_emb = deserialize_embedding(speaker.average_embedding) + similarity = calculate_similarity(target_embedding, speaker_emb) + + if similarity >= threshold: + matches.append({ + 'speaker_id': speaker.id, + 'name': speaker.name, + 'similarity': round(similarity * 100, 1), # Convert to percentage + 'confidence': speaker.confidence_score or 0.5, + 'embedding_count': speaker.embedding_count or 0 + }) + except Exception as e: + # Skip speakers with corrupted embeddings + continue + + # Sort by similarity (highest first) + return sorted(matches, key=lambda x: x['similarity'], reverse=True) + + +def update_speaker_embedding(speaker, new_embedding, recording_id): + """ + Update a speaker's average embedding and history with a new sample. + + Uses weighted moving average to update the profile: + - New embeddings get 30% weight + - Existing average gets 70% weight + + Args: + speaker: Speaker model instance + new_embedding: New voice embedding (256-dim array/list) + recording_id: ID of the recording this embedding came from + + Returns: + float: Similarity between new embedding and previous average (None if first) + """ + new_emb_array = np.array(new_embedding, dtype=np.float32) + similarity_to_avg = None + + if speaker.average_embedding is None: + # First embedding for this speaker + speaker.average_embedding = serialize_embedding(new_emb_array) + speaker.embedding_count = 1 + speaker.embeddings_history = [{ + 'recording_id': recording_id, + 'timestamp': datetime.utcnow().isoformat(), + 'similarity': 100.0 # Perfect match to itself + }] + else: + # Update existing average + current_avg = deserialize_embedding(speaker.average_embedding) + similarity_to_avg = calculate_similarity(new_emb_array, current_avg) + + # Weighted average: 30% new, 70% existing + # This prevents sudden shifts while still adapting to voice changes + weight = 0.3 + updated_avg = (1 - weight) * current_avg + weight * new_emb_array + + speaker.average_embedding = serialize_embedding(updated_avg) + speaker.embedding_count += 1 + + # Add to history (keep last 10 entries) + history = speaker.embeddings_history or [] + history.append({ + 'recording_id': recording_id, + 'timestamp': datetime.utcnow().isoformat(), + 'similarity': round(similarity_to_avg * 100, 1) + }) + speaker.embeddings_history = history[-10:] # Keep most recent 10 + + # Recalculate confidence score + speaker.confidence_score = calculate_confidence(speaker) + + # Commit changes + db.session.commit() + + return similarity_to_avg + + +def calculate_confidence(speaker): + """ + Calculate confidence score based on embedding consistency. + + Confidence is based on: + - Number of samples (more is better) + - Consistency of embeddings (high similarity scores = high confidence) + + Args: + speaker: Speaker model instance with embeddings_history + + Returns: + float: Confidence score (0-1) + """ + if speaker.embedding_count is None or speaker.embedding_count < 1: + return 0.0 + + if speaker.embedding_count == 1: + return 0.5 # Medium confidence with single sample + + # Get recent similarity scores from history + history = speaker.embeddings_history or [] + if len(history) < 2: + return 0.5 + + # Use last 5 samples + recent_history = history[-5:] + similarities = [h.get('similarity', 0) / 100.0 for h in recent_history] + + # Average similarity to the profile + avg_similarity = sum(similarities) / len(similarities) + + # Penalize if we have very few samples + sample_factor = min(1.0, speaker.embedding_count / 5.0) + + # Confidence = average similarity × sample factor + confidence = avg_similarity * sample_factor + + return min(1.0, max(0.0, confidence)) + + +def get_speaker_voice_profile_summary(speaker): + """ + Get a human-readable summary of a speaker's voice profile. + + Args: + speaker: Speaker model instance + + Returns: + dict: Profile summary with statistics and status + """ + if not speaker.average_embedding: + return { + 'has_profile': False, + 'message': 'No voice profile yet' + } + + return { + 'has_profile': True, + 'embedding_count': speaker.embedding_count or 0, + 'confidence_score': speaker.confidence_score or 0.0, + 'confidence_level': _get_confidence_level(speaker.confidence_score), + 'last_updated': speaker.embeddings_history[-1]['timestamp'] if speaker.embeddings_history else None, + 'recordings': len(speaker.embeddings_history or []) + } + + +def _get_confidence_level(score): + """ + Convert numeric confidence score to human-readable level. + + Args: + score: float (0-1) + + Returns: + str: 'low', 'medium', or 'high' + """ + if score is None or score < 0.6: + return 'low' + elif score < 0.8: + return 'medium' + else: + return 'high' + + +# Threshold mapping for auto-labelling +AUTO_LABEL_THRESHOLDS = { + 'low': 0.3, # Aggressive, may have more false positives + 'medium': 0.6, # Default, balanced approach + 'high': 0.8 # Only auto-label well-established speakers +} + +# Base similarity threshold for finding matches (70%) +BASE_SIMILARITY_THRESHOLD = 0.70 + +# Ambiguity threshold: if top 2 matches are within 5% similarity, skip +AMBIGUITY_MARGIN = 0.05 + + +def apply_auto_speaker_labels(recording, user): + """ + Automatically label speakers in a recording based on voice profile matching. + + This function matches speaker embeddings from the recording against the user's + saved speaker profiles and returns a mapping of generic labels to speaker names. + + Args: + recording: Recording model instance with speaker_embeddings + user: User model instance with auto_speaker_labelling settings + + Returns: + dict: Mapping of {SPEAKER_XX: speaker_name} for matched speakers, + or empty dict if auto-labelling is disabled or no matches found + """ + # Check if user has auto-labelling enabled + if not user.auto_speaker_labelling: + return {} + + # Check if recording has speaker embeddings + if not recording.speaker_embeddings: + return {} + + # Get the user's threshold setting + threshold_setting = user.auto_speaker_labelling_threshold or 'medium' + confidence_threshold = AUTO_LABEL_THRESHOLDS.get(threshold_setting, AUTO_LABEL_THRESHOLDS['medium']) + + speaker_map = {} + embeddings = recording.speaker_embeddings + + for speaker_label, embedding_data in embeddings.items(): + # embedding_data should be a list of floats (256 dimensions) + if not embedding_data or not isinstance(embedding_data, list): + continue + + # Find matching speakers with base similarity threshold + matches = find_matching_speakers( + target_embedding=embedding_data, + user_id=user.id, + threshold=BASE_SIMILARITY_THRESHOLD + ) + + if not matches: + continue + + # Check if the best match exceeds the user's confidence threshold + best_match = matches[0] + best_similarity = best_match['similarity'] / 100.0 # Convert from percentage + + if best_similarity < confidence_threshold: + continue + + # Check for ambiguity: if top 2 matches are within 5% similarity, skip + if len(matches) >= 2: + second_similarity = matches[1]['similarity'] / 100.0 + if (best_similarity - second_similarity) <= AMBIGUITY_MARGIN: + # Ambiguous - top 2 matches too close + continue + + # We have a clear winner - add to speaker map + speaker_map[speaker_label] = best_match['name'] + + return speaker_map + + +def apply_speaker_names_to_transcription(recording, speaker_map): + """ + Apply speaker name mappings to a recording's transcription. + + This function updates the transcription JSON by replacing generic speaker + labels (SPEAKER_00, SPEAKER_01, etc.) with actual speaker names, and + updates the recording's participants list. + + Args: + recording: Recording model instance with transcription + speaker_map: Dict mapping {SPEAKER_XX: speaker_name} + + Returns: + bool: True if changes were made, False otherwise + """ + import logging + logger = logging.getLogger(__name__) + + if not speaker_map or not recording.transcription: + logger.warning(f"Auto-label: No speaker_map or transcription (map={bool(speaker_map)}, trans={bool(recording.transcription)})") + return False + + try: + # Parse transcription as JSON array: [{speaker, sentence, start_time, end_time}, ...] + segments = json.loads(recording.transcription) + except (json.JSONDecodeError, TypeError) as e: + logger.warning(f"Auto-label: Failed to parse transcription as JSON: {e}") + return False + + if not isinstance(segments, list) or not segments: + logger.warning(f"Auto-label: Transcription not in expected array format") + return False + + # Track which speakers were renamed + renamed_speakers = set() + + # Update speaker labels in segments + for segment in segments: + if 'speaker' in segment and segment['speaker'] in speaker_map: + segment['speaker'] = speaker_map[segment['speaker']] + renamed_speakers.add(segment['speaker']) + + if not renamed_speakers: + logger.warning(f"Auto-label: No speakers matched in segments") + return False + + logger.info(f"Auto-label: Applied names to {len(renamed_speakers)} speakers: {renamed_speakers}") + + # Update participants field + all_speakers = set(s.get('speaker') for s in segments if 'speaker' in s) + if all_speakers: + recording.participants = ', '.join(sorted(all_speakers)) + + # Save updated transcription + recording.transcription = json.dumps(segments) + db.session.commit() + + return True + + +def update_speaker_profiles_from_recording(recording, speaker_map, user): + """ + Update speaker voice profiles with new embeddings from a recording. + + For each successfully matched speaker, this function updates their + average embedding and increments their usage count. + + Args: + recording: Recording model instance with speaker_embeddings + speaker_map: Dict mapping {SPEAKER_XX: speaker_name} that was applied + user: User model instance + + Returns: + int: Number of speaker profiles updated + """ + if not speaker_map or not recording.speaker_embeddings: + return 0 + + updated_count = 0 + embeddings = recording.speaker_embeddings + + for speaker_label, speaker_name in speaker_map.items(): + if speaker_label not in embeddings: + continue + + embedding_data = embeddings[speaker_label] + if not embedding_data or not isinstance(embedding_data, list): + continue + + # Find the speaker profile + speaker = Speaker.query.filter_by( + user_id=user.id, + name=speaker_name + ).first() + + if not speaker: + continue + + try: + # Update the speaker's embedding with the new sample + update_speaker_embedding(speaker, embedding_data, recording.id) + + # Update usage tracking + speaker.use_count = (speaker.use_count or 0) + 1 + speaker.last_used = datetime.utcnow() + + updated_count += 1 + except Exception: + # Skip if embedding update fails + continue + + if updated_count > 0: + db.session.commit() + + return updated_count diff --git a/src/services/speaker_identification.py b/src/services/speaker_identification.py new file mode 100644 index 0000000..728c534 --- /dev/null +++ b/src/services/speaker_identification.py @@ -0,0 +1,228 @@ +""" +Shared speaker identification service. + +Provides LLM-based speaker identification from transcript context, +used by both the web UI (recordings.py) and REST API (api_v1.py). +""" + +import os +import re +import json +from flask import current_app + + +def identify_speakers_from_transcript(transcription_data, user_id): + """ + Identify speakers in a transcription using an LLM. + + Args: + transcription_data: List of transcript segments (already parsed JSON). + user_id: Current user's ID (for token tracking). + + Returns: + dict mapping original speaker labels to identified names. + Values are empty string "" for unidentified speakers. + + Raises: + ValueError: If LLM API key is not configured. + Exception: On LLM call failure. + """ + from src.services.llm import call_llm_completion + from src.utils import safe_json_loads + from src.models import SystemSetting + + # Extract unique speakers in order of appearance + seen_speakers = set() + unique_speakers = [] + for segment in transcription_data: + speaker = segment.get('speaker') + if speaker and speaker not in seen_speakers: + seen_speakers.add(speaker) + unique_speakers.append(speaker) + + if not unique_speakers: + return {} + + # Normalize all labels to SPEAKER_XX format for the LLM + speaker_to_label = {} + for idx, speaker in enumerate(unique_speakers): + speaker_to_label[speaker] = f'SPEAKER_{str(idx).zfill(2)}' + + # Create temporary transcript with normalized labels + formatted_lines = [] + for segment in transcription_data: + original_speaker = segment.get('speaker') + label = speaker_to_label.get(original_speaker, 'Unknown Speaker') + sentence = segment.get('sentence', '') + formatted_lines.append(f"[{label}]: {sentence}") + formatted_transcription = "\n".join(formatted_lines) + + speaker_labels = list(speaker_to_label.values()) + + current_app.logger.info(f"[Auto-Identify] Formatted transcript (first 500 chars): {formatted_transcription[:500]}") + current_app.logger.info(f"[Auto-Identify] Speaker labels: {speaker_labels}") + + # Apply configurable transcript length limit + transcript_limit = SystemSetting.get_setting('transcript_length_limit', 30000) + if transcript_limit == -1: + transcript_text = formatted_transcription + else: + transcript_text = formatted_transcription[:transcript_limit] + + prompt = f"""Analyse cette transcription de conversation et identifie les noms des locuteurs à partir du contexte et du contenu de leurs dialogues. + +Les locuteurs à identifier sont : {', '.join(speaker_labels)} + +Indices à chercher : +- Noms mentionnés par d'autres locuteurs quand ils s'adressent à quelqu'un +- Présentations ou références à son propre nom +- Indices contextuels sur les rôles, relations ou postes +- Toute mention directe de noms dans le dialogue + +Transcription complète : + +{transcript_text} + +À partir de cette conversation, identifie les noms les plus probables pour chaque locuteur. Porte une attention particulière à la façon dont les locuteurs s'adressent les uns aux autres. + +Réponds avec un seul objet JSON où les clés sont les étiquettes de locuteurs (ex. "SPEAKER_01") et les valeurs sont les noms complets identifiés. Si un nom ne peut pas être déterminé, utilise une chaîne vide "". + +Exemple : +{{ + "SPEAKER_01": "Marie Lavoie", + "SPEAKER_03": "Jean Tremblay", + "SPEAKER_05": "" +}} + +Réponse JSON : +""" + + current_app.logger.info("[Auto-Identify] Calling LLM") + + use_schema = os.environ.get('AUTO_IDENTIFY_RESPONSE_SCHEMA', '').strip() in ('1', 'true', 'yes') + system_msg = ( + "You are an expert in analyzing conversation transcripts to identify speakers " + "based on contextual clues in the dialogue. Analyze the conversation carefully " + "to find names mentioned when speakers address each other or introduce themselves. " + "Your response must be a single, valid JSON object containing only the requested " + "speaker identifications." + ) + + response_content = None + if use_schema: + # Build JSON schema response format with constrained keys + schema_properties = {label: {"type": "string"} for label in speaker_labels} + schema_response_format = { + "type": "json_schema", + "json_schema": { + "name": "speaker_identification", + "strict": True, + "schema": { + "type": "object", + "properties": schema_properties, + "required": speaker_labels, + "additionalProperties": False + } + } + } + schema_prompt = prompt + f"\n\nIMPORTANT: Your JSON response must contain exactly these keys: {', '.join(speaker_labels)}" + try: + current_app.logger.info("[Auto-Identify] Trying json_schema response format") + completion = call_llm_completion( + messages=[ + {"role": "system", "content": system_msg}, + {"role": "user", "content": schema_prompt} + ], + temperature=0.2, + response_format=schema_response_format, + user_id=user_id, + operation_type='speaker_identification' + ) + response_content = completion.choices[0].message.content + current_app.logger.info(f"[Auto-Identify] LLM Raw Response (schema mode): {response_content}") + except Exception as schema_err: + current_app.logger.warning(f"[Auto-Identify] json_schema mode failed, falling back to json_object: {schema_err}") + response_content = None + + if response_content is None: + completion = call_llm_completion( + messages=[ + {"role": "system", "content": system_msg}, + {"role": "user", "content": prompt} + ], + temperature=0.2, + user_id=user_id, + operation_type='speaker_identification' + ) + response_content = completion.choices[0].message.content + current_app.logger.info(f"[Auto-Identify] LLM Raw Response: {response_content}") + + identified_map = safe_json_loads(response_content, {}) + current_app.logger.info(f"[Auto-Identify] Parsed identified_map: {identified_map}") + + # --- Sanitize identified_map --- + identified_map = _sanitize_identified_map(identified_map, speaker_labels) + current_app.logger.info(f"[Auto-Identify] Sanitized identified_map: {identified_map}") + + # Map back to original speaker labels + final_speaker_map = {} + for original_speaker, temp_label in speaker_to_label.items(): + if temp_label in identified_map: + final_speaker_map[original_speaker] = identified_map[temp_label] + + current_app.logger.info(f"[Auto-Identify] Final speaker_map: {final_speaker_map}") + return final_speaker_map + + +def _sanitize_identified_map(identified_map, speaker_labels): + """ + Clean up LLM output: handle inverted maps, strip commentary, + clear placeholders, etc. + """ + speaker_label_re = re.compile(r'^SPEAKER_\d{2}$') + + # Detect inverted map ({name: "SPEAKER_XX"}) and flip it + if identified_map and all( + speaker_label_re.match(str(v)) for v in identified_map.values() if v + ) and not any(speaker_label_re.match(str(k)) for k in identified_map.keys()): + current_app.logger.warning("[Auto-Identify] Detected inverted map, flipping keys/values") + identified_map = {v: k for k, v in identified_map.items() if v} + + sanitized = {} + for speaker_label, identified_name in identified_map.items(): + # Skip entries whose key isn't a valid SPEAKER_XX label + if not speaker_label_re.match(str(speaker_label)): + continue + if not identified_name or not isinstance(identified_name, str): + sanitized[speaker_label] = "" + continue + + name = identified_name.strip() + + # Clear generic placeholders + if name.lower() in ["unknown", "n/a", "not available", "unclear", "unidentified", ""]: + sanitized[speaker_label] = "" + continue + + # Clear label-to-label entries (e.g. "SPEAKER_01": "SPEAKER_02") + if speaker_label_re.match(name): + sanitized[speaker_label] = "" + continue + + # Strip parenthetical content: "John (the host)" -> "John" + name = re.sub(r'\s*\([^)]*\)', '', name).strip() + + # Take first name segment before comma, semicolon, or slash + name = re.split(r'[,;/]', name)[0].strip() + + # Collapse whitespace + name = re.sub(r'\s+', ' ', name) + + # Final check: if result still matches SPEAKER_XX, clear it + if speaker_label_re.match(name) or not name: + sanitized[speaker_label] = "" + continue + + sanitized[speaker_label] = name + + return sanitized diff --git a/src/services/speaker_merge.py b/src/services/speaker_merge.py new file mode 100644 index 0000000..c5300bc --- /dev/null +++ b/src/services/speaker_merge.py @@ -0,0 +1,226 @@ +""" +Speaker Merge Service. + +This service handles merging multiple speaker profiles into one. +Useful when users accidentally create duplicate speakers for the same person. + +When speakers are merged: +- Voice embeddings are combined using weighted average +- All snippets are transferred to the target speaker +- Usage statistics are combined +- Source speakers are deleted +- Confidence score is recalculated +""" + +import numpy as np +from src.database import db +from src.models import Speaker, SpeakerSnippet +from src.services.speaker_embedding_matcher import ( + serialize_embedding, + deserialize_embedding, + calculate_confidence +) + + +def merge_speakers(target_id, source_ids, user_id): + """ + Merge multiple speaker profiles into one target speaker. + + All embeddings, snippets, and usage data from source speakers are + combined into the target speaker. Source speakers are then deleted. + + Args: + target_id: ID of the speaker to keep (receives all merged data) + source_ids: List of speaker IDs to merge into target + user_id: ID of the user (for security check) + + Returns: + Speaker: The updated target speaker + + Raises: + ValueError: If speakers don't exist or don't belong to user + """ + # Validate target speaker + target = Speaker.query.filter_by(id=target_id, user_id=user_id).first() + if not target: + raise ValueError(f"Target speaker {target_id} not found or doesn't belong to user") + + # Validate source speakers + sources = Speaker.query.filter( + Speaker.id.in_(source_ids), + Speaker.user_id == user_id + ).all() + + if len(sources) == 0: + raise ValueError("No valid source speakers found") + + if len(sources) != len(source_ids): + raise ValueError("Some source speakers don't exist or don't belong to user") + + # Can't merge a speaker with itself + if target_id in source_ids: + raise ValueError("Cannot merge a speaker with itself") + + # Combine embeddings + _combine_embeddings(target, sources) + + # Transfer snippets + for source in sources: + SpeakerSnippet.query.filter_by(speaker_id=source.id).update( + {'speaker_id': target_id} + ) + + # Combine usage statistics + for source in sources: + target.use_count += source.use_count + + # Update last_used to most recent + if source.last_used and (not target.last_used or source.last_used > target.last_used): + target.last_used = source.last_used + + # Combine embedding histories + if source.embeddings_history: + target_history = target.embeddings_history or [] + source_history = source.embeddings_history or [] + combined_history = target_history + source_history + + # Sort by timestamp (most recent last) and keep last 10 + try: + combined_history.sort(key=lambda x: x.get('timestamp', '')) + target.embeddings_history = combined_history[-10:] + except: + # If sorting fails, just concatenate and truncate + target.embeddings_history = (target_history + source_history)[-10:] + + # Recalculate confidence score + target.confidence_score = calculate_confidence(target) + + # Delete source speakers + for source in sources: + db.session.delete(source) + + # Commit all changes + db.session.commit() + + return target + + +def _combine_embeddings(target, sources): + """ + Combine embeddings from multiple speakers using weighted average. + + Weight is based on embedding_count (more samples = more weight). + + Args: + target: Target Speaker instance + sources: List of source Speaker instances + """ + all_embeddings = [] + all_counts = [] + + # Add target's embedding if it exists + if target.average_embedding: + all_embeddings.append(deserialize_embedding(target.average_embedding)) + all_counts.append(target.embedding_count or 1) + + # Add all source embeddings + for source in sources: + if source.average_embedding: + all_embeddings.append(deserialize_embedding(source.average_embedding)) + all_counts.append(source.embedding_count or 1) + + if not all_embeddings: + # No embeddings to combine + return + + # Calculate weighted average + total_count = sum(all_counts) + weights = [c / total_count for c in all_counts] + + combined_emb = np.average(all_embeddings, axis=0, weights=weights) + + # Update target + target.average_embedding = serialize_embedding(combined_emb) + target.embedding_count = total_count + + +def preview_merge(target_id, source_ids, user_id): + """ + Preview what a merge would look like without executing it. + + Args: + target_id: ID of the target speaker + source_ids: List of source speaker IDs + user_id: ID of the user + + Returns: + dict: Preview of the merge results + { + 'target_name': '...', + 'source_names': [...], + 'combined_use_count': 123, + 'combined_embedding_count': 45, + 'total_snippets': 67 + } + """ + # Validate speakers + target = Speaker.query.filter_by(id=target_id, user_id=user_id).first() + if not target: + raise ValueError("Target speaker not found") + + sources = Speaker.query.filter( + Speaker.id.in_(source_ids), + Speaker.user_id == user_id + ).all() + + if len(sources) == 0: + raise ValueError("No valid source speakers found") + + # Calculate combined statistics + combined_use_count = target.use_count + combined_embedding_count = target.embedding_count or 0 + total_snippets = SpeakerSnippet.query.filter_by(speaker_id=target_id).count() + + source_names = [] + for source in sources: + combined_use_count += source.use_count + combined_embedding_count += (source.embedding_count or 0) + total_snippets += SpeakerSnippet.query.filter_by(speaker_id=source.id).count() + source_names.append(source.name) + + return { + 'target_name': target.name, + 'source_names': source_names, + 'combined_use_count': combined_use_count, + 'combined_embedding_count': combined_embedding_count, + 'total_snippets': total_snippets, + 'has_embeddings': target.average_embedding is not None or any(s.average_embedding for s in sources) + } + + +def can_merge_speakers(speaker_ids, user_id): + """ + Check if speakers can be merged (all belong to same user, no duplicates). + + Args: + speaker_ids: List of speaker IDs + user_id: ID of the user + + Returns: + tuple: (bool, str) - (can_merge, error_message) + """ + if len(speaker_ids) < 2: + return False, "Need at least 2 speakers to merge" + + if len(speaker_ids) != len(set(speaker_ids)): + return False, "Duplicate speaker IDs provided" + + speakers = Speaker.query.filter( + Speaker.id.in_(speaker_ids), + Speaker.user_id == user_id + ).all() + + if len(speakers) != len(speaker_ids): + return False, "Some speakers don't exist or don't belong to user" + + return True, "" diff --git a/src/services/speaker_snippets.py b/src/services/speaker_snippets.py new file mode 100644 index 0000000..3263a54 --- /dev/null +++ b/src/services/speaker_snippets.py @@ -0,0 +1,371 @@ +""" +Speaker Snippets Service. + +This service handles the extraction and management of representative speech snippets +from recordings. Snippets provide context when viewing speaker profiles and help +users verify speaker identifications. + +Key functions: +- Extract snippets when speakers are identified in recordings +- Retrieve snippets for display in speaker profiles +- Clean up old snippets to prevent database bloat +""" + +import json +from src.database import db +from src.models import Speaker, SpeakerSnippet, Recording + +MAX_SNIPPETS_PER_SPEAKER = 7 +MAX_SNIPPETS_PER_RECORDING = 2 + + +def create_speaker_snippets(recording_id, speaker_map): + """ + Extract and store representative snippets for each identified speaker. + + This function is called after a user saves speaker identifications in a recording. + It extracts up to MAX_SNIPPETS_PER_RECORDING quotes per speaker from this recording, + and enforces a global cap of MAX_SNIPPETS_PER_SPEAKER by evicting the oldest. + + Args: + recording_id: ID of the recording + speaker_map: Dict mapping SPEAKER_XX to speaker info + {'SPEAKER_00': {'name': 'John Doe', 'isMe': False}, ...} + + Returns: + int: Number of snippets created + """ + recording = Recording.query.get(recording_id) + if not recording or not recording.transcription: + return 0 + + try: + transcript = json.loads(recording.transcription) + except (json.JSONDecodeError, TypeError): + return 0 + + # Build a reverse map: assigned name -> speaker_info + # After transcript is saved, segment['speaker'] contains the real name, + # not the original SPEAKER_XX label. We need to match by name too. + name_to_info = {} + for label, info in speaker_map.items(): + name = info.get('name', '').strip() + if name and not name.startswith('SPEAKER_'): + name_to_info[name] = info + + # Collect candidates per speaker: (speaker_obj, segment_idx, text, timestamp) + candidates = {} # speaker_id -> list of (segment_idx, text, timestamp) + + for segment_idx, segment in enumerate(transcript): + speaker_field = segment.get('speaker') + + if not speaker_field: + continue + + # Try matching by original label first, then by assigned name + if speaker_field in speaker_map: + speaker_info = speaker_map[speaker_field] + speaker_name = speaker_info.get('name') + elif speaker_field in name_to_info: + speaker_name = speaker_field + else: + continue + + if not speaker_name or speaker_name.startswith('SPEAKER_'): + continue + + # Find the speaker in database + speaker = Speaker.query.filter_by( + user_id=recording.user_id, + name=speaker_name + ).first() + + if not speaker: + continue + + text = segment.get('sentence', '').strip() + if len(text) < 10: + continue + + if speaker.id not in candidates: + candidates[speaker.id] = [] + candidates[speaker.id].append((segment_idx, text[:200], segment.get('start_time'))) + + # Delete existing snippets for this recording (re-save replaces them) + SpeakerSnippet.query.filter_by(recording_id=recording_id).delete() + + snippets_created = 0 + + for speaker_id, segs in candidates.items(): + # Pick up to MAX_SNIPPETS_PER_RECORDING spread across the transcript + if len(segs) <= MAX_SNIPPETS_PER_RECORDING: + chosen = segs + else: + # Evenly sample from the segments + step = len(segs) / MAX_SNIPPETS_PER_RECORDING + chosen = [segs[int(i * step)] for i in range(MAX_SNIPPETS_PER_RECORDING)] + + for segment_idx, text_snippet, timestamp in chosen: + # Evict oldest if at global cap + global_count = SpeakerSnippet.query.filter_by(speaker_id=speaker_id).count() + if global_count >= MAX_SNIPPETS_PER_SPEAKER: + oldest = SpeakerSnippet.query.filter_by(speaker_id=speaker_id)\ + .order_by(SpeakerSnippet.created_at.asc()).first() + if oldest: + db.session.delete(oldest) + db.session.flush() + + snippet = SpeakerSnippet( + speaker_id=speaker_id, + recording_id=recording_id, + segment_index=segment_idx, + text_snippet=text_snippet, + timestamp=timestamp, + ) + db.session.add(snippet) + snippets_created += 1 + + # Flush after each speaker batch to keep counts accurate + db.session.flush() + + if snippets_created > 0: + db.session.commit() + + return snippets_created + + +def _generate_dynamic_snippets(speaker_id, limit=3): + """ + Dynamically generate audio snippets from a speaker's recent recordings. + + This function finds short audio segments (3-4 seconds) from recent recordings + where the speaker appears. These can be played back to verify speaker identity. + + Args: + speaker_id: ID of the speaker + limit: Maximum number of snippets to return (default 3) + + Returns: + list: List of snippet dictionaries with audio segment information + [{'recording_id': 123, 'start_time': 45.2, 'duration': 3.5, ...}, ...] + """ + # Get the speaker + speaker = Speaker.query.get(speaker_id) + if not speaker: + return [] + + # Find recordings that have this speaker's name in transcription + # We'll look at the last 10 recordings and extract snippets from them + recordings = Recording.query.filter_by(user_id=speaker.user_id)\ + .filter(Recording.transcription.isnot(None))\ + .filter(Recording.transcription != '')\ + .filter(Recording.audio_deleted_at.is_(None))\ + .order_by(Recording.created_at.desc())\ + .limit(10).all() + + snippets = [] + + for recording in recordings: + if len(snippets) >= limit: + break + + try: + # Parse transcription JSON + transcript = json.loads(recording.transcription) + + if not isinstance(transcript, list): + continue + + # Find segments where this speaker appears + speaker_segments = [] + for idx, segment in enumerate(transcript): + # Check if segment has speaker identification matching our speaker's name + speaker_label = segment.get('speaker') + + # In identified transcripts, the speaker field contains the actual name + if speaker_label != speaker.name: + continue + + start_time = segment.get('start_time') + end_time = segment.get('end_time') + + if start_time is None or end_time is None: + continue + + duration = end_time - start_time + + # Skip very short segments (less than 2 seconds) + if duration < 2.0: + continue + + speaker_segments.append({ + 'index': idx, + 'start_time': start_time, + 'end_time': end_time, + 'duration': duration, + 'text': segment.get('sentence', '').strip()[:100] # Preview text + }) + + if not speaker_segments: + continue + + # Take snippets from middle portions (skip first and last 10%) + total_segments = len(speaker_segments) + if total_segments > 4: + # Skip first and last 10% + start_idx = max(1, int(total_segments * 0.1)) + end_idx = min(total_segments - 1, int(total_segments * 0.9)) + middle_segments = speaker_segments[start_idx:end_idx] + else: + middle_segments = speaker_segments + + # Take 1 snippet per recording from the middle + if middle_segments: + # Pick a segment from the middle + middle_idx = len(middle_segments) // 2 + segment = middle_segments[middle_idx] + + # Limit audio snippet to 3-4 seconds + snippet_duration = min(4.0, segment['duration']) + + snippets.append({ + 'id': None, # Dynamic snippet, no database ID + 'speaker_id': speaker_id, + 'recording_id': recording.id, + 'start_time': segment['start_time'], + 'duration': snippet_duration, + 'text': segment['text'], # Preview text for context + 'recording_title': recording.title or 'Untitled Recording', + 'created_at': recording.created_at.isoformat() if recording.created_at else None + }) + + except (json.JSONDecodeError, TypeError, KeyError) as e: + # Skip recordings with invalid transcription format + continue + + return snippets + + +def get_speaker_snippets(speaker_id, limit=3): + """ + Get recent audio snippets for a speaker. + + Returns short audio segments (3-4 seconds) from recent recordings where this + speaker appears. These audio snippets can be played to verify speaker identity. + + Args: + speaker_id: ID of the speaker + limit: Maximum number of snippets to return (default 3) + + Returns: + list: List of snippet dictionaries with audio segment information + [{'recording_id': 123, 'start_time': 45.2, 'duration': 3.5, ...}, ...] + """ + # Always dynamically generate audio snippets from recent recordings + return _generate_dynamic_snippets(speaker_id, limit) + + +def get_snippets_by_recording(recording_id, speaker_id): + """ + Get all snippets for a specific speaker in a specific recording. + + Args: + recording_id: ID of the recording + speaker_id: ID of the speaker + + Returns: + list: List of snippet dictionaries + """ + snippets = SpeakerSnippet.query.filter_by( + recording_id=recording_id, + speaker_id=speaker_id + ).order_by(SpeakerSnippet.segment_index).all() + + return [snippet.to_dict() for snippet in snippets] + + +def cleanup_old_snippets(speaker_id, keep=10): + """ + Clean up old snippets for a speaker, keeping only the most recent ones. + + Args: + speaker_id: ID of the speaker + keep: Number of snippets to keep (default 10) + + Returns: + int: Number of snippets deleted + """ + # Get all snippets for this speaker, ordered by creation date + all_snippets = SpeakerSnippet.query.filter_by(speaker_id=speaker_id)\ + .order_by(SpeakerSnippet.created_at.desc()).all() + + if len(all_snippets) <= keep: + return 0 + + # Delete old snippets beyond the keep limit + snippets_to_delete = all_snippets[keep:] + deleted_count = 0 + + for snippet in snippets_to_delete: + db.session.delete(snippet) + deleted_count += 1 + + if deleted_count > 0: + db.session.commit() + + return deleted_count + + +def delete_snippets_for_recording(recording_id): + """ + Delete all snippets associated with a recording. + + This is typically called when a recording is deleted or reprocessed. + + Args: + recording_id: ID of the recording + + Returns: + int: Number of snippets deleted + """ + deleted_count = SpeakerSnippet.query.filter_by(recording_id=recording_id).delete() + db.session.commit() + return deleted_count + + +def get_speaker_recordings_with_snippets(speaker_id): + """ + Get a list of recordings that have snippets for this speaker. + + Args: + speaker_id: ID of the speaker + + Returns: + list: List of recording dictionaries with snippet counts + [{'id': 123, 'title': '...', 'snippet_count': 3, 'date': '...'}, ...] + """ + # Get distinct recordings with snippet counts + from sqlalchemy import func + + recordings_with_counts = db.session.query( + Recording.id, + Recording.title, + Recording.created_at, + func.count(SpeakerSnippet.id).label('snippet_count') + ).join( + SpeakerSnippet, + Recording.id == SpeakerSnippet.recording_id + ).filter( + SpeakerSnippet.speaker_id == speaker_id + ).group_by( + Recording.id + ).order_by( + Recording.created_at.desc() + ).all() + + return [{ + 'id': r.id, + 'title': r.title, + 'snippet_count': r.snippet_count, + 'created_at': r.created_at.isoformat() if r.created_at else None + } for r in recordings_with_counts] diff --git a/src/services/token_tracking.py b/src/services/token_tracking.py new file mode 100644 index 0000000..d05390d --- /dev/null +++ b/src/services/token_tracking.py @@ -0,0 +1,270 @@ +""" +Token usage tracking service for monitoring LLM API consumption and budget enforcement. +""" + +import logging +from datetime import date, datetime, timedelta +from typing import Tuple, Optional, Dict, List + +from sqlalchemy import func, extract + +from src.database import db +from src.models.token_usage import TokenUsage +from src.models.user import User + +logger = logging.getLogger(__name__) + + +class TokenTracker: + """Service for recording and checking token usage.""" + + OPERATION_TYPES = [ + 'summarization', + 'chat', + 'title_generation', + 'event_extraction', + 'query_routing', + 'query_enrichment' + ] + + def record_usage( + self, + user_id: int, + operation_type: str, + prompt_tokens: int, + completion_tokens: int, + total_tokens: int, + model_name: str = None, + cost: float = None + ): + """ + Record token usage - upserts into daily aggregate. + + Args: + user_id: User ID who made the request + operation_type: Type of operation (summarization, chat, etc.) + prompt_tokens: Number of input tokens + completion_tokens: Number of output tokens + total_tokens: Total tokens (prompt + completion) + model_name: Name of the model used + cost: API cost if available (e.g., from OpenRouter) + """ + try: + today = date.today() + + # Find or create today's record for this user/operation + usage = TokenUsage.query.filter_by( + user_id=user_id, + date=today, + operation_type=operation_type + ).first() + + if usage: + # Update existing record + usage.prompt_tokens += prompt_tokens + usage.completion_tokens += completion_tokens + usage.total_tokens += total_tokens + usage.request_count += 1 + if cost: + usage.cost += cost + if model_name: + usage.model_name = model_name # Update to latest model used + else: + # Create new record + usage = TokenUsage( + user_id=user_id, + date=today, + operation_type=operation_type, + prompt_tokens=prompt_tokens, + completion_tokens=completion_tokens, + total_tokens=total_tokens, + request_count=1, + model_name=model_name, + cost=cost or 0.0 + ) + db.session.add(usage) + + db.session.commit() + logger.debug(f"Recorded {total_tokens} tokens for user {user_id}, operation {operation_type}") + return usage + + except Exception as e: + logger.error(f"Failed to record token usage: {e}") + db.session.rollback() + return None + + def get_monthly_usage(self, user_id: int, year: int = None, month: int = None) -> int: + """Get total tokens used by a user in a given month.""" + if year is None: + year = date.today().year + if month is None: + month = date.today().month + + result = db.session.query(func.sum(TokenUsage.total_tokens)).filter( + TokenUsage.user_id == user_id, + extract('year', TokenUsage.date) == year, + extract('month', TokenUsage.date) == month + ).scalar() + + return result or 0 + + def get_monthly_cost(self, user_id: int, year: int = None, month: int = None) -> float: + """Get total cost for a user in a given month.""" + if year is None: + year = date.today().year + if month is None: + month = date.today().month + + result = db.session.query(func.sum(TokenUsage.cost)).filter( + TokenUsage.user_id == user_id, + extract('year', TokenUsage.date) == year, + extract('month', TokenUsage.date) == month + ).scalar() + + return result or 0.0 + + def check_budget(self, user_id: int) -> Tuple[bool, float, Optional[str]]: + """ + Check if user is within budget. + + Returns: + (can_proceed, usage_percentage, message) + - can_proceed: False if hard cap (100%) reached + - usage_percentage: 0-100+ + - message: Warning/error message if applicable + """ + try: + user = db.session.get(User, user_id) + if not user or not user.monthly_token_budget: + return (True, 0, None) # No budget = unlimited + + current_usage = self.get_monthly_usage(user_id) + budget = user.monthly_token_budget + percentage = (current_usage / budget) * 100 + + if percentage >= 100: + return (False, percentage, + f"Monthly token budget exceeded ({percentage:.1f}%). Contact admin for more tokens.") + elif percentage >= 80: + return (True, percentage, + f"Warning: {percentage:.1f}% of monthly token budget used.") + else: + return (True, percentage, None) + + except Exception as e: + logger.error(f"Failed to check budget for user {user_id}: {e}") + # Fail open - allow the request if we can't check + return (True, 0, None) + + def get_daily_stats(self, days: int = 30, user_id: int = None) -> List[Dict]: + """Get daily token usage for charts.""" + start_date = date.today() - timedelta(days=days - 1) + + query = db.session.query( + TokenUsage.date, + TokenUsage.operation_type, + func.sum(TokenUsage.total_tokens).label('tokens'), + func.sum(TokenUsage.cost).label('cost') + ).filter(TokenUsage.date >= start_date) + + if user_id: + query = query.filter(TokenUsage.user_id == user_id) + + results = query.group_by(TokenUsage.date, TokenUsage.operation_type).all() + + # Organize by date + stats = {} + for r in results: + date_str = r.date.isoformat() + if date_str not in stats: + stats[date_str] = {'date': date_str, 'total': 0, 'cost': 0.0, 'by_operation': {}} + stats[date_str]['total'] += r.tokens or 0 + stats[date_str]['cost'] += r.cost or 0 + stats[date_str]['by_operation'][r.operation_type] = r.tokens or 0 + + # Fill in missing dates with zeros + all_dates = [] + current = start_date + while current <= date.today(): + date_str = current.isoformat() + if date_str not in stats: + stats[date_str] = {'date': date_str, 'total': 0, 'cost': 0.0, 'by_operation': {}} + all_dates.append(date_str) + current += timedelta(days=1) + + return [stats[d] for d in sorted(all_dates)] + + def get_monthly_stats(self, months: int = 12) -> List[Dict]: + """Get monthly token usage for charts.""" + results = db.session.query( + extract('year', TokenUsage.date).label('year'), + extract('month', TokenUsage.date).label('month'), + func.sum(TokenUsage.total_tokens).label('tokens'), + func.sum(TokenUsage.cost).label('cost') + ).group_by('year', 'month').order_by('year', 'month').all() + + # Get last N months + monthly_data = [ + { + 'year': int(r.year), + 'month': int(r.month), + 'tokens': r.tokens or 0, + 'cost': r.cost or 0 + } + for r in results + ] + + return monthly_data[-months:] if len(monthly_data) > months else monthly_data + + def get_user_stats(self) -> List[Dict]: + """Get per-user token usage breakdown for current month.""" + today = date.today() + + results = db.session.query( + User.id, + User.username, + User.monthly_token_budget, + func.sum(TokenUsage.total_tokens).label('usage'), + func.sum(TokenUsage.cost).label('cost') + ).outerjoin( + TokenUsage, + (User.id == TokenUsage.user_id) & + (extract('year', TokenUsage.date) == today.year) & + (extract('month', TokenUsage.date) == today.month) + ).group_by(User.id).all() + + return [ + { + 'user_id': r.id, + 'username': r.username, + 'monthly_budget': r.monthly_token_budget, + 'current_usage': r.usage or 0, + 'cost': r.cost or 0, + 'percentage': ((r.usage or 0) / r.monthly_token_budget * 100) + if r.monthly_token_budget else 0 + } + for r in results + ] + + def get_today_usage(self, user_id: int = None) -> Dict: + """Get today's token usage.""" + today = date.today() + + query = db.session.query( + func.sum(TokenUsage.total_tokens).label('tokens'), + func.sum(TokenUsage.cost).label('cost') + ).filter(TokenUsage.date == today) + + if user_id: + query = query.filter(TokenUsage.user_id == user_id) + + result = query.first() + + return { + 'tokens': result.tokens or 0, + 'cost': result.cost or 0 + } + + +# Singleton instance +token_tracker = TokenTracker() diff --git a/src/services/transcription/__init__.py b/src/services/transcription/__init__.py new file mode 100644 index 0000000..4b409f4 --- /dev/null +++ b/src/services/transcription/__init__.py @@ -0,0 +1,98 @@ +""" +Transcription service package. + +Provides a connector-based architecture for speech-to-text transcription +with support for multiple providers: + +- OpenAI Whisper (whisper-1) +- OpenAI GPT-4o Transcribe (gpt-4o-transcribe, gpt-4o-mini-transcribe, gpt-4o-transcribe-diarize) +- Custom ASR endpoints (whisper-asr-webservice, WhisperX, etc.) + +Usage: + from src.services.transcription import ( + transcribe, + get_connector, + supports_diarization, + TranscriptionRequest, + TranscriptionResponse, + ) + + # Simple transcription using active connector + with open('audio.mp3', 'rb') as f: + request = TranscriptionRequest( + audio_file=f, + filename='audio.mp3', + diarize=True + ) + response = transcribe(request) + print(response.text) + if response.segments: + for seg in response.segments: + print(f"[{seg.speaker}]: {seg.text}") +""" + +from .base import ( + TranscriptionCapability, + TranscriptionRequest, + TranscriptionResponse, + TranscriptionSegment, + BaseTranscriptionConnector, + ConnectorSpecifications, + DEFAULT_SPECIFICATIONS, +) + +from .exceptions import ( + TranscriptionError, + ConfigurationError, + ProviderError, + AudioFormatError, + ChunkingError, +) + +from .registry import ( + ConnectorRegistry, + get_registry, + connector_registry, + transcribe, + get_connector, + supports_diarization, +) + +from .connectors import ( + OpenAIWhisperConnector, + OpenAITranscribeConnector, + ASREndpointConnector, +) + +__all__ = [ + # Base types + 'TranscriptionCapability', + 'TranscriptionRequest', + 'TranscriptionResponse', + 'TranscriptionSegment', + 'BaseTranscriptionConnector', + 'ConnectorSpecifications', + 'DEFAULT_SPECIFICATIONS', + + # Exceptions + 'TranscriptionError', + 'ConfigurationError', + 'ProviderError', + 'AudioFormatError', + 'ChunkingError', + + # Registry + 'ConnectorRegistry', + 'get_registry', + 'connector_registry', + + # Convenience functions + 'transcribe', + 'get_connector', + 'supports_diarization', + + # Connectors + 'OpenAIWhisperConnector', + 'OpenAITranscribeConnector', + 'ASREndpointConnector', +] diff --git a/src/services/transcription/base.py b/src/services/transcription/base.py new file mode 100644 index 0000000..6ce0aa0 --- /dev/null +++ b/src/services/transcription/base.py @@ -0,0 +1,243 @@ +""" +Base classes and data types for transcription connectors. +""" + +import json +from abc import ABC, abstractmethod +from dataclasses import dataclass, field +from enum import Enum, auto +from typing import Optional, List, Dict, Any, BinaryIO, Set, Type, FrozenSet + + +class TranscriptionCapability(Enum): + """Capabilities that connectors can declare support for.""" + DIARIZATION = auto() # Speaker diarization + CHUNKING = auto() # Automatic file chunking for large files + TIMESTAMPS = auto() # Word/segment timestamps + LANGUAGE_DETECTION = auto() # Auto language detection + KNOWN_SPEAKERS = auto() # Support for known speaker references (future) + SPEAKER_EMBEDDINGS = auto() # Return speaker embeddings + SPEAKER_COUNT_CONTROL = auto() # Support for min/max speaker count parameters + STREAMING = auto() # Real-time streaming transcription + + +@dataclass +class ConnectorSpecifications: + """ + Provider-specific constraints and requirements. + + Each connector declares its constraints so the application can automatically + handle chunking, format conversion, and other preprocessing as needed. + """ + # Size constraints + max_file_size_bytes: Optional[int] = None # None = unlimited + + # Duration constraints + max_duration_seconds: Optional[int] = None # None = unlimited + min_duration_for_chunking: Optional[int] = None # Provider's internal chunking threshold + + # Chunking behavior + handles_chunking_internally: bool = False # Provider handles large files + requires_chunking_param: bool = False # Must send chunking_strategy param + recommended_chunk_seconds: int = 600 # 10 minutes default + + # Audio format support - connector-specific codec restrictions + # None = use system defaults from get_supported_codecs() + # Set = only allow these codecs (overrides defaults) + supported_codecs: Optional[FrozenSet[str]] = None + # Codecs this connector doesn't support (removed from defaults) + # Merged with AUDIO_UNSUPPORTED_CODECS env var + unsupported_codecs: Optional[FrozenSet[str]] = None + + +# Default specifications for connectors that don't define their own +DEFAULT_SPECIFICATIONS = ConnectorSpecifications() + + +@dataclass +class TranscriptionRequest: + """Standardized transcription request.""" + audio_file: BinaryIO + filename: str + mime_type: Optional[str] = None + language: Optional[str] = None + + # Diarization options + diarize: bool = False + min_speakers: Optional[int] = None + max_speakers: Optional[int] = None + known_speaker_names: Optional[List[str]] = None + # known_speaker_references: Dict mapping speaker label to either BinaryIO or data URL string + known_speaker_references: Optional[Dict[str, Any]] = None + + # Advanced options + prompt: Optional[str] = None + hotwords: Optional[str] = None # Comma-separated words to bias recognition + temperature: Optional[float] = None + + # Provider-specific options (passthrough) + extra_options: Dict[str, Any] = field(default_factory=dict) + + +@dataclass +class TranscriptionSegment: + """Single segment of transcription with optional metadata.""" + text: str + speaker: Optional[str] = None + start_time: Optional[float] = None + end_time: Optional[float] = None + confidence: Optional[float] = None + words: Optional[List[Dict[str, Any]]] = None + + +@dataclass +class TranscriptionResponse: + """Standardized transcription response.""" + # Core content + text: str # Plain text transcription + segments: Optional[List[TranscriptionSegment]] = None # Detailed segments + + # Metadata + language: Optional[str] = None # Detected language + duration: Optional[float] = None # Audio duration in seconds + + # Speaker information + speakers: Optional[List[str]] = None # List of speakers found + speaker_embeddings: Optional[Dict[str, List[float]]] = None + + # Provider info + provider: str = "" + model: str = "" + + # Raw response for debugging + raw_response: Optional[Dict[str, Any]] = None + + def to_storage_format(self) -> str: + """ + Convert to the JSON format used for storage in database. + + Returns a JSON string in the format expected by the existing codebase: + [ + { + "speaker": "SPEAKER_00", + "sentence": "Text here", + "start_time": 0.0, + "end_time": 5.5 + }, + ... + ] + """ + if self.segments: + return json.dumps([ + { + 'speaker': seg.speaker or 'Unknown Speaker', + 'sentence': seg.text, + 'start_time': seg.start_time, + 'end_time': seg.end_time + } + for seg in self.segments + ]) + # If no segments, return plain text (for non-diarized transcriptions) + return self.text + + def has_diarization(self) -> bool: + """Check if this response contains diarization data.""" + if not self.segments: + return False + return any(seg.speaker for seg in self.segments) + + +class BaseTranscriptionConnector(ABC): + """Abstract base class for transcription connectors.""" + + # Class-level capability declarations - subclasses should override + CAPABILITIES: Set[TranscriptionCapability] = set() + PROVIDER_NAME: str = "unknown" + + # Provider-specific constraints - subclasses should override + SPECIFICATIONS: ConnectorSpecifications = DEFAULT_SPECIFICATIONS + + def __init__(self, config: Dict[str, Any]): + """ + Initialize connector with configuration. + + Args: + config: Provider-specific configuration dict + """ + self.config = config + self._validate_config() + + @abstractmethod + def _validate_config(self) -> None: + """ + Validate required configuration is present. + + Raises: + ConfigurationError: If required config is missing or invalid + """ + pass + + @abstractmethod + def transcribe(self, request: TranscriptionRequest) -> TranscriptionResponse: + """ + Perform transcription. + + Args: + request: Standardized transcription request + + Returns: + Standardized transcription response + + Raises: + TranscriptionError: On transcription failure + ConfigurationError: On configuration issues + """ + pass + + def supports(self, capability: TranscriptionCapability) -> bool: + """Check if connector supports a capability.""" + return capability in self.CAPABILITIES + + def get_capabilities(self) -> Set[TranscriptionCapability]: + """Get all supported capabilities.""" + return self.CAPABILITIES.copy() + + @property + def supports_diarization(self) -> bool: + """Check if connector supports speaker diarization.""" + return TranscriptionCapability.DIARIZATION in self.CAPABILITIES + + @property + def supports_chunking(self) -> bool: + """Check if connector supports automatic file chunking.""" + return TranscriptionCapability.CHUNKING in self.CAPABILITIES + + @property + def supports_speaker_count_control(self) -> bool: + """Check if connector supports min/max speaker count parameters.""" + return TranscriptionCapability.SPEAKER_COUNT_CONTROL in self.CAPABILITIES + + @property + def specifications(self) -> ConnectorSpecifications: + """Get connector specifications.""" + return self.SPECIFICATIONS + + @classmethod + def get_config_schema(cls) -> Dict[str, Any]: + """ + Return JSON schema for this connector's configuration. + Useful for admin UI and validation. + + Returns: + JSON schema dict describing required and optional config + """ + return {} + + def health_check(self) -> bool: + """ + Check if the connector is properly configured and reachable. + + Returns: + True if the connector is healthy, False otherwise + """ + return True diff --git a/src/services/transcription/connectors/__init__.py b/src/services/transcription/connectors/__init__.py new file mode 100644 index 0000000..2266fd7 --- /dev/null +++ b/src/services/transcription/connectors/__init__.py @@ -0,0 +1,15 @@ +""" +Transcription connector implementations. +""" + +from .openai_whisper import OpenAIWhisperConnector +from .openai_transcribe import OpenAITranscribeConnector +from .asr_endpoint import ASREndpointConnector +from .azure_openai_transcribe import AzureOpenAITranscribeConnector + +__all__ = [ + 'OpenAIWhisperConnector', + 'OpenAITranscribeConnector', + 'ASREndpointConnector', + 'AzureOpenAITranscribeConnector', +] diff --git a/src/services/transcription/connectors/asr_endpoint.py b/src/services/transcription/connectors/asr_endpoint.py new file mode 100644 index 0000000..d3f9266 --- /dev/null +++ b/src/services/transcription/connectors/asr_endpoint.py @@ -0,0 +1,337 @@ +""" +ASR Endpoint connector for custom self-hosted ASR services. + +Supports whisper-asr-webservice, WhisperX, and other compatible ASR services +that expose a /asr endpoint. +""" + +import logging +import os +import httpx +from typing import Dict, Any, Set, Optional + +from ..base import ( + BaseTranscriptionConnector, + TranscriptionCapability, + TranscriptionRequest, + TranscriptionResponse, + TranscriptionSegment, + ConnectorSpecifications, +) +from ..exceptions import TranscriptionError, ConfigurationError, ProviderError +from src.config.app_config import ASR_ENABLE_CHUNKING, ASR_MAX_DURATION_SECONDS + +logger = logging.getLogger(__name__) + + +class ASREndpointConnector(BaseTranscriptionConnector): + """Connector for custom ASR webservice (whisper-asr-webservice, WhisperX, etc.).""" + + CAPABILITIES: Set[TranscriptionCapability] = { + TranscriptionCapability.DIARIZATION, + TranscriptionCapability.TIMESTAMPS, + TranscriptionCapability.LANGUAGE_DETECTION, + TranscriptionCapability.SPEAKER_COUNT_CONTROL, # Supports min/max speakers + } + PROVIDER_NAME = "asr_endpoint" + + # SPECIFICATIONS is set dynamically in __init__ based on ASR_ENABLE_CHUNKING config + # Default values here for class-level reference (overridden per-instance) + SPECIFICATIONS = ConnectorSpecifications( + max_file_size_bytes=None, + max_duration_seconds=None, + handles_chunking_internally=True, + ) + + def __init__(self, config: Dict[str, Any]): + """ + Initialize the ASR Endpoint connector. + + Args: + config: Configuration dict with keys: + - base_url: ASR service base URL (required) + - timeout: Request timeout in seconds (default: 1800) + - return_speaker_embeddings: Whether to request embeddings (default: False) + - diarize: Whether to enable diarization by default (default: True) + """ + super().__init__(config) + + self.base_url = config['base_url'].rstrip('/') + self._config_timeout = config.get('timeout', 1800) # 30 minutes default + self.return_embeddings = config.get('return_speaker_embeddings', False) + self.default_diarize = config.get('diarize', True) + + # Configure chunking behavior based on environment variables + # ASR_ENABLE_CHUNKING=true enables app-level chunking for self-hosted ASR services + # that may crash on long files due to GPU memory exhaustion + if ASR_ENABLE_CHUNKING: + # Calculate recommended chunk size (80% of max for safety margin) + recommended_chunk = int(ASR_MAX_DURATION_SECONDS * 0.8) + self.SPECIFICATIONS = ConnectorSpecifications( + max_file_size_bytes=None, # No file size limit + max_duration_seconds=ASR_MAX_DURATION_SECONDS, + handles_chunking_internally=False, # App handles chunking + recommended_chunk_seconds=recommended_chunk, + ) + logger.info( + f"ASR chunking enabled: max_duration={ASR_MAX_DURATION_SECONDS}s, " + f"recommended_chunk={recommended_chunk}s" + ) + else: + # Default behavior: ASR service handles everything internally + self.SPECIFICATIONS = ConnectorSpecifications( + max_file_size_bytes=None, + max_duration_seconds=None, + handles_chunking_internally=True, + ) + + # Add speaker embeddings capability if enabled + if self.return_embeddings: + self.CAPABILITIES = self.CAPABILITIES | {TranscriptionCapability.SPEAKER_EMBEDDINGS} + + @property + def timeout(self): + """Get ASR timeout, reading fresh from env/DB each time to respect runtime changes.""" + # Environment variables take priority + env_timeout = os.environ.get('ASR_TIMEOUT') or os.environ.get('asr_timeout_seconds') + if env_timeout: + try: + return int(env_timeout) + except (ValueError, TypeError): + pass + + # Try database setting (Admin UI) + try: + from src.models import SystemSetting + db_timeout = SystemSetting.get_setting('asr_timeout_seconds', None) + if db_timeout is not None: + return int(db_timeout) + except Exception: + pass + + # Fall back to config value from initialization + return self._config_timeout + + def _validate_config(self) -> None: + """Validate required configuration.""" + if not self.config.get('base_url'): + raise ConfigurationError("base_url is required for ASR endpoint connector") + + def transcribe(self, request: TranscriptionRequest) -> TranscriptionResponse: + """ + Transcribe audio using ASR webservice. + + Args: + request: Standardized transcription request + + Returns: + TranscriptionResponse with segments and speaker information + """ + try: + url = f"{self.base_url}/asr" + + params = { + 'encode': True, + 'task': 'transcribe', + 'output': 'json' + } + + if request.language: + params['language'] = request.language + logger.info(f"Using transcription language: {request.language}") + + # Determine if we should diarize + should_diarize = request.diarize if request.diarize is not None else self.default_diarize + + # Send both parameter names for compatibility: + # - 'diarize' is used by whisper-asr-webservice + # - 'enable_diarization' is used by WhisperX + params['diarize'] = should_diarize + params['enable_diarization'] = should_diarize + + if should_diarize and self.return_embeddings: + params['return_speaker_embeddings'] = True + + if request.min_speakers: + params['min_speakers'] = request.min_speakers + if request.max_speakers: + params['max_speakers'] = request.max_speakers + + if request.prompt: + params['initial_prompt'] = request.prompt + if request.hotwords: + params['hotwords'] = request.hotwords + + content_type = request.mime_type or 'application/octet-stream' + files = { + 'audio_file': (request.filename, request.audio_file, content_type) + } + + # Configure timeout: generous values for large file uploads + # Write timeout needs to be high too - large files take time to upload + timeout = httpx.Timeout( + None, + connect=60.0, + read=float(self.timeout), + write=float(self.timeout), + pool=None + ) + + logger.info(f"Sending ASR request to {url} with params: {params} (timeout: {self.timeout}s)") + + with httpx.Client() as client: + response = client.post(url, params=params, files=files, timeout=timeout) + logger.info(f"ASR request completed with status: {response.status_code}") + response.raise_for_status() + + # Parse the JSON response + response_text = response.text + try: + data = response.json() + except Exception as json_err: + if response_text.strip().startswith('<'): + logger.error(f"ASR returned HTML error page (status {response.status_code})") + raise ProviderError( + f"ASR service returned HTML error page", + provider=self.PROVIDER_NAME, + status_code=response.status_code + ) + else: + raise ProviderError( + f"ASR service returned invalid response: {json_err}", + provider=self.PROVIDER_NAME, + status_code=response.status_code + ) + + return self._parse_response(data) + + except httpx.HTTPStatusError as e: + logger.error(f"ASR request failed with status {e.response.status_code}") + raise ProviderError( + f"ASR request failed with status {e.response.status_code}", + provider=self.PROVIDER_NAME, + status_code=e.response.status_code + ) from e + + except httpx.TimeoutException as e: + logger.error(f"ASR request timed out after {self.timeout}s") + raise TranscriptionError(f"ASR request timed out after {self.timeout}s") from e + + except Exception as e: + error_msg = str(e) + logger.error(f"ASR transcription failed: {error_msg}") + raise TranscriptionError(f"ASR transcription failed: {error_msg}") from e + + def _parse_response(self, data: Dict[str, Any]) -> TranscriptionResponse: + """ + Parse ASR webservice response into standardized format. + + The ASR response contains: + - text: Full transcription text + - language: Detected language + - segments: Array of segments with speaker, text, start, end + - speaker_embeddings: Optional speaker embeddings (WhisperX only) + """ + segments = [] + speakers = set() + full_text_parts = [] + last_speaker = None + + logger.info(f"ASR response keys: {list(data.keys())}") + + if 'segments' in data and isinstance(data['segments'], list): + logger.info(f"Number of segments: {len(data['segments'])}") + + for seg in data['segments']: + speaker = seg.get('speaker') + + # Handle missing speakers by carrying forward from previous segment + if speaker is None: + if last_speaker is not None: + speaker = last_speaker + else: + speaker = 'UNKNOWN_SPEAKER' + else: + last_speaker = speaker + + text = seg.get('text', '').strip() + speakers.add(speaker) + full_text_parts.append(f"[{speaker}]: {text}") + + segments.append(TranscriptionSegment( + text=text, + speaker=speaker, + start_time=seg.get('start'), + end_time=seg.get('end') + )) + + # Get the full text + if 'text' in data and isinstance(data['text'], str): + full_text = data['text'] + elif full_text_parts: + full_text = '\n'.join(full_text_parts) + else: + full_text = '' + + # Extract speaker embeddings if present + speaker_embeddings = data.get('speaker_embeddings') + if speaker_embeddings: + logger.info(f"Received speaker embeddings for speakers: {list(speaker_embeddings.keys())}") + + logger.info(f"Parsed {len(segments)} segments with {len(speakers)} unique speakers: {sorted(speakers)}") + + return TranscriptionResponse( + text=full_text, + segments=segments, + speakers=sorted(list(speakers)), + speaker_embeddings=speaker_embeddings, + language=data.get('language'), + provider=self.PROVIDER_NAME, + model="asr-endpoint", + raw_response=data + ) + + def health_check(self) -> bool: + """Check if ASR endpoint is reachable.""" + try: + with httpx.Client(timeout=10.0) as client: + # Try common health check endpoints + for endpoint in ['/health', '/']: + try: + response = client.get(f"{self.base_url}{endpoint}") + if response.status_code < 500: + return True + except Exception: + continue + return False + except Exception: + return False + + @classmethod + def get_config_schema(cls) -> Dict[str, Any]: + """Return JSON schema for configuration.""" + return { + "type": "object", + "required": ["base_url"], + "properties": { + "base_url": { + "type": "string", + "description": "ASR service base URL (e.g., http://whisper-asr:9000)" + }, + "timeout": { + "type": "integer", + "default": 1800, + "description": "Request timeout in seconds" + }, + "diarize": { + "type": "boolean", + "default": True, + "description": "Enable speaker diarization by default" + }, + "return_speaker_embeddings": { + "type": "boolean", + "default": False, + "description": "Request speaker embeddings (WhisperX only)" + } + } + } diff --git a/src/services/transcription/connectors/azure_openai_transcribe.py b/src/services/transcription/connectors/azure_openai_transcribe.py new file mode 100644 index 0000000..c4e9241 --- /dev/null +++ b/src/services/transcription/connectors/azure_openai_transcribe.py @@ -0,0 +1,370 @@ +""" +Azure OpenAI Transcribe connector. + +Supports Azure OpenAI audio transcription models: +- whisper-1: Basic transcription (no diarization) +- gpt-4o-transcribe: High quality transcription +- gpt-4o-mini-transcribe: Cost-effective transcription +- gpt-4o-transcribe-diarize: Speaker diarization with labels A, B, C, D + +Azure OpenAI uses a different API format than standard OpenAI: +- Endpoint: https://{resource}.openai.azure.com/openai/deployments/{deployment}/audio/transcriptions +- Requires api-version query parameter +- Uses api-key header for authentication +""" + +import logging +import httpx +from typing import Dict, Any, Set, Optional + +from ..base import ( + BaseTranscriptionConnector, + TranscriptionCapability, + TranscriptionRequest, + TranscriptionResponse, + TranscriptionSegment, + ConnectorSpecifications, +) +from ..exceptions import TranscriptionError, ConfigurationError + +logger = logging.getLogger(__name__) + + +class AzureOpenAITranscribeConnector(BaseTranscriptionConnector): + """Connector for Azure OpenAI audio transcription models.""" + + # Base capabilities - diarization added dynamically based on model + CAPABILITIES: Set[TranscriptionCapability] = { + TranscriptionCapability.TIMESTAMPS, + TranscriptionCapability.LANGUAGE_DETECTION, + } + PROVIDER_NAME = "azure_openai_transcribe" + + # Default specifications (will be overridden per-model in __init__) + SPECIFICATIONS = ConnectorSpecifications( + max_file_size_bytes=25 * 1024 * 1024, # 25MB + max_duration_seconds=1400, # Default to most restrictive (diarize model) + min_duration_for_chunking=30, + handles_chunking_internally=False, + requires_chunking_param=True, + recommended_chunk_seconds=1200, + unsupported_codecs=frozenset({'opus'}), + ) + + # Models and their capabilities + MODELS = { + 'whisper-1': { + 'supports_diarization': False, + 'max_duration_seconds': 1500, + 'recommended_chunk_seconds': 1200, + 'description': 'OpenAI Whisper model on Azure' + }, + 'gpt-4o-transcribe': { + 'supports_diarization': False, + 'max_duration_seconds': 1500, + 'recommended_chunk_seconds': 1200, + 'description': 'High quality transcription' + }, + 'gpt-4o-mini-transcribe': { + 'supports_diarization': False, + 'max_duration_seconds': 1500, + 'recommended_chunk_seconds': 1200, + 'description': 'Cost-effective transcription' + }, + 'gpt-4o-mini-transcribe-2025-12-15': { + 'supports_diarization': False, + 'max_duration_seconds': 1500, + 'recommended_chunk_seconds': 1200, + 'description': 'Cost-effective transcription (dated version)' + }, + 'gpt-4o-transcribe-diarize': { + 'supports_diarization': True, + 'max_duration_seconds': 1400, + 'recommended_chunk_seconds': 1200, + 'description': 'Speaker diarization with labels A, B, C, D' + } + } + + # Default API version - can be overridden in config + DEFAULT_API_VERSION = "2025-04-01-preview" + + def __init__(self, config: Dict[str, Any]): + """ + Initialize the Azure OpenAI Transcribe connector. + + Args: + config: Configuration dict with keys: + - api_key: Azure OpenAI API key (required) + - endpoint: Azure OpenAI endpoint URL (required) + e.g., https://your-resource.openai.azure.com + - deployment_name: The deployment name for the model (required) + - api_version: API version (default: 2025-04-01-preview) + - model: Model name for validation (optional, defaults to deployment_name) + """ + # Store model/deployment before calling super().__init__ + self.deployment_name = config.get('deployment_name', '') + self.model = config.get('model', self.deployment_name) + self.api_version = config.get('api_version', self.DEFAULT_API_VERSION) + + # Set model-specific specifications + model_info = self.MODELS.get(self.model, {}) + if model_info: + self.SPECIFICATIONS = ConnectorSpecifications( + max_file_size_bytes=25 * 1024 * 1024, + max_duration_seconds=model_info.get('max_duration_seconds', 1400), + min_duration_for_chunking=30, + handles_chunking_internally=False, + requires_chunking_param=True, + recommended_chunk_seconds=model_info.get('recommended_chunk_seconds', 1200), + unsupported_codecs=frozenset({'opus'}), + ) + + super().__init__(config) + + # Parse endpoint URL + self.endpoint = config['endpoint'].rstrip('/') + + # Set up HTTP client + self.http_client = httpx.Client( + timeout=httpx.Timeout( + connect=60.0, + read=1800.0, # 30 minutes for long transcriptions + write=1800.0, + pool=None + ), + headers={ + "api-key": config['api_key'], + "User-Agent": "Speakr/1.0 (https://github.com/murtaza-nasir/speakr)" + } + ) + + # Dynamically update capabilities based on model + if self._model_supports_diarization(): + self.CAPABILITIES = self.CAPABILITIES | { + TranscriptionCapability.DIARIZATION, + TranscriptionCapability.KNOWN_SPEAKERS + } + + def _validate_config(self) -> None: + """Validate required configuration.""" + if not self.config.get('api_key'): + raise ConfigurationError("api_key is required for Azure OpenAI Transcribe connector") + if not self.config.get('endpoint'): + raise ConfigurationError("endpoint is required for Azure OpenAI Transcribe connector") + if not self.config.get('deployment_name'): + raise ConfigurationError("deployment_name is required for Azure OpenAI Transcribe connector") + + def _model_supports_diarization(self) -> bool: + """Check if the current model supports diarization.""" + model_info = self.MODELS.get(self.model, {}) + return model_info.get('supports_diarization', False) + + def _build_url(self) -> str: + """Build the Azure OpenAI transcription API URL.""" + return f"{self.endpoint}/openai/deployments/{self.deployment_name}/audio/transcriptions?api-version={self.api_version}" + + def transcribe(self, request: TranscriptionRequest) -> TranscriptionResponse: + """ + Transcribe audio using Azure OpenAI API. + + Args: + request: Standardized transcription request + + Returns: + TranscriptionResponse, with segments if using diarization model + """ + try: + url = self._build_url() + + # Build form data + data = {} + + if request.language: + data["language"] = request.language + logger.info(f"Using transcription language: {request.language}") + + # Handle diarization model specifics + is_diarize_model = 'diarize' in self.model.lower() + + if is_diarize_model: + # Required: chunking_strategy for audio > 30 seconds + data["chunking_strategy"] = "auto" + + if request.diarize: + data["response_format"] = "diarized_json" + logger.info("Using diarized_json response format for speaker diarization") + + # Known speaker support + if request.known_speaker_names and request.known_speaker_references: + for i, name in enumerate(request.known_speaker_names): + if name in request.known_speaker_references: + data[f"known_speaker_names[{i}]"] = name + data[f"known_speaker_references[{i}]"] = request.known_speaker_references[name] + logger.info(f"Using known speaker references for {len(request.known_speaker_names)} speakers") + else: + # Non-diarization models - request verbose_json for timestamps + data["response_format"] = "verbose_json" + # Combine initial prompt and hotwords into a single prompt + prompt_parts = [] + if request.prompt: + prompt_parts.append(request.prompt) + if request.hotwords: + prompt_parts.append(request.hotwords) + if prompt_parts: + data["prompt"] = ". ".join(prompt_parts) + + # Prepare file for upload + content_type = request.mime_type or 'application/octet-stream' + files = { + "file": (request.filename, request.audio_file, content_type) + } + + logger.info(f"Sending request to Azure OpenAI: {url}") + logger.info(f"Model: {self.model}, Deployment: {self.deployment_name}") + + response = self.http_client.post(url, data=data, files=files) + + if response.status_code != 200: + error_detail = response.text + try: + error_json = response.json() + if 'error' in error_json: + error_detail = error_json['error'].get('message', error_detail) + except: + pass + logger.error(f"Azure OpenAI transcription failed: {response.status_code} - {error_detail}") + raise TranscriptionError(f"Azure OpenAI transcription failed: {response.status_code} - {error_detail}") + + result = response.json() + + # Parse response based on format + if is_diarize_model and request.diarize: + return self._parse_diarized_response(result) + else: + return self._parse_response(result) + + except TranscriptionError: + raise + except Exception as e: + error_msg = str(e) + logger.error(f"Azure OpenAI transcription failed: {error_msg}") + raise TranscriptionError(f"Azure OpenAI transcription failed: {error_msg}") from e + + def _parse_response(self, response: Dict) -> TranscriptionResponse: + """Parse a standard (non-diarized) response.""" + text = response.get('text', '') + + # Check for segments (verbose_json format) + segments = [] + if 'segments' in response: + for seg in response['segments']: + segments.append(TranscriptionSegment( + text=seg.get('text', ''), + start_time=seg.get('start'), + end_time=seg.get('end') + )) + + return TranscriptionResponse( + text=text, + segments=segments if segments else None, + language=response.get('language'), + provider=self.PROVIDER_NAME, + model=self.model, + raw_response=response + ) + + def _parse_diarized_response(self, response: Dict) -> TranscriptionResponse: + """ + Parse diarized JSON response into standardized format. + + The diarized_json response contains segments with: + - speaker: "A", "B", "C", "D" etc. + - text: The transcribed text + - start: Segment start time + - end: Segment end time + """ + segments = [] + speakers = set() + full_text_parts = [] + + raw_segments = response.get('segments', []) + + if not raw_segments: + # Fallback to text-only response + logger.warning("No segments found in diarized response, falling back to text") + return self._parse_response(response) + + for seg in raw_segments: + speaker = seg.get('speaker', 'Unknown') + text = seg.get('text', '') + start = seg.get('start') + end = seg.get('end') + + # Skip empty segments + if not text or not text.strip(): + continue + + speakers.add(speaker) + full_text_parts.append(f"[{speaker}]: {text}") + + segments.append(TranscriptionSegment( + text=text, + speaker=speaker, + start_time=start, + end_time=end + )) + + # Build full text with speaker labels + full_text = '\n'.join(full_text_parts) + + logger.info(f"Parsed {len(segments)} segments with {len(speakers)} unique speakers: {sorted(speakers)}") + + return TranscriptionResponse( + text=full_text, + segments=segments, + speakers=sorted(list(speakers)), + language=response.get('language'), + provider=self.PROVIDER_NAME, + model=self.model, + raw_response=response + ) + + def health_check(self) -> bool: + """Check if the connector is properly configured.""" + return bool( + self.config.get('api_key') and + self.config.get('endpoint') and + self.config.get('deployment_name') + ) + + @classmethod + def get_config_schema(cls) -> Dict[str, Any]: + """Return JSON schema for configuration.""" + return { + "type": "object", + "required": ["api_key", "endpoint", "deployment_name"], + "properties": { + "api_key": { + "type": "string", + "description": "Azure OpenAI API key" + }, + "endpoint": { + "type": "string", + "description": "Azure OpenAI endpoint URL (e.g., https://your-resource.openai.azure.com)" + }, + "deployment_name": { + "type": "string", + "description": "The deployment name for your transcription model" + }, + "api_version": { + "type": "string", + "default": cls.DEFAULT_API_VERSION, + "description": "Azure OpenAI API version" + }, + "model": { + "type": "string", + "enum": list(cls.MODELS.keys()), + "description": "Model type (for capability detection, defaults to deployment_name)" + } + } + } diff --git a/src/services/transcription/connectors/openai_transcribe.py b/src/services/transcription/connectors/openai_transcribe.py new file mode 100644 index 0000000..f682803 --- /dev/null +++ b/src/services/transcription/connectors/openai_transcribe.py @@ -0,0 +1,329 @@ +""" +OpenAI GPT-4o Transcribe connector. + +Supports the newer GPT-4o based transcription models: +- gpt-4o-transcribe: High quality transcription +- gpt-4o-mini-transcribe: Cost-effective transcription +- gpt-4o-transcribe-diarize: Speaker diarization with labels A, B, C, D +""" + +import logging +import httpx +from openai import OpenAI +from typing import Dict, Any, Set, Optional + +from ..base import ( + BaseTranscriptionConnector, + TranscriptionCapability, + TranscriptionRequest, + TranscriptionResponse, + TranscriptionSegment, + ConnectorSpecifications, +) +from ..exceptions import TranscriptionError, ConfigurationError + +logger = logging.getLogger(__name__) + + +class OpenAITranscribeConnector(BaseTranscriptionConnector): + """Connector for GPT-4o Transcribe models with optional diarization support.""" + + # Base capabilities - diarization added dynamically based on model + CAPABILITIES: Set[TranscriptionCapability] = { + TranscriptionCapability.TIMESTAMPS, + TranscriptionCapability.LANGUAGE_DETECTION, + } + PROVIDER_NAME = "openai_transcribe" + + # GPT-4o Transcribe models have specific constraints + # - 25MB file size limit (all models) + # - Duration limits vary by model: + # - gpt-4o-transcribe / gpt-4o-mini-transcribe: 1500 seconds (25 min) + # - gpt-4o-transcribe-diarize: 1400 seconds (~23 min) + # - chunking_strategy="auto" handles files internally up to the duration limit + # Supported formats: mp3, mp4, mpeg, mpga, m4a, wav, webm, flac, ogg, oga + # NOT supported: opus (used by WhatsApp voice notes, Discord) + + # Default specifications (will be overridden per-model in __init__) + SPECIFICATIONS = ConnectorSpecifications( + max_file_size_bytes=25 * 1024 * 1024, # 25MB + max_duration_seconds=1400, # Default to most restrictive (diarize model) + min_duration_for_chunking=30, # >30s needs chunking_strategy param + handles_chunking_internally=False, # App must chunk files > max_duration_seconds + requires_chunking_param=True, # Must send chunking_strategy for >30s + recommended_chunk_seconds=1200, # 20 minutes - safe margin + unsupported_codecs=frozenset({'opus'}), # OpenAI API doesn't support opus + ) + + # Models and their capabilities with duration limits + MODELS = { + 'gpt-4o-transcribe': { + 'supports_diarization': False, + 'max_duration_seconds': 1500, # 25 minutes + 'recommended_chunk_seconds': 1200, # 20 minutes + 'description': 'High quality transcription' + }, + 'gpt-4o-mini-transcribe': { + 'supports_diarization': False, + 'max_duration_seconds': 1500, # 25 minutes + 'recommended_chunk_seconds': 1200, # 20 minutes + 'description': 'Cost-effective transcription' + }, + 'gpt-4o-mini-transcribe-2025-12-15': { + 'supports_diarization': False, + 'max_duration_seconds': 1500, # 25 minutes + 'recommended_chunk_seconds': 1200, # 20 minutes + 'description': 'Cost-effective transcription (dated version)' + }, + 'gpt-4o-transcribe-diarize': { + 'supports_diarization': True, + 'max_duration_seconds': 1400, # ~23 minutes (more restrictive) + 'recommended_chunk_seconds': 1200, # 20 minutes + 'description': 'Speaker diarization with labels A, B, C, D' + } + } + + def __init__(self, config: Dict[str, Any]): + """ + Initialize the GPT-4o Transcribe connector. + + Args: + config: Configuration dict with keys: + - api_key: OpenAI API key (required) + - base_url: API base URL (default: https://api.openai.com/v1) + - model: Model name (required, one of MODELS) + - http_client: Optional httpx.Client instance + """ + # Store model before calling super().__init__ since _validate_config needs it + self.model = config.get('model', 'gpt-4o-transcribe') + + # Set model-specific specifications (override class defaults) + # Use SPECIFICATIONS (uppercase) to shadow the class attribute + model_info = self.MODELS.get(self.model, {}) + self.SPECIFICATIONS = ConnectorSpecifications( + max_file_size_bytes=25 * 1024 * 1024, # 25MB (same for all) + max_duration_seconds=model_info.get('max_duration_seconds', 1400), + min_duration_for_chunking=30, + handles_chunking_internally=False, + requires_chunking_param=True, + recommended_chunk_seconds=model_info.get('recommended_chunk_seconds', 1200), + unsupported_codecs=frozenset({'opus'}), + ) + + super().__init__(config) + + # Set up HTTP client with custom headers + http_client = config.get('http_client') + if not http_client: + app_headers = { + "HTTP-Referer": "https://github.com/murtaza-nasir/speakr", + "X-Title": "Speakr - AI Audio Transcription", + "User-Agent": "Speakr/1.0 (https://github.com/murtaza-nasir/speakr)" + } + http_client = httpx.Client(verify=True, headers=app_headers) + + self.client = OpenAI( + api_key=config['api_key'], + base_url=config.get('base_url', 'https://api.openai.com/v1'), + http_client=http_client + ) + + # Dynamically update capabilities based on model + if self._model_supports_diarization(): + self.CAPABILITIES = self.CAPABILITIES | { + TranscriptionCapability.DIARIZATION, + TranscriptionCapability.KNOWN_SPEAKERS + } + + def _validate_config(self) -> None: + """Validate required configuration.""" + if not self.config.get('api_key'): + raise ConfigurationError("api_key is required for OpenAI Transcribe connector") + + model = self.config.get('model', 'gpt-4o-transcribe') + if model not in self.MODELS: + raise ConfigurationError( + f"Unknown model: {model}. Valid models: {list(self.MODELS.keys())}" + ) + + def _model_supports_diarization(self) -> bool: + """Check if the current model supports diarization.""" + model_info = self.MODELS.get(self.model, {}) + return model_info.get('supports_diarization', False) + + def transcribe(self, request: TranscriptionRequest) -> TranscriptionResponse: + """ + Transcribe audio using GPT-4o Transcribe API. + + Args: + request: Standardized transcription request + + Returns: + TranscriptionResponse, with segments if using diarization model + """ + try: + params = { + "model": self.model, + "file": request.audio_file, + } + + if request.language: + params["language"] = request.language + logger.info(f"Using transcription language: {request.language}") + + # Handle diarization model specifics + if self.model == 'gpt-4o-transcribe-diarize': + # Required: chunking_strategy for audio > 30 seconds + params["chunking_strategy"] = "auto" + + if request.diarize: + params["response_format"] = "diarized_json" + logger.info("Using diarized_json response format for speaker diarization") + + # Known speaker support for maintaining speaker identity across chunks + # known_speaker_names is a list of speaker labels (e.g., ["A", "B"]) + # known_speaker_references is a dict mapping label to data URL + if request.known_speaker_names and request.known_speaker_references: + # OpenAI expects lists for both parameters + speaker_names = [] + speaker_refs = [] + + for name in request.known_speaker_names: + if name in request.known_speaker_references: + speaker_names.append(name) + speaker_refs.append(request.known_speaker_references[name]) + + if speaker_names: + # Use extra_body to pass the known speaker parameters + params["extra_body"] = { + "known_speaker_names": speaker_names, + "known_speaker_references": speaker_refs + } + logger.info(f"Using known speaker references for {len(speaker_names)} speakers: {speaker_names}") + else: + # Non-diarization models - combine initial prompt and hotwords + prompt_parts = [] + if request.prompt: + prompt_parts.append(request.prompt) + if request.hotwords: + prompt_parts.append(request.hotwords) + if prompt_parts: + params["prompt"] = ". ".join(prompt_parts) + + logger.info(f"Sending request to GPT-4o Transcribe API with model: {self.model}") + response = self.client.audio.transcriptions.create(**params) + + # Parse response based on format + if self.model == 'gpt-4o-transcribe-diarize' and request.diarize: + return self._parse_diarized_response(response) + else: + return self._parse_text_response(response) + + except Exception as e: + error_msg = str(e) + logger.error(f"GPT-4o transcription failed: {error_msg}") + raise TranscriptionError(f"GPT-4o transcription failed: {error_msg}") from e + + def _parse_text_response(self, response) -> TranscriptionResponse: + """Parse a plain text response.""" + text = response.text if hasattr(response, 'text') else str(response) + return TranscriptionResponse( + text=text, + provider=self.PROVIDER_NAME, + model=self.model + ) + + def _parse_diarized_response(self, response) -> TranscriptionResponse: + """ + Parse diarized JSON response into standardized format. + + The diarized_json response contains segments with: + - speaker: "A", "B", "C", "D" etc. + - text: The transcribed text + - start: Segment start time + - end: Segment end time + """ + segments = [] + speakers = set() + full_text_parts = [] + + # Handle response object - could be dict or object with attributes + if hasattr(response, 'segments'): + raw_segments = response.segments + elif isinstance(response, dict) and 'segments' in response: + raw_segments = response['segments'] + else: + # Fallback to text-only response + logger.warning("No segments found in diarized response, falling back to text") + return self._parse_text_response(response) + + for seg in raw_segments: + # Handle both dict and object segments + if isinstance(seg, dict): + speaker = seg.get('speaker', 'Unknown') + text = seg.get('text', '') + start = seg.get('start') + end = seg.get('end') + else: + speaker = getattr(seg, 'speaker', 'Unknown') + text = getattr(seg, 'text', '') + start = getattr(seg, 'start', None) + end = getattr(seg, 'end', None) + + # Skip empty segments + if not text or not text.strip(): + continue + + speakers.add(speaker) + full_text_parts.append(f"[{speaker}]: {text}") + + segments.append(TranscriptionSegment( + text=text, + speaker=speaker, + start_time=start, + end_time=end + )) + + # Always use our formatted text with speaker labels for diarized responses + # OpenAI's response.text is plain text WITHOUT speaker labels + full_text = '\n'.join(full_text_parts) + + logger.info(f"Parsed {len(segments)} segments with {len(speakers)} unique speakers: {sorted(speakers)}") + + return TranscriptionResponse( + text=full_text, + segments=segments, + speakers=sorted(list(speakers)), + provider=self.PROVIDER_NAME, + model=self.model, + raw_response=response if isinstance(response, dict) else None + ) + + def health_check(self) -> bool: + """Check if the connector is properly configured.""" + return bool(self.config.get('api_key')) + + @classmethod + def get_config_schema(cls) -> Dict[str, Any]: + """Return JSON schema for configuration.""" + return { + "type": "object", + "required": ["api_key"], + "properties": { + "api_key": { + "type": "string", + "description": "OpenAI API key" + }, + "base_url": { + "type": "string", + "default": "https://api.openai.com/v1", + "description": "API base URL" + }, + "model": { + "type": "string", + "enum": list(cls.MODELS.keys()), + "default": "gpt-4o-transcribe", + "description": "GPT-4o transcription model to use" + } + } + } diff --git a/src/services/transcription/connectors/openai_whisper.py b/src/services/transcription/connectors/openai_whisper.py new file mode 100644 index 0000000..b52ad0a --- /dev/null +++ b/src/services/transcription/connectors/openai_whisper.py @@ -0,0 +1,153 @@ +""" +OpenAI Whisper API connector (whisper-1 model). + +This is the legacy Whisper API connector that supports the whisper-1 model. +It returns plain text transcriptions without speaker diarization. +""" + +import logging +import os +import httpx +from openai import OpenAI +from typing import Dict, Any, Set + +from ..base import ( + BaseTranscriptionConnector, + TranscriptionCapability, + TranscriptionRequest, + TranscriptionResponse, + ConnectorSpecifications, +) +from ..exceptions import TranscriptionError, ConfigurationError + +logger = logging.getLogger(__name__) + + +class OpenAIWhisperConnector(BaseTranscriptionConnector): + """Connector for OpenAI Whisper API (whisper-1 model).""" + + CAPABILITIES: Set[TranscriptionCapability] = { + TranscriptionCapability.CHUNKING, + TranscriptionCapability.TIMESTAMPS, + TranscriptionCapability.LANGUAGE_DETECTION, + } + PROVIDER_NAME = "openai_whisper" + + # OpenAI Whisper has a 25MB file limit and doesn't handle chunking internally + # Supported formats: mp3, mp4, mpeg, mpga, m4a, wav, webm, flac, ogg, oga + # NOT supported: opus (used by WhatsApp voice notes, Discord) + SPECIFICATIONS = ConnectorSpecifications( + max_file_size_bytes=25 * 1024 * 1024, # 25MB + handles_chunking_internally=False, + recommended_chunk_seconds=600, # 10 minutes + unsupported_codecs=frozenset({'opus'}), # OpenAI API doesn't support opus + ) + + def __init__(self, config: Dict[str, Any]): + """ + Initialize the Whisper connector. + + Args: + config: Configuration dict with keys: + - api_key: OpenAI API key (required) + - base_url: API base URL (optional) + - model: Model name (default: whisper-1) + - http_client: Optional httpx.Client instance + """ + super().__init__(config) + + # Set up HTTP client with custom headers + http_client = config.get('http_client') + if not http_client: + app_headers = { + "HTTP-Referer": "https://github.com/murtaza-nasir/speakr", + "X-Title": "Speakr - AI Audio Transcription", + "User-Agent": "Speakr/1.0 (https://github.com/murtaza-nasir/speakr)" + } + http_client = httpx.Client(verify=True, headers=app_headers) + + self.client = OpenAI( + api_key=config['api_key'], + base_url=config.get('base_url') or None, + http_client=http_client + ) + self.model = config.get('model', 'whisper-1') + + def _validate_config(self) -> None: + """Validate required configuration.""" + if not self.config.get('api_key'): + raise ConfigurationError("api_key is required for OpenAI Whisper connector") + + def transcribe(self, request: TranscriptionRequest) -> TranscriptionResponse: + """ + Transcribe audio using OpenAI Whisper API. + + Args: + request: Standardized transcription request + + Returns: + TranscriptionResponse with plain text (no diarization) + """ + try: + params = { + "model": self.model, + "file": request.audio_file, + } + + if request.language: + params["language"] = request.language + logger.info(f"Using transcription language: {request.language}") + + # Combine initial prompt and hotwords into a single prompt + # OpenAI Whisper uses prompt for both steering and vocabulary hints + prompt_parts = [] + if request.prompt: + prompt_parts.append(request.prompt) + if request.hotwords: + prompt_parts.append(request.hotwords) + if prompt_parts: + params["prompt"] = ". ".join(prompt_parts) + + if request.temperature is not None: + params["temperature"] = request.temperature + + logger.info(f"Sending request to Whisper API with model: {self.model}") + transcript = self.client.audio.transcriptions.create(**params) + + return TranscriptionResponse( + text=transcript.text, + provider=self.PROVIDER_NAME, + model=self.model + ) + + except Exception as e: + error_msg = str(e) + logger.error(f"Whisper transcription failed: {error_msg}") + raise TranscriptionError(f"Whisper transcription failed: {error_msg}") from e + + def health_check(self) -> bool: + """Check if the connector is properly configured.""" + return bool(self.config.get('api_key')) + + @classmethod + def get_config_schema(cls) -> Dict[str, Any]: + """Return JSON schema for configuration.""" + return { + "type": "object", + "required": ["api_key"], + "properties": { + "api_key": { + "type": "string", + "description": "OpenAI API key" + }, + "base_url": { + "type": "string", + "description": "API base URL (optional, for OpenAI-compatible endpoints)" + }, + "model": { + "type": "string", + "default": "whisper-1", + "description": "Whisper model to use" + } + } + } diff --git a/src/services/transcription/exceptions.py b/src/services/transcription/exceptions.py new file mode 100644 index 0000000..d9de52d --- /dev/null +++ b/src/services/transcription/exceptions.py @@ -0,0 +1,32 @@ +""" +Custom exceptions for transcription services. +""" + + +class TranscriptionError(Exception): + """Base exception for transcription errors.""" + pass + + +class ConfigurationError(TranscriptionError): + """Configuration-related errors (missing or invalid config).""" + pass + + +class ProviderError(TranscriptionError): + """Provider/API errors.""" + + def __init__(self, message: str, provider: str = None, status_code: int = None): + super().__init__(message) + self.provider = provider + self.status_code = status_code + + +class AudioFormatError(TranscriptionError): + """Unsupported audio format errors.""" + pass + + +class ChunkingError(TranscriptionError): + """Errors during file chunking.""" + pass diff --git a/src/services/transcription/registry.py b/src/services/transcription/registry.py new file mode 100644 index 0000000..b413644 --- /dev/null +++ b/src/services/transcription/registry.py @@ -0,0 +1,353 @@ +""" +Connector registry for managing transcription connectors. + +Provides factory pattern for creating and managing transcription connectors, +with auto-detection from environment variables for backwards compatibility. +""" + +import os +import logging +from typing import Dict, Any, Optional, Type, List + +from .base import BaseTranscriptionConnector, TranscriptionCapability, TranscriptionRequest, TranscriptionResponse +from .exceptions import ConfigurationError + +logger = logging.getLogger(__name__) + + +class ConnectorRegistry: + """ + Registry for managing transcription connectors. + + Singleton pattern - use get_registry() to get the shared instance. + """ + + _instance = None + _connectors: Dict[str, Type[BaseTranscriptionConnector]] = {} + _active_connector: Optional[BaseTranscriptionConnector] = None + _connector_name: str = "" + _initialized: bool = False + + def __new__(cls): + if cls._instance is None: + cls._instance = super().__new__(cls) + return cls._instance + + def __init__(self): + if self._initialized: + return + self._register_builtin_connectors() + self._initialized = True + + def _register_builtin_connectors(self): + """Register all built-in connectors.""" + from .connectors.openai_whisper import OpenAIWhisperConnector + from .connectors.openai_transcribe import OpenAITranscribeConnector + from .connectors.asr_endpoint import ASREndpointConnector + from .connectors.azure_openai_transcribe import AzureOpenAITranscribeConnector + + self.register('openai_whisper', OpenAIWhisperConnector) + self.register('openai_transcribe', OpenAITranscribeConnector) + self.register('asr_endpoint', ASREndpointConnector) + self.register('azure_openai_transcribe', AzureOpenAITranscribeConnector) + + def register(self, name: str, connector_class: Type[BaseTranscriptionConnector]): + """ + Register a connector class. + + Args: + name: Unique name for the connector + connector_class: The connector class to register + """ + self._connectors[name] = connector_class + logger.debug(f"Registered transcription connector: {name}") + + def get_connector_class(self, name: str) -> Type[BaseTranscriptionConnector]: + """ + Get a connector class by name. + + Args: + name: The connector name + + Returns: + The connector class + + Raises: + ConfigurationError: If connector not found + """ + if name not in self._connectors: + raise ConfigurationError( + f"Unknown connector: {name}. Available: {list(self._connectors.keys())}" + ) + return self._connectors[name] + + def create_connector(self, name: str, config: Dict[str, Any]) -> BaseTranscriptionConnector: + """ + Create a connector instance. + + Args: + name: The connector name + config: Configuration dict for the connector + + Returns: + Configured connector instance + """ + connector_class = self.get_connector_class(name) + return connector_class(config) + + def list_connectors(self) -> List[Dict[str, Any]]: + """ + List all registered connectors with their capabilities. + + Returns: + List of connector info dicts + """ + result = [] + for name, cls in self._connectors.items(): + result.append({ + 'name': name, + 'provider_name': cls.PROVIDER_NAME, + 'capabilities': [c.name for c in cls.CAPABILITIES], + 'config_schema': cls.get_config_schema() + }) + return result + + def initialize_from_env(self) -> BaseTranscriptionConnector: + """ + Initialize the active connector from environment variables. + + Auto-detection priority: + 1. TRANSCRIPTION_CONNECTOR - explicit connector name + 2. ASR_BASE_URL is set - use ASR endpoint (smarter detection) + - USE_ASR_ENDPOINT=true also works (backwards compat, with deprecation warning) + 3. TRANSCRIPTION_MODEL contains 'gpt-4o' - use OpenAI Transcribe + 4. TRANSCRIPTION_MODEL is set - use OpenAI Whisper with that model + 5. Default to OpenAI Whisper (whisper-1) + + Returns: + The initialized connector + """ + connector_name = os.environ.get('TRANSCRIPTION_CONNECTOR', '').lower().strip() + + if not connector_name: + # Auto-detect based on existing config for backwards compatibility + asr_base_url = os.environ.get('ASR_BASE_URL', '').strip() + use_asr_flag = os.environ.get('USE_ASR_ENDPOINT', 'false').lower() == 'true' + transcription_model = os.environ.get('TRANSCRIPTION_MODEL', '').lower() + whisper_model = os.environ.get('WHISPER_MODEL', '').lower() + + # Deprecation warning for legacy USE_ASR_ENDPOINT flag + if use_asr_flag: + logger.warning( + "USE_ASR_ENDPOINT=true is deprecated. " + "Set ASR_BASE_URL instead for auto-detection, or use TRANSCRIPTION_CONNECTOR=asr_endpoint" + ) + + # Priority 2: ASR endpoint - check ASR_BASE_URL or legacy flag + if asr_base_url or use_asr_flag: + connector_name = 'asr_endpoint' + if asr_base_url: + logger.info("Auto-detected ASR endpoint from ASR_BASE_URL") + # Priority 2.5: Azure OpenAI - check for Azure endpoint URL + elif self._is_azure_endpoint(): + connector_name = 'azure_openai_transcribe' + logger.info("Auto-detected Azure OpenAI from TRANSCRIPTION_BASE_URL") + # Priority 3: Model-based detection + elif transcription_model and 'gpt-4o' in transcription_model: + connector_name = 'openai_transcribe' + logger.info(f"Auto-detected OpenAI Transcribe from TRANSCRIPTION_MODEL={transcription_model}") + # Priority 4 & 5: OpenAI Whisper (with custom or default model) + else: + connector_name = 'openai_whisper' + model = transcription_model or whisper_model or 'whisper-1' + logger.info(f"Using OpenAI Whisper connector with model: {model}") + + config = self._build_config_from_env(connector_name) + + try: + self._active_connector = self.create_connector(connector_name, config) + self._connector_name = connector_name + + logger.info(f"Initialized transcription connector: {connector_name}") + logger.info(f"Capabilities: {[c.name for c in self._active_connector.get_capabilities()]}") + + return self._active_connector + + except Exception as e: + logger.error(f"Failed to initialize connector '{connector_name}': {e}") + raise ConfigurationError(f"Failed to initialize connector '{connector_name}': {e}") from e + + def _get_asr_timeout(self) -> int: + """ + Get ASR timeout with fallback chain: ENV -> Admin UI -> default. + + Priority: + 1. ASR_TIMEOUT environment variable + 2. asr_timeout_seconds environment variable (legacy) + 3. SystemSetting from Admin UI (database) + 4. Default: 1800 seconds (30 minutes) + """ + # Check environment variables first + env_timeout = os.environ.get('ASR_TIMEOUT') or os.environ.get('asr_timeout_seconds') + if env_timeout: + return int(env_timeout) + + # Fall back to Admin UI setting (SystemSetting in database) + try: + from src.models import SystemSetting + db_timeout = SystemSetting.get_setting('asr_timeout_seconds', None) + if db_timeout is not None: + return int(db_timeout) + except Exception as e: + # May fail if no app context or during initialization + logger.debug(f"Could not read ASR timeout from database: {e}") + + # Default: 30 minutes + return 1800 + + def _is_azure_endpoint(self) -> bool: + """Check if the TRANSCRIPTION_BASE_URL points to an Azure OpenAI endpoint.""" + base_url = os.environ.get('TRANSCRIPTION_BASE_URL', '').lower() + return '.openai.azure.com' in base_url or '.cognitiveservices.azure.com' in base_url + + def _build_config_from_env(self, connector_name: str) -> Dict[str, Any]: + """ + Build connector config from environment variables. + + Args: + connector_name: The connector to build config for + + Returns: + Configuration dict + """ + if connector_name == 'asr_endpoint': + base_url = os.environ.get('ASR_BASE_URL', '') + if base_url: + base_url = base_url.split('#')[0].strip() + + return { + 'base_url': base_url, + 'timeout': self._get_asr_timeout(), + 'diarize': os.environ.get('ASR_DIARIZE', 'true').lower() == 'true', + 'return_speaker_embeddings': os.environ.get('ASR_RETURN_SPEAKER_EMBEDDINGS', 'false').lower() == 'true' + } + + elif connector_name == 'openai_transcribe': + base_url = os.environ.get('TRANSCRIPTION_BASE_URL', 'https://api.openai.com/v1') + if base_url: + base_url = base_url.split('#')[0].strip() + + return { + 'api_key': os.environ.get('TRANSCRIPTION_API_KEY', ''), + 'base_url': base_url, + 'model': os.environ.get('TRANSCRIPTION_MODEL', 'gpt-4o-transcribe') + } + + elif connector_name == 'azure_openai_transcribe': + # Azure OpenAI requires endpoint and deployment_name + # TRANSCRIPTION_BASE_URL should be the Azure endpoint (e.g., https://your-resource.openai.azure.com) + endpoint = os.environ.get('TRANSCRIPTION_BASE_URL', '') + if endpoint: + endpoint = endpoint.split('#')[0].strip() + # Remove any trailing /openai or /v1 paths - we build the full URL ourselves + endpoint = endpoint.rstrip('/') + for suffix in ['/openai/v1', '/openai', '/v1']: + if endpoint.lower().endswith(suffix): + endpoint = endpoint[:-len(suffix)] + + return { + 'api_key': os.environ.get('TRANSCRIPTION_API_KEY', ''), + 'endpoint': endpoint, + 'deployment_name': os.environ.get('AZURE_DEPLOYMENT_NAME', os.environ.get('TRANSCRIPTION_MODEL', 'gpt-4o-transcribe')), + 'api_version': os.environ.get('AZURE_API_VERSION', '2025-04-01-preview'), + 'model': os.environ.get('TRANSCRIPTION_MODEL', '') # For capability detection + } + + else: # openai_whisper (default) + base_url = os.environ.get('TRANSCRIPTION_BASE_URL', '') + if base_url: + base_url = base_url.split('#')[0].strip() + + # Support both TRANSCRIPTION_MODEL and legacy WHISPER_MODEL + # TRANSCRIPTION_MODEL takes priority for custom Whisper variants + model = os.environ.get('TRANSCRIPTION_MODEL', '') or os.environ.get('WHISPER_MODEL', 'whisper-1') + + return { + 'api_key': os.environ.get('TRANSCRIPTION_API_KEY', ''), + 'base_url': base_url or None, + 'model': model + } + + def get_active_connector(self) -> BaseTranscriptionConnector: + """ + Get the currently active connector. + + Initializes from environment if not already initialized. + + Returns: + The active connector + """ + if not self._active_connector: + self.initialize_from_env() + return self._active_connector + + def get_active_connector_name(self) -> str: + """Get the name of the currently active connector.""" + if not self._active_connector: + self.initialize_from_env() + return self._connector_name + + def reinitialize(self) -> BaseTranscriptionConnector: + """ + Force re-initialization of the connector. + + Useful when environment variables have changed. + + Returns: + The newly initialized connector + """ + self._active_connector = None + self._connector_name = "" + return self.initialize_from_env() + + +# Global registry instance +_registry: Optional[ConnectorRegistry] = None + + +def get_registry() -> ConnectorRegistry: + """Get the global connector registry.""" + global _registry + if _registry is None: + _registry = ConnectorRegistry() + return _registry + + +# Convenience aliases +connector_registry = get_registry() + + +def transcribe(request: TranscriptionRequest) -> TranscriptionResponse: + """ + Transcribe audio using the active connector. + + This is a convenience function that uses the global registry. + + Args: + request: The transcription request + + Returns: + Transcription response + """ + connector = get_registry().get_active_connector() + return connector.transcribe(request) + + +def get_connector() -> BaseTranscriptionConnector: + """Get the active transcription connector.""" + return get_registry().get_active_connector() + + +def supports_diarization() -> bool: + """Check if the active connector supports diarization.""" + return get_registry().get_active_connector().supports_diarization diff --git a/src/services/transcription_tracking.py b/src/services/transcription_tracking.py new file mode 100644 index 0000000..ca63f13 --- /dev/null +++ b/src/services/transcription_tracking.py @@ -0,0 +1,312 @@ +""" +Transcription usage tracking service for monitoring audio transcription consumption and budget enforcement. +""" + +import logging +from datetime import date, datetime, timedelta +from typing import Tuple, Optional, Dict, List + +from sqlalchemy import func, extract + +from src.database import db +from src.models.transcription_usage import TranscriptionUsage +from src.models.user import User + +logger = logging.getLogger(__name__) + + +# Pricing configuration per connector/model (dollars per minute) +TRANSCRIPTION_PRICING = { + 'openai_whisper': { + 'whisper-1': 0.006, # $0.006/min + 'default': 0.006, + }, + 'openai_transcribe': { + 'gpt-4o-transcribe': 0.006, # $0.006/min + 'gpt-4o-mini-transcribe': 0.003, # $0.003/min + 'gpt-4o-mini-transcribe-2025-12-15': 0.003, + 'gpt-4o-transcribe-diarize': 0.006, + 'default': 0.006, + }, + 'asr_endpoint': { + 'default': 0.0, # Self-hosted = free + }, +} + + +def get_transcription_cost_per_minute(connector_type: str, model_name: str = None) -> float: + """ + Get the cost per minute for a given connector and model. + + Args: + connector_type: The connector provider name + model_name: The specific model (optional) + + Returns: + Cost per minute in dollars + """ + connector_pricing = TRANSCRIPTION_PRICING.get(connector_type, {}) + + if model_name and model_name in connector_pricing: + return connector_pricing[model_name] + + # Fall back to 'default' pricing for the connector + return connector_pricing.get('default', 0.0) + + +class TranscriptionTracker: + """Service for recording and checking transcription usage.""" + + CONNECTOR_TYPES = [ + 'openai_whisper', + 'openai_transcribe', + 'asr_endpoint', + ] + + def record_usage( + self, + user_id: int, + connector_type: str, + audio_duration_seconds: int, + model_name: str = None, + estimated_cost: float = None + ): + """ + Record transcription usage - upserts into daily aggregate. + + Args: + user_id: User ID who made the request + connector_type: Type of connector (openai_whisper, openai_transcribe, asr_endpoint) + audio_duration_seconds: Duration of audio transcribed in seconds + model_name: Name of the model used + estimated_cost: Pre-calculated cost (if None, calculated from pricing config) + """ + try: + today = date.today() + + # Calculate cost if not provided + if estimated_cost is None: + cost_per_minute = get_transcription_cost_per_minute(connector_type, model_name) + estimated_cost = (audio_duration_seconds / 60.0) * cost_per_minute + + # Find or create today's record for this user/connector + usage = TranscriptionUsage.query.filter_by( + user_id=user_id, + date=today, + connector_type=connector_type + ).first() + + if usage: + # Update existing record + usage.audio_duration_seconds += audio_duration_seconds + usage.estimated_cost += estimated_cost + usage.request_count += 1 + if model_name: + usage.model_name = model_name # Update to latest model used + else: + # Create new record + usage = TranscriptionUsage( + user_id=user_id, + date=today, + connector_type=connector_type, + audio_duration_seconds=audio_duration_seconds, + request_count=1, + model_name=model_name, + estimated_cost=estimated_cost or 0.0 + ) + db.session.add(usage) + + db.session.commit() + logger.debug(f"Recorded {audio_duration_seconds}s transcription for user {user_id}, connector {connector_type}") + return usage + + except Exception as e: + logger.error(f"Failed to record transcription usage: {e}") + db.session.rollback() + return None + + def get_monthly_usage(self, user_id: int, year: int = None, month: int = None) -> int: + """Get total seconds transcribed by a user in a given month.""" + if year is None: + year = date.today().year + if month is None: + month = date.today().month + + result = db.session.query(func.sum(TranscriptionUsage.audio_duration_seconds)).filter( + TranscriptionUsage.user_id == user_id, + extract('year', TranscriptionUsage.date) == year, + extract('month', TranscriptionUsage.date) == month + ).scalar() + + return result or 0 + + def get_monthly_cost(self, user_id: int, year: int = None, month: int = None) -> float: + """Get total estimated cost for a user in a given month.""" + if year is None: + year = date.today().year + if month is None: + month = date.today().month + + result = db.session.query(func.sum(TranscriptionUsage.estimated_cost)).filter( + TranscriptionUsage.user_id == user_id, + extract('year', TranscriptionUsage.date) == year, + extract('month', TranscriptionUsage.date) == month + ).scalar() + + return result or 0.0 + + def check_budget(self, user_id: int) -> Tuple[bool, float, Optional[str]]: + """ + Check if user is within transcription budget. + + Returns: + (can_proceed, usage_percentage, message) + - can_proceed: False if hard cap (100%) reached + - usage_percentage: 0-100+ + - message: Warning/error message if applicable + """ + try: + user = db.session.get(User, user_id) + if not user or not user.monthly_transcription_budget: + return (True, 0, None) # No budget = unlimited + + current_usage = self.get_monthly_usage(user_id) + budget = user.monthly_transcription_budget + percentage = (current_usage / budget) * 100 + + if percentage >= 100: + minutes_used = current_usage // 60 + minutes_budget = budget // 60 + return (False, percentage, + f"Monthly transcription budget exceeded ({minutes_used}/{minutes_budget} minutes). Contact admin for more time.") + elif percentage >= 80: + return (True, percentage, + f"Warning: {percentage:.1f}% of monthly transcription budget used.") + else: + return (True, percentage, None) + + except Exception as e: + logger.error(f"Failed to check transcription budget for user {user_id}: {e}") + # Fail open - allow the request if we can't check + return (True, 0, None) + + def get_daily_stats(self, days: int = 30, user_id: int = None) -> List[Dict]: + """Get daily transcription usage for charts.""" + start_date = date.today() - timedelta(days=days - 1) + + query = db.session.query( + TranscriptionUsage.date, + TranscriptionUsage.connector_type, + func.sum(TranscriptionUsage.audio_duration_seconds).label('seconds'), + func.sum(TranscriptionUsage.estimated_cost).label('cost') + ).filter(TranscriptionUsage.date >= start_date) + + if user_id: + query = query.filter(TranscriptionUsage.user_id == user_id) + + results = query.group_by(TranscriptionUsage.date, TranscriptionUsage.connector_type).all() + + # Organize by date + stats = {} + for r in results: + date_str = r.date.isoformat() + if date_str not in stats: + stats[date_str] = {'date': date_str, 'total_seconds': 0, 'total_minutes': 0, 'cost': 0.0, 'by_connector': {}} + stats[date_str]['total_seconds'] += r.seconds or 0 + stats[date_str]['total_minutes'] = stats[date_str]['total_seconds'] // 60 + stats[date_str]['cost'] += r.cost or 0 + stats[date_str]['by_connector'][r.connector_type] = { + 'seconds': r.seconds or 0, + 'minutes': (r.seconds or 0) // 60 + } + + # Fill in missing dates with zeros + all_dates = [] + current = start_date + while current <= date.today(): + date_str = current.isoformat() + if date_str not in stats: + stats[date_str] = {'date': date_str, 'total_seconds': 0, 'total_minutes': 0, 'cost': 0.0, 'by_connector': {}} + all_dates.append(date_str) + current += timedelta(days=1) + + return [stats[d] for d in sorted(all_dates)] + + def get_monthly_stats(self, months: int = 12) -> List[Dict]: + """Get monthly transcription usage for charts.""" + results = db.session.query( + extract('year', TranscriptionUsage.date).label('year'), + extract('month', TranscriptionUsage.date).label('month'), + func.sum(TranscriptionUsage.audio_duration_seconds).label('seconds'), + func.sum(TranscriptionUsage.estimated_cost).label('cost') + ).group_by('year', 'month').order_by('year', 'month').all() + + # Get last N months + monthly_data = [ + { + 'year': int(r.year), + 'month': int(r.month), + 'seconds': r.seconds or 0, + 'minutes': (r.seconds or 0) // 60, + 'cost': r.cost or 0 + } + for r in results + ] + + return monthly_data[-months:] if len(monthly_data) > months else monthly_data + + def get_user_stats(self) -> List[Dict]: + """Get per-user transcription usage breakdown for current month.""" + today = date.today() + + results = db.session.query( + User.id, + User.username, + User.monthly_transcription_budget, + func.sum(TranscriptionUsage.audio_duration_seconds).label('usage'), + func.sum(TranscriptionUsage.estimated_cost).label('cost') + ).outerjoin( + TranscriptionUsage, + (User.id == TranscriptionUsage.user_id) & + (extract('year', TranscriptionUsage.date) == today.year) & + (extract('month', TranscriptionUsage.date) == today.month) + ).group_by(User.id).all() + + return [ + { + 'user_id': r.id, + 'username': r.username, + 'monthly_budget_seconds': r.monthly_transcription_budget, + 'monthly_budget_minutes': (r.monthly_transcription_budget // 60) if r.monthly_transcription_budget else None, + 'current_usage_seconds': r.usage or 0, + 'current_usage_minutes': (r.usage or 0) // 60, + 'cost': r.cost or 0, + 'percentage': ((r.usage or 0) / r.monthly_transcription_budget * 100) + if r.monthly_transcription_budget else 0 + } + for r in results + ] + + def get_today_usage(self, user_id: int = None) -> Dict: + """Get today's transcription usage.""" + today = date.today() + + query = db.session.query( + func.sum(TranscriptionUsage.audio_duration_seconds).label('seconds'), + func.sum(TranscriptionUsage.estimated_cost).label('cost') + ).filter(TranscriptionUsage.date == today) + + if user_id: + query = query.filter(TranscriptionUsage.user_id == user_id) + + result = query.first() + + return { + 'seconds': result.seconds or 0, + 'minutes': (result.seconds or 0) // 60, + 'cost': result.cost or 0 + } + + +# Singleton instance +transcription_tracker = TranscriptionTracker() diff --git a/src/tasks/__init__.py b/src/tasks/__init__.py new file mode 100644 index 0000000..408c773 --- /dev/null +++ b/src/tasks/__init__.py @@ -0,0 +1,30 @@ +""" +Background task functions for asynchronous processing. + +Note: Legacy functions (transcribe_audio_asr, transcribe_single_file, transcribe_with_chunking) +were removed. All transcription now uses the connector architecture via transcribe_audio_task. +""" + +from .processing import ( + generate_title_task, + generate_summary_only_task, + extract_events_from_transcript, + extract_audio_from_video, + compress_lossless_audio, + transcribe_audio_task, + transcribe_with_connector, + transcribe_chunks_with_connector, + transcribe_incognito, +) + +__all__ = [ + 'generate_title_task', + 'generate_summary_only_task', + 'extract_events_from_transcript', + 'extract_audio_from_video', + 'compress_lossless_audio', + 'transcribe_audio_task', + 'transcribe_with_connector', + 'transcribe_chunks_with_connector', + 'transcribe_incognito', +] diff --git a/src/tasks/processing.py b/src/tasks/processing.py new file mode 100644 index 0000000..14edcb8 --- /dev/null +++ b/src/tasks/processing.py @@ -0,0 +1,2232 @@ +""" +Background task functions for audio processing, transcription, and summarization. + +These functions handle asynchronous processing tasks: +- Audio transcription (Whisper API and custom ASR endpoints) +- Title and summary generation +- Event extraction from transcripts +- Audio/video format conversion +""" + +import os +import re +import json +import time +import mimetypes +import tempfile +import subprocess +import httpx +from datetime import datetime +from flask import current_app +from openai import OpenAI + +from src.database import db +from src.models import Recording, Tag, Event, TranscriptChunk, SystemSetting, GroupMembership, RecordingTag, InternalShare, SharedRecordingState, User, NamingTemplate +from src.services.embeddings import process_recording_chunks +from src.services.llm import is_using_openai_api, call_llm_completion, format_api_error_message, TEXT_MODEL_NAME, client, http_client_no_proxy +from src.utils import extract_json_object, safe_json_loads +from src.utils.ffprobe import get_codec_info, is_video_file, is_lossless_audio, FFProbeError +from src.utils.ffmpeg_utils import convert_to_mp3, extract_audio_from_video as ffmpeg_extract_audio, compress_audio, FFmpegError, FFmpegNotFoundError +from src.utils.audio_conversion import convert_if_needed, ConversionResult +from src.utils.error_formatting import format_error_for_storage +from src.config.app_config import AUDIO_COMPRESS_UPLOADS, AUDIO_CODEC, AUDIO_BITRATE, VIDEO_PASSTHROUGH_ASR +from src.audio_chunking import AudioChunkingService, ChunkProcessingError, ChunkingNotSupportedError +from src.config.app_config import ( + ASR_DIARIZE, ASR_BASE_URL, ASR_RETURN_SPEAKER_EMBEDDINGS, + transcription_api_key, transcription_base_url, chunking_service, ENABLE_CHUNKING +) +from src.file_exporter import export_recording, ENABLE_AUTO_EXPORT +from src.services.transcription_tracking import transcription_tracker + +# Configuration for internal sharing +ENABLE_INTERNAL_SHARING = os.environ.get('ENABLE_INTERNAL_SHARING', 'false').lower() == 'true' + +# Video retention - when enabled, video files keep their video stream for playback +VIDEO_RETENTION = os.environ.get('VIDEO_RETENTION', 'false').lower() == 'true' + + +def apply_team_tag_auto_shares(recording_id): + """ + Apply auto-shares for all group tags on a recording after processing completes. + + This function should be called after a recording status changes to COMPLETED. + It creates InternalShare records for team members based on group tag settings. + + Args: + recording_id: ID of the recording to apply auto-shares for + """ + if not ENABLE_INTERNAL_SHARING: + return + + recording = db.session.get(Recording, recording_id) + if not recording: + return + + # Get all group tags on this recording with auto-share enabled + group_tags = db.session.query(Tag).join( + RecordingTag, RecordingTag.tag_id == Tag.id + ).filter( + RecordingTag.recording_id == recording_id, + Tag.group_id.isnot(None), + db.or_(Tag.auto_share_on_apply == True, Tag.share_with_group_lead == True) + ).all() + + if not group_tags: + return + + shares_created = 0 + + for tag in group_tags: + # Determine who to share with + if tag.auto_share_on_apply: + group_members = GroupMembership.query.filter_by(group_id=tag.group_id).all() + elif tag.share_with_group_lead: + group_members = GroupMembership.query.filter_by(group_id=tag.group_id, role='admin').all() + else: + continue + + for membership in group_members: + # Skip the recording owner + if membership.user_id == recording.user_id: + continue + + # Check if already shared + existing_share = InternalShare.query.filter_by( + recording_id=recording_id, + shared_with_user_id=membership.user_id + ).first() + + if not existing_share: + # Create internal share with correct permissions + # Group admins get edit permission, regular members get read-only + share = InternalShare( + recording_id=recording_id, + owner_id=recording.user_id, + shared_with_user_id=membership.user_id, + can_edit=(membership.role == 'admin'), + can_reshare=False, + source_type='group_tag', + source_tag_id=tag.id + ) + db.session.add(share) + + # Create SharedRecordingState with default values for the recipient + state = SharedRecordingState( + recording_id=recording_id, + user_id=membership.user_id, + is_inbox=True, # New shares appear in inbox by default + is_highlighted=False # Not favorited by default + ) + db.session.add(state) + + shares_created += 1 + current_app.logger.info(f"Auto-shared recording {recording_id} with user {membership.user_id} (role={membership.role}) via group tag '{tag.name}'") + + if shares_created > 0: + db.session.commit() + current_app.logger.info(f"Created {shares_created} auto-shares for recording {recording_id} after processing completed") + + +def format_transcription_for_llm(transcription_text): + """ + Formats transcription for LLM. If it's our simplified JSON, convert it to plain text. + Otherwise, return as is. + """ + try: + transcription_data = json.loads(transcription_text) + if isinstance(transcription_data, list): + # It's our simplified JSON format + formatted_lines = [] + for segment in transcription_data: + speaker = segment.get('speaker', 'Unknown Speaker') + sentence = segment.get('sentence', '') + formatted_lines.append(f"[{speaker}]: {sentence}") + return "\n".join(formatted_lines) + except (json.JSONDecodeError, TypeError): + # Not a JSON, or not the format we expect, so return as is. + pass + return transcription_text + + +def clean_llm_response(text): + """ + Clean LLM responses by removing thinking tags and excessive whitespace. + This handles responses from reasoning models that include tags. + """ + if not text: + return "" + + # Remove thinking tags and their content + # Handle both and tags with various closing formats + cleaned = re.sub(r'.*?', '', text, flags=re.DOTALL | re.IGNORECASE) + + # Also handle unclosed thinking tags (in case the model doesn't close them) + cleaned = re.sub(r'.*$', '', cleaned, flags=re.DOTALL | re.IGNORECASE) + + # Remove any remaining XML-like tags that might be related to thinking + # but preserve markdown formatting + cleaned = re.sub(r'<(?!/?(?:code|pre|blockquote|p|br|hr|ul|ol|li|h[1-6]|em|strong|b|i|a|img)(?:\s|>|/))[^>]+>', '', cleaned) + + # Clean up excessive whitespace while preserving intentional formatting + # Handle lines individually to preserve Markdown hard line breaks (two spaces at end) + lines = cleaned.split('\n') + cleaned_lines = [] + + for line in lines: + # If a line consists only of whitespace (e.g., after tag removal), + # make it completely empty. This is necessary for the \n{3,} regex to work later. + if not line.strip(): + cleaned_lines.append("") + else: + # Preserve lines containing text exactly as they are + # This keeps trailing spaces needed for Markdown hard line breaks intact + cleaned_lines.append(line) + + # Join lines and collapse 3+ consecutive newlines into exactly 2 (one blank line) + cleaned = '\n'.join(cleaned_lines) + cleaned = re.sub(r'\n{3,}', '\n\n', cleaned) + + # Final strip to remove leading/trailing whitespace + return cleaned.strip() + +# Configuration from environment +# Note: Legacy ASR paths (USE_ASR_ENDPOINT, transcribe_audio_asr, etc.) were removed. +# All transcription now uses the connector architecture via transcribe_with_connector(). +ENABLE_INQUIRE_MODE = os.environ.get('ENABLE_INQUIRE_MODE', 'false').lower() == 'true' + +# chunking_service, ENABLE_CHUNKING, transcription_api_key, and transcription_base_url +# are imported from src.config.app_config + +# Note: OpenAI clients are created inside each transcription function as needed, +# not at module level (matching original pre-refactor behavior) + + +def generate_title_task(app_context, recording_id, will_auto_summarize=False): + """Generates only a title for a recording based on transcription. + + Args: + app_context: Flask app context + recording_id: ID of the recording + will_auto_summarize: If True, don't set status to COMPLETED (summary task will do it) + """ + with app_context: + recording = db.session.get(Recording, recording_id) + if not recording: + current_app.logger.error(f"Error: Recording {recording_id} not found for title generation.") + return + + # Resolve naming template: first tag with template → user default → None + naming_template = None + for tag in recording.tags: + if tag.naming_template_id: + naming_template = tag.naming_template + current_app.logger.info(f"Using naming template '{naming_template.name}' from tag '{tag.name}' for recording {recording_id}") + break + + if not naming_template and recording.owner and recording.owner.default_naming_template_id: + naming_template = recording.owner.default_naming_template + if naming_template: + current_app.logger.info(f"Using user's default naming template '{naming_template.name}' for recording {recording_id}") + + # Check if we need to generate AI title + needs_ai_title = naming_template is None or naming_template.needs_ai_title() + + # Early exit conditions + if not needs_ai_title: + # Template doesn't need AI - we can skip LLM call entirely + current_app.logger.info(f"Naming template doesn't require AI title for recording {recording_id}, skipping LLM call") + ai_title = None + elif client is None: + current_app.logger.warning(f"Skipping AI title generation for {recording_id}: OpenRouter client not configured.") + ai_title = None + elif not recording.transcription or len(recording.transcription.strip()) < 10: + current_app.logger.warning(f"Transcription for recording {recording_id} is too short or empty. Skipping AI title generation.") + ai_title = None + else: + # Generate AI title via LLM + ai_title = _generate_ai_title(recording) + + # Apply naming template if we have one + final_title = None + if naming_template: + final_title = naming_template.apply( + original_filename=recording.original_filename, + meeting_date=recording.meeting_date, + ai_title=ai_title + ) + if final_title: + current_app.logger.info(f"Applied naming template for recording {recording_id}: '{final_title}'") + + # Fallback chain: template result → AI title → filename + if not final_title: + if ai_title: + final_title = ai_title + elif recording.original_filename: + # Use filename without extension as last resort + import os + final_title = os.path.splitext(recording.original_filename)[0] + current_app.logger.info(f"Using filename as title for recording {recording_id}: '{final_title}'") + + if final_title: + recording.title = final_title + current_app.logger.info(f"Title set for recording {recording_id}: {final_title}") + else: + current_app.logger.warning(f"Could not generate title for recording {recording_id}") + + # Only set status to COMPLETED if auto-summarization won't happen next + # If auto-summarization is enabled, the summary task will set COMPLETED + if not will_auto_summarize: + recording.status = 'COMPLETED' + recording.completed_at = datetime.utcnow() + db.session.commit() + current_app.logger.info(f"Title generation complete, status set to COMPLETED for recording {recording_id}") + + # Process chunks for semantic search after completion (if inquire mode is enabled) + if ENABLE_INQUIRE_MODE: + try: + process_recording_chunks(recording_id) + except Exception as e: + current_app.logger.error(f"Error processing chunks for completed recording {recording_id}: {e}") + else: + # Just commit the title without changing status + db.session.commit() + current_app.logger.info(f"Title generation complete, leaving status unchanged (auto-summarization will follow) for recording {recording_id}") + + +def _generate_ai_title(recording): + """Generate an AI title for a recording using LLM. + + Args: + recording: Recording model instance + + Returns: + Generated title string, or None if generation fails + """ + # Get configurable transcript length limit and format transcription for LLM + transcript_limit = SystemSetting.get_setting('transcript_length_limit', 30000) + if transcript_limit == -1: + raw_transcription = recording.transcription + else: + raw_transcription = recording.transcription[:transcript_limit] + + # Convert ASR JSON to clean text format + transcript_text = format_transcription_for_llm(raw_transcription) + + # Get user language preference + user_output_language = None + if recording.owner: + user_output_language = recording.owner.output_language + + language_directive = f"Réponds en {user_output_language}." if user_output_language else "Réponds en français." + + prompt_text = f"""Génère un titre court pour cette transcription : + +{transcript_text} + +Consignes : +- Maximum 8 mots +- Pas de formules génériques comme "Discussion sur" ou "Réunion concernant" +- Le sujet principal uniquement, direct et précis +- {language_directive} + +Titre :""" + + system_message_content = "Tu es un assistant qui génère des titres concis pour des transcriptions audio. Réponds uniquement avec le titre, sans ponctuation finale." + if user_output_language: + system_message_content += f" Réponds en {user_output_language}." + else: + system_message_content += " Réponds en français." + + try: + completion = call_llm_completion( + messages=[ + {"role": "system", "content": system_message_content}, + {"role": "user", "content": prompt_text} + ], + temperature=0.7, + max_tokens=5000, + user_id=recording.user_id, + operation_type='title_generation' + ) + + raw_response = completion.choices[0].message.content + reasoning = getattr(completion.choices[0].message, 'reasoning', None) + + # Use reasoning content if main content is empty (fallback for reasoning models) + if not raw_response and reasoning: + current_app.logger.info(f"Title generation for recording {recording.id}: Using reasoning field as fallback") + # Try to extract a title from the reasoning field + lines = reasoning.strip().split('\n') + # Look for the last line that might be the title + for line in reversed(lines): + line = line.strip() + if line and not line.startswith('I') and len(line.split()) <= 8: + raw_response = line + break + + title = clean_llm_response(raw_response) if raw_response else None + + if title: + current_app.logger.info(f"AI title generated for recording {recording.id}: {title}") + else: + current_app.logger.warning(f"Empty AI title generated for recording {recording.id}") + + return title + + except Exception as e: + current_app.logger.error(f"Error generating AI title for recording {recording.id}: {str(e)}") + current_app.logger.error(f"Exception details:", exc_info=True) + return None + + +def generate_summary_only_task(app_context, recording_id, custom_prompt_override=None, user_id=None): + """Generates only a summary for a recording (no title, no JSON response). + + Args: + app_context: Flask app context + recording_id: ID of the recording + custom_prompt_override: Optional custom prompt that overrides all other prompts (for reprocessing) + user_id: Optional user ID to filter tag visibility (defaults to recording owner) + """ + with app_context: + recording = db.session.get(Recording, recording_id) + if not recording: + current_app.logger.error(f"Error: Recording {recording_id} not found for summary generation.") + return + + if client is None: + current_app.logger.warning(f"Skipping summary generation for {recording_id}: OpenRouter client not configured.") + recording.summary = "[Summary skipped: OpenRouter client not configured]" + db.session.commit() + return + + recording.status = 'SUMMARIZING' + summarization_start_time = time.time() + db.session.commit() + + current_app.logger.info(f"Requesting summary from OpenRouter for recording {recording_id} using model {TEXT_MODEL_NAME}...") + + if not recording.transcription or len(recording.transcription.strip()) < 10: + current_app.logger.warning(f"Transcription for recording {recording_id} is too short or empty. Skipping summarization.") + recording.summary = "[Summary skipped due to short transcription]" + recording.status = 'COMPLETED' + db.session.commit() + return + + # Get user preferences and tag custom prompts + user_summary_prompt = None + user_output_language = None + tag_custom_prompt = None + + # Determine which user's perspective to use for tag visibility + # If user_id is provided (e.g., from reprocess), use that user + # Otherwise default to the recording owner + viewer_user = None + if user_id: + viewer_user = db.session.get(User, user_id) + if viewer_user: + current_app.logger.info(f"Using user {viewer_user.username} (ID: {user_id}) for tag visibility filtering") + else: + current_app.logger.warning(f"User ID {user_id} not found, falling back to recording owner") + viewer_user = recording.owner + else: + viewer_user = recording.owner + if viewer_user: + current_app.logger.info(f"Using recording owner {viewer_user.username} for tag visibility filtering") + + # Collect custom prompts from tags visible to the viewer user + tag_custom_prompts = [] + if viewer_user: + visible_tags = recording.get_visible_tags(viewer_user) + if visible_tags: + current_app.logger.info(f"Found {len(visible_tags)} visible tags for user {viewer_user.username} on recording {recording_id}") + # Tags are ordered by the order they were added to this recording + for tag in visible_tags: + if tag.custom_prompt and tag.custom_prompt.strip(): + tag_custom_prompts.append({ + 'name': tag.name, + 'prompt': tag.custom_prompt.strip() + }) + current_app.logger.info(f"Found custom prompt from tag '{tag.name}' for recording {recording_id}") + else: + current_app.logger.warning(f"No viewer user available for tag filtering on recording {recording_id}") + + # Create merged prompt if we have multiple tag prompts + if tag_custom_prompts: + if len(tag_custom_prompts) == 1: + tag_custom_prompt = tag_custom_prompts[0]['prompt'] + current_app.logger.info(f"Using single custom prompt from tag '{tag_custom_prompts[0]['name']}' for recording {recording_id}") + else: + # Merge multiple prompts seamlessly as unified instructions + merged_parts = [] + for tag_prompt in tag_custom_prompts: + merged_parts.append(tag_prompt['prompt']) + tag_custom_prompt = "\n\n".join(merged_parts) + tag_names = [tp['name'] for tp in tag_custom_prompts] + current_app.logger.info(f"Combined custom prompts from {len(tag_custom_prompts)} tags in order added ({', '.join(tag_names)}) for recording {recording_id}") + else: + tag_custom_prompt = None + + # Get folder custom prompt (if recording has a folder) + # Folder prompt has lower priority than tag prompts (tags override folders) + folder_custom_prompt = None + if recording.folder and recording.folder.custom_prompt and recording.folder.custom_prompt.strip(): + folder_custom_prompt = recording.folder.custom_prompt.strip() + current_app.logger.info(f"Found custom prompt from folder '{recording.folder.name}' for recording {recording_id}") + + if recording.owner: + user_summary_prompt = recording.owner.summary_prompt + user_output_language = recording.owner.output_language + + # Format transcription for LLM (convert JSON to clean text format like clipboard copy) + formatted_transcription = format_transcription_for_llm(recording.transcription) + + # Get configurable transcript length limit + transcript_limit = SystemSetting.get_setting('transcript_length_limit', 30000) + if transcript_limit == -1: + transcript_text = formatted_transcription + else: + transcript_text = formatted_transcription[:transcript_limit] + + language_directive = f"IMPORTANT: You MUST provide the summary in {user_output_language}. The entire response must be in {user_output_language}." if user_output_language else "" + + # Determine which summarization instructions to use + # Priority order: custom_prompt_override > tag custom prompt > folder custom prompt > user summary prompt > admin default prompt > hardcoded fallback + summarization_instructions = "" + if custom_prompt_override: + current_app.logger.info(f"Using custom prompt override for recording {recording_id} (length: {len(custom_prompt_override)})") + summarization_instructions = custom_prompt_override + elif tag_custom_prompt: + current_app.logger.info(f"Using tag custom prompt for recording {recording_id}") + summarization_instructions = tag_custom_prompt + elif folder_custom_prompt: + current_app.logger.info(f"Using folder custom prompt for recording {recording_id}") + summarization_instructions = folder_custom_prompt + elif user_summary_prompt: + current_app.logger.info(f"Using user custom prompt for recording {recording_id}") + summarization_instructions = user_summary_prompt + else: + # Get admin default prompt from system settings + admin_default_prompt = SystemSetting.get_setting('admin_default_summary_prompt', None) + if admin_default_prompt: + current_app.logger.info(f"Using admin default prompt for recording {recording_id}") + summarization_instructions = admin_default_prompt + else: + # Fallback to hardcoded default if admin hasn't set one + summarization_instructions = """Génère un résumé structuré incluant les sections suivantes : +- **Sujets principaux** : Liste à puces des thèmes abordés +- **Décisions prises** : Liste à puces des décisions convenues +- **Actions à faire** : Liste à puces des tâches assignées, avec le responsable si mentionné""" + current_app.logger.info(f"Using hardcoded default prompt for recording {recording_id}") + + # Build context information + current_date = datetime.now().strftime("%B %d, %Y") + context_parts = [] + context_parts.append(f"Date courante : {current_date}") + + # Add folder information if recording is in a folder + if recording.folder: + context_parts.append(f"Dossier : {recording.folder.name}") + + # Add selected tags information (only visible tags) + if viewer_user: + visible_tags = recording.get_visible_tags(viewer_user) + if visible_tags: + tag_names = [tag.name for tag in visible_tags] + context_parts.append(f"Étiquettes appliquées à cette transcription : {', '.join(tag_names)}") + + # Add user profile information if available + if recording.owner: + user_context_parts = [] + if recording.owner.name: + user_context_parts.append(f"Nom : {recording.owner.name}") + if recording.owner.job_title: + user_context_parts.append(f"Poste : {recording.owner.job_title}") + if recording.owner.company: + user_context_parts.append(f"Entreprise : {recording.owner.company}") + + if user_context_parts: + context_parts.append(f"Informations sur l'utilisateur : {', '.join(user_context_parts)}") + + context_section = "Contexte :\n" + "\n".join(f"- {part}" for part in context_parts) + + # Build SYSTEM message: Initial instructions + Context + Language + system_message_content = "Tu es un assistant expert en rédaction de comptes rendus. Génère des résumés structurés de transcriptions audio. Réponds uniquement en Markdown brut — pas de blocs de code (```markdown), pas d'explications." + system_message_content += f"\n\n{context_section}" + if user_output_language: + system_message_content += f"\n\nExigence linguistique : tu DOIS rédiger l'intégralité du résumé en {user_output_language}. C'est obligatoire." + + # Build USER message: Transcription + Summarization Instructions + Language Directive + prompt_text = f"""Transcription : +\"\"\" +{transcript_text} +\"\"\" + +Instructions de résumé : +{summarization_instructions} + +{language_directive}""" + + # Debug logging: Log the complete prompt being sent to the LLM + current_app.logger.info(f"Sending summarization prompt to LLM (length: {len(prompt_text)} chars). Set LOG_LEVEL=DEBUG to see full prompt details.") + current_app.logger.debug(f"=== SUMMARIZATION DEBUG for recording {recording_id} ===") + current_app.logger.debug(f"System message: {system_message_content}") + current_app.logger.debug(f"User prompt (length: {len(prompt_text)} chars):\n{prompt_text}") + current_app.logger.debug(f"=== END SUMMARIZATION DEBUG for recording {recording_id} ===") + + try: + completion = call_llm_completion( + messages=[ + {"role": "system", "content": system_message_content}, + {"role": "user", "content": prompt_text} + ], + temperature=0.5, + max_tokens=int(os.environ.get("SUMMARY_MAX_TOKENS", "3000")), + user_id=recording.user_id, + operation_type='summarization' + ) + + raw_response = completion.choices[0].message.content + current_app.logger.info(f"Raw LLM response for recording {recording_id}: '{raw_response}'") + + summary = clean_llm_response(raw_response) if raw_response else "" + current_app.logger.info(f"Processed summary length for recording {recording_id}: {len(summary)} characters") + + if summary: + recording.summary = summary + db.session.commit() + current_app.logger.info(f"Summary generated successfully for recording {recording_id}") + + # Extract events if enabled for this user BEFORE marking as completed + if recording.owner and recording.owner.extract_events: + extract_events_from_transcript(recording_id, formatted_transcription, summary) + + # Mark as completed AFTER event extraction + recording.status = 'COMPLETED' + recording.completed_at = datetime.utcnow() + # Calculate and save summarization duration + summarization_end_time = time.time() + recording.summarization_duration_seconds = int(summarization_end_time - summarization_start_time) + db.session.commit() + current_app.logger.info(f"Summarization completed for recording {recording_id} in {recording.summarization_duration_seconds}s.") + + # Apply auto-shares for group tags after processing completes + apply_team_tag_auto_shares(recording_id) + + # Export to file if auto-export is enabled + if ENABLE_AUTO_EXPORT: + export_recording(recording_id) + else: + current_app.logger.warning(f"Empty summary generated for recording {recording_id}") + recording.summary = "[Summary not generated]" + recording.status = 'COMPLETED' + # Calculate and save summarization duration even for empty summary + summarization_end_time = time.time() + recording.summarization_duration_seconds = int(summarization_end_time - summarization_start_time) + db.session.commit() + + # Apply auto-shares for group tags after processing completes + apply_team_tag_auto_shares(recording_id) + + # Export to file if auto-export is enabled (even with empty summary, transcription may be useful) + if ENABLE_AUTO_EXPORT: + export_recording(recording_id) + + except Exception as e: + error_msg = format_api_error_message(str(e)) + current_app.logger.error(f"Error generating summary for recording {recording_id}: {str(e)}") + recording.summary = error_msg + recording.status = 'FAILED' + db.session.commit() + + +def extract_events_from_transcript(recording_id, transcript_text, summary_text): + """Extract calendar events from transcript using LLM. + + Args: + recording_id: ID of the recording + transcript_text: The formatted transcript text + summary_text: The generated summary text + """ + try: + recording = db.session.get(Recording, recording_id) + if not recording or not recording.owner or not recording.owner.extract_events: + return # Event extraction not enabled for this user + + current_app.logger.info(f"Extracting events for recording {recording_id}") + + # Delete existing events for this recording before extracting new ones + existing_events = Event.query.filter_by(recording_id=recording_id).all() + if existing_events: + current_app.logger.info(f"Clearing {len(existing_events)} existing events for recording {recording_id}") + for event in existing_events: + db.session.delete(event) + db.session.commit() + + # Get user language preference + user_output_language = None + if recording.owner: + user_output_language = recording.owner.output_language + + # Build comprehensive context information + current_date = datetime.now() + context_parts = [] + + # CRITICAL: Determine the reference date for relative date calculations + reference_date = None + reference_date_source = "" + + if recording.meeting_date: + # Prefer meeting date if available + reference_date = recording.meeting_date + reference_date_source = "Meeting Date" + context_parts.append(f"**DATE DE RÉUNION (utiliser pour les calculs de dates relatives) : {recording.meeting_date.strftime('%A, %B %d, %Y')}**") + elif recording.created_at: + # Fall back to upload date + reference_date = recording.created_at.date() + reference_date_source = "Upload Date (no meeting date available)" + context_parts.append(f"**DATE DE RÉFÉRENCE (utiliser pour les calculs de dates relatives) : {recording.created_at.strftime('%A, %B %d, %Y')}**") + + context_parts.append(f"Date d'aujourd'hui : {current_date.strftime('%A, %B %d, %Y')}") + context_parts.append(f"Heure actuelle : {current_date.strftime('%I:%M %p')}") + + # Add additional recording context + if recording.created_at: + context_parts.append(f"Enregistrement téléversé le : {recording.created_at.strftime('%B %d, %Y at %I:%M %p')}") + if recording.meeting_date and reference_date_source == "Meeting Date": + # Calculate days between meeting and today for context + # Ensure both sides are date objects (meeting_date might be datetime or date) + meeting_date_obj = recording.meeting_date.date() if isinstance(recording.meeting_date, datetime) else recording.meeting_date + days_since = (current_date.date() - meeting_date_obj).days + if days_since == 0: + context_parts.append("Cette réunion a eu lieu aujourd'hui") + elif days_since == 1: + context_parts.append("Cette réunion a eu lieu hier") + else: + context_parts.append(f"Cette réunion a eu lieu il y a {days_since} jours") + + # Add user context for better understanding + if recording.owner: + user_context = [] + if recording.owner.name: + user_context.append(f"Nom : {recording.owner.name}") + if recording.owner.job_title: + user_context.append(f"Poste : {recording.owner.job_title}") + if recording.owner.company: + user_context.append(f"Entreprise : {recording.owner.company}") + if user_context: + context_parts.append("Informations sur l'utilisateur : " + ", ".join(user_context)) + + # Add participants if available + if recording.participants: + context_parts.append(f"Participants à la réunion : {recording.participants}") + + context_section = "\n".join(context_parts) + + # Add language directive if user has a language preference + language_directive = "" + if user_output_language: + language_directive = f"\n\nEXIGENCE LINGUISTIQUE :\n**CRITIQUE** : Tu DOIS rédiger TOUS les titres et descriptions d'événements en {user_output_language}. C'est obligatoire. L'intégralité du contenu (titre, description, lieu) doit être en {user_output_language}." + + # Prepare the prompt for event extraction + event_prompt = f"""Analyse cette transcription de réunion pour en extraire les événements de calendrier. Utilise le contexte ci-dessous pour interpréter correctement les dates et heures relatives. + +CONTEXTE : +{context_section}{language_directive} + +INSTRUCTIONS : +1. **CRITIQUE** : Utilise la DATE DE RÉUNION ci-dessus comme point de référence pour TOUS les calculs de dates relatives +2. Quand quelqu'un dit « mercredi prochain », « demain » ou « la semaine prochaine », calcule à partir de la DATE DE RÉUNION, pas d'aujourd'hui +3. Exemple : Si la réunion est le 13 septembre 2025 et quelqu'un dit « mercredi prochain », c'est le 17 septembre 2025 +4. Si aucune heure n'est mentionnée, utilise 09:00:00 par défaut +5. Tiens compte des fuseaux horaires si mentionnés +6. Extrais UNIQUEMENT les événements explicitement discutés comme rendez-vous, réunions ou échéances futurs +7. N'extrais PAS les événements passés ni les discussions générales + +CRITÈRES STRICTS — Un événement DOIT avoir : +- Un mot d'action explicite (réunion, rendez-vous, appel, échéance, entrevue, présentation, révision, etc.) +- Une date/heure spécifique ou calculable +- Une durée raisonnable (moins de 8 heures, sauf événement multi-jours explicite) +- Un objectif ou ordre du jour clair + +NE PAS EXTRAIRE : +- Plans à long terme (périodes d'études, contrats, échéanciers de projets sur semaines/mois/années) +- Intentions générales sans planification concrète (« je vais étudier ici un an », « je vais travailler là-dessus ») +- Lieux déduits ou supposés — utiliser uniquement les lieux explicitement mentionnés +- Engagements vagues sans heure concrète (« on devrait se voir », « on se rappelle bientôt ») +- Événements personnels non discutés comme rendez-vous planifiés +- Événements nécessitant de deviner des détails critiques + +Pour chaque événement trouvé, extraire : +- Title : Titre clair et concis +- Description : Brève description avec le contexte de la réunion +- Start date/time : Date/heure calculée (format ISO YYYY-MM-DDTHH:MM:SS, utiliser 09:00:00 si aucune heure) +- End date/time : Fin de l'événement (format ISO, défaut 1 heure après le début) +- Location : Lieu (si mentionné) +- Attendees : Liste des personnes concernées (si mentionnées) +- Reminder minutes : Rappel en minutes avant l'événement (défaut 1 jour = 1440) + +Résumé de la transcription : +{summary_text} + +Extrait de la transcription (contexte additionnel) : +{transcript_text[:8000]} + +FORMAT DE RÉPONSE : +Réponds avec un objet JSON contenant un tableau "events". Si aucun événement, retourne un objet avec un tableau vide. + +Exemple : +{{ + "events": [ + {{ + "title": "Revue de projet trimestrielle", + "description": "Discussion sur l'avancement du projet et les prochaines étapes", + "start_datetime": "2025-07-22T14:00:00", + "end_datetime": "2025-07-22T15:30:00", + "location": "Salle de conférence A", + "attendees": ["Jean Tremblay", "Marie Lavoie"], + "reminder_minutes": 15 + }} + ] +}} + +EXEMPLES NÉGATIFS — NE PAS extraire : + +❌ « Je vais étudier ici pendant un an » → PAS un événement (plan à long terme) +❌ « Je travaille sur ce projet jusqu'en mars » → PAS un événement (durée, pas une réunion) +❌ « On devrait prendre un café un moment donné » → PAS un événement (vague, pas d'heure) +❌ « La session commence en septembre » → PAS un événement (information générale) +❌ « J'ai déménagé de Montréal » → PAS un événement (passé) + +✅ « On se voit mardi prochain à 14h pour réviser la proposition » → OUI (heure spécifique, action, objectif clair) +✅ « La date limite de soumission est vendredi à 17h » → OUI (échéance spécifique) +✅ « J'ai un rendez-vous chez le médecin demain à 10h » → OUI (rendez-vous spécifique) + +RÈGLES CRITIQUES : +1. **BASE TOUS LES CALCULS DE DATES SUR LA DATE DE RÉUNION FOURNIE DANS LE CONTEXTE** +2. Extrais uniquement les événements FUTURS par rapport à la DATE DE RÉUNION +3. Convertis toutes les dates relatives en utilisant la DATE DE RÉUNION comme référence +4. Si aucune heure n'est mentionnée, utilise toujours 09:00:00 (9h), PAS minuit +5. Inclus le contexte de la discussion dans la description +6. N'invente et ne suppose AUCUN événement non explicitement discuté +7. En cas de doute sur une date/heure, n'inclus pas cet événement""" + + # Build system message with language requirement if applicable + system_message_content = """Tu es un expert en extraction d'événements de calendrier à partir de transcriptions de réunions. Tu excelles à : +1. Interpréter les références de dates relatives (« mardi prochain », « demain », « dans deux semaines ») et les convertir en dates absolues +2. Identifier les vrais rendez-vous, réunions et échéances futurs dans les conversations +3. Distinguer les événements planifiés réels des discussions générales +4. Extraire avec précision les noms des participants et les détails des réunions + +Tu dois répondre uniquement en format JSON valide.""" + + if user_output_language: + system_message_content += f"\n\nExigence linguistique : tu DOIS rédiger TOUS les titres, descriptions et lieux d'événements en {user_output_language}. C'est obligatoire." + + completion = call_llm_completion( + messages=[ + {"role": "system", "content": system_message_content}, + {"role": "user", "content": event_prompt} + ], + temperature=0.2, + max_tokens=3000, + user_id=recording.user_id, + operation_type='event_extraction' + ) + + response_content = completion.choices[0].message.content + events_data = safe_json_loads(response_content, {}) + + # Handle both {"events": [...]} and direct array format + if isinstance(events_data, dict) and 'events' in events_data: + events_list = events_data['events'] + elif isinstance(events_data, list): + events_list = events_data + else: + events_list = [] + + current_app.logger.info(f"Found {len(events_list)} events for recording {recording_id}") + + # Save events to database + for event_data in events_list: + try: + # Parse dates + start_dt = None + end_dt = None + + if 'start_datetime' in event_data: + try: + # Try ISO format first + start_dt = datetime.fromisoformat(event_data['start_datetime'].replace('Z', '+00:00')) + except: + # Try other common formats + from dateutil import parser + try: + start_dt = parser.parse(event_data['start_datetime']) + except: + current_app.logger.warning(f"Could not parse start_datetime: {event_data['start_datetime']}") + continue # Skip this event if we can't parse the date + + if 'end_datetime' in event_data and event_data['end_datetime']: + try: + end_dt = datetime.fromisoformat(event_data['end_datetime'].replace('Z', '+00:00')) + except: + from dateutil import parser + try: + end_dt = parser.parse(event_data['end_datetime']) + except: + pass # End time is optional + + # Create event record + event = Event( + recording_id=recording_id, + title=event_data.get('title', 'Untitled Event')[:200], + description=event_data.get('description', ''), + start_datetime=start_dt, + end_datetime=end_dt, + location=event_data.get('location', '')[:500] if event_data.get('location') else None, + attendees=json.dumps(event_data.get('attendees', [])) if event_data.get('attendees') else None, + reminder_minutes=event_data.get('reminder_minutes', 15) + ) + + db.session.add(event) + current_app.logger.info(f"Added event '{event.title}' for recording {recording_id}") + + except Exception as e: + current_app.logger.error(f"Error saving event for recording {recording_id}: {str(e)}") + continue + + db.session.commit() + + # Refresh the recording to ensure events relationship is loaded + recording = db.session.get(Recording, recording_id) + if recording: + db.session.refresh(recording) + + except Exception as e: + current_app.logger.error(f"Error extracting events for recording {recording_id}: {str(e)}") + db.session.rollback() + + +def extract_audio_from_video(video_filepath, output_format='mp3', cleanup_original=True): + """Extract audio from video containers using FFmpeg. + + Behavior depends on AUDIO_COMPRESS_UPLOADS setting AND codec support: + - If compression enabled: Re-encodes to specified format (mp3/flac/opus) + - If compression disabled AND codec is supported: Copies stream (fast, preserves quality) + - If compression disabled AND codec is NOT supported: Re-encodes to ensure compatibility + + Args: + video_filepath: Path to input video file + output_format: Audio format ('mp3', 'wav', 'flac', 'copy'), default 'mp3' + cleanup_original: If True, deletes original video after extraction + + Returns: + tuple: (audio_filepath, mime_type) + + Raises: + FFmpegError: If audio extraction fails + FFmpegNotFoundError: If FFmpeg is not installed + """ + from src.utils.audio_conversion import get_supported_codecs + + try: + # Check if we can copy the stream (only if codec is supported) + can_copy_stream = False + if not AUDIO_COMPRESS_UPLOADS: + # Probe the video to check audio codec + try: + codec_info = get_codec_info(video_filepath, timeout=10) + audio_codec = codec_info.get('audio_codec') + supported_codecs = get_supported_codecs(needs_chunking=False) + + if audio_codec and audio_codec in supported_codecs: + can_copy_stream = True + current_app.logger.info(f"Audio codec '{audio_codec}' is supported, can copy stream") + else: + current_app.logger.info(f"Audio codec '{audio_codec}' not in supported codecs {supported_codecs}, will re-encode") + except FFProbeError as e: + current_app.logger.warning(f"Failed to probe video codec: {e}. Will re-encode to be safe.") + + if AUDIO_COMPRESS_UPLOADS: + # Re-encode to configured codec + current_app.logger.info(f"Extracting and compressing audio from video: {video_filepath} (codec: {AUDIO_CODEC})") + audio_filepath, mime_type = ffmpeg_extract_audio( + video_filepath, + output_format=AUDIO_CODEC, + bitrate=AUDIO_BITRATE, + cleanup_original=cleanup_original, + copy_stream=False + ) + elif can_copy_stream: + # Copy audio stream without re-encoding (fast, preserves quality) + current_app.logger.info(f"Extracting audio from video (stream copy, no re-encoding): {video_filepath}") + audio_filepath, mime_type = ffmpeg_extract_audio( + video_filepath, + output_format='copy', + cleanup_original=cleanup_original, + copy_stream=True + ) + else: + # Codec not supported - must re-encode for compatibility + current_app.logger.info(f"Extracting and converting audio from video: {video_filepath} (codec: {AUDIO_CODEC})") + audio_filepath, mime_type = ffmpeg_extract_audio( + video_filepath, + output_format=AUDIO_CODEC, + bitrate=AUDIO_BITRATE, + cleanup_original=cleanup_original, + copy_stream=False + ) + + current_app.logger.info(f"Successfully extracted audio to {audio_filepath}") + return audio_filepath, mime_type + + except FFmpegNotFoundError as e: + current_app.logger.error(str(e)) + raise Exception("Audio conversion tool (FFmpeg) not found on server.") + except FFmpegError as e: + current_app.logger.error(f"FFmpeg audio extraction failed for {video_filepath}: {str(e)}") + raise Exception(f"Audio extraction failed: {str(e)}") + except Exception as e: + current_app.logger.error(f"Error extracting audio from {video_filepath}: {str(e)}") + raise + + +def compress_lossless_audio(filepath, codec='mp3', bitrate='128k', codec_info=None): + """Compress lossless audio files to save storage. + + Only compresses lossless formats - already-compressed formats are skipped + to avoid quality degradation from re-encoding. + + Args: + filepath: Path to the audio file + codec: Target codec - 'mp3', 'flac', or 'opus' + bitrate: Bitrate for lossy codecs (ignored for FLAC) + codec_info: Optional pre-fetched codec info to avoid redundant probe calls + + Returns: + tuple: (new_filepath, new_mime_type) or (original_filepath, None) if skipped + """ + # Use codec detection to check if file is lossless + try: + if not is_lossless_audio(filepath, timeout=10, codec_info=codec_info): + current_app.logger.debug(f"Skipping compression for {filepath} - not a lossless format") + return filepath, None + + # Get current codec info (use provided or fetch) + if codec_info is None: + codec_info_result = get_codec_info(filepath, timeout=10) + else: + codec_info_result = codec_info + current_codec = codec_info_result.get('audio_codec') + + # Skip if target is same as source (e.g., FLAC to FLAC when source is already FLAC) + if current_codec == codec: + current_app.logger.debug(f"Skipping compression for {filepath} - already in target codec") + return filepath, None + + except FFProbeError as e: + current_app.logger.warning(f"Failed to probe {filepath} for compression: {e}. Skipping compression.") + return filepath, None + + # Determine output extension and MIME type + codec_info = { + 'mp3': {'ext': '.mp3', 'mime': 'audio/mpeg'}, + 'flac': {'ext': '.flac', 'mime': 'audio/flac'}, + 'opus': {'ext': '.opus', 'mime': 'audio/opus'} + } + + if codec not in codec_info: + current_app.logger.warning(f"Unknown codec '{codec}', defaulting to mp3") + codec = 'mp3' + + output_ext = codec_info[codec]['ext'] + output_mime = codec_info[codec]['mime'] + + base_filepath = os.path.splitext(filepath)[0] + temp_filepath = f"{base_filepath}_compressed_temp{output_ext}" + final_filepath = f"{base_filepath}{output_ext}" + + try: + # Get original file size for logging + original_size = os.path.getsize(filepath) + + current_app.logger.info(f"Compressing {filepath} to {codec.upper()}...") + + # Use centralized compression utility + final_filepath, output_mime, _ = compress_audio( + filepath, + codec=codec, + bitrate=bitrate, + delete_original=True, + codec_info=None + ) + + return final_filepath, output_mime + + except FFmpegNotFoundError as e: + current_app.logger.error(str(e)) + raise Exception("Audio conversion tool (FFmpeg) not found on server.") + except FFmpegError as e: + current_app.logger.error(f"FFmpeg compression failed for {filepath}: {str(e)}") + raise Exception(f"Audio compression failed: {str(e)}") + except Exception as e: + current_app.logger.error(f"Error compressing audio {filepath}: {str(e)}") + raise + + +def merge_diarized_chunks(chunk_results): + """ + Merge diarized transcription chunks while remapping speaker labels to be unique. + + Since ASR services can't maintain speaker identity across chunks, each chunk's + speakers are remapped to unique IDs: + - Chunk 1: SPEAKER_00, SPEAKER_01 → SPEAKER_00, SPEAKER_01 + - Chunk 2: SPEAKER_00, SPEAKER_01 → SPEAKER_02, SPEAKER_03 + - etc. + + This function: + 1. Remaps speaker labels to be unique across all chunks + 2. Updates both segments and transcription text with new labels + 3. Adjusts timestamps based on chunk start_time + + Args: + chunk_results: List of chunk results with 'transcription', 'segments', 'start_time' + + Returns: + Tuple of (merged_text, merged_segments, all_speakers) + """ + from src.services.transcription import TranscriptionSegment + import re + + if not chunk_results: + return "", [], [] + + # Sort chunks by start time to ensure correct order + sorted_chunks = sorted(chunk_results, key=lambda x: x.get('start_time', 0)) + + merged_parts = [] + merged_segments = [] + all_speakers = set() + next_speaker_number = 0 # Track the next available speaker number + + for chunk_idx, chunk in enumerate(sorted_chunks): + chunk_segments = chunk.get('segments') or [] + + # Build speaker remapping for this chunk + # Maps original speaker label -> new unique speaker label + chunk_speakers = set() + for seg in chunk_segments: + if hasattr(seg, 'speaker'): + speaker = seg.speaker + else: + speaker = seg.get('speaker', 'Unknown') + if speaker: + chunk_speakers.add(speaker) + + # Also check chunk metadata for speakers + if chunk.get('speakers'): + for s in chunk['speakers']: + chunk_speakers.add(s) + + # Create remapping: sort speakers to ensure deterministic ordering + speaker_remap = {} + for original_speaker in sorted(chunk_speakers): + if original_speaker and original_speaker != 'Unknown': + # Extract number from speaker label (e.g., SPEAKER_00 -> 0) + # For first chunk, keep original numbering; for subsequent chunks, remap + if chunk_idx == 0: + # First chunk: keep original labels but track highest number + speaker_remap[original_speaker] = original_speaker + match = re.search(r'(\d+)$', original_speaker) + if match: + num = int(match.group(1)) + next_speaker_number = max(next_speaker_number, num + 1) + else: + # Subsequent chunks: remap to new unique numbers + new_speaker = f"SPEAKER_{next_speaker_number:02d}" + speaker_remap[original_speaker] = new_speaker + next_speaker_number += 1 + + # Update transcription text with remapped speakers + chunk_text = chunk.get('transcription', '').strip() + if chunk_text and chunk_idx > 0: + # Replace speaker labels in text (e.g., [SPEAKER_00]: -> [SPEAKER_02]:) + for original, remapped in speaker_remap.items(): + if original != remapped: + # Handle various formats: [SPEAKER_00]:, SPEAKER_00:, (SPEAKER_00) + chunk_text = re.sub( + rf'\[{re.escape(original)}\]', + f'[{remapped}]', + chunk_text + ) + chunk_text = re.sub( + rf'(? data URL + + for i, chunk in enumerate(chunks): + max_retries = 3 + retry_count = 0 + success = False + + while retry_count < max_retries and not success: + try: + retry_suffix = f" (retry {retry_count + 1}/{max_retries})" if retry_count > 0 else "" + current_app.logger.info(f"Processing chunk {i+1}/{len(chunks)}: {chunk['filename']} ({chunk['size_mb']:.1f}MB){retry_suffix}") + + # Transcribe chunk using connector + with open(chunk['path'], 'rb') as chunk_file: + # For diarization: first chunk gets diarize=True, subsequent chunks + # get diarize=True + known_speaker_references + if use_diarization: + request = TranscriptionRequest( + audio_file=chunk_file, + filename=chunk['filename'], + mime_type='audio/mpeg', # Chunks are always MP3 + language=language, + diarize=True, + known_speaker_names=known_speaker_names, + known_speaker_references=known_speaker_refs, + prompt=initial_prompt, + hotwords=hotwords, + ) + else: + request = TranscriptionRequest( + audio_file=chunk_file, + filename=chunk['filename'], + mime_type='audio/mpeg', + language=language, + diarize=False, + prompt=initial_prompt, + hotwords=hotwords, + ) + + response = connector.transcribe(request) + + # For the first diarized chunk, extract speaker samples for subsequent chunks + if use_diarization and i == 0 and response.segments: + current_app.logger.info(f"First chunk diarized with {len(response.speakers or [])} speakers, extracting samples...") + + # Extract speaker samples from the first chunk + speaker_samples = extract_speaker_samples( + audio_path=chunk['path'], + segments=[{ + 'speaker': seg.speaker, + 'start_time': seg.start_time, + 'end_time': seg.end_time + } for seg in response.segments], + output_dir=temp_dir, + min_duration=2.0, + max_duration=10.0, + max_speakers=4 + ) + + if speaker_samples: + # Convert to data URLs for the API + known_speaker_refs = samples_to_data_urls(speaker_samples) + known_speaker_names = list(known_speaker_refs.keys()) + current_app.logger.info(f"Extracted speaker references for {len(known_speaker_names)} speakers: {known_speaker_names}") + else: + current_app.logger.warning("Could not extract speaker samples from first chunk") + + # Store chunk result + chunk_result = { + 'index': chunk['index'], + 'start_time': chunk['start_time'], + 'end_time': chunk['end_time'], + 'duration': chunk['duration'], + 'size_mb': chunk['size_mb'], + 'transcription': response.text, + 'filename': chunk['filename'], + 'segments': response.segments if use_diarization else None, + 'speakers': response.speakers if use_diarization else None + } + chunk_results.append(chunk_result) + current_app.logger.info(f"Chunk {i+1} transcribed successfully: {len(response.text)} characters") + success = True + + except Exception as chunk_error: + retry_count += 1 + error_msg = str(chunk_error) + + if retry_count < max_retries: + wait_time = 15 if "timeout" not in error_msg.lower() else 30 + current_app.logger.warning(f"Chunk {i+1} failed (attempt {retry_count}/{max_retries}): {chunk_error}. Retrying in {wait_time}s...") + time.sleep(wait_time) + else: + current_app.logger.error(f"Chunk {i+1} failed after {max_retries} attempts: {chunk_error}") + chunk_result = { + 'index': chunk['index'], + 'start_time': chunk['start_time'], + 'end_time': chunk['end_time'], + 'transcription': f"[Chunk {i+1} transcription failed: {str(chunk_error)}]", + 'filename': chunk['filename'] + } + chunk_results.append(chunk_result) + + # Small delay between chunks + if i < len(chunks) - 1: + time.sleep(2) + + # Merge transcriptions + current_app.logger.info(f"Merging {len(chunk_results)} chunk transcriptions...") + + if use_diarization: + # For diarized chunks, merge text AND segments with adjusted timestamps + merged_text, merged_segments, all_speakers = merge_diarized_chunks(chunk_results) + + if not merged_text.strip(): + raise ChunkProcessingError("Merged transcription is empty") + + # Log statistics + chunking_service.log_processing_statistics(chunk_results) + + current_app.logger.info(f"Merged diarization: {len(merged_segments)} segments, {len(all_speakers)} speakers: {all_speakers}") + + # Return a TranscriptionResponse so segments are preserved + from src.services.transcription import TranscriptionResponse + return TranscriptionResponse( + text=merged_text, + segments=merged_segments, + speakers=all_speakers, + provider=connector.PROVIDER_NAME, + model=getattr(connector, 'model', 'unknown') + ) + else: + merged_transcription = chunking_service.merge_transcriptions(chunk_results) + + if not merged_transcription.strip(): + raise ChunkProcessingError("Merged transcription is empty") + + # Log statistics + chunking_service.log_processing_statistics(chunk_results) + + return merged_transcription + + except Exception as e: + current_app.logger.error(f"Chunking transcription failed for {filepath}: {e}") + if 'chunks' in locals(): + chunking_service.cleanup_chunks(chunks) + raise ChunkProcessingError(f"Chunked transcription failed: {str(e)}") + + +def transcribe_with_connector(app_context, recording_id, filepath, original_filename, start_time, mime_type=None, language=None, diarize=None, min_speakers=None, max_speakers=None, tag_id=None, hotwords=None, initial_prompt=None): + """ + Transcribe audio using the new connector-based architecture. + + This function uses the transcription connector system which supports: + - OpenAI Whisper (whisper-1) + - OpenAI GPT-4o Transcribe (gpt-4o-transcribe, gpt-4o-mini-transcribe) + - OpenAI GPT-4o Transcribe Diarize (gpt-4o-transcribe-diarize) - with speaker labels + - Custom ASR endpoints (whisper-asr-webservice, WhisperX, etc.) + + Args: + app_context: Flask app context + recording_id: ID of the recording to process + filepath: Path to the audio file + original_filename: Original filename for logging + start_time: Processing start time + mime_type: MIME type of the audio file + language: Optional language code override + diarize: Whether to enable diarization (None = use connector default) + min_speakers: Optional minimum speakers + max_speakers: Optional maximum speakers + tag_id: Optional tag ID to apply custom prompt from + hotwords: Optional comma-separated hotwords to bias recognition + initial_prompt: Optional initial prompt to steer transcription + """ + from src.services.transcription import ( + get_connector, TranscriptionRequest, TranscriptionCapability + ) + + with app_context: + recording = db.session.get(Recording, recording_id) + if not recording: + current_app.logger.error(f"Error: Recording {recording_id} not found for transcription.") + return + + try: + current_app.logger.info(f"Starting connector-based transcription for recording {recording_id}...") + recording.status = 'PROCESSING' + transcription_start_time = time.time() + db.session.commit() + + # Get the active transcription connector + connector = get_connector() + connector_name = connector.PROVIDER_NAME + current_app.logger.info(f"Using transcription connector: {connector_name}") + + # Check transcription budget before processing + can_proceed, usage_pct, budget_msg = transcription_tracker.check_budget(recording.user_id) + if not can_proceed: + current_app.logger.warning(f"User {recording.user_id} exceeded transcription budget: {budget_msg}") + recording.status = 'FAILED' + recording.error_msg = budget_msg + db.session.commit() + return + elif budget_msg: + # Log warning but continue + current_app.logger.warning(budget_msg) + + # Handle video extraction (keep existing logic) + actual_filepath = filepath + actual_content_type = mime_type or mimetypes.guess_type(original_filename)[0] or 'application/octet-stream' + actual_filename = original_filename + audio_filepath = None # Track temp audio extracted from video (for cleanup) + + # Use codec detection to check if file is a video + try: + is_video = is_video_file(filepath, timeout=10) + if is_video: + current_app.logger.info(f"Video detected for {original_filename}") + except FFProbeError as e: + current_app.logger.warning(f"Failed to probe {original_filename}: {e}. Falling back to MIME type detection.") + video_mime_types = [ + 'video/mp4', 'video/quicktime', 'video/x-msvideo', 'video/webm', + 'video/avi', 'video/x-ms-wmv', 'video/3gpp' + ] + is_video = ( + actual_content_type.startswith('video/') or + actual_content_type in video_mime_types + ) + + if is_video: + if VIDEO_PASSTHROUGH_ASR: + # Video passthrough: send original video directly to ASR without audio extraction + current_app.logger.info(f"Video passthrough: sending original video to ASR (no audio extraction)") + actual_filepath = filepath # Send video as-is to connector + if VIDEO_RETENTION: + # Also keep the video for playback + recording.audio_path = filepath + recording.mime_type = mimetypes.guess_type(filepath)[0] or 'video/mp4' + db.session.commit() + elif VIDEO_RETENTION: + # Video retention: keep original video, extract audio to temp for transcription only + current_app.logger.info(f"Video container detected, retaining video and extracting audio to temp...") + try: + audio_filepath, audio_mime_type = extract_audio_from_video(filepath, cleanup_original=False) + # Use extracted audio for transcription processing + actual_filepath = audio_filepath + actual_content_type = audio_mime_type + actual_filename = os.path.basename(audio_filepath) + + # Keep original video file as the stored media + recording.audio_path = filepath + recording.mime_type = mimetypes.guess_type(filepath)[0] or 'video/mp4' + db.session.commit() + current_app.logger.info(f"Video retained at: {filepath}, temp audio extracted: {audio_filepath}") + except Exception as e: + current_app.logger.error(f"Failed to extract audio from video: {str(e)}") + recording.status = 'FAILED' + recording.error_msg = f"Audio extraction failed: {str(e)}" + db.session.commit() + raise + else: + # Default: extract audio, delete original video + current_app.logger.info(f"Video container detected, extracting audio...") + try: + audio_filepath, audio_mime_type = extract_audio_from_video(filepath) + actual_filepath = audio_filepath + actual_content_type = audio_mime_type + actual_filename = os.path.basename(audio_filepath) + + recording.audio_path = audio_filepath + recording.mime_type = audio_mime_type + db.session.commit() + current_app.logger.info(f"Audio extracted: {audio_filepath}") + except Exception as e: + current_app.logger.error(f"Failed to extract audio from video: {str(e)}") + recording.status = 'FAILED' + recording.error_msg = f"Audio extraction failed: {str(e)}" + db.session.commit() + raise # Re-raise so job queue marks the job as failed + + # Validate and convert audio format if needed using unified conversion utility + # This respects: + # - connector_specs.unsupported_codecs (e.g., opus for OpenAI) + # - AUDIO_UNSUPPORTED_CODECS environment variable (user-specified exclusions) + # - AUDIO_COMPRESS_UPLOADS setting (lossless compression) + connector_specs = connector.specifications + converted_filepath = None # Track converted file for cleanup and retry + video_passthrough_active = is_video and VIDEO_PASSTHROUGH_ASR + + if video_passthrough_active: + # Skip conversion and chunking — ASR backend handles the raw video + current_app.logger.info(f"Video passthrough: skipping codec conversion and chunking") + else: + try: + # Check if chunking will be needed (affects which codecs are supported) + needs_chunking_check = ( + chunking_service and + chunking_service.needs_chunking(actual_filepath, False, connector_specs) + ) + + conversion_result = convert_if_needed( + filepath=actual_filepath, + original_filename=actual_filename, + needs_chunking=needs_chunking_check, + is_asr_endpoint=False, # Using connector architecture + delete_original=False, # Keep original, we may need it for retry + connector_specs=connector_specs + ) + + if conversion_result.was_converted: + current_app.logger.info( + f"Audio converted: {conversion_result.original_codec} → {conversion_result.final_codec}, " + f"size: {conversion_result.original_size_mb:.1f}MB → {conversion_result.final_size_mb:.1f}MB" + ) + converted_filepath = conversion_result.output_path + actual_filepath = converted_filepath + actual_content_type = conversion_result.mime_type + actual_filename = os.path.basename(converted_filepath) + except (FFmpegError, FFmpegNotFoundError) as conv_error: + current_app.logger.error(f"Audio conversion failed: {conv_error}") + raise # Let the job fail - can't process this file + except Exception as e: + current_app.logger.warning(f"Could not validate/convert audio: {e}, proceeding with original file") + + # Determine if we should diarize + if diarize is None: + # Use connector's configured default (respects ASR_DIARIZE env var) + should_diarize = getattr(connector, 'default_diarize', connector.supports_diarization) + else: + should_diarize = diarize and connector.supports_diarization + + if should_diarize and not connector.supports_diarization: + current_app.logger.warning(f"Diarization requested but connector '{connector_name}' doesn't support it") + should_diarize = False + + # Check if chunking is needed for large files + # The chunking service respects this priority: + # 1. Connector handles internally (e.g., ASR endpoint) → no app-level chunking + # 2. User's ENABLE_CHUNKING=false → no chunking + # 3. User's CHUNK_LIMIT setting → use their settings + # 4. Connector defaults (max_file_size, recommended_chunk_seconds) + # 5. App default (20MB) + if video_passthrough_active: + should_chunk = False + current_app.logger.info(f"Video passthrough: chunking skipped (ASR backend handles internally)") + else: + current_app.logger.info(f"Chunking service available: {chunking_service is not None}") + current_app.logger.info(f"Connector specs: max_duration={connector_specs.max_duration_seconds}s, " + f"handles_internally={connector_specs.handles_chunking_internally}, " + f"recommended_chunk={connector_specs.recommended_chunk_seconds}s") + + if chunking_service: + should_chunk = chunking_service.needs_chunking(actual_filepath, False, connector_specs) + current_app.logger.info(f"Chunking decision: should_chunk={should_chunk}") + else: + should_chunk = False + current_app.logger.warning("Chunking service is disabled (ENABLE_CHUNKING=false or service not initialized)") + + # Retry loop for handling format/codec errors with MP3 conversion + max_attempts = 2 + last_error = None + + for attempt in range(max_attempts): + try: + if should_chunk: + # Use chunking for large files + file_size_mb = os.path.getsize(actual_filepath) / (1024 * 1024) + current_app.logger.info(f"File {actual_filepath} is large ({file_size_mb:.1f}MB), using chunking for transcription") + chunk_result = transcribe_chunks_with_connector( + connector, actual_filepath, actual_filename, actual_content_type, language, + diarize=should_diarize, # Pass diarization setting for speaker reference tracking + hotwords=hotwords, + initial_prompt=initial_prompt, + ) + + # Handle result based on type (TranscriptionResponse for diarized, string for plain) + if hasattr(chunk_result, 'segments') and chunk_result.segments and chunk_result.has_diarization(): + # Diarized response - store with segments for click-to-seek and speaker identification + recording.transcription = chunk_result.to_storage_format() + current_app.logger.info(f"Chunked diarized transcription completed: {len(chunk_result.text)} characters, {len(chunk_result.segments)} segments") + else: + # Plain text response + transcription_text = chunk_result.text if hasattr(chunk_result, 'text') else chunk_result + recording.transcription = transcription_text + current_app.logger.info(f"Chunked transcription completed: {len(transcription_text)} characters") + else: + # Build the transcription request for single file + with open(actual_filepath, 'rb') as audio_file: + request = TranscriptionRequest( + audio_file=audio_file, + filename=actual_filename, + mime_type=actual_content_type, + language=language, + diarize=should_diarize, + min_speakers=min_speakers, + max_speakers=max_speakers, + prompt=initial_prompt, + hotwords=hotwords, + ) + + current_app.logger.info(f"Transcribing with connector: diarize={should_diarize}, language={language}") + response = connector.transcribe(request) + + # Store the result + if response.segments and response.has_diarization(): + # Store as JSON with segments (diarized format) + recording.transcription = response.to_storage_format() + current_app.logger.info(f"Transcription completed with {len(response.segments)} segments and {len(response.speakers or [])} speakers") + else: + # Store as plain text (ensure it's a string) + transcription_text = response.text if isinstance(response.text, str) else '' + recording.transcription = transcription_text + current_app.logger.info(f"Transcription completed: {len(transcription_text)} characters") + + # Store speaker embeddings if available + if response.speaker_embeddings: + recording.speaker_embeddings = response.speaker_embeddings + current_app.logger.info(f"Stored speaker embeddings for speakers: {list(response.speaker_embeddings.keys())}") + + # If we reach here, transcription succeeded + break + + except Exception as e: + last_error = e + error_msg = str(e).lower() + + # Check if this is a format/codec error that might be fixed by MP3 conversion + is_format_error = any(phrase in error_msg for phrase in [ + 'corrupted', 'unsupported', 'invalid', 'format', 'codec', + 'could not find codec', 'audio file', 'decode' + ]) + + # Only retry with MP3 conversion on first attempt for format errors + if attempt == 0 and is_format_error and not converted_filepath: + current_app.logger.warning(f"Transcription failed with possible format error: {e}") + current_app.logger.info(f"Attempting MP3 conversion and retry...") + + # Check if file is already MP3 + try: + codec_info = get_codec_info(actual_filepath, timeout=10) + audio_codec = codec_info.get('audio_codec', '').lower() + needs_conversion = audio_codec != 'mp3' + except FFProbeError: + needs_conversion = not actual_filename.lower().endswith('.mp3') + + if needs_conversion: + try: + converted_filepath = convert_to_mp3(actual_filepath) + current_app.logger.info(f"Successfully converted to MP3: {converted_filepath}") + actual_filepath = converted_filepath + actual_content_type = 'audio/mpeg' + actual_filename = os.path.basename(converted_filepath) + # Recalculate if chunking is needed after conversion + should_chunk = ( + chunking_service and + chunking_service.needs_chunking(actual_filepath, False, connector_specs) + ) + continue # Retry with converted file + except (FFmpegError, FFmpegNotFoundError) as conv_error: + current_app.logger.error(f"Failed to convert to MP3: {conv_error}") + # Fall through to raise original error + else: + current_app.logger.warning(f"File is already MP3 but still getting format error") + + # Not a format error or already retried - propagate the error + raise + + # Clean up converted file if we created one and transcription succeeded + if converted_filepath and os.path.exists(converted_filepath): + try: + os.remove(converted_filepath) + current_app.logger.debug(f"Cleaned up converted file: {converted_filepath}") + except OSError: + pass # Best effort cleanup + + # Clean up temp audio extracted from video when video retention is enabled + if is_video and VIDEO_RETENTION and audio_filepath and audio_filepath != filepath: + try: + if os.path.exists(audio_filepath): + os.remove(audio_filepath) + current_app.logger.info(f"Cleaned up temp audio from video retention: {audio_filepath}") + except OSError: + pass # Best effort cleanup + + # Calculate and save transcription duration + transcription_end_time = time.time() + recording.transcription_duration_seconds = int(transcription_end_time - transcription_start_time) + db.session.commit() + current_app.logger.info(f"Transcription completed in {recording.transcription_duration_seconds}s") + + # Record transcription usage for billing/budgeting + try: + # Get actual audio duration (not processing time) + audio_duration = None + if chunking_service: + audio_duration = chunking_service.get_audio_duration(recording.audio_path) + + if audio_duration and audio_duration > 0: + # Get model name from connector if available + model_name = getattr(connector, 'model', None) or connector_name + transcription_tracker.record_usage( + user_id=recording.user_id, + connector_type=connector_name, + audio_duration_seconds=int(audio_duration), + model_name=model_name + ) + current_app.logger.info(f"Recorded transcription usage: {int(audio_duration)}s for user {recording.user_id}") + else: + current_app.logger.warning(f"Could not determine audio duration for usage tracking") + except Exception as usage_err: + # Don't fail transcription if usage tracking fails + current_app.logger.warning(f"Failed to record transcription usage: {usage_err}") + + # Apply auto speaker labelling if enabled and embeddings available + if recording.speaker_embeddings: + try: + from src.services.speaker_embedding_matcher import ( + apply_auto_speaker_labels, + apply_speaker_names_to_transcription, + update_speaker_profiles_from_recording + ) + + user = User.query.get(recording.user_id) + if user and user.auto_speaker_labelling: + current_app.logger.info(f"Applying auto speaker labelling for recording {recording.id}") + speaker_map = apply_auto_speaker_labels(recording, user) + + if speaker_map: + current_app.logger.info(f"Auto-matched speakers: {speaker_map}") + # Apply names to transcription + if apply_speaker_names_to_transcription(recording, speaker_map): + current_app.logger.info(f"Applied speaker names to transcription") + # Update speaker profiles with new embeddings + updated_count = update_speaker_profiles_from_recording(recording, speaker_map, user) + if updated_count > 0: + current_app.logger.info(f"Updated {updated_count} speaker profiles with new embeddings") + else: + current_app.logger.warning(f"Failed to apply speaker names to transcription for recording {recording.id}") + else: + current_app.logger.info(f"No speakers matched for auto-labelling") + except Exception as auto_label_err: + # Don't fail transcription if auto-labelling fails + current_app.logger.warning(f"Failed to apply auto speaker labelling: {auto_label_err}") + + # Check if auto-summarization is disabled (admin setting or user preference) + admin_setting = SystemSetting.get_setting('disable_auto_summarization', False) + admin_disabled = admin_setting if isinstance(admin_setting, bool) else str(admin_setting).lower() == 'true' + user = User.query.get(recording.user_id) + user_disabled = user and user.auto_summarization is False + will_auto_summarize = not admin_disabled and not user_disabled + + # Generate title immediately + generate_title_task(app_context, recording_id, will_auto_summarize=will_auto_summarize) + + if not will_auto_summarize: + reason = "admin setting" if admin_disabled else "user preference" + current_app.logger.info(f"Auto-summarization disabled ({reason}), skipping summary for recording {recording_id}") + recording = db.session.get(Recording, recording_id) + if recording: + recording.status = 'COMPLETED' + recording.completed_at = datetime.utcnow() + db.session.commit() + + # Apply auto-shares for group tags after processing completes + apply_team_tag_auto_shares(recording_id) + + # Export transcription-only if auto-export is enabled + if ENABLE_AUTO_EXPORT: + export_recording(recording_id) + else: + # Auto-generate summary for all recordings + current_app.logger.info(f"Auto-generating summary for recording {recording_id}") + generate_summary_only_task(app_context, recording_id) + + except Exception as e: + db.session.rollback() + error_msg = str(e) + error_type = type(e).__name__ + current_app.logger.error(f"Connector transcription FAILED for recording {recording_id}: [{error_type}] {error_msg}", exc_info=True) + + # Handle timeout errors specifically - log the configured timeout for debugging + if "timed out" in error_msg.lower() or "timeout" in error_msg.lower() or "Timeout" in error_type: + try: + from src.services.transcription import get_registry + registry = get_registry() + # Get timeout from connector config if available + connector_timeout = getattr(registry.get_active_connector(), 'timeout', None) + if connector_timeout: + current_app.logger.error(f"Timeout details - configured connector timeout: {connector_timeout}s") + else: + # Fall back to database/env setting + asr_timeout = SystemSetting.get_setting('asr_timeout_seconds', 1800) + current_app.logger.error(f"Timeout details - configured timeout: {asr_timeout}s") + except Exception: + pass # Don't fail the error handling if we can't get timeout info + + # Don't set recording.status = 'FAILED' here - let the job queue handle it + # The job queue will decide whether to retry or permanently fail, + # and only set FAILED status when all retries are exhausted + + # Re-raise so job queue marks the job as failed (and potentially retries) + raise + + +def transcribe_audio_task(app_context, recording_id, filepath, filename_for_asr, start_time, language=None, min_speakers=None, max_speakers=None, tag_id=None, hotwords=None, initial_prompt=None): + """Runs the transcription and summarization in a background thread. + + Uses the connector-based architecture which supports: + - OpenAI Whisper (whisper-1) + - OpenAI GPT-4o Transcribe (gpt-4o-transcribe, gpt-4o-mini-transcribe) + - OpenAI GPT-4o Transcribe Diarize (gpt-4o-transcribe-diarize) + - Custom ASR endpoints (whisper-asr-webservice, WhisperX, etc.) + + Args: + app_context: Flask app context + recording_id: ID of the recording to process + filepath: Path to the audio file + filename_for_asr: Filename to use for ASR + start_time: Processing start time + language: Optional language code override (from upload form) + min_speakers: Optional minimum speakers override (from upload form) + max_speakers: Optional maximum speakers override (from upload form) + tag_id: Optional tag ID to apply custom prompt from + hotwords: Optional comma-separated hotwords to bias recognition + initial_prompt: Optional initial prompt to steer transcription + """ + with app_context: + recording = db.session.get(Recording, recording_id) + # Determine diarization setting based on connector capabilities + # The connector will handle this, but we pass the user's preference + diarize_setting = None # Let connector decide based on its capabilities + + # Use language from upload form if provided, otherwise use user's default + # language='' (empty string) means auto-detect, language=None means use default + if language is not None: + # Explicit language selection (including empty string for auto-detect) + user_transcription_language = language if language else None # '' becomes None for connector + else: + # No language specified - use user's default + user_transcription_language = recording.owner.transcription_language if recording and recording.owner else None + + mime_type = recording.mime_type if recording else None + + transcribe_with_connector( + app_context, recording_id, filepath, filename_for_asr, start_time, + mime_type=mime_type, + language=user_transcription_language, + diarize=diarize_setting, + min_speakers=min_speakers, + max_speakers=max_speakers, + tag_id=tag_id, + hotwords=hotwords, + initial_prompt=initial_prompt, + ) + + # After transcription completes, calculate processing time + with app_context: + recording = db.session.get(Recording, recording_id) + if recording and recording.status in ['COMPLETED', 'FAILED']: + end_time = datetime.utcnow() + recording.processing_time_seconds = (end_time - start_time).total_seconds() + db.session.commit() + + +def transcribe_incognito(filepath, original_filename, language=None, min_speakers=None, max_speakers=None, user=None): + """ + Perform transcription without any database operations. + Used for Incognito Mode where no data is persisted. + + Args: + filepath: Path to the audio file + original_filename: Original filename for logging/processing + language: Optional language code for transcription + min_speakers: Optional minimum speakers for diarization + max_speakers: Optional maximum speakers for diarization + user: Optional user object for language/diarization preferences + + Returns: + dict with transcription, title, processing_time, etc. + """ + import time + import mimetypes + from src.services.transcription import get_registry, TranscriptionRequest + + start_time = time.time() + result = { + 'transcription': None, + 'title': 'Incognito Recording', + 'processing_time_seconds': 0, + 'audio_duration_seconds': None, + 'error': None + } + + try: + # Get the active connector + registry = get_registry() + connector = registry.get_active_connector() + + if not connector: + raise Exception("No transcription connector available") + + connector_specs = connector.specifications + connector_name = type(connector).__name__ + current_app.logger.info(f"[Incognito] Using transcription connector: {connector_name}") + + # Determine mime type + mime_type = mimetypes.guess_type(original_filename)[0] or 'audio/mpeg' + + # Handle video extraction if needed + actual_filepath = filepath + actual_filename = original_filename + actual_content_type = mime_type + + # Check if file is video and needs audio extraction + is_video = False + try: + is_video = is_video_file(filepath, timeout=10) + except FFProbeError as e: + current_app.logger.warning(f"[Incognito] Failed to probe file: {e}") + # Check by extension + video_extensions = ['.mp4', '.mov', '.avi', '.mkv', '.webm', '.wmv', '.flv', '.m4v'] + is_video = any(original_filename.lower().endswith(ext) for ext in video_extensions) + + video_passthrough_active = is_video and VIDEO_PASSTHROUGH_ASR + + if is_video: + if VIDEO_PASSTHROUGH_ASR: + current_app.logger.info(f"[Incognito] Video passthrough: sending original video to ASR (no audio extraction)") + else: + current_app.logger.info(f"[Incognito] Video detected, extracting audio...") + try: + audio_filepath, audio_mime_type = extract_audio_from_video(filepath, cleanup_original=False) + actual_filepath = audio_filepath + actual_content_type = audio_mime_type + actual_filename = os.path.basename(audio_filepath) + except Exception as e: + current_app.logger.error(f"[Incognito] Failed to extract audio from video: {e}") + raise + + # Convert audio format if needed + if video_passthrough_active: + current_app.logger.info(f"[Incognito] Video passthrough: skipping codec conversion") + else: + try: + needs_chunking_check = ( + chunking_service and + chunking_service.needs_chunking(actual_filepath, False, connector_specs) + ) + + conversion_result = convert_if_needed( + filepath=actual_filepath, + original_filename=actual_filename, + needs_chunking=needs_chunking_check, + is_asr_endpoint=False, + delete_original=False, + connector_specs=connector_specs + ) + + if conversion_result.was_converted: + current_app.logger.info(f"[Incognito] Audio converted: {conversion_result.original_codec} -> {conversion_result.final_codec}") + actual_filepath = conversion_result.output_path + actual_content_type = conversion_result.mime_type + actual_filename = os.path.basename(conversion_result.output_path) + except Exception as e: + current_app.logger.warning(f"[Incognito] Audio conversion check failed: {e}, proceeding with original") + + # Get audio duration if chunking service is available + if chunking_service: + try: + result['audio_duration_seconds'] = int(chunking_service.get_audio_duration(actual_filepath)) + except Exception as e: + current_app.logger.warning(f"[Incognito] Could not get audio duration: {e}") + + # Determine diarization settings (respects ASR_DIARIZE env var) + should_diarize = getattr(connector, 'default_diarize', connector.supports_diarization) + + # Use user's language preference if not explicitly provided + if language is None and user: + language = user.transcription_language + + # Check if chunking is needed + if video_passthrough_active: + should_chunk = False + current_app.logger.info(f"[Incognito] Video passthrough: chunking skipped (ASR backend handles internally)") + else: + should_chunk = (chunking_service and + chunking_service.needs_chunking(actual_filepath, False, connector_specs)) + + current_app.logger.info(f"[Incognito] Starting transcription: diarize={should_diarize}, language={language}, chunking={should_chunk}") + + if should_chunk: + # Use chunking for large files + chunk_result = transcribe_chunks_with_connector( + connector, actual_filepath, actual_filename, actual_content_type, language, + diarize=should_diarize + ) + + if hasattr(chunk_result, 'segments') and chunk_result.segments and chunk_result.has_diarization(): + result['transcription'] = chunk_result.to_storage_format() + else: + result['transcription'] = chunk_result.text if hasattr(chunk_result, 'text') else chunk_result + else: + # Single file transcription + with open(actual_filepath, 'rb') as audio_file: + request = TranscriptionRequest( + audio_file=audio_file, + filename=actual_filename, + mime_type=actual_content_type, + language=language, + diarize=should_diarize, + min_speakers=min_speakers, + max_speakers=max_speakers + ) + + response = connector.transcribe(request) + + if response.segments and response.has_diarization(): + result['transcription'] = response.to_storage_format() + else: + result['transcription'] = response.text + + result['processing_time_seconds'] = int(time.time() - start_time) + current_app.logger.info(f"[Incognito] Transcription completed in {result['processing_time_seconds']}s") + + # Generate a title if we have transcription + if result['transcription'] and len(result['transcription']) > 10: + result['title'] = _generate_incognito_title(result['transcription'], user) + + return result + + except Exception as e: + current_app.logger.error(f"[Incognito] Transcription failed: {str(e)}", exc_info=True) + result['error'] = str(e) + result['processing_time_seconds'] = int(time.time() - start_time) + return result + + +def _generate_incognito_title(transcription_text, user=None): + """Generate a title for incognito recording without database storage.""" + if not client: + return "Incognito Recording" + + try: + # Get formatted text for LLM + formatted_text = format_transcription_for_llm(transcription_text) + # Limit text for title generation + limited_text = formatted_text[:5000] + + # Get user language preference + user_output_language = user.output_language if user else None + language_directive = f"Réponds en {user_output_language}." if user_output_language else "Réponds en français." + + prompt_text = f"""Génère un titre court pour cette transcription : + +{limited_text} + +Consignes : +- Maximum 8 mots +- Pas de formules génériques comme "Discussion sur" ou "Réunion concernant" +- Le sujet principal uniquement, direct et précis +- {language_directive} + +Titre :""" + + system_message_content = "Tu es un assistant qui génère des titres concis pour des transcriptions audio. Réponds uniquement avec le titre, sans ponctuation finale." + if user_output_language: + system_message_content += f" Réponds en {user_output_language}." + else: + system_message_content += " Réponds en français." + + # Use call_llm_completion without user_id tracking for incognito + completion = client.chat.completions.create( + model=TEXT_MODEL_NAME, + messages=[ + {"role": "system", "content": system_message_content}, + {"role": "user", "content": prompt_text} + ], + temperature=0.7, + max_tokens=100 + ) + + raw_response = completion.choices[0].message.content + title = clean_llm_response(raw_response) if raw_response else None + + if title and len(title.strip()) > 0: + return title.strip() + + except Exception as e: + current_app.logger.warning(f"[Incognito] Title generation failed: {e}") + + return "Incognito Recording" + + +def generate_incognito_summary(transcription_text, user=None): + """Generate a summary for incognito recording without database storage.""" + if not client: + return None + + try: + # Get formatted text for LLM + formatted_text = format_transcription_for_llm(transcription_text) + + # Get configurable transcript length limit + transcript_limit = SystemSetting.get_setting('transcript_length_limit', 30000) + if transcript_limit == -1: + transcript_text = formatted_text + else: + transcript_text = formatted_text[:transcript_limit] + + # Get user preferences + user_output_language = user.output_language if user else None + user_summary_prompt = user.summary_prompt if user else None + + language_directive = f"IMPORTANT: You MUST provide the summary in {user_output_language}." if user_output_language else "" + + # Determine summarization instructions + if user_summary_prompt: + summarization_instructions = user_summary_prompt + else: + admin_default_prompt = SystemSetting.get_setting('admin_default_summary_prompt', None) + if admin_default_prompt: + summarization_instructions = admin_default_prompt + else: + summarization_instructions = """Generate a comprehensive summary that includes the following sections: +- **Key Issues Discussed**: A bulleted list of the main topics +- **Key Decisions Made**: A bulleted list of any decisions reached +- **Action Items**: A bulleted list of tasks assigned, including who is responsible if mentioned""" + + # Build messages + system_message_content = "You are an AI assistant that generates comprehensive summaries for meeting transcripts. Respond only with the summary in Markdown format." + if user_output_language: + system_message_content += f" You MUST generate the entire summary in {user_output_language}." + + prompt_text = f"""Transcription : +\"\"\" +{transcript_text} +\"\"\" + +Instructions de résumé : +{summarization_instructions} + +{language_directive}""" + + current_app.logger.info(f"[Incognito] Generating summary...") + + # Use client directly without user tracking for incognito + completion = client.chat.completions.create( + model=TEXT_MODEL_NAME, + messages=[ + {"role": "system", "content": system_message_content}, + {"role": "user", "content": prompt_text} + ], + temperature=0.5, + max_tokens=int(os.environ.get("SUMMARY_MAX_TOKENS", "3000")) + ) + + raw_response = completion.choices[0].message.content + summary = clean_llm_response(raw_response) if raw_response else None + + if summary: + current_app.logger.info(f"[Incognito] Summary generated: {len(summary)} characters") + return summary + + except Exception as e: + current_app.logger.warning(f"[Incognito] Summary generation failed: {e}") + + return None diff --git a/src/utils/__init__.py b/src/utils/__init__.py new file mode 100644 index 0000000..d06bcb4 --- /dev/null +++ b/src/utils/__init__.py @@ -0,0 +1,81 @@ +""" +Utility functions package for the Speakr application. + +This package contains various utility modules for: +- JSON parsing and handling +- Markdown to HTML conversion +- Datetime formatting and timezone handling +- Security utilities +""" + +from .json_parser import ( + auto_close_json, + safe_json_loads, + preprocess_json_escapes, + extract_json_object +) + +from .markdown import ( + md_to_html, + sanitize_html +) + +from .datetime import ( + local_datetime_filter +) + +from .security import ( + password_check, + is_safe_url, + admin_required, +) + +from .database import ( + add_column_if_not_exists, + migrate_column_type, + create_index_if_not_exists +) + +from .token_auth import ( + extract_token_from_request, + hash_token, + load_user_from_token, + is_token_authenticated +) + +from .error_formatting import ( + is_transcription_error, + format_error_for_user, + format_error_for_storage, + parse_stored_error +) + +__all__ = [ + # JSON parsing + 'auto_close_json', + 'safe_json_loads', + 'preprocess_json_escapes', + 'extract_json_object', + # Markdown/HTML + 'md_to_html', + 'sanitize_html', + # Datetime + 'local_datetime_filter', + # Security + 'password_check', + 'is_safe_url', + # Database + 'add_column_if_not_exists', + 'migrate_column_type', + 'create_index_if_not_exists', + # Token authentication + 'extract_token_from_request', + 'hash_token', + 'load_user_from_token', + 'is_token_authenticated', + # Error formatting + 'is_transcription_error', + 'format_error_for_user', + 'format_error_for_storage', + 'parse_stored_error', +] diff --git a/src/utils/audio_conversion.py b/src/utils/audio_conversion.py new file mode 100644 index 0000000..b13a9d9 --- /dev/null +++ b/src/utils/audio_conversion.py @@ -0,0 +1,405 @@ +""" +Audio conversion utility for handling codec detection and file conversion. + +This module provides a single, unified interface for handling ALL audio/video +conversion needs: +- Video to audio extraction +- Unsupported codec conversion +- Lossless audio compression + +Callers should ONLY use convert_if_needed() - it handles everything. +""" + +import os +import logging +from pathlib import Path +from typing import Optional, Tuple, Set, Dict, Any + +from src.utils.ffprobe import get_codec_info, is_lossless_audio, FFProbeError +from src.utils.ffmpeg_utils import compress_audio, extract_audio_from_video, FFmpegError, FFmpegNotFoundError +from src.config.app_config import AUDIO_COMPRESS_UPLOADS, AUDIO_CODEC, AUDIO_BITRATE, AUDIO_UNSUPPORTED_CODECS + +logger = logging.getLogger(__name__) + + +class ConversionResult: + """Result of a conversion operation.""" + + def __init__( + self, + output_path: str, + mime_type: str, + was_converted: bool, + was_compressed: bool, + original_size: int, + final_size: int, + original_codec: Optional[str] = None, + final_codec: Optional[str] = None + ): + self.output_path = output_path + self.mime_type = mime_type + self.was_converted = was_converted + self.was_compressed = was_compressed + self.original_size = original_size + self.final_size = final_size + self.original_codec = original_codec + self.final_codec = final_codec + + @property + def size_reduction_percent(self) -> float: + """Calculate size reduction percentage.""" + if self.original_size == 0: + return 0.0 + return ((self.original_size - self.final_size) / self.original_size) * 100 + + @property + def original_size_mb(self) -> float: + """Original size in megabytes.""" + return self.original_size / (1024 * 1024) + + @property + def final_size_mb(self) -> float: + """Final size in megabytes.""" + return self.final_size / (1024 * 1024) + + +def get_supported_codecs(needs_chunking: bool = False, connector_specs: Optional[Any] = None) -> Set[str]: + """ + Get the set of supported audio codecs. + + Args: + needs_chunking: If True, return only codecs that work well with chunking + connector_specs: Optional ConnectorSpecifications with provider-specific codec restrictions + + Returns: + Set of supported codec names (minus any excluded via env var or connector specs) + """ + # If connector defines explicit supported codecs, use those + if connector_specs and connector_specs.supported_codecs: + base_codecs = set(connector_specs.supported_codecs) + elif needs_chunking: + # For chunking: only support codecs that work well with chunking + base_codecs = {'pcm_s16le', 'pcm_s24le', 'pcm_f32le', 'mp3', 'flac'} + else: + # For direct transcription: support common formats + # Note: WebM containers are handled separately (by extension check in convert_if_needed) + # because MediaRecorder WebM files often lack seek cues, but the opus/vorbis codecs + # themselves are fine in proper containers (.opus, .ogg) + base_codecs = {'pcm_s16le', 'pcm_s24le', 'pcm_f32le', 'mp3', 'flac', 'aac', 'opus', 'vorbis'} + + # Remove connector-specific unsupported codecs + if connector_specs and connector_specs.unsupported_codecs: + excluded = base_codecs & set(connector_specs.unsupported_codecs) + if excluded: + logger.info(f"Excluding codecs from supported list (via connector specs): {excluded}") + base_codecs = base_codecs - set(connector_specs.unsupported_codecs) + + # Remove any global user-specified unsupported codecs (env var still applies) + if AUDIO_UNSUPPORTED_CODECS: + excluded = base_codecs & AUDIO_UNSUPPORTED_CODECS + if excluded: + logger.info(f"Excluding codecs from supported list (via AUDIO_UNSUPPORTED_CODECS): {excluded}") + return base_codecs - AUDIO_UNSUPPORTED_CODECS + + return base_codecs + + +def convert_if_needed( + filepath: str, + original_filename: Optional[str] = None, + codec_info: Optional[Dict[str, Any]] = None, + needs_chunking: bool = False, + is_asr_endpoint: bool = False, + delete_original: bool = True, + connector_specs: Optional[Any] = None +) -> ConversionResult: + """ + Handle ALL audio conversion needs in one place. + + This is the ONLY function callers should use. It handles: + 1. Video to audio extraction (if has_video) + 2. Unsupported codec conversion (if codec not supported) + 3. Lossless audio compression (if AUDIO_COMPRESS_UPLOADS enabled) + + The function makes intelligent decisions about what processing is needed + and performs it in the optimal order. + + Args: + filepath: Path to the audio/video file + original_filename: Original filename for logging (defaults to basename) + codec_info: Optional pre-fetched codec info to avoid redundant probe calls + needs_chunking: Whether chunking will be used (affects supported codecs) + is_asr_endpoint: Whether using ASR endpoint (affects AAC handling) + delete_original: Whether to delete original file after successful conversion + connector_specs: Optional ConnectorSpecifications with provider-specific codec restrictions + + Returns: + ConversionResult with output path, mime type, and conversion stats + + Raises: + FFmpegNotFoundError: If FFmpeg is not available + FFmpegError: If conversion fails + """ + if original_filename is None: + original_filename = os.path.basename(filepath) + + # Get original file size + original_size = os.path.getsize(filepath) + + # Probe if codec info not provided + if codec_info is None: + try: + codec_info = get_codec_info(filepath, timeout=10) + logger.info( + f"Detected codec for {original_filename}: " + f"audio_codec={codec_info.get('audio_codec')}, " + f"has_video={codec_info.get('has_video', False)}" + ) + except FFProbeError as e: + logger.warning(f"Failed to probe {filepath}: {e}. Will attempt conversion.") + codec_info = None + + original_codec = codec_info.get('audio_codec') if codec_info else None + audio_codec = original_codec + has_video = codec_info.get('has_video', False) if codec_info else False + + # Get supported codecs based on processing mode and connector specs + supported_codecs = get_supported_codecs(needs_chunking, connector_specs) + + # Handle video files - extract audio + if has_video: + # Determine target codec for video extraction - fall back to mp3 if AUDIO_CODEC is unsupported + video_target_codec = AUDIO_CODEC + if connector_specs and connector_specs.unsupported_codecs: + if AUDIO_CODEC in connector_specs.unsupported_codecs: + video_target_codec = 'mp3' + logger.warning( + f"AUDIO_CODEC '{AUDIO_CODEC}' is not supported by connector, " + f"falling back to mp3 for video extraction from {original_filename}" + ) + + # Check if we can remux (copy) instead of transcode + can_remux = False + if audio_codec and audio_codec in supported_codecs: + try: + # Remux if audio is lossy, or if lossless but compression is disabled + is_lossless = is_lossless_audio(filepath, codec_info=codec_info) + can_remux = not is_lossless or not AUDIO_COMPRESS_UPLOADS + except Exception as e: + logger.warning(f"Could not determine if audio is lossless: {e}. Will transcode.") + + try: + if can_remux: + logger.info(f"Extracting audio from video (remux, no transcoding): {original_filename}") + output_filepath, mime_type = extract_audio_from_video( + filepath, + output_format='copy', + cleanup_original=delete_original, + copy_stream=True + ) + final_codec = audio_codec + else: + logger.info(f"Extracting and converting audio from video to {video_target_codec.upper()}: {original_filename}") + output_filepath, mime_type = extract_audio_from_video( + filepath, + output_format=video_target_codec, + bitrate=AUDIO_BITRATE, + cleanup_original=delete_original, + copy_stream=False + ) + final_codec = video_target_codec + + final_size = os.path.getsize(output_filepath) + reduction = ((original_size - final_size) / original_size * 100) if original_size > 0 else 0 + + logger.info( + f"Successfully extracted audio from {original_filename}: " + f"{original_size/1024/1024:.1f}MB -> {final_size/1024/1024:.1f}MB " + f"({reduction:.1f}% reduction)" + ) + + return ConversionResult( + output_path=output_filepath, + mime_type=mime_type, + was_converted=not can_remux, + was_compressed=False, + original_size=original_size, + final_size=final_size, + original_codec=original_codec, + final_codec=final_codec + ) + except FFmpegNotFoundError: + logger.error("FFmpeg not found") + raise + except FFmpegError as e: + logger.error(f"Failed to extract audio from video {filepath}: {e}") + raise + + # Handle audio files - check if conversion needed + needs_conversion = False + file_ext = os.path.splitext(filepath)[1].lower() + + # Note: Connector-specific codec restrictions are handled via connector_specs.unsupported_codecs + # which is already applied in get_supported_codecs() above + + if audio_codec is None: + needs_conversion = True + logger.info(f"Unknown codec for {original_filename}, will attempt conversion") + elif file_ext == '.webm': + # WebM containers from MediaRecorder often lack seek cues, making browser + # audio players unable to seek. Force conversion to a seekable format. + needs_conversion = True + logger.info(f"Converting {original_filename} - WebM container lacks seek support") + elif is_asr_endpoint and audio_codec == 'aac': + needs_conversion = True + logger.info(f"Converting AAC-encoded file for ASR endpoint compatibility") + elif audio_codec not in supported_codecs: + needs_conversion = True + logger.info(f"Converting {original_filename} (codec: {audio_codec}) - unsupported for processing") + + if needs_conversion: + # Determine target codec + # If chunking is needed, always convert to MP3 (chunking requires MP3 anyway) + # This avoids double conversion: original → configured codec → mp3 + if needs_chunking: + target_codec = 'mp3' + logger.info(f"Using MP3 for {original_filename} since chunking is needed") + else: + # Fall back to mp3 if AUDIO_CODEC is unsupported by connector + target_codec = AUDIO_CODEC + if connector_specs and connector_specs.unsupported_codecs: + if AUDIO_CODEC in connector_specs.unsupported_codecs: + target_codec = 'mp3' + logger.warning( + f"AUDIO_CODEC '{AUDIO_CODEC}' is not supported by connector, " + f"falling back to mp3 for {original_filename}" + ) + + logger.info(f"Converting {original_filename} to {target_codec.upper()}") + + try: + output_filepath, mime_type, _ = compress_audio( + filepath, + codec=target_codec, + bitrate=AUDIO_BITRATE, + delete_original=delete_original, + codec_info=codec_info + ) + + final_size = os.path.getsize(output_filepath) + reduction = ((original_size - final_size) / original_size * 100) if original_size > 0 else 0 + + logger.info( + f"Successfully converted {original_filename}: " + f"{original_size/1024/1024:.1f}MB -> {final_size/1024/1024:.1f}MB " + f"({reduction:.1f}% reduction)" + ) + + return ConversionResult( + output_path=output_filepath, + mime_type=mime_type, + was_converted=True, + was_compressed=False, + original_size=original_size, + final_size=final_size, + original_codec=original_codec, + final_codec=target_codec + ) + except FFmpegNotFoundError: + logger.error("FFmpeg not found") + raise + except FFmpegError as e: + logger.error(f"FFmpeg conversion failed for {filepath}: {e}") + raise + + # Audio file with supported codec - check if we should compress lossless + logger.info(f"Codec {audio_codec} is supported, no conversion needed") + + if AUDIO_COMPRESS_UPLOADS: + # Determine target codec for compression - fall back to mp3 if AUDIO_CODEC is unsupported + compress_target_codec = AUDIO_CODEC + if connector_specs and connector_specs.unsupported_codecs: + if AUDIO_CODEC in connector_specs.unsupported_codecs: + compress_target_codec = 'mp3' + logger.warning( + f"AUDIO_CODEC '{AUDIO_CODEC}' is not supported by connector, " + f"falling back to mp3 for lossless compression of {original_filename}" + ) + + try: + # Check if file is lossless + if is_lossless_audio(filepath, codec_info=codec_info): + # Skip if already in target codec (e.g., FLAC to FLAC) + if audio_codec == compress_target_codec: + logger.info(f"File already in target codec {compress_target_codec}, no compression needed") + return ConversionResult( + output_path=filepath, + mime_type=_guess_mime_type(filepath), + was_converted=False, + was_compressed=False, + original_size=original_size, + final_size=original_size, + original_codec=original_codec, + final_codec=audio_codec + ) + + logger.info(f"Compressing lossless audio ({audio_codec}) to {compress_target_codec.upper()}") + + # Perform compression + compressed_path, mime_type, _ = compress_audio( + filepath, + codec=compress_target_codec, + bitrate=AUDIO_BITRATE, + delete_original=delete_original, + codec_info=codec_info + ) + + final_size = os.path.getsize(compressed_path) + reduction = ((original_size - final_size) / original_size * 100) if original_size > 0 else 0 + + logger.info( + f"Successfully compressed {original_filename}: " + f"{original_size/1024/1024:.1f}MB -> {final_size/1024/1024:.1f}MB " + f"({reduction:.1f}% reduction)" + ) + + return ConversionResult( + output_path=compressed_path, + mime_type=mime_type, + was_converted=False, + was_compressed=True, + original_size=original_size, + final_size=final_size, + original_codec=original_codec, + final_codec=compress_target_codec + ) + except Exception as e: + logger.warning(f"Failed to compress lossless audio: {e}. Continuing with original.") + # Fall through to return original file + + # No processing needed - return original file + return ConversionResult( + output_path=filepath, + mime_type=_guess_mime_type(filepath), + was_converted=False, + was_compressed=False, + original_size=original_size, + final_size=original_size, + original_codec=original_codec, + final_codec=audio_codec + ) + + +def _guess_mime_type(filepath: str) -> str: + """ + Guess MIME type from file extension. + + Args: + filepath: Path to the file + + Returns: + MIME type string + """ + import mimetypes + mime_type, _ = mimetypes.guess_type(filepath) + return mime_type or 'application/octet-stream' diff --git a/src/utils/database.py b/src/utils/database.py new file mode 100644 index 0000000..a0ac0a3 --- /dev/null +++ b/src/utils/database.py @@ -0,0 +1,227 @@ +""" +Database schema migration utilities. + +IMPORTANT: All migrations must be compatible with both SQLite and PostgreSQL. +- Boolean defaults: SQLite uses 0/1, PostgreSQL requires FALSE/TRUE +- Type differences: SQLite DATETIME -> PostgreSQL TIMESTAMP, BLOB -> BYTEA +- Reserved keywords: "user", "order" etc. must be quoted +- The add_column_if_not_exists() function handles these automatically +- Use create_index_if_not_exists() for index creation with proper quoting +""" + +import re +from sqlalchemy import inspect, text + + +def add_column_if_not_exists(engine, table_name, column_name, column_type): + """ + Add a column to a table if it doesn't already exist. + + Args: + engine: SQLAlchemy engine + table_name: Name of the table + column_name: Name of the column to add + column_type: SQL type definition for the column + + Returns: + bool: True if column was added, False if it already existed + """ + inspector = inspect(engine) + columns = [col['name'] for col in inspector.get_columns(table_name)] + + if column_name not in columns: + if engine.name == 'postgresql': + # PostgreSQL requires TRUE/FALSE for boolean defaults, not 0/1 + if 'BOOLEAN' in column_type.upper(): + column_type = column_type.replace('DEFAULT 0', 'DEFAULT FALSE') + column_type = column_type.replace('DEFAULT 1', 'DEFAULT TRUE') + + # PostgreSQL uses TIMESTAMP, not DATETIME + column_type = re.sub(r'\bDATETIME\b', 'TIMESTAMP', column_type, flags=re.IGNORECASE) + + # PostgreSQL uses BYTEA, not BLOB + column_type = re.sub(r'\bBLOB\b', 'BYTEA', column_type, flags=re.IGNORECASE) + + # PostgreSQL interprets double-quoted strings as identifiers, not literals + # Convert DEFAULT "value" to DEFAULT 'value' + column_type = re.sub(r'''DEFAULT\s+"([^"]*)"''', r"DEFAULT '\1'", column_type, flags=re.IGNORECASE) + + with engine.connect() as conn: + # Quote identifiers to handle reserved keywords (e.g., "user" in PostgreSQL) + # MySQL uses backticks, PostgreSQL/SQLite use double quotes + # Handle special case where column_type includes the column name + if column_name in column_type: + if engine.name == 'mysql': + conn.execute(text(f'ALTER TABLE `{table_name}` ADD COLUMN {column_type}')) + else: + conn.execute(text(f'ALTER TABLE "{table_name}" ADD COLUMN {column_type}')) + else: + if engine.name == 'mysql': + conn.execute(text(f'ALTER TABLE `{table_name}` ADD COLUMN `{column_name}` {column_type}')) + else: + conn.execute(text(f'ALTER TABLE "{table_name}" ADD COLUMN "{column_name}" {column_type}')) + conn.commit() + return True + return False + + +def create_index_if_not_exists(engine, index_name, table_name, columns, unique=False): + """ + Create an index on a table if it doesn't already exist. + + Handles cross-database compatibility by properly quoting table names, + especially important for reserved keywords like 'user', 'order', etc. + + Args: + engine: SQLAlchemy engine + index_name: Name of the index to create + table_name: Name of the table + columns: Column(s) to index (string, can be comma-separated for composite) + unique: Whether to create a unique index (default False) + + Returns: + bool: True if index was created, False if it already existed or table doesn't exist + """ + inspector = inspect(engine) + + # Check if table exists + if table_name not in inspector.get_table_names(): + return False + + # Check if index already exists + existing_indexes = [idx['name'] for idx in inspector.get_indexes(table_name)] + if index_name in existing_indexes: + return False + + unique_clause = 'UNIQUE ' if unique else '' + + with engine.connect() as conn: + # Quote table name to handle reserved keywords (e.g., "user" in PostgreSQL) + # MySQL uses backticks, PostgreSQL/SQLite use double quotes + if engine.name == 'mysql': + quoted_table = f'`{table_name}`' + else: + quoted_table = f'"{table_name}"' + + # Note: IF NOT EXISTS may not be supported on all databases, but we already + # checked for existence above, so it's just a safety net + try: + conn.execute(text( + f'CREATE {unique_clause}INDEX IF NOT EXISTS {index_name} ON {quoted_table} ({columns})' + )) + except Exception: + # Some databases don't support IF NOT EXISTS, try without + conn.execute(text( + f'CREATE {unique_clause}INDEX {index_name} ON {quoted_table} ({columns})' + )) + conn.commit() + return True + + +def migrate_column_type(engine, table_name, column_name, new_type, transform_sql=None): + """ + Migrate a column to a new type if it exists. + + For SQLite, this uses a temporary column approach since SQLite doesn't support ALTER COLUMN. + + Args: + engine: SQLAlchemy engine + table_name: Name of the table + column_name: Name of the column to modify + new_type: New SQL type for the column + transform_sql: Optional SQL expression to transform existing data (e.g., "datetime(meeting_date || ' 12:00:00')") + If None, data is copied as-is + + Returns: + bool: True if column was migrated, False if it didn't exist or migration wasn't needed + """ + inspector = inspect(engine) + + # Check if table exists + if table_name not in inspector.get_table_names(): + return False + + columns = {col['name']: col for col in inspector.get_columns(table_name)} + + if column_name not in columns: + return False + + engine_name = engine.name + + with engine.connect() as conn: + if engine_name == 'sqlite': + # SQLite approach: use temporary column + temp_col = f"{column_name}_new" + + # Check if temp column already exists (migration interrupted?) + if temp_col in columns: + try: + # Try to drop it and start over + conn.execute(text(f'ALTER TABLE "{table_name}" DROP COLUMN "{temp_col}"')) + conn.commit() + except Exception: + # If we can't drop it, the migration may have partially completed + # Check if old column still exists + if column_name not in columns: + # Old column is gone, temp exists - just rename temp to complete migration + try: + conn.execute(text(f'ALTER TABLE "{table_name}" RENAME COLUMN "{temp_col}" TO "{column_name}"')) + conn.commit() + return True + except Exception as e: + # Can't complete, leave as-is + return False + # Both columns exist - abort to avoid data issues + return False + + # Add temporary column with new type + conn.execute(text(f'ALTER TABLE "{table_name}" ADD COLUMN "{temp_col}" {new_type}')) + + # Copy data with optional transformation + if transform_sql: + conn.execute(text(f'UPDATE "{table_name}" SET "{temp_col}" = {transform_sql} WHERE "{column_name}" IS NOT NULL')) + else: + conn.execute(text(f'UPDATE "{table_name}" SET "{temp_col}" = "{column_name}"')) + + # Drop old column (SQLite 3.35.0+ only) + try: + conn.execute(text(f'ALTER TABLE "{table_name}" DROP COLUMN "{column_name}"')) + # Drop succeeded, now rename temp to original name + conn.execute(text(f'ALTER TABLE "{table_name}" RENAME COLUMN "{temp_col}" TO "{column_name}"')) + conn.commit() + except Exception: + # Older SQLite - can't drop columns + # Rename temp column to original name (this will fail if original still exists) + try: + conn.execute(text(f'ALTER TABLE "{table_name}" RENAME COLUMN "{temp_col}" TO "{column_name}"')) + conn.commit() + except Exception: + # Can't rename because old column exists - this is OK for SQLite + # Just keep the new column and let the app use the old one + # The data in the old column is still valid + conn.rollback() + # Actually, let's just commit the temp column addition + # The model will use column_name which still exists with old data + # This is safe - new records will use the new model definition + return False + + elif engine_name == 'postgresql': + # PostgreSQL can alter column type directly + if transform_sql: + conn.execute(text(f'ALTER TABLE "{table_name}" ALTER COLUMN "{column_name}" TYPE {new_type} USING {transform_sql}')) + else: + conn.execute(text(f'ALTER TABLE "{table_name}" ALTER COLUMN "{column_name}" TYPE {new_type}')) + conn.commit() + + elif engine_name == 'mysql': + # MySQL can modify column type + conn.execute(text(f'ALTER TABLE `{table_name}` MODIFY COLUMN `{column_name}` {new_type}')) + + # Apply transformation if provided + if transform_sql: + conn.execute(text(f'UPDATE `{table_name}` SET `{column_name}` = {transform_sql} WHERE `{column_name}` IS NOT NULL')) + conn.commit() + + return True + + return False diff --git a/src/utils/datetime.py b/src/utils/datetime.py new file mode 100644 index 0000000..28e21bc --- /dev/null +++ b/src/utils/datetime.py @@ -0,0 +1,46 @@ +""" +Datetime utilities for timezone handling and formatting. + +This module provides functions for converting and formatting datetimes +with timezone awareness. +""" + +import os +import logging +import pytz +from babel.dates import format_datetime + +# Module-level logger +logger = logging.getLogger(__name__) + + +def local_datetime_filter(dt): + """ + Format a UTC datetime object to the user's local timezone. + + Args: + dt: datetime object to format (assumed UTC if naive) + + Returns: + str: Formatted datetime string in user's timezone + """ + if dt is None: + return "" + + # Get timezone from .env, default to UTC + user_tz_name = os.environ.get('TIMEZONE', 'UTC') + try: + user_tz = pytz.timezone(user_tz_name) + except pytz.UnknownTimeZoneError: + user_tz = pytz.utc + logger.warning(f"Invalid TIMEZONE '{user_tz_name}' in .env. Defaulting to UTC.") + + # If the datetime object is naive, assume it's UTC + if dt.tzinfo is None: + dt = pytz.utc.localize(dt) + + # Convert to the user's timezone + local_dt = dt.astimezone(user_tz) + + # Format it nicely + return format_datetime(local_dt, format='medium', locale='en_US') diff --git a/src/utils/error_formatting.py b/src/utils/error_formatting.py new file mode 100644 index 0000000..0bbcab6 --- /dev/null +++ b/src/utils/error_formatting.py @@ -0,0 +1,365 @@ +""" +User-friendly error formatting utility. + +Transforms technical error messages into user-friendly explanations with +actionable guidance. Works for both known error patterns and unknown errors. +""" + +import re +import json +from typing import Dict, Optional, Tuple + + +# Known error patterns with user-friendly messages +ERROR_PATTERNS = [ + # File size errors + { + 'patterns': [ + r'maximum content size limit.*exceeded', + r'file.*too large', + r'413.*exceeded', + r'payload too large', + ], + 'title': 'File Too Large', + 'message': 'The audio file exceeds the maximum size allowed by the transcription service.', + 'guidance': 'Try enabling audio chunking in your settings, or compress the audio file before uploading.', + 'icon': 'fa-file-audio', + 'type': 'size_limit' + }, + # Timeout errors + { + 'patterns': [ + r'timed?\s*out', + r'timeout', + r'deadline exceeded', + r'request took too long', + ], + 'title': 'Processing Timeout', + 'message': 'The transcription took too long to complete.', + 'guidance': 'This can happen with very long recordings. Try splitting the audio into smaller parts, or increase the timeout setting if available.', + 'icon': 'fa-clock', + 'type': 'timeout' + }, + # Authentication errors + { + 'patterns': [ + r'401.*unauthorized', + r'invalid.*api.*key', + r'authentication.*failed', + r'api key.*invalid', + r'incorrect api key', + ], + 'title': 'Authentication Error', + 'message': 'The transcription service rejected the API credentials.', + 'guidance': 'Please check that your API key is correct and has not expired. Contact your administrator if the problem persists.', + 'icon': 'fa-key', + 'type': 'auth' + }, + # Rate limit errors + { + 'patterns': [ + r'rate.*limit', + r'too many requests', + r'429', + r'quota.*exceeded', + ], + 'title': 'Rate Limit Exceeded', + 'message': 'Too many requests were sent to the transcription service.', + 'guidance': 'Please wait a few minutes before trying again. The system will automatically retry failed jobs.', + 'icon': 'fa-hourglass-half', + 'type': 'rate_limit' + }, + # Connection errors + { + 'patterns': [ + r'connection.*refused', + r'connection.*reset', + r'could not connect', + r'network.*unreachable', + r'name.*resolution.*failed', + r'dns.*failed', + ], + 'title': 'Connection Error', + 'message': 'Could not connect to the transcription service.', + 'guidance': 'Please check your internet connection and ensure the transcription service is available. If using a self-hosted service, verify it is running.', + 'icon': 'fa-wifi', + 'type': 'connection' + }, + # Service unavailable + { + 'patterns': [ + r'503.*service unavailable', + r'502.*bad gateway', + r'500.*internal server error', + r'service.*unavailable', + r'server.*error', + ], + 'title': 'Service Unavailable', + 'message': 'The transcription service is temporarily unavailable.', + 'guidance': 'This is usually temporary. Please try again in a few minutes.', + 'icon': 'fa-server', + 'type': 'service_error' + }, + # Invalid audio format + { + 'patterns': [ + r'invalid.*file.*format', + r'unsupported.*format', + r'could not.*decode', + r'audio.*corrupt', + r'not.*valid.*audio', + ], + 'title': 'Invalid Audio Format', + 'message': 'The audio file format is not supported or the file may be corrupted.', + 'guidance': 'Try converting the audio to MP3 or WAV format before uploading. If the file plays correctly on your device, try re-exporting it.', + 'icon': 'fa-file-audio', + 'type': 'format' + }, + # Insufficient funds/billing + { + 'patterns': [ + r'insufficient.*funds', + r'billing.*issue', + r'payment.*required', + r'account.*suspended', + ], + 'title': 'Billing Issue', + 'message': 'There is a billing issue with the transcription service account.', + 'guidance': 'Please check your account status and payment information with the transcription service provider.', + 'icon': 'fa-credit-card', + 'type': 'billing' + }, + # Model not found + { + 'patterns': [ + r'model.*not.*found', + r'invalid.*model', + r'model.*does not exist', + ], + 'title': 'Model Not Available', + 'message': 'The requested transcription model is not available.', + 'guidance': 'Please check the model name in your settings. The model may have been deprecated or renamed.', + 'icon': 'fa-microchip', + 'type': 'model' + }, + # Audio extraction failed + { + 'patterns': [ + r'audio.*extraction.*failed', + r'could not.*extract.*audio', + r'ffmpeg.*failed', + r'no audio.*stream', + ], + 'title': 'Audio Extraction Failed', + 'message': 'Could not extract audio from the uploaded file.', + 'guidance': 'The file may be corrupted or in an unsupported format. Try converting it to a standard audio format (MP3, WAV) before uploading.', + 'icon': 'fa-file-video', + 'type': 'extraction' + }, +] + + +def extract_error_details(error_text: str) -> Dict: + """ + Extract structured error details from raw error text. + Attempts to parse JSON error responses from APIs. + """ + details = { + 'raw': error_text, + 'code': None, + 'message': None, + 'type': None, + } + + # Try to extract error code + code_match = re.search(r'(?:error\s*code|status)[:\s]*(\d{3})', error_text, re.IGNORECASE) + if code_match: + details['code'] = code_match.group(1) + + # Try to parse JSON error structure + json_match = re.search(r'\{[^{}]*["\']error["\'][^{}]*\}', error_text) + if json_match: + try: + # Clean up the JSON-like string + json_str = json_match.group(0).replace("'", '"') + error_obj = json.loads(json_str) + if 'error' in error_obj: + err = error_obj['error'] + if isinstance(err, dict): + details['message'] = err.get('message') + details['type'] = err.get('type') + details['code'] = details['code'] or err.get('code') + except (json.JSONDecodeError, KeyError): + pass + + # Try to extract message from common patterns + if not details['message']: + msg_match = re.search(r"['\"]message['\"]\s*:\s*['\"]([^'\"]+)['\"]", error_text) + if msg_match: + details['message'] = msg_match.group(1) + + return details + + +def format_error_for_user(error_text: str) -> Dict: + """ + Transform a technical error message into a user-friendly format. + + Returns: + Dict with keys: + - title: Short, user-friendly title + - message: Plain language explanation + - guidance: Actionable suggestion + - icon: FontAwesome icon class + - type: Error category + - technical: Original error (for advanced users/debugging) + - is_known: Whether this matched a known pattern + """ + if not error_text: + return { + 'title': 'Unknown Error', + 'message': 'An unexpected error occurred.', + 'guidance': 'Please try again. If the problem persists, contact support.', + 'icon': 'fa-exclamation-triangle', + 'type': 'unknown', + 'technical': '', + 'is_known': False + } + + error_lower = error_text.lower() + + # Check against known patterns + for pattern_info in ERROR_PATTERNS: + for pattern in pattern_info['patterns']: + if re.search(pattern, error_lower): + return { + 'title': pattern_info['title'], + 'message': pattern_info['message'], + 'guidance': pattern_info['guidance'], + 'icon': pattern_info['icon'], + 'type': pattern_info['type'], + 'technical': error_text, + 'is_known': True + } + + # Unknown error - try to make it more readable + details = extract_error_details(error_text) + + # Clean up the error message for display + clean_message = details['message'] or error_text + + # Remove common prefixes + for prefix in ['Transcription failed:', 'Processing failed:', 'Error:', 'Exception:']: + if clean_message.startswith(prefix): + clean_message = clean_message[len(prefix):].strip() + + # Truncate very long messages + if len(clean_message) > 200: + clean_message = clean_message[:200] + '...' + + # Generate a reasonable title based on error code + title = 'Processing Error' + if details['code']: + code = details['code'] + if code.startswith('4'): + title = 'Request Error' + elif code.startswith('5'): + title = 'Server Error' + + return { + 'title': title, + 'message': clean_message, + 'guidance': 'If this error persists, try reprocessing the recording or contact support for assistance.', + 'icon': 'fa-exclamation-circle', + 'type': 'unknown', + 'technical': error_text, + 'is_known': False + } + + +def format_error_for_storage(error_text: str) -> str: + """ + Format an error message for storage in the database. + Returns a JSON string that can be parsed by the frontend for nice display. + + The format is: ERROR_JSON:{"title": "...", "message": "...", ...} + + This allows the frontend to detect formatted errors and display them nicely, + while still being human-readable if viewed raw. + """ + formatted = format_error_for_user(error_text) + + # Create a compact JSON representation + error_data = { + 't': formatted['title'], + 'm': formatted['message'], + 'g': formatted['guidance'], + 'i': formatted['icon'], + 'y': formatted['type'], + 'k': formatted['is_known'], + } + + # Only include technical details if it adds value + if formatted['technical'] and formatted['technical'] != formatted['message']: + error_data['d'] = formatted['technical'][:500] # Limit technical detail length + + try: + json_str = json.dumps(error_data, ensure_ascii=False) + return f"ERROR_JSON:{json_str}" + except (TypeError, ValueError): + # Fallback to plain text if JSON encoding fails + return f"{formatted['title']}: {formatted['message']}" + + +def parse_stored_error(stored_text: str) -> Optional[Dict]: + """ + Parse a stored error message. Returns the formatted error dict if it's + a JSON-formatted error, or None if it's plain text. + """ + if not stored_text or not stored_text.startswith('ERROR_JSON:'): + return None + + try: + json_str = stored_text[11:] # Remove 'ERROR_JSON:' prefix + data = json.loads(json_str) + return { + 'title': data.get('t', 'Error'), + 'message': data.get('m', 'An error occurred'), + 'guidance': data.get('g', ''), + 'icon': data.get('i', 'fa-exclamation-circle'), + 'type': data.get('y', 'unknown'), + 'is_known': data.get('k', False), + 'technical': data.get('d', ''), + } + except (json.JSONDecodeError, KeyError, TypeError): + return None + + +def is_transcription_error(transcription_text: str) -> bool: + """ + Check if the transcription text is actually an error message. + + Returns True if the text is an error message (not valid transcription content). + This should be used to prevent operations like summarization or chat on failed recordings. + """ + if not transcription_text: + return False + + # Check for JSON-formatted error + if transcription_text.startswith('ERROR_JSON:'): + return True + + # Check for legacy error prefixes + error_prefixes = [ + 'Transcription failed:', + 'Processing failed:', + 'ASR processing failed:', + 'Audio extraction failed:', + 'Upload/Processing failed:', + ] + + for prefix in error_prefixes: + if transcription_text.startswith(prefix): + return True + + return False diff --git a/src/utils/ffmpeg_utils.py b/src/utils/ffmpeg_utils.py new file mode 100644 index 0000000..5072528 --- /dev/null +++ b/src/utils/ffmpeg_utils.py @@ -0,0 +1,448 @@ +"""Centralized FFmpeg utilities for consistent audio/video processing.""" + +import os +import subprocess +import tempfile +from contextlib import contextmanager +from typing import Optional, Tuple +from flask import current_app + + +# Configuration constants +DEFAULT_MP3_BITRATE = os.getenv('AUDIO_BITRATE', '128k') +DEFAULT_SAMPLE_RATE = os.getenv('AUDIO_SAMPLE_RATE', '44100') +DEFAULT_CHANNELS = int(os.getenv('AUDIO_CHANNELS', '1')) # Mono for speech +DEFAULT_COMPRESSION_LEVEL = int(os.getenv('AUDIO_COMPRESSION_LEVEL', '2')) + + +class FFmpegError(Exception): + """Custom exception for FFmpeg-related errors.""" + pass + + +class FFmpegNotFoundError(FFmpegError): + """Raised when FFmpeg executable is not found.""" + pass + + +def convert_to_mp3( + input_path: str, + output_path: Optional[str] = None, + bitrate: str = DEFAULT_MP3_BITRATE, + sample_rate: str = DEFAULT_SAMPLE_RATE, + channels: int = DEFAULT_CHANNELS, + compression_level: int = DEFAULT_COMPRESSION_LEVEL +) -> str: + """ + Convert audio/video file to MP3 format using FFmpeg. + + Args: + input_path: Path to input audio/video file + output_path: Path for output MP3 file (auto-generated if None) + bitrate: MP3 bitrate (e.g., '128k', '192k') + sample_rate: Sample rate in Hz (e.g., '44100', '48000') + channels: Number of audio channels (1=mono, 2=stereo) + compression_level: MP3 compression level (0-9, higher=better compression) + + Returns: + Path to the created MP3 file + + Raises: + FFmpegNotFoundError: If FFmpeg is not installed + FFmpegError: If conversion fails + """ + if output_path is None: + base = os.path.splitext(input_path)[0] + output_path = f"{base}.mp3" + + cmd = [ + 'ffmpeg', + '-i', input_path, + '-y', # Overwrite output + '-acodec', 'libmp3lame', + '-b:a', bitrate, + '-ar', sample_rate, + '-ac', str(channels), + '-compression_level', str(compression_level), + output_path + ] + + _run_ffmpeg_command(cmd, f"MP3 conversion of {os.path.basename(input_path)}") + return output_path + + +def extract_audio_from_video( + video_path: str, + output_format: str = 'mp3', + bitrate: str = DEFAULT_MP3_BITRATE, + cleanup_original: bool = True, + copy_stream: bool = False +) -> Tuple[str, str]: + """ + Extract audio track from video file. + + Args: + video_path: Path to video file + output_format: Audio format ('mp3', 'wav', 'flac', 'copy') + bitrate: Audio bitrate for lossy formats (ignored if copy_stream=True) + cleanup_original: Whether to delete the original video file + copy_stream: If True, copy audio stream without re-encoding (fast, preserves quality) + If False, re-encode to specified format + + Returns: + Tuple of (audio_filepath, mime_type) + + Raises: + FFmpegNotFoundError: If FFmpeg is not installed + FFmpegError: If extraction fails + """ + base_path = os.path.splitext(video_path)[0] + + try: + if copy_stream or output_format == 'copy': + # Copy audio stream without re-encoding - need to detect the format first + from src.utils.ffprobe import get_codec_info + + try: + codec_info = get_codec_info(video_path, timeout=10) + audio_codec = codec_info.get('audio_codec', 'unknown') + + # Map codec to extension and MIME type + codec_map = { + 'aac': {'ext': 'm4a', 'mime': 'audio/mp4'}, + 'mp3': {'ext': 'mp3', 'mime': 'audio/mpeg'}, + 'opus': {'ext': 'opus', 'mime': 'audio/opus'}, + 'vorbis': {'ext': 'ogg', 'mime': 'audio/ogg'}, + 'flac': {'ext': 'flac', 'mime': 'audio/flac'}, + } + + if audio_codec in codec_map: + output_ext = codec_map[audio_codec]['ext'] + mime_type = codec_map[audio_codec]['mime'] + else: + # Default to m4a for unknown codecs + current_app.logger.warning(f"Unknown audio codec '{audio_codec}', defaulting to m4a container") + output_ext = 'm4a' + mime_type = 'audio/mp4' + + temp_audio_path = f"{base_path}_audio_temp.{output_ext}" + final_audio_path = f"{base_path}_audio.{output_ext}" + + cmd = [ + 'ffmpeg', + '-i', video_path, + '-y', + '-vn', # No video + '-acodec', 'copy', # Copy audio stream without re-encoding + temp_audio_path + ] + + current_app.logger.info(f"Copying audio stream (codec: {audio_codec}) without re-encoding") + + except Exception as probe_error: + current_app.logger.warning(f"Failed to detect audio codec: {probe_error}. Falling back to MP3 encoding.") + # Fallback to MP3 encoding if we can't detect the codec + output_ext = 'mp3' + mime_type = 'audio/mpeg' + temp_audio_path = f"{base_path}_audio_temp.{output_ext}" + final_audio_path = f"{base_path}_audio.{output_ext}" + + cmd = [ + 'ffmpeg', + '-i', video_path, + '-y', + '-vn', + '-acodec', 'libmp3lame', + '-b:a', bitrate, + '-ar', DEFAULT_SAMPLE_RATE, + '-ac', str(DEFAULT_CHANNELS), + '-compression_level', str(DEFAULT_COMPRESSION_LEVEL), + temp_audio_path + ] + + elif output_format == 'mp3': + temp_audio_path = f"{base_path}_audio_temp.mp3" + final_audio_path = f"{base_path}_audio.mp3" + cmd = [ + 'ffmpeg', + '-i', video_path, + '-y', + '-vn', # No video + '-acodec', 'libmp3lame', + '-b:a', bitrate, + '-ar', DEFAULT_SAMPLE_RATE, + '-ac', str(DEFAULT_CHANNELS), + '-compression_level', str(DEFAULT_COMPRESSION_LEVEL), + temp_audio_path + ] + mime_type = 'audio/mpeg' + elif output_format == 'wav': + temp_audio_path = f"{base_path}_audio_temp.wav" + final_audio_path = f"{base_path}_audio.wav" + cmd = [ + 'ffmpeg', + '-i', video_path, + '-y', + '-vn', + '-acodec', 'pcm_s16le', + '-ar', DEFAULT_SAMPLE_RATE, + temp_audio_path + ] + mime_type = 'audio/wav' + elif output_format == 'flac': + temp_audio_path = f"{base_path}_audio_temp.flac" + final_audio_path = f"{base_path}_audio.flac" + cmd = [ + 'ffmpeg', + '-i', video_path, + '-y', + '-vn', + '-acodec', 'flac', + '-compression_level', '12', + temp_audio_path + ] + mime_type = 'audio/flac' + elif output_format == 'opus': + temp_audio_path = f"{base_path}_audio_temp.opus" + final_audio_path = f"{base_path}_audio.opus" + cmd = [ + 'ffmpeg', + '-i', video_path, + '-y', + '-vn', + '-acodec', 'libopus', + '-b:a', bitrate, + temp_audio_path + ] + mime_type = 'audio/opus' + else: + raise ValueError(f"Unsupported output format: {output_format}") + + _run_ffmpeg_command(cmd, f"Audio extraction from {os.path.basename(video_path)}") + + # Optionally preserve temp file for debugging + if os.getenv('PRESERVE_TEMP_AUDIO', 'false').lower() == 'true': + import shutil + debug_path = temp_audio_path.replace('_temp', '_debug') + shutil.copy2(temp_audio_path, debug_path) + current_app.logger.info(f"Debug: Preserved temp audio file as {debug_path}") + + # Rename temp file to final filename + os.rename(temp_audio_path, final_audio_path) + + if cleanup_original: + try: + os.remove(video_path) + current_app.logger.info(f"Cleaned up original video: {os.path.basename(video_path)}") + except Exception as e: + current_app.logger.warning(f"Failed to cleanup video {video_path}: {e}") + + return final_audio_path, mime_type + + except Exception as e: + # Clean up temp file on error + if os.path.exists(temp_audio_path): + try: + os.remove(temp_audio_path) + except: + pass + raise + + +def compress_audio( + input_path: str, + codec: str = 'mp3', + bitrate: str = DEFAULT_MP3_BITRATE, + delete_original: bool = True, + codec_info: Optional[dict] = None +) -> Tuple[str, str, Optional[dict]]: + """ + Compress audio file to specified codec. + + Args: + input_path: Path to input audio file + codec: Target codec ('mp3', 'flac', 'opus') + bitrate: Bitrate for lossy codecs (ignored for FLAC) + delete_original: Whether to delete the original file after compression + codec_info: Optional pre-fetched codec info (returned as-is, not updated) + + Returns: + Tuple of (output_path, mime_type, codec_info) + Note: codec_info is returned unchanged (None after compression) + + Raises: + FFmpegNotFoundError: If FFmpeg is not installed + FFmpegError: If compression fails + """ + codec_config = { + 'mp3': { + 'ext': '.mp3', + 'mime': 'audio/mpeg', + 'cmd_args': [ + '-acodec', 'libmp3lame', + '-b:a', bitrate, + '-ar', DEFAULT_SAMPLE_RATE, + '-ac', str(DEFAULT_CHANNELS) + ] + }, + 'flac': { + 'ext': '.flac', + 'mime': 'audio/flac', + 'cmd_args': ['-acodec', 'flac', '-compression_level', '12'] + }, + 'opus': { + 'ext': '.opus', + 'mime': 'audio/opus', + 'cmd_args': ['-acodec', 'libopus', '-b:a', bitrate] + } + } + + if codec not in codec_config: + raise ValueError(f"Unsupported codec: {codec}. Supported: {list(codec_config.keys())}") + + config = codec_config[codec] + base_path = os.path.splitext(input_path)[0] + temp_output_path = f"{base_path}_compressed_temp{config['ext']}" + final_output_path = f"{base_path}{config['ext']}" + + try: + # Get original file size for logging + original_size = os.path.getsize(input_path) + + cmd = ['ffmpeg', '-i', input_path, '-y'] + config['cmd_args'] + [temp_output_path] + + _run_ffmpeg_command(cmd, f"Compression of {os.path.basename(input_path)} to {codec}") + + # Get compressed file size + compressed_size = os.path.getsize(temp_output_path) + ratio = (1 - compressed_size / original_size) * 100 if original_size > 0 else 0 + + current_app.logger.info( + f"Compressed {os.path.basename(input_path)}: " + f"{original_size / 1024 / 1024:.1f}MB -> " + f"{compressed_size / 1024 / 1024:.1f}MB ({ratio:.1f}% reduction)" + ) + + # Remove original and rename temp to final + if delete_original: + os.remove(input_path) + current_app.logger.debug(f"Deleted original file: {input_path}") + os.rename(temp_output_path, final_output_path) + + # Return codec_info as None since file was converted (codec changed) + return final_output_path, config['mime'], None + + except Exception as e: + # Clean up temp file if it exists + if os.path.exists(temp_output_path): + try: + os.remove(temp_output_path) + except: + pass + # Re-raise with codec_info preservation + raise + + +def extract_audio_segment( + input_path: str, + output_path: str, + start_time: float, + duration: float +) -> None: + """ + Extract a segment from an audio file. + + Args: + input_path: Path to input audio file + output_path: Path for output segment + start_time: Start time in seconds + duration: Duration in seconds + + Raises: + FFmpegNotFoundError: If FFmpeg is not installed + FFmpegError: If extraction fails + """ + cmd = [ + 'ffmpeg', + '-i', input_path, + '-ss', str(start_time), + '-t', str(duration), + '-vn', # Drop video streams (audio segment only) + '-c:a', 'copy', # Copy audio codec (no re-encoding) + '-y', + output_path + ] + + _run_ffmpeg_command(cmd, f"Segment extraction from {os.path.basename(input_path)}") + + +@contextmanager +def temp_audio_conversion(input_path: str, target_format: str = 'mp3'): + """ + Context manager for temporary audio conversion. + Automatically cleans up temp file on exit. + + Example: + with temp_audio_conversion(input_path, 'mp3') as mp3_path: + # Use mp3_path + process_audio(mp3_path) + # mp3_path is automatically deleted + + Args: + input_path: Path to input audio file + target_format: Target format ('mp3', 'wav', etc.) + + Yields: + Path to temporary converted file + """ + temp_path = None + try: + with tempfile.NamedTemporaryFile(suffix=f'.{target_format}', delete=False) as temp_file: + temp_path = temp_file.name + + if target_format == 'mp3': + convert_to_mp3(input_path, temp_path) + else: + raise ValueError(f"Unsupported target format: {target_format}") + + yield temp_path + + finally: + if temp_path and os.path.exists(temp_path): + try: + os.unlink(temp_path) + except Exception as e: + current_app.logger.warning(f"Failed to cleanup temp file {temp_path}: {e}") + + +def _run_ffmpeg_command(cmd: list, operation_description: str) -> None: + """ + Execute FFmpeg command with consistent error handling. + + Args: + cmd: FFmpeg command as list of strings + operation_description: Human-readable description for error messages + + Raises: + FFmpegNotFoundError: If FFmpeg is not installed + FFmpegError: If FFmpeg command fails + """ + try: + current_app.logger.debug(f"Running FFmpeg command: {' '.join(cmd)}") + result = subprocess.run( + cmd, + check=True, + capture_output=True, + text=True + ) + current_app.logger.debug(f"FFmpeg {operation_description} completed successfully") + + except FileNotFoundError: + error_msg = "FFmpeg not found. Please ensure FFmpeg is installed and in the system's PATH." + current_app.logger.error(error_msg) + raise FFmpegNotFoundError(error_msg) + + except subprocess.CalledProcessError as e: + error_msg = f"{operation_description} failed: {e.stderr}" + current_app.logger.error(f"FFmpeg error: {error_msg}") + raise FFmpegError(error_msg) \ No newline at end of file diff --git a/src/utils/ffprobe.py b/src/utils/ffprobe.py new file mode 100644 index 0000000..08add8b --- /dev/null +++ b/src/utils/ffprobe.py @@ -0,0 +1,499 @@ +""" +FFprobe utility for detecting audio/video codecs and format information. + +This module provides functions to inspect media files using ffprobe and return +structured information about their codecs, streams, and formats. +""" + +import json +import logging +import subprocess +from datetime import datetime +from typing import Optional, Dict, Any, Tuple + +logger = logging.getLogger(__name__) + + +class FFProbeError(Exception): + """Raised when ffprobe fails to analyze a file.""" + pass + + +def probe(filename: str, cmd: str = 'ffprobe', timeout: Optional[int] = None) -> Dict[str, Any]: + """ + Run ffprobe on the specified file and return a JSON representation of the output. + + Args: + filename: Path to the media file to probe + cmd: Command to use (default: 'ffprobe') + timeout: Optional timeout in seconds + + Returns: + Dictionary containing streams and format information + + Raises: + FFProbeError: if ffprobe returns a non-zero exit code + """ + args = [cmd, '-show_format', '-show_streams', '-of', 'json', filename] + p = None + + try: + p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + communicate_kwargs = {} + if timeout is not None: + communicate_kwargs['timeout'] = timeout + out, err = p.communicate(**communicate_kwargs) + + if p.returncode != 0: + error_msg = err.decode('utf-8', errors='ignore') + raise FFProbeError(f'ffprobe failed: {error_msg}') + + return json.loads(out.decode('utf-8')) + except subprocess.TimeoutExpired: + if p: + p.kill() + raise FFProbeError(f'ffprobe timed out after {timeout} seconds') + except FileNotFoundError: + raise FFProbeError('ffprobe command not found. Please ensure ffmpeg is installed.') + except json.JSONDecodeError as e: + raise FFProbeError(f'Failed to parse ffprobe output: {e}') + + +def get_codec_info(filename: str, timeout: Optional[int] = None) -> Dict[str, Any]: + """ + Get codec information for a media file. + + Args: + filename: Path to the media file + timeout: Optional timeout in seconds + + Returns: + Dictionary with keys: + - audio_codec: Audio codec name (e.g., 'pcm_s16le', 'aac', 'mp3') + - video_codec: Video codec name if present, or None + - has_video: Boolean indicating if file contains video stream + - has_audio: Boolean indicating if file contains audio stream + - format_name: Container format name (e.g., 'wav', 'mov,mp4,m4a') + - duration: Duration in seconds (float) + - sample_rate: Audio sample rate if available + - channels: Number of audio channels if available + - bit_rate: Bit rate if available + + Raises: + FFProbeError: if ffprobe fails to analyze the file + """ + try: + probe_data = probe(filename, timeout=timeout) + except FFProbeError: + raise + + result = { + 'audio_codec': None, + 'video_codec': None, + 'has_video': False, + 'has_audio': False, + 'format_name': None, + 'duration': None, + 'sample_rate': None, + 'channels': None, + 'bit_rate': None + } + + # Extract format information + if 'format' in probe_data: + fmt = probe_data['format'] + result['format_name'] = fmt.get('format_name') + + if 'duration' in fmt: + try: + result['duration'] = float(fmt['duration']) + except (ValueError, TypeError): + pass + + if 'bit_rate' in fmt: + try: + result['bit_rate'] = int(fmt['bit_rate']) + except (ValueError, TypeError): + pass + + # Extract stream information + if 'streams' in probe_data: + for stream in probe_data['streams']: + codec_type = stream.get('codec_type') + codec_name = stream.get('codec_name') + + if codec_type == 'audio': + result['has_audio'] = True + if result['audio_codec'] is None: # Use first audio stream + result['audio_codec'] = codec_name + result['sample_rate'] = stream.get('sample_rate') + result['channels'] = stream.get('channels') + + elif codec_type == 'video': + result['has_video'] = True + if result['video_codec'] is None: # Use first video stream + result['video_codec'] = codec_name + + return result + + +def is_video_file(filename: str, timeout: Optional[int] = None, codec_info: Optional[Dict[str, Any]] = None) -> bool: + """ + Check if a file contains video streams. + + Args: + filename: Path to the media file + timeout: Optional timeout in seconds + codec_info: Optional pre-fetched codec info to avoid redundant probe calls + + Returns: + True if file contains video streams, False otherwise + """ + try: + if codec_info is None: + codec_info = get_codec_info(filename, timeout=timeout) + return codec_info['has_video'] + except FFProbeError as e: + logger.warning(f"Failed to probe {filename}: {e}") + return False + + +def is_audio_file(filename: str, timeout: Optional[int] = None, codec_info: Optional[Dict[str, Any]] = None) -> bool: + """ + Check if a file contains audio streams. + + Args: + filename: Path to the media file + timeout: Optional timeout in seconds + codec_info: Optional pre-fetched codec info to avoid redundant probe calls + + Returns: + True if file contains audio streams, False otherwise + """ + try: + if codec_info is None: + codec_info = get_codec_info(filename, timeout=timeout) + return codec_info['has_audio'] + except FFProbeError as e: + logger.warning(f"Failed to probe {filename}: {e}") + return False + + +def get_audio_codec(filename: str, timeout: Optional[int] = None, codec_info: Optional[Dict[str, Any]] = None) -> Optional[str]: + """ + Get the audio codec name for a file. + + Args: + filename: Path to the media file + timeout: Optional timeout in seconds + codec_info: Optional pre-fetched codec info to avoid redundant probe calls + + Returns: + Audio codec name (e.g., 'pcm_s16le', 'aac', 'mp3', 'opus'), or None if no audio + """ + try: + if codec_info is None: + codec_info = get_codec_info(filename, timeout=timeout) + return codec_info['audio_codec'] + except FFProbeError as e: + logger.warning(f"Failed to probe {filename}: {e}") + return None + + +def needs_audio_conversion(filename: str, supported_codecs: list, timeout: Optional[int] = None, codec_info: Optional[Dict[str, Any]] = None) -> Tuple[bool, Optional[str]]: + """ + Check if a file needs audio conversion based on its codec. + + Args: + filename: Path to the media file + supported_codecs: List of supported audio codec names + timeout: Optional timeout in seconds + codec_info: Optional pre-fetched codec info to avoid redundant probe calls + + Returns: + Tuple of (needs_conversion: bool, current_codec: str or None) + """ + try: + if codec_info is None: + codec_info = get_codec_info(filename, timeout=timeout) + + # If it has video, it likely needs conversion + if codec_info['has_video']: + return True, codec_info.get('audio_codec') + + # If no audio at all, cannot convert + if not codec_info['has_audio']: + logger.warning(f"File {filename} has no audio streams") + return False, None + + audio_codec = codec_info['audio_codec'] + + # Check if codec is in supported list + if audio_codec in supported_codecs: + return False, audio_codec + + return True, audio_codec + + except FFProbeError as e: + logger.warning(f"Failed to probe {filename}: {e}") + # Default to attempting conversion on error + return True, None + + +def is_lossless_audio(filename: str, timeout: Optional[int] = None, codec_info: Optional[Dict[str, Any]] = None) -> bool: + """ + Check if a file uses a lossless audio codec. + + Args: + filename: Path to the media file + timeout: Optional timeout in seconds + codec_info: Optional pre-fetched codec info to avoid redundant probe calls + + Returns: + True if file uses lossless audio codec, False otherwise + """ + lossless_codecs = { + 'pcm_s16le', 'pcm_s24le', 'pcm_s32le', + 'pcm_f32le', 'pcm_f64le', + 'pcm_u8', 'pcm_u16le', 'pcm_u24le', 'pcm_u32le', + 'flac', 'alac', 'ape', 'wavpack', 'tta', + 'mlp', 'truehd' + } + + try: + if codec_info is None: + codec_info = get_codec_info(filename, timeout=timeout) + audio_codec = codec_info['audio_codec'] + return audio_codec in lossless_codecs if audio_codec else False + except FFProbeError as e: + logger.warning(f"Failed to probe {filename}: {e}") + return False + + +def get_duration(filename: str, timeout: Optional[int] = None, codec_info: Optional[Dict[str, Any]] = None) -> Optional[float]: + """ + Get the duration of a media file in seconds. + + Uses multiple methods to determine duration: + 1. Format-level duration (fastest, works for most files) + 2. Packet timestamps fallback (for files without duration metadata like some WebM) + + Args: + filename: Path to the media file + timeout: Optional timeout in seconds + codec_info: Optional pre-fetched codec info to avoid redundant probe calls + + Returns: + Duration in seconds, or None if unable to determine + """ + try: + if codec_info is None: + codec_info = get_codec_info(filename, timeout=timeout) + + # Try format-level duration first + if codec_info['duration'] is not None: + return codec_info['duration'] + + # Fallback: scan packets to find the last timestamp + # This works for WebM and other files without duration metadata + return _get_duration_from_packets(filename, timeout=timeout) + except FFProbeError as e: + logger.warning(f"Failed to probe {filename}: {e}") + return None + + +def _get_duration_from_packets(filename: str, timeout: Optional[int] = None) -> Optional[float]: + """ + Get duration by scanning packet timestamps (fallback for files without duration metadata). + + This is slower than format-level duration but works for WebM and similar files + that don't store duration in the container metadata. + + Args: + filename: Path to the media file + timeout: Optional timeout in seconds + + Returns: + Duration in seconds, or None if unable to determine + """ + try: + args = [ + 'ffprobe', '-v', 'error', + '-show_entries', 'packet=pts_time', + '-select_streams', 'a:0', # First audio stream + '-of', 'csv=p=0', + filename + ] + + p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + communicate_kwargs = {} + if timeout is not None: + communicate_kwargs['timeout'] = timeout + out, err = p.communicate(**communicate_kwargs) + + if p.returncode != 0: + logger.debug(f"Packet scan failed for {filename}") + return None + + # Parse the output to find the last timestamp + lines = out.decode('utf-8').strip().split('\n') + last_valid_time = None + for line in reversed(lines): + line = line.strip() + if line and line != 'N/A': + try: + last_valid_time = float(line) + break + except ValueError: + continue + + if last_valid_time is not None: + logger.debug(f"Got duration from packets for {filename}: {last_valid_time}") + return last_valid_time + + return None + except subprocess.TimeoutExpired: + logger.warning(f"Packet scan timed out for {filename}") + return None + except Exception as e: + logger.warning(f"Error scanning packets for {filename}: {e}") + return None + + +def get_creation_date(filename: str, timeout: Optional[int] = None, use_file_mtime: bool = True) -> Optional[datetime]: + """ + Extract the creation/recording date from a media file's metadata. + + Checks various metadata tags commonly used by recorders and devices: + - creation_time (MP4, M4A, MOV) + - date (various formats) + - encoded_date (some encoders) + + Falls back to file modification time if no metadata found and use_file_mtime is True. + + Args: + filename: Path to the media file + timeout: Optional timeout in seconds + use_file_mtime: If True, fall back to file modification time when no metadata found + + Returns: + datetime object if creation date found, None otherwise + """ + import os + + try: + probe_data = probe(filename, timeout=timeout) + except FFProbeError as e: + logger.warning(f"Failed to probe {filename} for creation date: {e}") + # Even if probe fails, we can still try file mtime + if use_file_mtime: + return _get_file_mtime(filename) + return None + + # Tags to check for creation date (in order of preference) + date_tags = ['creation_time', 'date', 'encoded_date', 'date_recorded', 'recording_time'] + + # Check format-level tags first + if 'format' in probe_data and 'tags' in probe_data['format']: + tags = probe_data['format']['tags'] + for tag in date_tags: + # Check both lowercase and original case + value = tags.get(tag) or tags.get(tag.upper()) + if value: + parsed = _parse_date_string(value) + if parsed: + logger.debug(f"Found creation date from format tag '{tag}': {parsed}") + return parsed + + # Check stream-level tags + if 'streams' in probe_data: + for stream in probe_data['streams']: + if 'tags' in stream: + tags = stream['tags'] + for tag in date_tags: + value = tags.get(tag) or tags.get(tag.upper()) + if value: + parsed = _parse_date_string(value) + if parsed: + logger.debug(f"Found creation date from stream tag '{tag}': {parsed}") + return parsed + + # Fall back to file modification time + if use_file_mtime: + mtime = _get_file_mtime(filename) + if mtime: + logger.debug(f"Using file modification time as creation date: {mtime}") + return mtime + + logger.debug(f"No creation date found for {filename}") + return None + + +def _get_file_mtime(filename: str) -> Optional[datetime]: + """ + Get the file's modification time as a datetime. + + Args: + filename: Path to the file + + Returns: + datetime object or None if unable to get mtime + """ + import os + + try: + stat_info = os.stat(filename) + return datetime.fromtimestamp(stat_info.st_mtime) + except (OSError, ValueError) as e: + logger.warning(f"Failed to get file mtime for {filename}: {e}") + return None + + +def _parse_date_string(date_str: str) -> Optional[datetime]: + """ + Parse various date string formats commonly found in media metadata. + + Args: + date_str: Date string to parse + + Returns: + datetime object if parsing successful, None otherwise + """ + if not date_str: + return None + + # Common formats in media files + formats = [ + '%Y-%m-%dT%H:%M:%S.%fZ', # ISO 8601 with microseconds and Z + '%Y-%m-%dT%H:%M:%SZ', # ISO 8601 with Z + '%Y-%m-%dT%H:%M:%S.%f%z', # ISO 8601 with microseconds and timezone + '%Y-%m-%dT%H:%M:%S%z', # ISO 8601 with timezone + '%Y-%m-%dT%H:%M:%S.%f', # ISO 8601 with microseconds + '%Y-%m-%dT%H:%M:%S', # ISO 8601 basic + '%Y-%m-%d %H:%M:%S', # Common datetime + '%Y/%m/%d %H:%M:%S', # Alternate datetime + '%Y-%m-%d', # Date only + '%Y/%m/%d', # Alternate date only + '%d-%m-%Y %H:%M:%S', # European format + '%d/%m/%Y %H:%M:%S', # European format alternate + ] + + # Clean up the string + date_str = date_str.strip() + + for fmt in formats: + try: + return datetime.strptime(date_str, fmt) + except ValueError: + continue + + # Try fromisoformat as a fallback (handles many ISO variants) + try: + # Replace Z with +00:00 for fromisoformat compatibility + clean_str = date_str.replace('Z', '+00:00') + return datetime.fromisoformat(clean_str) + except ValueError: + pass + + logger.debug(f"Could not parse date string: {date_str}") + return None \ No newline at end of file diff --git a/src/utils/file_hash.py b/src/utils/file_hash.py new file mode 100644 index 0000000..7dab386 --- /dev/null +++ b/src/utils/file_hash.py @@ -0,0 +1,24 @@ +"""File hashing utility for duplicate detection.""" + +import hashlib + + +def compute_file_sha256(filepath, chunk_size=8192): + """ + Compute SHA-256 hash of a file, reading in chunks to handle large files. + + Args: + filepath: Path to the file to hash + chunk_size: Size of chunks to read at a time (default 8KB) + + Returns: + 64-character hex digest string + """ + sha256 = hashlib.sha256() + with open(filepath, 'rb') as f: + while True: + chunk = f.read(chunk_size) + if not chunk: + break + sha256.update(chunk) + return sha256.hexdigest() diff --git a/src/utils/json_parser.py b/src/utils/json_parser.py new file mode 100644 index 0000000..f98533a --- /dev/null +++ b/src/utils/json_parser.py @@ -0,0 +1,215 @@ +""" +JSON parsing utilities for handling LLM responses and malformed JSON. + +This module provides robust JSON parsing functions that can handle common +issues with LLM-generated JSON, including: +- Incomplete/unterminated JSON structures +- Escape sequence problems +- JSON embedded in markdown code blocks +- Nested quotes and special characters +""" + +import json +import re +import ast +import logging + +# Module-level logger +logger = logging.getLogger(__name__) + + +def auto_close_json(json_string): + """ + Attempts to close an incomplete JSON string by appending necessary brackets and braces. + This is a simplified parser and may not handle all edge cases, but is + designed to fix unterminated strings from API responses. + """ + if not isinstance(json_string, str): + return json_string + + stack = [] + in_string = False + escape_next = False + + for char in json_string: + if escape_next: + escape_next = False + continue + + if char == '\\': + escape_next = True + continue + + if char == '"': + # We don't handle escaped quotes inside strings perfectly, + # but this is a simple heuristic. + if not escape_next: + in_string = not in_string + + if not in_string: + if char == '{': + stack.append('}') + elif char == '[': + stack.append(']') + elif char == '}': + if stack and stack[-1] == '}': + stack.pop() + elif char == ']': + if stack and stack[-1] == ']': + stack.pop() + + # If we are inside a string at the end, close it. + if in_string: + json_string += '"' + + # Close any remaining open structures + while stack: + json_string += stack.pop() + + return json_string + + +def preprocess_json_escapes(json_string): + """ + Preprocess JSON string to fix common escape issues from LLM responses. + Uses a more sophisticated approach to handle nested quotes properly. + """ + if not json_string: + return json_string + + result = [] + i = 0 + in_string = False + escape_next = False + expecting_value = False # Track if we're expecting a value (after :) + + while i < len(json_string): + char = json_string[i] + + if escape_next: + # This character is escaped, add it as-is + result.append(char) + escape_next = False + elif char == '\\': + # This is an escape character + result.append(char) + escape_next = True + elif char == ':' and not in_string: + # We found a colon, next string will be a value + result.append(char) + expecting_value = True + elif char == ',' and not in_string: + # We found a comma, reset expecting_value + result.append(char) + expecting_value = False + elif char == '"': + if not in_string: + # Starting a string + in_string = True + result.append(char) + else: + # We're in a string, check if this quote should be escaped + # Look ahead to see if this is the end of the string value + j = i + 1 + while j < len(json_string) and json_string[j].isspace(): + j += 1 + + # For keys (not expecting_value), only end on colon + # For values (expecting_value), end on comma, closing brace, or closing bracket + if expecting_value: + end_chars = ',}]' + else: + end_chars = ':' + + if j < len(json_string) and json_string[j] in end_chars: + # This is the end of the string + in_string = False + result.append(char) + if not expecting_value: + # We just finished a key, next will be expecting value + expecting_value = True + else: + # This is an inner quote that should be escaped + result.append('\\"') + else: + result.append(char) + + i += 1 + + return ''.join(result) + + +def extract_json_object(text): + """ + Extract the first complete JSON object or array from text using regex. + """ + # Look for JSON object + obj_match = re.search(r'\{.*\}', text, re.DOTALL) + if obj_match: + return obj_match.group(0) + + # Look for JSON array + arr_match = re.search(r'\[.*\]', text, re.DOTALL) + if arr_match: + return arr_match.group(0) + + # Return original if no JSON structure found + return text + + +def safe_json_loads(json_string, fallback_value=None): + """ + Safely parse JSON with preprocessing to handle common LLM JSON formatting issues. + + Args: + json_string (str): The JSON string to parse + fallback_value: Value to return if parsing fails (default: None) + + Returns: + Parsed JSON object or fallback_value if parsing fails + """ + if not json_string or not isinstance(json_string, str): + logger.warning(f"Invalid JSON input: {type(json_string)} - {json_string}") + return fallback_value + + # Step 1: Clean the input string + cleaned_json = json_string.strip() + + # Step 2: Extract JSON from markdown code blocks if present + json_match = re.search(r'```(?:json)?\s*(.*?)\s*```', cleaned_json, re.DOTALL) + if json_match: + cleaned_json = json_match.group(1).strip() + + # Step 3: Try multiple parsing strategies + parsing_strategies = [ + # Strategy 1: Direct parsing (for well-formed JSON) + lambda x: json.loads(x), + + # Strategy 2: Fix common escape issues + lambda x: json.loads(preprocess_json_escapes(x)), + + # Strategy 3: Use ast.literal_eval as fallback for simple cases + lambda x: ast.literal_eval(x) if x.startswith(('{', '[')) else None, + + # Strategy 4: Extract JSON object/array using regex + lambda x: json.loads(extract_json_object(x)), + + # Strategy 5: Auto-close incomplete JSON and parse + lambda x: json.loads(auto_close_json(x)), + ] + + for i, strategy in enumerate(parsing_strategies): + try: + result = strategy(cleaned_json) + if result is not None: + if i > 0: # Log if we had to use a fallback strategy + logger.info(f"JSON parsed successfully using strategy {i+1}") + return result + except (json.JSONDecodeError, ValueError, SyntaxError) as e: + if i == 0: # Only log the first failure to avoid spam + logger.debug(f"JSON parsing strategy {i+1} failed: {e}") + continue + + # All strategies failed + logger.error(f"All JSON parsing strategies failed for: {cleaned_json[:200]}...") + return fallback_value diff --git a/src/utils/localization.py b/src/utils/localization.py new file mode 100644 index 0000000..a1a440e --- /dev/null +++ b/src/utils/localization.py @@ -0,0 +1,214 @@ +""" +Server-side localization utilities for export templates. + +This module provides utilities to load localized labels from +static/locales/*.json files for use in export templates. +""" + +import json +import os +import logging +from pathlib import Path +from typing import Dict, Optional +from datetime import datetime + +logger = logging.getLogger(__name__) + +# Cache for loaded locales +_locale_cache: Dict[str, dict] = {} + + +def get_locales_dir() -> Path: + """Get the path to the locales directory.""" + # Navigate from src/utils to static/locales + base_dir = Path(__file__).parent.parent.parent + return base_dir / 'static' / 'locales' + + +def load_locale(language: str) -> dict: + """ + Load locale data for a given language. + + Args: + language: Language code (e.g., 'en', 'de', 'fr') + + Returns: + Dictionary containing all locale strings + """ + # Check cache first + if language in _locale_cache: + return _locale_cache[language] + + locales_dir = get_locales_dir() + locale_file = locales_dir / f'{language}.json' + + # Fallback to English if requested language doesn't exist + if not locale_file.exists(): + logger.warning(f"Locale file not found for '{language}', falling back to English") + locale_file = locales_dir / 'en.json' + language = 'en' + + try: + with open(locale_file, 'r', encoding='utf-8') as f: + locale_data = json.load(f) + _locale_cache[language] = locale_data + return locale_data + except (json.JSONDecodeError, IOError) as e: + logger.error(f"Error loading locale file '{locale_file}': {e}") + # Return empty dict on error + return {} + + +def get_export_labels(language: str) -> dict: + """ + Get localized export labels for a given language. + + Args: + language: Language code (e.g., 'en', 'de', 'fr') + + Returns: + Dictionary containing export-specific labels + """ + locale_data = load_locale(language) + + # Get exportLabels section, or fall back to defaults + export_labels = locale_data.get('exportLabels', {}) + + # Default English labels as fallback + defaults = { + 'metadata': 'Metadata', + 'notes': 'Notes', + 'summary': 'Summary', + 'transcription': 'Transcription', + 'date': 'Date', + 'created': 'Created', + 'originalFile': 'Original File', + 'fileSize': 'File Size', + 'participants': 'Participants', + 'tags': 'Tags', + 'transcriptionTime': 'Transcription Time', + 'summarizationTime': 'Summarization Time', + 'footer': 'Generated with [Speakr](https://github.com/learnedmachine/speakr)' + } + + # Merge defaults with loaded labels + result = defaults.copy() + result.update(export_labels) + + return result + + +def format_date_localized(dt: datetime, language: str) -> str: + """ + Format a datetime in a localized format. + + Args: + dt: The datetime to format + language: Language code for localization + + Returns: + Localized date string + """ + if dt is None: + return '' + + # Define locale-specific date formats + date_formats = { + 'en': '%B %d, %Y', # January 15, 2026 + 'de': '%d. %B %Y', # 15. Januar 2026 + 'fr': '%d %B %Y', # 15 janvier 2026 + 'es': '%d de %B de %Y', # 15 de enero de 2026 + 'zh': '%Y年%m月%d日', # 2026年01月15日 + 'ru': '%d %B %Y г.', # 15 января 2026 г. + } + + # Month names for different languages + month_names = { + 'de': { + 'January': 'Januar', 'February': 'Februar', 'March': 'März', + 'April': 'April', 'May': 'Mai', 'June': 'Juni', + 'July': 'Juli', 'August': 'August', 'September': 'September', + 'October': 'Oktober', 'November': 'November', 'December': 'Dezember' + }, + 'fr': { + 'January': 'janvier', 'February': 'février', 'March': 'mars', + 'April': 'avril', 'May': 'mai', 'June': 'juin', + 'July': 'juillet', 'August': 'août', 'September': 'septembre', + 'October': 'octobre', 'November': 'novembre', 'December': 'décembre' + }, + 'es': { + 'January': 'enero', 'February': 'febrero', 'March': 'marzo', + 'April': 'abril', 'May': 'mayo', 'June': 'junio', + 'July': 'julio', 'August': 'agosto', 'September': 'septiembre', + 'October': 'octubre', 'November': 'noviembre', 'December': 'diciembre' + }, + 'ru': { + 'January': 'января', 'February': 'февраля', 'March': 'марта', + 'April': 'апреля', 'May': 'мая', 'June': 'июня', + 'July': 'июля', 'August': 'августа', 'September': 'сентября', + 'October': 'октября', 'November': 'ноября', 'December': 'декабря' + } + } + + # Get format for language, default to English + date_format = date_formats.get(language, date_formats['en']) + + # Format the date + formatted = dt.strftime(date_format) + + # Replace English month names with localized versions + if language in month_names: + for eng, local in month_names[language].items(): + formatted = formatted.replace(eng, local) + + return formatted + + +def format_datetime_localized(dt: datetime, language: str) -> str: + """ + Format a datetime with time in a localized format. + + Args: + dt: The datetime to format + language: Language code for localization + + Returns: + Localized datetime string + """ + if dt is None: + return '' + + date_part = format_date_localized(dt, language) + + # Time format varies by language + time_formats = { + 'en': '%I:%M %p', # 02:30 PM + 'de': '%H:%M Uhr', # 14:30 Uhr + 'fr': '%H:%M', # 14:30 + 'es': '%H:%M', # 14:30 + 'zh': '%H:%M', # 14:30 + 'ru': '%H:%M', # 14:30 + } + + time_format = time_formats.get(language, time_formats['en']) + time_part = dt.strftime(time_format) + + # Combine with appropriate connector + connectors = { + 'en': ' at ', + 'de': ' um ', + 'fr': ' à ', + 'es': ' a las ', + 'zh': ' ', + 'ru': ' в ', + } + + connector = connectors.get(language, ' at ') + + return f"{date_part}{connector}{time_part}" + + +def clear_locale_cache(): + """Clear the locale cache (useful for testing or hot-reloading).""" + global _locale_cache + _locale_cache = {} diff --git a/src/utils/markdown.py b/src/utils/markdown.py new file mode 100644 index 0000000..8b55635 --- /dev/null +++ b/src/utils/markdown.py @@ -0,0 +1,132 @@ +""" +Markdown and HTML utilities for converting and sanitizing text content. + +This module provides functions for converting markdown to HTML and +sanitizing HTML to prevent XSS and other security issues. +""" + +import re +import markdown +import bleach + +# --- Initialize Markdown Once (Performance Optimization) --- +# Create a single reusable Markdown instance to avoid reinitializing extensions on every call +_markdown_instance = markdown.Markdown(extensions=[ + 'fenced_code', # Fenced code blocks + 'tables', # Table support + 'attr_list', # Attribute lists + 'def_list', # Definition lists + 'footnotes', # Footnotes + 'abbr', # Abbreviations + 'codehilite', # Syntax highlighting for code blocks + 'smarty' # Smart quotes, dashes, etc. +]) + + +def sanitize_html(text): + """ + Sanitize HTML content to prevent XSS and other security issues. + + Args: + text (str): HTML text to sanitize + + Returns: + str: Sanitized HTML text + """ + if not text: + return "" + + # Remove any template-like syntax that could be exploited + # Remove {{ }} style template syntax + text = re.sub(r'\{\{.*?\}\}', '', text, flags=re.DOTALL) + text = re.sub(r'\{%.*?%\}', '', text, flags=re.DOTALL) + + # Remove other template-like syntax + text = re.sub(r'<%.*?%>', '', text, flags=re.DOTALL) + text = re.sub(r'<\?.*?\?>', '', text, flags=re.DOTALL) + + # Define allowed tags and attributes for safe HTML + allowed_tags = [ + 'p', 'br', 'strong', 'b', 'em', 'i', 'u', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', + 'ul', 'ol', 'li', 'blockquote', 'code', 'pre', 'a', 'img', 'table', 'thead', + 'tbody', 'tr', 'th', 'td', 'dl', 'dt', 'dd', 'div', 'span', 'hr', 'sup', 'sub' + ] + + allowed_attributes = { + 'a': ['href', 'title'], + 'img': ['src', 'alt', 'title', 'width', 'height'], + 'code': ['class'], # For syntax highlighting + 'pre': ['class'], # For syntax highlighting + 'div': ['class'], # For code blocks + 'span': ['class'], # For syntax highlighting + 'th': ['align'], + 'td': ['align'], + 'table': ['class'] + } + + # Sanitize the HTML to remove dangerous content + sanitized_html = bleach.clean( + text, + tags=allowed_tags, + attributes=allowed_attributes, + protocols=['http', 'https', 'mailto'], + strip=True # Strip disallowed tags instead of escaping them + ) + + return sanitized_html + + +def md_to_html(text): + """ + Convert markdown text to sanitized HTML. + + Args: + text (str): Markdown text to convert + + Returns: + str: Sanitized HTML output + """ + if not text: + return "" + + # Fix list spacing + def fix_list_spacing(text): + lines = text.split('\n') + result = [] + in_list = False + + for line in lines: + stripped = line.strip() + + # Check if this line is a list item (starts with -, *, +, or number.) + is_list_item = ( + stripped.startswith(('- ', '* ', '+ ')) or + (stripped and stripped[0].isdigit() and '. ' in stripped[:10]) + ) + + # If we're starting a new list or continuing a list, ensure proper spacing + if is_list_item: + if not in_list and result and result[-1].strip(): + # Starting a new list - add blank line before + result.append('') + in_list = True + elif in_list and stripped and not is_list_item: + # Ending a list - add blank line after the list + if result and result[-1].strip(): + result.append('') + in_list = False + + result.append(line) + + return '\n'.join(result) + + # Fix list spacing + processed_text = fix_list_spacing(text) + + # Convert markdown to HTML using the pre-configured singleton instance + # Reset the instance to clear any state from previous conversions + _markdown_instance.reset() + html = _markdown_instance.convert(processed_text) + + # Apply sanitization to the generated HTML + return sanitize_html(html) diff --git a/src/utils/security.py b/src/utils/security.py new file mode 100644 index 0000000..a58e8f5 --- /dev/null +++ b/src/utils/security.py @@ -0,0 +1,65 @@ +""" +Security utilities for password validation and other security functions. + +This module provides security-related utility functions for the application. +""" + +import re +from functools import wraps +from wtforms.validators import ValidationError +from urllib.parse import urlparse, urljoin +from flask import request, jsonify +from flask_login import login_required, current_user + + +def password_check(form, field): + """ + Custom WTForms validator for password strength. + + Validates that passwords meet security requirements: + - At least 8 characters long + - Contains at least one uppercase letter + - Contains at least one lowercase letter + - Contains at least one number + - Contains at least one special character + + Args: + form: WTForms form object + field: WTForms field object containing the password + + Raises: + ValidationError: If password doesn't meet requirements + """ + password = field.data + if len(password) < 8: + raise ValidationError('Password must be at least 8 characters long.') + if not re.search(r'[A-Z]', password): + raise ValidationError('Password must contain at least one uppercase letter.') + if not re.search(r'[a-z]', password): + raise ValidationError('Password must contain at least one lowercase letter.') + if not re.search(r'[0-9]', password): + raise ValidationError('Password must contain at least one number.') + if not re.search(r'[!@#$%^&*(),.?":{}|<>]', password): + raise ValidationError('Password must contain at least one special character.') + + +# --- Access control decorators --- + +def admin_required(f): + """Decorator that requires the current user to be authenticated and an admin.""" + @wraps(f) + @login_required + def decorated(*args, **kwargs): + if not current_user.is_admin: + return jsonify({'error': 'Admin access required'}), 403 + return f(*args, **kwargs) + return decorated + + +# --- URL Security --- + +def is_safe_url(target): + ref_url = urlparse(request.host_url) + test_url = urlparse(urljoin(request.host_url, target)) + return test_url.scheme in ('http', 'https') and ref_url.netloc == test_url.netloc + diff --git a/src/utils/token_auth.py b/src/utils/token_auth.py new file mode 100644 index 0000000..9fd0086 --- /dev/null +++ b/src/utils/token_auth.py @@ -0,0 +1,108 @@ +""" +Token authentication utilities. + +This module provides token-based authentication for API access, +allowing users to authenticate with Bearer tokens instead of session cookies. +""" + +import hashlib +from datetime import datetime +from flask import request +from src.models import APIToken, User + + +def extract_token_from_request(): + """ + Extract API token from various possible locations in the request. + + Checks in order: + 1. Authorization header with Bearer scheme + 2. X-API-Token header + 3. API-Token header + 4. 'token' query parameter + + Returns: + str: The extracted token, or None if not found + """ + # Check Authorization header (Bearer token) + auth_header = request.headers.get('Authorization', '') + if auth_header.startswith('Bearer '): + return auth_header[7:] # Remove 'Bearer ' prefix + + # Check X-API-Token header + token = request.headers.get('X-API-Token') + if token: + return token + + # Check API-Token header + token = request.headers.get('API-Token') + if token: + return token + + # Check query parameter + token = request.args.get('token') + if token: + return token + + return None + + +def hash_token(token): + """ + Hash a token using SHA-256. + + Args: + token (str): The plaintext token to hash + + Returns: + str: The hexadecimal hash of the token + """ + return hashlib.sha256(token.encode()).hexdigest() + + +def load_user_from_token(): + """ + Load a user from an API token in the request. + + This function is used by Flask-Login's request_loader to authenticate + users via API tokens instead of sessions. + + Returns: + User: The authenticated user, or None if authentication fails + """ + # Extract token from request + token = extract_token_from_request() + if not token: + return None + + # Hash the token to look up in database + token_hash = hash_token(token) + + # Find the token in the database + api_token = APIToken.query.filter_by(token_hash=token_hash).first() + + # Validate token + if not api_token: + return None + + if not api_token.is_valid(): + return None + + # Update last used timestamp + api_token.last_used_at = datetime.utcnow() + from src.database import db + db.session.commit() + + # Return the associated user + return api_token.user + + +def is_token_authenticated(): + """ + Check if the current request is authenticated via API token. + + Returns: + bool: True if a valid token was provided, False otherwise + """ + token = extract_token_from_request() + return token is not None diff --git a/src/utils/vapid_keys.py b/src/utils/vapid_keys.py new file mode 100644 index 0000000..e910084 --- /dev/null +++ b/src/utils/vapid_keys.py @@ -0,0 +1,101 @@ +""" +VAPID Key Management +Auto-generates and stores VAPID keys for push notifications +""" +import os +import json +from pathlib import Path + + +def generate_vapid_keys(): + """Generate new VAPID keys using pywebpush""" + try: + from pywebpush import webpush + + # Generate keys + vapid_claims = webpush.WebPusher().vapid_claims + + # For newer versions of pywebpush, use this approach: + from py_vapid import Vapid + vapid = Vapid() + vapid.generate_keys() + + return { + 'public_key': vapid.public_key.export_public(encoding='uncompressed'), + 'private_key': vapid.private_key.export_private(encoding='pem') + } + except ImportError: + print("[VAPID] pywebpush not installed. Push notifications will be disabled.") + print("[VAPID] Install with: pip install pywebpush") + return None + except Exception as e: + print(f"[VAPID] Failed to generate keys: {e}") + return None + + +def get_vapid_keys_file(): + """Get path to VAPID keys storage file""" + # Store in /config directory (persistent in Docker) + config_dir = Path(os.getenv('CONFIG_DIR', '/config')) + config_dir.mkdir(parents=True, exist_ok=True) + return config_dir / 'vapid_keys.json' + + +def load_vapid_keys(): + """Load existing VAPID keys or generate new ones""" + keys_file = get_vapid_keys_file() + + # Try to load existing keys + if keys_file.exists(): + try: + with open(keys_file, 'r') as f: + keys = json.load(f) + print(f"[VAPID] Loaded existing keys from {keys_file}") + return keys + except Exception as e: + print(f"[VAPID] Failed to load existing keys: {e}") + # Continue to generate new keys + + # Generate new keys + print("[VAPID] Generating new VAPID keys...") + keys = generate_vapid_keys() + + if keys: + # Save keys to file + try: + with open(keys_file, 'w') as f: + json.dump(keys, f, indent=2) + + # Set restrictive permissions (owner read/write only) + os.chmod(keys_file, 0o600) + + print(f"[VAPID] Saved new keys to {keys_file}") + print(f"[VAPID] Public key: {keys['public_key'][:50]}...") + return keys + except Exception as e: + print(f"[VAPID] Failed to save keys: {e}") + return keys + else: + print("[VAPID] Push notifications disabled - pywebpush not available") + return None + + +def get_public_key(): + """Get the public VAPID key for client use""" + keys = load_vapid_keys() + return keys['public_key'] if keys else None + + +def get_private_key(): + """Get the private VAPID key for server use""" + keys = load_vapid_keys() + return keys['private_key'] if keys else None + + +# Initialize on module import +VAPID_KEYS = load_vapid_keys() +VAPID_ENABLED = VAPID_KEYS is not None + +# Make keys available as module-level variables +VAPID_PUBLIC_KEY = VAPID_KEYS['public_key'] if VAPID_KEYS else None +VAPID_PRIVATE_KEY = VAPID_KEYS['private_key'] if VAPID_KEYS else None diff --git a/static/css/loading.css b/static/css/loading.css new file mode 100644 index 0000000..c7ff82b --- /dev/null +++ b/static/css/loading.css @@ -0,0 +1,83 @@ +/* Critical loading styles - inline these in the HTML head for instant loading */ +.app-loading-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: var(--bg-primary, #1a1b26); + z-index: 9999; + display: flex; + align-items: center; + justify-content: center; + transition: opacity 0.3s ease-out; +} + +.app-loading-overlay.fade-out { + opacity: 0; + pointer-events: none; +} + +.app-loading-content { + text-align: center; +} + +.app-loading-spinner { + width: 50px; + height: 50px; + margin: 0 auto 20px; + border: 3px solid rgba(255, 255, 255, 0.1); + border-top-color: var(--text-accent, #7aa2f7); + border-radius: 50%; + animation: spin 1s linear infinite; +} + +.app-loading-text { + color: var(--text-muted, #a0a0b0); + font-size: 14px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + letter-spacing: 0.5px; +} + +.app-loading-logo { + width: 60px; + height: 60px; + margin: 0 auto 20px; + opacity: 0.8; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +/* Hide body content until ready */ +body.app-loading { + overflow: hidden; +} + +body.app-loading > *:not(.app-loading-overlay) { + opacity: 0; +} + +/* Dark mode default colors */ +@media (prefers-color-scheme: dark) { + .app-loading-overlay { + background: #1a1b26; + } +} + +/* Light mode if explicitly set */ +body.light .app-loading-overlay { + background: #ffffff; +} + +body.light .app-loading-spinner { + border-color: rgba(0, 0, 0, 0.1); + border-top-color: #3b82f6; +} + +body.light .app-loading-text { + color: #6b7280; +} \ No newline at end of file diff --git a/static/css/styles.css b/static/css/styles.css new file mode 100644 index 0000000..50d1951 --- /dev/null +++ b/static/css/styles.css @@ -0,0 +1,4266 @@ +body.unloaded { + opacity: 0; + transition: opacity 0.5s ease-in-out; +} + +[v-cloak] { + display: none; +} + +/* Color Scheme CSS Variables */ +:root { + /* Default Light Theme (Blue) - More muted with better contrast */ + --bg-primary: #e8eaed; /* muted gray */ + --bg-secondary: #f8f9fa; /* off-white */ + --bg-tertiary: #f0f2f4; /* light gray */ + --bg-accent: #c3d9f7; /* muted blue */ + --bg-accent-hover: #aec9f2; /* deeper muted blue */ + --bg-button: #2563eb; /* blue-600 */ + --bg-button-hover: #1d4ed8; /* blue-700 */ + --bg-danger: #dc2626; /* red-600 */ + --bg-danger-hover: #b91c1c; /* red-700 */ + --bg-danger-light: #fce4e4; /* muted red */ + --bg-info-light: #c3d9f7; /* muted blue */ + --bg-warn-light: #d4e8f5; /* soft blue */ + --bg-success-light: #c6f0dc; /* muted green */ + --bg-pending-light: #eeeeec; /* stone */ + --bg-input: #fafbfc; /* slightly gray white */ + --bg-audio-player: var(--bg-tertiary); + + --text-primary: #1f2937; /* gray-800 */ + --text-secondary: #374151; /* gray-700 */ + --text-muted: #6b7280; /* gray-500 */ + --text-light: #9ca3af; /* gray-400 */ + --text-accent: #1d4ed8; /* blue-700 */ + --text-button: #ffffff; /* white */ + --text-danger: #b91c1c; /* red-700 */ + --text-danger-strong: #991b1b; /* red-800 */ + --text-info-strong: #1e40af; /* blue-800 */ + --text-warn-strong: #0369a1; /* sky-700 - friendly blue tone */ + --text-success-strong: #065f46; /* green-800 */ + --text-pending-strong: #44403c; /* stone-700 */ + + --border-primary: #e5e7eb; /* gray-200 */ + --border-secondary: #d1d5db; /* gray-300 */ + --border-accent: #93c5fd; /* blue-300 */ + --border-danger: #f87171; /* red-400 */ + --border-focus: #3b82f6; /* blue-500 */ + --ring-focus: #bfdbfe; /* blue-200 */ + + --scrollbar-track: #f1f1f1; + --scrollbar-thumb: #c5c5c5; + --scrollbar-thumb-hover: #a8a8a8; + + /* Toast notification colors */ + --bg-success: #10b981; + --border-success: #059669; +} + +/* Light Theme Variants */ +.theme-light-emerald { + --bg-primary: #e6f0e9; /* muted green-gray */ + --bg-secondary: #f4f9f5; /* soft off-white green */ + --bg-tertiary: #ebf4ed; /* light muted green */ + --bg-accent: #d0e8d7; /* muted pastel green */ + --bg-accent-hover: #c1e0ca; /* deeper muted green */ + --bg-button: #059669; /* keep button visible */ + --bg-button-hover: #047857; /* keep button visible */ + --bg-input: #f9fcfa; /* slightly green white */ + --text-accent: #047857; /* keep accent text visible */ + --border-primary: #d4e5d8; /* muted green border */ + --border-secondary: #c2dcc9; /* soft green border */ + --border-accent: #a8d0b3; /* medium green border */ + --border-focus: #10b981; /* keep focus visible */ + --ring-focus: #d0e8d7; /* muted green ring */ + --bg-audio-player: var(--bg-tertiary); +} + +.theme-light-purple { + --bg-primary: #ebe9f0; /* muted purple-gray */ + --bg-secondary: #f7f6f9; /* soft off-white purple */ + --bg-tertiary: #f0eef4; /* light muted purple */ + --bg-accent: #dcd7e8; /* muted pastel purple */ + --bg-accent-hover: #d0c9df; /* deeper muted purple */ + --bg-button: #7c3aed; /* keep button visible */ + --bg-button-hover: #6d28d9; /* keep button visible */ + --bg-input: #faf9fc; /* slightly purple white */ + --text-accent: #6d28d9; /* keep accent text visible */ + --border-primary: #dbd6e6; /* muted purple border */ + --border-secondary: #cfc8dd; /* soft purple border */ + --border-accent: #bab0d2; /* medium purple border */ + --border-focus: #8b5cf6; /* keep focus visible */ + --ring-focus: #dcd7e8; /* muted purple ring */ + --bg-audio-player: var(--bg-tertiary); +} + +.theme-light-rose { + --bg-primary: #f0e9ed; /* muted rose-gray */ + --bg-secondary: #f9f6f7; /* soft off-white rose */ + --bg-tertiary: #f4eef1; /* light muted rose */ + --bg-accent: #e6d7df; /* muted pastel rose */ + --bg-accent-hover: #dfc9d4; /* deeper muted rose */ + --bg-button: #e11d48; /* keep button visible */ + --bg-button-hover: #be185d; /* keep button visible */ + --bg-input: #fcf9fa; /* slightly rose white */ + --text-accent: #be185d; /* keep accent text visible */ + --border-primary: #e5d6de; /* muted rose border */ + --border-secondary: #dbc8d2; /* soft rose border */ + --border-accent: #d0b0bf; /* medium rose border */ + --border-focus: #ec4899; /* keep focus visible */ + --ring-focus: #e6d7df; /* muted rose ring */ + --bg-audio-player: var(--bg-tertiary); +} + +.theme-light-amber { + --bg-primary: #efebe6; /* muted amber-gray */ + --bg-secondary: #f9f7f4; /* soft off-white amber */ + --bg-tertiary: #f3efe9; /* light muted amber */ + --bg-accent: #e5ddd1; /* muted pastel amber */ + --bg-accent-hover: #ddd2c2; /* deeper muted amber */ + --bg-button: #d97706; /* keep button visible */ + --bg-button-hover: #b45309; /* keep button visible */ + --bg-input: #fbfaf8; /* slightly amber white */ + --text-accent: #b45309; /* keep accent text visible */ + --border-primary: #e2dace; /* muted amber border */ + --border-secondary: #d9cdb9; /* soft amber border */ + --border-accent: #cdbca1; /* medium amber border */ + --border-focus: #f59e0b; /* keep focus visible */ + --ring-focus: #e5ddd1; /* muted amber ring */ + --bg-audio-player: var(--bg-tertiary); +} + +.theme-light-teal { + --bg-primary: #e7f0ef; /* muted teal-gray */ + --bg-secondary: #f5f9f8; /* soft off-white teal */ + --bg-tertiary: #ecf4f3; /* light muted teal */ + --bg-accent: #d2e5e2; /* muted pastel teal */ + --bg-accent-hover: #c3ddd9; /* deeper muted teal */ + --bg-button: #0d9488; /* keep button visible */ + --bg-button-hover: #0f766e; /* keep button visible */ + --bg-input: #f9fcfb; /* slightly teal white */ + --text-accent: #0f766e; /* keep accent text visible */ + --border-primary: #c8dfdc; /* muted teal border */ + --border-secondary: #b5d3ce; /* soft teal border */ + --border-accent: #9cc5be; /* medium teal border */ + --border-focus: #14b8a6; /* keep focus visible */ + --ring-focus: #d2e5e2; /* muted teal ring */ + --bg-audio-player: var(--bg-tertiary); +} + +/* Dark Theme Base */ +.dark { + --bg-primary: #111827; /* gray-900 */ + --bg-secondary: #1f2937; /* gray-800 */ + --bg-tertiary: #374151; /* gray-700 */ + --bg-accent: #1e3a8a; /* blue-900 */ + --bg-accent-hover: #1e40af; /* blue-800 */ + --bg-button: #2563eb; /* blue-600 */ + --bg-button-hover: #3b82f6; /* blue-500 */ + --bg-danger: #dc2626; /* red-600 */ + --bg-danger-hover: #ef4444; /* red-500 */ + --bg-danger-light: #7f1d1d; /* red-900 */ + --bg-info-light: #1e3a8a; /* blue-900 */ + --bg-warn-light: #164e63; /* cyan-800 - soft, friendly dark blue */ + --bg-success-light: #064e3b; /* green-900 */ + --bg-pending-light: #292524; /* stone-800 */ + --bg-input: #374151; /* gray-700 */ + --bg-audio-player: var(--bg-secondary); + + --text-primary: #f3f4f6; /* gray-100 */ + --text-secondary: #d1d5db; /* gray-300 */ + --text-muted: #cbd5e1; /* slate-300 - improved contrast */ + --text-light: #94a3b8; /* slate-400 - better visibility */ + --text-accent: #60a5fa; /* blue-400 */ + --text-button: #ffffff; /* white */ + --text-danger: #f87171; /* red-400 */ + --text-danger-strong: #fca5a5; /* red-300 */ + --text-info-strong: #93c5fd; /* blue-300 */ + --text-warn-strong: #67e8f9; /* cyan-300 - soft, friendly cyan text */ + --text-success-strong: #6ee7b7; /* green-300 */ + --text-pending-strong: #d6d3d1; /* stone-300 */ + + --border-primary: #475569; /* slate-600 - more visible */ + --border-secondary: #64748b; /* slate-500 - better contrast */ + --border-accent: #1d4ed8; /* blue-700 */ + --border-danger: #ef4444; /* red-500 */ + --border-focus: #3b82f6; /* blue-500 */ + --ring-focus: #1e40af; /* blue-800 */ + + --scrollbar-track: #2d3748; /* gray-800 */ + --scrollbar-thumb: #4a5568; /* gray-600 */ + --scrollbar-thumb-hover: #718096; /* gray-500 */ +} + +/* Dark Theme Variants */ +.dark.theme-dark-emerald { + --bg-primary: #1a2420; /* lighter dark with emerald tint */ + --bg-secondary: #243028; /* medium dark with emerald hint */ + --bg-tertiary: #2e3c30; /* lighter dark with emerald hint */ + --bg-accent: #384838; /* visible emerald accent */ + --bg-accent-hover: #425440; /* lighter emerald accent */ + --bg-button: #059669; /* keep button visible */ + --bg-button-hover: #10b981; /* keep button visible */ + --bg-input: #2e3c30; /* darker emerald input background */ + --text-accent: #7dd3ae; /* muted pastel emerald text */ + --border-primary: #3a4540; /* visible emerald border */ + --border-secondary: #485548; /* lighter emerald border */ + --border-accent: #556550; /* medium emerald border */ + --border-focus: #10b981; /* keep focus visible */ + --ring-focus: #384838; /* visible ring */ + --bg-audio-player: var(--bg-tertiary); + --scrollbar-thumb: #485548; /* emerald tinted scrollbar */ + --scrollbar-thumb-hover: #556655; /* brighter emerald on hover */ +} + +.dark.theme-dark-purple { + --bg-primary: #1e1a24; /* lighter dark with purple tint */ + --bg-secondary: #2a2430; /* medium dark with purple hint */ + --bg-tertiary: #36303c; /* lighter dark with purple hint */ + --bg-accent: #423c48; /* visible purple accent */ + --bg-accent-hover: #4e4854; /* lighter purple accent */ + --bg-button: #7c3aed; /* keep button visible */ + --bg-button-hover: #8b5cf6; /* keep button visible */ + --bg-input: #36303c; /* darker purple input background */ + --text-accent: #b8a5d4; /* muted pastel purple text */ + --border-primary: #484050; /* visible purple border */ + --border-secondary: #555058; /* lighter purple border */ + --border-accent: #626060; /* medium purple border */ + --border-focus: #8b5cf6; /* keep focus visible */ + --ring-focus: #423c48; /* visible ring */ + --bg-audio-player: var(--bg-tertiary); + --scrollbar-thumb: #555058; /* purple tinted scrollbar */ + --scrollbar-thumb-hover: #666068; /* brighter purple on hover */ +} + +.dark.theme-dark-rose { + --bg-primary: #241a20; /* lighter dark with rose tint */ + --bg-secondary: #302428; /* medium dark with rose hint */ + --bg-tertiary: #3c3030; /* lighter dark with rose hint */ + --bg-accent: #483c40; /* visible rose accent */ + --bg-accent-hover: #54484c; /* lighter rose accent */ + --bg-button: #e11d48; /* keep button visible */ + --bg-button-hover: #f43f5e; /* keep button visible */ + --bg-input: #3c3030; /* darker rose input background */ + --text-accent: #d4a5b4; /* muted pastel rose text */ + --border-primary: #504048; /* visible rose border */ + --border-secondary: #585050; /* lighter rose border */ + --border-accent: #606058; /* medium rose border */ + --border-focus: #f43f5e; /* keep focus visible */ + --ring-focus: #483c40; /* visible ring */ + --bg-audio-player: var(--bg-tertiary); + --scrollbar-thumb: #554850; /* rose tinted scrollbar */ + --scrollbar-thumb-hover: #665860; /* brighter rose on hover */ +} + +.dark.theme-dark-amber { + --bg-primary: #24201a; /* lighter dark with amber tint */ + --bg-secondary: #302824; /* medium dark with amber hint */ + --bg-tertiary: #3c342e; /* lighter dark with amber hint */ + --bg-accent: #484038; /* visible amber accent */ + --bg-accent-hover: #544c42; /* lighter amber accent */ + --bg-button: #d97706; /* keep button visible */ + --bg-button-hover: #f59e0b; /* keep button visible */ + --bg-input: #3c342e; /* darker amber input background */ + --text-accent: #d4c5a5; /* muted pastel amber text */ + --border-primary: #504840; /* visible amber border */ + --border-secondary: #585548; /* lighter amber border */ + --border-accent: #606250; /* medium amber border */ + --border-focus: #f59e0b; /* keep focus visible */ + --ring-focus: #484038; /* visible ring */ + --bg-audio-player: var(--bg-tertiary); + --scrollbar-thumb: #585548; /* amber tinted scrollbar */ + --scrollbar-thumb-hover: #686658; /* brighter amber on hover */ +} + +.dark.theme-dark-teal { + --bg-primary: #1a2424; /* lighter dark with teal tint */ + --bg-secondary: #243030; /* medium dark with teal hint */ + --bg-tertiary: #2e3c3c; /* lighter dark with teal hint */ + --bg-accent: #384848; /* visible teal accent */ + --bg-accent-hover: #425454; /* lighter teal accent */ + --bg-button: #0d9488; /* keep button visible */ + --bg-button-hover: #14b8a6; /* keep button visible */ + --bg-input: #2e3c3c; /* darker teal input background */ + --text-accent: #a5d4d0; /* muted pastel teal text */ + --border-primary: #404848; /* visible teal border */ + --border-secondary: #485555; /* lighter teal border */ + --border-accent: #506262; /* medium teal border */ + --border-focus: #14b8a6; /* keep focus visible */ + --ring-focus: #384848; /* visible ring */ + --bg-audio-player: var(--bg-tertiary); + --scrollbar-thumb: #485555; /* teal tinted scrollbar */ + --scrollbar-thumb-hover: #586666; /* brighter teal on hover */ +} + +/* Modern UI styles */ +.height-100 { height: 100%; } +.drag-area { transition: background-color 0.3s ease, border-color 0.3s ease; } +/* Global Scrollbar Styles */ +::-webkit-scrollbar { + width: 10px; + height: 10px; +} +::-webkit-scrollbar-track { + background: transparent; + border-radius: 10px; +} +::-webkit-scrollbar-thumb { + background: var(--scrollbar-thumb); + border-radius: 10px; + border: 2px solid transparent; + background-clip: padding-box; +} +::-webkit-scrollbar-thumb:hover { + background: var(--scrollbar-thumb-hover); + border: 2px solid transparent; + background-clip: padding-box; +} +/* Fix scrollbar corner for rounded containers */ +::-webkit-scrollbar-corner { + background: transparent; +} +html { /* Apply base colors to html for smoother transitions */ + background-color: var(--bg-primary); + color: var(--text-primary); + transition: background-color 0.3s, color 0.3s; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; +} +html { + height: 100%; + margin: 0; +} +body { + height: 100%; + margin: 0; + overflow-y: auto; /* Allow scrolling on the body */ +} + +/* Mobile fly-in menu specific styles */ +@media (max-width: 1023px) { /* Corresponds to Tailwind's lg breakpoint */ + .sidebar-container.fixed { + height: 100vh; /* Full viewport height */ + overflow-y: auto; /* Allow scrolling within the fly-in menu */ + z-index: 9999 !important; /* Ensure it's above everything else */ + } + /* .main-content-area styling for mobile is handled by v-if in html now */ + /* + .main-content-area { + transition: filter 0.3s ease-in-out; + } + body.mobile-menu-open .main-content-area { + filter: blur(4px); + } + */ + body.mobile-menu-open { + overflow: hidden; /* Prevent body scroll when mobile menu is open */ + } + + /* Fix for mobile sidebar visibility */ + .sidebar-container { + z-index: 50 !important; /* Ensure proper z-index */ + } + + /* Ensure the mobile sidebar shows above the overlay */ + .fixed.inset-y-0.left-0.z-40 { /* This targets the overlay, not the sidebar */ + z-index: 50 !important; + } + + /* Custom easing for mobile sidebar slide animation */ + /* This targets the main sidebar div when it's in mobile fly-in mode */ + /* and has the transition-transform class applied by Vue/Tailwind. */ + div.fixed.z-50.transition-transform { + transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55); + } +} + +/* Mobile viewport height fix */ +@media (max-width: 767px) { /* Target mobile devices specifically */ + .main { + min-height: 4000px !important; /* Fixed viewport height for mobile */ + } +} +#app { + min-height: 100%; /* Full viewport height */ + display: flex; + flex-direction: column; +} +main { + flex: 1; + position: relative; + display: flex; + flex-direction: column; + overflow-y: auto; /* Allow scrolling on main */ +} + +/* Sidebar styles with flexible height */ +.sidebar-container { + height: 100%; /* Use relative height */ + display: flex; + flex-direction: column; + overflow-y: auto; /* Allow sidebar to scroll */ +} + +/* Grid container with flex layout and flexible height */ +.grid-container { + height: 100%; /* Use relative height */ + display: flex; + flex-direction: column; + overflow-y: auto; /* Allow scrolling */ +} + +.sidebar-header { + flex-shrink: 0; /* Prevent header from shrinking */ +} + +.sidebar-content { + flex-grow: 1; + overflow-y: auto; /* Enable scrolling for content */ + padding-right: 6px; /* Space for scrollbar */ + min-height: 0; /* Added for robust flex scrolling */ +} +.progress-popup { position: fixed; bottom: 1rem; left: 1rem; z-index: 100; transition: all 0.3s ease-in-out; min-width: 300px; max-width: 400px; border-radius: 12px; overflow: hidden; } +.progress-popup.minimized { transform: translateY(calc(100% - 45px)); } +.progress-list-item { display: grid; grid-template-columns: auto 1fr auto; gap: 0.5rem; align-items: center; } +.progress-list-item .truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + min-width: 0; +} +.summary-box, +.notes-box { + flex: 1; + width: 100%; + min-height: 0; + min-width: 0; + max-height: 100%; + overflow-y: auto; + overflow-x: hidden; + background-color: var(--bg-tertiary); + padding: 1rem; + border-radius: 0.75rem; + border: 1px solid var(--border-primary); + scrollbar-gutter: stable; + color: var(--text-secondary); + box-shadow: 0 1px 2px rgba(0,0,0,0.03); + word-wrap: break-word; + overflow-wrap: break-word; +} + +.transcription-box { + background-color: var(--bg-tertiary); + padding: 1rem; /* p-4 */ + border-radius: 0.75rem; /* rounded-xl */ + border: 1px solid var(--border-primary); + min-height: 0; /* Allow proper flex shrinking for scrolling */ + overflow-y: auto; /* Enable vertical scrolling */ + white-space: normal; /* Allow markdown HTML to control spacing */ + font-family: inherit; /* Use body font */ + font-size: 0.875rem; /* text-sm */ + line-height: 1.5; /* Consistent line height */ + box-shadow: 0 1px 2px rgba(0,0,0,0.03); /* Subtle shadow */ + flex: 1; /* Take up available space */ + color: var(--text-secondary); +} + +/* Standardize border radius for all content boxes */ +.transcription-box, +.summary-box, +.chat-container, +textarea, +div[v-if="!editingParticipants"], +div[v-if="!editingNotes"] { + border-radius: 0.75rem !important; /* rounded-xl */ +} + +/* Content boxes with flex layout */ +.content-column { + display: flex; + flex-direction: column; + height: 100%; + min-height: 0; /* Allow content to size based on parent container */ + flex: 1 1 auto; /* Grow and shrink as needed */ + overflow: hidden; +} + +/* Left column content (participants, transcription, tabs) */ +.left-content { + display: flex; + flex-direction: column; + height: 100%; + min-height: 0; /* Allow flex to work properly */ + overflow: hidden; /* Prevent this container from scrolling */ +} + +/* Right column content (audio player, chat) */ +.right-content { + display: flex; + flex-direction: column; + height: 100%; + gap: 1rem; + overflow-y: auto; /* Enable scrolling for content that exceeds container */ + min-height: 0; /* Allows flex to work properly */ +} + +/* Participants section - small fixed height */ +.participants-section { + flex-shrink: 0; + margin-bottom: 1rem; /* Add space below participants box */ +} + +/* Transcription section - takes up significant space */ +.transcription-section { + /* flex: 2; */ /* Removed: Let JavaScript control flex values */ + min-height: 0; /* Critical for flex shrinking */ + overflow: hidden; /* Contain overflow to enable proper flex behavior */ + display: flex; + flex-direction: column; +} + +/* Tab content section - takes up remaining space and aligns with chat box */ +.tab-section { + min-height: 0; /* Critical for flex items */ + overflow: hidden; /* Prevent internal overflow from affecting layout */ + display: flex; + flex-direction: column; +} + +/* Audio player section - small fixed height */ +.audio-section { + flex-shrink: 0; +} + +/* Chat section - takes up remaining space */ +.chat-section { + flex: 1; + min-height: 0; /* Allows flex to work properly */ + overflow-y: auto; /* Changed from hidden to auto to enable scrolling */ + display: flex; + flex-direction: column; +} + +.tab-content-box { + flex: 1; + overflow-y: auto; + min-height: 0; /* Allows flex to work properly */ + height: 100%; /* Fill available height */ + display: flex; + flex-direction: column; +} + +.chat-content-box { + flex: 1; + overflow-y: auto; + min-height: 0; /* Allows flex to work properly */ +} +.metadata-panel { + background-color: var(--bg-tertiary); + border: 1px solid var(--border-primary); + border-radius: 0.75rem; /* rounded-xl to match others */ + padding: 1rem; /* p-4 to be consistent */ + /* margin-top removed to align with other boxes */ + font-size: 0.875rem; /* text-sm */ + color: var(--text-secondary); + flex: 1; /* Take up available space */ + height: 100%; /* Fill the container height */ + overflow-y: auto; /* Enable scrolling when content overflows */ +} +.metadata-panel dt { + font-weight: 500; + color: var(--text-primary); + margin-bottom: 0.1rem; +} +.metadata-panel dd { + margin-left: 0; + margin-bottom: 0.5rem; + word-break: break-all; /* Wrap long filenames */ +} + .status-badge { + display: inline-block; + padding: 0.12rem 0.5rem; /* Even smaller padding */ + font-size: 0.6rem; /* Smaller text */ + font-weight: 500; /* font-medium */ + border-radius: 9999px; /* rounded-full */ + box-shadow: 0 1px 2px rgba(0,0,0,0.05); + letter-spacing: 0.025em; + vertical-align: middle; /* Align with text */ + margin-left: 0.5rem; /* Less space */ + opacity: 0.85; /* Slightly more subtle */ + transition: opacity 0.2s ease; + } + .status-badge:hover { + opacity: 1; + } + .status-processing { color: #1d4ed8; background-color: #dbeafe; } /* text-blue-800 bg-blue-100 */ + .status-summarizing { color: #92400e; background-color: #fef3c7; } /* text-amber-800 bg-amber-100 */ + .status-completed { color: #065f46; background-color: #d1fae5; } /* text-green-800 bg-green-100 */ + .status-failed { color: #991b1b; background-color: #fee2e2; } /* text-red-800 bg-red-100 */ + .status-pending { color: #57534e; background-color: #f5f5f4; } /* text-stone-700 bg-stone-100 */ + .status-highlighted { color: #d97706; background-color: #fef3c7; border: 1px solid #f59e0b; } /* text-amber-700 bg-amber-100 border-amber-500 */ + .status-inbox { color: #1d4ed8; background-color: #dbeafe; border: 1px solid #3b82f6; } /* text-blue-700 bg-blue-100 border-blue-500 */ + + /* Clickable badge styles */ + .clickable-badge { + cursor: pointer; + transition: all 0.2s ease; + } + + .clickable-badge:hover { + transform: translateY(-1px); + box-shadow: 0 2px 4px rgba(0,0,0,0.15); + opacity: 0.8; + } + + /* Transcription box with flex layout */ + .transcription-box { + flex: 1; + overflow-y: auto; + position: relative; + min-height: 0; /* Allows flex to work properly */ + } + + /* Modern copy button styles */ + .copy-btn { + background-color: var(--bg-tertiary); + border: 1px solid var(--border-primary); + color: var(--text-secondary); + border-radius: 0.5rem; + padding: 0.35rem 0.75rem; + font-size: 0.75rem; + cursor: pointer; + transition: all 0.2s cubic-bezier(0.25, 0.1, 0.25, 1); + box-shadow: 0 1px 2px rgba(0,0,0,0.05); + display: inline-flex; + align-items: center; + justify-content: center; + } + + /* Desktop only: match height of toggle buttons when icon-only */ + @media (min-width: 1024px) { + #leftMainColumn .view-mode-toggle { + height: 1.75rem; + } + #leftMainColumn .toggle-button { + height: 1.75rem; + padding-top: 0; + padding-bottom: 0; + line-height: 1; + } + #leftMainColumn .copy-btn { + height: 1.75rem; + padding-top: 0; + padding-bottom: 0; + line-height: 1; + } + } + + .copy-btn:hover { + background-color: var(--bg-accent-hover); + transform: translateY(-1px); + box-shadow: 0 2px 4px rgba(0,0,0,0.1); + } + + .dark .copy-btn { + background-color: var(--bg-secondary); + border-color: var(--border-secondary); + color: var(--text-primary); +} + +.dark .copy-btn:hover { + background-color: var(--bg-tertiary); +} + + /* Hover edit button styles */ +.content-box { + position: relative; + width: 100%; + height: 100%; + min-height: 0; + min-width: 0; + display: flex; + flex-direction: column; + overflow: hidden; +} + + .hover-edit-btn { + position: absolute; + top: 10px; + right: 10px; + background-color: rgba(255, 255, 255, 0.9); + border: 1px solid #e5e7eb; + border-radius: 0.5rem; + padding: 0.35rem 0.75rem; + font-size: 0.75rem; + cursor: pointer; + z-index: 10; + transition: all 0.2s ease; + box-shadow: 0 1px 2px rgba(0,0,0,0.05); + opacity: 0; + } + + .content-box:hover .hover-edit-btn { + opacity: 1; + } + + .hover-edit-btn:hover { + background-color: #f3f4f6; + transform: translateY(-1px); + box-shadow: 0 2px 4px rgba(0,0,0,0.1); + } + + .dark .hover-edit-btn { + background-color: rgba(55, 65, 81, 0.9); + border-color: #4b5563; + } + + .dark .hover-edit-btn:hover { + background-color: #4b5563; + } + + /* Modern chat section styles */ + .chat-container { + border: 1px solid #e5e7eb; + border-radius: 0.75rem; + display: flex; + flex-direction: column; + height: 100%; + min-height: 300px; /* Minimum height for chat container */ + box-shadow: 0 1px 3px rgba(0,0,0,0.05); + overflow: hidden; + } + + .chat-messages { + flex-grow: 1; + overflow-y: auto; + padding: 1.25rem; + } + + .chat-input-container { + border-top: 1px solid #e5e7eb; + padding: 0.75rem; + display: flex; + background-color: var(--bg-tertiary); + } + + .message { + margin-bottom: 1.25rem; + max-width: 80%; + box-shadow: 0 1px 2px rgba(0,0,0,0.05); + line-height: 1.5; + } + + .user-message { + background-color: var(--accent-primary); + color: var(--text-accent-contrast); + border-radius: 1.25rem 1.25rem 0.25rem 1.25rem; + padding: 0.875rem 1rem; + margin-left: auto; + border: 1px solid var(--border-accent); + } + + .ai-message { + background-color: var(--bg-tertiary); + color: var(--text-primary); + border-radius: 1.25rem 1.25rem 1.25rem 0.25rem; + padding: 0.875rem 1rem; + border: 1px solid var(--border-secondary); + overflow-x: auto; /* Enable horizontal scrolling for wide content like tables */ + } + + + .copyable { + position: relative; + } + + /* Markdown styling */ + .ai-message h1, .ai-message h2, .ai-message h3, + .summary-box h1, .summary-box h2, .summary-box h3, + .notes-box h1, .notes-box h2, .notes-box h3 { + font-weight: 600; + margin-top: 1rem; + margin-bottom: 0.5rem; + } + + .ai-message h1, .summary-box h1, .notes-box h1 { font-size: 1.25rem; } + .ai-message h2, .summary-box h2, .notes-box h2 { font-size: 1.15rem; } + .ai-message h3, .summary-box h3, .notes-box h3 { font-size: 1.05rem; } + + .ai-message p, .summary-box p, .notes-box p { + margin-bottom: 0.75rem; + } + + .ai-message ul, .ai-message ol, + .summary-box ul, .summary-box ol, + .notes-box ul, .notes-box ol { + margin-left: 1.5rem; + margin-right: 0.5rem; + margin-bottom: 0.75rem; + padding-right: 0.5rem; + list-style-position: outside; + display: block; + width: auto; + max-width: calc(100% - 2rem); + box-sizing: border-box; + overflow-wrap: break-word; + word-break: break-word; + } + + .ai-message ul, .summary-box ul, .notes-box ul { list-style-type: disc; } + .ai-message ol, .summary-box ol, .notes-box ol { list-style-type: decimal; } + + .ai-message li, .summary-box li, .notes-box li { + display: list-item; + margin-bottom: 0.25rem; + width: auto; + max-width: 100%; + box-sizing: border-box; + overflow-wrap: anywhere; + word-wrap: break-word; + hyphens: auto; + } + + .ai-message code, .summary-box code, .notes-box code { + background-color: var(--bg-tertiary); + color: var(--text-primary); + padding: 0.125rem 0.25rem; + border-radius: 0.25rem; + font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace; + font-size: 0.875rem; + word-wrap: break-word; + overflow-wrap: break-word; + } + + .ai-message pre, .summary-box pre, .notes-box pre { + background-color: var(--bg-tertiary); + color: var(--text-primary); + padding: 0.75rem; + border-radius: 0.5rem; + overflow-x: auto; + white-space: pre-wrap; + word-wrap: break-word; + overflow-wrap: break-word; + margin-bottom: 0.75rem; + } + + .ai-message pre code, .summary-box pre code, .notes-box pre code { + background-color: transparent; + padding: 0; + border-radius: 0; + color: inherit; + white-space: pre-wrap; + word-wrap: break-word; + overflow-wrap: break-word; + } + + /* Wrap tables in scrollable container */ + .summary-box > table, .notes-box > table { + display: block; + width: 100%; + overflow-x: auto; + } + + .ai-message table, .summary-box table, .notes-box table { + border-collapse: collapse; + width: 100%; + margin-bottom: 0.75rem; + } + + .ai-message th, .ai-message td, + .summary-box th, .summary-box td, + .notes-box th, .notes-box td { + border: 1px solid var(--border-secondary); /* Use theme variable */ + padding: 0.5rem; + text-align: left; + } + + .ai-message th, .summary-box th, .notes-box th { + background-color: var(--bg-tertiary); /* Use theme variable */ + font-weight: 600; + } + + .ai-message blockquote, .summary-box blockquote, .notes-box blockquote { + border-left: 4px solid var(--border-secondary); /* Use theme variable */ + padding-left: 1rem; + margin-left: 0; + margin-bottom: 0.75rem; + color: var(--text-muted); /* Use theme variable */ + } + + /* Main content container - ensure it fills available space and allows scrolling */ +.flex-grow.flex.flex-col.md\:flex-row.gap-6.overflow-hidden { + max-height: none !important; /* Override the inline style */ + height: 100%; + flex: 1; + overflow-y: auto; /* Allow scrolling */ +} + +/* Ensure the main content container can grow properly and scroll - works for both col-span-3 and col-span-4 */ +.lg\:col-span-3.bg-\[var\(--bg-secondary\)\].p-6.rounded-lg.shadow-md.flex.flex-col.max-h-85vh, +.lg\:col-span-4.bg-\[var\(--bg-secondary\)\].p-6.rounded-lg.shadow-md.flex.flex-col.max-h-85vh { + /* max-height: none !important; /* Let Tailwind class 'max-h-85vh' apply */ + height: 100%; /* Occupy the height of its grid cell */ + flex: 1; /* For its own children, as it's a flex container */ + overflow-y: auto; /* Allow its own content to scroll if it exceeds its height (max 85vh) */ +} + +/* Ensure the main content area maintains its internal layout regardless of sidebar state */ +.main-content-area { + display: flex; + flex-direction: column; + height: 100%; + min-height: 0; +} + +/* Ensure the main content columns container maintains consistent behavior */ +#mainContentColumns { + display: flex; + flex-direction: row; + flex: 1; + min-height: 0; + overflow: hidden; + width: 100%; /* Ensure full width usage */ +} + +/* Ensure left and right columns maintain their proportional widths */ +#leftMainColumn { + display: flex; + flex-direction: column; + min-height: 0; + overflow: hidden; + flex-shrink: 0; /* Prevent shrinking */ + border-right: 1px solid var(--border-primary); + /* Width is controlled by inline style */ +} + +#rightMainColumn { + display: flex; + flex-direction: column; + flex: 1; + min-width: 0; + overflow: hidden; + /* Width will be calculated as remaining space */ +} + +/* Ensure the main column resizer remains functional */ +#mainColumnResizer { + flex-shrink: 0; +} + +/* Form styling for edit modal */ +.form-group { + position: relative; + transition: all 0.3s ease; +} + +.form-group:hover { + transform: translateY(-1px); +} + +.form-group input:focus, +.form-group textarea:focus { + box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2); +} + +/* Dark mode adjustments for form elements */ +.dark .form-group input:focus, +.dark .form-group textarea:focus { + box-shadow: 0 0 0 3px rgba(30, 64, 175, 0.3); +} + +/* Elegant divider styling */ +.relative.py-3 { + margin: 0.5rem 0; +} + +/* Toast notification styles */ +.toast { + padding: 12px 18px; + border-radius: 8px; + background-color: #4CAF50; + color: white; + font-size: 14px; + box-shadow: 0 4px 12px rgba(0,0,0,0.1); + opacity: 0; + transform: translateY(20px); + transition: all 0.3s cubic-bezier(0.25, 0.1, 0.25, 1); + display: flex; + align-items: center; + min-width: 200px; +} + + .toast.show { + opacity: 1; + transform: translateY(0); + } + + .toast i { + margin-right: 8px; + } + + /* Copy button animation */ + @keyframes copy-success { + 0% { transform: scale(1); } + 50% { transform: scale(1.2); } + 100% { transform: scale(1); } + } + + .copy-success { + animation: copy-success 0.3s ease; + color: #4CAF50 !important; + } + +/* Fix for sidebar height and scrolling */ +/* Remove fixed height constraint from the grid container to allow natural height */ +.grid.grid-cols-1.lg\:grid-cols-4.gap-6.flex-grow { + display: grid; + min-height: 0; /* Allow the grid to shrink if needed */ + overflow: visible; /* Allow overflow to be visible and scroll with the main window */ + align-items: start; /* Align grid items to start to prevent stretching */ +} + +/* Set a fixed height for the sidebar only */ +.lg\:col-span-1.bg-\[var\(--bg-secondary\)\].p-4.rounded-lg.shadow-md.sidebar-container.max-h-85vh { + display: flex; + flex-direction: column; + overflow: hidden; /* Hide overflow at container level */ + height: calc(100vh - 10rem); + position: sticky; + top: 1rem; /* Stick to the top with some padding */ +} + +/* Make sure the sidebar content scrolls internally */ +.sidebar-content { + flex: 1; + overflow-y: auto; /* Enable scrolling for content */ + min-height: 0; /* Allow content to shrink */ +} + +/* Ensure the main content area uses the window scroll and has consistent height */ +.lg\:col-span-3.bg-\[var\(--bg-secondary\)\].p-6.rounded-lg.shadow-md.flex.flex-col.max-h-85vh { + max-height: calc(100vh - 10rem) !important; /* Match sidebar height */ + height: calc(100vh - 10rem); /* Fixed height to match sidebar */ + overflow-y: auto; /* Enable internal scrolling */ +} + +/* Allow the main container to use window scrolling */ +main { + overflow-y: visible; /* Use window scrolling instead of internal scrolling */ +} + +/* Ensure body scrolls when content exceeds viewport */ +body { + overflow-y: auto; /* Allow scrolling on the body */ +} + +/* Fix recording list item layout to prevent title wrapping */ +.sidebar-content li { + display: flex; + align-items: center; + min-height: 3rem; /* Consistent minimum height for all items */ + max-height: 3rem; /* Prevent items from growing taller */ +} + +/* Ensure recording title container doesn't grow beyond available space */ +.sidebar-content li .flex.items-center.overflow-hidden { + min-width: 0; /* Allow flex item to shrink below content size */ + flex: 1; /* Take up available space */ +} + +/* Ensure truncate works properly on recording titles */ +.sidebar-content li .truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + min-width: 0; /* Allow text to shrink */ +} + +/* Blinking animation for recording indicator */ +@keyframes blink-animation { + 0% { opacity: 1; } + 50% { opacity: 0.3; } + 100% { opacity: 1; } +} +.blink { + animation: blink-animation 1.5s infinite; +} + +/* Speaker tag styling in the modal */ +.speaker-tag { + font-weight: 600; /* Make speaker tags bold */ + color: var(--text-accent); + padding: 2px 4px; + border-radius: 4px; + transition: all 0.2s ease-in-out; +} + +.speaker-highlight { + padding: 3px 6px; + border-radius: 6px; + transition: all 0.3s ease; + position: relative; +} + +/* Speaker-specific highlight styles that match speaker colors - reduced glow */ +.speaker-highlight.speaker-color-1 { + background-color: #E3F2FD; + color: #0D47A1; + box-shadow: 0 0 8px rgba(227, 242, 253, 0.6), 0 0 12px rgba(13, 71, 161, 0.2); +} + +.speaker-highlight.speaker-color-2 { + background-color: #F3E5F5; + color: #6A1B9A; + box-shadow: 0 0 8px rgba(243, 229, 245, 0.6), 0 0 12px rgba(106, 27, 154, 0.2); +} + +.speaker-highlight.speaker-color-3 { + background-color: #E8F5E8; + color: #1B5E20; + box-shadow: 0 0 8px rgba(232, 245, 232, 0.6), 0 0 12px rgba(27, 94, 32, 0.2); +} + +.speaker-highlight.speaker-color-4 { + background-color: #FFF3E0; + color: #E65100; + box-shadow: 0 0 8px rgba(255, 243, 224, 0.6), 0 0 12px rgba(230, 81, 0, 0.2); +} + +.speaker-highlight.speaker-color-5 { + background-color: #FCE4EC; + color: #AD1457; + box-shadow: 0 0 8px rgba(252, 228, 236, 0.6), 0 0 12px rgba(173, 20, 87, 0.2); +} + +.speaker-highlight.speaker-color-6 { + background-color: #E0F7FA; + color: #006064; + box-shadow: 0 0 8px rgba(224, 247, 250, 0.6), 0 0 12px rgba(0, 96, 100, 0.2); +} + +.speaker-highlight.speaker-color-7 { + background-color: #FFF9C4; + color: #F57F17; + box-shadow: 0 0 8px rgba(255, 249, 196, 0.6), 0 0 12px rgba(245, 127, 23, 0.2); +} + +.speaker-highlight.speaker-color-8 { + background-color: #EFEBE9; + color: #5D4037; + box-shadow: 0 0 8px rgba(239, 235, 233, 0.6), 0 0 12px rgba(93, 64, 55, 0.2); +} + +.speaker-highlight.speaker-color-9 { + background-color: #E8EAF6; + color: #283593; + box-shadow: 0 0 8px rgba(232, 234, 246, 0.6), 0 0 12px rgba(40, 53, 147, 0.2); +} + +.speaker-highlight.speaker-color-10 { + background-color: #F1F8E9; + color: #558B2F; + box-shadow: 0 0 8px rgba(241, 248, 233, 0.6), 0 0 12px rgba(85, 139, 47, 0.2); +} + +.speaker-highlight.speaker-color-11 { + background-color: #FFEBEE; + color: #C62828; + box-shadow: 0 0 8px rgba(255, 235, 238, 0.6), 0 0 12px rgba(198, 40, 40, 0.2); +} + +.speaker-highlight.speaker-color-12 { + background-color: #ECEFF1; + color: #37474F; + box-shadow: 0 0 8px rgba(236, 239, 241, 0.6), 0 0 12px rgba(55, 71, 79, 0.2); +} + +.speaker-highlight.speaker-color-13 { + background-color: #FFF8E1; + color: #FF8F00; + box-shadow: 0 0 8px rgba(255, 248, 225, 0.6), 0 0 12px rgba(255, 143, 0, 0.2); +} + +.speaker-highlight.speaker-color-14 { + background-color: #EDE7F6; + color: #4527A0; + box-shadow: 0 0 8px rgba(237, 231, 246, 0.6), 0 0 12px rgba(69, 39, 160, 0.2); +} + +.speaker-highlight.speaker-color-15 { + background-color: #E0F2F1; + color: #00695C; + box-shadow: 0 0 8px rgba(224, 242, 241, 0.6), 0 0 12px rgba(0, 105, 92, 0.2); +} + +.speaker-highlight.speaker-color-16 { + background-color: #FBE9E7; + color: #BF360C; + box-shadow: 0 0 8px rgba(251, 233, 231, 0.6), 0 0 12px rgba(191, 54, 12, 0.2); +} + +/* Dark mode speaker-specific highlights - reduced glow */ +.dark .speaker-highlight.speaker-color-1 { + background-color: #1E3A5F; + color: #A5C9EA; + box-shadow: 0 0 8px rgba(30, 58, 95, 0.6), 0 0 12px rgba(165, 201, 234, 0.2); +} + +.dark .speaker-highlight.speaker-color-2 { + background-color: #4A2C5A; + color: #D4A5D4; + box-shadow: 0 0 8px rgba(74, 44, 90, 0.6), 0 0 12px rgba(212, 165, 212, 0.2); +} + +.dark .speaker-highlight.speaker-color-3 { + background-color: #1F4A3C; + color: #A8D5A8; + box-shadow: 0 0 8px rgba(31, 74, 60, 0.6), 0 0 12px rgba(168, 213, 168, 0.2); +} + +.dark .speaker-highlight.speaker-color-4 { + background-color: #5A3A1F; + color: #E6B366; + box-shadow: 0 0 8px rgba(90, 58, 31, 0.6), 0 0 12px rgba(230, 179, 102, 0.2); +} + +.dark .speaker-highlight.speaker-color-5 { + background-color: #5A2C3E; + color: #E6A5C4; + box-shadow: 0 0 8px rgba(90, 44, 62, 0.6), 0 0 12px rgba(230, 165, 196, 0.2); +} + +.dark .speaker-highlight.speaker-color-6 { + background-color: #1F4A47; + color: #A5D5D0; + box-shadow: 0 0 8px rgba(31, 74, 71, 0.6), 0 0 12px rgba(165, 213, 208, 0.2); +} + +.dark .speaker-highlight.speaker-color-7 { + background-color: #4A4A1F; + color: #E6E266; + box-shadow: 0 0 8px rgba(74, 74, 31, 0.6), 0 0 12px rgba(230, 226, 102, 0.2); +} + +.dark .speaker-highlight.speaker-color-8 { + background-color: #3E2723; + color: #D7CCC8; + box-shadow: 0 0 8px rgba(62, 39, 35, 0.6), 0 0 12px rgba(215, 204, 200, 0.2); +} + +.dark .speaker-highlight.speaker-color-9 { + background-color: #1A237E; + color: #9FA8DA; + box-shadow: 0 0 8px rgba(26, 35, 126, 0.6), 0 0 12px rgba(159, 168, 218, 0.2); +} + +.dark .speaker-highlight.speaker-color-10 { + background-color: #33691E; + color: #C5E1A5; + box-shadow: 0 0 8px rgba(51, 105, 30, 0.6), 0 0 12px rgba(197, 225, 165, 0.2); +} + +.dark .speaker-highlight.speaker-color-11 { + background-color: #5A1F1F; + color: #EF9A9A; + box-shadow: 0 0 8px rgba(90, 31, 31, 0.6), 0 0 12px rgba(239, 154, 154, 0.2); +} + +.dark .speaker-highlight.speaker-color-12 { + background-color: #263238; + color: #B0BEC5; + box-shadow: 0 0 8px rgba(38, 50, 56, 0.6), 0 0 12px rgba(176, 190, 197, 0.2); +} + +.dark .speaker-highlight.speaker-color-13 { + background-color: #4A3F1F; + color: #FFE082; + box-shadow: 0 0 8px rgba(74, 63, 31, 0.6), 0 0 12px rgba(255, 224, 130, 0.2); +} + +.dark .speaker-highlight.speaker-color-14 { + background-color: #311B92; + color: #B39DDB; + box-shadow: 0 0 8px rgba(49, 27, 146, 0.6), 0 0 12px rgba(179, 157, 219, 0.2); +} + +.dark .speaker-highlight.speaker-color-15 { + background-color: #004D40; + color: #80CBC4; + box-shadow: 0 0 8px rgba(0, 77, 64, 0.6), 0 0 12px rgba(128, 203, 196, 0.2); +} + +.dark .speaker-highlight.speaker-color-16 { + background-color: #4E2C1F; + color: #FFAB91; + box-shadow: 0 0 8px rgba(78, 44, 31, 0.6), 0 0 12px rgba(255, 171, 145, 0.2); +} + +/* Speaker Legend and Bubble Styles */ +.speaker-legend { + position: sticky; + top: 0; + z-index: 10; + margin-bottom: 0.5rem; + background-color: var(--bg-secondary); + border: 1px solid var(--border-primary); + border-radius: 0.375rem; + box-shadow: 0 1px 3px rgba(0,0,0,0.1); + overflow: hidden; + transition: all 0.3s ease; +} + +.dark .speaker-legend { + border: 1px solid var(--border-secondary); + box-shadow: 0 2px 4px rgba(0,0,0,0.2); +} + +.speaker-legend-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0.5rem 0.75rem; + background-color: var(--bg-tertiary); + border-bottom: 1px solid var(--border-primary); + cursor: pointer; + transition: background-color 0.2s ease; +} + +.dark .speaker-legend-header { + background-color: var(--bg-tertiary); + border-bottom: 1px solid var(--border-secondary); +} + +.speaker-legend-header:hover { + background-color: var(--bg-accent); +} + +.speaker-legend-title { + font-size: 0.75rem; + font-weight: 600; + color: var(--text-secondary); + display: flex; + align-items: center; + gap: 0.375rem; +} + +.speaker-legend-toggle { + color: var(--text-muted); + font-size: 0.75rem; + transition: transform 0.3s ease, color 0.2s ease; +} + +.speaker-legend.expanded .speaker-legend-toggle { + transform: rotate(180deg); + color: var(--text-accent); +} + +.speaker-legend-content { + display: flex; + flex-wrap: wrap; + gap: 0.375rem; + padding: 0; + max-height: 0; + overflow: hidden; + transition: max-height 0.3s ease, padding 0.3s ease; +} + +.speaker-legend.expanded .speaker-legend-content { + max-height: 200px; /* Reasonable max height for scrolling */ + overflow-y: auto; + padding: 0.5rem 0.75rem; +} + +.speaker-legend-item { + display: inline-flex; + align-items: center; + gap: 0.25rem; + padding: 0.25rem 0.5rem; + border-radius: 0.375rem; + font-size: 0.6875rem; + font-weight: 500; + transition: all 0.2s ease; + white-space: nowrap; + flex-shrink: 0; + width: auto; + max-width: fit-content; + border: 1px solid rgba(255,255,255,0.2); + box-shadow: 0 1px 2px rgba(0,0,0,0.1); +} + +.speaker-legend-item:hover { + transform: translateY(-1px); + box-shadow: 0 2px 4px rgba(0,0,0,0.15); +} + +.speaker-name { + font-weight: 500; +} + +/* Compact legend when collapsed - show as many speakers as fit */ +.speaker-legend:not(.expanded) .speaker-legend-content { + display: flex; + flex-direction: row; + flex-wrap: wrap; + overflow: hidden; + max-height: 3rem; /* Allow up to 2 rows of speakers */ + padding: 0.25rem 0.75rem; +} + +.speaker-legend:not(.expanded) .speaker-legend-item { + flex-shrink: 1; + min-width: fit-content; +} + +.speaker-count-indicator { + font-size: 0.75rem; + color: var(--text-muted); + font-weight: 400; + margin-left: 0.25rem; +} + +/* Floating Processing Indicator */ +.processing-indicator-floating { + position: sticky; + top: 0; + z-index: 15; + display: flex; + align-items: center; + justify-content: space-between; + background: var(--bg-secondary); + border: 1px solid var(--border-accent); + border-radius: 0.5rem; + padding: 0.625rem 0.875rem; + margin-bottom: 0.75rem; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + animation: slideDown 0.3s ease-out; +} + +.dark .processing-indicator-floating { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); +} + +@keyframes slideDown { + from { + opacity: 0; + transform: translateY(-10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.processing-indicator-floating.minimized { + position: sticky; + top: 0; + right: 0; + width: auto; + padding: 0; + background: transparent; + border: none; + box-shadow: none; + justify-content: flex-end; + margin-bottom: 0.5rem; +} + +.processing-indicator-content { + display: flex; + align-items: center; + gap: 0.625rem; +} + +.processing-indicator-content i { + font-size: 1rem; +} + +.processing-indicator-minimize { + display: flex; + align-items: center; + justify-content: center; + width: 1.5rem; + height: 1.5rem; + border: none; + background: transparent; + color: var(--text-muted); + cursor: pointer; + border-radius: 0.25rem; + transition: all 0.2s ease; +} + +.processing-indicator-minimize:hover { + background: var(--bg-tertiary); + color: var(--text-primary); +} + +.processing-indicator-expand { + display: flex; + align-items: center; + justify-content: center; + width: 2rem; + height: 2rem; + border: 1px solid var(--border-accent); + background: var(--bg-secondary); + color: var(--text-accent); + cursor: pointer; + border-radius: 50%; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15); + transition: all 0.2s ease; +} + +.dark .processing-indicator-expand { + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); +} + +.processing-indicator-expand:hover { + background: var(--bg-tertiary); + transform: scale(1.1); +} + +/* Enhanced transcription display with speaker bubbles */ +.transcription-with-speakers { + line-height: 1.6; + font-family: inherit; + display: flex; + flex-direction: column; + gap: 0.25rem; +} + +.speaker-bubble { + display: inline-block; + margin: 0.125rem 0.25rem 0.125rem 0; + padding: 0.5rem 0.75rem; + border-radius: 0.75rem; + max-width: fit-content; + transition: background-color 0.3s ease, box-shadow 0.3s ease; + min-width: fit-content; + width: auto; + word-wrap: break-word; + position: relative; + box-shadow: 0 1px 2px rgba(0,0,0,0.08); + transition: all 0.2s ease; + border: 1px solid rgba(255,255,255,0.3); + vertical-align: top; +} + +.speaker-bubble:hover { + transform: translateY(-1px); + box-shadow: 0 2px 4px rgba(0,0,0,0.12); +} + +.speaker-bubble.speaker-me { + border-bottom-right-radius: 0.25rem; +} + +.speaker-bubble:not(.speaker-me) { + border-bottom-left-radius: 0.25rem; +} + +.speaker-bubble-content { + margin: 0; + color: inherit; + font-size: 0.875rem; + line-height: 1.4; + white-space: pre-wrap; +} + +/* Bubble row container for horizontal grouping */ +.bubble-row { + display: flex; + flex-wrap: wrap; + align-items: flex-start; + margin-bottom: 0.5rem; + gap: 0.25rem; + width: 100%; +} + +.bubble-row.speaker-me { + justify-content: flex-end; +} + +.bubble-row:not(.speaker-me) { + justify-content: flex-start; +} + +/* Individual bubbles within rows should size to content and allow wrapping */ +.bubble-row .speaker-bubble { + flex: 0 0 auto; + max-width: calc(100% - 0.5rem); + width: auto; + min-width: fit-content; + margin: 0; +} + +/* Ensure bubbles can wrap to fill available space on mobile - preserve desktop styling */ +@media (max-width: 1023px) { + /* Target all bubble rows on mobile - preserve desktop gap and margin */ + .bubble-row, + .mobile-content-box .bubble-row, + .transcription-with-speakers .bubble-row { + display: flex !important; + flex-direction: row !important; + flex-wrap: wrap !important; + width: 100% !important; + gap: 0.25rem !important; + margin-bottom: 0.5rem !important; + align-items: flex-start !important; + } + + /* Target all speaker bubbles on mobile - preserve desktop spacing and styling */ + .speaker-bubble, + .mobile-content-box .speaker-bubble, + .bubble-row .speaker-bubble { + display: inline-block !important; + flex: 0 0 auto !important; + max-width: calc(70% - 0.25rem) !important; + width: auto !important; + min-width: fit-content !important; + margin: 0.125rem 0.25rem 0.125rem 0 !important; /* Preserve desktop margin */ + flex-shrink: 1 !important; + vertical-align: top !important; + padding: 0.5rem 0.75rem !important; /* Preserve desktop padding */ + border-radius: 0.75rem !important; /* Preserve desktop border-radius */ + box-shadow: 0 1px 2px rgba(0,0,0,0.08) !important; /* Preserve desktop shadow */ + transition: all 0.2s ease !important; /* Preserve desktop transition */ + border: 1px solid rgba(255,255,255,0.3) !important; /* Preserve desktop border */ + } + + /* Preserve desktop hover effects */ + .speaker-bubble:hover, + .mobile-content-box .speaker-bubble:hover, + .bubble-row .speaker-bubble:hover { + transform: translateY(-1px) !important; + box-shadow: 0 2px 4px rgba(0,0,0,0.12) !important; + } + + /* Preserve desktop bubble content styling */ + .speaker-bubble .speaker-bubble-content, + .mobile-content-box .speaker-bubble .speaker-bubble-content { + margin: 0 !important; + color: inherit !important; + font-size: 0.875rem !important; + line-height: 1.4 !important; + white-space: pre-wrap !important; + } + + /* Force horizontal layout for speaker rows */ + .bubble-row.speaker-me, + .bubble-row:not(.speaker-me) { + display: flex !important; + flex-direction: row !important; + flex-wrap: wrap !important; + } + + /* Override any conflicting styles */ + .transcription-with-speakers { + display: block !important; + } +} + +/* Simple view with speaker tablets */ +.transcription-simple-view { + line-height: 1.6; + font-family: inherit; +} + +.speaker-segment { + margin-bottom: 1rem; + transition: background-color 0.3s ease, box-shadow 0.3s ease; +} + +/* Active segment highlighting - for currently playing transcript */ +.speaker-segment.active-playing-segment, +.transcript-segment.active-playing-segment { + background-color: var(--bg-accent) !important; + box-shadow: 0 0 0 2px var(--border-accent) !important; + animation: pulse-highlight 0.5s ease-in-out; + padding: 0.75rem !important; + margin: 0.25rem 0 !important; + border-radius: 0.5rem !important; +} + +.speaker-bubble.active-playing-segment { + background-color: var(--bg-accent) !important; + box-shadow: 0 0 0 2px var(--border-accent) !important; + animation: pulse-highlight 0.5s ease-in-out; + transform: scale(1.02); +} + +@keyframes pulse-highlight { + 0% { + box-shadow: 0 0 0 0 var(--border-accent); + } + 50% { + box-shadow: 0 0 0 4px var(--border-accent); + } + 100% { + box-shadow: 0 0 0 2px var(--border-accent); + } +} + +/* Follow Player Mode Checkbox Styling */ +.follow-player-control { + display: inline-flex; + align-items: center; + gap: 0.375rem; + padding: 0.25rem 0.5rem; + border-radius: 0.375rem; + transition: all 0.2s ease; + cursor: pointer; + user-select: none; +} + +.follow-player-control:hover { + background-color: var(--bg-accent-hover); +} + +.follow-player-control input[type="checkbox"] { + appearance: none; + -webkit-appearance: none; + width: 14px; + height: 14px; + border: 1.5px solid var(--border-secondary); + border-radius: 0.25rem; + background-color: var(--bg-input); + cursor: pointer; + position: relative; + transition: all 0.2s ease; + flex-shrink: 0; +} + +.follow-player-control input[type="checkbox"]:hover { + border-color: var(--border-accent); +} + +.follow-player-control input[type="checkbox"]:checked { + background-color: var(--bg-button); + border-color: var(--bg-button); + animation: checkboxPop 0.2s ease-out; +} + +.follow-player-control input[type="checkbox"]:checked::after { + content: ''; + position: absolute; + left: 50%; + top: 50%; + width: 3.5px; + height: 7px; + border: solid var(--text-button); + border-width: 0 2px 2px 0; + transform: translate(-50%, -60%) rotate(45deg); + animation: checkmarkDraw 0.2s ease-out; +} + +@keyframes checkboxPop { + 0% { + transform: scale(0.8); + } + 50% { + transform: scale(1.1); + } + 100% { + transform: scale(1); + } +} + +@keyframes checkmarkDraw { + 0% { + width: 0; + height: 0; + opacity: 0; + } + 100% { + width: 3.5px; + height: 7px; + opacity: 1; + } +} + +/* Selection checkbox - used for bulk selection in sidebar */ +.selection-checkbox { + appearance: none; + -webkit-appearance: none; + width: 18px; + height: 18px; + border: 2px solid var(--border-secondary); + border-radius: 0.25rem; + background-color: var(--bg-input); + cursor: pointer; + position: relative; + transition: all 0.2s ease; + flex-shrink: 0; +} + +.selection-checkbox:hover { + border-color: var(--border-accent); +} + +.selection-checkbox:checked { + background-color: var(--bg-button); + border-color: var(--bg-button); + animation: checkboxPop 0.2s ease-out; +} + +.selection-checkbox:checked::after { + content: ''; + position: absolute; + left: 50%; + top: 50%; + width: 4px; + height: 9px; + border: solid var(--text-button); + border-width: 0 2.5px 2.5px 0; + transform: translate(-50%, -60%) rotate(45deg); + animation: checkmarkDraw 0.2s ease-out; +} + +/* Vue transition for slide-up (bulk action bar) */ +.slide-up-enter-active, +.slide-up-leave-active { + transition: transform 0.3s ease; +} +.slide-up-enter-from, +.slide-up-leave-to { + transform: translateY(100%); +} + +/* Vue transition for slide-right (vertical bulk action bar) */ +.slide-right-enter-active, +.slide-right-leave-active { + transition: transform 0.3s ease, opacity 0.3s ease; +} +.slide-right-enter-from, +.slide-right-leave-to { + transform: translateX(-100%) translateY(-50%); + opacity: 0; +} + +.follow-player-control .follow-icon { + font-size: 11px; + flex-shrink: 0; + opacity: 0.85; +} + +.follow-player-control:hover .follow-icon { + opacity: 1; +} + +.speaker-tablet { + display: inline-block; + padding: 0.25rem 0.5rem; + border-radius: 0.375rem; + font-size: 0.75rem; + font-weight: 600; + margin-bottom: 0.5rem; + margin-right: 0.5rem; + border: none; + box-shadow: 0 1px 2px rgba(0,0,0,0.1); +} + +.speaker-text { + color: var(--text-secondary); + font-size: 0.875rem; + line-height: 1.5; + margin-left: 0; +} + +/* View mode toggle - compact tablet style */ +.view-mode-toggle { + display: inline-flex; + align-items: stretch; + background-color: var(--bg-tertiary); + border: 1px solid var(--border-primary); + border-radius: 0.5rem; + padding: 0; + gap: 0; + box-shadow: 0 1px 2px rgba(0,0,0,0.05); +} + +.toggle-button { + padding: 0.35rem 0.75rem; + border: none; + border-radius: 0.5rem; + background-color: transparent; + color: var(--text-secondary); + font-size: 0.75rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s ease; + white-space: nowrap; + min-width: 0; + display: inline-flex; + align-items: center; + justify-content: center; + height: 100%; +} + +.toggle-button.active { + background-color: var(--bg-accent); + color: var(--text-accent); +} + +.toggle-button:hover:not(.active) { + background-color: var(--bg-secondary); + color: var(--text-secondary); +} + +.toggle-button i { + font-size: 0.75rem; + margin-right: 0; +} +.toggle-button span + i, +.toggle-button i + span { + margin-left: 0.25rem; +} + +.dark .view-mode-toggle { + background-color: var(--bg-secondary); + border-color: var(--border-secondary); +} + +/* Speaker colors - enhanced palette with 16 colors for better variation */ +.speaker-color-1 { background-color: #E3F2FD; color: #0D47A1; } /* Blue */ +.speaker-color-2 { background-color: #F3E5F5; color: #6A1B9A; } /* Purple */ +.speaker-color-3 { background-color: #E8F5E9; color: #1B5E20; } /* Green */ +.speaker-color-4 { background-color: #FFF3E0; color: #E65100; } /* Orange */ +.speaker-color-5 { background-color: #FCE4EC; color: #AD1457; } /* Pink */ +.speaker-color-6 { background-color: #E0F7FA; color: #006064; } /* Cyan */ +.speaker-color-7 { background-color: #FFF9C4; color: #F57F17; } /* Yellow */ +.speaker-color-8 { background-color: #EFEBE9; color: #5D4037; } /* Brown */ +.speaker-color-9 { background-color: #E8EAF6; color: #283593; } /* Indigo */ +.speaker-color-10 { background-color: #F1F8E9; color: #558B2F; } /* Lime */ +.speaker-color-11 { background-color: #FFEBEE; color: #C62828; } /* Red */ +.speaker-color-12 { background-color: #ECEFF1; color: #37474F; } /* Blue Grey */ +.speaker-color-13 { background-color: #FFF8E1; color: #FF8F00; } /* Amber */ +.speaker-color-14 { background-color: #EDE7F6; color: #4527A0; } /* Deep Purple */ +.speaker-color-15 { background-color: #E0F2F1; color: #00695C; } /* Teal */ +.speaker-color-16 { background-color: #FBE9E7; color: #BF360C; } /* Deep Orange */ + +/* Dark mode speaker colors - tasteful muted pastels with 16 colors */ +.dark .speaker-color-1 { background-color: #1E3A5F; color: #A5C9EA; } /* Blue */ +.dark .speaker-color-2 { background-color: #4A2C5A; color: #D4A5D4; } /* Purple */ +.dark .speaker-color-3 { background-color: #1F4A3C; color: #A8D5A8; } /* Green */ +.dark .speaker-color-4 { background-color: #5A3A1F; color: #E6B366; } /* Orange */ +.dark .speaker-color-5 { background-color: #5A2C3E; color: #E6A5C4; } /* Pink */ +.dark .speaker-color-6 { background-color: #1F4A47; color: #A5D5D0; } /* Cyan */ +.dark .speaker-color-7 { background-color: #4A4A1F; color: #E6E266; } /* Yellow */ +.dark .speaker-color-8 { background-color: #3E2723; color: #D7CCC8; } /* Brown */ +.dark .speaker-color-9 { background-color: #1A237E; color: #9FA8DA; } /* Indigo */ +.dark .speaker-color-10 { background-color: #33691E; color: #C5E1A5; } /* Lime */ +.dark .speaker-color-11 { background-color: #5A1F1F; color: #EF9A9A; } /* Red */ +.dark .speaker-color-12 { background-color: #263238; color: #B0BEC5; } /* Blue Grey */ +.dark .speaker-color-13 { background-color: #4A3F1F; color: #FFE082; } /* Amber */ +.dark .speaker-color-14 { background-color: #311B92; color: #B39DDB; } /* Deep Purple */ +.dark .speaker-color-15 { background-color: #004D40; color: #80CBC4; } /* Teal */ +.dark .speaker-color-16 { background-color: #4E2C1F; color: #FFAB91; } /* Deep Orange */ + +/* Meeting/Created time styling improvements */ +.recording-metadata { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 1rem; + margin-top: 0.5rem; + font-size: 0.875rem; +} + +.metadata-item { + display: flex; + align-items: center; + gap: 0.375rem; + color: var(--text-muted); + transition: color 0.2s ease; + white-space: nowrap; +} + +.metadata-item:hover { + color: var(--text-secondary); +} + +.metadata-icon { + color: var(--text-accent); + opacity: 0.75; + font-size: 0.75rem; + width: 12px; + text-align: center; + flex-shrink: 0; +} + +.metadata-label { + font-weight: 500; + color: var(--text-secondary); + font-size: 0.8125rem; +} + +.metadata-value { + color: var(--text-muted); + font-size: 0.8125rem; +} + +.metadata-value.editable { + cursor: pointer; + padding: 0.125rem 0.25rem; + border-radius: 0.25rem; + transition: all 0.2s ease; +} + +.metadata-value.editable:hover { + background-color: var(--bg-tertiary); + color: var(--text-accent); +} + +.metadata-edit-input { + padding: 0.125rem 0.5rem; + background: transparent; + border: none; + border-bottom: 1px solid var(--border-secondary); + color: var(--text-primary); + font-size: inherit; + width: 140px; +} + +.metadata-edit-input:focus { + outline: none; + border-bottom-color: var(--border-focus); +} + +.metadata-edit-button { + margin-left: 0.25rem; + padding: 0.125rem; + background: none; + border: none; + color: var(--text-accent); + cursor: pointer; + font-size: 0.75rem; + opacity: 0.7; + transition: opacity 0.2s ease; +} + +.metadata-edit-button:hover { + opacity: 1; +} + +.modal-content { + max-height: calc(100vh - 200px); + overflow-y: auto; +} + +/* Mobile Tabbed Layout */ +@media (max-width: 1023px) { + /* Desktop layout's main content is hidden via v-if="!isMobileScreen" in HTML */ + /* .desktop-layout { + display: none !important; + } */ + + /* Show mobile layout only on mobile */ + .mobile-layout { + display: flex !important; + flex-direction: column; + height: calc(100vh - 120px); /* Account for header and footer */ + overflow: hidden; + } + + /* Mobile audio player section */ + .mobile-audio-section { + flex-shrink: 0; + padding: 1rem; + background-color: var(--bg-secondary); + border-bottom: 1px solid var(--border-primary); + } + + /* Mobile tab navigation */ + .mobile-tab-nav { + flex-shrink: 0; + background-color: var(--bg-secondary); + border-bottom: 1px solid var(--border-primary); + padding: 0 1rem; + } + + .mobile-tab-nav .tab-list { + display: flex; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + scrollbar-width: none; + -ms-overflow-style: none; + } + + .mobile-tab-nav .tab-list::-webkit-scrollbar { + display: none; + } + + .mobile-tab-button { + flex-shrink: 0; + padding: 0.75rem 1rem; + font-size: 0.875rem; + font-weight: 500; + border-bottom: 2px solid transparent; + color: var(--text-muted); + background: none; + border: none; + cursor: pointer; + transition: all 0.2s ease; + white-space: nowrap; + } + + .mobile-tab-button.active { + color: var(--text-accent); + border-bottom-color: var(--border-focus); + } + + .mobile-tab-button:hover { + color: var(--text-secondary); + } + + /* Mobile tab content area */ + .mobile-tab-content { + flex: 1; + overflow: hidden; + background-color: var(--bg-secondary); + } + + .mobile-tab-panel { + height: 100%; + overflow-y: auto; + padding: 1rem; + display: none; + } + + .mobile-tab-panel.active { + display: block; + } + +/* Mobile tab content styling */ +.mobile-content-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; + padding-bottom: 0.5rem; + border-bottom: 1px solid var(--border-primary); +} + +/* Mobile fullscreen button for editors */ +.mobile-fullscreen-btn { + padding: 0.375rem; + background: none; + border: 1px solid var(--border-secondary); + border-radius: 0.375rem; + color: var(--text-muted); + cursor: pointer; + transition: all 0.2s ease; + font-size: 0.75rem; +} + +.mobile-fullscreen-btn:hover { + background-color: var(--bg-tertiary); + color: var(--text-accent); +} + + .mobile-content-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; + padding-bottom: 0.5rem; + border-bottom: 1px solid var(--border-primary); + } + + .mobile-content-title { + font-weight: 600; + color: var(--text-secondary); + flex: 1; + } + + .mobile-content-actions { + display: flex; + gap: 0.5rem; + } + + .mobile-action-btn { + padding: 0.5rem; + background: none; + border: 1px solid var(--border-secondary); + border-radius: 0.375rem; + color: var(--text-muted); + cursor: pointer; + transition: all 0.2s ease; + font-size: 0.875rem; + } + + .mobile-action-btn:hover { + background-color: var(--bg-tertiary); + color: var(--text-accent); + } + + .mobile-content-box { + flex: 1; + background-color: var(--bg-tertiary); + border: 1px solid var(--border-primary); + border-radius: 0.75rem; + padding: 1rem; + overflow-y: auto; + overflow-x: hidden; + font-size: 0.875rem; + line-height: 1.5; + /* Fix scrollbar clipping rounded corners */ + scrollbar-gutter: stable; + color: var(--text-secondary); + min-height: 0; + } + + /* Remove inner box styling for summary and notes on mobile */ + .mobile-content-box .summary-box, + .mobile-content-box .notes-box { + background-color: transparent; + border: none; + padding: 0; + border-radius: 0; + height: auto; + } + + /* Remove padding from mobile-content-box when it contains markdown editor */ + .mobile-content-box:has(.markdown-editor-container) { + padding: 0; + overflow: hidden; /* Ensure rounded corners are respected */ + } + + /* Make editor fill the rounded container properly */ + .mobile-content-box .markdown-editor-container { + height: 100%; + } + + .mobile-content-box .markdown-editor-container .EasyMDEContainer { + border: none !important; + border-radius: 0.75rem; + height: 100%; + } + + .mobile-content-box .markdown-editor-container .EasyMDEContainer .editor-toolbar { + border: none !important; + border-radius: 0.75rem 0.75rem 0 0; + border-bottom: 1px solid var(--border-primary) !important; + } + + .mobile-content-box .markdown-editor-container .EasyMDEContainer .CodeMirror { + border: none !important; + border-radius: 0 0 0.75rem 0.75rem; + } + + .mobile-content-box .markdown-editor-container .EasyMDEContainer .CodeMirror-scroll { + border-radius: 0 0 0.75rem 0.75rem; + } + + /* Mobile chat layout */ + .mobile-chat-content { + height: 100%; + display: flex; + flex-direction: column; + } + + .mobile-chat-messages { + flex: 1; + overflow-y: auto; + padding: 1rem; + background-color: var(--bg-secondary); /* Changed from --bg-tertiary */ + border: 1px solid var(--border-primary); + border-radius: 0.75rem 0.75rem 0 0; + margin-bottom: 0; + } + + .mobile-chat-input { + background-color: var(--bg-tertiary); + border: 1px solid var(--border-primary); + border-top: none; + border-radius: 0 0 0.75rem 0.75rem; + padding: 0.75rem; + display: flex; + gap: 0.5rem; + } + + .mobile-chat-input textarea { /* Changed from input to textarea */ + flex: 1; + padding: 0.5rem; + border: 1px solid var(--border-secondary); + border-radius: 0.375rem; + background-color: var(--bg-input); + color: var(--text-primary); + font-size: 0.875rem; + line-height: 1.5; /* Added for consistent line height */ + resize: none; /* Prevent manual resizing */ + min-height: calc(1.5em + 1rem); /* Approx 1 line with padding */ + max-height: calc(1.5em * 4 + 1rem); /* Approx 4 lines with padding */ + overflow-y: auto; /* Allow scrolling after max-height */ + } + +/* Desktop chat input textarea styling */ +.chat-input-container textarea { + min-height: calc(1.5em * 3 + 1rem); /* Approx 3 lines with padding */ + max-height: calc(1.5em * 6 + 1rem); /* Approx 6 lines with padding */ + overflow-y: auto; /* Allow scrolling after max-height */ + line-height: 1.5; /* Consistent line height */ + font-family: inherit; /* Use the same font as the rest of the app */ +} + + .mobile-chat-input button { + padding: 0.5rem 1rem; + background-color: var(--bg-button); + color: var(--text-button); + border: none; + border-radius: 0.375rem; + cursor: pointer; + font-size: 0.875rem; + } + + .mobile-chat-input button:disabled { + background-color: var(--bg-tertiary); + color: var(--text-muted); + cursor: not-allowed; + } +} + +/* Hide mobile layout on desktop */ +@media (min-width: 1024px) { + .mobile-layout { + display: none !important; + } + + .desktop-layout { + display: block !important; + } +} + +/* Responsive adjustments for mobile */ +@media (max-width: 1023px) { + /* Ensure modals are not too wide on small screens */ + .fixed.inset-0 .w-full.max-w-md, + .fixed.inset-0 .w-full.max-w-lg, + .fixed.inset-0 .w-full.max-w-4xl { + max-width: 95vw !important; + max-height: 90vh; + } + + /* Ensure the main content area is visible when the mobile menu is closed */ + .main-content-area { + display: block !important; + } + +} + +/* Responsive title that shrinks font size instead of wrapping */ +.responsive-title { + font-size: clamp(1.125rem, 3.5vw, 1.5rem); /* More aggressive responsive scaling */ + line-height: 1.2; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 100%; + min-width: 0; +} + +/* Ensure the title container doesn't grow beyond available space */ +.responsive-title-container { + min-width: 0; + flex: 1; + max-width: calc(100% - 200px); /* Reserve space for buttons */ +} + +/* Responsive button container */ +.responsive-button-container { + display: flex; + gap: 0.375rem; + flex-shrink: 0; + flex-wrap: wrap; + align-items: center; +} + +/* Responsive button styling */ +.responsive-button-container button { + padding: 0.375rem 0.5rem; + font-size: 0.875rem; + min-width: 2rem; + height: 2rem; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s ease; +} + +/* On very narrow screens, make buttons smaller */ +@media (max-width: 640px) { + .responsive-title { + font-size: clamp(1rem, 4vw, 1.25rem); + } + + .responsive-title-container { + max-width: calc(100% - 150px); /* Less space reserved for buttons */ + } + + .responsive-button-container { + gap: 0.25rem; + } + + .responsive-button-container button { + padding: 0.25rem 0.375rem; + font-size: 0.75rem; + min-width: 1.75rem; + height: 1.75rem; + } + + /* Hide button text on very small screens, show only icons */ + .responsive-button-container button span { + display: none; + } + + .responsive-button-container button i { + margin: 0; + } +} + +/* Header layout improvements for better responsiveness */ +.recording-header { + display: flex; + flex-direction: column; + gap: 0.75rem; + margin-bottom: 1rem; + padding-bottom: 1rem; + border-bottom: 1px solid var(--border-primary); +} + +.recording-title-row { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 1rem; + min-height: 2.5rem; +} + +.recording-metadata-row { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 1rem; + font-size: 0.875rem; +} + +/* Ensure metadata items stay on same line when possible */ +@media (min-width: 768px) { + .recording-metadata-row { + flex-wrap: nowrap; + gap: 1.5rem; + } +} + +/* Toast notifications */ +#toastContainer { + position: fixed; + bottom: 20px; + right: 20px; + z-index: 9999; + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 12px; +} + +.toast { + background: var(--bg-success); + color: var(--text-success-strong); + padding: 12px 16px; + border-radius: 8px; + margin-bottom: 8px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + border: 1px solid var(--border-success); + transform: translateX(100%); + opacity: 0; + transition: all 0.3s ease-in-out; + pointer-events: auto; + display: flex; + align-items: center; + gap: 8px; + max-width: 300px; +} + +.toast.show { + transform: translateX(0); + opacity: 1; +} + +.toast i { + flex-shrink: 0; +} + +/* Toast message stacking with fly-in animation */ +.toast-message { + transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out; + pointer-events: auto; + transform: translateX(400px); + margin-bottom: 0.5rem; + display: block !important; + max-width: 450px; + word-wrap: break-word; + /* All other styles handled by Tailwind classes */ +} + +.toast-message.toast-show { + transform: translateX(0); +} + +#toastContainer { + display: flex; + flex-direction: column; + align-items: flex-end; + max-width: 450px; +} + +/* Discrete horizontal resize divider */ +#mainColumnResizer { + width: 12px !important; + background-color: transparent !important; + cursor: ew-resize !important; + margin: 0 -6px !important; + position: relative; + z-index: 10; +} + +#mainColumnResizer:hover::before { + content: ''; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + width: 4px; + height: 60px; + background-color: var(--border-accent); + border-radius: 2px; + transition: background-color 0.15s ease; +} + +/* Ensure consistent layout behavior when sidebar is collapsed */ +.sidebar-container.lg\:col-span-1 { + transition: all 0.3s ease; +} + +/* Smooth transition for main content area when sidebar toggles */ +.main-content-area { + transition: all 0.3s ease; +} + +/* Preserve column widths during sidebar transitions */ +.content-column { + transition: none !important; /* Disable transitions on content columns to prevent layout shifts */ +} + +/* Ensure the grid container adapts smoothly */ +.grid.grid-cols-1.lg\:grid-cols-4.gap-6.flex-grow { + transition: all 0.3s ease; +} + +/* Force consistent internal layout regardless of parent grid span */ +.main-content-area #mainContentColumns { + width: 100% !important; + max-width: none !important; + min-width: 0 !important; +} + +/* Ensure left column maintains its set width - respect inline styles */ +.main-content-area #leftMainColumn { + flex-shrink: 0 !important; + min-width: 0 !important; + /* Don't override width - let inline style control it */ +} + +/* Ensure right column fills remaining space */ +.main-content-area #rightMainColumn { + flex: 1 !important; + min-width: 0 !important; + width: auto !important; +} + +/* Specific rule to ensure inline width styles are respected */ +#leftMainColumn[style*="width"] { + flex-basis: auto !important; + flex-grow: 0 !important; + flex-shrink: 0 !important; +} + +/* Prevent layout shifts when grid span changes */ +.main-content-area .recording-header, +.main-content-area .participants-section, +.main-content-area .transcription-section, +.main-content-area .tab-section, +.main-content-area .audio-section, +.main-content-area .chat-section { + width: 100% !important; + max-width: none !important; +} + +/* Discrete vertical resize divider */ +.resize-handle { + height: 12px !important; + background-color: transparent !important; + cursor: ns-resize !important; + margin: 2px 0 !important; + display: flex !important; + align-items: center !important; + justify-content: center !important; + padding: 0 !important; + border-radius: 0 !important; +} + +.resize-handle .w-10 { + width: 60px !important; + height: 4px !important; + background-color: var(--text-light) !important; + border-radius: 2px !important; + transition: background-color 0.15s ease !important; +} + +.resize-handle:hover .w-10 { + background-color: var(--border-accent) !important; +} + +/* Color Scheme Modal Styles */ +.color-scheme-modal { + position: fixed; + inset: 0; + background-color: rgba(0, 0, 0, 0.7); + display: flex; + align-items: center; + justify-content: center; + z-index: 9999; + padding: 1rem; + backdrop-filter: blur(4px); + transition: all 0.3s ease-in-out; +} + +.color-scheme-modal-content { + background-color: var(--bg-secondary); + border-radius: 1rem; + box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); + width: 100%; + max-width: 42rem; + max-height: 90vh; + overflow: hidden; + transform: scale(1); + transition: all 0.3s ease-in-out; +} + +.color-scheme-header { + background: linear-gradient(135deg, var(--bg-accent), var(--bg-secondary)); + padding: 1.5rem; + border-bottom: 1px solid var(--border-primary); +} + +.color-scheme-title { + font-size: 1.5rem; + font-weight: 700; + color: var(--text-primary); + margin: 0; + display: flex; + align-items: center; + gap: 0.75rem; +} + +.color-scheme-subtitle { + color: var(--text-muted); + font-size: 0.875rem; + margin-top: 0.5rem; + margin-bottom: 0; +} + +.color-scheme-body { + padding: 1.5rem; + max-height: calc(90vh - 200px); + overflow-y: auto; +} + +.color-scheme-section { + margin-bottom: 2rem; +} + +.color-scheme-section:last-child { + margin-bottom: 0; +} + +.color-scheme-section-title { + font-size: 1.125rem; + font-weight: 600; + color: var(--text-primary); + margin-bottom: 1rem; + display: flex; + align-items: center; + gap: 0.5rem; +} + +.color-scheme-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 1rem; +} + +.color-scheme-option { + border: 2px solid var(--border-primary); + border-radius: 0.75rem; + padding: 1rem; + cursor: pointer; + transition: all 0.2s ease; + background-color: var(--bg-tertiary); + position: relative; + overflow: hidden; +} + +.color-scheme-option:hover { + border-color: var(--border-accent); + transform: translateY(-2px); + box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1); +} + +.color-scheme-option.active { + border-color: var(--border-focus); + background-color: var(--bg-accent); + box-shadow: 0 0 0 3px var(--ring-focus); +} + +.color-scheme-preview { + height: 60px; + border-radius: 0.5rem; + margin-bottom: 0.75rem; + display: flex; + overflow: hidden; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); +} + +.color-scheme-preview-segment { + flex: 1; + transition: all 0.2s ease; +} + +.color-scheme-option:hover .color-scheme-preview-segment { + transform: scale(1.02); +} + +.color-scheme-name { + font-weight: 600; + color: var(--text-primary); + margin-bottom: 0.25rem; + font-size: 0.875rem; +} + +.color-scheme-description { + color: var(--text-muted); + font-size: 0.75rem; + line-height: 1.4; +} + +.color-scheme-check { + position: absolute; + top: 0.75rem; + right: 0.75rem; + width: 1.25rem; + height: 1.25rem; + border-radius: 50%; + background-color: var(--bg-button); + color: var(--text-button); + display: flex; + align-items: center; + justify-content: center; + font-size: 0.75rem; + opacity: 0; + transform: scale(0.8); + transition: all 0.2s ease; +} + +.color-scheme-option.active .color-scheme-check { + opacity: 1; + transform: scale(1); +} + +.color-scheme-footer { + background-color: var(--bg-tertiary); + padding: 1rem 1.5rem; + border-top: 1px solid var(--border-primary); + display: flex; + justify-content: space-between; + align-items: center; +} + +.color-scheme-close-btn { + padding: 0.5rem 1rem; + background-color: var(--bg-secondary); + color: var(--text-secondary); + border: 1px solid var(--border-secondary); + border-radius: 0.5rem; + cursor: pointer; + transition: all 0.2s ease; + font-size: 0.875rem; + font-weight: 500; +} + +.color-scheme-close-btn:hover { + background-color: var(--bg-tertiary); + color: var(--text-primary); +} + +.color-scheme-reset-btn { + padding: 0.5rem 1rem; + background-color: transparent; + color: var(--text-muted); + border: 1px solid var(--border-secondary); + border-radius: 0.5rem; + cursor: pointer; + transition: all 0.2s ease; + font-size: 0.875rem; + font-weight: 500; +} + +.color-scheme-reset-btn:hover { + background-color: var(--bg-danger-light); + color: var(--text-danger); + border-color: var(--border-danger); +} + +/* Color scheme preview colors */ +.preview-blue-primary { background-color: #2563eb; } +.preview-blue-secondary { background-color: #dbeafe; } +.preview-blue-tertiary { background-color: #93c5fd; } + +.preview-emerald-primary { background-color: #059669; } +.preview-emerald-secondary { background-color: #d1fae5; } +.preview-emerald-tertiary { background-color: #6ee7b7; } + +.preview-purple-primary { background-color: #7c3aed; } +.preview-purple-secondary { background-color: #e9d5ff; } +.preview-purple-tertiary { background-color: #c4b5fd; } + +.preview-rose-primary { background-color: #e11d48; } +.preview-rose-secondary { background-color: #fce7f3; } +.preview-rose-tertiary { background-color: #f9a8d4; } + +.preview-amber-primary { background-color: #d97706; } +.preview-amber-secondary { background-color: #fef3c7; } +.preview-amber-tertiary { background-color: #fcd34d; } + +.preview-teal-primary { background-color: #0d9488; } +.preview-teal-secondary { background-color: #ccfbf1; } +.preview-teal-tertiary { background-color: #5eead4; } + +/* Dark theme preview colors */ +.preview-dark-blue-primary { background-color: #1e3a8a; } +.preview-dark-blue-secondary { background-color: #1e40af; } +.preview-dark-blue-tertiary { background-color: #60a5fa; } + +.preview-dark-emerald-primary { background-color: #064e3b; } +.preview-dark-emerald-secondary { background-color: #065f46; } +.preview-dark-emerald-tertiary { background-color: #6ee7b7; } + +.preview-dark-purple-primary { background-color: #581c87; } +.preview-dark-purple-secondary { background-color: #6b21a8; } +.preview-dark-purple-tertiary { background-color: #c4b5fd; } + +.preview-dark-rose-primary { background-color: #881337; } +.preview-dark-rose-secondary { background-color: #9f1239; } +.preview-dark-rose-tertiary { background-color: #fda4af; } + +.preview-dark-amber-primary { background-color: #78350f; } +.preview-dark-amber-secondary { background-color: #92400e; } +.preview-dark-amber-tertiary { background-color: #fcd34d; } + +.preview-dark-teal-primary { background-color: #134e4a; } +.preview-dark-teal-secondary { background-color: #115e59; } +.preview-dark-teal-tertiary { background-color: #5eead4; } + +/* Line clamp utility for text truncation */ +.line-clamp-2 { + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; +} + +/* Responsive adjustments for color scheme modal */ +@media (max-width: 768px) { + .color-scheme-modal { + padding: 0.5rem; + } + + .color-scheme-modal-content { + max-width: 95vw; + max-height: 95vh; + } + + .color-scheme-grid { + grid-template-columns: 1fr; + gap: 0.75rem; + } + + .color-scheme-header { + padding: 1rem; + } + + .color-scheme-body { + padding: 1rem; + } + + .color-scheme-footer { + padding: 1rem; + flex-direction: column; + gap: 0.75rem; + } +} + +/* Enhanced Audio Player Styling for Better Dark Mode Visibility */ +.audio-player-container { + background: var(--bg-audio-player); + border: 1px solid var(--border-primary); + border-radius: 0.75rem; + padding: 1rem; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + transition: all 0.3s ease; +} + +.dark .audio-player-container { + border: 1px solid var(--border-secondary); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); +} + +/* Audio player controls styling */ +.audio-player-container audio { + width: 100%; + height: 40px; + background-color: var(--bg-tertiary); + border-radius: 0.5rem; + border: 1px solid var(--border-primary); + outline: none; +} + +.dark .audio-player-container audio { + background-color: var(--bg-secondary); + border: 1px solid var(--border-secondary); +} + +/* Audio player controls for WebKit browsers */ +.audio-player-container audio::-webkit-media-controls-panel { + background-color: var(--bg-tertiary); + border-radius: 0.5rem; +} + +.dark .audio-player-container audio::-webkit-media-controls-panel { + background-color: var(--bg-secondary); +} + +.audio-player-container audio::-webkit-media-controls-enclosure { + border: none; + background: none; +} + +.audio-player-container audio::-webkit-media-controls-play-button, +.audio-player-container audio::-webkit-media-controls-pause-button { + background-color: var(--bg-button); + border-radius: 50%; + margin: 0 0.25rem; +} + +.dark .audio-player-container audio::-webkit-media-controls-play-button, +.dark .audio-player-container audio::-webkit-media-controls-pause-button { +} + +.audio-player-container audio::-webkit-media-controls-timeline { + background-color: var(--border-primary); + border-radius: 0.25rem; + margin: 0 0.5rem; +} + +.dark .audio-player-container audio::-webkit-media-controls-timeline { + background-color: var(--border-secondary); +} + +.audio-player-container audio::-webkit-media-controls-current-time-display, +.audio-player-container audio::-webkit-media-controls-time-remaining-display { + color: var(--text-secondary); + font-size: 0.75rem; +} + +.dark .audio-player-container audio::-webkit-media-controls-current-time-display, +.dark .audio-player-container audio::-webkit-media-controls-time-remaining-display { + color: var(--text-primary); +} + +/* Audio player volume controls */ +.audio-player-container audio::-webkit-media-controls-volume-slider { + background-color: var(--border-primary); + border-radius: 0.25rem; +} + +.dark .audio-player-container audio::-webkit-media-controls-volume-slider { + background-color: var(--border-secondary); +} + +.audio-player-container audio::-webkit-media-controls-mute-button { + background-color: transparent; +} + +/* Dark mode: use browser's native dark theme for audio controls */ +.dark audio { + color-scheme: dark; +} + +/* Custom volume slider styling - accent colored */ +.volume-slider { + -webkit-appearance: none; + appearance: none; + background: transparent; + cursor: pointer; + height: 6px; +} + +.volume-slider::-webkit-slider-runnable-track { + background: var(--border-accent); + opacity: 0.5; + height: 6px; + border-radius: 3px; +} + +.dark .volume-slider::-webkit-slider-runnable-track { + background: var(--border-accent); + opacity: 0.6; +} + +.volume-slider::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 12px; + height: 12px; + border-radius: 50%; + background: var(--text-accent); + margin-top: -3px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); + cursor: pointer; + transition: transform 0.15s ease; +} + +.volume-slider::-moz-range-track { + background: var(--border-accent); + opacity: 0.5; + height: 6px; + border-radius: 3px; +} + +.dark .volume-slider::-moz-range-track { + background: var(--border-accent); + opacity: 0.6; +} + +.volume-slider::-moz-range-thumb { + width: 12px; + height: 12px; + border-radius: 50%; + background: var(--text-accent); + border: none; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); + cursor: pointer; + transition: transform 0.15s ease; +} + +.volume-slider:hover::-webkit-slider-thumb { + transform: scale(1.2); + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.4); +} + +.volume-slider:hover::-moz-range-thumb { + transform: scale(1.2); + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.4); +} + +/* Vertical volume slider (popup) */ +.volume-slider-vertical { + -webkit-appearance: none; + appearance: none; + background: transparent; + cursor: pointer; + writing-mode: vertical-lr; + direction: rtl; + width: 20px; +} + +.volume-slider-vertical::-webkit-slider-runnable-track { + background: var(--border-accent); + opacity: 0.5; + width: 6px; + border-radius: 3px; +} + +.dark .volume-slider-vertical::-webkit-slider-runnable-track { + background: var(--border-accent); + opacity: 0.6; +} + +.volume-slider-vertical::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 14px; + height: 14px; + border-radius: 50%; + background: var(--text-accent); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); + cursor: pointer; +} + +.volume-slider-vertical::-moz-range-track { + background: var(--border-accent); + opacity: 0.5; + width: 6px; + border-radius: 3px; +} + +.dark .volume-slider-vertical::-moz-range-track { + background: var(--border-accent); + opacity: 0.6; +} + +.volume-slider-vertical::-moz-range-thumb { + width: 14px; + height: 14px; + border-radius: 50%; + background: var(--text-accent); + border: none; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); + cursor: pointer; +} + +/* Player play button - accent colored with proper contrast */ +.player-play-button { + background-color: var(--text-accent); + color: white; +} + +.player-play-button:hover { + filter: brightness(1.1); +} + +.dark .player-play-button { + background-color: var(--text-accent); + color: var(--bg-primary); +} + +.dark .player-play-button:hover { + filter: brightness(1.15); +} + +/* Playback Speed Control Dropdown */ +.speed-dropdown { + animation: speedDropdownFade 0.12s ease-out; + width: 52px; +} + +@keyframes speedDropdownFade { + from { + opacity: 0; + transform: scale(0.95); + } + to { + opacity: 1; + transform: scale(1); + } +} + +/* Custom audio player wrapper for better control */ +.custom-audio-wrapper { + position: relative; + background: var(--bg-audio-player); + border: 1px solid var(--border-primary); + border-radius: 0.75rem; + padding: 1rem; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); +} + +.dark .custom-audio-wrapper { + border: 1px solid var(--border-secondary); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); + background: var(--bg-audio-player); +} + +/* Audio player title/metadata styling */ +.audio-player-title { + color: var(--text-secondary); + font-size: 0.875rem; + font-weight: 500; + margin-bottom: 0.5rem; + display: flex; + align-items: center; + gap: 0.5rem; +} + +.dark .audio-player-title { + color: var(--text-primary); +} + +.audio-player-icon { + color: var(--text-accent); + font-size: 1rem; +} + +/* Audio player duration/time display */ +.audio-player-time { + color: var(--text-muted); + font-size: 0.75rem; + margin-top: 0.5rem; + text-align: center; +} + +.dark .audio-player-time { + color: var(--text-secondary); +} + +/* ASR Editor Table Styles */ +.asr-editor-table { + width: 100%; + border-collapse: collapse; /* Changed to collapse */ +} + +.asr-editor-table th { + padding: 0.75rem 1rem; + text-align: left; + font-size: 0.75rem; + font-weight: 600; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.05em; + border-bottom: 2px solid var(--border-primary); +} + +.asr-editor-table td { + padding: 0; /* No padding - let inputs fill the cell */ + vertical-align: middle; + border: 1px solid var(--border-secondary); +} + +/* More visible borders in dark mode */ +.dark .asr-editor-table, +.dark .asr-editor-table th, +.dark .asr-editor-table td { + border-color: rgba(148, 163, 184, 0.3); /* slate-400 with opacity for visibility */ +} + +/* ASR Editor inputs - blend into table cells */ +.asr-editor-table input, +.asr-editor-table textarea { + border-radius: 0 !important; /* Override global rounded corners */ + margin: 0; + display: block; + min-height: 100%; +} + +.asr-editor-table textarea { + vertical-align: top; + min-height: 2.5rem; /* Minimum height for single line */ + line-height: 1.5; +} + +/* Sticky header for ASR editor table */ +.asr-editor-table thead { + position: sticky; + top: 0; + z-index: 10; +} + +.asr-editor-table thead th { + background-color: var(--bg-tertiary); + border-collapse: collapse; +} + +/* Custom Number Input with Subtle Spinners */ +.custom-number-input { + position: relative; +} + +.custom-number-input input[type="number"] { + -moz-appearance: textfield; + padding-right: 1.75rem; /* Space for spinners */ +} + +.custom-number-input input[type="number"]::-webkit-inner-spin-button, +.custom-number-input input[type="number"]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +.number-spinners { + position: absolute; + right: 0; + top: 0; + bottom: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 1.75rem; + opacity: 0; + transition: opacity 0.2s ease; +} + +.custom-number-input:hover .number-spinners { + opacity: 1; +} + +.number-spinners button { + height: 50%; + width: 100%; + display: flex; + align-items: center; + justify-content: center; + color: var(--text-muted); + background-color: transparent; + border: none; + cursor: pointer; + padding: 0; +} + +.number-spinners button:hover { + color: var(--text-primary); +} + +.number-spinners button svg { + width: 0.75rem; + height: 0.75rem; +} + +/* Speaker Combobox Styles */ +.speaker-combobox { + position: relative; +} + +.speaker-combobox-input { + width: 100%; + padding-right: 2rem; /* Space for dropdown arrow */ +} + +.speaker-combobox-arrow { + position: absolute; + right: 0; + top: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; + width: 2rem; + color: var(--text-muted); + pointer-events: none; +} + +.speaker-combobox-suggestions { + position: absolute; + z-index: 10; + width: 100%; + margin-top: 0.25rem; + background-color: var(--bg-secondary); + border: 1px solid var(--border-primary); + border-radius: 0.5rem; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + max-height: 12rem; + overflow-y: auto; +} + +.speaker-suggestion-item { + padding: 0.5rem 0.75rem; + cursor: pointer; + font-size: 0.875rem; +} + +.speaker-suggestion-item:hover { + background-color: var(--bg-accent); +} + +/* Markdown Editor Styles */ +.markdown-editor-container { + position: relative; + display: flex; + flex-direction: column; + flex: 1; + min-height: 0; +} + +.markdown-editor-container .EasyMDEContainer { + background: var(--bg-input); + border: none; + border-radius: 0.75rem; + display: flex; + flex-direction: column; + height: 100%; +} + +.markdown-editor-container .EasyMDEContainer .CodeMirror { + background: var(--bg-input); + color: var(--text-primary); + border: none; + border-radius: 0 0 0.75rem 0.75rem; + font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace; + font-size: 0.875rem; + line-height: 1.5; + flex: 1; + min-height: 0; + overflow: hidden !important; +} + +/* Fix double scrolling by ensuring only the wrapper scrolls */ +.markdown-editor-container .EasyMDEContainer .CodeMirror-scroll { + overflow: auto !important; + height: 100% !important; +} + +.markdown-editor-container .EasyMDEContainer .CodeMirror-sizer { + min-height: 100% !important; +} + +.markdown-editor-container .EasyMDEContainer .CodeMirror-focused { + outline: none; + box-shadow: 0 0 0 2px var(--ring-focus); +} + +.markdown-editor-container .EasyMDEContainer .editor-toolbar { + background: var(--bg-tertiary); + border-bottom: 1px solid var(--border-secondary); + border-radius: 0.75rem 0.75rem 0 0; + padding: 0.5rem; + flex-shrink: 0; +} + +.markdown-editor-container .EasyMDEContainer .editor-toolbar button { + background: transparent; + border: 1px solid transparent; + color: var(--text-secondary); + border-radius: 0.25rem; + padding: 0.25rem; + margin: 0 0.125rem; + transition: all 0.2s ease; +} + +.markdown-editor-container .EasyMDEContainer .editor-toolbar button:hover { + background: var(--bg-accent); + color: var(--text-accent); + border-color: var(--border-accent); +} + +.markdown-editor-container .EasyMDEContainer .editor-toolbar button.active { + background: var(--bg-accent); + color: var(--text-accent); + border-color: var(--border-accent); +} + +/* EasyMDE Fullscreen Mode Fixes */ +.EasyMDEContainer .editor-fullscreen { + z-index: 9999 !important; + /* Add top padding to ensure toolbar is visible below the app header */ + padding-top: 0 !important; /* Reset padding - we'll handle this in the CodeMirror element */ +} + +/* Force hide speaker legend during any fullscreen mode - comprehensive approach */ +.editor-fullscreen .speaker-legend, +.CodeMirror-fullscreen .speaker-legend, +body:has(.editor-fullscreen) .speaker-legend, +body:has(.CodeMirror-fullscreen) .speaker-legend { + display: none !important; +} + +/* Alternative: Lower z-index approach for speaker legend during fullscreen */ +.editor-fullscreen ~ .speaker-legend, +.CodeMirror-fullscreen ~ .speaker-legend, +.editor-fullscreen + .speaker-legend, +.CodeMirror-fullscreen + .speaker-legend { + z-index: -1 !important; +} + +/* Target the specific fullscreen container that EasyMDE creates */ +.CodeMirror-fullscreen-wrapper { + z-index: 9999 !important; +} + +/* Ensure fullscreen editor is above everything */ +.CodeMirror-fullscreen { + z-index: 99998 !important; /* Just below the toolbar */ + /* Add top padding to ensure content starts below the toolbar */ + padding-top: 20px !important; /* Increased padding to match toolbar height */ + margin-top: 0 !important; /* Remove any margin */ + box-sizing: border-box !important; /* Ensure padding is included in height */ +} + +/* Ensure the editor toolbar is visible in fullscreen mode */ +.editor-toolbar.fullscreen { + position: fixed !important; + top: 0 !important; /* Position at the very top of the screen */ + z-index: 99999 !important; /* Extremely high z-index to be above everything */ + background-color: var(--bg-tertiary) !important; + border-bottom: 1px solid var(--border-secondary) !important; + width: 100% !important; /* Full width */ + padding: 5px !important; /* Reduced padding */ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important; /* Add shadow for better visibility */ + height: 60px !important; /* Further increased height to ensure buttons are fully visible */ + display: flex !important; + align-items: center !important; + justify-content: flex-start !important; + box-sizing: border-box !important; /* Ensure padding is included in height */ +} + +/* Ensure the editor preview is properly positioned in fullscreen mode */ +.editor-preview-side.editor-preview-active-side { + top: 60px !important; /* Match the padding-top of the editor */ + padding-top: 0 !important; /* Remove default padding */ + background-color: var(--bg-input) !important; /* Match editor background */ + margin-top: 0 !important; /* Remove any margin */ + z-index: 99997 !important; /* Below the editor but above other elements */ +} + +/* Ensure the editor preview in split-screen mode is properly positioned */ +.CodeMirror-sided.CodeMirror-fullscreen { + padding-top: 20px !important; /* Match the padding of regular fullscreen mode */ + width: 50% !important; /* Ensure editor takes exactly half the width */ + background-color: var(--bg-input) !important; /* Match editor background */ + margin-top: 0 !important; /* Remove any margin */ + box-sizing: border-box !important; /* Ensure padding is included in height */ +} + +/* Fix the split-screen preview to match the editor */ +.editor-preview-active-side.editor-preview-side { + top: 60px !important; /* Match the editor padding */ + padding-top: 0 !important; /* Remove default padding */ + margin-top: 0 !important; /* Remove any margin */ + height: calc(100% - 60px) !important; /* Adjust height to account for top position */ + border-top: none !important; /* Remove top border */ + background-color: var(--bg-input) !important; /* Match editor background */ + z-index: 99997 !important; /* Below the editor but above other elements */ + box-sizing: border-box !important; /* Ensure padding is included in height */ +} + +/* Hide speaker legend when any fullscreen editor is active */ +body.CodeMirror-fullscreen .speaker-legend, +.CodeMirror-fullscreen .speaker-legend { + display: none !important; +} + +/* Ensure the save/cancel buttons are visible in fullscreen mode */ +.markdown-editor-container .flex.justify-end.gap-2.mt-2 { + position: fixed !important; + bottom: 20px !important; + right: 20px !important; + z-index: 100000 !important; /* Above everything else */ + background-color: var(--bg-secondary) !important; + padding: 10px !important; + border-radius: 8px !important; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important; + border: 1px solid var(--border-primary) !important; +} + +/* Additional fixes for fullscreen mode */ +body.fullscreen-mode { + overflow: hidden !important; /* Prevent scrolling when in fullscreen mode */ +} + +/* Ensure the editor container is properly positioned in fullscreen mode */ +.CodeMirror-fullscreen-wrapper { + z-index: 99998 !important; /* Below the toolbar but above other elements */ +} + +/* Ensure the editor is properly positioned in fullscreen mode */ +.CodeMirror-fullscreen .CodeMirror-scroll { + padding-top: 0 !important; /* Remove default padding */ + margin-top: 0 !important; /* Remove any margin */ +} + +/* Additional fixes for toolbar buttons to ensure they're fully visible */ +.editor-toolbar.fullscreen button { + display: inline-flex !important; + align-items: center !important; + justify-content: center !important; + height: 40px !important; /* Increased height for better visibility */ + width: 40px !important; /* Increased width for better visibility */ + margin: 0 3px !important; /* Increased margin for better spacing */ + padding: 0 !important; + font-size: 18px !important; /* Increased font size for better visibility */ + line-height: 1 !important; + background-color: var(--bg-secondary) !important; /* Add background color for better visibility */ + border: 1px solid var(--border-secondary) !important; /* Add border for better visibility */ + border-radius: 4px !important; /* Add border radius for better visibility */ +} + +/* Add hover state for toolbar buttons */ +.editor-toolbar.fullscreen button:hover { + background-color: var(--bg-accent) !important; + color: var(--text-accent) !important; + transform: translateY(-1px) !important; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important; +} + +/* Add active state for toolbar buttons */ +.editor-toolbar.fullscreen button.active { + background-color: var(--bg-accent) !important; + color: var(--text-accent) !important; + border-color: var(--border-accent) !important; +} + +/* Ensure the editor toolbar wrapper is properly positioned */ +.editor-toolbar-wrapper { + position: fixed !important; + top: 0 !important; + left: 0 !important; + right: 0 !important; + z-index: 99999 !important; +} + +.markdown-editor-container .EasyMDEContainer .editor-preview { + background: var(--bg-input); + color: var(--text-primary); + padding: 1rem; + border-radius: 0 0 0.5rem 0.5rem; +} + +.markdown-editor-container .EasyMDEContainer .editor-preview-side { + background: var(--bg-input); + color: var(--text-primary); + border-left: 1px solid var(--border-secondary); + padding-top: 0 !important; /* Remove default padding */ + box-sizing: border-box !important; /* Ensure padding is included in height */ +} + +/* Dark mode adjustments for markdown editor */ +.dark .markdown-editor-container .EasyMDEContainer .CodeMirror { + background: var(--bg-input); + color: var(--text-primary); +} + +/* Fix cursor/caret color in dark mode for ALL CodeMirror instances */ +.dark .CodeMirror-cursor { + border-left: 2px solid var(--text-primary) !important; +} + +/* Also fix the caret in the actual textarea (when CodeMirror is not active) */ +.dark textarea, +.dark input[type="text"], +.dark input[type="search"] { + caret-color: var(--text-primary); +} + +/* Ensure cursor is visible in all markdown editors */ +.markdown-editor-container .CodeMirror-cursor, +.recording-notes-editor .CodeMirror-cursor { + border-left: 2px solid var(--text-primary) !important; +} + +.dark .markdown-editor-container .EasyMDEContainer .editor-toolbar { + background: var(--bg-tertiary); + border-bottom-color: var(--border-secondary); +} + +.dark .markdown-editor-container .EasyMDEContainer .editor-toolbar button { + color: var(--text-secondary); +} + +.dark .markdown-editor-container .EasyMDEContainer .editor-toolbar button:hover, +.dark .markdown-editor-container .EasyMDEContainer .editor-toolbar button.active { + background: var(--bg-accent); + color: var(--text-accent); + border-color: var(--border-accent); +} + +/* Markdown preview styling in notes */ +.notes-preview h1, .notes-preview h2, .notes-preview h3, +.notes-preview h4, .notes-preview h5, .notes-preview h6 { + font-weight: 600; + margin-top: 1rem; + margin-bottom: 0.5rem; + color: var(--text-primary); +} + +.notes-preview h1 { font-size: 1.5rem; } +.notes-preview h2 { font-size: 1.25rem; } +.notes-preview h3 { font-size: 1.125rem; } + +.notes-preview p { + margin-bottom: 0.75rem; + line-height: 1.6; +} + +.notes-preview ul, .notes-preview ol { + margin-left: 1.5rem; + margin-bottom: 0.75rem; +} + +.notes-preview li { + margin-bottom: 0.25rem; +} + +.notes-preview code { + background-color: var(--bg-tertiary); + padding: 0.125rem 0.25rem; + border-radius: 0.25rem; + font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace; + font-size: 0.875rem; +} + +.notes-preview pre { + background-color: var(--bg-tertiary); + padding: 0.75rem; + border-radius: 0.5rem; + overflow-x: auto; + margin-bottom: 0.75rem; +} + +.notes-preview pre code { + background-color: transparent; + padding: 0; +} + +.notes-preview blockquote { + border-left: 4px solid var(--border-accent); + padding-left: 1rem; + margin-left: 0; + margin-bottom: 0.75rem; + color: var(--text-muted); + font-style: italic; +} + +.notes-preview table { + border-collapse: collapse; + width: 100%; + margin-bottom: 0.75rem; +} + +.notes-preview th, .notes-preview td { + border: 1px solid var(--border-secondary); + padding: 0.5rem; + text-align: left; +} + +.notes-preview th { + background-color: var(--bg-tertiary); + font-weight: 600; +} + +/* Recording notes editor styles */ +.recording-notes-editor .EasyMDEContainer { + height: 100%; + display: flex; + flex-direction: column; + border: 1px solid var(--border-secondary); + border-radius: 0.5rem; + overflow: hidden; +} + +.summary-editor-container { + position: relative; + display: flex; + flex-direction: column; + flex: 1; + min-height: 0; +} + +.recording-notes-editor .CodeMirror, +.recording-notes-editor .editor-preview, +.recording-notes-editor .editor-preview-side { + flex-grow: 1; + background: var(--bg-input); + color: var(--text-primary); +} + +.recording-notes-editor .editor-toolbar { + background: var(--bg-tertiary); + border-bottom: 1px solid var(--border-secondary); +} + +.recording-notes-editor .editor-toolbar button { + color: var(--text-secondary); + border: none; +} + +.recording-notes-editor .editor-toolbar button:hover, +.recording-notes-editor .editor-toolbar button.active { + background: var(--bg-accent); + color: var(--text-accent); + border: none; +} + +.recording-notes-editor .CodeMirror-cursor { + border-left: 1px solid var(--text-primary); +} + +/* Recording notes editor base */ +.recording-notes-editor { + display: flex !important; + flex-direction: column !important; + min-height: 150px !important; + overflow: hidden !important; +} + +/* During active recording: fill available space */ +.recording-notes-editor.recording-active { + flex: 1 !important; + min-height: 0 !important; + max-height: none !important; +} + +/* Notes editor inside accordion — fill expanded section */ +.recording-notes-editor.accordion-expanded { + flex: 1 !important; + min-height: 0 !important; + max-height: none !important; +} + +.recording-notes-editor .EasyMDEContainer { + height: 100% !important; /* Fill parent container */ + display: flex !important; + flex-direction: column !important; + overflow: hidden !important; +} + +.recording-notes-editor .EasyMDEContainer .CodeMirror { + flex: 1 !important; /* Take all available space */ + height: auto !important; /* Let flex control height */ + min-height: 0 !important; /* Allow flex shrinking */ + overflow: hidden !important; /* Prevent CodeMirror from growing */ +} + +.recording-notes-editor .EasyMDEContainer .CodeMirror-scroll { + height: 100% !important; /* Fill CodeMirror container */ + overflow-y: auto !important; /* Enable internal scrolling */ + min-height: 0 !important; /* Allow flex shrinking */ +} + +.recording-notes-editor .EasyMDEContainer .CodeMirror-sizer { + min-height: auto !important; /* Don't force content to fill editor */ +} + +/* Recording notes textarea fallback - constrained height with internal scrolling */ +.recording-notes-editor textarea { + background-color: var(--bg-input) !important; + color: var(--text-primary) !important; + border-color: var(--border-secondary) !important; + flex: 1 !important; /* Fill editor container */ + height: auto !important; /* Let flex control height */ + min-height: 0 !important; /* Allow flex shrinking within capped parent */ + overflow-y: auto !important; /* Enable internal scrolling */ + resize: none !important; /* Prevent manual resizing */ +} + +.recording-notes-editor textarea:focus { + background-color: var(--bg-input) !important; + border-color: var(--border-focus) !important; + box-shadow: 0 0 0 2px var(--ring-focus) !important; +} + +/* Ensure all textareas in recording view use theme colors and constrained height */ +.recording-notes-editor textarea, +textarea[ref="recordingNotesEditor"] { + background-color: var(--bg-input) !important; + color: var(--text-primary) !important; + border: 1px solid var(--border-secondary) !important; + flex: 1 !important; /* Fill editor container */ + height: auto !important; /* Let flex control height */ + min-height: 0 !important; /* Allow flex shrinking within capped parent */ + overflow-y: auto !important; /* Enable internal scrolling */ + resize: none !important; /* Prevent manual resizing */ +} + +/* Dark mode specific adjustments for recording notes */ +.dark .recording-notes-editor textarea, +.dark textarea[ref="recordingNotesEditor"] { + background-color: var(--bg-input) !important; + color: var(--text-primary) !important; + border-color: var(--border-secondary) !important; +} + +/* Focus states for recording notes textarea */ +.recording-notes-editor textarea:focus, +textarea[ref="recordingNotesEditor"]:focus { + outline: none !important; + border-color: var(--border-focus) !important; + box-shadow: 0 0 0 2px var(--ring-focus) !important; +} + +.mobile-view { + display: flex; + flex-direction: column; + height: 100%; + overflow: hidden; +} + +.mobile-header { + flex-shrink: 0; +} + +.mobile-audio-player { + flex-shrink: 0; +} + +.mobile-tabs { + flex-shrink: 0; + overflow-x: auto; +} + +.mobile-content { + flex-grow: 1; + overflow-y: auto; +} + +/* --- New Sidebar & Main Content Layout --- */ + +/* Sidebar Container */ +.sidebar { + position: fixed; /* Changed to fixed to overlay correctly */ + top: 69px; /* Height of the header */ + left: 0; + bottom: 0; + width: 320px; /* w-80 */ + background-color: var(--bg-secondary); + border-right: 1px solid var(--border-primary); + z-index: 50; /* Higher z-index to be above backdrop */ + transform: translateX(0); + transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); + display: flex; + flex-direction: column; +} + +.sidebar.collapsed { + transform: translateX(-100%); +} + +/* Wrapper to prevent sidebar's own content from squishing */ +.sidebar-content-wrapper { + width: 320px; /* Fixed width */ + height: 100%; + overflow-y: auto; + display: flex; + flex-direction: column; +} + +/* Main Content Area */ +.main-content { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + transition: padding-left 0.3s cubic-bezier(0.4, 0, 0.2, 1); + padding-left: 320px; /* Default space for the sidebar */ +} + +.main-content.sidebar-open { + padding-left: 320px; +} + +/* When sidebar is collapsed, main content takes full width */ +.main-content:not(.sidebar-open) { + padding-left: 0; +} + +/* --- Responsive Styles --- */ +@media (max-width: 1023px) { + /* On mobile, main content always takes full width */ + .main-content { + padding-left: 0 !important; + } + + /* Sidebar is an overlay on mobile */ + .sidebar { + top: 0; /* Cover full height on mobile */ + z-index: 60; /* Higher z-index for mobile overlay */ + } + + /* Make buttons smaller in mobile view */ + .mobile-action-btn, + .p-2.rounded-lg { + padding: 0.375rem !important; + min-width: 1.5rem !important; + height: 1.5rem !important; + font-size: 0.75rem !important; + } + + /* Ensure icons are properly sized */ + .mobile-action-btn i, + .p-2.rounded-lg i { + font-size: 0.875rem !important; + } +} + +/* --- Tab Navigation Responsive Styles --- */ +@media (max-width: 640px) { + /* Mobile tab navigation */ + nav.tab-nav { + display: flex !important; + flex-direction: column !important; + gap: 0 !important; + border-bottom: none !important; + margin-bottom: 0 !important; + space: 0 !important; + } + + nav.tab-nav a, + nav.tab-nav button { + width: 100% !important; + text-align: left !important; + border-bottom: 1px solid var(--border-primary) !important; + border-left: 3px solid transparent !important; + border-right: none !important; + border-top: none !important; + padding: 0.75rem 1rem !important; + margin-bottom: 0 !important; + margin-left: 0 !important; + margin-right: 0 !important; + display: flex !important; + align-items: center !important; + white-space: nowrap !important; + } + + nav.tab-nav a.border-\\[var\\(--border-accent\\)\\], + nav.tab-nav button:has(.border-\\[var\\(--border-focus\\)\\]) { + border-left: 3px solid var(--border-accent) !important; + background-color: var(--bg-tertiary) !important; + } + + /* Fix spacing between elements */ + .tab-nav > * + * { + margin-left: 0 !important; + } +} + +/* Custom Checkbox Styling for Speaker Modal */ +input[type="checkbox"].speaker-checkbox { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + width: 1.125rem; + height: 1.125rem; + border: 2px solid var(--border-secondary); + border-radius: 0.25rem; + background-color: var(--bg-input); + cursor: pointer; + position: relative; + transition: all 0.15s ease; + flex-shrink: 0; +} + +input[type="checkbox"].speaker-checkbox:hover { + border-color: var(--text-accent); + background-color: var(--bg-secondary); +} + +input[type="checkbox"].speaker-checkbox:focus { + outline: none; + border-color: var(--text-accent); + box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); +} + +input[type="checkbox"].speaker-checkbox:checked { + background-color: var(--text-accent); + border-color: var(--text-accent); +} + +input[type="checkbox"].speaker-checkbox:checked::after { + content: ''; + position: absolute; + left: 50%; + top: 50%; + width: 0.25rem; + height: 0.5rem; + border: solid white; + border-width: 0 2px 2px 0; + transform: translate(-50%, -60%) rotate(45deg); +} + +input[type="checkbox"].speaker-checkbox:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +/* Dark mode adjustments */ +:root[data-theme="dark"] input[type="checkbox"].speaker-checkbox { + border-color: rgba(255, 255, 255, 0.2); + background-color: rgba(255, 255, 255, 0.05); +} + +:root[data-theme="dark"] input[type="checkbox"].speaker-checkbox:hover { + background-color: rgba(255, 255, 255, 0.1); +} + +:root[data-theme="dark"] input[type="checkbox"].speaker-checkbox:checked { + background-color: var(--text-accent); + border-color: var(--text-accent); +} + +/* Custom Select Dropdown Styling */ +select { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='%236b7280' d='M4.5 5.5L8 9l3.5-3.5L10.75 4.75 8 7.5 5.25 4.75z'/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: right 0.5rem center; + background-size: 1em 1em; + padding-right: 2rem; + cursor: pointer; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, background-color 0.15s ease-in-out; +} + +/* Dark mode select styling */ +.dark select { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='%23cbd5e1' d='M4.5 5.5L8 9l3.5-3.5L10.75 4.75 8 7.5 5.25 4.75z'/%3E%3C/svg%3E"); + background-color: var(--bg-input); + border-color: var(--border-secondary); +} + +/* Hover and focus states for select */ +select:hover { + border-color: var(--border-accent); +} + +select:focus { + outline: none; + border-color: var(--border-focus); + box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); +} + +.dark select:focus { + box-shadow: 0 0 0 3px rgba(96, 165, 250, 0.1); +} + +/* Disabled select styling */ +select:disabled { + opacity: 0.5; + cursor: not-allowed; + background-color: var(--bg-tertiary); +} + +/* Input and textarea improvements for dark mode */ +.dark input[type="text"], +.dark input[type="email"], +.dark input[type="password"], +.dark input[type="date"], +.dark input[type="number"], +.dark textarea { + background-color: var(--bg-input); + border-color: var(--border-secondary); + color: var(--text-primary); +} + +.dark input[type="text"]:focus, +.dark input[type="email"]:focus, +.dark input[type="password"]:focus, +.dark input[type="date"]:focus, +.dark input[type="number"]:focus, +.dark textarea:focus { + border-color: var(--border-focus); + box-shadow: 0 0 0 3px rgba(96, 165, 250, 0.1); +} + +/* Placeholder text improvements */ +.dark input::placeholder, +.dark textarea::placeholder { + color: var(--text-light); + opacity: 0.7; +} + +/* Description text improvements */ +.dark .text-xs.text-gray-500, +.dark .text-xs.text-gray-400, +.dark .text-sm.text-gray-500, +.dark .text-sm.text-gray-400 { + color: var(--text-muted) !important; +} + +/* Label text improvements */ +.dark label { + color: var(--text-secondary); +} + +/* ===== Video Fullscreen Overlay ===== */ +.video-fullscreen-overlay { + position: fixed; + inset: 0; + z-index: 9999; + background: #000; + display: flex; + align-items: center; + justify-content: center; + cursor: none; +} +.video-fullscreen-overlay:has(.video-fullscreen-controls.visible) { + cursor: default; +} +.video-fullscreen-video { + width: 100%; + height: 100%; + object-fit: contain; + cursor: inherit; +} +.video-fullscreen-subtitle { + position: absolute; + bottom: 80px; + left: 50%; + transform: translateX(-50%); + max-width: 80%; + max-height: 30vh; + overflow-y: auto; + text-align: center; + padding: 8px 16px; + background: rgba(0, 0, 0, 0.75); + border-radius: 8px; + color: #fff; + font-size: 1.25rem; + line-height: 1.6; + pointer-events: auto; + transition: bottom 0.3s ease; + overscroll-behavior: contain; +} +.video-fullscreen-subtitle.subtitle-shifted { + bottom: 100px; +} +.video-fullscreen-subtitle-speaker { + font-weight: 600; + margin-right: 6px; +} +.video-fullscreen-controls { + position: absolute; + bottom: 0; + left: 0; + right: 0; + background: linear-gradient(transparent, rgba(0, 0, 0, 0.8)); + padding-top: 40px; + opacity: 0; + transform: translateY(10px); + transition: opacity 0.3s, transform 0.3s; + pointer-events: none; +} +.video-fullscreen-controls.visible { + opacity: 1; + transform: translateY(0); + pointer-events: auto; +} + +/* Fullscreen volume slider - white themed */ +.fullscreen-volume-slider { + -webkit-appearance: none; + appearance: none; + height: 4px; + background: rgba(255, 255, 255, 0.3); + border-radius: 2px; + outline: none; + cursor: pointer; +} +.fullscreen-volume-slider::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 12px; + height: 12px; + border-radius: 50%; + background: #fff; + cursor: pointer; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); +} +.fullscreen-volume-slider::-moz-range-thumb { + width: 12px; + height: 12px; + border-radius: 50%; + background: #fff; + cursor: pointer; + border: none; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); +} +.fullscreen-volume-slider::-moz-range-track { + height: 4px; + background: rgba(255, 255, 255, 0.3); + border-radius: 2px; +} diff --git a/static/img/dark-mode.png b/static/img/dark-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..423c600acc3594a5566a815d40486a5310b8467c GIT binary patch literal 337744 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

7)F&h?(js_& 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 z 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 X9*zEPn0(jO#Vh)d6_lnJ}vsz=iF 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≥}D$2Crf$&_`i&m&Ik>G*n2DK8a?;*Y(*-^>d6MLcP z=43JW^jL9-LRe<%3#JejuBF{X%Zq~}0u`(aP>C15_e?j~?k0j5saIpxYgdg~jI|%R zM1;6p1W21DrIXShvLxXkyZS#Zyaw zLj89N-o+(5-{>5%r(onvzg$upd+Fy?iH#LmD3)tvpay#f8MDX`q;flmYWY5%gJzt` zLfWZ-0aDNUuGu9pvKxQulbkAfhkh5DgzaX7CaUWH(Bl+x>sPDT*y?Q zowAAZ$L3v1M1zB>j=AQso?$6a;(kk~9xb_}cct}!t&B9H{UY0vb^G^ko~Kpt{$p!T zs}eww1U+Um9L&U1Bbo`d4ww6~&9^&2Co*+P)2gz2kc%yBz_)!%nAvgP7Gs1FdatAf z_>bEFPw$ui2)pM~RiX_~cdDT}DVyG3oCxGyqV9F;YbG zdqR3tHk^d6X#*G?)18CXL$P4uz*oLP-zZU~fb1PAjaPdDt{2E> zdQEIt&(^@qaNP{@<432fl)`t#48wx`PR+`lq({bUlYEq>@is@y()hAGU;ySXcCYBA z$g?!7^)^s3P)PXkW<<{(!*eY+59-3CB#L}PEEl+?8bLDvwH!HnyG($J zpUNP{!2e6beQ9ObSe+Hrr-v^cQCN{L)lrxefYVkEWe|OT=GiNJR!%i4C7%d(Iei%6 zq>jMmG#iu1?O6mn{+&_o&db|dxnu*Q279?)mlIQ^GCbUZry1I zaSxtB-0jlQ9q}P(?@@2q(H(}R7e&Auw4219H=os+h+WIdY8P4@`zY(Ys8H$xu(6}W zN8F4sKm4mb0?Djqx_|Rn?v(O=xNrjR`K-km+6@js%0j47^EDE6Y^Ztv^QCQH=HmtI z!m(7nU>=;A9C&^S3PzBQBSkI}Feo?)7(W`4XApi9cMZ!y(*eU8IZkv%HAnV0Ly;dOE@#<7B7r)E>*z$88wmwrdn%y zs|EMyx9#KsT?_J3ML;Ss*V3azA757UNKEqTKGY21-{C?k_0pfM%nZTf1o3L`f`hpY`c6>zeLdC>j5T4dny$md|%@q634i zPWk4ngPhM$wCZ^e0NnH$71Pm>?`6hm$N+THRDk^!Kz;x1pPaXTgpuHn&v0Ofm{hD; zlHmX&j_vEfd5+>hW;YK+z_v(;d76-8gVeJLedu_4lTyPUwo8@R$^CE`>mvwV@7^Rny1%jQV)EAVW~jZ-C(OM-{W-2o zxJ@$+H2HXe5g+ z1u{*`9`6Kzwg*{j89c7-{-V80paa^D^GqDky};WZUA=;**o}6Fg{ReY9)oBWsI()u znSzRsL`b#CIG@Dy3(ibic58l7dR}j~ve5J)Jn`ppIxVkV<}r8ph&vrwc#ZMShZFPP zci@Mn?p+{(KXxsRt@4@IK!WTOOiuI3XyW|w>lX?p+6SNxongi6x;?Rcw37OMq8cb2 zPy`q}_W`J(L=seH`lAtZ1I5fR=do*|zuFaB98zXJ;_$V6Z*!$_IVF);wof=TS!u@x z6kn)b1S!Z>X(<_ML`B7ED`gJM>-}B%+Q9M`0MI2?VgKbG(q zBJ~|w872>aQ3zyq0EZfjP~u5%nMx(q>0m$ZUt-$)jo{>5yZiQ>&~@FhydV>q!mV*N zT_T-EraoYUefh6^4b(~RakZ&#(69ID=|R5p%azUaw&?kMXpFipq@h^_HBKFalDU;E z4)-nSpuYJfw6y!OA&1GdSSHwv&DV+dZx{M#P@eXkX%31j-(cs2>{Lvso#$RhYDE86 z<&h3HoC03+8Oqu9z8hOZEeAkeZ$2gE*XR)fmIWh6k=qoT%k$w$&ii8_waWI4LgD@K z`Xb<Zc!s@Av3Nnni0xJzJ*!&O8}Q^w)MWQL%=HFk{#JZ;0ViYVL^6C` z+&c%+S`DH)RvUKiZNKWhqEu;~iC78GJWLpfFnt9hnWT;WZh95#5ksdl{$audu|;@X zK7$|djV=&_K51^5=u~8NP0CSqEq@X?D{!jwR%q^9*HK=Vg9{-BzO*lY&C+PCL})#i zv8wtv**p-Yy&!>Ksg+^D|E(d5Vpf{QC9uf_!ljN{gxsbR9z|q!N}1xF={&+Sg+*sO zFb4q8$|yaQdTTBWlh06a9VP-^Pi(^XsP~6J6l+bM18u*a`zn74mD5bJ^X(gf6ae_U zRqd9IjO5CD0faVYrirVUaALHsE0rE2Jl(0IK%ZzM9LK-vEIAZmtKV%;AVljjMry0L6^b zQ>iz>e<>v)N&0uRW0M+L+Db_<*{TnXnXAC946EL?!>G0{M|6+7J0pS4~Db45yK87hJfAW); zPobX%h3m)MVYAKnWPOLlKDN>{XLpM_?P*;(RTic+qI06XhVL24@`D`D=@V7n%qH(2 zq(H*E(1^McpfvdU?`msWc}dY#NH}|ya7NIc)9TaI&Wb<02n|EggVwwv;rzFwfC1l+ zcK64UvBxh^6!-`L1C^qa7N?rOPM78fD+qFH$4>)UqT3IH9qwdOPFD|1st~Wcbzdo! zo7~jbSu)z}7H6@+vbXmIJuy4}HBr+%w2M0%suU@?aT2lkB*-{cojKs-z#wTp_){Ej z%gg=Y>WAH7)Bmug1aw`=K0TF&#~KeL&6j*MS1F=Q$^tuCb)UX3bCwWfTLGaC3(o2u z2}5^+u3Y!ac+4(c|8wXU<>eMh(6<+&y#>gu}UnlhecJ&QV7 zxrGwISy2TNAoL#y_))|HQYaT!gV-UJpVxe}b$)ge2Y)dcjH7ibSPsZ0ld_J3rj8JE zdZiKmhXO81M3wVZb{v)Sn65eHSEF0dN0&o{K`u`d9NDmMYDMYv?(x?xR7E%}lJImq zAYSY59FD@3^gh?lpk94(@F9nmY0@&L!f#cpi!9+bo|s>_d{L>W7Wn1R1pDSZi76mw|4H3H(ND#uN1i0ep{EY~s&0^1 zM$Sq^1v+Fz$f<2@Sar)HaC{+)i#Z{xFTH8~u+K3l;0yx!{_^Es7qbi(Q{Go*}8QB?OFr$u{*kr6fNQ10gV|e{(wzn7H3>UNwqybh0yB~0sH&|LjaeU^)#S*3A_uE%P9Y>Iu0nKIRcijW@MHm zKomjp3r^T_(qM&kGt6!l>CHi-5W8T!Jcb_KK^b6033M35i~x&WQ?P@=;sx)r>zHr8 zCj0tK$j8RvbNhMv-1YFX@lT=Ebfuplfmg4)ZSKjM+iq3M9QZX@&A3Qalcuq&z1A; zHyc<|bkG99-v06_{=A-oj0E7{Agt5U?evm;T=b{gZgvv9feF;Ci^7?8BI)vEf_j5h z*i%;dcvAO(41iuw(3cOUsxOo%VZ0=YxRJWudXf>w#$^f>(NKBur2nMD}B zs>Zrh4$H}GP(Mi%CKrT6$4~6Es(DZnDKjoizD`-AbYH@_h}+H*JYD^VV@ax7 zNjb(xe5)^kI$yOfSN^Q6IK@X(ShMSQEf)WAt5KxE>FCxg`u|K5vK z4}o_u;B;u5yOb}IP6( zv_FL)x$(%atbMBhE;wCoSn)Q5^x92pm?JfKp(!OgrDvL*u6gi$ZO&m&_)RpK>tP*a z05^MY*udi50e)13o{f6?VMojay}|tf?THITiHu>yGoaF*bykJ zGy5UdaeR1NPS}MiT1&8JOT{4;E%O|<-)D-8{s5Zd@VTd!b*6W6sWz)jvNCKc{l;4u z3bivW+9;psH9O!z#n1i%-V9u+&j16`Y(}z`=Oc#gwSaI1XV5VEH~+TNDj|{W6ecg< zuzfgs_Vva9l}rC)_PL7ph%d9Q@aRQSRCqV%?09NkT;z_SzvB=VNl*AI-+iMPe2}u+ zi$@#z;tpEL;<$rh*l=9TNR$aC3K-E#Yjs}E0*s#w%5-NHJMED{(_rLV9(QdKD!k|f z7BTmx2hTU#Wh}>%482$adp`-1a5{`ZTqz=Hx_jx*DGx($A}kSP)#gl#42rMtL0>v ztE~yrvOuSM@TJ^NT&tS6#=Q{N-ZS?)b+U*5XxgXf&HJU z*>5d09eY4`$ABs0g8!~lE)p~`U+NVQf7&v%qKoU6e%Ar%U`m`Nro(3?sS_@@Nd@Pu zwMdhvl|yNo0EB#YZ3KYA;{QgR(*HlX@`ThdtGaK7SJa$j*bw!ERMn#^ggE)znpihH z`wN_Mo=EpafQ`k#&3|y{`u}aaV&PQ};@V-y=`y5#u`R-8Iz`P5TO6OVsR_@YcFlZo z{_|h%10NDTY>`N++!n&o`2Tcl`K+S`rGK)JPOn7zwSJqKtvuE^8fN(J?&q5&??Lj&CW*l$KI&*?A9Gh$Y}@{G^P|W9 zQhrglvUT>UpFi?bC;a!Y)1lj4P!Ce)759JN%DvZg86}nOC?|40_@Q#;(FSezc=Ngc zijNzCkKoV~%zsC8hyLo1fAu*`29qA_br_z(da-)zqh!N z7KrBA&d5=Uu+4JbYvHF_@K$k1^Nxp@krrh40{Is$HRMV5%!1Y%8}dcx_1?fK{*YQP z)KmlsKk4B=&BJBIENvw~zh2F)KN($ZBt`1p`=^YA1g)O^1uUPRE)YvJ=yl5Jcp`&W zsK*jCJlI-8`Axh*DM+oblovlqE>jjIxgBczWPChOoZvwWdFtCy&fd`4nCsk-0`}N! z%(f?Udr89YvNuEGV#h=*(8#s^zo5I{Ws(m9FLQeCFou@O)7|ky_dqj@`4(QZcHAXV zB>wBy?ZLzbBF}?;t0WFh)qgSx{UMIVb3V+6n@BBZUKK2}FpS&FxoxiT15|w#h&POp z9cAO;p)jOH1|X2$tht&c#6Ww6c5%=1j_f=CjG7{DfGsoUK`G~_iL(5Efi>Ts+rlpJ za<^$U*(lLWPmB-5(SHygLxY~#bognm^djHcw|fH*qMMUXWYLLv6*V8iJnq$0w)x^a z*w_+xFPIBSKegA9G=UrwXF!o(d?IK~!X2|Es|L!5lY#hqr>L=8D`ub1#%&wwm%TYy zxN!Ts=KsGqi|8niz>PsrECUZ=Q6f85$!@#1mqa9o2-URwp8y%Bap3aX&5jiC=;qiTY&v3?PadUaV!!Qt=Ftqp?{#7<|L&po4cFui z`us{ZxX$pSOcl*Nlrt?d>Q66vTyA;Rw;8u%CIE8qVBc0si^!_Dr$n_;mrqwsW!b`}ZcE4%ZPcSm7^L6!_=xz_ zejg+vzb~pkoDcaigOr#!s&uK=;o;H4<;J_uYyg1D`6dw$+w}Ss7nU7Rr|)hSrtl;& z)2B24EMUD?bh-5gjl9=)___7>f3i8A-j3w4#Tt+j`xrwWp9{82&imTa*`~c5B*I&B zu7MHitWYmhSiahGv>J{p1Kr46s?1JINBgZ%YQ=B~Jll$2{d$FWUN_`mM*2OoQOEP9 zTGua^h%6x+g*lG|()&9_S!I-< zqDtCuk;eNdhLFNz2lvl)t#;kE&e0u*-cA!R15dN{Fd0C7iL6n~8}NQYuwvNh1r`ZLWvG9qjE8 z4_2XrfOwcpFvJS3R32K7*eect=$6pZj}GA4iz9La%UmDv;_db>>Dq&<{=!8CX}CtZt6lH}8h`$BoGHP(&Q~e_&I~dfL~fg?S-;k(EjXl#BKq z?6*qJooeu)>iS$;Z;68dH^lWEWMfR`d5Nc&?$08Dnr6p$=ZS>JHJG`wq!oPdWNrC# z*@+eYs@iA%mrR@;4ZJDG#T%Es6t;Oz{X4gm6WUu&-cg0T(*(g`$Q=4Y!6|EwMvm!B zsY8sqGFQDD2%iRE(!HR0KQO)q%pdasboPfo^oZ-mU`%fjH-5&4oX!X=lNvCdZ* zR1wTAkE&gA9?;Q5}C+H$3by|cdYlz;ITey}}^~(BBUZdV? zwRdJ%Re%JOc8{#b99BJ6yqjQ(4&Jx+i-RX=C>OiO_GLv5wpoGYiFAO#ZbW!giGDKw zATQrRCLJPNw_x58ZK=!cn~0BZ3x1~lXb@@pS0#ZWW5!0!J{t|n<|sr zs!kU@PeN+h&3VpEUr144gS6ASP{DRy29vU$>`lujko~@nNjH7btaYl7wYQrhEVH;Y zjQ%5!JxZ)!zr2S=hruYf^H%q;tQu;wx#4-8wy8Aw-SG1|%S++k3Y4g_QNXuARG=?o z(b{gtT9@}8P(8FEftZPdT!Mg2lvy>Qx#FN?98{Ilvq&tE)z_Q05Ch#RtqA77 z>>O;ZuZKE%T3RWfxMB6>*Y5#|{8A2F%KA`l>C%I{AEa7V(Z0Y67~viZ$)zR524|L% z=1N*9i^_8Pd3S$83T2rnpf9h|!XBM8PfC=kR)}#0e-zF@qHhcad$EN(yF8awVyxEkk;2Q zrX8Dg{>GrJSUXSX7xCa890^2fvrqC z5u2|KT100!p^?nhE-u^v5*An2+<3`a>##P8|j*7-X~y8Z6w{9`C3 zGPFvi9PI<~=YgUkU|UJX6kw=)mS;cI-X5r|zWHC&UXbhSr2?8f|5Jw@9U^a4r*a+_Qg#>|xaB%(my zi5zIEStD;Vh@N29Fy{NGC_{42zpLghYUs_(Jg;LFuE$Uu{`7u#1#T4{Eo3!iEk70! zv+uAUx&5Az4`^sk)!rY+p3%QA5VqzHY zzD1$Kas}Yyoy;e4rI|VQ1dy3Z?X9AD>{3M;XJcQ5l30Nmcq1p0?E#p%UKM=E&+##G zWGJ_*SeC?8#|L+^@B_RWe^6ou^`5=rD>NA{%jW+3ctMFPRg~XmHMA6{wjR8ArL~gV z8zR<^=S$;X8(3HRcL(KE_`1FEM=xB1UR~~WYT2%Xm34@MU~P5vLEBkgb)14JM-KpO zayOZ+RA#KVvVZE+6ZHAGErGeraxOec+U5)vB0;fJO$I~k_>GN%rr>j8VY^#-&wa`8 z4ig}RBXJpg;_Jz@r2N!0oVqp`Y$VDDPe44aX=odoIm69HrdmcE7pirN-1!~BTQNu8 z)M@4Y#%9;w+asX=%YtcV{%}zTUSHeell5%#G+gx*CWM5Hs(3B^7mB*8YKOb~PD(M) z@|t=|pn4&{VtiZ!hcpEd@h$hwLo-cTB3ueHR%c@K@cnuaIhwMd#3Cgf)cb(ZxOCc? zY6(03Y_55^+JP-~^|D#Th&N~6)Inl$LYDcM3Sa4fp?9e<_h1{E|LGfl$Mf>es9@}bg3TOMwqxU{x#3)&kk4) zUlfElO#gU072^4RXa}A~%TaBHsKmHxc#5r{&59KLYi~b8MU`jHif%N?bo^NQzhzW(EE>fNjdQ$-?rrzXn)+XHH9V)o zVLLEN)vM!+vT`d~anIgelIm~Q^6bD`3p?fash*|o zo4WL#TVZwQMSKrQfw61l6dG}uynh_^TAkwthe{qOL7sEebeZ>Fu3%nTU?Xijt$nNw zeb9jXe%5Ng{(Im*m)RQXmFA+aj^SUuQlKn4h(BC{F%M;Y!F=&C0+Q`TsP~diIVE!?CTga$;ZRj41N$Vbqdyhd|K_m9oZxK+XF>srvt?u6s zCClO+lG(QmzqP!2JW;Bg<^JjLy{THOox=Rf`aPr`{Qg@HN%p)2c(IK>pli&V90!2t z+UVMMixiyNZD>jTbjr4R=BNh{JMT!x*4sGn!$j^T^!48yatv^=H(g=8=gg`Vcow=^ zP$xV7;Oy+na*#KW^_@)kdECJcxqXGtb8)|vTE4NQGOxi;`n>Un^sM#rp4iSA77~0L zt7~&p(BVhd5DKTgPG29*&XACWJ|2RS&#cGJIE3`l1w?w_Z>>}|C z73V(sI@QBg$fC$6-jP!<#ecb^>uXoO(QLmI6m#q$lHEfU8x zDS3g}crwIME*gw2;Daq3IbI-exoiDYxKvJWSZdgE%Vv0tQA3f>*mo|f1XzV_)PG%mS@#oPXbKD&hWL{RI*A*S0=sMq`! z)zbT6Ux-N!j9lSU_{rQBDFRTKKnQ_WvuDI|wr%tYfv zCJgvocA^7WW??<&WZdQE;R2(>?-MMj-uRdRDozd#&yIL}$bVY0f~$ZVdt@YI@0ZkdlRCGDf3i(fRhys#h%2c5y5MvV`zPo~$@vHPdzbu@-U9hE z+6%63zi&PWW(lmmuFk>5^*@M0)wY>_M+bQqSQmwKV@Z2?{oAX2;XrN6W{Vdi7~u6) z;&+lmTJIl0q7OlMIC~drt{||1F5TVMRA7NPjL6c@s#mXuV*QeX!rKg#ASX01;!bve z?s(^vH6w>>#g8LuS|(ML5fS%srndm`zzVwqN!19ngCC)x!A?EN2GFc+@#}As_QWWR zC^YJR0=p$zwvxhreu`fJLPJInV_^}r{7_!|k!|1*H&$+b{8Rdzg02hC7y0~m1cB9GiT|qwnDuuy zW9vf7f<}B)LhprxKpdyy6BQA?RV{_t-2!~gY{NyanP*VZG!>cH?NaeJ!LT0c?0J{Blx?Goyjkul8H0!yECQ%uQzHtNI`m(Bj$xh&FQ(5LOAPqaH+}G zoG&>$eZhexA2SXTsJQ>4u>8k&5#s6Cg_Gho2&VMp#SWGZOBDK7rEwAu2D}i&QATzK zzM2+h`fv`yDwJwe-6@iY=VaPln@sIpF#{N$fu5?sdYB_yJ45lSUb6hsBsR~nLpEe& z0a^@eJx$)M$vWNWsu!%UUhfDjkRV6-cfa1>wz`^h&h|{?Hl>?BZ6`1*j{=R6q;F$a z?*(_qdU=0(-df%K(Mjy*=jY4pT1WVe=jfgS68xu-Lj?JN^iEsQYBG)WrZ$e>!+n>4X zn7+di6xeBh@a?>mN3p}Vb17bQ$RB3Tn*2gUo|KdA^fMX8g;OPQ>u66*6(cM5 zR8=$z%wR^{0_>>;)A0}DRG*8@PoC?)^S8GIcpo}Mtt|#cAyN~v@ypRSJ6x5D@X5^T z=LHM?d{0KPd^p)9WeP1ThAaqbw^D6%g_jHYmkku#c%$l`>xm3Xo{!dpBjE$N;b3g4N)k$ z;jWUlI_5oEKkcjO!%V)_LD8iy8->ly8bBWBM5{k*fI=;u@45hamuCB0Mjth_ zt6GQMPd=QZ1#Fv%B~V(4{&MqtC*@uS>a8;#&6PeEb=IkPJRHH6D76fbP5%{s9x~?V z0`+i3)g~;~Z**rPfX*C$?jx#f1t3ua7KdT$wno?qyuMXvFg|#O-)k{G%;VF8Gdg3e z$~L*thoa(aJ!nUm?mWKpbpFEwU8d7f!HG??~ki>y9;PGBOijT*v?^m-fytQv%Jb)fja1|XguGwW~>_k!p8Zmd$Z1z zOEQ#OG~*)m8q@kOH~a28UpFrEm_{aOM?x&NBT`Cc_a#e8eN$hfN3s0Zt=H=2+t*T; z!I`I@#wTQZThf@)*o31+ylD3&pdqf(slVG6Q)E&d%Eq9w(F?w`g<%1@T!!JR=w*4i z_M7>E!!rnOdvDd$ZK!w|gh>nlb%~ef1OG;9IV|v&LgpQ=OI)L3#`y1>I)p+}Utuf+ z3zT)hTic(&JMm(A&*{xUMQ{RPc8$14ky$fua)0j0ToeDN6s5fgb0VBWXjFK z=G>COkkq?{3#18@F;U^`xR5PFt4>+{pbK_upkQ~$T?tKR{y;b-E_E};;+4XtO7t19 zVQv|Q-*$JM9xH)wyB~xco~o)Ht%6Qtn+4QsY$1=@b3CcQE>SMhB{*paCF!ZdZwZsa z_?O(!g(gSqR#5!lGcK&v@(pH~I1R$BC6y#Xl>RWUk#R5<~^()x<(9yXs4hDaW)rxYakoy#m+T8++xtRdI_tnCX&FS>< zVSxak+?lm!Xy*j)tLw%#hjI@9vS!WV0MW`M!mjb0Etf^#-X*>MZu%I4*T&a`extPP z!7dr-uS)=vC~Y>P&R$CqAe61HzZYNst$u$BmkqET)F&(+{C1Ov_wu`Vn6BbFdxqmH zC;+aluNty?M`}0J>%Wg1Oux;%HR^nS5l!OS5}eZ;S(%^lJPxmDSdGxB9A0yGue>}y zZG`l@B1eIR>_GwC#q@c?xx?;?Rf9R7N)B=%^gE$0zEBK($Y)^Ypv|Y!)CCfNPPzds ztk7!jm5tj#af{TG69>exdiVTp_{vyp4ar@T?@`3xmXab>oy2hvV1Q-7nZUy_m6_ln zJ%kb#9Gzv2e71o5Q^*a+KNg+C)*#%xBIepayS}5-mMgU;)r>^sd2e?D+KJfXx;tzG z5_HJ6vFrI(7+R9_kN0yeV$SK@(3J2|KaQWIDXmJ|9cMY=cyuBZR!KjvTNQ7B^9(|B zZR0V>M>{3y%w20<3#8eDs)G`NAsWD`pe2*TD;W;M3$jr2A>-pzL&?KZ%O@FS)&wKU73&cx zFpCdWYrqfW{FXX)N{$PG#M;F+)DhQTlX^+lfx_M&Fuvv=l49|HqrN+`M|wlN_z_LQRfqM}PIQ>uN|fQAc*f`pde^!SB9^1F~;qoDW^> z6!K+w0Cb!)7yV2&EIh(|gRIOR=DG>Oxi0Celc?^lbyLcfB! z=(=d4D_B@4lf#acrIhkb`Ov@fBsB)9Trk%zTG??deEj7lrd9so^)a?>6M~=St6wKl zK6+_K&otXA7P?NKkGCeFMO%@Rgq7ktE1n4|2smM5gu=@$ed_D3eoy*pmscg_Tt z<}5+-V|3SE{uOMTt#TB(z2)nDz~DhupLHNB;^Oj2($XW=}P~UQ%r^?yCSWk?HH!| zf(vsGrPRKAeM;B0ud`?Gy?s54m1o^^Z;VNTVEqI0_dZrjjkIaR7{_Y+e*@g4<`dd@ zZl-y-!aK<{HqyLXpzfB}rm{BKdfM|A(BNc0Sok#jX0QN4!_k#y5^)99xWo}Bp)ArZ_!1$jD~x2RSEPoXDzTxV8lddDC~I)tIc2 zSJ3Hxss(&J)|Y2iw%@5x`r>}2B*+WC=()Z*m3)1!p5#DxDPQo1Rg9$WTH_fizK}0U zNPAqIq*6Q4`U{IiYvRM%Qm5~0G-^`Gmp?zc6Ev$oIsCU+U=e*RNj#>$&gCaj(aT)` zu1`0jEM+YVb%5gaNf%*rJA1b{9nAfo)2DD-UL^B&0sYkbjhAZGZ@w@nd}6d_R`a;p z6(`F@Z1L4Dx<@rX`a09dD?q;*Na8q#A&fGn3gf2GSOMZotA20H_&emt^q4&`q|NNa1c>$gxFzXdTG7C$X7Rt!Gkwml#;5@cqiQAhgT`5Gq3ZGySws}Ri_TR|;0 zBYVD2XA#8?^~ra{x!MPBj3NFR$+xf%RSxj^oicKZaoD@n44s4q%ax2zd?MOW!NQ|8 z79E)afo1SlP{j9{=JmSq>r)?!o(~4LkTc<1wGqrDB!MG8QoV0t^Y=??gJZ(%3L}1H z9ex41f!Ja_P3Y=DW)rl7Z{SV88vd5@O%@AorCath5Y z=i;OQR3YH*q?uQ(RrYw~Xb6)VQiI=~R+LHfZ}59j1ijZpbV;6v-f|QrflFxHQuUJm|Y72%%{@sHfNHr77}nLos=RH7g}rW9%M zc=+f|Er-6MEc4lHn~~&$L`r{!mF*;YzQ-Lp60#fr<8Z^wf+}tXtvs+#t;Y({9=OV^zB7m)SVR z9bSwtL|1aw^#?suQHgQTjiwKvN@IM0t-pZER-GNYVzjOTc)=345vNyt~uK)o1|b z#*>H#yH%CFN4$#F8kU%5QcJmfj|QbkyS)1@Ud$a;%YO>?!g3pXcf-oTwFx41>5q$3 zsaxa_FU5lUtD74$%_8OT3X|OQx|F`2cdCLfE+Nc`6$rNCY{=0*JcbQQh=2@``b^)< z&UJ!ke|7d_<;G|wk5yaRyH&=O%IU#oRd>5yt*eT^QmBbmkv?j_`$l>D4p&g%Uk54G zZe{zi<*lu*@v#M8>RW^9G_PYF>r-VrcA+LJ)izzc4``f#50YY+0h5+^NE_y~Ov>r@ zfrqrZQY32zuR(Eq^jz0qjElxjt?K`6&v}(&0ikQp=L$_VIgfKy#SHU1w`8=OQNTdW9q76_ZcuGLe--V) zDV`s#JGxajHQ`!Clm0SToB6y-(W~(~CY`nx3}stW`-S3Gx5i8P zbCYnYVEyi2i?4&-7jq`F*^}}SZJWiD^)_(^MR({!3sL8+L1u+QhF z`gk;IzHO^tlL1?f7=B34Wa0fuXdcxq@?dq6UD$r|NphQxUea1G8TAXhIRSJw8{P8! z4XJ6@cEhxykq=kB>}b|7vcB7Kzg3Ox`l;29D6MNalFFC)pqL{){w6^KK%~%=x8;Wd zu+RxkCJ)~=@-Fj;us?lwm>w6`*C&1k|9EUvbrfDxwCmG2!SkwdtJgW{*eQsHdw~3_ ziv>y^4xD;}=`Jx{-98Q{{jw7;p2NGR_Pn?KAYr_fCoHD2+D}s3QHBsv#D2hYzfO1O zX^;nKfc65BAN1xKHHvC_ zjzRbJ)gk(zt)y6UD`qDy68)a`_OAsZGu%PV9!RBF%;dqit2XvZvL>_ERGmNLla951 zaDRGlJFtR$vqQEHg9VEbaxg&Zt4*~=Y+|ABm7~%3G>Tv3u;ze;=garZb;N9iGWl3(oHfm3{eAY-S03=fc|>k> zE4s)+6&n2XCHD=~wDNKNB75p9FChN>UAdGnw{(S{;Daz5TRQPUs)5$#La+oD?>Ea! zm|FvZxVq@~=7nT;2`(zlk%RHIWTtX^mRj;h8|fq{dheCL?rFDf2{N9(0$GIR?|k;c zzG;}k1j5{T8&RjwEHemC-lMx0%J2a;dZN@>5scWK%}O0_=epe~!z`q0xF_RmbMaD4 zY`^_FE8PfFny(Fumd{}QG)N3A=_f|n03o3C@;#SUREs^LOol1aj@_lUnJ=+mHr$|5 z_GVr5cjd^+BXicW8?CpdngB}D_4^7gDVFbWh$@ekP{Nbn${dQctl`M0r=5Gzo9|Wa z95L;;CxsgyuJ`CYR`b#2kGJ7KIhL-ghX_^3)~H)>>Tk=YC4w&A5p1luk%Cf1!@2nf z(Gv)VpiY?Q42cVwMABL2Z$|%_kmck0J~m312{Udt>De+m=2>#~h<@q2a(TT5ziqH6 zXom_dzD5Ge>#m+?x6NOs;8#GwGqg>vXwy2WaTsWxAy~VzT?Pobt8B`>nH1-hU~s5& zDZe(aV+;GY5@C?{oo6s6LFfB?jKj5gXRda`#~E z&DgLzuszEH)(44Zeh$SAz3^tgNMZw9dIGX^MeLt=JLv6mewaMke2l&^a-PlFtQ4`i zfd3>7kU**}V1LOnKh~#jTh###BLmd8??ss11V4W>f!3i`QV44n-@h2;bJ04pI!T@K z{=G7H4EDLF(Df7SycGG3Ka+nVYWzJ&Of~j)v!wwk^t_Kj|6FKr zQ#1=@X_4V5;C(+s*|`#+jeNqr+*ijPZ#M|Jg(3*qZf)ahAB=MMb(Gvjm<)D)EMcHTK*B?koJ854YWp=#K8iC>EYJ5eA*mh%KwB1S$|7j?aL=ZcY@wgKu@|ePdF$mamPBJxUA*5*>)0 zerw}L0BCxYNM98HA+2=y1KgsLrnP;iO$DW)5?S|4BC)_oFI$*0gwc;hyz}zncBL!d znElY0sd<0W(tjIhYy0ktua?eD^wAfc<`p{ElqNDHpnN5Os)gz9s6!B);ZN0a_n=&Y z{xLaF0XAs+piyjAB}J$Q`w3z$Q(Bb*s?`bJY7Lv1A(Ihij3bou4`@qkh2%dkQThFM zBQ3KpvVD}2c{Q@oj)XZLf5PZFu%nj1kfikg$JSd$#nl8|qk|_{aCd?Pcemi~8r46_b%`gGT+>aMEZwVQoiE^~;XzD@&RLK%!Z z2GC;DX&pZ}K8ASe3Nu>o)WSl>V~^Z*Nox4csMVzCR3o)Mt^c;EL^W~js$##E##4I# zg~a@Z<1nQ}x1ycuL&QkrD}*X@@-hyd!LY+eWFJx2<}$HHyDRzE(tC`;UbCZ2qEGv9 zC$@zM{AzpqCp1L%I+Mvi=+w!7@4{MVUD4tXET6-zuX-FbL|lVkTwjAa(}F{vX!{aF z_&nMS6{D~AW_K?Boug;bXRNh-{5f&do7_>?oBHi}v>$p#JMl@VJ+dE^g;m4fZy!b$ zz9?LyE}hTBwh{VpPwmp=HD8Zs`G+QS+p=xV@oY5zb6Sx;xpI9iO%iC*&UW&AetP=r zs`fw#PFk?Ss%W>w-_$s%8C2Q1p3v&aU7=NWZo}!Ef7{tWbY5@W?=oX@`?T(?=CBg0 zEBh{a^UnnA@UfB6+|FO`Po5SsN83AWmZgX^+W)!7THGKxOavI+qI`0N{zw*kdxJhN zj=3vOE#|>{~6~+pRKcu zFOpmb@B6QhMn77y!51$Ajs5f@7YzPwQsIsb;Yv|Bz`kXiH;Fzjzy9M#O>bHaI%jN} zBt0Cx)}Q|8(VM@60z5tk0CA}Nj$hX^y4zno=^E04fgkxtqLl_MEB5u#PSd9HfBpQp zG!-pR4{8hbU^_6fd3K3+#pIuUH0&y>vC~^c&}c?fv^E-X&Tf2!050bxDVBxC^Ld|WOw7-K zy^^+m?7)Tkvoybdurn*aG3ZVTygAF`I75!HwTdGMpw7?~LL)C^&p6yaQwh+_!v3al zyg)9d9aZutcCCp{MO%pX^C)vo;-F3~)B@q-pL&hbxSfUSf#coNV}X;@TWnjJSPw2* z-8wc)Z^@p>deFj%WMdGItJXhCT6VjhL{Mr&g4@}G#Q3Z2#%>Uc?Go;%-K}(Zj6*Wu zMI*MDIS7aazF83Tp^lKhFbx*U)GjhQ?_M76XfKtw3!n) zzxj?}FOx~>yu3_(erjj8Y@s%(Sbdqr+w;Y&ylmHo$fyL?SoCK^pMML}z{8|h3OU!G zKb7$~HIdptr&1mfnJEw#0b|YL?K~sLw}ouXEvnkO0Y8LCtZgiP^1Nct6u20$3-BP_ zr*RMQ=4vc@y6;r!Ys(WkA>`+i-{oQ9JUcWu1OQg&-q$?ax{q%sdYaVL+V+8>gV@78 z#gXTKQA$iKYZUOIoP707gGB%F#{>h= z=~Y5KlM!?GFbm^L8kB;BEf3?_$!$o^C}z1f)yru(zGwZyAXAS_@I4*D5r7C{?@sT5 zg0Uy#bJ95Uk!A&51Ug-a9%E$ZJ(-&KoE;KlBJP+Ofekeea~L;Wz$#mwlnwsAt}RNO z3R^k!`zBjI0^D@sHz>eg)|Eu0woMnbT}vI3R0haj^eY`2?Z1mkr*1duV&>l8PTU|! z_Q+^GC@aP_`#8D2TdZYi&I-P!qonCQootxPBkyRCPM%HjE`y6>&}r6P^bEq30N%YuLXzsi%DG^a-1cYcuB(Q_e>fC9y8#lm~}+E0X0+-1w@& z%d;&NliP=>M9#A$?`Q*aB1>*w=Ev8NfkP@Hj~{3y@7AL`H zVoHH-TCQj2=E{&bntmZwF`b$q@^;WH!JZsx)2`n%{@)y9*9+Pwe_t_#)&E3RVR2|x zS^2=^cnnHq`6g(!vm_E<`Pdl?%EXx_mo3a z3EzGoIGHZtvF|GkHyJtdZU0{i#A)}j3?>%FD1dMAFxyb*pTp`^;erKq3T=7`$c zSJZ%-sZ2#+SgVKU&ipW-G2^@hNR{Czqn4Suz_Zj z>S+DuVcc`}iY-{v3cW*-i_h@TX@qz$QOR?CWLbNAOU~V5ZBzLvQ!l+QNmqIBQ|~W8 z*Gfqtu=roJqTf_mPoKL~ zv>`hBQmWK&e@-tYmV0Nn7NlKx!fpU25PfyAAlYRf%5b^M;ykukMFb6S!l{41A8yeu zDQu530-C-QWonnjFWDkUB}wR}+;>m>!uiqPmhx>Fjxfc_mRs-e zuXn}#34z|vt;ut%x^nQd>9gf3n=Bxtt!&wo#GF^LH2|ax=GR#|je~n(^}}#`D}#+o zGnTCEYM9=a5_hh5C1${b-S>6lK*O7c16aOkG)Gmgfrxw|-8x=Fm^uGC{GG7%1-Lk) zKXw>JU|t-)QjmOZC;y8DkS*RG{c;a>dz62@!}Gjh^;-Xsb$(ujAp1i%{$y5^2i;S5 zs0(qIFIy*rMQS9sx$a0$aZk;U!9Ib@{>aUSA)M3h_bpG@ip?3j+2B;g$hu`_3QIyN zcG+GKYAYL;2{ia-gF&)Tdu-sSNq5Sb?VPH4C({>T>u=T2=Lek%Bj3aIZO+h+{3OhfZ3CeiPlh@&g_np)1E z20YtB-@`UAE7t4xiUP0wu&;Ya>-WtV!L_C$+&KkctWb<-_{Uw7qV zj_f(o%;N66<<>qfLeSdrE{`WY9lz(BY#DXH%W0w4d-%G0*d)ZW`2um4aky1squs6R z6WwxXu$cCD%LX9qW>W*aa<;>NG`rbLw>N!%qyM@XX+8W&j6;9$W`rp-EW*RCx`Y6v91b^Q-;Gjn1Gd?# zu^#@4^7wJ6VBIX<^PAR}Ujb9GRn@rw<^La;?|eraN#cTvuJ@ldQ1YKRGDcj*l1bV^ zrej~KZTpa_KecRO|2ie{Zh1t}8wULU0mW+ND#XCW^-iArNYasqxKQJ*_)6FwW>JAD&`xrsC4rx>R_XYLqV(+h&0nU16Yko!6OyW6^Zf(2JQeYgz5ie6^6%=qoy#rN-);kF z-TA3oBaVO{MG^+%BXg1+&D|!MUM=cx4<+LTg$w8p%f=mdfnp2pz5f9bppbCrAi}`D z3V*hu&}frTL^~i#>w*IZuq-r(%tK44L~;8XigAdMG8mtF()WMHo|utN)C)Sg{nGO; zd0%C^ICV)iNdHD-Dlfkj!qbDJ&5c9Nk8Np{5mYX)NUQju3PBZ4cwN#k)Clm`wg+m(Z%1 z*IO2v>6is!tC?GECG5;IMiu3HHKJnjtT(PuFW4tT-%6ZucjMMP*?|4HuTSCF#47DC z_F71zm&I||G}2lLI>7gGc>X*0<=zR^u7B z(j+r{1TPvZ2M=?{RHN+2Ajq-C_A(?nH4O(b`$ZXUbT%Hs$r zpL06?op-oWdI8g7Pl`D`8%EpHT=bbZ(F)4StVX+G;dsl%`6ORKA4WmHge;~CaI1|& z_VBClgvOQpG|h}&Y^w{1Q?2@2;7FH9Uz-L>`sz7jej}k5GW~@??PoyGA}M{!(yK!QcCj57DtF=G@e>bm z_w5JQ=|%8WAlQ=;^wMcyLEDThKf?cSyt81NBILaQZcVL^gx>hwAG9b_JJ~STkzWQ*H^%&jD zvAo^xBz5x1*d103ZntiSmC;(D@Ib-+aY}b`J1H)lDs{t{;>u^ zHtT${ord|H^N~6VS%>Kclj6Q@LjtikzR4uF{#TX%px8O1J|c1FL&o6}m82Tk8g()Kib4%`Q$H$Ps*A`f3hs7#FL8+Z!Ww#G-$%!Kh3R2);nlhHClYMEoi;~n(k?%g(%#V^~0|lGME1h zQ<3|p@oy#jMS_B`>Def58=JRa0$rNX{Z`pRK4kS!tU}8Z5_$E3@&q%a(+4N4$40PF( z(4%_ummt2ix~~Y0X3A`@5s?d+%4&W|73_jvt7^QoDL8$H<*8lV8@WiFg2k(0AmHf@Y6m_ z;W3!Yo^(lCq#;qpk62^EKAH&SauO|K1caeSifpGCh$Zhyc_yE46z)cDP#v(>$1#YZ zEh?YEe@fi-$vL*qB=}`ba5#^?NQ&R0O@W{n6(^!?EfIw*eU9~;1KiGdmp`>T3(2x| z6w!31?wJ~Q({3*t&9+eF=NE$VQ&Gx6?N*dT>Ib^w`hH-BLS81}yA6A`jV))nWBX0^ z0_@N3w!GKPMjJa3=A!jHCVc_JII!;A;^&cbLQD|cwC3!|iPt%N$6V{jq+qM>Xbkye zAgURttiai`QE7A8yn?m__?%>mfJH6k^0X4i+}v#ibo^d=ac>%AfYQ1@=>Pj?l4suM z7jp@RFa52~?=}5@M@M{FNTXL>`pyFU#Vj+lF%t5yj$d^jASo)u=)*|s}R72ACv9oDrlYkIYYU|ExjNx3p z$7X}zbIYtWYI8bXXXSN7hU6TA@WQdouApiM+Z<*{jhISiaAZMKS<051LYRT6GElj| z^t4oDbKo4gA1?Yi&-{}7p)^9l%9e+UqrQkXX2O@_n0uDrAV6Ag1s6mYBL49%ESJzh zIC0B_thq5n{WVrN`*+wrIh;X2i}dWC1E@kVnlevy1jq7A^IOL0EV>!uT#x$88>2Rb za|r7b0f70PB2`kgUKP{Ap){iC+tLm1E%Hy|WV|ng3~GcUJlSH7hrdZp$7XY~6~F-_ zkemsGKst=ouGBKgRJGSTeK>sfqx;Ic`!Mp7s1Yv4U#w-*H%tZCT)41~4tGtutY zi!P^678Hp+7M;p44Qoim$zIp?nBP;Zv%Ei}v0=lo3djr> zoJa!wG0?s#Ej!$SW#>B#&d2`1s&`*MDgxC*^KPXMSQRZMzGfh^lBLN4bIGg{Kk0EX zS^J;6UwqF`FQk96(v%#a0QjYw&K;&?;Zs$DU=bugeUn0&n4%pkQG~jZe&^~FdbX_O zx`;v5K>NmmysGFluG0HIp#(n=@X(=I0wQsKR?j5z@4=dz_TW;F89-(z(xkdK*jpDM+(2F}{6I*gxI)$VT^d z%dx@~w=onm6Hldt9rww^W|Rjp2Q^|a5!v4h+oXLhQJMV7GDl1axj zo1T%L!{$bzfQm|lxJmC5cs@L1oCedmiYR^aZ*}Ph0f9C5iH$^|RPaq2ZuMy9nsq#) zkIMyh+ms8rEiobsQ?beLC)wf&S)zP;5^?$1SOEC@^$Uf^U`Z^SKD4*WSdkPkUzJ-* z^L%4l#Y}Oy#*&Rj7w%TiECU@j=+CzO^@W8~9DOUVm^mow0<^386696YXl8`m&R-&q@7@ei7 zynPFvsa#K~FYDx{PDv5**@URq@~~7GZ45dh=<4nJ{!3y*o!Q%gXSx`uRzaIbUcTTt zPMOg@2$t;8@8w%DKzn(bn8xc&P2WD)o%cb~Z>y*E z#)#$C?2AHc0+#;F-L=h!UKEhu?-=fzsv9~5D$YMccZDh_lID~?Wu5PPcwsUL>A~%} z9M(hVsBvgbxy$aKqzVe9;d}=mVK5?GWNz59Em@qNR6nO+@BGNC{l4$ku58}0=wra( zZ;lw6-0^tKvoN}-&q((rFn@tB$hTDwdOZgxM%PCbpVk;cFK7s}U<9)u6;~GhbY!Fg zz(6*hQ*a9Ik9|_FQSmTqZ^Nm_k}t7DAdB*;5sclrXaSYr#vLY*ehZ52@B|qcluPC; z5pFa!h}$;wO_(BYNNgV6S9)@vHHH4SUKI3-h|gnf;(#Qb1^>jYR^hN0vXLq=C}V@@ zQ^Lss3STk}#v`^)jTL1X{%&6P8$S)W!%o3x)2OmE?4KyCc7N($aqof59!3rd!QsXE zl%5nbC#UbVq5VfR3Yy1q2!5(zJ;_hvT9{$M$DUV->6^XWpu@>WD3j~mHj6>Tws=EW zbh~X67D;f*HpU{po9Ss64eNawTcP+q^fgBr5&w)3b5Ys7YNCrVeBdK2TOfGq^wB2l zM!d;EE4Pyy?CJ~=D#_z-(dKsgh&~XN?cVTX9DaeZkv)3wV&fiZJohA7F2$!Z;A>*= z^BNt}{gvyL4xf7hl^*%P+xQ=6UtMnEchz%b2{frv@wvN5NN6pimhejoGh}swm;d<3-QNCyMA5e=oyNzeV7DDX2}ga)|@=Fz?Io! zybA8u&(vgw-j4ui|iFWz90V)O46{bYM(V8Q`N#`UqQ^mFvTyw8ci zA0@NRN^L0fDC88f271E@=!J+kZ}rLt$soG{q;+jhOWm~#8jx%t0f}ZuT4$LrrAu4x zlob!W7sJHXPNH!qG>eSguE}C1)YD*P_e{HcQOELdJW3AmkVn=M$Mp5$b^V!RD}^2q3je0Qqt{*e?MF zheu!CW+(A+AmWj{O#LSOD4;K^7D`v{^~x4ty{}^Lw1A3-92)UxJpih}29R3i$yd-O z)s6*M*fP5IHnLiDB;6>wi6=DqOBNN@DQTnmc$=EB9Yo+muyM5#u+-n`QGTO>sJNx! z*H(Sot`lAe>HPA*2ZRs$XqYfeyB2|uzYU`4!}-#>(KhiLO`8auAQO!n`V1jWEA%6| z@c&cjFgu|7sz9rHqXe_p@gkdUbb(vtuYERfB{s?+hppG2+h-(zYXhwhUXE$7c3 zRjN%SvAWWevo%y?P94|)!4w*T%_vY6q3wujkdes403a#SWIg|S5Z8L^81r{SVIDsZ z`kJrP9To-S@_sM&F2Qx_>Pao9CH%d(VSMg62dEc$CH%#6U*MJi$zF#iZWYO4*A0Zg z^pwX8%k%qfPAzNoA#@|nA7YBGaI<5w-k>KG#E|370n z8$7<&TxO@Da+)&jub8vj>%5f(-ldUn>8I9$cA_^Eb6dytbmwWM?KnvjK0|0>f^+{> zIr2o};c^FGsK_%vV1S9})Wtc`+O#>iP$8O@84mb7Au=vhcY0so_FQl!+F*8Q5%sHZ zp$|Ui+~D*zdYylw7bvp++%s4TUH%t_KH(4-8Of{Di3cdJ2@NW&sqWcf%=w*pn{%w~ z6v^w6efHuG8PS?NHXL6cC9Rj+UQjkWn(riRP&g}e`g4_w6ltiS&}%xk?tiK-Tz`71ZtZ!- zSn4&dt{?~t7jQT+yO(e_0Kx`K>)uOP0e@f=Rh;U_lV_Wr)yPgpRIZuCTl znF!H>5sZb{vg|eTbmhxoKFT@>3(-Azr<*O7spr3?NHWe?uA?WtT7U~Nx$Y8;a{c0z z-JP`0UG!_d&D-|&GiWx;E`Bw*bgC$(_v(L$%*0W~i;0e9ql3D-r3G~1akIe-*v8p> zLIw(4$R()U=49kHnMv^=FpJkOG_)P4r}nw+O44dq%btk*up95rOe;2mCO5G zj=x4qPC)dH)ca;y$HAI&)^{`Ou z0HFcF9goEsPv5ML;?4`c6{i&#bzGlOJ+*T~*q4W9ae4h*n}&hRQ%1pI;q|?5A)%=E756GfSzPgNi=+jyUmj>*H z#x1galRka(9S#V+dEK%$b#0R4nt8hb8cy49PdVOE-nNJQh~l?lN!Wq2=p_-E=jq1{ zhyPuF^m$b2;;_s53?@E3hAHWe*Py6@6*S`){iqPib$ebH>%0sYGMu;gSbR8dHQT3W z=l!b@W5yR*ueCZy`$IjpT($9m-|9s zj<>)}VJsawua;jEzKEkcs!_0Vw&;nD;OyvF-dSp##eBwg%u-LYTE~+Hp)ppfdHLT~ zgLj-P7`suweg54%w5J2a%H6{VH1zh9`&i^GGCS-ETonal)31_`wVYn9uy!_Y*+R9$ zuTAre#<$sYqHauk%7bi_WJ4eRUo{-b#0DwKNJi!S>FwQVqJ?mw^p*w?x637>%t%PY zVVm7oar2o9i%uP=;5l2p{4fXp1CZ%sG=Fio1JXHd%@-3QO&~)J3#w>O0oq+T?_?=Z zk7B+a;v}g2kFxXa=pM|>!c=j8+VSZ~Iw2~TK@}Jmw~y0x_iIt*(}&zhAN48^Cu;+L z?rWe&r&-S^OGA~`Q5^{l&2VcTdnz%qFcN410mdb__+0|z{Kudw+g8LoUGjoLQ^$&DJ;}t&5JSIn9%q=Ht8R`9y9i*UaEgeo0hfNTh)vVM+z~c?oD@ zh+n_dm+Cft)uZ|@-*AAA1*Dp%>i=Dr!K7QLp5HW^FT%OumU=Wa8wMv$9ioIDJ_?yP zte#^=DHVbNCD=uDdq3E&F$_ytG`T;gRDj1!=|3nChPqZ|l_Mcae#9%OdXBxYO8Y|A=2L#?B< z9w70Te^@=LX`3N<>m$py57fvP1RSW`V;7cJnPb#1I&30&VDL`J+s*_E!O-7$s(D;x zuc0iYzNQk&V&}E8x-EI!4ZYQ}seJtP>2-xKC3S0Vy?Ifbvt>Q2kA2-UtRWvU=W*qD zPcJrfYhvvr5GSSV>DOKOibPCNG*dx}`u;FV&GXyvy0S%y zZqHUm#`4eqVgbywuYBL>^{Jz@n5Id;J(UhmgMQ$bS6<61#-?V&0jFtdnYC0`X>H_Y zX*eK7^ge0wY{=VC#DBHmOZV9MKB&>aNPCg>%Dzkj5w7X}S+%w%ENVZ(l|rcreCWNl z8Rf?DHrBp6qTKG?_mzt4Hi~2*71BXH-Z}V9<36m}DeG43t%cL$R8)I;zMxiPzSVpa zc3CkyL4gFNmg$yFfV$KY@fN2tYkKx7KMC!`pkfuvV)Ro;)IK1Ob|z2pGzJYnwymvf zeMFlXzw^D*mw=Iz$VGS@1WX&7^L1E1K*4S7GXqyYuDQH4=4Ky7UHE$7uuXN0cv@55 zjgj#rrh45|XS~x!R!|Xn|D)3q_UhegzE$ifN}0{Hjpgm_{X~n}`nWL?J(XVpiPYpp zo5jew%Io^a8wzgUMy}~%ep?=`D^t=W+$BQD9RxsrEhdBiZgQ-5t|4hkemyU90x{AE z0#KxafC=YV``cXA4`UzivA1v(oMTfzov;6qnP`Gf{-A^8_bBLxLRlr7iu$5ziEsVOPRR?BvkZrlK`Dw^yBDfD*?y+bkwyh4fAv zETECfVA;Ft&RO%A65a9sc*G3^;J~7iy0MN7bksB@Ec081P8JEg{&jCV05IDw*&kUG zM!gK-04w`k9=Qt{#Q5xyF9J~UbisGlWKI%;&#k$1cq2C+YY=ajuMF*GXDYJP&%Giv z{suER~|L}ZGNCKy6Pvp z;+}-woE5^eri-#EGc$Q3soMTEeb9k4tz4D$MOi~RS}kuCM1rF;t!sq4?m-q`&Rd{X z9L<_+CS*UcV6=$CQ)s<{W=kbw=RBcFI9D!*929YHSKw#z)zbEGE&-2lMBfZJLmv0? zyr}lLo+j~V%`Rf>P9N1I?cF|tQEW2FLPWj~{OF)u6~82 z0e{6=&nL0zyZ;tqi9(=qJx6iF-gg%%^sYuz__2Hb36wKuDg61)b$LM?$GUOCH&ine z^@TiG(0RfkEh&Rf=U3V5w>MWQ467mRvqT~mK{6vesl6#MKIG($Y4q;U zu$|Q?+tzG47t4wah&VR@sV3<>RvyT1BovkG@8A2XQ;z^ca?|(Y31$5?#&#$OMC6&% zjTL0Q^dF<=#(4M!$8t3>u16i^?0$atCtj`yR_2$YC?g@Z4<=g#Y^}L}=k?qK zq}=aEBn_Z01z0cY!}DUGQHjjWu&$H~93YFk?bmLs$=-L#vki^DbN1oZ{G+KB*DnIm z(jo~Se0Dq{)M#p46yH7(v^;KN|98_t?jz*Yfp`0r)F0QzrD}Hk587M;e)wAuu`B2+ zi#ow%RJ%txw4Ev1%?)Qt{lSi1V>eqMHZ@#uE5fHpGZBsOuprR495Hyu|GkG&mSvEU z#Ul5Qc@yrhe}l|4$2t=E5RIUjyv_y4IO$(c8`l9z|J{)TIzL3`-{S(He~Y@}Y%}dm zzrTg+|96e0jbZlR*aQ9oA_;hxU16Ws6HI5@zt~C8e{>cJN9X@G?#Hq6S?#FAs5~;4 zVeG$~f^dUCRKt@26$EpRlbrCb)SwRW@`^?g@GkjI)1QvNmzQHh<^JEcTqY4*Awa^i zZ}L7@6HCpl$+i49hy(MD1D1jFFR0YEFO4O#Ot7N*$^XRqDH1Y@dv-LVlP5jrT{P;Z zl@t>PMn2>awfQZf+7#5V8Z^`c`p}xq}tl-vfppj-;%`&3Vvsp#}lWUF~ zon;zX>~$jkSA^{Fr5@b3qzOvfsuLP-zj&*q5X5Y<-vbA5{O{XH3z)_-^soB2XYT|sWo&R>zLXfljN&Uc{-dkTW z5x!9$b`Hg4k;28rk=%k!!wU+Fd&zouM+HmLrVWUFJ%>W5v8Ay5^(^B~x3ZCSHU8yK z%Q^x8kSnSmjfo(;y#I&87634gG*b{|6zEE|F8=JpB2PU*sFkFV$N3vQF}8+sVm(|I z3SdU5t+v&|$QbbbR7pba%#B-)DcxIONOr6rmk%A9p*Xuu=cUmp#;pl>{pss|R>%z) zKtA+ZwE$CtU%v{4={MQ+0RSLF2FJF;^8|Z}RI?R+Ta9Nb->5?;zNYXAVA+^B;06Y8 zl5j{eLFc=}_*`>W_%H(i;EWosjd-5ilHPE@yB1*ra3-~tXtG8we+`f`X?LN2`r<kDZsz`9-WwjxbbAS2Uta<^f zi}5NL{(y;*bv#R2e!BC-`vtJQPqPmm^U_W2rNNQ}k8L^qT{=<|`=!kXHMJ6t$9a6? zRrY!`?mV-d$XFzJ@;)i`B>qtFWuNSF5cNDZcaxt!^otr|W{c?EnIIhX%EFXj`|Hh$ z<;;t?QR3f9ld-}Jy%7aOZT1oeQIEfhmCVV)PS1A(H2*ZY7v`L)m2GuEG(LD zP&BdQoB$C4%jt-NqwxiGu?w0B2Y7(_sN6OEh8|w!ZjfozU{|M$p0C)QJq(=;7=wgIen_)Ev3XvL8uG^n*k1+X0JhMGlI|Xq2HXRK6_nT|1xMb2{ zji0ZrCxN4cl}K46&sfz?h{s9ih&pCp4MwJ}mqBt?t$F|P4v9D!EJhi%Pxw`E$0T>| zQ=}J2w7-Hc>}Gp6Z9aWy{{-dgyM6#BF9{}fW$=@9&d(nTDjL!qNeuMABCbpN{&W@+ zCW85OaVE0+e<*gP4&FR8snKT&BLyuly`ptUi`N)3!dRu2D#h4~Ef#Y0_=VC*cvrYA z4(a!yhed4WR|=+9s%@oUeG#g;n1P+3^2dPjr8?rmks#DJCEAS5erIUs(jAlmcVrJO zQDKk*cNv#a2v7qAqUuH(#JB1#6?L30W*rMF!2HxW&L2%AB&dZKf8=iYnkb2~WOC;} ziZ9!7rx#k|0szvHaHcCA(Q<5x9*U?5Hf8Vmo?Gf)0N4GA3-lUT$O?tpW@Y*n(GzSW z5kRNzn?I|-1uONj<1O6w=_DQndlWw0f=ScjO$Z!^0Ys9|fH zD*H9~fK19J8Lp3oLX=#>=4nJL_nth0EKB{Q#r?1<;-Q+sa&_DH2%FfG>?`aL8X2O; zImW3QzK{DLP$abZ&bA^(-ast9jo!U78^RCNGAubC%dHQsafSuV^SD_7%8%# zhp2Q><8>za(~|qbd|tbZGcB)?-!$+Zst~wP0p3AIZ z-mYHg(*R@Epl*J=^v+6gNou-4$Y*&Y@h+Hp^uq%KnqGIf)xAyEOdVLIORFlzF!rh1 zYb(LOu)@8$)elYx7o1#@Il}B1UGEzG`@gjn^zm0oRJG=LXDoUy=L}>8h1DR>IUrht zlz8^IU!T*ZK^?v=b;{$;cU+?L%Y8*NE(h|_XplwmH`li-y8&ya+#b;S!}A*Tu#IkD zO%6j6N^3SlLlfR`7pUfV6m~zdQM^*?!JV7(E${Xu=GF8kx9?+5Ug(|CcD-_|$*oP= z?pV)%J>jk8xK=ZzN!#0&1Opr>hEzH~kLw+udl*?5X8CwBR`34_<#+Fwa@UM#gfA)W#af=t(h{6Ux&_a zhNiLZ`Kk&if&+*;UBT)%5zb_YHsqCRds)pr2g|Vh;*`4BYpW8_b!{Pq0%TXJEs@ZE zTTJ!*?1WDHdB1uk#Cl7h+@h4T{_AyeXiZoR#^JoJO$g&qYRSUV6-517Wx!L*6h7cd z8DX7pm}54fN)&0(80mbd(&zfDz@Yg|%SEt+L4UyL3LF_i)5l6p2g*HSjZVdQNm12+ z!xb;GEqJkAyz6eS9SQ94(*IXeippanlrkOtfFIWLgDARSFuBSbHA^V-g)spi8w^>PS>_F2`99K+xT21pJH+ot0W__#2iZIDh^A`*&U{h zSr_g;jYEJ=>h7$%35agfkUkyhPbYJ8R4^jav{f7~5zabB={Y*pS9cS}ZumL`S|<;V zRoHas9^B*<-~eca^tAKy$#q>04iKo^g}1H6r&#TEyS0y*EPr+pFfEG7EsQA2{)-pL z_XT?Al$tdLsUkfos1A}dm{!A=XKY8ARs%sV?R;n&HRjcoEq9>&&0v^ig2SMPCFA*O zW_%~fuio7(u3A}UeRlOegplJpPD$r2H;W?jWq_zc`;MSS9k(H(_OEv-YOmz!&QPT+ zJVj%@a)V?Em(@AFpj^pR?<&BrSgBc-jf{jLf3KkD5=ypDSag!!d4R00!TG53=EknN zT>3pUg5c1#fQ^t;k^R89W&s>*o%oW|vug zm6=spyPUL<_y6%nnQ5F(=O-0=>hy)}OfH5wDl-I4=+id`oyfM^00Pdpu-a{B;YI^U z4T)V^>6c4S5AwE5v2ciJErq&0B~i7Q%m5;%(^m7(V0_zVEr}eh)jTqo=$BXNDO%9j z?8ISLh)8Wo2|XlS3F-B0e9E})U;wJ|UdI(ZoO5PNk-9A03@grY3dM*1J9fx7_*3q& zXtI=+?{MP4*G5)H_ZB!|c&nZxdY6h%taNF})oh6o*C?F_7`fKEVm3*#d)uWX;$&t!-C+6(3 zEnM+%(kott>S#Y;dW<=K!-VI~xt zE-%vr96&i$&ImBmZ^%5OupULr_T&Y=$&cBW4LNc5#*_WA2HdOqIOflKr$h< zf;lyOUa-WlY25=WHS7}@;_cs3dP%NlE|tJbD8x%K@pt!S7DS^XX#awS250czG^sl>t+b!rOy+arvID}W z-6pV?S?udsJU#w4tdggo$4H)D?zxExKXI|K&zdcFWwEPVPt9_yPPXLyizEdPGj#$M&_4e{kf;tkp^gnhQ8S?_`S?;8h)u{)KRpw1DWljkr8GICy_$!-X475?ok3o%3;y+_-3WH!Jk zlcH~;QG)>d^){uz37-09p>es#9$G=-HR-%v`_{B zD%t`T+~qww?&$2>aJl0@9Wg?7^mQV6=3~#3rRJm!1+s8B?YbTgg9E#J zFB{P@Tn$}w(and9DdS<+VK6@S$2-$EU;Va`#>%trj3F~LINI5h3muW#>2HQC*j2t2BV~M}PV6HEUd8-Kt}#PKxl${_S0$7xR=| zo73W`!?-4Y%Z66|UB6oV}q<{^m z3t98&u5>HTDh{rprCOG>;qTuXk8pB4SNsOX1JJ`Gg%scku$D#KM0u|=D_^cJZ$ktK zo02)YgS;XT4@X&Awg#EleFieSn! zmfN5T)IWbnc1Ny2<|a9oV2t}X*H&o(W^o^q6o@=&FZ8-})5`={Qe&mR?8OGDDZv!L z7^xvz3fgfu>6%Gy1R&t$B&NV{dB7WpS{I#?RG4)1T_J^*$`Z_MiBty-V-OmU-C6_o z^&9gL998E_)ObDDvHDv4hE3EgC`f?K^irL00>N$6H1eH z{4KO;PETvk6(8Q7Atsx15JAzlY_*BEDvgHlQn7dZoaDCGuI*(crvca1F#4Ift?4&F z!11urXtv;cM;+$gL~uIH)_J0cdHJ1EQX_V3d4H+naXP zIx1A=3g1(E&u0qeh)> z8};AN;35SMzFjm4wNJ;v(29JiOgLE>)rX7RN8Hz>%{%PLA>ETDo?f*uhqZ07JIGc@ zffi%?NR`N{t+E3ARGDents)LX9N%@YSjUu!WiS!(+w{D2#=prJwSBn8E%)s!+8#c| zOfld+(|)*-4Z{uC_=bCE|7E!{!9QD#lX|=2ICu6?&shLkh1$y&BM(#2>Yng2amBel zT{~Idr6+p#n00?!CCz(KJf(gSzyZh)UZNgpU0pnR!mq2o#1 z26SDaSLvz6XGMV&F>QxmSK~06?T7+d=)_W$x<)y^CNd($W%Ya}BA_Zr@B4jw-*L_vgC7jmqN=O9`>{D|KE1Xo#g!hM!w{m`$p>4o*#k6i zWR$0*Ppes@DF;+d|T{zZ2&kCv@+KQ zf0`pGu*f1{(iWs&pAqv@HQiWux$Ib_AO7clYQVL98lI*N$-XCvSoA0>rITp1=tzlp z*D}n19!RI%V_LN!eG>ZdayL`<{TW=e>R!BZ2eXkKEIx8yvoL)8raGW}+UOXWV7%*E z^9{G{Ol`fPlJbfPJy&S1m7~Rkq48ZGGM3Soi##YGQHZb9h#1l0O|(o;StV0|Z(H%} zpr(NP6gD$B8*zX$v|NQ3W+kIAQ)gJm4MQv>K;?+!T8$`p&pXCfVS-yxZRV)d5(S?_W* zL2bvG!2=7mo$_u9O;|q>^F?^Ktx3x2Nf1 zkC3CKMn4pc&iw!~KX1JP%DeLIg{oTjn6|6aZ}6m;=B$28&U)MsNSDS-!@8F;I1E6F z+Yqy8#Cs8{^GX<*m#wU3=SSpg0Z-|8nfRVXye>E#7Hh@t@9;doa^T+<@OuBi`-LR0 zLvlmA(Fy>&j-2So^g_^6>^Na}P=J#dPJ#XWlMX%59r$oNGrS$^htqFM`F`HO#o2i^ z}~TxYc&1`k~0GU zDBUIbl2Cr0t+beKHedJ^ZY|k&Yuhyok8F!An5ZFu+Yx9YDpw$OT{7tRx1=TB%mn5T z@qa$r&Qh~~=b*;&HdVZ7ZjRy|o^X^+3L1NL8liAMq(HJUHAB#6uY7O&X~$^bGLN%^ z^_)A}cj5_QO*J*+Z=M#!C~os1XrHCu@I!*;280U#CsNk$$T5A6hfd)XaLPzIqD3u$d#;q}|;$anB-!+|s=K$lev@P z{EC6s-}dTsCa4FS^waUs4_>eR`mD4{tSD$C7!=x3UpzR(l>MOk4Huhs82@9m<=$^; z)Df^k<5{Kh?p)zr^^>f<#;)sqqPoYKrko7u`hWc9K1PNH>K0h5sHT@`tW+1iNy4q? zv`m|ON9USSC)f>c2edPfroU3JdYRVNoup2KXaEzx=#fjhRZX2ejP?_o>uq@IP+d0X zfSYt;b`@?YTvKpMIy?|0=CW|S9aFDi){&=CS9N|<35aeokKDMFpcbW=*`KF4>oP`c z-@FH`^i4EN&;g%m|6WAYuQq0g?RNBlm(pURa_!F-D;t1SAelh-AuzT-@4932k0RB* zN6Ij*kX19xj9caW;u2i$#}jDbuV=ZhRQxHX>Lt?zi=Ae9$g+`cD}l-Y#1eeO1w5bR zD^}jzhsWif4b3)ag;TDf|8fD&nHQV;+8*gW9lQh@a*w0r8gS!v zr!{?>AmqSO{PSexB5i4vmUmG}wbj^SY7aFM{c@VCI{67%v|U+6f15G7puMew&Ecf^ z$%_NfXIgn!(OjIQM)`7((IC8_VaPCxA`H2tKj|MOS-H6S)N}QXRW)k3Sil{ZVf2tl z-9;gnp{Bjrm{gYDuCza(XI~(qXCZ%pNHI}5q6b*rOy3QF35cwWCTw4dxiohDM;IAO_#7Qpb_6J>^s4~sVy|M<2< z{(0jfj`ZnI)Y3WiqY2}kHEEYsGqWvLNQNoU{&@Ddy559upyl+Km>bR6FNl8*H&~!Yaucw6y0=%1Kj@BPl^TJ!O_nd18 z`8r`pGW%_y^2HL+L znijgA?htygZ%hZ_-00~&)jXm;m6A6H+PJd=Iq^l3@UycIjBV#r&|GkSAo@tJIoF$D z-EHA>UbgDTwKVclueA#XLCo-4)AnV}@w;J;S?FZG(xTY_&E;ynEs$D{geSD7H zJ(g@72*nGOAU-CelY1nAH$QXgF^FG#-oL<6PohJ~SuR7+l@` zb<3wpDukS(PK0M&1pX-%=*)(-F3YT=4O8WMUWJbAf{|8(O@7bU1L%dc@{|mFDv)fx? zR=T^@H#DsFw6-A#g#;Y>j;{oGhW3G7X19l$XXn{K)E|V97TZRZl2~jT^@3jllTdW_ zqoy4CVsL|6S{4TetcUSv=(n3x^RfxJY>Ee^5F#1TNPc&%5*PcDEOo33<;HXG2|i>N z^^LTQbS1E3)Mq|Q!5G8(jS`A5nga-m~S9J!T7j6R? z#H?l2HxOmS`G2PeubUTK)8{L6!pz=c-|4R9*Z+*_>r0f`3pfmij{|HlBn~XXWb{Jy z&oyQ%PCRfqoid{$Wc*3kj!%HpU_Ep}-&H_{v1KRYI<8TK9GU|h5v)-Wf0O1Hayrf_f_-5~AmFFOr6ly*KXX4Ga&Qw8)-k&?Kb)>yF?6lO#aidP zug4m)_(m4@rf^WP(Zw!n$J{Pot~(%#S$U}vfkouGH03$M^bqrm7)j@|;G6)g;!Eiy zKbdaM2o{5g?Ga;@d-cgOToUJa60*WTGrzyzQlGF=4HC~vyt|e&0<@8D+ncqB+ov|Z zw{}Ne%;$XU59@>y98FmWDVvO7BqpdKV**OFez7b|>YQAzJNtnqpqqMeY+1FDUU#3_ud zX8g}?^?zK`n4g+&PA)C&y8Tr7+A<`|;GL_mHht&vm8dFPrHUYg5Q%h{E$T@6l>|T} zZau=+C{%w9whOT~DBw?B@<`=nCDRxmHfZl@HSH%Mk4-=r9m!(O=Q@o#CYb4Zv>{o#NSnfq}4N_64Y9L<$ImfD1{A zPjGkdG$SuB4|%yjZT^-M&X0!io&q^7a6I}ZV?IkHgUP4Y;PLoGtApTJijN$k{>}0LBCXdgGpzi zg&PRbhd%JN1IJhvy`r)uBRzUusa5HAgPO7f?dAF-W}p*LKIV7PiMkm3o3$HcjuMJDH7{ zD$c3Kk<(IquHIs8cj@>>bx6Rwy6sVROT?+9u^r#Z&uXLoxBEMoN4Y9pEHFn*;z%+B zZ+dTiF%&gC`v=e2T^P+{EGWwZrSX1WIdM00LGG$c(r%>~SL1VUdx6u4<(ni2(LV-9 zsLAaEOCGunD@&(9-k~`pGp}7u@4eIFdC;#HM{&H-nkbQlRc+#!QP|!=`8!?89dNh3 zOxCLpDEPKq>qt+vh75hrTYVnh1nin!uF-Dsno9c;Fv2eBdp;lV=G545XX!!6R8C}nG&&bFK z(Pk?cfk+7m?(XayA8c53{ZvkJJ{}$SJ{fi5fd*NI_$;^}q3e~HGN7p~cg3(JrFT#` zh$V3q{$Hq%0!;S`ZimtRAl@!}qK7$37)Xr^M#XslqL=-rIKcnnmt9jC-XD9KyNa^} zJMSK|3q$u;od1C*rwB*?3%)A)O$CcxL*%tDov%KGn>2m zSSZmdXi1&?uGjlZk{3L}%8;B1R1kT?nqSCU03ducREmND0(=;~v2|H?Qz9;2b%QN1 zKrB5WQY7h(#o56z?YICTN!zPX7A(Fffj%SJdawwc*KTy*vFh-e zsGCJEw-9G65Zp}99dyNlqC>>|a&pTbs`L98OpZ9I=ORY$%UD6F0)Hb_IyF@x=(w4V z_**TLP}iw~6NbS`ZaRau-1t>lwpMj+$SmW|#y6J9O>rI4WJ7BH6)7V5ESslX85Yfi z#MyeNVuCVo!v_ah^y5-#1^)&6c`MscHL%UMv3CoQoGhiUpMP_qnCp{2YLHOzR-riHdIBl)fR zHwQ@wJb5S`s)z4)o0rG!AZ9VI8`XTyPhh*#S`dfWcj4;^1g#ysK8XAiWu&4kfvrcU z{xVGC6jT(?pF(+bVRdj_M!eR!_X2>=GRv4I+Mf*(eGGp5DGfmBeK+%r2sRaK+fuu- z3@B=Wxw}l;bLl|NKa2`+-x9yJH12#5wcN9F_;_Y0h4^u#NVaYUc6pz=C^Av$vh255 zl13Nd)X3vGwstcuR+9NBnj5!s<(DYiqK0HJScEXmPccQ-6UFzLvAB&O>!-bKtbInm zBr#L`dK4C7l^ljk5U=!J21Z>Ks=Q#PI~vDJ=rvQvFm(!!%VNg= z3m0GAW{qI_Os07nUK9m0u&lcqn$%02w627o`{OUB<<|SfNcd&*P8CODr$1MrC$**H z>`PL`O^<$xiwAztn&OXj1@j(~=qyq)|K5sDI^PrB>|k6YnGW2_&P~GJHH$E7olY$= zQGi#3oW_?+N_H;@z1=$>e*IaOE?E11JIP2gDP^&hV~de zU$Ty^05_;qZvqP+B||*K#7FW4M3!6cAUQv?u6yYLPu>8#%@73)xayMcwD+v898C;_ zA)8_LYi_o6;2Rlt@I zTCSm^Jzl$bNM>;5ZsAQwjCYLk5|saSzOc&Zv`-r9Y@)X_2R5&()8cPFbXE<*f3)>r0|Z*B)6{R4hzvlb=c_TL=O4 zm@Duo)AOzEhp($NGtR3eOpN`1%9G6V?H1`z)A6eDkfLpR^Tp%t9g+$SrNk_D(nx)A zA&qQ_eQ}dt{!F*lj&W?X7LEL2;AVDp)J0DhK@+_mF)8dAFbPX9S5!}8RqM|yOP8y+ z>)-D{ntPC><7+H}iMyb9EcOgsY8@HAuKB_Sg&;c$Hi_!6l3Y?XAb*3!^D07`a)}jJj}r( z&hoi6qtCqh^L~7xQczhM=Et4TNcj1tlSJvuK=r+-naRa2O&;-^I$l!?*rSuay7?EfvqpwbBM$v!}ep5T{2Sc5UYvK zj$d0w{y%0RlmK>rp)95u$t^Rjmh@m3t7WxCj&L8Fmkv)9cOhb9lE1)Gq1U^@z4Na2 z=bw`Ad?bvSC~5SJW;&U1yx6sTg^|oWK%?TL@w?5A&xf#`Wz|K8%t#pS_D}0=!wd^b z_5%=BlJB#;PnW)ZOa+}pzqZ(BBg9i%&~#)&2nc%|C|Q`8iMT3{_d#^?KB+?eE5sWK&FTwB-)Bh2M`OgEHS2OjAb+#jJAie%*2C#t(j&fM(m) zoZ9sG@yuxFmKP%TTqAwW6Oyzce_3_<*a!P61@+QnnRdQJvHyF2Rr6&LU4XhhqnYQ- zqEFu-^1*h*yzp`Ns__Y}FA&hDl+iP%pudE}pqQwIjeRhZG^kwphbUrKVT~h4%ynJ8 z+SUi^@|SiykLV+8+Yl5m&G+1n5j(uu_6E722#R#KOQB5}yNNyQ*Vv&a3jna@c?rK( zx%SU8Z2Ow4|HarSB@@|KBQ9cr35m+m>?^Nhc&pTGW}Iy#-8%>3a@NNVo|NMgPo2Ylp>U=@ z5DE47Znj9oK12Talj+Z=x8E;XIIWMa#%12U+kjc7K@NG9i8|AlIUi768iB*h&=^Q& znNN@Fppvk2nNYIAJnr(yoBDdrm}qtSb@Nz;!lJ`Ce0c5L!QC6u5};S7bC* zj93AB9$(SxcqZrhtzm4KU44Ms(ZNU5sa~<7Tnj~y{pK^4ks{0b!^{5h%a48rN8Q`R zW!L#BuD)T+ZocLxCd-mv(#+r7bKF2CSb4n5FMr1|_+EaPvTW~|Ky=9RSXH|lUKS3q zrqpg-@(ASHTkdIi{n!AT(RQ2EENC+S>e~gmSxE1B3alP-RT%(e%p=;?p%K|8xxNZ( zQCIg7d-+KdW&V@9NGQ!p-jR{){T}2-%_{6zwabH42(#O*c0-`j0Yg*neSIw1_sVw+XYu$Zq>htE+ni#v-IZxvNjt$-wMc z-o$))tIqzjz^+6yv~hwdU`2)g+q^pC5deI@?=5_kwBk3j@JQ3?3(VXVf7-)tP<~lT zvn)Z1>qR=g^&RJ-TEFI?0M8|b^Tx3uuyCUA;P7gLMOmxFWoaCPPImR)Gb72=Ps6+gyFY0o`2)e?pMHSEmx zwnkD0SMU6~>Aun=0;xc?rp0+vxAg>j+)H80sXgF4X{a}Nf?SdSST?Bnme7NhZ+ByN zJ;Ndi{}mZ+ujoxQo;18lKLhIX@VJYSeL>0Naw5re8@lK9tDt7RDgpm-$IW+ocec8r zMJ-<}4z(L;XPosFBN0VS4h{0W9o#4q+-ae#BvAZ+agczg@zh_cI*1n++a-rbUAob=s0Fv`P*?vfwl}_QfJI({w+sKgkyY%WUQ}<+yX%O_Q2F6X;01+QJ?|#nFXx z!3YYYa<4bhn}Y6rroj@0r%y%p_LJb)dpvd4<>U|Rrb=tSb6Wk_6DJSYk|lI{>Lh-A zJ0M6WtgbM%{}^}H{a^?U5F^cgDi&x83$#%CLt9Os^kiFA4z*Zz_^O%u-w zGu7G67>JM`v4T64=3<@kLINpB-UW-uqN zQhn4OMXMB+Nlfjq<1#t~D9i(bqB)B79QB*Mnj~x<@Kzr+1%?ReXYOskq*~}T(MAsh zSqh7VuojCRrLZaMDZrC)%9!@@3Mujt){fe(`dhpdgbS;5z06O}5VIVpIS5mnFMG$3 zspDk<2nDZrBUxN>1oHUj^6z*2_WWnDKl3!St_oLmlK280JP!0PbR0hQ!zl9rmgMdw z!bjK|%l7P6i!WK_e0vM z0nIlMzRqLJ0XK(iaK4)4IOUl=LEVmL9a;O=`EQbx>-DQ&jBN<>x&IgSh4Q`*+D{+q zyOxhv&*DzQ*4yF_w?t$hZL6QftnF!Fd|Lsuk~?$uZ5dguT@owW$ntMLz2W$}D-H{& z%;I#k8LGqo((ia2lF9pJF1kaoRjG17{GI<5?;VpqmQjYP9sfqsFwK;jsM-JlflF=h zk1a-*kvbk0Hgs++YZj8ok?7FeVCKIS@8gh(4e-H^E-t+Nl40f?V5|-m^gB`+=X13} z(HB;>k#a6l7h$^`?zc|60~qo-r$2TcZ&6%KyrL(&3jzt>Y~=ZNO9%7G zr!>)LVNoauyw5aMYkjX7*OE|h9R6P}KpiD6@5SnXLRPO)93!vX>%7)NuM6KEke4H? z{N_fouw2NnDPBKhpN$!3t+o&*JX!#CjrlCMq6Igo&|#&KNL=y3qmMuR2sqdW-yz-8@J!7fj2 zH|QQA&tb>{bE*9+D=!1vG=O{ zssX9SPYRSN^SPY1=?{CQ7b`?A#_55qHq*Wq4ZI;7tE+pI#Gj1%E#e1w6snhCeTyPZ ziYn{tp!!Gg(F(u7pW?Rjd$yJy{6N(*QeLcT_)O2(_;hHx$9NCG;8K?x(sZn9vGMg$lQm(D%U zMOMEXNSA<}mNMD+7Ivi15iM;7I{4X(s4S6Q@dChKkb7h4ooXGjKX6Nc+I_$`_N(@r zWKIAW7{o|g>(vJ)*+{e5FQ;KQZu+VH{hR?7`TNjCRQ65h8I4CVEnx6jR8Sv>zNSjh zUN~Gq;K`@u4RU>1@F4zXXJYaxZVmF?ogxRrhGCj$ zxC7UhFS6UowgWD-giqwl_gKA{_%xq?t(x{iOl_rQpW2Gc4Piwaw%_4B3Y8xy1yHF1 zypuwoGe>G0G~^|ZZ`0*~W(IgpXJ!6~B7&}%*_)MS_95mK8)&5Kg6XUBSM_^gKiz=s zOojzk+r4Z)pPG*&6U)@qxgYuYfaUpRF>m3gs(pWJ*0|7Mg}sV0KKrZC(y2HcVAZLs zg@W{Gd%(@As!baT5U%6|%oin>3+)|U+~JcAY}MaJBMO*%ujTnhy~|#HoTk0M3MUN0 zvbIUAO^guBZAnvXqImMmBn;wUnE!qnv(<=e?Q}ikz4#=<`SP$DqtMfG*g&QTrrsf- z_NzVDfo0^^w=g`(M6gV>BF`k^Dkj~ zv~^weawMm3ll`rWD1wmYc1yeemySQtNI+IFT}f-c!D^@oQt4Almd)o5KhA0X-RQVsr{ zL3X2ka{C15%YK<`(3*&e3Bra^cAea@-{s?4{tSQ6D5Lr>0j(KVl;u%uIK0-$<)o$g z1T7)q^K;80Fmzs+(^8DiR<2We~@cj;sy7Q+WnC*VR+AN7Pps4TK zC^%AzzR=XbDfd}DK-zd0A@e{Q=C7qsVXFq+SS{YfY1QVp6mG2Z`>xzdI<>J-7Lm0# z9_#n3OLu1sAQVAFF=LK8@z2UWtkV_p`oufur$rEiE1mkFV@&9~Anl!+oZoQL;&b-c zSEi@2Rzg<`5jFYKNB3kxLShk7W@c{#loF(KOyq5+Q<1#3Qtr86ztv~4@Y=zx#MFTw z_lFiY@LdG@wFSE^%*OI(<$EFxfHyciF^FxG@;DnQZE{7wA{QH^4C3g5e{aCK2+P#z?~mx$K3~ex64r)aZ{4}kE&Lkl@~aRx10JUvYfZKGXQDrN z(Y0Jl&B~Y&0hMDH55*r$q@ofdUI8N=9>Hh=kcf_Nv3w#TJ8~9<6Ok%)mRfXr9j9!Y zbHVy7K1ON-#}!odm-he0)PG7>KxS4Y8OYQ5tp=$>Z>3)(J+b-Id>cH%2ZX%k+$rcJU6TOik_>(PL*9$0_T9 zW~4~yu0o9>Hh@F-4HhwE(Aa0Pb*z11lF^4mEu z;vI--#@;MCwG1SXu$JG{WJ%a69~#v>ztYzKa8Y3VF@|4q^^ zbTLupiWQ#DVxHr)ANKgFO(1L#_|xeRzgkIfI={eWJaT#pcX?A<`BZnplo?68`(AhC z=-E^qU&(;;lta0vKJ^sIbXe6WmpE8R^BrQ)P|X$ ze0r+(*rWz|e@iZH(0|o3FJ`1$2F>jano;TxDzBO&uy^67(TbOv){mCHHVe?#aq|`a z%V5mizCcNI7~!LjMcZR>f}=v8x4!pTv|(^z+56;9E@D_YA6{8kN~#R?y&qd67D`_$ zYfXF;wGYBgt0tpFASr_#cA2)MkQM*@#@faU4DpE+>$U>7UbJQg&3weoq@JerYybes z@_;-7p8i~Nci{4mdX-hqyn1Wz)bQ^Qrv+q!=iq?@{xh~bH2LmGGh!3z4s`OU5zKIf z?;zS$A#||^-SRj+%~Qw6db4ga5obUc`?baLk;U4Tl%{fDQ-U_J-@Ype+epWAKE z?~Vf8K`2pb+eT!Cj^^D#7N`3rOqir}_!%MPZTeGL@?cX_eL?au z0Xh*r4iR7EW=!c%>}7-3Dr)uF#6JAa_2w%ZnGrLSYx^hQTpqNRBw^EQ<|ogmAU z`kT>4P%;z&D>6y7z7M4w@}u{7I3H!i-p?bIfIAyx3#=IHj)bBl=( z*(ExjN+1`#XF!^o`trCq1)RvjYQ%yrOI?5}@SS&8rmpo_eRF>e9cU9gK)7~Q4ZeXX`VM2&=;D=?NyO$h3Co1W zO=u*{hL>{I+pxZ)h=z&wc#Zqbsxc)bvXoP9Y4?BdVnu47ldjDSRpV5nX6e4jen}He z1S_bA@gP8zT4nW;#<)FGkK=ItLkB7joJr`;mvFdmNTXT0wB1k0dcc*~545RI+96q4 z44|?xIM8R^Q~$%?C6#8K81`;2A&WBWGmn+!cm`UMk^_Y@nqi_4(P(Dtecx@`uiDZB zr*>|ntLOQa>*B&uH|K}wf-iWlWV&NS(?~JHsY573g0P)nT2Z_@7dEsAlGU^otTjq! za*O7&1_&9VR2(lS-|MW6ng5|E()=T)_m1Dt>K%~^%{K}!L|9C6*kE+FgsW?52LUo3 z=C^-#Yb+{){r#^4Rx=0VEk&x1-b6ao3_tYSAbRtq|RJ2|`LuvFgY46N*X1p><>)XH(WH z-^8eC`;4Qw)AW)4bI8o3BB`6hSjF$D(`M%_FwgcN&d%X+8DCcP^MDh4TNpC4W%AQ& zKuv2$X%ppv*JZf8zZmPj!zZbIUR5H8RlOT?)Q|YW z{i67*gLoOmS;i*83A4bOI{hIJy2~~C{+sdu-T29RP=b$t`#OfxR_oMZiS?^jL4hp!0*4{`use@(|Q%ZNc0vj3=7 zI0ydnLJS-$*!WvvKJr%YqKA)2=&{2BJ`Rd=q`=7dg?5|eKXwBn2NEjjLq}4Nk$Vy6 z$JH!s2%{$rJVz(2m(YDY+V(akuZzcmQ8C2!yjAOb#dE`C7p2h5SJHScGL{j*36xP@ z76o!+wH9mj^Kc?Pn#qea%Qna%8D#M?ZD=HXFC;|pdkADhKQvjytU^sHK&c@g%}CGd zQ<5>k!1Gs{Vd7n(b>JWfIqO}zZDTa$|H?0gN(Fr)s4L4`oCjHy{|uoM{vYY0Ep&c+ zu^|IK<6}^x$^MMO`;>OPUfyc!`;D6PR#*4ShRUCT?v2%5D|B^RBFIEoF2{6&!Gaeyw z9+v!g;*g!UmhDXIJWfvWRe0}lC+ZMahsrCv??~d9M!`f8o&0fztH<+Z)(CK&2#@OD>st$>pw^naF7d{gtL6Ejv!go zA)noPa8Dx9nbL3e?z&p&^GGY2kKcdUkbdV5w1?%)g~bXHy1s9n{}B)p%S(>0_PM|3 zYzuw9xBFv;{r7e6oveb63OgtzT;8#Q( z7YZr=_#3*9hemiHUieFt7xQJQuaV!GY+zFu_-qIy;~FBM`ZTo^)U4}v;o*hQ{pWa2 zq=gcaUq1_Vd;Cd;8U=&Rm4nREz4jP-voKZKva`3^4Dp!;_A<|{EbUGqSe73&hVyC>;Km+)SH6MY~S`u+V4uSa=e7B(Y)Xr$x0J3GW zUYibVt;xoV)4;Cs24qYl03Bf7p1 z`T1rn>mwqe2s44y_O@f{xV?q1!qef4golYW_uPxhoj?#p>z9Ms)(q)33q7)DPGLS0B| zjYz*A7yGaHgID9LMK;a)jlM?CLV)PngT_e*H3Fp2N_oMnoz-2spkiqML~S}#KfxVy zW-DRjJcQVKW%4iik;ej+B6iKn0KCkw5H)6Vi7is}^)QZPjZD-V_9%t<7~zP%D^jSS zLTNfChJ`Gnk{`|9Rz6qhvV#2cu-~P1E{-~f!4C9kCKo^Mm{yQP+5|&_%L-rN&+aZ@yzo~fd ztWttFNgXQg=B|WGGLzjMEGu|4kee?qVO}J;U_Ya0mGb9&f3kWgj(41eK{p|>NPyNT zBOCh&`s>B~i54PzlEhhRmO48SR9JTVdtJFciQb+I5jDEH#QvcpUEC-@huTq7Nd5VI zh-LIeh%1turMWRimXiI;Us?C;wf##mlBIU%mV?!60N8BZ<4ZVI^>O)JB5Re(oe6n!1-;*UG@Nm%DfeGw_Ml2< zc6to~H2!oBp-l>&k*^t(It0~I;?@B8!IdGY@9jiuU%C;68l_=8o(!C#w5us@5JBeA z_R$Sd8msS@7)cj1`9}%M%t-dctJeteE12S4i??zSiyXM+SU%TuX=ww(0h~O|PG<*8 zql&3C!#wqY+Ex9^NpYMm_R%VM81miLTIHE7eV!3pvRe@#ambtxOx;2ez6 znvF!d@h_&sJlaUAeS*{70u;dFAbdoePS%}=-pT6=*LecWsJ-{xgS{Mn4_1|c!C-Hc zu$47OIj42X^pwWz$o8o|-)~O9epr)LU>yFtk*2%$+xVZ{agsL4JUmy>UgPtI0cX~> zi?%iAS$01^?+&D}oi0`^_%xMs$)NWmrztq|WRqZmCcrY9! zn86l+2}-hpr@C3w@liHYv%AdEWY4Y>ZxxcAb0s$(yju&al0M64EMtad*(xDjUSSn| zxR-34t zYr};TV`eXE^d}?({vQmI8nHEgeO!PH`iT+APKh3aj1p1~0O88GIa~~52aJcc?`17` z#RGqDebWjf{yu(!jNY=XqMMJ)@(!k8WrY)n(Q1F35rzc-ngF=z)=msUIQ;L@x{YG# zqH@vMoo+X9pd9jcPiu6KrI`o!oBV>lyI9|R@5AbdEdcli`P+5D7d*9szH?Ig)6EP{ zf8}np(xr*)K@MZou%9=!3h%GU^7nQp@f}1eK*;oZG#_|x+;0bb>9IhX{R}=9)2IWB zIt#-_N6Z;1BA(2vjqj5C7JM7L>X_#>?~_nNWGfg}k~57;0GUx?<2r%iF>6N|-dytM zWu)<)(^4}_wHk#dJxMz}(cHwT?FTPQjA-c(&&>GW5rELZ4OT#udYR&r*Z#FH64hOT znLRy^G_Nwr8>#576gJaeFg5yH{!1s;*f5_j|D0h(O8U!-O(F7uk) z1;e35?EU=kiSsQf2Ri9y&l#70#j<6c#nE7AGtpdF+^h7@RCj{-QD!e2XPfAX$)2@fhLkWs){2z@=1Jp~J& z1MyMwNukkb;ZExUf})yp#SC~goS#0sdGm_nMrRUr<^TYNhqw;oPa?`v9?>#gXi;BwH3x;>zrHj4tu zWNDa--oJuk4D-oZm$nC)nw9n)UMvB0$$urIC*UaH-RCs-F$|c0RLc}9Abp4S&ZsAk zZ5--B7bh`^1ZlRKhxj~d|WAr9UIx3{Jb zBHvDPcjtMlBWluvUZOZo%Dh6&s=f#_P~(`c+@EW{fU`CI{l$0+=CF3gr8iPG(svtM z%_Zxyz)lh2xhb>00L6wg%ik_XB5OVih^bj}kIauilmF}^%38CYHYvdj~hg~hfwpuQWj5p{vA;W4j{_Za;#kk zb)@0;CwX>-M`y*ip>r^{-IBmjO zB^MyZV%oHe?q-Xh%RBkDUSd?U#H#{kR?Up5=``pa2m~V8Y)u1*<~g*U`DbZ=ka;gV zDjY*RsoH$|cC%t$j3jQPgp?Mshzb$7v)?I0QJ1A(l#i<9BZCXT(M>H8!*YNfmCy{TNYl`h*wt*r!1 z8UZi}9vHl+sn?q0r4!n3tII`rJ)-D~qceSG(7Z2-A`Ypj*;17Mp#7#A*-E#HXeG&2 zg6kgo5p&OmnP-^vRbfp99)Ypv8fr>y;XeC%)?v&3Ue_gq1(HAQ0!4D#(>r^Y(3R2V zuU*`|Eo}4sidwXjX1@u*d-!b&hB))!!<`>SOYiyT>Tsv*`+N2C=E>g~tu|e{wqu!+ z+&nYF`nM!T8Fm>aGOG7=+J132eeE7^$?B7z9EO;Wb>gccT~dbIr>6DQsOQbHn za*Aql?ikq4JakA*d(o7S)Oo&F-nM6Pa3uI#n0+XGN;NLT_QM!DZmf5gjADM>rSE0&T-~x{fV)vFS$B;?ufK-j;){*AC1UM4eVjP$mVd8FV zB>qCrY0+`MJW{q9$9bMx;SF8moY*74{pMtivOFalonZ80hq6LJEraJd+DF60Lxaqq zk@xJfu~_D{kjsAQB@Yh@;}8|0WeK%oN0|9ciLK{f0+s3+@=0y662$OlFM0qHV$t}C zi++`%UY91P$l);R-J9WQNcyt3?eaU$MlzGz9kg7NdS$J%KzC${yuDyG97H3~>@S?? zGs6NCWoL|-kioAj(@z9KY}eYfz6eME=9d(u$Dib?uO& z1OQoUd|5x2Pvxb#IYcXxM}Ir;9~v8v%`S8;at*|y|)*K(B56+K94SrI7g!?vyh`3=5j zFx(tiQLpVzLZMixn*4bx%_zVr=OK=#`qw zHr>AKi}=Ma?c>EPn%Zx`E&=VwF3|U^YOn{Rv&yO!I_rcqEPMOmaQBLl)Ak!R4?Q>C z2yqY8OvuvJ9KWUC=LA+Dh(M%V8GrCZOiZ(iNC4spXo_-Mw;y#1j{w8V^Me$Gemp)CkF{V+S8D zPM^ZGr6xzE^vwh1H{VF}R~MY|`vb8mjEVZ-kypCtssXdXhSLC&H=Q-y>iGOdCn^e3!wm*b*D%H;asnwZ@c1b;6 ze(Lvdf^u5>SpNp=*qbc1YvX)Imwyu4s!buxkDC0xZpZTdzHEZiJof`I$>q08ZA+XX zgr5{3o5eeG-*_yyqlYsX^J*W2ZOyMTD(>!Gl2IxJz$r1i-Tk8i-f5e&3NEFJ_m8M4 z^y3wJIpuA_y_h^pZAe5u!r0Mb>d-+GDT95-{NP1>Zy!Psj>j1uf0LA^H?Srb6PY$( z`y*H=^oyl%C{l&VDcq z*=E*KTt?#jMxh$nt(_8imh@G3aT{>$?5Xw=YU-pSj>I}IN;Cf%!yNyXQFyO&{3GCZfo zoL|k5G|XQa6chBIL8E_e(R@I87G3u3`Jk>L2&8dMW> z8xV0Cm%<-i)uKe&h*nB++B%j+^JfOTE@S5;tuIIPBi-hh;|i&i=eYn*LlVuaaB_!*L4? zp;M&XFXVo_Akf=Wl6qrgEwAUQs*Y+=quI|dh7?awW_e#a;HZ$W_U*zPrGd>Pf znY__?G0Cq!(9SZeVWncgfvy7g-&tAX_K7(WhFyNqdWgY^^F*@>Y8r#!caqQTR*Ktx zNy~l)`6VY(7KRH`2hl-?sk?AldF*^ZOZxO?cx7B7TV#q&Q$PQvq56T2w^b^m7)6OP z?7kX>b@X%Xq$K3YalFo2-N>Xv{#FmtUxK&XG<~nW=}cr3p48*_De18>cd|4dGNhQD zW1e8^slQP{fH8{LkbUtS8Qb;RKEdVqJ@xnD~{E*|)<==ZJlXp#OpOaas=N()6Y4 zW_AARB$}l+l&WQ0PYZmoynZ8Q3@3$(APQ(V4oL_O4y^Bg)V+TX)uaFwyp7{LX%(Q? ztP>)~T==iPM!>~r(7R*k5MR|I;Q1d!glT$ z)NCb1I%M_w8eGMzE^Y3(zN32;2wa6_+11*@Thy_}h#tKwdNz+UCO9rgB=w`t z+v|n0b$UgIX1hOztfigHvJ*x`F8NK*$Nffry8P_a_FR>X=KQ^2hWE%xUx3FxjNd)B zln$uHP`rc72>rDR>y)zdp@M!%DfvRwT7OWur@a*!$AFA>?Us?{o4U8u9ER-m#mq#Z zgN^5=iNV~BTl{yC7}NWah&M)u8KjDya|OxB9FTc?YxTEPmwNLKbV6QeJVY?hlJDMK)G1#mV~h}Rzu-F~sLosJ*Yl5+F1b*4{J0nl!o zkC1{&Y8~RpAe%B>KlrSqPdAlI!!VBN(NQHc2cK!FnTV*Izq!OKb7yb%vg|1bXg-O= z`#>IYr+@JmRa>FvSTR0b;b7Zy_8b1q;g|QVJ$_+izQEC?o--NSV2~8{phd;fD=!K9 z-2&L;BDZ;v)c)K`gCClm!tE!76g+D7X0tD2IH3BxGUS_^<7xoduHS$1AJ&(7Ay*oXKKW$bVZt!0*EZs z={z01{hD}K@^3GA8ZYlbwS(}Rm1i>eK?VZ3D_q{H>;C!E-3Ou~ATXkgsNyURvcIiH zAiwq&a%d1{R3}HA96!i;xRN4|Tcw40Ufn!^<2*cj>NmFCXud=QRc!j@(8)e&{S7w$ zGXJ|72O`h%J_Kx6J*1#oZdDhta$I$4Xq}!-%T#k3*ea_W9ZN^jMBtGb`PC==sMY*UL?YVi7aS!axIT) zGMSSX>ByrWep0_)D@&plC~G2K#{cJ!KD~0z&NZGVrep<|EDFa^fl4$B3q!B2Ekk|P zJ$ES5w>nYg=)(;Z%z+_*uxv}&)-%FVL*HWp4RJxx-yvNe>*$Jp!$j_yFCW@x94%$esmo( zr$ShG$M^;5qp0q~2t*gkfwD^j-$C=WQ=M4;p?AUKZIfR1D%*{+hruX9mC=wfx_f(@ zxV*8v+sh0Or|rDX;{;O%i5R>?*w>LTFop1e#h!!<^jJsR9+UHkmd_bPBhIQiG=%c0 z0OBr`e_cZ2c93@UC7a#H^lzkXpc_pr89$^2KuKFQ{m$au^;gUXDrLywLoNTm3{K9<%)~$>?UTJpX(%k}IS0 zvvNB-gh+Ru`=F~@vUG<2fh~rxQA7fcTcYh5sKmYea!!b@p%vyQlK&wt5GOfX*Vspz z*r;Zr{*(M#;S=bEvVG^mWCj~c4Yugpg%bFC3Y!E|*1s^(5wiMA;0?Qv@de$GyaLo` z?Qyff)*{8sFegPt>`S2!RQyh6(h(J{TPK?$SRAC4y2|JvK99PBQ7@#++iB!J_-&>o z8hbVr_{3bGzfasiG_f$Gw7roMPCGgpGa$GxPWW#81ymx#!F)*R_e_fgn)Rd=g#YHI z2!VMuQuK>^tNv@C;hpjw?-A_94=PAZB!|4R-KNo^$iss(Xl5TiqwN;_!LxqLN1Lr) zmBqEXkL}Lh!*@Rf?OsnIbdW**M9Ls^yV3&d(nngDP1X_Z0q;6EPKSCPj(%yvM2`0U zT?;)N)JsU6n19}Kwqc^d^}dwLhcP5k7Z5sulh<1kp&pU7Z-(2S zthnl!T=c#DR`E?w8#}-0*3yjaY?ru&ZWf=2ni3nBO6{06Rq?mYK6o0QX@fw~Z@H=w z*9oK7*ov=KSA9|^drjEqQVmxSWz?&wnys=~Aa&e>+|Y<1K#cXC#N=qHODQGQF2bdxe1D}!EkjMU6Tg*s=DY_bW|MnULfH?biLh`w>GJ*EtABA%SeJ52>3=^S@MWLl{B0M=jg72Oj5kyTRB;l2VharGwfvjN895D|lczwp zLl~`C+8+5Q8jdqE(_Gmb5A@~6WmzVO<)cm)Sm#416km3<&3z%#*lAgKPm6Xh-Nh2G z`x}Q3(Pj`I%SdFy3Ye1FmRok4@9!M@1X=Edw`#P?cFV zRdytGbEl^RAw_H(T`&nbi^=23;QA$o;=`o_makUj7+=Lh7d`@+8B`yA@DHPxg7v@o z+e_T9dhsgm8j<6DreWxY4_OC0^#>Z&J2v%kT^0ojbJ~`;%wkC?tf~ae2QWY|zw!;p z!@zi#ahSAKR24OtS^Is?U>$U_I^(H{Cp+Oy7Wt%r9XOt$xAgnX$;?t7U&{*70Ncaq zDCD}~%k|tH+XC*=Yb-tgZ3x`Z#(;W!y$M<@MjX`S_&phTMz19Js+7SF>bWBeDr!g? zkNWt{Aj$+-R`EoeaD3$#Nb-;#FP^NAwxB?FC3upXq^%IgSCLn%qxZ_QQx{jQN!H_d zF{kS@n~3t`BsDiBCx}Tq=B|*#*Cnis__K?kFPS$(y zbZH0}P&tAX#qi-R1JWWLXcoZvZ@=%Dtmd|pP`^WbGOz>!CG7Rtf2VX|NH0g8*u~=< zOywBeuklUIB47?*Qt++%03v6v{bM|LzP%r9=6AKlsaOu%w4Gl>JjhhiwfL*L-@h{3 zeW6N^4K(AkJ4YDHw=d`L)A+a_U0+siLRw<4zo?p9r9lfG#J)7N7!;Yu5Vj9w-t;mN z>z*R`wj%htC5AOKFF)!f#j7WoaHD-Ig!n8n(c-Pe&|b@ph|DP%%a}1%4DsuQh1`rd ztg$6F{NGS)d&DvrEU@Ew{9YpX3Q6#9&LH8U%FkhkFq2E#XM;}SY$eeQ3KpQ1sAT)_ zCE_~>c{YaUM&vTdO2+j?>SR&agO^7RME9uO)i?^+hbz(W*bmgFQ<1x^D7oLplMW@; zoXtD5D|j-p&)l@h2=dMTB8=Pmu~x2o*6b|21$1yjdpgAsFFy)Z5Py2Yqk98SGdD_PxS|xERh)9om@y6Fs~L9Y;84jj;KYKlZIAX-GeNv8%v^l z=OjrN^NriEMk!)<=zG86GR9{m7zIcJ)KJ2xh>=@D!9Cgc&xUERweAekvU&M~742Wn zw{(DmSVW*Vz5N?4q@$l8!9d|5rSbF@6kecD?N$#AG-x(jon&FBpwHzCs8v7QsJEBI z6<=S0x)(C<-X}2shM1K*geT2080$UZHVrJPA3@zSFem$!=%zp@%OZ>{g769^-;$Y6 zgbA?J{+CPQ#JAsarta^v^Eo{8^$?Uh`-28QcOjS6S-eEUH6l1+> zLFmIJj;S|l!Jb>`+FME0<%E~+V0ma=V1bRdk@p9(4+CW$-4`(69Zx&Tn(q-Ghwe1} zmR^*qciPdej-L9|zQ`@`oQtL#RuPj)zO;lY&q2?CgbKvfaF>eF&Kk-+#_4hp*bf2Ti!!#} zpaRX3->HpJHC+TUT1`L#XZ6cW7Bf!`J5hzW96msA_?MX0Jka>uNhauSMfWE*n=CA^JFIvVJ!8tje?+ z^U#nF&5G6VaMHtl0@>zEM6IAB%hONwd@>UP%m0#HEUCn}9DJyPv(7F0b(V86>V}vS zm$BG=^a5fNtCk{Y5lfaD;#|E_I(jCEFch%TL2uZHdAg9*;}c7-%mCVAAZX5u0}`B` zUR1wc743y-wMggw`-{N5<7MnSq3Z=ERqgtGg~vO)kp6cre9+S~8=vH1;Rp_aK+vjH z{16@wCG=I#BI6R&&!??-yLX~3ula#Dg~Y+=o1^k_ZVB}zMW*ve7Htc)Ytis;UO)-k zCi^L?<@bFAm8Ty;sItcNfPOr5#8M8~qD*iZNniT1NXSejc^92n+*N`rGv!as!(VAX zAoX&^#8{&^b!rNUF>|td(UgO9Sm)OIcbT#+u1l)UzIe8!3n(|Uj42{-^N(tU1f5G?JBzNeRG#z%huju*{y`!cu_!tvy^lKomN(*n~@Z4Mis`-m+QW@ z^lZ$Q9{OEZTiiNi|5gos>yd2brdC`At-B{?w%E(XuXRE){vI?B)9B51-sUJDQWzt9 z))K%ffc+>s5_f-lQFA-dO}V&ALi`D&YwvDQW$r2?LfDBJo7HDSAjg=+chJ(4{pHbY783CX z3DuE%$y-Y?tKYtz0|WBk;;>V|#LPDf^V>v<28YNe;Bs3Z5(n$%HDBH;q3uJb@h^rJ zSU%wZ&98tgaF0Cjut(-SPT#kJkRmYv)Z#nG^GSdXaWojU+oJ=bDmE3a6aWDxh3$mP zI5xE%NGA~m6PR=PG1dAD$?`!zrlYi!7XSg`spK4McEIKD!`hHm)~Vf&Fm-XYksP?s z-%IJ4*>M6N>MROr$B5jN8dUDI{4 zP_OkX=y6*}AQgMeT#iF>qpc6aOzaH)2R=f8cn{7@VVK9Tw@|(DG)^S{L3kvun2q`# zDecvn?kN8#L&i~{{vjWVPv(Y5+cL||;}$BO&`~G~H$S4^ItWpTdIQy)R^#Zu ze`hhP#mRPX#RszBd`|x}Ag+|d?9J`}IpC2eTgsMYBWmcu^q?VNCjQ4f#?|QqjVW&k z9+0#LqGxX`vVfA0AP}3kchz?P2L}!&f**2J2*5@6AKEB9{;x&kq?12e%FO$5^|&oG zP>Q+h=034MVf6p;L;l6U9kKs4ubhN~&%8FUJ*ust@)&P+DQ~LGeEKHG?Iu?rkD#}F z_s0_gNy%RFh~qMAgUXrX-DInHqxApmqLoi#-(PQCkyhwbGLIm6O!QvrWy+}W{q^3T zl@q1{K0TH8MrBT2Q-$Rv=?vf1xvvh1afn`pZSYWxm5V?5tJ=f zzLZ2+_F4X+0J0_QaI89Uo9vtUxXZmY6CMzW6tXTyljyV= zm;_ClJDxRqRWY%;k!10hXyfw!#sIAhctWBY8u*-@9LUS00Y> zSsTb!eAC^0B5;|PfSR!XX4k`muN;~{cyBCy#(Q_Nl&1q*wbsxOvQ>*d*iUBlVJWT( zfwOAm@YW>M9EG19bi{a|Iy<{|TGU0*_rY&ZN*t+lcr3Nxel;CpNub5s{0v*p4;8ON zcE}i15C0Y<`X-DF4eCzC5Ld_JOoyLb{Q8Gi@8<+pLm-{@)tTae$xsDJs(4?{{9J#OdJ4#P0t z@n8LIBKND5uhlYO9}g}IUZlLCJ6nM4m(mhPvF8%{Z7-L)g@etuh-A#*7*ky=hwI1R zHa&omC%Si1LhO;%W6tJxmn*J?II}#0)M{b_5TbQtZUIz+#dZH%1XfstvkZajK{nds zVl^L9W`osfsHYUZ{kYJjm5WJxYEDAGk3PGOyzKRXBDA-HpY^BPDm!cyWGr7v;{)^; zowi+|7y(<^v&ihko$JOgDq*lv`6jsaf~i!vTM`*?O3r2nXFd=~;lgk>DCh`)!EtJ5 zNkV7!LrO23M|{kGeBUh;w?5mh9<{VqCrA&sWGF+k&nW9WEH&a%0-XYvQ+UQCq1Az{ z`uKtK)ee#_0)1pKqndrSsZTxbw{XYOzwLBc!KZ3JV@IxOV){KgsD_)E(PWihb@FTP zl@2?DD&6~CKr}Yu?5tK34ix+wGu6XPiATfx@K}n4le>X~{lpe0683=BO6#l>pNyT) ze><{4Z=vlyNup9$=P~A*O{7|*Leb`6($1u!rGL|SDu0hh(_|^RNM!uRG0dvCYBU=L z=PoBxf1$fwpT%MQtd-bKi`RW2Yu-KStkvnE0qK8Evx7tSGLeo|Fr$T0bLIMb8^wkR z6SiQY9;UD1NU})lS9lqmDmpc3_?tk=0aI?HzCSR|dbGIC1<9NOIj~?kja;d*>^)e0 z?PFFa3C!2d&2N?K!~z!`cLQiZk@oew>I0;a%l8A3~e>wZCRaqt136yNX7~d_Lynqv{Hm$eU(~#;6tlQwJu)p z(MWXhiAtXiE{BGz=}$&=4i}TN`Xrar{%F2pujahN_b>NrY!&P?__HwEnm#MkorVkG z%rw(3yu%AE6I1o*dLOl0r>(<`{K(958@-i{RUVJ0xt&5Gniip21kZ42jI868apFLy z;;}IuzExrR*jkrYbKED+e32F)W~Xa{pQFR{dVr^32J^HP3&1)-1Gg11yfW^Ido&!2F`u-c|bsPd(V! z9_b!peBJ#|c<~=FI932ZZ-eDZEdBuMp3&Dk@R@`G zF`&$Z1mrj*rcX{QiwqKofwq+Ltqp2DY^yqNKz?wUo);YS`naXFF_hB_K< z`O5A#6@X;5`jswPytDRwq0+V~uQ?b5a$pTu3I9}EWEDE%T0V+c9Y1$g=Bj7JD(kJG z&bj5F3j#Gitq!D{S$g_m)Ol!~9VL@FLW*}MzovV3*+78TUTj**1*9)IHB21ZvlE8= zzPLviNcob40@9CJN!s!ktzIEnol16o%bv#88dZBD7B|7(Ab4pM1;Y_93&t!37_Q%(cU`%ToV|(_b z?^WhAh!;m^l5v6h-+Z$xgX6ZpjRwAJWfC2WpOti}J5+Y|a@*v6eePX^`ue{t0EfU3 z4A-ln_=3|#6k_m1GnJ1Xx>KygaEu9smU^{uGh3r|Y z=;Wt%*N0KBMI3GK{ff^)8o|C2CK};GmcgS^Sgq?c0)nIaHfk=hKV?BRn2)!Sn%EP^ zRowby4$V5VNHaoBL?k;<_nJIH_?_*a#D4le-Q9YISg&sc+n*(M#Zozs*rI(gc3D1P z1A`%_<8TlK>E}T}C#zv1VI4S-{XO(#_I!on#q8Z(;S&6Ad!Vu~|}$%Tc$t-P;QM1~+LcM|a21tq$=9i+q-Hfh=ZC(!hP!GrrG!hy_irX#{$GQ5 zE?=VR!*YtP1T=2#7fS~ZwiZi^l-s1)O`35H#g{Z>KFu&Ff-h{Trr}K^xs#t@?=<7x z3Y}PqbB!Uhe14HxUrY=d`C5ls!4WG#x|WW~d7r`;>W~HHkeda0SSW*EV+G1R!VM{0V0J|JeHjiYy!mHZ1+H-F%pxo4S!m5g*EIxII3Jm2%wa^fR%z^Dt8W+0gj(DKC=?u4cyh`OF$Sl z+WzBxHlB6L9CV7DV{{R+K+D=|v18OJNOwkvbzUhUA+y=XfPgPeea*tt?T_JFZaImre)_EpF9t9#mQ!_$HF?x{6jnbYRnpkKNj>`{4n|Eb^DqH~)D z*%})3rv)2Lcrf!+goIA~#GXx0AR{yJi$X5iv;`4}4+Sq*ISa=VDf$V5IViRi?af#O zE?QHTdZXJ&?xfR6C-eLA(i+lD>Q8kbKT1IoVGBOrlbU)ygHUMI0eP8H;`$JM$xWAf z`y%ki>oAFix7o8#_~|0LO;Sx)Itn-qFQ5_yJ-I8=Xl|b88UDBfjrfi^VBpd@XWbrw zsg=ENd{!n2{g8e7U1#O560rq=mY(cC{^rkeIoM!Ljc`B7?n{J0HAmy;oo`75p! z{Q`kq|1h}{u;T9~2ENR%v}Aj7nx3t?37w5+cG;{d!`{{8Jqu+rX1bMV5^>2-ZqKCR zvx+Os5CH}>XnW}4jSslFchacRXOD3j=yN!c1vQLDJv($g!aGPMwUmW4oQ`6ih1(jC zs#0@)Fld;U^yXD?PqM9~$mF%UmeY$O_RDCdeGR|xv|9xaFtG!6z6i5#ur1c5qrRc? z5fG3>Zq>v%>))U$VPSc0^ZI+01o`+o_h5(3{r|HKdWV_RA1mWtl<(mJo0O_xE(h==RX0 z)0-~s(7f3vr`cQPlLjHhP&x}}EJaM2N)IgmGg%P~xf~GuA+PL0nMbmM+ssTrSx>e0 z!j>OHv8^j>L;W*{j2-?YJ*L1~ZluQ$pB@spJ=p?>1TTU(kz)ok;FdN4in0KXSn_Ym zu9{GJ9MTb3>9r)@*s-TVA3!o{PBQ7nN}KE;{Q?sla)*t*p_x(A;5%vw4XWvf9Uh9( zeXiW%%Tge|5j33u1u`#7yOr%Mq$wCJ{$)6dYC@k$W2`vH2zvD{D;f#by2H|vwUYS< z=eCh(Bo%rxWiBXBmf+KVTwl|&$Z9?M{|8|OUWVor%UgUo@Qd0acEyRS^jMS*L?A#i zsTFK?^Eua&BjN|A73EykWLlhnp2{Qa4hzZW$wH#FQT+3jaG}nmc>Kc4?(` z`Qf2;#hYaNcE#I6%nFi+*HY#Wbt5x&-LE+&ya6)^uIn-ry9;CWy-OIzj;xTprNCP{>OZO; zDY;e@@w4xh;VJ)5? z8>h|ta9Pax6n~nkK#??TL79r?lc=jMyZXAx#)*3oWNnumMKzG8|4a1etrFir_1w=v z+P1Ub&8l%S)cE8lT>Pb~)l4*J=L80Rzq`-T2jSlz%jG5odp~)?asN(4yyejQ>TxjT zSLkAfjHakeU#TQOiPlL^q= zGB`0<+BNl+y9hvj1gV}vD18s@m(mxFQMMQ+=Xnjdat&TtD=LzePrxaYGvv9O5}@Is zw!EBb>BQXNg1!Z1YpTV(UzO=0o2i4(vEPeJS^wg8Lkn8@A5(U^u@chz>~tnsDsV;1 z=j9>kk`@YKZ$|s|j1ole6)o=qeyGID7h7sC7k{V0`6KE z7bIgdwDd@ab2dA{u-7Hc8$In*KKXF$1+nta`)36d$Os$nQFU2pP2|?5O&w&`N5k6V zGQw-NE3JS(q%)?mye+eQ>tvMIb~YN0`a%2q-<1* z5>eoR@vwbervdq82Jc(;UGML8!aRAqsL{H9ruIFuJSE;kNa>vOP-z1kU1*^_lcf4t z27678AXE@&=2c$eE{8g5S243nr{o;sz#>@t9uVAWlVvt-L!L9}Ta?ZFQd! ze{Eci_KIRRU^HlBAxc9u6DX9a-0mkgI|xuh3J>HdYR+GpH{iZU8 z8VD_BLk%`4q+n--pPK-}^ohL`GpVMpicn8R5VK=t*%b?r;o3WLL zgo@9aoVlNa@&DX&t9$$S91Fz54gObJML(cNXr5*ze~0(ACBLz~%B})MAYedZSpD(Z z{TE{hdVER;Wyy%csZM;k(b`EG2YL&DB185c6I@mx$%Qw%*<8dvQ^U7@jv!lim?Ba~ zOLkh1cSD`F)gns0={S=$Ueh$+*D^1qU5v6D-Cy8{1l(m*+o;VNE`wJlccQsxZ15Y^@SEy9j>QrxdGf@gy{IG|4kLFTpQ;J!p8Anv2b!yn}B}wQ(pkuYnT%=W;Zf`@jyVd zh^8WvwKQV+%4jo?W~pHbi35*RRjup!!SZ={#Uf??D25;@0l$E6ydR;4p`WXGu?D!Q z52EW20mEbSpNHGD+tV#o!$y(%cdREM8VFiq15Oj-f!XiHxA%;CucHDb9DydcAMH_V`CN-6dj!BJc2IR?}|2cH8OOf^Y&FY1y+?D)iO_^ z1*zYxn$>%fmz>T^9uRSDp-Ze{vrBcD^_UCFfuK2xB+4mWaD9L}Lx;dw^oxh%ta)Sf|+}@vfAE^2KMHN@$(!QBOfV%y4>+DHd7aRs(qBJP_&66tIAV5d` zQm}RJRdN?m>Ygt@?eCJ(5#yGIQnKGat|KUOc1p5K|LWU?LZ4GgFNn;X4{z9PDX2)a z@G`KLH(Hd{af^T4+s_?C-U%5H5p4;)pV|Yi?r{vLp-{)4C!iDJF%_EQ!n z3)raHdFgfKyR@>vYd6Z${B@*ef017cSrP?aoza-?-V4t=Q;OGvjxO`uwi%6mY3&WvuGKwO) zIuh-^-sBd!W5 zX4T7OUGPJTT2mrF04h6kv~#BB9x5Go6WEPLq4~NXAl0H^#tA{fW(hP+*)Cs4QujD7 zajSl$8kjxj@BC^%1fFwc;X45W2Xi8!dp6VyCGUqT;~o1z_hsw)=Iy*#FO#1VjHjso z6MJ$}gOK&Mm^1CI2ArYQTCK(p0ejErXipDkmv6{@(evMFVx{ruR9H`Am=}*6k@=& z!ho+yGWsxLIN-g$9c?t{h1}^9G-Cg3g(YHA!!=lg)ktgeBV=*#>;&lSd@2FZ5r)g1^I31oTKy9 zKc!SqW$kT#f|NIIgOJIl1;L14z%=cIHToW#P})t7;PZ197+}wHGVWh*tci+9?NEH# zJrR6*5IhCBhDB#ugmzF-vyl3IAe@f~)2Nz#EPM}_rW!A<<9ycXv5V;8iRdF}Og*Ht z2+VKJu*1ER*I_t@GmF!!ze|P`bVN-3P?;Kw>e2px;lPsun0zt~CXlYDl>$wH_7+z^ zwvKCEenJ`EWNjv$_vun{^mIhzxoLr`-FsH9I!GfmLLU=%5gAbj z1%*60dk<9t?4zmJwFCSD^)!-7EW{hg}qWpx#N9 zIgeE|>hSBmNYkbl6bCc;F~%M7{6=CESY>GFtYaXEC`5puR&6Z4T+|J!Fv14|4Ng9o zQBV!Qx9DzLtYLl$|KMSDlpmD%xx&KNA14_~Fm{dp6DnupUttiXfcs{98me6e zPPQ0KE!|LmBc!{6#AJE9jgO?sKa^fK>JemCF9qXy40Awbe1Knwg(}<;vkIZ|j1t67 z@Da<8puObehV(ky3vSbm!BZ}-G@j5Cj?WbrNP?2wNY`fH97!9am)>uZ0rRQ8HCOnQ z#fdG{sK*P|cfDiX{B$506xTb0v~OjyhbCdzF{0P%`3(9#Y39(n|J&eyYAgJ|nZBjp zWze&*>$;lpac}Pl#g`xSH0t?DInLs^uKzICMT!3~fXR3!n@Zc9zTrk!@%FkYRA2|> zwm%hUlfm)LXqz#?qe-Hf^Ez-6(i;3cSKyZ*Odl`pzID}ot!&e=#}i(myC+iT*EJV- z0`wbaj>gqg4z{Lp%8&bwu<;UK(b*gigEJwETq#l<&wPzZw9Oqz{QB>(tdiJM@nF2t zsK?9@zf5Aq!l-CDc^+3D6^+{x`+S&~UfPp`cn0UmvF7DPmvz=!3OdNncK9cU6Z!^- z^(}~)%m23v;P@1b(I4Z1c7v6;DJihb;6qD)5>7MJKBruo2|*wMOz`)u2F34(#bVQ} zhsx9-yKl_CU~i#SeTlq+7yufZK!j;Hf~42sZ9#-fdIvuiz3@=!WQ85?{11fKG*mNE zl`>%cujeDCdxE8=66B1RWjdU@Yw+i8BVqjdUw&FpQm=d4FNS_)J6{AneT5e^^He|t zPeP!uzY3bX@)JoCROt(TRw@VKj@n=UXq9lr6Z9;fwaw)s8LZw>}Haug273lzh zBJe4+I8#7Q9v-HWUpP6u$4bjq$uOpgHDY*$ls)25CBy2FTNA&7p480#(TmaubgXKG zIU^0u1p_<(7nwM5HWRkjeqgGCqp0ERH=bKL@wa3O6qmoh(plLMlSA&VP~eVra_>sH zkoMik4_Sq{<{;4wBF%VeYEc*SAeBAqSLePFa}ZD7t6TmZUDKKU&GdLa)!?HMO1_Zi z??t44O3@r9BHNj&7+Y8lf)2p;vmRZsddYookGkf^|994e92t1gw7rCSo(gWgI;a#h zRFeHGqT_#JxVDahy(+IHqN~%DX4@K!W7K(>8p4PL3VwW+?@bsKxQ2)5lm|-Bp1;C~ z^huZk$MTl`2xLn?`Em%Wc!4BH?Ffz{52@S$1o{Wpfzo+i1L1@NmA;|z2U>?oSANL* z^4L!l?j|ybH$yV6I)CqvBUev3^Ta{fVfy2)LKztq)nw^!{_#8Jx8U(7V)_(rqR&yX zkn#U3`?dE_ukuW=7n@x|&FN8}02B{? z9n{X211Rj<4B;xo-?-y0-Lz~tK;v)kC#$~dO82V*Z#eqGa1c=JPyq##`s_54s!3Y$ zAERAFvg$j!dtKxHP)BB(ANhgCoHXt4G#Nnk_Zgw6jC|XMbq#Y)zJEUDbI| zv0LGTVc-QwVf;})Zw}nYzEBFlbs=tCJKVNfI*z;N&b#M2eQ3YpuWpj&|N33+kuly> z6VY4mc8g5v)6C=QE&_5Bb!jq&gV7Y{R{^n+*iw66j(E-6LidDjGf`LJh85$ap6ae? zMZX<^CaoOGHH>A9p6_(2(JJI#5iJXls*GML^W0C{eI)bepYOFjL5Tqhz)A&yu{h0t z3s}8L5S_(9QX&&IBOtV(SLG=qIN8SZsrLy?QE2`Gdnz`k)}E*fQ7G)@%VE4-q>+1jE~SQiI$~-7n~GoeWjft4{)PK6 zJJG2s{}^6jLBYxUR*14zlF)F>Wneh8<=?3Lr3i(;+EH~bJR26)_(V>kQBVC?P3;MP-5Ytp(XpcaVxxdci!y#V$KZitp0(= zkb*jDMEZ7f;Jc)2D=6Pg#a! zm01@gR5EHuiSGmH#Jed=d{%RrBX>C3VNdP}U1auAx-5BE zQgzHMGjp&be-OWawhONi*(apernphPPmpqdRQc3379~GBeDu}%Tc<+#9|A?)H-UM@ zQSiF^J~+<$T|;BV^%uF*I_$468lmH!`JcrwODt#OXg+~8*6zIdnfUK@eAC-Ax#C$I z-o9eB%&B1*dO{G;wtoJ_yZtRoUr3o;rQp!mmZbtLUCJV~| zUsBb+Uguj1G=a6iV#U43R;+mH`ACfH64)^Ojm@FwPeKXEwCSW~jL z!Nax`p?Bv6$5Kx^W7gQ_K1_%}i8zs;?lC9rB4Zg|ZUS>=q48 z1#1UW+v12a$GniuBKl8P%TBjh3Okj6S9ytam4RcQRpQ)t;;pjbHM+)9{=@G|fx^d3 zVN#l8GMaU&gBH)V5A)TSa=+Oe5|O2=uTJ^8-VQvJ1hgI|@hqnB95%A0pu3Wz+puF! z#=J#M9FZ8JG&AePXz${4AH9d%q;Tp}Iuo9KG<0wdQK&2mx#StDS!ZtQo#w<^G~;f? zE=^iuFj|B&>c#MwkdG4e7@xf7ejhW6+tXHGNGfp#;&dox)SF^89k2XmZKM!AO&rPm ziZma4W1tY%TD24V>{Q)alkdsZ78n*Ld6o0Jo&1FS#W~o|n8GgixW+v1C|iVhXvrBO zWTan8^&!)@q?px^2d8^BAS6=>RZC0a1H9t>(w&xOdDy~ax{(aIS6Ccal~UT-M)6#m!b{&Du!Wu-e3B~(vX@Ew+%u%ev23>0B^woWA^d=` zf(|Dh?KC?q&|bSggy*#CDCjlg&HZ{037HfF$#!G+@GG+mt#{g*S$@o{}cd`=DA`rCgq?GSLO{x6{#{&&5UUgd8DSyXYNFuxK-V)y_nS3TSt_+T{}FuGI?|^^;{u@TX9;TpSvnCxz$^LXe|02 z$V;#b;}AaX#h4=r41k-P0IuCLEex4bYfNh8fdMt|OP8rKq1|r8DuS3ZT8QC@l+|3e zJ13dJ0}%Jvc9c#Qe_rWGQ|7!BY~l&(Q$PQq_*xget^5Ia7C-?^7{l(|-QKe7u`G6W zDq*64MpZM`);{qRq=qGp5ngvGRH!#fua(K)TU?~^N{71Z>Po`|4(Y?#zhFZ_c^n-q zXV}qoKE{OgOCtj-MuF1l-^>7iD<&T;nVj#P(a>r;K=)r{?5f{>>K9#IhJBzz7 z!JXjlZi~C!L*C#2)~&i<)i*^IwQzQ(&vZ}E)6ewG{QV585t&$UXoOa_tS#Bjd|m>f zqwj3NZBuccq?KI#KWPWYqh}7_JEJJ3vb9*tgsi-*(^>F@vInX8|H}pFU2{R<<>eL5 z&#T;EgBejjtC$G^hQ&%e0HFWJS5Hta%pW%gPp3>POO zV&zM*rL|7F73L=wDWE>%U&6e?fNlmX2sa-?PZ3GzM{o>RpKKQ>tpvHw?@IVrc&aU) zgCq&`5~RFw-o{b>`yWX1cU~h9wEbW4?)_Sb^?x5gI+KF`kDpqJ=?;6Y!%v--4i+pK z?&`J`7KNucMEiMcAJ#|_kacgm>OKL5Gh5}?Nwp*ZYIixJ^|R=|}D{70Y^mwfefRlQey|ZySwM+{CnfKR=9>=jP-#AWJyU`nR)XkP*9O|$c3K-vX&if z!D1JG&L*YpHL>0<)5w#E6V`4ITwn!aM3Pc1oC4|yU)$PY>#WxU#sA>t?P)h7>^CC} z?mSt$I?s3eeFU7X1M+4vSEEDyM>tBM*!XiZ7mSY3aFmvS)9Wo=?DU$;#e`qVwb9FR56dvl*?0 zbj%oh;J-T3DiJA35%_~!jDdcvg?@#ZFAk%tcCjpYt-*q$E-Mqz`4qfPUQD)>;T~>L z2u55zgVC{RbuW*6c_BaXz z-}Ts1G;n*@c$S;jiL-`2s5{tLbj<#I-(@cJZ145+Gd8X2W=$#O$3*Co&}eEDL+SF} z-guXC2-&l*HCQci7>h0*k2QD9?L5O?M~jKX_uP#q!=-3Nv{#4ymjY=xR@=X73M=dD z^LA6t5~4uHZY$klD-Z}qOUw41Yvv}>o|l|XwTtOc!GSI+Iy%qwTBbg3br|uvL9mV~ z17ROkVcGPo$<`dn{Mp^`0}DCt@4+)L?r6bA9NGajWo2W2WzOol`t2}PXcAy_oK*R_ z+r}cgo9*slak&*b-85v74k?f8&Je|)#M)r6ga5oMjrz~=xXQsj4ljojyS)v+%5*0 zz8puU4NGx2L<=iAu=8DFL^xm0m45O!p$_A}G!2Ym0kk)!TT!4T5VnLN^c+-~O4N;3 z03aVw{5^J46V|7Qlo)MISreQu5}lFxY%?%?<6E>(#S`%?o0E6@m-|4{g6Mg63i# zq37FtE(SMyoHf+ZYe%*g@I1>fuD7l}WjrinDnQro#q|0cSd8fqO1I-&9N zCKB)W$bpL>n!j))0o`1jygFQdS8i|Oy{oNEtscnTLa^|&sc`=*7K5pQMtttY&!U*3 zNgM*nv#u1_l~L!ThEu_*#rBkuY2z-mq^B|P?mDt8o!Bk73G1yc?N4_tj}6k` z$u@Qa`X-yR7(OzGo2mJ#CXbmBa|h`D$wbMsP4ICaC2%V${(@cUY;WJ*)MM$saZQc9 zmW^Ttx%L-HNhMtL2%nkV$cyG<$z)h=!LGP3Nue)EY`-d#%UqoGdbI&t^ZIZc1Zg$Z zdF6AQ!$274zDpirwdXKVsyg~OH2*47Tq-1;vRr?qt^5*j7-Qyg1zJQzMB`hpKp(!9 zx&Yqz-&k&??T(>sI@yhN3JKJ-ocwW@7h5toK%38LszC;9J>DdIXuD!IbaQ;4HsiW6 zL4;TPcE)-65+~9>Edq1ff6z3sZ)y0JXpM1Eks;OH!rE^!CM9$sko-Db`zW)w`4P1XpZ3nfJSqHS=iL76E4skjo)mtbu+3w ztetP_Nlnj9OCA`+@DANT1S!8#;$shrc6San8M*=AJ8?m}3b1^Vc`9uGNW!JF*w0(Q z*@BFLTS&ZunTLkwBk^K<@Ni$ixO56Cj;1K9wir>zSbgVosPYZfkO6z- zGRMAoAZMty#&Z~c?hb?qN5df~iQ7rI)y5MSZD|x@gl^>5S$B3_mz)ny;+_vmfhH;A z2RMKtrA8{ba=PU2?hv`mRz2gtYz6ly?OuccTD)#69b6)M?MQg%V4B^WTF#TD8Qr@2 zoLE``vM|D@nmYu<#fYWF(YzNSXQXa?j6qqcPOdTqdzn8)4LkPnS?`L$trisCh?YLP!&FAwwjJi{Iq+Vl+hU{O`=^?pr)PbRcrhu*jE^pgPB*S zlKbf`X7)@d3H?t&&6r0sCh6pLe}34CjwpkyU0h-SX@CoL-<5RAd||wBFtE&PE>B+xlAzRK|=afT<#B^~G9+ zGY;13#Xr{_cQBafzx5G-C-}JIXO|{7Y_*MtJ#$G((LtUE-is8E+ z!CN$BHrUvLL$7ZA-!#FFcNSFKFavw_CWXxRVDQRKRh7sm*&nAqm=y`g2xGzdQ>Ie6 z%g5$k>}>8e0^Jp#EVrL)k1m??ax{ELdd}{jUwjT7iSd$%E<9L0`uq%itEuTi#bgXld4R#d#drS2V;W}#5xv#objbJW6Ee3X`l17VvCb;EaI4Ot^6Ixo18 z!SLB7jF~D^SoeN6qrR15bKzx zObVfO#HkPU!*XR1;^Rw8{%+*Qj7RSB z3eeL7ckaR$d1@OKq%;p^!+tzF=s5~#6nqhnNtjBwxG0GbwL;XY+Q=GK*;l(emk66u zGIdaM@<#x!qTH@xU*ii5sKQh%^g}Q=R2Uogk|iTbDc&oN`+&}Iz)?TL^elU#s@jpg zSHE~6Bwvw6gzQ;$b8Qvv7n!3-MQHwN;W;?PLCF~$WIz`l_%fmZLd}#mqv});)TgVS zs@A6+E8cV~_)}E%_8M7wf=kRN@^q+nF0sa_@Hxu}HBJAXV%C!4B)6KEI}>HF*Xd}^ zc4&ftD=Yk&jcu;VO^>fOOoxkd8dw*1!@n(S@BLC8+tP5KxE@$F5XzLfoxQ(Z-5bjW zputut^0?je_=e8_Xo{yJLLyuzX<#r7rBqrdD7d*5a8OHWBz<0oC+sJ3bBh4{xHgQ_ zNgYU93C9zk?Vz;vvweIty>a|?M1~0R)>_^kNyqul3sw}#%0f}_;0D*!Y^2;@>{iJ2 zY_7+HDrm_i@X(U6Q+9L0`UUPG_m;Vw4$4CZ^G#?dryl1f{sHZp;0(F`?@6A>2oc9v z*!99v9Z0HN4JTIA908&emZI#0B@uZ-enBkksE`W9ihcu#0x@){O18{hYWFLBwU?sY zhAWn;9i6ucv+&lOj9H-jpg}O*gcCHdu8C9dUN@?0`EzE85+che&aA%N;nL#Fp&C(P zHKZlDgGs@>p5MRslkLfYnYz@@Lt30%PvX8Z^H^qNg;Poir*S~k2kbu5if#Au`2JiH zm#Ay(7cNNwL)hBBzvz$1cJXO?m{7%4uSa-dh|mvLLgu&F-%c6r^Sj(jHEKrz9lgL@ zpaxKemE)I$0b$w=6)l^Mhr5>GVWdmi1MiY!VR;V+y`P-YV2pYme2{m751m%rcc!h0 zp!sY{a)${Im(CFc18vVdu%Ge5sf{C+KnDs~&WSa#OXq}HDbVAfX!=5S@!|AsF^rRj zgJMv|;JmUyDO2ZI{+qQF^qA1|I3fr6)KD?4S1k~{=A>RESfzW37Hdu0&Oi4T5_04} z`PLoSe4#WY{w0`0?5h|VjJxo8D`y?HH}ttnl7>pZamY}utZlWl#Iwk=gPJ{MPq`)G zPwvici3WjligQs!I`UgiaTapzo9t#AkoowtP+lxOW0?>w0evY;IgGIp1d`_&RN0d> z{tO(2ft(MRSSImTGyZfXzeB1N|76GXpJ}U%1A3Y!K`UV_es@_lt!3~An(E{!(?t1W z=e~v^s1KJFlANBSM+jttOP0=@<+FhR;=|RsBwT8_yuQL~9-ENR(TNiTpIYJ|zP%By z675*I(r(dW;{ACGT=<)XvUuhHGap)Ai_r6g2(7i{rjohzOB8{R{m|v6qxrarDqQJ0BgUkif&2#rFW$$fHsxzFiC_Ym`q`#GgMk>wBDV zwYjje+cp9qKp%%d1erOO1oNfGJDMnm?SFvmN1+l*!dOJb{VS|Y&(u%70|NCmH5K)7 z@y}$LR;{%)$FAE;6Wc8L=**Hs2Z>lI9mVaW3~d=wYpL;uO+ zKJdkn?48 ze4&>E3ge4R-HtCQ;%qhtMN$wbvu6@cMq$i^!*+msmQo;BcGI2LrhM+fW|6Cl_6n(@ z!@~L#qr1vn9b_jYbYs&Jlh%`{WZS-`eX|@&t=bs&fjpL$(0GrmAHT$6m`5Q0*T7>R zroGZ+kD?mb>q~Ng)PZ(N%V)^yf)y+hKevGMW*+*1?gKIi^ubSo0W`0!3)jYMd($F& zTHN^JS^O72e}AjH%J02C5xcjIkFtkXz{v>SZbDl*^Oc?qc|}q|VDRoiA?#>s9=H!u zK6xs#f^!R2&0u6y^j>uJ8Uj&EQFF=K?_&dlxnq=jhHppuj<#cX!4@J5^*+k&Y5iqM zyJVR`J}|xpMh+g~+DVe=ML zP_VLSRzScw!AXDKL!?_ot)Y>8DJR(83jH+XpKT z=ZPpuNxk&0>B9gho}WboK9YG^LyCB&lA!uy&%!8#EQFU8nj zfD=#9#Bn$XzZRltZw~OY-wkVs6nH%TEhMUTt&PT3+9$0>YJiTiGd?&a5w=OhUM!>d zTYfp^GAm{!Glm!4WX^yLvG5mzkxH)X!Ff}qPob4eKKPKuL1zvoz;iQst2cp)0P;53 zB2n2~)uVSja?YSHdIh?St*ME9W3_ikw5@MaIsg3!FP1OjDU2veMLiHWpVHCU)itQ4 zc73cb_{7n-QSX^I7ro@W6@99t1D0cL3SnVqlDjvSNQ^WV|BGGA@v&IeK#WcR6=^v5 zi;K}A*+^OjiUopy)Jjdo)18`_Vh8-J&eYM-QSFj@EeX3#YFr#pFMwhJD#7N7nSp;? z3J!uRngCNAK>oB2Oiax!xrtQrK94H=_Y`P=U-bNWE8iaI~;Qsdv31`4uDIqpKzAeCSuq>oomT4EGpxQFh0k->81{6-`37%#IYk|j> zRQl@1EKocFFtJ{q9-7HhEf4@#%z{D+i1++o!NY)x4c}(FK3mpeeE+^Gf6p+yu^o8& zhV`E0P6$E@p#+XuhyPjgZQude8}EcLtTrd7*NkiF-Y-D&AEs%wQ4|ay3L~LYqqiUs-|QQ+vuUe5 zMsdkYQ<7e8gnng+e5uvzI(MBoha@2Vwvft|HgCK$*XglL20xk>-3uu z|BRYI4KH?!C8ypCtjpZD0gxZs`!06WJ}DXa=OpuNi^!WtM`i!|%g@iR2}jaNsa1ddGjL(c@d*M_vU4|~D-Do2R z`l^DN@6VeXSx6TMx*(!X2ZJsimD3}-y_*ZyZk2LyOG!xdiM{m0*l1&m`hV}}UH@XN zLP~1~I+yE|oZE1*j*tIVEi%oLi(U2I2hvqr(Uq zv+L>hQ;VDp@lHqm1;*y=_5FzSJg!Q2H&I_#Ou@l?;_Tf=6X)G|48s5e_*9npS*Rx( zR|}Fu&it?NJzPE)=N8=QFCOwkDVSq`%Wc!N(eES+1NzUv7L7&g%}woR14N#YlxjW1 z;Oe`+5f6YUQ)8{CUTX~}ih0QrAi6-$bE&ns0);@@q=p~Q%CT3zvX2D|(=i`Xvhqk_ zq%)NCxpC@U)@1yYUW@fC|-W9Gg)h9 zh0bMVGqU4uJv=z_{5+tvq<6?uvLPC8y`PalXXudMtTGg)ZgcImv65icCT0Wo_v?c- zt#8?l>HR{QapdX#b!pu-bmnX$>U|8Mr1vUaRBpo zajxxkktD~%6jF&6N)Tzsf7E$~P2c^u?Lk>UF04K}0N~0}7%ZdT*87#wHQ<7faix{2 z){BCr;@n*-Mvr38zL(doX6^vX7Eh%$nc2?tykz=5FRnuAluL_Su`;tjQ&7^;d6dQL zN)usNHz!?@AzR3$w%QRu%{a8uw>FE7rM%Qi`8#N<+#NXkai0g&L|5ovdRs+h1S5cb;U$`};OTq17-_dZNg97b&D) zrPr=S5G-xqbsZi|``905s9y4}mgZ6UThVJHlQZC`SR1kefuV&Vwql(LD5jbfb)p&@ z1d=V^`|kxfMhZLD{jZYwb6SF{fF6?b%cy?0cU3)KJ$ZckPYkxU&!$m;*l$0Uw@0P+ z;(1^O1ibhBjg8ecN&QrXd|uejaGa$V)7**v%dUIJ;DDI|A!>(Y3tELXBp-YEPo;^NhLJh#OraX)j--1rY4VRjxP z&@B|GO%pEKBWr10j5AKXuX<+upPxsYNU#U7FRx^6;Y3aX7_I0X*>VLL2t^EWE$&+) zF3Ph3|ItOhx4}_k^__?@QpysSUUCY#M2~nUcZi3@E3X!7*#n0(8TSLQ+6w4gC`y;b z@kZpWnuvxz?bdlxQoyof0$zS=KGs$R`}qi(6i~WQbaS>uUY;BZh^`_C6-STyGM{pn zx9K269 z`Uj(?MeJ$kY!LK@86ss7kx@t9^}O@4ksey%2Cs_SUBERhg1pw?_Dn{isXHHXfr?Jv}jo9o}~eS2%gL!J6A;Q^QtVwuK=H>A;G zsV_9tbkty8_L@jLCCxVOYe-|G<*4)D8E-r*r|Qf;MinDmgyD{wd4$n^jWl0uR-8AP zXc3ANXFpt|u5-Dg<$K8fE%YL)pn2~I88=wdy}YOD=U|wU(FR3gi)MwIDW??2%j-bi z=vZJG6)1Ii1JMeHq|fQm3ks!oKEy%BFJ!-TqIoi)ya`Zi_8Zb3fdRL}j&Ie>1|`nb zKzyT09&Eq7LPt-5S`K+qdansd%4Z3lNVs%~%$8zmSgPEP%L&U^)5@A0Q-rFj+bxD_ zbRePXGh<7F!3bkZVB%{nM6Glw4y z)Jr>3LpKd)fTO<#)pUwFS zrG+Bd&0d0<#73WpFNsp4W7)X#7cIthm%#khWuci}z4(v8E^ZIz zJ$NN^35%KEq)Nhqf5+`Jt$)sGyy&v)@G;Q+@-~8>gF+QU z6mmxZ@_V=JUY*A@?c>w<@4+acanLEdldyMy+F>x)kBkbdrd*3 zWiN7f1viaA#1sPyq4SeX=58XMT!eTm3qLTG=FQ(hTWmaF2a*&Xal*MUz_vm{^8kco zX@yz;yMx!QfFIu5$rJ%W>v}>m=WbIJ(dyI}_@jAFPttB2YUre>I_e&;ZE{i=?z8lK z8*tH3sxX2bJEskZmuqm@FDJp)ca&oRJ3jAC){OPoBRai_EabaII)LN-=W;g-6C!uX zJO=0CG?-RYdpxY8@7TwTT6XC6J_d+#=oBXM=#Lq~)C`UbMe;~>f3I9$A_E@EN?HEa zsTc(#2E!mFD2KhCO018V0X%v(Z@a^ZoMjd`P7qY%7sfq&n=N4>f!T9`6^(FzB`e0L zeR7Z7dvjJ(C=aaP;m5dE50=9n7d5pUQPcS43Yk0cOI`49oB2#`QXD5^6jd)3y!7}Y z_@9}MK=sDL6%0^!#tHgzz4|Q?yE=SvMC9hWmblXiK8nFIS0(Ca3&ji$wo|qdd00fD zCT129Y)h&~e}k-J&#AeqsglOn^_dD?sBdKEjBrs4#%DEJQDbMDi6!Q^S$d|p#Zbmd zwUu-wOM1h!g8RQ|;C~Q{L4jyvK8!Xg&0tl;7yo?qK9h;XC+4x~x=zJ7Sxge2^hl|y z>i8aIPMlC|F(It~}4}*4vfEy1K#DN+e}Yk~UA3}Ed|;=D zleL8Ae__MsPn@V-GB7yo5f>~E4}qr1ODr5*+30RH#d~gI%^!VcM<4kueR3uY*h9B+ zsbP!a7f4m}U-Ahkft(ub&ruD2NB?)`Ui#xoyiR=ZMBMd`%T!>1Jn zbV|9+&&hm+o*Dpc5DG z|0b#09`$#Wf>rQ*rbj{rk3$0g2a8gw8@UqEbs=8LT!bn9`665j(>jl&Ur0cu&TTRk zsnW&8>QZ-~Q?C*1CDSO_(00fQ7^5+;idiyHDuk=86HGwo*xWICpGprtI;sFsk+E}C zYYa<%-FNiBdK&%B5ZDIOqOrQsP416?@m)+T)c@sKY{n-r)6Fg6Mnf<#PN(6DeooHc z%)^mLGU>0YkI6m{s$3Q?RJV<*eZ@xKNz_k!bI%2VaHsJ5;@6r5j?Gk+0DDZ)1*_oK zob5a`j-}1RU*x_m_mhA}FKTgt6Jl$f_qy_GUI*kC=bp*HQ=_W6!EfI>$`w0RF*QK5 zYYNhOBz`B?jyN0BI0`iU63n(JpdmBe9e;<;K+ZPE_y(JUPLp?$s#6#WmqC|JryQK# zf@tj6xm{S|D$^k6l4OHWg9GgOG=U}Q-=WZ#n^enP0WioSJ7k^gH=LD#|4r?F?_kx; z+*kIf0Kai+51SQ=vlt=`W;&1U$Wih7uz+7;TwR*-^CggShKL%Wi`qu?XCY!0E=~`N z$qowTMqZ1l_b%NAFX+v)DWH*PWiNFDJ&~<~@63IQWDf|A)2Dx@H^~Zr+PrD}8%gt% zixz9LVNPl$NTbXe*gC6z6`i|mKMU0jwi<>B@o z;6VNrof_M*{KenZIh|%wr3w>50yl$3A4hO(e%!4mU#_Xem;qVGY0VfhXFKQbd!$;LP8dhP70bxBGI>(AB`S&L{04|UY)pP z%YLX&rXjKc{L=ID?opt#K|DOr?OEzRJ;mIt-9}> zX-ZfHyEllK*Bo*f}ccwD<;3=r48zvk)GrWqFu zNoVwQW>lXm&Zl(Q$}0`cYS=Rt7iO)1_bcN4nyT&E44xPSbGsE)O=P z<8&7;Aq1an_%W>i{Tnkc;GwisOltVq89NSFT;idasnp#euTiz zxP&$)QZ6Y)%Xx2*#kM*&{s-{tg*4ZalZPiO(h@`s4SPk}P1;IRIppl$TG6z7WSn~X zQ6H)Imd_h2y|5{4LRx*l$CGRKeOy0yOy~SLru0a*!xD}`-J^kFTxj)olq75NgVP69adG$4&}zIWltVuDs3*7Ze@=GZjQ3^#s)ouS zKjHAqJRivE+rOA==y%gqd2%~E?A7cn`Gb8U3|1MDF?iDTriO?4M0YlvhW+m4BqytnZXXghm;W(klNMYQ z)5cWawmPoS${L^{djL5Xs+xY$;xWitq?laKGGVJ#`h-e-)ehULSOFG~!j~4j_E`_w zKH_hL>tp`mV7qlPLUA3aqUf|#pd>Bd!a>P1vva`wU*n(bV4*h4exqHvGoxqUleEH2 zlPNcLXm9LRRNKK7cxCM@oP{_-@`7Ij@{N*m`aL4APo%i0PBkA z!HfFf@~1&GK)_XTD9^LQGyfl2`0M=R{;g|p*|S=+4}}y-%!#_Pt{(V8MK;2 zk;cA%uq~v22~PyI!pg|1s#s!u2g z!z;4$?XCgDQz&(tMxr^-igJGm+!g<|)|D?G6!+vW7U-ipPbF$3XAU>>K z)~s0!8&8C8>x*F*IzXcy%oIyUe)r?N|9OmgGsZ$J!>j|}$42&i^@3f%Q@`|mY26f1 z6=Y|HO{3tgK3Ff?%or8O;*@)%os`MkqVp`v^_h;^cVN8-V8!fP^R?nbxz!pSnm&78 zeFcL@O%()8!6zS$fm%ariP%H9Z>ytSDd4hJ0 z^^Fa-bUW6^|7C3s$N-!@K%IX?u+y^gN&~oMP&_8E_V3f1%rV?QHa6Bi_QAmvsL?PT zJu_nEsr>mvlA^?uJ|XpeO>i;TANvof)~N`uD(QOa(kou$4!yc1z3s5Lk_EHnO^lk5 zf3mB5XT(W-(0Zb)8DoGf(-|NWmG&?rBjZ_diI8PtF+)R{djmLwba_vbEKb0aH7TAv9rFlv$YJz^wQMf z#>UQC`&;C*DdU@)TSW57+_3xQ^xDe6?+XUgVPugGRtI}Gbb~`<%8<^%T?M-+3 z1ysB~_vK$M?11|;AX=qr!M{9E`PSj#srL4)J?YDI%fAax1Ee(@c^9D(Ztv#oe03el zFvqjr?CiJYa*ohU>eqzztpXib7y+I#x6$7|_nTc=`QBEh1&ZI`#McIgrxLQgJpmLu zfIdUWU^yxXX5!$3J&FXX zO!W7sNIJ-ZPw4OhM%y~i@--ViQ8vR*NT^4_4%mtlSw0m@ulIj?0)sQQTg=WCPc976 zvR$6(#OmETn^mhlrO1Kep$HB>YQ?b!EElbd=%v?AWSRf_qPN>uE12OTF9V=oMnM-> zSNgz~M?>X)fn8JHo)?0^h^aX>bh$h~Z{&FkyhgmRhsXUQ{kS#uvHn7gb?(5Y7pWW$ z5p}e*-}@1y9aidRca{{bb#DxZI7EiVr)dMFdn12Q(;U!Ml<~TV?1S$G+;ID(HCVri z(9c%UrAj~`9-(>R+NM)5yx1}W!Cz?)OR=HqReEz6p!rv|@Oi^>)m^xj6XJ8mwKDgn zEW(idy5sOd*91ft;z6K;QaGZRSf9#1{4*e(4lW7`3K|NE3k%K*wUnp{VZ%9X&M4$* zf`Y}y_GkyiSyk-hI$HaE@=W=T-7(*-+4IMt$lUy}l;TONRKmk4=Y}IWo(SWyn!zME zK9{^;NBFm81uQ}+8F;nZD#lVwAwj-DFE{3y&W-cmsmGRw9-lWHrY#OmlpvPZV@ZFo zemNsL$7#Y8O0S0Ew^9sXZ=Qid+H{yx9(xf1>FnCQmHg9gvj!%fqmEGFfn7@ocouXH z>x;{NW%s0Fx>4zvu^CCVI}~iH33>rROUv=JXkoLyih}yYbh{=dkuW6aWGy$NFUWR= z4)$BrgJffw7)HfS4~kDGH;@R;bQC+g_k4!0VC(G`8yAPw-#y3R{h@->c_%2p%phY* zUEeo{2w1uV+4VNLX!-c$0~Q8iyhK4oT}8W-o#!o7t};>QP4I728&?ki)b_W!f=9QY z$3Gx{Bk?i@GhM?pcs)KohM?7f$R+s{!m%8#A+`5dzoetsC^=q3*? z9G<{EX;J`k;od#j53tu3iRB8q5~PUlU`6VDQ`3tMdY@@ai9w z?&#;NwMklbWIPq0eu<-k;HxVuOkWG(L&GH=aJUS}5LG@53-CShJiNSoCe9rTvVi(p z&+rJ3KNn8ThDe`Zutx9M)g55LOae79v4zJ6!h!tSddC47ii~TyYTG$mlC(t4qzzhH z5~_;4ChPeGr4jOi0NigpsS<+>0pIksaFgQ+hno#%Wp6v9MCf-PaZ)15X37J9AH1@D zao^L4-bUnQ9e&FAh=v15;luk{U=MIk@HeDaQC(dF(&vS=^3bB|FOb16ryi87j&oru z{U3d3$BM#)^2}e?U+?s)VJTI&hA&ZnlwC8iTUccJ`q5$*bGTVi%Xw%q%ydW#X$~Ea zJTuY8?-@wGO(pz)OSvE&%Y=~vEfM_jEdoL7)e0G1U(0E7W*Egx#K%oy3MdvJ<*^wh zk1kiLat{1>g_gJ??s@|l8bPkq;hZ>}MRJ$#jOIuFVZGLY%rtF%uvb$2ONv}8R1*jO zqVpgmid=9?F%M{DO3kg-L)ML#XOY>UxA;2Tb)*w`9ZXXG z_Ua2(2^Siz-$Sd*ccqEwYD!|4!NJsT^?68>`R=ZY-#0k!cjRj?Bp#m0i0Z`K5Z09S zbn@30LeDM4v1-+}d@WS*`2qC--kbR5I*qB(kI#-a4GegnMXL}a4uZE5(-kC{Mz*RC zy^I2)rc8SEvR(&yYw-gJ`%lhGWpI^0H0=%hEqJ${Ms)|+g$!AteatmFxinO1i$y_S z50eKmD$f7j{picEYeG5p==rx~H>1bk_&eLiAf!KPtsWx2rB2glQ0v&y)jfsh>H3O- z9BFS@>V!h|KR=lz&=|*n1?Y)~=p9?AxS0FbulL6i2awG8*P}$zDs8s#;$4;+BE-8Z zsfcr{VuJi>Ck_zo3?Vayym^JBGI&WEh&@K-?cyjD#RfS^Lis z_Y4+@zx`%mW|>1YGi!S=jXvgq9$Q8x{8+lvU_c%{molr9Nm@5P_Ls5ov`IemdNlBx zNk4+!=o_8M`lKCX&pRc+bBL;%5MHWzl<>N%H?`#dtT?gvS=wYW!&6A(A&737QSkqw z>Y_hdyYw6tDpFig*-D{nr}V4StQ~D+mZjTxjJ+M)-<~0KtU9+!$IdvOc*IgWrpqIV z4VwSet8?ei$xbd;1cx`Jj4B#vV^#L5ZOwPTs<`f;N>JZ7%R z?4Gn{GvJuWsJL%It=axQF61JZBAio2zg*ihUHfs6I_dCl;V^;C-Cjz{5;DGL?zDh4 z$eI-GRwJ-)0KCWoihFx|bi@E^Ey^bN%eH8&d+kiYi@nu;_8`(cuz>!@ zyc^4}%vB9$FozMZxsDI0_%J6+ola2BmPzU3 zgs*Z~Hj=_{qi*vl%Jkk$dH0tJ8*>KZSz(g8?y)oCfRgC>d)dL6H8|=s5OB6R+VFY#8(wzhi*UU5 z_I5Zb03^tBU{;?m&O?nO0@{yZ?#;T+FNyXUWn+EFpgV9^PJH=WA^|PQ4d3p8HwDvY&M`aNDw!yAY5?l7?V4s$|6rLES$XmN zFNLKf*PrDM{nPpr^%}CfBvRk4vrMbVCT~5NLg}PjQfazg$P`wxILlhbP z*Y%6nYo+As$uXU#{r2}Y=D*>~(+BO_(X@eSCW9NjRDPG&$Lcv?W@(I?C#YJ3!F-<7 zZl-tU*R^jnjGfX67<>L!SXPUJbHB=^WZ8j#yFMqU&xH@u5Jm2x*hsDgX4)s|q4bAx zlXg|cg?&BkiAj#=;=j`tVkib8Z$tl>i^5qE^afT^i`caA)bsZ{I-igd`1HfayUzk( zHT}NYh6ldx^|rs4-cR!!>gtE@FZl-eQ{kvUB2GzAy_f21iaO~@Zy*!^cER!Ty04|7 zpr5t_nTwln6&=hY7#rO*>c%4{5dIybpo?-`CS|wWqMC5Bpup6`_L?l%B!=W^jw#fW zQN8thM8ypLX@Ug(@McHmq-`*7b>>~&_4X`-=h#;OifmQ`z&@maOsIYz^ZM88c6>w~ zXV6k|s42{t$*1<)x9TXDiR9#0TW#-S?TY>00>`eXmSoG={1k#MP;+cZLZN22l&tQ$ zMlxx4xV~hwWfmf_$FSnqTZbLJK0^`wC`-TNw=BHqJK zA*Dw9r@_&Q!#YY0LJaku2x1r?R;H$$|4eUH8x@tV*mUmnDIVPUfq{m1p63^v?q>+0 z_e+J!_p_baXc}){25ZoRg*?mzY}%2v+n?NR{Y2&`81X$xJW&&NnvH)(-u6C;fb?%4 z;b(@dA-k`<-9()kA2V+COlhp@cz|;l<8{xgm-x<_s22ks!%s;8q(@8Gt^p$OuSkT<6RZPOtrC<8N;(H>BXUPmwz*#pyS1h*MJKg zDK-_!GPoVDP5HHPMawCG-$;s5TuM~YBaSC0dZY2!apJ>HzCI%s&%A&0ZIyksI*7YVBHvjz&wG@TNDfB@_1Jx@z`8?!Y z^V_ECe6au%zEZ9AJ+hqr%Q&?XRdPEK&Gt1;A9~G+AuGy?E7yS=+X}kq5dcAn!de*% zi>(d4Pbn&#?!4@f&nLNbL7l0^K;HqJ}G=D*tg=Fn4f^$Jcx6+2r_*6FST)H zW2c_PQPabLwCnUaXn+s!noFLi3x3lbS!v1G__(%CoQ!j{Xh>|61y!Gz2U<%g1w4!F z07o~HBN`a+RgVl(+n2KGg0evz6C?80EQCSxO)$|m$A#XO<%s9;I=bRXmVn!Rk0Bjcu7OAv>Mm zP|_OCWt*Bvrc>y&irF1Y@A@+HH2#S^JoInTxfoX(4Kt~n^Z4{qhddhc43LrzMb`5e z7R-9bKdx~-b<~IE44{ei59M4mZ8ry=;LLvk*OSvH|Na^(q%>BNxby)BjGT3mUMAC^ z$nOwim*V@3k!vNmiBM&KVuVfO`XF8X`RD(iJXJGGR}*IB-zUJ1(v4?)zD{WzLpfm@GN$eYrxnOSFc znP?&bB}>Z5CJPCfnZV$nA;Qema>V{QcD63fwdrkHXr;ty3h*}@&mm6cV&!uS2Z8Hq z?z+8?DSV&a1|p+ob@Jb!-=J{Zf;SOo@QV0CzyF=T#zchEqxO?(4Fs&a44$4~zb4!{ zAga%>Zohgl{xlwcB95HAmbKFh22#F(ykh&xj14#0e!h7EgaP&ubd3tSXC{ghBiT3e zJF+p3VzQo1MKxBk?n)JdlG={Pz9f@4FXcmJn}KMfYb)9cN=L1%W@$dYdtP#8rT^FV56|z5B$y-?Z)Q?Fns@ zhOp72NQeeiiG#yqXp@{RMXP%8<;oa4hQHwaWvX`8NFGkaJ3L8NPo~AARvAc;Q_4CY3#8A>{xCV0GYDUw75N)54aRXAkf~tnUc;t zsicgukVTr4X`j-Nss`${iTgRS6w-xKTtd_MAxzau{X;U)rn|$AkAMhky?QPH4Ziv# z-3xzw>r`Nqq+@>5l$WvJ!TGg{IYqg8up4)Qnt_!}(F`{x(z&GbE@)zqt~^qP!k{jX zG-N|w0~dR<@JL7t8pnkB%GuTV9XbkHlt1Fm<3cIf2EpaP`*ji(OyJNSA0I)!BX4|= z3N}v0#YG^N*wH1LeMOb(BIk&o$OFtFsloChztN3i_K878^*rTza36ZSy+cO#{FYMR z_7Yt>wqhnrq&cj=&G!odf%7hA7YQemhh0ErVG7F|0Z*vC4Rm7Odzl-6nEeymeAqq! zEO$=)TwrV+&g2EZeDz@6=Y+eyRc`u*^ygL%!_;R;^F67LAnCIfzmqpoeHoFkZ|<4I zX+z-@O$XU;IYW>e3-(_E8wXe}^nMJUOqe*p!vM*0Q!GDUKGr%}FW?4wmK4+^^Rc!#)gHX7yX^H&jpuINnfso%Hsyuu1wryNb!fTTbm zIBzysM^V3vQlq#_CGH3-m`Eknxrtt{Dd!Ntu_x{V9x7X|We!X7r=XyMc@=&1JNBvMqJ(|Mgg1>BE!H4^*Tb167U;_s64o+lEVOo> zzD#jb;@<>}mvyLl6a-nuE!rWu52}`3>n+^oPu7ctxaBZgJ_|1O3CBtY-Q$H*R$%0Z z3Qm#h{>AN9;60{mqCeUD)-ZYMfXd#eLf6CZ9(Uf~Yf(43- zL#41FSnm!2O~rjZ*_~`I`tOH37Mt z-4^43n|E8^E$CnV+k)wgxcWK%;SHA&nM+HY>+GdsbZKwmJA((YW~L$ztXcA7?^A*L zIi&VNzO4Dl9P_K9Be^3;7YjtG_C@Qjl490;2#nc;1exqH*Gv#IuhU|Xk*ht zQvH}u?z1wR&!0o9!m=e}VltoL{ZCgu$FfYS)zH_6!GurTLVB?d5$C4MXjrxHTXs)- zhF9jUzx!7UCW(sNaB-hK>pSGx^BFB zh6F#2H$pc?_Tr)4o760?L!BV)tx``ZM%ZB16-DX1PtiblUxulo-4`ZQmoNkHKF_Aw}gE2@8^UZa3*AKLt8o%n&8&A-$ zzF^aCZ%Ax}eHds_Hl5;|9S;=qIw`Lq4vaggm6wsCIBs6-TuY{`U*%YGIMX`ha#NiZ z!|nQ?nvm^{4t%McdsCw4zAEMXQY&_K?sav|DDLKE5C2ac>kyvPc_H`xB8|Gz&liXS zMc=1`zUs?8)AYN!rAFV*8s(B07}=+)?_;eILG2NQ(XRX5C)|J5e-!FB<(V3Rr!rC7 z+SP8HYt1Y0w0Y8Ns#I%k$3bS1uG9sO584n_$=t$(%8ZJ<^Zx058jhP-wBii%|gSf0wv=|DQRhIgyte-~*u z4_h7iuH`MI!$%yTW8h8%Q<3WZNTG^cJt|e}U=AeABS~q+$6Q>-;q#ABvwv4Xg!4_* zk{43uIM0Ff2Dv&>9jSv+fIE2Dr+gRA_)$*SvF2iXOiX6;rd_nT=Q?O15Zkx!D6g(h zGa^>c0KN}Dvs5$FTv_4jS1jEVUN{b)He5adK-E#&zfFkibAJmN=E)~-yDy} zyt!a;_n*T%Z}@Txs^xx4H+_j0OGp?m9K%{qmm=I{JP<>FVOf`j$$qMb0o<>0TbyKB zz9zdM)vdHlr-rOtu-pZfzB#Ky6@6j!5}3O~R)|>vZpo;@1h4M^G5I>U6yMM_jp+*w=5LL6U4;+2%&-8r%g|N+%l{#Jo z{LIg;3k~{qmeu>_p}XAb1GcPP-v+bXwdkGv#gMmEn-=2GA&s?)@Zt=^TqOpS7k7fAf|RwIIf0IgM7qZAGpm{ zaBBFV`Y*gb&rx6RNxxTZ`uBpQ|0e4e%Z?ND$aDQl!c;36A?(;K#md9HQ zRwGDV$6t%P-S!J0P}!}B4URW)1_MPjT3T^(2`6-Hf@~nG`oId2C=@$%H8i& zljUGJumLvyQz?(=tab_Dd)N;W4a{tDdWUNDg1Y+07e8d9-$YP&aE3Kcxo5o+Vn-X% z)J{y8GkXZR$aVZ^rnuRS2;E8Pc!~3)r4j&G(-)&65?5S@Kp51S1m=`{ld;NXS%8Q_ zJy39g=R(K(mGWo|VNq{H$Gor${weptCWYEB@-l*!W)k4ohVS0pCfQ7q)B{}!%Zj|Q zUPf^{5L4=Mis;3Fe%MMldh`8gb%yzwmTeTkRbfF+{kq({fr$9umQI3Fcf=M>3)K>O zi+^0qd!jB{73wpB3|9xUa6@T)jP%Ul=r_-BtwJ~bjwB{MUj&^stDmOKKhfaS8X)Xt z9tdrmeYzpszY5pu)0_CjmSnkUKQCl#HfY7hhGyNDVXXYBS+j5vKzA-XoE#Ay=%fFz zi#4ZjTNjq4J1B&tK`va$6!sW)fxxv7Chm0!9>weOfZ5DSb%7+xs$yD(Xx5p+IedS3 z3vTtvate<1rp<9{QUS!?)uVP>a(2cH5}uY>$uybMyqSmTP%oFoSYzeNV}~FFA=!Gd zf!UVtZgc2#m2N+^zW(_HN+d}*qy`Qg-t*EFww4^9CabP#R-jpVQAezt5WU4!M`n?@ znUU}a_rPo}S)sNg3fosDTCUY>UppXn($N^7MxExJ6D62#QS?N_oj>}cEI2(d^qQyI zilfEo^U=?~>3wv&+Cx0wIBP4mAhVZW$*Hv*Md)6Y1f&`9Y!;5S7_tf`g+I8%FJ*xjMm}`{sS(61LD9gkjNmN!Lq$w3ui3lOa+dvr{DY@}tlVZudlL%JNvdrPEs) z>TN1Sv4+m8vK1J?7(rkA-#oHC1ASkKo4ViDncf&N^x^+PE8hR5v*0rZV|QC>Z=om` zeI~!FrSTy*5Nk;;Fz~PTA;@{-h|40ie>Xem)fdEXrkuTSKf8S`KIr#4)2t-(H#d`fM@MQ&^Wu`pg890e4 z2$Xaq@B6k=<2O?z&|4kM_yw1(za+#^3kMWtz($lULK(G0%)rvh?nSey7WLlSenWdZ z*f`~QV6ViwK<9bq$9h3fQ6BG}|6OJJCzW>&wbaw&;(v^^80K^JY2;hfhMRYPd(i@% zg`!Ws_VxEyi{ofcw|45q_2m#kJNMzGgNfh(>vH;W2a^MyJt6E&`O4D{bmVia0n}K5 zXgBE(5MHeMEp)V^u{f2>NviVk9kWiE8Z~&tsY~WQbYkC|Ui8fMIAVVN{V)8Kdcl_O z1EeU%l4w_dMqqK|28q&6dCx-_SlCPn%<;o{7GC)ATW* z;?-Q?32`pjcnTGtCe`uebh6&lXxtOk^z9XyQ2Q0@xixGmht-{wtpkl_d-u9i4e_4u z0*@xTJ-NAdH6cZ}-^=Tz3;(^dWGMTxj_K1k185DuoH^spBe$>(no%E7&QOo+`Q^)Y z!{hb$cff?=(9&MyqYaCEzlzi#MCq1|b?=P2N@o%_oV`HF+=0}DvC}iXtRC4^sDd#w z*l$vY4<3}28oe~nv=7kg`kkJ&Z{N#pR8>_~R4Bqa0sF<~{fkd(Jd_+9dD(e+_Q2m%R7mHdeSVlC6wOz? z3f<}CVu|~Q2H({VF`moX$8%Zf`)=IiQW19KWd{pOS;ZubixxJf{0!Ayqr8Z}6i|wM zJA>I8FqqJXvhVR8(=;UoI)oJnC_dNjm~{Q#;C%Th+KGFjm=Vdn2IV8Sj;};4h5oy^ zo&D&^wug50B(0}+-a6Jt)T;j(>JQUf)szJbtGf?pBNw(fNaNJMavU5|Z^1<5EF11% zn&~JXFz4<$nK@(bK#gp^7#)555SpyA{aHWIwYY~WwbWhP{47E6PF}%;=v`{FqG`7! zpSsBogwCFy646Tp#{b6}HvB&4*@ETdlE%mYI8d9TWUo`Qk>sK`TPs1QdxS=u(Ogk9 zXM2+TXL7R6#IN7?=CeOt_-hKYkc^c=b98+13l*IPbqcylImRixa=pAa73(_z)x8z0L}B|c77;O@@XgK;}D>8 z9(%>>?>B8(uSFNM>?-^$*0hq0>%2(YXk*zoBMqf5&N9E4E<1!ysKuU|bEH%vKmRr+i-4RQ@zZ!yT z7T#OnIon}50d#I_dWMkH=O1q&z%;(wNfV5%rez!5kwadpqVE9p-gi{{<&>}~SRlaH zyaTq-DR_+M5g>A2S!2aF$n=}RHMUAhit#=C>>$+Fgv2*tVRr;BwYYhC4eb`YFrD;K z8%`HT(>M_yTp}1iw#a3*tl@%u5$+H8;^J|qGIkfLls5C*sWv_hySLjLQ(|Hmk!@%g zu1N;x!-S*&W-|E^e2n&W?jCW!uj0c#d{pd-)}7&D&&$S#HbLTIo~WwGy2^lT=F1C)so#eA-RBN} zbW<_LqwoF7RRj_U#N0VvsPiOVkv-;^h!Dh(0u1=t%zTd${Ry!08MKO-`VDhiwoY9d zg1}$d6%%-m`SElD6bR&c#V*p`0@)D1wWNI81S&HlaZ4jL{zvYSfZ$y|XlKAXJAi9J zmWPz_`un*3YyL7<<K?JHoA*@>PgkdQ&}k|hnMGG2tiTWj`1nSkvn?c4N)MrY zI`)@eVb9Ky@53qZ>l$K$+v;CfC$94T8Pe4_dCs41H~fLs7Nes7&MX?LaNH8W3xgU^ zX6v%cE)(Sae^Hkpk;bg3U6zQ5H$%6}`+5_@e8mKFk1(Fm8$=b;+5nXb0caQC?L>s46*wtF zifZEjrQ8yk?za^n4!0K}Xia!}FnWyo=WV(63YVG;=1&W%6XWE_-e$_H-j-hxsXWn zL?oS~=}3Q(+-}CaqT$X1{iFypcK~HGL6YCRj$um#wd@jrYz(iVajYG8{^;^(m+SJN zA43g=cm5+N)+c4w&RsX_@BDKJ+eVez;V0)WREM|I%%fc;5+1U@C^+h^--z(;@ov^c z1Fb)m+|du{Eo`u%hrg$#vS)nUGf#S8))|Z3p~R z&ip_ny7RTM*SX=~oW0kN`AjWIwKRtHK`zzLuBtCXEq&OZ4l8LE@_gl2e&e_~Jv!%Z zp_(0=!tBhEYYpx}YACK=u2o!iWp+@nPnUd$RC+IwTUyjUTrCkz$fF#o!0z^Gh5uKd z1t`|MxEN!Yp4==wSXC9?41g>khGbnfV8Kyaky^{1N$tkvoO67V zn)WkY=^YJXXhkmjH9CtO*jCrk1Qfc$7qw+odU%dNk*>^q^j#hkESOU6U)R^t&lTpENC^HrNC+xs{4sUnge*0Ry^IERO?IjUBl z@{L4KCkK09**Tyav6hODV{>g|XKX|&e=j;f?0^O^AkZy&cFM;b$e5Uzgv3GhL))9I zdVVh;A*ox`1{~j5O{G<&KI;YUK}8YXkH_=vVLQ9XQo`MWP2!ughnhzun)i4;of}?N z2yuRQsnvE~)3glr_J$JwcChy+JG1(9mvo~r#` zg*Kb~PMaokIHGy&MKGzSu5yVjnk@=H8e6s$42jbl1j^o+6gt)$CQxq}jJ0o`XN*+_ z2`sVryrN>E37fDoQdCUH&C3&KBrCM-va6M3By&RiLIH<`mEcye0w;M02>k(ob@iZYO;5?i*$;`g4>0yW?>` z&mGQ`iQ_7v4do8nJdP?mpubdFy(&DY%ebG>-e0W*8h?KBEw zh|6!vc~-yre)tcKtwHIL%O*2LsD`g}UT`ik{Q_-uwq^%s zM?RXyQuZ546|X#GO>DKK5StIyHeZUznEgv!-$IlYTJYe?0((=KZP!YMz|zgGcYdqh<)vU-cW(pRAjg?GyQ%{#cDGLEKwTp7>M}MG}+Q(lQ`5NRJ|&+~=fm zt`C7Vnsw)znRA+&d&u^E8#2?CUqTOBl#hm5O}}LOp4aO^C`zLPhKN@>RQdU6j!sw z-*G&8r@xyolISE`rY?Hj@ktRN@*zp(gH!s0m!&U#8&n@~u-VU*oUstknGTB-Pk*wy ztx!|r`^}oZ1r}x@bEd|7yZ#LRooesS(s)U#G!>KkGcQl9Z9f@sY_if5w-Qb zn>^-)m#ca5EXyqOu)p)F=shL?o&bRYI-!Jc&I7AvlIX>v3BxCMt92qyTT7N#(Q}U^ zC_VBWBD}<_U5=Qt{E6FSqe(pU6$1ppzfiNwc5}~NFoyDc6eBUlqNQR!M$!lILFb8P zg%gGnT4H~ol_VfXhy3%(f$_9qX55!61x17;Z|r2V&ts>#U2Zuevj(q}u)f>*x^8xa zB7Nv^0(RH4YumF}H`uF1a^*DUeEc5Rs}o>d=U(OeT8|Z)d~+l}k&ArjCST^<(v-$A zUTkb$whTORc<``D9c`z6oRL!@TXr4gcZ)d*f+6BMr zl_WMmwN!x>snRZYyQ)QY`~RvOZ-lKi`fPhZ)QlLBsQDpB!=OUvkl zvGS`SBb~ZDgvoTCX0^k+D)Rn7eHnkWK&i*w~)fYLWA@D-d&@;`-zBE@Q97)QnBL3wvPT^xsz-nH55wL_oJD<= zBzQhx$g=GFZ$D9>xdR{oh05)T2!&nz+dh2-xz_w&!8Mr>bZh3agJu7?zx`4ZX#~J# z&*FoG6N6`OP5NIXv2Tw*H$9lb5|a%U`H?N}VJl|!2Xi!XvKwaaqt0vbQh#HOc6QWA z8B@|UL8i$fqvM=dspn9<;^A5F$5@TcnfAM*!-Da` z0@$tiJj&=rO?1vhqN?8>b*yER_p{C&Kl;(_;%CAODvubjOtv3wJ@N8mS2OF;MeVB@ zalsM%!Q`Ful_umRkff}(QjO1jLz+q=VUPSXN;Q;an((*(69Fr6L!}#UGkAvyFcw

T}IiJg_sMl=| z@wui6*CTCO^@vlquoo)zaQ>Q9chPxUfD!G_FQu>hSIj049G%l>H2`Xdpt_PfbQlCM zqKxz0DILh>v+6ufREGn<;VtK0ClgRGi;j8sSt;(@sw8m0{RdkcZTe>So<-l02DEd) zEP1^s>cDC*M;r@fuE}ZG{>7|+SOcxgdFELN@Xwr8H|=k32kPMG^|9p#75zw} zTS`7sRzlv~!-n;RfSIS3tuAU~qnIz(T_mPF@Ht-p0G%S^{9vgB=Nod}x@dhaUWa^T zE-nsJ9fU7#Qlqcq75VtkSQm9t0x!^c)|~2`J-YjAU*4v5okZDDw;O!7E-P zTmagsR;&F~Mzh*2Uowho(ZfS4R)0p5x`)t9v--4MMGU~os`57aPsmJp&sXH0c7=>> zxX2NRq_rc4B5Upi`oJk56WR0mENb|1TVn%CfrP$=F96W?wLyLmkIY?IOPJ%4ysq

$qdL&5WwYR>Fru1dQY%cAC-=O zv=LLZ^Z=odz;%uv{a@t&0M%fKkl)^bUbCsc`z?3I&o;Be-4P7p_~&f2|NdvC;%`7@ ze=-4wyb1UU;`?z4ozVgRyqg5kiCM16}hBE9Fqvr{gl z_rjb#1wtEu!c6rI_kj(-+QEk%nsVruxQSah1BGk$JEFNT3Pt1#Le^)obSi@2; q_>x>KrEfcFA30x+E9BBZ~4WkdhZBpZ^b0X22Ez literal 0 HcmV?d00001 diff --git a/static/img/edit_transcription.png b/static/img/edit_transcription.png new file mode 100644 index 0000000000000000000000000000000000000000..0c289362b37f01b2d51e26f61ab19447096bcf3c GIT binary patch literal 300932 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

K6j!j6x~G{)=Aj(CS6m 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 literal 0 HcmV?d00001 diff --git a/static/img/icon-180x180.png b/static/img/icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..9db18443f71b70db9e3255ee4ffac0e95f6bcf8c GIT binary patch literal 39604 zcmV)2K+M01P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/static/img/icon-512x512.png b/static/img/icon-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..7def29e993d2fc66b49adc327063c57c5b747921 GIT binary patch literal 234415 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�>siNIJ*G7IFilr#@P-}K5=_JLp}hOk|&+l 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⁣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

qz;FTPHsMH}w%7_&Z5}3GsD~?M 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

Jwj{Se%&JDnGUmM^5s4UvB*7}!km72|tuM~H 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 Zh4=scz?lt!2J`?xPFh*2M#3oge*tty2`K;o literal 0 HcmV?d00001 diff --git a/static/img/intuitive-speaker-identification.png b/static/img/intuitive-speaker-identification.png new file mode 100644 index 0000000000000000000000000000000000000000..b73df086bd07b97715d0fa5b281612eeed89f4dc GIT binary patch literal 428690 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 z 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

974v=n$LF|CnA1C&wa%J61w6J;TEDMTa3hr`aV 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�WiUqgJ{Dr>Hz)r*ALxnc=QrATKZqU*xT8S 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�u0lDJhcyqb zuO$5P{a+K2g_2^7V)wp60Lk4XMLTpho>Tg_biJ2 z(a)a0XNr+~YdH%Tu(w!6y9w;&#p$>WD(-sKQFLqUg`uqGJwht3T6-_lD~!IzP!@t> z*8Kzr;2>4wj`Cbpu0=(>RskRH%kjD8Wq~m~A2CWwUoVmka=G&V*u?s~KwpAJy9KE} z5Z(owY;iQ#IbU0I5VPYkrQdDm(H6XRgoB3_p(0dR&!_oN`nvQWh&i|q|E z&uDnbK?E-;xDm+k+KFw=<@*#y@Cu3n0MIDAf( zk3i_ICR5v4v-YJ*fSW9pD{9j6C~Qbzn8tw4whp}dD_WBxqlY}Qh7pp4r#S8iy*HF}0yr2Hu`N5K^l*Cin3jWV!CUVPKc*>!IKl-F^M55l65OWAM+sYj!A~8@# z2Gi1=b^05oxNl|h`HU#eGzhpJ%waOJATBHvj}?8GwYOOmyw*LjqnyTz`<6^GYKWb% z&NEMc871~nPurjlSE{w;)P_F(AID$y&VDjvXk#A4{%2#@NeBgSBf@XsVz@=cvAQ(7 zviLfSYCYUG98Lno7CNif+b8LIIo45HqWz?Hxg&A%bMiP>*8LbE3J@hzE2(L+ykX+4 z-({QTbfCK?x=wD!#;L=fiwMERTIbTx8N>C8x={R-Yp{xow>NuCF@MPqD4jFaluPFc zZQT8t;jw}#-!G8kQ?R_6-3x_4;h;PE;z7S-b$%n4)=7eY!+VzPXup1wfo?8Sr=1^^)J`F*7@%lA+xfVc$bK@bDu^Zb13>TR0e z;bl21`9|;|D}#o=o5hO((32hdS$Tblk;Pf2>fhZafV*0hatvr;U6!bmsOFs=MCQKKJ6OKitnQa#{`^94;UO^gfOe zsylDbPi{(=y7m^UKUT9ZjNT^{b6S1%y45E3t!AuT#%UPS?WY zO`X_Ldl>x8$O3kpO9Oz3aC3ZYZv-Q6A~i#A`_Yf*$Mh1i45GTGsHS|(g}61|KjEW( zB%tW^)mfr`(?@nPk3ik`DWe1XzRiNBUgun6u6~s!)RyML^A0=31OG z>Ss1@zf%9Zc)(oMp%-8rMizu>hiFRI{Wi16d@7+8lGf$#(!C%( z-ZT+?9#m;$s-?q}H^Rn{)IOCGw-uCE)P_BEp*2fb3Qf^2?B6CuOpU{&Fo8MyC)1U5 zGUnf0l?mlWF7pqgQZxVRnI+2*2N0B{YE!tik6U!5QXsw+n9(EippA7*!r7V*{&K%0 z{e}$AWxx`I8bUS!6JQLFgBHpH3E2bIC|~Pr$V1B@D)DO0L1D*ajRZKYONbd*MM=GPTf zb8o;J6?|6!877@9c1w19{b3hHN1wH(J&NJcXbD3BWvB>Ml|V7Q9`ZaCh*Xp!9Dd0?h+K#9jWZ@2ply>bTbak=n^k;f=|)8fY= zKi7wviTDq{hhM_)r_|kR#4n4(Ic>O9KPGGE9;Rw-v>*TiA5U3)^S;*2A17x^Vxbd) z?ZrNzy9kGthmJHj!1Ck7`MC+d$7FRzrlAANWmoHr9S9t7{siLgyl;#16$G6p$nOrN z_$ps6-;)DxfbC%0HcRh|dd-~|yCB16r^Dr&uL6hBTW?hL%QTL@_pnmSRU63PX6=6z z4%Y->z4!Y>TFUx$xYowql)S^0G%zajp{SgT2qnhvJ-wY_HVLM#mP7xk^vdsHk(rod zxVm+=&x;_g!6Pn@=W6P8>mjh%<70bx#{LS#<>Pa$^|=F7_H(O^YZ!xdsO^Bq?t~7W zI3F?|%F1FkkYxGGY=+^qC$U_8F`@}87Xi~kDo5NNOHzc13yiW~x52P)g^)nuCP%M{`&w9Vr(}+KpR%K8o^l*;K|Z zRx&Zc`7Bfe1P{joKYU0}u6;epU5{-O86;92wiKaGG#YG;qMD1=+%Y5*NZg?P&0-|l zXvGz`0xO*Id8gX%XA4q8-E8uA?ffL9XI6}`bD zLiC7dQ{%6!W#8^ZSEOERbu96A3QDRVvGD`f=5=nnDwHB6rg={>8=YMSUg3JNB<hc5fz< z!>q0yhO+oTt4S%KsMLPt^Fe157h>2^==cN3)S_c*io&*R;3S}0W)YOYw{ zolk$-Ix^vEnS~u1P_HadAy|N%?OP8Xo7TZuTt1LU{LW5>EBN0#5V*Je?vtmq zmnwaU0c5KQT<;mp+3xe3FhZZk!}!%6q zRxvjl?@vJ*}PXM&7FHN%2&4M4?=*G#HJkoPvt9rJr`fELSR@#D%$;w zjo3X!?_3X!91*gr_p5V>T(1T~c&*kNdqVW#Smcm(iH?GZ(_STO*mmTtVDQ5*48{8Z z>TkZ^1FDPqzalSqakYneP!1@{w9CRT#0;cr~Oj3Dp7$J*EuCF^A8?af6V|c^h z5QlQ_gPxOwkW%0XJRnhGs5gYFN~kX+##WLo!oVc3?pRNv(VNNS|2bM}uA#yO=g z5`s-{1&kolWi%?!%~28FA(6apL!^_FJnLY)#8B>{sPeV3P^Il(v5U&LLIRDoRzC-( zLmeu&Bd@l>f>Ss>z^%OE4B=-fYeDFTlA=!OF3`eJ{lkc; z$pOT)V&%e?JMC;^d7dHA2;Z-(z^Dw^bWX8m@Til)Tr$fzFY(|^+uL2FWQv*168a`D zh3y>zEN#?F=)*6T|C@b@&`vV?H%S|gy6p<~R?&)&d_%Fi^~YTYGWO)=J1IR;zUI`I z_Kb}B5Ns?)P4B&Vdg7ER)nm{#6nUeKr`zi$JnK%>nSt!CC zoFJ&~JjXhF7HDR+f1gSK0NB5nf1Wn4g+UVEGum=sP?s+?pn~t2k=v*t?Un~LWOMa& zj0FH3896NwSnMubH2Yn|=>P(1$(O)8-s{Sz3;A=NSEDTe0L>_mGPQma)%xk=(nIix8)X^- zP?6=mQ_c7-JZ`{xoCh?;fx$G68mdxB(H+>I3kp0OPBGm^Wl@X=<@li!A?N;KkX%LU z?n<(ms>74w-rI};E=h4q3>YW$>^O$?Q@s5VCg&Q?%6}5!6HjbAgdj6cm=N0x<+-z8 zU1fMq;q4=ndi3iZh)v&q%P4Fw5}TJ^S(aew|EUXKdL%;j?#NI?6g~tuCRj40pb>Q8 zx)?5i|J~AcrQ%gkJQWqnm(t^e({>KZ+if>n>_p`PGgAp?11XM={XO44*Bc%=bUi(^ zH2)v>shjx9zS^q{5>!^QutKg=j)G9=y!M*u@g18+-fo0bQs2=p5l+YEKkejBkFX;v zvhO29oD;L8dFncrK-^=SOonD2SA6-n5!Lv;BwVNwQJ_YyBSWW!I6T(tcP^$uFT9`C zgt3^ZxkZ610TT~&8e1%3!hx1U+!S-jlb@`N5KTAo7HvpjC$nU$;5Nt-`gFU;ZvRq~ zWNt!PSXgE9F-~p1Yh~yK)!AjznnzQV08;%hpm3;{N-?95hMgzX&vy^TR02aKSlPjQ`0vok#w#BMvW^#G(v}J}hI$%#vdHoxnVy@sHtl zqubp_D|TErGGMA)W3=Cp19~d8K2uV*UI>bnBP(;f`YE|PL{sCk z)?BW#NLq(^a&q)OPsfGtTjd{+$W|A!)|{q`g?IC6?UuGYrzhMj6l0WgyzYrIs@5MF zyjEPUE=XF40AEvRZoE=)^*&d(HeL!Xz@YbPfWsIpP73hGOT$-hw?p)X!1Jel8>Vh@ zNxpWI;q$vYHkyY`{|)L(p@Xsd;^AWM?yKm@l*x<08;!lc(=P3=FO^63o}h^`x8lsl zF8(R6BSJ#nE^EKx=wa%jmiyiNv*A$Zi7|_SeCC!0P^*FI~X8Z z*bTHcwfRQyRi5*+UT_*#svw35peB9;@q<xId>h1>4PssbjLWIgweqE!GzK zzs%&zjYqOPPKO*}MM6riD;Pf>Q}n0Kh)1}*W+N8g_j{QWd9U_mnROo%x`7q!M4@Ru z=8xjl!Y>7lz>n_7%LXnl525xm1C)=uKxVI-)nSs4{SRflavmv0nOSaxUm7x)$*N^J z1+Zuxj_uXIgh6f`^co_nvK5k9Dka~|HC-UW*ix#0pRlMFJuC>N*HJNd?jL zJ{uCczZ8$~G`OuVN7gtsmcyGzkB^?qxdV-6w|@JwkTF{Gp(I9s#K&iQ6ZyxbO#_wt z+I9W68Zwdqz^o|+L@ve105FyUUiIDHu&-4_WP!vDaox&hTpU3qt?^Uz=0kN#7~x(z z(>U$?rS6>J4L6Gzcsj%?Ux8)IK*3oq_rOb?=MwWYr4H2TT{>-|Gx!-M*Ey-;7QoU2 z_6->|^j48-5V3-gaRL{DLjFn7rr4J_*Nnxna7hZwh1})aokOdS*k;4m&$mSmLK;&f z)PpG4Lqkp2#YPHPiDu03Q5eFX1&gj*8p1%Ucz+caMb^R8CHqgh+i}bd&`qv)K)N+X zBHaRe>N$L38_Do|>bX_Y`BTzNI?aEN!t~jyVe|5z;M%}L-@A7&Mc@5ng`kK^GwMIG z?Hq&uvh$*-yk2brknOeI)NaoGd0TYi1_0EzUv$1JFvN*86`?fAuc<;Xa(Kx7mG_sjNiOPqyxR z&`r>N>f8OYic|enFYB_l|0)tVbR4!E)3R2$oIF;YGdk1NHh|_Q9s5c)jsO7jlgkG1|x_m`$cwCsgxEj~Fl$!9; zfkQTbxt*yMUd%%mkoEsgk4{(>92IX<0WzHa5{PcMF2<5`_Sh27Vs#$%>`}@jEOI2N zEs|vc()4Z|MBMa-Opdy_Bu!(JpUoLelxXL2irEIr8C&(<-lkU6cG!C0$r2xROtiYw%ypO1R!` z^C2q7zZT8EN{gvrGUivP8KU&WF}Px|pnq?55EP`yq5Y-@*@qU^Bvhe{zUAyq5Mli* zsy)XV#g8pTSpyI=i0q2rn9niOY_x zp_!-tA8yD z?~75@z^gI3jJZwM1*)f6B>&qlmm;;@3%5hoM{gKRb?0^_!sc}z5tIw6#zV0J;r%*H z*GFZ67G#4L0U)R-E;Xzy!JNW4A5Jqms;8^ef@#f1REU*1eEccAc?^BPKMtLQkDx9k zck{tx>cRCnEH;^S?d}KWVga2bFTyRgdT`qa(M#1Tk74n+`|lOI?Zm^kzJy%rB9U+! zX)wQ+1q<*Uh1g1Twc%UIZ07?Ro3v9lR?6kzAVFrnvtadA`-QappX`jKh|M~Clk`*4 zc-H!Kl-C#8nW~33uOTXLbzOJC|1x;1I20(yP1N1qT5m5NJ)Ox3$2e9N z<4|S6rSSX@u=&%@tBmIU%h7!7Z5R6`BaNu>cd`s_F21RlD}9|W0+sk_D3IB|pV`*C zS8FxE)};S2SB1x+;X;oMM&&?cG_R?UGc+Z3vnm}9lEpMcod<#><(K&-S@(m#-Pd4B zL%I5JcW2W&h}gwPnh{%f@L&g#x;7Em=CWeN>E;L4~TPpjHBBMIUx>a}5 zQf9-Dm-+7~+y+W)ujp2*bj=$dJz)z zyx1Zg&r;ak_35773yDHj|JBd0@z}EN->f*4tX9saz}t~ldv%J>=mfGqV>b{+S#(|Y z{XvZOe1={0Z;$M|@@9l?c$N!|zQ-xH!RpSiX1LCJr?G!oottfJH~!8MChJ;hkQ^3PtSj} z=Zbey<|tfz*(7&ORu?AcyK$kPgSu+WB+uo*42;T_c{~9_ka=|Jx5dK0P7N0aH?WNy zOwf(?nN1R{v<4U! z9uxXQ(rYPMM)|$x1+(uSZ9^8)4`xd4P?)r|upk4-W3kI-pj4r&;%^L>3|AhNMF)s5 zUR!|Fjo`ns56sN=%|_zcnY;t{#COYv^nD$~Z99Obnz zL34*LZ@zPxi;{NO(E{b6}dF=k0=jQBbU?j`C-Du2}6tlq*4)4a#8H?UoA-kMZb0qRA^k( zeo{mhL{>|_I4A5*M-2kO5G~=rDg+`jA1!DgRqnS_6Z}09J4$0@(*tg>m zPxAk6+77ip9hX;-;$@@?f#M0KI!w3NU2gO_0Rbx){_Y?}{`NOw*p>T1l&$MQN@UP4 z;nu@nl*n~s=n>VV)Djs^GC09rE-szV8D}-xfk1Dn?@ERd5ro7^vl-Kqm2xH7NLYvF zv;Y$}t?Xr6mqf4{PoKy!@#3~GHNPv6da%`*)n~j zYx+6H;QioO%rOY>_)|@=ImnTRfCu^e`^?98|Lb?C`xi6?uw?;hLj3dZgu}WDW(X&lJYCe{bx1^BIFWLsheGge zoqmvZ=rR{PRft7c;Imdt2+rp|C5{ZgTrVLx2V*rGr>z)!}|m&FA}tjSo)) zq-sb|lR5UhVbNygbrZK2c56yP4~cu!UwShbKx#(D#ztmB(>KvClzss$kw&0Rjj);3KR*e)hI zGs)fkb=%pJKX4z(Yf3D4Tt|_08iIdwOOZ(2>uhZ`x6O$}7xa{5RXwXd_6&3ptuZkE zHe08{jB(gb$Dc7o`k`0d>xYK_OXWhtcw3B5pOHR||0P9(fBE279;TyPP4_K$czP=; zeB%bTnT#tgT9#Xxrgi%<+-qIJdhnQ^(()KxC`3x?w`LoVi9vN{ojScu!#EK>d0o^u zW)1^B!5_yGwL>)y;9Y*#rV`pK%bZjmzlk0p1h;28K2#J{K%VnJwPBNt=!~GLF5f`sE(~y)>Ojbsm{UcHzp^H!+aisF(Yn#A34#WRNah z6V$+m^bkiseNpU;41?Hxr5_LXb7qZm`f9|KwhCqEFQ% zWnxf^8Y?IDpfW5*?8u9iRZ~N25+7$Z=XF>*PQKDsNd&!McA!PXiDRs}S*M{k)FC7= zI~t-?JWfyoHO4Vp0P$}nyci>xmcL3ytr0GZ!P`9hsCbI8oWT(O-P(APGj-=1!(^?k zK)@g=G*auAG#1)bDdSCw>DV*zt^|g)5g+*|!yokDA^dK|S7aw+5jWWJuhwytuZp-^ z#8l&5Gtl+Bm-CPvvCF=f{wWU!nue+@agZqLGz|R;JrvAtD~2+qm!^UMt?dX)Dgsrh zR0P{B3K5ozrht2mR!n>!P&|Xo(=UFkR%?}4$=DMPeQc-$Tkn{x^_NZaS;GT0yzl~R zikpkbw4)65J!#H_)N{ErY2p83r+l0YS?4vZo?L~HIf<5cIATW+o$}8;1b1i^!dslG z1wEMBua&EyK$8Ny1#V_&xp&FMf!bKu7nX`fw^*%ykcn?1UC9<@a}YrDAy9OzM)~yrZ1_zon_A zE$H$~m`*9xAj<>>D6$MpWJc{1&&BEvzL&*`@GkU**9SMCVJT_TFkxtmR?!_w<6pKd zB<5}&8X$ay?8@k=V}#qzsM&PvN1U2zE*FRK2BqtAhTvtUnwAi=L!l2MYI8r1Qu!4V zQmgUbsf0+O;&D)95QN(RG)Giuh#q6yAklwPnd!Z$*_H?Q6vWskD`|Y*>ZfME87@HA zv744D;ma3ZX5Y$M=x9#Gr$LcREl~lFIW1(T0?mkW-k1`)HFBORX;_KwIfaitpGaZ)j6Xgu_eX=q^=uLtk?Tw6X~Dcu zo0V;Mvahc26_mX%`3;n69y#YR5gRup7R^u|OZC-HUAZ56ON7~7UE_e3B$zSpUf zH2lFV2Ep!UJbtgjGE8PA>Prp#z7QIgm^Kv6Cdb8`1^XaYwxPpi&;bJjwM7rnl8ktVPbZErYi-)l92P*#Z+O~nJFwyppujL~o zMRp7e>;*uCOACO1DMxt-f2wXL5n!^|_mQ?USQ%&tPwkVqNZ8(DQ)DKY`~23o-rott z1fqrRa?Aa{qOLM5sxDg7-JMd>okI;WlynWrR=%F2AdH=g?pka!%+A zp;7MR|G_EpV*=_LiP*CjK?Wl}T_42`Twdq&_NI1SZNf$-PdjkUx_TYuu?F445>8=5 z16%J{u?3`dS_svGlX`y^ZSBZixjT1-Jy=wr&>|4`fw`wtWGfs2UmL=k?0;#HYie7q z;)195*sP0FvACIVZ+Dc=B{ahM!V!yGQ?P<=f)w(SlbeqpNIV)f*cYOYC)Gc&)uu3G zZ9R)-*9h7A7_1)xrRVww@E92OGYjo6=))NhBKZ)U+JCtPBh#b|nbCwR1`W_(-V?by zq}Y`OJF_6L&5KWNe+y2}4-M}T$cwpPSsSm`5NbvdpAoQ0NP*U{3Q1B)Yro+hc;{KT z!56_k49u53QTan=0p@wAXr{wRIF4k%>CovDyx6J`iBKG7Fhmtm?#W#G=H(nKqnV^< z4RQ+V50>%-Q#JmwG^|SVy*Et~CX|-(q#8p#o;0X-dab9-%bY^Z6z#tpY$~K64W0=K z*G<>p`1x-yL)arGSalhjSM#9+N*x)rfbeG6|MRVG^?%YkjdqYq#qxFliYx7 z1)V7)GTP{(RqCgMF(!GYpqFtiWJCbI1Cp(Xq3{Doz z985DZtjXYvPa!>842Ya}V^liIJ@iskC+D{EBH`Uu2tDc2**@s=By;9AeV~@Z1J7*9 z_o!J~sLEKuM*%MBcCVZ%oVF-+@-n|q6#0K|+FA7o`M^cJi)~nIE zR%76XEdmvuCvejjta_XjPi~>OD|3@VP$1`JWI&}fw}B^3c}yJnMDZniSTi*{vOb%& z#~Nze=WgcK41DGy?Cn^az81C zn=^iAdAh<;!>9?KTmtN^@G805Kblg_hLLyO4Kx@exKOZAQzvL8P7`nT2T9sEX+zD`)X(MktAjW2G1fnz`Glf1KscP^J{LrYl#)@r z&&{wTpju8@108GxrFjlPXJpA^7yJA4SFD>wm$=cfvPrU&Sb7;&6Ml497f+A=3C0pU zXce;nKDU;Y#?|VQI3$WjsC=5s?MT>9sL9Il@@HzeOJ!US;b@)+h#hzb+d-GrC1lhm zvh&Pkob0QXR2TEbFhBJX%W@DJ=X(vF==-kK_(wmm2F}`Ix{B!!<1_sX;X%Q9M?mU` z7G^ia@Pi;K?571E{Twxtl`suss@c-7wD?8pS4{5e=5y_G`r)N6LGkVBiIy1bao2zx z&q5p(?xOFvZqZ-oGIR6M#^OPGnFrqTVk!-o#<&&QC5QsR;bL~1K?2A_c2d4y3_O<5 zq#LQdVp%CD$+5K-x$>HzT&zhukO4eo`ZbIjg>PGNU3P%FUBsmBU4cVjyOvsa3$& z&J`BdP+`whCOvJ^!v)cm^-D#tVmdPQ!6^sb`|~J5dbJe4*u}$lBq8s;SN{VT{3*Q>!{D`SaONy}0srfJ5KEt9Tgk_bn5@mFs8}^q+1GQh_)Tg8 z(_zf~%1*I#j#DpLmL_=51xnHh3jM_f>6#*N{Qi+SXCcVa*DHXXdWgJWk~-lAC7s}n zY>NX!LdLTfv6i`{fohTbel-Er4RBOP+ekC`Hk4(0>}N+iZc2%kb03L_b;O}AaNb)N zlO>;HoRjn#u2WO0>#;U|<3G|S*ou<+iPHU%kK+VZBlNFkEGQMV>Y)|afLRw#&X53$ z9;Y#?d3hR_^ROWWvb1eX^BR~*$!ddUV)(@yLa%KJNMVDrYkC%(Rd?)t4mlR8Kor>9 zbPzo@;Tln`a@AB}3wI$wPn`dG{R9gSlan~(qShPdWqih9RwW+}wv4;)7s-(M}%vgazDghFOKsk%N97-1O;5n@r;mUZ2V7kk+fb+g;S^-lj(+V zLtX9nedngax2Qa}Q{Mz2diYNSS*sy(WW1ffilM2NZ*rLI5b7Hjv11yCjx@{O;*(U- zHjag0XfB zBpgE5)KJ5)O z6BXBwhQ`a(-kxAM`w5M!_3y&sU}?It??1g-J|)LI%TRy^LEYD1!DKdl?{sjx;1;KI z%&Q{a-`v1b8G5ADcz_@#s`C38x>jA=gpgyxN_$WeT)(fc8DRyJ6K6L2VI|~=mM@($ z^fTWc9|-mZ^%4UC_ zLBWrqYqgsj2Dy`2@V3S?c3c%&$FNf4672HZ3|P+D%;-fH_wFSL`K3LeJ@}`{ z%SFCE;@6}gxK)_i$Q6q!zlSQ+JsQf0H%qe+4syKnBgL2aHBRAuX6Ksh3BmUk*`Ys@ zWSBS*4p(&WM-oFM6ZPhEjW@-<+;>fKVlUS{s+gb#FcGSt$Cx!}(&jNzdI@M9FW2jDO+L8M%`5! z;+J@wqjTZ1Nq4#sn{RXDQlj|rfgY&6=8`fp*3xMxsst%b88)6s^LHA}Kzr9YU|r#{ zC9g8n1;?vlvvn#(=d6GNFYL01ZK2E6Wn0moA6`*8XMT5{Lp>SRrEL2l#FB^FW0DKiCW2$i}(xZ5+AGtFObLYu#dOr3@Aqi$8kHkU53{S|LwJ5)_|>Oawl zl_(gthKw$z5qZjZ58^4Te;P$AR7}q8i&}_pnZ(%J5cy~WcJ^$plsRH^7uVZ(^}=$P zQM(R)_Lx~5U#@ZSZzTwIudm<4ms>v9YtxvY^YjZDnw9b0O> z*2e4Lcq)nYHBs5r8xaa9MclSfZL^ct5r2w3o4Y>nOBBXh-(HNw(xHOsYdbO5mv(+N-)FU<1p2}a)Bc|9i*@!zXF)(ZDd<` z+U@zMuMyA768_J#u#bNJ{o>;5!N5m>Gqbti;4vb#~SE9+9iszT{ zTeIquVUGlaff9 zxek5FXtCzS{NKxklNc*3}^W1OoFo-R1fB8le&>QV~93cqM5f&Emxm z>mq?Ee|5Wospj{L2g(BAT85-VoM}1!S13%r+5N4|mZg?(S;9pjiDSF9>TB|<#zx6{ z26uP#Qnk2>68b4WE#knhIJ%Z%`10jk7F1? zKVxn=sZ7xqy<|ZgEATVI7*-N8pA0V%?8WYRZ`R7nN+l!zABN!?1O;?b&wEIkt}f`n ztOm6u>Uc|+HNq(o8oRn^Q4|U{&E`emXYi*n5~j&NeFa;Y1fDaTTY8Iznh{^D8yW9P zb{!`OMOJ4wu&!IFO1%@&-;rDMGriF?7Sj>s349-2Eo!X^&a+4qmbYSMj2^B39i7(n zdm`pd&fLQiUg)1!6KXFMv(6KFKQL=XslOgjM}iUgvu0F-KcnMk8QR-Vi&FX}Dk%A~ zIKql%Nbs`1DslC+gzIbFCN9%%$#Q>WXQVv394youGErk<5_UHgvD_TYnREO;uD1O` zu2s&#;);;j76tDqSLF;_iQ3SORC)k{Y;#y?pYLN1IYYuw$NBZFTn(&dGTx`f}AwN6ON2E6zA0evTeyrf@lwk=+@!db7gN4)#mJzn5IjZ7lsBa&r5qn`o(M@K%z5PL zkj>@_xw{WdJHM0`e@T>MmG4r4RpGr=Mjxj^l%*fDH9(=G!8MB6O*tBilj96-2 z5O=*YzR8VgXaM22{kO=e92`bzoNY8kBbcnIlp)ecbYU{HGvmRxp)xXRN>}6~^oXK2 z4Ph;0#6?)huzuD0#pom@`ClRd44bmT*Ur<6hT4})vbTJ@MN zhNlCgYvXdmYbP}(B(YjZ_4tE0oQ@;{0>(4^_jXK_X(0$D3!E@`DkjheMwQA1qx;-` z46*s+orm5%h(fQWa6DMmPtFdjzU%6Jt3behC*tg@Y@qiHi&lxcp5G8i4nP z_Ur!uhk$VR=aP<$Hd6NEv1>M;z@2#G+W?g#nbNPDxJS zoz|Ao>A53LH{@_QX_$bxRLLBm#m8obSf;$6h(8uZOT_^~DMv6(u*h^vsWok^mDn7*`}=9VGmhtUsm}3ZcX-zia)eMiZK$aC7J#+Y zNreDIyAejfNE|)cBUqanR@ON=?p~0s6)U}}VU{o$+3n{zGA;%8jZxb5TsZVd1YR=i zZp)|Aq4}wUymCw8w;IL%nDC^Yq4|j-(mhih>i}0?yr@&UdO!mjXr^iL&8NUWyKU>| zXQb_`4=eIK=@>?@zRvRpq|bwuz@r@xtr_u?VkS)+-Y(JrQzLDaENS_0hqFmQz184Q z1Km}<(2jg@f(-(0++1sB+hND?o`1(@O{ zEu;JgUG_OI3=J6sFR-75;R8x^2eDCc@8$05KRr`|n?VH4@SxG4_CU`Zb#eBBesZ3j zXE^uox&&&k>=2YRZ3lrf{Z|tu&)r#eS3#pPJ)2$iy z(EfHtj*W64K9Ew@4-P)$sCrJHd1WcvtmX`*W9#*s3_3493hQtB`u%c&z)P?A(MDWM z>(QUvyhS}=^P2bfMy-*0^k*;v#=n^@tk*FvHhcSPf6}M^lV2cgauKgihQO;;JV>nf z`T6c9YI=Gm*(da%Y(49 z-f+sq{C?asPb^1|saGt8H+d-0+OZuO0)g- z>HcNfXNnMWq>JuEx5`tUQmRFB&E?2l2f+RL<<&9FBM z(c|3HU-Z7i+Iu`Jw_=y8^^~!@Q*t=wx-+tigj(9I26DLX5Yco^z4eK5JE$i7f7wM9 z*6U065TL+u04kqNuK<{9M@Ec~S7!itzXo3IT%VlmxXrc`8&v}hfxm4B==_#8iyvv% z+p@-cw#4}{dI~8%a`8|t-*1wzqJmcz5AGv3Kpj=PoA{-CbG0Gwd+-x)%tsKw`fhijik{Km$NQydEM0f6L-js%=Fv;@40#fK#GMH zFREEu4!!vHhQ~ZtgatN>utZ?Iy;fsLWX6*6S?=|*r8^IP;Rwq@A}U{y@Ar2PD+fHJ z*)&=>3IQ0PcT$hd9f!z&m@{JJGx6DtY}iN@G6O$*Sjt?!M0~-J5g8yi$tqy=AEGho zf8${C?Zxu^$oO<$Qo&w;DW+hI6r~z@7Wj=rEg`LP(#@wG{p!uh%ga_%TO9EqhvagR zMbD^=5OMy13LW(iWS56+Iqrq(qiQ8o+BeKVilDuj#>*H_11pKn%Xbver4v1Fx-o(V=X1Ak;xT@2mNw{G9(S{4#x6s z8Wzbz-s{LcoB~;lppP;lL;gqMZ?b)N(yD!#)`a<#*+?dH>)7FFw4PYkFK ziLICOtmOV8{ZV6T8@phj6qtq$S(x*J5wiA3V&sR?YUFp@#UGZYZWq+!haj|!P#-1- zR$HY1(6|lv{=hh`8`tJ);6zD;?pMEEw|OW8{=O3$sOMJ^DGxnf%;~aohCT|$huS>W z87sWO$hm$*EqkoSW9&F5Y(Km@d&2!GIeqZIhC+anr@3CVWhCILf4hOMJz6gtcvcVa z)39p(*6!b*K?7;<0&$K<6A#`)x;;n%YO9&C2`FT2h)Et2f!Rvd7E!CUC~{VcSd)P<>|zYhe(Llo4pyAO`4M)tf_VJo1X?r&wu>*pB|501#$pPfb@Cl7xqnlb^ByCXjd6z$qC4c;-95EuC0ho zpf)4&cJOWMS#&?`Nywej(m0*KVeQ)%SPV~j_j+c5v2qeS6s;s6nW&QGIzqpk>)o`H zC_A!$A@Xx2Xpi*IzU0d`EV)*Zf%X%{g0-I6!B=8@pv g+Vk(VOM5}LtPhx{_>|cAFKf7xyt-VSj78}G0OE4Ce*gdg literal 0 HcmV?d00001 diff --git a/static/img/light-mode.png b/static/img/light-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..2e4eea990f83cd59d9da9547441b7b157efbe18a GIT binary patch literal 370031 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

    LrF^mm`G- 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⋙p8Brp5%HgxNSa%^b4;)wp~TA)t_(Kk( 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 F{SWil3+Dg; literal 0 HcmV?d00001 diff --git a/static/img/logo-dictia.png b/static/img/logo-dictia.png new file mode 100644 index 0000000000000000000000000000000000000000..3ab0e3bdcce9bc4ba0ad76eb4496264289d89ccf GIT binary patch literal 109058 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 CqBwB? literal 0 HcmV?d00001 diff --git a/static/img/main.png b/static/img/main.png new file mode 100644 index 0000000000000000000000000000000000000000..5e43eb00604353d60471a26581741502554fda57 GIT binary patch literal 333851 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

    M;pc{#VWklP6Mgp3 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 ^!2r=D*vc-FoQh;r=ui(HSfe-d%TG3 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°)wnQFhT6axR=B5`=p3fajrMa#YiWL^ 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 c>-C8!Es@GYuSV767OlLDdb4Pw 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

    >U!lR6RohB1 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

    6Ev9p3fo#7pwf39PIA4U%}FY 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≫B7BumaP@HAjWs_n7^r5Q$%$zX58)(%hS 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 literal 0 HcmV?d00001 diff --git a/static/img/manual-auto-speaker-identification.png b/static/img/manual-auto-speaker-identification.png new file mode 100644 index 0000000000000000000000000000000000000000..82fff9d518e1bce8d9c82d4eb560b616eadedff9 GIT binary patch literal 465241 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

    X@mTuq1gl)8$Ef{Q$JzSD@&roT0zD7{EoLV@i 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%0DV6{~Q4 z$>x|?Te0#nEC08i{(a`K4BaGNJhS-DHJVYZ66dK#OQtrDDmGjRkp8C+mj7V=!nv8l zc4tWXNw6fuEKXAkEV24>)G&=<0S^xY=q5{xjtYC6vfHjgM7Qr`J!tbN*e6|6;4QLP zLV*%H7d!UtPJ5u9*kQ+o(Fg7;-nS6Qb}eIKs@s~D4oJ&(OJntCa0qf{+;>*0Z0&bH zmYJ)RM|2yI01RIe$v9m&Dr(1iuR`$e-%j?iXJ==}t@qY*8@3r&FThE_yqo-i{kX*O z0Irho&O^iVoJ4(YbW7xxDGfws43FgkQ!T&C`Ud%P1MgBQHCUJ;amv7ir!#B+pIiQ25_gl$&9LR|orA1Lq6l~Zz z4tSqcmR0ODI8p74jcp*IB{d6DXhO3+Xc*>uB^Ijix-FO)nqsx(2A|(gF5vz%A!O+1 z#cnF>3)wV8;oL7G;S^Jm!#=NsrQnH$zSmAiZUKmsiyV=qO(_-XWQk$&Dp6!92k`zu zcK+C?loC|P*o?@Udl(fMsFnXl=QuhD41GE2phc2~7%s+doOh>L1r8moJy&-Pp2}H; z)YaU|-mO36T$TQECdF8;oSYK5My$?*TOq_#5%he>d3wBeZ(N%OdmW||@!(TLytv|U zNvuy~A#;}hETbELOkKJ<0xrSCN&WX@ZT z3HVgF$yAiVq0*}SvNxl%D#R?jc+{%m#RvC)WF?%WeP|OJV!B1)hWMoA*EZh`7@*rZ zDw+OBZO*eT>1R0-`TU-aB`uMa9L7*XJLyva=V_p>Xda zbF^e^Y;>)xGMN9{hN9wzDDUHP0&a-mh&_6*S~+0Th_?iAY^)DdmzAT_2_JK%LX_m* zYL@@RCdcLc#=AC_zZ)B&D_bv?IAOuR5JT03IoO=^1s590`$d#K;VcbwM6O!Ma~8En zA;BxtpGHxFNZm(>A$zN8Y(m+rp;-PpxngFZ^I7&7mzzK9kdJb}hv(~%MeL>RBnd0K z?=97>YD51IFv@z9{^O3Db%wU=k(#C*uG`OWUlS?@5f;L!n4$}xF*}}ejaF4}O#LFZ zj$j*hq&b5u{|BZ9%D~)T9PoreNVs*H3ddN6N8sEBg1_HjpZJNL(Iw>|di!P&xqVe5 zf8ao^yeQT%-D5mn*Xa2&h@r*B#o~VA2NeHZ^CNmr z&CQ?F*f{6)w&1=Dgdh?RW_qo~4yU7Z=FCU56r)qjTuhd#JX)-|7))BUCN|27=&dA3^_-2aVf zL@xQ`B&q9fwbp|Az$vG#!#aS={GL*R@0+0h^pTKlg)N)=yC01gN2wL;f=yYKN?bzB z%me0Vb@O45XYouI*||mi)-|=|>az&{FO-2JN-DQ0Ui7T+!BtdHA`L}7QI!J%hCPi3 z<&vUoI|ED)iwcIe1oH3lgt%nQbthL6!d|L@j5QiKJ~FOOx@0;1STxTjjCo=iW*8or zG%Oer^ft;H)1Uj#jxcj#FaTdUi~IX+ypY34otWzhsOpm9NE%6vcz{kXmQs#EB6 zq^RAE@e7N3fuD63!9Jb2c>pWHz6EXNw{Kl zzN`!1dmr`G0xCoQA!wjUMC@lAP;A20B6~0+8tG*#q5%*P)AX%3{p|TSmCgrSNOdU& zqH$gkMBjZ~M|B%KGRW8h7d`cSSi*K;fx}kHG{00_8fP9=-^$~DeP3ulkFy;jDJgYz zl=|JS^Z5*!JAsBbQt{by8Bo;=K1S)9@D_=2XjlrOa@APJTWi z8y9rvUuc>Tuk~CB=S-vcXZ_KN^Y~ zo|yQE=TUDoLhj|Fg_MEvT~&3Gs&g*W5NXK4O+gIy47$_v$0(|t6%+Fn7Z*p+eW4}+ zsfw6?|NccptS}{`@%+Ij53MF64Ocrg0L&4a2Xt?*n+~SB&7|~N`j6CagICd(`9>C) z#tFQG@swJ=0>*Njp8c7HXD0^V;8;z9n!d%BQ|Op2R1E$b5Xu_a#7q!Dff?OX4XX}H zJ&I}6e{nIM0Drgss?YFZ?SZm7r+~|X}{kQ$6vFbWc>@s=nDRvCS4Nw)onbYR25?EOWx8+@~7M}KOK!uvcgmyxM zxW9tQR`rjPcSU(j36(7Dpy2l?D8kNHDFda-`9_|fKT8@L51*!VX!>yzzSm#P1bD(M0$?#e>gEh} zSlVKv18|-O1$VRT*Vfkk{3gv6nytmQCnkU{%@@Ocfg#}#&}_+2LQ+!FTGjT){Jb+~ zQXE6~zuh6cLuXKq>S&2bIiL6AO8rsJicRBf1dp2k5)bXidj4642F0YRPRXR& z4+3h5fALxB)Od8?ZU7loBPiqL*|#J$27~bG^W8=VOu8=2tjNQJD5D%x#-9uy*-b1^ z^3*#1%KXtf^UDk({!XjQB_LCU2T@TSbK~6Jk|aW9D2`_{>FAprfMq9V2D=4P-Mn7wWH-!GWkjdnFXQM4=0Lkc4{LDhVU1V++T03}G%j>Z2)mi{iUv zRMD-@C{1DR^HXz{Q88`RpJ2_v=;ey$K{|wQu?B*!XxU>AK)BnSv4)SXtS7 zhnoKm+6g{T7Xz9DPyQ}CJ5#c(umQ8bq>c$%oiES!GR-?<=@a+W-q1;x>M&R&R6-?F zbX_&YUWq8;Z7&&j2l{28gteb}8&%%@D%amcW6CUYb;Ardiwq|;ycCfF-Ms9}W3ze0&!*8)eKo8Gm^6-|R6Q9c`D(OXRYz>@t<&_2SBs;bq{ z6-9Yi69XM_JH1!_y+{eSZY}PB602@lxE+PBvD&2&wJN@`_=$c4G9GW{%yfm?q2oMd zG3P-)ALd2`hBbkJn_d+hT9yET2K|Scc--!O+J49)8FkV!{A+C%G|NHhB8PUnf-fOMtXFl^}x&V+H>6*26XUhdT z9iZLu$AJ1w`MHC7BRVZnp-e`py%`rd6_vw%Id?QJ|9L|+rrGhNm+5;o7GSmdBQ6zf zFCrp}2L~_a%X7r{`^VB|W@bi%oGgzA*ivV$q}!axw%#h?#}??}@y%95)k z-@lDWwWgQno5_xb7EdkC?iuxk=|rM=R=-vqu`^+mX4}{Yu&>ewkRPh}B^Sezp?ytw z1@CPiA`>;QH|%k#F03V^p3W2_DRL+@VBQmv6xJ=t<}W?h8BHip>2nQ>F)4F4Z%btV z#cMNZgj>re1B9H6;dSZTf`PwUEbQP>t;Vi1AV$xz2n1Q?7LxXO2{?Pei8-PCOFE9p zR#m?`AvlXr47UhDt0c#GG5e)BF>c9X^#zO~NOF#(()|qxp(3iQi%agOWasHUuWm9k zr{&h&nX;hO)I39IQ##Te0anj3>OeY;E1^`=DHkKUa^@DQjMWQJg-=HrGtzSnw*ctHdacoW7cJ=uL53OF*0PFB4o|^P@ z8=clk4rJ`@cIOqB$e(GMnX1a#z2eV_i3tOJ{ViDLYqQxH-f)dbZEH4lx)Ifl&`o0X zR#@gRuuw_=ZkF~ZB>()@<>OR~wljm!HzG0g;{$7LVFf@px&ic_pl73Y3XfqE@opAQ zbc52xFYY-K?mU?(nxQ3|o0oh18f6Nlt%w^xyMmYN~-IjCsW!CW^p(_7}16=gUJ2H(E@ zyo+0$e-!vSo+r7xCcz-|LufE}DN$?{bpY%esqPw)mt-|+g%Xx765;+?f{KnT6`75B zy9Z?~cJZ7NBw^n;H8Ju~E{T+#1^pIx6u;Ii2Tb1*^*8e4!B@d4%xxSbJ}rAbBBtC^ zuV3P2q9S7H6&(1#yVkj!PLa^ChE7UvLmwL@Boty|tQg4_WZP~0F=SV~mzFv_O`8o* zX(?!^ICTvg#2DUE!=^|NqzHaMYw=r#PJPKA)*(e_n4~&&CIWj@$ zr85cix%R`u!LFVrKM%Ej;eiFibN%2``j}pB4l?CuEuB%--b$H0vYXKT3B;wc}Z2S zTSRFLQmp(G{S zj4{gK>Q3ul(%T(BYh-v}q*D>awyAWZueQppHm-V)V@O%Vaom?OQg=QFxuez9)|SuP zbxceVa}^cL&ClsUazn@*t|lb)a%>XCSie zdN{^uXlOw$qFQq-*56MmEl=Dr2oYzQn>f$W;uvt(S%W=9jSJRnxV`)Le=W6B3PX4y z31Vu5e8%$n{jY7A3{+?UyAgB*zDfPondI>~oGOh1(fb!tEXk0;Uy-3AmC=rL%^@wN zr)>E%J=KsW$2~no6&7@wRFU}g;tQoHd6i!MoglMi{oU&LIO|Ze86yM0@`g-#I4?V(haNTD>a@Zm?QcEJo9#FRt{{FdUUS7$6 zloALnh|=LngzQi1j~w$mFy^y03=+qhiAsDUnzbjl%?^4mAVXIrAOA zeRUrj6N`!6D2XD+n>FnM9my3uUCuHcC)NlFuSKVAsx)u6P#!ue zQ}vf*vpDO3(&AV6y4$}`f^XqidgHgEtjN1wMPcG?C0mT0M z7qIBd^QvyKs}LGHiGT`P!}KxqXze{(b`MOGI7Y4Htg#>*W}&NC3lb@^YZS)vB>{wCyEjEA0?kH zfl>B3ODqRu``rjgOvQ1f_1E+XimYU&J;Qc$s!<*hw3vqBeFlHgrGAqR8o+d;hm!(m zdf@x;&ss?Rm^T6arB{R^Z`48NFZI-i70?o~B%wcmy(y6eJ}PB%XXhkDh(w4`Vmf+C zi&B>|+{HP$MU6eOXF4If(=X;2oSvTku;KerXY1?Qi8+Q?v!aqmhwJwnU)gTk85MAw0XVDjThr2+ z)##rs;b2A7)}}K@!3oe?`Y0`@nzH)gxi#LuGV)VQNJF9WdU{sfgb%H=4-zlKY1^yl zQF`ffB&HpzZmUO2phm6{s@Ymc2+&dZ4SY|+A>SfZ$OeKuN};E0dne%rRU}1)Zc+mh ze0y9t&Yo2!YdC3!3_9|n2a~!}j}zXXlU&1wZmzAKi@xZ3Dl@mzlm;hCr%l#5P8pSc zL{L?kV;PK;0&9fLNaa}NgS_&Wtt&mPhv>3=<@`AX5eZ>kp5SOAk|QtVPE)#L`FF2d zu(*#sW-6Y}WrvkX*yHqR%WU2kJ80%U`YOm=B!8HgkU;20BoPvt8s1RGen`Xc>73Ch zvTuDE>h=#X7DZxr;_vPkdpXGkv^es(@4vJTVZnt+x@I2ZD8vHJSL2WeiX z=VU1WddH&W5OrW=a=%hz*|fC^lr$eOXfyfF5??Mdq>AFx>ECu|jN!G!|6NNUB_rg< zgvkx|_^Hd}j>Im45~ z-R(_ktC=gf#k+!KRV80AMyAU}i6A9nYn#1#z_qH09H~83R-9_cRyS=FapOE-MjZ5l zE2eo2+HXFA_iII+3hF3KyswR?4+7IR%Ha;hFn971LWgkU5VANM_XhFew0OWKF=620 zY3b=7oGO5d#^j`YQuu$}+}C(u^?Zrs>n@2*VnH(&a#AVVj zNG?F^P~m$|t!(L|A(|t7;*1_^H?@?LaVBU>!MD;%==U)XYjIpnc|W`OV)2uJP3??| zdB`MJjk<6IsT2JawS!pN_5*v`Us7Z^2P)M9g*^g8tcm{N&M$LwuT_%AT+CH$fBqJ? za6PRKxjYHu-QXlb*ZcrVu`m+Qg#HYKy#{|n^x*mjb5Awjv!_$b(QbGMYpc|NGK)|} z2Z{o1hltu=umHwo2cwCW;px#?kbQ;Wh!i!|2t5eM5Hi{zVP|yM7g3_q(J8C3SEj)mcYX>_?|_t{?H$5631qH5@hSv+4e_H2v$uccw1%8*6z~&pj4{ z@L%EQ1)QB$i4JzPY0*&TRNClJ7@OH-oD|>)l3*}67}3$t`t&$FWop(4*1{euvbftT zWFmc}4ZZ9P7X+g|G}uX#@`uV^q}sYpQmtS)=`_}GFy2@xJXLH@Fcdj7Em1P^ZX zpTYKaN8lPAGRVTN>1w(RysG+Z^VS*EBLd9bU6uH$_1XEo!_gU*=*T{yj$fmt`?Sj- zC&FAL6qwkm64QjOsQe0Vefu({1LTb@=`p?uI3k63P{DSBWFOJK2`=YF&D#GD3&77p zokXynXO)jdwA5xnmU>+`YE@THWRd=B9pem^owh_edHxq>NZZ=r`7w#u(hotjdgCe8 zC?o!+<$`r@4%oEm_9=I_hPYp$9vKTAV}^T4t)`5z&@}`k5-8mOA1B#0FLdZ}_bM-B z#%#D-8mEc}X>Yua#E$ramIn^v_1vb}duZMh`K>Erb*eEqm`sF}aQ(lK9RRdJ7Unlz z=I%BhY4!O|s(nC?~nH`H0Gr*|C{3CLnotr3>tw)gN z@7d1cA~Ow9pcDlPGdYNuvoJ|2SI>YAe_@2Wy_dp3@T(!K6*QxV_2JZRp_!75c3SNt>Emo z9~a_K2agr0{;Wl!9bEHE&q_ba^Z8SX_chWvL&Aj=gTC5>5d05S76Vfigl|D-kiY)l z6auhI$WZ0CJ zd?R;Dg?Z>w(yFSWM;sSX=!L15Rdd#$l%-ExIWa&(+_e!-sv2S<8*Y0qIO>nrBKyJn zZj{6$2u%zlfvF!sVq7d#csq>$ecYzh&Xr*C&<_PCNJjQ(F4}LQ7~K8;_b`OgUMNl= zM)Ek{*;VP&?m&qiOe`Poxh3phDbM69DK|+-@}7P{*p0t#dK9Zwjc>~-I#6e-G3jx; zQsKismmVNCs2WJ)4r7{&C8Msjl^&0L9>bmw;V}Q5G&lcK#^Lu#gNkWv1v}1_ye;bn z2Y-4R|5So4m5C*(?n7GXs_th0!Va^-?hoYFc$xFT4*NQBA9w$4}pJ^+-4YY%nnEL&=p&3EIzz80sX}> z-?VojL}(3Q29MFfW0~n#p|)8xdh^qQrF^Il$kNWN936rR51ZjR#D5|dRPi+TsCTf_ z#|Fvl>5?2sz-b7*@?pH)opwSJzFKaP{n{4`dbtB2x&OU>l7+}7?m-18#G*buJSRL| zjC*9LQKWblS(uwh(%K5g<9{T4@rxBT84c&ZMC;U;0;>cmoZS`d7xF8=n zCW1VjTs5seq~zn61J9MAHub_VjjnVNHzgpxzg(cBUi9W657F}(hXlU+E|K>k>ZP4e zY{XrGQ~@A>1c@-@$Qc(4B3`e38O4KUgiA$2@kGX$&F;L*1&RXyyX;DYbUNBQ7B1a2 zZSry53B3zT1b+r(_v?*StE@VNnMMF&OE8jkLMtq7 z0>z_BJIis=M`N)&E2d@Nu!VpPlcne)fb!V>wG}PFx2E3wOc8!$mb8m>6*~hVo!aUl2L9T`N#2uWJlgz8KKkp1fDqb#~ox7MoCDHHJRbN^< z_!f}_C6xnsV(bPmoHJ3&@xIbg74*Lr$8Dk${BM_lh0(VG^|I)W?h*@%Dhi_?X<0jv zvEe4lPzvBqhcc+hc%LT*g%5uaFaZeAa$`)H=S486Vjei$s+1#)d5#KK|PA zt%ZVftkL!DIlgNGM6V^znTA+kbW*lH~s90ea+#q%WCi%@(UTo(F8 z&AjYMJoudrf};KZ?q?Hw3&!rbia_)Vfi@TN_!w>~ToqEEGZ=ZqgK?Wgx7!jlOFnAK zJsgWV*fy33oSVs`d=P-DyK`#&<|__K>{yT#Sy`wou8X2N^7mMyl(xUUR%F&|Pfr*9 zQ9v0NVVv)eR{SW`xqxyVc6Igd8-qi74wV1fqCbY!TT+RIBa~8Mcaz!*-K%Pz-O6aKzE_eKS-deW_J(!e~%2NaRjC!Aq;$xx6Phh66O0mjJ>mc&U;*CEs*~YwSM0?t|LcA!F)UlFU$PTRT(tMa_x_8H6z!ixy_ zpO5}9YSByYFUO*`UEdGGvR8`M9#@vpmR5Y<-0uz?FH&o^25fz_TX-x5J_HuZKr|jN zduLr$nRa)Wf%5Y|-@D4+4fYPCM$z9dq$W<6UU&R``F49?Sw`OrwDe`#b{b1o7JNVY z$nl*{C)cZ1j3aOyjdwWprnw5*Kl;Nx**=mx-WJI5U)s3KSTbj-w;psvM0&3aE>0J# z_W@d+^Bx0?*P9&PG~aaB2WkAoC5B6kf1smK!Dbss&h1YA&@oxaMWGpiNNgSm3K)Cy z0b# z`{6e+f#!(gG=~(~F%BVXE+G<`u18E#$_Gp~{5Pb?HeF4oHr=qd{9!j~d%}(?B-AZb zQ?Rr~f&dQ(=Y-}Ztgc?Xu%qH8?&jtOJRDv!yXR&0=nna{YzCK-!@E~@*$x(b*9FS< zj(-5QnKBx%?tiS!cpwxqS;&(SGKozo25VY=xOuFUP?V{7elC%C2p`ck+Bq8xOD>hd z;@LRKMfp<@wDIwCQmQjZxWK%h!buS?+=f8%I^?^&f!!+CQ0O1Arw?>&>!*< zoRxA4gaTf)+6|ch9IT)F!`Y)gF|=CcuQq3>6YU~J?f3gHub&)ECYpV^o6)Gdd=CN& zz)SNsS`IpcPc(#xj|yD*)Q=Znwb{HbA#O}CzM)S%t>ifkFO+qDc+5S#ujIZM-Jh*h zXdToYjDH*yus5EqS~p7*FUbTwdTtzXrnnyWAGyxe{Vu})82DX2y08JN_c)v2D^-gl z$rEo1#!tsVL2#}X_^9;-1v+T|3(GJ)=dDW_$n z?F1~Wwx8^)l4s<2@lPVCg+e=7btCMWe~Yr*d=}}$6jXF{Y?SZc4*%)i0Q(t? zB*G%+a1$kzx+#F9Xw?C!UtV0H9_g^Tz_uJ@nKC4QtRf1c8v>stAt0y({ql$sA4JQW z7~E$8J!_WTqfDIJnOQx1z-!`E8?Y&9%SM2J&PcfKo{F<&Qo}%8R@MUJJrRFYSg_a6 zjhnxJ|9)(KY;JCzDVk7L0YD>pL7VsH?6PSN-UbGi;h&R$G= z#qn~1BOnMp3f{XDhHx9tdIOdGhh~N!KF>9981yu6w8jU+H!WDK6-t{0C`)!^;dYoVDYwgTxXH@RBU~C-1lwF+vd=<7)z~N zEU+D&Atw4fUO8~>)fHTbh>K4d1I!b6zK@+TN$}xTOG2?f6cnzCvV0qEXXx7(Kf}F0 zO*W`SYqUE(rCreGFejPwRw*ro`BRJ6UR(u$}Q)mto*ob zv$)O*hhVO1Vnu*#>CJiWhj-gPd6MTqbtW=0^38ds{hdnQwt*I5;Pnlh@8cf3xA8qL z2aDyn@Tv9v-yYM641DLl%gtAiJ>J>@KK9gFw8<)(48v%^en#i~)qvsOd5;?)bLLQAtK{*8Nn$*K|PE%Bav;D5GY ze|vlPti)wcb!mGi+0!@O%OxE-%!IF1r=r)^Zt|INq<>Gs;}3cvy_m)F*)W%-j;I;4 z`8Yb*z}LO}#EX)CD(E`S0n0mUuG`|ytAB~{+n4`su`A1mhWr7N`>Ve{4L$Ee?;dfG zh|i9!fkus zWM{M*{L|t(CeJOnT2#L!#s9W_T$9IDFU9AxP2vltbe`pSVBI9$Vpd1%bpw&AXyDRF z2bjFS5X{Izp%gwJQO?jgKo`~fLY*J}2_o3f!l2w0s(z5jA%nECYwQk=x^h*nSj*Gb zrk4%RQx9p9g#0%RParVqyW`J}xf;`|H`m2vJx59j=|H98Iez~W#u zGe%dwS^vf*a1vnM!b^5lvy-1pv~B}Z@~zGi_>45vY>jiczTTIAw)oYm-dg0uChpJT zT+iS09<7FIz6H*~qk$em5)QR`&4=hjv~mUp5#nr!g-oa#Er?OU(5({@{o zVK3Sa-=R`b)3?9y}t!vuI#tA^m$tgW{kzYVtvC|p<-u`K5nn-swc1%=xSFg0*KGC^&1dIPdzVq zU4aTT&AXY#+XGyqx`}j`L}}TJ`(&Q~dGjYpijthwB;Z>tFd zuHj(o5b+X^j}gAVD|NLTWP0tU+UJ$wA}kj-TB9&~xO81q)fwdG9V*C7J&bN#WO(zi zUl^@ZdZ!QvA$V+0eTiGHALmVRJ-nRC&d%=a@QlJtoFl8bfo)2wHTY$mk5-A9g)sfS-ihviZ z0t$$^bdKkG_Z-gE=O*Y7RS*3J)b5IJx+$uDqe$=i&4t8W!!!}8eVYjqZAc33lg%Yh zx12dO2{+N;I05^^z1$!L1<DKY3lvltGSms!HKOl>Yl(i;ear>H0>+6wMDj+#XwA<$`KiBn~sfvm5S zS>nh-uB#q1KYcn}Pv3XeyZ8l-Q`5-g-1OE@%fxiHP)ioD@qCVj_!5wjg+3lv(#_dr zuwz*T=5}Q@8H(>O!_1*DFiFvvfG+FaTc5Hz43b#Tc7Lj_ zBPEsNe_)zh1FSa4=R6d-r#8Kbl!fIsfHX^ycglDn631~berQ2uL7Cp`CSbxDG!6tq zSUknPQ%iNDh$Hw64y09>K9##XWh66$l~~*!YeBT9&2taZX}!G)YF`)FzY{vW+){>C zpsIR*5XVWDta4J+ZPcfc(YpC;S=!R)I+wM}4|zJDbfuX!9b}HayyVHv1nBop3d()l zY>foNgXVUEPXmJCUw9}fuU_zdy>CMg4p$V2#d)3<1JoigJ?4t3laaORbXkC-?s8Bc z59ptbk7!@>z#j*mlW)x9NaPEsW3eYb8zS@sp%pv6peDZu`Cx$JBRJ^w=IG!^^R{-r zO}r@rZw*kF_mxtHhK3+t%PI0K@4l~nJwaa$R60yfbpe;=oi2lWN`@d%Hj7TZ-UzGV zN=!tA#^a{od~Lc8>fTV%R$cuthCiD3=2hse5tt%nw=k*&O;pv@5t8|tZeqS1{O#rL z+<9yJb59R|9Qi{UXr@A-K#2mW>$~vFcc_a|dFbbUXqONzJOWL(4Hc4*va?D`c*vJQ z7?Rj;N zFmwam`T_#Qr4D+5S`A?^PNJ_;f(pP8;kQ5QKG#cXE#z_oeT~PfoOfX(K~6{Mg&KM* zQM^F!P=?}i9p!qON@wGeRqzK-5K>rm5OH7-Jl-T<%UDf1>gkhZ+E}CO#@}oL zDal|X{KjoSfVR%uz98b2xNvN5YXZ1zsS%443vMSf_UmhXCmY#w7-7rH^-~D61dM4# zZkN+ZJi^%ysppp18}WCZL?nE6gF%8o`KC(qd#VBa7lg^Letn5>A+vpH4Fmrn}g~7Gp+D|YjEI9LCM)=^Ja2C@4f&(Hf*(&+n0*(Gk4N{&fun3SQrbP zGoe<_Wq0_)OZ&9?FT|L~zMBn5{&#^fT)=q&xsbw@2A|j;lREFF`-4&{&ka5-(5zBG z+!_n;$8#2I&Fep?{+8**gVxwV0x0$($wNIGTD~kU}G4-7t+#YK&$FM{rmtUmu03p0Q`oA zL6DV|EHA5oM}&*CMyvDa8%S*c@&V0z)a?CTgdo71EvJq<@pQj^79 z^hlSwd9rM^{>{Bo(e(^>(e2qxoswi50&Z;6#j29JQ=@AY9#%&y00VUSAxp>S8C7Z+ zqd;4(dh+VK%Km}>aP@1^itYJ_4{u3H38%f{8oluznu;wYut18DC<7rDSXg-IsY$Luoc@%*KKEhJE$8KGn%tjtoJ4!Ct0Zq5vG?_g zeE#xzESb-^|CaKV3gBwOT~4#`+S@~0aXsHFI>aenqL4EN(Lq1Ke+OdH)EB4*o|f|8PyZgr!S2rLW&FixaE2}nsv zXE4!6T)cnq*zE0i))|54NUT^E{r$%{CH2o2ba3j6AJ2 zmw_#fdqof$xqMgNjyi=*2s7c&g7goYpK%Ca?f&W&^V7B00%{Nd?FaA_w1&CfY@-%= zB1Ex1209r=bt9@{aYeEhb3?pdWQ9_Iav$f7DM~30-K#(ZY$C|(JnP6jgHF314ILeS zsj*D8w9RT!k88oCZp_>6y*P&0CdoL7(TyotMD9~={2b; z1?c}Qj$g6yIc-JhcXB4m)Qwe2$dkxryy8 z&S<*_dCwJ}>r9uGmQhjDoi4VJzie)Co32h1a<p1o6a*l<&zZd&h7)b3WiqV+N z$F5AepIBp%JbB!FAVi|Qu77<)s(QKkae^HU>f=<1kI$F z1esN35(!n7HkEfN;Ml9H(E;0DFA>bmkW1Bf!|X;0D$K(1#>X2D$jQf? z3}%TN8st7doT;d)#&moj={S7&3G3_Y=ZPUau<$JSa$Jz|W}asd`{EJDvUnY4*UQ%a zUKSU^F8Uu9pwPLSRV}hsvjT5!#(lwhrE_GJRoLbaoe(@gQ z+~Dlh)F!NLHJU&iT-P*X+uCWFr2OEi*OPcQ;3!8%*4XJjEb^ue81FphadH5;O+rrI z($(&&bBtV5VPI)tDVLdOOPlX3d9+fLly;)JREFO91X8$Kvd^pXde!G7>KUtR5DiC9 z@%CJ3dj>XxCRi;!|IPf*@*$fALps`Ix*3=ny~2$oLwD}eK+52;;M0DZh?tE#edEvp z|18D^&Jk-Xl}+(Um?I~KVRQ38`zeDX?mU*h)P#sN`?2~ojW9IS;o)4ja;97HoH<;m z>-Ba9adVz(zcMBq{FTdv2ZL}H5F?qiz>m(3Wc-Wu2q4MX|$dne?u3d0H8K+ zG0(8~;b2YKyMyS<{Sde7$KUT!Sw8p98|xiV#`juxPqF;>xW$zvp-~a1^Q_)Ih1PO! zFUGFRds??0yAEh_595H>hzA5Xl}F|m9Z%c%o)5%<&-dq)61{uXR@mvTYk+@0*WsB2 zMCe^WX4CbprmMc3hKq@bwP7dif=;93{vdbTF#*F0cZIyGO7rg?zTVPvh=UZxoI@7kK&^FS%5$vi?1?&` zatv{mejt3U{NdSBhSR`Gop4cwoh`?kMkASOQN z>i}g5;m3o8JLbNoPUjxZI8A|IaBPY{f?|>7_d^QjG)9`41mPpYI8AU)w(ikLG^0Uz zJv9}rJd7FcCX7t7$dw;U=PkzSx^m6Hzz^Weh7gNK1MsS79A+TZgWllmJm7ef=+&MM z|NY}BOr@d0dB!$#m6W$Zyy>=;tK_=-mo>L5KF6+2?jDf4>$ID4nYlxKz8k`v?2-f0 zwdUqaKq=}Z3zmJS=fiuxLh8Ai5TdfvVs@xq=^1kR7(fiWMO$rOGhd_&-*?AcNZuG?oF113ksrps?5a@bFz5quZ*uz zt5#F!H|G z_0D@xx#D?unwUBrgQV!t>D0$wrt9&h^YG>SjSV}HnP00si(h!?jgI#RGSy@2k8}+xb6Xe#M@z|<7E}Cw&PGS+70js7^f6c-ku|H zd8a`t4aO(q!^3b3I^6SbDF58_dvMk&zv(=y;fFu8`|A-#dR7Hnn)N^S(Q^V9Sm6?& zp@a8GW*3-i|C3Ob1VI7uD(TxNY`E+%T3TG520!BH3)}mW#WoDM1mD%#+Oxk}3^OL1 zMP0?5oP%4Zhn?Nj{jH{LCD4y6w>Y2nh zQ7|PY9d;+bh6_X@f;nq_E)vUE6YFnrJa|(C=46~Bt=Htnfd_17%be z%h#jhiX`_1vygbu?A@jdoo_??bf&yI&zN<<5r^(kMc8f84*vW)zW{9 zum8x-zZW@+)lUc^8!eBcRgV$R(gF-i)8ghPG-6&=<+?FVkwq^nDvegng}YeUOHF%M z>tkn7ePs>aoXBW{9)za<{{JIV0b@~!U?zj_I<)8#O!LO=Z|2*G`-}Wf|0O)}T`2|v z`rYPz*j=-pet_C|(##gBhQjX(-tXnoGZ0WJ&hN8U9lsO;ZsAbxR?UpBZu)zMSr#uH z{&$Z6ryGMCZ|3hTBaO#(_O=GX;y4)H!nM5nS1vhjj7=z;D%ad$Ys+A2L1sx@~^Zu$^@V~vEz=ETqt`%v;zW+^yOZ;i+_V&Cr z*l^i`4Mz6Okm%0gsNF-N^Z6vfJiOZ0Qjc2zQ&FnK0t=>t20qDMVW*mqK!VCfc%%L( zF_qb>^p7fMq-8x%TOv0Zd0{btX6% ze=c#)jzQj$*7M8U0bM>?QhcPY{0`#0yQ9NR2I8R6 za%xd_Da!0tyC%UG zWwN7*Ng9jA2g?*~2{*y{QplU@KbKX?psR zQXB-t>m}joE`UY;_xfYEB7E)W$`aqfT^`-na|NVeH}4H2+C7d;;8_sAfI^GQ+urYZ zMk&L=Tsq0MR84RMlKp2(B0~ryVwJR5a(s@tWid6rE8*Y@qZnIsKEu!4ISK19uNgll zTeg)~Jx$*kt!39{P~TbH>=(1|?P$@@?WG(XjxS z<^Yrxfxrwt7BA@{6Ga(rY)&*&Rf(od(v+YzB;*ZP>bRv4?*T-~!RAk1YUo&Rf3tC9 zNJ~AKH`t?*rXzBMlRI_(uNLu8yUwR8+0M2ENP^u}M0zYgbQ1lMsA$@w)W~=0llq$O zl@K6i6-~Z2scNgJ7&~iQv8;v98)>=G6O+eF%Jdb2KYdo??ck|~r?X*U_!CVvF=*I_ z_vw+di1E{!olDDb_Z@xS?;m_qqCNzrra59*unA|32$;VnAF&hHB6(wfSU`5LgY(eI$M+l8;BDmW46 z3(%f{Kc1&r*B}Boe+!K$kQbQYV5wXG%I}n@$(&;{$Wgj)5c>EtNgSk7#pW^T;}_GT zL5Cq8>iSXNq?Pl>!%|CYC1Le-&GWvt!^0kY7&dWh-on;!=Hgf=W$xN`M3L(5_Ik1H zLaiKOB9oJsiYd3QEZhQvz4hadJ`D@KoX%>MqVGpnRx28;*cPB=T-X|$skGhhM~}Xu z)t0pEtz>+p0otS}n445$r+ch|wyo)`V0Tl6T5Yn!ERU!MkUV=$3hkk>huiCr@JNKq zhXd{Mh^W!2zvKOh(J~BlDY|wE8KP49bPQR{mL|4U*S(?4WYjFZt1ZlZ2FNypNZ8K4 zrfL}8Ql{cb>STBhdH)q!olo9Z_|GPwFF1EY3=rFHZQUn~|bH7q0?fP02ZXPUp|VW)3paB^{QVs`O6E-iR&WjmG$Q0j7s zt|@sC#C^#!W@dJdmT+idfR6gL7E=Fqu1bNOmb$oR?^HcdGL}BZIkI<>^8c1aQVVknRex8KKT zG8u|Ph%1oBm#cg;A2YE<_@e>M0EUU~boU#a?aQADtfpON$<|gbsb2IYPR>@tmE}2$ zhKvkcAM@$*c{eR5OX$-#NnCXm4H@2x)5F@j8f!~S(}jzpt*NyNidGGw@anOFm67rB z`Q}+Exy%AR)2YUW2CQPepMXtNbGWJ5Y;zE$TI=(#ESs(%WJni7Ro5y)#J;z?ytONG zE$Xa6ChQ#yD7-MP?_2x@=+qv7gK{DHTkq1PE5-j7N3*%kgY!EjCk8B&{6RI5e>-p% z;W zu_twooDwAAV}XfJ)slOEikWM~qD1`qkR{JS-hr{4;qB{el% zOh_i~Xm(STtJzYNmnuAhrb<0rpAZdi@peuRK` z1v~={sGfk6GbUCe@<(ORpZjLu^|$rff$~4Qe5b}xp5?PR>`f$wyLTx=fq54J36^bW zVR1zh47q!~(t5IT4gC;&#f|@w#h-0>u{R}C5MqLfdx=y4Uz`#aaY>R0#4w#iEM(4{ zrbNEZUAPFDv(R}5iA1gBG)UgR?EFZ;g`tisRgjL^J$aw^4}w3f3j&J>%B@RtYW{*O zCYr5;$IY!LuURcq#i!*@X5~iOXHfkJAYB5*j+x39v9DHG>VM#mo+Yb(>O}kSJ0~1_ zSnzxW!*u0pYkiKFY<0f)0Zh19Tq$EQx3`QPkD{yj2pTjM=a(z6La}78ub8{&^=oBq3SGk{0KVP|to$Q?LT^v{*?lLhomn5tP zm0v(K(W{yarV0=-|8T)l`Vkn9Ju8t*H|7@nZ!||74PFJJ3}zBoT`VovGo?2LEn z$IIK%(IF{E-%+`hui5I_tA`cU;#Z(dl{9pC4xjw$UuMye>WyCAQY}D`%xqa$pv<+n zPiJc6>`HBroBI`aWp;IXeu^$>sQ6P4KK`alui($!Pb5$ouA_uVC~1WMA75`7R%O`q z{h}x!ARr>$(p}Oa-60~~-Q6iI-Cfes(%s#?=WeR|*T^FGJ^u=jcJX|eLU&Y1bn zZ)WPDI1=kR|1(#Ptr6e7Ek>TnBgmu1@fKNqh3vfeF5+9ft3$ybRh7tlS!zgh?3frr zNZuRMPf9$IEq#(RE-Ew9X^R}cJ58yzt9vrLbfs04eCgWbgZZ_jMXE}PN|4NrFW(2X zRv|@SqF=$hC2EM4+7Bmn$YRy4l8LTToYl*np|kjG#Gm5@A9#x69qFt5KKhvf5|5^~%rEV2$3r1ACiy308$q<-dz5#bTWCOSA%_!wvOsyNUOP4oret>W!bG%j>DXO)OWf zXWb+B+Sg!&9YRA1!mysi`eL1UjvfA$emYjqW59bP^35?qrpDLsN-e*URLE|3S`K;j zz6<+q{toJ`BSJLcS(d4B+i!k)slsm!rksh6d%Y-^_cp^c{IhUxbSfSi_Qf>H98#dP z*%MO`F!39cRFtHG?PF^~P7e5hi&?;6oe1-0ve3Nj&A(#CoW`-U(55bEu=vBXBZP?Pq8NRvydwEkNo5s<* zviBO9=?b;1Do^41$B&u62ueQ`d%HzoVQ$AUes=;xqqeg0;^so5+P1r3(g zG2>e0R+(9$q$uEm;?l~O?lDl0Bz@Xm6L_;BKI+HL@Z<-jOo^mX6wLgz{CJWhJrQdd zd`bUHJwe3hf^woPX*^Q#E#5B`t7hg>f*#eG%G&7zgaYyw?7h5l$D}Y++*SfiU0Su% zFKDcd8zQT-Wf%xNI7t#FhN0dc3lxmK7D@g*ko@=o5u&d0+dML}07%4C&vll$Z#_ ze4M$3@o`RxBS<{DwFSOt0cc)uX7t8NgJ9ZV&K@D`8?{vwNl=_fgM!d5Wf~c0_uAy| z*6*^k%s6m#9`8Nsv5Wo;N6#Z+r`ga4sAY=JVXCGELRTKwP4Fj#}|2>~&{c=Kw+|c&!QvPW2O^3I+qKwY; z7>tM@_l=nb?ra|P8*dmy($FuxaTTUQze$tu^mj|=MWj2%=_*xRlj-AzEwXH%#9)eP zZ_}7P(h^*t!~jVjiv4dP=aZ$RFk=L)Z`}S*LJmybQcHi+()z2PTxsnlKUkaw8OdIDzT@3W{iGsW0INk;k$N&EythS{#j|90MTp_X6t%1O-+GP8?mQS z>?7WO$0}`hvhOcGv;QjvE{bESDi{e-y@gs0_cr687DD1{o-tSchION<4e#hmT<|Oy z;s`zA^*7{zK%_zf)AjFH7#xG1HqN%OpJNNU(}JIv-+3&GNt|s?w`a0Re8N{~#LYI< z#=H{}D5!Iu<=<(}{#p5Nib)AwA1!;{4Yf~oBlP56k>h)up3e#LdDeC>4BDx`#^n9@ z8^H+|(1_Rx;s-ki7t=3K4-)g`kAvhZw}T<>NST4jm>72Js}T>5Rs>+!K_OzzA17%8h2fI?zkOARMv9jXH&cXj8*bVdsb$ zz4{R5%&w)V=IrTItl#X!`9NV|@^*au8ImY+xw2H^Qq%=X zqBi1*E1VrB(B)K9)UGE~-tZ%i2RP~@;#Q&lEq~1kx8FPa>udJ%z|T~REa8SQdJF1y zQN1tAZw1}1WP+Y436tQdo$x-h+Y26m9#U}0YZk9>g#0I=q1uFuHV}%I7B_EQbadvz zk6=FtSX!RnA$)ZASnAS6c-%?MYP?y`_1O@e{2*XPpoNOPFFE}+TEDEKthnm>c6_k9 zIt*|j7=h&J%7#W(!^TA=)piRt&{qzeaa|+Ju20`@`t)nCtG92@2FYdhCkDS?$$1m` z(Ug!Jq)RzCB{)&LdOn}o^Yg#^j4$QYdViW(b+KccK$pVmA%f^R-Fi!sZ)eDGmL140>SDfvqvi76?v(xEAs@+UiL zj_xf6y_hU4dh@XutlSPorE7D1k1p(2+z(TFH+gx7b56hD-G&+%B<$@Sb90TZudezH z!ewklG00uyb=BR?r^*5&S|8et;Qe)*pqn&)g$2VQU0a!(x`5u^lA}ZTC)SCFOJ2q& z&w|-Y63)h_)L!l~6llDEuam|t&2V*EhkI+&xzNFJ&e7n_y>lQXQV}T2^hw=v&Ob(a)tS^vraw83as;#BVW`Oj7gYO>4DF8p z5G=I1&)}Nu9v_?hu@Z*!_rF_md!dmm@SB%J@ym_t8kX*Hq2WhCEvI0anpqg!+TqDZ zfS0(f#X;LOFf$86VfvW(HqbePBd!Eu92$#}n6%{dg3HF1Br)xEuh05YBNlyl@I4A! zUq{E1j3K7~=vakua$a=+C1Gy3yX!5v?0YANxDRi}A@e2`LntBlHj~AfNbr#Eo&okkwh1hbuhKSDC^=4lu`K#R@#%sx|X>aTvDc{6-w5t;6J*FWtup@p0(3a27LdVx-&EJ51L<6&ark}qpO8ArwC zc2IA(;V+dVdhjlrw+c$1%`aIf3wSdX0o;lgo6nbOJ?P!0uIq50tf% z-q(G+(JD1*jZS_BLSNy#r4@$`r` zHd!b*L|T%gPf5RlHrp)67{!5hbwv}%{3|=h<|zFd>Z>3H+V$mPb1f}b{p^CWdOx-rkR@=pmy;>-r`14Q=a>mA~%O8vzX>5%DDb;UlG!I}^)yH{{MFE;3N*hx1Q^SuT|x z%{&`fpUbDH<0P~^w(jPb^VUCVXs!IUyBXzjd=|q){eXWz)F7&t-EoTI;OOA>(m9&p zS&v7AMu2nGVRzvB`bn4=A-Cd0(pFiNUkgriDe%=Mc zd^~l&2aELdB#TG=v*JLizm`Y7Q!bfWE)0Y6+kDTvzPF$NqAOFS?VW7lS>S)4Q@GmMSvAxTmRRIyE|&MyZNo|>LIHsW`BW{MB8=NjxzknxZCd)N9=mhE4xkZ=C>6OHm- zDIb+I*qJ1J5GYd2YXOFz{}?fO?eCh><>79Zy>*xE*WMDjOjE}nBZ@s&TijGt)gm&u zeNiMrBgB*VM5kwN=G9L0GWSc^o?|gFmd0jd9Vwwf1$#!9?g}*TuWgkuGV+PC%Ppq4P?PVh9*^Cl4@e?@ zfu+jHsAvq7EG!hvT=|*h_08FprI}GJ#aRCNDGQsuK0vV680dq4k92u)<#~1^8yEjW zQ9+T&PZKQE+>mW2d&hKcj~1l@#CJ%}&Q}t4c6tPwiX~D@w}&zD@e^4ox!t)2@u=cb z_CovXZ)I%fdJ?qq(Wo~*{^W!AU!T9iA>x1L)jYlx@_Kwu39=cF`vJnj>d_J;XXW2o zy$sXprTO}yTDccn-4=(Z0(A*x) zXu8~0*A}?zaH%cy61e={H57N0(G*a>tlIQr)AAx^VgH+z1&_SC8QF%B;k6yK^7Ji# z_(PY+4UL0?V}mngrBXpEE-EHI`gsC|*UNd4m5%UXTI-9;Ue;aM@UW;CR~U-KuMp46 z_J?lb52Vq=eqev^A8x!4OweM!6Mp^0f1Znz-awzy?O~v(FrS>f>3WB+p@Dr(6XA`| zpI`mJ>ug}>`lf@)PZj5Rxx5mCx-mb`C6m!SwlulH*U!eFJ)x!LqDdTgxLnz~x?lYp zsx^|(OP!aSWfq)+Lqjwq3_s`B*S65_e12)~7(3?| za95!u`7tr6M41CYa@6f6_4s&w%*Tb8fjOm>p?#s(pQL|aprI!KLZl@8;S(N3T=0S_ zS7oKuDc^o|?J`@I^F&fICOJx?(atArEV|a;3~eiHjJ(OTSI@4Sw?$qr80gV0kDJYX zr(;-?(IdGU*VpInV3(lrLtpW11+aCXBN>h?l5;vA&Iw|DnVFC%8&uVS1bZI<6C(2~{QUalj&bR2Al_ubfd zZ}b&zH&4e_A3F|uL@8N0E6U1F29LPT?iJ(xbMwHcy^~MngSt8dZf7UG+CCyXu@ci< zwzws<+_dLAM-Ea^X+2)>S$psGzXK_I)Xe!Za|EtvvLu;uv$Ip@39T<75$+<=nIok# zrtlU^P5pD?GACbnQ(;SR+WIW7V+%#Rw%h&Qfalr#rG6gez+?!2=tC06^ zn~oMVf@~PaKj>&IXzroQT`lK zCBQ%sVCE&WPsvS^-!w?!g~3;a_(vOt;679?n{0tpv}TFOam5+2&El2#g)LdZkj9f) zyK)yl${Wxlf;LW~OZP*>IS}bEb<4%5;uL=T`1r<#&5QT;F8}-6yIj+-o}M1t{)vLJ zmglZV{~!@a{2B78a;0IElwtmOWOw)UW$NOX+{(@J%2%G<`tn!&nldB*%v43yB8ahs zq?xO0EV_Ws*Wcug@8}6IkdgD3(_20V(m|%I^H=BQ)LzcI1OL=KpU+g=Q@@K+uG=0L zwraVWQaj;g28Kr4(4nf%-LuC|0HaL9@xy~#G>OZGh(A&O>KY0@Htr|h`rPUx+wGrh zHm*H!$CknZ>an#6%gWVNHTc|*IG&|)6r~uSKKtdMG738!=k$!8;FTB{kj;?HHhPO)<{fi6 zs1nPPl%h2|KTlVMqN=8rg!>0f#3+9XuG|M4gX5os~^VPs00W)m2GRpbg+2 z6}-kvOY`^l9XqBpwVM96p)Rkesj5hclBl8rO#UdHO!=V8!}<^ff=}?>nc3uSu5RzA zSsf%&$qyFeV&gKn?Usi^#eN0luwo}c`F79GgC0rgs00fuD_-kUF8kd0?2l@C-z&3y zJ#^KF9_yLin|XqRC0BseA1YxuECzph(+IqRo0;sXp36{b4-bzP-iCsOd5GuQdYiGn z{#JEO_09ElI;Y($wuA&NWsUFD6@RUroN|%&l!`|4HS);P1v1$kSfz92-`>e~ypkkA zb@c`|*&sF5(V@A!N7EmPU`upl4rx@Ul9tS<5<%^4lJjG1U6Y&Su<+MT;LZL zXveWaVe-H+3s9g1`w5^%k&==QENj}==3VLnhurCf2Nws2$xJ3x-O|W}GM$TUWOUTy z=EXC+@uRj$oU3@WzVKbi$5w+=b5fQmQJRX~AJ=hlO9F6laZ@$b4yvlb&CTkm8n~Fr zCQe2X^P~s;3 z#3Uva>R@j#Hrkh0K^T$F-h5mh2xe2BOi<^It{x{R*W?6qLBi1yo@w>`oJu%~t&;@t4n&=a91~18VwdJNL5ZqLS@TJbHdv3K-=idPWz7= zAwPdkuKpaYcV*C9>nG7Ed5g~U!XuD?&z?W`hz7WV4{NotSC~0 zPnYm1$;n@^tFyCt1o}osdejM>&4&wnA-h|D3Kgj6Wu5lxqg+6t5-l2Wp8{%JsUL@n83mQH*&S&e19ymZD1gI zFi8pA4}|wfU*X=qg{g9~-`>$;p7M)w>2rbHs-v)fySh=DUd+ z;`&q+nP~Hnq_QR&eTha-q2t)6|5Qr%T>q@VFRQ#DiSbY%b4>hLta&b*m|TxdpVQKk z&ezmnk&r$5A)uLNLF0)W3u>_jCE%H;s=tX-+W)r{su?G)>jtrY) zcS!ny*xttEd&u60HV0U!o=_d*w4PYaW{=AVRT7PbT;TN)UxPKVoWf=`&o#TSFt0K< zmy9)%4-KWAXv~s~@1Ip(UtXOXcMUtRB%=taE-p6v@ZtFagKS{Sv8BcGW|__H0RkO6 zR0uJ?f4D!3tEetv<~rb9*w6g?*Sz=I_i*6ou;l5H=bewS$#I=aHtLL`qUymmS!GRB zfZr`c&T>ExWIs8eukYt??UUSs$?GTEcnu>pvz;0XSj4UA>+8#-$73-yHKTnV=Eos`$NVotU0Vh^jJ_$m;*J=A|nCx?2AuLF@qk z?dxyXu^`l6yT4yqx(P5O@gSQ^Ce!K$S(CB-1ljkW`<9;q=`;tN-H&|jjAYW--0m+o zyYN8z&I-l?JA&Sg8nxtL&-V8Ge8a##wh_4tF0CNCnMk%yxH$2Yof{5|i<=7!>^&tK z&x|D^iI}5vjKGF^M%&3Q{pO zRH&cj+Ric7C=-D9%X6zAu`R*Qd> zUoLsl(?{^}Wm-HfV}H-hEn5hwevy&;olsIjs%d_dal#|HLW%aeYh+fAZ~DzB^JiU8V(-xWcivq=DLX}Ihu0n<|Fam$O?42AK?{$F_jkY|Fhdv zX-IPC>IMu84XM$b!Ce8ni%rV27(w4Wa`ICf-5-~ipwhgREKet_6}@cc*s8|R#m>kt zL}XgZqTh(JF&{T}VG>Ngm>5uAon7Y`MF)3-PE|`e{n#R@4FNq)D=(W%H+*+X_tg<) zDh{I+v4cq*sj9O+^~^b_XV+Fv-|#C=nm}gg6c@Jf6gC0^0-u)Ey$Ch6AAjbVOf0u*qb~DSvkx9P<|3E+EIhzC7*gYq34;vr^{!1UFPsalziI^eZG>q3Fx2 zXU{_o34@G6Eoqdl1T8O7Sv~?@fy~G#2`m6d5TQ=9v8->Qzuoo$aWZKFFJ7OpiM`$Z z!ynfi9R0){f_o~tbfq$i@zKGBsxjgPX?ROO`*`+@0iLy(1rTIqEH%I3_jn{7oecPSmvf{wn8A8MHn*w8A6{wwnWp;E`Th>cM{Rnm=+Z}t9%_-& z+M^)*B>^$>DRVFlZ&q;M*4c!Uo~IQ8Cn)JPIbA5dot@$!Zy;uh@GpkR=!WU!!+OPV zKSJ;)LvTk}YBGTF*%8(~5B#s(6>(Oi-RLzEIFL)`4IdeYLNSv-#VA1!KLNXHk?g~x zgQIbt`yZx$kwqy(d~LoqVopk<%RKpNs+@iT7bnA5VL}-pqH_J5G;-n$EBIjsaYAK749emB#BU&rY39e0#`)WYKsbPiKFgC?b z7WuOQg#)Zc#WJZ}R^BRC|CEr*OuMP^(8B(&({DZ{a8fADtS5N3@P3QZ zaaUzzV{@`+I3m;eWyTi#L0m>s=JevKT}?f8Qxbh7P7JYB-+4{m&_i&8grMvyVh=KQ zadDNzY?rJGV42z8ppclyCnrs{CT$r#yNmD>$BnSJN@YPp#P>mYcH4{H_dOzfS|?$n zrFw^)PG`19C9XH1x0#nVH1ljvaI~bVuRtz%j(`IQJ8omvLa>}ZzJtD%0B^rpM;|GVk zpt*HsySIXO*Da>RJ}pJl_|)Q1qDBPY`B%AB5*BkH`0|p6$nuc&H$^W@%=fUbzcnjJRo6|p?Z;p>`ot!uX{v0b_7-c+)$tp^#q_XH4h6)kG!=36s5KT?7 zr1Pc3RFKTcQ>j##o0^&Rj@jB)GL?!7!Mu6n3=Tyh;kVnHXlLxdpd|~srlkW=Oiy+T z3z=$Ku*m=4AscoCXEztJE@8^Jfsm>ymEh2!)L;EXAcoVrc%9Z?Gr?RrNv9#BQL&pF zHae8dSY2H*>=j*BRQcUaG{372^|vx&a5&<^*|g}F+WqFmC35L=P;njk@NP>^O2Jvc z{PNg}uhq3gj0Uw^NZ8)V>HAbJ0YP7#`K3{%LRSg#QZE9oW^Np7!6(#jb`Gu&fGw_wg zB42VtsjZ$4Itgy@opn0zd+|L8IVdyhst}1bw}3=O{Gxv`1A-tpwzE`mrV}J5RxOVd zV7(BckaP(zEX-*R^etCEVEoI4J(La&0j}c3uo8iRR{z2AUU{q-h(-NSoW^!7^ACja zIz7gD!oE6TefBqceGX!8E6!KB0R8A7ht+EI{7#4>BrN3^JvhN!=6<_}9uw$Qf7Cb@ z`PDV@ImR6tn(WJ$TKDTMRw@rJ;Ln*W_~kb)(8D5ug+EgY@L8=%Yf8e_Y-+TAdo4p z+^mZIvGJG#2yd0+aN+KszsYJ>mUJWh-k!9y7BVtS*|~il|M9%iSDy;=>MC>2?0vSetSJi*?%u4dn!tYUp$st9ftN z1cSX5P_$(DM|aW`K@0deYi;wwvTP7ZKKx(6Ea5_GR?ukRqCe^ote_Xj@!kO>&PQ10 z4ykS9TH|jMS;FF%M^8`ths6iJAj3w`W5vx2x;eTta3V*(yt+D9L~xm=P~Z6heKVn_ zCqQ{Y%-6?bBz;@?`$304chVvqBjr$gyJ7c$%0lf^@Rjj3lZ{BK&os95yg#>-Q@sLJ zIxq9S;kO^Px)i82MUB~EVW1pkjp6PA7ZwpEQBS}4@;`YRHE_y}m6pe$Uw|HY=FZM& zYRPo9@N2}(vTJKeww=nrqlx$#5N1G}&p~LaQtf|OfZh?e1p4@2Y3zd;l8yhAE)d4U z`}pa@M}JeZgPNC{K-gn7nNMP)L(hXaCoQLo_rJe-5m?a+%gP!m9uG%XfO1|DM(=&Q zXL`SnPnuE0lvg$Bn(8igxKy4>h~|%|-(H3sDf^3$4lP%ntR}-MjwG_?Ha2qcd_EW~ zYptxT4hjobXYq2BwL0mROiD}B7)+pL!f&g2c}4+p_ZLdbvyS>ygs7w(FcIRERy@z{ z@`TjltC;>RO#M=>J z)zcvGd3piF?2?9t6`Ayh{gjhE4Qfj2mxo3I?#kowy2M|?7e+B8bCU~d@{0T((B*EU z&(EG$;4816-cRq}Hv~ja*xr}6{S;?EA1N)p96BtT3AlZN7s-{kSSmN`_o)xr9%W?y z4A|%!0?zA^R=#!}YP8^)=d(=MYC9uZEDCERd<1H02ZJj0 zk6~m$pMD-ZcyV`pn*ZD19^>959&K)EvUD-n4pQ2EM!V!F&~UUopJeH|*^D3xxH(z* z$({d9 z;A8=#U_yqjYRwic6td(i7|@to1aDuukiHZZF6s?`B#Ag;v2VazbX~%t_^Va#QQ)6_AI>dPbY)rnV7dOdw*13gnNS1o!Iq&G<1q*u1C;^d>+Z=j$UoXG;Q znBN=!m&h!s@!)XBWNZ05KP>HeY(7#3JM#G-0)>Df{SN86CRSp||8+FULu}#wef)Rw zN_d39Q=Z6&ZvHIh;5+o|=GbNrz9;93 zmdv*^f*2NW4Gqm8d8&H`ei4ovyNn$+swJ zX`K6|(IJAbf)m{8f)%@bStKkg`q5E<`xQx+??>f})NI=r3Gc7BHdSRdLYGwuLn7n1dfU3jG6wmQ%i7dR@BcDxRFJR!3=D(;5sh(W?f0uewF#m|3G1e7VE|R+PU87IH$I-3 zon2XBtAL(_3k^(Rp2Z~*#{w4coqpmpKqMz!_M+*<_l=HFtE5%A0{Izf3KGa8ClH{V zKD~KWK@Ya}_DG;! znpjm;`xyO$`g?YE2Uz`;)odvdgy4w64kNQeGsV{ePU28v`qWH5_S{1SHAPxzbeg4({tjUM?J$tjhN7%VcX9_-CBcupr95l zQSz2o4nJ4P!i3_&E$timrPt?C-bys5iZrw2zf)EAdwz>RCj>HvwCB5wTPP2V{7f;nG8B62^0L<1D--T)m*M_=MV{fsvpyZp2x1~-&wF>CaSc^XS+cpd zHqn9pFhN4=b{G?Z^=;S;`e^Xo6%RAvPH3R|O~mt;{)Nh%;;iP%NqORTDY)w-PQ}Hg zcPFJ8JzOj;AaILeC?iWnU1n}>T7v>F=mXuvy{M+T(DJgjvsQ=sFO&LF+v|@uRWW-= z0-@N_(!{*J=Ial!E_sT!j24SruT`4gv{$A71{X>j7qdrgbS#rZ{KZrJ1&3_jA>bey z8Us*$$6sTyNm%vFA8tDddMJ|@-o|*M`R4xla~?L+%A_d3u`9K<5Sf=3zYS3Y&dT3N zLLb8Wdxf~^FRi%jkHb!lyju{0b_uE_A2DT+vXB4zpz7)iX=sw;7@TWXAtoh+NQCVP&ue^8w*I z#`Hj5XsAjBh)iP8h3JsZuN7!QHTan8@Wve^X&V2GTnu8e!}K!1ixwcVrp$bLpN&yS~rA zG}R)`8yTcvIAnhXwTj^AjD__lRRhux0kE}yM}Wp=F8oiBf83TP6@q;g^`C5?TR}r9 zq7U+>a^&wg!CL$`tl566-NWsSBhmYgR!t2;T&`{yJpX==0vXeK0T&QGm9|wc@h7h< zRA&cMdYK&qV?dolIZ-?&F@|XC3`1b$27^Yjh(p4pyP6L!jvwuI>1tM)!f?fw$=XcW* zZJdIzuZg0k)PlnZ;ZPZyaaKWI*Z&R%Rzz15lX%a;s0m3FK(x1Y1*|q;?>d%efSLTi zBYWU?t|lTsg95IA7XlnNly$<-_joAn&NH1~{`X1Xx0_>SO>sf};ecWoCuAoGn7C9~ zxo-nqnf`ZZyJMzLAxIft=JG;EjDNfCDbDoXo}~>}Rdb@dJY!Vu*#s>8&mhSGAC8^y zCtLHC(yls8K?8XV`a1XR)t04&u&GKA=`72^TWE0k=y|ujqS+AbXx=#)5h2jW8J|1E zcYEP=L7&lNzdu77vK?lsCioff+Fk7gVaQ9)jMzKBMipN5gp{PPg|#=@cGU}Z{)gSy zmP3@;pO)Y@e}Gwn`ApXgv(=%)XDR3`?72XpvzRU6g~^SY8O4s5XNH*>P?w^oWU%TU zh9I&%S|`xFwO5AneFg7?0{qS%#Q%ccO3fe|{a%*uczfNQ5rlooTa^m*(b|~I_tta~nwS@LNi!J4LjBE}^)VmI@;5~Pg752FwknD;%imkQy2Tj7L^h80;v1Zw zUp(h~mm6seS}J4QSvud45w2ynmpz_wWXj#P%^US_fj0u5dQm zvaLKZi{QHbT)={L8V61XARG zDoDin=ZM{t{T)u z>=#*~G&jCDt-N4gH00;`3aXYCxlD>t@CgKDxChmgm5n3sMtA~6Iq0+nh$>K$laikA zTPur-WaltGVb$o5H-P|4_DM3IQ$R?ior-YW3(3iNC@3NK-=P;;IyG2uf%-Vz^~yUU zBUG5);E$`k);ivo%eO+EsB3M*4?VtEKEZ6e%i|h}cQd7In|>ofZ3+>gZ`v#_2gXsB zWsuGkP=5(dvl>@{8U(K0Wxk7c>TCkOzvj9Y`~?H@-j6Hac`qW>-8bC&Km3Vo$ZbAS zbkK8CA{Xd`49t(r_fRiR(l6$dwBo+eS`FV=i=!kaD!1Q*2f?oNz^dBXm-~Y<@Pl7f zJ0<4OX`a^dSqwG09vRxG>__{vLKK@NwlY7HuRNSquJB#3FHfwjWJJYXEPJsg#K!3f zE_gj}&;y)dQ0aZKD@mLL8~4-fy1yMB-r)xUP(n&nHr0@2bDd!_R4_rri z)%3I!EAASAZ4!80wu`rD0{#y8A`4f3o=mT*&4gdvUp~5~9pGymtsPqe{D`&saQ3bVpd1|E$jcsrG#^@@ zuUlm^nt$m%dp;Q9Tb8EO9?o7L(KT%a;$cJB2lh^GW zI&MADo7a^$D=rq>mm~#3Sqj$%8vVK30cV-396vBulbFE@!7-!ulM^+XdG-}uc^EZ1 zjHWktHa+UR*+EAu)o6{HXXoKqJ7Rk-R=94y+)r`2^B1|7ls>GIOd3p}t0=FbYEWV7 zpK1J4XFmN|_S+{{Hy6+Aj9NTgTmba;hFZNw0jVM_FPRTYt9FIp;|+JXpB^)6ESFhG zdC`eBL-pTc<)aAjop9aWFQkBn(HJ@O0rr4FpM0>jrm3pwy^|A_Bo$!?FzY{96JxWF z)4=KeYsB~I9q)(Rqsi%MkK5UT*+gp$^1Fo-kEWL~#*xgPqxJT^y`yGl%E?e|&o8?A zP=VHrI`)bs5QUj3_wuV&SR{g8w=)!v%Q?s#bAFFdK!^}}aC&;DsBH7invpY$bHG2( z0IID^4=qhqwQNz8yrIsF%VN- z8iug?uvqyn8ZW^ZrSH=!&&(mpO2p{NvGrD9I8o5GQvt|!QUHx=f;M> zF4*~5wWU5f{28%V+SZAg&$*IHU0q#>*KN&iH{miuPI&2-majZxD#|u>D9IiA-Rp;l zSUI`bTK`s;@Ng2-P%<9-zn8UeJ}XNNY`q`2ki-~1**)ZTxpyy<$3n$DJ>8Gn-fn1Z z0S=j()gvV%T|;I$<&iuLpiXqpgAFJ_0=b;n|Dj#$zgjc$6jhhdvNLGkPYJ=oK9GCf zh)S&M#IF4R@SgN#g}lz2`f_bK;G6@J*m>c8z`e+4XxlS+LjiMp1tCnj2(~=B^pm5l ze_lpU9+~S}S6$*xy6e!qL~^=IF8Dwec57R))eNo0(_X%p?5qm-gtLn)8++^9PUg2QgSs@h6B$LQ~7?Vz*wKZPiGV1LoaY#IMpCq@ub;_;`U=D4fC zPNZXmzDZMEH9Zy+2OTvucX?0zoo!OKG7W%T+YIu^N!i(F6XJfP^Sar9JOG@smd*bU z*i^IfAKXhEm&)VyjwlwBASM>`rZFGVa+%#oZFzZ~ZN z^3=#k>9Cq3gG4&J9j`$G7;I6+u2jCMfk&0mLQhX|fa;GR>tx_WZCD3&O~!rl!UF!{;N z=N8vok8F0;0ktVNl*Ug^(ef3q5FtaW(_J*+@sG7GSkh;EjF`Rv^nPhse_ z^j!I9&mX2*8-`lRZaGX4Tqj-;zAjNn@=m0NtO(bOaY#FID0d$b@|9R#D}&6r%2Hu+ z^JsE_mGO6fng}(KJ!}+by^Z$mm1|cvS11FfonUPr0l)lHUPxmV3??ye1iFJHJdzaj zy_AqDM@sg$YqWJ^Uo{@XbenWTJoS~3NU;>t;tUU|7Z~4Vbn*9xT_4?jbszD#@g@;$ z8{ODhkRG4Dx>z`TS2Gj(Du*KQ`}(yL3OLpuFI*_iEiCSEc%gc1tp7gTR+g+hoiYm; z0~@nU?O}B)$4@H)*X!!!MF5Ugh2>;gi52GlAs`TD2Sd{c*KH-3)Xq@G!rbz?mn-G( z(7$7^`C|UEAV?vJ9A5A1^Vt3;wc3-RLC_HZsHJ{^ zAa2n7d`-3iEx$4r>p<%CoQj38Gm^zp>|&Sq5f1O=C^QYvu0gZa<{~An(Z=%MJLMC! zZ0xO}fBYmP-i(fpu2yrBWB+f`Raqa?-2eVY($lR?6oKtkpm4uMej*$YC=(RHNOwi- z2VaIkO4T7zgg{6=(=SwGXl6ptGeq7Irli2dVluCd4q@sMtW4#Fy zDQx^XT;3w=49kQ@za2 z!??xqsKSr=(=T_qE0UzTu2?b9?6V=_4p${53$48-P4Wfy2l*#~Z(vD!M8C_I3DK19 z7v|F8(Z8(C1uB(^NrZOF(`WqskC&7f8Co+n2&$C5k?x%QNPcAnA&-=i+$>FsFz|gQ z3iVBN+Co+}*uH*6h>sQjpEy#!1ZUOGIQP>DJB@^OP_B*R zm1uCM;dXS8(MyYefFC~76>7!jRhP4lE5`%*NR=MFUa$hTHlDZbu%!0{xw~&s1a4?# z-)G>?Pfj-4&6KJ+TwQLDXo+!U#0Q`NvqbaaR4^RrIv*4`%ZO*C<#4$!#tMZyqw^cv zFe5m#cFM0|Hf2TP(RO8<^Tb4khsG#Xi}2YMSlYeHG4A)B4EONQq5g z_qLzed9a|;WVG0=tG#`Bc-o)#N<`F8MItvaB0Z;z-e17xajL#fISmuzL9!POQ->N}Kd!I<{bm0-T9Y@WPgwI#T*|5ebc%=eb*PYAxdhZKMWU z1{ z;o@w3By(|da{;*<{%>Fa_&znm1_N^|Ei1w9x^8bBsU=&+M1Hbgj3w^<>{+{ybN%e9 zFq05U4YsGNt234fq5CZwszW;rW_;IG%_x7kozFM~|5n~`UIbr$D-BK4c)kKB=e!+y zi}jhUuKT}39a5b@lf1Kbtg7O1a2r&~{je}Tr=sjEsHEe%4J_=AP5~Q#pxE(yKLau; zJcE7Evbm&L5QO+d{6M;UY*4RY9b#6akPhzbeWpm3xfkSogH@HFwP z;9T)TDC-j=LkJvd+~jzLR348fV_5U|on73u8p|jV`e>;z2 zTDIq*zrgQZreF2a1N}=&W3zR&tt+#OeKye;h{|m!A=6=vdjmMGK4jdrC^ zp@kvAWE6Fa(Z;QH=nt(dPNxwN5)z!yi;y|=v=ajd=-wMI?klTW#uE}izT7}_F*&1N zQ&qh;t=m6HEMVs}b`+;WR1N^S7MwREE@Qc1-IsMi+WD7thXh>T>DjnQNI4!m(`_6s z%U{k5JgI6b!OzcN_J+a)h>5+piHU|A)lGF<8z6kd`zqkRPlyMOYkzf^Vm)lT6T*o8 z0*B@XE+z>i#8yz4uZBR*$~Cnbj?S7(T8_?+G``x2&inWmlT8UDGobmg!TC{qabt;* zG~R=}a5bcA?#oGJwPu73jkfKlU!^<9tGVp8P2gky1h`UR7nhgOjzZocb=`2Nh&QYc z>9iH`Mh-Ozcv@dnUzsGOCEJg0VIG>e6{0q&bcum41{WvP^O z|L6Y?5W4mpcdi#zn_CCpQ2N~kK(NzoM~Fygp#$nq{Jy}zar###Lm-HlZ`uGEqM zpRUKjj~I%G3F8>?ll{t+kc}Upr~jq+pfY3{A5zdiWsZGVE9WQP)C*YQ`hD|*--8h^ zA}Zl2ZeEdT2qGh~hKK9I!z9bSsZJ`klnK6vuW`#J8a|Z>?R}-;=kH7m6kw)~LwH-} z#8S>esh;>QMWcl3owU!_YZ@~KJ8P2YhAsRxd!O-e9tka8a~m0{?+I-!`7f;((&IC; zVt#)8xgy6UZ9m_DTies?A-FFT8X*XVY5bacu3Kt)A4%z^(blU>%fI^E;i zPLT;CI5=fAYh%!`+)|dzpH&2w$uIX1)2R)xd}v z@z<_S>rC$&d%;y)S?i)D<64ct^O@!VZWzS;bl$(`ia~ph?+LXiygkQ7cWBe#ZmrJr zB^6&B7bldKpxtXb-^AfUZ;pcP?pab$bP)02f~j)?DV~eBZgM>H_lc znCwue5QScRM!x`@WUeFCEBfss*h4Gc!{y!dLazc1HE67J34SET;ywZDnf+i2Zr~Z$D3ryreZB)9t0s=8CvkH>Znsl-g%tCG& z8U>4r4*67EOr|oE2Z;xtl1T6|3EA^azaL&ykD!Cy-7Fcb${wu%lfQ1E9@^q!KkmK# zU4Q>yYV_^Hg+DCf=IS{B*~8-Vnt`jUOPTg|M`S<`Yy67x4VWIMBq2dnLkh$F_xgIo zGySyr=|uzwB{gNGYal;A|H7DToqSE+h_&;A`w5GI5(B{4w&c)M)PL(atizR_h_-)t zsP4YDDOf&OAt@^hq=Sk$hL}t#V>YGt=lFCl?jvIk z2?Dnp$V${_ye>O*Yri{bJgZ|)QD8|w(Fj&U$6#Q7=3^K5ogIQnNGRzk;J3}M!(Ywe z*{Fvm#F{V90q?&Z>LGfl|DK1zQju7L+(yOjR>3B`FrCnj z*uGfKbjR=#j!nn0ADYSY1%f;6Z{T_4c zy{(ClT>-2=17ljwcZJ-LpGKrXQ4({CYRH?M(mc9Jnd6Xnowj$sU=qu4R4Z7V9btaK z95k3&*a*1Q&dks6XTioZ0)C*={J^#gY)FjStvj`pW3iugRp;l{bkxB?Xj0O$2KX*d zE(}_gnN>xT52=koGWWDlZz@6RhQW?gM ziz*a9Ex!B1xtO@vXd3tG{Ct9$(%JSltLM?Xqk~|y;fawX4x`q&n0r_hLNjw~NqOmZ zgGmo^=949d%+2mTV3HZ#ty2=nNK2-3xcaP~acLc0IzVI9EJDWi%5>7xF$b{g>g%l* z+ocz&cv)B1*C(cC9d8NlPWrBkFsG*#uie*l?H77_p7Yf?;X>vDP8QnExAOY$?-OTs zc7ltiXV7nUiY_-cI?;O^G&Po_BGNL)#^>34MMN1}&5ScbkN@q_AM~=ah=_=8ZgAhN zIzSc_+Jj9X>h;#^+MfATRJ8hYVbcUC1B^N{=Qkb^@$q0~6>(9q(RAk7k!ht7oe!k3 zNl~;XemCf-yvoRUIM&%{M`Px=*1AZ`MlqFAiWPNeE3o0z50;-~IvjeP=}ruiP9!u!4Z-frLAVv$12E$)xX zA4uLAGIm@XT-LZ;&7yvkI$0<_Yrp>CdV7<{jF1$GKq_u zX_eEqvl4X#adgyef5(g4{UEd7?>~?%6xb@J+pS{`Ya&fH`|o;P)aM;ukX{;Mn{)J@ zD?s_&-ED>tDLg*D?A2}B(|P^nS}9^8o%z(m)3+r>(_S&VBjcR-1;V0vA7Y=sck)DB z=5-WgBz@ju0a?fnE;bj?T}Ov`0Ftib_O;rrHdJ@M7TJ^rP$Dlm4YS@vyKnJFApGal z?H`LFjXcdxq<{9>0*o}BMFiXDTHn1q@3|*^C^8TWb2%SNKqcZ?GOH317Xw`FI{r*` zr2dLch`E`{@V0PR@UDd<6c5E2*EC(LE&90DSaE1Bq81!uQ5@QlAd*T^(aHw zQ^qp9s&0#@<5#`c)3*D=%L|Le-~i<_QE~Cs$E9F){C4(M39)~n!>+ouduo>5;Bn{o z@85t>Sm|ge&`v+IrXFblauzuiV>u^dqni&|UQ4^9&VY9lx%f^5UcBo1?@W!zu*;g) zyM@TmTHyd`UWWKTza#Zrg^xj63-tz^j^t+N2NIG}9$S-nIMS-Khac6OxTS!_McDUL zf4;)!eO8*m=>2^-_hO8J;joB?Ss|*->a_i%H!~23*1Z~Tx+tANP5ZY#n@x3&$W@aH z!YtFt$r@y?xO@ETOmJDj!^NSsI|IZ`-jKwonS({+8vKrx|BW=)Av1Io*TLsTEES2i zfg+1&3h1Z?Lf$0Zh{=BFRFuWJhF>_|%0fd6C5oSY;Ksawmeeic>Y&{pre>4|OXq3Q zVbh|E`CVCV>;<_c5Qx+#f5hgao@?Oswoi%H ziKz7wYJ<5RB)II||a^qOuOA4v-@rYM(QfyhugI=Zrw z<)g3JYBCWyN{Wa}pUFOFn83?0vbS%d;W4j$SX9(ci1!v6n#k**E4Y}J!7&lRLobW8 z?F!|6xkq6KYm1c_c6cTSdFf0_MglG#TBY^2STn0L4z7t|u36l7=t8cWYu1V9oq>o@ zdIFB){vs8NyCEfPd`>IZ%gH>Ulr~tDm&*okucHeiU=(9wFvf63enyk;#?9WXdX}g( zRJ7J-=S+JHFkAr%br=EjsBr@)XM^Rcj*O8MC9s=LFHPP4p6WX+8Um6Qr``M$R%FU*ygoN&>1b-K_7m~&S$Umx#Y}-4- zGcFcS!24_z-awq2Ah-JH+P#F|)$maNnF)B_?@!&XQRsTrEN*S-pt{S!VHvuoEG?78 z61n*uLnFBqmNy2Lhetear6+X_Dk>@&`FGB{#qt>**FU4ke*yM9N36+d*F$n%fFy&3 znMDTYlUTDgGBWO(PSa6*%KrVMh`ILVk|rJR*j``5I?HDPo8CW={`|d(cC8FPinLjo zCy$=isx9A*%+78fy&CIO^TVU1w*4>e?gL|2#vjhR{%0A*eA9jX);6uE@QyV*pJZ6_ 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ͪy*VGJ;o%LE~ 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

    (u+D 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 literal 0 HcmV?d00001 diff --git a/static/img/multilingual-support.png b/static/img/multilingual-support.png new file mode 100644 index 0000000000000000000000000000000000000000..c89443d1a16dbb847faf61220eb435100d39a015 GIT binary patch literal 401180 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 z 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�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∨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%0DV^7(uT#KXkM(IZs{wDT%X%c`r4< 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͑s4P+6dGM2)TrVolVS9QHk(Q4}R&KoiRv2 zj8T7T(qG4e3C^PSU)@Y~sf<8!LPHzrx4868aPL25+$k*c4~lMDESV#T=|m+`tuRwr zj7_Yl>XLU#EVr8f+ZJ-4W!6q5)@A9-a;ZV>WWb!HRGxa@l0#kzweMr2 zoe$>kRYPQJKM0-QOOU+lUrMqMDMPw6_{tB!17u8go@9Zv%G^WoBsY z%@w$3b-U9gdJPXLvoC62)ccT3^)M!YD?u~iJ-f&Dg*7&7ts@L6p*!80eDqqHjYt{c zH%E_NO@DTm`deFT_VC7w#=+v68>$$hSjCkJ%#{yf+^1Io>a&zr%HO5wuUm`_AbJp4 z#m_#P#yW#uqRh0EDcSVuK3SAmc)OKFJ@vX>PtGFMxGljT$MvN0Y$Ubv5+%1-lZ^Mp z-TfXz9EQB%fh%<5)G<*OGL!I|gRpq5omzt8Nldx){dw`IQGu*=06liNe@Sk-Ty z2j$s2&DwD)(9pctTPZGUXT?`v^bz&rPb37tMjg~<_jta5$|efT|9~jJ@SMIU@}$qWiQF)5*lbIrjM-fPeDoy)eIHISF=;w}!hFfm=qEcs zJ@qu0{VcE0g(G=dO8pjlgnI)u*9i2+qnDv~e2uS-6f>yF>{wlKH z^FQy@R|s>7gZ0mhtL{{yzapN`hTDj*qhH+3lA)bT>?)ZNm*M=oI_a9HZd^yd&W1$_f*^XE&k=DB{J%fQkPdvvL2W)kgRA@$r0=5l#ik>M@! z*}K%OZP(HssP=pAGVNyXNzz={nkH~0U;!x&!#Lr40^cUDKebpKN`+e86d-|jd; zWQR95m{d!$w+nR(tIRa#k`&RAk zc=t%zuix+Y(AxC?kmes3GVp!G$a1?BOFfR4x6o}0PkT7M0)|g7*Zrr@H&q1ubuNB+ zp-(^DxGLBIwPk!IR4UuMeZJ9;tCSI>1DF5|P~OzLH1q2lpa<)|A5HP;iNi)U;t1x_ zGoKOd?CN2|xeNM#b&#qY_(nk-7|KS^+yIcE8O50nAZ%Hk;nLJyQ4MnbC;$E=e8dFd zdjM&Fj7fjSGyZG5Z?3MGrQ+pK;Njm2RXM;)jeR`g=)P2+5CL90P7t|d49G8s=P)q!>&9WANLVtnmOvF30+}2FMQb>=ZJ?TxbN1GnH+HguptJ??UqpwVx{7O=Jd2PQNF+1dq zN@aR>>N#VP3{TBcAy8HD(M~Ho`xuV|mKeX<`920* zn(?DAsNHqFgLd=Zw_1jq4$;-=j;xtTu$4x-wJ!zwwDgzaN>iHIkn=+Dl{r~&4ge%) zc(vaghO2&oP++?Gb_*We2VUk}rzZaZn-w}L|LWhTDn2LH&>Mow>q=0J+FYF4-m-Vp z;S)vqXmb24_)KHj1a&R-wIlk4gHy{G3X^B|lTzAOObgs97z&7g(?1%RUe)T&Rl!%~ z)voG2RoEw(4A^k9YmC(snKrMcU~*}od`;a?Fm z%vM(ZP9(7Yb;%V6vU_7=3FwA$Km<=G#I%}(-hgLPBn+h!EARGtmG!-ym3eR3i>&?2 zPZF~+xk%r0I(%W5TIywd)(sHA^dmxx+$cUPxENjB$|^m6ldky+{>6~a33woxdIiFk)@ zMi5g9Zb(lO{#n4tOqRMtWu_AolVKzxa+{?hEfORB)Go+4DnodArvJ{6Fsa#x9FMN@ z_eS+xc1|ApwKtq{wLhxAie9@=vn-J354t>v9R4CDo=!h5)93}m&fJ=nNdVXJ=ule( z>GzUNN*wibwL0#!6-S_lEh;AEvDcSIqf(3WBF*P+q~{&ki7{H z$C|KuDlr_Bo2CZFb^S2aH}zbkVvpuR#v)Z{GX zd;e&(q0JQNz>H)A4@p?KJN}x1Xjd+GbMk=}(RSOW2X`9dyZ1>mjvF$dYXb$p^p^X4 z14Qg1KMQJ;@>l_tfCf900J@aezl5qFMH&sbsl5&IXDPd%JqmR^bIB#M&KJ~Uvh;K% z$*ZnjU{aejU+X;JcJTkS0IlCeI00cA{vt@<@=RPsi^Yxr(A{*%fZ!y+hb%7_NQRu$ z7@xzAT4}gQqi@4-{6MlobMA!p&@ekxLycI;@QNnkSa{n!!rz}x!bSFBiuQZ)mi@b^ z^$2tP-*GO}kqs)MTOHR1+8-6vj%0fcPEYcGCITW^p#{6k=TamgSz32!t(5)(%%pjd z*bCS{DT&L#yD5=VdPt6Oa;$Y}DaYWicherCsp!ElcmUQHBfjUIu>(p$1g7~#7lCT( zC{9S=+Or<5>oR9zI460{g4x)PS6or})l$_whzeA7zo^|a&~&2ZWGUYd_8unl%Z|Eh zUVVWag#9}Ixu%mmxQtPvW8=C6BK_Z^e2bC3+Dbg4Jvznjmd?@(#*fR7?XW=EJlmt;h~q{2TFfBK8}_)x8>0nK8|Q*9m=I8UgA&2h_Z-|!15rW1aA z(Eau$##Zn6qoq<22!tV;xV?5m!K0Ss60PD9o_2_tWGh)Kg$EH{Z~S5vaj1)Bx-tvv zZ2**Xn#|toKkJ*Dz*SLtH~_HRR01VAB6fK@#fm_Vb+zmHC&l^(0gXC4HF{m2epv1O zD#4XptwFw2M`1{`q7H7aiGBudF|6Tg03a!{5ZS7c zL%<8@=xI*RO_McQJEO$ULnMG?<%M&jf0KKDG>*vNRzL#jvoS-Va{@gn_z)d{MpBA) zM0Vq#%RgvpfJpPveW=PW0u-X~{}J+ugqXG2M_h4Q7R}rM9UDVslvuh_D<<=)n~8`i ztyIR;YW7OLc*&U7iCkbb10h8~2N(mlViJemn*?(8ad>nnF-hP!3Ur~?362QUpnVru z{^L{Y5!rH9aUMU+q;c$@+=W=Q_)A%c_L>W)y)Ygo=DzHeu^AdoQ#wB%FX z_v*Sw5i;;%y&lGqWtdxY#6@u22y5J=Kp@vF>l6it zsyJ3V6ye?(+^c8*!0-PwPeRZcjd7Z-5b6lzhv}7TFc6bw2G4a@Ci6Yakb+tU*EK`4 zs<$;WH)k7+9|5%(#=bn6E!eGvvT#E=6|VH={UR%1ZZf!*Poui0!?6C1&yo{O2F)5 zy+wp_oPF~s({cU}#U8QLK(DA;Mg*sK{*T0F z2JAIKoVy7K8Pw-bf!jy$K~Zs5CTjOcdz$E|_GctQt8}Zm!_haWNYv9Gz}S)g(+~4( zv(iY|v*D<4&yn0_uUk%v6UISbtZ)QuQX`ws9b5LH#FhZ|LyMff;z(H;Tr=?-(@f0o zjp`?5SIYrzlU5mwNQMN2Iz<5M;HE2Dyy)rA)5B#Ftvp_>qQ@Ysf@nE~42J^@MT#wTYq(^bK7 z3U6-@&uXBjm6jQ6dw~UxQziLjH*dBgUQZKfyOZL^M~-e?weO&; zBhDt1Aq^42ts={KoUkQZOF<{&Nvqu$UE0PSlW|I9)6SHAbYT^Uua5H_(75Y)z0wsq zA00s~p2=nklL}fgM?BqoMhQ$kKT?Jw=;0^m<`0|JS5J!%LLfmR3h^+H5E^>@Fw zr0e@|DME9(!HLZPCUg#D10#`b6;$J>i_#x8Nkr`~)20_pxW~cm>90lMyU~{e%*d3q z??LF;>*|Uu2+gS}6P*mIJ+l>}7i0*ISGgoN#+94s7d4L)Cw%;(WD_1%)V7SYdq>n7 zE#CK&Tf>64C`zOR70zga^5;1|^xJ;r9ROB5^(nWIIwT=bH?`f71 zQh1#_p8zxg5kz_VU>A%s)oEEog+cqVr6YJl=DqLZkLY*OBYgi_$K@jzfp~#o`A2$f z-fTCAQMVm8hEsa1#_jw(>zuK~W$naTsF;Nkiu9Y&mzCBpp+aDF{>LqQ!cObCn?Y8hfsl!BV6r0OM8}a=jZR|6gltbuhb#aoYl{Q)dbW;;yK4u+}NUA z0_HeeVWXx60q~@F5K>NHB*ICNXX0V^v=x=}mOYf+LyY? zfhTrtkt^~Nb;8qg2oUKpa#rbC?z0?L!!W6Lroq2E&mn@0(Lq~jS@^O(W z?vdT#Us5_jf+INuii2rZ!|M}pS}8Fg&+2^YL=>W00=cM@ctsv&*WHEXbAQ?I$ByFt z^f%x4RxE}D3)xNaYxN+`Kq@AiFl4j~N*edEz3!Gj@xSp}w&R+5LkS<0#&4QvqM)k05vOeCSe=)dvp`E!4vMbm%g)9QaRA zo%Q!wGrhLL9iqLyNNAaO7OmQ)EofXW=b!aW;08=#-d1&NaPt*C zCSEw!ce$Lmj6}-{@2YAL8{Q}?AV3z zO+g+2x61!P>6C@Mki7b^@!R-+3Z|;%W=P!2Xk4(E(>>Y_=*R=QvTc8l(y3SSTi_UkW*saKP5mXBtWK&iE`uff3d04+k_h|0vXeD+5~3NQGRs$jg=k2>XTNso zf$8l3UIS8kH^XFN2&Jjg{s!2Jzh3*y2LHl2hw+yA3Jfc40K5|V5sj;3NEyP)}eLk15C z0{J|@@I>#1e7cST@YV%FvBy9t;CWZ!f z;i6FenXpht$-RoW0&sg0^_{oz{-`M6)c<=04i@LCv-r>J;>+3=*ineFu4ST<^dcs1?51jZ_?rt8C7 zL$lu7o5$ptep8g^=Z0(mEvDW3b$RKD@WBntt8ayfsEE!zmzyRvzyIH6C&$oK6G!)No>OD}*v(c4 zKfff)o$}w-CukuxZZwjv?so6nwZ+r6`@R4&KvW9v|MV|Z^LNX73+!FF*MFbwy?Cf> zL*N?0g3*6nT);wv;niEv&%3I#S5q}kg8%1MUxj0)fu@KzFB?FEcD{I!m-r*_bf^bm z18y|}UUbL_?r#DBz#6e)q77uUM~$&LuR$ztPbM8e{7()3_E^u$D`ojSYZ<5K{peM% zM6Hq1?nsx-SegDu~PQ~yeBGB zf8HWqPk6M~hvfjf_Q##{{(Owh*{oi(EVqZ|(>A^TKEuFf|D-%$VzF%7>;2tcHk^7V zZOv6MzOFe8+Vr zmWiM@xrJILF8X5~E0xw!7JRYUwu#)-K54!<-$3k5uu(3 z`{-8v@cyNOYGwYa@&cD#lVji$8v8ER@zRk_@9g?y=ddPLD!G-duNeS~9?whTADHovx>_-oF*qnBWJ>`!XS%%CSFDU}xX(wdW6Rl( zmW_*KqqKKhn-FFE9&4NFL(5oTw{o*~eQ7k~`1nUTSb$@zg_G+BFYof#41p4IFAoQB ztM6Y~yNAh(^(kZ&LE7sXgyC$Y$4dpiDQ0%enuSf7vy%VG&Y`npQ+K*KXg+7?T2x5i zIs!T+=~&_zi~w-Kw((?%qy1DhwcF$Oh@ppCZ5t7Azg|yaQq^3Yr4n@|u2Z|$i(l79 zm;+B|`A7cer<=>v-Vx2?ZCg8nizxs$p))~BbQ`2I{2^T8&!j437HR1cpP9uQBPg0l z$a<b}Y7#Tz}9Z>7tUTNpZav=)NO@{Y^m{S62-5aa}13^%hRjOFdRG7efGQ+2l)|3 z??}nF&b6-H)Pij9lX6*iC_SLu&ufc zSR^ejj?n;!)0CrYS|osS4b7%0$9sOS%6}$hYH6i#q(3DO>U>w*VrP$$PgrCO+De>$RhjZa$Ms^V;pZyM}uR zb^pWPR@t7mh0N`ymlEwDvxo-1H9SD{cGM$u5htmb=r-F!Rk)P=onzic_R*%}GLGQK zA_tOyCRnZ&=R(~*lT5Dv2LB>HJ4*90sp; zph}HZcu58?T-dtmeXE~G$yKTagC@|(>^jTW#=K3H&i*kZNaB-AJovsb?mZvj&>I_B zX%@KL9`2db%P?B?lzp=Enx@5aONIvGlNzMVO`I0gejHs<B?||%M9iaXw25dg= zy+eKi@sTjpzfZm>Ls{h85dAw%7LFhHOkPX`XpJ2orA~mcCerQ}A0AvNd;q9h$wq9<^P9xz6i`NAGZ<^)MQtG%1%VYh!IJ02{&mWn`T=-e1#mz$ zWgW&wq1+I61=}5ewri`;t0+vUARA^f?r22o-!=mEUVZ=>5y8})V2m$<+CgN5U?X7B zxPj1tMA~b}Qmxv955rz;j@PS^&2CCwZV8XsnGONTN2}!cc$9WouFq2aUp^kN4zbg-efy-z~kREsBBQ2l?5>+Le~eRegXxgbz8GHqnxM4TX^5k~&E|B_u zy~T+$|IX6TTUl($GDqdgobBmnq@H8M6{&Q1#K!XxuQE)pXKivSCVtZ7QYsX9s|48P5LSi($Siw5aG5bC!k(Nokxc4=`EXyoLGg_~T076U7gZH5U z_8lOs2qoc!5^>n@N$F_rB2`a6G4XWY8o z)PGQl38!GT((Rp&x+^)t$Cv&vzXX@A(&j#av{d6`Dl#@^%E+xKshEG+>rE3*;i2G% zEIxhHTWIb7lz~Dk3a~cMZa^3XlzqiLe8=okkOb|ddYS-c1r}a3_pmsAYk2<$2yUkq zRNli(d!UY(Quy$-=+Bh#6_t(E0nd2#>hphVf4Wn1!;wl{*8$>R1kHly-OE(5P*#`E zR(RF;b@|d-EdRP??aaa13-4w&=p*a*Q`=PrCY&k1wq`tCuOYbT`;8H|0j12OV8YMbm0h5N3dlg|&uZVKkOT35S55JMe1DPH*agfSmi?^cfv{}?0OYj$U!`|b zX$ydZ^0S&e6J7IRkVRt4!9j{+Jr}cL*l807^&!Ewj7<|ETGR>si=Y0kP867kdJoKl z(B{*(!p9|-sUm74pvTA=O5OrAm0;=#00$O>h(-c8jx?ds<;dB3TAmqw%=rI;(=|=^u{_Y#kkn{6I-3)xW(YVKPAUzm>l6t5aTeNr{g#dA?vFd|O zrr}R>`*L!9Jvgmcir*}5NOt`l6@hz#bfCk*eh8te zLI%Q%&-6@pPKQLB7mQKBNT9AhpqX+)hc@slhk0}KES2H;@^gV$hHD3#V*k|W2$&tH zeoI)=^5W{kM*dDKM%keC$y`f)a8j$U8Wo4hH`tGvd-DNKs+bae=-~Zow!>~LVm^?$ z{pOP4{N}$n#$O4@HT}SByd$}u5HVn=j?x%x_=E)lYzQDiT$H%K_X?Z@GsUNcpOKkR zD#EL4kW}mCB*O!Qi8XewlEt)4AVGFD3u!kZveh^7tj{VZAuf%4+BUgVv;)#V5AP5# zKH!>HU_5OCIm{AXu%CB+gtVpq7FDkBUm>zqq0b$iE>5*;9)fL-OLn=ZX@Nb~a}N&C zc)sZ$DhM=HFSg6LyNIPvAwd#fM#k~DdK(8$gX#f(86 za>&!Hv&-7QrcHTqzfvRSmkx0=DFSfi+=o77iZzvFGJ0o-{bj%Jrot+?uKd@kFQZMd zSXo`J4h->3y5h&lQ)tgrf2>ajHndE*hULPg-ARPLRbf!XvWL4$=x+}KvFEhnOgb1P#*Iec)f#E>?WnJH72TIGcGx2#$Vsa`_k zbUh{Ku@MnA9Gy$Ug3Zb)fda)88ZUUzWT*>x>7=K%utC8N%+q5Q(NGm`fHne)Wnlvg z6Lst5_VFH;Q@ty!ah57QoOr2D@@lz3_ai?O+-d!CUoTTJLUqkRUk1QR03Q5DL2W1tYS7pax1X1>g@MTGULYZm0K!2 z58igNO~XS`bH|b*3~;?TDY(Daedq?J;JI*otIKDx7jSc0sL#o74BT_Or5Kc>T&x3+ z%^R!caokV}$EOv#YpcMZYEU!eHtrw}WlYg<%_58km_5m)Y7etvQggejVU`4|QxnLF z11q=L+;E8mhj&+(f9d!8%B$W>4d^4@dQpIUwMvveGA&)@7{Bmqe^8|%*FR56Z+)lt zT1&EGG{&^|khvrnm)t-@@e%|zfOfqC2&awR1ex93JKU@!4t72UKs;m`4`2QAz)<<7 zr#tt$vHno?(Ba>Ai^jZ%dK(k+pS9ZdTkjw;r=@)` z_Bx-wT|&?xocC6VR>I8wQmudtV4Mg`_;qpEGU{g}S7=T9ZwJEuQgS#R|Y3oOYLdb`_D}t8H9{3i3-d;!xDwHb^j*L;p5f%({SL|>%nnmdM$+*XDK&p=;&9SKQcgLSh?Db~__e_uH?~Am5a~`KFdnfJUJPfyv!f9-OU9 z$~itRNM~2wZmTuL2l7!mAKnFPW^0bEFoe5cTe#T5^cnlEwY`)Pe^H?YnR?nKgP71Z z)km);B~gU~B5{pGg@wi4+<`>+W_gVM2e~2MPoUSpvF^S2HivvnMD2JFvfr!L)7xOp z#H9fk10v6-7qXt#r-vveU1k|*O|JjLYXBG9ARtSc&3ImTxUO_Lk-64=>L^dM?yR)_ zhH{jmqX+-V0Ve_wDL3u_r9`NTF4<8lKpNg2ox)Yje6|vBe}*RgKP`a4pxIHEQw}9C zAoBTTe^t`%BQ~FmE}Qh}ZwC)3B@ehLok81GP82d0l1p`n>lh6^0gtePL9H5E(CzEk z%Ay2^^RipJzyx}`=r?9m@mL!|I>cT=9(5@i{6zoW(A@4#W;HYe5cX&gQ>oU{P6sE#q53OI%`kH4@Vq!Mj8d;QyRIl>Wu(O2cwX$HHuhD0EmsU1*y^ixwr@_0p`o;vhwh3k^}Ny<**F!B9p5 z4q!LS{ij!EEfnnF@J`HiFY zlk>Pc+TCCr_4k4DE%#cC^gf?EZ^B$3f@alA`l4P>g0k5lK)g2esvT$NIT;v#;y!r< zqL-c@>bg6>CoF!sUi|6vq8_~sw4rV5OtN?TBzmr)Sr@o^(d`yk86saolE*{(?)3cZM(0<$v6ddYuaxeNN}&kkP5W z0N+vN7|UPvPmDV047Bz;XFaYI69fPAF>Y-qPmxr{KgNOJGX>A-(_?jh*SW{JXrc$B z@t|Er$Gyok$n&6q09i6qsaCP)veMJ*Xe3bx)FGm}xQJmUqKu~3o>Wzs`%+{E>a$ux z(hSAFcI@^>d>Hsp@>YnT;IUgsbMoxW;4U-0YknjUI&WIsgaMgo^ixwZJL6#B8XN-K z%dxum#SO4gI@d=f(x5rfAXjTw4T>-SOsm4k6^Q|t=7fFN^|>w`SZOxbg*DUTX3m&3 zjce3ELO*)EEea&4fcQs2ptmb~Q|e(+i#SU7axKwVZXYsvu|zoF3u$;$1L9V29o&=; zI6WR{10m6m9@7y&Jh=$m<9Qs{v1T3m=Q-|KF4d}*5dY3t4&P`V)lfQxr3D)mG)JYYziM|cn z<1-9{IJ04C+efdP=cjzyRR{A=Yj6UOCdDxC${Zj2LilmS=O?7=9I?$I;K@i8Yj26H zE_z!U!+H%v*H!a>;SBj;UHX^`Nz`xF zD!J*1iFQ4>{!!7c-@nr+!%u7V9`u)`%WXaP_jTPd$eI|-1o#0LhyHEJpRUR4S(x@p zd$`=pH%c8>=O^*IUTmG1FvqQt{N~(f&Eq(8dyyka92*YH*rdyKRl+8+y!L!lOkIcI zd&>naCO@m^-h0>aM-6^t5^m%Y^)gr8=36#}QB3ZKyim?(2#~9T+mz7hBM_jx>*BsL zz7xU#y$#rSOO0a|VHg%DEyW^YEz`bevMVYUofoB^8j}`@#($tdW2%TGIbBrcKJqw;VXQWo?fwU<)%)=1vM(}de{&$WHc9tSwL{2 z0uVL`q%ZfKb^s6X*sfV~B6Yf$fN9g%PS$ZD894#bjI$HhZ2f(gdC8SJuJm~?)6`P48 zCAzEL8zVSI$(UO`WCG8S)u)SEyEl>1tp{F5!|T}cB*nmo}$y?ZVM zz_Epe@_@Jkq4SS-VLqBuF;;)d8oy|exVx3myZ?qQiV{sWu7=8spe?1k^$Q$!5t(Yu zBo3GU7`ijY@eVcLXwZJxosqb5$JQMPn`!hSSFa=HziJ*rGp&I7xgTUyu`X6V?3P@) z+0Mhwc#;2$#}YUae`9(PSWXhcrc5K+B+XrXoGb(JE*<7y53@7B0gq^!*QO;b=^#FH z>AHwU_j+YgecUSwr_noFIc`_BUA;Rh(LHgDBvm$$GpOX>&rFn3l_CI$xJ*H6EE)IJ zQhNXAk6o!b%912_;20D$FXC;W7-7fC$|`r`6L-~#gTpB6u4g=hUZngPrI<1zzGKn)NrGf zoYn%L<7sO8wM{Qt(%$=_)8psTQ^xGO_NJF<84i^HLUh=eb&NX%2rKVUua59eEImTj z;_FI))kSU_?+9XPcol1RK@5!Qnhy4icTx_%3!w_Fcn$k*nPQm&CJ__ z+}`vW6Lu^ZHum4JHT?$>*0)dUbPL&$@)}u&a0QUWEGbZqN&I(bx5=N7^zaX#ht3c6 zbh7ucKLG0;7xv5EZS2Hwv4a-E*c?Ai@UAbsnru_X+?=fX^d4-$6Hr@Pi}%6S{#8UxBE>_5#{@q< z{IF9v7;FQ)PXoNxmxA<^Vd!wP)dffSXO*8N4p8U=^jg)AYxura?`&=*P1xZ}n+Ysk zc-7Metw~g4BvyFfPx)1KY7T8o0Yc<-wsl`^=lu+*b%OP0%4&oh8ElG`A0 zR^TwS!pCu+q&d!}nb0MsHu^=&t+co~=BEdMtJLaDz@!~Mne;kMDmeoWlX_kpcI!TT z|B;=hG^{vlXKTD-{L@?R0lU-Ac+R(`S>8-D-UTo>y5TqL9_t&LSvKFx%?@>a0h{W& zNv6~&tfKQ2a$uyRhckU+gnv@|ICXMut#g&WEN^|TRx2jgKN9*g%fsc?5mbO?D;y2& zzeHSv28`F%aIHG6PW=zJ^|WblyWAPv3<#H=S`QH)U;K~wWwA=-Dyq*JvYX4*u7V*Y zi?+4UipM!wWT=k9n{6ujS=I*1Al2b+h0yi3s;}5t47kLa{S@!-4zbq3m=#7;CkSs} z_%K4b+)94>9GcOj{W>Xo2CS>4S!7W3gaz-N|58}->Ohkvv`~K6uOPQouP={buUj%4 zZ+q3|jqG`G??N)I+u-iDcQhbV5A)v%`CzY|rz@;*+PZ`V0|HSmJDn}d#;yY1k$v%n z@%K19>Nqw5IB5&IydRdJZ*R0wDU>d|KHR= zQeoSYDFT#(#OU7YQynP?(7V-7m))W5(aU|?d=0SBhE~&YEoT7a}#-0Mz)7-UcX@ZYJO*ku=XIBNvlq>I26=fEU7MafCo+ zu_*D965d!+XcnQWP42B`@j05jMFa8D@T!#l)FlJQ4HSQ0eMM>1Dn$&X4E~0}@eWZA z5a8G!(10%s>hKA3-(VQqH?#E9OR^C;j@q3nxXUtu7K$@N?EoGoe`6^6#`DXBt#_{d zUXXZ#^3!Hr#(3L1bkPpvFRe=v%ee4E<;-?v`I1wd}WrCmf`9_qOuKuOB6oT zw0-$@oFJ;eXoEhAt!<8T&JvUjgjd<6C%q=b3}YmQEH7>97tM$!kAAsqKe2g0*dF4r zqVpVx^bg06bnwM1+JrxLq3kqscL@WTSxq){vFvT%S(_pcQ+7XsB{w!UNw$4pdD1?B{|j zkiOa=N7E(-@X!27za-$rxt{_a2Sf^HjxhNA8gKVfln!B^v#lX^sZIpmxe6wNFOXJm zOGE>K^3n?f(r2EqK%j*?hvFd*d)bwJ;+)=;vR`!ssKk&UPVL7j&C^acxAnF{A&s8+ zp=oA@?$6c_XRs$BH5t#1TXMjD#SUM2v_Bne$ke|HmQSGn$m@>Dw7cYM`+?U4?+>5) z41ubhMLojn#ng1(T_=kO{{-C0h072f@TLCG7O}Tiow8Qmf1x=!Io(j3q$7YfQ@~ZF zI$!%J4erXp%OXz4Y00xd0d2Nk6MwCKF&Tm|)Hn-XxNh>0SiwZ-B)~SsR3d_26y350 z!cc&=y`6jCb-C@Z6A$<(ZON@YsB@gi0#nxhCu*_Y{F7=c$V=aNY4A}Hsn(`eV$_)S zgvjkQb)gmH!KXdTtBh28=zKfDzD~rbjrz2aDl6}XI`!%_nMM*;+ynvYsLT@N^ttYI zaUt;pY@L_9^7yVka3P+tz4mdfxfu=r)9Z~yE;+D`_pyv-Lni^J?j_Lu&TiRsfDtO1 zbX~g`*Bi|>HE%m=AS5pa&QfkFzY#TH9gt{xbu?+W*eO+5p`bJFZ?kzpX zD5&My8+0H?igicb-CSJ7Q%UbHeP8z_U9Hhi#iU4A72=1E&(+d$2}B63zwvZ#VH~B* z*+V+!Ih7~{Eoj9Hsw;mtySNoo*QH=9wnOT<6@&~B+MvN~vH5~ah`cq|pt5-i*tp&W|jAr0CE55uFlIsSXrL9Iytxpk_UL} z#-yeDmS2{3oZeTk9ZC7X76dZC5@`F3W3#o@{2udKr1@hFO&UH3giguKT z;&h&Z!>NOR=1gS`zy7XhwX?>iT%;&`FUZsQ;BpuyxL9}N8-bFyXT3*zh0nLr8yGc_ zs6Jo#86NctQL8})K}b&o&1W;t-wEDXzKHp$+Wx_S?4Q~);lCo9^5(I=UB#Ym&*B9N{{Q$JyfnGktZe3KefF-6kOzoaT0nK!`e*9b!t&6M-%75 z{rS^W(0aTgm)bfjND0;^xbDj*FOxgWiy+o&^fY&BV1J7QRi(4-|Bx)hf6C~l^d!5F zj=QV-q>?LQ?%S4bS)vO=t}}U~NAch7U|h%Y2t`PWF@V0aU-6c}!uOG#BLS!9R*M%1 z!7KGl;u)Wi%1E_=|CO$&6L|i0^qscHGk=$Qzdigx(GaS+^6k#;#QB+%<1S0zsOefM zpWy$BQVHI=)F3MR2&ZXw5Gb(eFpb;yd!&Vg=KA#4eHwDY&Mk*S@=1OZ+YR<7yMVR> zaxPw&9}-&Mg8J$1tSze&cp;Ljco@V6v&f|6mDxBgleSYJT;mECnzE!YYd+F`r@qqV z(CLXg@tmZkMG>Ug8*_C~C4@G+MT6DP$#QJ=yG@J{lwjTBW-v+2kD7B3@T#7gN&5kL zL*7Nxv3B+e^OSII9+!*F#6=7Eo?*UxNgNbbrTUbw;uO$c(^N>U;;lpfxDvfF$?Uqw zFIw!Og(63eDw*(Z7!`LT2K>vFFS@);lXFD59Abhvv#xa&x`!*h*?r&G9mz=nizZf^5-D2RF zzk`;Q9oLTur{zKES|>ea{Z%+}70_NVh=y7|zQIjmzL%3NkvCMPrzdy62&FipGxZvl z73#OTz9S`%7b@^ha6Xxa3ex6EXqb*o5umKzPVGG)ayCjSGZ7uCFMIfk(5uB|qA))~6_V1vyKb?>80!SNE#jpVJE-$!y@ z#QzUnXBn2&_k`=0l9uik1nKVX?vh5jyE~=38>FPAyQRCkq*LjJv(exGoKJ_#j}q_N zd(E18o_l5mwPbLEtxe$pjeZnZQfPYohM8cZyoJ{c+Q`(r^>d+#^xl>C9aiR;HgL}ATCg9W2^W!E!I+0*W}ZJy?QB^JKV4c$ve|xkbbuH zJw{bs*Lb9ezzbv*8suJ$8o(DnZn;%z@^a&$+7QwSll8UW5JG}O;GUh=WgNCkLj6=A z({d*b4ejkOC(Z(b83^VYx+Vf1?A@(Z8So(5ali>EgpI{y8M`2jq}}#+V+~zB+$v?N zL)1IUQXsYwtYrlDji*uJLbUi2lW#b(r$6T*URjdyOe#^_hZZVh+BU>jiOgI=gWmbg zPB_YZVX*tM9-Cl{S7sG_a!l7^;D@QZO;nWM+yMdH#uHjJ!AFqrTyfq0G4s~q7X`Sg z6Bgzag;&{+w+MP*h?!nKTOf^H?YyhnAml%S{qOy5&QHC5>opp*`lappJno{&p>X#( zcmxPB(X}~=t>Iq{8SqzYE23XY-kzD(mc67n+TF@AXLzK79B?KteIoYy{E16K#e=vq zxcJ1rQV!D|;*)rb1=0YI5S{g5(m~Ycf&Jx>d((nPwyZ`l0`Cllrxg;kFn^Tfc;O^6 z`MM4o;N!Y}Nz&3&Ge6?c_*|5JVvF&eM<^==_+Xe+ylll7A}s|9h%6j!VjmBMUu<|{ zsJ?7*f>N=hwee-cIzE%6^^InweRA|1CZ5&VM_cU<)l*W}?c+-wrU|b3zFL}>c=Ej4 zZ}w9RKT`=*Q9pNLn8f7R4#Yupxt`!t-(ed%jyb7EchXCu_ga}C=;5N$8 zEs1p&%e^R!pkKCCw?vKeDhKW3nW3@Pm38RU5{{f?dY6!75~JP3SepA7m8hXI8NlY^ z%|rr`sbxfG5_hM^rQKRgQ%C`Ac@5|9(#p0w!0x(#6{)H$ix4y5nU4I+3S!a!_IgQt zOV!4Zp)1w3(JiiO&m9z*`?gh*`!%*0fcO4;A~VMfRp~{uYj(EO%Irlx}s8l)sF-M)l-a&RvA3q3)XSJ{`Uv~R=qi@|~ds5!Ilj>^_`muazX7r%RtZU~O%@0wT#QU6~ z*ubkc2ZWmHW`fd|B7Jw&G^uZ6j5Qv+XpRgF{IIQDvpVeP&rvL*d0MfETU)x#`MgJ4 zvMj_L-Dn??wvUT_b;~nh>QKbvDz!6GhSQV(RRn`pfBEfL$Xp0~u@(#S<8RH=+Z8G< z#Sb(<=+~GRc*|Bu%VkV+OF5qWE$tDJ>R94S3q?cI=D7PT%uzo{ra_?6s1!g5s71dg zwkO4Fgv%l1SolUA)=Hn00firDt5-I%~$wrA#L{!GHlpYP} zI~-~KZ!|T1J%?ip7=%X5$pVD3-Nqj*gsRltOj8sg(%gez?JNNZ&eo_u@IgTGfIESd$ zg&LY=#{(8|9LNqvRtX<)u*$+mGZE>T(LrOU;uG===)tU$kKU*NO#}3WCObh_P@q zUTv|ifxutveK%5OWi#;r>wIA-Vn~)Q;E2zu-YA*_@ zq0z1l^B|fS$ALG~PDbNJgtr!81pLU0hf`Jxfw7pkeimG!w{@`lw|YI4azS?elpc zzZDPd&hJ-4AqqcWv%n2MK?V4CXI1#=#vsS?sFe46j&A?5cH)D8B-t7Q0_n?Sf}R0h)WBK#t&IvH#oNkK+dM73YveMn%S_UPoW zY-tV($G=tzRoPcOyAfy8h(aqr$YC5sNPWU?i&``LG#aSjDuW@@NUWtFzGpOrxj2^< zfc*6u{fha#Jg$7AYg}xy1fo<*p3pRsb=LW4xXdc?qB5a=ZtMb&AdXnJZ09!_wD1?k z!jBvDl^+vK^AJx?axJK?=!8vc`t3TZxqj)Yi_lJ#_<3ULVzcva{Er2wr*jViuHfPE z_&z|X|H(~k(ZK8}pD_^zn(4m3_RJCyV3D{ab;sB|jaYimoS zRBFyBMXhV9TGT?;+K}i*rD1S{#Y1i8<>B=_VzkI?Ub5?EN^cfH+1|`cJO>igXpk5z zI^nubTr1%pkVIyqR}-4V(y9tGYO9IEj#QA)Rp4(j)gmx<^=L!+$hd6s@Cv_2vXkas zIK=GnGXc2($v8;mibXZB*RtWrsNZH1;p`lW*LbA7C0pbM9F(hV18=BpjUgM#z z^mqLN>a@mHkzDH)ci#NcvIAtU)El7qP zu>U09SZ>hYrWrEHVj5kzROcDRydYpJX%LCg8al{)X8IzVrG#w38wHdvnI9oz-d-|v zWIh^5&bt-Q`lMKupA|6n_zZ~Mm=wyn1v);#CVtVuaAC$%&dj zKn;KfJz#e+R1M{K=7rTy<;Jg%R6)5IT#ot2GZewu%1P_T(Vq7r9~rNiK15BTOH$cl zlzq?jBh-5}km`5g;Y#<$ZB#3J$4?gT25G%@uTTRM(r>-`b`uSBAqx^0H&S==3FJ%NUA9l(t6I{sS*zW$IM;-s z?ALC|7AdBPr*)el3>nVR!gk$&=M@x}%Y-CEN`)PJ?O~+G9NKuo!IWDiVECU{L-78u z%NK8V{ob*#n1-4Kd^j_&!I}Vq6(c(x>Z-9PT?c_tjWI&M6VZ8LP91G{Z}Mvsc5pUi zPXgI5bVZ>;)@X38lliJ63%o*K60UKBWaDkK6!4GfWD3Izh_IR&py9LG{a|QK>N43}gzaA0;T8;Oo?IVU z2!s~G7UJbAh_kH{>Lt=XjH!yOh4#Ij2pRNY$=@aQ0D%T09X{@ya%}(9^C?n>lN06Z zmDNYjd|5hjrL?%b?Y@)YKn=c$W8oeTUm;#b*nCF#jJcJiN$lgNmz&%A;AE!85Ds@_ zMDI%YgW)m@sr8u1!a;S&EOwDZQUwy>(Qbj>yU?&N zGs85ZJ9+OZUQ)P*&^aMOF$P7+R zS=5UlIkaKg5JHbt9>ZAl-b77{#Y0;_K_{3sJ%I0wtp#eC$y83^CMx-l{x}GzO8CE2 z20+uRu)xmF4D)lIs6Wl#6*)lLw(DMZqo3`@O|0|&w zoatq5@Btz2>Xj zin(DcJx+{~TW+u-tt?%m4;SP{75xXptheJlj)l_Kvz=;1x!-jeRoHoqn)T4>A`r6l zghj!uhOc~=Qmrl;vz^sHD+*cF)7?dJ2xER~dn796&ZLX#0>}~5sD3soLXSsjhKGrX z26h0YZy@I}Q8PLYQt3(PVJg}=N#ABLeD09updy3h!En9e&?1nQP5p*!U#Q4|sk4qK z_AbVC$r7}blMOC>$KgyMdMW>sP5xQIIG;2XCo3_svzW5~QFiAm=5+-Z1+*E&bs}(I z)@1W1L7QK8W-JJz@Si~4+?h$)r17qf6xjH>r0pUQ5_^`}h@4r|rp{CHypP!=ecC%F zVA=sj@*+eUD!egywRx358h+kFi<$tfg-Ex?it>qN+n;R zngGQT!%_cik3eC>AbeWtu(?6+P;e?tohZH9$4|l{+7Ghk@cE^m@*|~PrNtesLjWbx zqfM;EP_jPWtfW%4#c)ooUFx7Ca<;T|FO0r!xs?sxtrYD`u(O&R3#NwkT$%m{;->Y% z*xafN-)*w9?O6kSRB^YFf-tj7IKihYGJD5MgO5Sb0U)3FlH^Jr^62V!%XDi~uyNi9 z(M-Sw6_T-$WcdXFBIebCMc%}#JUl=W3g!ZYi+XP8d}c0gU>y8`URs-Nm?wH~|42x( zRAJ`=?ch6!d^DBCN4X3ET3so6z3%w9JIW(Uw)3}4?`-H*Aw~bnRV=m4Sz5B0OeS_81btu(_I;Sn1&03 z>>N#W@716++uV|q_O9P;ZOU$sEtcCK`sFO7KL7!QP4sfv(U}?1DJ(XWP}CZ8_Pd=4 z(fY2&cLRDr*;V^*C{p?3Za?FhBlB8sWPV2l#8;Cf|_uV7Rbi_Z;LxxPd z7V%ah5Px@t!82!AP}Tqe`U!`QW{q=HS!S)ze~BbE+YV~?N!CG1_-XYu3IWhXgjo2#V2yoiZ#W4O?*rxbF130fo07wq=CX~QCU`_!8;d@-G_ki z#MCJ6dn4rmY*|;A;SQOhK^F)50ibfZ{5Eb0W{^NoIJ^htI$a;{_Ceh(SJX|6imc-FZm+l#5O8VwEr|y0uD~Vtqa;x^y`Db@5yC@aQ8a*ua@`b z5EhnEj2Z0U#hEHy2~xcfAs=JJ%;9Gwdh7u$uDG&oxPQVe3g6|gnEi-|Jn>P=!jbHA z=BF`f7wMir!4_+!Vg`=308jL_)S7{&(m~~kQB0Wi%q$3CPQH^A@hsv{=BGTkoND&H z=*&1eZSZ)84c!8FV&)<5Dg;C?#_V4=BA*MMUykB|N6Y=vj8M{O7ihU{c<-9g`8fC+ z&xN2R^A{V!hREBP3rIl|Qb)LmUGYv>MJiRM22^{`g7wfNscAS;`AUa&`6^J$vcGs_SWWTHC`AAfm7hK8=&6y>i~I_>l(Jq5pABJbSU_Kn5SU zkl+kmC@)pj!XQ2=iC}w$S-3c!=d41D-s&!_>Nuaw6)-C9m(k{0Z5!9{nuVwEh`fz| zA2XQBIkfI$^`{Guj*fCHXJxtJR zfPDlt5%Rng%ipt7(r1}*x&>T%ZYirqQ$#Qw=v6*lyLK+dy-t^v!3m@@hxpcb^ZNmi zk70?>lk=azoc5ZOnXg;IbDciitm@%!$G`?lf4{*Pg8Vs=kgJ8CaLN7ow=$wLE|v{V zx|bBGm*KgivTn!2^Pr=S=;VV5qW737^i;tyk07a(lC1=OCb@Na4|(1TxAX9)j(k(G z=mwFt7E*DD{YIsuU`3)baDH2Vmnj$BA{l9B5GbHLAM?%~rfnks z%9-UFtV>9!Nq0RwNmQMG)!AZduYhL=bbomkSXMm#qca-^pO8MCooG|$WbL0O1Z=`n zFC2vT8|c27*|lbTS;q`6ByL-{_6t*!pUy8=#P@pnonC%kAsg-oQ|FxdR&4z-1%a>v ziw!GV;dB7{-0r~1j<9>qvvO1P_c4BRlYaf}^<3s}9A$>T7Af;+xyyBFaz)eAfDZR~ zmr#Da*AkjEzt3+pvHjqD*;c+UO1S0JbZ4AYS|&PX+SOO3z5@e4oD_wuhh}(UeXb)S zK%h&E+o%x3M6o=L7BetyUPrbI&q|vzVQ5r;)PD;J6EOPj{i(+;^47L9eR~Tq5t-iW zX?WBGE7JQRWZ{M3=WFPFZT@T%Pw6G$#x1?=bv5hK%Tv+q1XDEckJ}Ah5})cV(bM=6 zmcJudV^@00lRc{56Be?r*6KV9I@`POb)~go%m!?Rw5AS*GmG=_HQuAh5@yD!@6!10 zT3pZN%feDuNH3%%_msFCYFgZmO+bYDv`(7o#Ch^Le5=**ba9&EPfjOjsW=ABz1_+8 z_h0;%i=Hqvh@ZAz+%6@&6BTORcCO0LK696>^t?`oi{He?3LQ-tns3Bkg;Cs^uP6#fyd!rd~np- zT8iF#b=;i!Y^)l;S@Nnef*zbPl37;w?M9FKKt8o|jVVR*wSJvy{nn{*KW8OGQ*)hY z;`TQ;lW%W?Wr`8Vh{pG(uYA;(`$^QK%~5Yy^Ze=6jYay`3iI0Q=WFN&niV&_V|u(8 zFq${uT9UkL(HNojFQcK+4LpRx*unj%ULnJ3xM|fG+dY+?Icw(~X|o!ZLX(iQj_z>+ zZT{bVf94QG--9IY$F#mM)3zUNp!9NhF?wOZoT~$$h8gUyZM57_Z`fXx2G~isd4Q^D zScC`cbOaz96Yp=VVT*=~U`>oQCl)drvneVxAeXhfs_SW_(iB|VZL-n>e|46LMVG-;ooLzCuPw1P~d_35LDiab!cE<9i z?ZFo4rn9T7?GmDF%q(%D3B1`bQ|4;NZx&pD@|3-eL-RGV?E}1sG`3@uEaxYr3wndXL+=hFM_WY5-NGlsS=isvs|{(?*Y3zi$@~tXRmAo6MM4k- z1F>EsWSZ2#Wg3z%ke-!ACnVb3zCn#PV4zI z_1D_Vf3xCzMN++;;)InvpL2fjWlpwo8&?y09kVyQo2=~bjIybjIY3KYSfo(dw-3?>5kNV;( z@GD&YkV{YDyGz=<&%aJT?|!LPu8ee2d`ToVHuCLlg!BS*f*2Gse*CQ~hcUb5G)96Z z>s`L@3bY&)Eg(kyc}-n-Q|Nvwoslb*TtRWAC*d}Bd=Cl`)EHm^gdewDc134%TnWjA z^8y^4aGB}1qLS)D-PlGx?Lb&l=ZF9f1MqH0M9b7$9IOE|&T!qk1Z@f$-E|qzS+ux8 z0`|eZnS&~juL^H=4L24S;B2@b{{eZzUYuznOs(e9tI6EBdYwYi_&z>r7WeH{PNRO! ze5+%+jeON5paoFrC?A;sqjiQsjk0wn{yOjTs*y>l%Fg z7|xga&b#` zx8xlts$zO4MmKoKSOwe<2ZV(v1C7PE{?bYvZ8|1>mIHL|-p3y1_>^$|F`4O53F16? z+{pHx+F)|p@IL5#J?1#YHK`>K<9~Q<=%nP_h_5#4bsT5HuOB?z9*6d;PI%OFyPk-Ri{s>zYuxgu z(d;86!pnN7|2y<0-ovJNHsdXdri0my6J59aJgrZOW~fi*!RN|xMKd4{Q=BN#%8e%x!#vG#-IqM30EsQ+sWHNo1(^9=wpn$K|T#dE`v{M z9WjD zon@?TJoqReGMG(&-|UeLBSG1i8z%|}f&8-wRAhtKR|#`hOmxd5Szo~b3%*6GcU5}x zHnM;3W-&E~B7e`gzW!^Ih~Ld=HaZ)3skS(GS_f&7YQcb=g)J-PMGFe~5`4?oRX*_G?vN>zvn6xt7!v z?+Pyaem_+o=G-C`o{`;F_`E=A4SB2k{CKVZ+M6R^0jb7=Z`|53>ABCam&ysJ;h{H+VnYP}X z#NLHFuD6{$l7ICSwONhXSRttxy2wBTflQ;@=A44+Xzzhp*lBZsEbO?@KdhT!TX~gO zLjI_g!Buc&@MG~CKbjMx>P=l@4JJ(fn@^RDPvS?$9_#dFQ`*WXBF9X;GM#1@Zj{-h zEx@=K6;}C>fR`ua}#P#`bIxrhRv#DNRSS!-=;BOR-hqN66m@u0Zh_hXu>4tYT8g5 zfQL^V>9cF=tEV-XM)Chl{w#ffF9KFqaX-sPj^HIlPjB^!pZ!I^nH|)n!`|P)0}b;2 z{gmSycUv5uY8mGrtBA^Z(MZJh98*8=dhZ?2XuN)##qV3{w63bNM;#?z3GQctBDgP$ zFn3F&2~4itCVfGwq}TH%0`b&6g`|nUFudDn)+;pwavC7xsST_$)@V>+_9gT>Cz+2F zMHT_qX=Z!lnf_dp2jq5{xs&Q#b3>;!4IObsgEI-UHjO3`K7aJb6y7DjC{D-kO&9oz zoc4Kp-xk%YY9@AW#Q6nIei*LXDu(r*3IO5!>|EAmK(ed%et@|%RX;+Ax+f)F{h@vt z(O9ntute?U#==VjQBGyh70MdsRm=?Ty>_SUnN&<@HYqY04ghuki$kKyJ^JkYwaT)@ zg0*MB^ylAyjC`rL?Tq&wEO2Oj6!dAaTGYarzPlIVL(ts&DfSk5IjeGA^lZ%R@LK`` zs3$dvMF>TP5kOrWPtdA4R7#lmFs4NVu?t}MmZuJWz5|jza&YVJ3#zK1+^S(Yh~R!T zFceeQr&|bKMl?b*6qmoJF|(?2=sg8d~e!?y8qru=%#yg{#j;Zv2p z*m$h>9@S|*WS%42+hFL~9Au|w-p6nA-e%)^$!*}A#L$N%lh5AcB|apc3hKE_Y77Dd zVz^nV7T$h+K4msW!dT;N{672bL3pGP`gd^*r-!{hm3rvg!yT*xEPT+FbKR&D8c@2m zr>ZHMUobI3?29c3i9e4EYHInzx>FF-j_sujHy_8L>14j;Z|+8M=7uB=0t^Yy2{W3zv66f&@M(YG6oZyUj))5+WI+@_QlNg7Onxn%Xv z&O^y(vLvA&4H8SrB1d^A3-3sl;u?gW(zm@_CQIkXlTSeb@OhcvF1uEj1-fhh5#Bz_!L&}h&@A7q3>kCylDEsz#Y>xk_ z`GJi(WR096_CTAlwqW^eP*Y$k&x%qP(RPog!1W= zLP6eqndg*_rG%|vvJAtxm)9V3#_?BSX_YKLc9YQ9m*6`nK~bJ1wagdP8;RROkur4j zRCAtV!g+6^7XGW^Wlu*(e6?Kn0T)Yrhkx7-wNeJl-2FT(VQyra6L~g;w)V&)=*zGN zAVr3%cGC2Pf0oK@R$}VmP#u))OoG_{sIFzmV|l{6yQ|LN55ee_-nMGglEqZIhzLBH z-9Na&>+4~Ej9P@yDDh2oDG7U1#_jRwlb3@F-`@)>W+gx%)1HWA>;mXp0J<>#m1>R= zsrW3=LMdJXL$;>is&gvWQwkm?Z{UoUX<4-ao49tUzzX+}vn`C(rrrxdn<)#hKx}Z| zD(yUCtSHShBxZXvmNAe9XR-OuQ`S`ojz^v!W0HApKfkOkOc1?#_f`t0^ko<&Ci7!F z)8g~YUaTa4$A8*SW(O0937-)clF$p_>v%TH zG?_?tbYhwDojyVxA|GK=5UK!WT>{#dG{*UJniUaLC&*(=BVjiV3Eb1_8js@m1{u?y zuM{Ny(#*|~!(jqiqx%sx+`y*yc24QFq+x+bIxd(Ivhb8HwF-uyC8DyzP`#O7r&0ah z3O}4&O)>(HakyoNZ*Kah2WrypWW{S2w}}$x3QzLTfLZG&Cnr~+p%8Ic{MY%bd@@W1 zBjUrgV}F8V27nG*oGMW47V-18r&Wn1_Wo{ z-kqg>;eRYZO|TpqlyGf01)`%rL0Ow~B`cDe0+F`LNw4RKmd^r@S(g zO;~Zcr!EdD_##K;o+Fk`sjrNuK_rb?yxuip5~3`z`oCXFO8Bt1%OCze2f>6FITHb3gGUQ zkoJ9`fIP;C`W{QF!`Dp?m_XR=n?xs9mtw8u<+|?`^AZG7FPSSY-z_&}EqF$uQsN*a z!~xC94?OWs;xD6*JhZOX8&%MF&Hj7UJif7N4`x{lruR|`|!=?j1osKy% zoA*g%j(H}EY@n|CNe#EbI-@+dga~V1h=*dVx5ihSe#_{4vf9 zs)%ZXcy8c~#lj7IlINVQ&?$j~{a0dWIgH7a>v z49zh))KE<*&@ikmLc6Q}0LPSWJIlk3&4E#*(?W*Uu0kI9IX9*y`E$XmffF;=Xs!^+fZSG%Z?3|BTMje*;8g6|@$V&4D+QVOWoBq6{|f zr#6_^ducYQyl*Me#nEo_YqMD&c{0memw*r&m>Z)?B1>mFzV(@UBjGpKII3siLIu%b zsWpf1P{ZdEYDx*Do8ie4b8r4q#dPX2hZqSeh3e99uu#L4H22^Z%}p5wK*>l?P#j7{ zV-W<*9hdL`OP-t)Eb7O)Dwk?lkDu`$-{ca&KS4`#){m?Not(TwDdKlAUj%iv?G$2Ky z?Te7LV=II2pc8f`Mw}d67c=4{YPG8*`LZrw2Fj<;=H*KGbDgwTjMFO{O zR5P7S-Xs2QLa)YONl(tX4q8AK#Y2@4C^2LOV;P>^7eC(cFSJy*1b-!IbUO4=@PCf9NzsuqE z7&lcMzUPSKu$gK`@mC!-0sjlVz@(~M5Kqoe<~t3&a%%wiuh5#aXTYwiWL82A_giL% zS@~(6nZ;oC64Mf1Hh~FQidIN9F@nky?huXVll7PM$?PIz6`6QA31g@JWHVs4@J|W6 z*fr;;4{~iFXynh{@al?_8@PG{e@{f2n?|vg6mY*^a3LB(GxC#j(&q3u&$FX&B~FtS z3kUXKj-TY1=-J&;ShLX_fo1{lc45m1_@x8Y_gCLu;^^WV#t8_g@VF>PrA(BV3Z9EW zb-5*_SBsgd#~9|wgl-hUg?~)gl^BVC8GUs_K^_vME(mI!0cgW7c5YEi&jFeiRxDBj zLkek%TELWaB&4h1G`b@kT*f2Tcc8OT5hJ^cb+){$sQM?&izKta-d37bCH3Q&_lM(O zTjZv8;5fTTbmjZ$NBaG53b4|_xPBEMqcS$HK4iZ2n-m=pCX84Ebz!R@X`{M3LwZN0 z_SM*^5za=p_N&E3zcUDQcl6+tZTj>F+IxgZ6FhGuUoZQiysE16x5%IH$mhEt;bNd$ z6J&Qbau6qoN)H_HIL98Vp`cLt_hTs~zMrydY`kW;Ksp~e4nn5Yj7u;v@@ zm!=I%yeWG!Hx$PBq@odW@$6*e`@?0D#&2Y>(Aw%R(ZDRks7;4s%VA-IYI6U|d}Z;J zU@cq-&3#P{_#dgW0kvDO`Q-EmmZ4?M*!WJvkm4qAPAt&5(`aRO%HW@Be^SDMCTC`A za)-s(cEA_(GdL8fD<$HKPDbv|%UAJA8|MEYhVdw_=ri3q#k1%EY9?_1DWL04=|CEi zr=X824h}1u6n`4L-Y`fq-iC_~aDN~0s4C@^m@y|Eq?QJBIm{WYCDhO>g9m+BE(BN? z=)AMRiUPz6C1x;4F6e*UWdxO{FzYoZQ?aO zTDk6gu`eCKUVOAQaHKmIZhmuve4}LsAY)EfGQ76`WgdJ*WY_C0P>y>Al|WaY*K@P8 zWs%mO`ohL$7gO*I=73od0JnT^kTKUdazY-U)~& z04*uwb81m#Td7PR>yX%imDyNH$&aRSXh>9}038Yu;{Iwb0)oLedA%IzqgNAP6Dvx_ zi{#}u(=M2kEXSh3+W{aV;}X1z4W^$^Z1C{2>ThSuwAOrpj%Ap}Sco5W)McL62Y`@n zAY{+L3Rt$HYIHpfDsBeZf(V?n_C`@GHX?@rYIy;jrmCj7%wapK(tPyDI2MMNm=qHl zjdmm%pQ+X(m_h9q(2k))!&`mZ>;ECYX!LXn;O4F*=)ec#=ouHTw* z_T-`;GYEa^5Vh0#R7ZiXvwR1@rq74guNG&LODEa1MfzUDdvabJ3Mj?^FxNF3EyT|X z^q(BKOnP>{}5_Ffd!Np25E71@GMr6Cl#;eAzF< zzJ=%axAg;=c2BNvHGLXWj0s1k5>B>-_`naI_A-pOfQ3ohDh~5V^Uy%FFaaE({`e4I4BH5$b%D_ zstp3iAB{-rqB)2*=0u-`WvSX3IDx}TrB>tQWz*C!Tqd$FwontaW__iTHlDrcH8Ly= zh}G_&YKAkhs#|!B0a}N6blvA|$-q7!DNd>r=ncNV^8|k(^q`Mffa&rzoGf~L5pZGr zSSp=dSYdxW0|vn0Wf{!_1;?p}0NH<*7huq5^m-1g(v-HQv)p@`Yy(1;gtCC~2{27^ zm*#wpk4jD~k1S_G%zi&%5Hj)V(M_of>kdD~4PkuS$O&Rd)GoYjxqe$|t{d$@EIN?R zNOUb$V`RZw1Ky#jARtYZ{b^ck46-u`CE83doqgkB5o$!ChPIZya0vbxkj*n`@d}S~ z*La6-*>}%Y*|BTEthDwF0lQ0b8>;q?3y*@b8wSRoYTefBr&f&w!mCq!NbK^zAaUPu5uR|z==XlXLfE+|fX}K7YpvFZjfz!R087Q9 zrue%2WMRRpjf)NWnR0blyCkGilZ_DULpTGH=I5=23UC;JDP*%_2aKz*$8^qA7Aime zRg9&&(c%6Nc=*PpLof5Z3c9<-YfYp&nHPS@e5;>FILRw6<$%xkTl?S-&`W3x8&NTe z>sy(d(-#I(1CZTRn8_E}Xc8R;Faad1z~1AVMWe?7QuVkDr~<8|E|gGnglb|6S$P5* z>AQAZEStRA!A}^xA`T4nCdHr8(^cR7xuj}lJ;g6L2~IX>DIok|$jb8+ov7DTT=Gy3 z$c4&cV36M2(7=+%5)z*29Q;xH1m>4Ey&0N)l3kazpp(WeF*hW|JeCX)l^WSJ2HLBd5Q~0`ktdsg%&^&W@XhM@u9k3gmqe11Bfn zjBM(ARLz;JKe{ar%_I%K%5|B@Xcx6hCP*_sHcLlzDG#J3N(OddH;p{)lIu$~i$lG= zb#L0Nk0!Lt_v2YL@A)q7F)*F`_~sLU+{@q)?-qE6>piOtaEX*ST35N{F9i{`##vPxoG=WF zDr*pc+N^z@S!JqNYPG59!5xioKz)bm<(6AWa3UvPZ4iG>BGtW9ovv*Y!)^ltuR11w z`v}x~E1CcTna9r5gd+@aSI;p7ExE#D5gN#b!W-g`KwV>is`7iy)J-v z-NEXINedYrjZApXAzNW_yW^JLTXj~SZvA)jg$%W!VYQ3{&Y^kE%WYTz5}#_)jm6zj zV<&-hI?%VB(L48NF3ko!U{EmIGX8puWRU&ckhpNqS1+xKNth2g$Luz%juX89HR%h+ z8a4SCN_D3yXPpre5fQbzScgLcKjppt$#VVqIX6@L-^mKGRcL62cl)q^Bfp+{(H(sn zdbt&Dy9X2iLfn64b~#->n4|vR&qRg^>1DTF&piBh{X+nmFb972@L5UN5<$Di?n6}7 zneu8#b34q1?DpPW3EYVD%2+(}xEoAYCMdODqqoSf1B?tLJxjgn5GGn(l1eg7i(@1$anM9;7@ z?`E$b_`i2(#7*?UW7X6;{%;&r$Cm=)vcEJ{tS#odkcCrw9FxC815j6=R>o>gJKx5H zRHWJbTYr3-%m37AQ*rHc>VKJskv7bWbA6QW~O<+D7E+MHlV0wncY~9 z`Cbl4!#yAJ4!z2-@z;It9uJ%H22aRdyP;n$hI~I-0~cDP0K{0c=CI9;3oOoZ~dY6kjdBL3kwULVUhV5@J ztp99|R$&z-l6|z5Lo+;dQ`TF{5ySMy157Ec)OUg#Zr6{@n>5UK}%ltmAT=b?%zjNOYFbg?3A6S{xKAg&obTtAB5x3CAh84eNr5tF` zn{kWfC3=>ShK&%GJF3(*7y|23v|Oq#tIHu-R+(%7WuFfmV-E%N40{lKK%=@Atv#TO zn4$380aR@23BOQ>3@3epxmOPHpc5m-mFOR>jTUZYd-~C4_}zc(PzUTkJyQ|@T|a7)a>b%(m8f|F@4vf1lXHXXZT;hdpbM9T!%G*d=J}Q=qJl<2JLl#=U5D)X;D2_M z{QXgBR)6?cAEB4#nvem2kw%1c1_sB z2kMr3842hK@E6b$mIwKLu*`jPp9SMnfI=4F(tWvK^W9vN^B2VkAvJA)q9ySc7E0Ap zwJ!O^28Fr(x-*PJYZ|k|Ufl&)(ud;}$FrWDzn9Pno_YP1>LoF<5S_`Qn9On1--mx5 zCI`vL^m2lM-lV;G@E@oo2z4x%PWY9r33D=l4N)k7GV_LO6s%0D5MW$?YMoKyp^_(8 z1F}IDtQHHj4pQKc3w{TbJdlQ@q)9dFbAUxQ&ISa9RN9G69Kdl0m0I;vJ!<^AAy*G3 z*XgmrhgZXS(@hTY9BTCqLh)9*tQr0SOE538nv&@Ej^@wmCo9HH1c8EVZ*aIpO(%5$ zM6P)GThnmI`vb`JOFU@~HlSZe+|annEDvcb zvVLI4yXu4Uk9;$PfXM|vJ<|pOmUn0{l6a;!a}uk&yt+Dg7+QZEAHnh8(B$!Ve{ZGJ zkd9tE+`^&l8*e&vzIO1Au0udSLNdY<$Mg_C^^BBY0or!v>FgOat)vXDUBh~{y3yKx zQi93g3LAoR*$N}QQ3}DYzMif`3$xyU855Nnimad@%#ipA{#%jSXOunJh;S?A)F0P9 zrAwt3g@z5z^KfSYT=X5~fwFb;OY;s%Im^0*^%raJ#xrzlzke=+SnFCgt3U`wwfP1v z)Fdt7>+aj}xWj}3JKAqLoBNtyUxe6QR+EF} z`KgS5i1kt9rKKlqknuHz%YK_ZGh~b14{CGpy zy9dxov!yO--|y_%A2a29m+~{VEn2Bvr@M>j`&^9ofm>P&AasmQifjeKDFOGCL^+u6 zt6YOOkvHBvT1y#+Y!pa#bR@hB?Kh+Lf(}J~2HyBC;XjivbN=74KwV)pH+BrS3bl$& zCJ&pJXg@6ma5@~0apP(SECY+=G%~Es4T*J9Ej#p=tTt98U4muzxVpwKD%O%c1s)qy z$H%+^0A`3vO~wQ>;ktT(PSmsblk*?$BS`D%HKzk&^M9=bWFz z)o*IzJ@BDd1MoNZ5b z%Ye)AGqf0$GNdWa6Z)1QZ&P*Y7?L}ZN-1ghoy*UD8`&sn*)dRLy> z7JD@t2IWGot>J#ni^Ad!H|mh3+dBSvw}#!5F*34@=2YB1;KdJp+C$waCST9do-qg6 z=~QJNSMw#U*ra+@No@pb`3L2f;vkIQ7F8?;S?x`xsmW02mEHp~o?!VBjd@;LXDG~D z9l`1}S;!x>uma~;L%N8^7F>dD;LxHB8#R6)E7ihjIurT(XtLE5`v>NaP9&JDE-xxT zwB9p~EI>C96gD|)v3q^-GP^x9qtn^$=o+Op7tcY~LaR@Ew0Wmb){GKYlP|n9#W+n0 z1_JpFtlD`mMZUd-`0zSR73QBdZv4C9!(GCowJ^rB2TIyk%|4D9t_5ay51qYxpR5_Y zyng2u7aJOSds0;KWguiV*wI4eW|(~2>igbcv~~>-S~|uk>3usdd0{ZysC;zxvWiJV zV-0N*+5MqP4e8D_kNrkI84@*onnoYlCg}&Jg!44&Ao-?+D0GT6h*7q#td5U!Y@b!&uHg674JSBnvw+UOXJJ?4F6AB{fnyoZni( z=W44E!F51GZ}T-*eCfCw4JItezN{x^MjkPNLye_q!Y`5{!@z>oGWvugqs{R=hTV(S zQA`EBmXlO!QK92BLUL&$g7%{mLi1F31eC~$xuGgrPPw@~3HMHC3Jj z9BV$N83R=rJS=rhmP7-|rE?@1AxWL~=BeZHRK>~a2*Hd;r1TptM4fI=Dj{h=yL`YKlP-Kdv*X0@V(=C* z*%Cc55)2ZTz-D8WAGZ0vyuw4dGLwQghm+Y;+)R(Id`4V$RW!Xc?f}=dXZPH8-Gz=)$x7-ax5!ee!ztBr`5g zh{ShuDlOVk-lzblGD)?_a@?@OIEb!mDu2>Un>?}E$Ub83y)LHNY>_{o@4$WmHM+j( zRdOjRHemKhFg7Z8WuoazY-T^c=i!brkZ9oJ3!81W921Ob76$C#*~HRbM*Jt;-z?1I zH?zypO*=D%ZU<(m|4Foz%PtNxOU7e(iEc!RNkHF;l`!{)4fk9V-8RLVy5WJL@7oJ{i{R`g94;A)YEWF}LJ@K5_97@$V=~QGnY6aoo9iH{W0SQQYs@UFwT!2s zPO+F7*Ju6)kyN0)*82W6iLtVZ&o$-zfS|7kd+O6w%#CQW*ru)Ki&?Mxai$cq+DTIn zToz(uuIfUIoh9$7mls-z4Aeqz$882e9Bh$ItPtW>C+mxtj2$uWMV+nkmrY*hbBh9# zpTFhxy=0%)Y`BMRQFh?iS=mQ$p_9MtXg6ybZhp0&qTtA&_fNQQq(rhqe2HSV)QwKZ zF>0tz0!PTSTKqsGt+njsVfGLyYRm+wcZ*?*$5d2C`Wyz!%o!^ge^g%`Mm!}uN1gD$ z67XP1#XAotxPRk#eMe7sTCe6&Ur<~;k2e4OOAl(o!1?-(tDCD^^)l5?MIyJjpl6Zg z9;()+GU@0P@7B0Jw_j3si*DF<5SLjR)|v5txd55MU)uttP6y_qm&`jU!M{m4U6iTv zFdK?ubMsuvm0{V+!RD>I+-6nIZuXo!m>Fww{YORnth}xTWuM#}G7OwQPS9vIv|mpv z^yd$h9#)U7{TOmL@nYv%)b=X(O*XEWa!vF)?=F=~?0Oqb1MZWp^?vi#ZKzV2x>kJT zyXXASl+#o%_S8Ro=9+&ucNrAc*XOA1d+`(tgz6^S+9UHE!M|vLv_)J^9g7uQKm-2{ zs^r>ljElEBIs4m5%>4^XX=;VF0GFLP z(|D-YI_{yi0FxMNPK&>v&6d|Wom5qwy7LibkoR3s2`Xrnx#P!#SBqAYUt!Dih!4NF z}(9>cvz671iLxw&I`5{E>cRb|a`~2}XO-WG z{4-rdg6h$^QYm(#-Ye@^)abIbiUSPwrtC!XmtLF#-MZFzdzkYA9J#Y5cEN&+AT(iG zG_w?Oa`DF7`cignmr_d1;g8=>27MlJ3V*2;M?(R*#Y!6i+0y&1{N8cXlaC#HQE_+Y z)*X^?q|JO9!+{e0kP^NE8Tz6C`&2&(MxHoh=4;Z)UOUFFs%q#fj&ZV&rLp8x?fU%x z3O6Dw)2|ANv5mG^c)fP*+vHf^3wvTvAaH0L#0|IwVQ24NUAQG-LL1KWTfaF(&j#ON zeiOOY>fq@?nvZ;kn6h8+T9B;7&W@!9rv-ME4ot*xSmUcutOr|qHTuqV8A$c-IunmX z(8%))>jF8t{B=B^H>Y?>b*@Y5Tv84=nQ~kM4cYn{@%Qa*tg@N?@+#VX{<qP zK74Nj`$h8oEx8S@&2K@H^maVn*s5{{;gJ-dIi3!7vqw1~Z@!93raQha!?;gM)R|8e zdhE$-ys_`VqFh?Ecri;{;)ZKerXR)Ot{wU6V%@g3vc+UsKR_}9eM~YM>bL7!H>Y=F zE#{KKZ)x1_e*75iTwH8{l)m0kew5A^PX5sn>cP;v@6bE9!s8g6CDjWrA?Hsh#~yn- zJ3hy4gL~&Sb*K$pU%x_Pe6)Nnpc3RW#sfLl`SE`KIT7UEecPYR&Yq%pn0SOzU3Tub z;fUYHqRzLneljT?sLtQMvM+~{?f-qOiV`Zp+(jWV`GDki(noP%!-+W2(@O&zfAoCw zQyJz`ckR@i8LtvftXK@h+dX(3>Ql?ohodNg9fN^Yyku6XWG@TPP18Y5e#oD9?-+{^P{RVJbQ5-nan@`r8d(?Fw zNR0F!A4bBHLt|PZyruB;%PN-{X4d0H5-zjB#FeD1k$$D(32%m-$Cq_@FOd>Ig!SNP{>SG14MYU2%~*a5x}!Auj?Gwx};JkRV90JPcB9ZLE( zUjCs>0a=~`S?oQajy)Sr z_48?{?{!#SfEdsdfHLh5z&Xm7c6L0+BV^D;tGmM;QYF71sJ9-T5oeK)&sVG~%HQ2kyFG=0B}FCva}a2-vxBMK&4a}6NBwam11kH{gKmcX2-bn}MQS`Tit>N||NDta z^sl=9cjb%n2ygb1VIXXV4GP5D1T%MGg zu!?SJuQGg_@lbk<=tz?3XiWJrxCSTkLDr?|1i1bSBLDr#aj#>PeoILzgw?)&Mrd=E zUT^|-qjtgNo@*6iz-r7dO^M@$-N%i4NCNLYE{|F!XAn3s z{Lci^;kW7R<(tFAenq1VxBm{_$2JMqe^j?$VgE6gT6gl7>d@U1der}LSe_qe1p?Xq ziSB#iyBqm{GiuLC`!h*)*Vl#E9!iY+#J(Y+QHpY-|cX!R`Lrs~A;@f^vxc&ii8GXg$ z!I4h9^E&~@&p?Au_MXu)@M^R2m5M2#M8#G>AzJ*SaHSfbcrqn|A29t*KQD;ep z_NUW5tu8$7m&+(_kL9{z{Z5?y4Lds&kM{=zQ%IgW^7?KLxj4<;?xfYu`G7$7K5dj5 zb7XBN$n`-PkUJFr^UcBCD4(?_R`@8g?kT|$>b0A03WA5kPReUxb zYX$F=Kv{~Co7<927;HRRx)D?{mHLe)Zjm?vfd$Y~8(W44XP?6g?V;Nz7}5Nl4_AeS zKKgSncG)TJ?uBV@XhJiN=ZeRqqcTVUa_0g#ui!hWud=iCF1gYowC<2y7dRWtck4X3 ztrU&g=TI;1nmv!|ExKl8a&rCW@W>uD@1jO+t77y^xT=#XoUy%XOu?Es;H8JtVvrC~ z+=EvEqtpE9J8!7*eZ$R9YuIV?8=RtBsO9NAxKqhvCpX7DA1(1auaFmY1u2>DYueolw|_Tt@qPqQs{a5aO#d7zVqKJVDu)jJ zYugy?kZB?-rLe<$VXY*}n_}m!MevIw@!ZIJ$bE4<0~e!E->zrJ9Sv3RX!1AIG~FUt zUhp`D_Ps9MLGFUf_Su20n)}@rnNg)4p!{@BTh>;Bb3uEFBZc|-{{;WV@M{6Yy#I74 z`VD(ck<`%nN+gN6$ZCQhure3DLLMl8Zhp>3{QqcCW%eN}p28tp0jfeX5lxhSxw8SB0&%LZNPz)`v~4TqSYE-?eoW0!k8uKso13DFq_HL!D?a z98EM*D*w+aZq%t+*OLpcm}{SN5;yqua9;}0#TT2H76PPm1$>W7ON?v4G~vFy)*T{W z6BrB?jC|BN@qA-kWN;ItY1tQ>m@iYmNykQBTkU>U;ugMG!b`1IL9rzb{otjX|6j(^1cuWhD4U9hy{Ck)?&EKr9 zD4*$4l0otE@Mv2hcn|fwfkyXg(4~m+zB1h`AW6&AZN|l3lD28JWB=;7Fu4B`4tnV7 z#^A4W`NUz5AGIgd;xA~g{5l4~<1gs(pvNk{?W*gqmdWOphYoSt%b-Ij>9{i{|cEU_|*R~{=9QK8kyxiN8aCeudd z1r|kdM^#C1>o_qhr(P_(w{|COR<~S}Gmi}0qDY+UhBgKsO#b$3Y+&HhuC$+LyFzc+oE@9ymVs5Wy-ypu<0RTf)R>W_Z3 zgG6g+XXS_G2!C-gB}#x59vFJZE)ojFE;LprZ^4~d*m86rZBj~k@WfdJj?)MyMU1ta zQ@BR$>!Xywz{8B?l#Y$&#;VL_x8OclP{Eyo76o2|5|)K(Vv8po!+qP3#8bk30fC!{!ZQbY*k>)``N?l`U5hJ zJ%Y6E%O4A6x5&Ekfx123K3GU`SbPCP?}AtRwYOJ~r}rx^HFD>!+@@9-BwcBf9wZZtyg zdZRe7i~Gc}UM$c0<3FE+0<~L?i*abUKQ6lp;E4TMt6-)=TJ{c zeo?vBmktJF@nhYLF{v|w$|#H>=N72tDol1rgc@=_Ka{(*iTAp(BgjNZaG|`#=1=I_ z2IRa@NofVFhleg%Bg!U<@I3b|4We4uTboE#S(Gk$b_m0Ot3&v%bRM7u?K z-H~88BZO%<;w*5#nr7X7OcF`HhjH@FxbE;(@q*?`YESy(Y^2-v&&QTKM-1QF&dbkX zLPkaQ6s<$MXx-j)P@csB2R!v7_=C#jCg+~c!&(_voJgOwQRInm>k=gx%<8U0+PtuA zeT*_aPT*0C{VuoF{#rq1H>I4;&jUZIC|?c+$=u&Y0~3TA=}x|(@{38JvzE3>CN8v*D~$Q<(L|-^^pU!QlX$>)Jv$+L&!HK^k`^9d^0t& zXB8wKfwo3F)|}sQI_?y_FXvUW)hQ{zQ^07-Z_Z)DL!IKV%01pf6c+%mtiEF~rrkFE zHNHg6)eB1@)3;IMnQyo`v*Jlrr$tYh%s>wvp#&Ldw&OpQOf>>WRg z^DoEZ>@zTlhI9y>cRue( zq2j$b^=ib|ZB29ib1=8t)EF9+vMRa?Us)C5O?1*g6KfNXy9c%ZrWQ1l7T9>W$fw($ zkO9uwqr?@nMvn+AsOcMoceB-1%k_mke}Z^UGybwOiW{sC&e2$+)y5|wSd*Dh?=wjT z6JG2}!Bgn}u+0~#5jfT(#}f#4Jf8%NBpPu;DMN#A`w7?ZptxQ6O!qGcdATF=Q$|W# zlqA9312n;O^9zkzHlGl=8!mE-B!szs_Ho4cel%P6e2fdz+#-(NgHX44eC2h&XM!Zy zxIqx}t&;ewYw2heV#52wZ$mAfh`YcI@W!L#4MGoxaVFj)&*J*Vg{@?9GUCXTdM_qa zt9l5+aC|wFM7>gaes7QvGchfjYYRPBJfpL!5)8!CxZ4}l;k*-@P2ftg-AW#AiCOSS z*YY?PCf~~)ff0r2yjBmBUtZeFNy}CE)dF9Y+;S!1<9CYc0Y4O3^Zp-#&VFeB&OB{D zl*a3Aw*g8hKTyy`PCUO&!1fek^EZ*e{`F{kfRKjl@5>D?c=K6tTxsy>nr%Z_%)x7| zxWu#SNa@%cS;Oo3;km!T%^hP7>>>8d<-~Mm>A$XOts~2{@Q9=dL5rTp!Rwp6ENEj` zavwYhD_3*v<$S#Q!-)V2f|FW1rAibQPLJ1>V-lLZz>=TWQpR7C+=DrafM4w1HLBj{ z9A87PcFbR>x=(A=))tnQ4XS9WFG_$3t2Z_;^|kOQ-x0piN>9Gdrve;2ZTob-8%RO| z4YlgHyaoVSQheIzK}8K37G~qYBPLFutd%aoa@IdNb<`DFjD|koiR%LrKd_kmyVAoF zb1~M@IbQrH)&%rLWPyR7&E+1rH4Lg%^Q}d6w3NU!NJH)Js${*ub?D;R+4K9)cIIr0 zHnbpo@mrN5v!sSXm}AwD8$b8YtNpxhf%V+JSNX9o8jT5i;5W+p=y;>Mv6u?X`dKMm zMCW>7@S!mbY|Rf({R!9$@A{%zz-1k%xwDrj_3Ecw%t#rbggvwc>_2!HzS(VcJ!=aH z80oJesMMRDzVmS%v$)RY6$QJuiX5-rqLz9IYqQ3qHHD@?WDj~_FROkDjwmG+jKF4F zUf&4$B8FQ2#c96FP)tJ-oUhX4{k|VQpQp^bu{^Q}sI9Ha1HK>jcfGw5204~9rtz2i z48d!?FE}xyHsjUTdQVW zYMmcb%8A|+u42{6xV&iUqB5fsw57^c(L;EHR3?4){gIPbJR>S^2`2Dmte-AkNx)_ z+hXtU-dZk2Xxf^nUk-%er15AsLl5|U@4bBEizp-W%FASZDvu*)ElQm1SNkGa2P9K} z(z5%W?X#;}EizpWL=X~kKIj2%;Q~ENzlh5R1s;D1bQlKg#C%c6s%Z!BK255`KCBPfvZ$CEDm`OlF zKJ=yS4l|%N8&_<_{Fyh&DBIjUmnLfNLPp1a({bg~#jqm#6!r1%vuT?umU1m+5 z&UuK!)k?peX_jM>mmco?OU@Q)J#G2!+D7zOC)!8I+Sz(~`|QSb{^hfWL$B86_^Aid z!jsvr9h-wlk$d zd2!six>UsH&nv0-UA)e9hgX}Y@38R-lkI&R4+q9cl;V~NCA*~9yv^RfgRigGy(6bi zIyjP1ERkfGZRjt!kmM59<@qWUP#Hn6Q|v0)l#ITttlT%C5qlmj$}LI8iFl$;L?aGa z8H@tXD=O&ehpC_Tzg|90N>8qyhSju`K_;#7pl?KRPeaoHCscVH>f{sWp4HqcmwU?} zUsSxg<>&oyJ+|k|Dd;V_?4#yUSSH2on_Q`-QSCl`h#nJWr3*~Ez6Zjp^J9f{?%31c zCGPcD`Psdj`Q@rMi@v3HB<#)w!61_!)Z(`~x$VTmCZ?23EimY$Qs<^aPr=?WxvVg+ zjp#FAihe+R+8Mf)CBjSS*u-~TDsR}?Vk6(Ptr8Lvnh|@c++a1x zTgXL0gFeBxJJE(iE7SY9EdHuWu{z@b=p_H2*d3+WiVfATsyoB1J#(k%T~8<}!gz`4 zVO}=puKAzeLT#fFT(2kf7?*n?%({(U61^qAno4B{J08J>MVg+d`@E2ZnI8~0U@1OO znX4cS(RQ`{N`=r(5)PnGuH(B0*s$uhVf5vK2i=j4=Kf+yxME-b{ju7$0;q^pTqE{2 zg%$3mZTuMed3Av4v=rmJ5TB0pL{73fx!IPdSZGZAgb@Fehiy1r_?1zvICSv){$( z7i5LI*!R`(;&Oy$`ZgA2dRdv>1$58aUQ2%}?<z(Acc{4dHZ|<>fzX&&ny-~hT%CKiKs3k?ryK{r+ar*%BjXSr>05Kd9k5+gt zdx#+{hea1ME)Vb4xNP8omD_38veF(}k`bfBbhD6Uc}445T2py1%reNoLup-vMLlx3 zH5wTrC2Gv$TU6eJE6Ie7y9;T!GMPMhG3W_1CnGOw+^ye2HOUW;WWYsD{7Q!-bNS3e zXhB0WSK|z$&(qB?E}281p7+1D6ddmcEJyraTzdjU)6Hamx11l@G9zfN5gsXMSq^z_ zr|{2-^HI^DZ-vp<)$)M-2zK2@5&2$c`rRX|Mz@QV*56|vnW-WhWDYQUWQxifi_I|* z7;-h6_>I)}yI1vtyohg~1;9BaaJ9ty`0p{0XFyI6=P;~hGWRYgbvfTkACk)M@WJ-z zAC2=Z{&b;5&FjrKNQm#QZ)zOk8}GnxNio3H#wv?L;E(=~-otoS%60~LK(hpuvpw~7 z>>^BgVw^1sv)@xmfZ#^p#BM8}>CpsziD}K--QTUwHB4S4hedZKflZ3|CU-*g7C|n> zLvx$7O2N&6fyqVkjU7pEJ?-Si$i*O~bf7iQ;DiS*=b9~GJza792;OOTm;0;ndZcz$oj;(0|E(;CF z^nRLd{Lguz=LFM%mg;$dx+p5EkcX1Ftu|;w>{Ibg(1Pd-C3@3bxqShnkf$2bBrlu- z0~dlUBzH#=e!TP?`(75`q*vs#=6TWq?6s=@ZB^)SJU0dMLurd+eM1pjW~RiJnH(UY zti9!XpQkrz&$8HCL7ZFYo?mevoy7Ru9%iVJ1k!ssEy_%0Yv2WtFmPRUKGI>tYuk!* zCz`Ji5l|UV?Ot_jrQfMUI#4CFy31!EP*!j3Gha`aP(EZ| zOwoS-Jrh!i?ZABD?UYp+6)1gN!sFbbD-KNk@ei<^9tB4bd_lP4anrEOa-*l=^8zj1+ZA#n z^2D)IiGFky1OjcQ^+y{wVI+c}K2A%+HQa*Dk-a8Djw>_68C2sMwS4K&iqX%v)BPh> zDa5BQD1U3AfoZ`{5Z~{D08I+M=Qa*f#4E+UC5UP~WFF@Vmw?L(fm7UlTIHqFD!>dU%XYWig$?K!73{~6{V-@|mSlr(!BJ9+9 zDzWtA?0a37f{5YrrRG22tQy~ibdmWO=4hH9%BGWVMu7NTDEWFS|FnlJilp)u8Mzs$ z`Pl)5WQ(U^VuKedYt+`g`)W{@1U*vsO8F*uRt!9$et)Ti&^y)2+^UjV5?|Ti!AavlWHCts?vqe! zr;l%9NXZXxYv9{uXdy37DHOZ3^LYXI2@MgZVPLQ>rK*RVq+rs{i#apw9Dz@+I+9?@ z^b7v1pGCoQ8lY1`(V8!T3~T}bge{Vn>BNZqL7+Snio%|iKCd2NYd!X(w}Cii2qN1YKCbmP1qlyCA%!UF?4 zjLjks&4Qt#T?0l*%DidJgY48G*)*!(v{_qn4LfsmXkjF$_9$F{Opp5^1-{pFoi+)hj1}m_I@EUBtMGX_(>g3-9J5UziabEPZLilPFneLJEcDygQFXuC$Ruqm=KfO5ZM!gvT-M;Z?0slR z|7#rr^Ov~pciNkr1ukL3`OcR&k4z42>Q*u7t9uwV#N~ch$0yaTvyWGsGP4sG6=i^z!p}Nn9pTNE%mBn*& z{XnnqWMqO@KZv(tv)WL4ovGSt8QN4Sx0M>3JaW&4^Wf_TWzK9PvUh5(QUsc++^cSoq?fDW;n7>n)~?k-6~Z$B z-W*@Di{7;5`Y=Pk!X6?&0(EsCa0dc5zuvr^`!Fml$RXI)?;mV}1>RuP78r_Xv|=8? zRaVuKAi!fkz6G&oZTXM$2@`oJM1kk{ZRl4Wg96oLhe8*>nM3touNe$C3DLgQpYOde zbCmQ3VxqU2lzp;g{Xv0Gw@giFt&%ZbvPcgNEbJb0h;~4llX0_VKYZL3d4hL7t?_yY zYPygNze84op6%R!+;!DcR1t z&W-X)iH?tBD;heP;=2l5i$s)-3}4ZI(KkQOJh;a3ediV=Jro6_Oqd9x=3jo;)ANPqVU|zo%JV`>9I$Ux%5t`TH6l@@s3#<*ltP(# zd5FE3%Q=2zW})>#);lG;-rxu%d9mj^-Ed$>4@vCv^5YD=w|e-%iGY%s8;Td3Fo(bb zNwLJm!kZEj6Tm()!!SRF!AIQ2$~YWZ5u^q$%&6DZ?^+ ztHPZNYrvZfsMWcng;^$trMd&%wIp)4e~jCOQ6A{kYlg4HMdIW0HoL|QS_S_&y44C7 z#ZfHj=Ow+DO3A2%@8gBfw3VP?5qPR1#C7Smu@w6B#TD!}d$#@w0rZ4!UE(cx$smJH zq!O@CMsm+W8Qx8><8^)1Ld;w{XC1f4&HJS{{h~>Me)$GA`E6pNGcoD2IJ<&iQBi(z zZeCI6aKNn``UM(PRu6w|yL~mfac3^bdowGPu(e(Pf;c`eZmTYmx7g_V_t&R?&~(`X=Ccb} z1l90PWs7RoObH&*{`FIK0PQP*RB8s8M+lFY4X`iz4L}9^QvxWQDR?`4cs!xyXhc~3ra%k-sWk_wN$gN?2t?;f+ zDbovp!2%eMsXiDW74Gc&Fz)h!Yr%vVzQZ8hjCd11Sqz1~a3bvin1pJjvENX)YkdO3 z8I_20fng?!Gx41AiR5jaf#Q%ddIkk%c!;i`BDsGE`KWQ>+Mn{;&nbj{o96btUljYXQZkdmtRX+emaE;7_?V;MIbw6)-gMo(y>N7rmpN_DE z<`|pO=S{U6K;r1p(GtU=?P*q*R#Q_*6`%Gs_R!fgF6WEnVWL)_vOoQrLs)$a`M^YL z@Z|CR5%FxqUhW!HT&nY$)o}S(GEs9^aFkNMN1r6yx@hllwQG;nqbBXJw;S-%DFWszx_`_*5MktZqg-)maZu=+ zM}(SWH{~%yQ5l?U8C6mn?O$rViCVtrscWT8oO(VG8{G0z{M8U=db-VaU*RtYH&%+* zUefX51A|Rl;gaL;rs|!mk$*tWmtcI}6gXdRPT2zXocXa%d~%b3g8$;@qEMr3??Lr? zvU7S~0nO~UMrjTq# zU$azmCj2X_CgvMmWy;^71qLFo0cNg}`#Ew7FDq&MddNFRsDW5rZ^pw z7*Cc~7j@R>XAgG!yLlF>mkehECJG`x>x)-W$&6tm^3=}l@6UGs5vrlp%Mko%US2lc zDTGQk+Qnwu_&r&oF|XTf7&U~0i@)Lq*Vznz+$npVpDsQrWU&;h`)f@0kggC*nki^G zaDUqli1Qfv=Lm~Wg@^Qcy2$8)ce^>VvAE6qbYoSUnX_kjeonBKGtxto<4Kz6Q^W&@ zb2Qi#ZJ!o2yx?KfuPbG>%3@p8COfwe1I~9ZW;QOX`#Wjh+0z=uRCjjZ7pEl7$;v+m zm#7N?+!4#qcCW>aA)`CHTQe4h9?usIh9!R1@#86^kjk14N|7_=G;#?$=?{3-IX;

    E`*bqWerI~{HUblOG+6Mcp3PjIJXJYc&8D@;!Z)BCpssX~8EoEnNz$CoU zfQN^cbs=48ynUoaQJ6E0Z;j_5P0P*0Yu2!;#q;2`e;mflZ?x($nc15}Ec=RFOIU^1 zSnr#jI`4>Oz-X;9Rn0%5|vWm-xOBL(4q{EC45I*SE%4#Y+1-61ij|T z(B_?QZ=cuP;HSkDeKl1Zu>*WXa-~yk+Y5-BN5Up)O3@vW9>-~BsjSJRtJq}J2{Yf|0BAhI9ZemWqUAH8g9)MNSG z;z!LMIn#hT$VA0dv+^$qxYU--E1G?qp?sJ3Dkr(jX@oS2Ty=???K5J6C3>Gmk-x2g z?UtPz&kSWx$|On<#@F>(5c*0deNba6eECgOMJhu3cW7$O-Hu*QnM-&^)6D)gHRv?H zbNjGw9LetG`s0uygk*cH%gBDJ&^UbhVg_{gxv(iu7EUZIYdqPTK+(D&umAh_pDLY- z(;cbuaE|?YZ$a_=lB6Hb8dA7K(^I2YE59tZ(sGR+uwl*t33Yj)0?LHoA^!d3*}=6M z^S!6FuA{Fvk=Tn{EQ9$SvJW8_BpU7>K?!ub#H31fazj!NZW**M4>c5+$?m76`O)1f zF6_2jY;K*+ZGC$f8_r`)9=c~=8XY{HYPE29nsjt0WRf6%2qiN%^F+Vbx*WHJNK#xs zyrE4-b&Yt;Ms3TsvcMvz#EfjB2zi1cV7K!AK^mvsKb+4GIU+y*#QVixT$g@kt*;@? zr71s_K7ee0j+g!V6vSx1M;El21&MF8(xCBf$W@nZjmZw`j}N|=(RZ9VU78KBnG0R( zUUUOd`8PCm>J;eu{L%{(9zB{!r;ede*ZS>CLH_p606$5RqN*Ltr@Bpsa?;{ zCvu}$Fq0CxaCvkhw`szu8`-xK1UoLAeu@{FiVb=vKf|m?PG8s>K?%CC7P8A7CHyxQ;XEdGQ_02cRSTv#y?34P}U})z5 zt+pBV>}$?db4v~!)Q=(7HxEm?#+~hJMXpA_Usy+3L8(&h14dSTQ6{g$tJUq|Co9Sq zKYhW)o?4_C4RzP8-GblNjxW%cMWd$DIqQ23^ChgWR*dc3IS`~Bc4 zxF@_H*{(@6lu=;M%;`cL!Te`FrO|qqwS*3!!8B-V^ioBf5H>s_6B-;_=fI317JOD?!=t*}_AK=c_}G{ z&zr%uPbiW&pL*?L!!ogGwNq4e%QEZxi_iWpv(kr3Fh-B$IE)Dv03Q6YF7IfUyTeaB zRX+KTI23gBw|T*$V|t!)N)-EX^2zS}Q{>t66Tm2#39T>R&bMX$^%vpNSdJL`l*JI3 ztVH@C3$2F#VOM3+fB0CGd)HNMnH@uP)Xy;0nXq@6BPejLk(9-nKDVFpBbbptg`tk# zQahQLlqd0T5(6izhJ^^{94?j{hiP!FhxtBS&vACwanjvIv+ze8gxo5nYU$V4O4i}m z*T;;)%`N-C^6Z`Tw@mVDacg|UcrgMc2!cA16m{&2ZyJ>s$;nnpUay+Bo{dpUG=16Y z53l*yS#?ukCFq#~wX=-FHbe2eNTrp+)>xWSkhmZ2cAas2vS(e;mm>ffxT*1c995;n zStbeao=3yGvP!B_u7AmS=mJ=k03Ti%f$+dcOYS zlXO^`kE0_A8Ugz;+o$=xVtBBxqNYsQd?eS%7ejKkWW8}=%<9k7_)OS0iU5LlwpQ8Q<%tf`Lre}!cb`$}a(4vd4U z+mb|w68e$J^++1$eayV4+?w-jgY6^E?|pM|rus2)w%|upk{OrLLA5a;vX8S0M%rb$ zE;Dv=<7e|c)6b@B$zDMAdc`lWH1N|B%{Wy|jI0^=-hov3lZCBdI{eI2GIOsE>|t+5 ziwVwIT?$*Xzl&0-Y3HO>ln_m!8prkZRT%3T<{a+(<(c%L7alqxvB-MVtKlWHI{4*q zANgUX7zQmFuP~;=_1Wy> zt$VMFYGj=H(&0rq-PxpMd;+|1hnz}e$o%gjS*qg`ZUUlR@z(c?Tc!aa#lk%SU<*B@|o2dgWc`X6W7?B*JxDz)}PSWnwx%?`x(H z-X?ih6IXCH1dcai1ufn?u^I(BO8(fX5$#EXNQ!1I|W-o=j-QKr>8Goc_~%d~87(%RM1h4WxXsT@zC6i($J!P$()`J6*~wJoP$r zue7hxse}r0QWknMAz!$qmvzYOcl}XEtc5uZXk#|QsmtuO-2y|sb{##Jo05LX78l2L zj!-d7e2-9 zWXp2t{TdiF=WVs)C=I|8+rvr#`e9(q9`le7o|@q-Xt_@5O>d_sr6)WqCdXH{ zD+d9sZObCIWO)@R6^~>S@=eO87lOcPlL6@aRN)lQ*k&9VXuVo$8*BsiXQ;IXJ%e() zl9I+B9d%((ygBbDB#V(!sA#3GFDf|AVwf8w+*qU#=^g*mnMlzBxGD>^rScs|T%ek_ z)uAS^Kxu_1O;69xB#+3$`=Io_ouk1@KD*7`-9S-hI3}h4qp$jMnbN-(hqAJ>dcorL z1Oyvpm?Sy6#V1+spsQVRfY|^3yyJd@ueVV6spNQR^WKhNGuFQ==_u6|3sTm@H_sY> zXHTIVOaI;F%Ru~I2N{|DBB{Y{`HBBAd2^`~1qbSKRedrs_3bgp2oSfn!!WQXxp}Ir zUo{Dee^FCY3Th-mOe31FQs;&O5Nbc*NO(E;=z{1i7UwBvtDgRjZmjL-u*{GYTw(vUK7bK4Bc1>kH z45L4rB%cWcG=~|vhJ6`rBL24_WQrl4K^Ei*^V8G(?{EZ+@vfeJdFH7uN^x)iSl>WT zDsjMCB~VcAy#GQ#c+~%nm9IXO?1eDbM^DVh-=pAUaA)g-UJJXi;1y03A(1|H?Zaaz zC=n52HI0zTVvRyzCELF@0w38aG1>a42_3Z9SeTe1e|AUjY7wQYm@H8-3Sq=MNO~AY`%FCk6-Z3;Z34j9)cC^C|Y;Ia<} G-~Jy>I2XGB literal 0 HcmV?d00001 diff --git a/static/img/rec1.png b/static/img/rec1.png new file mode 100644 index 0000000000000000000000000000000000000000..5631e63dcf48092177e27d2810d70f7b992edfb5 GIT binary patch literal 61009 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

    Db94;q__4k2CBC z-wmSN%l}G-2dJ@FA=kyUoC8Xd&Oq(e`(mh6GN~>_Er5v?b}x-u!-=s;VN8v$XkL_C zKLs7C0_Mycu$k#(EUmDyOHnBZB>%m+iV^gCiswTN!_HhE=rwG%=`|xDgkE8)xDLLE zAbv#of`nPhZ$na;_0`SZt>+D5_DCqYGg_(hr9C_ly8C)r}aol3mnEnf# zq142ow$DDv9k&~~r=$(e!2XD3;NVE?C2l&(>+-w;fx4`fNJYo&2;qk+4-seY^@C~P z9xx+SEx%AQ^1vVeC0y@Er){6`^cFs9+oiqaisqQq-p$5<`TT`>1ewd zQ8_&-en>Kl2`D+@q4eJ{;~N8n1aX};?I8KxFze)2O$TfUVcMzG!d6{uAlkhFKr zLg%T9Z3P^Y=O7~i54NlSO&jd|pKF7%v@d{$eie03(f`-#fFn5LKZ=IE;2Y;>K=Xd2 zp6&)z59k^Ge{A9Z8^bex22@J^r_KI0HVyzDzN^67T2S=pBt?t&+naB~M5$klsb$iU+&BNCufI1c@SeHS|(r^DAL{c2M zaF@I}zndZE+cw}j@i^ejYUU-#2wdg5#QqcK8OAlEQrn*ii8*1a8pG12f>OuLz6~le z$k4VAI!$vMd*UH!N-Be_p{~a3t%wBn$X~|~K&>YKl(vC^0bsH`H|QB>-P<0_owvEY z>amrwm8UG1>%4U1P$C~^0*);x0M&}6FWhmBif9JgAuQYV8Hfp3IlVZs3SbJV15A2z zsghV^raytmt;C?s1&B1SQ-z+1&0Kg6|0!g-S{+~8js3VIO+}?6R zCp&45e(HOr0bE%tS_PBjz9t7P?J!~2b@I$X9>3b1(VlZ=JpK~<>6y&si-BdPEP5&@ z9xV0IGUnl=i1j8g*kUOKV`cHmdFf4))mAup!q5QDDRr37LTwf)+l6oD!M1$WS38NS zaSn^38Jo%C=)>iJ+Pi&`8`x^o8W(gvA8OXE@BPrd$Ws(KIPj*Iqi&i688_np0hr}9 zcFm)!oAb2<*Nsl;i4=pC1)uqwxpMo|yQQ}N1033-OdTyjYPlh5Do#TI|4TK)elA(n zj&`?R>m&BQ0IczDKQ_#mVhR5pjE;S%Kon$Rz*F9Q5Py+=RSHXI!6v%xcmQHBj|g!k zdO9=Fwm4(`{7lZ%P^;y$m`>drMogD5ABC%{feyPBHS?GHtVS=9ShaS0S8wGX6vQ!Y zzN?-t5^K%~!I8S$;jzB+&)I4Y?g_=cK<)m(=lj)ek4x6LVQc3%P_TMfqnGK-Iu8AG zLY@Z~VimU2BS1xE_~Qzauo=#*E7YN?7UnP;{>y0yKi zt`$(y5Q)i5rfh*P(vWX?I`6sHYDXf^leygJ6Sa8X+_lX-lEyQHs=;jOsy?AI(}To# zoqfOsMbp%Ns@Q@Wb)38viWp~Lj_LNqMFf|6R`^f^3A$M-PVYFzNCOzX{cCgfcBbp@ zt2Van*9Su8{o9_EUdOd#y+PGk%eBrG!t>7QR>vFH-FvRB!p`$KcxTQbQXRrhCnOFD3iR7RzCd63mt zB<4x{={Kv-Dq;Sw5&>Ai`dNIH+aLydUY@{}9C@07fU^;M@pRG2L}Y54@702}y1Cq` zgyt|u(%H8pNTbCzllgHq{Yyt-FJc6fLX7@#=Xl#lSGy4ObWaY~HIX&oB3S%G{fiPJ zk*m~4Eqp?0N-zCR2M%M)in-8s&QOt;CGeSS-WjO^biv zv*O0bv4t<~eO3@_2-Jg5TGzX^qpmUaZkr_DZY@{CbsfTom!Tc(cl4DNqZiNPu0Pg` zmwITtZOIs>zhhXa%YP$Uo(wgL?l%<4_dSPOur4%v2Ms~wDgB3+#X9!w zM7<%%alOIn!V(L$&Hh`~pIBE`00OaB*l9E0K#93pBVuQwt4r*2=D9q>+{xD3^JpKR z%$~26B4Jd;e(N>9=^eTL=!Ta!)r{SP?QM?hPXiPmzuBpBSi&iLN1Q2Nz}&Tx((zg> z&9?l;EMg^+6M8zjH7Mh{uhEg_&C%h6mh~L=$bprlV7-Nj=jU){z18J8UCv=d??p4o z^!3;(`}xlVvtcp^o|kqj`{UiFSB;udKb5}SN#GQ5J|+F}=l1yY)@1tq9GYldhR6my zd(rLW^MFP8h%%dpxAMwHrAQ>?YrJcD-5s*$IOy8AWWF5E8NY8cp)ykuK2hnod@$ZU zq3oLff#Gc#4HcC}0Q@U#>fpvVP-WKFvt9U?sYF4pf-Y4%!>~KH+VINLC~HA@-L&kO zDb^+T(1bR>sguaU%k)30N*5CZ*L9ZVB2B%UzYB7uMqy#h!%TlXsXzpQfJyesgGEG> zs>+Oate>JDE}6nY$7$2?$2IF!X+XVt--K3Mn|Z^^LKt6XBSAIyROYeQ?4sEYMU!;8 z61SC3($_jzREwDMgas8=%L?Zw^%w1K9?rYsh&AVTVPBNSDkhrpbG)k4FNELc_d-yD z{n*?gO+|38*-5u9FsJd!_Xs|NmW`vIOue*T2-1}D4-3NbPd@hseVo{0PdznKRDI7c z)AxBxQVPqRKYSb;F=?=_BhpbBy3c%ulTdVsk1nBlOb{Nm`f~nVrE3dOrMrhvwaVr< z#awR6J|7=o<5h~ZO|Op@_E=G2(f{TmeobnE_S#^Iwrw-0?95tLaMzoQ1g*3i0Jnb(UVPOMAd^V>u0OKuEbC~UmjS}fBjnthpS3~*|d^yo|{ z0Tlg;NI^4PW>CdPct}ZUBTi!l$4w~q#*^lJXGnJa>7~IRykUQeA1?WR>ld1$7i(9; zj{9?M4L$Z5BZfI%*7Z{BYQmmQr_y3m>nJA#6DeZ;j=QiaTgdHZn(qZk^OhsYAO%1- zU8#G~IStWx9etu#S(BJ&&c~wisReC2Bc=~OzIO&&VX6fp20XKVX*Zsrh(Yts23}D= z#>AY8&zivIYuQ1(%gic=!Ea4G6M~r8eF6q2bb?+o%9A}KAlH~mlg?vtUWkBb7sSSC zxK8(iC%1U9W1QY|w%o-;=3@*zvB%32@igrG4&@ryQe0KFH83CkP5ngWGdE>cpO?K6 zjg&|6_@;xdA@YTa%kB8wBl;Ave7i#&=*2*;2EIc4YyabMyQHUx8fZ>zOumkYS9=3H z&)sxtXqt#`)1WgJo-mgcsQhU#e^8&zue0dp-=i5R*kZ~7ttwJ90pIeBe$yV~l#;1j zhCSbXC#sTmn{`9aXgkL(^Q+P{x$s!K&Ep?qdPflv=M`=NsEtJP)@HHcZFaW3Ey&rA2ST zwzW2D^U)QEJr9N8J?*;-gD%_c)s7`s5w|kgR23?1dkGkR+$9i!t6<5xH-_I3GcpMf z7|Z*!rwLelJlM1?j?>1tVu-DZ;si@w7Mi}y^T2c^d&^tPhHdS~R8(mCpC{_(ya<#t+(VYCQIPeTuGC|$XpTBST=NMH7B)vkJD*otV_wY)RWiYblvv^uA`NK!8u zu^vW*TgyQpaR#PY!s#;hq?6DZpafYFENJ_rFyUZ6@va*MFh;bq)lXgsVk6|qdWqf9 zH)1;>ZB$oUfDs^ov3c6E5Q^nzFV^Rzn7g}_tHBkbsni0fn>bqY-L#HOLqz__yUz4a zC!5D+>f`}?9#<+4BvJNs)!cMh@p4{>7nCfOYPFsOBuFZu#@d69XxF6Q$47W( z|8^gOJWMQymX9y5S#INxvNC0s%15{B?wLo`Abw6mpn1Dn1KSSEhq(&fXNQO4b@pS$ z15FYr;{O4Ga)603_;$bQQXO?mBj`balm{KupVs77@P9bgA&E z{&42S{D5+kgJXjEJ75HBO$e7}6;HduqkOMNn(G6Zd>BP_(~prdeQW7UH!cYab3$!5 zO&ObYsx=@RkgNk#2;O^8X2x+nw3C+?n zKHpLKc*s$*3tD^mp|fdr94SIvamg_rs@`=r(iNU zEG$f!Lev=}N4^J+GuI?4NO+p>l%VbVHln#j_6xh~q{@6lKY|f!5*HED_igaA1op$? z>b!GDHNDlltH(y+p~r+>2Y<*pbO;IOOSQxe&;x(DRJ^l=Y~me$of|zuvgdDREokkN z+>(^N=Jb-Vc&0|(hE{&>;5N3}v~_djDM}>`Fkz{nH?Oq$K2Enkwg)01Ma&ODxkkIw4JQb#+PYyM^cV&W zj&m|pv2k_ZKf~ge(;|UR-|vr!cH?<%iFaS+b*!>>7HxT8lf7b#br+{bPYfU3+b7TL zB`xT5ff7L!`;lii5h>zUW2wN|^3@aV#>cFGkJesBtAITp$*3I+1db^5fzcVE-aCAq zel)uS?LhbL=CS*6|1F*O@j=ll z));V!0OvV||GC}0qvYNtO?lte7*zV}{=h3<<%+92?S3_z^tJn0!t2BazYitQAW{47 zC=uANY0GDv5d*Rb!j4DpQ9HsAYL&q-dnEILm@JuI3(Y6TyQU_W!62KJ z(fj7%i}V;nf)yAYqBcCyemg$BB37%*P@ zqFz05?O5S@51FVclU}@Sdv}D0OU_qEQ|dPw)pU0~$`1M9@#|jBDKfsoRvlTgn7K_% z*E@TmnxZl{aYp+Eh)le9^w-@CQYkku4Me-%$zG-OsIa2KRuk83J7(UyGJys)>@u#v zEVdxvcT6IarBz?6<-@u(16~5R$5c73EQHp~4;MQS1E17!Q)L@^H_%Vj+U$ic>wL@Q zjcz?KH-=OLRF4RwT}1Hn$U^B(g3ZzS5`Oj3;ewt$%Mg7f$$6CW-Lb=~=363IGOSjsmP|7Eh{?Uo4k z<$*=qn=fl{X{1K)-A1^~q}y4f?KzXJo^)dNNfA@sB*O8BjpLXgv+x^ES_32AI$wuU zCKc2)y(euR>l!mfK+j$PyXg&oX~(jn>|3;$ zZA)|W-2y6?BSK7dfN{I~*|SjUnXycRN_{lg1M>ZvjkRV`ixRa65$^+Y@x{Y7Xz8HCD7 zC~#)ra@!N%^uXL$u|X08%}oyYV=Aj|)^cUM^!4hS&GH7B!XY76n~81xAC z>FubfVvETNPgoZ`?B?p%!Fr0;bEY@sG5HeRZf?Da_Cob`rQA&T6|Aw?b4T3h6U5Q8 zo^z^W720bjk?+&}m{zLod*R_HA`2erR&;S!eLxF%5hJjKDOT5R?^`caK}3p{z89ZN zO2pY>2b;+@e}^K$vC40H_Q(in9TQ`16cKIEy%D~;(~tc(PdSJyHD-7gu%mO41$W;{ zbOa{7+Lvok@|!DC^yev0s?GAsUyu-0XnNJ!Y?${CDL@*0T0d?|yid(Fd}4W76e;$= zqX{mf!Nq<yk zlCpVH_~1C?vWiA8LJ`GcmDc3^x|_ujBcejlxhk7MvJLt>K0h`JZJ5(v_zI3TK3V=2N4qU(*m zj9hsKNlF4oUmd6|4X*svZ=RyQyO~K+kmFQWH`v{AETJQ66tciez*XMFs|*@dGWSEZ zz+XZXz=PrVvAcc;nc_+$+gyOI&Ugz=8W-kfnD+DintkOD zDO;X-y^(!-wrRRA7fBt9g$0uo*Grp7X3Ac3CEre`w!Jtm6%?rp8I9A_Ybx)}^G`T# z&K-KGwWEhB_VcfQQ59%c(;58LmyYJG=nnY9F(ru#h-mW?Jxj*oEmExqkCF8xWLOkH!4!jNx+M(DPGvs?X5_>GO5=kwP1elHFx z+#)1q!p3epf7B=R@eOt~Pq}?wA6tIVP)ri-skFqsDnq7WlPGY?x>#2|3vU~p2HN*ucU^Md+C_yFB!G)B8 zXo$_BM5$ON`#F%T(kC#kQ>VYXmmv7zp?Awh>#s@fR0P`xQ!-BjS%*GusS@4GfwkKo z-`McQ16jEuWH~I2rB=69yr)v{Y3-(orTmO-2~m@3KJyNYCKD(qrVlDN|5UlPlsQxKlSrv~II_#MJZveeB)>?*gJOfJq;w{tsIA#_0cnQGXxlx(^G3K0W{dAl=Q$og>@; zwBuFO|9~<9upsvjpx+M%I3r9eNI&@tDbc?`zlV}gJpTqnqX2R|3V@gp0P^_noxJ{d zPuAc6|BDv)j{mvm|3aA<$nWm$QRjpzYXN8!3NQFV;tgI86F^y8TN@as-*^d!9(XC_ zzkYAgTPT|@Dk`!9AW|0S?)RUye?Ku}$xT2-r9DFk9Jg zkCUw|y-%Fn2~Wl%B?Us&!0Rr#G$}%(qm^EvQDdsjQd3b;@$k66mk+_UegF!r0%oh* zgaZ>O$NeF=CT5OU4FL7oiHLw{Vx+&Q16&FM9-zfS#jI;+Sg~`&aCd+AA)g~SRQKE` zZAums6RX&*Y~&9M55NkL4EU}3n^!Ox@XkgV622%ZDmzWvQbTfB^T+4Drf8T3&2GhQ zZ5g3IO`QGw{EABNafrWd;;FM7JH$bK5v<(GqauQ)G*8Vi(N_cB^T-*&0sU zxE3w!>yzI7h+09cT|RALnY<|}HE6~;qZ-le($qAkGO#&7r+C(M^h(ZN(-s=K<c#mOnWrNqn2eFk+-O`=A!+S^#|xF;4^ znt924TiMy|yGF64-ywgm{QDwj~jEw zYf7IXf|+sVB=(hN_rY7&`H!fk!m?>;jxT&yn6(_-J%wZ^#(RGLY)m}y5-xi?j{z*b zQ2ln-*sfK;>H?+=0Hd;8!yg04Q*!`$3T#2%(mLdHIa>`OVYkN5%ePrw@7S2B#eL6h zifjQH_MHk4n}SJ_`XNT=_dqm|5$At|#sA-Libc$TYlI0nU8(oG-j3>@j#N-L-*&cc z6045~*^9_N0KNYJIDo|I0dIjarIkRHy;lCs1K?y#Yx@xwIF}(CoWtk_#uelSp2?tq zLeK!*$!ql#iEgy!M(D!r!0o3=WP^IGbcC#ip{Fv`aAE|TF4_baz)jtkD;KBHl3%kf z6)nE-(!TLl@U;nu5eC-*04+>FVn0`jRW{-^B))DeC>R@3k|)wPa`YF-C)0lj`i;NW zQ($Ih5z>qX%AQd^n#02qmWll`zxObj^RJcu3NuE=-)xX=_*>Sm2hdhf1EQDsuSS5Q zKOw+;PlKuwn72moE=@;Wv&2tYBfI#l!~4zUI*Jjc+ZE{hubmM-Z*mOg`@z|kijb98 z&bsFa)P1FKtc3vpJxpLt5K!G438{CqPKn#~xWN(t+ZIyFD*OA!$l?I# zb|8p_>W%`M1uX9m=w@tpM?j$~*olA3%M8BYZ<>cVr4S#*1aLQYIkSi6=RU4KI1ySb zjOkRky{=)Q0BT{&wfACWT1NSLCt(UBtXSGXr_SGu=>;ekt(*~*Jz-ntrpLOZiS8V1 zjiBA*V;y|vp74YqGDDNfc7f+0ltgsBxV*AMJ(eB6*R^=YW|uB}BVrRl%f7!T%+5Uf zArH4~{+sIsBz;&6+(S%<9@G7G=CgGE1Ebn(9ux{Q`MUtu-KYsLm=K_nA2O1FFDmL< zc@y(%;=sSk?MRx`Z|f?HbzloKg{Swn)%{}I9t_S&VGgJ_sSti!O}*qK1* z_5&Jf7WWN?6-F7mz-!fnCxK(10A%A6t69&IWm)j`&ogB$b8hJ@opg4JYMZEAn>Om) zS23$+hxiR-9g;s2hII8w)|eiGxB&2CAZAW(SSSl!?)qKpHLh*a$Um4$dC%6mFSM<2 z+=yLHS)`_7a@pV=SW|5{=Ez=D791~9Xt((;LEnfRw%R^3QAw7`T(}j@8^G(l6o-~A z({?%s(G0h!xSXqgr}NH@CPqgK;qciuVgHd8cWFyXpWnjAyrlP0WJTuwWx?vXcGWj(iQ@LN>IoC;(b% z87H%pRtQs9GCSrv#ZyL%rHmditDOi<3N>V@iL@~AB`ARl@XoWvu1~B!>|K%}-e0_A zqxg%L5ga?_#J6AE_NsoGse57O?7=A}7z^NVnl)X|MjiP>I{2gSwunI4kYV1>(6V+%O9+5azn|K(OSJ(su10Xdd`Wa@s22)xLuE!9Yk@7% zXUSZ9>g-mpbGgw?EKGA&WOrKWwprMEQ-NlNWbTBgRPSe6s)2y3so_zaK9s25&p&Yo z0OSUIz$9~!t6ScnNt@E`dTCVuE@FFY06V8YuOnwH6+ju`$UdCp7QE@-#*gOPO?59Y z497ELy^U$pjK4W6_^iZ~FP!6%QPA|+cQgk}qBi=2d{Ss=UrD)^FJqb2IJSy>`rvbF z>)p|$t&@3ft+N8dwL+$(n|;JPvfWB6ZdQ9dDylfc+%YQ~_k$0L`}^AvNSk!bK=k3a zEM_(_4V{zg($WMrV&@6DY4+IEx>P)D376ox2+ccb8E})BkNJ5zi*uw*>6jI_plPHs z%QGhr(C;X5TeLTQe~$FrjYgTMfUr82&UqFPi%|p62Xo{4K^l5hh^97oFgQ>DZeja0 z?qqv3Kf*K-cMt%80yu%&sW>(+lkvpLROV>9(yiI8x})hB>b>|)wCZpz28_1V=a2hO zKAs*q-VU!4ami%OHR--Fs}MS4_KkQ3IUZsr-oC_O(!U)(`AiI-#ENk_IOIWe=CLHa zADP5S8cLMH-c@REg)8yUQDF_QT$Sd}>5F};))s6Pv8&e=Aq&Hw=ub+T$FL>;Ne$E^ z>Vve{-cV_alwKbAJndk;gCPa>w%9EWOmo)o|&Z(GxV_x$4d6z7x2CRF1AS6$oi)X-2c8p_I1(}O_Fz-gSoUtt@P zy-vBNjbM9Ak4h$F#*Jp`-7gwZOfB8Bfz^wbWC2INS1&S0@i8&^*kZO6lccZ-r+gPV z(J+UH60uZlrwn}o`0HudOeqjSkk?|o;;We^y}RcRrphV}D&}s7-^!e=X^FQUsnz?) zI`~GWE;8E2UF|96vG>EA>ta>1n7YG85qUs#l=!_W_ITZ44inB9M{LeKaVz%&_ku6xkoQCv(y z8=H#90g9l;8bIs5>&Xl7AA?pbUcLPsgXN;tTJKzcGa;CSEd$oH*FaREH9!kTu(Jkf zb9lSH9%3O`SM1zKg^X=lr=b(>jq`4k`_}@op?#CQd1H7L3KWS!pPCk}s9=Y!Tg}$d zl^?9;hrmCTvI@>r`Sqyia$cIM-BBNY;_=XH-QP@T&>fS>$P8^<3`)c-otnL?k;{l~ ztJ+I0_-ukzZOOiLx$vO{;v>5{@Bajp`w%devZp+@eh;?9LOYHrfdp(Nv^&J$`Urus zjW_h-?dX#*^N6s}OH?!}$K&_(ZmhqRWVf(mn(U1_9V(~RL$3)?V`^T|eunBT5$RX# z#nyEaKup!#q-@=S`?0cJ#!ND=zRcAz0AGO)x1yTJuSsBwZYBxM%Iu@3l8d&S`J%+( z++T55*ZcKQG51J>WJse0QZ~=3%I4*_yf}yE49{^lpMTpG^uWmMuRt2PK76Agq|)j# z7mar5)_j^9g&=oqRoX&A2;#*viq~zS}jd2}- z7t3NHZR(uEbJNtRO>6kX=y73Xsq04x7ZL8IT03{7QZJ{c$1m zPUXjBA?~%cTvnPv-Fe2zQ%E{HK7-cHaXHGcB=aZs#88BmX!XkP(s*+O6=D(pma|l& z@QCJ?ziQWQci!`Yq{PR`J>b3HAv5xDW><*uEghyL7GcTDo4JLLL^%U@qQ{LU?ZV5) zEHtrl#lv9k^e4EdtEM(nOy=)vcM|+3+^-xew5e*{v}Jx%7bh#(-PE}uPfs_gy4TJf zS?hIKMHY7ezW~g>)W>(wa7Kk<3GXUSgs^w_l&561ljU8Ppr z0>cmTe0>r4Zq^%HG!S)i)B*pz5$)Qxs7`^+Y{Tx<#b|9ZOFRXT<%UJMR3ro+Q=tOH zfEM)jILqe5*s#dZ8TN8!Tc!U-I8rdkdgAx^`W3l8_Jr zAvnPa?k>R-7~DO$LvVKs!Db)?cMIA?Z zUTgJwpXb$U&L@vM+ltVf#&YZN;{oJ(@;b~27>=RWWAZ$mc`jQdR zF!SktvwZozvvlR-=3>f&kr7HFP#rBSJ9B~^?wlU;AIN93jj%lfA6{w7-%(!#V)FP1 zq|$Z%VRorefRSm{ySuU6!O+~@ zGX%8&GrMjbVLD!T_$4Z;4p{iX8^3xvTkQcxR5lwkW3jfhB&Q1S?bc60Vhi)M6mGRS zCeWcP^KVz%SCd{c<8C=anI~Gl+ zHL8p6d^GCJRYf@6cZ(ggYGOQ(^BcyoN|vh&C+F%MGL(za9KU{!M_a*A*dZ=>{(O!R#EKPHG){`lQh8U zelYp70m{7p%Si+w0#K_*W{|5(BAsYo1&-+Q0_%*$TSs1?(llizHHbB;o_yC?R!p&L zP-iS8(NHvH|KZ4dJ?%FlXl2XyE76a5XvuvFk0=n+Quh7uI_e3(9RdPbsRL~r8wP{v z6D#E?v@6KTMuE7Jg|KYUAY|sr+8d$kF=p8P)cq;N>*}~>*ivUy)vGD<@LRB@MwNp|8J1bk1p8l8js+QNR zXZLy9f-s-R(se);0mc+oP9W($>TNMs};oif6^mYPDj8y#hK&|t{=!uy=(ltuDK65L@stS$CBML`_?V?t}Q%TGj%%$6nf|Os*INEHs0Ji zx`ekiBVMpn@KfbxOun_amE;B@rBq8IUGm2q5Wqs4M)+LVn z6s{u~D_5uE1EuJ^-$wIA-rgkH$018^l=a1Z!~_kj85(X3NEEsr_s4@mUdz8@zD=Gz zKWNz1k^g-^A4|WdLwlrvXy{||lvyl$Gka}FtL%{-5!z_8E4m=MB2|%b)8sAN%b8GB zg*+@`aXF&-xcliyWTVB#|LaEW#Fi%mNS6kf)OH`5M-zXN@(@B#A1%2``%%Qi^xP4r z`@c7!(@Fmb_W6jV^xzM?J(b=OCd<+=3GR_@EMj3dsd|N-V{+{XZsRQOs~m3(v6lN? z+N3FF&%2*w50g*!sk=mAa8&)_lxhk@e&*omGxvfig|ORT!Z9@jGB_UibS^}SH_7~Z z-f&`rx(VhUG2iPdG0iED!nrx8h>wUGet?KbRQvfNlJTm=KzHA4#K&(EYIuatHD+9c zD&Pq$7tHRK6NV@EYaA}Mw=FvYXh%_@>_oUYHqowEAFcwM`DYFpNJ1YEWx{KRV8f<4 z-!Sc`&vHX#=?=K&&I@o3d!0$whIp{GxhBrb_Xm$23#Vl1P4g2dnQ zzSmxLrn>0MZHKhHV8@ApPU9d)pp<#dC);)VCTn!hO#v(~@?_4x6UUP~XsDxm$p{~$ z-15F}r(<(;d90hx(uUTKzinO%%G=sJyjqakdFtGO8UJDH^4}RP=RbGr)u^O0V zwXu*Ke0XiUtQpKwDK=tDCQ!^BGHoWY+6`^3hq-`|(_+YY)7A%gL~K zm)T$~esMyiBtRF&_jsY}dlx_&e^XukczIn{Lw!4`6FH65sai-x$Fs3i30bOD>a-HQ zSbS2yDB2tasu1Y#aYho{&O@#c+-9r7J>oNNxjLr!EN;`ag1sxW6<}~px0-Uwh$yp6 zoUe<F=x&sra^R*L8(*#gdXh@RvBrW0XBY48~-t1dF2iIVB+G9T!#WYCoJ3Dgl zAdDdjCrO7k@6Hb2lq6UHj_(!$JZH1LyUaY{VCplAPNp;OYnSdHxZ0&S5QT{axfjGJ zz?Rp>6t^UBNQSof;Basks%gpO!h)ID23sTbtvUSF5CTCWEg?*>tkVO8Tbl}$|{56gZ- zwjqIR&~c7CI)BKUr(=1wM_61*)M#SmA2DH1(LilvtD(HmE~~`N5pJ0qjnBsGbk$rh z9ajfGCF*VT?uz^RyqUjTW^I)QnZElHmhfxYOXj43GBeN2bx6l3mb<4uWcam2o9wtS zkl)q)9I?qLk_aCS!+!Q?CYw_K-GCLf+q&JW(H}$NovBQkkE4iQ13VVs@?UWwY&X@% zlGQI*!zEl|gMPa^=5`iDfj!YFUj?jGqU%)g27LFch+@P-f4!JO=-mc8b-PWT>r7Rs z^s}($N0*vn?JB!5;++4!OLD3TX@qepk!1Zku&nkxB4_y;69iF2D2PQg0uwpEalTVH z;YkSU5Fw-JnddQ1X?Y3K`wOp2QLodG`Czs@pNz}{Y&BiCuSer|NnVFfGM%OJxK&SS zcU-UYbwA`Jzl^?s=P`inSSA;Rx^V4VQ=jR~-9MUAl6UjgE3)ing+DpFC5d@F4Z9pE zN(DJ}FH&bThtj=J^qIC;1XI5b3RFH4PQUXeaNqt#XkooG?>xaEHxM*w$Y*)$DtEmg zV@v0y#W%N=*%=qu)E`W^gwqg}bSS;hNtM3>{U%GEi^Z!=MUq&=HIuXbx+Q};PPQ5~ zPyf*fFTe$43=fE6)-hw)sAo1&p1xNp?XFJD`A`mgs!MiD8a)IvXBAgTJ@urdD!|)4 zgHK?37dx zEkN=W4n-nd9=*=y-lctw5cs=?Bh_XxENM7(hwW)2yfvht&E*gEl@6l5*G*5Cd4ff( zMI)Kxpu{G)CZ0l|((;}45zcLF`;1aKXCpJpfe$=CRts%oN!ZXQ>c-6w=k+CP`>=1d%R14qZtjlSfen ze!{O2qL94Fpr?`I*N!?(u>NU*szU{SO{(E(5!CR-EjB!n&>hW4@%O$OEl2lVGF@7` z%;w`zh{aafI(Ift4{ZI80mm!3v`VhgxG4^DV0_n8U%=>TqPv%9^?1JjX1-X1kRD^( zTo^p;GaSBr{IPE~nkj?LKcSe=JeWRhb#JAoC7U}2wApfSzsqpTU6tc;ZoZYuYjDQ> znq!`J#X?}SGd-_IZt zoZ~4V#Zb=*EiGw>&F+}v+zsl!6n{3z!?LbwclV?Ju|m(ONqzND&GK3uv`jYb;UMQG zM5uPRFdB~Q3%5ajX6BXscJX+($@}Mpr2obwMcMB@?MAyq6st zL?0j@@HRQmWn=xQft?s&E7?ptuRxs1M9b6AdCwPC?{@w>Jpb=tU#T;T`brKSxC;{x z>WrVTX2RG=Xsys2(2qnRI1W8j=T-t7UX|(|BqGQ>b z_PYzNM)&Ts0Y>uMqj#xKDNJi#YZPdB2cF^12`@mp&B24+v}of|*M9B3sIKL}H!0jy z7$Ul=5`Nj#;0rq?3>Hk_?%2rh{24`s{kenwLKd=No4L8j{4Eap`e_}gd*6WO?`zw) zkAo+?Fhn*8xmaQ6DRM5?onW8ElwAjk&-kdx(Z%8a=?lQ=j|ttZSp_WXI4L${^PjupTh{S55T)5PVm{c9HjT||M;X{?yI-2 z5Y$r|e`F3&(V)8G0aKRX+YRfrn=&;^_tMJsMJVf)QADe3)M$~BM-(Ce=HUlkYC4v} zgkXxGP>t8(?Jf}sml|}1&1kg76_MzzBMQ(nA7T0p`r9@8=*h6Y5=+=;dbY`F}#Q#{A|APUQ_z3uKw0A`8^fLw-R%p3bdKX^N zC+b-Vy#zsA04xuof;lfk>7#T8u+putWqEB{`JF!jwDpZA2m@ zIT1F)hESBde4P=MJCF?ubthkuz(P;!mcP!QG#Pc+x2XL{#2o|rJLqb4{Wr2$K*@a5 z+7b=ZgFj{|QQ-Xy&F+;&%Hi0Kf$V#t z2+PGlt*`6>I^1VtSU4n+i87dT`)>9nd3c(=jD1vCgMb9RQ?=)3g?UrTI=Ke!iBlk7 zh8sY%d?#nO9-j!tmiazvm4;Dnp@;DBjQmo0>Tj2RJE8N--N{mko0YnAmF;>aKR@8Z zt!JO}n&k7msHBwL+Y!U=ZeQXo&pQ0Tu|Tt$CA=%*@smJ64Zj_mIm)KaVCS|3=Nm$U z3Y(LOu6t_ui7|BW`|`_eVuH+4qDy3xTn_Wv@@eHUm!qxvv3kK^aP=zG7yeBu?`oY! z{z_WsRUo8reKIuh3I!FR+9LG4lY^;^FWr&{ji#KS3PoVWFS8RV8^kM0Z)PvSh1aFAO3U zO^af$*}9DA*7g;`>AMKC6K^2onH{~cCDkwM{J(4TY`t9cR@hhGGT_6mi6 zh=W_GVjvU_lot6K;QiP$ZjGL~0H_7J%V7~JxRH>Rt_wP%<*i3Fx!8!m+euXhv>@Ue1QYxU@K~u zPK#N#v%!f;?Mp@jcg^>#{wm~Rswck)NRt6#C&^%WgFipMJd++#ixuVWuu$8)98 zj4tgL9eqY0oc-Caj8X@m(4EX_AR@P1G`+eI&;78JM-6AulOvl+_FJjim%G`3t2W-W z2z=3}c?k@ST8OBsg+?l#egh8HyGbxOqh*0lVp*(B8!yUUw~gE zsl_eN8g4T^!+k{5?*@1C8=8X4C6jnBg3;mB0V1iOF}uChwqu5wcv8CB;GHk6>(nk^ zqGWz&P{z+k9W=~SR@0qv`w>H&_&+8y*l{$i_5o=S!w7EFqgejpeobZhAr`>)x>cx} zE!%kaatXovmgdxMt7ZKv<5FnZ!}+JDFhKUE#$naJ}GP)A{!15?YtaUlsyxW|L&xfS|KY!<{ML29YP zIkeS_Jq z2X9xpU)s@NhtVqo8AizJE6GR>vj@Q^^TCy<7hoo-wAZz52PFavv6m;UQ_kJL$fz`l zG*+#;6!6HDMJoaMc2czO-mQ5dsu=s&XyP|XJ&)WBgs1nThNL9r zv!83w=b@0!wboR}f-W;I9L8U^Zj5x&d|*U>okVW_VxAio5+EOWYHDRD_se3`d+JvZ zLjWJXMQ|V2*b3}C^{&^b&60wdMVl07-J;KrYA=s%5vqm;FPbLYeJeIiwCo8a+ABTw zlu!>t*ZP_j*ny0E*@^ox;sY!$({HOT=6&*wFT+71RV66sDYB;rIV(X~9_AmL`7GA21ivmGLMlx%^m z`i0y8nPm_un7VF;-o+Vvru0v zLUN?GI;Z$o@#ZxZEq|*sP#E;|8Z-pAyWuU`4UGwSZer+%4oQzV^!xhx}B6I%2BGt{Nu&_{jMrEZ}zu=ix@FC*(3ZFz?G zb$V`|W&39teSaI*bWdl0SJ`>FN!wLxm0+5DEQ`;qNA(TL#1->8%RG~OqyfvJ9E+dm zdt;g}EtC{I>PZ@?#0(o>!bCaBigA_JP9V3toIJCGV|v_GO>}6r;uI-$qmnwB-atI z{r#FAzBu{^#gN*(AuFdvLSf5?>qjpcGo6bE{7>Nz7dj6Y_>+5-)h0nPB@pE%Rtw_& zR33wv0)Hb}>Iov5IN|$EGt~E7Vh6)YBHH{oO&%e-4;hGKBfp%HBk9zX!q(W3XA3F>kb%I|;2 zEiW*`W>CkcPHRo3Me-^##-P2cm1+bzvU3g=YIiAG6!TXz){CF0zEM+<;5s{1&&GWU z&uAfX8Kf$>i4aRBRY4E$Fl}VI8W7r=`;aroGuk_4lFS||_6|F^5-}dWKP0LK!JP12 zQZ|0|RCj0L2wJX!Up@v&;JAn5+F$pMP47)4_bRneZ47HQaDc1`7w5ptd~ukQ?F5V* zz-D?4NAv>*$F%{xOL$&f8dneaX-?5$usDPw1KH-!yp?L@)EeJvC3^8o%1rK+9}dji z&>Sz${K1}Ast?FCO(r}|DoV9tO4VU0je_neMC!Fd_0*DbwGv;DO-#;DI0=~FLsO8W zvzuOpsu^LXn(Qz0GNth_vBAiN>su^Yji1N!?SCcfpRKz*VE&wMQAdR2b9Alnv~TY{ z9>1>aOUkL`%|x{Gx^hgEffm3?IY-Sh8Y<-ERjEAA$sGLVz(yKpu`x;72vnsqO4^no z5k-)qr`GIzz91a1ngN1Wm*vjf8mS3uk9eyJ{unE7hH~U3Xpj(?(Kw+p_tdq-p4a~I z9_Kic(JhptFFuF>W-~i-7#Q>)Fc)hK$_K-b3w|Kmf(+pECaPB*%mV60Wa$V5fw3-3UO10D8;1 z0~jU$9}SuRuK4($m_Yyi%Bbg#FIn;)Dri5_HySBOY>-+5%8xL+uns}b*kqFtoW-CqV_V7eyN1a(M@?8m_Vbm9T{&8vX+O5ha z^FQhdI1Ew5s(XT(&nyBq%@}*%1W5&ZK8IxhW8+~9@4XKE6xk6Y4HatIZ^=t<2N-hW zM1i^pjUhSj9Wg$k0AJHQPRRuVjWMx?&$<8_9iR`vTou6aap!3J+XFdhEt?TFqrks$ z{DpQ6ti9(R8k4?EEQLraW=4Jdx8su}HK3&&l2U}=+E+ll$dB8X|8xBaS^zhoSW2?< zW!tuYc^YTGvLQC!1~s3FAl{eni_mbb&{`b5)9EO(oG$eSG$F`<67dqf3Km_v>0A$^ zI}TQ{{&>6J(Xm)D7jpn#&KUFd^)!mKN^`4MC;}9CZAd>}yr|VylI`}|k}0W)+Zc`; z5ui_4oEocun~umpK_!11QEUrjXywELIBRii;mD0R9Y&2PdWcSk%AqA~3CEyK@@9*) zW|Q4ihA;^9$rn%o>~~uq_f$DSK?OVSHw`GUF&1wK1e#XLBB39m7H$Y$fk^}r;LjsmCKqp2|hJ_DW8g~sG zLWzsqZHgWYTg|U*^W{X@5f6OsjTUa8zH4x50>4sC8O5d|Pv@6Z{r-%+0YUx(Ix8=! zi;&$ELfZ$-tcMIA!T>jK)cyWH)}-6?Gj4XNvj=cWO?ks2pZ(t#z# zvG%!5Rk%X~xxeb&w7tp{#7-Xn`10V(jc1VL4!n@{bUSqJk7Kek19|KqgX zN*XHZ`E^3=W%TGfAN!TcAs2r*ME`uo9_qt3BHu4n%H?k6QHD16H;k4?S%W@ryYaiX z%6z_}(P8ArAXd;|p!KzCxF1fKntM-wQWVW%u+?^RUXTLE@;OHg1g#^Y<1c!bF|+^q zhNJk6uewH`?hEi{O9Bd}ttmfC2-R;!+D{qF9Oi@K*9e_p!<^Ygdy-~Z-tkcq=x2x^ zetRd?AuA9+Plrkqi_q!hzI`r489#lt&fg+KT>G8p!iaU=wUlbhr>QL8UB4oQvkE;g zHB^ytbyfzM$i<Uf~Qfl@1T>(q~IEj{iH5$;A@`!$p*AYOESdJxaPkbfY z%{`wa)m)_u{eF8MbRqEJ*wb#pk=XE_mD2W8x`B}86RmcWLewQnl{A;m%suCDP>;y3 z)F30<##@#kc&1QbwZ<7(TK_7!Px|JRv*Ba#s{R$rAw^o8Yi8o2sYl0s%qOb>3I6bN zg$|@6&bl@W%0Tbyows=z!6`w?1sN?jH#aFnzgZZm*Kfg%nSs%vdK$J&ZRD`pgXVc+}Xz6no6j#8|VJN}c`Ktnf&K)@idt--3VwI`3LFd5owsD3SIni_C6f)m7?r!6fc?xku4*JzPcAqXB3Uk6a9w47;%R8G*dJ z{^K{>WiOVm7WEDcpE&gzws>49Ljyy!?zGwr>c_7Ng@3-Lg)TL1g{)HBf;i!x7l1Qt z-nj4BXu$p^FO-JxF5hznJ&-(z(eqcyw_Z{b_ngBL*})qTOoNtn_0&ph$HAMUkGOmn zfjicZU!q{|)%L#HbB1^Ak*&=#COEcSYAkW-QQE32VTDMgWa$yujiLG2y$V+i4Ehq@ zOM2(W{Fiv(&$tYk7KXIpDjg;?!`OpKv->N2_?K#tFGJc0(`OpDVC3^%^SRHUK}=rG z*DG!xc^*SvXf4*xN?BJf)OWPjI1T)jGUvT?H8GHa=l<9Q}< zq^Z@=@=_(|upfLETx?p(s=zrhx0fj_pX#juIc)-pr2j6U zghG(KlbFz{kD(gF$t&d)G7mU}m$D9Sjx{GnABJpnKun^5*s)2TnNKCM@J@*`H@xO& zj0tb5(BHYy={8wPUFC4PKP~8aX!Z7IP?lIBJWYuc@;zR(e&o$4xH z;<343IoZ9#C{PWWZfR-#%M0wEL2I-Vg1f>4Db}GVvxzCyWDoo*RbL;6MtTf}>FR7mJ#jL$(B zZ?jmd#57Bl>Cn+p`(o_h_>#37jSOHRp`*_7mlGyO>dcuF!j28nFLltows1`MIq7nU z2$EbVjw*1|_9S1Dq%-Fnjzh1mwY0dgMVH)?DlsD_kmO-#`l(M>{OAD>7a6b6F>MEq zQS+P0D6X8}i#|GU+w4azN(LmWE)zs}d-;mpa+O8&IvJ&(yPkKdVoUKDMY|6~c>Y~_ z2-w^?PsytVVlX_f6=%0waJwvG4rKP#G{$MSB9ka<<5F>~hQc;;h1G(4m$=tVh(I=c zr&dF8#v*qifK#eot-~(2<$c4;MaMaoAED{5BrZ2J0(nHe&;R0kkdC-gmoa(IZ8y)) zt7u!s6{7&atEJq$WIRS$T>Nl*SSu%F1os(Wq5GWH7Cjtfc6p)$%=#ltuZpmg=FWe- z(dVvv+u;Hpv?2oNbAiRBp~E(^_rj`;%XpJtix9Mu?Z@K@K+*pf$Had}<^KiG1F(0E zSoGgWOqra{za7^dB;9M+0PUQA`Int5$(bXN8!&ABn1!?grmV53(B%40^=Ny55e;N) z3@P?Fm;lU^c=UjYjD&l22Jc_^n1ThbL`+JN-)WEEp^@O9AOE~eTR(hzAOZc$<`3bw zY4(!>n9Y{|2LfyFmH*9s2H}Te8F;u=PHVbH+vR!yo8w9kiWV1e<7e{IEB#DK8;t@gotBV=Xe!(RLK>XVdWi z$=Ln31N+~cY@aZ3buiC0cuNl$K7l@fbP9yWQu_?nAiZ3pW*nAy&H>!%e*rN1Y-C-9 zdbe*-fjiN+di7J+{JAqxpsh<$QkH7s#eNV-VbPu0zWYMShGog$Tp$W4y<|CSKYbxW z!jeVaTF6mr{StX!Mz!j~bkSEQtW9GDP zy<^2%WkkMy2tNg5B`sv>;bZ&qf+la+1rHJrp9q82IcWRHy?d6c1-IY?PLue z77GG7KpZAHueUa6S)nKF0OJ-U)gQ;${nJMro4XNguaKJ&2stZPfJ$Y*h!9)!r+DA_ zog)@ItDI5&;lrp&a)T5q4^oXXfxHqoS4M?Q_^v=np%b~lbf!}EH_n1ZA zb&%Au$nT_veFhml^ZjPPanHCjh$o^;YoN*_CPOj>mHD`h_=rJs{sRB!^b0ef1$l#4 zra=l&0{l}YC2L=XxWzJe&AHwD7pbEpRznS{Qff6B4yUfNRlsn6V=gVJZVn`1Hr>(G zjG{fA$fpIZ{aRsaW5wIhev=|knA&7RVr$KH@`E&RSx9$1kEqwg-2H54EOV4-MDJy5 zW0^Wx^EB60R7)&JQ0D-Cwa$#Shg=#)nd!UHx~n5Y<$UvnK%7$?w)dTs@E>8P5*Qw0 z_Uv56Pj|y7e>T#CSjcOt#3rL^ak(N)Vl6oA5>_|T#|%fFIJeo4tWV7Xoj->~(mzowsjs2ty5Eeu<-(pgAlctL?v!m-?!c~m2lbHL0v2Cb-$uS! zh@g&6*MVTc1#)3Q)p)}C;(Oy=-qE(H#=Nxp>~Le2@8l!HIk5aahT|;y!^MPjBiBrm z3co@nU~;fVKB+dK|2aEkGvyDuPQx_sixg367|R<&ThElT-4l{Cokl(=$kQ*UwS0+bG zug_|eL}VAR&Y}{rBv~SU<93d|)38u>lvZ|JcP)u^$ICa*&)>(Tww5mTyL~x?!HR+^ zZa1|dO{1xpQ-g+@W&Hhf3G=-54h2cNixGu1MUgddL4L#NB$_j@@L8fo>I&?3q>>9z5C0NaWmc}; z8wNi@cqq*mmcNHF4%-Hraohh|{4LuTvskZfMf}QB>)^T6g;lr1UoOj`8!{@pU_x&YEiO1v0i zDh=q3ICd7Grjkv+5kl2J)Q_=0Kvfj&REkIVbGYD~9UXUMaKwtGPPH3y4jaYGFRs|O z7>CLYB~9?&9Dug6#787-=kU{@WE&*4oc?0o!+)ez`mnb%H>ee$xiwm{{T@$7tmvB? zll|2b`w)mF8XXMXVmu;U38iM!oGV*LK7v*c4O!)yE8FIuNt{(EdAO+Fhe8-GHK?Nx zBg7@bY@A2ac#L`{bH&nY{dZUt{Y-Nf@uFxIHD4&&$qT!No9~aok%y;J%=!`-_0DUj z^-X89@72$M6xgFNwduXk*2RQ((8l2kZ;Xl#t-Ar98sB(U(`(7TnskWINmi;7vii{g=(#`50SLpyP{ zFAwM)vreikc3e5jG00^Ffbf8F(xgAG6POp?9HCd)Fb zt{}K{?V4i~*u2UY?Ix<+Q1iB3H?aYF^ zo(x-W>B(l+4Q?Aon0>$ml5~(;-h%Q6zU~)igd*bdG;t~|J)ghu5BQF`RI36~X>dr+ zF;!nw1181q>ktpMTkbTnBRdd;uEkJab9Q}#E68f%;iBcFr_^G(yhH-6_A{U582($`y4yjRnZCm4S_+)H(QLLeB2t&fjDfn<<*UOWaopR`kxT#fge`k~Fma zw6xi>YPg}vWtnEx+X{h4QD0MH5Qu4HN^o)x)iXBH1M=hpm=UuF| zijq~FkA$iBIo!4gwk?+r5)M&IJMx~N#JfX3&m1l!&oz3=Q`58yuN+!LzW$?+kB_Rz zMaZd?PaB3_ROw>iRi4u~o%)@f9J{VVQmuwLRz38V430mX38!d8utjYhBM_yqyP_%o zzAEM5J!mUgRaB}(z1twGJe88-(c)|S02DzdG6+WRD}Ynxjk`Bv)d;K!+t53gtzft* zWgQLKBzKcHu=)ji#aeEMD#y;cS(CF;Nlte~2G&b(BDnCX#%@KjT%52DFWXTAVWk)7In|pE!t~)#gp&T zTujSE#okRTw$vcbS8XF%5k?+uXl1&+99O%3hlk;1(iz}X=Rmp?{{yG9ccIPzP<=}&n)P7Lo zZ7)ev)%Qkg$jUR9G#*@0*GN@WlU83m`m}G_Wz@xmksa$N54T!xKpFt2Ao}hTtgKM=cl_sWTuj zstF5*kz?nFjkM-snqO!bCHTd*-a}EUlB%AT(hrVr+Y7w5GM>A)IW&DL{T{@M;c6ZANX{_W13%n&9)3^4)m{d{wol8(k!d)Krq!?lk88=UMHt zqs(=?ScmN--d2PD+4DO1a74MIHa*yO&g#!Kcv+z zLbk`*gSNym6WcBNJ;Pm;`D>m=nlyn)gW%$cDMm>Igt{x&kfVp^SMv6FmhNKnGTX?o zDV7cH6{oe%9@H0m`#XEek0tqOgpsCeSt4#?K|vjpVU7XgMdh@bi-J(Z_>2QAtr7Z|9n{f<+|4bN;p|g z<*%#BDfh>TT5So2e5&ih*!C@7UE@E%c60BM#X0 zpzKJ1ekEd=ND0NaD9pFi+t-wN^K?nwM{V@dcrN@VeQ{ z?#E~RF5?NC8oAh};`9Y5Kr#AiKJ(T>5y6bAV%LWE(SsXN@725a@luf-2{lb@?q5_Z zB#-%LVy>*DQ7H#T#A81uXi(K;l1)#@Y0dA{v+y`nDHFMVfNjJmnf*f)isH-H28t0U zm2czc%F!%c$uBvSrrB7q=eHU~mX8S|GZKzMP-c*5dyb1=Y=yq{Xw+DLgsDsiCQ4{% ztI4Y*2|i1UM2J`wT_}WYAOhMuHais#;Lmg6ob3F1;A32q0*D^vdTo-eL`CVzN34FW zXj10~HLdZ#(%^`!nw&akv(f2>n1-6EUN%+0T)T|IMausw7Wyv$qgFRgsHtx2#loy( zQ^4175=d~b|I$7>YNN1^)NJ;UTR~uBmK<|4`uStNtNVT)kkI{Utkw;4aoq+cba^BBsmm7rQJTK9*!I4o_!QpyTCVx2^8g_Z~dsQ@V<0VXITyhKi}Ap2_>T`(}p@ zlOIu0)hBa+`%>>^oh>;Tw@{3eb3}AJ zM!d@2t7Y#1yj}5Ttv>_4oTYdA(av6*P)e=T}_{w`^wp7(QTd2`m`id?m&v~N)F}p}2YCIG7ZR=tTihCYe?bDjmZrOu)r})e4 zh;(h5nv@n^$29ZBs_hF~IQ!p?^%wPg1Msj~jYul1PkZt-8~g(gW&i@mh>qE|3A_T< zmiqf~`FyqYy_XZujDs9=)(4(5`W;tZQQjO zQupAlb_Wn%I)^TIlCVhYIZRGZO;lvm4SpMePTjBJyV^||D*#+S4@O9$-%uX^^?P)+ zhiH0g+hQi169eSfl977f7&CF7kjS-K)qv};HniZl=OL}{4aY3K-EJX?{ce7VrIM13 zNa6irQj%-KQ})D|HIg0Y3rUu7A3!im4%ioOHt&4V8(D3dY9m8ev{}5;%rddwj=!al z>Nc-^^0;b9*}|{03NjY;@0UP(Y1L;mXYoVRnd^BAvlnsH_`R!YAtgnsU<{C2A_K+q z#RFnp*DQ_|dUt!rj=Gjy;}em$g020h4d!nd+dIio7e308p1turtBx&7oFE@)?1&$I zp^!yk&rJq#O>GFYsMQ*`iiH({!Dk2T#kM#@TM@(o2rq%1nnH4TIvdpy2ObK^+})E( zZ3mcvUFaf;ytazj53Sla5oc9WlojSkxfS#~995ffOZojevEmb>CM0zpXB)o1`O&3u z8R{mijYypVl6v#dctzhwp|_BcTaaIDO)gtC(yOF*r@=p<($ry*xG?wtS^%@FfJ9iOupE-b-#!N(yA07j+Yd}<`QVM80|e-w0NTaAtq&f zQ4D;6&dSql4h_q1`Q4FtQ`qse<)u$WbOmHT59G|BRYtFCd;*<|0D%PyvzVI)oi5ju z*z+#v;pP|IMvKU*df7t$mU4`Vbe+G?l&ppgx^uK5wRrta0trrShaB?qi}Ui0x5t@M z&5sImGt(Q#*aK4`yDQ`*#y@RbHxqBBei}2!W=bDB1|!RDE5pU|DFYEpb}Lq;vCTd+iH>Oo za6KdL0QQo1Q8{mxy10BPvB`$EsD~kBCcXs-s}l${%!zi6s!uH?F$Qi068pu)jrszI zr&Y&u9a;k8Nu*YfQRPy=1o_60GI+LX2 z(Ni1e%ww(aIyA4P8!J7TUEvj{z=C#;419W_axz&vQSll*zZgrLdgLj%{| z=`uojg~NC2bw6I_LmadSCMiknbIb`%oDM58Zx*}eYT;{5nZI>IZYk0kjK3N!Zx@7{d6*7~!U;!Z)i|95f< z)x@~fB7iFnhu%C`Am6C_2Mul9h&Z4DQ>Qq9&AHLgI?*3n<{Iw>RjXpCmfwo5h;Cfs zFI9y)MX^M_0zeM#`>cc7jw~-%s5$Om_6q~&*U0n7c3bky#qOOyKmIu3`sQ2Q%-%dx zBMULIw9F2{+*Ft*jOX43RQriOWr499boy|o=at%(RpUo^73xyqZ zPKTk9@Np79wjXj_2;1y3{B5Q=v9@L=i#fk1270hB7#$t9LP^`F1eWpEWBEKT$r##{JO;hxXZ z8gi9=Sz@j3ONDLv9AgGVMRD(-L!XOy0=`^7{%`X|{5J-I|7w&_f_u!C&8{vaQ(de2 z?$lz!+q`OBm8jGQ8^i-}CcX&GpT)6}$lrWYN`{D*dXCt{*E5^w>v zrVxH_2-A70n+)&^6}CG8>1X(vSMh+9l+}2MiL1|$SX$>t>>&)0r9j?>%wIoUVp&@B zrre8C15zf)ifRjM?O0cPkbScNB|ifHu)@?KRWxUXs{AuG0$7>dxz)>@;6v_Y6^u{;WAL z;>#>395w%7I%P_Phh#Q=d^@pcz>H+N@7937aoeUTFUkN~f=g!?6yT@ie_Tu-|e&dWW)*riZw{vWQ-z-j`TIHuG z1SY=8!K5Ye6z7r;i||*QaB{*1QQd32=({Fj9CN;yLOI9x@4gP^%u^)$Ur4B)a*?^B z+|}pZ8-b&K@VVhwhwvK%RE#1<&-C^}B1K#BOL?mAjgaCuHXL>WHlJZr%ag0tKLbuE zZvMI{I6ENZ3#pZ_HLQ6bXOl!*GhE8+yMhc^-T?7Ws>(U4WhwDsV~uNYT;wt?Kub|) zP6WOQFlInC&FYMs_z(edM+s8~sfH1`(={x9ma7{D0rGH-Ny++IW++pd#72_+M;St= zPG!2vbjG17!Z|$ee1zdwcSBlgi08OhXWdCsLcS=G>2_|sFTCs0opwh+eL8dPE1)P? zXYtr2=+aWm)1A0r9(NsF&Q)urPY*Lq?ajvYVh#3%m>5*(7#0&?U1GiyM@lg7?KG&UT$&O_R@Ba19ygBVZTL$jZ~}JN znASW ztJRstPSid);c?yaoysjoaMA}&6?iHubu)?(Pks3I1ranaR0{SPFK0!xG=sMh_4SS_ zsC9Ioha1JGX&{6u+?QJQGrOI03Wtr9XX-c!qzTB9^+#C8lJ!0!4p`nI_6`Wh+}~#^ z2S%s(U(Y?}@^#&XtCQoQz#D4!q$xL97H%{cJX;rM@c>Ztj4u8~e(pU8-@(K@#r~+y zs5delxwR$unpgX4cF?WYeYgNOi52~!`g? zJJpwyo!boQwk|Zh;E8$l8Z*cQFzt{%FavM2y;K5#rD(W;k$do#J>jZ(Y91az*)U(@7OkKa0zt;{ zU-2ISfPJ}W|M=;QPH2b6>o}49>KT8TO-Edtz?9B0-ySL%G0SKhzVQlTh zGG1#w%11Em!#BZR`bW&>D0lpVHsXZOnLwdY$f(bjd%anOY_Ai%JK60wsn#`7HLMO& zJrMY7uyEd_Jo#f8GW&#wfjQ~$e)uz82nD2(SY2?Lf^juTqjW~iZcNE;!gV+)aG9Q zsrCwRV;>c1-hSsObYSDL)!_b3;ouZz&LjIZbQ6Z~@`mqiYmVu1+olkFmowPnEVymM zE}N{y$hr>slnYNsnrXsHe)~cWcU-(PP0#v|wWRQDsup$>%!+*+@2c~>KMp#vHht3Eu|)Z%89q@C>0uI%5FjggYR zHL3LFSuT!wWd6dk$zr=CyvACsK=RL8$1X@|7xSklr8MEMY7Br}{1U7d6Y(JKSZNxe z3+yQT`A0`wI~B9;e#dqn{TP|cK`5#s*CLUM@P9uo&nw-pQH+f^?PO;z!;`wHDJ^Yq z=&otzjB2XGr}nw%krI>d#DEXz8(X>1Ol@Ns_kc_yLj2SrOU>@8n-;NMAO3@~IM(s5 zQ=yT3g<5q>ic~t^F~`o}q80?X0u_n@E2t(dpC9uTpn#Fm0V>UDSO38ZX5!w2OIeh9 zhqmkPy%pNl6%8eHYW`9i8+S~SK>beX0XH7P-ECO@{O}+Sv%5VjWBW=VWW^^Hs)-UAb#rgo+z+5D-6Fe6=bJMvAb z%qN9sUnCRfs&bD^vR2YsYVjvvSAAeFW<7Zy*oDrNowlt#`+-WFbS0hFZhotBYFARF z3V>qT^=_rm>cCLg6nnC|(%^V9+e#2taB|CNZtg|zKo9aUjb^;+CjT}mk+6RM@fPl4 z+qiy~?8WJjTkUU-d0<*z(p@V3)^8<$%!M~~bqUT>U1?OXfl<}~{|{;Krbe2=`7FZI zrA^`eV9+|&fJE4>Yjsv|10G25_7Mq|qksDz#iQH-!8<@}a>3C5RoMR_FMP{TEx0!;Brnyc}@3`gAp*>@aqqw6JNey)0(jC zCainZM8o%@gf);HK}&3W&yB!j@jN=TxRsu(kR(Ki6KhlmoYb7fo(VcG)>E+lDezvb zUW2!`<#t9jbwYY=l9o`6Hwem3@Fl5??GmyK)K}0!oDhgqOQ|^vHpA+zxrDRr85>O8 zzMPZ4z|>#&G2$2R8r|ON_YB(kgO++DQh708w?f{%E}UwN4Vc@-)mH_gT0Iw|jqWaW z`l9^MsGfH?tumV33JAngwO=DZHF0^g`@~Z!ZHXcaJ()=5klC$uM<6Vm9?2Ts-2qAr z0DVNQJsy5U`2@`;AzV>*|Xx2gtSH8AwW4C@Do>Na-+ z+3=ZHpXgo3TDwQH)ntIr_mV1SCGC0*<;G!^|DMsAL%z=pE?TKj7JCLUs~PredfE4z zT&ls|h<^L7_Z^?r_QvohrW#++aSJw)s}Qool4X33t_#t$p>*3$+>Q$E#w7iN}(!VOMub(v3Sa~UC$8B>$c30N?9;qV)KgzaZO!wF*i>b%i1;4cz z-a}zDGr~^t4yvX37Zl*PyiGiY&T1#7)}WpsnQSR1?VO>SvhSGeRzWnrj(?q@~-mfvD5E4`@ zZ%>Xi!WM9K+D!HUe&TvfsbIpjp^;jqm!n5S<4R*pjHG>U)fbenCRU?w+!o%(;~{}$^WJJBm5uUQ=ZnrnYT1g{fM|54*=v3kuJ$QkP+ z;v^}$r6)%G!D>iezvHQE{P*%omRcoULVb#d~W&8_E_I#i2Jvz8WqAg zi*ueqy?MlD4vWnK!q_IQS$CB=6T%9=(zc|z@(R4%V992hXjun9trnUHuNQ49Q<*C* zoXCZpVn4MYOEODmp@7s|FQ4%}llgC6?jNS6qJA_%BhhU!@QBE>Mj&}sIFOiVlt1Nw z?m1aw9?OKm<3Pgb$x1dv<@}{19KiagmKXaorn)g%gQ>5t_6q15G zC&SbRlCpyGrbY`o(<$xp;cUT_z{=p@(%yo;l$3@z?g^rENmktUSjzkQYxTQ7RPyb| z9*gk+$uRSy+atwrI96$p9ezA_5cub@7% z^@=3$$(HK^b1Bn_?MUrhOlJ>OhX~tOU4e!SSfZyZ3TlCjCeKtDoyY{n{3#%r|KM8_ z-(XC6c97w=Jf%MtRwZ)b3{d+X_gw+HW;P>`trelsZ)rx`#zb#+d9r<4KDBcu60HALJ4(yKcDl6hpnv6 zlh~-q2}tAj>N*>}y;jWd#(ervx%X5>WF*qUyNI53f<4GWY3*8R-nQK%h!J*L#BlYc z))rzS+YXD%bz3$*B+m18y&C;n2?U!R-BL%L8EAJaeoV!K#Te@Po$WSqpJ5X6Cov#v ziGj->`7mB}sk*_zq+3i2#(1z-L}of4dg8X+KZQai6y^UZDj0mMy_PZQ#x{{#dX}{) zO3&l?EQ@boRlJ59RiGZNndgv+rtDEMb$T;$PMtA04Ku13S##pA6oR^W;Kzujwd?Jh zy_%`b7t0T;1+AsLPrY810Wnjn4Y2D^FWi;-@&;XP=x{7WBHXKlFxTC5$l|i>(PXWL zVn>8s@C@-2y@zREv*c zQ)M|?^qZTNB}g>%x>^u%{^XzO29EUQpHu;DnSQJX)p+JLnG)b5QC^O&Y(RQl*7__F zzhE4Gx`@Her`vO*r&wPts5E=L zr|K?ugIXL9iIc4~UZ>!-wz2sXX?R4O=Al-+`It>h%LBZbP+`zo6*|0_%``o`O{O&t zHKD^xZEyzQkd|sg@V6hVIamdk=PLc7N7K3LRYRs$Dka5TQ+3DcnzHgDJd*(eJ+9KX zft?Xz)0XIwS*=fp(w1n(@_`DSp>ED)VFJ>=^oeAll2^Xdd0@b!#IeB#U%5e+ zTtw&W-nG`&vUKnDB{h4|b3!L7-kIdLis-ktwtP9B0Zwrh5c5u7cJ7T~^(}H9pH&N_ zdlUFn9e4-TMdHe3ezf1Tfub}6nxuTON1UX7c0 ze(|Ds7_iIC@9!3HY=JnRBUku6OVZao$^HsY57tWQ;pojUdJmM;u)B%jj7>5U4?C&f zs(srA-H!6|ohhC-h36sGVNWG3hh*A9d^fxc;Z7p8pazjS6l(immp z5}al4Iw{Yoelt1{iR4Iova+)~;d-YOTH{7wFthmhnZkcS#3+16 z2XH!5_$A`(la6j76?`7P1AYjU&p&8prs6qz8O^Wv{VWWr;xS-qk?{BOuJ}Bk#~sIv zpiomYb8~akxZ0DTt;xLnoE&_9YGUGLwD^7x?IXi(m4%g+qh_E+0eiT+`?VA>n*WEM zAgr~>Zmc-CzEBM0{~5Rz;Ka3pH(jf_q~(4mDnc~&hG#n4w*!@85Bz)Jt^{xU_I9tF zeOeUq8nRA7GVDXWA2^{CA{9F$cM#N&C>YyrE0<93S1|f2j?WW%RQ%bEYu6yE)g|e- zQh;6Ii|&PzlJrNe$hH2G5+tcKE^7OoP$#_Qfs~XKku;#J&f1zD7%+{y(hF+L$jqt< ze4^9RouVQiwCz%ju+paiH}uj-NJ&Z>9vHH;y04%Lfr!jxaez(|I-;W5s1(tnyjtW; zNBrt4GNG*Qd!+`Z1Ktv4nr}lI`t<=S literal 0 HcmV?d00001 diff --git a/static/img/rec2.png b/static/img/rec2.png new file mode 100644 index 0000000000000000000000000000000000000000..ec77bc33e4726de87f90491bad491fdb9b1cfded GIT binary patch literal 52221 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

    {;%xoPNP6j+R`v>pmu}c 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 XZm(Nr?)3psW00J0!TfJ3$+QySs1ZO6I@U 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%0D-|4RX%EH0^zX0*Cb9L_ZIkVxLFF=Y&$o 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⪙#1i@h&6Uw?a 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

    R=2i<0QZa;o|n{a^3{_ZrdHKYMs@Jxs36 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 -^{A1;VF5mj+a21&N&xDdQ~&BH9X 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 U;QT0B@oy73DP_s3PX+=14~{?1{r~^~ literal 0 HcmV?d00001 diff --git a/static/img/screenshots/mobile-view.png b/static/img/screenshots/mobile-view.png new file mode 100644 index 0000000000000000000000000000000000000000..48a6438c3534a841887e645683553302c7d96aff GIT binary patch literal 154173 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 M7SF+AoDesT!r#9^s ztXV~=5+1hX?f$ZMnQsWam|_6bs9yN9X3esBwXctvnR$Y}S>U4>1Ag*0@-Qt|I`QbI zY1@2C+O!}CGac;H$L`jVBQ0Dh{2DF=edLgoSE`=WLaIZh2}>{2`k#}m$&C!F4Y$l` ziiKa!Z7p7%FWDV@zbM^!QdR{i1^lRmE5oFZ}eIU zaH@8Y_|W2WJ<8C0Xhfc?wQq!W zTmhsrK^@;}f7|mCm?j_O)SNO!64oZ2oFBfFEsvkgjwlv$Cr*o!J*k-?5?z-u_j(ld zjfJ`|HPzMB5a4jpZM)9J7-34f>#9^R`S8IX1L2*wDp_39E*2;wjUf@s(HdXlZi52o z&;2p*O*4dT?=Y}@aRe45U$($TTigDV2;710V|J-_~rBL#UT~3PQrW!n0zS z2M(t<UDJrX}3KtBce)g1rNim1R_58uweD-2h)D$N2_J!jwD-FM&H-6g+v zSYUo~;lg_Wn+rb5cenPlkMR>4$w$hr#GIeWJ{Bg#p|SZYBKL?(+e~Xbchfuu(cS>u zxcvuiG!5>3vvIbM4r5%TwC58V=@FzyLv)Rvq_qu$D?LA>Yx6{W{2>J;h?1iGuZ1fv zS3vC0*rTVRJ_8E+TG5#qSBI~zrM|c;yn1BO~bmuTyM z`RZYMij@gpaj}?~?pFC82fmE$)y>U~)vdKnRl?Q&;=&Xis2;^a%v&g6{TF|5Z%}J7 zd0L1*f2TrAXxQa}Fe76lzD0a*w&_x8_y=G&lhN9ml=ps5v;vVkRo(~;i7Y;-KTMin7W4ujh2=kwf3pUF(03)rcBnTi8;ljsw>nyTs0OD zfQezen3QW-$JbUyeGj$tzg$Tiu@kiMC`Y)tH{#tar4ksK!GE44HKx{+ zA2$ch zQ+7$h6!eD|bQ+Rnhg(L~xOa=){MO%pV-%F~TtE7qYw!C7>HEk*{E+Kj_fmOV!~3^k zHS8brn@e%76N8$eZN`4{nKnG)dCG&qdM#qhMz@1waU&OiD%8KgFJb)D;K@o4-dZ@> zKF|7#3_8_4t1nR$&lAkU(H*uHpBfUj3fXuE&?NM#@8?6Q%bCfpCg4|v9L(?e?)EIp z>VdcE@{_G!vCd_A)GMoE>>BCxhTH0yVrZ@+=#pBjUq>i5bjCAy&2xQIH8@Z)%CSW_ z`rZ|zR>IU-yZh)S7QTO&+NbcKawM+CJ! zm{j8qYecr}ozU=)R3JEbhJne~bz-5@Bn4x5=rT`pbD%hx3Wo`3+w_MR8$D0G=B~<` zr{0eNstCr!{>(rd7Xgx0yOPT`SdddT}PT!!8P4Oy)-2Q`9|`bbnJ4s?6v$6r!M2Y#QOOrxFj--)H# zlvcjse}EW~J}L3EHsG)otE}G8D~m_x(j|$pAt=oZpXTcfHJ*>0l-}J>R4P%5X2d933A>8`DxkGk?BX(eq zcnzkg;AS~@&E%?gJ8i9G(oZ~!ZU&nGU`E4uQ{8pBuhcO=W69?-NG%W;=N5*Wf|K%N z{hDOWPOqFk=OKAXE%>Bw`>Du7F2vXAPyN;#3bfU-yr}x-f!voKqhaG`@+^j8cR!d| z&|zwMX(HRd<4a|(S}@Pi|7P``+$esS2k^f?LBz0X<Y$-TJHog>=^;;cr%1m)*3gYVx;l zk^g_P8`eq269-bK!mhY1ztXmT0U) zotC(0*FI~;)j_Hd@#|o4ui&nj71f^pD~x59s8YtcJp6ww5}wm+7sFjb$s2VdBj}IJ zFZ>LLyS_J*@)GY=7?BIIdR2XKAYl72sIRm+EnKlTL`f5Nnk+KoReZw6)}N|;zIJ}p z5aW5oP|m^O^6dHB?Moo1h>{N^Dn@pNG{|Ci?cssO9`F}W^+9&XNXvOuUdwSNs{t`c zt2_hqTwG~*`QYk_lJG5|@RuJC2S!s|` z*TO`;!3#pfmV1slq$ajG`pj)|hFkb^Uc{6)hH{E(In!{jritoxEFTdFyq=y96IU2l zJh|-8efBjXCy&b>uoq5JBfIi=fD} zQErE!pEx4YaP%FI^pWS%LsnbQqo>@)-cJ2yEG>c~U*SIp7oRqk1!pe%Sf8R#%Bg~? zyl|%{1+@tI?Co*sllqg=g&AA{=5S$ifXT1_bPVIaGhCK&B!b>2B1oqwK%nLj+Io(G z7||`WmEbL}y`ZiySbqNlt0}?{mV3f&xtKpnj zpa@_Ly?z=vx9)lY*GrLQI=fO`?Jm3XtX$1ybQt-A8bbA0C!(xZDl^r?FvP|uwhOb{ z_NBWO8xDVnOo$^7SJHFrH*|!qFy7_5wZk0Ky~x37(OX32NM3G934rHbBKCU$S%v)N2Q zw00Xh^eUgWR_R4G-BPFSi?9TfqTslH;XsWD=>y`cs`qod z{!{?vd=x|y7AxwSqPuD#&cxD718zaSa8mx1u;AOvVl6;1LQ%Ug%H?WIJy78wiic8C z-wN+u@`~-*nWU9KV+2y_C5gM@GUqBR?I>kfCzEp7BphL12*^&z{m5@9Ek%`hx2Cu}~p7kloPD+~iK z^*TuNY&iT*4*Px5Eq#(HPN84rKVK|8aoTl&_CA))uuEuIjymqg4es)e@*+v6fG@;* zaAkN<-mzw0s5tGaV2A;uK@E#AI@cZR>!M2g%fFT0tm?Bx-guJoD@3LkI!=9b6hY(1 zA@GC*^jxas6bJ~yoKlqGu0>iQ9Dz2UpWS+$+gs9BOzVq#S1nP}lBnuf%+6M9ns9l3 za*dTqe`(bBAoS3+Pw(RLu+g9nGf(&C>ZYXM(w=YT>^2XSoy)lTlUNog;Esh&%;&@g z*kMlH6d_ZS2+j?c0SdSA(F&{5d-cml!KYvc{OLZ~b{ZR=*8fmu#{eUJe7MNxx$Glc ze-N2k!FbfJN?b(L`Y-i~cb@+4z#McII1+mcng|ji4QPwQAs{*WIANS-t@fOSN1n|S z3~Rbxtp2?td9PtBzT&W$?5)li;djXzfZkR8Mc%Q_m)cpJ<@RVE=(%p!ufRFMM|~st z3&JO<3SY*vq?1j|b7_+FcS}k|J+!v3D8E+X&Fd`IXQd3~aPzBl62HL{DkYU^bu+?Q z)n!;Ka#Bo>{oQ-t7ag=$@iH$$;NW*AKZnLVQMH^$c}O%y?9J|ZP*?wOwwtDVDus0o z&RCXkA3R-Vmfk_nP#SgE)RsGGWB&DIPb3R-WMJ4I!i}2OMcMCBM&tTVWT$*RTL~E` z`Gpb2EfzQ4S z)((=Cy4NO&lLd)TFXHCj`f_N7+8gfFxEH)Y&_Jq4t+kGjf(qZt{<9gk@#%sP57 z-@5=Ck|NjAFv!~aZe2Ad-+OnkTb_}zV|lVa&30RKa(rYlwXkDxNmy`dC(=`Jrs9QAyUm9^gLy`|qik)q6cdLVhwJi*Jg# zZX7XSzi~=^^(YAGm~&^Wi2#JC#yFIztquQGR>bk+%KHYVG?mE8iq8dBz7dFWuN;Q_ zWUJgzlM0A%h)5PeL?}Hg_ImC`43M5Z4@}>%ehSs8c3~Znl!Xv(CBui+hc-Nq+VCnUWG zr|PP(bAWiDqmxtX(rGH@KKGt+?_~F=Jif-Sw1HUFVINKlc&}bm#!8}hw=Nh6;;?-@ zj@f0d)PMW*xNsq)&l2rvGvA&N9@23<>0p1j?g6;<@go#a%O^KyEgbFDY&#$|e&5)@ zFt_kCVL+r$3=+Yb(jKoU{{T7{QS8r6cailH8(mv>pIaMJ!PX#DT1gjh;7-7Sv6j6B zVnP(8;J4KlqQyw{?st&X{E+^Bg3@taSv6F~*EVJbZax!kC?nVOBJQP!GK)Osg@sva zSa^8qh-Xd+T1m^f)pdmbI;^)R=6(cG9u%-6B=l&S0Gw%(fIej`J>G;KH?JMVl3E-0 zpR^(+vfu2H7$_Wq$D)XHh3!0gA}50%Xu?B`yoidHa!Vp78#Rm60~8FfgFV{5y5HXm zqPU?_51j!D_0h}F4!jjNtZV(GsBMlTW8>W&^xNxS{NE-#dJ*>Ftzkun;E0{)QysFA zWHIL$2k8jpFB+0&9%>Lf+v4x1%4~VcF=COH)vfYh2S{R{$FQsQD&O{Oj2GNoA1ZC0 zfy0%-ytXlJMmH%QD?6&sIq}yAw4&*wQie9f(t?w_&2?}ef=~lgVQGF2aMQ$`un7&DVz-|HA3jZOWD3S zEfqn6!$az@C$BB#Xwa}`l9=qTyPY`R4cOwLbo%ki4z&)ID1d%CHk3x(VsqQvwL8z{ z%Ey-@5E>_}n##IJjk&U-4W;A_8L(RAY}Q_$YoGj{ipB^_IkjiUz9Eq6-zLC5v#4Ja z)Y0N}1~+I6lk(G>fScB@I)4|GtZnIht!w~d%fOM2zeT5_lfoSadV+mlCmX5;sqt5h zYtP9zU--bHgh~01=c#XSyyyp1;+tEAY1c3dZP&w=V=PZ6VbV^=VB15uSmF_vF5{{O|<>@dmJ=vudL_$LA5mXGfaR5CW zr}orEFD_G1p?Ah#4U2<9uYel`K;fUE5u0M4g%80-Of9 z@XH#I^K5+|8b1<^SC&2Jk)54DF^-rm0=m#UD1 zw9fdzUiGv$EC^hF=t4A*bt!uGDpMfdY(+mNbq~4J&zMMAs4_L#gsD!Zmc04paLBPN zzdy*}=EXkLQz1SBK-1_NS;%(7;0iuq1bR^P+k^#lgKY~r_sk(Zx#L~z^rG|;O!Bx~ zug+kPsCm+UkcXb}?MD-%4n97332aV%R%QLUHP*UpUY|?A@X64{AIB;X79ACq&YxJb zd26k-;;tLS+frsfGRC3N`LXlVv+oa=djumxINuuc2lEgc zj11N!Dq-^=kXrPk!ZQgfx5I%;sI!RsgabTSS@>{$#_E#oTB<8gfk+s#TfrUD8987V zpHS)(!?#-t9kS-@{4PZL>dh7-h)=m|E-)*3p{%vnGWKPSEKlNbxv5}2_gB7a+*0h; ztFxBT0EG5P{gKrzFUig?lH7a4@@NK;YkZ$eS@H;%(m$0uMoX({je|7KrJky+0!bux z!@nf)(>eauBejP!qJ?v*Nz~j9y=VH*_45Kyv0L@a$V!DFyD~O68$_SueRrNilUiVo z{5==o&M(S(TWrjW5niQ{0?|jeuAb>Cs)$c4Kkj#2Lfud5%fs zMU9rqF#qaUPjT{Pn*60NCgwc7FWQYgz8DG!QP5fz3VmIe&Xl~<;t6(gHkH`owL=6Z z6%ago!(v9H3^!w}?UqW{(NvE!E=5VnE6{?Tm;6mO35Bmm1DvnzM@x?Un&Ba8ZlnzQ zSsbEOY4sz*OeKGK_&8K;$UfJ(RVhRG=DXQBnya0~=9BY;OeabRRr}CSIiq15lTT=NZx8`%g#`;{ z=q2o?45u2*3=Vrtc>d(#gDw`)Ah9_aJfP2a|E3;W*OiBM^+d8Sd^Tq-PAWKMq*YJ( zW(HTQsEQcNpvhj}x2m-&bBfIUA&R~uY=CUfWU+moxNEYz2h|;h+yptLv9FV;JkjPV zP8Eu``xICZT2oCcN4U9DZ2O_MGQUSO*}?)VSXGheQ1#0(6-g~b6^^;i^*o|xt_Ju_ zOY_&Ess}b(G|z%{aW}tb83)KerKP1e2~X-TTA;$hfXo;sJIsFrETsgt-OK0n`7#YuMSU%RvjhcZ{%_TU$OgW1+X#A1@ zXjWWnlst}I%V4VLelc=y^QLdAO$^dbEY><6f<`$;b1?p=@>ICYNq>Vx%ezzEyv|or7;pRzy<@}UA7}Lh5V69B27d=X zzcYoR8v8e8sg)CxuX^x~)%cpwb26@*fEsI2xoR1w%w)4~IWC#WN|$t*=CHohpI>d~ zu>ch*y_f6vrD|DX@8h*{Tb{0O@P`j;5R@;TEbD};*qlT^d+uhdRePC2z@6u} zv!(QMEIOB!2Bv4ecV_ctOv8`qp?Syrs@y7%{S9rBOCa_?rwe>+61-zU<#@xL=iZvB zzp^nn@|Is0cx2cS%x%MPo40k|;E{5kSE1FbB^k7sV6tHPK1s!#xzm&DZSoRcLLWuu zXduGpKqVxLCr?9b4s*ws>}JO2?8>9sxfq6*hDDS^_}k$(AmOaF$qG$}H&D*(4MI+o zroJcnOtRX1MFSs>E3*=4{0&m9a{FcZ<$Bf9sw<}S&77Q^_%hHt+nlr)%Po50Md%Y! zZOB=w*ksC!$<5@6s^;a(mv>qvcQ23uNhbLdU<;PO-;$x57oY98*1he~70`dhn#EjF zt(J+CVE1R_!{A@i(rI z(~Cfdxp;0cN0c4<2xBaoLUrQrU+M8hf7qqJ)3aRbQ&U^(vx9#NXvX)y!r>F}@e!bB zYip~(MNP4s_1Kmg^|`95idkg3aMkL&;int$@LaUm*vRzs$dCXZ-|Tv1Z+6X_eRbRt zFsTEQ!~UegLJm3!nVbn5;62WQLu%(39@I&muPxe3)2b#}kgxaBvsVLx4&7?eSX*~@ z|4SSe@~tmAD`OrDjU$JLQwt7zv*&=Q*65yF#K=xp8Sq2Kmv-D04iCL#k?Cp?SlS+u zo8Rg^xiZSdUXzN@pG^%XtRb!|yB--1nRyu)T>@f$LAb%31zF+{RSk=K`b;Ik<2s;* z9cmasVW*mXbu-h`o4k5Dkb1lEGT;lZm|cj+_;Ln@_g`nbUkBaKFDx)dnR-9cuA$7v zWHY|BR8~RG_loeoTmu|7*FfvBEpZCvN=KKJdKn}@{YMA;w0jjC{Wdo4Q0PwqT3wTMo<&^R{-tHJLSl`okh*a=-ot9g)?I^7LK0sKW-zo5ix zlCyvYWFLluMev`^Fd<7{#8j8^AI=ZVX|^JBv1S4|hQKs<6sDjJ`EZHTT>u&rLghR+ z*lo?P!n4W5)k*qAiro4^c(vdJGX3jQUy8zvganTOb`=+iv+Y?>7}GWRY(yD9F*484 z2zwV6O9x9NYNRE}VaiWA*`I}g0#^Uz#UCFsz=@U-Y{(GCW=hSZ(3#$kMWH@;`4PQm z7GkLzX&=Mvj%~)3D=tBL3q;);p1rJd8S<)Aqg2znQ&Mm#P>ggwQ1l}pX0L0YfR)e0 zj;SHlqU}p)Y3lV}YhY0WH!A3k&8JM4nO)_UA(%tTXSvx|P}-6_nyR8LG1#5H$azD&Yv+%Ppc6l;_P zxM*%}uFGhV9qxlNMGmTXC5218u}7^}e`@r#ODQ=pd;SK+@z9wB4Z0}ZV7dreJxm|3 zkJ-(O{;?L~{qih4=4FRE@;);2)bRH_ANP~OENC|qj5l98f6o_g?}6Fv9=Y`G?e8s; zkd*UYMj5$7AeqkrW!>k^o1OP{Xd&vt!osvLAr7GGu!|5#If67;aZ43hW6b^X<(_Pmv5ReTggdv$j+w-*^Xwly_d@2)DXmFWMz6=Li6cs zvSF9|Z9z#*z(!8PE6q(ZfoeQ_^J39&T>)*H?0wk%``^OppY3M2#=9v*C{;WGUMA;btnP&!+Y1^q{lQbPMb1^Ud_GFzg{pz zmwt41Y|tSG;s|!U?YcCRLSOcjGUn!|r&ce_NrOYKYBOmyU21x3kX@-=TqSSQJ!Z4_ z;1*#$k2AwSl~&qeQ&Fw3iDoUhgZldCh|hB8pWUat_UY5RjY;F>W1^^l>oN~16RG~} zp6{*}%G07RH5t{pP`B+fqj&|`Ju)@5fPM4+W-4|ipPlL5wL2Y(qI(+raxUjUHI7d) z&y!x#$!Lj^*53?pw))7KT6mR>De2L8)jWMzdSiDeS&UfYo7Pu&#`zyT6l&vC@><{# z#kZY<*NHELAGcLwl|s?1LFvn!L8u)TxMl3?kB_cCXbOo&%?1^XG>Wmw-!5p$y^TCQ z?tbMh;+R+_RkA_)+DPjb%<^`u`Qu~8kB!~-ZrZ=D!E!EujHceOX0KxjbyTZ((X;rjdAcB19mU|MidV3bEP&V1~0ww$-n71z(WRgrL-!53lNL`)ZBfKp^ zw`RE+p+oM(^X|HG%JvWovool!a)>cqnEObU3uo=B?I2|WzQY4?`8e?VZGA49$Pi(W z(Z-wm+2LM1jX6D>;2p}W8YgFgsH+uu66*b_HmmXk_>yz!cWUPP-AwB?C$Z-O7Dc+% zl!vL0Eaec0s|u;E78b$T01IE0FU_J^#&6=_Gy-NvlF{Dy&f}@DM>>bn1745UP)1q7tKOIm59q#L9=hi;`Cq`SMM8w6$O8M?cM zMi{#0IbQdD-M|0qXTRganSJ(Id#$}HzCN9btH(HTW-q(C? zjj(86GcJDq$}4aPk5T^A$uO0t_0qO%j4m`@_Ja+viI*b->VLK6i?jCmp0{f zTX?BU7|XAZ!GnV(R8A&wAt`ExoO;#gy?(+!ylF ziiu&5FM;d6-TbfK;v5T!>pGJZ1BI)sE1%z(pqntxx)BN(rnM&Q#5MGqc^Xw`k*hZ9 zX^($9KjFMUsx>hH78fOC0Z{N|zM3H;xB+4!ey{A2tp;DIDG|ud1-KvvT!b zk}z%5qN23r&9M7yYTB;~P4&)qB%4bJh(M1hgM>seGi72Nd9?PnjF{NDOE0%nh1y*{ z^*voY?b;_HVPa&AxE>md9zFm^bs8Nw=yWgsl)H-HZq5? z-)|O=cP(z0S5#bhG}e4EG0vx=I+D;3?g<+_r!P(+;%+`ZDP)ib;PCofV-ECQ$xMWg z`ny?&6PUqPxV1z*+K`s)WTv1~zt2+TO@jUkx?p*LF1~ks=X8P?o6L^j7LnG>Zn_<= zL4|32Q_^P${`JQOBVm&{`i?av`WaZ=q(GVGQw{a$&C~Mrv;0be$Z=uM?-#%I5P4jx zOYXzTDB9}ylG_e`gZ(S^o$l~7oM`t_)T4ql&iqg!4h=*&yVfF~Cb z#Zl2mDW~-#mz?Ro>M2r6lzp&^??*`+q%{?qFrV^>QdYf6yvc@5sk+$9?@p1u!BDl3 znS0bK5hq?NB{NRMyG&5Qd@g4&LGX=F<{o?^mDqf#A*m_xM*0UjjCrd^eZI6DeIis` z3^h%)$U>2Wq9rp@`t(YIM24iDtK{huqz|(%&q*Sp_R**H#PYoP@W6Nw-%PF~F$}in zt`kd`X#>50`#0OHE+Mw|5Iwp%>4QUhoFFtW$!&-pUcrus`*MHM~hrg5d2QV8Xt_dI<86C1d3c!R~&!b6Km*qgI$8kM}wuEYal zLW65$V&I7RtEg7!44ivvj3~|GxL#N82IQ8Pk7%8xWpmfj6F}1XCi;3JddVlm+eqB?tuUwl}S`X_pKcg5S?=5Z#Yac&m&tM`xFYB@LrH+uH& zAi2o;s!#^LA%F52i=^{s@NP1h2;%IGo?B;lee}cinqjVCY-o1zj8(j`i*%K4- z&V&(}DSR=k73<}-s5Gj9r3OJF(&?Ju84d~`)887we@om&vups@PLXM7oTv64w`<}~gpFE9TJD#eNKz`ynBx@~LYN=gFX z1)7*_ZfpQM5%tF7XXsY1Bwgd{WV7DYdsnQaPy0d@LZ1 z3rB3=MPSIevmu^}mGXE6CFkU?4lo%@1m$`58>Nn+L8F#@mPzT;;*F>g7fV8ARy325 zZ5Li19wLhg^ZEC?1ywMNnSYnFZ;vn(5{2kN8-6u`hOn zWzbqD;8r5zg8;&03q?0D66hfCRd<^UxCT@69jk!_;&6^<-i(Qf!<@@9_gUzV-@4E$ z(C_vV#oI#yMXApoW}2G7V5yq^P58~0N@PCuOHyL1=7YWUVsQ-g!tYIqd&u$arwLB4 zIFb1erRlfiFZ)k&Nr*}I4-SGEx3D&I2L@7iEi3wZPot=iT*Tc=q=D?JmfbYCUc*RH z0PO9BY-gkN=LbVaORTJY#H&n9a84~=V$-iyN;P$*3JQC&!WXp5&tEZwAK?1b=Q7hh z5UCe1?T``I&;Q9S|5m(Q`%{s(xq+LHuR4o5_Nc6DY%! zo1SXzF-k|Z$>NJnb(|!%7^DzE{l>vc(&J)w>FqjZl;Cit4pr-v|3Z)-nS4p?(_5%Q zs5xV2E+J@40|WJ)jg$RRFS14`>TTQ`Qb3cyF52|$V>K(Ra&;=p%hLnbK8Av$)Ql(7 zxN*wW)m;U$FflQuT&XIi3Ha$bIe{|yqBsIyeEddGjtz-DXano=?$Fj%eGPKPaPy=6 zJ%q?o7VYjo(##*ZWsJ^X#Xd#4B?$u15=fA*C^G{XtaBFW-U~vPQ{@+f-Q$ft#Uc?q z3%M#bbkuy(G!r{T>l6hKKPN(W)>}E^CSUk}wTp;r?S6<1`Xa_Y$;@<12@Whr=aiCQ zEvYZ79o)PaD2V(aSvs!l*50`pUM+0k00Px(=1^sDnAd9IMbdm@m64e}a&8qSn*^F^ zg2?h>>7vzWkIdGro*=b+_(!k@-W1i2EHU{jJ%wgFZAmG$lzk8AW|Hcchvn?eXH!4l z)X~$xDy<8EL!*BDSQ;YV;iX%2^AV3vNxc)a>Uu7;I~J8afZrI1Idnv`5rvW^3%Z`( zEgVthy<*%IH-7%x?0e(o9{Qt9&Z$e`?8!FK#;v zWZA1~hg@HK$dO;*BE2B^FP-;dIf${UUqpE~-pDlcvphWGx68Jn4O;v93(Mqweg#w) z)c`Y1D+9_&hf&0zqEhdr>FERl^yRAeN`9@Him27-0~noOvqem-)C*&Qk_sjz+K}5X zi4XB{cEow(z8moF?AFJ=x&Pn-m9nC5=zX_iS{+MORdjT8dHIm79;9{IJ~lRTGeT^u z+xjC`0y@Q1+`J)MaXv26ShJ%ze+@~5Mvq1{(QECUOeS>A=b9HU6uy3$_+{bj9^qDu zj7|5wJ|B$&55!nI=7n=9Z_UGD%3(qo%+;5ey10TFyr(SFs%DhwL_`10_HBATN~|m@ zRcbk*0jdyPW||1~qpdyFSe38L2w_ZvGj3im;g;xMivojEQhB6(k~P!G@~e^8X1a5= zf(ER+IO^`6{5uE{|1Ri{XXk~hD_{gmX@CD1ANWENGonfBn`o`hV?(y5!V`;$>$RJX zmE@V3+)q7$FEHyCj|exiS5{WJq^#R}@o#>;dHdabFJ_64HgeMhCXH~aaty+Dz$|B2k2M@lC^KYcWlKq>vEEl{=fmrK7x4Mq(evlm z1k}<3;?MYi(=uMMVNK!Wk2me}xNR^%uFl8$_9}<@VLw%bdIuWLoRga+i=KYN@(1@I zwiG?huW~nQt61>`03k)+k9*wCPYpLeZII&s-sMmw;%&o1*qj-wj z2i@oA{FH^sZbf-H;8J>Z)}iKR27~EQQIW zcP?vQ97*4RHpso~!z-h%9=lk8F6=V=2F*wruVS?LR;{FBbkBtddaH#;!|TT0Ok^0% zPAQqHQf{{Me)4ITQT40;uy4y;=7}NWb>x$^OiC&$U0vPn?p6`smh24i1+B!eZy1+@ zPHZ=b4_9mx{rYD`R%1n&K{ATAWO2D$R7X}RoZq?^GMZ&)mY|KL%W zeu`&ElByZ9@H(7YlI_fSWbbM9OL=34zP-mut}_OTe>`?A*myEYp2XuiArw~hlZ)sF zp>{xQSWq?{O@EL$*@{O3rqGH2&RR3EQ}O}fU6U^Ke7cyB>Cc|u{q@-REa}T`F_?k8K>-=lzm&e|p zsPq}`%PV{Pk3Xf=r+FYctM#*)D*B8Y=S|m{r(s+O{y}_J{}*?4lSqU(0EZKz-Gq*J zZ61y>Jepxv*qE^@N!Ko;GDVV5OVNZ4v*B`qQGdHV5qM3CJ2^8$3*zutg9kca=MAB? zZNFXJF~Wh#qf*dC7~O8o$yeMJKUk5g;m318QW*(v+)Iw+pw$!Ef|y%GSaPErZ#3i!eer+Xd;XQ)*PoI;K00mhf z6Rf!9`!2xNmF&X@ZHTR68y3_yH;M1DIZ4xdTN$6DQHYZ7RQyta5y2Zn9%-z6ytm*t zIy&i#3kyqRv6V!2wL1Cv`5|+*<>g*N*-bMVn}dvCt)OKxqk2q2b|7i#KUe^U2%Lp? zVlYRi4>E*bekNR%9HCsdhkERPPER#%^?KVU&6QD9(4M%+WSt>7uYJ3Val(Y`^02*+ zsjB|m?MZJ$c(|37l~b#p#BcmQA+pWeS;XyI=ErLjN2lhWY2qW=&vx=COrn_3Rn>iy z@xl1;$t?L=tq~?0#8^V)fN?y0`uTR@^TeCU$XhgumV8G^4)74(_mv_oW^f)dCZsi= z-Iu_DWp@wm30QZ4PwXAFEGe~cYwld>Bj!=Y)H;MWENqIHnP(m77>Lt24|`BS!+E~tA?U)qX=)e$G(<>3(ao#YIM zV(!@%r;hf9U>f}j8B5x0;=0&}7+<8+R18<27SWpP>(N7!{?^VN161u zo9SnWEj@u-D{AdlK)FD|u3(B?)9kOCsH09&IqFEu57 z@iZsF&7NLo&%j)b^c_S#p?j~L%daeB69WDklxVXHY&!N63ojh^vA*pccn#g)ehv{L zc=IdC5ZY;KSysS^nXehVC@;4&<3PyrX6liPD1D0gDOP`X7+1kul~dGN@QwTn3+@bo zGT)%EG+lPZA`OaP{###RH+slfTkyL)qO3Awr3phd2!aY z$G*Cc{ff+aEs_J>bi1nv<-)-Kr5^d0XJ;H?L_IC8IIbgDKkpJfUi|nSC95r$$#|dI;#TDt z+K1*%+sa>faN%)|+xx}@k0>0783*-Z7Qy)vU-@ggZ-*FfA)`Em%oa!#a}lZd=epa| zdtIw6e!?<;5hVTV^7lY9CTRUBAR@oQICtJG4gM?x_qu&Q=j@lF6BI&xMVpd3iurSq z_3*$ashoE6GfkBC?c+Vl?@@jXZ&!h}1W;kRxm2T06*e~ZZQ4sj4@RfJ5}rKo%oN|t zTk7Zj?I!m;MIk=Fmb0v0yhzSvGysdfPiQ?6yQ6;2ihf6xOY_#F^UQ~l0E2JH3F)Qj zU-?ku6ut6yXLL6(OXJQ*8G3J!1}UIoL9{3My(e#NLo(8`Ybx9-Y--|FS8rT;%|aCj zvVU10h|+BI0(L9(#z=Zi2R&TmsfE<~uU9C|k6)kPTz!FPa$;Em9>Gqh(YLfz4KA!R zar64q*ocQcehP1{k{}`zPVA}N@x7lnOYKgL=N#V|qd+*^_E?j$h;CWH^R=QkWnvkY zLY*aS7flT=Dle9rHnxC#>$& z^7)d0=d38tuy~Z|Kl#?)XafSqN8L63q7=0^{*<$36niD^1Sg8C%-`tsqdf5e5C`?i z76d$$vhv|QKpBBE;^X6WWHe6-QBy19h(rw^hmR0eaPp?TP>$Uas{7a<<>dxSA6k*X zrGk?$U%sRe)c`B`{EYm$$^{k;^oIsL?Bxb@I0t-aAh1r21mRcC(AJAii!*FVyE1lmsfU`EUs3T zV|$ROg68}Ju!w$p@n$oDTti&9~~g8KQ>_? zuU0BQ9)y?iy8lUuEY|&~Vmq$xIo^@j(m7mdX7r`j zpLufo7KaL5?LX)K8qobl`!|&Nlhv)>qnmOiuUh}ykqwwCG?4Zs-@y#xLhX0-tA*NC zm)NH#2fwNQcPU6?Hn*k8_7W~)VhyL(mJ)2oZB@35h|WL$8Ms}DV{uMXqJ+%!+{2Ra zvhdD1jJ@-iDsNv2zN%$1Jk9Cp!{NJ0!&MQ#QUC51TP?N=1`1cP=cK7|B5l$-6${;a ztxK9p1~)KK_cyHFwzv6}Mrw%d>dw9*!JO8s5A%}<9bu+AX)nj|1^3LNS4BqR0-wg0 zmB$+F+yjZf+mHy$v^qG6S$}FzxO_>{s~S4dwaI+IBs^pE@7i~OSq+R#P%4&Y7_?}4p6}7KjSt@1by#mP*GtFk(>*ofSaS? zRiQtwn2+|aYNFL~0at~t2y18+$e0j$!BLEl8z z{_5XvU7l1bmabSnTh0U+6a}Gv;9qkcOj75}N!b1QlZ1qVVaEf2Qr7cTS2Wj9+*uM# zesFdd#7)N+ipS?RO7VdadWT(Bjt=VG%QIldn^A7A-yzO7@n=T?RvsG6?6e$= zg}-_;8Jsnw`#mYa)7`+zx93D-z-p9${$Q zC0!nqv1WmM%RkP7J0&TYf=-}m3hpq|YPZ+eq`u~PerN(4pxG@^cuAH-!m)u!^g!zA zNJkB1oyGsxHMGQV$LJN$Se3%cYzjH^3hG-=+C>t40Ub-o}8QXQQ3p}vZj9_g{1 z^zxpm)~fS6h!5GVBq3x@&rsy)(`WNYg}YoGyck{Y9^3zOXkhKh90;uxfFG-e4=c+;;R~5U@brEUXx8 z!Pd(&?6o=@ogn+8h{b5n{ry#g#y{QeeIt6@e9Jp_A^=Ico4Rrz0`8D@&QJjtAntga zO@CZjh@pqL&2p(U3~b)GQCSi=YDchh7NoZRPo*tj3j(@k$cv>To3ZDs2h&Op{TvK? zR+^CERNRPO`p48 z^ClqxkYqaHl9pxAe~j+egre7f8qD##9>FG$HoOo!=2Hm|+szZU(X8~USkq)XG(4Yk zv8y`cvg-D`fPo6acfD(>+SXJ0yqgK9mrBEdwU56Su_cnZ0;hMI&vlxDk`RcR^Nz0uVVW(}uAXq*d4uJRXxkpxz$Xq+HxfgI;a2fz3pCiUc%)|sAxsAMdHb-Zv_2qQ-6a8 zE4C!G&0U!|{w`}7C2Bf^?S4nEiVH1Gvj|(+q@Js=wiCHMoc`b|iaF8x!MNPXFh%~x z)ujs+DA{s6|L{#!4-*WNj*>E|)Mr*#Iy{{;c4V3>*WvNk6H3M!p~b$3%z5}aQU0#r zaq_7iWu1b)hpGD8p@~VS&Tl z&Ra@GexD8-y9*m}%ISq2w|dJ1;to1!3zqNt{WgXLar)D`d937yhuglPWZsL<;i~G3 zc6m+OFT;guDp3DRE~L&pa)sFBqy#%}y92U*)~o3GqLXe-@o{(NG&?HFnv5`d29b9t zZnj>;{GWaytF%kf@L^+;6a1(dHzZP0TUa{u_Y)NWqfUIM83{ZhCd5`26Z=4RdVRWg zt~fZq1Fvu-p%)%SeXr_LIgVcipO39>WN#NHlv+4152gqJJBu*Gv{1 zcV(z*Uh|rt1vN#=m-R^wuCBbLQFNrFb%%~yatJ0`cSDhat9Q_16&Zu;w*Lh89XiX_ zF+7}4#PYo^j3z&sH)oOR5PMzKX&9nnE%Y~R>AUk~Je~!yz-u!T)jHpECEjW|zHyUK z5+$mw@p!ewqOCnCrg^}im~ywB^2kqXw-vkyi1|6QXGt6)COoF?YSA71DrWCM@n*a8 z%_ZQOH9mFV*c%I)kh7|Cm*l^S`r)#a)Xlt?aK(asCnb>LeDGO_w>yc2f zS_hUqFs z$T+!by#n7zR>@DD*UUOurnQ0CQZC$$aCx7{Oon&B++H(G!h+p8o~=NN&JEl=HMo`G zGppOgS#(!~y3Kf5hRq5gMMb#dX(`U`2S%qmSI!9E6&h@xY(*F~--)N0E+)1@2KU!6 z73m`Eal+7uEwuBb&h+-Xx0qY7PA{=L3)RO+C@GDKxrKsgztpo=Cd^z4EP`?t`)o2( z7xJ9|Lvl{4fjK(zESHvROT#N5`3C8r;9Rnw&7PiHILCi^|41}bQNjuY zi}ql>>g;G<=H46c+gq3zn8!j`PIz}StTf%mbaK^ny0skqX>X6^##QiM8xPKFtuBM_ zytZv&O3$AR`xL#+P_~KBc)?HBy4Xn1V|-tpvxNP_^VTJ2PO3XgmJ%D*V5?a!UD8&=et*WT$PxQo{pB~Ib=4Uny}pN4_c+Z^ z-iuHymQVX?7zLA);h#R`-1uMlab$%+y-&Rh1oV6-u4c@-I~VfYMZnr!{<=MBHzfAD zQ!4~t35|RC{O`_30=DaqeZSlbLf?AAN@hvZMMRmp%ulMJCaSolh4sqI9D7z<^bZ@s zC|!4E1T?GXF#PqLIiVjn7KqLa9jK3nV`;;R!lzp-#6i<@?X;^p!fesTyKr4{pMzWF z<4)x0+C2#x(j$(do9T9fP9E4o!_31XI^^~EwK^80yJd)t9USyJs@4-%_=MDW*gW{g zc&E;&X@0Um^r54%Q>qeuIGe~O78Owh@ecKY(|Wy!IlBul_yPbe=8REZV+rSvJ&)&3 zR+p$p!)pki^TBJhy%HtOp_FJ$1vU}Hr^}1kAqhI|(4M19;FYH)$t#`*fPifl(Md_SgIRgAm4nW6uY zu7kjmz0zkJDb^h36ADvyPDe zpS3rh7qClAio6ec^$1 zHG{)tcjaut`+gQ35tb{>9G=OBLtE7`&~H+uZc)DjHh;uM)6;$eN@7l{M-wcOCQB9h zmb0f;SHce&ZT&fOD$b@Q1wKP|N(c^<;U&6z3VpL36Oxo^Pxd_RcA|9acd?Z_8))M*--_Wj`( zxsXeL10*?vwD$0nE|Lr}58*;tna8iUedM2wO@k-Q=ExZ$B2!kGRyvDPEoH1{>T>)X z%*F$UV z1}5C7hD$CT_$4JIu*a=HDMGgh4O1&k(FbqneZx-tsyzeiJbWhY)KK?Mey8a`!~M-f z*6mtk#ieM2-$9dkK1Bk7@a1*E{4as|`6odf;5WmqOYKG(7n?X2L+5MI+R@(RRh;ho zlTSB2mICSO&XQgK-I)uT}@L(78c+7wzEo(4Pjl?6b|1y>{-OAc?Xjil#xYC}AtaR=q&!NB-QB(&T3xjNGjlZi?GRyvq6L-7p@<>`Hq z`-<0(-2s5_Ci;ts0`D(%Y^?1W=;ylkL$9#MhuI$BS#~GGbf$0v&#bVh&aLfEt0?dj zq};peHUaoat8TXcF*(>l(>usceqjJ$`x>{_Z9#y~Vq{6Q^*v{5sSw!?EJ@uHS&Fj* zQ|lFe9)_RaU*yzuGKe>D{z*^eR%7KnW~*~KS?SCfoIW$~^u4>h|Ixh&FlSCxnVbTt zeZ90q|L?@NOu`l~oW_=q01dw97UGG{eUdawlA-gsTCmzEJ!dK!j;ai#xP;XbXwK5T zv4MMdHE^-N-a=4<8UxKMR~})=XjxjMtj_^hm6-Z;UH$oaOqgIzojmb4m!w*RQbo;u ze>-D;l0f2n7^mCP%_vpX5tLw#Kln}r?amJzHIjd(TCnjauf5P$TQea$)#oeml}9IG zsaZfZ$61NULg&@tybjUJ<-Ix3rR`Bwq&@eG#hr#?K+4GlxJ4|l8JQS~jWmc9c_OgV zCv(5eaO)_Nr(B-NA)=zgzw4%{b_!T3NclxGvurw+GeL<`jMdriX#oA)qia7gp^E(7Pt@FW#Z+M{cepyapXLWGLE;`PBY*cb3JgVe_=@KtJ z#+*=~_UHbn(LiTg!GQ_Pw%Jq?KAqBPA)B{ZdZR5TYfR$1y34J3E|rCCIM24^mipd1 z;OV`uu7l;czaF2;OuHT(4>e6q;^5`{sL!!@(`$b>I?0^Z+6FrSICT`-!DKEdP5ase zMhb9d00xDx?E*}?%hJ}eZk{RzP=@?mKEc=Ekm9q+BwV^^41GLO5*9AIELL|D)nR}) z!IU>X_O8>~`KLQP;REKeVKEn?n%pjye-g-Hwk*BoB(}sOe0;p^S=AvS#p(5~N{B~f zkSbuSPys!dy`qGBFOTkyzdKE=BA}ovzdOk9tvo4>L%O?HFBQT_(gc?FoEL4IO8gOG z-e%}qHMdmKF(k;CVf1Dmb(8qCO1vCz|1xYVFk_fU7Jzpp6-aVFd8VtMqLlMKsPs{;KeSJQHD4C1QhO?i?lupF z18iEg7)~`6T9;LG+?b+P=b6IvE5wE7hj+1o?@3%um%32mQQ}Q2r{vXBm$v|z2MP!T zU>}IgyMK6^RUoL1INl-4hF? zRHdVyTqN)E{VgeBDwob}vrZc8XLA|ms2-JT-H_F59wLn-`ZqMqPL4aJ?jZD=yE?%?;2MX$)iQ z#QNrBYHA%B`A#k-xo!DaZE}>-&2a?F&t(-*M1bCv9aEq_G_}#!aIWNLu`5&->q(X4 z0)eM;rNx&NH9;nzId27VaaBu}<(@#3^o;Zov~GY`cr!3R8UUxl-`)F^db5kcMSgT( z@WI>kS{;?bLT)&F_i;;Z+p)C{R;scJ)+Zb9X~NdvrB)#&I?3P|y88K+ToVt%B0n36 z0))+AaU!f$xnKN8=i7ptm&aBFE>Rap(k7$BhqulxXGhYp8`3kmU|+_u`FS5LuM9vt z4!|ia-F`KsR_Wf<=^&K6xS}X%&r%5(hoM;H=JFYvF0HHn4p3LP`Ff8QQUKYyORM4P z86+BBldzhZ#mvOUCJLIKPUCbTA;C?`F^qf9t;i~@^AAy9y>viSAWc^p>AG72fFODwDD)53Icp=& zogP<@fdlPXof{7iYWhZzkywrYxki(^R#(RB@tk?XVbUOtYIn^daa~$ni*FL;1W6T5 z1@Z`h?$%Tmj41`DuQU>#9dADL?wi-ed!qC z@Ng0>N$Os?IkP}j;(m8j^T=$-sv|@$ZjTg@P3d1iOfzi9ThW@?`&)MN)2hpomraZh zzlUSgso+wojDnwZ%eLWSl*&uK50z2|h!5`L42W`|u2GN2V0( z_5!I*aW^UjwnY8z$0Bae(%(2e3*PY^_2C^67iZ*Nc_T2d)o zFveto>e%c;j2J0(z=5%I=}L}to0(~rE6B12{5$ z<;Ke^38Vly{n#apf9@ZaFxJF=(E*gvBc`PvTHz&w@ zhQFyhG*YP>FOb&qf4`ynmprYfuS$|4@{Cs<$Caf}H?esJyZdbY@HeZSZ;!%& zK{Im!7n8<`M**exMH|D}D%9R*h(lhmv{!)yBa~JD;SV0sqVG(+kG~s^vT`<+)qI;7 z1GQ2wxP#h%w<#xR;NLp|q_wxV#$F9@O*J(s+`4;?eg?Tkg&op?a;5{pZf9f216WpO zWRO_b`~Cwyw(>h$>Q`@^qIHN5#Ah%Sa1YB?Y|@7 zv4pSQ#U_?qz_0Qbk5IyHdc4sJc`}|HicNWVZ{bXO#LG8H=;iK0?Wb$0N%M^)jRG%p zIG%K#eV7OH1V8#{skT1rl>b^;8YjG+OVzERWL!0+83{%Gbap|=jXF@vgU`**%P^#y zAuX3YvC~lpq1(z%;Zl!wk{tvOGpMTY2`=#euMr0l``9_aOA-=>X%7P%*I3zztN!d- zcM%W$EtFROWjW22`oju~)$7p={3E->)C3;h)mkS7JIAzH#(q_jSfz1vPCR>^gmwmP zHd0;PmRfr6<=Y~iAa@0_DnkLY`F)0u!Gxw!t`GYRcv{5)rL6vJReGJQ;StV!wks_Z zq9P{Sw?*MyuKUo$l z-I=4Hq&BnfcYPSyUt{Bw3QCC=(_kx0s^ep3Iae=q0d)o&YgO;Ru7dBQNzTyl-~3B= zq}z4_wvIKorug9l3d$U)f}IFk{OmzKZ%WOtQO@KV!%kDN`5hjT8IkSMnN^krWf_qD zxOf~9A0%8@L#>oeUOzun0vA*V{;q8Cv$A)co}^t33zyE!LdlX@AXhSZ^E|m^%k;PM zVWt@;dZyE6=3HC(Cw~&Dq-UQ7A&N!NSb$Z=k9~$(bg}Lf2M5CvPH?gNAcJV+6$&E& zsc)wbW@-$YMZ6DTF^#RkMw%EJ+a8Qi7rZ=c8|d>6)};oHwGNh9w>Gcsw?nJfl?COh z?f=H;kpfm`5479puI%os?q^R&mB>>Nx98+gzlCsx5@ucDV8*vf+xB`OpMNBlvAn$W z7{1haQ=GJ6(-7d`bI*=wA7nViV?}AH%TJEkw$sWW{6nkkJdiH_ePK|aN0UEy>-v59 zbos_ivYnnu%ph1pJ*$8rA!=JLwrW&RLxKoKPpp^N%v&R0Lpc5lURL_|gaC56@jv2# z?9)K(&AT5Y-CBzNw-aM9FX6%r&eNteM{A zQe-OHA;94NYlk#=e)#+71!%Nu67tMtM-5K>cOcugW zDdjeU@TJ z*zXj(OTu3)OD@N~E%-5d1@eyT#Xwmr{`!&u{~EL^2iT&Sj9()DUSO zxAYOaY=c({z2>8fbmpt9qNzd;;!t1sHIHxe77+EYF#5l`254@no~P{RemF6$qpHqh zVKva;*oj{KlsT53;ch+Yd`hbIpXZ|4?e+aWFB?^H|K@5ZJhYq zJDf85CkwLnIHm=&mpvTiQ&pOtDJ!omFZ=HZ0BD7zAD;?B zoOK=l3n~Bt?zn^&GJG7cM^}E|<^SjD?2z7nTayA4JbUpE68XPV{r~<;iaf}r6F*c` z*rfwP;%B74*RwIP@CW06st$?OF4@dOpeqBG|sB;OZSpMG;@K}{n??Qq_UOK_)s4FLWM`^jYt`ylA4B7bA@6~Ma?{fgj z4cS6nOjN&LbbKKb6-pb>b*=n)x)b9|mk~}c!aAeH;U;r(`F}fBQk3>A zi}p#O_CoK?w|~ut>mS$y+uFeiCvgHL3uh)wG=l$cVQpn8;%zJY1^ogW1_9SCt^8uP*x6`u+}Xt^FvkrpdF=IG1smsCvXNb{sQ=R}xg=gZ zmR^UAqV~7)70GfYEKJfK&j>13ip9N~clfN?Ld`4nrdKITh=ynB1ha>HJ^QJ*_W!-Z z16>B{sPOLixAJhK^FxUYu4s)_eW05a<@MzB=)~CKk_1f-`2`pA${1 zq*NLbe~#@b%~?}wWm#$ff0RopdhZOk2@eCa3QJ?6=znr^v+gQr5ulR{$pA#k_EArl zU`{4@lcDPLry5XU{l6oC6|nSpX7nBTU!0Jc@(G*mx9T1u_C$drL2zQ2M zc=x>Ze`G;IE#MPxOa6_P0{Eu^K63oz4^$_>E^(rtu%tN_TPDU{TwF^#g%;1|_;3aAg4AI0fmj0a^+wwvid%jKWJqfAi}NN3%YMw~H7`IkqkW_>g|;m-Q`MYKC{7Nklt*nwQ+dZ2^k zILi~$WTc~O5q39Oo#nsq@KtGg=loCEe(ipFPRAou;qDPWLOQJa0_)hXCPrQJVWIXY z@Vg1v!0Ym_k-vsB%SW+nBF(g*yTyFlaczT3m(?CUgw79tQv^`4i`hN5th78oPnGp^ zT=So-dvL8>J#IL?C+apzqH1Y%Wl3S}Ev2@@e>5v=Sc0qTs_(@%ZX-`T@4@&scRP2^uF$$6k-}gx!wi233L)H1SbvEA%TFg7o zUnkCkHimg&1jKTNkP?1=A|nFj_2Q*oH{yS$4S>@Ic^nt$(^=ct5)89BJS;3AH~Z00 zIGO4#@zqy*U96x;_0zRq>!yb`w>FD~w5E;^k zP#Sk(AN^MrwubZJM>&M)#96rFkn=aOJ`gHkgc(-h+ z(dMm$1fHP9_QSj^IR7w$=M_9Zdmkug4UEjn8qnLj%rN^L-iIC8gwaSTaNmRF%0&et zNzH&i#Zm&Ft!c-n+PWw1)_5YlgCfu-nMrHX0InpN!a;$I4nn`MTYz#ghM}=m$fE*csPw z{;Qf{G*3RjXtCK;Wn%vyJoQ(L$=Bk=pEhydO0DMQqufvu=pz;+kau+ZCJoEGO zdh8onGKE;^+ZJ|R9@}@hVxiI!-k;=5*&Dj5SP+pW5-yU~`Nw-4 z>GdTC2Vfc+l&a4fn(c0j-Owg(-0>Iv?Fp(<3rqHtpJKvEO&f}g?YAI0z`w$8nTL=0Ud zBvf1~ZMRJIm-YR9-E5R8Ob*u%oF7|Uv~4AxV-M<}e9X6P>R$4^QmW4Bc7`k|tX{hf zt@Zdi|HH=gK%cC?244<-Q6JFo9lKMp#U_0wWkSpM8e5mLrT#LVDzkg27&FF-NLsnhtyilcHP?v4U z#OQ13j5cj)7F6ZfW~}3!t%1r$x5X19Ymx%B#=L4_2@eb$tSR%~wZQ>C`iJt)0c1A5 z5~~DalUC&ex4@%Z9^>_pWCzhG7+O1%Ct&-3)I0cYsQMHYDHur3!Ou|r!#i8Tvc17} zl`&LH9D zxc|-2MTQot!Y5R9CS4&bv7lEOcQ?^(_qNO8Yd~m`tC}4zI*7_@aKkJ0_P6+lyP^}d z@A%ws{W0o?mUw@|Rx{jdo$M1W?K76{xS%&Gzgu$~@zKOU(=xYWEhgZmB_m-n%w6vM zmA6KcpQaYUB+!7y{c-Ck5*465S?%YV%yvJdr+D&=Ax`@nS|IFX4pSu?u}My*>L0}} zHL$K#6}z^muF@vwoy7Eq+JW3wbHm1GoeP%)mF2gjuLn4NNl16Oo9;>yIgji$RQlLT ze+%ND#9F*EWnz}M+Z_b18jkIC8zT{<_Z8c&pc<0hPl~}J5$1I57!q;D3xnPWR$92(N08!MN&M*7YnWt-__RC&d3#k7Kf)8>qU-+5B;lA_k@f;f9wi3t7rrkEpisOB6HHlGL=V&Q}zFxviYoo|#?( z!Qbwz@e?jD1&RBhgs{&^*yM%ttVd&M`C3K|a!gEI8&^8R^5_NgKZPnN;V&ZEaJKb(ENjqb=Q}_1S=sB1gz0l{y{gV&BRm7q)+P?Hf*@cY>z_- zeLd&bgXUi)pz7Acn7*yFC4yZbmmCdL@bTi-E}2%p#r!Zq_nQ>jUH z0$X%Fq%^VOs~om$iu0nG87gY#ew40EHrb0MAD)C4YbJ%isd4javl_|hib27#tVu1Z zgpOtB0dQsX7vbG?blXC;z6AV&BuYpSE_%$tkpJ?Ja)Q2Ex2D#v&tndm-C6CF@Cb8U z=J2i|P{H}IFf2UOp;dsAJw$QKY*K-*bH9>oxCgQ|%+a}4Tx{+Nje5HwDA!ng{vi6- z{h(YkI5UzS_2V-Ktkwegw|aYE1S-9H>|wJlCte!E|Lbma!yX(eYG2T#-4o_5!Wz{! zL4w-kN#Y*Fl5O*nd3t^<%1>T7a);HWP>3^{DRh495 zR~E@z#jt8jt#4_J=+03d6)2~I*OK)qGYq8BfViZZ=_n@r&!*W3a(g?>C|Bk07oTvm z4<@An4KVz`E#}*KTzY+FBR!Gf_Xup?h@U0**0NRG_&qY@zMfy!)h-7t|b(L zx_y;%f5UZGe(LL=bmo4uoPu)~IGC<24OR@UWpkIFkAF`?_|-uAj!zdwd_?X1c_Vf0 zy|gGel5Xni7>9ECIclz)blNaW(vlqWUHd7@(m4gxl{1lF)lbfHDaGJYLGxUa=8|Lt%`r2`JHZFRx_=2f1GZ- zuu$nZ&mxYxru0AO9-Q=j_i!-2+1zbLlwXd#t4_9{f>6#yC$!r{m0l8yQ|59A;d&Ro zKGgJ7;oZ#SWj86I;+rt?5Vx(%Jv9Q(P}Q`YTr6{!XC=ppniw@tfTFdRkGu# z-p@8R#oJA0-~6}&O4r3#6?;?O;-9(NwyEw7rGrQX1LK$XY@dO_I-X~pZGy$M<9MV2 zFte)$I<^o^$&hh3p@-w zPYFONw#lciQWCmaIvoe95NN2VRna7s-^PZ<`BD8%^yRp7*71;R;lN~Dv*Jm>Q-B55 zjp?OtERr0(cURx;&kZ<|H!~MENK+Lh_cpR6-}dDOl@B%PBq0RQV7N1ep$=71T<=lb zGgZF0dPt^MmD7ETvbdle`$#Xs747xwr~H;p=)%t?Flb{E^b_v^pUM@g!q@|TF>>@&O4rTp!z&|Hg!{{dE4}3*Rh|q zwchpO$Tf*>qQ2g7EdIn41R|G@kwaAT<`7N8r0^56Ue>?8p&w<=+Xl_mW5p|~J0_*S zk~~vPZd9o~WvKasAAb)FUn1FXp(cJX1sK&G)1d~(u+TP(%Sz00ZjZD^W?^RpORuV?`bs-r}2IzEPJKnUP=a|UrtYOU~0_NX#M7ihrd#4H^E_hu503^ z)MK5aU>CZf(oj<4N=gf(zE$4T?BD~ewBeoUWc=AnK`cs=Bu_^E4h|`N=W_qu(6uX0 z(9)?ThE!dEUuWq0dr%$;s0_Bax=^5gtV5~%&Q$Z`iOrij9;mY_H_^WaZ3q)T4x?io z^JNDrEkAQkOBhxGsgw>{R7hE;OUa7VHT1hE^2w~_g<7m1I07%#0dHB$VC1ErBA1@V zUpcZj_%Uo6AstWMl;;IK;*~^^Zq3g-euf>9bko2TPq;vS&IC=|$Wr4|;GotVVpFWC zkeq6bMX9pkcP&r;2~BR=tNykvG7pE+z<*nmofTk!ogCX}T z{6^z%5}^0j^=sjGSgpC?f=9jz`RBlqcZC)Dt6B(1Z(eOsIy5j#7m{e^H53`J56wG_ z5#gj}*DsQx$QY64wj3-kUV_WXs$Cgpp^u0VOM zFpL@5f@0f?(fMKyDFJDi^7VK%5{&#?}q1A4IF}r?x8vG?vXeHu?*|f++aHV#Y+|gATs%H zNmMO234mrUJ~Ebc7IzMryv#X{TG=FtWs#y8@)WePJ)vDaYFB?Bzi3qa65r$Rsq^I2 z`4>yaX0$_=c$^Ogx5wG|d{25kTEXSVZ`s-D5PQYin?`7;U6%icdbAra_@#%&25Gg^ zfP_%MN-h?=ox?$EDIRk=d}NHgm$&!zZXWOEB4kP1)J(Y7*GX|z)DIq(|?-CexR zv(j-F4%J)nSJZ?A;*KAGo`(~;`gO4L(5fkbSA(H8(wVhhxNX}=Xk=~j4nR>1a6R=sZs%t^Pv?F zQaNA#KgRB$E&4ne6D=cPFO`KBpnJ+F^MR2=?56t+^3l7K-GVxMD8CR~JJyyDPh?e= z=kG4KUsSJ?B(k}3QNuj8XK?WG9VsaT@#rnJ-!sQOueWJwA@n!wHFSrFAhF#u#TG`S ztE;GxOepXs*ip~LZd4VR8VPl-sI#MV>mEI~hPY^ZvKn$@*ySEB3-E(+KcvNI#Bc5_ zO{N%>+GQgOIPV|)a$~K2mX*ah^>otW_SzYb<8@o&AB%l& zy;{4o97q3BEoWrih$UGy^Rb*i%ZS)^|AmHo!X@6U37{R&fs-F0Tx1OKUJwV%|WieO~4oxqnMdQ+@i z8{{m=rip-hd!pl&Yb1HLk_ofQ9OkgQ`L&Ry>3;i+X?9U^22zlW{7YFheM>3gE3`vW==yv7=gWgTStAy z-eqZN!=n`j+oYNb8lS+`nubap~q-d*Fk?`j}8RhCD;K&qj& zC@7>*MtltEp)@K=S{;gCTG|0d8fu_gD5b9_N^r(TIpolc;GLHH_*Xk~CrNt^?aBVW zyqcVhl2q%iUTA)9>S^6uGoYWLc9Fp@cAzUV`?*4NQ6?Z0jp0d3v6fn^G%%H*rd$}<2?HdS;~ZUcCe4Yt4F z-r6@8rwT1Nv;bGwFKA(KMaRhhV8OqBF#_S3p)WlIW;pcZRs4sDuJn*3T}@H*Rs1{3 z>Atz@+?olGpQt2R?OIyD)bg&ksin&hE-P};CK1dP#-p##3ACI6E=uo^_!Pw`j#Rjw zS)%yUthYP5ECk75=}pyMjoKBEmGZD{eP+@`L_`Ep9U7)Cb^V|q4BZQj>)tOO%ahB` zhyzh>G>-^+C;^*{<8uXH%c8%InQ0+1z8{-I3dFMTL69~S0doMwEk=_B0INlk2u_uCS0o z)xlFOa7H|#c@hI&u(nN9Lnm}dio$7i3^@AnUDH_r_<6YjxAoSEBWF7EsmxpXF(acm zOe!L)2windAh$#Hd@U&K(RNLWI^)CYXd-;EOsccvI7VJk?oh>?DO^h65-JwR~EPokm( z@Z*Q$bA8H^4~ye-^7=z~H}FSjMNoO$=Z`<*^gRVe>E>aL#)C?v_L4_%VD&?ZMhzRL zDnKV5kYZ?9k;ee$(ZR$xoFv1C(9og>XXv0jE{8*;3HD5io>{iMh5{-+eixY<0x$Ie=u^I&xCLe8$ItB z4vzc5bN#za3+IE>qf~M<+U2iNJo_FV$Bej8U4WfR7NOrcV{zROki}f5n z8JX$J;}})CF#sN2TzsOgXBe4kE3Ma`D3tpY39yBh@wD~c?04X4RTZM?b+7UW066qD zNr^Kbz)%DJAACCNzX$2xAtWUu+ig9Z^hR8dk4xY>D#(CY+3&Jl>{z2!KLjdx;1>q` zna7m!Uvwl)+6o|nxiD?F){KxvyNY`PP#(LtN@u_No+sCOCc;rZsI3IL^miA z0M!xSt&&Bdl4J&e&TC66MH3nko#}n=%pC9u&^vVbF+fbw#r?n=ckshtL&F(3nl<*8 zNtL<-0G5w-*ong4-K}pQaNdbJE}&;+WQM2gqEBZgRXF!D#-`d1r`Ac5xZS5ldg`Z? z2!L<>Ps;#jDYjXzHpY|`>!dA*;IsFYjb>z2v^4TJ-d!OAQfb;UJ4v(++#xR~S4PCZ z!C|%E(4sbE>ENIX=}$ag(7Y&lxl`N-F6EezqL7i3H}UO3@-a*`_NF5xbq7EPSob3a z=dIZ583>^2wT;8W!ghC-4D})1=q3qq30Iew85tQczQcm-m}_8~=!eUtasbXAr1;AL za|Gw4X9XfBJJnAWBx~H}6ahhJz`-4So#3Pp%WAdqo%_CyBBD!~(U7-U-p+~J+@5OR zZ*+Rx7`Lqw=njVL2v-bAvl@hB`El6V^UfMv*qAiEpA~ z5)~Vpmy^fzHV_!Ox!J_2CZO*j5_Sdy#2c(I07=l&+77SqV3dSl?KYZBe2$h7F<-^N zjN;w%5TWN`TfI_5Zn+WDdpLV+GZ&VD|>55@&yp%Bxqb zRep-2H$D22Vt_b}(Ilo+C@iWBFrNbw^7X}qh3#$1R=+8ld=iDkK%?{&Dl1e{P4kG( zq8VcR)P8K!EtIdniR_MVW^V&WhJ^tD@36!X0_bc1<Q+I04wnQDI4KTe>(Xkx`VkzyOpaMxjt^9L1+9frr)N#M}U24cG+Q&-wwIZbfFU zZuYV4NYd=~3q(ZCDhr5X^-k*{cNJ)3%lKJsL2zNz-TH$Dd-X?hdO(P&_8!C5&?gip zT1S;kb%nr58W76r7nmd=*oFH<(d#0#CsWvq2YR4m z;0m;lO8C5dbf94eORKur%M#a` zhG*!Hha%x_^!1C2h|FAE+85L@I4n)3ExobBLql8Ug7mkwWnLMGg1dx`NJH+MiU7IZ z<(=*CPi9I89CekiH)GwbAa`Q7vB$GF_j<^qRGQj);Un!6s z0dwl(;i2NmISb%B@o0aTV@HZ!&al={iC^rhVX%6ONK)l@$6#Jp)WR|aS@H>?z)cs0 z-3EvFNli|p6znE|40xE^Md$#R1KOLS$_55HLc*E8Ipup>C3%vGoX^g+LKJJwvLIuZ zpvr1%K0p(q;IZui=-t_Q*{2+!F>w5m)fAz@crc(6e%pOw@whqb6qp8rz@$s3`;??8 zNXr+>edOSrQwr#2qp^q=_pR1{>+2q zHv-(9+W9MUOTDtE6wFB!6$Zu1+rOPc7zb7R8UR?Z1IAtIAnKv47g>mg9TKY zXDpN)(v_+#>JFkx(|+N*uv<6Wam4t6d6N=Z-K*g5fxF(z-pm2sILL^Z#C5*AGe8Y+ zi3@R6Pd5wIs36OgJ>)9^d0T?DS%5SLg#A$&0tnE-#dB_-Q*+2Z6@O`qO&37&4{dA~ zSl4f6BPRlc^$6fhSY9q>z)!0ySUM+sb7l+Jki60(i*UQqh_6g0oKGf=Di>9uyqDLg z!cbna`l#!+^##k3!P`jfWk6X#{OKXcfX+t}2%GO#KToFAbZH3gOU{f4k*FjM=_sR= z7L*KV)y82r0Ue##^z@N^;VZAKV*`@X0SE@4R{P-YR5nfamN zoVc5Xv-FlPXU&pW@Owa;SmTg_s%CKLhL}Z9IISM^tsPy}|PXGl_*(?Q1_J09Qx?!)0zy%)K#<*JLLRDeS$? zSUdbQnb5X&D!^sL)fuoRIdl|cE zPUy`QVkT>u9G^dbZm>H{MsCm}C~O=2>Xi!X*Ve!o8^}2h69X%CM`q04p80`S)&JoY z9)tq$4IL1d_6TkTI(mAds#QL!GBWXZwg-S{h)}kHzyEsU#kc&-qevuuXor>5!AUA% zwHmy#-0AN0-C}_C(KPh~JJ^Tm>7-2+zvVSSLLD3KYsWr-!<`R1`SSp+4RHxWLaI96S7!XS^Fx4{Z=8um~>sL6L9S1YnkpK&}dcvQtaybc-r;iU) z_~9Fp<^*S3Uq<)ewnmN)v_O&8Y1kaTE%tWRMTCz&(?B7D+fbFO`=lYJ-*0h-h zrUG_)PhAJvT6;ng$rPFMpp1JT9CUm#%UvUk>JnKOrUIz+k8cvxHvYvOvkBA+*2o_c zG?vhnd3Cy8t>a*bTj-^R(7I@44cLM}JWt|4P}F?V*ozax*@@@gdSSv8JGLTPOvk6N>909`soB?-m&)$MwdvF2$( zjNkqXbhaS}mJH@6FXeS#h7F`WnK3x8z9(G&pP3JQ%`Dk_+xz*)pxOyV z@)20e&t&6%c|^_$;5lJ;2{ zz12IRBkn--+sO(tu&wQ@|5i47n|hu+lYt%{Ub7z%Y+f&AKR)O$%Ecu=ZL!fzPtf?L zS!1>i$v{L7<$iElNEv;hSxIv;UQtQ5aL}O!n`x5j&EXtw8>@X}nFus#gfhrcPkydG z;>Cmf0tyf2XhWE|gvjITkqdotwpHm=#OT(54l%?HLK3~L)K$@K`lc-85ZH@&j6uPI zNMgY{=#Ak^)Sjow>IY+`?5^3pvDkDvRr39DedZJwC*-Ko!&%RY&Aw*@UP;E$GU{5n zOScy;tw|WsUQP`@D<8)fp=Lfy=3vyVgOAD(D2l!BT^p^rWhPwXgx&bc%6L2TbOyb5 zH(3pqozZaC*V9!uRWG^jyX-;9>hA1!KN@{m8As3vT{Ru?B=#!2`|x?nd};JMmTX5A zxwWL3bK%`t+zCN+@3h7yJFQ^~5}A3@7dV#pFl|W zacE{Otk- zSaB7cfPB|g4Sw-3CP!aHm5o>6%{ggcW$B_x*F^og;7$h==|Ya%#jQA#Wj&PJ!D*i~ z0m3(1fj0CIvLNRpGYTZ^{UaMx#m=$IwktQ)_iv8gG6vTi{KrW=g4=$pLqXy}39M=F z=gyL|-4W!9apSi%#!7psoUomX2UbUxAB;Ap3E_GFf=YHT^V)hcz zO+rN8`Jt$Y%CVU*ZB8(KU#`2EawqJc3GUx_xxL(`prVNA@yihzAp6WV6EZ(Z=e`kr zg_0ELcI{XRT?r(X&eX-KSpCV}@eU2u)rMYs9&u*)+y!>uMrmzI*Qi`Wsm`wMOf}8d#2c{;9Wta3yd|Y)9A{+cK(!^1f=poncK)aBbRiQ&7@~jo{Pk^ zG7t5WU=de4WTDK>2l^G>Enz~CCnNsI=-}v_*rROb6~ z?|{1o?ZsD&p8}qWw`{H{vU7NI7Me8MIGazb*<+>*oL4Y3hi**-c3CPcT5t5DPn{`R zpL6J$MdTKhDG*XhvCa7R2HW0Dw>P!_l}FgOxMKSk;>6=?xInHhiU^;EqwG%dwtrhEeVrwgOKnlO zJ*#i@1Un(#N;9xkEpT3i7Ag&mutOwzVXVD1=Adsji;%=~p2EGkPxl$1kBbk3^Q@@NeEWZ|W2&r0409+$s z9xhVj-1Mz4m&gi_L#x&6J1V1~BAAHN!Owr_mRzOO?tV!HRAya~F-|7LqRIold%{^I zjwbL5vPML>d~Iz!D|4yc+RqD0_h8m%VV=(Br*UZ3UA~1c#to!I+9YtM@HHG9%`H$- zxc`(Bj)@lLnaG!(s#m(5tWFZ`a+NH$GHnVGNoKss@Ez2En_J)D5bl;3#==z2J7Kg4(x=Dq{T@ z|8w`VC7uCTuU!IB#a$u%s&C>@b|T17iSSZs5(xoeFiaKuy7%7n{D$0!SFW`qnSire zs|$PkcKamxhz3}5^4}8-*xZZ*uY8ehBrZI|E4rT>)Zhih8sx21BWK<2-tGeGVr zJEsywJHwp)CRoF6sZmzk&u^(%rbS4R+L7OTJR3pTJ4wejEOGkK_Ia4);KF0*H1&q& zMUip~hIasr^76Fzs8JAivdA2Z^M3LDP!r$F^`Nxg(=-*A*gKp;Yc`?#LFYajYBj$4J?d0CZiZW<52H?7hZ%t^=13Qflo|1wtQ;}*jPHR^U?7{Qz>0Z9ub<8Ngq2HWa7e}S3M6+M14j!0))6zh8H~Nk(YGeGIn&J!2rp9NrpvX>0vlM%Mc17gJ zjY1T7^^21{-LA;D_m-Y`Q4{If^ikwPKQs4zCSQkj;Phk*Hn@Lu?fE86`)H)Dwfd#y zOIDGxxSBmP0+7{@QIW}6*~p`utEZ3}5cANJyN%Za15#BJ#tH5lBpzx!=zV7;Uuxmjm- z#WN=e{^@u(u|2F`$N>;a7(6UQO@~W18*6_dIW9?r!PHpF^;4+6W|OFBwt$-j!)?N| z^s|c~tbJ{DyH65Kb{(+Kcj=pxteed4nn|4P647sChqGsWodSM)_YotxG}8^3k4a9A%A5 zi(gc4SwEh#FrzX0GpoR&G9g|GM|{_Xo}k=1!DJB?DEuGnbF5u>xp z5`HwbV6ye@(wvI`)O)rnlFo|ih)8ds6Tly<(!zmQW(5Kk=>2gQrOEYmNswT{H6$#? zV;FX$qgPOuoBmt^LE9C+-Rr55t-9eFdhAmwcB?P8e#PEG(N1ST&t5)Lfb{$5qL%F) zUpBPMIjky;q92YVn>r2^4LO+aDiMHR3Wl~}ey^77^qJ%CH?a|`1=xuLpSsH3Y>Knb zTMW;;2K2%Fjvgc7?$_ujcQTbNE^A44f1qZkT+H0a)AM5fq<>uY5(wfO3w5!Q7Z*>E zcn+rmP9FkHf2ay2WfmpvQe*JjE0)T>VgniLvFp16^*03;l_21RhO*`8WQgvU!S0tt z8g&`gwF@PwU5>0&^(wV#1U5#ny=Vue8M_mTKXc9oq;dMQO8z9z=21$N!>N<1F~(E5 z{p)fCgTlR*n(w&}-k@(DTl3M_5WmXU-+r2h-&Vxg?PnswnSJe8F4cg|hiut<=ADzi z)1Ut(zCm3=?;g1@@-{M8GApNh&uAVgPye*K0DMj>_TV`ET~wZhQSm6YW!6xQ$LmGx zw`E{^CDH*sFn3NZNB`qDjw|@eNqYnigSiGSQSlw(lg7PS4tsSOH(4q9X@-^rRnGP-yp*! z;)2vYih=_*pFRHSGjMJ{^2)k!$S~40T_Bx(Y_%WYDGsjWj#`2>5ReM(Pub}G$u*X;yjoUkBi9C?9%2 z5B?Jw2(&Qwsxh7PZ&MHdPDllTI!|I?%s;sktUhsq=)sEt@e6-TO8%yY z5Nu=i(3M*_e4Cr(9;1|f2W)&j@PEEyG_g8_(7!X~TvQ>F3&fxwO^xe-!E&nN8U0)* zQ{!mk^YrV_Pnk>yu>J$gfFFr?7i*KG{YPh`>V2w8(cruyrJ`I9+I-i#-*Cn@n_xnx80dFr!Le~RGB^5VxC*Y{)Y#ZMV{Wr1<>++ zZq`DBG5a&Ry)csfDThVuYnkgu#+unfng8_&E`{D`Kxm@5urcB5JfTwpb15M!h#`%_ z;;^jdEgh@&IbNDzpiKlJFEK{o0%Dn4Mma&P+h>!tOX$kav{=H+&pqQ8WyLL(Ze*qT zwYjZxs%VA!)XoDjdbL__X1qT$fxA%OBsiL^O`$ozP$e|o6NDuaf&N7rc<9@-9vPxg zvnq?+-s~HMG?XV$tnGFO>_tLvzHBdg&+?TZpY5y0C&~$d<=#eE)N8tymWxYCH3m$^ zf&dU z;V<~Fr*P`xwN#-3;1&E57oRo)?i;(*to?;~Y=e`IBmy+Ui%-W%0=XgP)ddxvlKnk?nb)E9qY|!DW zUV%x><*=t2g5O>{$>5TniRnkjf%Ye=%E-J!#ARr0u8)jqXD8hVw7#N)3g81z+lrf=diqjVpv+GkDnYlv3#zv ze~!Xud4#C>k(;&RQ_=bI!=HJ<@D%~N5jtBDQRiy_gLc`SmFM&mQc~Rf!!vGDzJSs+z7CXpx_*8wT%>p1uj6?ojx08*;^3RZ z#k5+3``uOQyR~WSsqWFSI2W3zTi~{i=E4{5uJP@zm32|DF7~?u_IxO^Mioh{Yh0Cc zR0bCwL?U&i=S5+yVL?U3;#cxHfS3s!AjcEq!7^{rDs4^PeHeS@(ceAMl>1*N2b;o= zt=OCpe)qNB)p8qiCx7ROYT1-x%(;&`q$#)IIQmkiVWo#tRZ$O~O5>ewgr<^^eev$g z;4!w&w2YiRM8w)_RkK}6Aw?u$v${+Tekm=(($`>cWpD@s%m}nPx@W~xiBX?ZQS=Ft zYqOmPE_@=6h?r0viP3mjUhFGiL1r-$PRL7`ae51iPr3bw@E|BMu8`4@l;FA1E+&#z zGH%|hJO2|jDJ@Xv43m9MSMb1SY~Vx`Q+l@J$XNM0hQcyusuWXb;ANZ$q%~qXoYjS2%>L}4= zc*^<1Zvj$LByG+xD)%oU1I$mCVb z%+m8dZ~q-rF=(=|RawOZ9Km+Y-75x@!n-Vl%hSx(e-dF33u=(@iD3~~ZW=OLr5Q{@fia z6UkK7^8@#8k&fJ^P!t5K1{`OvS_f${uayt<;)Nq<_JTs!&z~uyg_-lDc%S^lFFNF1 z+T-+hqT&UEFT***udbF_=TL_=zCLQ$*_PJ|){mkN8x1{uzx@?*o-CXSw(5(sl@j`4L(4DSp;`)lt z;TzL$^9kzM-Ha{J1JxUi+s_zopKXY291 z;cVOWvqHzt{wMX1Z;b}p2W9fMA2(4(ooPq`kP#39sHkzzsWc{Upa^KyXSJ>d)cLh? zTEet(D8r2TKI$G*cvDa7VX+Of-F6S}b+%R6>)@Q=6`3Ges$V}U8bd|$-_38hHSQM&`t{cOUIm$y@ zi>(diKQn7Xa|2IT;Y_XWAjEIqtrYXWO?n<@rgdqU7->hGi zPWq2J;ReSC9sYNf(!=w2xAsFTgL>~DB76Uq4LSgT{C5HO|0VKIK8&h(ckL0JI-cA6 z|0<~PRN$|1!KcH8%kd=m&&>_Dn<5XyONKTe!AZgY4)*>1`t)ZLLUlPH2ywdxhp z8FdfR=3*D8?S#?|q%TN4}^9)398Q@&pR`kUO}@t)Q+A&kXFzgxqG zJ4lDCsW$driWq3ncceniWsJvTCp;6l86P@!0@t><$Id#S7RnH7X zY^{x(O|ofq&sLRVs#ukrA^ssu!vcVOL<$A&)!=ee>BWP;xo#w_9Es#IoUdNen-x-4 z2O9^kIf$tN@eE05#hC_N?8m1sW!K8wzh(D3ub!S0XZPo^k2F$XQWMu7yWhK+Pi=({ zmoYW6^w1_JUOI^w`<$IEh1XhZx}8tO6>EwPm>z#tm7pqCyK0)Am{-$qg8gt-W;4hf zGGsElOsem|XfIP2+MGKAo;93!LaiM21pmT)l?-SYWac4wnCXVc10qaSd}FxVZoiMHk^pjKH_oucDH8k8l zzr3=*0XCU9oos|zZ03oPOmMLfpE?N}#X+O^aU@b?v6j}^omRf*=wu%uBCtFCak~xH z0Wzi29L@ufD1&_^r-MZ#nWdrAxsd&NbBmmO{zwvgI z=i=l2lRUZc(L8w|^wr;=cE*a4%xnh5nXbqHEi6B9L={mJmu)fzILLM=F)f_HevjMv zE?iB+=*ySaEczGR(G6r6fq8j(=XfkuMC4f~5Z2^@39kGtjj;gvWc`Jz`nB{-Qf+M= zi6kWTOZP|Vx76ywcUQIQF!S|*wk3mPxt7qr4Hj8ksarp*}|!U>zK zLX;mH6Y%k&?sYuNbR1xQS5&EByD3u^92{le*f2fg&HHOqc)8)~ti6l7KNOcMcJ3%R zVfbWwYB?F(c3%U1;;mAl!aXWxo$pyDf!&@PseWxYQU(;ykH)Z+GLrF`0ZWfPsO578V>lmQUS> zoJ0e-x?GPgnZqLt=5Md_>5~%0z}1e=_HT8>3ss;-ErPCU&S*n1fEU;HX0&FkCm$W* z)_lA++1Jxkows>xJ&WI*Mo2rY!;gD&3l_sw^`+d~@s3K>oNY+l z-kNqk=}e_1U3RB1kz`w`U{= z(m&O!HfXQW}jJEVJLdm z6lWbH2hB^dOm}QuMg}UtujH)D%Cc*|7y|lj$Z*mU;wqR%bZ(wkW(<6h`FyvLg=?@t zIroxR|+@FyN8mTYK`7$OT(}Qb+Wey`BB|RR&n;+p|AxP;g4@;$tdRU zM%)G(T*r%VJx*6R3EWvvmc<+K{IM2yPnY+e=&hoE7?5ys9ul2?d34TxrYmAIHMv|X`EIDL+`4= z6d1WHlHq#LBWB&3m+mhO&$p(LbX=o*Hu zp}S#zM}437c|U7?*Kht{vCf=1b?AW|_UE#7Bfn@}rk#qvl;) zT=c2S@(rQow?_S!A}sPLg6X8M;@2NPeztHVW(G~i%IV5CM9wvAsG*|5u;zXGr|a{z zbsJoe`a&$5C*(fj65afKvtE$B48~bG$;KA;6OLX)^;ljwIqT2<(e@kn^$1`LlL~tS zrPTn6T`^v0zuFzzvzH3m_TY;8Y3NjbVnfm$Pro~hy2cqKIaO8DeM;PtQ1s9HyBY8& z+#NSR7EHw3NQj$c3c@FOQDN2l?o4f0V+MS5yuZ4RC&;snvAbeye<^EjBW~hsOZ$~z zV`zBDp}446X>>I3U0W01SVR1b_yyL{$!FQt^t3cDOW!D3t>S|jQyO>I`YN%X_DB1? zr_N7^M1lgN^76VUgRXOPbf!2q-nPu^rtg&?_n)`k0oETMuQInemXXwB;|JXk!DBr- z&(7C8A_=;5`jCgkMK`16Ta-8VBSX|v?h2?3W_W0~aU_6S`sW9riz!E7?|_2vN}3`>af zWa8MKgjd;9DAM6s#D|g&SLcs3waVIl+sMl`6(bceH=?>bAm6X>teYWlL`cPGW+!2@ z2a?Kzgl`3b%S(?G%80YKp3OP*(oP#2S63)uvQMzYPXaEje#4x-~!zLmh4-z395 z>ccv<^KK($Ezi_=qPSt|@46uE{vSBJf!kg_ajPW^z`t5qm$b|_O^VXp>`w_8P?q^|!Ns2;FPOd;#`)?6 z+IsWznD5_@`ZEpZZ?BS*lY1EUYj5&ufal%pA>dW9Q;M{K+Z~-W#O6a!o$W6^&%lJ| z$(UMQD7IF%b|$8nZr#sL2T}kp?Ll<@l6xB5##W+SS0uGG2K7?>{K;BYwzFJe7WKrr z1`MvY`K;wLl)g5BDvE^O;$GV3nfTi80jk?6Igq2#> zsC%1xXW}G$$PH>g(H})DHAb4T8}FsQ1xv|>Xo2r&idTi_8(qp5Cx zECux~!zs7lpe@nwL6ZpyAWk4Gj2>B9U3F|I8J(LO`1MP&u;lU-yfQUfT~%evC%`u? z@-(D?ST@Q9+Fv-IJQnju^?JS`AG>x^FXMvzwC|B<-cH8bnws zA8-;4<}&munwQ09d)Z1{r^4I-k76R7$|f!p?s@GoHCc4FBSMup_2|dpQ#B5D+u2#o z^S#|^*N*^D0e2;x$3}{UimHm~@=@T%UDL&rV;)ZSn##&DRk}zL0Tm^!e$_pG`<=L< zce8onJ{IG{nGci{IoPXhgm+{Mm7PTLfXTl-D<%|;FRI(Y*;)JOtT;V=5AbAwGv)GT z%oFm6Q|qZ&F}L>i_q4JqkxLiWQ)MPbj?f=_h=Q)%61jzIl`)-auCH|(0f^%kuj}VPWSkwFeOr4nAhNuC z?S8_>!DZ*PYi+I%G@&$-^Y%jy`-uw?-KmP^&uXg3*?2?AfSAs#^{=JRWJ(eI=r=Uq z38C_KL<7K~0N^rPu($m?EzTB0tIDK>)EbdFTN<3BmMZH)alt)nV*AZ_^>_ooT{KPee*} zo;qEkUhr*SUXB~zHi+Jgzl3U?uopw7D*8re`<7?&{k^9vZEpz{ z?(p#pZA=p4VkY|scCcxnD~A9%Anr4pg8h+<=B$$~OH|E?jNivkbok)K9e#sKv$lSR zQI0Bl`qepcppiI;nHdvQgZvpCzCFV{B!^DWG(4W&=p=AH76A*wBpc4oR~XuD3J+(* ziV{9^uEWUFpR4{I>H<$WP{xL-&P-6AppD!%%-f@C)f7Q z;(Ep*5pD0q`Wivq!PArTy=xyIy$T?_L0+Fa6B8HT&3m1;{_s_JFMoki??~;oB!DF0 zcl8BGA@*Ei05Azq*%32mX^jxpOAY0apE6y(T8izIf=}l+IHwKMHno#AGWJ?g$8*X><(OB9cxqI zJauzkzgZ%?0k+~t63o-#+wd~RB^-P#LzmAh?tR0>#pR8J&Zl*8x#d|u5Q+V^h!ZEq z`sK^3`o&l3qQw;SosTRZ<$YqxI{vVmJw#V3Rx}|YMhe!f%_?PAag&Iydne&Y@>W{= zxfM1)+PHGSmsjsV_vsW~z3#n!t-k<9ali37e%&y&-C~>B5zVn-Y$*i$)jMO(?%%d~ z1h~3sO-*F=xU>tMTcaa!bwKqXtJlnpVsXie<6N)?gM?P&mP`uKuAdRko?KfSt^TK&m$fjvK-T9T#^ zxO^{0m8EY5-oTNTuPl`tB6+SGpUCkteBB2AIaZ$%piDG4ocB$n@I@V)9_R1Rws;?W zN_%WLJh{%xKZ_p{W(n|CKC!;6*2z2HU$E_41rtG`;-LOSH)t|jZdMjM^HOB)T2DL! z(5n=4z|q?yDJnl_XRU>$_04mG zNi*PLRoiYm7W9Z61UXn|9i9^MHX;ZEM7M^t67EnavKv&tHYaGFLV~^d2Jn{|8$M&e zT(R&QkX|r%W|vR$Sf!NpbADf2rireiZf)%W0d!#J_sB}*FoD+fro$f^yX%8f(fBe> zmb>ld{H*r+Bq1RV%WpQi#RrSBIw?&#Ckrw8BYLpPdS-egajxSD$~bTzAKF~skK$j;`Gq_{=*dM>_T|V>X>@)TqmKPVlgBBjww7pRYRLKVcR*J8T{l7BJo1>}0;2Gf;GNaVlvTGMY1iIXyp{LbbiBMpm->qSrR zop&Ou`J7+_UsEhx{+ZMsJ|`9UuGfe=WdgYWfUnPT6+;C7TU$^YIXE#hSrNxo*h?C| zV0Vip{!oSV>f9j3@{nk0ru69(xD$9pQRp5|XC>($(xfb{8d!LLatrY*$4C3g$ytTV zDhzsrE|{U^u_HB7+kD57c5xPY^Jf07LX^=UrV?W?&hyGtZkv+W4Q?^bWY->O$9%Lc zvhFK%-qkKGj9$92LZi0N?rz}MTm3gNvrf6~4zQbzf#qW7)M|xSHjb-R^+Ft^muGT! z`cVKANLtZHu)?D9ig^Zlw&2#R-dyC4R=$($$LDrI0?|@6?U8>d;b{UbZxD$e)YY!W zlBR!BWy`DZozsMJVSdC=uj*<``Fv)+w}X~biHjcD4+71!wK$pjS?)2b$j{P93gL2g zhuH4(`V5(37vfO#!fhunxZOHnh3n+O_$!(#kdLZr$c*R#pF7j>}@_JArC%RXWM(^^Mwf&JY$-9`l9XW)2I$qu#c|hYaz)syjb=&=FZ*tg@+M&LuasN`h`7V4N~!GAv$76>v^+b`76sF zBP@BIs0Lh&z5s=c(xR4uSwHG$NqcPlarD%PB|pE7iKPA5&&WVxmYl?xHY2qt^T%&c zC-*;C?Hwh1sizit65x-#Z#zx4SUb{6d<4=~OMKey6?S{BgKux8EhGqEpRpSw4=HRd zOvz7K`Ak6(SsVK`KjmxMTLzbq;NVgDGQG?4#7GWWA~Wefq^$wND%ku*AF-07 zmDO-TL3mz7oNxnKl^`p`j&s3_-dHM9RXTdFBUNfoG%xyI<6+T=$t(+1=$EW@k%?E! zW^4c|`G0s7@?$3_W~qgiEMjtVU~iXk@+1WTRWZ_xCY$|@7H(~d7_^p?R&ANbWo^+J z@+&yl)^0DBs(Gn|ZY~P=hz5bkJcLwl)k&OG>f0tY>3O|BeBhkB zy-2E!)TYRa_#y;o*l6-A``AdAiigmNIP@%Jw{O^o^zb;wPw^zpRD#nPPr2X7&o#<^ zav_RENv5k1knC6?=Y`0q3nm;Czx?URQaIu)lRfZLy*N zL<{b4!Ram;tlC159R+XQh1DYFYWGhR$1Fp;$-k(xTJJVROv_mj7Fp9{gFgiCiWg-l z<^chH9^TI(!BQ(c9*=)LjR&AZQDTeJOTP+oj-+h}-2%;j`%(|Uh1lgbT^&PGkSbj*@i%Lp{(`|R6 zWA8B|g=UIZ`vOBwy$Lj0w~ePxbGtyCIiu-v_s92DOK_(R*<(_2*+#Q!!qFlVB^~p4 zb~P%lH9N-!Sx+lNtIoarLDw5){>dhN3|ly*S@p=je2XcBAB(C(kbw22@Yb?EdEycY zy^P@M2AEIo9Y`|d5VTrvpGyy=rXWHze~|~ZTR#28L|#3~xSu=0R!$$*Lc#oNpppRK#bt?jUp^lVYirj*eclABk+rtPe(eGbZw6(nz2>&zTu3- zE}JfQem9~hyH5CNa-`jdaSdC4$rf>lv`^#!BV?a3c8}gVyhi0NKTJ7}{5r+cz?E2N z()4+T@wDafnQaR02)g7WY`AO_4XwR;ReR=D4@B-bO$*YwPL{BeL6H31ctPd`E;gQC zWGHRb*=Y@xzy3O7mPq@3uo#tK3{G^U4TsuDyH3%3=ZIxG|86ar?R!wC)=3KlFX#$V zq)FsC_SkMa=lh(P^xSwQqg{Tp2-G*2-67)}-BMj}aN{PW3J|-H9J`gRJ7F3cSSR~X zE)Va$B6nFx;!v)1P0DGyT|v;n??MeEt5s^Kp~YljIp@fNX%DHBCU3SI+oUzU0AVkU zvib~-%#WNN0R|z8U?edc)~o-xd(nj~1U=k>B(~7|8pRV=|EGz>s=d5EI<< zQ?zx@*|1A}G=6|0q-KVa>m#@(LB-Tf3DtJ;TjpcXazLY`J*|Z5aY_VxDN`0{4oC2Z z+vaQfH`vjo=XY3LQ?PVP3-xq$5U5LVWgRnx#18VUpmhvQer#P%3m?1zM|qpX?J_Wq zunF6h8GV1QQ@G&cTdYK!Z832<-)!+o{A!nx%6eHpDeCN?7Goii;`s{*ive{P748fK zLWCVXHfgIiIyr2a`2L3F>+t7%3_Tl7&Z0v54g5Wv=%UNF*&DwAa(Lmkg{H9vp8|Z6 zu;^3u{Mxb1)_j;dR^`YnWVJ!x+xu%kCn4X6aaCBik;X|^@c888@miTvyaut(F>CkT ze)~Y>yf`U5#7w+hYXV<$?%l(;%xb!j%cg>y&|uw!{#5poJvnM z1U#N$i6pr!eXRGm7&XbBm^`r3Nh1>f;uZqHb12vp#&++MsM?HS9*U5YUx0&ql;+oE zsak=E?MYwoh6kfn8V2@AEC;q@uFwj7;&=o4XjL74!lZ}#dd~i#-&jlB#irJ;vH?p; z5HopwA+u_Cmj}|#7Lnbkuq1Jo7PSCg_U&DR=5xW~>kAvlH6GJ+fi4fhF=o1HM5{TS zAPV-En&(!deGsP>jii}VZyG8V-EocUtdjLK&a?5?uSdpxi@(AhgM)FDK8!_|)rKq& zWfw^%lsclm&g#jKqV%D+-aqtVDM;qT`JYFXz0`#sLhI6PI@SBUx*WYKB)EU#wY{S= zMOMzYZvn|a&J;RB)F~!Gi6JBu>6Lug3bVFJMe)XV*c(SFyb`hEnwmHY?TDV8t^FUS z65^Z!LPQ$Or!H&Hb5YAR$?Vm%HJaeiz8C|Z6x&iX^DhK zjCrG1+vkVpOwghl#<)EjhLS(Ltn!pFP|B>nkQBzYdtBJZyw)&f$e~62kqcegfdWEi zx2|v+BS9e7%>{On#ws?6sTrRxATOJzF1yZ3BB97?n%e;wB11hPVcd^yov5OzXdCxR z^i?LN;O#nFjMCk2v?)Sonm06^Vl)!$w?4)N1aGu~OR9~5sBJ zOt&}n=GCQix2pFK2STb+W^_$eMeBY1)GAm{L5r!lMfapTFL5aPovLp%`I7u#kCEuQ zZAonR!eVITGi(Oj61*AS_Gr1xNA%bu_`wCxtg+U^6dW5N>x3kI^P$ozL}vHaz~L|U z(_8nceccp8W?Nlzw<3k4iue`f(1x_@!G-(Pd53+9wz&!RA+xGwf^%MJrUA&y0b6{J zC#m^S+2Q@*Ue6aJ9eF&q2z_i7`51ifnBZewr>~(U)w*H(0z;{0?7sA5v|WM}M8dsx zFIDoll4f3SCnDLR!*$*vXMc}aH&+I$zFoT9c^zm3`4>}{JK;y8%c zkRHt-dG;+8LRFD0+7A|F3?!v@v*QiR0&?`8CcF783rcv|jh3SN%U~3!$8RN1%Z_Ib zR53I*=akivjFdL=IYqvao!;I?W*fa*EF2aS%vvsp@^YcE7s3p(PU?G&lcu!<-sdT^ z?P+kTBW>b;?4PMjPxvgTpLeGA`dNm#tS2i+YPVf-&+Wdy+8}Abph3MH*|>Zo0?Vlk zp4b>3%a$ZFf#B!;=qoID(p0l)oRpK5RV6iP1^Y|>aP?;kuBn}#^S%vwHok;mlgC3L z$}{{q$8v3HpXN^9ppP2(Nt#8=rnK+iRdOF=CH&w^T zO{{I0N2!;;vtZo0x!+9br9(cmfJ;77(L_d8o^qD2*>nV>Y4W99jxL6Ez4k+Wgb4XU zM-dr)+7wYd2N)=V7gaknwaM19jEeFxXNDKJ%S^Y&pi_!4$z$<_W_;o_D%$0(sH9eB!ynf#@d4HrG>^$V#aWji zSGOT|g`<28m_Fxv8(XmIgdA@`sUJ(+owI2mJ}(Y<)O2r!AI*vB?X3q`&ARA<7|VJ~ z)_fLLh2Bn38q~Y=fNKo9XDp-k0H+zLQGw|G^@yRFV&Tlzh zvM@04H#s!OOy>IgwTQb~Ea|mpOqVsgw>KAGFFErlOyexP$6}gF6WJ4J%I_ZamdgE| z0C^EQM}ZbO;f=IrvWzV=&!X_mx>!o2_wmj}JU3uZD%z>vZ9F#x^IPjM>`^0USM3E* zuWN1uIhtF}urMIXav{@Q^)Md;j`UFaA|w3w;mUzqe*+im%#UI9jvgy(?~Gt_JNg zWjgOc{o8b?yY>LEVpr|c?8~c}c?N`**jGn(UG^Rve6hcZ%+p~@f&|TunOaVkEIK2{ ziigMSVfyg-lfT#tT@Q^%6#i}e@WicUEF;l)X3+&z+}0{}M(S9ES*GL5H%j!mMS)Vr zV}&+@y3Zc_w;2K9L^wYum$R>K&ZhBjv;8-@1M z$@V%1>{?G8h_1;U>HOtdxpprMI8# zRQzaLS(u?Nw6)i5>hi~LumSJtz?f-7vx(YQn~|Jeh@w?#aAEIVYmqqS8>o4J(A z-3}3!%?5CDRNm(FKn{M56bG%$U;lIhiO5F&7m17VgJr}h$Ajg};;rOq3Yw%b+zBtH z53RR3g|MuJdvHgG?qX}Rc?*upSAN+uQJ^IO!+-RpynXC$_4uie`V7$A zBOyxr)djtv9K5Z4-14i-ZWK!|!v zJtqafQuasdI<8s=<}Q4<3u1F#Y1tnHHDJN3e{2O-Xudn!RJ)&km9-a0+RW1_u!u{n zQg>bYX;Y$19Au7tpE6@txZ{HpZlw6j32|`q{}OgoPdZP`b`ukTj+LaA91_I)CSh*Z zRi^UNu$Ic#$n4~lPdzR*^g~iiR21&`DRFFdkm;G838$T~`e_dkhGz7_rA6dp{w@l{G3Rx4(etVK~L8yS6TkDkkY}}FF75{p7 zWPx$A9-mz0ob4kIZo!`5HxI|{=2`b?{$0!>*oy*w`uf=$nqY=9W&^Wi-W%p(q`F_8JcBg3KuTvx`Wz-HIGQ7U(2`-j-}cS$Xn7&E_4+AO@7mNPs;$N` z2=@Z5F|dd=;rw+M^CO&7y8=xUPxmLE%r054;C>qWarlMa5RU!n{VD9l^Y~8ck!0Up z@i=_%S4W$Eyk3o50!@u`f zZ{?a-p7*%Db$V#dGv)SCe71QjK2LWdy5RM~NT|itvvHMI&sR0w)Ve#x%gPM(a&n7e zjhnY9VF$Y>X5Xr#=pWUkYzr3T9GLI2SwKjJS=H2(+`mNwCUJ>)YbD7Bf=*9%3FlXoe{(OSL4bU2V-9h`hs~Yn6l>IWo1UxjdNM# zIoH}GJ|HS8m-w|+R{yI(0z5frgo=k>XJ5d-#p9Pxea<9BSkWM25FOtuu5-+a?)2QOcL?l*6k>di)Xvz~6E?ahD-6M6D7 zOT2r~#aBMv)b%!MV(k5&xzm-&OmLKxd&uiZRNu-zXxwb;#x5@Avp|aR+ELwUSPgow zbyBY7_ifsH;!CI$hWiay&q`q;;4;&}ow=O6qhS**(VF+!35_|SVXy*zQk%BwY1^nS zL{X!70R{(qR!#n+aijgfnqX_}+@URDJXxa2pn5_S6iteL$(9$fNA+2IRjmjrfI<0J z7hrVGBT6bb_%SA_;jb|c$M0+%b~~S(&!34puB|4a=D zspBRqaMw%9IP~Q*oU#GWTCuUXk0qpVc7;yqdFhV$d(NX~Tnk|B%@xAruNbMX)(0Ek zyy2^=>=(vL<*FyO^kC8G6KN4ld(YXFk2*^4b{Eei@MTOFNKh3o82WovH${?b^WHDC z;nGNFeJ#v)Izp)ru?m3qU{jK&=4og>L*(iG))qxM&>V5i>F4s^F3qI2>m{_Jgn>y4 z=q{bP2_x-Xi|HDzqnQg$r5ThrqNoGqLo}J*cxiqVG*e$0)gt1TX}v_Ld615uxVe2C z{Os$NqIP8gM{JA`6SKLSe@$?9t47Jp2rJh*Ax4ph{OG9t>D{VP!5&mpS3uaJatHjQ z;@cBIi&->ZWgXslxY)48HT9*{@lyHr$h1Af7J1S?_<~QT;YDwqX1!_tRK1^$kA*eI zN+uS&;yxAf?p>|#U~N^pkonelr4BA$FPdW66XUJ-SVRNWL?3-_ef@5A^Jw5Q(Ky)H zVWs(|1(ybjy=i0H=f8v#iWWj+IPRPB)!12IHw_3j8$z+(C8fiwgx=m@GsZN#GMhJ~ zD07|tY}1zWfOgmEcpcQwC#Z<1v3zTxcY9+wR#tM)-JcVWU~;vAvEvajxBFQX9PdS1 zJYK_=(z_yQP}P?V`5j)nH|1w-LXm^7A(tIbN2`x#ZxHQv?n3;+zaRVNDJLPqqB03Y z2uxTiwmt%Nr#utIux`vb8#`#tfi3za*O)WB5$C+U4<H{d4fqkbG2;P6UzN$ z#E1nAn>0FsQMl7-sU&@vW&5OlSy`SPcH%?aaa13C;%NT1MxA5-_|AzPZx%+1sXiF& zTd-AX>Z7ITrE{zCThIN#z*t*`u{69V?SZ)Cq#pZ$fK~+G^>l%*Enw@PC#&xJy_)Kq zXtXo3;%$3ZzMlR9?ID(oj#rS%Iq8`>1+>&*Ed7^mC(xt2p{Y==`p}^C6Rkgk$ycH+dl|d zU$v%bbg-Hj%GmZ|?=t|~S$i1Yy6&K6h6hXSrQK1qU-c~ClqWn~FoU&l@T6g;j@~I% zP4DnW7i{VY2n(hxGaqW#?kliz7Mk)Ly2zV42&V%a zSaL!`Z7EK;w#Xs#yz1C9wFR3&+6iI=tYI|QT1!uvr94teMSpwpLA0R`_=hbb`P#ym(r#O z<6r4t5JZ<*D`i_uKT>xR6EDjs$t;g7QpK>>Rnkh(!kPN9Ujg9)iNlGf3wD4SBqS!i zBNU6#Hoyo6`>CPr>Y-5M8u7_xl*4#AW0$6r6MN?*;Rj_9=t2E$@{GX`h@*?BPeixk zQR@C(rkvHORnz^cA=cgQbxfk+yxLtgZDrVQVMTpStf6gK$!6@rt+teyBrTTo2J`V& zJjToP+?%WLU=r1007^hn7dX}Ce}c#-sAg{wAnjfdEKXdDx7Uyq2N3;WTyM9W$m>(_ z*;x(f=Oq~CeqW}Pw{V?>?I11M4z_3c#J(KY1Z9z{^Tu3=VdW(|Ma+8Yg(E5{d`77C z58;2&>BmSHy1VV553)3J$E*iwCeWJX#61s7F{l1%>0Yj1mhrH@&i>#E_OijdD*NsX zgL?(mplAsAccS<;Zjsrp2TC5A+U%1>BXWaQ+5(F~4A!3alZ73m0hi+&NyICfpTy<< zI0%#k0>x!q)_WvpsTvur7wRP^6S{Ofb!S@|L>BN*X|V`YH7Z~`_FKZBOF}GR^*xMy z*xgo$ca~Y6-H$kG7-lPID`~?w7bTq-Nj5YK^oYYV_!AfEBp-$|Veq@QpDjPzlmNw@ z)9HyP0L{LVHg)ZLS<72x8ta)NLGl^cr|CWkE&hbs@uY(DVe&nVPvuV4FL+5PZGrJC2k^X~k)G}OfJm18Z}uF@p|cx61_f`fT-raUPNsMb337LVO>c!FgWljd`3z1n&D{Wj+I#l*57kzX5B|KaO5cTqP|N~fBPkbj&+~}@EW&vID(*s|lp`u{ zi8dS9!{Pu$NLaKO^H?*&ONltgL38JF_-J;%gz9Yi>pqjmMzgO@;_T!*Fzx5dyKaIM zY=y~lE#X_?jFQVRrr=emwC-~aS0*JVoo{_c)+rKYjjNqDS`Ldh=*1IXMKZ?p#NWf6 zttzCRYOYo0&;Z4#q_a6_RCz^=Hh+bM^v;SL1~0NpK8ec~q$ZzQf1IjIv#;0E=Q2Yd z#l)jB(YQjRu4a3*H7ehm#`g#P($u93rH3aF{bu}|O%_YM0k7BxOL5rJ!e#niNJ>IO zkyAgh@-Vl{l-aiRooL~eCJAsyOo}Yi^JVV@?uK=JnC3mld}34{sn}BGU6#ksYIP1w zQOWX4En%-WmS>|TA_!E;=Nmq`-bH-d9OvfNb+w%ta0bI&nceAAjt=j2FF0HA+r4&c zvw+ovb(hsv9=69#%ugmuRn1T)SP97qsCs3@IytXgC!#7jInl3C!CMT~J+C@*1qrcJ zOp$Mg@x8GI63*D&ka=Uh4=x+An5w<7o6p`vs0$i`=3Fetbh)NKo>)GXA-cJQ!?#2tsy8$H_P0DK z%A(VmyZG|C|lT5Uk2fR#t zEdO%^CKiX(`Uk0W zAkcUCJ|l7|t~!K(cNc-9L%fBWxj#A^wWgRT!8g>LA1?fO0|OomDFAt)1UfOT`WPE= zR+a*KV%m+ydN!^N7A^;Sb`s7kFXy5i@P!Dtw5ej1pKH{65uW&6skKQjh3qR?Ol=5x zNCo_5%M$&O;~#EjoIhS@s&{8Ez*$11p?ddx3-ON7ZWT2DwUm}_qT|&P6OJlYr1qes z6jEzmm}|OdwM{c6cw;^lI6yOX@>0KxywjHZEuP8EThFg&#85sK})fkFm{L%}W%0j=x(;U(7Hm?oxTcZY|+x&dE^6p^F~tg%S%dSga5 zywR+v*p9L5pU@h2D_fN_8eR%(Z7rx)JpR@Hd+3KH{&1FuUkPm+H>!!;W-Jo3gsk$> zI*ZSyA5?A5Dj69mCthkqRBz3`=lNu|A()GJ8Rr${u9X85Vw~5yy}K0>d1CDD+%J60 zO~Zb-x)Y6Oy*2%s4-Qvgvo3YO)DpHH>AfM zDF&*m-gs7z12-ZO`P62mb=qIk!*SkY5b_@Ncy6gH52S&SNOTnR99u!bad;@Kl}Fv2 zy9#bR_xpwqO#V=|e`ws2n8;=kPlW_;n%hgICyFI@aYu0!5j$h@5KojdL_L#zY1Ux1 z&};03UxA9TH>6#qOiyn0@$<0^-N!ZcyuGr4~S@F>;%aAcH{ML1NI@z3Qlk z);b@X<1B?bj9nd7hZsUY{)TK?^|S?!ULRMBCURltOb){wXM(PuHb)ja?D%lrU}Jj} ztbJK4R+HhNqWHZ;aOoE2Uf!Q?uE2%Ae%v@vje(yxuDAL8C1lnw_=veohg3sEkz1Fw zu^(3T`;q^&y#Kq-=$p5;2EZPJ+}}garU_d`KDH*aLOfv1DA>Ja0XN^t)2k4>+MV)4Uns;zb;F=AuGM& z^f(vlCx6FYJ!GRT?GdHS^PM^5cCVX+f}Mn4IXio4mPx>V_+VeF1y(26tADs9e`h6h zx{{_OLNgP#5ue&N=M4f?Q7q+lbj!_ol$jp49lio%r!fSZK(9WDDNC(rF471$Q#5bOW?#5Q;zxIGKI>zJo7%64GWW1jNgtfpc z>V~|{qltLeOeEFJSks1eYE=nnHd6_Qk5Q{l*kds$J@a04J)NHNNt0|N#?DzGOfwh! zY1^(BsPsEnD8gf=A6R1L$2~_3UM)g(=2Rd~R_Nf}OiXYTDeuj#?!x{IW!E&nOieBK z`g6&QyY!e7pi`A!_!S|`lQ~HHOa+5?YPgWgwdtMhLBuTIuzgI~4dbqST!w4 zA%>K6_usw3P<~WLGy8v-ae9BxS2$v1>;cNAjy>6}!Y%u@op3bdm4fQG8)$PI4}jdN zEEV278ecyggiTQUnq)%|(lBbiBw#*FIuBq+-4>Tj)J{-=LwUB}27zn_b}w8eU=h1b zjI3_^YIe{qS;8*1v$;*K$Y4!fn0I!UhGMEaMSUS|X-L2EiWqb;t( zl1GT^>}EPt7L>|O8&RT*eHf+QbXxD(U9|5|HDu$tQR1FC&xl;f;Q#DlBudgzNWPy2 zVHa8J+m+_Ay?YVusXO7SKm19W0X*T8#y{2d9Uh4EMdg1;cJuAN{5+jPGqlz5WIFdM zWpl=}g0`m=mz3=HqgXuccGZ}vV?hNlf-2N%6yuLjC@Ap#+eWsmmXOV>dMVmA8=o=~ zGEDPKhkIAvXCx?5)UoZA?Y~}dr6cKDOpYX(ynG+uNqQ~FDW-f9%NiveAG1M? z2LjFMCscc>A#*La?v&GMGk86hrPfy=Rn;Gl+KgdkJnGy(9TpDp zxJFLOX@$Pn^ljN@fVg4$2SHRbhI%k5VR)du8SDMJ%ID<-2wRb|8&}mxc0kJMx#& z*~xPh_eW(j#<$x>H=>qa6U2N986|5* zz_@ett*A&ggv0gVwP%CvM1n(bWPPKI;WRlsvNY+KNI!kn{IE=XDgeh>R{fN?W?Uwn>~7qn#{-B+I7z+%0s2sJ?YBJ zRZ^tm-2ZNQnD%(i;`Z@ov!A|=kkuZm^jG~|=1+h0nl^X9IWvq2F9IPbwu0Qn@*6<; z#p{=^-QJy^MFrj8)Tw*skm>|b*NG4bCUP<;3N zFYx~S_xsNe=>JhPG5tS^CLI5(XmUcRBPf)to%xLc=xM1qQ``N>SJ(e-rx7bF0mXj~ zCmOX`^+B!dW6!ERRRc=75OuV6VO;;(vxd|`gV)pllx&7`%6biqRP5gX9m;sZV?NL) z_7|-R3H_OmfCKsRd>{Zps_5O~6-V&=@AaSiR!@84?2E524+ zJpa$hQG96}xkuxB71B^qE>!;6_~Uh2=fc{Tz zSo8ru9)doO4k#~i-Mstf7{e%~Lp$L&k5McZ3GSabvBZyd?u7qS)jDzW4;~wP?>nWP z|C@&CJJt2=Zq5&H^xy9vTv@idQtu%Yer`YegTKL6a0_(2Q9u57mveHX^ONU`TvLU* ze@nuDPW?j?u;PC%0_E!ebdU3T?2fqKWCNhC8|zG2U&6WnDVCvZ8UVl2#Vw-Z;R~}9 ziAth0iEA=Y21<+0wKLC}?@4hySi4w~LPe*p`ltPzukbxUAul5z%>lsw`#_+ar0-UO z%w-8>|5iGK|6A$Y5GnHhkTbJ_=RiaEeCPN2@%QJ%9ys9@cdlX*gGs=G2?E2&n=`C; z%-Yi5DiYs6zkd-iN+lgxplqj8Fnw(s2vu$<^uzhLi zZT~_|Yp4V9B7$Ayd(qmbGAFvAQxDzfrx|;hXUSvf}0${qe+$f60B)_TBtIEOigjR5Naz?<7j?`-Lx;!EWoSJLxY83u0i@KFzA2Zuv^a-8?iW!f0=f67LS0l+^3mq z`Pk3Fd4c+?Z*lkBGj}UbTarI@f5Sjc@<9Wq?n9lf>XzoRRF1depzrkm^wR#Jh6wop z=CoUoNP!AbCPOZxSwanR8TB1s+QBLTp08}=6(M~!pnm1Bgl13JyX5DwGXE{9f|@t<^BU0RO3R?%C=x&eu% zAI=J>GfkUi-QCsGlu|$Q3ogALv~(}cg$d60;${VGyW}{eS@?_E8OX3>^9{P#aFYZu z=hKfgXLOVBl;mdU6)H!c!1_0E0*8LOSC(s+d1`-5N>G@8mm>`VUIaKaRzRKZPyf0< z_C8!}#y>jv2g7UB%zhLHcH33!;-e|E6d6DG_(N!5!H!1+JH~58HD=CS^VC0@oD|T<@y}U-sYO?;V=VhA)Qg2;*{i<6CLI<>FWLSYnIz}wA#oSiO46WOpqp9| zVY}b6K$7pSCX_gvogA?NJwca@87IqQ+-)}z`9r8!xk(E1Z&xgu>ZL9e**i=U(rfNx z5p15&nay(#h#CL(^NsCs^H6Ybj{L*?n_GNYw-n%z;EXi_S8;W5Ysf=$-J47m6ec$^yDP!yLtbm)V7k;#+CP0xm-+9+&0=+zo z^uSp@n-(Z)e9-;yV3$;-qs;cgF=_;4-?kQzEH-NS#g)Q7Nhst!h^qJQ96Q5B85}9H zMv6@Pa)mn+j|R0q&fo|uCpt)txLF9(9FWl^v%I)aDwSV;A4g{sp{9 z0O(eym6A=qblnZ&<|;=NL*Qc;xX|)~B5T~=yZ;<*ly7AN_-23<>h@h}e3p4vk%qVG zs8gqq|E}?RuFkCii95aS&&h9pDJz4`Z>(LtU zHOQ?!m&B>Nbla`}c9*)%J2hySKphgOKXrf{r@6tfRz8A{0x^4t@?qp4_Dlq zMlp^%Rynpmo<3Z(Pe z+~B!G6uk!tFX_(bSCONYZFpQ0@ig0=1^*!SaT$G`g-4Lk>OjSHIm=X;((T*X40~vt zeM=#KUBK{V<6pYMiqbwFZqnW9_APlN6-Ab!Bq4S@xFXE5G5HtG6EtB#>{B(Z)4&!V z3JbMU%jBx=JC3)b6QIg`tT6Z0+B0pUyX?aLtng>&h zJwQ9ckl;GO&;t#U7&7mhxtK*U@m~tp?-Ut&SDSB5dE~|mJ%<0`UU<1w|9|YgXIN9) z_b#g2EfxeeA|PFZ^d?=pO6XOpbd?SgO6VO6y$DEeN{2v@5_(g5uc3$DODG|P&RHn? zcmMzM+;g6DzTFRZec%bO*2-LSjy2~T<9)|FWRBdtqN#o-fm9>9-uGc1QLd4C8p9Cb z>&2Z+w%#Jl(oWH^v=?Oodh zxU5y@!m2~k;aKZfAW9`^_b|_~z^#dLx>}~+EMw^}01*u>w+E#MSnmG2PjoHZZzhK= z@mN|Xxw=;7e{6`1*4L1Ol+F;ZaA57#Y~S+@SUw<*k?RaXx367(ozYXdpEj7rTS!KiWFEZdYAy8)nRhmq*(@btJ zP=7jB=6 zgx5*SGl9>_MB3X>F3X|c9_H6~AlJosMw+EU+`tJRnt}Ai;z#SkK!U(Yp+=nbSBQ^P zappMdMAV9Agw)`PkH)4LK$6oc%0H^;-s5_iR?n_I)mNa(oGA9P7@RlRkk$J;7y=uTvL=`)V9tY{!%_eY!G z?(HAJhgfg=nSa6x+AiOhKKbmu>#!A$pEq~Q^B0j_L0yArt%GilqIRq3$LfGw7B8(Y zWdpjDLRR-)m1inz39s9<#nQfr-ZwxM;IeLK!0!r%a*|Cwny>ayqz9z~RPh@(&Z_ky zD2(N_c|xA3vBo_hj^ysEd^P&vG8GN)c4t|YakjFH-h1;X+Ujljv&!bOCOb4DyJMPyYD?h}cOT83@V3^b<_;QNzIWmBngy~{5GnBu9B zA#0;pwoINZjeOZYc<2eDdyT^>mNSlx3*~93p(X|9>RM7uC`of3%BrlAGRcqlf5aR| z2i|8+`W$UQxDCjl^6r5D^EbDZ<_D>4OJIA=OCvoFP~ zJ}zghLUaGV5<#W=m{LF>Gxujo>FVLxcxlLX4XqsM?Y}<{32ATN?^-)MIv!4Xoy3e5 z%}+ELKQ<0M&Ewn48PpQAo&|`Pa`eRi5#8Juri9csCRB9xCFgGLE#uC)glm?qw;h0D zjO`uGoMK2<5gCxYkjGQFzzSOpjTc8+Ab8wIHYo5oNw}We&h;}(`z|8YHmesZ2!8~qwucxOrSXg<`s8G^R8XmXam-Z&;RF}u_QK!5Lt~0 zjyzbdMx-A2VEHcIjjjJUm+s_YDiH#MO#2}paN-eUMnbbrOV`%+?%~OHrIINu@ohIw zz(oOq{r@tFfO)0)odoiwJ3}>Tl0q}Icm+|Z5U|VmY;~wZEh^}sz|pZ{ig-AEwbKIpwX$%kwRR{YsEgDO{VL5+ zmgpeq{sx~<=s|R*o}8N+kHaKlqWY+Gx0@q~R;`Wk|dC*(`!0)2=1W3zFl;!1YGnHRTzOymn{*X9wY0wGsDorZKXF-r* z%6)>Jw`nk0&vZyKqDojfD}J(S=9J^9HDwVyR?CVdF4sG+keg|%R0>L+twQ$&D#WR- z>yfa?*A)bBmbimWqfZw1dfvNqVggZIQ_8AlbS80PF5T>eaOJ@`WE?jj%6e!C^XwB4 z4wy38m|a+PGz_VWjay3iAHTHRH;gDLkW+|Lkyk{BlR{scAFb1&9sYtO*5tJJ&3i)0Cl|U^KV_O6 z+F_EfJZdWWujsh1@`m5qfTP(>{o}rK0!$%6B{&OY@6AmSFMRxWfh#OT#iX9^aNZEd zElq8o{%GCPQ7v+qJ-eE)>=%Xi7lA62cu-gkYmc9X|)%k|MvJqne&bqVSM%J8~%fMGK zL8?oEnk{~%AsOqREA(vY6>Fs)ue=nj4qr1$c4QD%(bwBD;x-mJ3? zqwI}iRUf7sHhIrp*$E|8%xx%Pl4_nO#e7dnR;(P{+!%o-pi7hv*6EZZgmuX4Kv-W_uGOH_KhLN6vOdKb6u+(;5VOi`3tV`K2~ zB>gX5Uf^y?NqUn=T$hP~@I#9vK)<2y%jN)^^$Ebrmc3{lWzyh#yHM4SbJwOf`0e?V z-UYIcZnjx9T$BUBjZsfg`u|tTf2oL&uSZ9NK-E<5PjL>3KE)#Ko>#XLf5)+Drvy1s(&^%bv!5Cd)DeFs7X1Lw))2eYjuDjo z+bE5U*t+DTdpc%iL}QKTVJI=4yhKhgop+v9iB?4&+Jx2nFsrjK@7*WAlH~^m+=f^F z?6p-MATUGe?f{9nxVYJyP{H&<+4ywSeZRA>?%_SW=nfN}gat*5LTf1pXHC}+1x=+{ zLGq+?cS;sF^AT{;1w~mWlf|lQHZIWUA&Vp$!KByfcAZ_8WurJZv8T+d#1gm0o`p^C zLsf|W=ua7%Q>M`pe8a)I9Gs4b}8s!MvK2^T%LTJT5PqW0bb7SUuz|{srOba9+PB- zy{%u|uz1+|nOMxKP}v%t!|rl1xE349b-M4Ug9zz#z!jYX0tKIlC`Cq&2OK0QsUGqi zBiJLq3i&-oLQH&mxpc5X?~l7P3p#mmdGC9vE<5wtJ(#0k%_mDgo28PeiIJ5N3pJo* zuLyiGY4uJ>!ia2a{L3qAnps6*nfx-7ekq#{eQ-q;F$ zHpyh`y3g%vN~Nv!u}J%=)5?a!s;?=7wdX%ixpmlF>Szbx(%ZcYIpSD{&K#pnw$ONe zO~cvMoU|0}u-AOkUHhR5Y5D~$JCx77yghxmSh^+=yQnaHChwDq9zAoX>X?q|!*l%I z8yB^^D^AV|L#b0wotpCMeGKkjgz6tHqn0{~!o0@W=pmohI^bJ+XNSMI@F(zk3{O`A zCS}JzpV`(O4V-e%a2+`gZE}Ka=z_v9B86c_^(brSDLOi`NJ6poRE&aAFLmkhq;JkU zqodM_uPHOQA_R~XgOUPgLPsHcO@*RQF1vb)6=X0ASEJ7=ECp&#w#g-s#J@XH?CaF7 zK7(m_z9OS-U}K#6s^%Z@Z~`(ihNa?z8bBY=Vf*$ByU$VA2Sbd@`_vKS=@0r=6>oO;U-QT=@sypP>NeZke0;U)ZTJ`T zlamtn#nT-=Z1x=;8Kil_w#%5&wnIJUO*wIE>lYfA{n!8ef#Ef@S+Fi2w$is|P_lGE zt9A5r+jc?ZwZYy=eKVK*gz^bcMpb@XQ!F3md9h^=>!Kx~)Wt^NO8N9kz-Mipt{UJe znef|jQMN-ca?aev3$SS_8)%+vUsfe@$Ze&tD9;(cW9qoWl45tt5ynskp>GvsHJza= z8tE+XXkJ7+@R@3x9(^dfsH9|h!=cMpNKPiyw1mTEqvV?Z~l%&=p2>Kn=0;|M)- z7|G2Qu0Z|Q#1AXe&7uoRLEZuZYFb|q7a;~GDrRRp3oS-POQc_47d@yyB6DDnPapUIj8(?92)Q5lMIs2`_|SzYb!_fr5pHMNQrDPN3-Y zb4+JsTO2$M5cWMe6!P(gtkWB87vXp>pYZv|OaG}q_qaRM4c?#-_7ROLh|Lg2>hG=5 zieJQV3o?ACaUTYV7@!=9ctPhLdrM6JZKstT9TlvNddbBWGLe!T<%n-7@~%T+PB5!t z>tv!R?L>G4%XH!z4a24urO^LAraqC0M)cm#MQWm znAH6JDZr)3g-XyxuqqozO)Q>ncJF=kc~XU;2$~171Z3P)CK08GoH^5kO`)bTpVvxC ze;Rc`?jhINV=ZU0$D1QD32&bRj-e0fDy}veP z#pc|%vN(*H#;%~?b?rnF)N#8XVKfqH(e(HEzG>TRt@E#N8c4J23cedaF2Gj0CoAo2 z4sqP{8lZVWk)y`<0ph=r&*A>R5spRF6Nn`r1VwBG#Ux)4l^PF~4?xxBD=Ci%rC`2E zcgB{Ld2T~X$=j<`b}`|a?H#w0CQ=v|juNiXrWGnyh&GVP@LO-wH@VPD>O=axzR&lr zL@(7$yHlXYzN^&&1ai1&zcZ&6OKs%U$Z#@qG-|2Ye<-8WVLKU41Fr9CAJ*&LDCO(W zsj$Nx+fz``!db^pCuDN4S~3dtIwvn;?|Hx1(A%(vDr?7#6k7Kd3QAgIRGZ_K)46Ir zk#kMIU5H6arx?h&UuFa$sljMWkp9UY-L42Q(a!q^&ULR`1gh+!&(eG}BwUS*fpj_F z)oxee2eg_$%hy}1wHeZnY;3~CSZf=;p}Fz;1T(%8Id!9Mwj906hc{K#pJi=+Nh1VBE*WlB8yw+5o zauAp2Hw|*Y4s&j4osQuJ+iPL^jCJfMmA3XQcw;fnunm0 z-FCFqrJ>!K>Y~+0ri|BMNDNeRGHERy&sW8FaDnF*w`Ak7jVeJ$$U2^D- zcWlX^xCH|ntyGBj4w(Kg zhm5lBc$b?GEW{Icbed9*fIqbC`u?-UUTPaX`-tXz!FjvFDdK=mmBlN~jz ztBhmvbmSaYlVoJH``NI$rO>8N=A3T^@>sV*W?tNDWsZN>x}sL#;s$Yy-lQ)r$+9SK z{{a$3ZlkZWQ-Mqz)yfQnPRe8#4u%SenIBg;-RrVxo*}8&H>x@9QHhiBc>?0x5+jGAI3vzArmAI54NBFpW<-S<^ajMZNNx{tk3-}bL6SBHDwo`TgU@k2>d;Na5drrU zaTvJ83tfI6o|ZO0Ilz1EZl6h z5v(^f^k$1&p`F+}<8m%?wHu3WqAha*0iDVMmw(L57j*xX^`W(qKcm)$kk9vtlX6{c zms=oID7uUO*6_*%TaDnRm0%m+9c^dZK#A#=J=L`!Ze4DMsyM{PeBa-R%N&xWXthAM zT#CfkVXxCCMYpQC7)pe|ix#`O6;{Yb+QA4YEg({G`yOg}}~D?J7hjN_!h z@J;2ebyJq4~=G6Ja_6v z%;nteD~*i*Odi~u{LI*ABYIE#9W(}B6j4LXRSSA&Y+0xo>DMWLb6FF%p6&{zxdG+A zuCU}cbr|osmL*UWfM9ib!=nC1*BeGC3RmJN`N~phQq>K89wt?EE?CLkS`$p+x6oMmPXMkfitb! z=b6NC4Gmj0dua8Qu=jNmYd(V}JG_zfckA^r+qDyvZUHx4RFJK050LB_D^B)*3J7W8(NG>=*v>{l5qNmZt?QCKD9?(N|K6J{suq zdP2{_DJ0H`gf^a%5>H2^KFmPX)~GB6kHYfgB&5My5q##A#d0O04$n=M{FmN(XLk#V zcXZvKU1rq7Gi#Ewc^|4}mEGjj(cXDK;#?dQ<#JR~Mo<9zr+KM66ohNcpT+4~dFto$ zrGZ+m`7Upqj<~3!Z9R^+T*E%KT_7Qd-^`9in*P<#z?ay;gNi%j`zPb)HiDd!*}VCPcB^ngADUt;9K{ zb)5yGrSa8h%gg(HDfO5@r)o8#>&-1Uh7 zo4aP0D{Yi@(iM5=lW3SCXXw+qza9`FaH<-S?H4)V7nNfW_ka${=y*>UD~vX<@`H-Bw=t_&6+$>n(hc(S6k?dbE-{dyFO_J zv!HmZaI{l{XH_`7;9fj&Bq^+;^UHOo2L!$S%~lQ^Sdi6QG1ANTe28KAAQm$HR^=0| zO6RlK9Oq$wpzunKa$7=@ck1}?$IC|hdc4k%srIg8B6NEM#YM8G^!>1}TWb3l;Glt$ zA=-j+EMVxd<5^uQbx$XlSUBBWs)b8ZoX+&EwXH1QM;D5gjokmIVm3Rf=3Q{eMn@Fk zq`fK5|4@SnioDGW2o-fyeq|D{<}$H($KUdOS(sGd2uTmQ%8c(fp{(2aV0{umhn`zu z-}6qM-dv*WuXhrqMQo=41&in4c<4!A%P7Eyz_DgU!<-2hr14^hkQu_FySY_U@i!Ibb-| zoq#>(ts|j@#y*N$iS9r~I}l3{0Mm$O5-n!8cbn3jiRry*8 zo)SwTH*(W($R*2ggZ5dYT838AYn>;8lIqxMW-km{Q~_$ERWzH=T*~?$s}4IW%J$Y7 zKZ-#m>J>h*Mv98Pik>tmJRpl~{G!@7wV3~|axKV-ytQYDQ8V_AvdZvc`5l5ge0AYf zRrNNhTGmzCPSa=A8a*ARg$J1pdBHDR(T?0MuTzkj2IFU@R*@2#SBSE&8H^jBOZ0*G zW9^boE3s|Lf2KzdD2(Xj!Xsep33{5WKV|BkrZbn9JcO_K9^rG4yAi5(#T9dpvbS-F zMBViNWECA{JRjwe7bipbr7`d*PM}%ad0L_Fl#Gq2><&R}X5|=&TiY*piq+=3FqbqH zRR$?BF|Pjzx{ls(a5p_dp@|2U;hf}TfigfSC|~F1*gjZ%{WHeYpmy!+<<2068;u;M zbPDLndR$V#WcN8N{)%SvocH^G7CLnQ&u85+D607gm*Q8Qr{*j$@(<_StVsWcqtA?kssN$8KwqZI%#w`6|v% z+s~UQrxrV!M2NfO`ka3Vl`hH((Q{ltEVixb)n=v_T7QAX<27F#u_?d2ciQdg|M9~s|? z71?4sU(jFg|FC;SV(foLNx7E)Ri5dl0>;-PG5Tf4{Xfh--_|+b2iY;v!5ZY1=0YrA z3zJ``|KUmY%Tkt!>1Jsuvu3?`1s|oN8Km)zeg1e*KI@$qz|04Z=f)0-nb!G@-_%&K zcps+$Et@ctnnslT<8%#XMTtEnu|Ir5Uytx6kO9em=%ba;K%@VQL7=V`OPqewPjwG3 zV_!rOx~PR> zc*na=wte9}{aIS$2Lo%^CDP+;+CN?0DAs&E65{r`{+ESa^P6jBqNLI{u84)tGb}AK zVS*3ap?)6vp9j7P?uh;Q&i;o$Z^mxuq}=i?`om!Kl^*;it8M#KRf62tt&flFia0ps zMiAym0}wzT#=86Y>i)MWtHppky5GmQ zf&VaQpN9a7Dp!Bz!26F5TiHWECi>6O|Lz$-7KjJN4_MS@ZIIq=p`p6EfI3u`yiy@P zYKq?c0aGtqA1N#R9L~&E5w}%crdC!pGuF{HR*_+^N=`q1HM$`HtGCQG`>Ehk{2q)% z{-S(vvTrStc7842&bfqqV4XEoDywzsucKwhme{7f*G7`A5;uNcUCS#2T>D-+gS$dC z(oq(AV3Hy(O39$RPw0pt@6jel1I=QXO6GzVaO|LXTL?D zqhD-inK%wrm!Bt@g69Hl?Ax1#bON8JQLs*qC&)h&f<^Z46D{}{Y1GcXH>jr(5}v$3 z54|`FI9HYn(D=7kd(?SD979Tnyg8jT%x@VtefZE6n=PE*knL>9EA))rqI&sPp#XcA zibzxuwEK}Gc{p{Q>T-O2qOAA){*Q07Zb2(a?vDtJ`6$)HS;WxV&rH1Fh@Yshv^X}k za2C1C^$a)?zXSWrtvByq47e;)3?*T7<+pI2ko@ zA{?@M7Xu|UCu?s`onJ?FsE5mM_ofmwMCgh5a3NoS ze_a0q%rrixpjl-9)JN$HGT z{qOHyt9Xp+a}2B)u+Y)1i@*IEfVEHQ{RcO-pbie|#HjVxXWh56hn-E7%`nf`RC$$RALXJ>aq2!%sABiRp17FSCtT z2}`UyES<7Sa@9E?>tYeFbv}5aj%i28DCEO)>sIEwBaAbo{XZq>*>sjqalSQd&b++! z><<~x{K10>*C(i>8@6@-kczXiGXt-}YUUj-i*TKCpVH0g?5-n|@lUU^m1AwhtdW(^ zcy~XKN8BU8ze_9V;QVp|smlbH%uxn`YDi`zY>dgvtR|b0VnicD&urHYro={iIOsZU zL|-1BhFMZzQFBV#i7AJzq>Tah>t3k6lL!)loC|oD)5&S%ZrNVcS=* zwyeVIEDx`~b>>2bP&ToLA|h5Ek)w~WnYU814x2~n?v#cv*&gFQc(Yc0dBFeHraZ88 z^dD>nt&~xlSlY6?x^31(){ukK*>JRU%2>4^PGfMsB}Kw}MNY*-Oko)|lrGNsU?`7@ zJOVAM$2{0m`zk)e5(~?-8pGo z$4;K?E@9>1H@OgzS4U_Sks`K(bF+0kx@=A4M!Ng;;= zrGvdaxheKR=U{@VX(Z9eC24P(jq9LjBprOxI<+OkQH7|JAad%htqLIRE9!YrVb3Pv z<`$?&V{C2M*%{WWd;mhF^~F?)f7{=+a>C@%rs$UiDD2(syl5&MK_Qb<9+)l(YF=%~ zo~v6QL_*d_$<5(2f)x=-@{V~hMq94Ct`Orrb_||XL{Tc=c68s&q?n7>s>{ZRdB~x% z+er%ft*YR_2XwEG7fVw3-D~3Mb|NCQ!yQN?SHy$v8l@z}I#lj-6hrcCMUC|Oyi_tt zgB?>+cAQOo0|VJvI7uU;*JPv?cN=W=h2+8DbOnX?9B!MUZfEuJ;>%Nt5+-Z?rXmrW zN7Z(lPZUbx)rk{pIe4Bkr2CvAf3(n%Te(mh^%pfPdhWE2yo`K|uV$FGnsq<&rqH&O zk}`9?X`*M&6VE9&OC-jYmUAlU0YXq{R>Da6HTArvo}qS^sH=g*&PdWYsGe5~@myZKroNd=`A}3}d|K0eOPjbu!j;*m*{L%*DE9S; z(5$`F^Ow%bHY8aNTe$tsue;-VGe;{hy;7*S4%zw8)M6O%bpdsh?(%mBN^?BjkyiK6 zlm}!kcG@;Bg>CeTbk;g|)~9TLRr(SMjvU`sv+>{)f(0eV+Ob+9^)e*9iyMy0FeIgl zZV(zD+UAPh1YoikwDu}@%^Pjd>0;-%1psfUENLU6$-E7u5u10%r~wx*d^-LjE>C;} zW*=d0G*gDysQ^eMsp#pjUDTBnUiZ(PO{zpRrgCR`wl+kZrvH=UTpEH7tMk} z8`DOLs*d*t3uQ>OyA|};CZOvIcV0X=lvm?Br|0#*tWiBH%WsSmOqE|;en79b)O$R5aoS7OL$ ze|AU{`|3KSKI7$kyEdI(W_&a_GwS$$|BIg{`Pk9$dg@VnVUo+&z`qq!#cSc6_j{rn zavoPa_Y`}dcD7ahLK`x?b}z@FQ>}sPj@#HN)vdbe!=-a0e7II%yX`2p+F`+qvz#6^ z_17-$$(25zg>#};Cajv}@6CSmvWe2=pZdhaRfhQ_#fu@;_w`zAwu;9~1NGiCC-#9H z%_AU6?hD91!rJ4UO2SDa%IOK{ew0hSj)voU;|Rh!YA`Cc*D5Lgw5-TU5`_-4=9Ti7 z%Bd9}Q35aSM5qD9yJ7ni{4keMdH8tMNMheu-go<36$-sAAmSN!zFfH9(CeNp@s~D` z-Z&dCE1;@gZ|zDqIemG<7dzIuqbxB2_&po9Vn`aH|8}p|J+zj#)4RyUqTuKTRyd}F z(z_G(a4O--)%-SYDJL?4qkO6g4!4ng_S#A)lS}My+z%f#n5E|%xQX<19dTIST%pSp zPG7-P37G<-#3{Fw-Q32ZDN^!%OApAFk~v9VD|I}X{T=n#M*51XyP=EOA-rbu^S8jGL63LEhr>)80-~$Hc}=x(J$knFmfPyzh8541rO(GhFP@C{^+m}*Cf&x z>_|<$nIrNHDxay|UYQC3F-Slp9)X$yu!RFQ0oQM!p46C(vPClem zPNmk|SKiVU*lTWV`zVG#R4=}U-e!<0ryrQlu-3L1sjhT)s|sF~=OkU*2Z@uUc~7;b z8+!3Hy8Nf~Gl)Kmm*II0*6#58Cyz)|1 z3R8Kv$&LrJbD`0r=0zzLtdEYeV%7X!d{+hb*q>i=SGydgk_5NU33zi44U7tzeA^&m z@+m5e)?)qa9(V#+y-!~0$|rBfZHFv1%jy)#fZs96Yrc4va*^=dQ}f!SG4Cxln2Txl z)>AAuXD;do+?U z{+S#j)eJZpJ9hweX^F=)`s;3`^6)0(X`P{C=bU2y-in>uWLY_7BFaJWsqY4BSIEP0 z6;<2GV;95gVwmeH7f`Q*&D^bt+y+OOlVH`d3?LZ$Aoxc;slAAvSDekmsX{ZJjm^yX z-A^l_Oc3rNa^lGC5`q?hFHcbT&#Nn~)N6c#!84tZDd&Zar6od|dx_sqo7Z?p&NqdZ z>I%6IZ0*eRU?0*EJj}vNTg4UCyHo`fmwu4N(}xcDCTEa1z)w7Ov{NLG>Bjfxn9%}% zjyb9z1%{tUB)k)&`nsi`z@|`k1YJ*pHf=asI#R=4I5Kj?68?jYp9PW zN7GEz_%cK}DIBD`o}Nbqvy-{9c80vx=oM41TL%aKu!!e~ebrH895jb?XHMqf`BDN5 ztGp4LZ9@N>>r`|(s5mb(FJF3m1v{)W6+mIr#1F|$NrXHaLXVx&BJHE9hqyC zfZ_?VY-8^TY$P zyq2C{kyWKb?rr_y?Vn4oJy#g|I}#luSyO&mB+#@cV4TEgFDY-f5OKAexTc#3#1J?x zo)5|d1j9Ev!Empmh{F^RNX=fd*=`x*)12dqJMWXor>iaEmiaf1${}YgUASS}iEuYPn!J-vjKp^wsQ13qu-TU0Le$4S+WCM{oGrbLe1v zB-}i%-avP}ZvI7tuJRv<0h7_gV&c!Z8`ZugRSn#`aOL!~)%K*7R~uH1D}q`z4Zmpf zoJWPGPPBjDUGh}8u;}RfAj!heBmjur<1?+HD%)Dl^#b$o>87Jo)U}fDj6G> zDMUMQIJr~@%Dw?36K8&-0CYXrP_8A?@#;U80N7{_xAq!YijX~H7n*d*%Vg}MK={dV zW!LU6HjqH5vs0mgp}FeQO2HyWmu!H; zN{znj7;Uhtg8RErXAD|AhRv`joAK-+ah>R3@?0xp$6ovO7*prCfTIMSnZqYs3cg86 z?D5T~ z7-Wze_M<8}O-YwP>7yHq)%7m{ZG1&|+}f4^)l*}s{YAs74sQG6jWTU^8D8fcg;kQ+ z+YXKKs&_vCIY)eAb#VL z16|s=HEF}Gj9HVl1=(E_PL!~mN}X4)yb-vypk3s$jsH>h07jC5-}~c%LmlMG1N*ki zf6R(93U9s`+Fw`PJLb*Smhdc_3vlNn2n{9t3Sj-2hw;4MF)O)Vmz@M-ihieF$hpVP zcdI@%wO&(Z^2jZ?kiRi*FZhW92{|m!Sv3=-r0sq)EB1y7iv>rcd46A^9)O6Jy>bJ6ti*u{?6eh)3QI(KdK z7&o`E!1=D14u*W5i_EG8xilojP0IryElcHM;I&cDv~-}fZarvvOBBNDVz*&1-tb70 z#HY6Fl$3vi`nKjirTWysM5jtLD} z5kc%$L(ejfL|hP0e|WWt3?J2}@t!?^dwJXhHe{C*_ms&0%x+mlINFB*d=>%CgexQW zZDp_Zot&c)Fqc-3xSH*s^V+*eR|ABX*Z_X)qpK4e2bgQGK3@A@;WPhNU=H7ZpvC$t zX%os9A3+9LAMV}qrTA}%lDr%W@4q5S{?gS2oj2a(SN|)`(tn$h@@JV^9yK3;Mm;pT zLPWzdzDL64^BmQF@DWw!0QevKz*W4Ono#zwu27z=lb=Uy^vm(iAciZ`4{PptTvz6x z#zGM6P&d8$1%0jT@4Jy&tfU)Pdm_qcV~~ORO*{a;6nwZ3GbF*6mz`cKij?!%h_}|7=1DQ$h9=!ast+BXI z7~+Vc}{1>AF&`UCP!|$Vj(|~)J5vW|mRn#x|oALxS z3H_Kb(6NhcpH%uIJ>HFPOLttgl}tqzifqm z-@52EPtre6#TNx2d+s0oj;pS9dt?`@{(=2xd#x=pH!35qS&SdP{Bxqk-vq&q1kz+{ ze?48eQj+;b42(WQ!*$glu0PM@E8X9}HE`8k*TR4T2Unl}XUzJ~pZ^=c-ISMi>ssT_ zQ0WB@gCbRC^w{e^C(XVAS2r5``npIfl<~~o&<(C?k9CpKsj7QFniZ4YbJnVC*ji5$ z_Obe5hx4DO)cqS|@U4aSa}`V5SECeF0E3wJR*u;JM@9Q{X>?tnmiAkAR{mwOcEKFB za_ZQ&W6EDA6t}OgO%wvIHRYuYtNI+ADVZ-o#Jm!!cI-Y}@w~h=`q!xB+{WXNH9{-o zR0n31T0UIz-v+lfeHwZyJZKnhwl=8uB znRCuM@L#>c);~+BuQVXbSf-JUt=dLwD$%U-RVLl=j=klgu1vGOk2chVJpLEz;ZK-AM({1 zKLV53@$>DAA%1cQ;;oMNM5JemG2ZtYyT#SdJZ<|(@E%D{z|EU|3ZgT^H!L4!48%Jq zuGu&Idb|NGBtU2HR~kh+D9T+azVzSYUq7$_aK`lVQ3uFW=XP98-Lc7VTNck67Ik6! z+Bkdz{*6nl92Y(B7a`67pYii=iBQIRu*2h*Rbb@R& zbzR1zW`mPjB-vRQx)DVoAp{DlXQL6y*s*0hz)4PeRhq2$84(B;BAn`susKY1r)O45 zU0z~e&uy04DWvSQ1O8QjAson!gzTg@f0fFP%VtQ3fS;ab&1sP`jxl%YV`)Q@%8U9G=dWD(lW%6Q3hSo z=c9h=7w5+>Gn=&ku6Uo#Pz~Vd9w*}`N658%mTf*Kh~e3T=ZG=wBEj=0?bt{slyW8; z2yk?jlShfx-@O6oAD74T(!tzFPV^TxAW{PMm$2%EN`aRqwyOdeX*49O#8$T%)K<~% zM(Pon6g-q+D|bno+$U<5t%Ah2<&O?kad$FA3nDfg{VR#M%$H&*?n!5rj1-IjaOkPd zTRzH;fBn)JGlZBf)(fVlee-6(%@$hDjzY{pL2I!U4n2gB$~x=aJmv7*lB(vL<|HE=?e-(J)lH#d1zik* z9H~MUh<~lvDt6^=6WWr~Mg91f3s60{*(_L28oZL3gET~G|H?PEH#AUZcU7Q?nmK zQ$w1sJnMA4E<-q%qbgk;SH@pPLYBjR>7NEj9OYJgJ>AzFY1t6)Pb+^reqxF8mk=1yTkPcC z`UxPB^7`u2v>T>Xv%@E^qVcC_eH6ExR6RB~{Tli_GP*8X6QnP3inCOxAPcT^raFJ^ zB7`uWez&4~k>a^pKz`zLwjMEVtCUn`I=ncROVK1Ufzl`#ar=@?l)+e3k=Ux8D&dOZ z)6(9c|4M5pY_ryzFEeJgP262FDo#;8a#}t46=&#H?1LaovP{PHxveYu5y49ySg##cdS~Otzf*`gqnle1!#y;^Z_A*SpKUHhoqJcT(_L zIGS)rdw>d6GdDIrRnXr6gH7b@^8%9syEcl+zm%U>! zS4<##yBn94!^>A3LyIB|a|?!Yuv8z6-Q09$Ze7RqizA0$^Zyi0>{aV7|J*qCtC;R4 z+f6C9Ur2v$P8>N;^D3f^rtE|md3-x*W=w~fht+*1zZk+wtYi27Y*UABVhc8LU@=a2 zVJWS<*r^nPr{!OG3*pvRUxBSUhl7Al)7;1rXszl^AdgHYN{g57c*BuE^_Up zgf{`==Q#(K<#gha&d*NXz4ZWK3_U-ZOE_u}zZ<5xVo|VNTGGDAFGdgsX7Rx@V%fY58&vrx3 zdU8_I;!QiD8;6)j^-jH~h~Y||jnWo{y7L}gvphG9g$*++|FQd+vO&?g?yf>T+C9M@ z+j`odh%Gh@^AJ5b&My4iU?7;>UjLnTQ%g?>m9CZ{W9<=hshkNM{Z9bIOT_byo#{hO zM$q8)nyCt|&^bs?TcraT6nN z@W))|m?aj2lpE(|-aW{;IEYwcHt@L$W zm=x)D`FStM!)ZIHJU9 zRmi;cN!4ZGXI1QBRz#J9sl`CJ%ega~w_ClDeFLb3ApC`&dfJ7$Lwe%mo~nNL!q6WB zFhoIicC>Zc|09*7_1n%4m4W9z8y&;Ax({PmV1J33RIYxnNl-NxK|h<9vs^?{5nCKXSX!f$kI&cz`i;pU3SZDcqQ0gd)tH`2CJcZe9@!HKi{3zIa=xQ(uy z5bkeF^%ebo?Bk=un6UsISE4CLWFYIKN70Wr7~qK%^SF*xK@X$!{GO*q}S8`g9p6;PK@?)T4TImF*gvlg=ub>3+OA4oP{F{r5e#Wg;ox zeR65N!*F1zA3ZiyqN6LkR?A0PxX#r<8Z9(T?`mC+XXR`rmS{go;%?jf^(z{X^G*8h z)YFRdE9f5O(QMXiHx$T^1qsjURM%5}^{=23;cZ;wOr=%iB#$F)Bb)co$Xi-46oGXl zt5T)E=|MUJfjb<|Z{R-_F0+fY6~KA2PBZheSwFc<73DUBKC^%fPDlN6T0NeNx3`?G zj-kCHOtGz%bc~dC1Bl1feIhxTvcHgh<%4wJB}~U?X}Hf6j*JS^gV6AAY>8VmdG@ZhLJ=b z@$}RdVJ}3B`i*|py108d_X0aDxPUZ^qu>Elnvxi9!+v;jRO`_5n|gkHr(QPcwJP)z zZ|8tne<_$zFVfuqO)(hS_~F&C3e^6EWOC0byxLVxClsRn^aZs*oO$!~N*`7j5WuA|4Xt3qw|Eo~5=wXUl|jooBC z_p{8c8gogTX^G2xo$}^>ZV@0jK(^9nWO)d5X0zG)`+_ZZtd==#cLc4Vxu8RMa%)J4 zccKm573{>?A}}OO@Or15)ueo(;kr~$YQW0swr)6rvqGzoS#@ka4S)oFs{8^3Wc3Ii zm&c2a(%VIYCnMp8kl%YEiGYqTI?uM;n&rqhCkg|M!-`Dw*{o0NsTj%z+sf(UWmH{t z(W~V;uphYY4RlM3rwTSF0ZxklCnl$_mK!(nB6nr{Ns_olz z?=7w`or|KZOWR*aby~|$SfDq=UD^hCfF>BZ_C?+WN5nVScVVEf3vA3Kdw=b;1eDS; zEACRv4Wood_4qvb5Z1*ZYfA&>x8V}vpAJ*BoJ3f+1im!{OYOfxWDkDjh!J)&rhzGN zV@+f!(aF`>dbzPNDZx+p5Uty?VWU3ktrQK1UMT=xH-q485gvJef>&7zDu&-;^sB138iLu+-Jh_4TmAoW4@Jv+z28@)ADLDaEm(5ueX3H`LN?Lsn$T*uv zAVt%UWa3Mz-FIx(nkE1wra1FIXk+HT0CQgee_wm+E<47I1o={V_XW z`4i>RQ^DX)oQlNiU}gvew5LOW^RL&BCglH03Py`~xlt0kr0=59+`4o`IXLWpGZcj^ zcGDIAED&2&vP4J=N$Z%TXYQQYG`wu9cYa@Ymk0`*3ybajX>-{$laVu1UzMAXOtdtc zS084T8}ONm#N=53PFRxeFeggFLIT{Ehg2E3S^|$>w2ktFc%k z(D*k&FY{uWmwG^|vsX?5zMn6%BearxQXi>K71_+}nECWEM9OsKjhB8Mi+$65{D{M) zWOd!uUu+rkRL}@zZ?2v|Z1KAs<5W&b7o*@*4T3`AskO8;-do4i#W-cgE~lM5f_JOxuiq)g^iW#co!`yIc|iZU;}=f4cs`axo5&@s;E zf$6M%YO~6P3!i_|1qgFaj)4YCwc4H^M$GDe=}3w%f!uS5i>iCVDW7uW5_lBI?*Vs2KQ3q_lUmf!u-t@Z3ecGkfeL}OirBR zL*h~(j!jrtW=SaE{=6oqIucb z8WmGKuCvT$r=U2~(QX}8&M}_#0dh_G8HrGI74@eGt%sCKh8+C1L99+!0y;p37jm%P*lp+jUFkwf9%%+fl!7`oLmE@m*`>^&9RK`+ioo(2x&p zqDB;sU9Fp+lU_qz@MHW>J|EZ2E__zs*ispr&d;kH7hBmHukCS7tuvdl8)*_0*C84> zC4xt4B{R=M9nbUV`}d9d=E`{8th6z6XJ_qL4+JOc_wGL47@UeUx6X`eZ9cW&1(n3A zOsJH=vmkOp1eq-|xeVN?`5XqRX7(TQ%D&xgm01Z{Eq$IX^T7_!UaMIAp7YZWAR=P% zH?y^56`O{;C06k_v6b(Hb?XyOtE44wru5%Qg6QF_P?>ociKbMvzhKvU{D5a;%(*+t z6QA7PhtTXYNG_L;L9O;t+TPNMZuy3LaRIm))5x=QC^c+EI^3>_o%LKwG~IFt7Q6iO zV}Ln0cNJ~n82_O+W+!coutY01XUxnR!ejaMjqcVOh+#L&sd;wbtpL*vhX=E9bA&p& zbMjHnjRY$*shkhKBh;z4->5UN$H&Vw*Af5o{kwamhq(s2{!4YVn**GUBGx?-*x3PM zwrcX3>{e%e9aO>{1m=(@TkuPEiK4&6woi@2N&Y5hV640KxgO@p2y{!6(iG{93LgsD ze3e&kUhtW?r#jx97FJt(AO{+pbLijFp4NGiZK+J$X~KY;#{cT4ex_(b`BsaXZE^CS z_}}eVt3y)Lz0{-NwfAT$uMP=ZuTORC@U= zCpK%+#2w{9tHVS~0yFthJ7=HPf3DKiys~~UY0=5}Kp;IJ(R{0-?rWK>n{h$~pG+<` z5x$FVOSQX|6T7al#&n>AEK=J%+3@#8Hem&u^R(IeR-0n|-K5g|g%3+9@KCMFVY~)) zWj0gNZec@N7S?h>ufmQ;3K(7umSMZ2`LDoYH<%97?K<*#6s6a6-0^ONQvcK-j(Pvw zstPs(Bt=X%rRGTm2aQK$ZVZP6wZOPaDcLkR?bqU^MdWOG@l%~#?hR@790fTRXxavu zpmwZpWc=N~mW;(yW6bcq2>)JF{$RzGUwl@p1`Y|i)kRym>B&?xs^!bez}_t!*R=Qv zCv$$jL|gMly-dpqOJ%V|223k)5^vr zoskjiS+1daSpf;$jK-V*HJBS&}go4a6>_SU>jz zu1hW45sGx4iND*f;qnpVgKB@^Nz!rR>4h4T!E$Hw#rW~&atncb6BDC9m3y?~r9^jz zGh=*+JEQmMBPyeLi&^#pR&w_aknh8VvXRdt6}61)0q!quo^Dp8c7GL~R_q)&qw? zJEgv~+o}?{ttT$FzuYv%Uo0M~ljh9r9yh;(CO3P(gQh@6#%qRHp zrNw61Oi4n`?TA!z0dTtdNsxH&&^>~fpE|a)2N$%b2E?JVc~-mJvSP~zF#y5PH|Dr9 zXwRTWpaD)Hto=N7{k-=TwB^ zQIDF%dpZX=m^>H1WfM@xjoB}*V@rM~U7LGlTBQ4`2!7ml_UMmD!}7n8WgbY}Md7o_ zo6bhjMD>SDx|$l82X^>5T4lfXT=n z!u8Nc&Gpeku~TAVESdae0zia)-Vax^c{4v0GW+d9GD9Yyxyzlb@|rI!dLka;CzB93 zJKOo{`;Nz1=r9PGwVKU^A_^5r#5;)~|F+3@`cO*KWH1dXnf}v5p>wrcvSCO_FG^CC zhmx7cxf5okvX)48x>t^OA7$$ct6r3b(wn3^y`o_5TXE)69`Z6lr1P%&6~PV^zaJB* zYAEb7J!|zY*6vb#B_}4PKt5cYkgZCsPDS-THs|8_s%9@sItM}MWtZl3-UTyPn8HbJ zWMe6cWykFN+J!u+$Ktcr_rJSl#IA?hI1ShL=Du=24TLD@3al(p`dP72@TG9Qmq;9U zb_O;UA=BU1{hF;5GIkc~@gfK)BA$+oKGBq;W$0owl4}f+x*F~Dj5+h$%(yal3csKZ zwkjAtuJK8J$S$F<8XamuppMz6ycSuHmuk2hbn*Z{CMbmjzl{QSg|JD9z|~%7G&u8d z4^xzNrTE*?!rACBac=bS6V{jl0?9*C6MLzP=)%uGN!3!1$%aH??Lhnj_1~5LWFR?{ zH;@DYjC|Z_sK|L_8V9qrRR8?6+hZJ3Lhk1#7A`ZR)U@}+sV2vpW7jm&U!^UPFd(F2+ngeXa+HJd}Qm4f2_RE!_O}2^6=YfZeieqCU!n0K)+PB;0I>fN6{+O zrPpGaEqSztqkHAfx62yGc{-PO?^0>-@9#$Sc{ErI2TPiZaC{%G0~T)s`>u<-t5yZU zCt)EI%VhMA_QTVK^2O0fec1+NtQXV221LRrXUEMk>#VIzZVE7HVwq+%xgW#zZt2W2mLvr2LCDb^}hG6 zmN-fIR8NnDxN&Y}11|<~-qJ-i97>8+?e9! z;(3?qY0Qo#s2ETes&;L;Y`5_w+2G;f2B1nJ_7A2CdT4wx-949G7-Q>0-F%3(r+Qt@ z0*z3ZGiho{QRe-2Uo#R?3~K32Uy&L%uY-*>+=F+m0{W94(T&+uS4$K7lZ#-Y6WEUA zN+n+0@hABA#Q4&GFh{okBsu-(G5;HbBYX)4vcvXR*6B;K2EG}+i_yzoX99YUU(9M(w6E;{qVG( zDo*r~vb<_UsOnr6-J{c?KUe^j6Pz88-P>}cKn+sm{o9SZQFIL+bM~_!wm#-FxCA449q_}lY+N`^^ZNgx42Q35sOM)>-(lgO}Ho)|H z+_DrKy%H>N;er_Bbi<9xX!7Wv*i*l+k<)_A5tJBHekQM0&gT4Ni&*T-v7NJHNXm*mci3zv9(-in8bRIxQ;T z);-Aq<~q-xVWGQOlu*%2!j2x=A3Is0L^F_Mc^A04U!7u^ zJklfekE*Zj@4etr#RqnWGl z&&gHTB5<=0wuucZ6+b^G%QmFNgY1wx8kH^RDax0F5%NhMy*~=)hnktF9EG>CKPS_B z;>W0_?nKHbJw0E%0eu`u*)}qFb(M!aZ!34fv2u4Xv+f+MeVZt+qcIo5c9@OJ$Rj7? zxl@I$(qO(66hKaSW_op?s92dsoXEz>^WJRktEu8vl)&&?fkGXkEsm@17Sx!AfDR3K zgGor&=i-t$cBiE|9iLy_%@$qS&zQcud>ahJha5Gn{n@-$K9S+vT0|5)F;j6NxRrJ& znj+bZ%$Q_duRP7FS#{bY2?x??z6V+qh9XCE*;Fn@5u-E=ma;@%=+~`;k@7Mu!*jDas1$f)iG#sTiPtF*AlxE2{s=6sv{8+auS`{ z<~;f}pPhH6!2OwVbFt?-6Xa{Y13|ar!6kg|d^a_U7gV;iIgc!@>lILZ;?oHv_860@ zvNo8mt{k5R<#}a#E>U*Z#W=_&SQ-Uv4P6Sr+nIG(LW~c z^qtutej>DQAFbVF1io6%qQ9TWqFrtHBTH4B7(~*)|E#T_LuUK;`%Q|;&L7teXg2q3 zO?N?$=a=1A3vOzP=Xs)feZI5ZM#7S) zv!x@pGu0E+V>vLnxTJ32`%ZJ}?1W$QUS`Ks&=7~g^^hEe`GJ*1vnjcJP}g{+wQyMmjoNwhhWsMkR#pNW=`N+vE^DIyk$%(@vv%` z*u^p{)Q=a&eo)Rj5O1* z3r7*-dlc|lt^CkDbgr~j^ga~s{iPQ)EK4!dxI5ba7A)YC)6eMVh2A0DMVufD#3==N zT35j1ex63-{SwKIp5e#8fW4^4#p~H0lg+r7?*|fPr{?E!Y&JsE?#1-Qr|K(`Fj7%j zv1)`%rT?mv*3 zu^~!cZLvLGKXwvFY7kO4|zt7u(FtmfRI_K-nCrY^|Q=v?op z)EGI$dY`k}j~IRi2Dcd5jisK6w8WouL<{Sq@t)Q$^w+sPTz8fD#o0Bh1eGq?5)fQ2 zX#P6jhIUhxKS!$(&I^BZN(7YNiGHT3Anm~6FZ1s(s4ma(*MLK4;Ig??T){@`IG35Z z!q1AH@~b=g5gNR^3pXv&X*B$@{IotX#DWM;{(_3SKs;^!y#C66qic;eoKdC(*g%(9 z&1No+%uB>*G5Qkj{{0aAJrV7fqM12GIV`N^0MB^_?S39kvBd#IK8X3yPcM5kZ0C0v z&%1MVsHkTb=iP)(3qdc|9SdrTU945S<8Yl$sPQ_cH1Ki?52*O`rq^>|rn9VY%sca4 zmHSST=-c4)aH%0*pY*;Nk@B?DLZaA&BxWjVex0e1FELbbGdo>;XAcB*N~mZ+5H2zP zihQoP0wMYXB0NA-#2L-}DLx>rPh3Og zUUVz?P^%1{oOkzs6E%{0Mn8s7d7B>6chr?gnKrfv@^k;z*LMq&g>oYs@zZa3 z4WxXWzqjA!r#1IXN6Y^%Px@nYOpR?5!WJ^8eW_}<=E5E*^K{vh-SXnyXr_z&$F+Gf zXe7{ACVk9S8Kc{t+UP$t5i(OKw9w^Ov?rJ0YwA`^9k=z$V6ye<>hx$WH*(k)j_G@Eb#~4yfoQ{h{vg{)<7lE+V&WD@1WOfx>5npx6(!Z z7JkfTiH6JP(u>}q@GaXx7PN54blDPUaZnZ|caq2fg;3={ z0x}*!wlQs=UtPQ-P$|mm%pQK~9lmH$`HsS<^BmA?cAE`}eSLR{x;?`~RyrG~sNP=Mgc>4mTqYtS=GOUG7>?^t=cy#; ztuu0}__iuN@k7DLRhHvY*FL{rvGi5*Uk~S_R$~h#V1j;eQphNz9kBq5I;FeQxmHZJ zgNP;g!GZ4nj5dCZsIhG;x(P1GBasJMw+n4fV{VG#ibZH~0+_Ap2;~ok*ug=YyGW1D_hT^-RB0CEk*=D|`CK zVL>Cewz@kDO6>UUX4Fu6-{WN@d0F?X(F61D-A3g$ZBL|~;3alt#P>$wpdduX1Q`V+8CNhafmcEdw8SS*P(p-phxvDfYL-h7X%4Z*$b}BaBbqcGFN1t zzbYlC<*fjsz3l9S2DCv=1=n=bi-<0Fh+}o!L=K0l?<#Z+HG3>SP&tHT!wkYBQpiae zL{Y+5UB~g2s~eiEwJ`9-WZ}7DkkDDj7)yfc;py(~ES1x4#62Q&&(v&64kY!>Q)>Lv+auBD=N%dDU#+uun=-nF^sSSoctzdW{~ zT+{vApwSh%sML$VmQ7Gh1Z`R-SBw^IPZyN?u88dZO*x_Dy$~=wEKzm^J6y?``mDjX5* z;~HF{&B5OA-OKf(+>~I=%5bzi5&qLWj|0f0gJ{4O1MY@fI{E$}Wo9$fH0JG6 z=H(u1^icFsjaGp*s4c2!z>owgsIO#eFou`^#@;m-)_T^oD zr5B=oa*O=%T;ZQc4+W^m9gx+TreF!cF?xRrNMamyX}6X#wNn&(CDC`_ZVaqyzeHYoT2n^;rtU8UFNs~vs8}Ieux+lEw)Hy=zOXA4of)SJz)QX4N!n&K{j3jxGX?(GL!q8l_Wwu%tfMeMZ@s_ZN&onsPCT?A)l75v zWS3OYj7x3#JgT{u(eTJ6dPWT?f0-Oz23OZl-iOy;Hq|qOz@R@B{Po*lz^AIWwYNS{ zb0t_LWd-pNXBQlke5trATYhB=@=JZ<8#9|K6^Pq z#U!kDc6O5c|4GktBV3AjPi<&n5(DzfNl~@V*XgiA5u>8w(z}e=}yJc!`17(H;%U$$iLU=PIG+2K`eiE@M8?7!#9 zj_XAzDpVDIq0!Sw?n8=$0Njp#a*G6kw;mXl1AtC;s+B#Chg9TcK(oglPOEn=|2}{F zw1y*+_hmtuGPD{7Is2kc5+5R6sQEIVHZTnF(qvN&GK#Bbz^2u=klz^cA-2GoNi+?b}96fi63T z5=9sgMXJBwT{JV<@`K*$WEuR6hlCAlpCN!vG7IFB>D7)%rjb7biFtLVmc+V*Zst99 zDeb&pAK{`GrmdYo|FD>AS;|ocBqKK)QJ(ztj;Y)MsLPPuEPoT;pRql+ul-?!LRL;% zvD&=xgSNC{m_x#hyyD+=rme}d&m{eIS|+Q$@yH;xm*hj~E!ioW3mPmL=)U|KSEo|3 zBH;0+1_v?@S>y1xa2dnP#@IB{|NprcQ z8^4L{Rt}9ydY3;crkNZCja_-&+xHu^gdL(-o!`!WfAJ;*#1vx8S4t*TBtgJ(dYcBH z9lAP88I-%yIQd(Ie!3!?;rCMBJLsRnlMgowug;EV@SMI zcIvz_`@D8dZl4~eCi~?DE$j?FtDe9bSh#byuXf5zhKNSWfEZ{_MO(uX`)`|Oq{f>! z@#J^2rn3iCiq)bXV>#xifHT#TUnQ-@w8FOgarE;~-q1_y5Kaak1Exnrad%qAL@nJ_<9dTYU>rTW!rq*+08tq|(G~ z&4?*r+{r7H-qK!}Z0uDc%#U)ID4H~X6~3I}49R5fajTXkhaqo|RzY-BQ>_MqEV+Kg z2c-{n4Ai(xYfDe%H?zxXlI4%y3J>9D(bsBG-06{~&fYcMuzQC$J}vxjoXzHa_B}#%jiT=o$kBy!g_S^t zi$bwzMDG4?S$JWe)+eH4S)RfB-jOmANDK07sPld!#fmAhjrt!^-j3+a{Y7${woH2- z@CRNWY_GjVsA0dcirAN6jMoWk-3CYshB^M*Ae*!2V>Wa^mX}b@_y-7hnP6(F+tk>V zJf_-{_lFLL-th)4>8DjqqGGlo+E+(lWoD|C*%mkS1*+u^{(fr9Lg?LsvnCG*%sp)1 zfRG=ylbXGdWAa9Lx{$`t%^gk2!);!xgH{In-5;1@h6_$kd87|X7Jm|N=i}VR|G-8} zHs%-Svz%&)uYBhYAL$(&xBpt$?N?wGO1R}Gs^*jB?#N8as{lvz)mTOg34YA?^R@^- z=Sd-vHa81b+hRKN7jwd(SY-f|sOMnlJ(lu$#MKT!Gc#$THk^*cek%=z4&JIgFDgfG zxsB9bFNq2yy66@_Z2nd)0v#~xR%2u;H7w{r)%=CCb6kj&4KjvI2S}PWre=D=$Lmw=vL{`)ri=T)YTIwjM@2GgApTE(xjZA18eL$G^(SjeBHJb~Vh z<)P-BthP>H5(SzEu1@5bbL9$#(dcQfnmzvm1QZO@p@w}zp_5z&^_ewuyuV8F)HcE< z>`%ppaNovXZppLvmkKEG#Q#!O@g96(IW0GxW?p^k7DFlj<^&vAz;e52^P8<%G-&ff zc#KP@iWI^ewzMZg2jrffE#;@w3#4OS4@V79x16F=bUEg7YKV#DN#650xAwPw?H~U> zOfkjF+o)t;t5%csy+!$z&t`YIr%w~;)$#AuOFwsLGBK=HwJyu!ru9Ecm^yHVlAxJv0Al5XrT3vI_=rgVwAV}XdzfuD} zLpiU7dEMHMm7J|5=)C>cp0YY{56e6zr-AMoNxh93S(^w7MZ z8E#t32(eT}Ai@g;?C?lQ$7bxQ9~tH1yy}IJNN!*)Rb61Yya`!$wc?HsB9m5-)(j1? zSgmJhF%+Z$K-KKWeJZ7y^%4YS3UY4SfAf6ctPkta=x8_jYPzK|ah!8c06EUjVya|T zti~W&3$92h(;$%@5Q~k=vDI-0K-OFz#-?9}JpmFa?V2d+$3EN~l(QlA1-ePj<_mQ@ z^Sq@Uyh)`->#xEfXE(Z7mhs=ZmAWN9`v!6dWf&!`Z?03$&Zyojnvx5Z2{?XdB;)y& znSAF6g88V{DOh=jRtU(1ta>6=MT~vI6$xe6k5ajvXaavEf07lAHEZMvxwmcP0%#H4 zUudQ@ef49Zgr+oJJ>QgE z;hny#vYP0${)_2XnuDKC{C~`~IR4Q-_S69FBgw$9x&bdlaUB%&*5gK}XzFuhsyL1Or008$eTAIyVs+@<4@gG+olHh}SvBoa^5snys1z z;`kY43Ww#mc__bWm=#-dYle&w`9UeZO_H`MX)st?Vl47lLSrH^wvZTdn*&|^m^)58 z&6L3+Uhupf+`KW19L}Se{LL?ycS5B#+;U}kw6QoO7L#Fr` z*?xXC=nXXoI2W@Dk5&M5@Lvxgq2`=AkuWPg?{E+ZR}b;o2G^w0qX zjV75b?|<^hxXo#~XKQs7^-AXG`nS8Ap7E>+fD&c0eH*p_-b1Ycg1Q>`gUt3ni680J zOfP)-wOAymlK~#r^8LM0NtvpP`{-jLuM+X3mQ+_oFP0})U2d-2U!9z|l4*WcFp#}8 zeFIeJ^)}vo>*)BXenLM%^taCZwD!!=TvE>=t^i_-@pWN=3;ph~Ml`O>XU>i31OzIi zk{Et%baibi;lk_A?5|aiR_}R18)UvIK=K06$`uNRlvSQdJ29yP;BjI=?~cHp(As`U zEY_tJuJM9R7}#+xa;WzF)lxhM!Wn1kVzyn!md{i!Nu=aJW zsVF(QA=FbO!ZJo9nXz`{REeYdr?SHtcqCbud?q@U-ds2T(G1= ze*G#)z@WTxce2~tE^d=|J1*~7h8GKN_14?x+!lxh2H0J)T1hEy8vO5LhAvgzf1Ov9 zsrATH4`a|nBha(Ly-t+g-~sm~_)n-qxa2k_kPFs-AIs}~X0=F8+u-AAHXM2|CtH{3 z>G1P?K(IV^hUZ%2?QmKaME85ls$}?VJy;5*CVpjyDqKr(Iyc$_isNPo*ze7KL>!ZzY(R8*Yv?A^oI_DxDi z$nNB>-A?Zx_EtL<7aNrxK7MiCg|VAfJmN6_KJA&;D@=`S3pjaFs2{|osBfHqwrBjy zQ`(?u3$QO_CP#9r0X2DiiZpemSgVZ^i-_=F2)0hWoYOC)GpA=Y`^Aw$w!ZA z*U{|;2@o(Z(@Pw;GG>ZPih;jf)*}A2+6@@$u)fNru{n)7*PjdT+oEKhhA~keuomv@ zL^;#m61M}bvD*GD6;S7P85i@@e+=AV8#x!MSpnl{_-%FnC7G{RnfPVWyR63ZU;pCnEH6JOzf373}u z*bCyj2DYfDV*a6&C}) ze#@88+pU%VpbQZPr&s#dmV$OXg-US{PoCg^M(#g(l>X29>Ay=D`Cksef2}x^;)r?X z@`sKWqU1 zkpQ|L!|HrlE;C}oO$b|IcFUN#*@O16(i0-+?;~OK`P;xSSqjj zFO08t5s*r99<(`L&)mrZuYi7j^w4vfzA8a zkT`F3CF&)ron$_hyu~d$F|m6JiJ`Y5pTc7ECo-Xj2|H?Ue||bA4nmrcVX9m=6{2q$ zc|a&>;BjnGYW2fa$1{*w7fki~ydk=kzv8lTsd>`vGV`t(9TYn)SUj4t{!n*jy8BVC zV7kHc7>8IN+6gfkWrz2na$j;D#VE&YK4%fqoyu}f8=RVPVfWh?4>k> zd43Y02rj&jA+QB?oFX>^FUH9eHTJNR5BpMn{vbF*3B#<;Ongj{vj#m45I=PS$pR6*FwYW7UBY<6+&n0-;e(?zAL-vH&=hu zkrcwNPb+6YOu`6R6md`q3HdA^b^tvet~^vcO$dRfg)*P(p6^@m%K7aT8nhkv`ce2; z4NuS#D|us9nD*D~hL#)kTwTLDc~#jJuv7x7-VkpuYd6sVyNSlX@$o~G9{*xAyKLpy zzxR}2{{H=tlZNxvyWt+0t^-w!V75PFa}*>zpAYpZuwi{-nbRv7f&Dd1l@>Rnk?Mx3 zt*uBJQdJRW*0-Qjg)!z=%(2xHHPwoVuXsR2c!({b>a+$BPjH*A`{CnPj4CsyE~J&; z0vT7A+Z@@@;0D*b=ub{#m>Ga`>n6<@Igj;vJXLNsU7@tew@k~$ZFHlZuh?C$kYI%f zC12h5FRTdume)E|?C&St4F*a4KU{zhqmc?xntc6*bA+;#7#iebA1-U|& z_3uH^>$&}H7xi4PvoqLO8lzW#PtUz2hwaobhVb{RuxuYL5%lXjvWl27HEjQn==Hzx zFZ1utzjVJRZ2ws^|KBWZzX98jGpp&h=FwqFm`^8u-Io1Onc*=*zDoYG+neh#jheEG zspz-1Zu**YefW%dM)W-PiDRRI+=ET<* z_o&D2$JnaY6wes#L>gh?2ttTBF~(v4?{n69RvfAQP9G_o%))0(R@bhd=}!$@fSMS& zP+<9DG$_74dBEvalYG^LW&LmH&8%G*P|zzL>&efPkJtAuVDS=eq%bp$-8TG=hfxUb zHWvQ_gC`fk&>+bc%o-&B1YF?5`A_OSoPTMSY=-~gR<`^9OBB2r6kc;5Yh-|lXuu^M z2)%h$cAXUw>xcsg9Z&RL-VrZDjjU8HV~mkSSA&bk1xU!(%n&qZ_H@HInXS`t*y27W zAz!;c0E5SIpJHg_+^;}+ha{cCkhPt3}?eu9Jvba;SP;PO+ULn*Qi zCtJ{9av-j+0iM&35TmN~qp*mZCC?ieGc)p!P@5kDta*t8+Y&qBvO5nPN-H>b8M)h# zZcZ0ms$Zf5G4z8hxRDo^Ay&;hCWB1nyw#!|Y}eBjuEdPBCh`+6dcRkYl?=ng39`v) z^T*TBNQ}_K1;_$8YE#H2be$qHyqEEAmb7_baIVHL^e6VF2oQS{M~x`_ z<&ytqwlqujNANN6D=wwekr#;(HyQq*-mf-@!kzDHN_2geY|&cS<|oVJa1s@hJ6TFD z^zvFfv%`y@L>}ki9vGkEykklbl8n=Dp!YQOvDHBZ(SdDMw_oM_N&B}Roc2v9rHTVR zY-cm?BUi{964H1Y*i)fFRCOp#3SMmxNraD|ndPwKXrkLkXRbLVIrk=aH4@qA zxcW}Cs$zS563-88vWAYl@9e5Ry|o}MKBBbYD^fexd6srTIjC7)rw%Xhv}{#W^4HP4 zc?kw)(+W_iOAoBUcKuy=1_n^W4$6z0ku=!))vuO{pIK#?l+9gsJjcf$CHCDD^$oNj z(@|M#Jw5N)euEvgoxgE5uG1`I(;@lvHvC7xF|mYT^-DBG*}UfFS&q4rnc$k-31oKbG-HG@ z`!`s68RStBJT;gQx>*Je_Iafudh}GHPR5_M-+zUMG!5gVaXn~wjO=sxp0^MY?D;>4 zd+(?wy0=}J=iyNv1w=$Zil88fRFNjqEFc}EcThTn(0f%8K|+zk08MUXUx~1F!A;-da$WAFhF`~j78+P5%OFay zryK##Mw>X;dVIMf%I-_(yh=$4HkDTLY#%*T5QV$hcmkiDGtUG!xkziZQRyPuJAPbF zmYPbQ(*1r;#Z@h!4bN}M_;HIX$I9VXB10N>GTV{W6E8P6c^DvCZD43h zC*zZ%e4ryQhmW${3TN6tp|A&??ha*hZlx>3A8Dydjzz^e-M>MSWVcfC-CXX=l$6Gx z1OE9@b;EcJ;qH9Cp-=~}F#UFR(8^lk06v>bj(_3hpnv{v*nRhs5J-(mrD-G7ZA(as z*vLjO*1~Sa`=$5_U*ak&3k!Q&l&VI&Bn<--B^B`RAFu$zO>2Y1OJ^rntXn@uryCdX zjSF$WCuW06t!$H_g8JJ`LIrJ`_V&Fa@3!Nt!jBUAXUUGWxi;wSE6~4T5&KKmjB__z zcIzU25AoN|pc4WI&rLG|eoT4YW#Xia%8Xg<6lR*wDKma|Y=@cEqA>yLxVfEjaN9Sb!E>aOHJoMR^ZG&82_kL!`~{l&yr<%T zp@qQG(tqb&lnd*}zTHM>@~Ah1@&XM#wHV^eb%c=R$3V->;eX^%)`gv#_qOtIZmt{O zQZf9jZthH)F60rNkjjNRKcZWl$W0^QV09jJES9$Hv+O#}eEp*JW*sq=%glZEr|Sru z^ZO1hMQ$0Qi{CPXL`mFy<~@I)M^MJe{qkOAhz$*_TnHG9pqX)eBmNXSJ~UW-%QDxs7tiD2?z9 zRGhygREHVnlhasR-n`*EcALovC>gqvWo-v5`lA9$9T-7nHz*qr^boOiCZ4P~X)nxl z?$nN~s9AY&*O~c4MwJvPE3mhG)wGFTFy#HNU#;;y=hJj4 ziG}PNQOnfK_jo5Kr?QYLc+#d=`D#|KIN-$gw+=p zbge8Z{_$$d;@tUb`49T$yRlj*=A_51G`rd}apkWA2fgo#Hd!oV^wm_oZ2H7Vab2}e z+t90KE(wLuim9w(;mfCuUWHM~EN}NSdHS3~< zSvDqGEO+o4_$^9%b&bU2&*hJX9ElHZQm;Vd+G8ROs>CVxhWpdOQofewPzM>ZX=;Qd zF(v;Gic%>S7OTPZx(osQkNZ|rmvJ9d$!Ve>AGt&bgZPY)$jaPYe~ql|8&TdbUevKF zWvWU@A!#g_IA=gN8m#sXMtF8)sjJuK1zDW$)xF}IxI|JUGftXOyVAh2K!g9nULTyh zPU>JRnFVv`FG3A;&|ok^I^ zc*pxsC%4~GTn=(fIN)?>U??awwcBvd7%2Xz+WlCx7HrnrYjMSeDb%R^nN`bhl*F`m z)Tcgwq$)6wJ$gH+kZVIIrj=q~UWXwvt$rV|vcWv77f_HY~G-J@yz-80#twRYMLadGbZM&Wv*UwRSBnYx!54) zd#ytzZs@B};d`1+*<3;f9=l+c&o(|bebQJerb(6X^Rp*&!p=yv5f2xE-Ll)pWFPOwaz5RKVkaOg(8{p~Nud_-ET` zd>s>M33nX+#IXKddQs3g?}c;3KMp))1>!z0bM8k$Gn*H^=dhQvfGI))+ zMNEwyaKj@oPAOR=YQK(+3ebb4 z5%#dDn}yr-8Sm0L=aaKaY0qVLa;0e5S)9E=dA@VoWbkI~oR%C|=DU@$W>B-p(lk1@ zs=1&Kn^pCZb`}dOI-OJdgPNX21Tyg5^gns&FOy>Y4>hiunk7rS4t;rea$jigDtXl2vT^99SHEo%`Q)<1WOPDrRcIg5cGBI@lR}2z}B+L^GRpA3^ zTgz?&^vXuekVJk1HfP5^W;B>X33k|G4HVXBeqg`A%*etrVIZ(?z@qr#+kH_iV(+i) zof}d6Wf4;!>slBzEF-V;Z+U_s(7w8H8!+ab0lIGFRXJPZ^LAF-jY$yPW%@NNW2jiOvZZsZ7dzp|+u@iiLC-0f>=0=Q8!$}W-#0w`#s`f9LGvO`eq^X)-A*(JI_KuXM%fIOn4mCh(x}P^M^|BX38xl}17lc;N94Z;v zQW=deRjlVj!fqonQ(HGkG?+f2pQU9#e=gn2CEQ$o(teXp(x*=#O5~`v%pataA@F!( zYW2l&vqo}EbvcJ~=kK`0@_JJBQf@F@#vD7Q*y-O~v2`#Z5UK3-u+_k%`kZ0t4s#(` z-Yw8_Xn)=@3wFm#t;zl6?(z$t%?a@K%WkTnfdPLfz|8Ig?$Pu7A^LR#58HsVFrJ-` zOZsgK4s5FvAFy7}nC>c?WFTrwKIdzTN1x#%;!$h$zZ$_AohXS|=HA+T*Hj+a?K{l+4(3H2=|#=TT2;;MeMst_&$-IgiTSI|75= z9ZSC?OBj>AN}SQ-F9h>OXs8?vFIt*nVkJsgS4=(?NUulW7Cydmt~u=BO8+sYi{+D zx^JJ`Pc9k|n(EOowaB&kv$H_9svUI(#e=H4oxuk#kPwsEHap>mgg70mQ%E7Edlkn; zUv@T&0o7wm-MmMFHkO;sG4JmIkSX&u<&WX<}YVcmvI)HC(?47ibj<|;E~i}&h$bY8Jox|h)WrxD7w zBGTHO!MWzfr#lzhhEkGq7To*(XaOQ{Rj2)a_j&9~5>g0Xgd62dk){5&o~ql0aukxp zX_fv=mB(=#9X?yx@_KqLDNq{9ok`@p-p#!DUlGkP#RFa;EdxYwk%niq?(0jY%TE zWImGo%4S{QSxjxuJ8MzdX{lKHElZ5gL`MiX{;fUbmh_Pv&BBtgKLuY8RROyiBFk_S z9vX;So#24yVnBwvpWjQZ-O?iHv#Ck*b<2{*;#N@ksfxpx1go-Qma;+|U~iN;{|j4u zDkTd*O?H?Qtz31z*xrzlc%PR-dfYEJAvB7sg;2lPUzJ{EK#7WfE>H%LLO`4@6kJn% zJ-0IDVO`tTT7f@V3Wou}aClmow)8WM9db}zzeVC-JOCuHF8103v=GB@sm<%xfcvAp z#UJ;_x?8ybDERyD@aBJm69+?F`8E|)$7>~p)*>>Rmp=SSQh5Ev>3NRN_Se-6ya`yo zZ!9`3X*~rK`=t5TNMSaYL4z-Qc64e@p%oTVvy@6!a9Wb#$x?#x*j2hTrm#+ zq*ysW8XXo};!r|?n)?cHH$uN{k=_#8qoSb4Yge+38YLE0%6PBEnzLIWWcU;-b3d~s zty{_1bC2@$C?UN0e6$yRUS#7m4-)NdfS{<4)_ zr2CnIg6kvREFl*%$R_(HV}0uanr?GResRfD-bv&>u2US`a;2G{(#%$ssgROVG{L~t z*RapjN-ErPrlV=blrpNk9%0e)Mr~vc)>iA^X;o}1_NQLuTS8Yb~5u1v$ZrJV6j$wGTE zxqgj-@xqr75m%GTv!|P;<7G;$3{(!%XWm3PfL;*eQb(IJ-}%YOTRP`)hs2a98R25Y z_}d+H>pY5GCWL5F*T_godq>@!Hve35!E3WjfZa8;fcgM_e)?muEV&bJy59foy#GWo zY6e$)a_&Z`@*t>9Ox&3V*eI{*YOR{vs3wHbBrsga?l$G8J9Vqwh+FWsT)8h$pD|}ge#x6%SzeodT>xzUR z?@3Vt;)STpH%NM24Sn@ZIs`r5xL;ARhw901$dc$Rt&M^2R+*rjnM+JaqS8y7he8lR z5fOzK*@dV#F|?)1`VUnSYBtFrh%F755cGIv) z99gwi?!-oCdrf=0Km9;GgiY42Xa942Qky9|1?AA1C+Mp9={xHoQXwmY)p8Hf&qU$u za?PT~EG%rNUXM=q;wMG8E%&c)ZnChXkMJAu4DzU$#6>r8vWdQ6+Bs#i5SsQ7Ks7;% zClJ~m^$PlpxLRxQXmX7_2*J(+iEpY_o=#>m{*#lDE$SP$eM~Y&c*W=3;Ama2|52r30rCszVEdOepgmk7qD5}_IFcmmC#pU zW-fbLDmYs<(#k-$J-;s_JEkYx(Uc#(D5CT!MLlX&Y~5^%r-j>&N(vh~HCcf3mBx*T zb=L~5K8#vZxtL+lToY;9>A6sPbfZm&(ZCkNLDgC|9h+>CAhL<~_XM+Y^vq#+NQml2 zDY{TFiC~peM2xS|G8ViFPm&NiH0_B9l$grpdU{|NZ30XV`wDh{T@;}KoVID|nE#~j zMWfwcPPd`94P1!&`uljnA>J5|v3*5Tm_e}*uZMw#69cVHy5Sy6GvGWe^xB$*&XLvbF$hVU zl_M>(bU(AXmOxhd8hl*pTx`4cyRaqEp&78E8X3m1bk+0}KiapI;bru5(CYO$O_1ij z?a9X`s(~Enjt;9OH-<+nYgZ3tjm ztv#Q!!t@L+TN*pupAv3^j0w1z3DTQTUV(&S5Ed4bzzbKt)lCn99<5bP8-Y-^C!GCQ zY*8@|rEOEggR~v;SXe{&n9f=bz+?=deyy14nQE7YjOB^TBfl#{5v|oRPI>;g@4|%W z+3VzuEDl^%TEmC5WSHmXP8zJ#)++3di8JV=*g1UMl<=CW;<@jois-iLDdw$hnyX~h z)77jNW(8>}ARZ4SpY+_IsoUDh6T~eo3WA_j2VXz0{o5la52ZGs{THWgGh|z&Z386S z$Vj&fcu$QXlWlaLD!=SI1=A~xuMI(vIfF$Tlb0s35q8Q9CBfp^2@>E)C%z@OH8DF7 zxljXYGG6f2ElI#7VcOWe*N0 z%pW%;@IuELs@xE~zmwvLzIS($)>Ag~tMWO!lmDLd*iQxmqetOh-pXNB5F#Qn#;cS; z&wp%jUTmJZ3OH@IE^M(lDmDtS8W9meA&rpY(4VDKpE|rMyt&;gIb(PEg5rHT9(eh| z0AA$c`TUgc6%1Ao7no`U1P*}p9no7d`0Qe3L(i1fMXUAHhQcD`@Y%L0t?$||b4ZEa zp3MKyn)l6}GIw^rd-03QwU#l3&8MN~w~YsR|EUA$Mj|3<>6fP`Or`j_Uyag_@TjnDw05z$*++6`DEEL~h@aqIa-BV?NQhbHP9VU^Ofe&H8GPT_CE1J%VsRsCd1 zeu6?sphr&0BO^17vBWn3U3RIiIc0j*;I8R9T%Cx_`l=Nzkmm~QR2)!%L-s5(@dny! zz>-svmDwR3tpVE?ow(+_;?U#_8l70KYyd{w%fW1dSZ(FE=N#4Iyva_8BYoPACH^+W zMg(s=zs7ei)>ITwAQn(K_qt)!+I~UG?V=56UU^94s8%VX;CP!^>urxGjg0t^8O@wx zbxvhpA?mjwM%=>TrG&d`Dda-l=X!mOOolw~xdEKbi@&b5pqrf&GBQP^cy>D$yn&YVgw=qd@^kwr6^lgO_|63ZJ zwX>!Fs{?;mZ=TT_mgV1CfVa*6@yR6qkKpQmBBDq7P}xcSmN8RywYuDJF}}C{FYab( za!iu`3IV@902&uc8c=4ZlIL~os|rcvritmvd6;CV#rgjC5z20)apx6Inco|_>wfntOkL!8(U!^gMPRg+1q#dQ>N^{lRq32fpey8DR4pZBklN8`tiTD zC5|6}4Jk?`gT!AWf5qiQBn^dfNOR#aDcZN-AwinowXhE1zz==OZV(YO{D+9oV=<}< zl7SJ~{eKAj=y{^@MUr2wy(OO6!dU-0dqhORK;-@F^Zy_1grgJSRq377VcGyapuQ@T zG4Z=eW8fB>VJVT{{uUDoFqRtL9YKAeoq5}pMjkpHpHbYbe%w?qb+_rjz%~5Y+pX)s z8_!=u^efwhbc_n};;S>gFd6O3NlivGs zi==K`b9aMRypvG7cq6=?(VW73HeX2UZI$qIKxcoSKP5z&#qmCTtH&K*HpD>yWn9qh z#~)`-?1Kr$y(TIe{#y1b15p7P7W7j1P7R|kszE2$T->i*?El?-d3Eqf<3Eq5!mXYX zrS`!jk6SQ>{`^OI`-YAGjn#)QcpvNj3b5Z^RGTJ_>oDzk{KeZkTG9G-*_q5Wa!pCW z9)RlqwEz+keF=bdu*|l`0r)(n1I^>ch)s>8hC3|m_`UwILEd(L6$c}FCd#VUpqfCa z2V~9|(owk@GP)@&Q&utr-kiIhiv))PY=6%0C-B*4D(`iAu7h(tVr90=)jKdGB*nyf zt9OD=`M}+mO(Yv2ah-I6kTdQJ0MdWmBYj_fOHZefeVbCBmrQpIlUX?EzT(C9g)y3 zWMm$moj1uIF?2l~rMO(xg+`m20O+@$mRZl>C*sHkt`1*{6btl~K1|nqoE7-t^5UOH)%k*;%7^oJMD zzI(rvxO>XLB`sb3>0)jvj&Xr;)X z*u=E;`RMr_R?LdWC>U}C;F>Rh@!a*xr(HYD`nZ31BzClL8~35J3#)FlUMr%_T_2EM z`u)R^4``Zf4TG8XO`ww!V)xx>MedU!u8f&f`#)b9(5r1I$Uz(1BBUB~*XJiz?(toX z4AD!nf-8VWIwwknT>Zwdnnr=62D3(!-g$ZJ3farsYPZ`QMMRd@o*wsBbz&7)>_7Sx zQ@fG7-uU&DTJvCRQa}d$a9}=NJH3rHDz;h)YL`53tvYxvt_jo#x<3>S7H?KGu)ld8 za;ot++a1qcA**7Q^JAI9T$XJDC56&nq1fT{sCr~=S4&@5fSp;A;_zYcDmHY_{GBjv zStj3P3PZrhmrjyR$3?D(Q3+L4MOf^N#aWc-^4p?tBhOq`hj=)rjWhvHNbR80yW2AZ z%2}XW$Kh+#7t@%qg@4R@(nISHcUcb(uEX;?Y;TU(A7!*;U`y*Ic3b2YrnKA!PI23sPRQ&--rNGL`D+2_CIkJ4*49c%1?V&G*g~p%ebg! zQGUod_xJO$B&#@zXe^)^(8%DFIQv$c!0zUoFJc(D_q2ED+{^<+E+&Q;PTC(o1F)K~s zZL9Ukg1DFslCo*lf|XhV!eY^euvYZOLi60d!XPyM`b>_Zs+=4THLx{9s&la);0^HO z`OUp1aRkE9ZCHoN|9yhqr~3aQK_B}yF}KWpp0f^(v3@ZtEv$|`VP|JhuAEzwxSx5Rl(zR)Uz!H22Yda(OJu=fpX+J6{IY>Y%@Kfe zTa@7%^ri0=3LaIoyW-p!uFfkU5c6rDkJNn2-S$N{cW?s{U}jK8O3wOcyE#X4=BBDf z<9iFs;2o(A9+v1F+{3$X+Jv+>YG;{BeNh^a&;^tE{h6B-QO|yS606C4w~ZKc&1P1d zbZqs`1kDS}v^|p?G z_)w-HY`|K(sjdmQ#ZjtC+7IoB3szY{guAdy{RE@=&=B_yZgArpfWfD&kb$)^`#Z;j z%T-UtUq2|Vx2|`V0DR;m^sQS1c>DF5c+4zXbu7G(0$WTZ4R}~;aL0@{)c6diBps_Y z2F^N&Yl*)_9b@e{kRqsve?DH0^Gj+d-qlrmb4usu1`m;gXAWS;)>V1SEh>v1P>xxk zRzE_dLQ+LzO&(*vb$)BLcUYv?vj&cy;ON2ETvE_q?KDkapw%9?Q zDnuu(Q0>91mmFpdNBo!CKS+bpQBRh< zE|R&KMk1x065QLapy#stSfTo}GagNsQ$XZ20cC?4NKz@m028pCb#+rs1GcVZ7t~09 zZ0*$+Z+Dh^`JiH-E7?Z^W}9ySD)%Jch6?!z`8Q;qn2 zH|f_jm|)vT#NkkG%ufD%`KJ~=aX$lv zXEqHVc)dE~=^4mrW!k06i?v!jE`?W0VGeh1R+O59PxD$(1rMrNt-4+cqy0q>~&75`JxHEsP=E#;DX*JHO`qII$p{#aI zu0~1yr^cm-x@>s8%2Hf(>U=YN(`8V1s1bplSoN*0(!RI$={~DLql+LUB;Yk_;mPT( ze`JE{PQ#2Oq~CXjQ;WV)j=z1s8&x94M=(xfhL67%7S;=U>7plNHWz@DJsZd5DYN%k zo#TJtgDfc<#$P`Y*1O!`!L+_HsQ6jrk3(t8Vu>75L1Hfe^u8`$M>Ac5brf)tcs1|D zT=bLdPn>*Ru;X}=^~BRMmbK-YgBE6_>k1tuS4b8&kDFMQZ zV0Xr;{O802CVog?hi)MTDn$gXo1V$I(GDIUX6D8ID{!B8+Ks>jF*iq)@_0C%qQL+b#_wpuAmO+n)>^Hp1* z9H_W>NnL@YgTuF)kCXrW6R!0sb?S7aIsV^?&*y5Eo8+-qVpye@cDn-lK?Ay*6kBsX zd8#1m<6uwlJo>`Ny%slhIB9M`=zP1gBKhY*lXJZsM*n> zT?}S{GhOTi`ybVIJ!O3X8(r^m{2|iwr-Qd+NTd4zb#Bg>R1LedOcH`JH&O# zO%eXyqoA>|`9P2Drytn92cCj`z&Za`1HV#va}@X>vK{kf@Ir2}OwC}T>uVZHmH}T* z>Q+%Lo=kmwzt}Blss8?XId3fno!~wWIWJ2XI@*g_O~*g>hqy1prhJS)k@@?2Z4Jgv z<)+YD*M_GFn>Fd2AulDYfPJmh>f-)UNng0T3`9^BUkj3!wBhH&h3Ru3ttE{X@*X{% z^n-=gtZq7iCfnlxFWWUEg8FoH0k+@ofm7Few`EazQV5Gx|E+Czs9nIb!gCkYD#nz2 z=-$Vr9AmA(W}If7w~oF-P<|>GA2(;IP;$H3+)jFfthAKq^IV=M6<$3KDg*UZd%Lu` zt0a(W^A3r6_{MrMVRyy@5YaKvmXTv|$=&Oags?MTv#Hf$E2fnF*B|PdtR?tE;)v6A)lJcP(@wm>U+O-1PeLDQHBSoCc$n&Q#-f z@ZY1JQZBwblJfBnmV9J0l(91BdH(|SdsCr%^J)h`Uiw5nSjhL-ha^!F?A0{J&kqKc zq3ljt4+Nvq182m}a|h?l@}?G3Vij_aoJG{Qf4-yx&_kfkdc-H?R0gMny0zjXtD+-v z`)^S$CfL`g_#grcOHp^i*g|KKjLMP~?L?@$x#M_|vZ7_AV@&T0QIoa5sm^!3l~PK} z{s+SUx%~e?_{#{R)L!Gc$_DpoHPBH*$2x-UXFw&!Qi4*=S%4L<2z3+OJH>crg(rYh zQ`&rMVVR;R*WafXMG}@3;d|t;z9UY*v1rSIsuT0E+B<#o>|0=&mcnE-Pnq6#3nZiD} z?W}`m6wRq8a!(x)*KY-c(?2oe7~8&J`M>07`#v|*0TXb^auk$%NjMe#8C^b+vu9xU zsCKBq+4!z-ptrM+)-wnJj}4UEkc-`M9)r(byf&W^(_1eyJ}3B#0D2CNo1uwU2HX;W0@xmv zuaE;W6>C;=0lsgfbdBbH(3rbPgFvV-@| zJFGs92@ty9DR`Nj8c>Q1MEFShmV+GZ1ty>MB=ttUz#cG@VrL3TvDfF{3_^cmSE(iV z89l-~JnJeTC2?e5{1he?z{`?Zl^?U}o~L&FBUqm@=@!-0PyjEd{>-|Wd~g3Q)(E*IIBn-;rhg^V?mX^OD5uwT2!aG+J{T`jm!opdj zs;jxRsF*Q&BGw4?H**}We^ZJ3x?TAaP-V3YuT${(uFq%vtu@G7VzpJcEoY)QN}S-L zXe5GmA*bhDBsP5iG4xmN4EulO&bVm-62E??`NK^*KswO-gvaX_ul4j?n$PI<>#FL9 zNlG+Tr!A_5&63&JW^FCx7dyL3R{=n_{6lEcH^0sX@2GJi7o(nADKZ5AA)a6iThloF zg+O|*zt@6&eQOnIqQw~}Qy6v&++d{{(_vcOY+d1+zA-He)PW3AFML(cG3}^{{EbR)l#u)p%WT>qVm1#}|;r)RwwT<#(TQ=bta`JfyK7VE3x4I6`_476EFqjCkWTYo11|quV55mL_hK%E-`(qQZ*r|7ssP=NFOk0-Noecc<$5HQKdpi34ujrA9|O?}NRj~#dSD_;j5 zZOUNV*3z$J<`&jIMxB`;OuTH!$*-~!u74U*TCdBQ&@I6daIQEuXCQy%;b=t0n6 zcVzoNx&rgnWEt^9Itdf%x(T+`(+=+i_ay8`44m=xp33`FQANr0boB0}?}T#MYSQ17 ze%tA2s*V-UBnFn!uS5t#-EM#D`b&v?hSt2?7in={7_K=qy>1%46F#8KV)}?K_uDx4 z=*$cUd3c_Eu(ENru+6u}Mu?)=C6Ag_ePf;;p7^zl8tKn5%pn-Nv64I1&-&-hn@174`M zfx+w#P8;+#D(k0eqEs)Xnp=N=RM-aO?fC|{o`V|9tV-eRG-Ui_bNaT-@2W zYAIdjw0?b$QS4d(0k$6C{ZNow@_|xO^^Ro@5Ea0IyTwFHIo$AsowWhn_|O5)vwMWW zIQY5gzO8euy?kN^5R5}g@`HBAS=|%2DVp#w-NtFCMC-$yyFiiq)j@=ODKA(HWm%st zB!o;?OIlm1HD9 z9X*vYBN(r4-FQ3qEtrnz?Y5}+DEX~(xg~UN14$&qS>6BxUoZd$6m<5d(|cE#cYRCW z8m0c?CEUZu%EncvOC?nTKA))_bmOnrNL$V{s(o93O{Zpt8e}*_<)3Vo(9>vh%Emui zIw1kvS3E;~2%%Q?uS2Q|gWB@>aN3JSZZiw)$N7YM*lh+_`QQ2v80!4@(fq&ARXlvE z$2|xoT4VD~{EKKUo|V;zRwuXH3A|qv)}$XrDm!lww{J{fi&7++QI4Mmo#WU4RyZXe;ME4`QYC4!#wQI5vR14WCj5 zNcAWvR@C)_!ExX7y@a8{Q*&fUpZ!We-nE}z5;YX9V`S$Aw~(zYFR%u`1a7{PpMo$p zZu_YzWgARSmkq+uYW3aS5z6SOXhW`A-s_ms(ew$;(oy!Z(a?|(D?kxcCNx(5HaRT* z03{e(Fp@!ACZDD?Q9)XMbbBgUSeL@kf_}jh#ZX@xllWVB^i(Rd ze%y2UBZ-Kh(2*@ae8q4(uR0s>qp%RW9%s&;5C#ah8c6d0RuP_@sM%rX6V(uP4pE&S zh$QTcU-AoaxG&*KM5O)k{DcCaAP?z}G6+jsH;BHRb4q!{2i!UD7X9DSRsi=lFfZp` zF8*e9iT?L<-+z+5Kx>yPKeaGoi<6)mpft;2BkX1;L}vB2#(1P$zYD=>F^9Vt8)*^} zqGa%7>(hhKjrXJ=Nn2NU8-TlvyigciuQ)V*Ky+C!=%=Q0&~fMU3DZ&oOV%}*-w(bN z2*RX!C5hGQnx1D1t~>K8GG3=2rr6?jwlEOy?YFI4wI_ToJT#yj&s;?B;n1`@L`YMZ zUzrY!0aog-?ix{0^~{HQ|GNG4Tfjg>6d^KbAs0DxblBiN^LS5wJ|JUzfs@8Bu42Qd zs<;Kx1?DtC#-C?6?cC<;Aa~~}Bn(B`XRV|+TH}!-mXvC^`hWhZKlz6|)MR}Tn<|OC zOWVTVusMWT-3JyQ2O#lXCs#9BDQ}MJ@>ilf_0bf-wqS;PC^)~d-dNZl3-edahrHQw z+&k8MY!BbgUEyIS4DYvF47$8vzP&1ZCg0b3Xf1GVmfD}Wswu#a3RQm4}^AjPjW6lo6f0!-4(->#N{ zA@i@0pIBs{Flk6-Z17`*DWgz%BzCF1ECZJm2lbGB5vig}d%-ioKKiH~eO?ng$^A$e zkBKnq?_*z*+hN=X@sTmNAXYoBSri z0RiK?-+~it^@rR(>3%=0isuT|4&qAjV$JQ&^;4>jqNCcZ4);6NiQBBxeG|VSBuU$tT1mLrTDzvaC zcw1QUkCe_b-rCfv*CFfphR6s^`QzjJ`Hgez1G2|L`Wd*{orBT8MUIwNDqjrHCY!HW zAAk0d(3!E+dxQFWaJt~xo8}o`{Huc?cBdm(x=kCLkS7JGnWulV*@fIdC!MR3*MOq6KI*ns_}cmTC9#6E8Vl3Yo39w3Stcf(2mbKA z{O+%_CKJh9{=vBB6%uSTp9nHd10$2JH?$n5$j)}St~NH3sL zNd=pOmBrgleiS-EKxjS%efVR&)8{}k%Xrs}7D&dNleDEJQA9*7gx=GvKCrT_u32$2 zET3~5T{DhSzrnXa`9mD^p*7ZEKUk=46Z+WRX+XskI~G8jukC*e`yNr2AjFr;vCADEX$O$W~m&E!{|SF!QGI2u`WxdQTK zu4YlJLRE(;plj0RIwvM#()_8M!f`q50LrPafgAg?X`4HQSyfycZOvk^vqM;!OMBE;$8henpWpyd0%|@`XR3Rh|!0^dpiDDm@3lP9CX8sRxH6 z5ko)%cv;aSEXQpb#;!(tl=g9+q%q5A8$7aG*+u^auBoQU^2HvUepSoQTYl=&*xs~< z&^aoaExu2v?_|_)-)wIy8&(Fm-M*EmF~|YE=)FKRzW6O!(a)J!=mT>gT6HMoQ^yWs z_TLgW?!3z$&#U5vU900$EO50qA48ofj@FNuDcKy@HN(vYqzv3Ej8Px6NGHljx3j-r z1_`H32OKE@C3=X6o~Vn-{uIItNAyM*b7w3;H%9V*jOi#2u-Ha+jYsQoosqd|eA2Z~ zEtOnY%A@8Vug|GVXq2m1c82tFM5=NenIJ&lmn6rexE}jz-t!!GH-C;_-A}ri{ZE{`hOR0EMLML+$a4sAr8O-Py}b&q3-q zIhZk@Tn&=wu&T*C3X@Pj!lKNUPg#iXW0H&ypd)^HWLk0+>zd&~aQH{e$(wM$_D=3~ z{`O~~F57-1t<#Sjb|j5>;ex6yU#KZh`#rVV2UHC}bGErXw7oKn>^w;CaWUk6GKj0E zhuX=5%%{lvO+=S;g8YjeD~%W*9s62bB5}Bv%yHorlO8r`vgoI_g+5bHgG4-@i6LXa+oI zBM@p)P^}Lcn}1U<5p0Qx-cC1jhcax?26z=Q*b}PK!+F!XYwTHpKKvLp3>6NqmoT~!702h>CTLgVO@79 zDM4z3@OHRNfRqtvYa!;+CwOXp_zr)`eljsClrS=ku?QEyp9*xD433ATtv_PVFNMXA(I!9h#!v(&ou^ZoGF(ME_ zEPJ?noj)$tis=E?{fpw#S$o-SejsXC(+zF3IM#R6gXp%~@*D5~1z0+4bK4|$U#oN6 zR0!gbDb#!rn|5nA&!q8DcSq@1-V0jS!h+Yj^ZpnB8inz;1rYM#iffhW&ZwK24^(=> zPlxB?T&czqdxpPDmBy)=tW1Xz2Ba}!Jgf`?hO03luBE1xiG4ir?zgT!J$_T6 z&jak#{%k6#_(C2v9M#!$5|R;<=p1%l?!g93S4#Btbs*=7qRJVf*S_&ZeX8-I4pH?t z$ac!#H$|Xvt2B_1R=*I-kjCeFrV2_NgLNJk(J19H!+N{{P{HKu3+Rlg8plmrw%Zr6 zJS@%dpp>YKz&ai%E!}Qfxst(i%KZaV(TCv$LN&n+;F$=hG>IsyI-Xx3fv_UhOMQ`( zjURb8Jc9UR2){$ZK>(qG$>0eX7sJgS7u@Zj5*GiK8OqTKJp6- zdQD68)?S&4#+{FMa88TpScZzma_0sxlQ#f#c6-3KX5}WwLPW74lUlQ&*82L)s68ir zP3xH6k9BUUV4Hn=y$B0kVf@66qYqPE0}4f?L{CL>uU#EAYzB%7^vnejfpd~>v|cEa zlV$jfzA#kjm(Ck&*gYxmp3ym*q1uRFZE*8^!j<9k{H(srd+gan9rC6iP$23HZdAH| zLg`9{2lZ0}>%0%vEGyHE0D=koOMCtA**LJ@HgiOwzo0yNXZD&@deUR1LUbXajbBeP zum*V8xSA!0H1xhB4m+HXInH!-8u<`ZAqgBP4PfvC<0_t@_b@!`pTzXIfbsCSp)jqk z+X={K2Vf)6uR6&k-~{)orgBL6bvlc7Id8`A8a!UJy?Hgas>=CGr1v35D{u?x=cdTQ zbQV}w?E09RJ?Fck<}lDpV2dW~1l^TeJLt*xpwlp&O8wH{vDiWQO{(A;7hLS8wpcwR zHSmpUq(vrxZ_cLhOxAc@D8H@$S6x>g59Rj%D>rTlS0y2oL|H?~UUn(6P7=z#%}f~U zSZ;}g;Sx#qoncI341*C_vW{&S>)7{w>=W~Q^sRgU`hEVG*YkSjyw3TYb3V^=&ht5+ z&-?9=!o6U5=-5)!VMgS2u{cys4GNf9mKf3#%YJc7BBPtiB`51~SljP)Nc$`830uWt zdRSOH>0<@nk{$EfqPthtHY^MZbFF7g1*gs~YU$d8dCKIr0h%u(tSdBf$h2LlF6v$<@nHuo)Ok3<>uY+d#C8mH~E%6gK6c~|#t z*RAAfeZbt&alL^k%`*=g22$argTr#Yg9gIK31+?1D2vXz!xo8ab(o0G1Adurkkjw_ z{8Hni%e+;1Wr;c*3%yti`|m0o)cYfO34-`t%Wo&$#_Lbpc!70#YiV_r;|Xtvqd1Jp zgOWujYn}&Uzk7i3xcqgugxp;N8mljTJBFg4re>#z^9f~nr9I6SK%qac z3_(u+?}d?WLAupLJe>RtZY-1&^qQ!D#BqRCjvB%GJdyHdOWqp~o_6i_d}i^g&4xuB zTT>?L4W#EnBiJ*&uBDFAZ5A(Hi2guNm^YhRugnexHK1x8>M)85Z2ey;eTpT^>+Eeq z;LuVA*%jqm-vnj+UNtW#%&k8ABD|JWo9w^8y}`$~&!9|#{$;Y>CN8tfMv^9dm`|mH4*JPqMGpO)E&u^Az@wd3X&vYv783GvcXi@~#RCQJ z30LWO!Vg;Bg_y#;PIgjd9K*YQ0>OxX|NUWzbad{K9odBA(%oWek^0KzSB&hDtP-n3 z`%d^U?Zv1RCqBH2g`x1#>QIsCQqHN6Xt>e9#Zig5vD=4N8y0{$c}yV;x7EC5S#?v+ zYc~wqhcGFxx)SQhNh6pZu_e~pMRq>VZas3*lyx*ZZK%{{Px4W zH($HXyviWM1r9(5iZ)5Q9V+{)g^X$Em{b0`EPw5;;v{je%sf7?xIycWP(2@IBhpOKUx@W)4-E%7KhOCsaKDK*fIcPQzV<9a0ok;UcQ@AmSYMo@vWZ002k8e!8nubPd;;@p+h=lkqt1m0IPe-+`A^e*t)@dv$pH;>A+#$n7$6c<~aeAp4Jt$5fhTAp>*y<F@0B%hg2|QJfnMY3W&&EF+vtE7i#yUm52d4gghc%HNYiyqg+TL9eAAo4oxUA? z4Cxkp<|!2%z>V?g~=8rVF#;of(7|92k>eGu> zvb7kM0VQAv1YMh^h7=ayAUtV0FFiOuu?Sf1V^%A5?S{1Ccp%K%`b@mjPh3AwkKK`W ztI|Z>lqxy)F94F>R$?S>!Btu^ZoB*iE2aKyPU!-FPRo)dk<2>4!R1}V(j6XFZNF5; zRqLcb-B~GoBz*gbE5Nio(r*I6#XYCGPiIDzEX>ii1za`w;!RVDcAa@Y85(n_<8S_KP=tTSPO&KX#p5eISnF_V?mQB zZozM0Q8SI{r>Sc}LAXGqsk-GDn^J(9=HkSK(;oFB58jgx(?nPa`wCtnEL~w?Bl3SK z+1Pw@(O!}e0PpV~sge`C`9(fI5|xs9BR+`P4Q^;mN`n+}BVG19>YxGds|6*NW+uL= zpWPMYj}Y>)57RvFY$1Esn&MD+2p{f$kQ8kC=&8qgVOARZn~!dZ8C~Rf{2{ zq`KR9;0dIoMe4xEIT^$BgOpqQR*glgab~HB74JE)-hZX8`_-l2OGQ))-{@hXz%u&a zo|OGQ)QU^k{YQgA>Gvtdz)OaM%O*2YG}?kp4N_lM(crdhJF2AH_=SoeZt@a2{T*b@ zo-HmSEIU>EQq0%J2tkl^H20Oto3P$Lg?14_HzB=Mfi&|D|aY9G)+9>n~^+y;93wR{mZUISt0W;mu8yXv;h|?R-CU(A< z$lx+!#>_kA2rMD^2G_)r*C8vJn~WNYTvfUhThcj`&AL6hf{29Em;CX&!rkpDN?Cc& zPyvb9TK!pv4XS>!j#7*#>grll*mrI{FT)3J+PE_KoU zr2Tx0@~ZsAuI=Xi;O~{(tna=0IA@(Fm{_5-7ogf9>gq&fS(y|&dXDX~dc$M?s&}%z zCCTuoXPHd(=R%DJGKXgpD3LjK{Y(m*fd|*4mDv(&!oDvQ^`yYhu6}shX*=5cXc=WJ zqo|ruw>VN-&vpFs3l-{B5gl z2awkgnDjWU&IFy}r|{1B$81m{kav{i(&2LWBeW%>D2d*tacv?z1GB^e1sd*@d=tS_!a z*ll-aQL!3pWC6O@R@4j9mD|7oR<)RE|%!WldBQHp|^U($jvbQ{H7}0Gj z%_*8VXs1KNUHI`tLj)>gPTPqdmW^oDn1&P#I)2%C>3X-PqwxR?B z1$JHQQV<1)vs^wGMQ4T<^#P>%xhEDcM{i7UDD^V7=#{_^{jjkI2 z+$w6Vol1jzHNk@W(s1fOFYtWsB1c(kNFklQ@h989YbSw^{+>?Tp|MXB4R5K)-9NY_ zAk|^nVDyG&duZHfi|5mucb@OH`+n14Zfvx?K<4e-LU|u)2BwB-uZ@*UCws?6m4B{* zVua-e?fCdU)lJRSl+4c5@rCLRK63r1|Bg7XO8j?B054CWe_`k}%hVD$x?iNUg%mod zg(G58NC3q$gRm&yCl*KSJDvY-xEo=J#HJGRCF+iM=3&O2d|7C(kWKn3m8FC7Q* zgoF_4-2)ApwdMOMCz!4!7j?#*JfG!|e8%6s8oTl1C|e}U40s8DS?^y#0AOjCP{}oO z4sa=1@gJ7f>kn0$3k%ZnEG5FVNC#c~Fs}QlAxV-#WNoy-hTgm>Oam&$jF?kz2AI zv^B`?C34h~b8kVGQWJuDlCyMa=jqm1Sch4>)vHfjiD`MZK4N5Ufvl#}$gP6^mAysR zhL?+VE6vl^Sa*3icw5CU;YE8Zx5Aun_{G(I!hWrM1{2L?&F(9riH2*A7y%ATakRu?sO_2ImQdl@SqP5Ty<=M@8(~`UCrZ(Vxm2so9CdE z#T>(2B^3uO0w-aB+=I_QD1>QL&w-DYgYBeF-8n6|1@{tkKpr|&(_v)EIWIw7G2!)a=ydDP;M7swq|OxX^a=;j?|< zKhd@VYlA5Lni-DE7<;mn=|hOM)Mw|RmO^q6yf_Goxke$qIs}+41JbaeeyN%3Gsws%)P?Q7}s5T+MlFTu>D05m(pz|{1hrq_y)KLcJRJPj0Hm|_4E_Am{ zT@&EFK8vJX?6=ZgqSiybH5uS8h~xh2#XZ_5QZYOlrS$6fL(R`gSr`3tR6g1{gY~V* z>@sV^w}%PecG!HbZs!sr2eKUC?WZv`Uy_;CQ7K* z#QIRO@Kp$o6Jvd}YZ0_dIf*#*b*bFVmWaM{cQ3*0gZYjAE`yoh2*?)yOhU|zxT2*| zeYVa6);vPKB?JN)rl+tLtc1q&PIfSuJb3816?n#fs&{v;tT=w1uHE^VY&)Vc*273f zQ2xjOSD3>SKv!M^}-~Xp|KnoxQWq?=Ao_rBkz#_0hOD7r>g^Z zdv8q8Do(b-6pO*PfAQbc*smXl(~TCH7?o)OuE1k)l(i^GSfvxSQ`;Ldil&d+SiaU& zD5#$u=~Qreb^9uIgRscs|)L%KAD0K)BTwVGe^k+@J$!%1M5s zQCsCAy`$7S7_ENK#xesT{kifV$pUL1W&rC(onMk1RT@5cHhg}R`R1>j_uUX}?E4B9 z-@XM3g~2=RBCA{90ewgZ+-ak_1hsIU`f^@^)NHYJt4a#UMth3=dwhK^L8M3eGnNZ! zIC?(-C7ddz)Bcha*k0Fcq3Kr;Fw$sJ*p;8uYKxfZR}Ge)%k@t(PxUa$Mcg^`3D+qw z91Oid&|uFt-An@f$$(2*Rx3S0tgFLJII+XNuyGTui-e*J#MqILc%in3{Q?je?D5^* zvU4!$=w)c??e9g#1;|fx<#L3a1Tp!(ZG}d~6%fs;T3~#$FPu}p&@0{Zig6k8XL=}J?o^Ce z*WsW$2|0tyG?rnV?XN7E{qs%b{G>dL`i7Oxc9ppN1d3@{NAXhp~r?p=ZI44es{uksr8mh!M8k-!+ z7((RbbnmpPae4b2Wh=d^L@gUWwU?oPl&z2caXY}ue|hH{M~c;N1~ZuK@tMPrzehn! zA99HjJ9V_?^P-?+In}_=ksEAY8c!Ck0*NV=MJZ9ElBvm%=g~3=bYDCD*xJ5QN2IA)*Ip(<_jKhO*RcbkTx(ztClK?M`HK@69$GqF| ztEl_+4QM5f&4tbtjfDnit(k4)>NP@?W_T(m<4>5ES6PtPZlt``_NyMd?hKAgAo0}q z`$R9!mq(~ipXiDd2)tzBEcpRI$tbNHu@=KVk;ndwx^`r6&M`z8%jFv@abNM1cU-n$ z#ucw_a1|{q$VsY#Qsn5>JF(FF+}E!Pec7C;D7n6MW+9LN`7;~#U8Vr1!0n~4TJH^e zH$CN9Dq}wS1-|LLv>pCdPj=E+b@G-)-`z7|{y9Qdng3+&ZVq@acJd^jyAt;CkW-?> z3DP5d1}56nPis{?Cok0_TJ1ACxi5gez2A0$j_dB~!UTUFBP8t3=dyCm_pgxlr)AG$ zp-M`&1;sC2Gx40CgPC(m6mCGA@<- zb_~>(Zd>2ePzxREID1wf0H{P+u$#rK7e^&{#+)<|KDBtq^0Qr0xfg@<@Wrr;H*#8g z*j$wOl^{0t{Ro}nsSm{w%fi5{FRAElp`BsoaTj+VO^0I)*f<~$lZz0XAfmlDI6py@ zGRiq;$}v96Z+xjg-@oRlC|V5J=;F{zNMoNX;o*x-N)ul_*)jStEyi;G;$!X~mjuD1 zANgU=e;OoUlJa&A`i|8gA-frX4?GEB=q$#5OI-YYkEF+YEF!5EqR|kR{D#P7GuBPc zSNxRf^FS4E#c@9hF5j@=e^Ai+UYRxCvZhlP=sB3&^Jvn?m&V_dCwrkc1rJ+^lt-K+w2W<@1kpfJdBAu*}{a_9>e0 z=Zgh_7?ItgUdx;6>2>$)==_xq@Rdg%patiYQ<#s5Y(RH%DW!gtGsNr2rK0>`L;SSK ztr{z~^69`)VPVBd83F#(9*yn7K^1H+7h+^2J#@26)BIkUYR!i#>xc;RdbQnFLth6M zcRxoX7f&cZg#2mxS+{iN>x8#&v#kj6^lqkEgxYpC_@l2Dti<&1~WnKCNiBC$> zKaRpZmUPCYc5To~`b9Z(v>A7T@l8Y6K@E|Mtcw?R-`#@)qwn#lLQ1LFK6t?BZEQF% z(`C?LmMO0}kzZB`f8aS$5PiWz7&?%~%ld@d&h#zHQa(lBpofg4uZ_7(9@6_F4N+m^ zN~7fK4S>{7y;ghXaeflXDV`jTP#`v3-7an+HmAh?Gk#)tgSbr{o?YCI_aOFrxBs)~ zU_ET#QLbTbP5c`}^l_9uPy1jzulBFjZHw(qj9Gbv))e*XMTH!hpAIhl;=L{lg9ygO*g#&iil^SWibpxc4yBM7S$Zys8efaUP%VbSrRrE7O*lg3nupM^TjiekEpt;R`*!NGK z1GU4c`8N@0y71!>(W-&jB;7~3G9#YF_lH* zZ(YU|y?(8i-9HiL%?OsCdUuJ!yrx1tPCKyE0t~d~D*4>yXKqdsQz$5=H~1d;tLZU)FpgCEe)yD4?&xivY-@Jc|BW$H-{nzto`33w_$V z-y79Zwfzr z@z;yz1Y)tz5{D|gPkXSF!!CPgD`RCFUYnc*6O*U*2oEk0P$|v?!=KADFcVU+8Evdw zr_ndK9e2Cp9wwu`fE-bK7G6L0FYRXYqAG$tnI7-95HG8)p1tSOLz=@wR_Q5;Dgk9L zb!S$c=`7MN%8hY^{8l*ymZ6Pp+Hu78Ld(ZP73Q!cOaA~l74>9eJ#O>g)Sx7DP&jOm z=Qj%6r@k5Z0+LF4I?bFc>6cyuWcmD0sEewFu%&&64-;D7l5-)cyJH(wJkk5-Jj%T9 z|0?p_Dh2ld8*P);{|vv|A=ejw zNYP?gQR4Y#|L0u=U&HZ<|IdgPg+}v26-N_$2i^XgycEub&YdKwAsd)O=Uu=UU2El1 gz7KaEA~eI0cHkyE_yw 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%0D7)?t6cZ5<6$NP( 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

    ZLQE>$^!uRZ0+rN&$fG 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

    -t7QIvZ>o{99H_u_^#UyHsMw2128>I}y63zlUF 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 E0f2BJeEd-&3JS^#NeO@w3JRJW3d-Y{rw@^L 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%0Dsizxn?ExflW*AU|CMO~qHPO}^USQN?KSnU0{i1E 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%0A7>aAA5uS-^v?vJ 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 F`9H*nF$4er literal 0 HcmV?d00001 diff --git a/static/img/speaker-suggestions.png b/static/img/speaker-suggestions.png new file mode 100644 index 0000000000000000000000000000000000000000..7f50c3a1d9921c248180f69db0483f8eda295fcb GIT binary patch literal 152856 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%0A7pb1H&X!I&8*UW_@MO5w_3j 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 QJz`_)b63umSX_VbFJX={IRF3v literal 0 HcmV?d00001 diff --git a/static/img/tags.png b/static/img/tags.png new file mode 100644 index 0000000000000000000000000000000000000000..a8fedcf789eb02bc933abba6db433bb0c3c005f6 GIT binary patch literal 141132 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�nQzp0^Kwt- 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 UGi=e{OB!9jW^lDw^ZwKS1^Wt=od5s; literal 0 HcmV?d00001 diff --git a/static/img/transcription-bubble-view.png b/static/img/transcription-bubble-view.png new file mode 100644 index 0000000000000000000000000000000000000000..7d5efad38c173128364526e18c6b5ccaa60d8091 GIT binary patch literal 389713 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¬(UaPt^R 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 fF+ z=SP|V-O~xoYhdIl`ZI8E8g@9fyCjSanB(Ak4>G)tcaCjspQl0rshUpLf@qz$aKTJC z!s<)sZ)%gU-dy+i*c?)?sQuCer=itb8R}~p6EtR$tJnv$d)P5$qH}efH-U_H7CdD3 z!b#J$i9)Jni1oKLySS4wX7z+{^lHqb7^F~X5py2qhk*{~7AkjZfvP^ZGtmE07Jt3A zrV%JyLlJl*h{xwQ`pByk%**b}+z^Ps-=zz4`-nqqr=!L1D~(^WLhvcZo`ZZl=*cE6 zkS7br#oo-93RLbbr*}3ZP9XR_mULrK%hOoucD8w9cw}uU9-^+cjQk!PA-#`}PAcYK zwsGn*mYP26V0`C;6DtFtn z9&cr8M;ar)|9%+)IO%0VdNCsV!9+g3ZsKuAco#pFty}M1X20qtH`8~U6BAhA*zo1d zxjiN+-`jP&#B5HK>kJx5zrCH*q-Lq<=3NUW#{cBd8IBX%9M{}{ z1u*GMc^4+d2B%ura`{8$y-MU~`YZ}e=YO2s$;;?BkMTyPD2Evwj zdU_qrqUu2r4W;50_k$xMzN}Y<{GT4RCUnV*Tq`of>4eyL7C3I_`sb*muozFVH7!Lg zxzR0`%TwsgqUO>|PUhXZ&R|l44$h^RfRx8%xw^pJlhfgwh}0V&a=wc?o;b9G3Q6oP zNM=O?mR~wtZhtgVIXOB8O(5L)wWFwDqTEb=cn9Nr{@UZi8fj4@%(TsohhUX!H%}XS zZ3xL$7nirNal*$^FIn`l$HX@zzVB)W^x#kHKG1Wz3!X>!oQrO^9az<=;Sb?x`Hoy* zATyA238GLbgFeP_LpCuLcV-zvc0*1VI9zdLsz@^_y%yYO!dhn*d^ zC-Oi3H3Bk&^qI#q>MPAe!D67QQ1Lo9%F;v#5_goEAnjU$a6sRZ?SFcnd-737jdjJ` z^uS#4PipRWq}v-ikTwhalY_Y0lS^r&^$GmYI87jP1`Vxyv-=X8DeM;SJwFD0Fx@rv z)8^`K%BRlWU2Pidu9};;enBnMBFcQy76@UGwiZ}-|7&IGKYh;!xEj8AqSS1LC84S- z?9m$K8^ln%SyhvNl%#=q_g7cn3TCExEp~^vy`mg+L&`+6Se=Q+0UK!Ox<;?>$s;bD zpt0$8&mg>4n-cOvo|k%jjR@!LbIVdXY2P|U&72Gs-!ZMdjHV!f4LZx+_#Sk?{Wohx z#1)%XRRV_8wT_Us?E#PBBO~ljR`XO!n?E5xLRVffL=T4F)pEFDP(MKfE5w2xoGthH zA+u}9m)+`C^i>9)O?B^pk4o_s=-)c(9#umiWxS-?dC>SHkJfBS;WG00kgkoYmiS{h z-PSwq)Xwyj8!gQ@9-E}m5;v!x3t^c;Y{VIz+JBpTPA;Py|1Kc~<1Kt#c8b5V#;C;@ z>&Lh|VUdu&UPSF8%}MRdE#<@r+kj?J$NBz|8~WM2uiqlIyopubxDRDOJkVAm2oCMP zd$!|ayHH?IL;Xy24&iN~GabPb^jfn&>2>Rle+&sYYGm1@m|=Q8iy#2#ms_TQaq~S@ zjAvg~>(Bh~6QCryc$7z{kVH0Gt2D4G*IYF6;Sa>@PQImS5uwb(*!al@AmTMLF#8AS zJwN@P-&hzL`6JL56q!T-;M^thMHa1fwyxWiXQF&&wm%uI2cc6Xa?>HxToSp{}D% zyKIqKPrtq~FRPyBy!qK`vj6%RgC1LF5l1xhrT~}v#70OI0b>IMlk?SbKu?qMGPM=; zSNisLExX23DM?qm8GlvtP|821a$@|e`b2t*)5-a3we7{tnQAzs8`T_A_gm|r)r5BB z&8{l~CcUXdEV@qwi|q!-RS`_oL;VkS5S7B!LT?O`e=6VQGF2HxUU(Q(RTtelNB(uroLUCF0yi`sy8sDv9YOb9T6ol%QIdq4X?~Lto@+jSD#xZ^B%hk zM$<8Snl&}9B*)~JjJrW9c^XxDGR#i=X#8=SH??6kk%mW8o)4{F2WbN`Fl?LE8w$8F z&4>0=?-e)03~;TPQt-H)*}3WGKEE)PL~WE{T(&lN54i+bmob*r(ARQsX=}t2G+Cd8 z7ZJbpei+0n{BJHm!|xmMg<&dc$MBWwvUPUaa5(!b_|#{?jU8u)+XeO43t=1bQ}was zGl4UjNH|TO;;TJVl4lJWbRMnyMEL!&xrx)%=WXS=ne~XYn>FYj-@pE-$!d8K&N_wU zk94e-vo;mL`|KqB6yRO!5l=TMd;?k2p4QmODwKeOV*fgbE;_5L3Raf=O`!~y??i`~ z>;w@{Pwbs3YnxK|9zQx*ydOLFc41hbB&34Va5>02 z`;3l!IpPN9>j@Cpc~sb8!A_23=qckal>0l(YUpI%3#$Rc2D7DjOsLN_ zZI+%wCxCG+6!6I{p7ORaL~koS37KWM$3j8lGW%o5c>|teGkF959s&KJ(MsxInHi(x zLgSdb#uhxk$7W$&(a;c;w)7{vsa)PFyH$0*#505M5m)cGe+9Vcy&nfmhp!;`>95L! zv)0Uw6%LQ%PZ>_}19$4KqCR)h6FycEaRUp*cDhpmqh%u-@r>lX9M*f?iQ7Z{xUS?L zCo^?R8JDEe0}^i3)V)Cjj4yel#k(n-_#}(vFEo|C&EOqj;Iq=0H^~c_{blu8t`oFS z|3dQpsZFW@v~hrGh0mf~qValBa!DIsYc=ftWM#ih_yAk8N>smmbXHCqtn0UA@}@7u?oMl8e_tzDSy9#OF!eB?3+lMa}St?PV5mH_S+Kx zal_YTRy1#4wUNB{m#fsQj?&Q#BmwEiyNMXRFTU|3EaVS<1usk9WNdnxn3QuEzN+$~ z9PgG>c}_1|0m8SoQaGKbp!O~ekwfvwhZ^tZj~)6DiK(B+^dZqz|DIw^*pZ9!dFO4> zj6{M?a4bL@gmA%1enp_2F#|Ym6~uFoHOw;P4;$V?%Iv#eE%9l+@^+wn-ZgJ!A~J!|ZaC-cOKc@}*c z#LNc1upFjX`tSrpW$qwHJtT2IYK#3Wzw6yS>@tX3=yJTZwwv5LIeCq?EGe3aTQKa# zuta%#bWhAL;v~5!3pc+QMK+2Y8p;SzC}g2FvQnn?PF|@k3!=9?jm`C^q>I%ud$&l7 zZwV9+OV?W2<s^x z_C>wC_DgH7{rKQ$?`FRjC~CyYa@6&cAtsAOb5x~)admlwcb8}rT<_U=e{*<2HbO@b z;&RI5PQ-`XZeESV_w^yBQ|@m-!4hB|27dR`sCXrzxtYny zdQ0Bf#AxDX$&~21u+}5903|Ikyk|l@d8T!Lfk#okJV|X-b{dXLvk%Y83ZWa+M>idl z?DRS3fi`9lOf!#>a`&4SsT=bSZKJL9Jh=*9-ZGYzr`I3 zl^)>#vw2=v=JAqxIrSAe|LiT%>FSHg(rgeLo!9P5_=%jwjAT!*s`2!^#{JDC9WZ;j z)6ifTZ<5^Uc=6}Wr6qu?@qKRK@qoJs(CloG<@7iC~76m+w#@yX+b#Ok7CEFt?sOI>9;EnsILd~ z_p$1i>W|F}NpNGsbg`zJC!43+o2Q4t;3r$Hxfw(*$-$dG3`1Sj8=)(hrC9p%1os8% zmO_J=HmYE2NFv6nSe`Gud4lKm_z-KJSMt41qp0Sv=`oeme?KhA3CTi{3#o=eSUBP8 z59p`b@vbx;c7orj((cB(X3i|MroP>vFV}*`sKL!nL;y_(huyC0K#HqBZ|nE*hKsB7 zle04yzr3qb`)1iHI#B5}lHSv&1~``ETb^7(o*OOLd(uD5Th)|Y17Z7zx@?(C$!CAV z;>een-G-o*N!h<(3oOx2`pm@sCNdQ()5O?Vo3bB~l8t)p>s1JTqobo{H@Lk4<_fgH zXvaJ+&Q^E#SaT}fnx^9uT5L3okb!|qAlab%n0ejBIj{|1tW1;N-UIFQ^6@(BLb zetS}+_ZL5$%I#QF4D!t0s3V3;-n8#_ikfa`AEMSR|?atBzfNSr=yhabL@5u)Jw>h5ScnGzn46 zxlN3$aM0ECC|Le$aIH8v*5ks^K4I=!DYW_6r^s7Bf0XvWzifPgIEbYzslU~~w3y~0 zx>A}zY>vOU#Bk9TwQb1_QAhnY2x@T#r6qa#q1`-!VxH|?TGk{E+c;`D7%IwRAC7E! zwXbZfZX9cD9!03#d4HS?Lku%%t$DUBAT85OP_LmJy6^LDte{krP6W7e05>iKU+5Vi53GFsi75F!GnX(KAD zDeTh$BLyLNr7J3*A4c`i-UT)$KD8CbF$vlxiV@%}Ce2mR^Eh!u|f{MDNN`A5mZ zZ0rsm*B^)Y9|P2|9u|HQy*^7NV;+VV@!y?*Nz4Lruh`-+%?Dk7Or76fKWN>L!&hlO zOU7_^6LL#1%_4ajz!d=KWo% z6)7dHagFx9l1btNk{6Edl(6VkBUUFMc(UQ>K4GwE?VyBH#te4`s&SgdRpedYE)cuMRC$pE$pZX4Yb6d~BF);8Qd%1C2b3 zF_iR^m3wOK7~AGYoC#Dzo%zzOuR9c%4F0%^z%66YfQHd+^si`(a>!q)tbS~b+y4dt zyC!Dwxi^kErVo!hTKEe~3{oKq%%7KAtrkv9AJ7CV2x{$!msb4gmBy)i*ad|KiCP!%rf&r94$Sm1{x+<*675AEoe~A3m75e&| z4g;aA!?tN7vgTzHNuhnyhu(7@-Y~P|?AFWV6Os*UYw_30*nO5Ex1$OST#m$Bc_kOT zlQt1C;+)+2QIWGMD(#RzKN&!UjP0=ndu;5`5VXcVK8UuM@ zFet?383nu4kJ1&4+{Cm$t6}@9l5nWj^G5|y`wQGJH^$i!MDJfC6idG!i&?ZWovLc& ztyiw3C6F&Tv5c@d&$0I0Q%caa+fw8xemGMK4C_@n6UAi6r7oA$t~fUl&n4=_kOh9f zzsW0lGX8Sz*FTs3Q91M6nGL_+6`{~-qn*cpo)X-lDSlUw(W~>%8q#QC)zDaDg&A7FI+bWnMpvq zvmYuVJvi2}_%Gt+g$21(s=H<>Rd1fR_1#5GRy_UAXZ$8GNGyju91T{3>T5A$1TLS= zWqrman6DA@jY~yH`DSrn6N4#vOUmRt-X1KWq;H3r$&0oOjS1bcx+78*jvg-c+ z*83?GDsw?|{E;tieZ^RMn+(^c`wW=ctVkMzaNMP~_-OPtE{7^KO;RSla270q~xEby;sj9cTf!-``K!Z;V zzIr;kr13hIJs7gHk5AD11s(8?+QgTz{H|U6qhSl9E{p2>1E(}M-5?4uqId7SAv(gv z%%q&-xU=$o0+H&MYO&f4Tu-)MLPc*VH-xo@zaTCh@*qYB$CPGDjnmR8cg8qM|Fh<; zGmrrym}Ju!e{_uDu5e&yBB$`wD%I_8Rc}7ZzD>(T=*d+-PyHhn9`o2}4Sy2=9=q~e zR)1xXcc;m}2o(vF3x|I7GSmH-s0Y@#N5W=gx;({SA+gEo*a?b^r1VrMT|ALn_nwCbxL}Y zGIQ}~HHd{cooj_Gkz*XwMDGZJgQFqPI>7l5dFIAe*SS*bj61b$bAhJDyQlmy!o3`W z?!(Pj7JN3x-5?adtK0HNhr)}Rin3v@N*2?p$bCfIoFcqQ~^O6s&d9znCJuHLz!o#J~&wgMf|j!$Meg z?7Xo&yAi6Sz?!}P3*|@`x#4_xx8f=OkyE7mRND<+5S=HZ4V=?RvI2|uKn_W7{-H3& zKp&m`>xZ-Xc#-FH)n~O_w-g2&>hX;(JTj7+UUEwpxmu@`bt+Xv_n{cOATVgKYCq}T zKc7m^Cj^b5{6XS(pvA8{8>ZG`N{$uY0U6oM`M}FYK*gPpGL!!{Y3rU41+x=*!WwZ0 zoJ~BPHQL#^*Uc2vVv{Z6Qj97YwFnl~I>z)ml#nTH76>t%Avh*glH{JSQ3!y$l(?Ao zS*PVH>__Mj4AN$V)>w~Le!eI=e9~)d0=9}~YrA~J(Qp?kumxg|?h<-ZGDfW|8(b(! z&Jf1MXcE!kA?6uhjW3nHMc9$qh>7N4=7{tAd}1`6XIxXgoby5*!R}iXwXSEIN#Fi0 z(F4yb-&J|pviab?Z8vz70c`cc0>(bYu<7Oo4>857$pJ)L6@*zgK840*E0aR#s4L87 zAt9aE3Drc4-t2d&&7{#(LvrnqUM~A_-#~*D#1xt>T?%qrapmX=8BL3R{&b4YwZ4;h z>DFttQl#=vsqDq`JzZRb6MbXPZC7q&Cc3#?;yFs`UklrHx3}mbROuDgZMfF_+1}1H zyp*CM9biGP## z@5P1q%5b*jKW$Dul@Pexy=UB_6kuiwG9h3a7Vo_7&w~@VUACQr6aM8%s7;L`(%u-{ za+;>;qJ!9=FW|ob^z0fSU__)Q9vJnVC;JZB&|RAldnki^vM=Igp;#wLkBxdGd&ssQv;fOzJpNli-okLYR# zFV=4tSE$517648~RTWWDOHC4kO+mz~JvDhtuFo+xr(3kd2>_268sX1~7DYD7wBrI! zeu_AI+RCh+*TTiY?D2C4*}5Ei3#2g`%*{)UPg{w!5>1pSXWYBH4O@-*R>|-2kfT?2 z-r(__hUlHYHo8^$Vu1#Il5D)nQrT(ze9h+4B0`uD{n});S8bS+s`C+b0+S zx(kGVasg-ApAp;V1wIk#R9myrQkF^D*3QhNPH{GHYoY1?&}HB_(F&0K-3g3R*S8w z|ALB%=Gv_XG3E! zcNG{U(`0;Ka0(@{mdPu%guB14trO4n^$sCEQH-OK+l5Uck8Whsh%ZP^i;Iju~iKY1jpX?gv-W%_-={i&Scf$Gr-#;q)CZG<;b$Rp;I{ zrBKX?!@AI4A1|CsGtbVY4slNZ#}q{G$EDkK=?dRDwH2E%`2Y?Xs}ah}ax3<77iid# zu_)$2?ihU-XbyvZx4~Y^rz3g0|5RfJQFxn|ib5`~DPc$yW2M$(zH>nH3BGE|G2-b5FA->ZCC$W?c(@6kn8JPft+ zTe_hdPmc9@MSvdJ1DtOo#pJv1l1t{*Rkt!Wd7}d(UAY>zPf;JJ(my>S)b77iBXqAt z!bIRO$rt9vmXpSi_=8^8T1RUxSw&o9;AbmrW8uFLg}v((8jn~c7k~T(;`SZNq^>t5 zo5;z4Debe3TLKtvnp4B;MCyNZ)J(eHYGTj$q?@=HVt%qtYYq_adG}0-cxy$gYS_(r773#qsMj&aR z_o|Yh#DLmVG_);6@~v1wK_)A@nf*_1Aj7$mb!3$D@&O&iZC!fBS#Q#o2?X&SKYu{f zpG{ih!KIcbe}_1jYyxy!Svz9IDQxR0fw{QJK_XrvepYhk!5I2*M$-Tk2U4iJc zwA#h&=3aZLLE2{f=B?@Nc0t)h*stio`+!jB99nWJP^bq&7&BB-+06GN#_j0wDKfvt_1Hsplr!H440_I`BcH#k2b)*G`0caHM_~&e+l@g}MV< zx$=^o_356e$wYHANpCfL#F)Mzuiv-69XB5;K|R7!7uR0B84Xl_kimo@Xi-k3m^vj+ z@?x%ra}I?tXC%2ke|*#b8wIf*(uZhzj^GFAd}n9L1zJ?uMt0S4NbwXQlZA8uB^)8{ z7e)&^sD;C(v-*(UX1;D%KJARwdSgRGKtKz`W0}-mMSC*;VGx*Y#sRP$$S@VXN^W|l zBb`lFze%>Lxj9EGt7S=$c+T zQ9%oHfU%g{O`BH4OgU4Rsepv$s-2K@qJ8?dS(}-;x!E;10(CDBx$;X-cFYz&I5-6P zqsy%y3|FNJYw4?Z|B)ZWAN!4W)NhM;1pW2eEMGnk-Z(NYv~ceCRzWy#4juP^Ds28h zSNCy?W|k8doZiKiKPWwwaZM^}v$j=gIvj3?c2f#gRVcv6p~Ax5*_qS$PWeSb%H+&I zM)(D(ClsD8foXy1A6k$x-n0H2qtxoEtE;K0GeY_aX>4jftzk8(bv}Q7?WEoxz1^?Y z)=%nz8R3&8m;rCn&8-@hqnl&cR-TW|9aCHJOY*G+Ewe6Gk!32K8?eTdav0#PagmB^ zcFk`22>fZyVgGIx(}@cE5IEi6{57s>R5*R>r$tmR+-G(LZducjSkcM2-RtXl8I5X9Xw-W7)ouG9fqrc!Z7Qa(WDU`KUn)GtjtdY z5ARdkaQJu)ZsAKUYuFqdC)XO~HHV)rBot+GGni4ElFm?mDsQXIMzC+v(Mo>SMe-05 z78Vj~FV0S$Wu;qJXQocCIVWfTY*T+1)DN&iaE;la%wVSPLJo z7?TU^Ve}APgyE};)#%${NlYHboz?1R1WY6^o7~YxGD23OaFJim9n-Ys;iOGLlVEcf@ZR1U3F?kYhR50(ZJpGntoQt0akTLJNR}HD*a+gr zjDB6K;$*_XlT(5cZGKmIfpZnhKBg~17-7Fm5@?F*P^?F0;H*dz&dmaTv{UNk z$h(LbOqdTb_DL-=IxsJBV3}y5kl66c#6sR$KRaaA_@%iW%kf$Fj9oYRtf5Y~?o~I( zNY_bd6#=jF3Li;DJ*ZY7DLz}mZ@Unyf{%bYx-TeodA0nCZPgsw*|*BuWZ#aU_i(He zRAW!v;89T8BQd^5gcWoYgztE0F31X`77n7^K3T*`o#|ovN}fNarWNZOeP)U|8D_KqlgsJJ<@BIIQNy@jc7ZL?a?0^+yr% zMU+?8!HUp%;GW>NN)mJ%dwk!rbl>`Z-aPR78x+PpASo^3Y`d6w`%x6M{}y{WbQXI~ zOT2M01QDN%EDbm7-oUjRvr3t9GH&u2gJl<`=feWrMBox8Lx~jYJuem&G~n$2tLAC7 z@@3QAZRi?~EK;S=j+deIM;72wO>}hH zHx-f|8T(Lx=RI*!Fl4#eLHAJLr`+~~$a4so2;Bq91)qs`xT2C_w^lLokFR$>$!z*B z@!lS<^YHc0qb?#U3fld_e+21SXbjg9jdH>A?IPVR>-iy;Y3BL#2yh%Q1 z&^xf(5rVZtsb%VqwT45Nz%Cn&j>Wl=0^vvpTzv44Si(a`}_kb9e6}-aDB)wUqMLH{tMX5 z&A1bsCm|z}WgT8c0Z#g=LacZPVofaD-M^N#1kkyDId(T;3Jfmzb*j}qMP(dX=zt_; zpSlP&M!H`Obgue*oYj=YeskWqiyeI2e}TYl%7u0&F_@m$8bBfY1}ka$@tWTJxG3V2 zLQg*(F~dqI2|H)qc!|;-s9~6@lYe{zF=e-~xV94PNbW5(kMcfp*w960TZ~MHtlXxV z>Yfu<)vCEQW`3Kvz~Qj)?eN$~tA-#>hs>;?VVgJJ6M=qmxFdK!mo!qRgAmvMl&tNw zGfGMWet{~_y@eEsqd{}8c8T?Jwt5Z?&w%`wOZ^1kH@VZY1goe7F6U&{J`f7coLT@yD)s0=S_O) z-J$8~n5S@#mFk%N^48Dnqv!^T-c%JYvC03UI^2~f=3Flqi{tZJISk7CzwLc@u^yKL zC+F`TFG<#MXWxmA$4Oq?=t5{joA(4U0polh}+31R$Zxt|7c{cXZc`Gh9>gzr{7s)OUkWR3ws0b7?Q0>V^&JG4pAQ@!c*Q zL{j=l-pBvc+89;O(|b2iSj;3KTJ=M>O)>#&@@NriTf=jrpR#5g63~y?% zL`=N-8-uGpCDycgj94vFl31K0RdOuL~Qj7UQ z8bxrC_zRi%^AG>~hd3O3#Wcz?n2nvU*Ow;as`bKahgxF}kfQDN!%X`P;&qiM@54VK zR81w|gWhrwflmov$(lb3CbXYrQWpiqRDAncQUW>pY*B!=ToJhwo=gOnSkKCFFdBgU z0uG#f?=4d_(@mu<1&cq?saMUU^a|ln)HN-v_zLPG7~FeeJ|(S7Q9O{B``R$Q)Wt(< zwVLZvKPnIpxs%h=y)7se=~ll)y06 z0&thP*z2s@)*!##l98LV^xa8D_Vdv`n_TZSy65@>9$)$(j) z?OBt_q4gxroX2(MxypUv=!$ZTT`KUO5IC3nN00 zABwHKS)2=vzmNH_P%Z(q3uc>Vq#l$$ihBpcitdeUTr{WOW#sHTYZ0s>hq%<0K6d)h zUEUhMdVs4GA$HFASOl1-crN4O)?9{vyRy54`f=lYt?&kci>6sLld%YBa5*OPX(wv` z;Rr@gS)Mb3FRrG2!@3+$H>|X;KN-Z85u`@?&X16@vCOm)Mdtf=+S(Ky16SgCrEZ{m z$^5hGCVj-(pe|y+!ATL6BZPn00QescW6ytasK&U$TEsWVd3LD7bvkt8!7k4X;Uft5 z4LZ^ zhpLl5AGnTxq=!XfG0aX5f-AM^s+sr*R=jF6pM;4*nRqpFKBK1~qwkP!*r*5E99bP4 z6_1ywd2UXpFQ>RGp)irKu4J75G-5B*lFyOD{UJ8SB7X}3MNT*856>FwG^xco(*se{ zkX*Mg8^9sT$?-#4A)(|r@DCmgHi&NImDXV0is$Rg5|gk=%4^w^n}%_el}s){BCm`s z>v4FV$2IBt%lhur3|aWc-CLMz1ayvn0?zRL)Y6h-yQC7R;Qm%G-p!XQ9_MpG9e7h| z?|+^Rm?dxT_XXaEcCSK!4L7Z2);w$7cO4Ef>He!c0oqpU%gC5~UDm{t$Hn5FEKieO zVj*gr!=j99Fn}eq25(&R-4(T68n_;)qs`HAWm|yv_XTfbUJ0$-$;v!#OV{dXz0>A5 z*G(ybr<;buH8=*(?C;9PiZEOt>Z|X%;S__i|BtC}46iF{!acFg#%=7RvDu)poiw&> zHdbRNjcwbuZQI5@>Gys2-sj1WoSmG#_gXWv*33Ka%yJ&mi#RQ{%)CkDCclG?fdv3d z*upKFv}+0+*^tV4>Rv3{EY@RDJBW%pANOpIB_*n`jOcnl(+yXPvVg`Z*+0(t0cu5y z4Sbh*rl>$*k+)FZ0Ki}M`nI-UJowE&yg^k(tC)LwdX7rI!D60-gxjbwe7U5LT;7RI zMtkiHwMW^(^lZy7hJuhU;aRff8+OBot!%D^y_jSY$#qPC8;B#R8ezu*Udz{PmIH5IJ4>r*^CG6DIixNn&9Gee?F&zBv!pGL80xOcF#eJocm?BGB8%sbwiY_gB>Su zA!7&F)wglgb!ZK-&aF=Ym9U(pp0dz{wq^w)s`8PdBD6;bkFtk2RtJ7I>GTivRYA&Ym_-zgRF!hFUA}v|4ht*-4vh$1ZQ@pR#piDhdu( z=eDM+%7=)o0E8RA=o| z$`R1<-^IUh|G?zvnwaViu-L7TIvlH+Qr?|eYja**DO$&wnLQ>VCy*Vs-|qBu=nl(~ zV%ts5SEFSJ-(5?WH%w|cQ#%+J1#h^74vT{2|Fd`1k^lE|vAL?i?#FK^czv%u2+QFC z%Q|)S%J>iA0vHr{o8ldv$`WFl!Ftmkp2(h)jFS`*it5D89Rc5fJ_2o*M^)wVEuDf) z+U+ny`pzjo_PJH-8W|QcKGS??F@a#B_3<>eYa1AlKrV(Bko-KQCwT95;I@v)_tj^^ zW=MRx`+OUd!6yUf1Iu|692*%KYDwUT{}YgCV{m)lZLF57C}9?vgUoOK)$?{9@Ew~A zC3N1qb2M=l5$o10DxWe{jK-Qx-f-akiu)unlUMG>QCHzlWO@6eIMLWR&E}yve~S5x zW6?^M`~`b%_IPuyUfu5w%4yrd+&!w&1xC8SV~Va!Q+);CTVp)JZIRK_%C6$|fiIa3 zRS{b6s>>v|=*YRj@ZXmLs+!PVUtY6r_Fq)%ukbaO7@3dfo9{UfXVL5VzU6vFJPyaF z^nA-IvkOzm*PVy{iq<|4(Scz>$=47{EC|^5Hc18729%eBy9~UOeQ}x;teti%4~ScQn2E#?ftp@mLFAYo}LFfn9?{31IlAoQ(pJsKaJs zDs6XQ@9`@@LH#_t(jpHUMITkXWKNO}fU}CP9NiyIhAH!9&F%TW8^W|@=vtVmJk2zD z`}+5XllI81il6E4L;bhyh}%}fPX=SF?UBCGP?KwtcWwcFq7XI!N9mKsg$-}^qjcnZ zm(TtqF13*{K2n%qWCQ~|m1Iq8E4y%WjA$e=KjsqtEUynPRRm4~W zHn7mh2*_gmD5#K5sJ9%rbzmT&Vf;F30M+yL)Kdy+*(>S)O)OCEs~KLrNI|zQ#%yd4 z+6eg-E&+W(TP}$=H7J6m@@h*rZZEz9sBq@q92rYH37@q^b{8%Vnz{d2O27^f6PbSQ zhg&`b7ynGht^mQwwyyG?)f@R)LV9F=#YMW1UCLEkkU$ZyKBA)KhQT*BjCdfDYtktz zB4W&^9Whk3r0FR?zv`*^T*NWGyz+H9FH~Ji;pU7@qRlVKG3Xihzgln$`|}P|)~lnU zLWn5f7J}8h^YK^a6cS8r%5rnc@kxB5d1^{Z3eHEXV@ZV&@%-^Z2VW|Xhi25m&i(|^ zV%HP&;nx28xD z<>)V;^;+{(VcS&U-0XsKytZBy)U)dgq%{8BO>%Z?n9BR9w8AX4SfX212g-jKQDPN2 zpXp5jbkxJE!ofU>kI@JbOPv8hx7hY05piF$&8(P^7*Tc$+~39B&z?mp(dW(S@1Kpq zKW(rr5?Ia~4JGm6^_Cy-?9R2_VJx%J{9{6MBh!l6?8E(jfw9LQ?~Efz25arPCTuEU zmU{5)(8`#YL?EZ}vXJKVD39e<-M_9_Tpe>6 zqzYYUVKZcHYzV%EDY`P--E`TW%#Q)jqg3}-*8!TPHdNNeyx3H;X`={UqA8k^fCJsHu~3ZQT@%-%scb``Eu@URqw-M z-fT4rMsgKIZ6kKT>5O(qUkIEd4>G))*X8i5irvoX1Jb|M`l}?_%&Pgkja4Es+_~%* z+t8to6z=Oir=zTAc&6VxgwVFL1-Z}uk+YVmA^1G2=->Rx9sP|lFM=JcTcV_a8)1o` z>)4-O(lKa9X9JK196G{}Puj!Xfcb{0d1Cl1{&F>$l4ryCKsMJ~#De?7EaR`~aMd9j zkSOzT)eX(0=(Nfdaax6;O+uG^eg5RnvleCX3C{v4ZdhvaQ_&u)uWl!Zjb62a$6JNYSc4UEk zSXdwxVi~Ow=~U=aIMcCCgmerQg1=_Uq09fnDK;19l|78@&Xc@W>MpNi1?kK z8qz=`Z0XnbIiX5*!;-^?R+~Fs(B$e z1#M~e>74JJg`xse#5&p@R}|l__n?`+y$<7XwHK=6g<*nM&B!l4~t!${HB ziVs?e({%9Jt%%#7#gDjsuz5k?3Vl z6+;n(Lf5tgw}LW?v){6TgZlDIvX{=u6#Q0zJc+X8^KsAy*BhP1dVgbfg*cL~(}K!k z?4eaDEYBsb=YxDsUE2>wpwe5UVX0zTAgzHafrC@m;*P}r&CaI5zu>HV>Um)`?TXJ| zNX55de|g~5=_0YPHDfvE2_Aa1WF*cj`?r(tVNgzcBjSlzd>z)bGCJ-CVPi@F zh5L!6d56sWDEC}B*Cn_JaXy&6_!;+`lJs5I-Wp*Gs;S!^V|k>Q^BJ`Hm|{x`T6U8! z_l;65^Dt0U85@Qk2g}SjE8ZzD*Jifhz%ewRKkvN24b!B+G0{CN?ZMzFfJ$jKy!IZ5 zjxk!3v}U&GO%lOyJvp zV8QomRMAnV6K-FC0ef=d82ZmG+0~zG>&;$)pCIC^8mBsA0Pjhnj~=h%rS9^3*SOqc zk=<>8_e4UoA?b{7CSM(n%=^92Xq@Rww=6v8nE!>HV^Sawl@BZ0FX5b4MRjS71Zsc; z+P-0R#o#&0jpR|?+ZkWtX#-~slz$YA9h;H*L373XLL2`=*y7d2PX^)v2)`wr%+msN_Q9^M}y8fB(9`)#xgw(kI|Rq;~W7N@8Un=@>B^(DKW zgVlc|WI(_w1#YMM`&ivthhhHK@&-D+T3`)>4~o=H)bE!LOFf?UE)T=FkCxR~sh!Ha z-Tmj%yjSF9NkChEQ>o2IgA`{Aj%LfoS`V{$Ta^rV1JUBOxNXs*hgdBoGz=&w*ycB5e+4qe^fGGa=uWboj-KzRWu9$$k4naZ|TYq`^xy z2Qrz^ajR}ba?7lgp>*Wig<|8s|M-U>e{_jL?R#SMo8}sqBupp@Y*Wa`RjBR-T`XRw z*4wf9kp;F%3C{`(0Dj%Wm*V6%8|8d>GKYqaDysBUDlC8rFB9$Xpi|8DykCiZPCiN% z`A_q?W7`UGyyAfQN=%}t9o7~9xjEM^|pB8a4 zy%bO_;8r!kkI;u^!+pRJ@_YtLUKF%*eVqVPlq-Hf@;*S;)6ybQYFCDIaToDb)m$oh zRaJL4^x%WJaW7h2K782YtuHPZ3fi1%Zh+0k+j&V>^7Y_j7?V+;AX{=~P-75yOe zyUxlm184ZFJWC!232(e8)82gTz81bAJl9(?-`%^B*VA$yQtGcaT~8Z@t&gRH??iv- zo*!n{i@jT){nadOwV24(Z$;{(b+IkV=}#2Fh-u!ZN>7s^0c|sw+20%9NJ+Z~UV~)- zbe&B_G5Ed%^@JpE+?!^XSFL3+0ZYOI@yB6iS&-KOuRcVHU`T*Hl@?_YU>m;fP4k`T zD{vZk0Q-&nrsD6b;Z|9AHv?nzdKstr#LP3}zTh7gf?mq`;6AwXdAsRIQMMSVS%xCx zAhPvKp|@Tx>%MEQfGl#i74xW%wngp^sXdh!G*kthkyH9oMO!9Pn68xP3klPs3Hpd{ zW^j>iw~n*1PmTxf{XEf}7F2+6hOb<{ z>rN$KGFRAtv#(93cOf95fDT63x6x`062;vm&@x|5Xqdh<#A=cfS?+w-*^4*h2!Q^< zeLl^%_f%_(DOy~im{>$fBfw2JIO?u^cfTR^QSDMm{<2+Rk+frfw%tV5CKGJK8`W|v zgKKTE0ZjT^tc;|OF^jbs{iyEDCMe(i4H7PXoWjraX?(26S-4q$bAMTwnVKx8D0y|H z#Ir1g5NDj4w!gCLDiv4`UG`Od)o$Q5s*#Fncp#yLKJX9MgvmsMFIK<7*c#6BaujXH z$pk$IuQ_yGq;b1u%4CopV4l``pW70Dqb#^t#S$HlsDQ0*But1)y;=>lxxqlHY(c`n>Bz&4TEO#9wOfe?D! zc99Gh7tCfkfl23v!{?}oNaVrl9KyKJCD6cFDRedm0Tq=(+(c*C@zBifmnlX~=k%6U zo?Fksf_gv(`*-Npn4(@1TY9QtIFeeE*AzmZaTkIsQW14NU+s0kmi?HY3ek8H0O`(+ z@&{iLmzf?Wh}9TrX3=5kpyghNfmfD#>0REAq8$`U!Ng8SVJb0bR1iM@b;6QEv)tvY zX6t4nt5(5n?5qBMQl0wHePRrU3y!k9$sc_`p{&!Hh7KzxrN_?^HEr+7It`z)Dn^{% z@EEyoCW&23XLSDFPpb6F3pPEZcyTybFruu4mRN68`zAIzPV<%(5dEe~<1eXA6=jyF zF%!agRb;at=T68PK_CPy&e6wO3;yL`_VTBVPc>JPjfK2ahtgp2ws4ZLg+uw3Z}pCQ)Eo}ww!|Yk=2Z64Otv+?g4x_^g|^aL#|4>9Cv#7U!o*~>Q>KeQRYl}4H0XoK9F*67>EQN!tD4~E z0*rONeot&`;_)|6*KuwqS4~VD&oADCFe(9LP3H7>jm0=Ov_v*|xntLO@bhI|AFc_h zl+4Xs@0S^QSnZ(ZEjQzne2y78cgm+YZLA^>R+$DWdC3B2rQte9tG|`-cZcO7dDrhE z?h^MnlXVYzf38GyvQsY^#3V2bcjqLpFFfmaukIzTnzoQ>)OVwA=il==Rjh$VMB;YR zuuCyGZcpBiIn7>W#IK^X#opsG;3qPd0|Rrgl02Y474o-;cQmhD0i;W=YFDDW5Lvc1 zb+2311m8NhhADtLQN)xEBidgB_h-H?=eb>TF)UoMVwZSw_fh?>bnk({@L=%CCRA_R z=tT#v2SM$JBbqCOUX0D5H8eOV$SJxU`wwp^b(4s>Z&c>X4#=He;D9U@Q2_YmcUR_{ zwJwlqbt4mA8Q$e!cKc^DdRf&eJ;1L#m~Vyk5YVQUTp+$*1pz*dwXPrxvO1gE2N2N& zYwmHk{Z{6&@^GEdmzy%9$HhjVNq>ewXN;FagPIhx)!dftllj#&O#YZ=-Pzd_`b1U0 zNyTE{Q>>2GFT=Vb0Y6iZNq-$_IQF-kzV`xz8!4}cArgLrSVb{jRsvu%jjCxS-XP%- z?=6|MEK30<{RhE{Evafus`=BJil@PTiwpn&mBIq-KQ^dHm%y5rza>-Oag$O)`h&P$ zE$l|iWM9`TBWBq=eWA;6_$8^8NI-!!4tm)cBz5cXw#mEr$K>O8u3b|RhcvgdVwAeX zFitv~e(9vsDquPEeJ&Tw?e?4RT}oKjh4Kl&WXsQCB#I6Uhx|x*kSCVa5iEX83lsn- zb&;O5QBg~WeH8>}2LLSPT#!vTz0B-X{vfPBU8<^7eY~FH1O1C|igCPp*nD7#t92M$ zSm@^uA7AxNdOE}%&aX`wwVI0hbdJV@xx@{ZcY15?4#SCeLZzVzqs@+yC~vagqBZqx z4KI_vYeBqT7d>p%!bv?weTe(cn?NeI*V>b|;B_m}KVd#Vr$EqW9uE4Fkk6? zp*mK{Th%ZK$(d3Z>kYW>{bOPbTOaOm@^>?dHbPmCkN5~<5UAb}NH zm8#N;wGRLWBhl0_;1+^*ZD%eBuccNakEBS*iNI~&(Go%VPVh|=`K+XI_tew-`sF1- zwXZUFH5}T|5=x?XAP~pvaoCD$*Z615C`e_lFmi73sOcAOR{ylbPC9pfRe3AO8>}7C z7BY30{HW{$)?nsO*G)*?N+e)tNX9I=^#mA14?U9yn~2ZxT57*kcd;M&5#W!?ey zuc^86?r_%1|F{4@UO)jpqyhmwKL-cZm9j}9k&kJXt=Mthio-qG$XZm1e%htj=-(!- zkQvx;WA%f0CrQrv+5Devk zBy9U3_ldG}8<+&i%EzQp8#_Wa!>p)bT73S^e)w z_=B|_7{vjMd!a!9h+tq@nXteWc#J;GX-81c{pJMiH+vH@YJa}%LQH~zeNm+P&56c;GUbm&omvCo=Q?C7>-~jj zmy#E^_L_=bTc6l%WpJZBbrzhT$bYZ0bUh0S8Xg0zF#?ywjcahOI9S)`7bH}t_%Oue zoeuHHjNKhFzmF1or(ldiVwgVIYw}kCUj94Vhq{yydbI>>!Y`YI$eS{GvYx;&Mi^UG zDTePJ%?0k%{LlAEOlmt?$5G*u?34RekO70J#7N)S88MV zSFn5T8*@AJX1tuAW571u>X4Gt6>=Y@6t_0<@i4+;^?WfMj7b7`y5A+=d_6kSv+{r* zR5G;};$KlzxM=@|s{K;=P?D69@gQGM0YIOA?P%gf2ruMzQGS&plOAvXDUx=BPPnUs zr93{qdVdiTZl3o9G3F0q+r$xaa-&!WRV>PbyzK?FKZ2l;E*phd=Nz-XzW?qpL6e~S z)0@@q#`aa}_}kqpApJE@EhHp^QJ_7|APi^H$TaJ={1!T)U#!-IECMCU7QlRbNxaYk zQ2oW^lsZ;&bSKHcY#btlL`ltQ*cp6R8kigH%z3!)gQ9v zmuQq1wigAv#VFE94L35-rRrLkC17pOBWQn&k|3q-Dts`!WT^{+GX!+XXq={h$zUuF zDKGB!BTEHG99JnrcvI@Q<$e%zpm0cLo?NtH{o6W=grZN7yhyJ6!@M{=8B-67ys4zu zPYV&s{2ns)m-^%{oC6l|H>V?Wsp9Oscco;oAPEDd-wdX|efHq&=@{2D}Rgor+fOi@KfQ);xN)ZH3PCM`A zp4&-buK}5yNhzKU+^csr8KkGLtW z8(^LWlh3;F2mXNLVOBMdH~u|@#M?hi9$O8?40`sZL1x2@YL&1lk^ zH+XN%ruZvW5MFok(>yhe#fTndEl|X#+(S0WOYMwBgW}PV9-7#yOo|5}rk-h?q`%K|Tx#nSB zyBHR8JLmj6h~Y_z(xofGNa3_X=v*>~+u!ii;*&mz z0O@I-N_r@@p`}Afh*9s+)57jdt$jX(m>hX#h?=Zk#MT)lZSs<~cE;`8-71Z<>>fj) z8>lW{SM23TWY^b!U6oNRn7nsYjX6(cFIz0KVqIM9F&j1LWTdK3j-MI553eHS@$N9aG`g9!C?tRezm!X5uO798G(8j|yHM4nkjcmz+w4)m==)I& z2a3%>6K6b00v2R?uIkjHDsQcqc_aZTL;?!7F9Esc1b9QfvLn!pZg~seeh?e_j@y2W(b<$ z9+@V)UP6G;ifD9R%>e-Zz5%3jlL4f2k~$1-1W#FFbsCH|F35jY%1E4s_)V@kBP|}a zH?{S#-kLj&Rt-J54bnZ`eMLJ<6>l6u%J5Bch*%S$_@eOK0 zUsb#*=*PwojL6rgA98*NXGK8{0D;p1z@QbH-&3R8{yu}O{{igZZV~W-?qshl>oYry z=@VbZa}SqlvwR49RU%Sy2E#|$^o-QmqIro5Hk1+JUum&MoG23t3W{NJ(}2_paDDF0?)uHg99$eX(8| zB7=i)>OYNnP{)#5u77%nkNW)*-LFl!ZGeta(fAx(l1^4w%O`RsaJ>o{ve)KFj42l{ zX#&8v_`P%Pg)o`?7l3fab9)$mz{=f4__k=mbllG8k-K^MM_ncg766b*x%4Y1+e1zz z1_wY#MRvNWi;Cj8Gkup`DC*2swu~;VMMFne* ziNy%|oEzW3i31;4S*WxRIzbze4d&_8_++JyN~k_E`V0*5aU_(yC7JqoXTUTe1k9gB z%`3)BubbiS^$)ifpdU=Eq9K%XQXw9v&dS{%*#k)Ta1h2Tk<9ITCVhxI_$3jCf#*4T z>h#$~`n&6ws%p%O2np>OaTQ&8jO|a59Z$r!_*d|9S@J&}zwc+J0Qlcy z^^hr6f2e5=II1jY5);Wr*Kkfp{BZ$*0mHek8+#B`n@rc zjiT<}YUjg6y0xal0RX_LD+6b^qDejKk68%&)(HgB$4+jTMIH|i(s6hCg9ai~Q}U$N z0A1auzvutv^cfTkut#YrC=NFJ;*gGOh!LC(rtw{x>?`dMgr8fxrkHTLwo5_zFmk(k zHxy}$^V_)GuOfRI$6gg$Khaa+vj{(elZ$PTIuqke`wJ6%ImEVBsUjlh37vki|69OG z|7+-^Pm_vb591yrmrrng)jIBo{nKFpBU60%Yp+k za%TLI0TLe9xzj?3=+jwne(O*FgnrFosUof`SFn9{@(uO85ncDSg)$2|K_{`rhxR8bTTb zX5+^)%sFz&IW!^BEl!{ft&>K8FrTFCbADZcn7D%8^cSRE2jH_%Rf||w-Ae=2eBl=) z&e}hQy}R>Y5V$`LTUWg4%Q#d03M%e6q!cym(GMcBAeIw-p*q@)wL8B%tqA#L>wiPW)>1wzBA^ud?@UC-VaIQ9zjSojrDanPt6t9`L^YB||`snb>U;^NRY@5A`G z9M`;HEa)=9egd>EUvp6l^2S0mt+=I0Q)FChiB?o)<2-IV+O2=~uI5c#XslK!7N&5$ zd}W}C@nsaON}zZ4+E&AnswlKj02XqQd@M+eQfq;AZjNF7>cIgt$8O)*L457LI&EMR zX1hP}6b#62$|CKAi{H7ff-`;GIlWD6ust?BGy4??2eFlM!ozQ0exIZ?gqbIz)JIy%*W`^aJ z>VgTt;BsS&bGs171_Ge*KB`F89Rt$t7D7zitMX}8eC%_wa!R{vVRNO<%x&p{VAt;U zA_+kO(RZtWUvS^qcCTmg_9vl&B)Dth0}@M;?rnnku;X~MSMj)flMf3ywTb{fqilTW z+>5KTv&MiL`XerC*!Eg3bjI&&Z0kB-$LLwLDtIo2xyR)hbw#ul?2L`wrK@QL>fu!qDb5dC-@NJ;Uwn zQY5}{StlnQYb68*K^I?m8X}*^qqB4!8NpPmRWg!;2$jSDw7SfeWtAe3swNJ55TFun z35+h4^22vdYG}L)w3BitQ@k73MYl45B>im-785#4@cg0weRYJ#l{uqvL#u!GXIuKg zv0_Xv5T!jZ(Vb1A>#Vt{07x>nPVLfwAmi{uNfngkQfM}9ZROe|pW!}NE5{Fpd~v!( zLgtTI1Wl^{AmOs^)-WielB2O^oQbpX311-A&;EzkUNMnYnd&0!fn+G_4Q~;Fmyo`J zfeV8NG)3#Rys#jjVX<=(2c*s-km1lZ^wZrr!KZ5|EflFY3ryh){|P72zC!GHHIQ?3T9m14XcvAZs{UhbeImxmVDqJP^E24SLmlBqf#E`#MHyj<#3+jk}YLC#H*8T=IBT8F@ zH(NCm8>{`XIHY?ZiJQCg7<1E&b$uOE;P+ZwS4!J@vuL(qnhAgHUyjAJNHekF5Z%>m zE0W3M9+LBF(4nrsT`pJXFU9KrSg03UQPXRmCu8zwON*yWyv!lS0!d@juDtWMuOlmw z?u@CMYR?^CM!Yyen&2|)VV9*)04A!FOdPNxTT3RE8-Mm<1gilU^d`+;_OQ&tbtINo zl(wJ#WY3BLd~~G-esAYws>J3_<4&&?e4#fYDYymzg5URRNMFj-SVD&VUvAAwWoU!Z z>EJ;Clem!XDaE-eV-I;R&Ktv?POhL(GDcv4!@1&=Op$?AWx`kP-MhMNXx}7=tP^ui z`%61vZKr6qH5zJbZC|+85c9en35NriX6k|Z4tv+W=F#0GWK1?6!|)bd#zSC0lac=G zf_9ibEY#?rbXPP~o>=!Yqx#wLb}I|qa*2K z|Cs%}TlhS?P}N)1;odgp=1Q{m_tD zFlw$nNVt%5cJ5}{z!5L!%CfcawukMrqz{UJdBKsv7GJ0a2mp0IP*w}-;AiUc!ggbn zpx1PEnaUu>$Q8v;QT?K@OnwI)Z~GWxwXVJyApvr}v!Wtamxj>az77Cbi8%J-bV|W_ zqd2#hIZnw=EYVSL08ntL6X~3fdwT*a)2nG|yPNOBQDJ3G;U`i1ST8>l3}2rj;IY5P zsf0efuZg=sAnh-tUnD>9%O%<9egkw?im2%@arOl~G_Gio`_G5AUCfe|j%i&TYGMWr zY+rUR8m2erILD-<`HW=_W9Ft7Nb;4+4d?9@$i%TMi-a{Kc-*q-c}iz@wldr;zu!~O zu|!hcf?GcrK!xkNH`OGgJXK9{c+QS_t2>1Wpe@-8VfL1Z;4na*m^J(l}q~N$r$b15i^Vk4% z$KwkBYLk9G?4{DTJfg`m7t=p)tc1I$=7vxb4L3?!?SVXD{sXtdW6s3hpJAq6YANs(KwYLZRiGYHBed#FHZjPGc3~8*^*iH zJf)VKyg(%xo$W?Te@wkwWzD42a_requl@%O6IG1z+339Vd_sfXTV3yFUMP|!2HT34 z8UZ2cU3C{#-hXa*R87o;Czh>^l6m{+jg{vAg-J4VU=w3pvs-|X?Z)uU1dq8S_po2d z;?jzBt#K*kZlo7pPi*Zm(lvT*0!8h3PhUBC?vIQ*K`s4h+H8S*hC?ZItjAD2tzDu* z=1s@F+u`7HII^LGa&0&^Mo+bh#Lz5z@wDt zws<~+?x2K`AZXQZj~l)my(e2&jvK98zOf{3o-+mjBD5iLq_{uLa#(}I`_L1A;vV)t z9OAQ0X}y=|`J2oIQhZ{#xr9H!-aPQh=SXLkrUfcDuMc&ET3Ydw&%IRZ6ua4+hYR)H zw8foc< z_RgPDE(C$nej;@)+yb6%a8SWY2OW7e^YbBfwyk2kuD6_JKq6(d9@bLFQ<=kE!ERI! zvo>k?r5Jak3NBP}R!y?5Xbgl$J`B>hcK0i0no0^(@AUbY%)`PTe}fC6L4j&A@!6WE zYO{GVV`O?WZuj-{687$yC5Ig&0ARDAY{i;9pDURdDmuS3uSyz)cE3`gi<2l}Q%#`- z?Uwi{r4P9A#o+*-jrF8#ajH<${$2aZKazf^;9xB5iWrAhWqd)5uo~ZY>L(A7xkc1U z&J%IM*92Al6&c_Iw}gGTvYf9DEG+yQ2D5Nd!b1_lPlT*6cANXfih|N6>%lSOWjpu| zArn#|S64+z7oHdyYJY`FEB(r`Cl(Nq$@1|uey9Xn_*rDNiL zO@p8f7h`ouToJQ2R$3;1qN5>MaJmV^0Wc#9T`X{;!-sON_zb6BJADg`BXczAd|w+p z-w^A^Zu#;ZuJeysKGA`Co2w8)=cNR2_C~O3*(@N1%jUb&Def{VmMlUP_W%I?+Jzek z+E7HxS~)>ShJ6wh+kk?aqyDk*g}R&!$M2$ub~ua5>pc8`R01;`WNgJHc(I30;kC1&C+Ns5m!t)2=Ac;CgAlMtU_RH`IBGKE=2?Hv%C!*)YsA z!p-=XCfq;{Ly5c%{v9aCV9G5zUb*x0uRbut5)|{-R%FaRk zc*ADyB;vU9lWnWoOuo*nFi`yglloLaC)D)-$4EaxWmd_LC8)jX#45H$KG#M%?U$6SW3-6X7~ zVkDd%sYuOAhc?2&{iuGKpDTV`~nYv#~kky zVkBA)h11$=OQ)g3bG_@HZ3qPpi@-N`os!=v+ooBHKRgN;$Vy8#AOyQ7or8d4(^;7Z zcDe>zg*n+dXiEfB_<>Wt&YLFNjxCTxHsP|hlo0)(FoyzxOvf)Xni#`11E>VOphW1f zexL8>ZGr)$_Xh$Wux>v>u1Jv&_P6Ecj`G>(=@FaKNfaxa#{mfec;1>!t`Y-6tG;7~mR30DF1An#A?r#A#S-;Uu8-p=m zg>z2H0EKnG$a%|MDHcyGx+4z>h&snDl78DW$TBzcN|~oE8e=e!gCynJs8}~X9pz>4 zm{w_EQl^`Q(P~d5RynUF#zhXK?NaS@rKd{a%%L$2yH?eG#E+TZ*wLAFh-(p{6z5SctMRsg9C932Eb}C)JNp zG8`G~c(T2qJ)ZVg1M{(|euwP-o<=J#w<4&;s`-|%ZSv#Jl9~Z;t69jfjZhu^_G%+f zyU%6WRCX8K_T4N8Gfd6g)Oj9`I!9a$1-KNOE)ksklBPW{Z#O3roH->=i6iJ*^GG-O zqBn4^Ht{{t*isGmtfY|1Y`{v>&?BM6p=L;k(vryIX-ET8Z8@D#DAZlM#_NkI^J=Bh z8&DOy*5(=3<=&AhjoRk)&#+lq0b$#;fokyYmm>*ZI}XXE`ts*Ckb~V5S8Uwj8-Tj` zxlAIL3&^zre`OS4=Z+c);846QJ0u4IxaD3fbZJy209)BUpE^7!P|B2R)ekuQ6@B)K zV7a^m;&bOo&I@E0Td8you^XyC5B`s$C_>AbIhgD$;-FQODeV z)9y5)F&|zfgb<%vHl(}OIP7AxV-(xJw1WYllu2PaMr2X+T44APpV_R$OH(iws+@ZZ zKYwet+>*=TnU#HtoLP<|Y_IUrRj77#0jZ_kI3rXl&bvyd-&(7il4vY?+M2!E>9V_Uk zMvfHoq}mgYyl#1mFwW6m*OI76MeTD9t@@8ACFG&|>sNG-hNown&CA1vmnF9Q9?}gD z#qWPF2g=9;4*9#eab;nJCxb6Q78L3;2E?A{Mql+D+6i9xQ7TI`yB2FP!z0AZ)r|zH zq`%;b;*45jg9vGMrskvg6%MC--JO#j)Ym5LJYPA-7T7dNgsHHFV_tLpziRQoBlgKk z4i4EWnMeyd6d7oh7#A^%ZN*^3na50>Eo5D?80ZH>k`1)}Le|S3&`_#oEro26c=dF8 z6?!FXwoyd{WJz-CZuUpCx36#g-CD7EVO=F4z&SrT!EdzHZ$1-LT6WY$9~Mau$J%~_RREb8@r1wCcCax;;4kk_Yq0D9(ro0KDu-0A;rFYK%k zrso3u_NOM3Mcax4C6a^Z01e(9xNf#lrW1;4p{;8`X7`0-)I?W!zGUK z3CPICQGuQ$zQMw%MsY*U1jn=?pbiLBK!4VEl8GQX_uU|?@UUPBBK4iXWvq! z!B5s-Tpn~b1`S+g@5_y=1J}|e^uJhp)xJ!&#DLEn06EzCUASnh=j;xfb7_=T7`8}^ z<(h5a0+VltOoaT#Ex^eD`25*G0Qb$+?!||4r@J^P3H^f-_ltlL<8%Iz%Tah!Q;DG` z>lP9zJxmo+PkxK!Nt?RIcJfR@fa`@%QVhP3r!Ot~&sc(jGJ5rwOqcz-OR8NdSt z-!f&w^7#i{B-W9rpZdzfxrdf+z3BgDwoxb=4-KI1x^?asrm%kB_nNM-ap=-nlaWXw zXWsByH|SyLp(QrDlF+5(@!<5nH<>+uzGmbmBy_qe;Jh7c%=|oCl%Ne~I2rjZVs? zL!Z1%=E_lFKrVNz^JWsd(ng*5l;s~02i4%{)hiQ;@g;0w>`h8&wOGtn>uq<#_U1GwU(Q?s7Qmh0U? zn90szV09T8Zq=Fn0yglJJB80A9(d52hBoHHRgNJ5bww3$eDB?B{0*_e18GnqXJ@KQ{nH)2Ud7q_#FyRHNeo`ROGahk)_OWZR)<%K{ z0CX!L;){XErag_c1K|P}>UqPw8=+TE;C`-}W5KQwtutle#h|+r$=wyfL^wCC~Wk&PCI*>t04H9NlU%huJebj1@$OWEhy4VofPlKE9)7?esVj%XSpUhKs<*?7jJ=LFZR9Um0RMuPw}-dDlFtr~gQwJ9W(gjP zL0=KpkGxk7HYJ82>2w%i?*7EmctEHoeJs(?OG;b#wtgNHpQfA?Z{g^N===2;zxKGi zKro-9L!E7^QyChfqK6Hoa5cQK?xfs(|2Xi-+SdbPOHI=4(f&dv5E1xhTrI2**W63k zr?BwU9|l&Qgp}gHi#V=}Yt2n6%Q!!X2RWiqfd?K64xJ030?N3(PyU2yH%1IGYV)`x zzfR?40%*zffyj-i7ww68`1|IvwU$$FL~7GYOIr8H%9V#7kS}@?G@cYOy40*M?()$G z)^fdt{<8q7+b!zPUsW6 z)#i9}@~XReY8FjmFiaqV_9J3|zq#rn$dxx5&CQC&1mD))ySHrQ(QC|OgGWMhZXYzy zZP7Ui8*2^`jJiPb@GzA_8c?3q=^#-V_4zVxz_yDK4Ab==>i$!n*-v{h52^|8tfJFU z*eo4HK+@yHM?9^bpY+!Xi_-OZ)$4v0 zQqX3vtTN?gAXk4p$8XgejK^m^S)kcna|tjqZa9*9+IIN{k}!$EzaaosTr@hMjrq|W=)iNC>#@2k|c{w>!h>2cmxHM?@0 zN!)lzTY?}e(Kpv6qfrkSb%HN@$JOn!9)Ep)V1LN@td}GhpEb+}&!$DRjk%9NU;Z-m z%_03|oVxRd(7DzRjU4~<97c(Pl=K=3%$0e2fIU1+Nj+{??1D!!t7ItPrZc(gJAwC- z|5~8Sh&}pZk0yM2>%GD7c&{UagK%rWWp{oV$>!SC?3@t>H%(P`3Xc7d-=;IG6l+ZDg1^ZFwE6^Dc@C`H1UzhP1lnfNn{tsJk85LL1 zv}m*DR1?yhH&=Y8IF&icN;vzYEZP4DXJ zy05DGP|YOCM_%PopRKqQdHm9uwG0OUo68muT5D>0%FQABY8CCZM1zf*m+tK?_bIKr z{AF8nI*;^JcB_yKVtFFn{)jl;@X~ADCx;0CL8-C-ACkJznTP=&wkZ&u>uN-=Nveqt zAkXa;j;fUZs&CF25|V~@MFJ-H#n}xjU*~WA6v*Hk;D*)}pN`-|hska$|7P-mFGzQ- z`cs*4|2Ovk`6`Dzv(W2~zpCo;Ti7WI;BT;`(kG%Ipj`JP_eJlph;J&15a7GC5YTmz>Pg>HJK{MKgrNbELs|yw( z1|#oQYjRmdtQ@83Dfog1aUZdgUwHZv>TN+(e4UJ}WxX#qAxs2kRA!F%HTAFSgVt$J z?agNWY{!gh2{QiG_!~YoaDXnyXx8l=^1FAoJx)XQ{fVX&KKzIShs*R@sJkY_PbhzR`=+!H z0LAuoZB1V_Q>E0gZ@~TCe|Gs7*<8jJEJY&(IXCaTV=%m>l4F@=6>zfr6;6&O^#)S2p$|W;{tW<7)R07y=_VaiD{#XLrHtWaiD%z z)ZC#4AEH1A!tF2ZftiBE&a_qmi=;N8r)N83E7iGNL98mI&H3&8&-4N2&7 zs>qP|P;NBts;O8J0l=;sUYhJq`a#J^NJgIWNVuUj*NPXt*L?^3#}MQ9GeUg-QtrtM z@F^S);Fs(oE)3i~?2<6Q5jv4?ob-&eYz;8OYwYmf8}duR_^wNR}j}#L-!<2sk-}ggyZf7X8cpavq%gS7GArkNhYbeM!qC@)q2K#PQaVd>39D!8d> zfhp{ahLaguazt{#g3n9i4|j9POPM{cQ*nKwmn-UP9T*v8)N6hxvfgZ(09&~Zq4)6=Qp$8jX!^B` z?c?y6%c%$V-O36ThTTECgp8(~YiTJ5>!dw9A|lAQV%5{6_N9zNA27YSs3sbn9Jp3> z`g&bE6Ptif7tx`M*1k^OqJPrcwc|AAe4DGd3HZ&{_sEC4un%}x;D5ShEJjR ziIxZk@hJS2F8vTyFL*}m9XqxTxjL?$x4xRvz`GR2KjK9Agt?;g>&n| z2t!UsSfVX->v0zMaA-G@ag?iv~RNAZIM z49iYLq(3dc9A)C-LjwAVvH3>t0MPCh48FA}E$-@gHc1OeQDTmaK&>Ewb97o&xmv1Lu=3xt%M5P8xxI|fTiihZ|Kh&RKVig~q{EiPr0r`%%|1>VsrtKq+QMDEuEu_0YgDjXxE-T=hSEm{F;5=fWb=KP@wKY4L;K|VZ zq_vpZrdT0Q$#Q~ZmzUg^LV&fAwgCNtbcRpQ%d#j8os!3rcDqSA!NB>=I?U*(`G{)A z?5SjScnEzK4H!QXR~1Dx_<3_{g(fXTlHN2jZ^P4~{ouz1W3zz9X2sg3$7f$lMMX-@ z`7tx2|KcEFrjUPixhF6I&m}U2XKiKB zuKk_nsr4vZpA7)CdMW4|@T^8~2S)9lMWtyrP&@xb#mW_X_w!)e|Jxnyzp&RGQeQ_i zI854vBp}7kRQh(IU<>wY&eN-&{$8c$bJ{o%r`H?56;{GY_x_hoy)+z>ZiRUMmc1Y+ z{;I$o`pwa)CYqi2r{EW|w0G19-pl#0G>P4i6c3hefss>>xErQt4l9#gP?O)n>h-rW zem77YsU(2iBJ`agFcPXxjskNq?-1Xq2MNkj#l(u|pkpSa8%@B1;t{y~B}6@-O`z&J zF3?c&IlMHNUj_2@YOeJ`DwUjyZKDhA={w*5z_~E!U^qA04JHT<1k8Q|elJ+)4EHi2 z%cC3s&!S2J!XHl&B6}@1go_<-trLf5A1vO*ngx-EdV;F(AUb{G$+J-$aI;%7| zQoQ+Xtfn8L3*gP-hDfb~JMLwdLcF%LOg}rjZBSFwUN`w`oddD2|HBKTWBWdYjeV%7 zBR(UH#R|F8CeQEvVKJ!DC+*F-x80WQ&Qs&;o2QM~?cq@gQxyA|iGpc-jsP6s{lD&y zYmQ_L$y268s47vaez-|Ary(8Uv)w>*v^v9S-68CtKV3`9n z713bNRB=ZOqg3xew-pFKbv>`^9=@z#$@x?i1XbvHGifUnu$bspYi_8N8(u`qp=fVu zh$tJC^rx(z6UtJroE`VN?9$FoUIdilfXoWs8R`Eyw`W-?;2^BHvR)(idSD`FP>HoI zMQOiSUow;8K{NOLnPiDqsV%U1XbTeqiNkic&oK|B7ZR8d>n7{>437H<@E zuWgf_TH0LRX~7vUt4qGgeO|496V6ScDDnK+z4+avAJ|jk8XlwrOSO=O$)im$8DMpJ zn?;mens~K|PH$G&+ky-}_){{w8VI51!OspWwk>Ct>p z+BdCq4;s*jYW$K=uuC7r%WmQPjmLI(9Bw(^OF|BVuJCO7)+5NLJ`GAecs+R4BXIH* z>stv&EFBG}HUS0N*S5w`vJ&eA!<*bof0XC>>v%eY? zHK)W?ZF$gVDgJ$F=CK?CFe6XzfY!<>^{DwMlI7oS*Dn&$@~<>NwyqpP%>+r>7n&l8 zEt-w5ZMRn6U*gIkbZzi^InAM3U>)KQiF#Q}2-`H8LtA(O2cWIaRm8LryU2NVi(%xf1WD1r+Ir-m{ zz|{`%#gg*a#BOCRh55`HJQ!|l(?Suy+fz7Ndo_>Vg3)~ZdsLmiSuGF8=;>TMx~mv_Ike3e^}vw z1OVVc{XZYpojos3K<&NS9;4wH|HWxFIhASX?lp?ksN38;0sjq`**lIu$chmO=o=Lg7%hhMLO_8Flmy*&S{=OEH+GQTh|d6%v)dHTvY7Z z!m0@>p3wsaR*(?_k)_YtbFO4khlb-XrqxE$V#;6%>{Ndj3IiOkR~qy)8UyC_Txf>ChPkEon~7;^l7K|ELDo2D}@ zV~wY9u~a&l3^*{-c*C4V{VZC=kt=z3!$!vO>!T(&4~E0#RK(GmC)K}NG3GBUd>jZH z&8a%W-u8~T&U!@7Ldt5$fY45-=VR@!0!$%ztUv(RNAly5R-P;&-6{|Lkp1pJ(_kcI zkglDAU6j4LtW}F7oq$3j{2lOV)pJNVq7P{@Zn(#9O;x;4n&SG7bQ&1Q4GcRh!4nU(k**>>p>hJC)tH9R2_0GDDZClXffaPLvHR+=*8AuljZ)un4HC15w>7 zgE2@5Ug&oIBAA+~5q{+w+Ryda&jF6Pw)9+aU0pUCNEG!4DZ4@!a(1|E9e~v=vfc15WFTPC5EL`941VLu=Y^yMq1acPHl1&)bm?6COqna^$fvq&Z*ysVb*7 zh=FUhf`KVLHfMwrr46>y9Q@0_`3Mca!A6GJ*(Qi|dp*_a4af0a(|Zq(5oyLeZz993 z$)&Vk#Z(z52@&=QclF`9`r;VBZn|C*ZPEs%fzADeABna1y56K-4>M?|t(7>fj2~gj z9@6id*7C{G3H}(tx2^EQUV6lXzX>dWNwv`dQvGSU6f%kefmnE`<~gcl0p6$MvsTwu zgZ0@mjru^V$S|pT(|>QB6ciI!lsXsCIrKw;W=LFakW;^G$tb5B)iNcRedArp|8n}y z=8Jo30UTJi^H1mreDo{6J$6X(v4M#1f`i^ybVc_GO%&>*x|w|0NB;o_j&U4iJx!cp z7CA%nQ?q@Q?)d`k?%n7hQ_;?{g85GeWq4V}|NI$$5((v?=FsPK)O;Govmv!mG(GvP zB6;>PK7DD*5?|kKqgFa= z+m<6nC=?&(V$FaI0Dm-8SK-<-A@U86qSYCG>w}r6N9E7zci^iz!u|d7fx_AFXC@WW zKAY!_dT^}-k@2I#e@ot==OT8u6qkXYLUvwYke8q?YL&CU`UEBHoFO)_5!%QEAtfrQ zocf%-z1iV_^B1TIKFDd6%-Y&q7G1cPqECmN^T^t~pPLceZ?*q4S7q^~^9y+~7*UD( z{IHUFC?EcCLBSp`9ai1LEn?ptccJ=E-S6=fzV42Eoi0s}n%8!q{(Ip75BwA_&J%CB zo0#zq^qDDoG!!f~H+0trkh3!VBv_`b$N-DSusv^MtF1x8$|sRq-YJNT^oUq`x($eS zNy*UA0+wR@v@k!FFh<4CXR#2NPQIy24--W5JP*v4mg$9?VGl4x_Yj@rn8+_=L zO_s*(ep~%l3zDZV@Z+H{Y?kfU;H|}_g^;7lzXc`*XQ@sOPR!E!obdlUJRbdYD5@K^ z6sSF)?_gR}hief$(-;4~`rXGx!t$ec9lZpyD$WdXqL`~tJI{l^V9#P9z6Dvy{be-Hl3HF=bSBliKX zYmK?jzoBdN3bDRiv)>QROf;!3GA+)43t0N&zi(wMD#>BdMTYrXbux2nZFJ-U=1;;`Ly_M^F7O9>k1c&g(N(-S0k|=ISo@=uhnY%RmW3Rj?-&2j;h~!y~C3+7oRs< z{Da&WrxXMQL8O^%I0W3;nUc3dqEVEy!|`qqA2!PvuY{IV+SBbVRE8y(Pa*KcCO9^+ z=#ZoPW`g)2`S$J$RLXe6M(=9f7gEPvKk`L0WeKUpz{DC1r+Yv0R|YnF^~JzSWo^d%}*Xik~ z&zZBcvxNKC9C>2@z@zzk*CSgAI`BL3zL?_`?r%BPEEpq<5A63nZB?%UKzv%>1Gu5_ ze$4DHfqHBE^t^57+w!wQ6rNC{!1Jymu>$&DrT@%DGz2~?vpoQ6OCJpkc`g-HGoEJZ z{$yLx{sHUqYp4tauzyhc@!9<-U9sLFuI@Cn+kUxbH74G>mXXC+h_d9j#SxdiC+W9L zEz`@_XqpAsjCoa+5rj*_Vy^PmI^BNvpdry)=HZ04XQD-8BK{$71)T-1>n*6x6lC-olCEvSu(j0fZ z(t~yttxrcFDfb%vNziafR}caIRnO|{wdQKdKWZM9`TZ5zr~|)q6w-l)wKX-J$D7k- zGXOYGPm8@~>#e$^wcU9$^t5f#_RO{H_?3`>a#>UF0lDr~zu%PvxiwRRtR9QO*4^y` z4~#E(9P}(eG|RojmqsXKQkgevr{5SlHA=Ov{KBi{{xUzdkbDV_A6`2dj>ZproG3sl z@M;epk-Oa(Z2q~MA9?B~RmESp%%HGt?QkwgfdJLyF&gU_dBGeIj#bXZ`%_88JBLyt zFtyV*roZWkFPAj)|rgEKZ-iMFPo_RwE6w1(#mgD=$zVF8$UPK8`hNG+Ha>+uXC| zoMM}L$qg(H+4H?-kIN|w+}K7x*j5Ey#vFQi@0A^{MH;0ym6IoOyG*}{J<#w}dQ*U; z5*rOO_}zmgG>Rj=6S62F!Ua&crg3VF_Tm@HcL5vO)j5RocfHHYlMB7G{(@Xf&D**# zCp06(iZRMdY&~w{!C0P`Z9g&Wscyr z7J8$_6OZj>LBdVEyX-2NYHQT>3QqLkua(A?_q^9K6C-GJ3qWL^#+tirQ@H+)Kd&o+ z-0%p^2@kgiAi|n_kUDVlB|A?>mNv})5~BS>a&c|WOL~x}sz!HZ@m9*Y*Ed{iiH!BU zZP}ZXt8?tVi!Ue9VHNXME}HWmv~l;1^~ElVGAJ%p^)#1<)B{V(`L!vO&4s+f(@3u} zgIF|&AO6{E(?O(>k4Nn@cU+OX=^wh)^jTyI3R^m-4jSMUE;r8`Dj%pPDxSW2I98QG z)2fM19WdFetNZ6%21vzGaoD;duDu63h=@pOe3$hfX{(jx01vx>8y#c;M{qysiDHEk z-F{^*!<;It-du_b6R-&QqICd1yMkS>g0i`)m5irNc;Ig*Mz$l-q9{lz!g;n-3eVX?o>@f_`%`=4SiYJ~2!3t?%Gr!O zOO0(qhD_(_mia-vmR;-fAyJg@&)GXel5-_A+^x10A~?cj4CZDzAf3U>SXPcNYHl~X}bwL4uiflz^gxH*IYj2`%GJTgNXR!fkymi#VfhSh3m%W=7%zRXF2A8 zGGkp`-D9pJ@}lN3F$n4m@2#}&C?;hzv=~D^qnB4sHu(p#X?xz ziTTvRpD_?;PTl@|e>Y;RLelSjWuJcLa@@<4nfdtn7~>2}B~PeH?yLSr<6>R25wgYV@>~Jp zp;`EKX=gcuspi4;J7Pm{BZb_@=LM&SukNEt5zhCMj(1ahk3a8uiFJEJKH&#AD5#uM zQM@cU?S^FDYG$dGA<+Gj{uqZ)+zgzu9^H43e{Y5Wq%PI!lLcD67}}HPI}J`t-YS@G z_}hG}NYGx0T5c_3*~r4+4qZr?e7oPN)e_1|Ft4QOoyNrG*#6?_kKDpbzuwp;sP~}w z^wzf+TDaZs>Q<_D?^y@l1IOPUI=7DRqw3cn+_`X^T)u9ju*{}ZGugh|RdhdxnjclsCDeXK#eoTz z2fJ$bv}L|{!u=Q*0ppf(EffV0`8}a8U(pAr+ovxY!L>^H!unh-i$mt91j&kemW1ZB z)oPDFF**8qtHVn>=UVS7o+1r?03|hbdcWFECKD4(%sexzbhHyfsZTqN??j3P<-HIdO)OjOC6X4pPT-G>*10+7owxgf2-MON^f+cVXwVtYI zwv0y$>)G`^54EQ6F%q=0i^;EY@xFv&p))#`I-`t(Gy4DfSxdcj7Zb8^*M-tI<32#JR^lZeAr$-m+ zSSAX}aY62~MPth~s;*5IXL)DsSi?!p^9A=&w=EVkdkxokUUD*i=htnUihZH)b%nAnY{*(}Q zI$(O&E4^ipuO0wB4FB#002_-l4IC7zD~{mmQJn+;)VQGgDvtXGxf+a6`7Vkr^)&;F zjq+O(U{kVhV|KWTHY$ULx-s-_zx6_6HJlf4uQ1*Xvv?pr)ni4*##6e@POL#nek%fB z4qU2Uv@-MfKNl94a43^huk*&i@*H5PcLtPcr<;>b!Tn$hfc8_-X2!YXHN^T!F1Sgp zzz+}3_d5z|(oV+G*;D^+h$WuI5S=Lj?T}nf7(G+$n%p}(b4--Y>c_dl&)o3fM_IWP z(^irF9`|Ld6k4;iEgxr|+QJ(v{Eu@0hp?}aO|sskuVl|o;ZpALW`#0opDTnBZ*Tq| zvj{3dVM8qCJtX6CexhO(m4o^EKr(Z4r9PXbTa}MgIg)=L)TeLT1)N>Eppd1OYc+2j zF0v}zEGAHHV0`4}V^p9`C!=!Z*K|RZ-08dXL8f>cRbx1|i^Q=YHh|zs#oT3|$0qjx z=S`)=h}}#IqpV~>Dbtk>rR1P+{2b=M9O(9B{^3WV@5yN#f zK4*9LhbAifKUd<-)skl7)vI0K=9Nr7z7`@&cGfO0veFyKfO*NGMs90~w_2tH!Qd-M zfEl4(B|($U!~`Z&{eu8WLM1;N(*shcyyKtWo1r%fmChIM0h5?P;Mh~&lR8d=i_1a# zSWew2b3chUe%y;8h578#P1})54wuJQiiVilpC^-)km|MWnKaSWJ_iwZVOEYgSO#vR zLGiI74xc2PNbMo|P=E)`pwKwnF&u77BC?q+q*^STn2J+=1{ovpuDa()Qs?X~`dZWD zWd`#zs1|Ch$DDD}3jWukha=1%8Lf{)ox_vKoSDq6GO$)+o$2UZ@-4RryHbIp$&**b z`OUP1NbW%4*kijo#dr6SYo-_K#jiKM9)?LHzK_U&3D#>icKJ+~(Pz2RB%wT!<6Xuw zMMP!_mU(M_Ke3@||3Lf`){O{OC!a+`FX}yn!#v%SkGaQkW*B2rQf_738n?PuB4*PL zvP=&*T`QcMEh5DdCM5$TZwPiL1K#C-I(-g|;qnJLT|lwr0#3yOi2SvVEDtW%<2>7H ztt0jBAVb3goEH(Lg+1e%K>OvsV^t4R9@WXa=_{RZWQS}3l)E$d2Wn~ReWpa; z8Eup4Hnj8Zb*DDISiQz>kRBQDiK;}@wMDU!fYVN0V{^_R8cA`)3q#5nNN1L`7h21H zafX9zr*vnvxQ^OrSd{(@6uFx2_T(HD;rnq48(G>Ss`-miwmlz*4I#{R7B1N_r+~ia znSfi3tpZLBh~=2o$E~#^KF+K{4lcLukQAwNfmlO)v}PtP5R?9@?xX4Lb9AHJ)f~BcBt!> zhF`XyAU78@xo+1s*K-;5i>;^%5;hwUuYQit*^%sZ+&Z`%RL>DLAY%~bo4#FL;i8$c z)2ycF9S1myqxs0h1LJeb-j_8ZUI0-*jsEs>3@ZknL>rd3TixbVD9h9N!2%%~{%rDZ z%NAPz^f~RflT|E=VA2P5j~$2E(+UY|A0NHv$v&)a9=NeDlec?+hASpRd-&U=9Z*o1 zH){ya-tP!b^+axP=Lh7TVwf(fW_@SOkgUFfBuB3mx^KQJ%`ArjK4duf@4~Mz@hBgD zP2)F=DbR)l=y^23=JX1^+G@R24{5tU3ZgU(`gCJwQ^qeI0Sbj+@PIiAG7|vCXGkE( zG&n&biA!=*rgaMJk)~N%`4Jp}Zumx7 zOnvgZOX!niP-&GQDVT#535hv+(Wiya8+!ULe^z^ptwO6N&Bdove$jJeU+&W zi;8h*3AOngGm{BkZ23l~X$``*v>w~~6iE7M(^l*m%%M|A{)#XR`nWY1pqKA)OZx;AdY@Xu;NA+VfRA^J|1Ah7!!uM-yXqI76>*uo^q@t5-609GRS z2ERuI^d*!bfFIeMWttuJdCngrBnOOr2zj5WUW{$Snl9#DL(`EKB z$Iypm<}vmO`vq*BhN)@7Y6A|n$@z&R);V*X;1DgjMSY2k!lJCm&fnDzyJS|LJ6(qr zJsqjd=10HzIXie<-E+R{cfxA*$@Lc{4b_z=9T^~dIwxZ{0i~a)x$tC#-!;qw9c4|B zt)|8gX!iNd$@MHOH4sv{9L)=rLXfdO+mLx_$%oT~<0$+dNt zfr((=rK>e5`UJLM&a@=fU70qx3M-VF3*A4-*y_jMW#XA5*Ao=W_YjA((9Q>MS)!@! zLGF_p;m#eS#I*6(HRH$5^%coxD1@e_W@qp1xm4X@Gzv|u3Jd0&8BEZ#D#{L2P{fjJ z-vpRe*@qjOCxdCDR*T!GjC*xC=pnaO@52}T<-drK4DEX#@rZUL)0FG$fQ6BGh%=N+2SKCC1L$LpAKgv3R9u`u_<)%NDFi^? z+|U-#Y8mY`It8QhnS7Xn5<^xp6jpjGIkr$Wsk}zHlK3oT`i8q;ec!1 zXM*iDt&}EElXSuXintN`ht_rsa#>{9T+g*W60)6iz&Cm3xgi5m{v;78r|-^%`DoN; zQP2~}u;I*R`-3;)ie&<;G#?z95=+f>POQ4%#TAObc#XEAq@u2tTV-hE3? z3-cIWE)UT)bfX7t$yqgF5ehv!d9_gAv`;wkVF+xYh;&f$6cIn_7n)1qsB$i!&3#-w zJUfB_Dm_>ay7RnP$JZ7pPt8g(>m1bFprNavouLg*SczyqP7m+Bck_SrsbpmDNug}l zPG(}HLJiMFYitzBSKMClD{G-}u8ICqY;TwaY|;=?7O zl?aceepfr;W1C9jlKCOsbBMzvVJl7Bin@DSmDcXS&s|>av8G5a6s}J?ZEq{}RxMQ* zy}I#nB<4oXfd`#qdtNba!OX;yArOWc?G3Hhn83Nt9~Zh`!gpyg0|Spr#>?ZsdQq_o zte28CQ2u%)Z8h$jOiOF40?S6#Ydm#E#jV~hjN8VD+}GL}qwYJiJX#OFi4z)pQi!=w z4qAUC*gnY-(+!axkZl&9sDk@Ua+VHb2uN*T!=}QV$LWh2la^8LU7hqujWvL&Z3Id2 z*HNrHO=u8@##^mbQ#j9468XSf8u2{58FFjNWA!Ic^yR@@kE^_g%LEVvr4xpn3w1qf zY`L7M4F!Z1hU2gf{~(XpbZ1Y2y4K`~6&iLo6bd--eD_<{N%)M!c_vkgFEzcyC7Dp~ zsZ*I-G8-}w+bnZotnvhKv)1H91fpyY`o1AAEmP@I{2=&pBAnvF^HO%AMr5O1$6~;+ zwEV|!Ch={s_*6w)nQ!zU}dd)2n$PfP`{Q2tNEl5j*-_*y~%?1V^27btu7b3>bYWgImcz(YDU)5(w<;m$ z^CpRch295goKe6k6%N4@+yO;TpRfrI3D#3ML0!f$zTT2Cw)sT(%7W- zv_6A)sBqWWv{Hg{N>t%>?R7kuOT^w}R=Sp@^l0a$bRJhjA$%?*eMb!u6YGrZhQ^uq z_AWoih~xa7oZ*P#4=?9+qL%8IRwld5hCpR?VP2j==^8}wK^pb*Y-DuyV9z120hIKy&>4iRF_XDeZamMIA}ZVisr?7 zH?W}k<@$y{rrP+Ebv@cw?uWHH{#V5;i1qzF={PN7%pXvoK3WP864UsHOJ?6ikG>zE zI+fNn>`(heS)Zy>%;(c4XQ{ps>ZVUQST82YXkkX!nuzOtVtT)@`cZ@!(4&XuV{UlLMIN8W~qr zZ$3{b6N+MB1zEnQk4CF~I6u%q$#}gvKVVTjf#~R(w4$G}PZyi;3T;2GmeqzgRLCsg z-BWD63WfVsY+#SBt?+y|C_}XFvTMWee6lijd&YhH!bbKx;k`NpkQjrmI*Wi|s~xwR z{I--649X}qVg5zjurnB)@l&pWy+j)k(3N=)YImgvGFyq*w9pJOGdPq=cqKgx-T|c^ z37%E9D|{Yl0v`Ed)|il2KM_4s2>Ff>g(mn?vr{5o(Q>Nz?L;C$XXRG6hZuN2T zyqB<~1NFulCzu}3dgX!keKmq`tRcWhedx!Z>=;NaXv4Kb5v04rv+=05+CU+nf}0kP zYJu<~3@~iWyHw5US_i}bl0@{9bpmnC7IE3~aHwbhI^|2n1EBMG>_yW`@Psu|BY@m* z$k-?qZ8~;V3SMIYP=AbVF%&cl_qd-Dd3>Ql(V^U&hvGNKJqFbgo8z)3GYMK%$3K4~ zB9)bSROvQz5+dTAD*)j zkfZ-hvKt}AdhU=006FzJ$n^n@`_e}?2+7+nvAV2A-uG-h!0puL!y#^jQbsO4 z!6boLo+{2$ZOBZavVbK{qH7RIP{cj+%V8)R7l<*Sy+`rR2}i?xW-QJ7Sz{ia{wJqe ze*|f*R8T2F$0(0NEeeZUJ`6{#Vdo5Kql!k7uN6U|m%Ngf7IaD%QRTWe@)t_7OIEUmQMjWbneF)%&r4 zXbYx>6~aPjz#4|LW92rb7$bX{zHP5#P~P%}_J?`y3ba6uhNCI%hdR(stSME#be7nm z(iTQ!QcTxWk#Np6 zRS46%#|EDPeiet>shMON=ajBN%x7^RCSLCtI25sz|a z4v=G=^JHNpT0FVm9Vq#omke)y`yezv<_MZtd@94hx#4)K-#yM~G8;>QvyfETUrX?E zQ)95NR-Kettk9r^p+A=e)wF$kupAKDJkP%}yh)B+`dLyVOB)A_mo7sZ3C@CWk!|t8 zC+V`h$HqSHZQm_RC$;^)d9#PfmQ1&;Hczlx62^Ya>IW7b)8j;LPfE$FigJw`vKpqP zUu1Y|Ois{^LN{?0eWlw!0pJ(yBoB2{iOjmq!IdZ9Qtt4LqtjK|)$g-ZlFci=lb3b( z6QwohuXaF4b-$+Zy@>InmVR>a16aD2UbeXzv}^_uvTePYp`h}GTEYRlsrOUueKD(G zwtr~7(#^NB4_ujS;H>yj!&*>Ymk1DR*0`~Fd(}ChJ<>t8uQleYb{Juj)F~emUu&)y zaDjw32+z4{A+uUhgI3x8{??&aYKzq|wt1W2X^K8FO|a;Pjlb_h*{se)tVG;g4whu* zS|ril9TZtbRjFB&9cTO%e=^M<6Z@))TQYbK`j6^pE@d^42L%(0LR+YlsaTOxvDL^9 z-q|RSdLc!ojLvci%GZ>Dk}%PlkYcIiD8{U|9SpPMVZCp;o$h&iId42pbTW$$%X+Gk zIb5a9IWN<(-plr#V+E8c$fO`eB5XAen0e9j5+{CNpr-MS-Bc;*f~G5=F9;mF*(<2j zP^ykJmXQnyZ5|}#w!#*5k!J{Z{u|I`p(&=#EWTKIj0;3lY* z`e{#LRYR`@i|s5~&9kZs0kBB(Smt>gQoJ*Q=(r(hA9Z#o`xR4TX)hL6nS}rvU3XEW zWb;aAS?()-WvyR45|-IsBCsp=pQ(R>7{*=BuOtoiUXFFeUvHdA5iGn>rApxh$id<` zR@5vkf))Se^_4oTwy z{Khul%U?cf@IHzgzf`Oq0_iwpUXI+Nn`TrG&!H9rZ;uUYy8$f&Y`471p5UK`>@ceo zQD3HJyc7B4#l*AW11_()9WQh*RPDRAu&eIc2qpwdi*VzGmci43iW&=B^wgO{-$pT? zu9WpTRveQF1Xn4cl!Hg)#;_0m*}`95LGN+u>}laO9({O8Oo~HE91vt*HDCcbwH0cF zZ5vE0soP@H1X=xa$O4cM^tSi4m6Ld9Z`zy4hrB<1e-tX;f_JHv3{H$b;H?ygvKO@Q zUb|+P#td^(Ns7;)61;bII{2cI&Wv9Yoz6{_!tt^A6oCd62Uo%8*Swv!f};laX+zUc}y1Nk1_U=FA5 zad?;rC7kgFSPEp$7k|Z82e>oZlPkMT;RKzV(qUPFqvbaz9c|j@CZr1R|q{m zz@$A!u;}%QN_0-E!YrL!msV0pQV1-17y@65)1qvjxD3JWhX&72i(88cChT*i7X)+daNW zjKSa{yZl`4C%Sx8u}ryWbxq)65H46*Gkb4rT3(F@43Jpn-qi$Fy_Yr!IpqsJo}7e< zzeYq7m3?e$>Dgfra?%0-laI%8{rB+pX7@PHXCk;2TSLte>ngbuup^chbvj;Zi3g)Wq56~4?#Z~g)Xfd}u@qL0O7rJC z8$o znB-@|{m~;AmftFPgRXIDzKmmA?*{qOCwN0s(} zI+;M*D)Vpd86RTu?R`eT64(W{FE&yD?Vt1+gZDRe z$F&(~T}x=`?yDC{X}eFi88}${qN19H5?o~{9)9`09}_JMKcG3b^1`@q>8~Ro*CuWa z01de<8+HdGJGbTnd1ptmD(D>-$cVSlKtpNShQP<@RwdU@`YF7gH{d;(9WS1ss~?v| zHYW}Op_#oJ#dPXnCL}q=42d7gf7}U)=2wT4TuHgweMju$W11(-tjf9$dpn3)!4wV6 znl|=Go~UBupOka>uBx8%XFWR-103+CKMG>iqRVN1@lCojoN4HG^YtK>*iz;t-WY*% z00V*kLIT>}Zf_Xl9^-W;N5l()s~q#4O2wTc3lBY1mmE5jwQu`Q$+Z7)ny;Z%#kK`C zKKKVdc}vstrjwpaXnlG7+6y}Fo#Msx#>o=yEJaSOC3Qt@1Aw^o+}>NN?GLUdrne*d zz4se!g){*W05AX-JmD=tINh9<^D*ZP9|3|-sEaRC#Kvs=#0Xv!w69D*^({!5e@WoL!c{5$7i=gqdhMG%<{0|v zjB$^(bktJfODH4KHd4VG)x*?K?oH9QVvx4$k(L^Hs4R$*vx5WxUt&h6~NPxE-{cmBM$HOZD=c^JsL#!XD zah~Ugd!k#-!Z+ldT^DNRzGVw8uC*m*A?!0nAqW%A)F5+x@k_&-w-Xy zX=?eu-)N@xS$mR?OTyq_hJIhC1|H5%Bg3@S;yi?ZFOj}hl|q(7HSj6sTXCLSeZW}P zGM*VI9hsiizcVLC00rul@?WLZ0>TTUcWd_RRr0nq*XVcTGf%sZ zKW`(p!DSfs*fV6Z-<`}HY=Q-~MSn?EQ#8IjV3QpI^~Bq-EyQyw(qAvVPHw(wA(Y^T<*Uzi+RHht(dPBGw`v}jGAs!!Ov)85+8(nh_){VfLCh0q z5cW6U9}i{8E4bW;`p3os2^qbyUeQY@GF5l2@FMbwnwv_zT(vEt>?WNK6u@NsAR=X}h0Jwtj-C53<;Qy5%fC)DRB3`j z2y29qR`nlY=%9yuCNt@3?T_|Oc$S^4l1|LVBDCtLxbu{eKZJ5!96zTG1-(8fash%i zg$W>He{c!R)yD-CF1=D?4Vv5-rsq$H?vx{_dT1tw+rRBO0A5>r>RpSl}=Tx zZ3XVKZ(u`%`~rJL;_-23#f-?kpI5@Qc+EeyCOVxhUS$YU3WrTj~d8;FJINkhdNkn7TQ=|DVd#YYKVm{p;dZ~ z6@W~o!kTFH*?%#HP`P$+;~6~1ucWIlOL3|d_mhboZ^M_CCcnp1HB3Dw`7=>5+)j*# z)#KRCc6xa{fL-MBQDA&h1LV~95wBe*xE(udCik!`h^{m1y@+5#Cg4)zb+acAE8q9! zfA2DI5^L&5Qq8;Ry5p|_9dF^^Q1p{yN?M=Ol7@Vbw~<_$qVKf9 zcK8yS$Dc5pM&K&C!)y(Vr`;oZpVr#VB?kRN$lZ%^CVZ7KG3Yag_8jOayIy zkd%2(9nKzM6DULqDWN%JqO8Bo^q^s8t;qTxw*Fcr1@ktR!Q~6PfA6oLX8NTXJ6#30 zD1u>{U91mRA$Ah#QxBa-Dl&x<1 zeMWU$>i_Ov-X>3`Vmvx}a=6TeTt!T_y6ISbVa|Z{5XMq}{J?*q13piiex4!DTu1UI z#>#+|K{|WB(wE!V;IAJg%P$$a8Od9t;lJI__cgXLRY7Hyhz0Y90B2ae-h{=(qIVS60Ql9PG39^qt^0$jen`b4-%$|MSNt)fOq8w}%| zG-irnQrZCW+m<%qnhR>grdwMZr()DT5P0fFvQl9r1%vpa=?l!1yq_%i6CSBG(eU`C z*S%3)e=&hBiMf|rOQMXMfPhf_@J;tIp5B8dt`Ayzohgv-I~+l8?aKet3j>mAP1x?8gw?=8Xp`Q$YT$z>y!s=YqvJS!4zegNx(=wN; zMa7F1b27o){eZbyfehksp}Gzaj3jz?u-_SG3;Y$p-LloX#_5u;h#zWNb2q&+QP$gT zj=oSR^hl_0fzcrwNjLqP0y{qU^YWY{YTe)Pov`)JT8r|PdRlE`TXYaK@xC0M<`8Q_ z&VMpJD-norBpf$smp{uXlbNP)ss)WZkbHVZbxY;$aHaL6?JfU*_y1Q&eC3D3kp-ft zG3dxY$0%B(L?_(;5$yhZ3{gFmXcPFqOaJdjAOeVT_FjSi{a`zNC#wDb{`T+Xd*_&q z`~4p?%S0LC|9u?=^Y6QU5G5+6HkE6!1_u$ee<10WG>bOj{l8N2;EZxK!9X1){4a>W zx)}G)ef#&s@hx!Ue+;(&_mBFZDpxci@w)#3^!rF%eGVsO`|cXvKD0BC8nnZPqjl&B-LGcpboLMGyo9DXm396>N%xRa+E$ zQtVuVGcXeR&a?DhGNcVFyB8!1l;ShjLAd??A>Vt|?{`P7$wGEq#-_z(gHy9zP9cA8|aP9rCzYujq$1u_se~Ssrh6IBWPgRT^ ze1rVXA?*jMX`H5pc7AwC^v6HR7DoOq8vW{TWt)Z|glnr*iH_I=v&cZ!lJ^H|hYLBs z&>Nmlw4HyiI%_A^cTrrL4ujKP>Utb#9MicN7&kkRGlXCd#QakF;+Pe@yH&NYq8k+k zO^z$A>D1aM1V#tDJLwzE9OG!T|HJpKZ!&KhYK|1qCPCd53E!NSfs0JnQ@se$jTg$_ z1d&myD=SPOV$mmn^l?fQSqZWlgjDV19xvV@eqNMC1d8)@$7T_bsp$mD=6(NfwDhy( zFqh0(&Tj6RVB%7h5Iq;AlA&Xdzq&Cg7kUnPjSk{=LrkBr||~~nf^U$Bj8&SYCd8&zpziA?H=2-yK#}&L8ON#Web!zEi`Us`3I&Ue1O_N zjP{OUAZ*W_hG`+xEY9e1kw%bMDPp;q6{(!~fR|69TuN7@URK<$5C=#wyA$>8g{kvS=X) z=_&So^4&=sW6GCOy#rXAd)tLBCrN#D-oYe6D%x)pTNVfa2fOJPi@pvGQg8EqdNmPI zBTNAFDY~!+?d0&+C$7sdR6IuV6^7!B787;=>zyl-{PYuvSDM4FboM<&U-5w7ylZ|; zhW`@@6dd=K++LzMBK-NzW&LjgXy*> zA&T<-3fIkU8;=q>?_S@ZEMPgIMw4;uk)=uFBEb51_eD2`E~@n9GWwBe#9`(`z;WyT zv)+fX5cmj@3eQvoK=3B1iH$#c=uZ+P=*{0=E=RS=zZL5eR-5#68fyl}gcgq)c&h%C zshMEc85kOasXS(&0f5Q)!>u*L)W-686RywvJH$TpJhVG--cNsPhg|U6J}Fw{JTj;f z;%}Q;KXkX7Gdq*K&*1t;gx6#MXd{Q~KgW>;ce78fCKMxlIA@$NwG&vwsf zI73%#EmqBUFxb$x^UMciR$+CJN4J<~4E|7BlI)!toHb#z+ssYl8Y+D+X1b)w3d0_? zNBBIL{0btJXt8eSP#m=NK+L+a+qHVoK9wza~j#PEd z%vUmJC@S7}mIM=GfWW$ILno_5v)L>!v@KziQgh$X{mW6G#wkt>{&gu;dbk~`AQ<(N z#+%4ltQJE#zjT<@Hy*&7Z$yot7J?|s`S*bTi|ixi~Cf1fI@Oq{oQ8O<4Gh{r@xT34RnJkA?e z4H?fyuB5ZEf#G~@bF|vu_gaa@-f{YJZ~FzVnokNz*N4L>tf3(fwb)oz+I>#WwEhq` zGu^jKHL3yx^0Hfbp{uK@>n9^#Sfd$!?MbW1Bp60#FPo{^^!VyMtYKe<_Ad5WHk^ph zcnT8x)T95rrrESLjQO2&e1&UMVfA+1!g(0tc$&4N@(cJwdD~4)#!lIj@Pf z_~e=vI&aq!1z|ndoEq}4Xp@#SoQ{9I?|*YJa@iQt>r`WB*%pD~_*nml6&gMG@0(;S zJ_5+$rs4G(h{InE{{u{;#dY#-hvHMz1_%R0w`z)cj59dA+?kp!bWzRr9epF-mv`z? zh`O`eR0HI7Ta9J)k9lY3oBRQxeGOwM&j)39G$RaPm|E@u@EC;OpEZh<+OkDu?$~0q z1*+7YQn3NSAD-1JHPr1l*@sG=)H9u;52CXj5Zj${pMx=)H7zv304s+90H@TngMCku z2Moxp^1G*FqxY8yQ0j=ZVRxKP;}s<=33U$2Dx`tsuM!p1+?EK8&R&YGaqZ zawcjF*%U}0ve|i~9f=o;5K}T3Ap@^l9lx)2F5~>{yEKSvrGa{=jf_mnM)_g)!vXB# ztJTZ@VF40n|IteJU?<86$@tvNtiE&KTBeT%|G9mFkS%Wcy3lje$O4N(uYHvE-j@#k zbz;U8|7gV7iz0h$YlWxLV4UN)el)pFCoBh;QOvlR3O_#0G_{qUP`cbGR~~=z{+I@3 zlkV&{2#e&Eer9d0KV*{#87pzvh9T1SAq}KuWxM6%fkjbFD{ynh+QT6H?PrMu5c!O9 zcU3cHbOdc9@#X{CIL5ciw?@-i`ME|07eQ~ee~IMaApTZ7Q2R0w`Q|W(N}%G~`>fri z8w|GGT6k{kh5~Dj7KOmDaJhqU<*KZpBjWMFQ zI}-=j`YP|dxsXUP!5gWq60L1RP9x*rocFiBQL3q(r$!V-7*s5g{Up&qaJOSkxM<;A zdcNeuPxVPDWH;G-RUDrBmaovK$qVSx0+lE0MuMOh3FnWHv}PUZL?L@iv~aa64ck4!TajC*N@Szf9U zznx-ch(wHssT71KS#O7j=4ADUhw9OqF550t!=6rWVUi*Jm!&W42kH#e3zgGS@ z`^EI#jz0<%Ooy-5enP42RRdvO0I>v<8FEZBmEgKcT)G*GnKHo(L|GR{>V=p81&kG8 zXZ1;yUxJeI%4+g1jZH_AqM>oUp;jOO$qM#czmL{g=`n`_sPEm1GT4f}a8oYW z=i5<7J7(fVZp<1RVYxJ8_PW_#l_$+$<2M2O{}&AErTd}57-_^TB;ee2Yo`D+?velW z?aUE^I$dO&L95A^0z+x0b_FU^4sKIEOHoB03HW=QA?1Qc1*J|!>=gBSIo+Zfh-^Uq zo{e2b>2*a+JFyj&@O{EapEG@Jk)aS{m4a?ok4uqA-lXL%eBP)RZB&m)V1VjF#!CD- z81JhO^LcH8m#|}IwDE2?53I_TPL^nzIA-RX?AF2=>*(R4@?F3`sT5K+BGt)#hO|d) z;H&5|+VOBs8xbbnDFi@b-lmk;#8~ouCUXzPXi}MKc&iaIu&Mp!G{u-zph3XRI=Awm zan9c9O{(@?N??j{5`W#Z?OIkrqD%r4{pDAjVFFXs5gN`Z*j#ga6;V2Lt(w~Rx978QjC8&SHmCkRev^O715SI>DQ;DwO_cAC#bfwhl+}FG^(4^EiBQy$qq0$G0Bm8WTl*_yN3rOIF9e(KV`}hU@(Myv+!|$bG+3NLH zK`M73^8URL3Tz;c zPKQ3@Hgo@JDzCg?T2>ZFt6kNKU=D(u!F`)TDYi>ZiV+hntaY2)PHJ$H!U07r2 z>G?8l8H<}8vKn1L*E78fbNG)Z2E1F{Q9f`s<;4>V9)l)x??yhJ9QAID3O~VIK|Ue& zbj)Tm&e6Y?;N`sQknC65Xih(5a4)hh7coTKuoP`;dA*s;y*Cxlo>G>LH78MFc%-b< za^Eo~?{0WZkwd!}69E46=lS>kldd6x!Jur{-YaLDWmn@rI@&!jG}kv|UQ~RqR4>7S zri*&e4|g%UnxZBpo0uNFuDRDF0s9_I~4lcU((_*bq)#dlk%7eO%` zd#m}qCPG`l`>TmU(vzLkKA$sDhJ3Hy5M|+85ZZrYITr>Wgj$y8b5R2?1L~i3%Fj2_ zkb%s)!#jP7h_5t#+IG87zLdaf^R{69FPG-cjvtpDbpzryNUG>Pd9+$T=h7ZpGvStv z7(7QYf-`FF$5go>Bw1vY_@0xKN4-WRwFel*#%giq``+zd-ZD(aK+bsRFt%H^RYcwD z$Qw$+Fq<8l|ArRm1@R>l*%i)xHjwyG*YvCtD1X5+I|SD*ZyBkwNHi9?s8u zrK!4_H*Wcx+0T2!RWK%O45GY~#dfUB{bBFJ>%S`eNOvwYw!g9~xK+~p4rP!cX-91K z6A{SV-0oPb@KY8KUi!*kNu-}813k1h0;NVbU1_&*VatT%0%@ZfN%C63?W}2Q2Wjm1 z-u%cas$f}RRoT*`6WBsPY2I!-G)DZ@p% z36#=vmb~huvX^(Z0lk#(&6fV{%Adb`E$yHMW$O~sIw>x9O*dMeR@x5gr`QurJ~-m* znvkW^o-t_yiLO0r~Hl_-_n;@WU$7uqGF?Sq%i zbw?s9LPON4hGkqGD`~-UHGpxUh*pUPBH87bQu3WE|G>T#OUa|KatXsb!??xaIAKfhM$eBs{M8z*7N1w#96TG|6Fm>*C59#EaNm^ zi;n1|p4*9c>HA@};xsy3UlCYmr|TyAaKUnP)Mikq=k+aYWB3m0eQz=U%)+iw{yDK- zH*+ak%RHISJ1g@~@4^dcsDQ0RgYnRS|Lw+jX?7X-cD2YFrOd`Y277%SL`$~3ySpQ6 zSvHREI<-Xkcq@>eh5L!Td~sw*DYw6{9dt$x*-@lX@A{vOh~Gg&X4?_YwG3~V8FTpX zR^@c6E2DYv>Qy5={~K}}UD{h%ys(KaD{wK>TSJmYsfgv{e*0Fp0+*I+*2%?WagG3S zWMqw*8*fgUnp<^2c$9QldIvH$nL~YWVUaK1V7Fb2`Xr<H{K@J8dg>5+66yuduUc+kSD9j#`>h1pWjwc*L1WxX35v~d^yAjff5+l%fr^KKbSiZQy_hjDV?+_cDFkU zpV>S5yb=H088Q3iI9}G(!AhA>e3u7ROf<8}VQ*6Rm8R1{0S&|Zm#ni@w{8p!x7qjpI1n}?VaV3a!q||IUM;5Jcpi&}nn;^zLvwjF* zqw>@F=NB_eP7eMJbMW^PhXf#ddCw}?Q(C8#d4i67udgSX!)V_U<2DtOu8u1*GF{LR z70BP;*g(H^?U0WJHULQ)?o%6x%mRHS(Oh&1y9?FGnYqiEZs_kp3D(?h*xaCkv&nb8 zHG?1^Q9;9__W0xq4Z|j`_my*_V|;wwJHM?$Y{B!1>Y#?WLeb8Hs8sVgn`GK6cj+Zd zl+1tD#*!c<3x+y0Dv=f?mcuJNOC~-( zRn|{$)vqy3Y7~Q8mp`eoTtW7kG7;1#FN6QgBkBwTB<9&f)85(~^w#RL5Nv?*z83FF zUFE8=5(8JqKOE{@{{9IXp!eNx)7Sb~g#0uPTxnOcbRTzn^Ho5zIADXL$A7YONa5kx z!dXlbj;r> z$Mf|72Xk*`F6pohY0Pfsh7BK(R;!LyHEudfjiN$&)>jJEr$+{_mP%3V#Hj_WBtgv+ zp)Rk5z=bfcb)K;(nfw?zxIzDs0QJUwU1PbTq1@F*kae|^BweSv4Y8KJf0<8B8%&&^Fmn~AEvVJEeX&3S}>d>Us*6Zcvm z0QZGgvmP1!>VCC5G**|%+<*yP3{-kB`YYo*V6h&Tk}&p)?<5{xceOy(a-M!upD zaWY0>ZTRcuz7Hg6gF^eiwMN62_AoLY7kzIYueJ|9)Z{x|pCvTp#vQfBhWI>t0_a%S zPb84Rf$?b~Vn&Jnqn_%TFn!AOub0iB4+8#Y5HhOIOHLuFDdNH~^@h6E95)1t;tC@F(zg%BsYG zF4C}h3g*5ssl;LH#^}A5Xn7K3ek9YzrG~U<|)065D8v<8!FIEE!ee7p8#X)?H8oW6ySPIEPfQo%gX!>wG)Sl zOD7!Muntd1ERlO(J1f{5nRcu$-C><@5YNy0cl}Y+k%Ll}NrmTb9X2F&%62?3uvB}Skey-A!;h&t6 z_J7zyE4UydN?u?su+Nt`O-Zm1qQV8}H2S)X$leBvH#l2#2w5l6}R|It2ix+@qImbN0oU_NrhDzs+5^EkE(aJ=)=3C%(2KkN&I*JSi=Ddb;jzbWfh(FwuE& zaXOKy%XO+4vqtfuZ)_;|8>E;+PQ6+z`^--E)-WvhO}9^5gMHq3iVYbBz84Fd?rV;w zxW?!u`4<2hz{@+nuFRnr>9te2bW33Y$BVKUNcq!t&Zkzfn(5Leg^42oMb6tt_5ta{ zHEiT(J>I^=!S?OEZJVTfE{JT*lM39K)=KK^cV*eO@ zVnwYEuGl?kz1w|;)@}kHy8|Xi z+p#G39keXnW(x2HR3g5+5_ZXWxXlqyV%S3GY0prWFqD~^9FaGxIA7wYIJJ;wt6>+w zeOEqRY;gS&+)~jOjMj<8yH{{j*dni}rlqJ_;%l1P&9UmGV8F?MULmv95rM%|d&+53 z?l&km;t9c#+NHN9-g!18ONcMK7cn-tQZw*luS+Pc%I*k%LZi5`QlTJjE?z7CrL^aH z-*ISkFmi`;hS~+ZTwS{*x4OBwy1Dj(sP{wu_I55ynkEZDbaTX+=XtHvLPfDJpSn^T zPb*DJIkT@UpDt6v@E*z)qaG0<1j)AYV2NbJo8nCE;n=9Fy&^60WHTQR`|E={U7+!^ zdi*!>?9l-Y9O%h2c*;xtw+W-0+Pgw+%yKoFX)iW6`?hjwlVU!Ukj#1hkQ zG9$CcSR8$9ku>YMQK8JIjN76VvU_$JQINbyLaw2xe{FYjb1i?jbPvTz5EB`Oo$Pm0 z0DU+*)35D;d_9W<=y(kDAdIxR#T^^%^^~NQ265Pc%GTa$nN)cbTxqZ_3;TK3Widor zqyLG%W$}7BdtpZA!bJd^8dzz8jAn9;c7lG`+pY4Sb!ka+}KHOg~)iShY{;Q3VX zifgih+i;<7tz%Lox1zk~IEBS)q+tq$xgs>8sW%C0dnCnSjH;*fLtmj;D}D4VW?Dvk zl0mCgM4KEn{s&Y%vbPC~daKtho{YS(@R?$>)@tKB-O9lC_Azo2eDl{&cQKkgn$R6_ zm>Z|N3f2zE%6h8vD)!)e>=}E#^*e1%ySttsOYKK&dS5)dJFQw%w(qe9E-pg);4ZH+ zthnFI70bsav*Et8_FTDW0qdiosyLc9f6P9_jiy?mqIs4x5-1k0Pa!*u4%S?8{U|HG zJYu{Yws&sHS$mH9u@Po^^c2e@Tf2|aTd~{(d6$g1I0~wKR0MoD4zqIWvTnI(nz%-b zIb4(g2QoP(@QWAw?(p{xVN5kxH6|f{-%1=BCAx1Zv^O`Ey)9?I?5;9$Q}YXsH23W1 zMRDA)7~6`Dc;B}>)wR%N>H4HI6+NtGX6^OzDc_jz>1;y$k#tWef{WWa{e@=(rElr( z)jnkDz#np3dW33jn_E9`su{v{*{pZCATdpsE?9po&C8WUn) zT@CZvN8G5?I$RNJbF-^`HuMn6oUjBX%Ni!RGh-FPGIttJHQZ=Sairt$_yM{zZvk#7 zYBYa9RtNc0HI7Qjx4-u$bzD3!3B2B@)E5v(R1Q}j-tD4Q@|BB1a>@`)QIOW;sD@={LD~YFH=eXUJ zm<__W@ds51-~{EaGK(qDwpICKhacD*wlH(-pRs#R9pO)R8q|S;!&OT3oisNhL6XEt zi4>bqKy_U#D(X%%i2&V|2}E4hnY0Tjn&T|nUu4Y=gjj*U>bR|j)Ys4T>QhlPk#EA?*vp$d5n%yd~@z0dW!htBy^WkNCz<`W2u|A{Gln-7s(gDR)x^ z%;S8s>*S?m70i;4kJT(}=FC3>@ChxDBK?h?QZUmeg&9#Oi$s^D^fckN}@r1!PIu}5LdiK>_D*x>yNT{csU zZi(n8uIeUvO0@>bH0N&v8A|t#bPcYvmN5#(c-xtSb*DVfXQ; z58E;hZ|E}vDa!hTcjXGcQ9>Xdu%*=vwLVF0Ab|tzyv1_GepL##)+Tf>>#1!4_;xm% z>0KfDD;tHn69+}Mzb%MqlVtKK8r95YJrqrT!m#6?V`$%rR3vs~n;D3)6B?#OVyDf9 zYVE{ee2LVJSo?c?%|-t*&6Ys?SfTe)h|B>B`ZB7b5w+P|3{fg5=}mU0I`c)#`A9j;;b+TK$ z-CQU_AN*QUdhCdd0f1%Y?#%>S%9Rm2beDyOk{n)q_*vpl%)&91G#p%oPlFvRV%Ljxc>BzuvkvOXO?T0jT>Re*}r#<`x-VXdES?kX+n z85cc!9e2;UGAj$lHQ!$slljTjDU^=ZQUk=tRJPy{yT3**1106C9XU%ux zj<9>5s6vj{dVatDS!|7uu872%Z7Qr)N37qK{kp&$X9&jfilMz0GMe0XnJk?=kHffEU4IMuHBl1H>y!f>Xa_GwLnOWjW)ZLqey2qbQOt{asF6b`^L1jLXoY*f@pYB z1mTj`<(!kU;(>KU?z*zdwp^BXF2K*Due8Wbj$bb|OOH4q8MVVPvKYHxsu@^EWn#r6 zKYnUjBiN-9xCWiy_|1F#8tl9ZtIhi})=Qp&knwfr$GgKc5|Bw|mgoGfaB;F;(3ShG z6ZV$-Yxu_#>{qkCXz&YzuFD+r&rWAYKmQ$(#0q8(*_>3_PYq4b$Wq_WM;F4V_#e@Y z^I4O?fOZ4uVAd&peNjuF1H9Ozq9n3FY#Mo4$16RtivCDSIk@QWdbWXDdlX}T?{Uvs zTiSc29bB&mq3TiMp5Zxh^)D5AhHxJ3NsE?h4JodWxETRy#~jzE`LzXU)H-M6D2chD z1VAv0)!)>dKUIMCO{uYI!%{1|0@IsYEHx#D%wXcW40H$dIacZ7FV?Pe;_w92vUf96grA1p1dqhb}Yl@d0Zn@tI?}8=V-XdOE8}MZ-{0Y%yJ_t%_^jv=K!mz|(Ou zxN%al#=PGwwW^)adxw8mNK-+}Q1RmO*A^Y0yv)o7rCTP-XMY?dh`k}o5-v9XnrRt_ zlyjwrsH^u_i|JmGzR2ojNfH&OxHfw)R<8L8{x%i$kPu_ z3lXuJ$V9vchAt8C2{9`>!Wagf_gc15O-kswx0?42L`RFKlg4d#gcJ`9lfd2UFI0~b zY&5I}ng4t5b_a{IR%?AQ|Az%w1a;cv(BDtz8@*xnb84=NO;@uOGJ30V@$t%vgN;6; zs(&8uWP2nrmMP5bq#-_;5+G`v$D1@-a_tV$o!?@-o%zk2saPuIb1P0|Lj{uf=sN!T z9nR`q&oFV+T(q<*gZYSWMHhgtkl1MD5iNr4j$T`iDwOknKF*KJgg$4rpG;LJSNJ&h z{6vtUm9)UETEl_`;a!ZLgh%b;`>@;Ng3vi4^p}GCGhKXM5#LF66L?&P!~J@C7tEb| zt=m-4kWtbrQJfS$Tt?yXwF>(P9j~D#3yPZgSU=|`MOCv}$>pf5a~8JY%_}Wu%}C&i*&pqshdY6 z1ez6pH#Q%zY;p=U4uvo^@ovDNHl1V;a%`jaK6_uCO3V}@=#hS}#rGw-3Ax9HlS3#!#-mNQ^CFa*b{Q_?2Ap2a5S za@X38EGX+&K^27vm76wi`>nxmm45UENpB(Qy0!Vb9s41z(;;Qj24waZQ{|OCpHqqa zxo?RJ`CiLLFphgp6kZ{k~d0XcY)dPb8&*)vYP;Pw=wA7*SP(PL4mOt}}c!F6qfL!jK1 z+3xBgqOnP%1*V6x77tbavAI`_`8%!ngh|mqb8nlkl<0L0=);in3-kJJ37Pt(sdh_; zH6zs%?((Y%x!vs!W;djHg;>&Iki5o>dTu%jzBf$AA^tp5s%zc zWe!dcFD~@M3gvUbyoEodWSh4rZkVKI&n91vyB&o(J~w2Ka7yNRJuF(wDE)k_bPQPO4b9(a5-oX!CvY%UAktb_`W0`Bu%SE%4e?X>Exf z)D|0(!9kt~5hoHuv}Cz&6yf}|R0(zuP7n@d(O%E0c3FGM;jh_0vUsh_)=J{1oHR%B z67+*K+(;lph|gSw_1R<@+tr-*xL`&zNbtD6^}l%y!ICle@LL;B=0zY%Ljj^tijnBs2in7EfIsuHGPWoCNv`06@yZ3EhM;7#~Vz~iw256V`3&==Hz_e3J_`6DiM-_?+~r;iBb)9vi`*?nNF!H>AL;|fUchfZBl zQ-YYKSPwkF2vuN0J=^PRv)D?BfYVF=m#eyCi4vvc44_>!Q8s-jN65)AD~WwtgZ?O7 z_IghkOv83Ilp+xp#jeV(WL#sk!jp?*LUQKp?AL5EKQqRC$A`4zXw`gL(jrq$YFJ}f zzyMv<96GYfm^teU*e_nzUz4hu#UBiYx5A&Zjgr5QH7QPdZWE{L5!y@xdDAqG@khzd#+ZD3g$wqCv>0< z?^~q?qkP-=g<2VNHD=qG;G?ziPXmGjqTFzbIa7rwmIWJNXQxP zC>pbA+cJ}4n%VVrIsLeCz2zms5Rk)1RrlebBw9cTMTOQwWWJeu;hs^WVnCg&XEGYK zBmrvvu;@+i#xgG&^#@5hOXVzQm7v<&(3z$aOZwAb(k|^^$*26^Kd}jVkTUGm36)nw zPys!U!B+j}Nb0KvVDT3{TBMAE)~1;jG(UHwI1eK6HuX=e1+%0bY6RFpcAOJW@tdl9 zcJmhq62#kypl!xMK9im3FIO0eUdOF=+udLdJL%|*%0K~>0#C&D<8Vuq0t0|U65M(BXnS&YJcn;-!eKb{&)H^Ed`@`c z29oRit_=ZzJqgVmQqWtKTr%3oEU)lx3i1)!9z+CwX7rP+woz zrl>89m}?TpF7!G^lc8Mc4K6qSdgztXFdCCPm@DSzcw@MgUor!&r)E`h7TnP5fs70G z&LIvR2V{UmTs0pi3PNa4rgt#LpOwaP#aL?h$$QpwVNQj?EmmgvTF%)sLE8q-wZb2P zxmIo*pV(QiW+QSOZyj~=j6_&nz3%DTTxL_6zS{~#JDt1E{W$fdkiZ?9GIRRScuyAw zs*~Sfpjt_nusI6Y7d8RX2i5=&wwpbQP|nkqK%Q65yP3En8tr4w1#r@$qlAs=+fX@_ zhF@hxVoKk2G{#hp7m@T{pGztJ5>gQw)2)3|J#qhZgb$owApfk9c!HcLa>Ro67IqK| zhmlJG)4?esQp|Jlu@XX9-{HZ~!Ew^@0VzVueY0$Uh2=@NN+xQE0Rye}^t~73)C6XR zKoxqYNoFZ+>E|0?^mx~Mo#GqA*Q#(dvqtNbxwB3HJ(RKpw;=}?GV=)*Cf`?%<} zK9j<1rZzlDct;yWs*&#^b`Cq&&|p>-hd>VX*EA>(86|+yKINDF1XW}aEaor!6jlJ! z!%~FJAmmTP^KWdE#>Q%*8t1DM;9`Yh zLZYIwN@VI@A&$THTfWMx@=tGks){nrC=5b2^|skCe};X6UHoF)B-hZJh#bo&x=2H3 zw%Az1IG%662^=pWz^0?*`j%hZo&_BKJM&oMYPnSu2u%Fs((aAB= zCLmOpAA9QaYopPd0{j_frihZYnszHBwUoZ#o;y z!ie}4OC)>rxDnP&iwX3r`9ivFo#PMBxM!TZHcKf$`gf5Mbzg$FuGk>f1(%$3m zd1R#j|6ApL)iw{nT_p|!0Ya+Z9XCiLT>FsC5M>XW7kf7u-W*!7y^||-y`KAXSLp=S zW|{(^Z6=v;C@ZnUc4IDgbfh*S$40LK9n%K4oId%EYSJoZiR$W&z)nB&?{c80rpbs6DwKbRs0j632CPYN<4766IR(+0;AmF9vPSLjQ=I+A) zq}19Az$WBR=G}Ev*d!%hzew=+s{gsYGhMDPrPy;y^$&n^uXx(c&qjTUXBzy1bXU!t zS-;YxvQN%9rbWjdrcyEmeqX8ece(~Q5n~Dkl>Ca29N1SA(QWm3`{rHsclHCan~}ye zNs#N_tOzcUnovt+o3!El%qFnk`h7RFqFki3ZQfrlE#r6lX_MW4{RbfbJGD`pjmhF8 zTRSd$$dWip7Q`JuL@Y^9NvQ9ppJ{1on>uL@X4@)})QOZ`1x9;A^kJ8YY|BN94=Io1 zN4ZqQ;*%^f-)cBDaFr1d?S}(+Xx3?#u7aI_PAZJ~zu@C3d&mMA1(gfFVyn*`fNJZW zXdgZXN~omc67G&IrK+o0$CR8x;(PF$wQ#p7;|2+IG7J3i0EMiXMGQa8g98z=(EP_) z8Wen{McVqVNG8=8&esrrp$O6amyF zv~|uOEvD@T!~Y*uZy8oc6Rc|w?tvfyf+j$43mzPT2X}XOcMIP^LgfX>gHXE$-z#CBG{?V!B zm~zQ!K_!8{C3Q>DGM5FFF~}I@9<-uO$vg|%?`Dpo==&#zJGVuDJmmhxt;ap++7-sm z5_ViEEFXhP2KF2B+x)VMczI6sGR1{HwFgb4O@aKDi-Nwei4GPtr%lkDN$=MDH)}?g z@gt1KXJEq{JC&ud%Z_5@b#ZY9mZ9O0tf;*V>@zphT&vJ5TT(XRWc|qS$wKFZ8xa&s z1_>3-AI!`GRY4aibaa(B(sKwe4`&Zv?af{7I8Y$U&kL@3UR8cv)Y%4ABP)r^KbO?M zsVhz4xau?c6?_pY*_Z4Sw!PJDz1C5Xi@c3ouK`9Rc$Xup+vaODGy>^CR3R$;O%~`6 z8x2m~%r}lr%+*!4SB<#6!bki4h%mN?CpM1q;9Y(zH1kWOqV@)y|Kf^|H&C@=w9DU& zkg`hSi{IR;3Sgd4OV^RfXYx+LKqu|M7ywRDbc+l+o%D#6M%wj=a^^?p3X&&e6``eM z_vsi>*6yvya2EzS(*=k(q z8GE}W?`YaIt!=}Jbj%A}ySa}zx_uPP(q>QayNk!LY-3!D0-brXr+AX<*avDT7a(ar7%eq}v zarEb5g?NIqBD^yR4jz6mjqaJbKXWU(6BI&jio#@G!_c0y*2j2pmI_Db$9`vDf$7w!)B9~ zG<}_LZ@|3~htzck)IwY1ST5zYjMH{^WYFe{A!gp4O6FzuiXn~9T5@o8Tt}z5KEyBp z^AG^AunAf-aDUF?E?+i5W-FMBWvs0(t?+*MhP)5u+G4CqDe*@VmT9u$TD8_0Q-fOm z$cu~U2In1rl<;o&a>9)MqRDE>EWp&^6$T}mtppa}yy1dHOda^Pn z&Ho|#m_z^*&1vZ5z@8n#)Y9$-NP7hzKU1^^W7ert)KHtDQlX2P$S*Xd9K-mvxFAqH zx$Cs$xwB<2vxtY+G)1tiXs=_Mj<;^8ICa}BRKAQaXM5^^+(_R;WbMgf?%EerW56Kq zTCXxB=|(SuP%Qe4Q{6OJ%HpUGx4KJ`aY7pjk=xd$DQsNYvC0I?gB*&u@6>d>B#Ka4 z{aj@G9n;_YM#(!XV!wh(sGyDb(>j;N(s*LbrA%dgUZoQ{FK1P#=#l#c@a;>QP^R2gIi*;jjqtC||Ax z$QdNzenOlb3OkSMM@Yn%r2xpnoeQh5dEprDupi2)4CTb8|e-4 z^Y+j~y^oYwUSFMt)}40c4Ue`taC0UZ;3Z^qQFB)08x{<=xW2 zAY+n9Kx0iC|G*jFdC#lF1~PAiyKYj~d!aY0sDNx$1rNFIr?x)}*7xtv2W_RbKe>dk zCg>e1OI;Eb%%suJ-fK0fJh1oSbDDr;cIr51A^VEm4=hAKcR?j5^|$(J*nYDi0zg@L zL(OLPPJET`o{X#F*O7`20i9oEahjH`M8Q`idUF!r;c@hAJP;Ey0wDnBcTow9G@7yo zEbF7x(HpBs{E-Sq{BPp~51LC)`cqrTKS8XLIhW@~BvH^Oo@mdl$A%fd)IUxi$Vf<@ z@K0MB4(^So7$9x4L5zxt!0BUmMF`%+?JYxr^Q+j}TWj*ZXU*jEG%ZceWllfQQ4JhJq6`_wfV4P-R; zVT(wAdHGr1elX@p)0bt{)F`RNLEQW;}j+oB0?CO}}7M%5iH@f2PfP zZ(^X$#v>;2)`QBczG8P26x~j;;%Wnc7}g0kn?7uOe{S8YgVYU>6D`|6>7G_>o9iI= z?cl~(V!XbAW5quWK*oRJ<*0btx+iKmQXD$MgSbfwg*g)1Oudr|jZ-j^ojBO(9*7-G zRD4Tx?79g#P@?LVzGM__Q((Kg4B6H|K2LCydp+%$yN9jPzy|>sM1k8U)Up&9&xe}! z$m)+Z6Moz`bs%6>7$N}47~B%b-W}b{@w=5QQTnZKF(j_nR8NTx4glHndj{R>{>#SZ zzoQzTYDl=|U>pgsZ3z-d!Ay>pUH4(?(^oI6u3OD~Nj`_wY<}M5_7&Wndk&d*ape9> zF7ZY{LFym|89IUAtP31Y{0|{Z!YL2)mZ(U+0M@S@S);v5nR@x*U;!*d_ZebEI&29N zpwH?ue2{vQuS1jBhti_@WP@ut=#NDp7#G9ND(vLs6sk@K3%M0!XmwHK-s|~nUqvr3 zl`-^yW~&Kqd?qmKDSIh^X1l!?2vqy>v&iFAtW8#?jqu${PJ3LdtrnTu==5+PE!?t; zY}Zj4&)23A3yn}oBcLf6iYryx2?P&bv`0n%8e(+HO)fB8602hL`&>_@PtfV*lZ91T z&EUW)`Uz?jLaF(yK<^P_okjeNiLtxbfl!ae+essd6b@MeMRX58(I?5*dF>xfi^Vl~ zESwVlt8pWzjJZ^lYY0*Pw**y|wvYhZ(uW1}zaGV6a7Tv!j(!$C&&_Jr!A?ms9QiY< zf0Mo$5u><{(@DD(R$ zC-V@m{Dbk82CCUYQBo@GEUVGR=$WilGeeZ_%Z!li^9dy0r?;0u;GoR9_6v@V8&=$` z7z*TAj6Vl12w)zXbjRc6sFSH+Dh+hEvh5L?b1^s4UXhSAdd_#UL@S~YJW*R=XsB`LB@c)b|!_0TNCU#Z-Hd$$yWHp5KMHW3AX;!@^cKOWR zI`dC^3_z)~-ksm!DW_IW5dSBP!pGuRFE*4>8H&#SGam55W(!8+z1CN!`Nb3*$PX-| zQ(310EgveMnr?EAENRJO;XZc#E}GPfPA5{zq{3lI!vr#m+H=DnUH*=(>(cJO&Oq4v z+oOW^AIc|Oma6vCU6m~^O^2lL?n6ycIA9wxxBgwnARSmBA1mM_4Hhz2iY{QO7 z%Ex9@zijTznkypV-c);3b)}HVc)FoGqWyP}`#@^piTGhDnBPl%_JkQrCHsP;yI-tE zuMy#uqkAOx8ZU>-cZIgFk1A?|*GCDvctR{w+kJ(IxB$=UI~~^wXqFf0{pLjZLE-{- zyoRaB-i7AVZ0ho{tmrKtm*Y?AgSJUxvq3%gpyg+~a#zh%i_aH`7-LX?m)M+vXceD~ z5U@H^-<@~O$4P~XjN#frU(!nswuUu`0WE#9hN;<-ZKyq|VvN2wEGaL%gF?qnm5vLk z@F!V{zpH5!RAw!=TouPrH1zjUp6cx@$^{jgR-^QHYsq<0Afzew1$`L)?nG|5D}+9- z6w*)^qHO0)J-E$ac(nmD8M@O}rO+div)hn{DfR39g9-LIXFKRFW)Jzsz>C0tyE&5| z4EAGYo*^77`A=o~@iiNvQEK={hx%M83B`E9HRB6qq_t@d>L92D1`l=O0|O z-Jymge2(}a3GDAJX1^cyM_7G6JcQ|TjQ3~anXwuGLlins5kBy)F$e2thM*7Sih5fx z_MI%{$<IiYAl7?Y?aHU!Rs2mMe ze<}q%lW;8Y@;mLmf7~~T=#K0|vjye!kfdxIsQVZPwPkRB= z-*3<$xmq&!`rFO*V<6lhXmM@U8`e4|JQ4|sf|l9;WdQ_-l0lD?Fmx;!*-vX? zJOxC9tj!aMB2N}z9a9HksFhy${UYs>`2Y0CQ}B4s)Rz!ezM#0_{;adJ zbJBg)2S!((9^BjM#OVU?KRbqohIVm1Fa9AfyzefY{NxIT@Tu`iv{x=QY>|C!!SJe< z2?g|~LhecmlE*M+&(+*0dsh1BoU;gysO&32abOtgPA*hP!dOH%-0F6L?F7vLmEW?0J_>1SHAO}KSg69hy9gz5;g3NDHw$(4^+p5*j zl6Q+3pD63quaDZaq)5q}t%o$dheoT-{bcM1sGx3J$--fAcJ}>09W?D{g-alWC4K@4 zXnak{i0!p20tPJPuxkhl%9XpK-PJYMX4er=w5(vmG+%TQUr+k~+PS4BDxGzBy4<4g zEHntWk?Sj>3Qi(fzXB&a&XECIqA^@K?ZaSUIx}GmS}m6Yce#S{p&%rSx`Y}y0Kng* zEsr{~HA^TDM5>{iZX-1%>HeeLqeOs3!jW*IfEN*Mz9Cwe zv@=+Cqn>FD@~@RKU3eX=s0j+klu09qK(+?k%j(Z$>3DsPqw#O3fcKpx9SUymypv5S4~laRO)SdO+L89tx<|L!O*UTfp+4A%43m> zw39E$0KonrA&_rrwz!S-K>zs6EaatLXQzi(+a07`Tafh3AZ=L-gS}_L_rD@6l)!;B zk<|U{eo(bbaPLX}0!dq&`nJ5sFURf|8^~MEbC?~TgChf|d;Mb{>F^)3%D=PNtef4E z)f>5Wxx*jM&eq3X zIBT1D(LRqS#Z`XAw-ej(u%nOvS>1lLu>K^XZnF0;j0PH@v>>=QR=SiVE#XrvO)M^H zJl8Sz=ZK|;K5ekc#jBm8RzPguFWiH_-Z0%7=S6_Ufc}f1M5`B^u09s$eCGeEqd>;a zgCx=$;&0^iNBlU#Emr@ER_f#3@s_mO7`mS>g#7}(r27~NU(eUS&d#a7nMEx5E5uS2 zJp3g}Y(}w@n&TY*KVtVkz1oXPXw__pc47-Vv)>l8aW#$$IfQU zN+PuU<6p<95XSh!^Tir$1jA@p3K4iG$@%I4dJk^c(4A>4x$IMrX8$+3URfBG|0_`3 zQq&pE)j;eqO0ON7$Yj)p+&VOzCQiHwO&MUYz{kgDluT~c41-+P{B6)WdC`N zT79iZ$L+TZFHE=7uP`Vz;pfo*um5O?v*s|{Zl)0(o(E4(LRY>~RmPGwk*zyvuTa}~ zLkAxNS#|>t%-7G?r3*iwE8%~ZxLOMJ+eAFlGkSjW;d_c%A@Z0npQ~wIqI5VTcj@k! zAXMY2wdueLD0uzC!8}ZrwkMGG!~Rz>Xd+2|ipj9PzDgFfPMIz^!#h_3%_%5L?tUl{ z_RI!VlslgP1~JF~Q(Sx%Pw(}$T~6flIU=h1>2!4VOx`US#I|*SXjZ5rY>vQ%paJx{ z(2R;I#eJrU*U>Zaec;g@u@E<3e5)sGl)iId62gqKl^ z!px*4hhS}8N?hkp%eOD;2W7|RrPSu<5ScZPh?dQ5&C~O(kMLr)1$lcaLdcVgv>PkV z%Blt8iyp$Dh(hA+Ua?$io}SLup0>K>}#6YA>C|oMJCHCX z+J@!-B@NS?C(@)s;U2-phKEpz!D+!_D8L^d_+BRT$15HN^b-9deECQH*W3S>Gk(DS zA7o_o#f$D`ZnSS^pq{=LYlDe%61jzaO*)hs%np&K$fk7Wu@c;9c3kK)S~o`P3cXiL zbp<>gR+bjRnkbsYX*t{7dWI&mTZQ9JQnvJ*o9)guf(bu82fL#_I=9Q0Z{&mks(@Q_ z^W8(xumV8#R_lAch-y)alFI}nlDU5Ta4R50Lv*;Ypi?VDI~Kz%81)w|$4@3j5@`#B z`@lRG!*^RAD>`}n2&+1I_1EzC9%$+5{e+R7oz{K+pj1Nad$JqKnK7s;G|7 zA%F0yf!j49jA(saJp8_b@$qiua)O#`#02AK?0M}WH~{B`90z_>uF^B)`h&VLN&;JY zL>4mE|920D(SERIgtQ1~K(pNcfL7_Kp@~LqEdN=JUSIvI9Ya>_2~34ykEsvhd~7MO zV*lFXB8<~(<)6R~04S?W0xjIM4UQ&KWrdUz>@rhEjf^Jd7R>J!L!@&vA`rcQ35XB? z;M-ao4c-68q=UjPDj_AMR&sFn7*!AYsUnULfO$soT?SN!=Q?=j;QytUSLEPq7yVb9 zxxx$`-PC>}qIE{!Ba=$R?48E=>J?0AJ4*xpuzg`$k`Z#)sU0V$a`_#@qr5i6?vQ|q z(sXdBk-KxYs>7!5S2z1?W6cU>ww4-5P7DG~{lLH4I`ce&6IM82<5p*BNr3N;G4wmO zmT*DSvi0tJ_})4ppw;!HZv4ePuEk*=+yCp|PGw9h)$VTBJP}n{?gsY+4Xf9sQd@U{ zyvM&ZIP^gR-lE-XBGe)1f-Pb{yX;t8Y2w2-Corp48EEz$d%$k%5_>)eO}kOFY0B*)KyrpF=Q@=urb<(>1sCFde`MKo9Lzo==~7hSXY zRmPT&KXaa0k&eSFbH#ja2p{}JCPkocSzONPZG!*inrdXJJ4 zNeEV8^|6&dU&Kz|cyVR+6IyQ5jFiJK5+~Xpe;!_HT_BO(2f>dJjM+MvxJUxaar#ul z<&^J{Czfuz9eHzIi-k(%n1f<(^IIFOln0=6InY=z2aco*7AZMWWPwh|=nlM; z_R(sE33!rQi!fvgP@~a)f_{o}==2p;QM2ka0b@@icSowZ-JYTB@Yw4n`*FWRN0BwZ ziigu8{8wV?)xr)+tfM7hGd#xG7k_(HC*JvD#`|}j0i|lQQ_T;-e;Dml4?kH@H$M7t z3T5PT-|i7i`>plM+T9_rDuVD~wAYzc0fXdk;t!UW>X`3W?U%dmS79DfENg`(rx52T zSyG@s;?&h3zW#vW1M_@lBdyzlom#NNIzT(8a9++Vp6Yzt$aSY5C z#H_-Y!LtLh_SQi~1)K9_^y?i%QaeTbHIIJ6@6p>l*t0A@FLwp}ZBZ4?FWBqPJN2_q z6b8CcJ{ZzKlMY>RaG^l}ccZMVV#RE&NnluZqGCHpFCg43o{%0PhE?3?GCaL?+(>+_Lgv%*)?MY5!f#{SMTd@lrAAoR1R~{mk5jp ziXyZuc1XV+BfTbe4O^ev?=$W&86kjrt=HsQl!Isy(YPO(Fz{9xhjsvP^wO}9X9GH| zpjs^t>PO1NZOYkU=A824A~|^QqFz%c!LUA+n>Pt5yxW!FJM*%~;wHr}l`v#rn$VJKfazCg4 zX~EAVQ_M~DZIZ7ZR&Mhyr*C+E6h;-)l;;NiLB3Rc3N-RSr~302s~61M+VJ67Lxq~r zWHSRK?NwvNo5$(uX@JL2Zqu`xi7ebtG9F&dC2__+k z9&xpkSqs*`lB_hd_k`u1n8c|P5q(eJpPP|#;fIOn7>z6?NZr{sbucs zx6ToTM)ZyxaKF7@Jfl8wPHo4L&vUo<?NU~M#Eg$mOK}mG_!^R}d2QjL z{Ts@149j98m8<$eSygfD>NsIRt?&?xrK55mvYpGJI8wghcJxa3Dm#PG@CWcv zEkG3+1#aY)NpSGlGWtgaf+X8AyUQsweMWxN2nET%+~c5_+AaR=PMMK-8kKW;+*s4eMQ*_|`?j_seS` z-1Z4eWjIQZ6aea~Ske*WNTBMg^!S}!*UI{aVZ=zVUYQ8)*{GrwonH24#l~A^QCw{E zXP`fKHxyryaE4-$TWLff)}e-NkK$T*L+o_x2;7Tvf9IPD+r zv^Tiq2`s;t+Onp-{Kdo%ZXN{)GVsm>CpCXN-=?iQoirycaZRekIUYEby$#OYs2>Y- zZBEU0^M$F&C;`%@ethxGWt~y%6hRYqg%6C1+_VKh6wXz;w}YcMx}B>X6(+*m+NfAV zwFGu;K1ZDX(Z=e3iTrz&-wPf-nht-`w1s4z+_TVSoG&>l{(=@!<~jY~v1cidP#|Tn zpuV%5M>Tr|HbD4Z5ck~INSJPD(kA@6Sx$TwDvYbA*V#i`wrP1Zlgn|$NMjg5wFwHK zqfB?dW@yeQ++EeHrj$0Pp7w4Ph$vt=^jN3 zP0|B&zmi`PO@4s#!mUnb1PH@t9>|ENUxFUwt?o0qp1Z{oj$GfZn>0IpzvN7xuehv(}AY?JG>0R07v1RK}v5>9q;5UhX&L;?< zsF4E8Y&uw>25)7n;sf}mGa=zaQhvop=shDj#IDJCllnwJ08;zVkKWCvFhWTw&^t0U ze^f+|TEOUvS2@p4GiOxHF5{X{K|-MZcZZ75@7#-v*5jqLL$=OxQVXAw44Z!M*|g{4 zk%7o>NZ_Dd2vo9C3D>~MGePPe6#&#fgLeib4Cj27xVd8;9%=E|*??mZ^93nv!M*lK z=_seyrA$}+I!tHSd};`BIUx zC%73-4XSQ%-F4*HV74Nw#K0;3f~qck+wj`}6tO^hey`oX=;92xw-|Kx+pgT}=J-2i z$>*vb(3#WNdjhGWawlftV`!41o1!PnQ-db|WSk{$H;Z4oM1IF-f0Q>juX#IbQZlb=YCb2;zAKj&oYswQ zO#U5KAl43EB@%5!0L_=@r!NXBiIJx#u`lR{FgW4X*)5&fwW4jlW!_`q!{eD_+eoPE zP1ObLxSXcM%XVY)ku8xq{HFKsE!O0|4^~!JtTg2y>J9v(3|*>;G17~ zJ8=>01}Ujt$Msml{1qIErcWyOY+B&o%Fp;R`8*42<{nadBX}XmT6^6yz9lOjV#6b% z%NWYQrSL-GKGZavrI>4st3n1!lf{3#eDv0KlN0fpG)iYs5v?gcVd0sfV2aN(iTkWY z)syU?HLCS&`?H2(9Qz(^MY8nD}zZ()sYtVnW zQdd3wGBcWp_0jP=8mhnz>o>W&U4?iF2w?V9yuW_PQVnKB{S^$y+V-G*5rWnA7x*|< z_*^=C zhq~JQ*1etgwL{5bR*YT1+|>+ForIx`en>qqfvFzR-M z`Df~l?+zSRpTHe4*)25*?j$pqAF*e?qvkMH-B~c^~vKt{R`VXepTHy_Od##shsw&3^R-s4#u}jg}Y~exTAY~ znopyr!W2yE0GC)nr27?cve)k=6@BO0N7;_?U9GhKncPrY zu!mD;bsqNG6w54g^d-~JBL0LN)jf95@OUeqX;o#z|I!qzaAGHR;F@T~-Oo$FJ+(hX zQuFgjp1tT>o#jM?f}EUzXmH@1#+!CN;|cAtY`>}KTb1OB;Qj!2T4d_?jwNEu){k=Y zwHG_w@Ej|tZR$mttT)RaCYRE5=nEUAP2YNJbhkKwm7GgQP%wMNKl}Ge^;G zwOo!ul)#N|7QIQV4@6(o*1^HfNw*bFN&BIb;Iv)60%B)=q)_UG_rAjlD38d&VN`cV z%vsAPDakFLl_R0%vG`&tFr!6+SnWxYW}g@L{aT=`O@z5G4>Nre0pcgPFhvH6^&zJ{ ziE}^qGmK?tCbk)xL)dj$dY8ZB(1?E7W>zU2Z{dzDhpV1`pAmd<3kAGxh>?^PCtmH9 z$};>&*%>c$NkMj&ID1e}dglN(zf?Ujw`@i~qkC}EEW5A&k&QzI*(T{kI{B9ER|DFh zz_MW{?wp?xYNO8=Wiq^5HAAvZE5<>G*@eM9%iImM?6~GCNBvM=Xbuh=v!yiR(}=;n_cavS*WHf8Ux?7#0h)o>>pk+zP#Rse2E;Kjl94TV{-<8zUcfUH*N_= zEBjX3-6JS#G-AxpG0yF7A0@2aI3^WrnkR_Nxp$w|rOL9iYwOodF|Q$qA#!F-yr*>4 zfJ}iRFnlI4i_FOtI{D==D`%Y{c5=5RCXqc292~LgXw08Aar&;|b6*@JDs7J^Tp2_$ z0Ad;Lu6p6OZ8^QWjHJ|9CSz+e7^9^f#U)~lurdnAF2we>5nekZ>hT8{g0Huzu)YD_ zLik16)tj)K@1-e4!aNRGjFH4*_6+5hC~Y!wMa!-n^}k zIp1;)6o*?rc>iwF>=bi(3^^0v!;}>K4b7TxbOy=DblR8{)p~VqlFosQrE5ZSIq??4 zYe_a?sr#Ev_9Nn_HphTG_FiNR`zlViBwt>;@9SwYe&`)MJa4;5B2L_?sGkA_ z6RUCy@v#>%!nk%(MSd{f9u++GVonQFS{xg89Gg{A^~Tsfzu(Yx&p7T$fvK#aKtSUP zqXb)UprS7X6={R7MKa>q-6FU9O6Zm?7(map#v_z6+a5HDY+^P_Y*=RPq8T`S?lmiR ztye?H?9tJUC0^Ckgg!PG0li(@J$k7jXM}MD=GU3U6?g{CZ(Vkl!s*3s`dQ0O(!F1* zOidT_^J7veo?*37>z|vv%aue!SsO={Neb_k>#!Pdw@3P{CF|LF1RXdp0^(|?52k!l zwJq%BvHQoqD_=N;TWUEoS?$t>KNAwqe<;+bo#JVcfd=HKOE|j$=#=1gyUymK0vQ$9 zLnP&kJr1s2ov!eRD>E~4kudSFtHX!g4Q~oSP6(cn#pQlyR?R}uyCmd*g&+Nyb-9Zb zjlOW`1>5I9EukL9&L9(6G<0BKsOxUD>HUigtv8PotJ6-DkcW_Iz_)^%hA3vg3qoy_ z%M+BVKr}8p#C}fDKC;JaCw52F=qHcUQ|+|+-ezPU2Bz+#o5z)zgubR77L!iYBmt-W zz8Fk-O=}kCtZu522hU|xm#OE|4-bo@#I5nP^ik^3&j*+-FS$SQ@yF9zy_m;&-Fa6? zQxJW?hRboh3M6qc9-F1J1i8lZ?#f2+&CoFFY{X&LYgV3T1`KJ>Fj%inycXif6&LzKoddm%5GZDee4z&K5L8r~C1*Ld|W zk>6x1J;tRL+vNOw)8U%!WueGnm$~6}lduauU@JzZbSva0xny1@?Za#E(I!p9FAmGi z?st*|6!(|HnAX+-Z$zX_-vfWwH)oihro!%BtYUlBw-s4(=<+q)yusnxJ<^|)&LUcy zi{*ACXpPry`|m@Cv5@-jYpGUVAtd!s4j$a1sr&95t>xWPUs{(sbtwhR7uUGJ*$X32$6$UogtGcZ8WQgQ4PWL>*`)XD#{}@E zTqQ%n@`vddFy3r|>}}T@jOlz5i927FujGf0<~DAD14zbuhV^zDQrjBAJ0`^++@@G~ zW~YAfc&|0UDyC3B1|j=E4_3&1Zti!Fx3pX$06K@nf_DIdn9D5aJVEG>MG2s^0X`wV z^UlYY@O6Sm_gtheE9V^3_ZhsRP9Q%G-2d#apVlRm93?&K%qes6@?<_kvYQYG`1I{d zQLI1HA^5?B2b5+I1v=aBJBc`pr+h-ZBj#F|%gQSA&=`y+7qr826z>Zo=`}b2tT9{K+1z^t*-%sEj18soXH)kuMKOO8{*Cw zm;!Ly{C{G{i&3{Tb{i~tF3CmEJ!PbZTPS~fG|h4?rEv#IO4oUtz_#L;q2&ol1g#}) zqFq0^ILPPyf>Y$?4b(Ke#+WQEX%kn*_S;?y+$^wAd3Ul0eL4ImbExar(pdgW2LUrA zTYQ|@e!xW&m=W2@>V&8oWy-*QHMvpI_m5MbV@)0&LNvtl7@M7@dNc6rb$R$S*IId4 zo5|mE(vsr8-p+ELtZiPHJpGdBz6zUC#89jtGg0k?*K%?C&ROVHJ)kn|pYeA8$5+1S zOO&NY=fbKHsAaGVN!hV_ZVH*uUWE(qt`xUA>bv?Rpz{dQM}G^-Xuxj_=^qmmh|99R9yCn=KLl{Kq9EQ(mTfdVMRk zq)`6%Rv+?qi)^j<<2zO5SA-9@yn6k+4j3)ZG?d=4&gaAHd6lSt>61*%Zzn@uL(fMOx&G5-mc!a zS2+o6r7ZK|9-Ej}+-2U6o6uq!x~<~qKFh8Z4Gi@8jV`v*i7JxttI$HDB?Sg2{ z6%{sRJ8{Nl54`5>w;Y*#UsErsgWN+vjVi8=gKIstG_jfotMokFp_ZN7SJG6mu&Z|a z=o#lf{~~zJHwm&kkT*5*?;EK@v*&h`WFRf-B+Mg>h}k%o(?0JcdatWVw04{R!})O3 zh=#ix2B;Mk*p1-EeNc?MwW7XF@=2*38cF|X!~c^CXmF`5W*$nixekjf%_3i{k!7c4 zI*h>WV*Caex&A1hO-I$Fqq*Mp>u&@;f8-sC9bK~0+#Q%W-~UJv)g*(7I7|JHu}WF;%HW}|4R8Npg? z#zi_c&AxP!bzI`#D->Z7z4JM?LPuogmxmWWe^^oAH!d5q?h;$y)IhQiD!q>m$bm>i zwhk37C|soUHq`_(o>Vg#6*wqB7G9l^8PJ}b;uZytU z9=^z##xdx4=+7^T#d#p<6V~u)jpLIVn&p^oD=N-M3`iikzBxNpJ<0$3-7iQ6(R;T( zH8#l|g0DJYMR^J@Ej$f=&6$Q?f3sb~+z3rop5UtCHXe&G8(sZTw$g{f~Yhof?IruIO zOcpO4c|2)PEEuwfQoiu8sJ*}vtU^@Y3}PzlfBNZ>Pl?AP6>33&ZQE2Jd6X9%|Lt1Z z{e)+o@00kMVSxH{MwoKtSMW)SyrvAi(YgoJEOJVs5l$wJciaP`AFex|u^&^uo+h|> z*JN}oFnB8KC;{BvLidd$i?Z0U=}#MCZ4p*)bb+;O22QTX`zq+*-WOVvD;zh}tXPOF zl!mlo0nId1T!LXPcA+^r+eX1Xg+k{>{Gfdq58+D6%}VRs>Z<#z|J~jgdy8xY0cq#3 z^5?Lp<#&1HrmKNB6pkHJIAogH$7AOH2gcowdIsBE@h_pU+9S*~NKJR0tUSGxII=#j z6dzjen|51Kf{wYva8>P{`qH(3WnE57$0j9mBRUI^Ox0s`sSJ92^&?Y z0cvRFbz%q3!UAXK^4OU3FUNcP(=eQlcaQgzpJIQpqwb5#L81s5!3YOCT-!2PSz5~q zOOxj^Z6`+>QWQa06XIpG#$v2rl?>ii6Wy2(i5B@nl{hM;6)=-7eI}3`-d5cFxqokS zv9--B3A;_-zXCcxwRV<8O^#e>>FYn5_zcd-&Of3>s4{SdJ}Tzkc2!?sUs&}g;mU`n z)c_URI5hi!3!pQNlc9I+3EI>bEHgOX-xksJ@*^xV@y{a?6j)>;30<C7geqgR8c}N#UAsrDd%!0DyIO-kw=g zryj$^I0f`iSivR+^z9@|9s(fb9n{1LS29rkIwBl)tgIYQzaDhU!x!Ewwnonzgv+7- z^%;6+DQ@qs1pWgptB1*Chp6ZA;g|Ik-)BHsHzs*xU*c*L$ARF7Y^u5L$anBfjl81W zVyVs#pRDblgH{e=6*2bThzd$UzD*0VQMAT9D@ zFdjlghWopEvkrDyJlQwKtb(@7;MUE0Q=-3=)TXxgVUI`brtQtTy!t|2CsBhk&cFZp z``GzM@K)nby%+Vlw3oR*q&=KjE=SuDBvm13DxnV5ItWZRm!5+@9%znj(c66Wb<`7m z>b5$MV%BBd?8__Yg9_v6F-RA|a^A|fv9xDKOZ)4V!TR!M8AWH6?21eYzimiuYGG{(r6HtFT9*=CxpYPkz@#aUz z();wq+5HXA*c-FqZr8AfmBvm8=oBv#RjD?8eEZEljio*K^49zFLx@L-hK+G9^?#G- zEvIQyr_-tH2JWq3f@Q@+3$(%c*L3Ya*ja^ZDNAR^g739G>hE!P^(mco3X4_>!^)ML zHImahz8;JN(mW0IEjU)WO}4D}&SpKnu?@^__6O%M2{_?uEya))4l7-S0~#=1L}O`~ z>Fw_7@TN+~8JFGllH4Q1biQVewd8eP^=0}8K~SY%TrM|YXnU{J4#FqzP0{_%`s_N0 z!an+so}Z1+9(I+Ab)*p(i~WQ28a1Ql<%E168rfyN*M*io{hM^KkiXf8YN=CNi8ps& z9V_2X%4}-_nucTV*OXC3A!^6sNRizy@6Sy^{#`!OmNDUZvxLxtvu-~6d-0>0 zP-e;A#uHKiNN3sFh(s&VsEdT^-+BIk7lH7Sf^%fK+RQfH|BuaaPU7Z=#h8-RLS zPkTa&c#+U?h5KhDQO?K(g^$|KVcnU?W1)@oN#6{I2KEsHQbLf+Xz-a#CJiV1!44mzuF4H&lkNjK6w3E3wH@eS`qlNcA_YK`BSR1O3n zCRbIi-K`x@Y|#$X_wV1FZS$4YMUJaAPS|(xn&{j;YNZmi?(-Go)8blbN-C^&5L~CT zee6uqYHvdBsdvJ{++BXN0FM(bp>`U!O4f&zs5(B0&1Pk*>cQ8f-?^7Gmk?Li)DZk6 zj)H01BL%2DC?fY*;a5cu?+GfFNj`XTZ_m-O)CM_DxL3$&&UGU-dG4`kRInvhZ_=UE zJBcraYBBrhD43rInp0nkh`~8X%j1h`B;dq892GBS@!~TAjYaVoo>h86|ZprWeE!=35#m<+>6 zdC{g&PDF$T&SM63A3P4HeqWjTtC>_NFYjW;2nMY>CP1 z>2v6-YY2uQ(e=WKbjc^7r)eSV)!r_|>z-lI9Nbo-Q6DxX&i&6gE$_^ir4)zPTT?AO z^_vn`{`(YUCew9%ZEm0XQXkHw&O6E|!^Rs!)|9_utvWPSmElhIlq?3TA-U#gw_|O!4MJ#s#-9rKQRG6 zNZqVm_}+i;xvK$;3mLdp&rAy4^{2GNPz;ATvt!eO$|dttLFB(&Ze#4}1^vic7imcz z3zKOnla~T2Oz%2x9J0Zr>O`sUVXZ~zIV{y?>@}g1 z8wj;`UDRh{6g-;gIsLcKeokSp=jTmgpZ*}qn(@mE`)(}zPQBh8Z~010%`xb+S9lsJ zf}_7s8!kryobS({I+Jh=B7r)dR9l6_=rD?qvM_K{(&;;zqhD>&ImO~|`>yBStRq5f z+nHVJYrd=*xZA|TvLrgmwt0ALughe-yYDHUv~~Pv?r%d?>g+1u$VXgX2>>3XL(gVj{ht>yHQ86)2Js^&>_gV_-lX~7qI?X z`hL}_Tde)&yolz;`?|3t8?W2$^oi}?xNP0Zoo{P)h1A@Z${jU4AG~7fb#>tRt zmUpMlfStS%jipsYAoY*%4}i?Hecjc_GF(GKeDS4$5sX?GC1965;e{VFK4h=P)P+a` z&A-HS9i#_gY863{(Qu+b;Td?$ZnuN^#>vO0e0OI5^d4}J^L{OlIFrW0^vQ2uGZk|r zYr{ZDxgVPUfCb1zZ#LRJ#;nnt5pu)nkN`|Kw}dr?GEWouD=Y_@f`i4C*c`!M^Rua7MDG*kmzFKfKP2y5&r6bID9+V0@oc zYrK8LYreQhyl2orv_+}$05yF+k?1P$))?(Xg`2X}XOnUnk8o%LqcVjX_% z?%lPkyT6jJ3fRHM*i7U3QXU^Yg=CJ?11o?ssCrxw(-`m{zybr-Aay+Sm19=ze>CCS zm+_XvMiVRkw2C=&;;97cod6AcXYeneYS(~bzPveiFp0;+w+9Tnfb(uWi%|G%9$Ag2 zXKq)YhaBHb21d=Fn;O^ta?Z-enRYs~TU=2Ay8t$>sGs0idElNCH1pv(fKh&acb^x~ ziD}kL`(snx#%0E~SgD<8$}o?1m!qw8Hzl-G4w>bU)^Diz0fqy51$VW;;R*- zGey6-pnC7n*$BM+xqugL$_rIde=HY{t>M&{ktj@oJs;1jp!y$4Qq7EY->!on1rSY{ z*4w|bitC~fl(55Gy0) zmINz!)ZygR%w+|V{`i;KoWzp|!b4o(4PC}+0GtA=&cdy7$%SU08Y}}40j@yIV_$%O z^|a2?A-{^p?j&Ge8JjlI^m4tWOd}_}&!xRYwSn3gds5#80qHhxiOIETvjMERTi#jtgo!?5@D$nj^W3f>zUfjH$UUoh zJ7a*$|1?&><&|l)wM&yVrpsr5NHwuM_hb~%ga@c7U2uJ$@T4gl>D> z61{V#$?U7OPde5sHAPgt=cSfP6r;&$rIUZatjO7Av_0bkXg4kYdbmt~-TqNhU}?R* zM~HxNCm?rh!C&jC{`uDFs{9}-Da$K z=7l-Mj5?3#`>tPfz`=}~?`)Y1t>LQ)jn}5nTk*hvdm$%OrJHqSc zvV8#S1R~O|g*O%l;%S6JIkMHie58K2X{o6$v4#{vr(gbDwN>E>hU)#h)zABB9WXs) z!U`}~g&*mvLw?gJyU_oO8~--yOQzt%o{&@08($B#%}L)L*6fU-xiD&#m?MhkDC?(|Q3e7hga55?=LuCDi$>yy)N zN)EfpZ>yg}O#&le(?KP8{F32J-{oObL57nJP3&K7;stQnFwLadG#E~6_d7_6?6%{# zu5*iTw=x}A1~*vnfrHtv0U8W!A1f=+-E^DQTWY!hm9ftueqf^Cw#%vsV(1StU>)ev$7Dg)H8t!DqyaRC zl2uFivX>t4-EDPB^k{d##(kBg{$%>3DGKRcQd zJp(pe;Pyto_W4)V2wGZ2Y44#S?(l>k@`k-4QlHN||6KA=G%_FVk*$28&kaV_%gC>h zos0|V*9X7ZMefsixP~hRK3AdqMkhNno&6pn?4Av-CPX><@M=A~&nv`vfg8~c84s&Y z!0z0p?&n}!;s+&6bDg@i9zH0ENYlNrzPh+RzZFUDA`yP2R5reqmJ9YUs^f9ev(3jk zKlnSn?)W92c%%mYSQpjE$BE#Ad!SNcSA$c*brrej!J-R82R|ZlM_*K9NojTQ{E>c( zalUNpX^_a(T23tfa;n2#nKz72ds`&OetVPSgfxn%#3k&vH|di%3;t$mDk^F^UQ!E! z0Sw+c<9%xuQBcW+X5-t!BsB2xIGNhmIlTzSL~P^s*U1OOnn4~*!510fuaj@jak{Df zp?@Z&za=vZDRz|qUK{`28I44NzVXzyfPfKtGbK>-3p@k!!{-1}Gd%2KU;0wbEznf^ zoB+Gi*uk+@C#MyTG5L(C`+o2f9fBlH9oNZrtWoCio=S)#X{#Um@q6czw{EyNRaDdu zpgWWOlf+2G{Xa9ge(E#P`B|$8J?>l(tiE=q>Tv~|$fJ2@_O^$YJsQF}e&6gk8ta3P z<>H+cERxSi*4Es}2^)XitK;hl{MetU?T;Z%i;_Al{mw-sPLC%K2y+W+!3HNQ#MMA@ zou}m8!9+eCq!;zux0#{70V>xszGiz`7liQL)UGB6L zZ&x9$Vg#Opg({J$F)dYl$J+~P>0dUV*uild8Qap>v~MR0>1U}}ax#rDqORb8|BnGj zGd^zoG)S+9omRSOt&pYgw9*pb(`0d((_76E3GIZjp0>Y3$pEQPEnr6OoAY=3b-uML zbOdB^V7Lj8zrQ?ph$Xr4@FzZun8`O3|3@x>dCVcVG(4kk785fAacg$$KA#(@(UZNe z0~0WDoKe8ZbJ_J&I9UDF7oYYjqthuOx{YN4gLH$*yOGsAS&~(4xdR&>KF5bI7bf8D zX$M@Ntp#sK5_rtB)oN84M@qUka*fa0RjbAqxxY~JKH7BIMEkTay?Y6ceZJYvwRcB( zp4DI_U_3k9U)r@4>Z^M%U)n|e*eG=OH+tdMN7c@9>sa?P`_*Rgj?jBnK6m}9TVmQ}qw9H}gQUa= ziGxq(3|MDRlvR^Ip)q|jg6(e+nl=Ec(Wvbvqm*VkrdK!*C^~>Wmqy!IFTd3-b?^*JCF92 zax6-m%>T-s3ACN^K;SUqL(zt2a^iEXeLw3kt<8^#-ddp0Ncwogj((+KV3w?;9O1&J z(>jVF4QyfGDP@%%A3s1$Gp^xfV!{)lz(!XqBmIz5YPG_;obuzD0$}#Y;C^}u#YR9q z-Okl%jS^O>s#X2CPDYef*Yx3wp{fHR1_q>0xI0%Y9M);FP&dpg#fu^YjbHVM({Pp) zCxCcG-`dz&bIv`GwmWw4Ld6qPO_t55wced_YUoIM{$Z8i=)pm2(Q53NO9C1?bYT>C<$~l2v?@OAv zE)b@(0|OXe3Vc^{-VDl1V^|%j$;zT+2HGvfdUv)+BT!&>7}Ym|Q@;Ls6>r@|BnQ2X zsrjmo6E4z$okEJ8bVoR|0~ctU3(_?ViAcve9>E0%br(% zGXu$&;csc1pu^*>iBocvZlno?+=sEV%k8oEG7<*+5HQW(*2Ji1L$<6gl(!y|$FM>V zuZs_Nht9psOghO!#4RDs&|by<22XysA_S$3CRp1doYjfPudr|zNOF3?lys9n4pV9 z>FZN{&+yz0R`+SmN8Vw-nQ~67G%Z52dPJJGi_$ zHrPHv(SvRN3~ax`>`tg`mZcCav ze_tI_^2It_(>n+JXr5|bRqRMP{a{vD%!$_1dx}{gHPN@Gf6cwjd%USQ2DEyv0KU21 zXGKD`oK1{C!_j&^qJ=vqJEZtWB@+u|wHU4YX~tRJG_}VFbaN@+(h^a5@htp|RkL`A zVq4~+O+OO&iTTPg-hgvO^YL06Jm@eN`k=*w;IwMnWVLAB=%AMQ`Vdaukb)T8?tIxg z+i?_4a@*0Bx<+-IiV5|~@fh7o@Wjc?(at|?FnS2sYhi<)0I?y4jMlW&}}pg{ia1Y1@uUiZyD z1RV`FP_WZxj6n0n;cl!wlyO zWs~&Z=qiSzu^6aBf$)Hnve{Z+LSDy7bLV0~I8cbu<21Ceg5)spM!;GJR|pE=vDYb2 z3dV|2>3)f~`(D_)xs*6Aejc;%8sY0V(BA04-&OQ;$}>xSd8R&!LT`nO;kP5x z2bkfcei!wiZfcvY+oH|zF$5APILRxt>?)|Q$S9{leDJc|*sDEqT2kuwyZdY&P*0?~ z%A?^>%?1D{<4crk`z6Ho-dP8W2-L}BMjPEm$??TWs1YyWhSDAslBTy?_g9*;Oqxt7 zl&)D}P_0L$va^Z2g#bJqUjP9mVG|ekk#g=0IlF?=9Gw_qRTDZbRgda4Z2J|F4n8&} zSw8kZvXBG0eb)z*YX(ga?>zGOMaw^S!|Yh4Kk=!qa!+(PKEngaV++VOU)zh_)LW~V zwMnxg4S9sgxULp^m;v*DpU2Spz}GBVw_7!0T8iu#w{f|Bug4i1c_P69C!n@yRmcaA zVabajD;^EmH(4?%L={%wi{rt4-L5}l{gGc{G?9unl=TPMY zFFV2%2RAn=M6Cd<81A<3J;BV4An~ECALrohzU*gv#5&+8qj4oHu*^lgLXNVm?#CrH z(MM>>SXia!JYvMid3Qx-l<7#cIP(nyu8b;%?S@Z&$tCz=yDDCmebwuB2Z|Fby9~kb z^~FQ-Kg-h5dZC7)Dum%z@6f*Dgzkz?jKS!8Y*`ag`(6TxKEUQ)Kzm6O#5ez9n^v4p z#ruNE^nCr#>~%}ZopUtGsguY7KeBCwJ^isELZnmmQP7pC9se#J88+&9)>g@fmQ*F@t-F~o|-CDn}!AuC+)o+7`uV~OOY0YNcCzNRj7do33IR!jZd z(B$e<>#|v-{pelmuv@Fq>HZ?s#;NHedCuj&d`sf1ZYH=REq^nu;2?y?X!e02Cah?B z@r6vnY#Tu_zV=i1dIcB6Z1fz!8zCla!len5LI^KSB{G4Jo7j$tS>YvkOr)iDsVrjO8SZG!aO^%8VJ_o{ZEoi0_ZXt+8GhQ^a3k(@mVxV#`3k zP1=_hMm!WfKGm1PVy0?k%@*AmwZaI&Gd7b3O|!@0_n@Wwu*!lx?xC2IX_4MLV0SjJEwBKSna-x19#i6Iw&1$ArUOZLv9-ESUq*gj zz*rco{Wi(|;>b!Bv<$32G-;l^gQ>>x4^MMp1w!*liC9>wY-`!ILTE|!)$N8+djbW) zq74L$YYfsQVI{dqo9vxHRTo@p>Ex$D?LRtzV$3marj?}4qP5+ zdghTIs4@o;$XYG5i7pkjAcII`78;sjyWsQWHVMpY3UFG2;WOt}rmuY)t9OW5P$eI^ zt;AD05G-0i)@7m7yv@+n(0vs`Zn7MZ46q!6s;T4(!xq?QC^2LYT~TXTTedi!3aTcw zDdSbv()eE4ww-nrHf-F6JI48oL0WcO@FBcX^p|~~zE0*a0aj?yAdCkXU6RxpCBl4W z`?T1$Xh#fAucL_=Zx-&svgW-q7~MfvCgQXTzJQL!uA``HunL0P#of2vJh)s3R?5*X zphfB;Mf`$hb|7Ib>q?IGW*b9?sqkUs(^x6Ti>UC=0 ztAU_6mO|##niUgT;=gT$PQjn%(eZ*^2Ilh&N)(j{o6^bT{R6P{m%eRR9=rP zBq!{FaIZVj@%Npe1Dr(Au zTqTWh_3XPimpjEuavQF5J6&PY4v+c7T1J+1wHx^q4$tl$dt zelDkf+hpLI#R{6z6hNAGWyc`+pbSrasT|&Sy!Owz{JAF+L$G#jRPhlfzY_pU#F}ui zw3bHCA|C&7f!}jy_AG#(_{~+y49|{;gweP?A_gENq5}K3( zizW}T@&6)@Is(4XW)dA9PAj^ct@G`CC~lmL?M$KIpCT=mNq9dlz_JUZraFm0Y&%!N zuqJ5o2nggcob8-gJ5wbL{57`bEtZFV&*Dl`591vam<+A&iqLi^DMR}ss3=Geu~}6u zS{GDV_{jb5gjEIQjHdSofG($mgh)%`EH+};9W6leh?(+=*6KRn5(%#3Jm6=uwN&(( zP)!1!VE_esuqW_1EpIfbE1?&UBK1!%k-@^_-MX71h^Bo~ZYa@*HG#&+nxOApeH!7z zDqm3UK}!AIkeu2V0MMzJc=OP=!(mYU0NzvSRGQFx z>2*J9r&rjc0RZyNj=R1lL@xX2Av#~0U~K-wk#rQ_cG=LweA?(8C2pGA+cU511p@xq z5s8$01j}J6a z=>1%fK;R{uOG5J(*OZmbYcWe1^N7hcm!VOKu1*p>Tov@0(j+N-6bs)B|>ajSM;Vu#K_M)kS}$ojKtw&2@DRwYsON2FZs zZcg(g4Ohj#uA34%cn^}(LUV_`a6_dF)$J*P!Ohj2WAmt0it_th!?a+6~Dm) z_^yr{)cdt>8t;itj(6Wp$jTyAc-MtY$2!>UImGm$Kg+3*hHlkTs8+NsJqSpB*l6MH z7p0ZlZwu$WGMY;D+$?troi}hyCQ9iXJ4V^tKn@4gv}qb$ z&1=XwWoQ>AljUALw)2-C5KLDQATY1D=Oo%*uq5KGyu#55@f3pD)TOt6%IM!NdrQ*T z_5h5BX)ZodOz^^)bYCb{B=(}^H;42za&$z(6 zmWBR1nufjU$ZWTeW)*nT*Tprr2(NZoHK9FzG#xUh1KHp~awHy8Zd8oUgz~ zAmfGrDFZ*;WD}Ftm0x3&nkJ`5YV9rft3@d%wh7UGad_Bg#W_1#fPn7v>z;noeJOHx z@G&IfE&cDHHu>ZtydU@363id^RjhF%DP8n*A$%?$=v+KLwVM84Q^UqHFvV!LTd2x< zbuh`Y_U55P3Qrxu@3g6H>*SW7`D>yu33lXMTb}lck7Br4({DaimIX zOW7^xS+hktrj8TkW@z)@c-o9PVp`9P~Z@%t~ zr`Zpt3y8l?H~)qWi+3qK!>(8T$-t#*W2oUAcQb*Gx7yo!rCiHi-N4)yoB$$L$FTX=xFC`%cB@0yWsiU`dTE zz1M56eX8$q5<$Vn`s|MV^H)y!H&h=Cl=W?0Vdc3)v0phkj7Gq(uc|*RJ~Ge6YL@1I zt0!LBNila~7%APnfKGHogk{kPN`k;vS!Ea6vBb{y{Q(^{msGU{`P`nu(ToUtz^)9xqdQ9ccsolT% z*2uBoT0HkQit;gfUc1>B#H(hlhwKfEzQ-R5is}7sVdp(jCF@V39x}slPV+O+*nrqs zS{%6Xsk2NtA&n4!x}SecTeacW&>{~R#RR9HVE3BZX`z>G?jbvK9%9Q?@IHes+w~B} zuj?5NL{XmL#z8b{$n7*ugVGfP8QPRTUqu9qglpPW)U~!ou4XM*X`@iI+1O1gNK`-g3u(Pcm3%`VXW zja2S8zgm9Ws86o^L61w1(t<6&Af={K+B2GuG3<@9u;q5YL^K6!QS0-ELxCdTU@HGfNAzP`O6#TM4zNFN6NX5r^sJ?WQCCP=&Sa$NA# zeCRMfvSwRJOPR<9M}Aw@ew<)uIHUvbFIWZ@Ns3EP-pA{!lp2%AGRBsY$=@goQ!Z4O zj0b|bW%TY#xd7Hk7i}ULtI~R)M!)d|1b!9XSfM;;nEc$Z* z#V71v7g&eyQ|WAOMUT`Bzw!U$(S~dX=f3F=n7r*(Z|&J+^^ca(+;q`VS}-NLvQ{7s z5@Du-2vMSVXa3u)xLTS5JZwp;s#k6<*x;Cy747N6htHx4F(rR6stL4wsV0-!C_*E4 zhrTs2QU-~NhC6?`QEuz~-uEL-452xK03|)xW|QTVzt4hoi)!VmWVk)MEKBYLD&Z?C zn=xc#*3f`mUnZMX?7!tz_VGFUNIm5igoVk|iC`rq z%um3QBbHT+Jcm6V^MWB@CY?Lu(vMMJg=c%qSFs0ipT(p7d^D~>fphF7Lm z-CABDIzF;f7nzyl4z{{5$^@E_DXGiH=zZk1{g^X=4P#l4=q%8MATl$u82^>Py=9$b z>DnZ=!Fe}ToB;OvQ(tmdB~up|58#G@Cx)E9NjsiY49ONkJcIk^Te}U)p*zRDi>f0& zTX|dYkH9ey`vGz!EU=*qC{n9dtH0Fm<9TbGD0Uq=Y9q2%oo6a5HZ5=R({h$xOrCsf z`k0+Y|LH?~**4%Frpo}{SJ^v5U2Jn&f90 z^TyN>dad2PMl6I!D^i?%SutgW4F|)tDXi0iWoYHs5~t59`d)GD^rIWZ%}r~l){4T& zY2!Z(qA-xbynW+uTBscE__8#7T=P1^??(b#N5$w#`s~2dm!JMHhFk#ihD7YW>B0hA zoi959nNc+G`zDem;jviX5RLFw(215bQh4ZmeA4}hKrLv|2#pdawh}W4@Y!z|Sjlg_ zAoBbgzdal^jyghpcd0cCSlShKFva(z)sm)zWjYN4t|XSCNp_L(0xff-BVV-g zKh2A)s4MkK=-So_ulI(a9t$MzT{ZM)i`YnA~Lc=sO zZ8QGv6Q%xq{&~STdEug5B0uOlG?c%3!4Im_`k${<+oQdK)4}kVuMi0h0S@+M zF)v>v+`zc4_4&WIrw{p+N()(z`$=EI$O1QX-T#@*v_F5Zgd@(EpoD(}w=D0p5 z+$S!g7!#=o?%{rHgDSmvu-V0ya!A^~Hk>Exj>NBU`E3BBTu}TW zjgV+M+?h&nd|))u70K&`xg!~MAiqyXl4u%7dv5L5P3q56gx=Ot!hw9eXFo;c&>R!H zX*cnz>dW;6j-xTSM+`L4Q^c$qZ(>jlGzu8_X^#ajvl>Ccv=p=nwZwBS9k}j4LOm|B zRh-$j3Z*?vnx0l1|85&$nknv|CZF-Hl8a!HSm}LA`m&h8AQ@Sy^EW z{V;Gu2xf|GaYI~)b0OA={~n=l!VqVsJ4`3Y-%qurGuIRJ`uz&mGp{*AOwSQ{>q4@F zX_$Pxf5W25Gif~YtL9jGw}ok{aPMNgos>Y`bsaF^lnxjG)o4-?Q0K14#-nj2^8Gu! z!*zBYW5~f-UxqCw3BXX%i`uUZcviF}G^gR=+QV2dJwRN1WL?)%AXLp7ugB*h!V*~U zt(P3t)fz43oWrF>0)aOkTXTThB5U_AkC%uVqa<+-yO?7L;=v)jBlFV*TA1Cd`V{He zykvqd{MEaGbE)%y0hVADi$yai%We}^%oV~uBGi9nE07Ek|0WB?=n_XJAJce&S46+} zK!o*PdcLm@2GyEj-3jOYm7x8l)m8|T*AXD}*A8t-+N4b>Cqe37j&`Kf7CpoXRF^c9 zH_CMB??hCK9jc3TMgI*Ei<_GatQ)~UVj5(CsLUL~o!N_V%oLyv6Dc-NU_m~8=$|F# zUej(bTCUxyT~$jjj6tR1YL)tKe%y}Sy8pe=)o9KyPyc}6e8S9e7hTZ@(Zm z{M6sWU7B@@Zh9nAwu9cPwnLBSFE+MJLuXwI8^Yzou$!(jIK&w{`+Tgh7)2-&=nT&Q z8j=ObU`u)F&;0BV?^AfTnWQpcgs|#UybM4+wbbmq5$IH-S{Z+0Y$>+xj?i1+eem}65ou%5;mV%o`p22qGOFR<=zmVXNL6G z{t)XxF{O=Z!V@MrR)OrN-vxK0f%Wb6Z%W^juw$9i=IlI~Dq$d+XBG|2gK??gvvCtG z=Ke!Owi41+wwJ;hK_cwiy4y!2Pz$4>AG~>f+gnZ_<>x6u4G;P_D&euiIiGz={8gFs zO-uUxZ^9`em%C&P{%+hIjN9k}bxlTZhwRxkAG#ESPSid$?12oAZ4ED|1PeyRAz~4y zQ$R{c9RvzUtH};AEpLyH@j2wT3|9^Qmxq1nM)qGGHd0UT0}rpSB4ntesMl7biyq{7 zia_v;{Z2N$U-PRe3MFy~V;ZA82jwaBs6!roal(LObKIf1=HyEFj&&f#QnCWOX;1bv zpUwXe$B#Y!OB`nk+8C9W+S}e<8$mGN#h=IS_onWsXc5r32xcN)J^v^{Fp>p2dB`i}jGy(9N#3)|Z?A;yV;S!8`WKYA|}1EJ43b^C{`( zY^DD-mQ0`GEMdD$Ti)tk=|C%m2B!&gI~HyFWNjneDggieJdARMRf1)D$k%)|UUTTD zS)?N?itm16by*krh#s^@qlUeTkvhH}HZC&lL^;^B*?mJZYA!u#9shDYoT8-iFH;Lv zXp?b+081N?KQkgCllQS+l(g!1WYz4U{nqtY;n597@0+#ks(2CeQyPnnW7 z7PW2{Somw3g85zlKmt7LaOlm2w5wIgu>r>Z>I!d&u#EFTPHZ`w4!C#8GpR2i{^j;$ z@;de=m7NZs7d(Ks^5g2lzb=+M^6ykuovma|L@LRDa{&xw(_C4Vzv06qKzE?#1PD}V zj4rCE0YUV3oZa3h6`c}ZcX4Mu041+IZ-2ks`n>&7F?ZuBOkd<2ew9U7__lpc32!Bb zsP~Jb)wnVHs-Sm{$5VOTh3ET>@q3+$ff8Y*p5RA%X4nD`i$7WkNz_EduUA!|Q{=e; zq%2&{#t~$?3pNVxJbP&{=b?(T0zS`Mq->|^A?|9Af&5OLYM7dWO-ToCh1t%5+q206 zJROdpve4V{QSr+oD(Mj6@b*N`O^0rdP3|A1*a>EMD_p6%$t5B)&|&FY3$h1(B!0w( z&AC*>31#UJZob$Q9MpW3+%2i-3WM>g${Rrk20OLHJ!8nOU-OdAEWZSm*774j56ORe zTKAUD{{{8o+B(fltn>-^QpqApHS$!RJ(XYB9u}S(bWLn6Wv2S)TDWg;jfmCFK_=vt zNuqipkJJVL%1&M@n+LW#-Hax0{XP$u!GZwAJi0tu>3>I`Fxa2)amMQ=cpS$Lvl=b& z&WYsya|Y-?rkKxjTiv&JGlh6($&G3M*q_)DJ(iQpvW_or^wsxpq2zOPXfTzr?>{*X zL6frx_b97Hw}P%#drUe1myMx;XPrM%&4YmNsvYXL(q#-19lDe zVH;K|k*TBLvZHelHLScA1NlA@iR?Sg%2Ino)2-*{8DPHZ2G3YqVA}c_ZvHme{z=cO zp9d~1d>7#0E3`a_!@eyTd2RY z+r%+j;2Y3p=t`8j@HlUO_!@40`n6fcpa*tP6OPBD>CuS+3q)oRYGD4`Mr>LR24>}HXL zi0{A!9`XE#=1nlsgmnQg#cl61VS}tc7KQy>hhV3Cm`4Z-7nUCgr-fG;olhD&FoayB zS8C@SLYGd2hKY)HpIdcnCrhS8y)I((zRnM0C#WI<8a~;qjG8~gm2&fFZ06ynBL!2d zl9QU`yHtPh>-{r@a>O9TqM1)>qH5*r_!XLHkO=7Sxou|EWFUmWvaANaJS9V=GRWn<`Ge?UI*`h7^z`M(IrS!KcIbsa z_&{o9gF(vb0z&*-R2b|ZtuOs<{?HaF{B=FBR&r9&_?!v)bI|l})xZB1!!m8wROP6F z0iH`zo{=nHXniz9B<2yy7kle(#V8i-+e%z;rQK$rSa^I!Uf;UEI+3;w!BX+nQoOh8 z6jT*~gqU{r^QF>=+(?uy2~Qg=yG+j#r=YS~&na50D2~m<2-gU=^is3NTjY0l#-f9; zlrGl(@%T7=LgF#mzgOE5EgOG%GW8|d%1QMY{t2d%0uyD1%iRZ_*~fSM>7`{ea251A z3!!PErCwUXmuXQ(g}*ev==zIz49stGL3QfMH^yJ>6C9~qS_0O|f@YG@!!vtF#WGQ6 zm+<`nCT&B1bWY9K`)xp>=j|;Z6`4Cyjy*x2S(E<`iS168QONkZCVq-RjYiOoO*C^_ zE9UVzv;JqCw2)r=LVm&A(L^m6)7|#PJ8BxFO#mS_Ue%#^ma5TWIqF(EY)(=CdRv|^ zSJ+58SO3c3i(-5E&DFLr;8(LSnx5KCUokbCK_Xt>A6q?SshOe1R0PM9tZ+;gm%eGW z$|%ghk+L}&^~Wl<(7O9RfI3UwQn7UcH$>cq(j}*|0FABfb8sA*g&9>*5PeaF1F_hB zk(@s~mIy6^{?29rk2q0RN0}FGr;|+$IQatfz!$risinX82QXq3atRjo(*3npWSLUC ziC=a4j$a-|g0WxKQ}|A=t=<1U#~G-1Ld2M``K6<`H!(1bV5v=}64&fB6ih*3jcZC_ zKD(b3%Ok)6BGpE3PR%mLC;#q+v0D(RmR|8LfZ{2RlSQTJ@~|g2cZXC* z(EYTMl6htT;Y#$;*|-*47{aB$YsztJUE?gmqC3+%X+rt#0dahm&c}&UTHdJgN9+X06ql*rq zy)s1ONYJc#NUIa!H8wHgJxS2u5<2z?0a0Kdjk%Y>n7j}R`}a_HR*f(^e)r7ATW{-^ z-BP1C2?8V};SPDikF3TH0r7-ZIvdtY@aTU}?hjsW5bk`NT5-OsAv+N@ze%GKkvvX1v#TUmb|Npp5?LwKDm5 z-J;V7b!ieL7X8IRBXt#fkZkf560MVbuX{KBFH+8kahS_5618#CdY1w-ra}upn;Vfn z1qLBlS_^5W`$Q-S4!E7S-@Ni4^XC1&x=PDpuEt?6A zb0P|x1D8LBVZjwg>mgIUPZ2#S2di%+YZDBv#}W-_OD9%86G`!8pT6-}LYCNC1HGy4%;J)RKY= z1fQrJV$8k;AwPdC(x(;A|%f{z7YOJ2qbsze|)3*A{w2~~K2!pM(fE#)-tYfkFx|>B(D%jiZcj?^~dDAh# znh^HVx{P!cB)}d)HsZtESld?u$a(Xh89=ka5`%t>ELTL-x0q1r^^Ph!6F+oqqOXhuXo>Jw*XB|Q$BsrH+R{=|wr$SpHekeki7g%m#{R(In;}4N)<5>x8o&5WpQ}cj)d_D}0!;KC3e~08_kMmGr zaMPpIkrGJx_vR>W8&<99+F(@`X)t6K#}sq3@_OZUSxwCI>nq@C2p%=q$v)0x!B!HiZnY`;do-K^8Jhnm;2OfW&=;@-wVns}OIJ%a$?tdlqZy~jl z`I8G}m2@){+D}QnhtDY&fJoaMCtVEStcyDuF2lNtB)Hdl_ROf}r12p=_lHl8F#+I* zwB$;`!L}P1;3_)&A++_9cB;U1$`Rs7{}i`{IeuL!wh*skP3P)<1RT`Q-~tG_d~3~OYgG1Gf% zHBRnFu+8~1^P%vlJE-7bxLf)%Bq_8^M|MEr6_?R=&}p05CNL}}kVN=@W`RvfozKye zrrkRv_>XLM%)I*>ua$hxM+^LWV+V<$m*BChP?v!R8LWg;tBVEXXX$`(QJ-}o^t|_l zeTq5Sq~*l|=r+Z9LSojE=cjYs{W-Vk9M5iJn6k6`PSpTQd z9rDG7)a<}vV0mVutXdKH#Tr!QJjElFBL5sF5;Jv8V9N3=I5_S2DtVc*?4y1*&5*z} zUh$lR{+Djs77OypQ!Lyf0ZLfxsZ-EfO)FFW)chq?tKTo8-lxUy<0*i+xy2$UuHC}T zZo+1kjttGh&Rg^`B+jMHKe~LQ7^SjJ^1*1n|BC?c-){XUDqN>su2LW!E7M9AKq28V z+Oy-?`%lq#=bU~bfXe>n!U_WcdsENEWtUNfj?_6gp!6oL@B8YxdP)YeLu`Rndr5SN z$QMxSfCXI}Q`c|pNO%x{AM*PHRnoY!V@&)6_HeqSaBM4rZm^zqyMf5~GJ8@8DmA;+Esn6K%?C@CDr`PI7uc04T^dq{it>-KZJ&U)7@U zC?GiCAB=d3r%kMDOa1O2Y)ZXa9=*At%0CAN@JjSLs>|<^(P-gT8)sWzYQ_b%huGyy z;J8H8wTRn&NV3ziIVz#uaA;iJV~uwHgM>#}Y_Vx-ErEPn2LZU!#!SoIwAw$>U|L(d zL7*U;4YmYhj4K0r(TM&B6Pe7KGr$yxtf*$tb6;2%yZ;ys1#9hqK0Imo6_8!FM8@My znwEZGZ{g0RO{)9D;g%EmSoD9F#%f|%j14e8WF~Kghs}`;L$A|Fc~y*}|9!mMZMYEQh^Je_YV;~3!V$`mr~D* zem80gpl@z*bSY0>1!?|~RbQejAmiXv3Mv>WX6LtwpqC{G(@@3G^SxLG{*#d*Rg?-Z zHUMx264VmOJLO@vtxflaNe0iPE0I7f1W04m9WHQ0RX}};d_1$tR&Er(-dia6Xv>X< z>T;CK8VrW)F(OnLpExcjj=k7dk1x?DRa8a+s8O>EJC)tmyyunv#V>XQaae0f(=y_J=y31`7!YUWFi9 z{0U5$&-?y_sXd$qyV11m`cU+pI6K0W8XH89GeJG({yvwFt8v0MWztwaynV(YHW+~4 z2TZ5-q&}zkVprUjUAwe2T0cTD9UA~Yl}J!kuroEc|6vsz}uGcaDCi>H<{dlmp;ffDMeU zREy70RTpa%&(u;i&TjjEwKo%zvlN6nLZ)51d|7FR!VxB*1})&ZdD^-cV&JB2Oo1QH zAf&)|_SKX_`+2Rq9c<$KyZyN?7)en2u^8Cs2We`VdC*@L0xerT!usCOQ$z8Mm=wa7 z+FCB=ZedOc%Qi58O!UuUKT%!FaMVM=0;D-9H5MT570ArpkwD%oD*dZfsen6R-*)K+ z&Uj7&fLGO(e)CQ&zo5p)pSs`nSc*|SWSsmbc|JqfkKUku3I0$?2!J`QR+oThZW(LA zml@v;yfIQ5CAWP21qP$`FJ11czhTg`>vnF>kN0=gz6#EE-uoj*ih80L%jf8?1aMsF z(KKhhPHvC?sr+N&z!M$fxwYYtM?f`piq3U zP$bpXh&%&4p=9x|rQbi>1m+ednJEs=K-{E=jf)Y`%#F4PoL`9Xqc2E-J=;yTDX%M= z4yzbk{He|AhGs|{T`+IqbQ`()xTw&6_^FK44ci2M7ycqG?QY3kK z4B${R-iE%Qn8)eI#O1wpL~Jq0NWkt-q)JZTGvK(r#dqF^hZ#N?OZcO`0NJ{?HFb*?m-qdl_9nWX267kAPjv*? zoSB|~h*`6!u?!-+&v}xyPOTEz{v4N4Hic~ckq3->!VKlNIfcK4&3P)F&06^d7>|{- zyS2v(k03{@Ydo0-uOQ8W+WAwlR2C1XS0OQKkS!PJ4q+wyHOA2)K=~ojM3%0rfv#G> zG-Qt%Bo=n~>N#=paeWR!ibpNcWORKn)HU@e`+0e{BOdkuP46KIoFqul^!!v?xuy)} z%fMLnWKYxU)F6&VcDoVayPG(wL_%$J2p2IxF;1(k>@2LAT29+%G$Ic)6;%*Q?NsG1 zHOj5o+9INn{QaeM8h{~edo=bPATgkNY!hjyS(PjJsJxYSy7QFJ`u-zooZk2xZwAg+ zrnT)f9#nfD=N29N)&HzaCgN5O3sthsi0{(${1e}uIu_z^YHGpz0`^Z@93JN)w_De%L-fD~3d&nxe_ZQ2gFQ2$EH6e#njZ=8~fmMU!44 zbvz%+H;35dYx8~0A)3X;Y2j1;AFGBS`?bo>3{C=Ht9IrkY@W9pQAkf~!^y0dMOH&C z*6aJgFK6LcOb{N+8qI2B-AKfhh6|7@C9tp_NZ_4Dpj+ zDZcN=3hklb;^P^bD4ukp2nGO`YjwIcui=aLcit?h671blL0Kwq zO#8r%qRW1OV``Zjez7E^oHVInF~x>uUp2X6zyNFQjU&KbiM>%jWEX;ihxw#7(r4Ew zT}=F}@)M6jGh7X`rV|#3|DUhzMs>O0);3p4Zbz=aEYum7w3kfao{lXQ#q@|e<3PJs z(SqvQ*tq&)DJh^wD~=cZCH-@NVK4gm2?@(F!lb5Jdj0c^AZNLN%WXl^KdTqUcg^Sv zWe9jzijef3r(N~cQMMmS-ZVi6SVl3xMf|MZu8ZX2C5pq^CEJ&>pL#CPy+@^E9?br|0O4Sq|IX6FMjDqJ1hX7I$`Wzfefqsc@;rFsHhXpOS1Rf7So`I-#WAvQ>%!<=1TS zWAR==Wn|DFqeJ|lu;bY`4r`+uiShkk9>T|h(N)*lu0E!zbnzc0QBtEj z(w({00|Q>+rlcjRv*a*2p_pk!fw^cn`}y2w^L7Lp*bR7X(G#P;qyZ@FxIp z`Z-^VN+-Cof|y&<&myJdrZtL=%zeM)UAwo$p=#D%lI!0Cj-F5N=f^p zk2wyzlcA9FRhISWDVr8nSrY~S)_`jtdz$w-^&nHspK5|xo5Pf@Us2V?!E|1XTVjlK z!PFzJF$%1w@t`LOlb?NV){0*7?XN?(#R&;N4~k~;?zEddz5i-E@9utTd@TD^cM@rD z+w9@wQ><10#s2A(in5zcczz|f#OzcV%Zv4R;o+F~?655a9i{#&usn&vQja%UaXe?y znf~uEPGBT+(r?BI5-v8eRba;G&Gz)1%){CHa?8?6f;K}K`_xkEB|5FaQ7XQK+DBJ1 zNMRR#teCDD>#qg<@dL*n{Cre~bth7bd|F=7!&aAGuW~4Ye-K42F^*KVGxwqPa=OT2 z$p`l>-Rsi7K8{os$U#jMCtw6gSrK+KcsL7%*mzdSfDV35`FO`Szrx#A5=aw4=ga*O z{d3pr>56%_oKbEY_AjD&9$}w#ahbm@QxpAm&L)&!y``ed(z5~9cLPLpj?MncZYDow z%<@&Q5UjP0(C}y)nKTsU&6MX4x4$y=fBEnbV?P!Q7HbD-SHhN_OX_gV!y~V`6@+0N zbJ&bsUm+MTd^d}HDWp6M4Fq!3(ol!+!Nj3}K5N#(B}_TH{V?@4%YSI^mi};;P;YDx z#>_Z=B+bngTz2cvS>#F`9xh;lhji|2OEqcRB&|7{3EtDa|HO-OrMu1tB5e>^v$iwb z+iRTt#-!>6-D<;YSiEM7vggjnpyBe<+EVLpVx&nmu4&6jqBsku1E$cw&YE8s7VrrE z{5#KCUpYu@qa6L>SYCD(ru;H(G?~0o$o^_~*B9z#iPweBrvJM*@)%#x+ZQKc;0_x! zaF7XEblia$d;9QYddzREvFr3&tjdc&8oya7u&M9H>5|eaE;7}I<)>fpHtd1h>HdvR z{p-^`Bs|cyzrfh0Fq%J!-{2qUx}I;?FTi{XkD0-kYfdF>Qt< zo*1wgSG6D+m06jc`8Q&V64PE#oj$=8(p_ACKVm{hS7%`cMS2|zI{O~kC;udC%sW$x zlRT^1@Ocx(Cc~S8nHk*ulC9}&z?sTK?6#CiC#^?X1+ShGyNlsP0-9zg0{7(FD0gnQB)Z^0!l#vhvG+`(qh9 zMyAdiFW41rFQ8PcnjctL#Wfw*pU+cGaSAxG)sUk?0wc;;gD)k(eLkOeeab&_`iqe; zlv_+gPG3Ru$$h?iW!rr})8*-`<$Y5e))T!={4VntX5Tc;>@W zj&`Y!6$i_I)Zb2}z66G^rIgh+VX1|ZeCM)f863Hz`dO8--|(-N#-e>BX7Oif#Kq5` z>?;R`!E%A%plmXer(fzW{S@C1*0c=s>WM= z6~vOkg(U~_HxfNLW#-WEQT$I6e)oZxeMrxm^zb?Pv#%lT`+ER7An6zJjMQ%GSJ2wW zLgR+VzLrXI3LWLw0R4|R+!x5&A{9AIM-y0ixM%mS^FQ4t%n7dybJ{p#(KHZCLWB`QNcBcm~i%0(=Z&pi>bRIa!atz9~%8T`iR)Y*4z z#xHayUg1gGbQ0J}FaSP?19psxv z|FHn;V^z1LYPr!S#zN;}F(HU$Ri#M9!;V|AT@9I3yfq9`SUZE5lxG?wUJuT%Kb0Jq z^Jc&i$Nbg%U{M~yO;3MO^Mmh4d>NA=NfC%uNz z;;tt;l=JKW>bH(iq~fvUz<@#a54*)^pCKRIfsZX7l>?P$vTdi~_!f76BQ(GGM`PH# z6Pd;_smF=+?2X(&o3jEPC0=qKnwH$);?5(!R>*+J1=f zzS;3^;C8Xm&%7Bolcs5_ETW`(V)OnHQ|Ab2OoFGdTK5FCOFwMFYiE|k*YOxDv8g&n zaZwwOTR1Ttj;S+zZu>PxT%&!^Z#vtM+s#q;pQw*~gFZjcAX5;`+iJak|6|-aXugSX zvF>dfHHd6i@axv2EJe5glwWm~n4E-l9lO?+C@y@y#$+T}*uG`gODKW%6Y~i$s4wp{@bdX+HS=87bMHMhn&k7V@zNrh34t8(+WRwo)%>cDR zeK*!Wpj)-7tij2N#A*!A;PCj@(@BSJARv*sq?hMSL@tlBMg zfLPmaskloRtArIGNZ{-TO|_03^H6?SaPqXSW^wL^J*v-tjxzU>Q%{dsM@cCzMesiK zvDQ9_k+Lvj;8mK;*JKG8gav#{ioP~Snqa9Gb<8I5hc5~q8nC0J`q_5V_(*c=iV8LJ zv?>xoQv6PD8Z0gBp4mH<8!r9E#FbsbHpdYIiRz&{x>Nc(>6Kg4;`f2F zu9y8~@UXP~cBR65!i0z)5RX@tp{NueRyP$|ArgD=;K z`H?efpJVyQ1_MRcQH*LmU`8xkXeGe8XT=Z=)E*A*Aos`|t|zBE;%m;2u(G%P{3^ z%y!>&^Oz&U%eGK?69i`Qn98qHx7m0TsU+gDYOLO*cmj3PX=PTQY#IjA@>}Uf_vP#b zFq392eS6a^Z9IiWTno&Pa{HKP%*&19zrt9XFQI&6cw!RJjt+}^j>;Lf9$RW{0BjSId~yzwAxF7n4;zSGOihzz9_rMVUTxDhkZKE;O=F0 zfPkk93;@@X>g0pR6>PjKDsl_87rMuib0tzEq5$&W(R;3gEb6#8f=-SCLST!5 z-_GEnL%F&KNQ7;+EWYGhPulxO)XerZg@|-f|4-cuA}8R+g+8IFZA~xH1w?*8_Qj}s z5m@M8?ZdiwU8U(OIW_k{w%$B7gIy|KHfhKDTYe6D*puu%ooorY3GTIKWtSW`#Tt~( zXHcqNV|-mGnuX-33V#(h%9`Rn*coVW7gTe{K?vN1bKA4n{G(11@D;?V`DsPz zi(=e(ko3`LJwTBBPh9|+V8Gh0U_I*MgsgvaYc*V^ma_abCWg=slz#txWesv(W7496 zf&n$r_iZaSC*>q$S15}mj6P?j+gso-K5tOd&g4DbynF>X6#aQf&g2i@5TuSKJF4VV zTLu1jG4cN*OJc?_(;F^Qdm{4&klUDAOxuU7v^d%d1PP)C38Liowv_FXqlJC9-tPCU z>E62+FArilGBb!7yH`BFa`~3{XqvXZ%l!?m`D|WA$Zm5*B+OIz{Um^|EWf%o=^qlp z6N>dfIG??$jJUQEwI%kwH>7)iSBq937quhG%iYViHccSJWViq*U8DGYL~luu~?AEG4MNGkq>OZT_G{d^^IgDoqXG8Z5l zJ~Y6(ExpdViV0)D5;yVDV+=l!rkXb`vv$S|yJ9DW834D@ydx@NBAWyIeDoHUkafC4 z<-)FyTRe`Xkwq%b>up~y+&qd9fbE;pu7Hhac}ONYmX&}uLBq=6HSrDG6Pl(j34U|f@0`9DJ&R{9&srM_N}O;%eI;g&Jbd(Q@-4>ye}MxT zc;>W4P7GEsXEMo(WBNm54XpR#N0ulqrfS-me+cy$EgG~uocQSh0fH*DJqp?60t9UT zv*H8lOurODzyaNb;0EhKu#U8A)9s*oItepaU_v9M>Lq@b8HJbLP$%ORGL3@-$eWpZ zoog@_N61&mJ5N~u^J#~|w7G`PEfoZ?iPwul^9uh#l zN^-)t!-xCt=Av5$BpH0*&eKh`-g^D%-NBn1o3*P;e3{ctQdP7l&-kYu?G}C;hr_T3 z|AZro?P_VcwG)w17${yIA_Nq?49*i+X!?{~UG5-Pjq5&!Nk0;9yo-KQzQf@bw7YO= z(q8KMKOKg?R!wpTU?7fF?26;{IV5>(!lhQgSZ4I0^$QTrOw@7jVP6nc${qPJKxP7h ziwjmcBqUM9jvFK?RR#c?>Ri#Sk84tFb*>QO=8?&06}xJas5|Nj*4ZC*af!AVmk$C`2F&Uxp}2D3Hq`|EbL>P0nP2xEbE~r0GK7OU-pM;A$^dJ)Ycu9Iie1w zXuWtrKR3yN)M|nHg$3Wbm}!Q6<)i$60D$3m&^pvvSUOXOi*c5CzNQ{2s&*WaUd zejNK$RocZ?ZyAFhnZaZL(5)POp7{L@^KY>Rf;^}?3lRXUys_G_XdK83M-A2%YCNrp z0W%{6YGj&)3)L2kE|QK;evl)!tCeh-m|%pJBS?Z2euE1D7CZxcTH7tXyX>BDkM?I_ z$>%(C)ds$`{mY$ zGyp4j$`Thk>I$;X7$RFmWKyfz0jNh@5IyTmT^-JTdDnN8$w_&!n<@WgYP(H(&$S3p zgoaeq-m`%J604sL3++R$-W2& zSiyP*W!1M1n*2{q$1@E9p;&c7yEhiK2i?Lwsih-KWwXb2=>kDj z31nee+`E92h7tXnarr*lRnj3Wm|$8X#=WjfiWKhQ3Z$zp>TJp2OE)~dJo<3TUzg6} zT59^crH~c2dj_nXtv0cxJXy)P)&*Fvr#<6Sx8)ALtus5;egClGvo>CUkjp)~+gy{j z8poIUW>!^=_yN!0SrvcfNwGH~-v!XCdPukNW_LY#Fj;_s2AJ-8IA6ywx(e%2$77O| zYt8+3k57)g&brEHj>zb|Hu}=CL|)3m!2j4p!~YvGg<9P&8F_R-j+c_L2#=6=U_rhf6DgE$-?)D1f(fs>tJX6Jt`gd z_1l=-(w!`^bl9Cxy2}RE4~ZOlmKF|yIU+%^|A|xbR@Vjb)BgPSBmc^`5pL3moBGekoU+nEWv>;C*1F>1 z`lL(%@D79DWvfyK!kH{i7u?t?IXqwjKs1={wp1r)2;9x`M{W}+PGy=u%~9VZ2FQo?molb-CxM}GO%g*wG8nSx{!Od z3HpyK3vOkH1Jnccd2YhWDia*`UZ|?ta-M4Y+dpVzgcPRvs@Jh)$T!H0Y-J*Q2-(uq zqC#i-*pJ26i4UXWrlud;!>=<&FRpjoAi)6=v!XHnjF^i!4?RCp z_KoL{fUiz%Rd#8owE9hQM!qv;uQ+^*2%1h4jCnkUn$KA7^?;x5r?+d1zmyrcm=z~K z5?%_iMK_RAXO_McgD)hMd0tW_bAOqQ)^3S@)c$D?pE4X#rl7S~ z?oqTM3fT)b@HX`*6?IJTWAK}Hi$|dPm***HbLaSoHIH)N97`Ea|1Cr;w^Yn6T>hN- z{s8Np0*2lTrXtE20M;4ybkqb>#iwbUxV<-*A(Dri!dw}BU}@~}%14Tu-~U7Z+_muK zW?4SAErUljZHYnd6N*fN`}SwLhZ{!M^}les#L88U=8EgAmJwZ5DKzGuwHJ6vVQ!G$ zf+d$%XDQkhP0U-en2ye~=tH+%z0#=yVKW<5byL&l?v`w#HkL{9JP(LAg-woZh{`n7 zW0G!+WgG1cB}?#BE*|O-+C7_Cj+fk#2tWk-d_#tmSyfIBagTMr`XyxoF;JYqE43#vH#$pcF%dx)sk3MJ9U*Irh!TF*G(f=>;(z|Bfml;B zmI_XY_0KQF*%`Zkf7UZv;LBrZ zlFDNO52r5Q5lVYyFfD1+q|h3*BZ4LrH_(a_`&wFdJHHlM4hJ3}%Z)Up$vuJy7O1pB zsV*P_M8y!~PAPQ0M2F~^x7f&^$R3BJ+SwI2kL9l9GhI7~AQ`+$KoU3+FBDjYd9^>` z(QKtCt^n^>@JZcqZ0X^8!jKgrOQ&J6@Hgcp%16lNy)kEP6Bt_;F!Xm;MwqrTC+iP8 zjNIWh_jBm@TJjFMT^IYG?u1Cf;(tgg7)S*pzQdAgr&?8~+^J#6Sp|cuY&S@rCQq%2 z|2N=Xjz)*HRX3cs=lQhV$k)ym?4vX)Cr?y`l|NTo(n+zbSWJpEv?l>z=e-4-PO~+1 zy?9YW+3|-Wy5O| zbF#8`=gwe_d}GsHc$^jvkRj)b?S)oJ6VrGBUrnf~~R>e1NUcMyIx z?`*Gw2Uw^vq!1Ih{?TZDeB{3?PH-^qD|q4`E6*6P0DE8Kn9G#V{jbf*={Ns$6B1u2{0@AAOK%_&I*1J25n)PrwOH^Kai)2pfZrIvU}(d^d}DD>mJLq z(}zPB%9<>Xo0slel(r-%U0(yEZ)-Us_t^e&&iOR9@k~^A>Gxf(4{E zTR3uEHwUU^t@{1IH05=mqR#hqXMONm=W~D)N&>`NuS(TdzLg;f?Mv9*l^e`FG5tTu zFIN1YdJDOYqh6W<`x%M4Glx~4q+}M)l=tJ zhdo1Tqc|?E9mk)dJapfk3|aj$IV8bqPa*Aa8_gqdS(F*b9l|d@+x35T>i-~T{dWxx zbD*oW^wj01+dH%cm-Q6@<2_lF>BtK_fx&D5s&harAs@@@Fvh!YEdcwC+uShZ)gTod zpas8POz$ZM`{sIvhF2d6mv}zxqu#%R^=8;?P_I$%8&)6%^LrXaIy#%4aIc58^e1*b zT-f(3^uEmZt@!+R$;6l7ESQL`8~rz;Qq+raRq!PP106mX7rGMQAK|i!KD>{r zAR=Os=>H5g@V)a{{=2tJPc@6}sWee!PBqv+^EXXjDrYi1d0+BCbm7vIV>2S>L8t|wrNfX?FCutM|5$a?DW32ey^U7 zj;AMd349mcGD5!RGPx&9TRB(LC*Fk1bjc0QVf$A^P)fS4=BZ`hIfrzAvT$kM^ue8m zrkHj^T=;O|T^dV>=-Y*^W}MK<8HToH%6`+YMENS~vnEl$@u9Ho)lb@3EHw>j;%_ez zz_QQhH>T5I5PH+&Zv^SJx7YS@ygkcregt~aV8o>5W$Abh()`n}QA3fI-Sgnk3XeLi z1{YT=ON);!_IKs{FtYqUc@Edc(&rJ3m<4)uBUIgaB2Z?v!mX?~;Fpbes&FkBwG)O} zn>6s3bONLKxmJDB!t4~`y52NyROQcAkp==UUTECQ` z%x<8N@_6D}vKAFd~@Xx zMgf4ejX_%xL~VHRnKC@?osg(G->y00xs0x5saRj2o7T{TYHQaH?Mv@|SXU!nej7J2 zn?YeUSWc%;Z%64fpKd!~&#~6PBlZqr2FkCMCV%iwu~F!kJJ4(|bbAhFb8E8w(8c~* z#!s95)&TMWqxuS6LAf8_K?%Rdu{>M;!P5OV)hSPK*hp|2HTce`h$43=ZYAfZ2hsH+ zPrz5=k3uhme7}!zUh)?gXi+Y%oP2d{v^>uNUGaCvbbB#6_hdE8#s~g=bz(>`7m*D_hZ|XNVajwo()`?db;U6Nt_ zF*$2VRq0Op@O%fGw8!>!4a zMkH`F*;rT;pI`i)a1k+SDh_%+3={?V_uQ$l9P=qL`>}d{K&f6y4So8g9S$!@>p`Q# zl2i6vBFEpJO|)kgvM3S?E$!S}#N3MvL_1Q=A64(PFrp0%LBL%s<#`nj$+j{P=8zGs zc7Vc5yEdDan8n@*Z@1Ag1|9c{43|#;RPB;?8`kiMAwh_XK!@h5 z2X_6{A*H&~b;htg<7k*Q?cqrp?i&S3VBhE$A6hp@0^t|!!)>_^TXOKrG~w3lT|zpO zankLax*x`44~`{eHDPc;HL zlMsOadI-i;$#@!7mz9B87#x~AS_(Ktb+6>iw^feOC;NyQ^M90IglQ_)0Vgv-6F3nf zZK0`obFIT!3l_3wb@Z`62aJ{VGc?*u=&wXh{km@Qdm;`H$BmPU&23G4VZmPr{|E{A z!nWVUY;Pmq@Ll~Hjs4i(G?c+;3-zubAfOUHyF4X@k&`fhZcn1T+x2mSD@D`CW5lgL zyN$v79rIWS{i*eTYCOZALq)Ac)gf1>aB!^4fdHbZ)n#{Mhz^mTn4kZDLk}X_`cld? z{`Dwl1>+GN@*PrJ4rlWgE`RanNMKh1!*frf8Y&5s47NYI)P3p#=m6mQf0UN!i{MA0 z=!S3f3vs=fU^M$wIdwH5odMi5vda`4g!v|p+5-p}zGoQz^_mVXOa`-a;<=bZl*>ca zcRo6BfX+9|Pnd^EmfS~(Q~bm6nr77f9Xg7(Dc$INt@L{*a+gk0 zyA_C6f~|o-MmdP*J@{gy6gu5epzRL=J z&J_?#4G}M-39Eo|mr}v13LzqdzI=YYX$l^BoKAaT$6Zt*8|7mv^s#B@;eJ>b;h{Vf z%q_k*-QD9?YY2eh7o%Mr;JWQB`7*rg&I!(!BM3X%V?cISp^kv*801ZbNNjh)x$QKg z)?fC+?uSS&bp{uOS-AO+Zi54W=JQYD-4Op|UtvAlaGpnq0{CoSLwQ9kKemOd^fO$W zGUp?M>X2Txzug%TR&784ZJaGSciA2PDv+C4S_SHj5BaO$H78tRfS&B0k5OYs;YS)9Ruws_|pz9rS%!k{!(`9GOy~% zX;&H`#t5>e{Pw&t5oi0(Jjb1$*m zY<{tcir2GzSH6jU_jg{3(!nnX4?LQ@9Z6hqF!Hr)1_OLnVK?hsRI+mO{>`5>3S>IE ze+wcXug006V8F&lGaR=k|Ce6up)+;r{UnReYqz=YH-2j^={2cS-zKjjT;)Gs4)&kB zo=17}_hI2uj}5ne8HOUjm7HeyFn+|@N*(KW4utJS*P$3+mldRyjpht+`fDbG@TdMZrdDU z`+a~>Ya?~(HLY+ioX!CN(tGVmACYc)lbrBM7aD{vbrctV?Up1-UJYa5Qm`LJSz_Wy zlJ^X9lPmCK2Q*cKNC@0WY;B~_HC*K%YQYl$+j3>ur0swI8$B98tZ%3o&pv4{CAk{v zqzdZd3Vp!yVWi>m&9fB5v4$naL~PkVx#`6K1l|+o$xXs_32J6pTrQg$I47KL6wO~T z8qw8SLUKokTcxECmT1wq>*wX~nuGMhH_4$G^2mi(1_a30R%=}Rl7ww}XZgyI1UK6s zP*^t>^HO8`_=0p-I!|J$_#K_GUpqONkmseY5NYCDfs@%E6%7uLA&qQ+)NyLMR7`*xc!K?hd4@1~?pK7@}u4FKU2-fS( zE){1~VaJhQ70TV<*gk0|QI3?&$pTU&W9v)X>g$A4s9xNjcP9ZCI*z-cg4EFe5kr|J z#=3dn!53F0+?*&C*L$zjU|*!1}}@?Px1oQyiWyQllcE7tX70ch>X+ zBEXIS&X;dIP+8g|f~UPD?sOY(dpzQCnxfzI){7pRI6Tt3cd12^_CWv%^^pr#>TT~k z8=1N0?;KKgUe6!y6`o*eib|V8&2O$VSU0H*_JJd#8UDy-Yvl! zejiOe-})qd7GH2CK{Mx^=$Ku5*80@|*;6m75Q_4#9cKbrbcT#W+WpbSJ9%E^c$s$h zzP&40$$?3H4!iT}c2*gz(z;IKV>%5=(W2C|w0fBwA|3p<9N_eMxQbjne?H-~29)8@ zk+s*ate|QZ{pEaYSNq=zgBX^s6yYm@Xm&b2N^r@!3d!=Ze|KKsIIbR(HkBav2k-TjcR?mCSzqpT>hrRD)XK=A3}x`7SR*jd_TMN=Vmz zswBm-vcVFYklV{tyx|5t+={(NE-X;pS0$e)pHHu^KD`&+o0#5Li|*aVo9?q-wWd*R z63i{C;HhD@-EzGReU%b^xCv^Df#?aPf%&pFS`)SYyg_>AhYCmb?*27rf7M5mi@s0S zQwX?zuHUowMMhV{7kS^X4&+AXdm=X z0lpiDZh3<7k+{Wgx8u#(?!qk3b{4Y6MogbD8RCyY7`{IStETvqezw2qwk?G*>q?d_ zydB&Y=6FD4Dy?Q6oDzl)5eMc|%ecB0G<4!tS}09>CWEx#-dclk}y`0%@P@WZ`CrrT|%J}7~C6R?#xIZhX+x#&3KMbpgBycaUp0#5$_;7s^Gw?huGpBgw z@*`5*aDV7$q+(_P?b}|>FB~2}Lrb~rg$G$xk9#&Rs^6!>MaAORK zRXP^b48~$#sOzjc`D}N~jD(8mi}8HEoZ}EiZa@LYMQd7f+=oZ~E)^bZqJYYSD>9Hl z92l<4pWYtE^YD|M*GYve8H8HsZjIdqK5v+}qLc#qzLEQexd) zKjnSa30ZGE>j=$(m3?+z??l}UKI4?jsFbK)E;^mKeF+1X1MooLy)Tnn%}XEIa{oH+ z&f)C5Nn7x4Sz+%VTKSB17Zo`xQre{WH=uwMeAAG3=h0IiNG`4d$Cyt{Inf0QZrX8Z zjJP43sD@>_ao)KiDN2>!Yl4FI-)6PSni&1@yOZ0Gq;v(m`W6U&XGN(9&mOI^vh z4`sOgbVmp#e5Kx!y-&l2mU`57X(Yb#f;oDveT`w3>8p>Oonw=q*9c78Pb@xObx$f4+-UNr>kx{RZ zwgqaLx-2oH9g-K(g10L)e08?4xy;Iql6o(@)oe(81<_bsg#3R`>)hI#c%L_=!8;CY zwr51wEnXNV(T2%=FO?o-WVUl72J>{H8$!B?t#O~?WD6z>Ae>%&Zr6Cq2Wd{;-hPC} zVs~YKKqpoZTKXJ{FcugVZyZ0RL6EF+ZSVefcFYWGNp@Dn{6)Q8!+NzZQoBZ}`Tj?8 zn6-XQ4GI$+spOJB0#hZeWc-IN(!gk9!KWv(<+NyI5qr+FB%kOfzG3IF#<6b?D|>B` z%8=H}0EFi_R>1rdKV)Mz{v~1>XP?WPNx{Og*I73Zn z=k)9}KmfmDq=6s_2%o`6)GvQKDX}@WT=Kj#s|~k^lBCbCZuO&Z;Fktoi>S)+I~LWD zW*|gDA^B@mF_lp2$9UJzw>jE4{L&N};+%ph1nfS~jH& z;A0ZZTUc1h{;R9zTM*Ptd%MW@Iy>LaL(C5~m|DYqQ19Dgs>c+o4?80Y*t&YrsVqy9 zDZKIM2qr+rP9NfM;i+4uxsoB4NFzX5WKZsGW1i>x)ZG-{?y74Yyq^0|^esH8c!-}0 zXJ+Ws14br!_P~iNEmF213SWXq@XAf^cR$p21U=*i;ZFVf`EtY>q4!y>WfQmVHZ<^z zxqUXf%95G1{a=T6VzueAX_yB`zjXlv4kXg3FgLPE`@E^OI}Fg_(QvFA;Y97%Kg&it z$aJ{;7fxubhuJzlc=4{<7kg)kJCY^^eWJWnk{VwmLui&N^N1+txtXeN2ZAdw!xhs( zTBMu(e63$xGcSFFs~~~TrWTsylc{!S^dasb zk6t-<`Ot0a%D4c-1NopT^LbpOThT&_S`=)PtHdfvSLDpeM={RrT-xvdilkhLihFA~ zH+1OuPZm|PA&E;+F>ND0$>fm@Kd4%I9A~KJ%Ut`nDHR>Zs}9Cnh%IbOkl0+q{nUAx zeKl?{AH%OmCy(6j7t73MGAZ^gZ&!=mlAft!_7eWtR#c^yU)Sm}tHWZ!j>GPFB4tlP zmSwG6%QhdcV?O;59^0i2I{^fZK@diG4!{bCJi=;Po&JLN(L$2qfmqqErKGsMm0yQy zpERsMNvo4%U+!HLfyr$Dx_(f|)wGpXa&WX8LMiFQwVYtQHNm|@ z+JleW-~M9%6f$jpF(ev~RsD>J4%#rWr*X#&w8EHO8^Z8AO@E>Rys z=Fv_S&l3*Kk)|hEf2EsKyhf9s3=zE9OkFXrw}u8!{Z`WWtqNpjRHnjh++lf*B{Ada zUl$~AjZG1T)@-Bxe5*JeGKsUOsd;-D*n4|I2m~tC#`O9}=>0IF*Jbpt?o=-5&txB* zC}FD>1GDiiOr!VBIJaEd zAz^snBd37kj2etnZNc!)d}%rJhnUGu|6FkeeUxVD#Sa!Ecq1?~bV*c=Uj8^7!uG(e zFoe^-vSgC*fd#4SfoG>tu!DlMcQoTr_bjA-gsg`9jzs0ad12q`&q+**aPbpZc+Z+A z7^LEHRJ-1~&YxQc9@kJB$*W?|$6GPikH=A$wZ3=XxvpDx_aO5|Rg=X2a*SQA`ydIG z>VUughUo`nX*msB)EJNdI=f?k@VMcXmcs?%S#Y0XV0W1xlqmI-t_}CD8!xUN4j6y) zjod}3<{-U~8@L>e$p!aDH{~YQVlIjyJN~klNZ5dcaMZp3Lwo-c2V^g&1hyr-Vs@O4e zED*1oobf`~U7Vpps(8PRjFXnFn+Mni-4ifD&!0h=Z5u*a8;S{vTb=G4>WodQpw1XE zD>#wi1lq*k{+|9910z&EW)%aauE~>eujrH$%DY}Rlji$mqkHqPPmGgG`#<)ei7yQy z9$kLA>k^XL$NCz~$${(ayKT?uPbr46|TUg;A$;VB^)YSkTHSo!twtaZ^PN z$De=f8Hvh!9BW99;uR4u(egmdTZ=_h^{{@n)?-xb+--NK<(gP@n4_(~*bA&CFs?EF zj_;d}&pHQHhUL&UG&WN8Sbt{}fa$c>gDqu1!LQ$xw6oO!o+;|GK0@SgvRvtno_H#s z{fdFe=DM|B5k8Ov^u1`F8U@+DzPY_V%hMnP@KtKfZRzoYRMQvI-{4&X`jqaMx7qv+ zWE)B7F56UG{yC2KbmcRCSrYinC|9+rx8HChcZSkTUNu@teTY*}LacUh1|}R^u~<;A z>>(y!+vMw4d)S^lKcQRaJ;zUDZ}!#sbEuDuhkX2>Dg_3{S@C-K)N1mDfv~x9D@y zR!{hxO&Tdpb2be4F&QeA8?DFpNpI_C2UwOg<%JNavTmPYxzv-jkwp{SYnZ6%gj&pQ z9wjiU=5&_!{}$SLlnB9=w{Bw^=@Q2Lq(>)zb#5&z7Mfc^bo&KQIE+`ubv?(oHO6hO zexgKL=^I5O`o>mlXKFOmxLGO4QaFT2kmS9&KUicKN4je@6hc*E)BS!|HetHu`uSq` zU*fy`UqyOV)$=1j5A9mNBp$pqmhzyWRTrXiU-?9IGrT_o=l9`6V@Sm>6o%r08BIf$ z@l9|F_i;x_S4L&6HGsl3hm)C}xTr(m^}t}@-!D2NmUscw<7_nny?>}S&418kHvjOH z0a=QdA;heKgGpZs0lTy4p60X%&uf#`auEtlRMd zyY4mT@&t;?!ZzGvt!&3|M0QXg1c%ROL^HESyOGEavyd*@5b3NWBRrFceAf}8c`Nh; zWtJO%RyGgPB)_pRqP85AI31aAS=~{7O`RMVI)Tr0mpKO*?(4hFm6OZ8B6A?e7OzYH z0lO`unW*beq9NEP)O7ga2i@xaJ>;5(+zCVZec{%Gordn6R%bD-Nr;iSyBSA6D^cAG zjH2MlM0_+_*=kzEPQHmzVNN^IWhw<72pMwsbY{ozd?l5Mj@s>xsxAx1{+!|3WN?Ry z6YZ~mF7se+;k z&c|oHdv~v1tNSTb_@7l0A~!l?5P0lB)!F7D!04b{k+P|!^r|eKgckzs*Bll{stFjM z88?Eqkx78`=$nj8>sKILS2`1vX+mq#IAwZfDLb#EPq6LWq6rs6$NiYMSf*7`et*dl z5zoLUDjQl)I!j8VMim@@@kQ!S8S5-DU>!(t$)%`uIiJcec9hJm2P`>JIo?xw%C!~Srr#8|42O7aG@c6D-q=n2!J@8D;@DUqk`9{nN7&f=6+ie_8Ph7#bw+UuF?jQacT*p zNKFjIJM{mI8lA%&rnvYi5E?DhDu2^n%bIyoyS@hOV7jY@0bO)cjzzO-?30@_1v9)> z4UVFUMxadr{w~ssV72`2AcY3+KLED9Q+Ui&)daK?jIGeGhHd&;0i7 zXAf9i1+!c0WB_#rFpImnw44UY;wk3Jb9Jg-Gv2$U)n#9KAr@iI22rZG*hS|!kfl?Y zCxR}!WF(zn$T(}+#`#=!Tj5(^LJT3JshJ_UCP9X#NP;0M2-^qYK*4jaYAcS{@?>F)0?j zzwxx(HkF`bnqUK7peyE=Ncz%VzcLNAx*s_{55?S~FhxNJxgp$!5&aWLow2?;=QWCK zc%0#~hs5wv*OJ=Sj1f<>m0QaL8 zoZ4}H=PNr_?pXH@CPoFxofj51;6Y~mV-Pwb;oiU(G*JQEZ!?xZ4s_}kETF}rEh-9V zy!M0JCKwm}YOh06a8Xea7O+eKCGF05g=b2~aYwSK^_R#ae(JU%?UT9GUoQs6z&1iXI-2&wd^Q_hi1_n4 zZ4lza<^6quTez%?GeSMhznKHf1Ie_6%H)o?liT_fW{KpoW`hv8r`m;PY}?E3>U#x-=?bD^HX%qk)edq3<`&Mkt9c z?T2$D`T3uHDy&0#6|bIZ>FT)BtN67p&)R~!QTUNiOVhn!pQuu7yVE8sBkSH96Uf$h z4GFZ?H$a%Wh+(3e1?sOC8y!{uG~S@CS!q0= zy9jEfooz>olK}pMJW+Xi-zjh5&a7|1t`)4a`+%FXL}%cjHGHF;1j%eiJ;P$R?aC4D zv6&4^wR;7}hVuw^b$-ept8qwivsqy^0`i4HVBg1 zF;uuvy~A?#MPc?G6wL<#+I-WqxD@+=5|F(Bzye1?f>84Way`jskO^*iZyOhAb7V+6 zf|3VaS&zGR?gyoB!M*{8_`EIG5_zcc@e?VZ_O`~2guUp$SgXa!*(HO9Dfd_A*=QffCZ<)4g)rJe{zgCo5!Q;Ti>{#gbu zB`)%6sRu|cz%-IodApPISGua*F&>xDX8!XzoqB5kx=h8IC4<*;CTg9-2%Xco03y;+ zGSPM?ZlrBo1YU2}x*W|RmfA%sHg|ha#%oH$ZQJ*af!vhtJsATR!=I|(2+33&4*fhTOOR<9Hd;lEL?qUjLKK8V&c-r$)_yf056hs%_ySDc-4j3Sou^ChR=D~NeM zn_g=gpO^SHu`z>pxP0TK#mcC-J)~H;pDy%C!TN2P;|E$&XQQd10}sO3^@4A|?K!r36zXJ87-rdE!leBu%Na9yn5?HEh!D=`{3lt)yFN8I6UpPa-oG3G?2UFL5)yL9GLw8SK6% zm?-}uf1hC*W71+lyAKC@a0DN5G7ihCzjRS+%q3y>bsV9o`2tvK**$uk>yJSNh3^HH zKd2PV0EJaT7I^j4+-@tWyH*ylq?)pOyyh6iKu5s3XQr4ynspmX=wqi){0?Jx2rf>AEh!J&J-o{+^1l_1Q`Y zmmXofn29~x6+DzOXl&&ISk}rPjza-}g>x(4-h#?llonEp^y#wQM zEM|sS@;Wt@XCol6m^DWPN8Pr}LN~F|s$H1S4&> z2>oYkh3q-oEeu$WA-N!t3g#nj>IKCcFO)(4oRE)G-Jpvib4;8wGN4Q8wNux2cFqoI z7Sju4px}z<{lsQe;1BtTa2zU?5DebN#m_3pUof-An#8FZG9+o!B?ftzW~S(iOn_U^ zs^NQvwY3MkX4Du)ALJsNuFaW>NGe6*w{L8>R>#&Y|EgI}#GnHYo|$Z45=MvS7`3JSZ& zGcNvyzoyhrOY)Rz#|+;B@k1A(D?U`Tgc;=IZLkcEyUeJUz#gn+hP`}z-p`FCS#uvd`3fWcjw z0Zr^FCm#K&le+ArOK~P4t&n?av(bukTsledlN8zBR-9&gx^*w~XBdujP01W?6KUOD zK}jv%*eL4)Tv~gzaB=JL>AWXegnfd`pCdH79-35+)^10VwTfYDxCD!E>b3zYU5BM^ zFho|T?}ea@?mOh|jxGnBQz}w+ub9kz{gOBPoQ+i_ix67mjniDN|Mz3Ev7Ns=83Y@c zDa$#~WiL07GQxsCD-;yoOlsGnQg5|sZO_EPE2XM!;mZ|+bGZX2#Q_Y>(uci0=;EM9 zl9XoS&PKnOVM4s{RDv6?bPgJ+Ab3R?$D!a~qWgw|Ut` zpL+!Q1=Uc^RMO9cfiq%Qe4d2}#Y(nE3&y7OW(7i2hP26)*{`j}V_s8P&tDtnB<6Eg zKeGz;a7YEGT|puw??_-L_rUr}Tlv_OtFJu>J<3}DrXViN5Wf4dBA55fNQ?9b4OTDy z_rX4kz=QnqnZ}FVPaA$`_@Jf&$qiZ7pq2ICi%Hj374~Qz+FPr}CfK>Kttezo(spVB z$S4jVZ`|2>{7a0-c`FxCo>#AX?*C3p$)VJ6?OJQ%T0TmT4y7q`rZ7S_rKWEU0|Z4* zvISsCwc+D+5rqseP3#==>6Dz7a9V4#m9<)5@pmR__Q&W)Mb&~ke(3JR-4k>()t4ggu1MwEvB4OOb zmmoi2J8S3dq!Yw29Jjb6DqRIcWp}Pbpb89nD1lc}qnQX!FKa#^uYZ6;*g9g5G*@gC zmXUtHPxoU`6cNK(@(hBCbeUJ)Pfm@u3Tz*L0zSOS;R3G0)(BiSFQ-7p+ozRY z->3JrNs_F**@dm>C2Dn)GeWBuC=?W1bxU_BJ+)1k(5hePpJjn0@@0+MG1LAmO_A1x zur*ENURO(6pmSVNJ6#=AYhHZ^7Hck*bLGq9BgWC6S14Fv?>LZg(x8Cgz#;E-e0CD& z{C_`q*d-qkkX<(7DgXwVhf#MDjF0wdv9-VOo*RWz!7&l=QU+>NyPpvX3-VJ`piaQC zc9dJ~ZzhSP84r%v2&&b?$*CtRpl`-e|A1PWRr1l&d^0ScYR60k&sPU`WFg=^mfev} z=Uk;_8r)_Yq-c=Qy3A4MN?`pnrF(>V24FNcg-#E;VQX)y#Z2{%sA(UapVsAQHJj9_pcHeszp=lDJr zMa=GDVOuN##Hw+Y2+~#yls8k@oSkYdPx$zQ$24Oli2*Xvv0W7Etoxf22CG5sX~%3FD=rtU z+FE*BOEbPZ^VB19zLCPd$A9|Qt*U>O;?$DYd`d=~5FW&(B_*pWFx;CTKL*`q;^TfQ z=qRXlXLwo>b4C#Gq+7ZWDYNVXSfKg(AII?7nh5!lD3Z{2zpJa;6_^Zyc{P|=D526p zgov*I)%81-<1NGMJJc%&h)|p! z*NOo3w(y~hILpNKXxsVA5bfVZx~g2KZc?k{@K&fHwC` z=nMew?#jP)Y4ogd-iUlD8i!}~U`CtcFMHTP6{!$hSi_$asmFw5T&{c&xKwX@BL|vNWtVmW7zA1xpV&YZKzbGMwv@wgmC19OI=M!)aK0E1q409@GWW<( zRZ+{jGCohy7e1V zK-o}x64N1PXRi$-C?9&rovB!DNjaVEIIv?F=>vm#`1V6$K^l!5$>fxq@pm9Y!0?ez z3RyNp3rj&;#g%@Vi0vQbH3z0%gFa$q2Z#9cHCc{X7KG%;<5-YD0@DOP4Q&jwuc+dI z{m(IxKl5)8riY{EuQ)IDIq`WUy@W8K%9@v9HnB-euzU&`S8YGh%caVqIfQ(V&P>5< zuZ*V+;&nH2PkAg)T1_ty^%52vZ)nf{Yb+3Wgx84wWkVV!l34!lv;U7lt*SiQL9}6y z`>XFZrBG@AhR0c_cv0Cu_gRRph-d`AOE?{~kt8~dy>)WvLqn6d+h3nqOZLO(6@HP` zm_`Oyb<7rXnmlO(v_bd}OjRM(V?2DxNUE)o0;cow8mN7x(+@fv(q8(UCe&o`rTX7G z+`p%`W&ERX&>t|xL4{LOI)> z#%esktKzCLJop;ZV5q@vQ}E;3pzoIqk1F7h^1fn)v_84<)@Qp9%n{&TpZj>iJwTa` zcGdK4Q9whh>7lNy@Ami8sEKgYjR69L^`Sa#qRH6=Evqp@!yBDWSymR2&3UeRNyhKG z^*9A>Z*|n3Ye2SDtk=h!i5nJ;%O@ak=AD?K4}QK(DdA)I`BAm~Y8_bR9eZd2G+aTk zn}eD*D7irk-xJtyYu;@=!-O}fd?U7Y-1BqdjVMr6O{ule;ctCI1>wVko$~CZW3Y94 z07n9qF|4-SgM#r$1l-G?p9!z1{O|28IJbzr*uHjP&P` zcc5Rb?dL{GIrVDef@WcNxPVT>0JUrU3HR7Y!AsqF>wQ5=LRdi4d`WpOt|f!9huUVY**1Wq68&v& zjbtFKEYdCigMwu-jAd+>ec|hVS|wiv`Ja@8iTzpM^l@3@$tZpZfR%;OM2pv_SW-@) zAOax!yVoC5So+1)Mw$D{_wv~{LRF`H3%e16Ez1FVz6~{v=;jlhcoQKn?!*`_UU27u zhw0AKbS&fgZ7_hx`*K2v_gym%kuj%sigEd3JcG1W+tHdAT&Y#vG6~Mbn`s;BOV4wi zEdg^xTtUqRS50?HRCCY-j*x#xPU12It!I~e0%Md}RxVBywOXg>ZbjMT+hOl%*ubZ! zIU+9QvABRgTz`RQ568iE)VDtL9gJ)NZF^m;dfKA0XuGF1GJ;0O2@=g-e5UxNE$0{5 zbH0CE)PELq6AgAA{$ae5yqX1_m80tHE$Ocluh<_XiDY#cJ~gzB%a0K1m$zkAr1oYD z92S#_Lvz^?NMUdX-{0N#lB*idI4T76BDhlMHpQ^n^ku~aca{(Un*6BOHwY?(#*9o_8AW>%IHntY(b=v=`mt0&DEp7DOb<|nM|o-4&WBf}*3 z?YGXK?SV|h4cYw9odJ!QFQt>>@UxdVSUAII1%=}!8a~B|Gb*N4baa-c&{UT8f`%hC ztXwQ@4|(mzP3&J4zuhE#$O$qg(S^W-==}NF=^(% v!aukY<1YAMh#W4cvyD@ZGq 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 literal 0 HcmV?d00001 diff --git a/static/img/transcription-chat-bubble-view.png b/static/img/transcription-chat-bubble-view.png new file mode 100644 index 0000000000000000000000000000000000000000..16dbb6cf678240c6806989b34d306de28ca1c04f GIT binary patch literal 350257 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

    Qw2Ynf(Q5#ku&~t6Ozjpz=x4-{P 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Ú?^y{PT5fiO;%!rG?{8fn&c49y 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 Ohw4KurLqS$5&r{~d>wrN literal 0 HcmV?d00001 diff --git a/static/js/app.modular.js b/static/js/app.modular.js new file mode 100644 index 0000000..8155381 --- /dev/null +++ b/static/js/app.modular.js @@ -0,0 +1,2603 @@ +const { createApp, ref, reactive, computed, onMounted, watch, nextTick } = Vue; + +// Import composables +import { useRecordings } from './modules/composables/recordings.js'; +import { useUpload } from './modules/composables/upload.js'; +import { useAudio } from './modules/composables/audio.js'; +import { useUI } from './modules/composables/ui.js'; +import { useModals } from './modules/composables/modals.js'; +import { useSharing } from './modules/composables/sharing.js'; +import { useReprocess } from './modules/composables/reprocess.js'; +import { useTranscription } from './modules/composables/transcription.js'; +import { useSpeakers } from './modules/composables/speakers.js'; +import { useChat } from './modules/composables/chat.js'; +import { useTags } from './modules/composables/tags.js'; +import { usePWA } from './modules/composables/pwa.js'; +import { useVirtualScroll, getVirtualItemKey } from './modules/composables/virtualScroll.js'; +import { useBulkSelection } from './modules/composables/bulk-selection.js'; +import { useBulkOperations } from './modules/composables/bulk-operations.js'; +import { useFolders } from './modules/composables/folders.js'; + +// Import utilities +import { showToast } from './modules/utils/toast.js'; +import { getContrastTextColor } from './modules/utils/colors.js'; + +// Number of speaker colors available in CSS (must match styles.css) +const SPEAKER_COLOR_COUNT = 16; + +// Parse transcription text to detect if it's an error message +const parseTranscriptionError = (text) => { + if (!text) return null; + + // Check for JSON-formatted error from backend + if (text.startsWith('ERROR_JSON:')) { + try { + const jsonStr = text.substring(11); + const data = JSON.parse(jsonStr); + const _t = (key, fb) => (window.i18n && window.i18n.t) ? window.i18n.t(key) : fb; + return { + title: data.t || _t('errors.fallbackTitle', 'Error'), + message: data.m || _t('errors.fallbackMessage', 'An error occurred'), + guidance: data.g || '', + icon: data.i || 'fa-exclamation-circle', + type: data.y || 'unknown', + isKnown: data.k || false, + technical: data.d || '' + }; + } catch (e) { + console.error('Failed to parse error JSON:', e); + } + } + + // Check for legacy error format + const errorPrefixes = [ + 'Transcription failed:', + 'Processing failed:', + 'ASR processing failed:', + 'Audio extraction failed:' + ]; + + for (const prefix of errorPrefixes) { + if (text.startsWith(prefix)) { + return parseUnformattedError(text); + } + } + + return null; +}; + +// Parse unformatted error messages and make them user-friendly +const parseUnformattedError = (text) => { + const _t = (key, fb) => (window.i18n && window.i18n.t) ? window.i18n.t(key) : fb; + const lowerText = text.toLowerCase(); + + // Known error patterns + const patterns = [ + { + patterns: ['maximum content size limit', 'file too large', '413', 'payload too large', 'exceeded'], + title: _t('errors.fileTooLargeTitle', 'File Too Large'), + message: _t('errors.fileTooLargeMessage', 'The audio file exceeds the maximum size allowed by the transcription service.'), + guidance: _t('errors.fileTooLargeGuidance', 'Try enabling audio chunking in your settings, or compress the audio file before uploading.'), + icon: 'fa-file-audio', + type: 'size_limit' + }, + { + patterns: ['timed out', 'timeout', 'deadline exceeded'], + title: _t('errors.processingTimeout', 'Processing Timeout'), + message: _t('errors.processingTimeoutMessage', 'The transcription took too long to complete.'), + guidance: _t('errors.processingTimeoutGuidance', 'This can happen with very long recordings. Try splitting the audio into smaller parts.'), + icon: 'fa-clock', + type: 'timeout' + }, + { + patterns: ['401', 'unauthorized', 'invalid api key', 'authentication failed', 'incorrect api key'], + title: _t('errors.authenticationError', 'Authentication Error'), + message: _t('errors.authenticationErrorMessage', 'The transcription service rejected the API credentials.'), + guidance: _t('errors.authenticationErrorGuidance', 'Please check that the API key is correct and has not expired.'), + icon: 'fa-key', + type: 'auth' + }, + { + patterns: ['rate limit', 'too many requests', '429', 'quota exceeded'], + title: _t('errors.rateLimitExceeded', 'Rate Limit Exceeded'), + message: _t('errors.rateLimitExceededMessage', 'Too many requests were sent to the transcription service.'), + guidance: _t('errors.rateLimitExceededGuidance', 'Please wait a few minutes and try reprocessing.'), + icon: 'fa-hourglass-half', + type: 'rate_limit' + }, + { + patterns: ['connection refused', 'connection reset', 'could not connect', 'network unreachable'], + title: _t('errors.connectionError', 'Connection Error'), + message: _t('errors.connectionErrorMessage', 'Could not connect to the transcription service.'), + guidance: _t('errors.connectionErrorGuidance', 'Check your internet connection and ensure the service is available.'), + icon: 'fa-wifi', + type: 'connection' + }, + { + patterns: ['503', '502', '500', 'service unavailable', 'server error', 'internal server error'], + title: _t('errors.serviceUnavailable', 'Service Unavailable'), + message: _t('errors.serviceUnavailableMessage', 'The transcription service is temporarily unavailable.'), + guidance: _t('errors.serviceUnavailableGuidance', 'This is usually temporary. Please try again in a few minutes.'), + icon: 'fa-server', + type: 'service_error' + }, + { + patterns: ['invalid file format', 'unsupported format', 'could not decode', 'corrupt', 'not valid audio'], + title: _t('errors.invalidAudioFormat', 'Invalid Audio Format'), + message: _t('errors.invalidAudioFormatMessage', 'The audio file format is not supported or the file may be corrupted.'), + guidance: _t('errors.invalidAudioFormatGuidance', 'Try converting the audio to MP3 or WAV format before uploading.'), + icon: 'fa-file-audio', + type: 'format' + }, + { + patterns: ['audio extraction failed', 'ffmpeg failed', 'no audio stream'], + title: _t('errors.audioExtractionFailed', 'Audio Extraction Failed'), + message: _t('errors.audioExtractionFailedMessage', 'Could not extract audio from the uploaded file.'), + guidance: _t('errors.audioExtractionFailedGuidance', 'Try converting the file to a standard audio format (MP3, WAV) before uploading.'), + icon: 'fa-file-video', + type: 'extraction' + } + ]; + + // Check patterns + for (const pattern of patterns) { + for (const p of pattern.patterns) { + if (lowerText.includes(p)) { + return { + title: pattern.title, + message: pattern.message, + guidance: pattern.guidance, + icon: pattern.icon, + type: pattern.type, + isKnown: true, + technical: text + }; + } + } + } + + // Unknown error - clean it up + let cleanMessage = text; + for (const prefix of ['Transcription failed:', 'Processing failed:', 'Error:', 'ASR processing failed:']) { + if (cleanMessage.startsWith(prefix)) { + cleanMessage = cleanMessage.substring(prefix.length).trim(); + } + } + + // Truncate if too long + if (cleanMessage.length > 200) { + cleanMessage = cleanMessage.substring(0, 200) + '...'; + } + + return { + title: _t('errors.processingError', 'Processing Error'), + message: cleanMessage, + guidance: _t('errors.processingErrorGuidance', 'If this error persists, try reprocessing the recording.'), + icon: 'fa-exclamation-circle', + type: 'unknown', + isKnown: false, + technical: text + }; +}; + +// Wait for the DOM to be fully loaded before mounting the Vue app +document.addEventListener('DOMContentLoaded', async () => { + // Initialize i18n before creating Vue app (if not already initialized) + try { + if (window.i18n && !window.i18n.currentLocale) { + const appElement = document.getElementById('app'); + const userLang = appElement?.dataset.userLanguage || localStorage.getItem('preferredLanguage') || 'en'; + + // Add timeout to prevent indefinite waiting + await Promise.race([ + window.i18n.init(userLang), + new Promise((resolve) => setTimeout(resolve, 3000)) + ]); + + console.log('i18n initialized with language:', userLang); + } else if (window.i18n && window.i18n.currentLocale) { + console.log('i18n already initialized with language:', window.i18n.currentLocale); + } + } catch (error) { + console.error('Error initializing i18n:', error); + // Continue anyway with fallback translations + } + + // CSRF Token Integration with Vue.js + const csrfToken = ref(document.querySelector('meta[name="csrf-token"]')?.getAttribute('content')); + + // Register Service Worker (non-blocking) + if ('serviceWorker' in navigator) { + // Delay registration to not block page load + setTimeout(() => { + navigator.serviceWorker.register('/static/sw.js') + .then(registration => { + console.log('ServiceWorker registration successful with scope:', registration.scope); + }) + .catch(error => { + console.warn('ServiceWorker registration failed (non-critical):', error); + }); + }, 1000); + } + + // Create a safe t function that's always available + const safeT = (key, params = {}) => { + if (!window.i18n || !window.i18n.t) { + return key; + } + return window.i18n.t(key, params); + }; + + const app = createApp({ + setup() { + // ========================================================================= + // STATE DECLARATIONS - All reactive state stays here for proper reactivity + // ========================================================================= + + // --- Core State --- + const currentView = ref('upload'); + const dragover = ref(false); + const recordings = ref([]); + const selectedRecording = ref(null); + const selectedTab = ref('summary'); + const searchQuery = ref(''); + const isLoadingRecordings = ref(true); + const globalError = ref(null); + + // Advanced filter state + const showAdvancedFilters = ref(false); + const filterTags = ref([]); + const filterSpeakers = ref([]); + const filterTagSearch = ref(''); + const filterSpeakerSearch = ref(''); + const filterDateRange = ref({ start: '', end: '' }); + const filterDatePreset = ref(''); + const filterTextQuery = ref(''); + const filterStarred = ref(false); + const filterInbox = ref(false); + const showArchivedRecordings = ref(false); + const showSharedWithMe = ref(false); + + // --- Pagination State --- + const currentPage = ref(1); + const perPage = ref(25); + const totalRecordings = ref(0); + const totalPages = ref(0); + const hasNextPage = ref(false); + const hasPrevPage = ref(false); + const isLoadingMore = ref(false); + const searchDebounceTimer = ref(null); + + // --- Enhanced Search & Organization State --- + const sortBy = ref('created_at'); + const selectedTagFilter = ref(null); + + // --- UI State --- + const browser = ref('unknown'); + const isSidebarCollapsed = ref(false); + const searchTipsExpanded = ref(false); + const isUserMenuOpen = ref(false); + const tokenBudget = ref({ + has_budget: false, + budget: null, + usage: 0, + percentage: 0 + }); + const isDarkMode = ref(false); + const currentColorScheme = ref('blue'); + const showColorSchemeModal = ref(false); + const windowWidth = ref(window.innerWidth); + const mobileTab = ref('transcript'); + const isMetadataExpanded = ref(false); + const expandedSection = ref('settings'); // 'notes' or 'settings' for recording view accordion + const showSortOptions = ref(false); + + // --- i18n State --- + const currentLanguage = ref('en'); + const currentLanguageName = ref('English'); + const availableLanguages = ref([]); + const showLanguageMenu = ref(false); + + // --- Upload State --- + const uploadQueue = ref([]); + const allJobs = ref([]); // Backend job queue (queued, processing, completed, failed) + const currentlyProcessingFile = ref(null); + const processingProgress = ref(0); + const processingMessage = ref(''); + const isProcessingActive = ref(false); + const pollInterval = ref(null); + const progressPopupMinimized = ref(false); + const progressPopupClosed = ref(false); + const maxFileSizeMB = ref(250); + const chunkingEnabled = ref(true); + const chunkingMode = ref('size'); + const chunkingLimit = ref(20); + const chunkingLimitDisplay = ref('20MB'); + const maxConcurrentUploads = ref(3); + const recordingDisclaimer = ref(''); + const showRecordingDisclaimerModal = ref(false); + const pendingRecordingMode = ref(null); + const uploadDisclaimer = ref(''); + const showUploadDisclaimerModal = ref(false); + const customBanner = ref(''); + const showBanner = ref(true); + + // --- Audio Recording State --- + const isRecording = ref(false); + const mediaRecorder = ref(null); + const audioChunks = ref([]); + const audioBlobURL = ref(null); + const recordingTime = ref(0); + const recordingInterval = ref(null); + const canRecordAudio = ref(navigator.mediaDevices && navigator.mediaDevices.getUserMedia); + const canRecordSystemAudio = computed(() => navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia); + const systemAudioSupported = ref(false); + const systemAudioError = ref(''); + const recordingNotes = ref(''); + const showSystemAudioHelp = ref(false); + const showSystemAudioHelpModal = ref(false); + const showRecoveryModal = ref(false); + const recoverableRecording = ref(null); + const asrLanguage = ref(''); + const asrMinSpeakers = ref(''); + const asrMaxSpeakers = ref(''); + const audioContext = ref(null); + const analyser = ref(null); + const micAnalyser = ref(null); + const systemAnalyser = ref(null); + const visualizer = ref(null); + const micVisualizer = ref(null); + const systemVisualizer = ref(null); + const animationFrameId = ref(null); + const recordingMode = ref('microphone'); + const activeStreams = ref([]); + + // --- Wake Lock and Background Recording --- + const wakeLock = ref(null); + const recordingNotification = ref(null); + const isPageVisible = ref(true); + + // --- PWA Features --- + const deferredInstallPrompt = ref(null); + const showInstallButton = ref(false); + const isPWAInstalled = ref(false); + const notificationPermission = ref('default'); + const pushSubscription = ref(null); + const appBadgeCount = ref(0); + const currentMediaMetadata = ref(null); + const isMediaSessionActive = ref(false); + + // --- Incognito Mode State --- + const enableIncognitoMode = ref(false); // Server config + const incognitoMode = ref(false); + const incognitoRecording = ref(null); + const incognitoProcessing = ref(false); + + // --- Bulk Selection State --- + const selectionMode = ref(false); + const selectedRecordingIds = ref(new Set()); + const bulkActionInProgress = ref(false); + + // --- Recording Size Monitoring --- + const estimatedFileSize = ref(0); + const fileSizeWarningShown = ref(false); + const recordingQuality = ref('optimized'); + const actualBitrate = ref(0); + const maxRecordingMB = ref(200); + const sizeCheckInterval = ref(null); + + // Advanced Options for ASR + const showAdvancedOptions = ref(false); + const uploadLanguage = ref(''); + const uploadMinSpeakers = ref(''); + const uploadMaxSpeakers = ref(''); + const uploadHotwords = ref(''); + const uploadInitialPrompt = ref(''); + + // Tag Selection + const availableTags = ref([]); + const selectedTagIds = ref([]); + const uploadTagSearchFilter = ref(''); + + // Folder Selection + const availableFolders = ref([]); + const selectedFolderId = ref(null); + const foldersEnabled = ref(false); + const filterFolder = ref(''); + + // --- Modal State --- + const showEditModal = ref(false); + const showDeleteModal = ref(false); + const showEditTagsModal = ref(false); + const selectedNewTagId = ref(''); + const tagSearchFilter = ref(''); + const showReprocessModal = ref(false); + const showResetModal = ref(false); + const showSpeakerModal = ref(false); + const speakerModalTab = ref('speakers'); // 'speakers' or 'transcript' for mobile view + const showShareModal = ref(false); + const showSharesListModal = ref(false); + const showTextEditorModal = ref(false); + const showAsrEditorModal = ref(false); + const editingRecording = ref(null); + const editingTranscriptionContent = ref(''); + const editingSegments = ref([]); + const availableSpeakers = ref([]); + const showEditSpeakersModal = ref(false); + const editingSpeakersList = ref([]); + const databaseSpeakers = ref([]); + const editingSpeakerSuggestions = ref({}); + const showEditParticipantsModal = ref(false); + const editingParticipantsList = ref([]); + const editingParticipantSuggestions = ref({}); + const allParticipants = ref([]); + const recordingToShare = ref(null); + const shareOptions = reactive({ + share_summary: true, + share_notes: true, + }); + const generatedShareLink = ref(''); + const existingShareDetected = ref(false); + const recordingPublicShares = ref([]); // All public shares for current recording + const isLoadingPublicShares = ref(false); + const userShares = ref([]); + const isLoadingShares = ref(false); + const copiedShareId = ref(null); + const shareToDelete = ref(null); + const showShareDeleteModal = ref(false); + const recordingToDelete = ref(null); + const recordingToReset = ref(null); + const reprocessType = ref(null); + const reprocessRecording = ref(null); + const isAutoIdentifying = ref(false); + const asrReprocessOptions = reactive({ + language: '', + min_speakers: null, + max_speakers: null + }); + const summaryReprocessPromptSource = ref('default'); + const summaryReprocessSelectedTagId = ref(''); + const summaryReprocessCustomPrompt = ref(''); + const speakerMap = ref({}); + const speakerColorMap = ref({}); // Stable mapping of speaker ID → color class + const modalSpeakers = ref([]); + const speakerDisplayMap = ref({}); + const regenerateSummaryAfterSpeakerUpdate = ref(true); + const speakerSuggestions = ref({}); + const loadingSuggestions = ref({}); + const activeSpeakerInput = ref(null); + const voiceSuggestions = ref({}); + const loadingVoiceSuggestions = ref(false); + + // --- DateTime Picker State --- + const showDateTimePicker = ref(false); + const pickerMonth = ref(new Date().getMonth()); + const pickerYear = ref(new Date().getFullYear()); + const pickerHour = ref(12); + const pickerMinute = ref(0); + const pickerAmPm = ref('PM'); + const pickerSelectedDate = ref(null); + const dateTimePickerTarget = ref(null); + const dateTimePickerCallback = ref(null); + + // --- Transcript Editing State --- + const editingSegmentIndex = ref(null); + const editingSpeakerIndex = ref(null); + const showEditTextModal = ref(false); + const editedText = ref(''); + const showAddSpeakerModal = ref(false); + const newSpeakerName = ref(''); + const newSpeakerIsMe = ref(false); + const newSpeakerSuggestions = ref([]); + const loadingNewSpeakerSuggestions = ref(false); + const showNewSpeakerSuggestions = ref(false); + const editedTranscriptData = ref(null); + + // --- Inline Editing State --- + const editingTitle = ref(false); + const originalTitle = ref(''); + const editingParticipants = ref(false); + const editingMeetingDate = ref(false); + const editingSummary = ref(false); + const editingNotes = ref(false); + const tempNotesContent = ref(''); + const tempSummaryContent = ref(''); + const autoSaveTimer = ref(null); + const autoSaveDelay = 2000; + + // --- Markdown Editor State --- + const notesMarkdownEditor = ref(null); + const markdownEditorInstance = ref(null); + const summaryMarkdownEditor = ref(null); + const summaryMarkdownEditorInstance = ref(null); + const recordingNotesEditor = ref(null); + const recordingMarkdownEditorInstance = ref(null); + + // --- Transcription State --- + const transcriptionViewMode = ref('simple'); + const legendExpanded = ref(false); + const highlightedSpeaker = ref(null); + const showDownloadMenu = ref(false); + const currentPlayingSegmentIndex = ref(null); + const followPlayerMode = ref(false); + const processingIndicatorMinimized = ref(false); + + // --- Chat State --- + const showChat = ref(false); + const isChatMaximized = ref(false); + const chatMessages = ref([]); + const chatInput = ref(''); + const isChatLoading = ref(false); + const chatMessagesRef = ref(null); + const chatInputRef = ref(null); + + // --- Audio Player State (Main Player) --- + const playerVolume = ref(1.0); + const audioIsPlaying = ref(false); + const audioCurrentTime = ref(0); + const audioDuration = ref(0); + const audioIsMuted = ref(false); + const audioIsLoading = ref(false); + const asrEditorAudio = ref(null); + const playbackRate = ref(1.0); + const showSpeedMenu = ref(false); + const playbackSpeeds = [0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.5, 3.0]; + const speedMenuPosition = ref({}); + const showVolumeSlider = ref(false); + const showModalVolumeSlider = ref(false); + const showDuplicatesModal = ref(false); + const videoCollapsed = ref(false); + const videoFullscreen = ref(false); + const fullscreenControlsVisible = ref(true); + const fullscreenControlsTimer = ref(null); + const duplicatesModalData = ref(null); + + // --- Modal Audio Player State (Independent from main) --- + const modalAudioCurrentTime = ref(0); + const modalAudioDuration = ref(0); + const modalAudioIsPlaying = ref(false); + const modalPlaybackRate = ref(1.0); + + // --- Column Resizing State --- + const leftColumnWidth = ref(60); + const rightColumnWidth = ref(40); + const isResizing = ref(false); + + // --- Dropdown Positioning --- + const dropdownPositions = ref({}); + // Single-ref dropdown tracking for ASR editor (performance optimization) + const openAsrDropdownIndex = ref(null); + + // --- App Configuration --- + const useAsrEndpoint = ref(false); + const connectorSupportsDiarization = ref(false); // Connector capability for diarization UI + const connectorSupportsSpeakerCount = ref(false); // Connector capability for min/max speakers + const currentUserName = ref(''); + const canDeleteRecordings = ref(true); + const enableInternalSharing = ref(false); + const enableArchiveToggle = ref(false); + const showUsernamesInUI = ref(false); + + // --- Internal Sharing State --- + const showUnifiedShareModal = ref(false); + const internalShareUserSearch = ref(''); + const internalShareSearchResults = ref([]); + const internalShareRecording = ref(null); + const internalSharePermissions = ref({ can_edit: false, can_reshare: false }); + const internalShareMaxPermissions = ref({ can_edit: true, can_reshare: true }); // Permission ceiling for current user + const recordingInternalShares = ref([]); + const isLoadingInternalShares = ref(false); + const isSearchingUsers = ref(false); + const allUsers = ref([]); + const isLoadingAllUsers = ref(false); + + // --- Reprocessing Polls --- + const reprocessingPolls = ref(new Map()); + + // --- Speaker Groups State --- + const currentSpeakerGroupIndex = ref(0); + const speakerGroups = ref([]); + + // --- Virtual Scroll Container Refs --- + const speakerModalTranscriptRef = ref(null); + const mainTranscriptRef = ref(null); + const asrEditorRef = ref(null); + + // --- Computed properties needed by composables --- + const isMobileScreen = computed(() => windowWidth.value < 1024); + const isMobileDevice = computed(() => { + return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || + ('ontouchstart' in window) || + (navigator.maxTouchPoints > 0); + }); + + const colorSchemes = { + light: [ + { id: 'blue', name: 'Ocean Blue', description: 'Classic blue theme with professional appeal', class: '' }, + { id: 'emerald', name: 'Forest Emerald', description: 'Fresh green theme for a natural feel', class: 'theme-light-emerald' }, + { id: 'purple', name: 'Royal Purple', description: 'Elegant purple theme with sophistication', class: 'theme-light-purple' }, + { id: 'rose', name: 'Sunset Rose', description: 'Warm pink theme with gentle energy', class: 'theme-light-rose' }, + { id: 'amber', name: 'Golden Amber', description: 'Warm yellow theme for brightness', class: 'theme-light-amber' }, + { id: 'teal', name: 'Ocean Teal', description: 'Cool teal theme for tranquility', class: 'theme-light-teal' } + ], + dark: [ + { id: 'blue', name: 'Midnight Blue', description: 'Deep blue theme for focused work', class: '' }, + { id: 'emerald', name: 'Dark Forest', description: 'Rich green theme for comfortable viewing', class: 'theme-dark-emerald' }, + { id: 'purple', name: 'Deep Purple', description: 'Mysterious purple theme for creativity', class: 'theme-dark-purple' }, + { id: 'rose', name: 'Dark Rose', description: 'Muted pink theme with subtle warmth', class: 'theme-dark-rose' }, + { id: 'amber', name: 'Dark Amber', description: 'Warm brown theme for cozy sessions', class: 'theme-dark-amber' }, + { id: 'teal', name: 'Deep Teal', description: 'Dark teal theme for calm focus', class: 'theme-dark-teal' } + ] + }; + + // ========================================================================= + // COLLECT ALL STATE INTO SINGLE OBJECT FOR COMPOSABLES + // ========================================================================= + const state = { + // Core + currentView, dragover, recordings, selectedRecording, selectedTab, searchQuery, + isLoadingRecordings, globalError, csrfToken, + + // Filters + showAdvancedFilters, filterTags, filterSpeakers, filterTagSearch, filterSpeakerSearch, + filterDateRange, filterDatePreset, filterTextQuery, filterStarred, filterInbox, + showArchivedRecordings, showSharedWithMe, sortBy, selectedTagFilter, + + // Pagination + currentPage, perPage, totalRecordings, totalPages, hasNextPage, hasPrevPage, + isLoadingMore, searchDebounceTimer, + + // UI + browser, isSidebarCollapsed, searchTipsExpanded, isUserMenuOpen, tokenBudget, isDarkMode, + currentColorScheme, showColorSchemeModal, windowWidth, mobileTab, isMetadataExpanded, expandedSection, + showSortOptions, currentLanguage, currentLanguageName, availableLanguages, showLanguageMenu, + colorSchemes, isMobileScreen, isMobileDevice, + + // Upload + uploadQueue, allJobs, currentlyProcessingFile, processingProgress, processingMessage, + isProcessingActive, pollInterval, progressPopupMinimized, progressPopupClosed, + maxFileSizeMB, chunkingEnabled, chunkingMode, chunkingLimit, chunkingLimitDisplay, + maxConcurrentUploads, recordingDisclaimer, showRecordingDisclaimerModal, pendingRecordingMode, + uploadDisclaimer, showUploadDisclaimerModal, + customBanner, showBanner, + showAdvancedOptions, uploadLanguage, uploadMinSpeakers, uploadMaxSpeakers, uploadHotwords, uploadInitialPrompt, + availableTags, selectedTagIds, uploadTagSearchFilter, + availableFolders, selectedFolderId, foldersEnabled, filterFolder, + + // Audio Recording + isRecording, mediaRecorder, audioChunks, audioBlobURL, recordingTime, recordingInterval, + canRecordAudio, canRecordSystemAudio, systemAudioSupported, systemAudioError, + recordingNotes, showSystemAudioHelp, showSystemAudioHelpModal, asrLanguage, asrMinSpeakers, asrMaxSpeakers, + audioContext, analyser, micAnalyser, systemAnalyser, visualizer, micVisualizer, + systemVisualizer, animationFrameId, recordingMode, activeStreams, + wakeLock, recordingNotification, isPageVisible, + estimatedFileSize, fileSizeWarningShown, recordingQuality, actualBitrate, + maxRecordingMB, sizeCheckInterval, + + // PWA Features + deferredInstallPrompt, showInstallButton, isPWAInstalled, + notificationPermission, pushSubscription, appBadgeCount, + currentMediaMetadata, isMediaSessionActive, + + // Incognito Mode + enableIncognitoMode, incognitoMode, incognitoRecording, incognitoProcessing, + + // Bulk Selection + selectionMode, selectedRecordingIds, bulkActionInProgress, + + // Modals + showEditModal, showDeleteModal, showEditTagsModal, selectedNewTagId, tagSearchFilter, + showReprocessModal, showResetModal, showSpeakerModal, speakerModalTab, showShareModal, showSharesListModal, + showTextEditorModal, showAsrEditorModal, editingRecording, editingTranscriptionContent, + editingSegments, availableSpeakers, showEditSpeakersModal, editingSpeakersList, + databaseSpeakers, editingSpeakerSuggestions, + showEditParticipantsModal, editingParticipantsList, editingParticipantSuggestions, allParticipants, + recordingToShare, shareOptions, + generatedShareLink, existingShareDetected, recordingPublicShares, isLoadingPublicShares, + userShares, isLoadingShares, copiedShareId, + shareToDelete, showShareDeleteModal, recordingToDelete, recordingToReset, + reprocessType, reprocessRecording, isAutoIdentifying, asrReprocessOptions, + summaryReprocessPromptSource, summaryReprocessSelectedTagId, summaryReprocessCustomPrompt, + speakerMap, speakerColorMap, modalSpeakers, speakerDisplayMap, regenerateSummaryAfterSpeakerUpdate, speakerSuggestions, + loadingSuggestions, activeSpeakerInput, voiceSuggestions, loadingVoiceSuggestions, + + // DateTime Picker + showDateTimePicker, pickerMonth, pickerYear, pickerHour, pickerMinute, + pickerAmPm, pickerSelectedDate, dateTimePickerTarget, dateTimePickerCallback, + + // Transcript Editing + editingSegmentIndex, editingSpeakerIndex, showEditTextModal, editedText, + showAddSpeakerModal, newSpeakerName, newSpeakerIsMe, newSpeakerSuggestions, + loadingNewSpeakerSuggestions, showNewSpeakerSuggestions, editedTranscriptData, + + // Inline Editing + editingTitle, originalTitle, + editingParticipants, editingMeetingDate, editingSummary, editingNotes, + tempNotesContent, tempSummaryContent, autoSaveTimer, autoSaveDelay, + + // Markdown + notesMarkdownEditor, markdownEditorInstance, summaryMarkdownEditor, + summaryMarkdownEditorInstance, recordingNotesEditor, recordingMarkdownEditorInstance, + + // Transcription + transcriptionViewMode, legendExpanded, highlightedSpeaker, showDownloadMenu, + currentPlayingSegmentIndex, followPlayerMode, processingIndicatorMinimized, + + // Chat + showChat, isChatMaximized, chatMessages, chatInput, isChatLoading, chatMessagesRef, chatInputRef, + + // Audio Player + playerVolume, audioIsPlaying, audioCurrentTime, audioDuration, audioIsMuted, audioIsLoading, asrEditorAudio, + modalAudioCurrentTime, modalAudioDuration, modalAudioIsPlaying, modalPlaybackRate, + playbackRate, showSpeedMenu, playbackSpeeds, speedMenuPosition, showVolumeSlider, showModalVolumeSlider, + videoFullscreen, fullscreenControlsVisible, fullscreenControlsTimer, videoCollapsed, + + // Column Resizing + leftColumnWidth, rightColumnWidth, isResizing, + + // Dropdown Positioning + dropdownPositions, + openAsrDropdownIndex, + + // App Config + useAsrEndpoint, connectorSupportsDiarization, connectorSupportsSpeakerCount, currentUserName, canDeleteRecordings, enableInternalSharing, enableArchiveToggle, showUsernamesInUI, + + // Internal Sharing + showUnifiedShareModal, internalShareUserSearch, internalShareSearchResults, + internalShareRecording, internalSharePermissions, internalShareMaxPermissions, recordingInternalShares, + isLoadingInternalShares, isSearchingUsers, allUsers, isLoadingAllUsers, + + // Reprocessing + reprocessingPolls, + + // Speaker Groups + currentSpeakerGroupIndex, speakerGroups, + + // Virtual Scroll + speakerModalTranscriptRef, mainTranscriptRef, asrEditorRef + }; + + // ========================================================================= + // TRANSLATION FUNCTION + // ========================================================================= + const t = safeT; + const tc = (key, count, params = {}) => { + if (!window.i18n || !window.i18n.tc) { + return key; + } + return window.i18n.tc(key, count, params); + }; + + // ========================================================================= + // UTILITY FUNCTIONS + // ========================================================================= + // showToast is now imported from modules/utils/toast.js + + const setGlobalError = (message, duration = 5000) => { + // Use toast system for all errors instead of the old global error banner + showToast(message, 'fa-exclamation-circle', duration, 'error'); + }; + + const loadTokenBudget = async () => { + try { + const response = await fetch('/api/user/token-budget'); + if (response.ok) { + tokenBudget.value = await response.json(); + } + } catch (error) { + console.error('Error loading token budget:', error); + } + }; + + // Helper function to calculate global segment index in bubble view + const getBubbleGlobalIndex = (rowIndex, bubbleIndex) => { + if (!processedTranscription.value.bubbleRows) return 0; + + let globalIndex = 0; + for (let i = 0; i < rowIndex; i++) { + globalIndex += processedTranscription.value.bubbleRows[i].bubbles.length; + } + globalIndex += bubbleIndex; + return globalIndex; + }; + + // Modal audio handlers (independent from main player) + const handleModalAudioTimeUpdate = (event) => { + modalAudioCurrentTime.value = event.target.currentTime; + }; + const handleModalAudioLoadedMetadata = (event) => { + const duration = event.target.duration; + if (duration && isFinite(duration) && duration > 0) { + modalAudioDuration.value = duration; + } + }; + const handleModalAudioPlayPause = (event) => { + modalAudioIsPlaying.value = !event.target.paused; + }; + const modalAudioProgressPercent = computed(() => { + if (!modalAudioDuration.value) return 0; + return (modalAudioCurrentTime.value / modalAudioDuration.value) * 100; + }); + const resetModalAudioState = () => { + modalAudioCurrentTime.value = 0; + modalAudioDuration.value = 0; + modalAudioIsPlaying.value = false; + }; + + const formatFileSize = (bytes) => { + if (!bytes) return '0 B'; + const k = 1024; + const sizes = ['B', 'KB', 'MB', 'GB']; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; + }; + + const formatDisplayDate = (dateString) => { + if (!dateString) return ''; + try { + let date = new Date(dateString); + if (isNaN(date.getTime())) { + if (/^\d{4}-\d{2}-\d{2}$/.test(dateString)) { + const [year, month, day] = dateString.split('-').map(Number); + date = new Date(year, month - 1, day); + } else { + return dateString; + } + } + if (isNaN(date.getTime())) { + return dateString; + } + return date.toLocaleDateString(undefined, { + year: 'numeric', month: 'short', day: 'numeric', + hour: '2-digit', minute: '2-digit' + }); + } catch (e) { + return dateString; + } + }; + + const formatShortDate = (dateString) => { + if (!dateString) return ''; + try { + let date = new Date(dateString); + if (isNaN(date.getTime())) { + if (/^\d{4}-\d{2}-\d{2}$/.test(dateString)) { + const [year, month, day] = dateString.split('-').map(Number); + date = new Date(year, month - 1, day); + } + } + if (isNaN(date.getTime())) { + return dateString; + } + const now = new Date(); + const isCurrentYear = date.getFullYear() === now.getFullYear(); + if (isCurrentYear) { + return date.toLocaleDateString(undefined, { month: 'short', day: 'numeric' }); + } + return date.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' }); + } catch (e) { + return dateString; + } + }; + + const formatStatus = (status) => { + const statusMap = { + 'PENDING': t('status.pending'), + 'PROCESSING': t('status.processing'), + 'SUMMARIZING': t('status.summarizing'), + 'COMPLETED': t('status.completed'), + 'FAILED': t('status.failed') + }; + return statusMap[status] || status; + }; + + const getStatusClass = (status) => { + switch(status) { + case 'COMPLETED': return 'status-completed'; + case 'PROCESSING': return 'status-processing'; + case 'SUMMARIZING': return 'status-summarizing'; + case 'PENDING': return 'status-pending'; + case 'FAILED': return 'status-failed'; + default: return ''; + } + }; + + const formatTime = (seconds) => { + const mins = Math.floor(seconds / 60); + const secs = Math.floor(seconds % 60); + return `${mins}:${secs.toString().padStart(2, '0')}`; + }; + + const formatDuration = (totalSeconds) => { + if (!totalSeconds && totalSeconds !== 0) return ''; + totalSeconds = Math.round(totalSeconds); + if (totalSeconds < 1) { + return '< 1s'; + } + const hours = Math.floor(totalSeconds / 3600); + const minutes = Math.floor((totalSeconds % 3600) / 60); + const seconds = totalSeconds % 60; + if (totalSeconds < 60) { + return `${seconds}s`; + } + let parts = []; + if (hours > 0) { + parts.push(`${hours}h`); + } + if (minutes > 0) { + parts.push(`${minutes}m`); + } + if (hours === 0 && seconds > 0) { + parts.push(`${seconds}s`); + } + return parts.join(' '); + }; + + const formatEventDateTime = (dateString, timeOnly = false) => { + if (!dateString) return ''; + const date = new Date(dateString); + if (timeOnly) { + return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); + } + return date.toLocaleString([], { + weekday: 'short', month: 'short', day: 'numeric', + hour: '2-digit', minute: '2-digit' + }); + }; + + // Date helper functions + const getDateForSorting = (recording) => { + const dateStr = sortBy.value === 'meeting_date' + ? (recording.meeting_date || recording.created_at) + : recording.created_at; + return dateStr ? new Date(dateStr) : null; + }; + + const isToday = (date) => { + const today = new Date(); + return date.getDate() === today.getDate() && + date.getMonth() === today.getMonth() && + date.getFullYear() === today.getFullYear(); + }; + + const isYesterday = (date) => { + const yesterday = new Date(); + yesterday.setDate(yesterday.getDate() - 1); + return date.getDate() === yesterday.getDate() && + date.getMonth() === yesterday.getMonth() && + date.getFullYear() === yesterday.getFullYear(); + }; + + const isThisWeek = (date) => { + const now = new Date(); + const startOfWeek = new Date(now); + startOfWeek.setDate(now.getDate() - now.getDay()); + startOfWeek.setHours(0, 0, 0, 0); + const endOfWeek = new Date(startOfWeek); + endOfWeek.setDate(startOfWeek.getDate() + 7); + return date >= startOfWeek && date < endOfWeek && !isToday(date) && !isYesterday(date); + }; + + const isLastWeek = (date) => { + const now = new Date(); + const startOfLastWeek = new Date(now); + startOfLastWeek.setDate(now.getDate() - now.getDay() - 7); + startOfLastWeek.setHours(0, 0, 0, 0); + const endOfLastWeek = new Date(startOfLastWeek); + endOfLastWeek.setDate(startOfLastWeek.getDate() + 7); + return date >= startOfLastWeek && date < endOfLastWeek; + }; + + const isThisMonth = (date) => { + const now = new Date(); + return date.getMonth() === now.getMonth() && + date.getFullYear() === now.getFullYear() && + !isToday(date) && !isYesterday(date) && !isThisWeek(date) && !isLastWeek(date); + }; + + const isLastMonth = (date) => { + const now = new Date(); + const lastMonth = new Date(now.getFullYear(), now.getMonth() - 1, 1); + return date.getMonth() === lastMonth.getMonth() && + date.getFullYear() === lastMonth.getFullYear(); + }; + + const isSameDay = (date1, date2) => { + return date1.getDate() === date2.getDate() && + date1.getMonth() === date2.getMonth() && + date1.getFullYear() === date2.getFullYear(); + }; + + // Bundle utilities for composables + const utils = { + t, tc, setGlobalError, showToast, formatFileSize, formatDisplayDate, formatShortDate, + formatStatus, getStatusClass, formatTime, formatDuration, formatEventDateTime, + getDateForSorting, isToday, isYesterday, isThisWeek, isLastWeek, isThisMonth, isLastMonth, isSameDay, + nextTick, + onChatComplete: loadTokenBudget // Refresh token budget after chat + }; + + // ========================================================================= + // COMPUTED PROPERTIES (define before composables that need them) + // ========================================================================= + const processedTranscription = computed(() => { + if (!selectedRecording.value?.transcription) { + return { hasDialogue: false, content: '', speakers: [], simpleSegments: [], bubbleRows: [], isError: false }; + } + + const transcription = selectedRecording.value.transcription; + + // Check for error message format + const errorInfo = parseTranscriptionError(transcription); + if (errorInfo) { + return { + hasDialogue: false, + isJson: false, + isError: true, + error: errorInfo, + content: '', + speakers: [], + simpleSegments: [], + bubbleRows: [] + }; + } + + let transcriptionData; + + try { + transcriptionData = JSON.parse(transcription); + } catch (e) { + transcriptionData = null; + } + + // Handle new simplified JSON format (array of segments) + if (transcriptionData && Array.isArray(transcriptionData)) { + const wasDiarized = transcriptionData.some(segment => segment.speaker); + + if (!wasDiarized) { + const segments = transcriptionData.map(segment => ({ + sentence: segment.sentence, + startTime: segment.start_time, + })); + return { + hasDialogue: false, + isJson: true, + content: segments.map(s => s.sentence).join('\n'), + simpleSegments: segments, + speakers: [], + bubbleRows: [] + }; + } + + // Extract unique speakers in order of first appearance + const speakers = [...new Set(transcriptionData.map(segment => segment.speaker).filter(Boolean))]; + + // Build stable color map: assign colors 1, 2, 3... based on order of first appearance + // This map is stored and reused - colors never change once assigned + const speakerColors = {}; + speakers.forEach((speaker, index) => { + // Use existing color if already mapped, otherwise assign next color + if (speakerColorMap.value[speaker]) { + speakerColors[speaker] = speakerColorMap.value[speaker]; + } else { + const colorIndex = Object.keys(speakerColorMap.value).length; + speakerColors[speaker] = `speaker-color-${(colorIndex % SPEAKER_COLOR_COUNT) + 1}`; + speakerColorMap.value[speaker] = speakerColors[speaker]; + } + }); + + const simpleSegments = transcriptionData.map(segment => ({ + speakerId: segment.speaker, + speaker: speakerMap.value[segment.speaker]?.name || segment.speaker, + sentence: segment.sentence, + startTime: segment.start_time || segment.startTime, + endTime: segment.end_time || segment.endTime, + color: speakerColors[segment.speaker] || 'speaker-color-1' + })); + + const processedSimpleSegments = []; + let lastSpeakerId = null; + simpleSegments.forEach(segment => { + processedSimpleSegments.push({ + ...segment, + showSpeaker: segment.speakerId !== lastSpeakerId + }); + lastSpeakerId = segment.speakerId; + }); + + const bubbleRows = []; + let lastBubbleSpeakerId = null; + simpleSegments.forEach(segment => { + if (bubbleRows.length === 0 || segment.speakerId !== lastBubbleSpeakerId) { + bubbleRows.push({ + speaker: segment.speaker, + color: segment.color, + isMe: segment.speaker && (typeof segment.speaker === 'string') && segment.speaker.toLowerCase().includes('me'), + bubbles: [] + }); + lastBubbleSpeakerId = segment.speakerId; + } + bubbleRows[bubbleRows.length - 1].bubbles.push({ + sentence: segment.sentence, + startTime: segment.startTime || segment.start_time, + color: segment.color + }); + }); + + return { + hasDialogue: true, + isJson: true, + segments: simpleSegments, + simpleSegments: processedSimpleSegments, + bubbleRows: bubbleRows, + speakers: speakers.map(speaker => ({ + name: speakerMap.value[speaker]?.name || speaker, + color: speakerColors[speaker] + })) + }; + + } else { + // Fallback for plain text transcription + const speakerRegex = /\[([^\]]+)\]:\s*/g; + const hasDialogue = speakerRegex.test(transcription); + + if (!hasDialogue) { + return { + hasDialogue: false, + isJson: false, + content: transcription, + speakers: [], + simpleSegments: [], + bubbleRows: [] + }; + } + + speakerRegex.lastIndex = 0; + const speakers = new Set(); + let match; + while ((match = speakerRegex.exec(transcription)) !== null) { + speakers.add(match[1]); + } + + const speakerList = Array.from(speakers); + const speakerColors = {}; + speakerList.forEach((speaker) => { + // Use existing color if already mapped, otherwise assign next color + if (speakerColorMap.value[speaker]) { + speakerColors[speaker] = speakerColorMap.value[speaker]; + } else { + const colorIndex = Object.keys(speakerColorMap.value).length; + speakerColors[speaker] = `speaker-color-${(colorIndex % SPEAKER_COLOR_COUNT) + 1}`; + speakerColorMap.value[speaker] = speakerColors[speaker]; + } + }); + + const segments = []; + const lines = transcription.split('\n'); + let currentSpeakerId = null; + let currentText = ''; + + for (const line of lines) { + const speakerMatch = line.match(/^\[([^\]]+)\]:\s*(.*)$/); + if (speakerMatch) { + if (currentSpeakerId && currentText.trim()) { + segments.push({ + speakerId: currentSpeakerId, + speaker: speakerMap.value[currentSpeakerId]?.name || currentSpeakerId, + sentence: currentText.trim(), + color: speakerColors[currentSpeakerId] || 'speaker-color-1' + }); + } + currentSpeakerId = speakerMatch[1]; + currentText = speakerMatch[2]; + } else if (currentSpeakerId && line.trim()) { + currentText += ' ' + line.trim(); + } else if (!currentSpeakerId && line.trim()) { + segments.push({ + speakerId: null, + speaker: null, + sentence: line.trim(), + color: 'speaker-color-1' + }); + } + } + + if (currentSpeakerId && currentText.trim()) { + segments.push({ + speakerId: currentSpeakerId, + speaker: speakerMap.value[currentSpeakerId]?.name || currentSpeakerId, + sentence: currentText.trim(), + color: speakerColors[currentSpeakerId] || 'speaker-color-1' + }); + } + + const simpleSegments = []; + let lastSpeakerId = null; + segments.forEach(segment => { + simpleSegments.push({ + ...segment, + showSpeaker: segment.speakerId !== lastSpeakerId, + sentence: segment.sentence || segment.text + }); + lastSpeakerId = segment.speakerId; + }); + + const bubbleRows = []; + let currentRow = null; + segments.forEach(segment => { + if (!currentRow || currentRow.speakerId !== segment.speakerId) { + if (currentRow) bubbleRows.push(currentRow); + currentRow = { + speakerId: segment.speakerId, + speaker: segment.speaker, + color: segment.color, + bubbles: [], + isMe: segment.speaker && segment.speaker.toLowerCase().includes('me') + }; + } + currentRow.bubbles.push({ + sentence: segment.sentence, + color: segment.color + }); + }); + if (currentRow) bubbleRows.push(currentRow); + + return { + hasDialogue: true, + isJson: false, + segments: segments, + simpleSegments: simpleSegments, + bubbleRows: bubbleRows, + speakers: speakerList.map(speaker => ({ + name: speakerMap.value[speaker]?.name || speaker, + color: speakerColors[speaker] || 'speaker-color-1' + })) + }; + } + }); + + // Subtitle computed for fullscreen video overlay + const currentSubtitle = computed(() => { + const idx = currentPlayingSegmentIndex.value; + if (idx === null) return null; + const t = processedTranscription.value; + if (!t?.simpleSegments?.[idx]) return null; + const seg = t.simpleSegments[idx]; + return { + text: seg.sentence, + speaker: t.hasDialogue ? seg.speaker : null, + color: seg.color + }; + }); + + // ========================================================================= + // INITIALIZE COMPOSABLES (after processedTranscription is defined) + // ========================================================================= + // Create reprocess composable first so it can be passed to recordings + const reprocessComposable = useReprocess(state, utils); + const recordingsComposable = useRecordings(state, utils, reprocessComposable); + const uploadComposable = useUpload(state, utils); + + // Upload disclaimer handlers + const acceptUploadDisclaimer = () => { + showUploadDisclaimerModal.value = false; + // Temporarily clear disclaimer to prevent re-trigger, then call startUpload + const saved = uploadDisclaimer.value; + uploadDisclaimer.value = ''; + uploadComposable.startUpload(); + uploadDisclaimer.value = saved; + }; + + const cancelUploadDisclaimer = () => { + showUploadDisclaimerModal.value = false; + }; + + // Add startUpload to utils for audio composable to use + utils.startUploadQueue = uploadComposable.startUpload; + + const audioComposable = useAudio(state, utils); + const uiComposable = useUI(state, utils, processedTranscription); + const modalsComposable = useModals(state, utils); + const sharingComposable = useSharing(state, utils); + const transcriptionComposable = useTranscription(state, utils); + const chatComposable = useChat(state, utils); + const pwaComposable = usePWA(state, utils); + const tagsComposable = useTags({ + recordings, + availableTags, + selectedRecording, + showEditTagsModal, + editingRecording, + tagSearchFilter, + showToast, + setGlobalError + }); + + // Folders composable + const foldersComposable = useFolders({ + recordings, + availableFolders, + selectedRecording, + showToast, + setGlobalError + }); + + // Bulk selection composable + const bulkSelectionComposable = useBulkSelection({ + selectionMode, + selectedRecordingIds, + recordings, + selectedRecording, + currentView + }); + + // Bulk operations composable (needs selection composable methods) + const bulkOperationsComposable = useBulkOperations({ + selectedRecordingIds, + selectedRecordings: bulkSelectionComposable.selectedRecordings, + recordings, + selectedRecording, + bulkActionInProgress, + availableTags, + availableFolders, + showToast, + setGlobalError, + exitSelectionMode: bulkSelectionComposable.exitSelectionMode, + startReprocessingPoll: reprocessComposable.startReprocessingPoll + }); + + // ========================================================================= + // VIRTUAL SCROLL SETUP (for performance with long transcriptions) + // Must be before speakers composable since it uses scrollToSegmentIndex + // ========================================================================= + // Create a computed ref for the segments array + const transcriptSegments = computed(() => processedTranscription.value.simpleSegments || []); + + // Virtual scroll for speaker modal transcript (main performance bottleneck) + const speakerModalVirtualScroll = useVirtualScroll({ + items: transcriptSegments, + itemHeight: 52, // Approximate height of each segment row + containerRef: speakerModalTranscriptRef, + overscan: 8 + }); + + // Virtual scroll for main transcription panel + const mainTranscriptVirtualScroll = useVirtualScroll({ + items: transcriptSegments, + itemHeight: 48, + containerRef: mainTranscriptRef, + overscan: 5 + }); + + // Virtual scroll for ASR editor modal (uses editingSegments) + const asrEditorVirtualScroll = useVirtualScroll({ + items: editingSegments, + itemHeight: 44, // Table row height + containerRef: asrEditorRef, + overscan: 10 + }); + + // Helper to scroll to a segment by index (for speaker navigation) + const scrollToSegmentIndex = (index) => { + if (showSpeakerModal.value) { + speakerModalVirtualScroll.scrollToIndex(index, 'smooth'); + } else { + mainTranscriptVirtualScroll.scrollToIndex(index, 'smooth'); + } + }; + + // Add scrollToSegmentIndex to utils for composables that need it + utils.scrollToSegmentIndex = scrollToSegmentIndex; + utils.resetModalAudioState = resetModalAudioState; + utils.resetAsrEditorScroll = () => asrEditorVirtualScroll.reset(); + utils.resetSpeakerModalScroll = () => speakerModalVirtualScroll.reset(); + utils.getSpeakerModalVisibleRange = () => speakerModalVirtualScroll.visibleRange.value; + + // Speakers composable needs processedTranscription and scrollToSegmentIndex + const speakersComposable = useSpeakers(state, utils, processedTranscription); + + const groupedRecordings = computed(() => { + const groups = {}; + const groupDates = {}; // Track the most recent date in each group + + recordings.value.forEach(recording => { + const date = getDateForSorting(recording); + if (!date) return; + + let group; + const now = new Date(); + + // Check for future dates first + if (date > now && !isToday(date)) { + group = t('sidebar.upcoming'); + } else if (isToday(date)) { + group = t('sidebar.today'); + } else if (isYesterday(date)) { + group = t('sidebar.yesterday'); + } else if (isThisWeek(date)) { + group = t('sidebar.thisWeek'); + } else if (isLastWeek(date)) { + group = t('sidebar.lastWeek'); + } else if (isThisMonth(date)) { + group = t('sidebar.thisMonth'); + } else if (isLastMonth(date)) { + group = t('sidebar.lastMonth'); + } else { + group = t('sidebar.older'); + } + + if (!groups[group]) { + groups[group] = []; + groupDates[group] = date; + } + groups[group].push(recording); + + // Track the most recent (largest) date in each group + if (date > groupDates[group]) { + groupDates[group] = date; + } + }); + + // Sort groups by their most recent date (descending - newest first) + return Object.entries(groups) + .sort(([a], [b]) => groupDates[b] - groupDates[a]) + .map(([title, items]) => ({ title, items })); + }); + + const filteredAvailableTags = computed(() => { + return availableTags.value.filter(tag => + !selectedTagIds.value.includes(tag.id) && + (!tagSearchFilter.value || tag.name.toLowerCase().includes(tagSearchFilter.value.toLowerCase())) + ); + }); + + // Filtered tags for sidebar filter (searches by name) + const filteredTagsForFilter = computed(() => { + if (!filterTagSearch.value) return availableTags.value; + const search = filterTagSearch.value.toLowerCase(); + return availableTags.value.filter(tag => + tag.name.toLowerCase().includes(search) + ); + }); + + // Filtered speakers for sidebar filter (searches by name) + const filteredSpeakersForFilter = computed(() => { + if (!filterSpeakerSearch.value) return availableSpeakers.value; + const search = filterSpeakerSearch.value.toLowerCase(); + return availableSpeakers.value.filter(speaker => + speaker.name.toLowerCase().includes(search) + ); + }); + + const selectedTags = computed(() => { + return selectedTagIds.value.map(id => + availableTags.value.find(t => t.id === id) + ).filter(Boolean); + }); + + const toasts = ref([]); + + // Date preset options for filters + const datePresetOptions = computed(() => { + return [ + { value: 'today', label: t('sidebar.today') }, + { value: 'yesterday', label: t('sidebar.yesterday') }, + { value: 'thisweek', label: t('sidebar.thisWeek') }, + { value: 'lastweek', label: t('sidebar.lastWeek') }, + { value: 'thismonth', label: t('sidebar.thisMonth') }, + { value: 'lastmonth', label: t('sidebar.lastMonth') } + ]; + }); + + // Language options for ASR + const languageOptions = computed(() => { + return [ + { value: '', label: t('form.autoDetect') }, + { value: 'en', label: t('languages.en') }, + { value: 'es', label: t('languages.es') }, + { value: 'fr', label: t('languages.fr') }, + { value: 'de', label: t('languages.de') }, + { value: 'it', label: t('languages.it') }, + { value: 'pt', label: t('languages.pt') }, + { value: 'nl', label: t('languages.nl') }, + { value: 'ru', label: t('languages.ru') }, + { value: 'zh', label: t('languages.zh') }, + { value: 'ja', label: t('languages.ja') }, + { value: 'ko', label: t('languages.ko') } + ]; + }); + + // Recording metadata for sidebar + const activeRecordingMetadata = computed(() => { + if (!selectedRecording.value) return []; + + const recording = selectedRecording.value; + const metadata = []; + + if (recording.created_at) { + // Format duration in human-readable format (e.g., "2m 30s") + const formatProcessingDuration = (seconds) => { + if (!seconds && seconds !== 0) return null; + if (seconds < 60) return `${seconds}s`; + const mins = Math.floor(seconds / 60); + const secs = seconds % 60; + return secs > 0 ? `${mins}m ${secs}s` : `${mins}m`; + }; + + // Build tooltip with processing breakdown + let tooltipParts = [`Processed: ${formatDisplayDate(recording.completed_at || recording.created_at)}`]; + + if (recording.transcription_duration_seconds) { + tooltipParts.push(`Transcription: ${formatProcessingDuration(recording.transcription_duration_seconds)}`); + } + if (recording.summarization_duration_seconds) { + tooltipParts.push(`Summarization: ${formatProcessingDuration(recording.summarization_duration_seconds)}`); + } + + const tooltipText = tooltipParts.length > 1 ? tooltipParts.join('\n') : null; + + metadata.push({ + icon: 'fas fa-history', + text: formatDisplayDate(recording.created_at), + fullText: tooltipText + }); + } + + if (recording.file_size) { + metadata.push({ + icon: 'fas fa-file-audio', + text: formatFileSize(recording.file_size) + }); + } + + if (recording.duration) { + metadata.push({ + icon: 'fas fa-clock', + text: formatDuration(recording.duration) + }); + } + + if (recording.original_filename) { + const maxLength = 30; + const truncated = recording.original_filename.length > maxLength + ? recording.original_filename.substring(0, maxLength) + '...' + : recording.original_filename; + metadata.push({ + icon: 'fas fa-file', + text: truncated, + fullText: recording.original_filename + }); + } + + return metadata; + }); + + // Upload queue computed properties + const totalInQueue = computed(() => uploadQueue.value.length); + const completedInQueue = computed(() => uploadQueue.value.filter(item => item.status === 'completed' || item.status === 'failed').length); + // Filter out upload completions that already have a backend job (to avoid duplicates) + const finishedFilesInQueue = computed(() => { + const backendRecordingIds = new Set(allJobs.value.map(j => j.recording_id)); + return uploadQueue.value.filter(item => + ['completed', 'failed'].includes(item.status) && + !backendRecordingIds.has(item.recordingId) + ); + }); + const waitingFilesInQueue = computed(() => uploadQueue.value.filter(item => item.status === 'ready')); + const pendingQueueFiles = computed(() => uploadQueue.value.filter(item => item.status === 'queued')); + + // Backend processing queue - recordings being processed on the server + const backendProcessingRecordings = computed(() => { + return recordings.value.filter(r => ['PENDING', 'PROCESSING', 'SUMMARIZING', 'QUEUED'].includes(r.status)); + }); + + // Job queue polling state + let jobQueuePollInterval = null; + let lastJobQueueFetch = 0; // Timestamp of last fetch + const JOB_QUEUE_POLL_INTERVAL = 5000; // Poll every 5 seconds when active + const JOB_QUEUE_FETCH_DEBOUNCE = 2000; // Minimum 2 seconds between fetches + + // Computed properties for different job states + const activeJobs = computed(() => allJobs.value.filter(j => ['queued', 'processing'].includes(j.job_status))); + const completedJobs = computed(() => allJobs.value.filter(j => j.job_status === 'completed')); + const failedJobs = computed(() => allJobs.value.filter(j => j.job_status === 'failed')); + + // Job queue details map (for backward compatibility with progress popup) + const jobQueueDetails = computed(() => { + const detailsMap = {}; + for (const job of allJobs.value) { + // Use recording_id as key, store the most relevant job (prefer active over completed) + if (!detailsMap[job.recording_id] || ['queued', 'processing'].includes(job.job_status)) { + detailsMap[job.recording_id] = job; + } + } + return detailsMap; + }); + + // Fetch job queue status from backend (with debounce protection) + const fetchJobQueueStatus = async (force = false) => { + const now = Date.now(); + // Debounce: skip if fetched recently (unless forced) + if (!force && (now - lastJobQueueFetch) < JOB_QUEUE_FETCH_DEBOUNCE) { + return; + } + lastJobQueueFetch = now; + + try { + const response = await fetch('/api/recordings/job-queue-status'); + if (response.ok) { + const data = await response.json(); + allJobs.value = data.jobs || []; + } else if (response.status === 429) { + console.warn('Job queue polling rate limited'); + } + } catch (error) { + console.error('Error fetching job queue status:', error); + } + }; + + // Start polling job queue status + const startJobQueuePolling = () => { + if (jobQueuePollInterval) return; + fetchJobQueueStatus(true); // Fetch immediately (forced) + jobQueuePollInterval = setInterval(() => fetchJobQueueStatus(true), JOB_QUEUE_POLL_INTERVAL); + }; + + const stopJobQueuePolling = () => { + if (jobQueuePollInterval) { + clearInterval(jobQueuePollInterval); + jobQueuePollInterval = null; + } + }; + + // Check if we have active items that need polling + const hasActiveProcessing = computed(() => { + const completedStatuses = ['completed', 'failed', 'COMPLETED', 'FAILED']; + const hasActiveUploads = uploadQueue.value.some(item => + !completedStatuses.includes(item.status) + ); + const hasActiveJobs = activeJobs.value.length > 0; + const hasProcessingRecordings = backendProcessingRecordings.value.length > 0; + return hasActiveUploads || hasActiveJobs || hasProcessingRecordings; + }); + + // Start/stop polling based on whether we have active items + watch(hasActiveProcessing, (hasActive) => { + if (hasActive) { + startJobQueuePolling(); + } else { + // Stop polling after a delay (to catch final status updates) + setTimeout(() => { + if (!hasActiveProcessing.value) { + stopJobQueuePolling(); + } + }, 10000); + } + }, { immediate: true }); + + // When popup opens, do a one-time fetch to populate it + watch(() => progressPopupClosed.value, (closed) => { + if (!closed) { + // Popup just opened - fetch current status + fetchJobQueueStatus(); + } + }); + + // Track completed recording IDs to detect new completions + const completedRecordingIds = new Set(); + + // Watch allJobs for completed/failed transitions - update local recordings state + watch(allJobs, async (jobs) => { + for (const job of jobs) { + if (job.job_status === 'completed' && !completedRecordingIds.has(job.recording_id)) { + completedRecordingIds.add(job.recording_id); + try { + const fullResponse = await fetch(`/api/recordings/${job.recording_id}`); + if (fullResponse.ok) { + const data = await fullResponse.json(); + const idx = recordings.value.findIndex(r => r.id === job.recording_id); + if (idx !== -1) { + recordings.value[idx] = data; + } + if (selectedRecording.value?.id === job.recording_id) { + selectedRecording.value = data; + } + // Update display name on upload queue item + const queueItem = uploadQueue.value.find(u => u.recordingId === job.recording_id); + if (queueItem) { + queueItem.displayName = data.title || data.original_filename || queueItem.file?.name; + queueItem.status = 'completed'; + } + // Refresh token budget + if (typeof loadTokenBudget === 'function') loadTokenBudget(); + } + } catch (err) { + console.error(`Error fetching completed recording ${job.recording_id}:`, err); + } + } else if (job.job_status === 'failed' && !completedRecordingIds.has(`fail_${job.recording_id}`)) { + completedRecordingIds.add(`fail_${job.recording_id}`); + try { + const failedResponse = await fetch(`/api/recordings/${job.recording_id}`); + if (failedResponse.ok) { + const failedData = await failedResponse.json(); + const idx = recordings.value.findIndex(r => r.id === job.recording_id); + if (idx !== -1) { + recordings.value[idx] = failedData; + } + if (selectedRecording.value?.id === job.recording_id) { + selectedRecording.value = failedData; + } + const queueItem = uploadQueue.value.find(u => u.recordingId === job.recording_id); + if (queueItem) { + queueItem.status = 'failed'; + queueItem.error = failedData.error_message || safeT('errors.processingFailedOnServer'); + } + } + } catch (err) { + console.error(`Error fetching failed recording ${job.recording_id}:`, err); + } + } + } + }, { deep: true }); + + // Get job details for a recording + const getJobDetails = (recordingId) => { + return jobQueueDetails.value[recordingId] || null; + }; + + // Retry a failed job + const retryJob = async (jobId) => { + try { + const response = await fetch(`/api/recordings/jobs/${jobId}/retry`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' } + }); + if (response.ok) { + fetchJobQueueStatus(); + showToast(safeT('messages.jobQueuedForRetry'), 'success'); + } else { + const data = await response.json(); + showToast(data.error || safeT('messages.failedToRetryJob'), 'error'); + } + } catch (error) { + console.error('Error retrying job:', error); + showToast(safeT('messages.failedToRetryJob'), 'error'); + } + }; + + // Delete/clear a job + const deleteJob = async (jobId) => { + try { + const response = await fetch(`/api/recordings/jobs/${jobId}`, { + method: 'DELETE' + }); + if (response.ok) { + fetchJobQueueStatus(); + } else { + const data = await response.json(); + showToast(data.error || safeT('messages.failedToDeleteJob'), 'error'); + } + } catch (error) { + console.error('Error deleting job:', error); + } + }; + + // Clear all completed jobs + const clearCompletedJobs = async () => { + try { + const response = await fetch('/api/recordings/jobs/clear-completed', { + method: 'POST', + headers: { 'Content-Type': 'application/json' } + }); + if (response.ok) { + // Clear upload queue completed/failed items + uploadQueue.value = uploadQueue.value.filter(item => + !['completed', 'failed', 'COMPLETED', 'FAILED'].includes(item.status) + ); + // Force fetch to update the job list (bypass debounce) + await fetchJobQueueStatus(true); + } + } catch (error) { + console.error('Error clearing completed jobs:', error); + } + }; + + // Combined clear function for backward compatibility + const clearAllCompleted = () => { + clearCompletedJobs(); + }; + + // ============================================ + // UNIFIED PROGRESS TRACKING SYSTEM + // Merges upload queue, backend recordings, and job queue into single list + // Each recording appears ONCE with its current status + // ============================================ + const unifiedProgressItems = computed(() => { + const items = new Map(); // Key by recordingId or clientId + + // 1. First, add all backend jobs (these have the most accurate status) + for (const job of allJobs.value) { + const key = `rec_${job.recording_id}`; + const existing = items.get(key); + + // Determine unified status from job + let unifiedStatus = 'queued'; + if (job.job_status === 'processing') { + unifiedStatus = job.queue_type === 'summary' ? 'summarizing' : 'transcribing'; + } else if (job.job_status === 'completed') { + unifiedStatus = 'completed'; + } else if (job.job_status === 'failed') { + unifiedStatus = 'failed'; + } + + // Prefer active jobs over completed/failed + if (!existing || ['queued', 'transcribing', 'summarizing'].includes(unifiedStatus)) { + items.set(key, { + id: key, + recordingId: job.recording_id, + jobId: job.id, + clientId: null, + title: job.recording_title || 'Untitled', + status: unifiedStatus, + progress: unifiedStatus === 'transcribing' ? 50 : (unifiedStatus === 'summarizing' ? 80 : null), + progressMessage: unifiedStatus === 'queued' ? `#${job.position || '?'} in queue` : + unifiedStatus === 'transcribing' ? 'Transcribing audio...' : + unifiedStatus === 'summarizing' ? 'Generating summary...' : + unifiedStatus === 'completed' ? 'Done' : 'Failed', + queuePosition: job.position, + errorMessage: job.error_message, + friendlyError: job.error_message ? parseUnformattedError(job.error_message) : null, + completedAt: job.completed_at, + source: 'job' + }); + } + } + + // 2. Add upload queue items (client-side tracking) + for (const upload of uploadQueue.value) { + // If we have a recordingId and it's already tracked from jobs, merge upload info + if (upload.recordingId) { + const key = `rec_${upload.recordingId}`; + const existing = items.get(key); + + if (existing) { + existing.clientId = upload.clientId; + existing.file = upload.file; + existing.duplicateWarning = upload.duplicateWarning || null; + // If still uploading, override job status with upload status + if (upload.status === 'uploading') { + existing.status = 'uploading'; + existing.progress = upload.progress || 0; + existing.progressMessage = 'Uploading...'; + existing.title = upload.displayName || upload.file?.name || existing.title; + } + continue; + } + } + + // Determine unified status from upload status (per-item progress) + let unifiedStatus = 'ready'; + let progressVal = upload.progress || 0; + let progressMsg = 'Waiting to upload...'; + + if (upload.status === 'uploading') { + unifiedStatus = 'uploading'; + progressMsg = 'Uploading...'; + } else if (upload.status === 'pending') { + unifiedStatus = 'queued'; + progressVal = 100; + progressMsg = 'Uploaded, waiting for processing...'; + } else if (upload.status === 'completed' || upload.status === 'COMPLETED') { + unifiedStatus = 'completed'; + progressMsg = 'Done'; + } else if (upload.status === 'failed' || upload.status === 'FAILED') { + unifiedStatus = 'upload_failed'; + progressMsg = upload.error || 'Upload failed'; + } else if (upload.status === 'ready') { + unifiedStatus = 'ready'; + progressMsg = 'Waiting to upload...'; + } else if (upload.status === 'queued') { + unifiedStatus = 'ready'; + progressMsg = 'Waiting to upload...'; + } + + const key = upload.recordingId ? `rec_${upload.recordingId}` : `client_${upload.clientId}`; + + // Skip if we already have an entry with the same recordingId (from jobs) + if (upload.recordingId && items.has(key)) { + continue; + } + + items.set(key, { + id: key, + recordingId: upload.recordingId, + jobId: null, + clientId: upload.clientId, + title: upload.displayName || upload.file?.name || 'Unknown file', + status: unifiedStatus, + progress: progressVal, + progressMessage: progressMsg, + queuePosition: null, + errorMessage: upload.status === 'failed' ? upload.error : null, + duplicateWarning: upload.duplicateWarning || null, + file: upload.file, + source: 'upload' + }); + } + + // Convert to array and sort: active first, then by status priority + const statusOrder = { + 'uploading': 1, + 'transcribing': 2, + 'summarizing': 3, + 'queued': 4, + 'ready': 5, + 'completed': 6, + 'failed': 7, + 'upload_failed': 8 + }; + + return Array.from(items.values()).sort((a, b) => { + return (statusOrder[a.status] || 99) - (statusOrder[b.status] || 99); + }); + }); + + // Filtered views of unified items + const activeProgressItems = computed(() => + unifiedProgressItems.value.filter(item => + ['uploading', 'transcribing', 'summarizing', 'queued', 'ready'].includes(item.status) + ) + ); + + const completedProgressItems = computed(() => + unifiedProgressItems.value.filter(item => item.status === 'completed') + ); + + const failedProgressItems = computed(() => + unifiedProgressItems.value.filter(item => + ['failed', 'upload_failed'].includes(item.status) + ) + ); + + // Helper to get status display info + const getStatusDisplay = (status) => { + const displays = { + 'ready': { label: 'Waiting', color: 'gray', icon: 'fa-clock' }, + 'uploading': { label: 'Uploading', color: 'blue', icon: 'fa-cloud-upload-alt', animate: true }, + 'queued': { label: 'Queued', color: 'yellow', icon: 'fa-clock' }, + 'transcribing': { label: 'Transcribing', color: 'purple', icon: 'fa-microphone-alt', animate: true }, + 'summarizing': { label: 'Summarizing', color: 'green', icon: 'fa-file-alt', animate: true }, + 'completed': { label: 'Done', color: 'green', icon: 'fa-check-circle' }, + 'failed': { label: 'Failed', color: 'red', icon: 'fa-exclamation-circle' }, + 'upload_failed': { label: 'Upload Failed', color: 'red', icon: 'fa-exclamation-circle' } + }; + return displays[status] || displays['ready']; + }; + + // Cancel/remove an item from the queue + const removeProgressItem = async (item) => { + if (item.jobId && ['failed', 'completed'].includes(item.status)) { + // Delete backend job + await deleteJob(item.jobId); + } else if (item.clientId && !item.jobId) { + // Remove from upload queue + uploadQueue.value = uploadQueue.value.filter(u => u.clientId !== item.clientId); + } + }; + + // Retry a failed item + const retryProgressItem = async (item) => { + if (item.jobId) { + await retryJob(item.jobId); + } + }; + + // Track recently completed for backward compat (now using allJobs) + const recentlyCompletedBackend = computed(() => { + return completedJobs.value.map(j => ({ + id: j.recording_id, + title: j.recording_title || 'Untitled', + status: 'completed', + completedAt: j.completed_at + })); + }); + + // Combined processing queue count + const totalProcessingCount = computed(() => { + return activeProgressItems.value.length; + }); + + // Should show the processing popup + const showProcessingPopup = computed(() => { + return unifiedProgressItems.value.length > 0; + }); + + // All completed items count + const allCompletedCount = computed(() => { + return completedProgressItems.value.length + failedProgressItems.value.length; + }); + + // Speaker computed properties + const hasSpeakerNames = computed(() => { + // Check if any speaker has a non-empty name + return Object.values(speakerMap.value).some(speakerData => + speakerData && speakerData.name && speakerData.name.trim() !== '' + ); + }); + + // Tags with custom prompts for reprocess modal + const tagsWithCustomPrompts = computed(() => { + return availableTags.value.filter(tag => tag.custom_prompt && tag.custom_prompt.trim() !== ''); + }); + + // Recording disclaimer parsed as markdown + const recordingDisclaimerHtml = computed(() => { + if (!recordingDisclaimer.value || recordingDisclaimer.value.trim() === '') { + return ''; + } + return marked.parse(recordingDisclaimer.value); + }); + + // Upload disclaimer parsed as markdown + const uploadDisclaimerHtml = computed(() => { + if (!uploadDisclaimer.value || uploadDisclaimer.value.trim() === '') { + return ''; + } + return marked.parse(uploadDisclaimer.value); + }); + + // Custom banner parsed as markdown + const customBannerHtml = computed(() => { + if (!customBanner.value || customBanner.value.trim() === '') { + return ''; + } + return marked.parse(customBanner.value); + }); + + // Get tag prompt preview + const getTagPromptPreview = (tagId) => { + const tag = availableTags.value.find(t => t.id == tagId); + if (tag && tag.custom_prompt) { + // Return first 100 characters of the custom prompt + return tag.custom_prompt.length > 100 + ? tag.custom_prompt.substring(0, 100) + '...' + : tag.custom_prompt; + } + return ''; + }; + + // Duplicates modal + const openDuplicatesModal = (duplicateInfo) => { + duplicatesModalData.value = duplicateInfo; + showDuplicatesModal.value = true; + }; + + const navigateToDuplicate = (id) => { + showDuplicatesModal.value = false; + const rec = recordings.value.find(r => r.id === id); + // selectRecording always re-fetches full data from the API + recordingsComposable.selectRecording(rec || { id }); + }; + + // ========================================================================= + // WATCHERS + // ========================================================================= + // Watch for search query changes + watch(searchQuery, (newQuery) => { + recordingsComposable.debouncedSearch(newQuery); + }); + + // Auto-apply filters when they change + watch(filterTags, () => { + recordingsComposable.applyAdvancedFilters(); + }, { deep: true }); + + watch(filterSpeakers, () => { + recordingsComposable.applyAdvancedFilters(); + }, { deep: true }); + + watch(filterDatePreset, () => { + recordingsComposable.applyAdvancedFilters(); + }); + + watch(filterDateRange, () => { + recordingsComposable.applyAdvancedFilters(); + }, { deep: true }); + + watch(filterTextQuery, (newValue) => { + clearTimeout(searchDebounceTimer.value); + searchDebounceTimer.value = setTimeout(() => { + recordingsComposable.applyAdvancedFilters(); + }, 300); + }); + + watch(filterStarred, () => { + recordingsComposable.loadRecordings(1, false, searchQuery.value); + }); + + watch(filterInbox, () => { + recordingsComposable.loadRecordings(1, false, searchQuery.value); + }); + + watch(filterFolder, (newValue) => { + // Persist folder selection to localStorage + if (newValue) { + localStorage.setItem('selectedFolder', newValue); + } else { + localStorage.removeItem('selectedFolder'); + } + recordingsComposable.loadRecordings(1, false, searchQuery.value); + }); + + watch(sortBy, () => { + recordingsComposable.loadRecordings(1, false, searchQuery.value); + }); + + watch(showArchivedRecordings, (newValue, oldValue) => { + // Prevent unnecessary reloads when being set by the other watcher + if (newValue === oldValue) return; + + // Reload recordings when switching between archived/normal view + if (showArchivedRecordings.value) { + showSharedWithMe.value = false; // Can't show both at once + } + recordingsComposable.loadRecordings(1, false, searchQuery.value); + }); + + watch(showSharedWithMe, (newValue, oldValue) => { + // Prevent unnecessary reloads when being set by the other watcher + if (newValue === oldValue) return; + + // Reload recordings when switching to/from shared view + if (showSharedWithMe.value) { + showArchivedRecordings.value = false; // Can't show both at once + } + recordingsComposable.loadRecordings(1, false, searchQuery.value); + }); + + // Watch for view changes to initialize recording notes editor + watch(currentView, async (newView, oldView) => { + if (newView === 'recording') { + // Initialize recording notes editor when entering recording view + await nextTick(); + uiComposable.initializeRecordingNotesEditor(); + } else if (oldView === 'recording') { + // Destroy editor when leaving recording view + uiComposable.destroyRecordingNotesEditor(); + } + + // Clear incognito data when navigating away from detail view + // This ensures incognito data doesn't linger when user goes to upload/recording view + if (oldView === 'detail' && newView !== 'detail') { + if (uploadComposable.hasIncognitoRecording()) { + console.log('[Incognito] Clearing data on view change from detail'); + sessionStorage.removeItem('speakr_incognito_recording'); + incognitoRecording.value = null; + } + } + }); + + // Re-initialize recording notes editor when recording stops (DOM switches from recording template to accordion template) + watch(isRecording, async (newVal, oldVal) => { + if (oldVal === true && newVal === false && currentView.value === 'recording') { + uiComposable.destroyRecordingNotesEditor(); + expandedSection.value = recordingNotes.value ? 'notes' : 'settings'; + await nextTick(); + uiComposable.initializeRecordingNotesEditor(); + } + }); + + // Refresh CodeMirror when notes section becomes visible in accordion + watch(expandedSection, async (newSection) => { + if (newSection === 'notes' && recordingMarkdownEditorInstance.value) { + await nextTick(); + recordingMarkdownEditorInstance.value.codemirror.refresh(); + } + }); + + // Watch for mobile tab changes to reinitialize editors if still in edit mode + watch(mobileTab, async (newTab) => { + // Wait for DOM to update + await nextTick(); + + // If switching to summary tab and still in edit mode, reinitialize editor + if (newTab === 'summary' && editingSummary.value) { + uiComposable.initializeSummaryMarkdownEditor(); + } + + // If switching to notes tab and still in edit mode, reinitialize editor + if (newTab === 'notes' && editingNotes.value) { + uiComposable.initializeMarkdownEditor(); + } + }); + + // Watch for desktop tab changes to reinitialize editors if still in edit mode + watch(selectedTab, async (newTab) => { + // Wait for DOM to update + await nextTick(); + + // If switching to summary tab and still in edit mode, reinitialize editor + if (newTab === 'summary' && editingSummary.value) { + uiComposable.initializeSummaryMarkdownEditor(); + } + + // If switching to notes tab and still in edit mode, reinitialize editor + if (newTab === 'notes' && editingNotes.value) { + uiComposable.initializeMarkdownEditor(); + } + }); + + // Watch for selectedRecording changes to reset chat + watch(selectedRecording, (newRecording, oldRecording) => { + // Only clear if we're actually switching to a different recording + if (oldRecording && newRecording && oldRecording.id !== newRecording.id) { + chatMessages.value = []; + chatInput.value = ''; + } + }); + + // ========================================================================= + // LIFECYCLE + // ========================================================================= + onMounted(async () => { + // Get config from data attributes + const appElement = document.getElementById('app'); + if (appElement) { + useAsrEndpoint.value = appElement.dataset.useAsrEndpoint === 'True'; + connectorSupportsDiarization.value = appElement.dataset.connectorSupportsDiarization === 'True'; + connectorSupportsSpeakerCount.value = appElement.dataset.connectorSupportsSpeakerCount === 'True'; + currentUserName.value = appElement.dataset.currentUserName || ''; + } + + // Initialize UI + uiComposable.initializeDarkMode(); + uiComposable.initializeColorScheme(); + uiComposable.initializeSidebar(); + + // Check for recoverable recording from IndexedDB + try { + const recoverable = await audioComposable.checkForRecoverableRecording(); + if (recoverable && recoverable.chunks && recoverable.chunks.length > 0) { + recoverableRecording.value = recoverable; + showRecoveryModal.value = true; + console.log('[App] Found recoverable recording, showing recovery dialog'); + } + } catch (error) { + console.error('[App] Failed to check for recoverable recording:', error); + } + + // Load initial data + await Promise.all([ + recordingsComposable.loadRecordings(), + recordingsComposable.loadTags(), + recordingsComposable.loadFolders(), + recordingsComposable.loadSpeakers(), + loadTokenBudget() + ]); + + // Clean up orphaned incognito data if we're not viewing incognito recording + // This can happen if user navigated away without the cleanup triggering + if (uploadComposable.hasIncognitoRecording() && selectedRecording.value?.id !== 'incognito') { + console.log('[App] Cleaning up orphaned incognito data from sessionStorage'); + sessionStorage.removeItem('speakr_incognito_recording'); + incognitoRecording.value = null; + } + + // Load config + try { + const response = await fetch('/api/config'); + if (response.ok) { + const config = await response.json(); + maxFileSizeMB.value = config.max_file_size_mb || 250; + chunkingEnabled.value = config.chunking_enabled !== false; + chunkingMode.value = config.chunking_mode || 'size'; + chunkingLimit.value = config.chunking_limit || 20; + recordingDisclaimer.value = config.recording_disclaimer || ''; + uploadDisclaimer.value = config.upload_disclaimer || ''; + customBanner.value = config.custom_banner || ''; + canDeleteRecordings.value = config.can_delete_recordings !== false; + enableInternalSharing.value = config.enable_internal_sharing === true; + enableArchiveToggle.value = config.enable_archive_toggle === true; + showUsernamesInUI.value = config.show_usernames_in_ui === true; + enableIncognitoMode.value = config.enable_incognito_mode === true; + foldersEnabled.value = config.enable_folders === true; + maxConcurrentUploads.value = config.max_concurrent_uploads || 3; + + // Restore saved folder selection from localStorage + if (foldersEnabled.value) { + const savedFolder = localStorage.getItem('selectedFolder'); + if (savedFolder) { + filterFolder.value = savedFolder; + } + } + + // Set default incognito mode state if feature enabled and default is true + if (config.enable_incognito_mode && config.incognito_mode_default) { + incognitoMode.value = true; + } + } + } catch (error) { + console.error('Failed to load config:', error); + } + + // Initialize UI settings from localStorage + uiComposable.initializeUI(); + + // Load incognito recording from sessionStorage if exists (only if feature is enabled) + if (enableIncognitoMode.value) { + uploadComposable.loadIncognitoRecording(); + } + + // Initialize audio capabilities + await audioComposable.initializeAudio(); + + // Initialize PWA features + pwaComposable.initPWA(); + + // Show app - hide loader and show main content + const loader = document.getElementById('loader'); + const appEl = document.getElementById('app'); + if (loader) { + loader.style.opacity = '0'; + setTimeout(() => { + loader.style.display = 'none'; + }, 500); + } + if (appEl) { + appEl.style.opacity = '1'; + appEl.classList.remove('opacity-0'); + } + + // Also hide AppLoader overlay if it exists + if (window.AppLoader) { + window.AppLoader.hide(); + } + + // Window resize handler + window.addEventListener('resize', () => { + windowWidth.value = window.innerWidth; + }); + + // Visibility change handler for wake lock + document.addEventListener('visibilitychange', audioComposable.handleVisibilityChange); + + // Prevent data loss on tab close/refresh during recording or incognito mode + window.addEventListener('beforeunload', (e) => { + // Check for unsaved recording + if (audioComposable.hasUnsavedRecording()) { + e.preventDefault(); + e.returnValue = ''; // Chrome requires this + return 'You have an unsaved recording. Are you sure you want to leave?'; + } + // Check for incognito recording that would be lost + // Only warn if we're currently viewing the incognito recording + // (if user navigated away, they've implicitly abandoned it or already been warned) + if (uploadComposable.hasIncognitoRecording() && selectedRecording.value?.id === 'incognito') { + e.preventDefault(); + e.returnValue = ''; // Chrome requires this + return 'You have an incognito recording that will be lost. Are you sure you want to leave?'; + } + }); + + // Initialize bulk selection keyboard listeners + bulkSelectionComposable.initSelectionKeyboardListeners(); + }); + + // ========================================================================= + // RECORDING RECOVERY FUNCTIONS + // ========================================================================= + + const recoverRecording = async () => { + try { + showRecoveryModal.value = false; + + const recovered = await audioComposable.recoverRecordingFromDB(); + if (recovered) { + currentView.value = 'recording'; + showToast(safeT('messages.recordingRecovered'), 'success'); + } else { + showToast(safeT('messages.failedToRecoverRecording'), 'error'); + } + + recoverableRecording.value = null; + } catch (error) { + console.error('[App] Failed to recover recording:', error); + showToast(safeT('messages.errorRecoveringRecording'), 'error'); + } + }; + + const cancelRecovery = async () => { + try { + showRecoveryModal.value = false; + + // Clear the recording from IndexedDB + await audioComposable.clearRecordingSession(); + + showToast(safeT('messages.recordingDiscarded'), 'info'); + recoverableRecording.value = null; + } catch (error) { + console.error('[App] Failed to discard recording:', error); + } + }; + + const formatRecordingMode = (mode) => { + const modes = { + 'microphone': t('recording.modeMicrophone'), + 'system': t('recording.modeSystem'), + 'both': t('recording.modeBoth') + }; + return modes[mode] || mode; + }; + + // ========================================================================= + // WATCHERS + // ========================================================================= + + // Update badge count when recordings change + watch(recordings, (newRecordings) => { + if (newRecordings && Array.isArray(newRecordings)) { + pwaComposable.updateBadgeCount(newRecordings); + } + }); + + // ========================================================================= + // RETURN ALL STATE AND METHODS + // ========================================================================= + return { + // Translation + t, tc, + + // State + ...state, + + // Computed + isMobileScreen, + isMobileDevice, + processedTranscription, + groupedRecordings, + filteredAvailableTags, + filteredTagsForFilter, + filteredSpeakersForFilter, + selectedTags, + colorSchemes, + dropdownPositions, + toasts, + datePresetOptions, + languageOptions, + activeRecordingMetadata, + totalInQueue, + completedInQueue, + finishedFilesInQueue, + waitingFilesInQueue, + pendingQueueFiles, + backendProcessingRecordings, + totalProcessingCount, + showProcessingPopup, + jobQueueDetails, + getJobDetails, + allJobs, + activeJobs, + completedJobs, + failedJobs, + retryJob, + deleteJob, + clearCompletedJobs, + recentlyCompletedBackend, + clearAllCompleted, + allCompletedCount, + // Unified progress tracking + unifiedProgressItems, + activeProgressItems, + completedProgressItems, + failedProgressItems, + getStatusDisplay, + removeProgressItem, + retryProgressItem, + hasSpeakerNames, + showDuplicatesModal, + videoCollapsed, + videoFullscreen, + fullscreenControlsVisible, + currentSubtitle, + duplicatesModalData, + openDuplicatesModal, + navigateToDuplicate, + tagsWithCustomPrompts, + recordingDisclaimerHtml, + uploadDisclaimerHtml, + customBannerHtml, + acceptUploadDisclaimer, + cancelUploadDisclaimer, + getTagPromptPreview, + + // Utilities + formatFileSize, + formatDisplayDate, + formatShortDate, + formatStatus, + getStatusClass, + formatTime, + formatDuration, + formatEventDateTime, + formatDateTime: formatEventDateTime, // Alias for recovery modal + setGlobalError, + showToast, + loadTokenBudget, + getContrastTextColor, + getBubbleGlobalIndex, + formatRecordingMode, + + // Modal audio (independent from main player) + modalAudioCurrentTime, + modalAudioDuration, + modalAudioIsPlaying, + modalAudioProgressPercent, + handleModalAudioTimeUpdate, + handleModalAudioLoadedMetadata, + handleModalAudioPlayPause, + resetModalAudioState, + + // Virtual scroll + speakerModalTranscriptRef, + mainTranscriptRef, + asrEditorRef, + speakerModalVisibleSegments: speakerModalVirtualScroll.visibleItems, + speakerModalSpacerBefore: speakerModalVirtualScroll.spacerBefore, + speakerModalSpacerAfter: speakerModalVirtualScroll.spacerAfter, + onSpeakerModalScroll: speakerModalVirtualScroll.onScroll, + mainTranscriptVisibleSegments: mainTranscriptVirtualScroll.visibleItems, + mainTranscriptSpacerBefore: mainTranscriptVirtualScroll.spacerBefore, + mainTranscriptSpacerAfter: mainTranscriptVirtualScroll.spacerAfter, + onMainTranscriptScroll: mainTranscriptVirtualScroll.onScroll, + asrEditorVisibleSegments: asrEditorVirtualScroll.visibleItems, + asrEditorSpacerBefore: asrEditorVirtualScroll.spacerBefore, + asrEditorSpacerAfter: asrEditorVirtualScroll.spacerAfter, + onAsrEditorScroll: asrEditorVirtualScroll.onScroll, + scrollToSegmentIndex, + getVirtualItemKey, + + // Recording recovery + showRecoveryModal, + recoverableRecording, + recoverRecording, + cancelRecovery, + + // Composable methods + ...recordingsComposable, + ...uploadComposable, + ...audioComposable, + ...uiComposable, + ...modalsComposable, + ...sharingComposable, + ...reprocessComposable, + ...transcriptionComposable, + ...speakersComposable, + ...chatComposable, + ...tagsComposable, + ...foldersComposable, + ...pwaComposable, + ...bulkSelectionComposable, + ...bulkOperationsComposable + }; + }, + delimiters: ['${', '}'] + }); + + app.config.globalProperties.t = safeT; + app.config.globalProperties.tc = (key, count, params = {}) => { + if (!window.i18n || !window.i18n.tc) { + return key; + } + return window.i18n.tc(key, count, params); + }; + + app.provide('t', safeT); + app.provide('tc', (key, count, params = {}) => { + if (!window.i18n || !window.i18n.tc) { + return key; + } + return window.i18n.tc(key, count, params); + }); + + app.mount('#app'); +}); diff --git a/static/js/composables/index.js b/static/js/composables/index.js new file mode 100644 index 0000000..d18b276 --- /dev/null +++ b/static/js/composables/index.js @@ -0,0 +1,17 @@ +/** + * Composables index - export all composables for easy importing + * + * Usage (with ES modules/build system): + * import { useRecordings, useUpload, useUI } from './composables'; + */ + +export { usePagination } from './usePagination.js'; +export { useUI } from './useUI.js'; +export { useFilters } from './useFilters.js'; +export { usePlayer } from './usePlayer.js'; +export { useSharing } from './useSharing.js'; +export { useTranscript } from './useTranscript.js'; +export { useChat } from './useChat.js'; +export { useAudioRecorder } from './useAudioRecorder.js'; +export { useUpload } from './useUpload.js'; +export { useRecordings } from './useRecordings.js'; diff --git a/static/js/composables/useAudioRecorder.js b/static/js/composables/useAudioRecorder.js new file mode 100644 index 0000000..fa35d70 --- /dev/null +++ b/static/js/composables/useAudioRecorder.js @@ -0,0 +1,217 @@ +/** + * Audio Recorder composable + * Handles audio recording from microphone and/or system audio + */ + +import { ref, computed } from 'vue'; + +export function useAudioRecorder() { + // State + const isRecording = ref(false); + const isPaused = ref(false); + const audioChunks = ref([]); + const audioBlobURL = ref(null); + const recordingMode = ref('microphone'); + const mediaRecorder = ref(null); + const audioContext = ref(null); + const activeStreams = ref([]); + const recordingDuration = ref(0); + const recordingSize = ref(0); + const actualBitrate = ref(128000); + const recordingTimer = ref(null); + const recordingNotes = ref(''); + const showRecordingDisclaimerModal = ref(false); + const pendingRecordingMode = ref(null); + const recordingDisclaimer = ref(''); + + // Computed + const canRecordAudio = computed(() => navigator.mediaDevices && navigator.mediaDevices.getUserMedia); + const canRecordSystemAudio = computed(() => navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia); + + const recordingTimeFormatted = computed(() => { + const hours = Math.floor(recordingDuration.value / 3600); + const mins = Math.floor((recordingDuration.value % 3600) / 60); + const secs = recordingDuration.value % 60; + if (hours > 0) { + return hours + ':' + String(mins).padStart(2, '0') + ':' + String(secs).padStart(2, '0'); + } + return mins + ':' + String(secs).padStart(2, '0'); + }); + + // Methods + const startRecording = async (mode = 'microphone') => { + if (recordingDisclaimer.value && recordingDisclaimer.value.trim()) { + pendingRecordingMode.value = mode; + showRecordingDisclaimerModal.value = true; + return; + } + await startRecordingActual(mode); + }; + + const acceptDisclaimer = async () => { + showRecordingDisclaimerModal.value = false; + if (pendingRecordingMode.value) { + await startRecordingActual(pendingRecordingMode.value); + pendingRecordingMode.value = null; + } + }; + + const cancelDisclaimer = () => { + showRecordingDisclaimerModal.value = false; + pendingRecordingMode.value = null; + }; + + const startRecordingActual = async (mode = 'microphone') => { + recordingMode.value = mode; + audioChunks.value = []; + audioBlobURL.value = null; + recordingNotes.value = ''; + activeStreams.value = []; + recordingDuration.value = 0; + recordingSize.value = 0; + + try { + let combinedStream = null; + let micStream = null; + let systemStream = null; + + if (mode === 'microphone' || mode === 'both') { + if (!canRecordAudio.value) throw new Error('Microphone not supported'); + micStream = await navigator.mediaDevices.getUserMedia({ audio: true }); + activeStreams.value.push(micStream); + } + + if (mode === 'system' || mode === 'both') { + if (!canRecordSystemAudio.value) throw new Error('System audio not supported'); + try { + systemStream = await navigator.mediaDevices.getDisplayMedia({ audio: true, video: true }); + if (systemStream.getAudioTracks().length === 0) { + systemStream.getVideoTracks().forEach(track => track.stop()); + throw new Error('System audio permission not granted'); + } + activeStreams.value.push(systemStream); + } catch (err) { + if (mode === 'system') throw err; + systemStream = null; + } + } + + // Combine streams + if (micStream && systemStream) { + audioContext.value = new (window.AudioContext || window.webkitAudioContext)(); + const micSource = audioContext.value.createMediaStreamSource(micStream); + const systemSource = audioContext.value.createMediaStreamSource(systemStream); + const destination = audioContext.value.createMediaStreamDestination(); + micSource.connect(destination); + systemSource.connect(destination); + combinedStream = new MediaStream([destination.stream.getAudioTracks()[0]]); + } else if (systemStream) { + combinedStream = new MediaStream(systemStream.getAudioTracks()); + } else if (micStream) { + combinedStream = micStream; + } + + if (!combinedStream) throw new Error('No audio streams available'); + + // Create MediaRecorder + const options = { mimeType: 'audio/webm;codecs=opus', audioBitsPerSecond: 32000 }; + if (MediaRecorder.isTypeSupported(options.mimeType)) { + mediaRecorder.value = new MediaRecorder(combinedStream, options); + actualBitrate.value = 32000; + } else { + mediaRecorder.value = new MediaRecorder(combinedStream); + actualBitrate.value = 128000; + } + + mediaRecorder.value.ondataavailable = (event) => { + if (event.data && event.data.size > 0) { + audioChunks.value.push(event.data); + recordingSize.value += event.data.size; + } + }; + + mediaRecorder.value.onstop = () => { + const audioBlob = new Blob(audioChunks.value, { type: mediaRecorder.value.mimeType }); + audioBlobURL.value = URL.createObjectURL(audioBlob); + }; + + mediaRecorder.value.start(1000); + isRecording.value = true; + + recordingTimer.value = setInterval(() => { + recordingDuration.value++; + }, 1000); + + } catch (error) { + stopAllStreams(); + throw error; + } + }; + + const stopRecording = () => { + if (mediaRecorder.value && isRecording.value) { + mediaRecorder.value.stop(); + isRecording.value = false; + isPaused.value = false; + + if (recordingTimer.value) { + clearInterval(recordingTimer.value); + recordingTimer.value = null; + } + stopAllStreams(); + } + }; + + const pauseRecording = () => { + if (mediaRecorder.value && isRecording.value && !isPaused.value) { + mediaRecorder.value.pause(); + isPaused.value = true; + if (recordingTimer.value) { + clearInterval(recordingTimer.value); + recordingTimer.value = null; + } + } + }; + + const resumeRecording = () => { + if (mediaRecorder.value && isRecording.value && isPaused.value) { + mediaRecorder.value.resume(); + isPaused.value = false; + recordingTimer.value = setInterval(() => { + recordingDuration.value++; + }, 1000); + } + }; + + const stopAllStreams = () => { + activeStreams.value.forEach(stream => { + stream.getTracks().forEach(track => track.stop()); + }); + activeStreams.value = []; + + if (audioContext.value) { + audioContext.value.close().catch(e => console.error("Error closing AudioContext:", e)); + audioContext.value = null; + } + }; + + const resetRecording = () => { + stopRecording(); + audioChunks.value = []; + audioBlobURL.value = null; + recordingDuration.value = 0; + recordingSize.value = 0; + recordingNotes.value = ''; + }; + + const getRecordingBlob = () => { + if (audioChunks.value.length === 0) return null; + return new Blob(audioChunks.value, { type: 'audio/webm' }); + }; + + return { + isRecording, isPaused, audioBlobURL, recordingMode, recordingDuration, recordingSize, recordingNotes, + showRecordingDisclaimerModal, recordingDisclaimer, canRecordAudio, canRecordSystemAudio, recordingTimeFormatted, + startRecording, stopRecording, pauseRecording, resumeRecording, resetRecording, acceptDisclaimer, cancelDisclaimer, getRecordingBlob + }; +} diff --git a/static/js/composables/useChat.js b/static/js/composables/useChat.js new file mode 100644 index 0000000..fcfe3aa --- /dev/null +++ b/static/js/composables/useChat.js @@ -0,0 +1,234 @@ +/** + * Chat composable + * Handles chat/inquire functionality with streaming responses + */ + +import { ref, reactive, nextTick } from 'vue'; + +export function useChat() { + // State + const chatMessages = ref([]); + const chatInput = ref(''); + const isChatLoading = ref(false); + const chatMessagesRef = ref(null); + const isChatExpanded = ref(false); + + // Methods + const isChatScrolledToBottom = () => { + if (!chatMessagesRef.value) return true; + const { scrollTop, scrollHeight, clientHeight } = chatMessagesRef.value; + const scrollableHeight = scrollHeight - clientHeight; + if (scrollableHeight <= 0) return true; + const scrollPercentage = scrollTop / scrollableHeight; + return scrollPercentage >= 0.95; // Within bottom 5% + }; + + const scrollChatToBottom = () => { + if (chatMessagesRef.value) { + requestAnimationFrame(() => { + if (chatMessagesRef.value) { + chatMessagesRef.value.scrollTop = chatMessagesRef.value.scrollHeight; + } + }); + } + }; + + const sendMessage = async (recordingId) => { + if (!chatInput.value.trim() || isChatLoading.value) { + return; + } + + const message = chatInput.value.trim(); + + if (!Array.isArray(chatMessages.value)) { + chatMessages.value = []; + } + + chatMessages.value.push({ role: 'user', content: message }); + chatInput.value = ''; + isChatLoading.value = true; + + await nextTick(); + scrollChatToBottom(); + + let assistantMessage = null; + + try { + const messageHistory = chatMessages.value + .slice(0, -1) + .map(msg => ({ role: msg.role, content: msg.content })); + + const response = await fetch('/chat', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + recording_id: recordingId, + message: message, + message_history: messageHistory + }) + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.error || 'Failed to get chat response'); + } + + const reader = response.body.getReader(); + const decoder = new TextDecoder(); + let buffer = ''; + + const processStream = async () => { + let isFirstChunk = true; + while (true) { + const { done, value } = await reader.read(); + if (done) break; + + buffer += decoder.decode(value, { stream: true }); + const lines = buffer.split('\n'); + buffer = lines.pop(); + + for (const line of lines) { + if (line.startsWith('data: ')) { + const jsonStr = line.substring(6); + if (jsonStr) { + try { + const data = JSON.parse(jsonStr); + + if (data.thinking) { + const shouldScroll = isChatScrolledToBottom(); + + if (isFirstChunk) { + isChatLoading.value = false; + assistantMessage = reactive({ + role: 'assistant', + content: '', + html: '', + thinking: data.thinking, + thinkingExpanded: false + }); + chatMessages.value.push(assistantMessage); + isFirstChunk = false; + } else if (assistantMessage) { + if (assistantMessage.thinking) { + assistantMessage.thinking += '\n\n' + data.thinking; + } else { + assistantMessage.thinking = data.thinking; + } + } + + if (shouldScroll) { + await nextTick(); + scrollChatToBottom(); + } + } + + if (data.delta) { + const shouldScroll = isChatScrolledToBottom(); + + if (isFirstChunk) { + isChatLoading.value = false; + assistantMessage = reactive({ + role: 'assistant', + content: '', + html: '', + thinking: '', + thinkingExpanded: false + }); + chatMessages.value.push(assistantMessage); + isFirstChunk = false; + } + + assistantMessage.content += data.delta; + if (window.marked) { + assistantMessage.html = window.marked.parse(assistantMessage.content); + } else { + assistantMessage.html = assistantMessage.content; + } + + if (shouldScroll) { + await nextTick(); + scrollChatToBottom(); + } + } + + if (data.end_of_stream) { + return; + } + + if (data.error) { + throw new Error(data.error); + } + } catch (e) { + console.error('Error parsing stream data:', e); + } + } + } + } + } + }; + + await processStream(); + + } catch (error) { + console.error('Chat Error:', error); + if (assistantMessage) { + assistantMessage.content = `Error: ${error.message}`; + assistantMessage.html = `Error: ${error.message}`; + } else { + chatMessages.value.push({ + role: 'assistant', + content: `Error: ${error.message}`, + html: `Error: ${error.message}` + }); + } + } finally { + isChatLoading.value = false; + await nextTick(); + if (isChatScrolledToBottom()) { + scrollChatToBottom(); + } + } + }; + + const clearChat = () => { + chatMessages.value = []; + chatInput.value = ''; + isChatLoading.value = false; + }; + + const toggleThinking = (message) => { + if (message.thinking) { + message.thinkingExpanded = !message.thinkingExpanded; + } + }; + + const setChatRef = (el) => { + chatMessagesRef.value = el; + }; + + const handleChatInput = (event) => { + if (event.key === 'Enter' && !event.shiftKey) { + event.preventDefault(); + // Trigger send message (caller should provide recordingId) + return true; + } + return false; + }; + + return { + // State + chatMessages, + chatInput, + isChatLoading, + chatMessagesRef, + isChatExpanded, + + // Methods + sendMessage, + clearChat, + toggleThinking, + setChatRef, + scrollChatToBottom, + handleChatInput + }; +} diff --git a/static/js/composables/useFilters.js b/static/js/composables/useFilters.js new file mode 100644 index 0000000..35fedc0 --- /dev/null +++ b/static/js/composables/useFilters.js @@ -0,0 +1,128 @@ +/** + * Filters composable + * Handles search, filtering, and sorting functionality + */ + +import { ref, computed } from 'vue'; +import { parseDateRange } from '../utils/dateUtils.js'; + +export function useFilters() { + // State + const searchQuery = ref(''); + const showAdvancedFilters = ref(false); + const filterTags = ref([]); + const filterFolder = ref(''); // '' = all, 'none' = no folder, or folder id + const filterDateRange = ref({ start: '', end: '' }); + const filterDatePreset = ref(''); + const filterTextQuery = ref(''); + const showArchivedRecordings = ref(false); + const showSharedWithMe = ref(false); + const sortBy = ref('created_at'); + const selectedTagFilter = ref(null); + const searchDebounceTimer = ref(null); + + // Methods + const toggleAdvancedFilters = () => { + showAdvancedFilters.value = !showAdvancedFilters.value; + }; + + const setDatePreset = (preset) => { + filterDatePreset.value = preset; + const range = parseDateRange(preset); + filterDateRange.value = { + start: range.start ? range.start.toISOString().split('T')[0] : '', + end: range.end ? range.end.toISOString().split('T')[0] : '' + }; + }; + + const clearDateFilter = () => { + filterDatePreset.value = ''; + filterDateRange.value = { start: '', end: '' }; + }; + + const toggleTagFilter = (tagId) => { + const index = filterTags.value.indexOf(tagId); + if (index > -1) { + filterTags.value.splice(index, 1); + } else { + filterTags.value.push(tagId); + } + }; + + const clearTagFilters = () => { + filterTags.value = []; + selectedTagFilter.value = null; + }; + + const clearFolderFilter = () => { + filterFolder.value = ''; + }; + + const clearAllFilters = () => { + filterTags.value = []; + filterFolder.value = ''; + filterDateRange.value = { start: '', end: '' }; + filterDatePreset.value = ''; + filterTextQuery.value = ''; + selectedTagFilter.value = null; + searchQuery.value = ''; + }; + + const toggleArchivedView = () => { + showArchivedRecordings.value = !showArchivedRecordings.value; + if (showArchivedRecordings.value) { + showSharedWithMe.value = false; + } + }; + + const toggleSharedView = () => { + showSharedWithMe.value = !showSharedWithMe.value; + if (showSharedWithMe.value) { + showArchivedRecordings.value = false; + } + }; + + const setSortBy = (field) => { + sortBy.value = field; + }; + + const hasActiveFilters = computed(() => { + return filterTags.value.length > 0 || + filterFolder.value || + filterDateRange.value.start || + filterDateRange.value.end || + filterTextQuery.value || + searchQuery.value; + }); + + return { + // State + searchQuery, + showAdvancedFilters, + filterTags, + filterFolder, + filterDateRange, + filterDatePreset, + filterTextQuery, + showArchivedRecordings, + showSharedWithMe, + sortBy, + selectedTagFilter, + searchDebounceTimer, + + // Computed + hasActiveFilters, + + // Methods + toggleAdvancedFilters, + setDatePreset, + clearDateFilter, + toggleTagFilter, + clearTagFilters, + clearFolderFilter, + clearAllFilters, + toggleArchivedView, + toggleSharedView, + setSortBy + }; +} diff --git a/static/js/composables/usePagination.js b/static/js/composables/usePagination.js new file mode 100644 index 0000000..f23e7c6 --- /dev/null +++ b/static/js/composables/usePagination.js @@ -0,0 +1,95 @@ +/** + * Pagination composable + * Handles pagination state and navigation + */ + +import { ref, computed } from 'vue'; + +export function usePagination() { + // State + const currentPage = ref(1); + const perPage = ref(25); + const totalRecordings = ref(0); + const totalPages = ref(0); + const hasNextPage = ref(false); + const hasPrevPage = ref(false); + const isLoadingMore = ref(false); + + // Computed + const paginationInfo = computed(() => { + const start = (currentPage.value - 1) * perPage.value + 1; + const end = Math.min(currentPage.value * perPage.value, totalRecordings.value); + return { + start, + end, + total: totalRecordings.value, + currentPage: currentPage.value, + totalPages: totalPages.value + }; + }); + + // Methods + const updatePagination = (pagination) => { + if (!pagination) { + // Reset pagination for non-paginated views + currentPage.value = 1; + totalPages.value = 1; + hasNextPage.value = false; + hasPrevPage.value = false; + return; + } + + currentPage.value = pagination.page; + totalRecordings.value = pagination.total; + totalPages.value = pagination.total_pages; + hasNextPage.value = pagination.has_next; + hasPrevPage.value = pagination.has_prev; + }; + + const goToPage = (page) => { + if (page < 1 || page > totalPages.value) return; + currentPage.value = page; + }; + + const nextPage = () => { + if (hasNextPage.value) { + currentPage.value++; + } + }; + + const prevPage = () => { + if (hasPrevPage.value) { + currentPage.value--; + } + }; + + const reset = () => { + currentPage.value = 1; + totalRecordings.value = 0; + totalPages.value = 0; + hasNextPage.value = false; + hasPrevPage.value = false; + isLoadingMore.value = false; + }; + + return { + // State + currentPage, + perPage, + totalRecordings, + totalPages, + hasNextPage, + hasPrevPage, + isLoadingMore, + + // Computed + paginationInfo, + + // Methods + updatePagination, + goToPage, + nextPage, + prevPage, + reset + }; +} diff --git a/static/js/composables/usePlayer.js b/static/js/composables/usePlayer.js new file mode 100644 index 0000000..caef972 --- /dev/null +++ b/static/js/composables/usePlayer.js @@ -0,0 +1,147 @@ +/** + * Audio Player composable + * Handles audio playback functionality + */ + +import { ref, computed, watch } from 'vue'; + +export function usePlayer() { + // State + const isPlaying = ref(false); + const currentTime = ref(0); + const duration = ref(0); + const playbackRate = ref(1.0); + const audioElement = ref(null); + + // Computed + const progress = computed(() => { + if (!duration.value) return 0; + return (currentTime.value / duration.value) * 100; + }); + + const formattedCurrentTime = computed(() => { + return formatTime(currentTime.value); + }); + + const formattedDuration = computed(() => { + return formatTime(duration.value); + }); + + // Methods + const formatTime = (seconds) => { + if (!seconds || isNaN(seconds)) return '0:00'; + const mins = Math.floor(seconds / 60); + const secs = Math.floor(seconds % 60); + return `${mins}:${secs.toString().padStart(2, '0')}`; + }; + + const initPlayer = (audio) => { + audioElement.value = audio; + + if (!audio) return; + + audio.addEventListener('loadedmetadata', () => { + duration.value = audio.duration; + }); + + audio.addEventListener('timeupdate', () => { + currentTime.value = audio.currentTime; + }); + + audio.addEventListener('play', () => { + isPlaying.value = true; + }); + + audio.addEventListener('pause', () => { + isPlaying.value = false; + }); + + audio.addEventListener('ended', () => { + isPlaying.value = false; + currentTime.value = 0; + }); + }; + + const play = () => { + if (audioElement.value) { + audioElement.value.play(); + } + }; + + const pause = () => { + if (audioElement.value) { + audioElement.value.pause(); + } + }; + + const togglePlayPause = () => { + if (isPlaying.value) { + pause(); + } else { + play(); + } + }; + + const seek = (time) => { + if (audioElement.value) { + audioElement.value.currentTime = time; + currentTime.value = time; + } + }; + + const seekPercent = (percent) => { + if (audioElement.value && duration.value) { + const time = (percent / 100) * duration.value; + seek(time); + } + }; + + const skip = (seconds) => { + if (audioElement.value) { + const newTime = Math.max(0, Math.min(duration.value, currentTime.value + seconds)); + seek(newTime); + } + }; + + const setPlaybackRate = (rate) => { + playbackRate.value = rate; + if (audioElement.value) { + audioElement.value.playbackRate = rate; + } + }; + + const reset = () => { + if (audioElement.value) { + audioElement.value.pause(); + audioElement.value.currentTime = 0; + } + isPlaying.value = false; + currentTime.value = 0; + duration.value = 0; + }; + + return { + // State + isPlaying, + currentTime, + duration, + playbackRate, + audioElement, + + // Computed + progress, + formattedCurrentTime, + formattedDuration, + + // Methods + initPlayer, + play, + pause, + togglePlayPause, + seek, + seekPercent, + skip, + setPlaybackRate, + reset + }; +} diff --git a/static/js/composables/useRecordings.js b/static/js/composables/useRecordings.js new file mode 100644 index 0000000..67fc632 --- /dev/null +++ b/static/js/composables/useRecordings.js @@ -0,0 +1,327 @@ +/** + * Recordings composable + * Handles recordings list, selection, and CRUD operations + */ + +import { ref, computed } from 'vue'; +import { apiRequest } from '../utils/apiClient.js'; + +export function useRecordings() { + // State + const recordings = ref([]); + const selectedRecording = ref(null); + const isLoadingRecordings = ref(true); + const globalError = ref(null); + const currentView = ref('upload'); + const availableTags = ref([]); + const selectedTagIds = ref([]); + const showTagModal = ref(false); + const showDeleteModal = ref(false); + const recordingToDelete = ref(null); + + // Computed + const completedRecordings = computed(() => { + return recordings.value.filter(r => r.status === 'COMPLETED'); + }); + + const processingRecordings = computed(() => { + return recordings.value.filter(r => ['PENDING', 'PROCESSING', 'SUMMARIZING'].includes(r.status)); + }); + + const hasRecordings = computed(() => recordings.value.length > 0); + + // Methods + const loadRecordings = async (page = 1, filters = {}) => { + globalError.value = null; + isLoadingRecordings.value = true; + + try { + let endpoint = '/api/recordings'; + if (filters.archived) { + endpoint = '/api/recordings/archived'; + } else if (filters.sharedWithMe) { + endpoint = '/api/recordings/shared-with-me'; + } + + const params = new URLSearchParams({ + page: page.toString(), + per_page: '25' + }); + + if (filters.query) { + params.set('q', filters.query.trim()); + } + + const response = await fetch(`${endpoint}?${params}`); + const data = await response.json(); + + if (!response.ok) { + throw new Error(data.error || 'Failed to load recordings'); + } + + const recordingsList = filters.archived || filters.sharedWithMe ? data : data.recordings; + + if (!Array.isArray(recordingsList)) { + throw new Error('Invalid response format'); + } + + recordings.value = recordingsList; + + // Restore last selected recording + const lastRecordingId = localStorage.getItem('lastSelectedRecordingId'); + if (lastRecordingId && recordingsList.length > 0) { + const recordingToSelect = recordingsList.find(r => r.id == lastRecordingId); + if (recordingToSelect) { + selectRecording(recordingToSelect); + } + } + + return filters.archived || filters.sharedWithMe ? null : data.pagination; + + } catch (error) { + globalError.value = error.message; + throw error; + } finally { + isLoadingRecordings.value = false; + } + }; + + const selectRecording = async (recording) => { + if (!recording) return; + + selectedRecording.value = recording; + currentView.value = 'recording'; + localStorage.setItem('lastSelectedRecordingId', recording.id); + + // Load full recording details if needed + if (!recording.transcription && recording.status === 'COMPLETED') { + try { + const data = await apiRequest(`/api/recordings/${recording.id}`); + Object.assign(selectedRecording.value, data); + } catch (error) { + console.error('Error loading recording details:', error); + } + } + }; + + const deselectRecording = () => { + selectedRecording.value = null; + currentView.value = 'upload'; + localStorage.removeItem('lastSelectedRecordingId'); + }; + + const deleteRecording = async (recordingId) => { + try { + await apiRequest(`/api/recordings/${recordingId}`, { + method: 'DELETE' + }); + + recordings.value = recordings.value.filter(r => r.id !== recordingId); + + if (selectedRecording.value && selectedRecording.value.id === recordingId) { + deselectRecording(); + } + + return true; + } catch (error) { + globalError.value = error.message; + throw error; + } + }; + + const archiveRecording = async (recordingId) => { + try { + await apiRequest(`/api/recordings/${recordingId}/archive`, { + method: 'POST' + }); + + recordings.value = recordings.value.filter(r => r.id !== recordingId); + + if (selectedRecording.value && selectedRecording.value.id === recordingId) { + deselectRecording(); + } + + return true; + } catch (error) { + globalError.value = error.message; + throw error; + } + }; + + const unarchiveRecording = async (recordingId) => { + try { + await apiRequest(`/api/recordings/${recordingId}/unarchive`, { + method: 'POST' + }); + + recordings.value = recordings.value.filter(r => r.id !== recordingId); + + return true; + } catch (error) { + globalError.value = error.message; + throw error; + } + }; + + const updateRecording = async (recordingId, updates) => { + try { + const data = await apiRequest(`/api/recordings/${recordingId}`, { + method: 'PUT', + body: JSON.stringify(updates) + }); + + const index = recordings.value.findIndex(r => r.id === recordingId); + if (index > -1) { + Object.assign(recordings.value[index], data.recording || data); + } + + if (selectedRecording.value && selectedRecording.value.id === recordingId) { + Object.assign(selectedRecording.value, data.recording || data); + } + + return data.recording || data; + } catch (error) { + globalError.value = error.message; + throw error; + } + }; + + const regenerateSummary = async (recordingId, customPrompt = null) => { + try { + const body = customPrompt ? { custom_prompt: customPrompt } : {}; + const data = await apiRequest(`/api/recordings/${recordingId}/regenerate-summary`, { + method: 'POST', + body: JSON.stringify(body) + }); + + if (selectedRecording.value && selectedRecording.value.id === recordingId) { + selectedRecording.value.status = 'SUMMARIZING'; + } + + return data; + } catch (error) { + globalError.value = error.message; + throw error; + } + }; + + const loadTags = async () => { + try { + const data = await apiRequest('/api/tags'); + availableTags.value = data; + } catch (error) { + console.error('Error loading tags:', error); + } + }; + + const addTagToRecording = async (recordingId, tagId) => { + try { + const data = await apiRequest(`/api/recordings/${recordingId}/tags`, { + method: 'POST', + body: JSON.stringify({ tag_id: tagId }) + }); + + if (selectedRecording.value && selectedRecording.value.id === recordingId) { + selectedRecording.value.tags = data.tags || []; + } + + return data; + } catch (error) { + globalError.value = error.message; + throw error; + } + }; + + const removeTagFromRecording = async (recordingId, tagId) => { + try { + await apiRequest(`/api/recordings/${recordingId}/tags/${tagId}`, { + method: 'DELETE' + }); + + if (selectedRecording.value && selectedRecording.value.id === recordingId) { + selectedRecording.value.tags = selectedRecording.value.tags.filter(t => t.id !== tagId); + } + + return true; + } catch (error) { + globalError.value = error.message; + throw error; + } + }; + + const toggleHighlight = async (recordingId) => { + const recording = recordings.value.find(r => r.id === recordingId); + if (!recording) return; + + const newValue = !recording.is_highlighted; + + try { + await updateRecording(recordingId, { is_highlighted: newValue }); + } catch (error) { + throw error; + } + }; + + const setGlobalError = (message) => { + globalError.value = message; + }; + + const clearGlobalError = () => { + globalError.value = null; + }; + + const confirmDelete = (recording) => { + recordingToDelete.value = recording; + showDeleteModal.value = true; + }; + + const cancelDelete = () => { + recordingToDelete.value = null; + showDeleteModal.value = false; + }; + + const executeDelete = async () => { + if (recordingToDelete.value) { + await deleteRecording(recordingToDelete.value.id); + cancelDelete(); + } + }; + + return { + // State + recordings, + selectedRecording, + isLoadingRecordings, + globalError, + currentView, + availableTags, + selectedTagIds, + showTagModal, + showDeleteModal, + recordingToDelete, + + // Computed + completedRecordings, + processingRecordings, + hasRecordings, + + // Methods + loadRecordings, + selectRecording, + deselectRecording, + deleteRecording, + archiveRecording, + unarchiveRecording, + updateRecording, + regenerateSummary, + loadTags, + addTagToRecording, + removeTagFromRecording, + toggleHighlight, + setGlobalError, + clearGlobalError, + confirmDelete, + cancelDelete, + executeDelete + }; +} diff --git a/static/js/composables/useSharing.js b/static/js/composables/useSharing.js new file mode 100644 index 0000000..60706c4 --- /dev/null +++ b/static/js/composables/useSharing.js @@ -0,0 +1,195 @@ +/** + * Sharing composable + * Handles public and internal sharing functionality + */ + +import { ref } from 'vue'; +import { apiRequest } from '../utils/apiClient.js'; + +export function useSharing() { + // State + const showShareModal = ref(false); + const showInternalShareModal = ref(false); + const shareUrl = ref(''); + const shareSettings = ref({ + shareSummary: true, + shareNotes: true + }); + const internalShareSettings = ref({ + userId: null, + canEdit: false, + canReshare: false + }); + const isLoadingShare = ref(false); + const shareError = ref(null); + + // Methods + const openShareModal = async (recording) => { + showShareModal.value = true; + shareError.value = null; + isLoadingShare.value = true; + + try { + const data = await apiRequest(`/api/recording/${recording.id}/share`); + + if (data.exists) { + shareUrl.value = data.share_url; + shareSettings.value = { + shareSummary: data.share.share_summary, + shareNotes: data.share.share_notes + }; + } else { + shareUrl.value = ''; + } + } catch (error) { + shareError.value = error.message; + } finally { + isLoadingShare.value = false; + } + }; + + const createShare = async (recordingId) => { + isLoadingShare.value = true; + shareError.value = null; + + try { + const data = await apiRequest(`/api/recording/${recordingId}/share`, { + method: 'POST', + body: JSON.stringify(shareSettings.value) + }); + + shareUrl.value = data.share_url; + return data; + } catch (error) { + shareError.value = error.message; + throw error; + } finally { + isLoadingShare.value = false; + } + }; + + const updateShare = async (shareId) => { + isLoadingShare.value = true; + shareError.value = null; + + try { + const data = await apiRequest(`/api/share/${shareId}`, { + method: 'PUT', + body: JSON.stringify(shareSettings.value) + }); + + return data; + } catch (error) { + shareError.value = error.message; + throw error; + } finally { + isLoadingShare.value = false; + } + }; + + const deleteShare = async (shareId) => { + isLoadingShare.value = true; + shareError.value = null; + + try { + await apiRequest(`/api/share/${shareId}`, { + method: 'DELETE' + }); + + shareUrl.value = ''; + } catch (error) { + shareError.value = error.message; + throw error; + } finally { + isLoadingShare.value = false; + } + }; + + const copyShareUrl = async () => { + try { + await navigator.clipboard.writeText(shareUrl.value); + return true; + } catch (error) { + console.error('Failed to copy:', error); + return false; + } + }; + + const openInternalShareModal = (recording) => { + showInternalShareModal.value = true; + shareError.value = null; + internalShareSettings.value = { + userId: null, + canEdit: false, + canReshare: false + }; + }; + + const shareInternally = async (recordingId) => { + isLoadingShare.value = true; + shareError.value = null; + + try { + const data = await apiRequest(`/api/recordings/${recordingId}/share-internal`, { + method: 'POST', + body: JSON.stringify({ + user_id: internalShareSettings.value.userId, + can_edit: internalShareSettings.value.canEdit, + can_reshare: internalShareSettings.value.canReshare + }) + }); + + return data; + } catch (error) { + shareError.value = error.message; + throw error; + } finally { + isLoadingShare.value = false; + } + }; + + const revokeInternalShare = async (shareId) => { + isLoadingShare.value = true; + shareError.value = null; + + try { + await apiRequest(`/api/internal-shares/${shareId}`, { + method: 'DELETE' + }); + } catch (error) { + shareError.value = error.message; + throw error; + } finally { + isLoadingShare.value = false; + } + }; + + const closeShareModal = () => { + showShareModal.value = false; + showInternalShareModal.value = false; + shareUrl.value = ''; + shareError.value = null; + }; + + return { + // State + showShareModal, + showInternalShareModal, + shareUrl, + shareSettings, + internalShareSettings, + isLoadingShare, + shareError, + + // Methods + openShareModal, + createShare, + updateShare, + deleteShare, + copyShareUrl, + openInternalShareModal, + shareInternally, + revokeInternalShare, + closeShareModal + }; +} diff --git a/static/js/composables/useTranscript.js b/static/js/composables/useTranscript.js new file mode 100644 index 0000000..0c2032e --- /dev/null +++ b/static/js/composables/useTranscript.js @@ -0,0 +1,209 @@ +/** + * Transcript composable + * Handles transcript viewing and editing functionality + */ + +import { ref, computed } from 'vue'; +import { apiRequest } from '../utils/apiClient.js'; + +export function useTranscript() { + // State + const selectedTab = ref('summary'); + const isEditingTranscript = ref(false); + const editedTranscription = ref(''); + const isEditingSummary = ref(false); + const editedSummary = ref(''); + const isEditingNotes = ref(false); + const editedNotes = ref(''); + const isInlineEditingTitle = ref(false); + const editedTitle = ref(''); + const isSavingChanges = ref(false); + const transcriptSearchQuery = ref(''); + const highlightedText = ref(''); + + // Methods + const setTab = (tab) => { + selectedTab.value = tab; + }; + + const startEditingTranscript = (recording) => { + isEditingTranscript.value = true; + editedTranscription.value = recording.transcription || ''; + }; + + const cancelEditingTranscript = () => { + isEditingTranscript.value = false; + editedTranscription.value = ''; + }; + + const saveTranscript = async (recordingId) => { + isSavingChanges.value = true; + + try { + const data = await apiRequest(`/api/recordings/${recordingId}/transcript`, { + method: 'PUT', + body: JSON.stringify({ + transcription: editedTranscription.value + }) + }); + + isEditingTranscript.value = false; + return data.recording; + } catch (error) { + throw error; + } finally { + isSavingChanges.value = false; + } + }; + + const startEditingSummary = (recording) => { + isEditingSummary.value = true; + editedSummary.value = recording.summary || ''; + }; + + const cancelEditingSummary = () => { + isEditingSummary.value = false; + editedSummary.value = ''; + }; + + const saveSummary = async (recordingId) => { + isSavingChanges.value = true; + + try { + const data = await apiRequest(`/api/recordings/${recordingId}/summary`, { + method: 'PUT', + body: JSON.stringify({ + summary: editedSummary.value + }) + }); + + isEditingSummary.value = false; + return data.recording; + } catch (error) { + throw error; + } finally { + isSavingChanges.value = false; + } + }; + + const startEditingNotes = (recording) => { + isEditingNotes.value = true; + editedNotes.value = recording.notes || ''; + }; + + const cancelEditingNotes = () => { + isEditingNotes.value = false; + editedNotes.value = ''; + }; + + const saveNotes = async (recordingId) => { + isSavingChanges.value = true; + + try { + const data = await apiRequest(`/api/recordings/${recordingId}/notes`, { + method: 'PUT', + body: JSON.stringify({ + notes: editedNotes.value + }) + }); + + isEditingNotes.value = false; + return data.recording; + } catch (error) { + throw error; + } finally { + isSavingChanges.value = false; + } + }; + + const startEditingTitle = (recording) => { + isInlineEditingTitle.value = true; + editedTitle.value = recording.title || ''; + }; + + const cancelEditingTitle = () => { + isInlineEditingTitle.value = false; + editedTitle.value = ''; + }; + + const saveTitle = async (recordingId) => { + isSavingChanges.value = true; + + try { + const data = await apiRequest(`/api/recordings/${recordingId}`, { + method: 'PUT', + body: JSON.stringify({ + title: editedTitle.value + }) + }); + + isInlineEditingTitle.value = false; + return data.recording; + } catch (error) { + throw error; + } finally { + isSavingChanges.value = false; + } + }; + + const searchInTranscript = (text, query) => { + if (!query) { + highlightedText.value = text; + return text; + } + + const regex = new RegExp(`(${query})`, 'gi'); + highlightedText.value = text.replace(regex, '$1'); + return highlightedText.value; + }; + + const exportTranscript = async (recordingId, format) => { + try { + const response = await fetch(`/api/recordings/${recordingId}/export/${format}`); + const blob = await response.blob(); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `transcript.${format}`; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + window.URL.revokeObjectURL(url); + } catch (error) { + throw error; + } + }; + + return { + // State + selectedTab, + isEditingTranscript, + editedTranscription, + isEditingSummary, + editedSummary, + isEditingNotes, + editedNotes, + isInlineEditingTitle, + editedTitle, + isSavingChanges, + transcriptSearchQuery, + highlightedText, + + // Methods + setTab, + startEditingTranscript, + cancelEditingTranscript, + saveTranscript, + startEditingSummary, + cancelEditingSummary, + saveSummary, + startEditingNotes, + cancelEditingNotes, + saveNotes, + startEditingTitle, + cancelEditingTitle, + saveTitle, + searchInTranscript, + exportTranscript + }; +} diff --git a/static/js/composables/useUI.js b/static/js/composables/useUI.js new file mode 100644 index 0000000..f5d9dce --- /dev/null +++ b/static/js/composables/useUI.js @@ -0,0 +1,147 @@ +/** + * UI State composable + * Handles all UI-related state (theme, sidebar, modals, etc.) + */ + +import { ref, computed, watch, onMounted } from 'vue'; + +export function useUI() { + // State + const browser = ref('unknown'); + const isSidebarCollapsed = ref(false); + const searchTipsExpanded = ref(false); + const isUserMenuOpen = ref(false); + const isDarkMode = ref(false); + const currentColorScheme = ref('blue'); + const showColorSchemeModal = ref(false); + const windowWidth = ref(window.innerWidth); + const mobileTab = ref('transcript'); + const isMetadataExpanded = ref(false); + const currentLanguage = ref('en'); + const currentLanguageName = ref('English'); + const availableLanguages = ref([]); + const showLanguageMenu = ref(false); + + // Computed + const isMobile = computed(() => windowWidth.value < 768); + const isTablet = computed(() => windowWidth.value >= 768 && windowWidth.value < 1024); + const isDesktop = computed(() => windowWidth.value >= 1024); + + const colorSchemes = [ + { name: 'blue', label: 'Blue', primary: '#3b82f6', hover: '#2563eb' }, + { name: 'purple', label: 'Purple', primary: '#8b5cf6', hover: '#7c3aed' }, + { name: 'green', label: 'Green', primary: '#10b981', hover: '#059669' }, + { name: 'orange', label: 'Orange', primary: '#f59e0b', hover: '#d97706' }, + { name: 'pink', label: 'Pink', primary: '#ec4899', hover: '#db2777' }, + { name: 'red', label: 'Red', primary: '#ef4444', hover: '#dc2626' } + ]; + + // Methods + const detectBrowser = () => { + const userAgent = navigator.userAgent.toLowerCase(); + if (userAgent.indexOf('firefox') > -1) browser.value = 'firefox'; + else if (userAgent.indexOf('chrome') > -1 && userAgent.indexOf('edge') === -1) browser.value = 'chrome'; + else if (userAgent.indexOf('safari') > -1 && userAgent.indexOf('chrome') === -1) browser.value = 'safari'; + else if (userAgent.indexOf('edge') > -1) browser.value = 'edge'; + else browser.value = 'unknown'; + }; + + const toggleSidebar = () => { + isSidebarCollapsed.value = !isSidebarCollapsed.value; + localStorage.setItem('sidebarCollapsed', isSidebarCollapsed.value.toString()); + }; + + const toggleDarkMode = () => { + isDarkMode.value = !isDarkMode.value; + document.documentElement.classList.toggle('dark', isDarkMode.value); + localStorage.setItem('darkMode', isDarkMode.value ? 'enabled' : 'disabled'); + }; + + const setColorScheme = (scheme) => { + currentColorScheme.value = scheme; + document.documentElement.setAttribute('data-color-scheme', scheme); + localStorage.setItem('colorScheme', scheme); + }; + + const loadUIPreferences = () => { + // Load dark mode + const savedDarkMode = localStorage.getItem('darkMode'); + if (savedDarkMode === 'enabled') { + isDarkMode.value = true; + document.documentElement.classList.add('dark'); + } + + // Load color scheme + const savedScheme = localStorage.getItem('colorScheme'); + if (savedScheme && colorSchemes.find(s => s.name === savedScheme)) { + setColorScheme(savedScheme); + } + + // Load sidebar state + const savedSidebar = localStorage.getItem('sidebarCollapsed'); + if (savedSidebar === 'true') { + isSidebarCollapsed.value = true; + } + }; + + const handleResize = () => { + windowWidth.value = window.innerWidth; + }; + + const toggleUserMenu = () => { + isUserMenuOpen.value = !isUserMenuOpen.value; + }; + + const closeUserMenu = () => { + isUserMenuOpen.value = false; + }; + + const setMobileTab = (tab) => { + mobileTab.value = tab; + }; + + const toggleMetadata = () => { + isMetadataExpanded.value = !isMetadataExpanded.value; + }; + + // Initialize + onMounted(() => { + detectBrowser(); + loadUIPreferences(); + window.addEventListener('resize', handleResize); + }); + + return { + // State + browser, + isSidebarCollapsed, + searchTipsExpanded, + isUserMenuOpen, + isDarkMode, + currentColorScheme, + showColorSchemeModal, + windowWidth, + mobileTab, + isMetadataExpanded, + currentLanguage, + currentLanguageName, + availableLanguages, + showLanguageMenu, + + // Computed + isMobile, + isTablet, + isDesktop, + colorSchemes, + + // Methods + toggleSidebar, + toggleDarkMode, + setColorScheme, + loadUIPreferences, + toggleUserMenu, + closeUserMenu, + setMobileTab, + toggleMetadata + }; +} diff --git a/static/js/composables/useUpload.js b/static/js/composables/useUpload.js new file mode 100644 index 0000000..48db06d --- /dev/null +++ b/static/js/composables/useUpload.js @@ -0,0 +1,280 @@ +/** + * Upload composable + * Handles file upload queue and processing + */ + +import { ref, computed, nextTick } from 'vue'; +import { uploadFile } from '../utils/apiClient.js'; + +export function useUpload() { + // State + const uploadQueue = ref([]); + const currentlyProcessingFile = ref(null); + const processingProgress = ref(0); + const processingMessage = ref(''); + const isProcessingActive = ref(false); + const pollInterval = ref(null); + const progressPopupMinimized = ref(false); + const progressPopupClosed = ref(false); + const maxFileSizeMB = ref(250); + const chunkingEnabled = ref(true); + const dragover = ref(false); + + // Computed + const hasQueuedFiles = computed(() => { + return uploadQueue.value.some(item => item.status === 'queued'); + }); + + const processingCount = computed(() => { + return uploadQueue.value.filter(item => item.status === 'processing' || item.status === 'queued').length; + }); + + const completedCount = computed(() => { + return uploadQueue.value.filter(item => item.status === 'completed').length; + }); + + const errorCount = computed(() => { + return uploadQueue.value.filter(item => item.status === 'error').length; + }); + + // Methods + const addFilesToQueue = (files) => { + const maxFileSize = maxFileSizeMB.value * 1024 * 1024; + + for (const file of files) { + if (file.size > maxFileSize) { + uploadQueue.value.push({ + file, + status: 'error', + error: `File exceeds maximum size of ${maxFileSizeMB.value}MB`, + clientId: Date.now() + Math.random() + }); + continue; + } + + const isAudio = file.type.startsWith('audio/') || + file.type.startsWith('video/') || + /\.(mp3|wav|ogg|m4a|flac|webm|weba|mp4|mov|avi|mkv)$/i.test(file.name); + + if (!isAudio) { + uploadQueue.value.push({ + file, + status: 'error', + error: 'File type not supported', + clientId: Date.now() + Math.random() + }); + continue; + } + + uploadQueue.value.push({ + file, + status: 'queued', + recordingId: null, + clientId: Date.now() + Math.random(), + error: null + }); + } + + if (!isProcessingActive.value && hasQueuedFiles.value) { + startProcessingQueue(); + } + }; + + const startProcessingQueue = async () => { + if (isProcessingActive.value) return; + + const nextItem = uploadQueue.value.find(item => item.status === 'queued'); + if (!nextItem) { + isProcessingActive.value = false; + return; + } + + isProcessingActive.value = true; + currentlyProcessingFile.value = nextItem; + nextItem.status = 'uploading'; + processingProgress.value = 0; + processingMessage.value = 'Uploading...'; + + try { + const data = await uploadFile('/api/recordings/upload', nextItem.file, (progress) => { + processingProgress.value = progress; + processingMessage.value = `Uploading... ${Math.round(progress)}%`; + }); + + nextItem.recordingId = data.recording_id; + nextItem.status = 'processing'; + processingMessage.value = 'Processing...'; + + // Start polling for status + pollProcessingStatus(nextItem); + + } catch (error) { + nextItem.status = 'error'; + nextItem.error = error.message; + currentlyProcessingFile.value = null; + isProcessingActive.value = false; + + // Continue with next file + if (hasQueuedFiles.value) { + await nextTick(); + startProcessingQueue(); + } + } + }; + + const pollProcessingStatus = (queueItem) => { + if (pollInterval.value) { + clearInterval(pollInterval.value); + } + + pollInterval.value = setInterval(async () => { + try { + const response = await fetch(`/api/recordings/${queueItem.recordingId}/status`); + const data = await response.json(); + + if (data.status === 'COMPLETED') { + clearInterval(pollInterval.value); + pollInterval.value = null; + + queueItem.status = 'completed'; + currentlyProcessingFile.value = null; + isProcessingActive.value = false; + processingProgress.value = 100; + processingMessage.value = 'Complete!'; + + // Continue with next file + if (hasQueuedFiles.value) { + await nextTick(); + startProcessingQueue(); + } + + } else if (data.status === 'ERROR') { + clearInterval(pollInterval.value); + pollInterval.value = null; + + queueItem.status = 'error'; + queueItem.error = data.error_message || 'Processing failed'; + currentlyProcessingFile.value = null; + isProcessingActive.value = false; + + // Continue with next file + if (hasQueuedFiles.value) { + await nextTick(); + startProcessingQueue(); + } + + } else { + // Still processing + if (data.status === 'SUMMARIZING') { + processingMessage.value = 'Generating summary...'; + processingProgress.value = 80; + } else { + processingMessage.value = 'Transcribing...'; + processingProgress.value = 50; + } + } + + } catch (error) { + console.error('Error polling status:', error); + } + }, 3000); + }; + + const removeFromQueue = (clientId) => { + const index = uploadQueue.value.findIndex(item => item.clientId === clientId); + if (index > -1) { + uploadQueue.value.splice(index, 1); + } + }; + + const clearCompletedFromQueue = () => { + uploadQueue.value = uploadQueue.value.filter(item => + item.status !== 'completed' && item.status !== 'error' + ); + }; + + const handleDragEnter = (event) => { + event.preventDefault(); + dragover.value = true; + }; + + const handleDragLeave = (event) => { + event.preventDefault(); + dragover.value = false; + }; + + const handleDrop = (event) => { + event.preventDefault(); + dragover.value = false; + + const files = Array.from(event.dataTransfer.files); + if (files.length > 0) { + addFilesToQueue(files); + } + }; + + const handleFileSelect = (event) => { + const files = Array.from(event.target.files); + if (files.length > 0) { + addFilesToQueue(files); + } + event.target.value = ''; + }; + + const minimizeProgressPopup = () => { + progressPopupMinimized.value = true; + }; + + const maximizeProgressPopup = () => { + progressPopupMinimized.value = false; + }; + + const closeProgressPopup = () => { + progressPopupClosed.value = true; + }; + + const loadConfig = async () => { + try { + const response = await fetch('/api/config'); + const data = await response.json(); + maxFileSizeMB.value = data.max_file_size_mb || 250; + chunkingEnabled.value = data.chunking_enabled !== false; + } catch (error) { + console.error('Error loading config:', error); + } + }; + + return { + // State + uploadQueue, + currentlyProcessingFile, + processingProgress, + processingMessage, + isProcessingActive, + progressPopupMinimized, + progressPopupClosed, + maxFileSizeMB, + chunkingEnabled, + dragover, + + // Computed + hasQueuedFiles, + processingCount, + completedCount, + errorCount, + + // Methods + addFilesToQueue, + startProcessingQueue, + removeFromQueue, + clearCompletedFromQueue, + handleDragEnter, + handleDragLeave, + handleDrop, + handleFileSelect, + minimizeProgressPopup, + maximizeProgressPopup, + closeProgressPopup, + loadConfig + }; +} diff --git a/static/js/config/push-config.js b/static/js/config/push-config.js new file mode 100644 index 0000000..0d5932a --- /dev/null +++ b/static/js/config/push-config.js @@ -0,0 +1,78 @@ +/** + * Push Notification Configuration + * + * AUTO-CONFIGURATION: + * ------------------ + * Push notifications are now auto-configured! + * + * On first server startup: + * 1. VAPID keys are automatically generated (requires pywebpush) + * 2. Keys are saved to /config/vapid_keys.json (persists across restarts) + * 3. Public key is served via /api/push/config + * 4. Client fetches config dynamically + * + * No manual configuration needed - just make sure: + * - pywebpush is installed: pip install pywebpush + * - /config directory is mounted as Docker volume (for persistence) + */ + +// Cached config fetched from server +let cachedConfig = null; + +/** + * Fetch push notification config from server + */ +export async function getPushConfig() { + if (cachedConfig) { + return cachedConfig; + } + + try { + const response = await fetch('/api/push/config'); + if (!response.ok) { + console.warn('[Push Config] Failed to fetch config:', response.status); + return { enabled: false, public_key: null }; + } + + cachedConfig = await response.json(); + console.log('[Push Config] Loaded from server:', cachedConfig.enabled ? 'enabled' : 'disabled'); + return cachedConfig; + } catch (error) { + console.error('[Push Config] Error fetching config:', error); + return { enabled: false, public_key: null }; + } +} + +/** + * Check if push notifications are enabled + */ +export async function isPushEnabled() { + const config = await getPushConfig(); + return config.enabled && !!config.public_key; +} + +/** + * Get VAPID public key from server + */ +export async function getPublicKey() { + const config = await getPushConfig(); + return config.public_key; +} + +/** + * Convert a base64 string to Uint8Array (required for push subscription) + */ +export function urlBase64ToUint8Array(base64String) { + const padding = '='.repeat((4 - base64String.length % 4) % 4); + const base64 = (base64String + padding) + .replace(/-/g, '+') + .replace(/_/g, '/'); + + const rawData = window.atob(base64); + const outputArray = new Uint8Array(rawData.length); + + for (let i = 0; i < rawData.length; ++i) { + outputArray[i] = rawData.charCodeAt(i); + } + return outputArray; +} diff --git a/static/js/csrf-refresh.js b/static/js/csrf-refresh.js new file mode 100644 index 0000000..f1a8abe --- /dev/null +++ b/static/js/csrf-refresh.js @@ -0,0 +1,206 @@ +// CSRF Token Management with Auto-Refresh +class CSRFManager { + constructor() { + this.token = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + this.refreshPromise = null; + this.setupFetchInterceptor(); + } + + async refreshToken() { + // Prevent multiple simultaneous refresh requests + if (this.refreshPromise) { + return this.refreshPromise; + } + + this.refreshPromise = this.performTokenRefresh(); + try { + const newToken = await this.refreshPromise; + return newToken; + } finally { + this.refreshPromise = null; + } + } + + async performTokenRefresh() { + try { + console.log('Refreshing CSRF token...'); + + // Use the original fetch to avoid recursion + const originalFetch = window.originalFetch || fetch; + const response = await originalFetch('/api/csrf-token', { + method: 'GET', + credentials: 'same-origin', + headers: { + 'Accept': 'application/json' + } + }); + + if (!response.ok) { + throw new Error(`Failed to refresh CSRF token: ${response.status} ${response.statusText}`); + } + + const contentType = response.headers.get('content-type'); + if (!contentType || !contentType.includes('application/json')) { + const text = await response.text(); + throw new Error(`Expected JSON response but got ${contentType}. Response: ${text.substring(0, 200)}`); + } + + const data = await response.json(); + if (data.csrf_token) { + this.token = data.csrf_token; + // Update the meta tag for any other code that might read it + const metaTag = document.querySelector('meta[name="csrf-token"]'); + if (metaTag) { + metaTag.setAttribute('content', this.token); + } + + // Update Vue.js reactive token if available + if (window.app && window.app.csrfToken !== undefined) { + window.app.csrfToken = this.token; + } + + console.log('CSRF token refreshed successfully'); + return this.token; + } else { + throw new Error('No CSRF token in response'); + } + } catch (error) { + console.error('Failed to refresh CSRF token:', error); + throw error; + } + } + + setupFetchInterceptor() { + // Store original fetch if not already stored + if (!window.originalFetch) { + window.originalFetch = window.fetch; + } + + const originalFetch = window.originalFetch; + const self = this; + + window.fetch = async function(url, options = {}) { + // Skip CSRF token for the token refresh endpoint to avoid recursion + if (url.includes('/api/csrf-token')) { + return originalFetch(url, options); + } + + // Add CSRF token to headers for API requests + const newOptions = { ...options }; + if (url.startsWith('/api/') || url.startsWith('/upload') || url.startsWith('/save') || + url.startsWith('/recording/') || url.startsWith('/chat') || url.startsWith('/speakers')) { + + newOptions.headers = { + 'X-CSRFToken': self.token, + ...newOptions.headers + }; + } + + // Make the request + let response = await originalFetch(url, newOptions); + + // Check for CSRF token expiration + if ((response.status === 400 || response.status === 403) && + (url.startsWith('/api/') || url.startsWith('/upload') || url.startsWith('/save') || + url.startsWith('/recording/') || url.startsWith('/chat') || url.startsWith('/speakers'))) { + + try { + // Try to parse as JSON first + const responseClone = response.clone(); + let isCSRFError = false; + + try { + const errorData = await responseClone.json(); + const errorMessage = errorData.error || ''; + isCSRFError = errorMessage.toLowerCase().includes('csrf') || + errorMessage.toLowerCase().includes('token'); + } catch (jsonError) { + // If JSON parsing fails, check if it's an HTML error page + const textResponse = await response.clone().text(); + isCSRFError = textResponse.toLowerCase().includes('csrf') || + textResponse.toLowerCase().includes('token') || + textResponse.includes(' { + window.csrfManager = new CSRFManager(); + + // Set up periodic token refresh every 45 minutes (before 1-hour expiration) + setInterval(() => { + if (window.csrfManager) { + console.log('Performing periodic CSRF token refresh...'); + window.csrfManager.manualRefresh(); + } + }, 45 * 60 * 1000); // 45 minutes + + // Refresh CSRF token when page becomes visible again (wake from sleep, tab switch) + document.addEventListener('visibilitychange', () => { + if (document.visibilityState === 'visible' && window.csrfManager) { + console.log('[CSRF] Page visible again, refreshing token...'); + window.csrfManager.manualRefresh(); + } + }); + + // Heartbeat gap detection: if setInterval drifts > 2 min, system was asleep + let lastHeartbeat = Date.now(); + setInterval(() => { + const now = Date.now(); + const drift = now - lastHeartbeat - 60000; + if (drift > 120000) { + console.log(`[CSRF] Heartbeat drift ${Math.round(drift / 1000)}s detected, refreshing token...`); + if (window.csrfManager) { + window.csrfManager.manualRefresh(); + } + } + lastHeartbeat = now; + }, 60000); +}); diff --git a/static/js/i18n.js b/static/js/i18n.js new file mode 100644 index 0000000..8c07785 --- /dev/null +++ b/static/js/i18n.js @@ -0,0 +1,297 @@ +/** + * Lightweight i18n (internationalization) system for Speakr + * Handles loading and managing translations with template variable support + */ + +class I18n { + constructor() { + this.translations = {}; + this.currentLocale = 'en'; + this.fallbackLocale = 'en'; + this.loadedLocales = new Set(); + } + + /** + * Initialize i18n with default locale + * @param {string} locale - Initial locale code (e.g., 'en', 'es', 'fr', 'zh') + */ + async init(locale = 'en') { + // Get saved locale from localStorage or use browser language + const savedLocale = localStorage.getItem('preferredLanguage'); + const browserLocale = navigator.language.split('-')[0]; + + this.currentLocale = savedLocale || locale || browserLocale || 'en'; + + // Load the initial locale + await this.loadLocale(this.currentLocale); + + // Load fallback locale if different + if (this.currentLocale !== this.fallbackLocale) { + await this.loadLocale(this.fallbackLocale); + } + } + + /** + * Load translations for a specific locale + * @param {string} locale - Locale code to load + */ + async loadLocale(locale) { + if (this.loadedLocales.has(locale)) { + return; // Already loaded + } + + try { + const response = await fetch(`/static/locales/${locale}.json`); + if (!response.ok) { + throw new Error(`Failed to load locale: ${locale}`); + } + + const translations = await response.json(); + this.translations[locale] = translations; + this.loadedLocales.add(locale); + + console.log(`Loaded locale: ${locale}`); + } catch (error) { + console.error(`Error loading locale ${locale}:`, error); + + // If failed to load requested locale and it's not the fallback, try fallback + if (locale !== this.fallbackLocale) { + console.log(`Failed to load ${locale}, will use ${this.fallbackLocale} as fallback`); + // Don't change currentLocale - keep user's preference + // Just ensure fallback translations are available + await this.loadLocale(this.fallbackLocale); + } + } + } + + /** + * Change the current locale + * @param {string} locale - New locale code + */ + async setLocale(locale) { + await this.loadLocale(locale); + this.currentLocale = locale; + localStorage.setItem('preferredLanguage', locale); + + // Dispatch custom event for locale change + window.dispatchEvent(new CustomEvent('localeChanged', { detail: { locale } })); + } + + /** + * Get the current locale + * @returns {string} Current locale code + */ + getLocale() { + return this.currentLocale; + } + + /** + * Get available locales + * @returns {Array} List of available locale codes + */ + getAvailableLocales() { + return [ + { code: 'en', name: 'English', nativeName: 'English' }, + { code: 'es', name: 'Spanish', nativeName: 'Español' }, + { code: 'fr', name: 'French', nativeName: 'Français' }, + { code: 'zh', name: 'Chinese', nativeName: '中文' }, + { code: 'ru', name: 'Russian', nativeName: 'Русский' }, + ]; + } + + /** + * Translate a key with optional parameters + * @param {string} key - Translation key (e.g., 'common.save' or 'nav.upload') + * @param {Object} params - Optional parameters for template replacement + * @param {string} locale - Optional specific locale (defaults to current) + * @returns {string} Translated text + */ + t(key, params = {}, locale = null) { + const targetLocale = locale || this.currentLocale; + + // Get translation from current locale or fallback + let translation = this.getNestedTranslation(targetLocale, key); + + if (!translation && targetLocale !== this.fallbackLocale) { + translation = this.getNestedTranslation(this.fallbackLocale, key); + } + + if (!translation) { + console.warn(`Translation not found for key: ${key}`); + return key; // Return the key itself as fallback + } + + // Replace template variables + return this.interpolate(translation, params); + } + + /** + * Get nested translation value from object + * @param {string} locale - Locale to search in + * @param {string} key - Dot-separated key path + * @returns {string|null} Translation value or null + */ + getNestedTranslation(locale, key) { + if (!this.translations[locale]) { + return null; + } + + const keys = key.split('.'); + let value = this.translations[locale]; + + for (const k of keys) { + if (value && typeof value === 'object' && k in value) { + value = value[k]; + } else { + return null; + } + } + + return typeof value === 'string' ? value : null; + } + + /** + * Replace template variables in translation string + * @param {string} text - Text with placeholders like {{variable}} + * @param {Object} params - Parameters to replace + * @returns {string} Interpolated text + */ + interpolate(text, params) { + return text.replace(/\{\{(\w+)\}\}/g, (match, key) => { + return params.hasOwnProperty(key) ? params[key] : match; + }); + } + + /** + * Handle pluralization + * @param {string} key - Base translation key + * @param {number} count - Count for pluralization + * @param {Object} params - Additional parameters + * @returns {string} Translated text with proper pluralization + */ + tc(key, count, params = {}) { + const pluralKey = count === 1 ? key : `${key}Plural`; + return this.t(pluralKey, { ...params, count }); + } + + /** + * Format date according to locale + * @param {Date|string} date - Date to format + * @param {Object} options - Intl.DateTimeFormat options + * @returns {string} Formatted date string + */ + formatDate(date, options = {}) { + const d = date instanceof Date ? date : new Date(date); + return new Intl.DateTimeFormat(this.currentLocale, options).format(d); + } + + /** + * Format number according to locale + * @param {number} number - Number to format + * @param {Object} options - Intl.NumberFormat options + * @returns {string} Formatted number string + */ + formatNumber(number, options = {}) { + return new Intl.NumberFormat(this.currentLocale, options).format(number); + } + + /** + * Format file size with appropriate unit + * @param {number} bytes - Size in bytes + * @returns {string} Formatted file size + */ + formatFileSize(bytes) { + const units = ['bytes', 'kilobytes', 'megabytes', 'gigabytes']; + const unitValues = [1, 1024, 1048576, 1073741824]; + + let unitIndex = 0; + for (let i = unitValues.length - 1; i >= 0; i--) { + if (bytes >= unitValues[i]) { + unitIndex = i; + break; + } + } + + const value = Math.round(bytes / unitValues[unitIndex] * 10) / 10; + return this.t(`fileSize.${units[unitIndex]}`, { count: value }); + } + + /** + * Format duration with appropriate unit + * @param {number} seconds - Duration in seconds + * @returns {string} Formatted duration + */ + formatDuration(seconds) { + if (seconds < 60) { + return this.tc('duration.seconds', Math.round(seconds), { count: Math.round(seconds) }); + } else if (seconds < 3600) { + const minutes = Math.round(seconds / 60); + return this.tc('duration.minutes', minutes, { count: minutes }); + } else { + const hours = Math.round(seconds / 3600 * 10) / 10; + return this.tc('duration.hours', hours, { count: hours }); + } + } + + /** + * Format relative time (e.g., "2 hours ago") + * @param {Date|string} date - Date to format + * @returns {string} Formatted relative time + */ + formatRelativeTime(date) { + const d = date instanceof Date ? date : new Date(date); + const now = new Date(); + const diffSeconds = Math.floor((now - d) / 1000); + + if (diffSeconds < 60) { + return this.t('time.justNow'); + } else if (diffSeconds < 3600) { + const minutes = Math.floor(diffSeconds / 60); + return minutes === 1 + ? this.t('time.minuteAgo') + : this.t('time.minutesAgo', { count: minutes }); + } else if (diffSeconds < 86400) { + const hours = Math.floor(diffSeconds / 3600); + return hours === 1 + ? this.t('time.hourAgo') + : this.t('time.hoursAgo', { count: hours }); + } else if (diffSeconds < 604800) { + const days = Math.floor(diffSeconds / 86400); + return days === 1 + ? this.t('time.dayAgo') + : this.t('time.daysAgo', { count: days }); + } else if (diffSeconds < 2592000) { + const weeks = Math.floor(diffSeconds / 604800); + return weeks === 1 + ? this.t('time.weekAgo') + : this.t('time.weeksAgo', { count: weeks }); + } else if (diffSeconds < 31536000) { + const months = Math.floor(diffSeconds / 2592000); + return months === 1 + ? this.t('time.monthAgo') + : this.t('time.monthsAgo', { count: months }); + } else { + const years = Math.floor(diffSeconds / 31536000); + return years === 1 + ? this.t('time.yearAgo') + : this.t('time.yearsAgo', { count: years }); + } + } +} + +// Create global i18n instance +const i18n = new I18n(); + +// Create a fallback t function immediately +if (typeof window !== 'undefined') { + // Ensure window.i18n exists with at least a basic t function + window.i18n = i18n; + + // Add a fallback t function if the class method isn't ready + if (!window.i18n.t) { + window.i18n.t = function(key, params) { + console.warn('i18n.t called before initialization, returning key:', key); + return key; + }; + } +} \ No newline at end of file diff --git a/static/js/loading.js b/static/js/loading.js new file mode 100644 index 0000000..630a59a --- /dev/null +++ b/static/js/loading.js @@ -0,0 +1,201 @@ +/** + * App loading overlay management + * Prevents FOUC (Flash of Unstyled Content) during page initialization + */ + +window.AppLoader = { + initialized: false, + readyChecks: [], + initTime: Date.now(), + + /** + * Initialize the loading system + */ + init() { + if (this.initialized) return; + this.initialized = true; + this.initTime = Date.now(); + + // Add loading class to body + document.body.classList.add('app-loading'); + + // Create loading overlay if it doesn't exist + if (!document.querySelector('.app-loading-overlay')) { + this.createOverlay(); + } + + // Set up ready checks + this.setupReadyChecks(); + }, + + /** + * Create the loading overlay element + */ + createOverlay() { + const overlay = document.createElement('div'); + overlay.className = 'app-loading-overlay'; + overlay.innerHTML = ` +

    + `; + document.body.appendChild(overlay); + }, + + /** + * Add a ready check condition + */ + addReadyCheck(checkFn) { + this.readyChecks.push(checkFn); + }, + + /** + * Setup default ready checks + */ + setupReadyChecks() { + // Check if DOM is ready + this.addReadyCheck(() => { + return document.readyState === 'complete' || document.readyState === 'interactive'; + }); + + // Check if styles are loaded (optional - don't block on this) + this.addReadyCheck(() => { + try { + const styles = document.querySelector('link[href*="styles.css"]'); + // If stylesheet isn't found or loaded, continue anyway after 2 seconds + return !styles || styles.sheet || (Date.now() - this.initTime) > 2000; + } catch (e) { + console.warn('Error checking stylesheet:', e); + return true; // Don't block on stylesheet errors + } + }); + + // Check if theme is initialized (optional - don't block on this) + this.addReadyCheck(() => { + try { + const computed = window.getComputedStyle(document.documentElement); + const bgPrimary = computed.getPropertyValue('--bg-primary').trim(); + // Accept if property exists or if 2 seconds have passed + return bgPrimary !== '' || (Date.now() - this.initTime) > 2000; + } catch (e) { + console.warn('Error checking CSS variables:', e); + return true; // Don't block on CSS variable errors + } + }); + }, + + /** + * Check if all conditions are met + */ + isReady() { + if (this.readyChecks.length === 0) return true; + return this.readyChecks.every(check => { + try { + return check(); + } catch (e) { + return false; + } + }); + }, + + /** + * Hide the loading overlay + */ + hide() { + try { + // Remove app-loading class immediately to show content + document.body.classList.remove('app-loading'); + + // Find all loading overlays (might be multiple) + const overlays = document.querySelectorAll('.app-loading-overlay'); + + if (overlays.length > 0) { + overlays.forEach(overlay => { + // Force display none immediately in Firefox + overlay.style.display = 'none'; + + // Then do graceful removal + overlay.classList.add('fade-out'); + setTimeout(() => { + try { + overlay.remove(); + } catch (e) { + console.warn('Could not remove overlay:', e); + } + }, 100); + }); + } + + console.log('Loader hidden successfully'); + } catch (error) { + console.error('Error hiding loader:', error); + // Force hide everything as last resort + document.body.classList.remove('app-loading'); + const overlays = document.querySelectorAll('.app-loading-overlay'); + overlays.forEach(o => { + o.style.display = 'none'; + try { o.remove(); } catch (e) {} + }); + } + }, + + /** + * Wait for app to be ready then hide overlay + */ + async waitForReady(timeout = 5000) { + const startTime = Date.now(); + let hideExecuted = false; + + const safeHide = () => { + if (!hideExecuted) { + hideExecuted = true; + try { + this.hide(); + } catch (error) { + console.error('Error hiding loader:', error); + // Force hide even if error occurs + const overlay = document.querySelector('.app-loading-overlay'); + if (overlay) overlay.remove(); + document.body.classList.remove('app-loading'); + } + } + }; + + const checkReady = () => { + try { + const elapsed = Date.now() - startTime; + if (this.isReady()) { + console.log('App ready, hiding loader'); + safeHide(); + } else if (elapsed > timeout) { + console.warn('Loader timeout reached, forcing hide'); + safeHide(); + } else { + requestAnimationFrame(checkReady); + } + } catch (error) { + console.error('Error in checkReady:', error); + safeHide(); + } + }; + + // Hard timeout as absolute failsafe - hide after 10 seconds no matter what + setTimeout(() => { + if (!hideExecuted) { + console.warn('Hard timeout reached (10s), forcing loader hide'); + safeHide(); + } + }, 10000); + + // Start checking after a minimum display time + setTimeout(checkReady, 300); + } +}; + +// Auto-initialize on script load +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', () => AppLoader.init()); +} else { + AppLoader.init(); +} \ No newline at end of file diff --git a/static/js/modules/composables/audio.js b/static/js/modules/composables/audio.js new file mode 100644 index 0000000..5953a49 --- /dev/null +++ b/static/js/modules/composables/audio.js @@ -0,0 +1,895 @@ +/** + * Audio recording composable + * Handles microphone/system audio recording with visualizers and wake lock + */ + +import * as RecordingDB from '../db/recording-persistence.js'; +import * as IncognitoStorage from '../db/incognito-storage.js'; + +export function useAudio(state, utils) { + const { + isRecording, mediaRecorder, audioContext, analyser, micAnalyser, systemAnalyser, + audioChunks, recordingTime, recordingInterval, recordingMode, audioBlobURL, + estimatedFileSize, actualBitrate, recordingNotes, recordingQuality, + maxRecordingMB, fileSizeWarningShown, sizeCheckInterval, recordingDisclaimer, + showRecordingDisclaimerModal, pendingRecordingMode, currentView, isDarkMode, wakeLock, animationFrameId, + activeStreams, visualizer, micVisualizer, systemVisualizer, canRecordAudio, + canRecordSystemAudio, systemAudioSupported, systemAudioError, globalError, + selectedTagIds, selectedFolderId, asrLanguage, asrMinSpeakers, asrMaxSpeakers, uploadQueue, + progressPopupMinimized, progressPopupClosed, + // Incognito mode + enableIncognitoMode, incognitoMode, incognitoRecording, incognitoProcessing, + processingMessage, processingProgress, selectedRecording + } = state; + + const { showToast, setGlobalError, formatFileSize, startUploadQueue } = utils; + + // Local state for pending streams and chunk tracking + let pendingDisplayStream = null; + let currentChunkIndex = 0; + + // iOS detection + const isiOS = () => { + return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; + }; + + // Silent audio for iOS wake lock alternative + let silentAudio = null; + + // Create silent audio using data URL (1 second of silence) + const createSilentAudio = () => { + if (!silentAudio) { + // Base64 encoded 1-second silent MP3 + const silentMp3 = 'data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4Ljc2LjEwMAAAAAAAAAAAAAAA//tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAADhAC7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7v////////////////////////////////////////////////////////////AAAAAExhdmM1OC4xMwAAAAAAAAAAAAAAACQCgAAAAAAAAAOEfxVqYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//sQZAAP8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAETEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sQZDwP8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU='; + silentAudio = new Audio(silentMp3); + silentAudio.loop = true; + silentAudio.volume = 0.01; // Very low volume, almost silent + } + return silentAudio; + }; + + // Start iOS wake lock (play silent audio) + const startiOSWakeLock = async () => { + try { + const audio = createSilentAudio(); + await audio.play(); + console.log('[iOS Wake Lock] Silent audio playing to prevent sleep'); + return true; + } catch (error) { + console.warn('[iOS Wake Lock] Failed to start silent audio:', error); + showToast('iOS wake lock may not work - keep screen active', 'warning'); + return false; + } + }; + + // Stop iOS wake lock (stop silent audio) + const stopiOSWakeLock = () => { + if (silentAudio) { + silentAudio.pause(); + silentAudio.currentTime = 0; + console.log('[iOS Wake Lock] Silent audio stopped'); + } + }; + + // Acquire wake lock to prevent screen from sleeping during recording + const acquireWakeLock = async () => { + // iOS doesn't support Wake Lock API - use silent audio instead + if (isiOS()) { + return await startiOSWakeLock(); + } + + // Android/Desktop: use native Wake Lock API + try { + if ('wakeLock' in navigator) { + wakeLock.value = await navigator.wakeLock.request('screen'); + console.log('[WakeLock] Acquired - screen will stay awake during recording'); + + // Listen for wake lock release + wakeLock.value.addEventListener('release', () => { + console.log('[WakeLock] Released'); + }); + + return true; + } else { + console.warn('[WakeLock] Wake Lock API not supported'); + showToast('Screen may sleep during recording', 'info'); + return false; + } + } catch (err) { + console.warn('[WakeLock] Could not acquire:', err.message); + if (err.name === 'NotAllowedError') { + showToast('Screen lock permission denied', 'warning'); + } else if (err.name === 'NotSupportedError') { + showToast('Wake lock not supported on this device', 'info'); + } + return false; + } + }; + + // Release wake lock + const releaseWakeLock = async () => { + // iOS: stop silent audio + if (isiOS()) { + stopiOSWakeLock(); + return; + } + + // Android/Desktop: release native wake lock + if (wakeLock.value) { + try { + await wakeLock.value.release(); + wakeLock.value = null; + console.log('[WakeLock] Released'); + } catch (err) { + console.warn('[WakeLock] Could not release:', err.message); + } + } + }; + + // Show recording notification + const showRecordingNotification = async () => { + if ('Notification' in window && Notification.permission === 'granted') { + // Notifications handled by service worker + } + }; + + // Note: System audio capability detection is now handled by computed property + // canRecordSystemAudio = computed(() => navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia) + + // Hide recording notification + const hideRecordingNotification = async () => { + // Notifications cleared when recording stops + }; + + // Handle visibility change (for wake lock re-acquisition) + const handleVisibilityChange = async () => { + if (document.visibilityState === 'visible' && isRecording.value) { + console.log('[Visibility] Page visible, re-acquiring wake lock'); + const acquired = await acquireWakeLock(); + if (acquired) { + showToast('Recording resumed - screen will stay awake', 'success'); + } + } else if (document.visibilityState === 'hidden' && isRecording.value) { + console.log('[Visibility] Page hidden, wake lock may be released by browser'); + } + }; + + // Start recording + // IMPORTANT: For Firefox, getDisplayMedia MUST be the first async call from user gesture + const startRecording = async (mode = 'microphone') => { + const needsDisplayMedia = mode === 'system' || mode === 'both'; + + // For system audio modes, get display media FIRST before any other operations + // This is required for Firefox's "transient activation" security model + if (needsDisplayMedia) { + try { + const displayStream = await navigator.mediaDevices.getDisplayMedia({ + video: true, + audio: true + }); + + // Check if we got an audio track + const audioTrack = displayStream.getAudioTracks()[0]; + if (!audioTrack) { + displayStream.getTracks().forEach(track => track.stop()); + showToast('No audio track - check "Share audio" option', 'error'); + return; + } + + // Store stream for use after disclaimer (if any) + pendingDisplayStream = displayStream; + } catch (error) { + console.error('[Recording] Failed to get display media:', error); + if (error.name === 'NotAllowedError') { + showToast('Screen sharing was cancelled', 'error'); + } else { + showToast(`Failed to capture: ${error.message}`, 'error'); + } + return; + } + } + + // Now check for disclaimer (after we've secured the display stream) + if (recordingDisclaimer.value && recordingDisclaimer.value.trim() !== '') { + showRecordingDisclaimerModal.value = true; + pendingRecordingMode.value = mode; + return; + } + + await startRecordingInternal(mode); + }; + + // Accept recording disclaimer and start recording + const acceptRecordingDisclaimer = async () => { + showRecordingDisclaimerModal.value = false; + await startRecordingInternal(pendingRecordingMode.value || 'microphone'); + }; + + // Cancel recording disclaimer + const cancelRecordingDisclaimer = () => { + showRecordingDisclaimerModal.value = false; + // Clean up pending display stream if user cancels + if (pendingDisplayStream) { + pendingDisplayStream.getTracks().forEach(track => track.stop()); + pendingDisplayStream = null; + } + pendingRecordingMode.value = null; + }; + + // Internal start recording function + const startRecordingInternal = async (mode) => { + try { + recordingMode.value = mode; + audioChunks.value = []; + recordingTime.value = 0; + estimatedFileSize.value = 0; + fileSizeWarningShown.value = false; + + // Initialize IndexedDB session + currentChunkIndex = 0; + + let stream; + let combinedStream; + + if (mode === 'microphone') { + if (!canRecordAudio.value) { + throw new Error('Microphone recording is not available. Make sure you are using HTTPS.'); + } + stream = await navigator.mediaDevices.getUserMedia({ + audio: { + echoCancellation: true, + noiseSuppression: true, + sampleRate: 48000 + } + }); + activeStreams.value = [stream]; + + audioContext.value = new (window.AudioContext || window.webkitAudioContext)(); + const source = audioContext.value.createMediaStreamSource(stream); + analyser.value = audioContext.value.createAnalyser(); + analyser.value.fftSize = 256; + source.connect(analyser.value); + + } else if (mode === 'system') { + if (!canRecordSystemAudio.value) { + throw new Error('System audio recording is not available. Make sure you are using HTTPS.'); + } + // Use pre-obtained display stream (required for Firefox user gesture) + // or get it now for browsers that don't require immediate call + const isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1; + + if (pendingDisplayStream) { + stream = pendingDisplayStream; + pendingDisplayStream = null; + } else { + const displayMediaConstraints = { + video: true, + audio: isFirefox ? true : { + echoCancellation: false, + noiseSuppression: false, + autoGainControl: false + } + }; + stream = await navigator.mediaDevices.getDisplayMedia(displayMediaConstraints); + } + + const audioTrack = stream.getAudioTracks()[0]; + if (!audioTrack) { + stream.getTracks().forEach(track => track.stop()); + const browserName = isFirefox ? 'Firefox' : 'your browser'; + throw new Error( + `No system audio track available. In ${browserName}, please:\n` + + `1. Share a BROWSER TAB that is actively playing audio\n` + + `2. Make sure "Share tab audio" checkbox is checked\n` + + `3. The audio must be playing when you start sharing` + ); + } + + // Stop video track + stream.getVideoTracks().forEach(track => track.stop()); + stream = new MediaStream([audioTrack]); + activeStreams.value = [stream]; + + audioContext.value = new (window.AudioContext || window.webkitAudioContext)(); + const source = audioContext.value.createMediaStreamSource(stream); + analyser.value = audioContext.value.createAnalyser(); + analyser.value.fftSize = 256; + source.connect(analyser.value); + + } else if (mode === 'both') { + if (!canRecordAudio.value || !canRecordSystemAudio.value) { + throw new Error('Recording is not available. Make sure you are using HTTPS.'); + } + const micStream = await navigator.mediaDevices.getUserMedia({ + audio: { + echoCancellation: true, + noiseSuppression: true, + sampleRate: 48000 + } + }); + + // Use pre-obtained display stream or get it now + const isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1; + let displayStream; + + if (pendingDisplayStream) { + displayStream = pendingDisplayStream; + pendingDisplayStream = null; + } else { + displayStream = await navigator.mediaDevices.getDisplayMedia({ + video: true, + audio: isFirefox ? true : { + echoCancellation: false, + noiseSuppression: false, + autoGainControl: false + } + }); + } + + const systemAudioTrack = displayStream.getAudioTracks()[0]; + if (!systemAudioTrack) { + micStream.getTracks().forEach(track => track.stop()); + displayStream.getTracks().forEach(track => track.stop()); + const browserName = isFirefox ? 'Firefox' : 'your browser'; + throw new Error( + `No system audio track available. In ${browserName}, please:\n` + + `1. Share a BROWSER TAB that is actively playing audio\n` + + `2. Make sure "Share tab audio" checkbox is checked\n` + + `3. The audio must be playing when you start sharing` + ); + } + + // Stop video tracks + displayStream.getVideoTracks().forEach(track => track.stop()); + + // Create audio context and combine streams + audioContext.value = new (window.AudioContext || window.webkitAudioContext)(); + const destination = audioContext.value.createMediaStreamDestination(); + + const micSource = audioContext.value.createMediaStreamSource(micStream); + const systemSource = audioContext.value.createMediaStreamSource(new MediaStream([systemAudioTrack])); + + // Create analysers for each source + micAnalyser.value = audioContext.value.createAnalyser(); + micAnalyser.value.fftSize = 256; + systemAnalyser.value = audioContext.value.createAnalyser(); + systemAnalyser.value.fftSize = 256; + + micSource.connect(micAnalyser.value); + micSource.connect(destination); + systemSource.connect(systemAnalyser.value); + systemSource.connect(destination); + + combinedStream = destination.stream; + activeStreams.value = [micStream, displayStream]; + stream = combinedStream; + } + + // Determine best mime type + const mimeType = MediaRecorder.isTypeSupported('audio/webm;codecs=opus') + ? 'audio/webm;codecs=opus' + : 'audio/webm'; + + const recorder = new MediaRecorder(stream, { mimeType }); + + // Start IndexedDB recording session - convert Vue reactive objects to plain objects + try { + await RecordingDB.startRecordingSession({ + mode, + notes: recordingNotes.value || '', + tags: selectedTagIds.value ? [...selectedTagIds.value] : [], // Convert reactive array to plain array + asrOptions: { + language: asrLanguage.value || '', + min_speakers: asrMinSpeakers.value || '', + max_speakers: asrMaxSpeakers.value || '' + }, + mimeType + }); + } catch (dbError) { + console.warn('[Recording] IndexedDB persistence failed, continuing without persistence:', dbError); + } + + recorder.ondataavailable = async (event) => { + if (event.data.size > 0) { + audioChunks.value.push(event.data); + + // Save chunk to IndexedDB for crash recovery + try { + await RecordingDB.saveChunk(event.data, currentChunkIndex); + await RecordingDB.updateRecordingMetadata({ + duration: recordingTime.value, + notes: recordingNotes.value || '' + }); + currentChunkIndex++; + } catch (dbError) { + // Don't spam console - recording continues in memory regardless + } + } + }; + + recorder.onstop = () => { + const blob = new Blob(audioChunks.value, { type: mimeType }); + audioBlobURL.value = URL.createObjectURL(blob); + stopSizeMonitoring(); + }; + + mediaRecorder.value = recorder; + recorder.start(5000); // 5-second chunks for less overhead while still enabling crash recovery + isRecording.value = true; + // Switch to recording view immediately so pending wake-lock/notification awaits don't block Safari rendering + currentView.value = 'recording'; + + // Start timer + recordingInterval.value = setInterval(() => { + recordingTime.value++; + }, 1000); + + // Start size monitoring + startSizeMonitoring(); + + // Acquire wake lock + await acquireWakeLock(); + + // Show notification + await showRecordingNotification(); + + // Start visualizers + drawVisualizers(); + + // Notify service worker + if ('serviceWorker' in navigator && navigator.serviceWorker.controller) { + navigator.serviceWorker.controller.postMessage({ + type: 'RECORDING_STATE', + isRecording: true + }); + } + + } catch (error) { + console.error('Recording error:', error); + setGlobalError(`Failed to start recording: ${error.message}`); + + // Clean up any started streams + if (activeStreams.value.length > 0) { + activeStreams.value.forEach(stream => { + stream.getTracks().forEach(track => track.stop()); + }); + activeStreams.value = []; + } + } + }; + + // Stop recording + const stopRecording = async () => { + if (mediaRecorder.value && isRecording.value) { + mediaRecorder.value.stop(); + isRecording.value = false; + + // Clear the recording timer + if (recordingInterval.value) { + clearInterval(recordingInterval.value); + recordingInterval.value = null; + } + + stopSizeMonitoring(); + cancelAnimationFrame(animationFrameId.value); + animationFrameId.value = null; + + // Stop all active media streams (mic, screen share, etc.) + if (activeStreams.value.length > 0) { + activeStreams.value.forEach(stream => { + stream.getTracks().forEach(track => track.stop()); + }); + activeStreams.value = []; + } + + // Release wake lock + await releaseWakeLock(); + + // Hide recording notification + await hideRecordingNotification(); + + // Notify service worker + if ('serviceWorker' in navigator && navigator.serviceWorker.controller) { + navigator.serviceWorker.controller.postMessage({ + type: 'RECORDING_STATE', + isRecording: false, + duration: recordingTime.value + }); + } + } + }; + + // Upload recorded audio + const uploadRecordedAudio = async () => { + if (!audioBlobURL.value) { + setGlobalError("No recorded audio to upload."); + return; + } + const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); + const recordedFile = new File(audioChunks.value, `recording-${timestamp}.webm`, { type: 'audio/webm' }); + + // Get selected tags as objects and create a DEEP copy to prevent reactivity issues + const selectedTagsTemp = selectedTagIds.value.map(tagId => { + const tag = state.availableTags.value.find(t => t.id == tagId); + return tag || null; + }).filter(Boolean); + + // Deep clone to completely break reactivity chain - JSON parse/stringify removes all proxies + const selectedTags = JSON.parse(JSON.stringify(selectedTagsTemp)); + + // Add to upload queue + uploadQueue.value.push({ + file: recordedFile, + notes: recordingNotes.value, + tags: selectedTags, // Completely non-reactive deep copy + folder_id: selectedFolderId.value, + preserveOptions: true, // Prevents startUpload from overwriting recording's options + asrOptions: { + language: asrLanguage.value, + min_speakers: asrMinSpeakers.value, + max_speakers: asrMaxSpeakers.value + }, + status: 'queued', + recordingId: null, + clientId: `client-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`, + error: null, + willAutoSummarize: false, // Server will tell us via SUMMARIZING status + // Callback to clear IndexedDB session AFTER successful upload (not before) + onUploadSuccess: async () => { + try { + await RecordingDB.clearRecordingSession(); + console.log('[Recording] IndexedDB session cleared after successful upload'); + } catch (dbError) { + console.warn('[Recording] Failed to clear IndexedDB session:', dbError); + } + } + }); + + discardRecording(); + + // Return to upload view (main UI) + currentView.value = 'upload'; + + // Start upload immediately + progressPopupMinimized.value = false; + progressPopupClosed.value = false; + + if (startUploadQueue) { + startUploadQueue(); + } + }; + + // Upload recorded audio in incognito mode + const uploadRecordedAudioIncognito = async () => { + if (!audioBlobURL.value) { + setGlobalError("No recorded audio to upload."); + return; + } + + // Check if incognito state is available + if (!incognitoProcessing || !incognitoRecording) { + console.warn('[Incognito] Incognito state not available, falling back to normal upload'); + uploadRecordedAudio(); + return; + } + + const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); + const recordedFile = new File(audioChunks.value, `recording-${timestamp}.webm`, { type: 'audio/webm' }); + + incognitoProcessing.value = true; + processingMessage.value = 'Processing recording in incognito mode...'; + processingProgress.value = 10; + progressPopupMinimized.value = false; + progressPopupClosed.value = false; + + try { + const formData = new FormData(); + formData.append('file', recordedFile); + + // Add ASR options + if (asrLanguage.value) { + formData.append('language', asrLanguage.value); + } + if (asrMinSpeakers.value && asrMinSpeakers.value !== '') { + formData.append('min_speakers', asrMinSpeakers.value.toString()); + } + if (asrMaxSpeakers.value && asrMaxSpeakers.value !== '') { + formData.append('max_speakers', asrMaxSpeakers.value.toString()); + } + + // Request auto-summarization + formData.append('auto_summarize', 'true'); + + processingMessage.value = 'Uploading recording for incognito processing...'; + processingProgress.value = 20; + + console.log('[Incognito] Uploading recorded audio'); + + const response = await fetch('/api/recordings/incognito', { + method: 'POST', + body: formData + }); + + processingProgress.value = 50; + + // Parse response + const contentType = response.headers.get('content-type') || ''; + if (!contentType.includes('application/json')) { + const text = await response.text(); + const titleMatch = text.match(/([^<]+)<\/title>/i); + throw new Error(titleMatch?.[1] || `Server error (${response.status})`); + } + + const data = await response.json(); + + if (!response.ok || data.error) { + throw new Error(data.error || `Processing failed with status ${response.status}`); + } + + processingProgress.value = 80; + processingMessage.value = 'Processing complete!'; + + // Store result in sessionStorage + const incognitoData = { + id: 'incognito', + incognito: true, + title: data.title || 'Incognito Recording', + transcription: data.transcription, + summary: data.summary, + summary_html: data.summary_html, + created_at: data.created_at, + original_filename: data.original_filename, + file_size: data.file_size, + audio_duration_seconds: data.audio_duration_seconds, + processing_time_seconds: data.processing_time_seconds, + status: 'COMPLETED' + }; + + IncognitoStorage.saveIncognitoRecording(incognitoData); + incognitoRecording.value = incognitoData; + + // Clear IndexedDB session + try { + await RecordingDB.clearRecordingSession(); + } catch (dbError) { + console.warn('[Recording] Failed to clear IndexedDB session:', dbError); + } + + // Clear recording state (must await so currentView='upload' completes + // before we override it with 'detail', otherwise the deferred + // currentView='upload' fires after 'detail' and the view watcher + // clears incognito data thinking we navigated away) + await discardRecording(); + + processingProgress.value = 100; + processingMessage.value = 'Incognito recording ready!'; + + // Auto-select the incognito recording and switch to detail view + selectedRecording.value = incognitoData; + currentView.value = 'detail'; + + // Reset incognito mode toggle + incognitoMode.value = false; + + // Show toast + showToast('Incognito recording processed - data will be lost when tab closes', 'fa-user-secret'); + + console.log('[Incognito] Recording processing complete'); + + } catch (error) { + console.error('[Incognito] Recording processing failed:', error); + setGlobalError(`Incognito processing failed: ${error.message}`); + } finally { + incognitoProcessing.value = false; + } + }; + + // Discard recording + const discardRecording = async () => { + if (audioBlobURL.value) { + URL.revokeObjectURL(audioBlobURL.value); + } + audioBlobURL.value = null; + audioChunks.value = []; + isRecording.value = false; + recordingTime.value = 0; + if (recordingInterval.value) clearInterval(recordingInterval.value); + recordingNotes.value = ''; + selectedTagIds.value = []; + asrLanguage.value = ''; + asrMinSpeakers.value = ''; + asrMaxSpeakers.value = ''; + + // Clear IndexedDB session + try { + await RecordingDB.clearRecordingSession(); + } catch (dbError) { + console.warn('[Recording] Failed to clear IndexedDB session:', dbError); + } + + await releaseWakeLock(); + await hideRecordingNotification(); + + // Return to upload view + currentView.value = 'upload'; + }; + + // Draw single visualizer + const drawSingleVisualizer = (analyserNode, canvasElement) => { + if (!analyserNode || !canvasElement) return; + + const bufferLength = analyserNode.frequencyBinCount; + const dataArray = new Uint8Array(bufferLength); + analyserNode.getByteFrequencyData(dataArray); + + const canvasCtx = canvasElement.getContext('2d'); + const WIDTH = canvasElement.width; + const HEIGHT = canvasElement.height; + + canvasCtx.clearRect(0, 0, WIDTH, HEIGHT); + + const barWidth = (WIDTH / bufferLength) * 1.5; + let barHeight; + let x = 0; + + const buttonColor = getComputedStyle(document.documentElement).getPropertyValue('--bg-button').trim(); + const buttonHoverColor = getComputedStyle(document.documentElement).getPropertyValue('--bg-button-hover').trim(); + + const gradient = canvasCtx.createLinearGradient(0, 0, 0, HEIGHT); + if (isDarkMode.value) { + gradient.addColorStop(0, buttonColor); + gradient.addColorStop(0.6, buttonHoverColor); + gradient.addColorStop(1, 'rgba(0, 0, 0, 0.2)'); + } else { + gradient.addColorStop(0, buttonColor); + gradient.addColorStop(0.5, buttonHoverColor); + gradient.addColorStop(1, 'rgba(0, 0, 0, 0.1)'); + } + + for (let i = 0; i < bufferLength; i++) { + barHeight = dataArray[i] / 2.5; + canvasCtx.fillStyle = gradient; + canvasCtx.fillRect(x, HEIGHT - barHeight, barWidth, barHeight); + x += barWidth + 2; + } + }; + + // Draw visualizers + const drawVisualizers = () => { + if (!isRecording.value) { + if (animationFrameId.value) { + cancelAnimationFrame(animationFrameId.value); + animationFrameId.value = null; + } + return; + } + + animationFrameId.value = requestAnimationFrame(drawVisualizers); + + if (recordingMode.value === 'both') { + drawSingleVisualizer(micAnalyser.value, micVisualizer.value); + drawSingleVisualizer(systemAnalyser.value, systemVisualizer.value); + } else { + drawSingleVisualizer(analyser.value, visualizer.value); + } + }; + + // Update file size estimate + const updateFileSizeEstimate = () => { + if (!isRecording.value || !audioChunks.value.length) return; + + const totalSize = audioChunks.value.reduce((sum, chunk) => sum + chunk.size, 0); + estimatedFileSize.value = totalSize; + + if (recordingTime.value > 0) { + actualBitrate.value = (totalSize * 8) / recordingTime.value; + } + + // Check for size warning + const sizeMB = totalSize / (1024 * 1024); + const warningThresholdMB = maxRecordingMB.value * 0.8; + + if (sizeMB > warningThresholdMB && !fileSizeWarningShown.value) { + fileSizeWarningShown.value = true; + showToast( + `Recording size is ${formatFileSize(totalSize)}. Consider stopping soon.`, + 'fa-exclamation-triangle', + 5000 + ); + } + + // Auto-stop if max size reached + if (sizeMB > maxRecordingMB.value) { + stopRecording(); + showToast( + `Recording automatically stopped at ${formatFileSize(totalSize)}`, + 'fa-stop-circle', + 7000 + ); + } + }; + + // Start size monitoring + const startSizeMonitoring = () => { + if (sizeCheckInterval.value) { + clearInterval(sizeCheckInterval.value); + } + sizeCheckInterval.value = setInterval(updateFileSizeEstimate, 2000); + }; + + // Stop size monitoring + const stopSizeMonitoring = () => { + if (sizeCheckInterval.value) { + clearInterval(sizeCheckInterval.value); + sizeCheckInterval.value = null; + } + }; + + // Check if there's an unsaved recording + const hasUnsavedRecording = () => { + return isRecording.value || audioBlobURL.value; + }; + + // Recover recording from IndexedDB + const recoverRecordingFromDB = async () => { + try { + const recovered = await RecordingDB.recoverRecording(); + if (!recovered) { + return null; + } + + // Restore chunks + audioChunks.value = recovered.chunks; + + // Create blob URL + const blob = new Blob(recovered.chunks, { type: recovered.metadata.mimeType }); + audioBlobURL.value = URL.createObjectURL(blob); + + // Restore metadata + recordingMode.value = recovered.metadata.mode; + recordingNotes.value = recovered.metadata.notes; + selectedTagIds.value = recovered.metadata.tags; + recordingTime.value = recovered.metadata.duration; + + if (recovered.metadata.asrOptions) { + asrLanguage.value = recovered.metadata.asrOptions.language || ''; + asrMinSpeakers.value = recovered.metadata.asrOptions.min_speakers || ''; + asrMaxSpeakers.value = recovered.metadata.asrOptions.max_speakers || ''; + } + + console.log('[Recording] Successfully recovered recording from IndexedDB'); + return recovered.metadata; + } catch (error) { + console.error('[Recording] Failed to recover recording:', error); + return null; + } + }; + + // No initialization needed - system audio detection is handled by computed property + const initializeAudio = async () => { + // Placeholder for future initialization if needed + }; + + return { + startRecording, + stopRecording, + discardRecording, + uploadRecordedAudio, + uploadRecordedAudioIncognito, + acceptRecordingDisclaimer, + cancelRecordingDisclaimer, + updateFileSizeEstimate, + startSizeMonitoring, + stopSizeMonitoring, + drawVisualizers, + drawSingleVisualizer, + handleVisibilityChange, + hasUnsavedRecording, + acquireWakeLock, + releaseWakeLock, + initializeAudio, + recoverRecordingFromDB, + checkForRecoverableRecording: RecordingDB.checkForRecoverableRecording, + clearRecordingSession: RecordingDB.clearRecordingSession + }; +} diff --git a/static/js/modules/composables/audioPlayer.js b/static/js/modules/composables/audioPlayer.js new file mode 100644 index 0000000..6a949d7 --- /dev/null +++ b/static/js/modules/composables/audioPlayer.js @@ -0,0 +1,338 @@ +/** + * Audio Player Composable + * + * Centralized audio playback functionality for consistent behavior across the app. + * This module handles: + * - Playback state (playing, paused, loading) + * - Time tracking (current time, duration) + * - Volume/mute control + * - Seeking with progress bar support + * - Server-side duration support (for formats like WebM that don't report duration) + * + * Usage: + * const player = useAudioPlayer(ref, computed); + * // In template: @loadedmetadata="player.handleLoadedMetadata" + * // When recording changes: player.setServerDuration(recording.audio_duration) + */ + +export function useAudioPlayer(ref, computed) { + // --- State --- + const isPlaying = ref(false); + const currentTime = ref(0); + const duration = ref(0); + const isMuted = ref(false); + const isLoading = ref(false); + const volume = ref(1.0); + + // Progress bar drag state + const isDragging = ref(false); + const dragPreviewPercent = ref(0); + + // Track if we have a reliable server-side duration + let hasServerDuration = false; + + // --- Computed --- + const progressPercent = computed(() => { + // Use preview position while dragging for smooth UI + if (isDragging.value) { + return dragPreviewPercent.value; + } + if (!duration.value) return 0; + return (currentTime.value / duration.value) * 100; + }); + + // Preview time display while dragging + const displayCurrentTime = computed(() => { + if (isDragging.value && duration.value) { + return (dragPreviewPercent.value / 100) * duration.value; + } + return currentTime.value; + }); + + // --- Duration Management --- + + /** + * Set duration from server-side ffprobe value. + * This is more reliable than browser metadata for some formats (WebM, etc.) + */ + const setServerDuration = (serverDuration) => { + if (serverDuration && isFinite(serverDuration) && serverDuration > 0) { + duration.value = serverDuration; + hasServerDuration = true; + } else { + hasServerDuration = false; + } + }; + + /** + * Try to set duration from browser, only if we don't have a server-side value. + * Browser duration can be Infinity for some WebM files. + */ + const trySetBrowserDuration = (browserDuration) => { + if (hasServerDuration) { + // Don't overwrite reliable server-side duration + return; + } + if (browserDuration && isFinite(browserDuration) && browserDuration > 0) { + duration.value = browserDuration; + } + }; + + // --- Event Handlers --- + + const handlePlayPause = (event) => { + isPlaying.value = !event.target.paused; + }; + + const handleLoadedMetadata = (event) => { + trySetBrowserDuration(event.target.duration); + isLoading.value = false; + }; + + const handleDurationChange = (event) => { + // WebM and some formats may initially report Infinity duration + // This handler catches when the actual duration becomes available + trySetBrowserDuration(event.target.duration); + }; + + const handleTimeUpdate = (event) => { + currentTime.value = event.target.currentTime; + + // Fallback: if duration wasn't set yet, try to get it now + if (!duration.value || duration.value === 0) { + trySetBrowserDuration(event.target.duration); + } + }; + + const handleEnded = () => { + isPlaying.value = false; + currentTime.value = 0; + }; + + const handleWaiting = () => { + isLoading.value = true; + }; + + const handleCanPlay = (event) => { + isLoading.value = false; + + // Fallback: try to get duration if not set yet + if (!duration.value || duration.value === 0) { + trySetBrowserDuration(event.target.duration); + } + }; + + const handleVolumeChange = (event) => { + volume.value = event.target.volume; + isMuted.value = event.target.muted; + }; + + // --- Actions --- + + /** + * Get the audio element. Override this for custom element selection. + */ + let getAudioElement = () => { + return document.querySelector('audio[ref="audioPlayerElement"]') || + document.querySelector('video[ref="audioPlayerElement"]') || + document.querySelector('audio') || + document.querySelector('video'); + }; + + /** + * Set custom audio element getter. + */ + const setAudioElementGetter = (getter) => { + getAudioElement = getter; + }; + + const play = () => { + const audio = getAudioElement(); + if (audio) { + audio.play().catch(err => console.warn('Play failed:', err)); + } + }; + + const pause = () => { + const audio = getAudioElement(); + if (audio) { + audio.pause(); + } + }; + + const togglePlayback = () => { + const audio = getAudioElement(); + if (!audio) return; + + if (audio.paused) { + audio.play().catch(err => console.warn('Play failed:', err)); + } else { + audio.pause(); + } + }; + + const seekTo = (time) => { + const audio = getAudioElement(); + if (!audio || !isFinite(time)) return; + + const maxTime = isFinite(audio.duration) ? audio.duration : time; + audio.currentTime = Math.max(0, Math.min(time, maxTime)); + }; + + const seekByPercent = (percent) => { + const audio = getAudioElement(); + if (!audio || !duration.value || !isFinite(duration.value)) return; + + const time = (percent / 100) * duration.value; + audio.currentTime = time; + }; + + const setVolume = (value) => { + const audio = getAudioElement(); + if (audio) { + audio.volume = Math.max(0, Math.min(1, value)); + volume.value = audio.volume; + } + }; + + const toggleMute = () => { + const audio = getAudioElement(); + if (!audio) return; + + if (audio.muted || audio.volume === 0) { + audio.muted = false; + if (audio.volume === 0) { + audio.volume = 0.5; + } + isMuted.value = false; + } else { + audio.muted = true; + isMuted.value = true; + } + }; + + // --- Progress Bar Drag Support --- + + const startProgressDrag = (event) => { + const bar = event.currentTarget.querySelector('.h-2') || event.currentTarget; + const rect = bar.getBoundingClientRect(); + const isTouch = event.type === 'touchstart'; + + const getPercent = (evt) => { + const clientX = isTouch ? evt.touches[0].clientX : evt.clientX; + return Math.max(0, Math.min(100, ((clientX - rect.left) / rect.width) * 100)); + }; + + // Start dragging - show preview + isDragging.value = true; + dragPreviewPercent.value = getPercent(event); + + const onMove = (evt) => { + evt.preventDefault(); + const clientX = isTouch ? evt.touches[0].clientX : evt.clientX; + dragPreviewPercent.value = Math.max(0, Math.min(100, ((clientX - rect.left) / rect.width) * 100)); + }; + + const onUp = () => { + document.removeEventListener(isTouch ? 'touchmove' : 'mousemove', onMove); + document.removeEventListener(isTouch ? 'touchend' : 'mouseup', onUp); + // Seek to final position on release + seekByPercent(dragPreviewPercent.value); + isDragging.value = false; + }; + + document.addEventListener(isTouch ? 'touchmove' : 'mousemove', onMove, { passive: false }); + document.addEventListener(isTouch ? 'touchend' : 'mouseup', onUp); + }; + + // --- Utility --- + + const formatTime = (seconds) => { + if (!seconds || isNaN(seconds)) return '0:00'; + const hours = Math.floor(seconds / 3600); + const mins = Math.floor((seconds % 3600) / 60); + const secs = Math.floor(seconds % 60); + if (hours > 0) { + return `${hours}:${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`; + } + return `${mins}:${secs.toString().padStart(2, '0')}`; + }; + + /** + * Reset all player state (call when changing recordings) + */ + const reset = () => { + isPlaying.value = false; + currentTime.value = 0; + duration.value = 0; + isMuted.value = false; + isLoading.value = false; + hasServerDuration = false; + }; + + /** + * Initialize with a recording object. + * Automatically uses server-side duration if available. + */ + const initWithRecording = (recording) => { + reset(); + if (recording && recording.audio_duration) { + setServerDuration(recording.audio_duration); + } + }; + + return { + // State + isPlaying, + currentTime, + duration, + isMuted, + isLoading, + volume, + isDragging, + dragPreviewPercent, + + // Computed + progressPercent, + displayCurrentTime, + + // Duration management + setServerDuration, + trySetBrowserDuration, + + // Event handlers (wire these to <audio> element) + handlePlayPause, + handleLoadedMetadata, + handleDurationChange, + handleTimeUpdate, + handleEnded, + handleWaiting, + handleCanPlay, + handleVolumeChange, + + // Actions + play, + pause, + togglePlayback, + seekTo, + seekByPercent, + setVolume, + toggleMute, + startProgressDrag, + setAudioElementGetter, + + // Utility + formatTime, + reset, + initWithRecording + }; +} + +/** + * Create a standalone audio player instance. + * Use this for pages that don't have Vue's ref/computed (like share.html). + */ +export function createStandalonePlayer(Vue) { + const { ref, computed } = Vue; + return useAudioPlayer(ref, computed); +} diff --git a/static/js/modules/composables/bulk-operations.js b/static/js/modules/composables/bulk-operations.js new file mode 100644 index 0000000..3d3d8c6 --- /dev/null +++ b/static/js/modules/composables/bulk-operations.js @@ -0,0 +1,475 @@ +/** + * Bulk Operations Composable + * Handles bulk API operations for multiple recordings + */ + +const { ref, computed } = Vue; + +export function useBulkOperations({ + selectedRecordingIds, + selectedRecordings, + recordings, + selectedRecording, + bulkActionInProgress, + availableTags, + availableFolders, + showToast, + setGlobalError, + startReprocessingPoll +}) { + // Modal state + const showBulkDeleteModal = ref(false); + const showBulkTagModal = ref(false); + const showBulkReprocessModal = ref(false); + const showBulkFolderModal = ref(false); + const bulkTagAction = ref('add'); // 'add' or 'remove' + const bulkTagSelectedId = ref(''); + const bulkReprocessType = ref('summary'); // 'transcription' or 'summary' + + // Get CSRF token + const getCsrfToken = () => { + return document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + }; + + // Helper to get selected IDs as array + const getSelectedIds = () => { + return Array.from(selectedRecordingIds.value); + }; + + // ========================================= + // Bulk Delete + // ========================================= + + const openBulkDeleteModal = () => { + showBulkDeleteModal.value = true; + }; + + const closeBulkDeleteModal = () => { + showBulkDeleteModal.value = false; + }; + + const executeBulkDelete = async () => { + const ids = getSelectedIds(); + if (ids.length === 0) return; + + bulkActionInProgress.value = true; + closeBulkDeleteModal(); + + try { + const response = await fetch('/api/recordings/bulk', { + method: 'DELETE', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': getCsrfToken() + }, + body: JSON.stringify({ recording_ids: ids }) + }); + + const data = await response.json(); + + if (!response.ok) { + throw new Error(data.error || 'Failed to delete recordings'); + } + + // Remove deleted recordings from local state + const deletedIds = new Set(data.deleted_ids || ids); + recordings.value = recordings.value.filter(r => !deletedIds.has(r.id)); + + // Clear selected recording if it was deleted + if (selectedRecording.value && deletedIds.has(selectedRecording.value.id)) { + selectedRecording.value = null; + } + + // Remove deleted IDs from selection + deletedIds.forEach(id => selectedRecordingIds.value.delete(id)); + + const count = deletedIds.size; + showToast(`${count} recording${count !== 1 ? 's' : ''} deleted`, 'fa-trash', 3000, 'success'); + } catch (error) { + console.error('Bulk delete error:', error); + setGlobalError(`Failed to delete recordings: ${error.message}`); + } finally { + bulkActionInProgress.value = false; + } + }; + + // ========================================= + // Bulk Tag Operations + // ========================================= + + const openBulkTagModal = (action = 'add') => { + bulkTagAction.value = action; + bulkTagSelectedId.value = ''; + showBulkTagModal.value = true; + }; + + const closeBulkTagModal = () => { + showBulkTagModal.value = false; + bulkTagSelectedId.value = ''; + }; + + const executeBulkTag = async () => { + const ids = getSelectedIds(); + const tagId = bulkTagSelectedId.value; + const action = bulkTagAction.value; + + // Validate before making API call + if (ids.length === 0) { + console.warn('No recordings selected for bulk tag operation'); + return; + } + if (!tagId && tagId !== 0) { + console.warn('No tag selected for bulk tag operation'); + return; + } + + bulkActionInProgress.value = true; + closeBulkTagModal(); + + try { + const response = await fetch('/api/recordings/bulk-tags', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': getCsrfToken() + }, + body: JSON.stringify({ + recording_ids: ids, + tag_id: parseInt(tagId), + action: action + }) + }); + + const data = await response.json(); + + if (!response.ok) { + throw new Error(data.error || `Failed to ${action} tag`); + } + + // Update local state + const tag = availableTags.value.find(t => t.id == tagId); + if (tag) { + const affectedIds = new Set(data.affected_ids || ids); + recordings.value.forEach(recording => { + if (affectedIds.has(recording.id)) { + if (!recording.tags) recording.tags = []; + + if (action === 'add') { + // Add tag if not already present + if (!recording.tags.find(t => t.id === tag.id)) { + recording.tags.push(tag); + } + } else { + // Remove tag + recording.tags = recording.tags.filter(t => t.id !== tag.id); + } + } + }); + + // Update selected recording if affected + if (selectedRecording.value && affectedIds.has(selectedRecording.value.id)) { + if (!selectedRecording.value.tags) selectedRecording.value.tags = []; + + if (action === 'add') { + if (!selectedRecording.value.tags.find(t => t.id === tag.id)) { + selectedRecording.value.tags.push(tag); + } + } else { + selectedRecording.value.tags = selectedRecording.value.tags.filter(t => t.id !== tag.id); + } + } + } + + const count = data.affected_ids?.length || ids.length; + const actionText = action === 'add' ? 'added to' : 'removed from'; + showToast(`Tag ${actionText} ${count} recording${count !== 1 ? 's' : ''}`, 'fa-tags', 3000, 'success'); + } catch (error) { + console.error('Bulk tag error:', error); + setGlobalError(`Failed to ${action} tag: ${error.message}`); + } finally { + bulkActionInProgress.value = false; + } + }; + + // ========================================= + // Bulk Reprocess + // ========================================= + + const openBulkReprocessModal = () => { + bulkReprocessType.value = 'summary'; + showBulkReprocessModal.value = true; + }; + + const closeBulkReprocessModal = () => { + showBulkReprocessModal.value = false; + }; + + const executeBulkReprocess = async () => { + const ids = getSelectedIds(); + if (ids.length === 0) return; + + bulkActionInProgress.value = true; + closeBulkReprocessModal(); + + try { + const response = await fetch('/api/recordings/bulk-reprocess', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': getCsrfToken() + }, + body: JSON.stringify({ + recording_ids: ids, + type: bulkReprocessType.value + }) + }); + + const data = await response.json(); + + if (!response.ok) { + throw new Error(data.error || 'Failed to queue reprocessing'); + } + + // Update status for queued recordings + const queuedIds = new Set(data.queued_ids || ids); + const newStatus = bulkReprocessType.value === 'transcription' ? 'PROCESSING' : 'SUMMARIZING'; + + recordings.value.forEach(recording => { + if (queuedIds.has(recording.id)) { + recording.status = newStatus; + // Start polling for each + if (startReprocessingPoll) { + startReprocessingPoll(recording.id); + } + } + }); + + if (selectedRecording.value && queuedIds.has(selectedRecording.value.id)) { + selectedRecording.value.status = newStatus; + } + + const count = queuedIds.size; + const typeText = bulkReprocessType.value === 'transcription' ? 'Transcription' : 'Summary'; + showToast(`${typeText} reprocessing queued for ${count} recording${count !== 1 ? 's' : ''}`, 'fa-sync-alt', 3000, 'success'); + } catch (error) { + console.error('Bulk reprocess error:', error); + setGlobalError(`Failed to queue reprocessing: ${error.message}`); + } finally { + bulkActionInProgress.value = false; + } + }; + + // ========================================= + // Bulk Toggle (Inbox/Highlight) + // ========================================= + + const bulkToggleInbox = async (value = null) => { + const ids = getSelectedIds(); + if (ids.length === 0) return; + + // If no value specified, toggle based on majority + if (value === null) { + const inboxCount = selectedRecordings.value.filter(r => r.is_inbox).length; + value = inboxCount < ids.length / 2; + } + + bulkActionInProgress.value = true; + + try { + const response = await fetch('/api/recordings/bulk-toggle', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': getCsrfToken() + }, + body: JSON.stringify({ + recording_ids: ids, + field: 'inbox', + value: value + }) + }); + + const data = await response.json(); + + if (!response.ok) { + throw new Error(data.error || 'Failed to update inbox status'); + } + + // Update local state + const affectedIds = new Set(data.affected_ids || ids); + recordings.value.forEach(recording => { + if (affectedIds.has(recording.id)) { + recording.is_inbox = value; + } + }); + + if (selectedRecording.value && affectedIds.has(selectedRecording.value.id)) { + selectedRecording.value.is_inbox = value; + } + + const count = affectedIds.size; + const actionText = value ? 'added to' : 'removed from'; + showToast(`${count} recording${count !== 1 ? 's' : ''} ${actionText} inbox`, 'fa-inbox', 3000, 'success'); + } catch (error) { + console.error('Bulk toggle inbox error:', error); + setGlobalError(`Failed to update inbox status: ${error.message}`); + } finally { + bulkActionInProgress.value = false; + } + }; + + const bulkToggleHighlight = async (value = null) => { + const ids = getSelectedIds(); + if (ids.length === 0) return; + + // If no value specified, toggle based on majority + if (value === null) { + const highlightCount = selectedRecordings.value.filter(r => r.is_highlighted).length; + value = highlightCount < ids.length / 2; + } + + bulkActionInProgress.value = true; + + try { + const response = await fetch('/api/recordings/bulk-toggle', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': getCsrfToken() + }, + body: JSON.stringify({ + recording_ids: ids, + field: 'highlight', + value: value + }) + }); + + const data = await response.json(); + + if (!response.ok) { + throw new Error(data.error || 'Failed to update highlight status'); + } + + // Update local state + const affectedIds = new Set(data.affected_ids || ids); + recordings.value.forEach(recording => { + if (affectedIds.has(recording.id)) { + recording.is_highlighted = value; + } + }); + + if (selectedRecording.value && affectedIds.has(selectedRecording.value.id)) { + selectedRecording.value.is_highlighted = value; + } + + const count = affectedIds.size; + const actionText = value ? 'highlighted' : 'unhighlighted'; + showToast(`${count} recording${count !== 1 ? 's' : ''} ${actionText}`, 'fa-star', 3000, 'success'); + } catch (error) { + console.error('Bulk toggle highlight error:', error); + setGlobalError(`Failed to update highlight status: ${error.message}`); + } finally { + bulkActionInProgress.value = false; + } + }; + + // ========================================= + // Bulk Folder Assignment + // ========================================= + + const bulkAssignFolder = async (folderId) => { + const ids = getSelectedIds(); + if (ids.length === 0) return; + + bulkActionInProgress.value = true; + showBulkFolderModal.value = false; + + try { + const response = await fetch('/api/recordings/bulk/folder', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': getCsrfToken() + }, + body: JSON.stringify({ + recording_ids: ids, + folder_id: folderId + }) + }); + + const data = await response.json(); + + if (!response.ok) { + throw new Error(data.error || 'Failed to update folders'); + } + + // Update local state + const folder = folderId ? availableFolders.value.find(f => f.id === folderId) : null; + recordings.value.forEach(recording => { + if (ids.includes(recording.id)) { + recording.folder_id = folderId; + recording.folder = folder; + } + }); + + // Update selected recording if affected + if (selectedRecording.value && ids.includes(selectedRecording.value.id)) { + selectedRecording.value.folder_id = folderId; + selectedRecording.value.folder = folder; + } + + // Update folder recording counts + if (availableFolders.value) { + availableFolders.value.forEach(f => { + const count = recordings.value.filter(r => r.folder_id === f.id).length; + f.recording_count = count; + }); + } + + const count = data.updated_count || ids.length; + if (folderId) { + showToast(`${count} recording${count !== 1 ? 's' : ''} moved to "${folder?.name || 'folder'}"`, 'fa-folder', 3000, 'success'); + } else { + showToast(`${count} recording${count !== 1 ? 's' : ''} removed from folder`, 'fa-folder-minus', 3000, 'success'); + } + } catch (error) { + console.error('Bulk folder assignment error:', error); + setGlobalError(`Failed to update folders: ${error.message}`); + } finally { + bulkActionInProgress.value = false; + } + }; + + return { + // Modal state + showBulkDeleteModal, + showBulkTagModal, + showBulkReprocessModal, + showBulkFolderModal, + bulkTagAction, + bulkTagSelectedId, + bulkReprocessType, + + // Bulk Delete + openBulkDeleteModal, + closeBulkDeleteModal, + executeBulkDelete, + + // Bulk Tag + openBulkTagModal, + closeBulkTagModal, + executeBulkTag, + + // Bulk Reprocess + openBulkReprocessModal, + closeBulkReprocessModal, + executeBulkReprocess, + + // Bulk Toggle + bulkToggleInbox, + bulkToggleHighlight, + + // Bulk Folder + bulkAssignFolder + }; +} diff --git a/static/js/modules/composables/bulk-selection.js b/static/js/modules/composables/bulk-selection.js new file mode 100644 index 0000000..1da48c5 --- /dev/null +++ b/static/js/modules/composables/bulk-selection.js @@ -0,0 +1,111 @@ +/** + * Bulk Selection Composable + * Handles multi-select functionality for recordings + */ + +const { computed } = Vue; + +export function useBulkSelection({ + selectionMode, + selectedRecordingIds, + recordings, + selectedRecording, + currentView +}) { + // Computed + const selectedCount = computed(() => selectedRecordingIds.value.size); + + const selectedRecordings = computed(() => { + return recordings.value.filter(r => selectedRecordingIds.value.has(r.id)); + }); + + const allVisibleSelected = computed(() => { + if (recordings.value.length === 0) return false; + return recordings.value.every(r => selectedRecordingIds.value.has(r.id)); + }); + + const isSelected = (id) => { + return selectedRecordingIds.value.has(id); + }; + + // Methods + const enterSelectionMode = () => { + selectionMode.value = true; + selectedRecordingIds.value = new Set(); + }; + + const exitSelectionMode = () => { + selectionMode.value = false; + selectedRecordingIds.value = new Set(); + }; + + const toggleSelection = (id) => { + const newSet = new Set(selectedRecordingIds.value); + if (newSet.has(id)) { + newSet.delete(id); + } else { + newSet.add(id); + } + selectedRecordingIds.value = newSet; + }; + + const selectAll = () => { + const newSet = new Set(); + recordings.value.forEach(r => newSet.add(r.id)); + selectedRecordingIds.value = newSet; + }; + + const clearSelection = () => { + selectedRecordingIds.value = new Set(); + }; + + // Keyboard handler for selection mode + const handleSelectionKeyboard = (event) => { + if (!selectionMode.value) return; + + // Escape to exit selection mode + if (event.key === 'Escape') { + exitSelectionMode(); + event.preventDefault(); + } + + // Ctrl/Cmd + A to select all + if ((event.ctrlKey || event.metaKey) && event.key === 'a') { + // Only if not in an input field + if (document.activeElement.tagName !== 'INPUT' && + document.activeElement.tagName !== 'TEXTAREA' && + !document.activeElement.isContentEditable) { + event.preventDefault(); + selectAll(); + } + } + }; + + // Initialize keyboard listener + const initSelectionKeyboardListeners = () => { + document.addEventListener('keydown', handleSelectionKeyboard); + }; + + const cleanupSelectionKeyboardListeners = () => { + document.removeEventListener('keydown', handleSelectionKeyboard); + }; + + return { + // Computed + selectedCount, + selectedRecordings, + allVisibleSelected, + + // Methods + isSelected, + enterSelectionMode, + exitSelectionMode, + toggleSelection, + selectAll, + clearSelection, + + // Keyboard + initSelectionKeyboardListeners, + cleanupSelectionKeyboardListeners + }; +} diff --git a/static/js/modules/composables/chat.js b/static/js/modules/composables/chat.js new file mode 100644 index 0000000..f202e8f --- /dev/null +++ b/static/js/modules/composables/chat.js @@ -0,0 +1,380 @@ +/** + * Chat composable + * Handles AI chat functionality with streaming responses + */ + +export function useChat(state, utils) { + const { + showChat, isChatMaximized, chatMessages, chatInput, + isChatLoading, chatMessagesRef, chatInputRef, selectedRecording, csrfToken + } = state; + + const { showToast, setGlobalError, onChatComplete, t } = utils; + + // Helper function to check if chat is scrolled to bottom (within bottom 5%) + const isChatScrolledToBottom = () => { + if (!chatMessagesRef.value) return true; + const { scrollTop, scrollHeight, clientHeight } = chatMessagesRef.value; + const scrollableHeight = scrollHeight - clientHeight; + if (scrollableHeight <= 0) return true; + const scrollPercentage = scrollTop / scrollableHeight; + return scrollPercentage >= 0.95; + }; + + // Helper function to scroll chat to bottom + const scrollChatToBottom = () => { + if (chatMessagesRef.value) { + requestAnimationFrame(() => { + if (chatMessagesRef.value) { + chatMessagesRef.value.scrollTop = chatMessagesRef.value.scrollHeight; + } + }); + } + }; + + const focusChatInput = () => { + Vue.nextTick(() => { + if (chatInputRef.value) { + chatInputRef.value.focus(); + } + }); + }; + + const toggleChatMaximize = () => { + if (isChatMaximized.value) { + isChatMaximized.value = false; + } else { + isChatMaximized.value = true; + if (!showChat.value) { + showChat.value = true; + } + } + }; + + const sendChatMessage = async () => { + if (!chatInput.value.trim() || isChatLoading.value || !selectedRecording.value || selectedRecording.value.status !== 'COMPLETED') { + return; + } + + const message = chatInput.value.trim(); + + if (!Array.isArray(chatMessages.value)) { + chatMessages.value = []; + } + + chatMessages.value.push({ role: 'user', content: message }); + chatInput.value = ''; + isChatLoading.value = true; + focusChatInput(); + + await Vue.nextTick(); + scrollChatToBottom(); + + let assistantMessage = null; + + try { + const messageHistory = chatMessages.value + .slice(0, -1) + .map(msg => ({ role: msg.role, content: msg.content })); + + // Check if this is an incognito recording + const isIncognito = selectedRecording.value.incognito === true; + let response; + + if (isIncognito) { + // Use incognito chat endpoint - pass transcription directly + response = await fetch('/api/recordings/incognito/chat', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + transcription: selectedRecording.value.transcription, + participants: selectedRecording.value.participants || '', + notes: selectedRecording.value.notes || '', + message: message, + message_history: messageHistory + }) + }); + } else { + // Use regular chat endpoint + response = await fetch('/chat', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + recording_id: selectedRecording.value.id, + message: message, + message_history: messageHistory + }) + }); + } + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.error || 'Failed to get chat response'); + } + + const reader = response.body.getReader(); + const decoder = new TextDecoder(); + let buffer = ''; + + const processStream = async () => { + let isFirstChunk = true; + while (true) { + const { done, value } = await reader.read(); + if (done) break; + + buffer += decoder.decode(value, { stream: true }); + const lines = buffer.split('\n'); + buffer = lines.pop(); + + for (const line of lines) { + if (line.startsWith('data: ')) { + const jsonStr = line.substring(6); + // Handle [DONE] marker from incognito endpoint + if (jsonStr === '[DONE]') { + return; + } + if (jsonStr) { + try { + const data = JSON.parse(jsonStr); + if (data.thinking) { + const shouldScroll = isChatScrolledToBottom(); + + if (isFirstChunk) { + isChatLoading.value = false; + assistantMessage = Vue.reactive({ + role: 'assistant', + content: '', + html: '', + thinking: data.thinking, + thinkingExpanded: false + }); + chatMessages.value.push(assistantMessage); + isFirstChunk = false; + } else if (assistantMessage) { + if (assistantMessage.thinking) { + assistantMessage.thinking += '\n\n' + data.thinking; + } else { + assistantMessage.thinking = data.thinking; + } + } + + if (shouldScroll) { + await Vue.nextTick(); + scrollChatToBottom(); + } + } + // Handle both 'delta' (regular) and 'content' (incognito) formats + const textContent = data.delta || data.content; + if (textContent) { + const shouldScroll = isChatScrolledToBottom(); + + if (isFirstChunk) { + isChatLoading.value = false; + assistantMessage = Vue.reactive({ + role: 'assistant', + content: '', + html: '', + thinking: '', + thinkingExpanded: false + }); + chatMessages.value.push(assistantMessage); + isFirstChunk = false; + } + + assistantMessage.content += textContent; + assistantMessage.html = marked.parse(assistantMessage.content); + + if (shouldScroll) { + await Vue.nextTick(); + scrollChatToBottom(); + } + } + if (data.end_of_stream) { + return; + } + if (data.error) { + if (data.budget_exceeded) { + throw new Error(t('adminDashboard.tokenBudgetExceeded')); + } + throw new Error(data.error); + } + } catch (e) { + console.error('Error parsing stream data:', e); + } + } + } + } + } + }; + + await processStream(); + + } catch (error) { + console.error('Chat Error:', error); + if (assistantMessage) { + assistantMessage.content = `Error: ${error.message}`; + assistantMessage.html = `<span class="text-red-500">Error: ${error.message}</span>`; + } else { + chatMessages.value.push({ + role: 'assistant', + content: `Error: ${error.message}`, + html: `<span class="text-red-500">Error: ${error.message}</span>` + }); + } + } finally { + isChatLoading.value = false; + await Vue.nextTick(); + if (isChatScrolledToBottom()) { + scrollChatToBottom(); + } + focusChatInput(); + // Refresh token budget after chat completion + if (onChatComplete) { + onChatComplete(); + } + } + }; + + const handleChatKeydown = (event) => { + if (event.key === 'Enter') { + if (event.ctrlKey || event.shiftKey) { + return; + } else { + event.preventDefault(); + sendChatMessage(); + } + } + }; + + const clearChat = () => { + if (chatMessages.value.length > 0) { + chatMessages.value = []; + showToast(t('chat.cleared'), 'fa-broom'); + } + }; + + const downloadChat = async () => { + if (!selectedRecording.value || chatMessages.value.length === 0) { + showToast(t('chat.noMessagesToDownload'), 'fa-exclamation-circle'); + return; + } + + try { + const csrfTokenValue = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const response = await fetch(`/recording/${selectedRecording.value.id}/download/chat`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfTokenValue + }, + body: JSON.stringify({ + messages: chatMessages.value + }) + }); + + if (!response.ok) { + const error = await response.json(); + showToast(error.error || t('chat.downloadFailed'), 'fa-exclamation-circle'); + return; + } + + const blob = await response.blob(); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.style.display = 'none'; + a.href = url; + + const contentDisposition = response.headers.get('Content-Disposition'); + let filename = 'chat.docx'; + if (contentDisposition) { + const utf8Match = /filename\*=utf-8''(.+)/.exec(contentDisposition); + if (utf8Match) { + filename = decodeURIComponent(utf8Match[1]); + } else { + const regularMatch = /filename="(.+)"/.exec(contentDisposition); + if (regularMatch) { + filename = regularMatch[1]; + } + } + } + a.download = filename; + + document.body.appendChild(a); + a.click(); + window.URL.revokeObjectURL(url); + document.body.removeChild(a); + + showToast(t('chat.downloadSuccess')); + } catch (error) { + console.error('Download failed:', error); + showToast(t('chat.downloadFailed'), 'fa-exclamation-circle'); + } + }; + + const copyMessage = (text, event) => { + const button = event.currentTarget; + + if (navigator.clipboard && window.isSecureContext) { + navigator.clipboard.writeText(text) + .then(() => { + showToast(t('messages.copiedSuccessfully')); + animateCopyButton(button); + }) + .catch(err => { + console.error('Copy failed:', err); + showToast(t('messages.copyFailed') + ': ' + err.message, 'fa-exclamation-circle'); + fallbackCopyTextToClipboard(text, button); + }); + } else { + fallbackCopyTextToClipboard(text, button); + } + }; + + const animateCopyButton = (button) => { + button.classList.add('copy-success'); + const originalContent = button.innerHTML; + button.innerHTML = '<i class="fas fa-check"></i>'; + setTimeout(() => { + button.classList.remove('copy-success'); + button.innerHTML = originalContent; + }, 1500); + }; + + const fallbackCopyTextToClipboard = (text, button = null) => { + try { + const textArea = document.createElement("textarea"); + textArea.value = text; + textArea.style.position = "fixed"; + textArea.style.left = "-999999px"; + textArea.style.top = "-999999px"; + document.body.appendChild(textArea); + textArea.focus(); + textArea.select(); + const successful = document.execCommand('copy'); + document.body.removeChild(textArea); + + if (successful) { + showToast(t('messages.copiedSuccessfully')); + if (button) animateCopyButton(button); + } else { + showToast(t('messages.copyNotSupported'), 'fa-exclamation-circle'); + } + } catch (err) { + console.error('Fallback copy failed:', err); + showToast(t('messages.copyFailed') + ': ' + err.message, 'fa-exclamation-circle'); + } + }; + + return { + isChatScrolledToBottom, + scrollChatToBottom, + toggleChatMaximize, + sendChatMessage, + handleChatKeydown, + clearChat, + downloadChat, + copyMessage, + animateCopyButton, + fallbackCopyTextToClipboard + }; +} diff --git a/static/js/modules/composables/folders.js b/static/js/modules/composables/folders.js new file mode 100644 index 0000000..152e384 --- /dev/null +++ b/static/js/modules/composables/folders.js @@ -0,0 +1,173 @@ +/** + * Folders Management Composable + * Handles folder operations for recordings + */ + +const { computed, ref } = Vue; + +export function useFolders({ + recordings, + availableFolders, + selectedRecording, + showToast, + setGlobalError +}) { + // Computed / Helpers + const getRecordingFolder = (recording) => { + if (!recording || !recording.folder_id) return null; + // Try to get from recording.folder first, then lookup + if (recording.folder) return recording.folder; + return availableFolders.value?.find(f => f.id === recording.folder_id) || null; + }; + + const getFolderById = (folderId) => { + if (!folderId || !availableFolders.value) return null; + // Use == for loose equality to handle string/number type mismatch (e.g., from localStorage) + return availableFolders.value.find(f => f.id == folderId) || null; + }; + + const getFolderColor = (folderId) => { + const folder = getFolderById(folderId); + return folder?.color || '#10B981'; + }; + + const getFolderName = (folderId) => { + const folder = getFolderById(folderId); + return folder?.name || 'Folder'; + }; + + const getAvailableFoldersForRecording = () => { + if (!availableFolders.value) return []; + return availableFolders.value; + }; + + // Methods + const assignFolderToRecording = async (recordingId, folderId) => { + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + + const response = await fetch(`/api/recordings/${recordingId}/folder`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify({ folder_id: folderId || null }) + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.error || 'Failed to update folder'); + } + + const updatedRecording = await response.json(); + + // Update local recording data + const recordingInList = recordings.value.find(r => r.id === recordingId); + if (recordingInList) { + recordingInList.folder_id = updatedRecording.folder_id; + recordingInList.folder = updatedRecording.folder; + } + + // Update selectedRecording if it matches + if (selectedRecording.value && selectedRecording.value.id === recordingId) { + selectedRecording.value.folder_id = updatedRecording.folder_id; + selectedRecording.value.folder = updatedRecording.folder; + } + + // Update folder recording counts + if (availableFolders.value) { + availableFolders.value.forEach(f => { + const count = recordings.value.filter(r => r.folder_id === f.id).length; + f.recording_count = count; + }); + } + + if (folderId) { + const folder = availableFolders.value?.find(f => f.id === folderId); + showToast(`Moved to folder "${folder?.name || 'Unknown'}"`, 'fa-folder', 2000, 'success'); + } else { + showToast('Removed from folder', 'fa-folder-minus', 2000, 'success'); + } + + return updatedRecording; + + } catch (error) { + console.error('Error updating folder:', error); + setGlobalError(`Failed to update folder: ${error.message}`); + return null; + } + }; + + const removeRecordingFromFolder = async (recordingId) => { + return assignFolderToRecording(recordingId, null); + }; + + const bulkAssignFolder = async (recordingIds, folderId) => { + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + + const response = await fetch('/api/recordings/bulk/folder', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify({ + recording_ids: recordingIds, + folder_id: folderId || null + }) + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.error || 'Failed to update folders'); + } + + const result = await response.json(); + + // Update local recording data + recordingIds.forEach(id => { + const recording = recordings.value.find(r => r.id === id); + if (recording) { + recording.folder_id = folderId || null; + recording.folder = folderId ? availableFolders.value?.find(f => f.id === folderId) : null; + } + }); + + // Update folder recording counts + if (availableFolders.value) { + availableFolders.value.forEach(f => { + const count = recordings.value.filter(r => r.folder_id === f.id).length; + f.recording_count = count; + }); + } + + if (folderId) { + const folder = availableFolders.value?.find(f => f.id === folderId); + showToast(`${result.updated_count} recording(s) moved to "${folder?.name || 'Unknown'}"`, 'fa-folder', 2000, 'success'); + } else { + showToast(`${result.updated_count} recording(s) removed from folder`, 'fa-folder-minus', 2000, 'success'); + } + + return result; + + } catch (error) { + console.error('Error bulk updating folders:', error); + setGlobalError(`Failed to update folders: ${error.message}`); + return null; + } + }; + + return { + // Methods + getRecordingFolder, + getFolderById, + getFolderColor, + getFolderName, + getAvailableFoldersForRecording, + assignFolderToRecording, + removeRecordingFromFolder, + bulkAssignFolder + }; +} diff --git a/static/js/modules/composables/index.js b/static/js/modules/composables/index.js new file mode 100644 index 0000000..cb94750 --- /dev/null +++ b/static/js/modules/composables/index.js @@ -0,0 +1,33 @@ +/** + * Composables module exports + * + * Each composable encapsulates related functionality: + * - recordings: Loading, selecting, filtering recordings + * - upload: File upload queue management + * - audio: Microphone/system audio recording + * - ui: Dark mode, color schemes, sidebar + * - transcription: Transcription editing (ASR editor, text editor) + * - speakers: Speaker identification and management + * - reprocess: Reprocessing transcription/summary + * - sharing: Public/internal sharing + * - modals: Modal dialog management + * - chat: AI chat functionality + * - pwa: PWA features (install prompt, notifications, badging, media session) + * - tokens: API token management + */ + +export { useRecordings } from './recordings.js'; +export { useUpload } from './upload.js'; +export { useAudio } from './audio.js'; +export { useUI } from './ui.js'; +export { useModals } from './modals.js'; +export { useSharing } from './sharing.js'; +export { useReprocess } from './reprocess.js'; +export { useTranscription } from './transcription.js'; +export { useSpeakers } from './speakers.js'; +export { useChat } from './chat.js'; +export { usePWA } from './pwa.js'; +export { useTokens } from './tokens.js'; +export { useBulkSelection } from './bulk-selection.js'; +export { useBulkOperations } from './bulk-operations.js'; +export { useFolders } from './folders.js'; diff --git a/static/js/modules/composables/modals.js b/static/js/modules/composables/modals.js new file mode 100644 index 0000000..5dae37d --- /dev/null +++ b/static/js/modules/composables/modals.js @@ -0,0 +1,659 @@ +/** + * Modal management composable + * Handles opening, closing, and saving modal dialogs + */ + +export function useModals(state, utils) { + const { + showEditModal, showDeleteModal, showEditTagsModal, + showReprocessModal, showResetModal, showShareModal, + showSharesListModal, showTextEditorModal, showAsrEditorModal, + showEditSpeakersModal, showAddSpeakerModal, showEditTextModal, + showShareDeleteModal, showUnifiedShareModal, showColorSchemeModal, + showSystemAudioHelpModal, editingRecording, recordingToDelete, recordingToReset, + selectedRecording, recordings, selectedNewTagId, tagSearchFilter, + availableTags, currentView, totalRecordings, toasts, uploadQueue, allJobs, + // DateTime picker state + showDateTimePicker, pickerMonth, pickerYear, pickerHour, pickerMinute, + pickerAmPm, pickerSelectedDate, dateTimePickerTarget, dateTimePickerCallback + } = state; + + const { showToast, setGlobalError } = utils; + const { computed } = Vue; + + // ========================================= + // Edit Recording Modal + // ========================================= + + const openEditModal = (recording) => { + editingRecording.value = { ...recording }; + showEditModal.value = true; + }; + + const cancelEdit = () => { + showEditModal.value = false; + editingRecording.value = null; + }; + + const saveEdit = async () => { + if (!editingRecording.value) return; + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const response = await fetch(`/api/recordings/${editingRecording.value.id}`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify({ + title: editingRecording.value.title, + participants: editingRecording.value.participants, + meeting_date: editingRecording.value.meeting_date, + notes: editingRecording.value.notes + }) + }); + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to save changes'); + + // Update local data + const index = recordings.value.findIndex(r => r.id === editingRecording.value.id); + if (index !== -1) { + recordings.value[index] = { ...recordings.value[index], ...editingRecording.value }; + } + if (selectedRecording.value && selectedRecording.value.id === editingRecording.value.id) { + selectedRecording.value = { ...selectedRecording.value, ...editingRecording.value }; + } + + showToast('Recording updated!', 'fa-check-circle'); + showEditModal.value = false; + editingRecording.value = null; + } catch (error) { + setGlobalError(`Failed to save changes: ${error.message}`); + } + }; + + // ========================================= + // Delete Recording Modal + // ========================================= + + const confirmDelete = (recording) => { + recordingToDelete.value = recording; + showDeleteModal.value = true; + }; + + const cancelDelete = () => { + showDeleteModal.value = false; + recordingToDelete.value = null; + }; + + const deleteRecording = async () => { + if (!recordingToDelete.value) return; + const deletedId = recordingToDelete.value.id; + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const response = await fetch(`/recording/${deletedId}`, { + method: 'DELETE', + headers: { 'X-CSRFToken': csrfToken } + }); + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to delete recording'); + + // Remove from recordings list + recordings.value = recordings.value.filter(r => r.id !== deletedId); + totalRecordings.value--; + + // Remove from upload queue if present (frontend tracking) + if (uploadQueue?.value) { + uploadQueue.value = uploadQueue.value.filter(item => item.recordingId !== deletedId); + } + + // Remove from backend job queue if present (backend processing tracking) + // This is critical - without this, deleted recordings remain in processing queue + if (allJobs?.value) { + allJobs.value = allJobs.value.filter(job => job.recording_id !== deletedId); + } + + // Clear selected recording if it's the one being deleted + if (selectedRecording.value?.id === deletedId) { + selectedRecording.value = null; + currentView.value = 'upload'; + } + + showToast('Recording deleted.', 'fa-trash'); + showDeleteModal.value = false; + recordingToDelete.value = null; + } catch (error) { + setGlobalError(`Failed to delete recording: ${error.message}`); + } + }; + + // ========================================= + // Archive Recording + // ========================================= + + const archiveRecording = async (recording) => { + if (!recording) return; + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const response = await fetch(`/api/recordings/${recording.id}/archive`, { + method: 'POST', + headers: { 'X-CSRFToken': csrfToken } + }); + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to archive recording'); + + recording.is_archived = true; + recording.audio_deleted_at = data.audio_deleted_at; + + // Update in recordings list + const index = recordings.value.findIndex(r => r.id === recording.id); + if (index !== -1) { + recordings.value[index].is_archived = true; + recordings.value[index].audio_deleted_at = data.audio_deleted_at; + } + + showToast('Recording archived (audio deleted)', 'fa-archive'); + } catch (error) { + setGlobalError(`Failed to archive recording: ${error.message}`); + } + }; + + // ========================================= + // Edit Tags Modal + // ========================================= + + const openEditTagsModal = () => { + selectedNewTagId.value = ''; + tagSearchFilter.value = ''; + showEditTagsModal.value = true; + }; + + const closeEditTagsModal = () => { + showEditTagsModal.value = false; + }; + + const addTagToRecording = async (tagId) => { + if (!selectedRecording.value || !tagId) return; + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const response = await fetch(`/api/recordings/${selectedRecording.value.id}/tags`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify({ tag_id: tagId }) + }); + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to add tag'); + + // Find the tag object + const tag = availableTags.value.find(t => t.id === tagId); + if (tag) { + if (!selectedRecording.value.tags) { + selectedRecording.value.tags = []; + } + selectedRecording.value.tags.push(tag); + } + + // Update in recordings list + const index = recordings.value.findIndex(r => r.id === selectedRecording.value.id); + if (index !== -1 && tag) { + if (!recordings.value[index].tags) { + recordings.value[index].tags = []; + } + recordings.value[index].tags.push(tag); + } + + selectedNewTagId.value = ''; + showToast('Tag added!', 'fa-tag'); + } catch (error) { + setGlobalError(`Failed to add tag: ${error.message}`); + } + }; + + const removeTagFromRecording = async (tagId) => { + if (!selectedRecording.value || !tagId) return; + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const response = await fetch(`/api/recordings/${selectedRecording.value.id}/tags/${tagId}`, { + method: 'DELETE', + headers: { 'X-CSRFToken': csrfToken } + }); + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to remove tag'); + + // Remove from selected recording + if (selectedRecording.value.tags) { + selectedRecording.value.tags = selectedRecording.value.tags.filter(t => t.id !== tagId); + } + + // Update in recordings list + const index = recordings.value.findIndex(r => r.id === selectedRecording.value.id); + if (index !== -1 && recordings.value[index].tags) { + recordings.value[index].tags = recordings.value[index].tags.filter(t => t.id !== tagId); + } + + showToast('Tag removed!', 'fa-tag'); + } catch (error) { + setGlobalError(`Failed to remove tag: ${error.message}`); + } + }; + + // ========================================= + // Reset Modal + // ========================================= + + const openResetModal = (recording) => { + recordingToReset.value = recording; + showResetModal.value = true; + }; + + const cancelReset = () => { + showResetModal.value = false; + recordingToReset.value = null; + }; + + const resetRecording = async () => { + if (!recordingToReset.value) return; + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const response = await fetch(`/recording/${recordingToReset.value.id}/reset_status`, { + method: 'POST', + headers: { 'X-CSRFToken': csrfToken } + }); + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to reset recording'); + + // Update recording status + const index = recordings.value.findIndex(r => r.id === recordingToReset.value.id); + if (index !== -1) { + recordings.value[index].status = 'PENDING'; + recordings.value[index].transcription = ''; + recordings.value[index].summary = ''; + } + + if (selectedRecording.value?.id === recordingToReset.value.id) { + selectedRecording.value.status = 'PENDING'; + selectedRecording.value.transcription = ''; + selectedRecording.value.summary = ''; + } + + showToast('Recording reset for reprocessing.', 'fa-redo'); + showResetModal.value = false; + recordingToReset.value = null; + } catch (error) { + setGlobalError(`Failed to reset recording: ${error.message}`); + } + }; + + // ========================================= + // System Audio Help Modal + // ========================================= + + const openSystemAudioHelpModal = () => { + showSystemAudioHelpModal.value = true; + }; + + const closeSystemAudioHelpModal = () => { + showSystemAudioHelpModal.value = false; + }; + + // ========================================= + // Toast Management + // ========================================= + + const dismissToast = (id) => { + toasts.value = toasts.value.filter(t => t.id !== id); + }; + + // Aliases for template compatibility + const editRecording = openEditModal; + const editRecordingTags = openEditTagsModal; + + // ========================================= + // DateTime Picker + // ========================================= + + const monthNames = ['January', 'February', 'March', 'April', 'May', 'June', + 'July', 'August', 'September', 'October', 'November', 'December']; + const dayNames = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']; + + // Generate available years (10 years before and after current year) + const availableYears = computed(() => { + const currentYear = new Date().getFullYear(); + const years = []; + for (let y = currentYear - 10; y <= currentYear + 10; y++) { + years.push(y); + } + return years; + }); + + // Generate hours for 12-hour format + const hours12 = computed(() => { + const hours = []; + for (let h = 1; h <= 12; h++) { + hours.push({ value: h, label: h.toString() }); + } + return hours; + }); + + // Generate minutes + const minutes = computed(() => { + const mins = []; + for (let m = 0; m < 60; m++) { + mins.push(m); + } + return mins; + }); + + // Generate calendar days for current month view + const calendarDays = computed(() => { + const days = []; + const year = pickerYear.value; + const month = pickerMonth.value; + + // First day of the month + const firstDay = new Date(year, month, 1); + const startingDay = firstDay.getDay(); + + // Last day of the month + const lastDay = new Date(year, month + 1, 0); + const totalDays = lastDay.getDate(); + + // Previous month days to fill the grid + const prevMonthLastDay = new Date(year, month, 0).getDate(); + for (let i = startingDay - 1; i >= 0; i--) { + days.push({ + day: prevMonthLastDay - i, + date: new Date(year, month - 1, prevMonthLastDay - i), + inMonth: false, + isToday: false, + isSelected: false + }); + } + + // Current month days + const today = new Date(); + for (let d = 1; d <= totalDays; d++) { + const date = new Date(year, month, d); + const isToday = date.toDateString() === today.toDateString(); + const isSelected = pickerSelectedDate.value && + date.toDateString() === pickerSelectedDate.value.toDateString(); + days.push({ + day: d, + date: date, + inMonth: true, + isToday: isToday, + isSelected: isSelected + }); + } + + // Next month days to fill the grid (6 rows * 7 days = 42 total) + const remainingDays = 42 - days.length; + for (let d = 1; d <= remainingDays; d++) { + days.push({ + day: d, + date: new Date(year, month + 1, d), + inMonth: false, + isToday: false, + isSelected: false + }); + } + + return days; + }); + + const openDateTimePicker = (target, currentValue, callback) => { + dateTimePickerTarget.value = target; + dateTimePickerCallback.value = callback; + + // Parse current value if exists + if (currentValue) { + const date = new Date(currentValue); + if (!isNaN(date.getTime())) { + pickerSelectedDate.value = date; + pickerMonth.value = date.getMonth(); + pickerYear.value = date.getFullYear(); + + let hours = date.getHours(); + const ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours === 0 ? 12 : hours; + + pickerHour.value = hours; + pickerMinute.value = date.getMinutes(); + pickerAmPm.value = ampm; + } else { + setPickerToNow(); + } + } else { + setPickerToNow(); + } + + showDateTimePicker.value = true; + }; + + const setPickerToNow = () => { + const now = new Date(); + pickerSelectedDate.value = now; + pickerMonth.value = now.getMonth(); + pickerYear.value = now.getFullYear(); + + let hours = now.getHours(); + const ampm = hours >= 12 ? 'PM' : 'AM'; + hours = hours % 12; + hours = hours === 0 ? 12 : hours; + + pickerHour.value = hours; + pickerMinute.value = now.getMinutes(); + pickerAmPm.value = ampm; + }; + + const closeDateTimePicker = () => { + showDateTimePicker.value = false; + dateTimePickerTarget.value = null; + dateTimePickerCallback.value = null; + }; + + const prevMonth = () => { + if (pickerMonth.value === 0) { + pickerMonth.value = 11; + pickerYear.value--; + } else { + pickerMonth.value--; + } + }; + + const nextMonth = () => { + if (pickerMonth.value === 11) { + pickerMonth.value = 0; + pickerYear.value++; + } else { + pickerMonth.value++; + } + }; + + const updatePickerView = () => { + // Called when month/year dropdowns change + // The computed calendarDays will automatically update + }; + + const selectDate = (date) => { + pickerSelectedDate.value = date; + }; + + const setToNow = () => { + setPickerToNow(); + }; + + const setToToday = () => { + const today = new Date(); + pickerSelectedDate.value = today; + pickerMonth.value = today.getMonth(); + pickerYear.value = today.getFullYear(); + // Keep the current time + }; + + const clearDateTime = () => { + pickerSelectedDate.value = null; + const now = new Date(); + pickerMonth.value = now.getMonth(); + pickerYear.value = now.getFullYear(); + pickerHour.value = 12; + pickerMinute.value = 0; + pickerAmPm.value = 'PM'; + }; + + const formatPickerPreview = () => { + if (!pickerSelectedDate.value) return ''; + + const date = pickerSelectedDate.value; + const monthName = monthNames[date.getMonth()]; + const day = date.getDate(); + const year = date.getFullYear(); + + const hour = pickerHour.value; + const minute = pickerMinute.value.toString().padStart(2, '0'); + const ampm = pickerAmPm.value; + + return `${monthName} ${day}, ${year} at ${hour}:${minute} ${ampm}`; + }; + + const applyDateTime = () => { + if (!pickerSelectedDate.value) { + // If no date selected, just close + closeDateTimePicker(); + return; + } + + // Build the full datetime + const date = new Date(pickerSelectedDate.value); + let hours = pickerHour.value; + + // Convert 12-hour to 24-hour + if (pickerAmPm.value === 'AM') { + hours = hours === 12 ? 0 : hours; + } else { + hours = hours === 12 ? 12 : hours + 12; + } + + date.setHours(hours); + date.setMinutes(pickerMinute.value); + date.setSeconds(0); + date.setMilliseconds(0); + + // Format as ISO string for storage (YYYY-MM-DDTHH:mm:ss) + const isoString = date.toISOString().slice(0, 19); + + // Call the callback with the result + if (dateTimePickerCallback.value) { + dateTimePickerCallback.value(isoString, date); + } + + closeDateTimePicker(); + }; + + // Helper to open datetime picker for meeting date + const openMeetingDatePicker = () => { + if (!selectedRecording.value) return; + + openDateTimePicker( + 'meeting_date', + selectedRecording.value.meeting_date, + (isoString) => { + selectedRecording.value.meeting_date = isoString; + // Auto-save the change + saveInlineMeetingDate(); + } + ); + }; + + // Save meeting date inline (similar to other inline edits) + const saveInlineMeetingDate = async () => { + if (!selectedRecording.value) return; + + const fullPayload = { + id: selectedRecording.value.id, + title: selectedRecording.value.title, + participants: selectedRecording.value.participants, + notes: selectedRecording.value.notes, + summary: selectedRecording.value.summary, + meeting_date: selectedRecording.value.meeting_date + }; + + try { + const csrfTokenValue = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const response = await fetch('/save', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfTokenValue + }, + body: JSON.stringify(fullPayload) + }); + + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to save meeting date'); + + showToast('Meeting date updated!', 'fa-calendar-check'); + } catch (error) { + showToast(`Failed to save: ${error.message}`, 'fa-exclamation-circle', 3000, 'error'); + } + }; + + return { + // Edit modal + openEditModal, + editRecording, + cancelEdit, + saveEdit, + + // Delete modal + confirmDelete, + cancelDelete, + deleteRecording, + + // Archive + archiveRecording, + + // Tags modal + openEditTagsModal, + editRecordingTags, + closeEditTagsModal, + addTagToRecording, + removeTagFromRecording, + + // Reset modal + openResetModal, + cancelReset, + resetRecording, + + // System audio help + openSystemAudioHelpModal, + closeSystemAudioHelpModal, + + // Toast + dismissToast, + + // DateTime picker + monthNames, + dayNames, + availableYears, + hours12, + minutes, + calendarDays, + openDateTimePicker, + closeDateTimePicker, + prevMonth, + nextMonth, + updatePickerView, + selectDate, + setToNow, + setToToday, + clearDateTime, + formatPickerPreview, + applyDateTime, + openMeetingDatePicker + }; +} diff --git a/static/js/modules/composables/pwa.js b/static/js/modules/composables/pwa.js new file mode 100644 index 0000000..4688a9a --- /dev/null +++ b/static/js/modules/composables/pwa.js @@ -0,0 +1,518 @@ +/** + * PWA Features Composable + * Handles install prompt, push notifications, badging, and other PWA APIs + */ + +import { isPushEnabled, getPublicKey, urlBase64ToUint8Array } from '../../config/push-config.js'; + +export function usePWA(state, utils) { + const { + deferredInstallPrompt, + showInstallButton, + isPWAInstalled, + notificationPermission, + pushSubscription, + appBadgeCount + } = state; + + const { showToast } = utils; + + // --- Install Prompt --- + + /** + * Handle beforeinstallprompt event + * This event is fired when the browser detects the app can be installed + */ + const handleBeforeInstallPrompt = (e) => { + console.log('[PWA] beforeinstallprompt event fired'); + // Prevent the mini-infobar from appearing on mobile + e.preventDefault(); + // Stash the event so it can be triggered later + deferredInstallPrompt.value = e; + // Show our custom install button + showInstallButton.value = true; + }; + + /** + * Prompt user to install the PWA + */ + const promptInstall = async () => { + if (!deferredInstallPrompt.value) { + console.log('[PWA] No deferred install prompt available'); + return; + } + + // Show the install prompt + deferredInstallPrompt.value.prompt(); + + // Wait for the user's response + const { outcome } = await deferredInstallPrompt.value.userChoice; + console.log(`[PWA] User response to install prompt: ${outcome}`); + + if (outcome === 'accepted') { + showToast('Installing Speakr...', 'success'); + } + + // Clear the deferred prompt since it can only be used once + deferredInstallPrompt.value = null; + showInstallButton.value = false; + }; + + /** + * Check if app is already installed + */ + const checkIfInstalled = () => { + // Check if running in standalone mode (installed PWA) + if (window.matchMedia('(display-mode: standalone)').matches || + window.navigator.standalone === true) { + isPWAInstalled.value = true; + showInstallButton.value = false; + console.log('[PWA] App is installed and running in standalone mode'); + } + }; + + /** + * Handle appinstalled event + */ + const handleAppInstalled = () => { + console.log('[PWA] App was installed'); + isPWAInstalled.value = true; + showInstallButton.value = false; + showToast('Speakr installed successfully!', 'success'); + }; + + // --- Push Notifications --- + + /** + * Request notification permission + */ + const requestNotificationPermission = async () => { + if (!('Notification' in window)) { + console.warn('[PWA] This browser does not support notifications'); + return false; + } + + try { + const permission = await Notification.requestPermission(); + notificationPermission.value = permission; + console.log(`[PWA] Notification permission: ${permission}`); + + if (permission === 'granted') { + showToast('Notifications enabled', 'success'); + return true; + } else if (permission === 'denied') { + showToast('Notification permission denied', 'error'); + return false; + } + } catch (error) { + console.error('[PWA] Error requesting notification permission:', error); + return false; + } + }; + + /** + * Subscribe to push notifications + */ + const subscribeToPushNotifications = async () => { + if (!('serviceWorker' in navigator) || !('PushManager' in window)) { + console.warn('[PWA] Push notifications not supported'); + showToast('Push notifications not supported in this browser', 'warning'); + return null; + } + + // Check if push is enabled on server + const enabled = await isPushEnabled(); + if (!enabled) { + console.warn('[PWA] Push notifications not configured on server'); + showToast('Push notifications not available. Install pywebpush on server.', 'warning'); + return null; + } + + // Get public key from server + const publicKey = await getPublicKey(); + if (!publicKey) { + console.error('[PWA] Failed to get VAPID public key from server'); + showToast('Failed to configure push notifications', 'error'); + return null; + } + + try { + const registration = await navigator.serviceWorker.ready; + + // Check if already subscribed + let subscription = await registration.pushManager.getSubscription(); + + if (!subscription) { + // Subscribe to push notifications + console.log('[PWA] Creating new push subscription...'); + + const applicationServerKey = urlBase64ToUint8Array(publicKey); + + subscription = await registration.pushManager.subscribe({ + userVisibleOnly: true, + applicationServerKey: applicationServerKey + }); + + // Send subscription to server + const success = await sendSubscriptionToServer(subscription); + + if (success) { + pushSubscription.value = subscription; + showToast('Push notifications enabled', 'success'); + console.log('[PWA] Push subscription successful:', subscription); + } else { + console.warn('[PWA] Failed to save subscription on server'); + showToast('Failed to enable push notifications', 'error'); + return null; + } + } else { + pushSubscription.value = subscription; + console.log('[PWA] Already subscribed to push notifications'); + } + + return subscription; + } catch (error) { + console.error('[PWA] Failed to subscribe to push notifications:', error); + + if (error.name === 'NotAllowedError') { + showToast('Push notification permission denied', 'error'); + } else { + showToast('Failed to enable push notifications', 'error'); + } + + return null; + } + }; + + /** + * Send subscription to server for storage + */ + const sendSubscriptionToServer = async (subscription) => { + try { + const response = await fetch('/api/push/subscribe', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(subscription), + credentials: 'same-origin' + }); + + if (!response.ok) { + console.error('[PWA] Server rejected push subscription:', response.status); + return false; + } + + const data = await response.json(); + console.log('[PWA] Subscription saved on server:', data); + return true; + } catch (error) { + console.error('[PWA] Failed to send subscription to server:', error); + return false; + } + }; + + /** + * Unsubscribe from push notifications + */ + const unsubscribeFromPushNotifications = async () => { + if (!pushSubscription.value) { + console.log('[PWA] No active push subscription to unsubscribe'); + return true; + } + + try { + // Unsubscribe on client + await pushSubscription.value.unsubscribe(); + + // Remove from server + await fetch('/api/push/unsubscribe', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(pushSubscription.value), + credentials: 'same-origin' + }); + + pushSubscription.value = null; + showToast('Push notifications disabled', 'info'); + console.log('[PWA] Unsubscribed from push notifications'); + return true; + } catch (error) { + console.error('[PWA] Failed to unsubscribe from push notifications:', error); + showToast('Failed to disable push notifications', 'error'); + return false; + } + }; + + /** + * Show a local notification + */ + const showNotification = async (title, options = {}) => { + if (!('Notification' in window)) { + console.warn('[PWA] Notifications not supported'); + return; + } + + if (Notification.permission !== 'granted') { + const granted = await requestNotificationPermission(); + if (!granted) return; + } + + try { + const registration = await navigator.serviceWorker.ready; + + const defaultOptions = { + icon: '/static/img/icon-192x192.png', + badge: '/static/img/icon-192x192.png', + vibrate: [200, 100, 200], + tag: 'speakr-notification', + renotify: true, + ...options + }; + + await registration.showNotification(title, defaultOptions); + } catch (error) { + console.error('[PWA] Error showing notification:', error); + } + }; + + // --- Badging API --- + + /** + * Set app badge count + */ + const setAppBadge = async (count) => { + if (!('setAppBadge' in navigator)) { + console.log('[PWA] Badging API not supported'); + return; + } + + try { + if (count > 0) { + await navigator.setAppBadge(count); + appBadgeCount.value = count; + console.log(`[PWA] App badge set to ${count}`); + } else { + await navigator.clearAppBadge(); + appBadgeCount.value = 0; + console.log('[PWA] App badge cleared'); + } + } catch (error) { + console.error('[PWA] Error setting app badge:', error); + } + }; + + /** + * Clear app badge + */ + const clearAppBadge = async () => { + await setAppBadge(0); + }; + + /** + * Update badge with unread count + */ + const updateBadgeCount = async (audioFiles) => { + if (!audioFiles || !Array.isArray(audioFiles)) return; + + // Count unread recordings (those still in inbox) + const unreadCount = audioFiles.filter(file => file.in_inbox).length; + await setAppBadge(unreadCount); + }; + + // --- Media Session API --- + + /** + * Set up Media Session for audio playback control + * @param {Object} metadata - Track metadata { title, artist, album, artwork } + * @param {Object} handlers - Action handlers { play, pause, seekbackward, seekforward, previoustrack, nexttrack } + */ + const setupMediaSession = (metadata, handlers = {}) => { + if (!('mediaSession' in navigator)) { + console.log('[PWA] Media Session API not supported'); + return false; + } + + try { + // Set metadata + if (metadata) { + navigator.mediaSession.metadata = new MediaMetadata({ + title: metadata.title || 'Untitled Recording', + artist: metadata.artist || 'Speakr', + album: metadata.album || 'Recordings', + artwork: metadata.artwork || [ + { src: '/static/img/icon-192x192.png', sizes: '192x192', type: 'image/png' }, + { src: '/static/img/icon-512x512.png', sizes: '512x512', type: 'image/png' } + ] + }); + currentMediaMetadata.value = metadata; + } + + // Set action handlers + const actions = ['play', 'pause', 'seekbackward', 'seekforward', 'previoustrack', 'nexttrack', 'stop']; + + actions.forEach(action => { + if (handlers[action]) { + try { + navigator.mediaSession.setActionHandler(action, handlers[action]); + } catch (error) { + console.warn(`[PWA] The ${action} action is not supported`); + } + } + }); + + // Set position state if provided + if (handlers.setPositionState) { + try { + navigator.mediaSession.setPositionState(handlers.setPositionState); + } catch (error) { + console.warn('[PWA] setPositionState not supported:', error); + } + } + + isMediaSessionActive.value = true; + console.log('[PWA] Media Session configured successfully'); + return true; + } catch (error) { + console.error('[PWA] Error setting up Media Session:', error); + return false; + } + }; + + /** + * Update Media Session position state + * @param {Object} state - { duration, playbackRate, position } + */ + const updateMediaSessionPosition = (state) => { + if (!('mediaSession' in navigator) || !isMediaSessionActive.value) return; + + try { + navigator.mediaSession.setPositionState({ + duration: state.duration || 0, + playbackRate: state.playbackRate || 1.0, + position: state.position || 0 + }); + } catch (error) { + console.warn('[PWA] Error updating position state:', error); + } + }; + + /** + * Update Media Session playback state + * @param {string} state - 'playing' | 'paused' | 'none' + */ + const updateMediaSessionPlaybackState = (state) => { + if (!('mediaSession' in navigator) || !isMediaSessionActive.value) return; + + try { + navigator.mediaSession.playbackState = state; + } catch (error) { + console.warn('[PWA] Error updating playback state:', error); + } + }; + + /** + * Clear Media Session + */ + const clearMediaSession = () => { + if (!('mediaSession' in navigator)) return; + + try { + navigator.mediaSession.metadata = null; + const actions = ['play', 'pause', 'seekbackward', 'seekforward', 'previoustrack', 'nexttrack', 'stop']; + actions.forEach(action => { + try { + navigator.mediaSession.setActionHandler(action, null); + } catch (e) { /* ignore */ } + }); + isMediaSessionActive.value = false; + currentMediaMetadata.value = null; + console.log('[PWA] Media Session cleared'); + } catch (error) { + console.error('[PWA] Error clearing Media Session:', error); + } + }; + + // --- Background Sync --- + + /** + * Register background sync for upload retry + */ + const registerBackgroundSync = async (tag = 'sync-uploads') => { + if (!('serviceWorker' in navigator) || !('sync' in ServiceWorkerRegistration.prototype)) { + console.log('[PWA] Background sync not supported'); + return false; + } + + try { + const registration = await navigator.serviceWorker.ready; + await registration.sync.register(tag); + console.log(`[PWA] Background sync registered: ${tag}`); + return true; + } catch (error) { + console.error('[PWA] Failed to register background sync:', error); + return false; + } + }; + + /** + * Initialize PWA features + */ + const initPWA = () => { + // Check if already installed + checkIfInstalled(); + + // Listen for beforeinstallprompt event + window.addEventListener('beforeinstallprompt', handleBeforeInstallPrompt); + + // Listen for appinstalled event + window.addEventListener('appinstalled', handleAppInstalled); + + // Check notification permission status + if ('Notification' in window) { + notificationPermission.value = Notification.permission; + } + + console.log('[PWA] PWA features initialized'); + }; + + /** + * Cleanup PWA event listeners + */ + const cleanupPWA = () => { + window.removeEventListener('beforeinstallprompt', handleBeforeInstallPrompt); + window.removeEventListener('appinstalled', handleAppInstalled); + }; + + return { + // Install prompt + promptInstall, + checkIfInstalled, + + // Notifications + requestNotificationPermission, + subscribeToPushNotifications, + unsubscribeFromPushNotifications, + showNotification, + + // Badging + setAppBadge, + clearAppBadge, + updateBadgeCount, + + // Media Session + setupMediaSession, + updateMediaSessionPosition, + updateMediaSessionPlaybackState, + clearMediaSession, + + // Background sync + registerBackgroundSync, + + // Initialization + initPWA, + cleanupPWA + }; +} diff --git a/static/js/modules/composables/recordings.js b/static/js/modules/composables/recordings.js new file mode 100644 index 0000000..7e6e910 --- /dev/null +++ b/static/js/modules/composables/recordings.js @@ -0,0 +1,482 @@ +/** + * Recording management composable + * Handles loading, selecting, filtering, and managing recordings + */ + +import * as IncognitoStorage from '../db/incognito-storage.js'; + +export function useRecordings(state, utils, reprocessComposable) { + const { + recordings, selectedRecording, isLoadingRecordings, isLoadingMore, + currentPage, perPage, totalRecordings, totalPages, hasNextPage, hasPrevPage, + showSharedWithMe, showArchivedRecordings, searchQuery, searchDebounceTimer, + filterTags, filterSpeakers, filterDatePreset, filterDateRange, filterTextQuery, + filterStarred, filterInbox, filterFolder, sortBy, + availableTags, availableSpeakers, availableFolders, selectedTagIds, uploadLanguage, uploadMinSpeakers, uploadMaxSpeakers, uploadHotwords, uploadInitialPrompt, + useAsrEndpoint, connectorSupportsDiarization, globalError, uploadQueue, isProcessingActive, currentView, + isMobileScreen, isSidebarCollapsed, isRecording, audioBlobURL, + speakerColorMap, + // Incognito mode + incognitoRecording + } = state; + + const { setGlobalError, showToast } = utils; + + // Load recordings from API + const loadRecordings = async (page = 1, append = false, searchQueryParam = '') => { + globalError.value = null; + if (!append) { + isLoadingRecordings.value = true; + } else { + isLoadingMore.value = true; + } + + try { + const endpoint = '/api/recordings'; + + const params = new URLSearchParams({ + page: page.toString(), + per_page: perPage.value.toString() + }); + + if (searchQueryParam.trim()) { + params.set('q', searchQueryParam.trim()); + } + + // Add sort parameter + if (sortBy.value) { + params.set('sort_by', sortBy.value); + } + + // Add archived/shared/starred/inbox filters as query params (ANDed with other filters) + if (showArchivedRecordings.value) { + params.set('archived', 'true'); + } + if (showSharedWithMe.value) { + params.set('shared', 'true'); + } + if (filterStarred.value) { + params.set('starred', 'true'); + } + if (filterInbox.value) { + params.set('inbox', 'true'); + } + + // Add folder filter + if (filterFolder && filterFolder.value) { + params.set('folder', filterFolder.value); + } + + const response = await fetch(`${endpoint}?${params}`); + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to load recordings'); + + const recordingsList = data.recordings; + const pagination = data.pagination; + + if (!Array.isArray(recordingsList)) { + console.error('Unexpected response format:', data); + throw new Error('Invalid response format from server'); + } + + if (pagination) { + currentPage.value = pagination.page; + totalRecordings.value = pagination.total; + totalPages.value = pagination.total_pages; + hasNextPage.value = pagination.has_next; + hasPrevPage.value = pagination.has_prev; + } else { + currentPage.value = 1; + totalRecordings.value = recordingsList.length; + totalPages.value = 1; + hasNextPage.value = false; + hasPrevPage.value = false; + } + + if (append) { + recordings.value = [...recordings.value, ...recordingsList]; + } else { + recordings.value = recordingsList; + const lastRecordingId = localStorage.getItem('lastSelectedRecordingId'); + if (lastRecordingId && recordingsList.length > 0) { + const recordingToSelect = recordingsList.find(r => r.id == lastRecordingId); + if (recordingToSelect) { + selectRecording(recordingToSelect); + } + } + } + + // NOTE: Removed auto-queueing of incomplete recordings. + // Backend processing recordings are now shown via backendProcessingRecordings + // computed property, which filters recordings by status (PENDING, PROCESSING, etc.) + // The job queue system (ProcessingJob) handles background processing. + + } catch (error) { + console.error('Load Recordings Error:', error); + setGlobalError(`Failed to load recordings: ${error.message}`); + if (!append) { + recordings.value = []; + } + } finally { + isLoadingRecordings.value = false; + isLoadingMore.value = false; + } + }; + + const loadMoreRecordings = async () => { + if (!hasNextPage.value || isLoadingMore.value) return; + await loadRecordings(currentPage.value + 1, true, searchQuery.value); + }; + + const performSearch = async (query = '') => { + currentPage.value = 1; + await loadRecordings(1, false, query); + }; + + const debouncedSearch = (query) => { + if (searchDebounceTimer.value) { + clearTimeout(searchDebounceTimer.value); + } + searchDebounceTimer.value = setTimeout(() => { + performSearch(query); + }, 300); + }; + + const loadTags = async () => { + try { + const response = await fetch('/api/tags'); + if (response.ok) { + availableTags.value = await response.json(); + } else { + availableTags.value = []; + } + } catch (error) { + console.warn('Error loading tags:', error); + availableTags.value = []; + } + }; + + const loadFolders = async () => { + try { + const response = await fetch('/api/folders'); + if (response.ok) { + availableFolders.value = await response.json(); + } else { + availableFolders.value = []; + } + } catch (error) { + console.warn('Error loading folders:', error); + availableFolders.value = []; + } + }; + + const loadSpeakers = async () => { + try { + const response = await fetch('/speakers'); + if (response.ok) { + availableSpeakers.value = await response.json(); + } else { + availableSpeakers.value = []; + } + } catch (error) { + console.warn('Error loading speakers:', error); + availableSpeakers.value = []; + } + }; + + const selectRecording = async (recording) => { + if (hasUnsavedRecording()) { + if (!confirm('You have an unsaved recording. Are you sure you want to leave?')) { + return; + } + } + + // Check if switching away from incognito recording to a regular recording + if (incognitoRecording && incognitoRecording.value && + selectedRecording.value?.id === 'incognito' && + recording?.id !== 'incognito') { + if (!confirm('Switching to another recording will discard your incognito recording. Continue?')) { + return; + } + // Clear incognito recording immediately - this is the "incognito" promise + IncognitoStorage.clearIncognitoRecording(); + incognitoRecording.value = null; + } + + // Also clear any orphaned incognito data when selecting a non-incognito recording + // This handles edge cases like page refresh where the above check doesn't trigger + if (recording?.id !== 'incognito' && IncognitoStorage.hasIncognitoRecording()) { + console.log('[Incognito] Clearing orphaned incognito data'); + IncognitoStorage.clearIncognitoRecording(); + if (incognitoRecording) { + incognitoRecording.value = null; + } + } + + // Reset modal audio state when switching recordings + if (utils.resetModalAudioState) { + utils.resetModalAudioState(); + } + + // Clear speaker color map when switching recordings - new colors will be assigned on first render + if (speakerColorMap) { + speakerColorMap.value = {}; + } + + selectedRecording.value = recording; + + if (recording && recording.id) { + localStorage.setItem('lastSelectedRecordingId', recording.id); + + try { + const response = await fetch(`/api/recordings/${recording.id}`); + if (response.ok) { + const fullRecording = await response.json(); + selectedRecording.value = fullRecording; + + const index = recordings.value.findIndex(r => r.id === recording.id); + if (index !== -1) { + recordings.value[index] = fullRecording; + } + + // Auto-start polling if recording is still processing or summarizing + if (['PROCESSING', 'SUMMARIZING'].includes(fullRecording.status)) { + console.log(`[AUTO-POLL] Recording ${fullRecording.id} is in ${fullRecording.status} state, starting auto-polling`); + if (reprocessComposable && reprocessComposable.startReprocessingPoll) { + reprocessComposable.startReprocessingPoll(fullRecording.id); + } else { + console.warn('[AUTO-POLL] reprocessComposable.startReprocessingPoll not available'); + } + } + } + } catch (error) { + console.error('Error loading full recording:', error); + } + } + + if (isMobileScreen.value) { + isSidebarCollapsed.value = true; + } + + currentView.value = 'detail'; + + if (isRecording.value) { + // Don't interrupt recording + } + if (audioBlobURL.value) { + // Don't discard recorded audio + } + }; + + const hasUnsavedRecording = () => { + return isRecording.value || audioBlobURL.value; + }; + + const toggleInbox = async (recording) => { + if (!recording || !recording.id) return; + + try { + const response = await fetch(`/recording/${recording.id}/toggle_inbox`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' } + }); + + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to toggle inbox status'); + + // Update the recording in the UI + recording.is_inbox = data.is_inbox; + + // Update in the recordings list + const index = recordings.value.findIndex(r => r.id === recording.id); + if (index !== -1) { + recordings.value[index].is_inbox = data.is_inbox; + } + + showToast(`Recording ${data.is_inbox ? 'moved to inbox' : 'marked as read'}`); + } catch (error) { + console.error('Toggle Inbox Error:', error); + setGlobalError(`Failed to toggle inbox status: ${error.message}`); + } + }; + + const toggleHighlight = async (recording) => { + if (!recording || !recording.id) return; + + try { + const response = await fetch(`/recording/${recording.id}/toggle_highlight`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' } + }); + + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to toggle highlighted status'); + + // Update the recording in the UI + recording.is_highlighted = data.is_highlighted; + + // Update in the recordings list + const index = recordings.value.findIndex(r => r.id === recording.id); + if (index !== -1) { + recordings.value[index].is_highlighted = data.is_highlighted; + } + + showToast(`Recording ${data.is_highlighted ? 'highlighted' : 'unhighlighted'}`); + } catch (error) { + console.error('Toggle Highlight Error:', error); + setGlobalError(`Failed to toggle highlighted status: ${error.message}`); + } + }; + + const getRecordingTags = (recording) => { + if (!recording || !recording.tags) return []; + return recording.tags || []; + }; + + const getAvailableTagsForRecording = (recording) => { + if (!recording || !availableTags.value) return []; + const recordingTagIds = getRecordingTags(recording).map(tag => tag.id); + return availableTags.value.filter(tag => !recordingTagIds.includes(tag.id)); + }; + + const filterByTag = (tag) => { + filterTags.value = [tag.id]; + applyAdvancedFilters(); + }; + + const buildSearchQuery = () => { + let query = []; + + if (filterTextQuery.value.trim()) { + query.push(filterTextQuery.value.trim()); + } + + if (filterTags.value.length > 0) { + const tagNames = filterTags.value.map(tagId => { + const tag = availableTags.value.find(t => t.id === tagId); + return tag ? `tag:${tag.name.replace(/\s+/g, '_')}` : ''; + }).filter(Boolean); + query.push(...tagNames); + } + + if (filterSpeakers.value.length > 0) { + const speakerNames = filterSpeakers.value.map(name => + `speaker:${name.replace(/\s+/g, '_')}` + ); + query.push(...speakerNames); + } + + if (filterDatePreset.value) { + query.push(`date:${filterDatePreset.value}`); + } else if (filterDateRange.value.start || filterDateRange.value.end) { + if (filterDateRange.value.start) { + query.push(`date_from:${filterDateRange.value.start}`); + } + if (filterDateRange.value.end) { + query.push(`date_to:${filterDateRange.value.end}`); + } + } + + return query.join(' '); + }; + + const applyAdvancedFilters = () => { + searchQuery.value = buildSearchQuery(); + }; + + const clearAllFilters = () => { + filterTags.value = []; + filterSpeakers.value = []; + filterDateRange.value = { start: '', end: '' }; + filterDatePreset.value = ''; + filterTextQuery.value = ''; + filterStarred.value = false; + filterInbox.value = false; + // Note: filterFolder is NOT cleared here - it's a navigation element, not a filter + searchQuery.value = ''; + }; + + const clearTagFilter = () => { + searchQuery.value = ''; + clearAllFilters(); + }; + + const addTagToSelection = (tagId) => { + if (!selectedTagIds.value.includes(tagId)) { + selectedTagIds.value.push(tagId); + applyTagDefaults(); + } + }; + + const removeTagFromSelection = (tagId) => { + const index = selectedTagIds.value.indexOf(tagId); + if (index > -1) { + selectedTagIds.value.splice(index, 1); + applyTagDefaults(); + } + }; + + const applyTagDefaults = () => { + const selectedTags = selectedTagIds.value.map(tagId => + availableTags.value.find(tag => tag.id == tagId) + ).filter(Boolean); + + const firstTag = selectedTags[0]; + if (firstTag && connectorSupportsDiarization.value) { + if (firstTag.default_language) { + uploadLanguage.value = firstTag.default_language; + } + if (firstTag.default_min_speakers) { + uploadMinSpeakers.value = firstTag.default_min_speakers; + } + if (firstTag.default_max_speakers) { + uploadMaxSpeakers.value = firstTag.default_max_speakers; + } + } + if (firstTag) { + if (firstTag.default_hotwords) { + uploadHotwords.value = firstTag.default_hotwords; + } + if (firstTag.default_initial_prompt) { + uploadInitialPrompt.value = firstTag.default_initial_prompt; + } + } + }; + + const pollInboxRecordings = async () => { + try { + const response = await fetch('/api/recordings/inbox-count'); + if (response.ok) { + const data = await response.json(); + // Update inbox count in UI if needed + } + } catch (error) { + // Silent fail for polling + } + }; + + return { + loadRecordings, + loadMoreRecordings, + performSearch, + debouncedSearch, + loadTags, + loadFolders, + loadSpeakers, + selectRecording, + hasUnsavedRecording, + toggleInbox, + toggleHighlight, + getRecordingTags, + getAvailableTagsForRecording, + filterByTag, + buildSearchQuery, + applyAdvancedFilters, + clearAllFilters, + clearTagFilter, + addTagToSelection, + removeTagFromSelection, + applyTagDefaults, + pollInboxRecordings + }; +} diff --git a/static/js/modules/composables/reprocess.js b/static/js/modules/composables/reprocess.js new file mode 100644 index 0000000..32859a6 --- /dev/null +++ b/static/js/modules/composables/reprocess.js @@ -0,0 +1,450 @@ +/** + * Reprocessing composable + * Handles reprocessing transcription and summary + */ + +import * as IncognitoStorage from '../db/incognito-storage.js'; + +export function useReprocess(state, utils) { + const { nextTick } = Vue; + + const { + showReprocessModal, showResetModal, reprocessType, + reprocessRecording, recordingToReset, selectedRecording, + recordings, asrReprocessOptions, summaryReprocessPromptSource, + summaryReprocessSelectedTagId, summaryReprocessCustomPrompt, + availableTags, processingProgress, processingMessage, + currentlyProcessingFile, uploadQueue + } = state; + + const { showToast, setGlobalError, onChatComplete } = utils; + + // Store for active polling intervals + const reprocessingPolls = new Map(); + + // ========================================= + // Reprocess Modal + // ========================================= + + const openReprocessModal = (type, recording = null) => { + reprocessType.value = type; + reprocessRecording.value = recording || selectedRecording.value; + showReprocessModal.value = true; + + // Reset options + if (type === 'transcription') { + asrReprocessOptions.language = ''; + asrReprocessOptions.min_speakers = ''; + asrReprocessOptions.max_speakers = ''; + } else { + summaryReprocessPromptSource.value = 'default'; + summaryReprocessSelectedTagId.value = ''; + summaryReprocessCustomPrompt.value = ''; + } + }; + + const closeReprocessModal = () => { + showReprocessModal.value = false; + reprocessRecording.value = null; + reprocessType.value = null; + }; + + const confirmReprocess = openReprocessModal; + const cancelReprocess = closeReprocessModal; + + // ========================================= + // Reset Status + // ========================================= + + const confirmReset = (recording) => { + recordingToReset.value = recording; + showResetModal.value = true; + }; + + const cancelReset = () => { + showResetModal.value = false; + recordingToReset.value = null; + }; + + const executeReset = async () => { + if (!recordingToReset.value) return; + + const recordingId = recordingToReset.value.id; + + // Close the modal first + cancelReset(); + + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const response = await fetch(`/recording/${recordingId}/reset_status`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + } + }); + + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to reset recording status'); + + // Update recording status in list + const index = recordings.value.findIndex(r => r.id === recordingId); + if (index !== -1) { + recordings.value[index].status = 'FAILED'; + } + + if (selectedRecording.value?.id === recordingId) { + selectedRecording.value.status = 'FAILED'; + } + + showToast('Recording status reset to FAILED', 'fa-undo'); + } catch (error) { + setGlobalError(`Failed to reset status: ${error.message}`); + } + }; + + const executeReprocess = async () => { + if (!reprocessRecording.value || !reprocessType.value) return; + + const recordingId = reprocessRecording.value.id; + const type = reprocessType.value; + + closeReprocessModal(); + + if (type === 'transcription') { + await reprocessTranscription( + recordingId, + asrReprocessOptions.language, + asrReprocessOptions.min_speakers, + asrReprocessOptions.max_speakers + ); + } else { + await reprocessSummary( + recordingId, + summaryReprocessPromptSource.value, + summaryReprocessSelectedTagId.value, + summaryReprocessCustomPrompt.value + ); + } + }; + + // ========================================= + // Transcription Reprocessing + // ========================================= + + const reprocessTranscription = async (recordingId, language, minSpeakers, maxSpeakers) => { + if (!recordingId) { + setGlobalError('No recording ID provided for reprocessing.'); + return; + } + + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const requestBody = { + language: language || '' // Always send language - empty string means auto-detect + }; + if (minSpeakers && minSpeakers !== '') requestBody.min_speakers = parseInt(minSpeakers); + if (maxSpeakers && maxSpeakers !== '') requestBody.max_speakers = parseInt(maxSpeakers); + + const response = await fetch(`/recording/${recordingId}/reprocess_transcription`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify(requestBody) + }); + + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to start transcription reprocessing'); + + // Update recording status in list + const index = recordings.value.findIndex(r => r.id === recordingId); + if (index !== -1) { + recordings.value[index].status = 'PROCESSING'; + } + + if (selectedRecording.value?.id === recordingId) { + selectedRecording.value.status = 'PROCESSING'; + } + + showToast('Transcription reprocessing started', 'fa-sync-alt'); + + // Start polling for progress + startReprocessingPoll(recordingId); + } catch (error) { + setGlobalError(`Failed to start transcription reprocessing: ${error.message}`); + } + }; + + // ========================================= + // Summary Reprocessing + // ========================================= + + const reprocessSummary = async (recordingId, promptSource, selectedTagId, customPrompt) => { + if (!recordingId) { + setGlobalError('No recording ID provided for reprocessing.'); + return; + } + + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const requestBody = { reprocess_summary: true }; + + if (promptSource === 'tag' && selectedTagId) { + const selectedTag = availableTags.value.find(t => t.id == selectedTagId); + if (selectedTag && selectedTag.custom_prompt) { + requestBody.custom_prompt = selectedTag.custom_prompt; + } + } else if (promptSource === 'custom' && customPrompt) { + requestBody.custom_prompt = customPrompt; + } + + const response = await fetch(`/recording/${recordingId}/reprocess_summary`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify(requestBody) + }); + + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to start summary reprocessing'); + + // Update recording status in list + const index = recordings.value.findIndex(r => r.id === recordingId); + if (index !== -1) { + recordings.value[index].status = 'SUMMARIZING'; + } + + if (selectedRecording.value?.id === recordingId) { + selectedRecording.value.status = 'SUMMARIZING'; + } + + showToast('Summary reprocessing started', 'fa-sync-alt'); + + // Start polling for progress + startReprocessingPoll(recordingId); + } catch (error) { + setGlobalError(`Failed to start summary reprocessing: ${error.message}`); + } + }; + + // ========================================= + // Generate Summary + // ========================================= + + const generateSummary = async () => { + if (!selectedRecording.value) return; + + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + + // Check if this is an incognito recording + if (selectedRecording.value.incognito === true) { + // Use incognito summary endpoint - generate synchronously + const response = await fetch('/api/recordings/incognito/summary', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify({ + transcription: selectedRecording.value.transcription + }) + }); + + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to generate summary'); + + // Update the incognito recording with the new summary + selectedRecording.value.summary = data.summary; + selectedRecording.value.summary_html = data.summary_html; + + // Update sessionStorage + IncognitoStorage.updateIncognitoRecording({ + summary: data.summary, + summary_html: data.summary_html + }); + + showToast('Summary generated', 'fa-file-alt'); + return; + } + + // Regular recording - use existing flow + const response = await fetch(`/recording/${selectedRecording.value.id}/generate_summary`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + } + }); + + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to start summary generation'); + + selectedRecording.value.status = 'SUMMARIZING'; + + const recordingInList = recordings.value.find(r => r.id === selectedRecording.value.id); + if (recordingInList) { + recordingInList.status = 'SUMMARIZING'; + } + + showToast('Summary generation started', 'fa-file-alt'); + + // Start polling for progress + startReprocessingPoll(selectedRecording.value.id); + } catch (error) { + setGlobalError(`Failed to generate summary: ${error.message}`); + } + }; + + // ========================================= + // Progress Polling + // ========================================= + + const startReprocessingPoll = (recordingId) => { + // Stop existing poll if any + stopReprocessingPoll(recordingId); + + // Track if we've already fetched full data for SUMMARIZING status + let hasFetchedForSummarizing = false; + + const pollInterval = setInterval(async () => { + try { + // Use lightweight status-only endpoint + const response = await fetch(`/recording/${recordingId}/status`); + if (!response.ok) throw new Error('Status check failed'); + + const statusData = await response.json(); + + // Update status in recordings list + const index = recordings.value.findIndex(r => r.id === recordingId); + + if (index !== -1) { + // Create new object to ensure Vue reactivity + recordings.value[index] = { + ...recordings.value[index], + status: statusData.status + }; + } + + // Update selectedRecording with new object reference for reactivity + if (selectedRecording.value?.id === recordingId) { + selectedRecording.value = { + ...selectedRecording.value, + status: statusData.status + }; + } + + // Check if summarization has started (fetch transcript) or processing is complete + if (statusData.status === 'SUMMARIZING' || statusData.status === 'COMPLETED') { + // Only fetch once when status first becomes SUMMARIZING + const shouldFetch = (statusData.status === 'SUMMARIZING' && !hasFetchedForSummarizing) || + statusData.status === 'COMPLETED'; + + if (shouldFetch) { + // Mark that we've fetched for SUMMARIZING + if (statusData.status === 'SUMMARIZING') { + hasFetchedForSummarizing = true; + } + + // Only stop polling if COMPLETED, keep polling during SUMMARIZING + if (statusData.status === 'COMPLETED') { + stopReprocessingPoll(recordingId); + } + + // Fetch the full recording with updated data + const fullResponse = await fetch(`/api/recordings/${recordingId}`); + + if (fullResponse.ok) { + const fullData = await fullResponse.json(); + + // Update in recordings list first + const currentIndex = recordings.value.findIndex(r => r.id === recordingId); + if (currentIndex !== -1) { + recordings.value[currentIndex] = fullData; + } + + // Always update selectedRecording if it's the current recording + if (selectedRecording.value?.id === recordingId) { + selectedRecording.value = fullData; + await nextTick(); + } + } + + if (statusData.status === 'COMPLETED') { + showToast('Processing completed!', 'fa-check-circle'); + // Refresh token budget after LLM operations complete + if (onChatComplete) onChatComplete(); + } + } + } else if (statusData.status === 'FAILED') { + stopReprocessingPoll(recordingId); + + // Fetch full recording data to get error details for display + try { + const failedResponse = await fetch(`/api/recordings/${recordingId}`); + if (failedResponse.ok) { + const failedData = await failedResponse.json(); + + // Update in recordings list + const currentIndex = recordings.value.findIndex(r => r.id === recordingId); + if (currentIndex !== -1) { + recordings.value[currentIndex] = failedData; + } + + // Update selectedRecording to show error in transcription panel + if (selectedRecording.value?.id === recordingId) { + selectedRecording.value = failedData; + await nextTick(); + } + } + } catch (err) { + console.error('Failed to fetch error details:', err); + } + + showToast('Processing failed', 'fa-exclamation-circle'); + } + } catch (error) { + console.error('Polling error:', error); + stopReprocessingPoll(recordingId); + } + }, 3000); + + reprocessingPolls.set(recordingId, pollInterval); + }; + + const stopReprocessingPoll = (recordingId) => { + if (reprocessingPolls.has(recordingId)) { + clearInterval(reprocessingPolls.get(recordingId)); + reprocessingPolls.delete(recordingId); + } + }; + + return { + // Reprocess modal + openReprocessModal, + closeReprocessModal, + confirmReprocess, + cancelReprocess, + executeReprocess, + + // Reset status + confirmReset, + cancelReset, + executeReset, + + // Transcription + reprocessTranscription, + + // Summary + reprocessSummary, + generateSummary, + + // Polling + startReprocessingPoll, + stopReprocessingPoll + }; +} diff --git a/static/js/modules/composables/sharing.js b/static/js/modules/composables/sharing.js new file mode 100644 index 0000000..6b60e98 --- /dev/null +++ b/static/js/modules/composables/sharing.js @@ -0,0 +1,659 @@ +/** + * Sharing composable + * Handles public and internal sharing of recordings + */ + +export function useSharing(state, utils) { + const { + showShareModal, showSharesListModal, showShareDeleteModal, + showUnifiedShareModal, recordingToShare, shareOptions, + generatedShareLink, existingShareDetected, recordingPublicShares, isLoadingPublicShares, + userShares, isLoadingShares, copiedShareId, shareToDelete, selectedRecording, recordings, + internalShareUserSearch, internalShareSearchResults, + internalShareRecording, internalSharePermissions, internalShareMaxPermissions, + recordingInternalShares, isLoadingInternalShares, + isSearchingUsers, allUsers, isLoadingAllUsers, + enableInternalSharing, showUsernamesInUI + } = state; + + const { showToast, setGlobalError } = utils; + + let userSearchTimeout = null; + + // Helper function to format share dates + const formatShareDate = (dateString) => { + if (!dateString) return 'Unknown date'; + + try { + const date = new Date(dateString); + const now = new Date(); + const diffMs = now - date; + const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24)); + + // If today + if (diffDays === 0) { + return 'Today at ' + date.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true }); + } + // If yesterday + else if (diffDays === 1) { + return 'Yesterday at ' + date.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true }); + } + // If within last week + else if (diffDays < 7) { + return date.toLocaleDateString('en-US', { weekday: 'long', hour: 'numeric', minute: '2-digit', hour12: true }); + } + // Otherwise show full date + else { + return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric', hour: 'numeric', minute: '2-digit', hour12: true }); + } + } catch (e) { + console.error('Error formatting date:', e); + return dateString; + } + }; + + // Helper function to get color class for username (like speaker colors) + const getUserColorClass = (username) => { + if (!username) return 'speaker-color-1'; + + // Simple hash function to generate consistent color from username + let hash = 0; + for (let i = 0; i < username.length; i++) { + hash = ((hash << 5) - hash) + username.charCodeAt(i); + hash = hash & hash; // Convert to 32bit integer + } + + // Map to color classes 1-16 + const colorNum = (Math.abs(hash) % 16) + 1; + return `speaker-color-${colorNum}`; + }; + + // ========================================= + // Public Sharing + // ========================================= + + const openShareModal = async (recording) => { + recordingToShare.value = recording; + shareOptions.share_summary = true; + shareOptions.share_notes = true; + generatedShareLink.value = ''; + existingShareDetected.value = false; + recordingPublicShares.value = []; + showShareModal.value = true; + + // Load all public shares for this recording + isLoadingPublicShares.value = true; + try { + const response = await fetch(`/api/shares`); + if (response.ok) { + const allShares = await response.json(); + // Filter to only shares for this recording and add share_url + recordingPublicShares.value = allShares + .filter(share => share.recording_id === recording.id) + .map(share => ({ + ...share, + share_url: `${window.location.origin}/share/${share.public_id}` + })); + } + } catch (error) { + console.error('Error loading public shares:', error); + recordingPublicShares.value = []; + } finally { + isLoadingPublicShares.value = false; + } + }; + + const closeShareModal = () => { + showShareModal.value = false; + recordingToShare.value = null; + existingShareDetected.value = false; + recordingPublicShares.value = []; + }; + + const createShare = async (forceNew = false) => { + const recording = recordingToShare.value || internalShareRecording.value; + if (!recording) return; + + try { + const response = await fetch(`/api/recording/${recording.id}/share`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + ...shareOptions, + force_new: forceNew + }) + }); + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to create share link'); + + generatedShareLink.value = data.share_url; + existingShareDetected.value = data.existing && !forceNew; + + // Add to the shares list (works for both share modal and unified modal) + if (!data.existing) { + recordingPublicShares.value.push({ + ...data.share, + share_url: `${window.location.origin}/share/${data.share.public_id}` + }); + // Update the recording's share count in the UI + await refreshRecordingShareCounts(); + } else if (data.existing && !recordingPublicShares.value.find(s => s.id === data.share.id)) { + // If existing but not in list, add it + recordingPublicShares.value.push({ + ...data.share, + share_url: `${window.location.origin}/share/${data.share.public_id}` + }); + } + + if (data.existing && !forceNew) { + showToast('Using existing share link', 'fa-link'); + } else { + showToast('Share link created successfully!', 'fa-check-circle'); + } + } catch (error) { + setGlobalError(`Failed to create share link: ${error.message}`); + } + }; + + const confirmDeletePublicShare = (share) => { + shareToDelete.value = share; + showShareDeleteModal.value = true; + }; + + const deletePublicShare = async () => { + if (!shareToDelete.value) return; + const shareId = shareToDelete.value.id; + + try { + const response = await fetch(`/api/share/${shareId}`, { method: 'DELETE' }); + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to delete share'); + + // Remove from the shares list (both modals use different arrays) + recordingPublicShares.value = recordingPublicShares.value.filter(s => s.id !== shareId); + userShares.value = userShares.value.filter(s => s.id !== shareId); + + // Update the recording's share count in the UI + await refreshRecordingShareCounts(); + + showToast('Share link deleted successfully.', 'fa-check-circle'); + showShareDeleteModal.value = false; + shareToDelete.value = null; + } catch (error) { + setGlobalError(`Failed to delete share: ${error.message}`); + } + }; + + const copyPublicShareLink = (shareUrl) => { + navigator.clipboard.writeText(shareUrl).then(() => { + showToast('Share link copied to clipboard!', 'fa-check-circle'); + }).catch(() => { + setGlobalError('Failed to copy link to clipboard'); + }); + }; + + const copyPublicShareLinkWithFeedback = (shareUrl, shareId) => { + navigator.clipboard.writeText(shareUrl).then(() => { + copiedShareId.value = shareId; + showToast('Share link copied to clipboard!', 'fa-check-circle'); + + // Reset after delay + setTimeout(() => { + copiedShareId.value = null; + }, 1500); + }).catch(() => { + setGlobalError('Failed to copy link to clipboard'); + }); + }; + + const refreshRecordingShareCounts = async () => { + // Refresh the current recording if one is selected + const recording = recordingToShare.value || internalShareRecording.value || selectedRecording.value; + if (!recording) return; + + try { + const response = await fetch(`/api/recordings/${recording.id}`); + if (response.ok) { + const updatedRecording = await response.json(); + + // Update in recordings list + const index = recordings.value.findIndex(r => r.id === recording.id); + if (index !== -1) { + // Preserve reactivity by updating specific fields + recordings.value[index].public_share_count = updatedRecording.public_share_count || 0; + recordings.value[index].shared_with_count = updatedRecording.shared_with_count || 0; + } + + // Update selected recording if it's the same one + if (selectedRecording.value && selectedRecording.value.id === recording.id) { + selectedRecording.value.public_share_count = updatedRecording.public_share_count || 0; + selectedRecording.value.shared_with_count = updatedRecording.shared_with_count || 0; + } + + // Update internal share recording if it's the same one + if (internalShareRecording.value && internalShareRecording.value.id === recording.id) { + internalShareRecording.value.public_share_count = updatedRecording.public_share_count || 0; + internalShareRecording.value.shared_with_count = updatedRecording.shared_with_count || 0; + } + + // Update recording to share if it's the same one + if (recordingToShare.value && recordingToShare.value.id === recording.id) { + recordingToShare.value.public_share_count = updatedRecording.public_share_count || 0; + recordingToShare.value.shared_with_count = updatedRecording.shared_with_count || 0; + } + } + } catch (error) { + console.error('Failed to refresh recording share counts:', error); + } + }; + + const copyShareLink = () => { + if (!generatedShareLink.value) return; + navigator.clipboard.writeText(generatedShareLink.value).then(() => { + showToast('Share link copied to clipboard!'); + }); + }; + + const copyIndividualShareLink = (shareId) => { + const input = document.getElementById(`share-link-${shareId}`); + if (!input) return; + + const button = input.nextElementSibling; + if (!button) return; + + navigator.clipboard.writeText(input.value).then(() => { + copiedShareId.value = shareId; + showToast('Share link copied to clipboard!', 'fa-check'); + + // Apply success state + button.style.transition = 'background-color 0.2s ease'; + button.style.backgroundColor = 'var(--bg-success, #10b981)'; + + // Revert after delay + setTimeout(() => { + button.style.backgroundColor = ''; + copiedShareId.value = null; + setTimeout(() => { + button.style.transition = ''; + }, 200); + }, 1500); + }).catch(err => { + console.error('Failed to copy share link:', err); + }); + }; + + // ========================================= + // Shares List + // ========================================= + + const openSharesList = async () => { + isLoadingShares.value = true; + showSharesListModal.value = true; + try { + const response = await fetch('/api/shares'); + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to load shared items'); + userShares.value = data; + } catch (error) { + setGlobalError(`Failed to load shared items: ${error.message}`); + } finally { + isLoadingShares.value = false; + } + }; + + const closeSharesList = () => { + showSharesListModal.value = false; + userShares.value = []; + }; + + const updateShare = async (share) => { + try { + const response = await fetch(`/api/share/${share.id}`, { + method: 'PUT', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + share_summary: share.share_summary, + share_notes: share.share_notes + }) + }); + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to update share'); + showToast('Share permissions updated.', 'fa-check-circle'); + } catch (error) { + setGlobalError(`Failed to update share: ${error.message}`); + } + }; + + const confirmDeleteShare = (share) => { + shareToDelete.value = share; + showShareDeleteModal.value = true; + }; + + const cancelDeleteShare = () => { + shareToDelete.value = null; + showShareDeleteModal.value = false; + }; + + // ========================================= + // Internal Sharing + // ========================================= + + const loadAllUsers = async () => { + if (!showUsernamesInUI.value) return; + + isLoadingAllUsers.value = true; + try { + const response = await fetch('/api/users/search?q='); + if (!response.ok) { + if (response.status === 403) { + throw new Error('Internal sharing is not enabled'); + } + throw new Error('Failed to load users'); + } + const data = await response.json(); + allUsers.value = data; + } catch (error) { + setGlobalError(`Failed to load users: ${error.message}`); + allUsers.value = []; + } finally { + isLoadingAllUsers.value = false; + } + }; + + const searchInternalShareUsers = async () => { + const query = internalShareUserSearch.value.trim(); + + // If SHOW_USERNAMES_IN_UI is enabled, filter allUsers locally + if (showUsernamesInUI.value) { + // Get list of user IDs that already have access + const sharedUserIds = new Set(recordingInternalShares.value.map(share => share.user_id)); + + // Filter out already-shared users + const availableUsers = allUsers.value.filter(user => !sharedUserIds.has(user.id)); + + if (query.length === 0) { + internalShareSearchResults.value = availableUsers; + } else { + internalShareSearchResults.value = availableUsers.filter(user => + user.username.toLowerCase().includes(query.toLowerCase()) || + (user.email && user.email.toLowerCase().includes(query.toLowerCase())) + ); + } + return; + } + + // Otherwise, use server-side search + if (query.length < 2) { + internalShareSearchResults.value = []; + return; + } + + clearTimeout(userSearchTimeout); + userSearchTimeout = setTimeout(async () => { + isSearchingUsers.value = true; + try { + const response = await fetch(`/api/users/search?q=${encodeURIComponent(query)}`); + if (!response.ok) { + if (response.status === 403) { + throw new Error('Internal sharing is not enabled'); + } + throw new Error('Failed to search users'); + } + const data = await response.json(); + internalShareSearchResults.value = data; + } catch (error) { + setGlobalError(`Failed to search users: ${error.message}`); + internalShareSearchResults.value = []; + } finally { + isSearchingUsers.value = false; + } + }, 300); + }; + + const openUnifiedShareModal = async (recording) => { + internalShareRecording.value = recording; + internalShareUserSearch.value = ''; + internalShareSearchResults.value = []; + internalSharePermissions.value = { can_edit: false, can_reshare: false }; + recordingPublicShares.value = []; + shareOptions.share_summary = true; + shareOptions.share_notes = true; + + // PERMISSION CEILING: Calculate maximum permissions current user can grant + // If viewing a shared recording (not owner), constrain to their permissions + if (recording.is_shared && recording.share_info) { + internalShareMaxPermissions.value = { + can_edit: recording.share_info.can_edit || false, + can_reshare: recording.share_info.can_reshare || false + }; + } else { + // Owner has unlimited permissions + internalShareMaxPermissions.value = { + can_edit: true, + can_reshare: true + }; + } + + showUnifiedShareModal.value = true; + + // Load all public shares for this recording + isLoadingPublicShares.value = true; + try { + const response = await fetch(`/api/shares`); + if (response.ok) { + const allShares = await response.json(); + // Filter to only shares for this recording and add share_url + recordingPublicShares.value = allShares + .filter(share => share.recording_id === recording.id) + .map(share => ({ + ...share, + share_url: `${window.location.origin}/share/${share.public_id}` + })); + } + } catch (error) { + console.error('Error loading public shares:', error); + recordingPublicShares.value = []; + } finally { + isLoadingPublicShares.value = false; + } + + // Load existing internal shares + isLoadingInternalShares.value = true; + try { + const response = await fetch(`/api/recordings/${recording.id}/shares-internal`); + if (!response.ok) { + if (response.status === 403) { + throw new Error('Internal sharing is not enabled'); + } + throw new Error('Failed to load shares'); + } + const data = await response.json(); + recordingInternalShares.value = data.shares || []; + } catch (error) { + setGlobalError(`Failed to load shares: ${error.message}`); + recordingInternalShares.value = []; + } finally { + isLoadingInternalShares.value = false; + } + + // If SHOW_USERNAMES_IN_UI is enabled, load all users + if (showUsernamesInUI.value) { + await loadAllUsers(); + internalShareSearchResults.value = allUsers.value; + } + }; + + const closeUnifiedShareModal = () => { + showUnifiedShareModal.value = false; + internalShareRecording.value = null; + internalShareUserSearch.value = ''; + internalShareSearchResults.value = []; + recordingInternalShares.value = []; + recordingPublicShares.value = []; + allUsers.value = []; + }; + + // Legacy function names for backward compatibility + const openInternalShareModal = openUnifiedShareModal; + const openManageInternalSharesModal = openUnifiedShareModal; + const closeInternalShareModal = closeUnifiedShareModal; + const closeManageInternalSharesModal = closeUnifiedShareModal; + + const reloadInternalShares = async () => { + if (!internalShareRecording.value) return; + + isLoadingInternalShares.value = true; + try { + const response = await fetch(`/api/recordings/${internalShareRecording.value.id}/shares-internal`); + if (!response.ok) { + throw new Error('Failed to load shares'); + } + const data = await response.json(); + recordingInternalShares.value = data.shares || []; + } catch (error) { + setGlobalError(`Failed to reload shares: ${error.message}`); + } finally { + isLoadingInternalShares.value = false; + } + }; + + const shareWithUsername = async () => { + if (!internalShareRecording.value) return; + + const username = internalShareUserSearch.value.trim(); + if (!username) { + setGlobalError('Please enter a username'); + return; + } + + isSearchingUsers.value = true; + try { + // Search for the exact username + const searchResponse = await fetch(`/api/users/search?q=${encodeURIComponent(username)}`); + if (!searchResponse.ok) { + if (searchResponse.status === 403) { + throw new Error('Internal sharing is not enabled'); + } + throw new Error('Failed to find user'); + } + + const users = await searchResponse.json(); + + if (users.length === 0) { + setGlobalError(`User "${username}" not found`); + return; + } + + // Use the first matching user (should be exact match from backend) + const user = users[0]; + await createInternalShare(user.id, user.username); + + // Clear input on success + internalShareUserSearch.value = ''; + } catch (error) { + setGlobalError(error.message || 'Failed to share with user'); + } finally { + isSearchingUsers.value = false; + } + }; + + const createInternalShare = async (userId, username) => { + if (!internalShareRecording.value) return; + + try { + const response = await fetch(`/api/recordings/${internalShareRecording.value.id}/share-internal`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + user_id: userId, + can_edit: internalSharePermissions.value.can_edit, + can_reshare: internalSharePermissions.value.can_reshare + }) + }); + + const data = await response.json(); + if (!response.ok) { + throw new Error(data.error || 'Failed to share recording'); + } + + const displayName = showUsernamesInUI.value ? username : `User #${userId}`; + showToast(`Recording shared with ${displayName}`, 'fa-share-alt'); + + // Reset permissions for next share + internalSharePermissions.value = { can_edit: false, can_reshare: false }; + + // Reload shares to show the new share in the list + await reloadInternalShares(); + + // Update the recording's share count in the UI + await refreshRecordingShareCounts(); + } catch (error) { + setGlobalError(`Failed to share recording: ${error.message}`); + } + }; + + const revokeInternalShare = async (shareId, username) => { + if (!internalShareRecording.value) return; + + try { + const response = await fetch(`/api/internal-shares/${shareId}`, { + method: 'DELETE' + }); + + if (!response.ok) { + const data = await response.json(); + throw new Error(data.error || 'Failed to revoke share'); + } + + recordingInternalShares.value = recordingInternalShares.value.filter(s => s.id !== shareId); + const displayName = showUsernamesInUI.value ? username : 'User'; + showToast(`Access revoked for ${displayName}`, 'fa-user-times'); + + // Update the recording's share count in the UI + await refreshRecordingShareCounts(); + } catch (error) { + setGlobalError(`Failed to revoke share: ${error.message}`); + } + }; + + return { + // Utilities + formatShareDate, + getUserColorClass, + + // Public sharing + openShareModal, + closeShareModal, + createShare, + copyShareLink, + copyPublicShareLink, + copyPublicShareLinkWithFeedback, + copyIndividualShareLink, + confirmDeletePublicShare, + deletePublicShare, + refreshRecordingShareCounts, + + // Shares list + openSharesList, + closeSharesList, + updateShare, + confirmDeleteShare, + cancelDeleteShare, + deleteShare: deletePublicShare, // Alias for template compatibility + copiedShareId, + + // Internal sharing + loadAllUsers, + searchInternalShareUsers, + openUnifiedShareModal, + closeUnifiedShareModal, + openInternalShareModal, + closeInternalShareModal, + openManageInternalSharesModal, + closeManageInternalSharesModal, + reloadInternalShares, + shareWithUsername, + createInternalShare, + revokeInternalShare + }; +} diff --git a/static/js/modules/composables/speakers.js b/static/js/modules/composables/speakers.js new file mode 100644 index 0000000..9ab2f0e --- /dev/null +++ b/static/js/modules/composables/speakers.js @@ -0,0 +1,1251 @@ +/** + * Speaker management composable + * Handles speaker identification, naming, and navigation + */ + +export function useSpeakers(state, utils, processedTranscription) { + const { nextTick } = Vue; + const { + showSpeakerModal, speakerModalTab, showAddSpeakerModal, showEditSpeakersModal, + showEditTextModal, selectedRecording, recordings, + speakerMap, speakerColorMap, modalSpeakers, speakerDisplayMap, speakerSuggestions, loadingSuggestions, + activeSpeakerInput, regenerateSummaryAfterSpeakerUpdate, + editingSpeakersList, databaseSpeakers, editingSpeakerSuggestions, + editSpeakerDropdownPositions, newSpeakerName, newSpeakerIsMe, + newSpeakerSuggestions, loadingNewSpeakerSuggestions, showNewSpeakerSuggestions, + editingSegmentIndex, editingSpeakerIndex, editedText, editedTranscriptData, highlightedSpeaker, + isAutoIdentifying, availableSpeakers, editingSegments, + currentSpeakerGroupIndex, speakerGroups, currentUserName, + voiceSuggestions, loadingVoiceSuggestions + } = state; + + const { showToast, setGlobalError, onChatComplete } = utils; + + // i18n helper — falls back to the provided fallback string if i18n is not loaded + const t = (key, params, fallback) => window.i18n ? window.i18n.t(key, params) : (fallback || key); + const tc = (key, count, params) => window.i18n ? window.i18n.tc(key, count, params) : (params && params.count != null ? `${params.count}` : key); + + // Current speaker highlight state + let currentSpeakerId = null; + + // Number of speaker colors available in CSS (must match styles.css and app.modular.js) + const SPEAKER_COLOR_COUNT = 16; + + // Get speaker color from the shared color map + // If speaker not in map, assign next available color + const getSpeakerColor = (speakerId) => { + if (speakerColorMap.value[speakerId]) { + return speakerColorMap.value[speakerId]; + } + // Assign next color to new speaker + const colorIndex = Object.keys(speakerColorMap.value).length; + const color = `speaker-color-${(colorIndex % SPEAKER_COLOR_COUNT) + 1}`; + speakerColorMap.value[speakerId] = color; + return color; + }; + + // Helper to pause outer audio player when opening modals with their own player + const pauseOuterAudioPlayer = () => { + // Find the audio player in the right panel (not in a modal) + const outerAudio = document.querySelector('#rightMainColumn audio') || document.querySelector('#rightMainColumn video') || + document.querySelector('.detail-view audio:not(.fixed audio)') || document.querySelector('.detail-view video:not(.fixed video)'); + if (outerAudio && !outerAudio.paused) { + outerAudio.pause(); + } + }; + + // ========================================= + // Speaker Identification Modal + // ========================================= + + const openSpeakerModal = () => { + if (!selectedRecording.value) return; + + // Pause outer audio player to avoid conflicts with modal's player + pauseOuterAudioPlayer(); + + // Clear any existing speaker map data first + speakerMap.value = {}; + speakerDisplayMap.value = {}; + + // Get the same speaker order used in processedTranscription + const transcription = selectedRecording.value?.transcription; + let speakers = []; + + if (transcription) { + try { + const transcriptionData = JSON.parse(transcription); + if (transcriptionData && Array.isArray(transcriptionData)) { + // Use the exact same logic as processedTranscription to get speakers + speakers = [...new Set(transcriptionData.map(segment => segment.speaker).filter(Boolean))]; + } + } catch (e) { + // Fall back to getIdentifiedSpeakers if JSON parsing fails + speakers = getIdentifiedSpeakers(); + } + } + + // Initialize speaker map FIRST with colors from shared color map + // Clear existing map and rebuild it + speakerMap.value = {}; + speakerDisplayMap.value = {}; + speakers.forEach(speaker => { + speakerMap.value[speaker] = { + name: '', + isMe: false, + color: getSpeakerColor(speaker) + }; + speakerDisplayMap.value[speaker] = speaker; + }); + + // Set modalSpeakers AFTER speakerMap is populated (triggers render) + modalSpeakers.value = speakers; + + highlightedSpeaker.value = null; + speakerSuggestions.value = {}; + loadingSuggestions.value = {}; + activeSpeakerInput.value = null; + isAutoIdentifying.value = false; + regenerateSummaryAfterSpeakerUpdate.value = true; + voiceSuggestions.value = {}; + speakerModalTab.value = 'speakers'; // Reset to speakers tab on mobile + + showSpeakerModal.value = true; + + // Reset virtual scroll state for fresh modal render + if (utils.resetSpeakerModalScroll) { + utils.resetSpeakerModalScroll(); + } + + // Load voice-based suggestions if embeddings are available + loadVoiceSuggestions(); + }; + + const getIdentifiedSpeakers = () => { + // Ensure we have a valid recording and transcription + if (!selectedRecording.value?.transcription) { + return []; + } + + const transcription = selectedRecording.value.transcription; + let transcriptionData; + + try { + transcriptionData = JSON.parse(transcription); + } catch (e) { + transcriptionData = null; + } + + // Handle new simplified JSON format (array of segments) + if (transcriptionData && Array.isArray(transcriptionData)) { + // JSON format - extract speakers in order of appearance + const speakersInOrder = []; + const seenSpeakers = new Set(); + transcriptionData.forEach(segment => { + if (segment.speaker && !seenSpeakers.has(segment.speaker)) { + seenSpeakers.add(segment.speaker); + speakersInOrder.push(segment.speaker); + } + }); + return speakersInOrder; + } else if (typeof transcription === 'string') { + // Plain text format - find speakers in order of appearance + const speakerRegex = /\[([^\]]+)\]:/g; + const speakersInOrder = []; + const seenSpeakers = new Set(); + let match; + while ((match = speakerRegex.exec(transcription)) !== null) { + const speaker = match[1].trim(); + if (speaker && !seenSpeakers.has(speaker)) { + seenSpeakers.add(speaker); + speakersInOrder.push(speaker); + } + } + return speakersInOrder; + } + return []; + }; + + const closeSpeakerModal = () => { + // Pause any playing modal audio before closing + const modalAudio = document.querySelector('.fixed.z-50 audio') || document.querySelector('.fixed.z-50 video'); + if (modalAudio) { + modalAudio.pause(); + } + // Reset modal audio state (keep main player independent) + if (utils.resetModalAudioState) { + utils.resetModalAudioState(); + } + + showSpeakerModal.value = false; + showAutoIdDropdown.value = false; + highlightedSpeaker.value = null; + // Clear the speaker map to prevent stale data from persisting + speakerMap.value = {}; + speakerSuggestions.value = {}; + loadingSuggestions.value = {}; + clearSpeakerHighlight(); + }; + + const saveTranscriptImmediately = async (transcriptData) => { + if (!selectedRecording.value) return; + + try { + // Save transcript without closing modal + const filteredSpeakerMap = Object.entries(speakerMap.value).reduce((acc, [speakerId, speakerData]) => { + if (speakerData.name && speakerData.name.trim() !== '') { + acc[speakerId] = speakerData; + } + return acc; + }, {}); + + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const response = await fetch(`/recording/${selectedRecording.value.id}/update_transcript`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify({ + transcript_data: transcriptData, + speaker_map: filteredSpeakerMap, + regenerate_summary: false // Don't regenerate on immediate saves + }) + }); + + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to update transcript'); + + // Update recordings list and selected recording without closing modal + const index = recordings.value.findIndex(r => r.id === selectedRecording.value.id); + if (index !== -1) { + recordings.value[index] = data.recording; + } + selectedRecording.value = data.recording; + editedTranscriptData.value = null; + + showToast(t('help.saved'), 'fa-check-circle', 2000, 'success'); + } catch (error) { + console.error('Save Transcript Error:', error); + showToast(`Error: ${error.message}`, 'fa-exclamation-circle', 3000, 'error'); + } + }; + + const saveTranscriptEdits = async () => { + if (!selectedRecording.value || !editedTranscriptData.value) { + return saveSpeakerNames(); // Fall back to regular speaker name save + } + + try { + // Save both speaker names and transcript edits + const filteredSpeakerMap = Object.entries(speakerMap.value).reduce((acc, [speakerId, speakerData]) => { + if (speakerData.name && speakerData.name.trim() !== '') { + acc[speakerId] = speakerData; + } + return acc; + }, {}); + + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const response = await fetch(`/recording/${selectedRecording.value.id}/update_transcript`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify({ + transcript_data: editedTranscriptData.value, + speaker_map: filteredSpeakerMap, + regenerate_summary: regenerateSummaryAfterSpeakerUpdate.value + }) + }); + + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to update transcript'); + + closeSpeakerModal(); + + // If summary regeneration was requested, update status immediately + if (regenerateSummaryAfterSpeakerUpdate.value && data.summary_queued) { + // Update recording status to SUMMARIZING immediately for UI feedback + const summarizingRecording = { ...data.recording, status: 'SUMMARIZING' }; + + const index = recordings.value.findIndex(r => r.id === selectedRecording.value.id); + if (index !== -1) { + recordings.value[index] = summarizingRecording; + } + selectedRecording.value = summarizingRecording; + editedTranscriptData.value = null; + + showToast(t('help.transcriptUpdated'), 'fa-check-circle'); + showToast(t('help.summaryRegenerationStarted'), 'fa-sync-alt'); + + // Poll for summary completion + pollForSummaryCompletion(selectedRecording.value.id); + } else { + const index = recordings.value.findIndex(r => r.id === selectedRecording.value.id); + if (index !== -1) { + recordings.value[index] = data.recording; + } + selectedRecording.value = data.recording; + editedTranscriptData.value = null; + + showToast(t('help.transcriptUpdated'), 'fa-check-circle'); + } + } catch (error) { + console.error('Save Transcript Error:', error); + showToast(`Error: ${error.message}`, 'fa-exclamation-circle', 3000, 'error'); + } + }; + + const saveSpeakerNames = async () => { + if (!selectedRecording.value) return; + + // If there are transcript edits, save those instead + if (editedTranscriptData.value) { + return saveTranscriptEdits(); + } + + // Create a filtered speaker map that excludes entries with blank names + const filteredSpeakerMap = Object.entries(speakerMap.value).reduce((acc, [speakerId, speakerData]) => { + if (speakerData.name && speakerData.name.trim() !== '') { + acc[speakerId] = speakerData; + } + return acc; + }, {}); + + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const response = await fetch(`/recording/${selectedRecording.value.id}/update_speakers`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify({ + speaker_map: filteredSpeakerMap, + regenerate_summary: regenerateSummaryAfterSpeakerUpdate.value + }) + }); + + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to update speaker names'); + + closeSpeakerModal(); + + // If summary regeneration was requested, update status immediately + if (regenerateSummaryAfterSpeakerUpdate.value && data.summary_queued) { + // Update recording status to SUMMARIZING immediately for UI feedback + const summarizingRecording = { ...data.recording, status: 'SUMMARIZING' }; + + const index = recordings.value.findIndex(r => r.id === selectedRecording.value.id); + if (index !== -1) { + recordings.value[index] = summarizingRecording; + } + selectedRecording.value = summarizingRecording; + + showToast(t('help.speakerNamesUpdated'), 'fa-check-circle'); + showToast(t('help.summaryRegenerationStarted'), 'fa-sync-alt'); + + // Poll for summary completion + pollForSummaryCompletion(selectedRecording.value.id); + } else { + // The backend returns the fully updated recording object + const index = recordings.value.findIndex(r => r.id === selectedRecording.value.id); + if (index !== -1) { + recordings.value[index] = data.recording; + } + selectedRecording.value = data.recording; + + showToast(t('help.speakerNamesUpdated'), 'fa-check-circle'); + } + } catch (error) { + setGlobalError(`Failed to save speaker names: ${error.message}`); + } + }; + + // Poll for summary completion after regeneration + const pollForSummaryCompletion = async (recordingId) => { + const maxAttempts = 40; // Poll for up to 2 minutes (40 * 3 seconds) + let attempts = 0; + + const pollInterval = setInterval(async () => { + attempts++; + + try { + // Use lightweight status-only endpoint for polling + const response = await fetch(`/recording/${recordingId}/status`); + if (!response.ok) { + clearInterval(pollInterval); + return; + } + + const statusData = await response.json(); + + // Update status in recordings list + const index = recordings.value.findIndex(r => r.id === recordingId); + if (index !== -1) { + // Create new object to ensure Vue reactivity + recordings.value[index] = { + ...recordings.value[index], + status: statusData.status + }; + } + + // Update selectedRecording with new object reference for reactivity + if (selectedRecording.value && selectedRecording.value.id === recordingId) { + selectedRecording.value = { + ...selectedRecording.value, + status: statusData.status + }; + } + + // Check if summarization is complete + if (statusData.status === 'COMPLETED') { + clearInterval(pollInterval); + + // Now fetch the full recording with the new summary + const fullResponse = await fetch(`/api/recordings/${recordingId}`); + if (fullResponse.ok) { + const fullData = await fullResponse.json(); + + // Update in recordings list first + const currentIndex = recordings.value.findIndex(r => r.id === recordingId); + if (currentIndex !== -1) { + recordings.value[currentIndex] = fullData; + } + + // Always update selectedRecording if it's the current recording + if (selectedRecording.value && selectedRecording.value.id === recordingId) { + selectedRecording.value = fullData; + // Force Vue to detect the change + await nextTick(); + } + } + + showToast(t('help.summaryUpdated'), 'fa-check-circle'); + // Refresh token budget after LLM operation + if (onChatComplete) onChatComplete(); + } else if (statusData.status === 'FAILED' || statusData.status === 'ERROR') { + // Stop polling if it failed + clearInterval(pollInterval); + showToast(t('help.summaryGenerationFailed'), 'fa-exclamation-circle', 3000, 'error'); + } else if (attempts >= maxAttempts) { + // Stop polling after max attempts + clearInterval(pollInterval); + showToast(t('help.summaryGenerationTimedOut'), 'fa-clock', 3000, 'warning'); + } + } catch (error) { + console.error('Error polling for summary:', error); + clearInterval(pollInterval); + } + }, 3000); // Poll every 3 seconds + }; + + // ========================================= + // Speaker Suggestions + // ========================================= + + const loadVoiceSuggestions = async () => { + if (!selectedRecording.value?.id) return; + + loadingVoiceSuggestions.value = true; + voiceSuggestions.value = {}; + + try { + const response = await fetch(`/speakers/suggestions/${selectedRecording.value.id}`); + if (!response.ok) throw new Error('Failed to load voice suggestions'); + + const data = await response.json(); + + if (data.success && data.suggestions) { + // Only keep suggestions that have matches + voiceSuggestions.value = Object.fromEntries( + Object.entries(data.suggestions).filter(([_, matches]) => matches && matches.length > 0) + ); + } + } catch (error) { + console.error('Error loading voice suggestions:', error); + voiceSuggestions.value = {}; + } finally { + loadingVoiceSuggestions.value = false; + } + }; + + const applyVoiceSuggestion = (speakerId, suggestion) => { + if (speakerMap.value[speakerId]) { + speakerMap.value[speakerId].name = suggestion.name; + // Don't delete the suggestion - let it reappear if user clears the field + } + }; + + // Handle "This is Me" checkbox changes + const handleIsMeChange = (speakerId) => { + if (!speakerMap.value[speakerId]) return; + + if (speakerMap.value[speakerId].isMe) { + // Checkbox is now checked - set the name to current user's name + speakerMap.value[speakerId].name = currentUserName.value || 'Me'; + } else { + // Checkbox is now unchecked - clear the name + speakerMap.value[speakerId].name = ''; + } + }; + + // Determine if voice suggestion pill should be shown inside the input field + const shouldShowVoiceSuggestionPill = (speakerId) => { + // Don't show if no suggestions available + if (!voiceSuggestions.value[speakerId] || voiceSuggestions.value[speakerId].length === 0) { + return false; + } + + // Don't show if "This is Me" is checked + if (speakerMap.value[speakerId]?.isMe) { + return false; + } + + // Only show when the input field is empty + const typedName = speakerMap.value[speakerId]?.name?.trim(); + if (typedName && typedName.length > 0) { + return false; + } + + return true; + }; + + const searchSpeakers = async (query, speakerId) => { + if (!query || query.length < 2) { + speakerSuggestions.value[speakerId] = []; + return; + } + + loadingSuggestions.value[speakerId] = true; + + try { + const response = await fetch(`/speakers/search?q=${encodeURIComponent(query)}`); + if (!response.ok) throw new Error('Failed to search speakers'); + + const speakers = await response.json(); + speakerSuggestions.value[speakerId] = speakers; + } catch (error) { + console.error('Error searching speakers:', error); + speakerSuggestions.value[speakerId] = []; + } finally { + loadingSuggestions.value[speakerId] = false; + } + }; + + const selectSpeakerSuggestion = (speakerId, suggestion) => { + if (speakerMap.value[speakerId]) { + speakerMap.value[speakerId].name = suggestion.name; + speakerSuggestions.value[speakerId] = []; + activeSpeakerInput.value = null; + } + }; + + const closeSpeakerSuggestionsOnClick = (event) => { + // Check if the click was on an input field or dropdown + const clickedInput = event.target.closest('input[type="text"]'); + const clickedDropdown = event.target.closest('.absolute.z-10'); + + // If not clicking on input or dropdown, close all suggestions + if (!clickedInput && !clickedDropdown) { + Object.keys(speakerSuggestions.value).forEach(speakerId => { + speakerSuggestions.value[speakerId] = []; + }); + } + }; + + // ========================================= + // Speaker Navigation (Index-Based for Virtual Scroll) + // ========================================= + + /** + * Find speaker groups by analyzing segment data (not DOM). + * Returns groups with startIndex instead of startElement for virtual scroll compatibility. + */ + const findSpeakerGroups = (speakerId) => { + if (!speakerId) return []; + + // Get segments from processedTranscription + const segments = processedTranscription.value?.simpleSegments || []; + if (segments.length === 0) return []; + + const groups = []; + let currentGroup = null; + let lastSpeakerId = null; + + segments.forEach((segment, index) => { + const segmentSpeakerId = segment.speakerId; + + if (segmentSpeakerId === speakerId) { + // If this is a new group (not consecutive with previous) + if (lastSpeakerId !== speakerId) { + currentGroup = { + startIndex: index, + indices: [index] + }; + groups.push(currentGroup); + } else if (currentGroup) { + // Add to existing group + currentGroup.indices.push(index); + } + } + lastSpeakerId = segmentSpeakerId; + }); + + return groups; + }; + + const highlightSpeakerInTranscript = (speakerId) => { + highlightedSpeaker.value = speakerId; + + if (speakerId) { + // Find all speaker groups for navigation (index-based, no DOM queries) + speakerGroups.value = findSpeakerGroups(speakerId); + + if (speakerGroups.value.length > 0) { + // Get the current visible range from the virtual scroll + const visibleRange = utils.getSpeakerModalVisibleRange ? utils.getSpeakerModalVisibleRange() : null; + + if (visibleRange) { + const { start: visibleStart, end: visibleEnd } = visibleRange; + const visibleCenter = Math.floor((visibleStart + visibleEnd) / 2); + + // Check if any group is already visible + const visibleGroupIndex = speakerGroups.value.findIndex(group => + group.startIndex >= visibleStart && group.startIndex < visibleEnd + ); + + if (visibleGroupIndex !== -1) { + // A group is already visible, just set it as current (no scroll needed) + currentSpeakerGroupIndex.value = visibleGroupIndex; + } else { + // No group visible - find the nearest group to the visible center + let nearestIndex = 0; + let nearestDistance = Infinity; + + speakerGroups.value.forEach((group, index) => { + const distance = Math.abs(group.startIndex - visibleCenter); + if (distance < nearestDistance) { + nearestDistance = distance; + nearestIndex = index; + } + }); + + currentSpeakerGroupIndex.value = nearestIndex; + + // Scroll to the nearest group + const nearestGroup = speakerGroups.value[nearestIndex]; + if (nearestGroup && typeof nearestGroup.startIndex === 'number' && utils.scrollToSegmentIndex) { + utils.scrollToSegmentIndex(nearestGroup.startIndex); + } + } + } else { + // Fallback: no visible range available, scroll to first group + currentSpeakerGroupIndex.value = 0; + const firstGroup = speakerGroups.value[0]; + if (firstGroup && typeof firstGroup.startIndex === 'number' && utils.scrollToSegmentIndex) { + utils.scrollToSegmentIndex(firstGroup.startIndex); + } + } + } else { + currentSpeakerGroupIndex.value = -1; + } + } else { + speakerGroups.value = []; + currentSpeakerGroupIndex.value = -1; + } + }; + + /** + * Select a speaker for navigation from the dropdown. + * Uses index-based navigation compatible with virtual scrolling. + */ + const selectSpeakerForNavigation = (speakerId) => { + if (!speakerId) { + highlightedSpeaker.value = null; + speakerGroups.value = []; + currentSpeakerGroupIndex.value = -1; + return; + } + + highlightedSpeaker.value = speakerId; + + // Find groups immediately (no DOM dependency) + speakerGroups.value = findSpeakerGroups(speakerId); + currentSpeakerGroupIndex.value = 0; + + // Scroll to first occurrence + if (speakerGroups.value.length > 0) { + const firstGroup = speakerGroups.value[0]; + if (firstGroup && typeof firstGroup.startIndex === 'number') { + if (utils.scrollToSegmentIndex) { + utils.scrollToSegmentIndex(firstGroup.startIndex); + } + } + } + }; + + const navigateToNextSpeakerGroup = () => { + if (speakerGroups.value.length === 0) return; + + // Update the index + currentSpeakerGroupIndex.value = (currentSpeakerGroupIndex.value + 1) % speakerGroups.value.length; + const group = speakerGroups.value[currentSpeakerGroupIndex.value]; + if (group && typeof group.startIndex === 'number') { + if (utils.scrollToSegmentIndex) { + utils.scrollToSegmentIndex(group.startIndex); + } + } + }; + + const navigateToPrevSpeakerGroup = () => { + if (speakerGroups.value.length === 0) return; + + // Update the index + currentSpeakerGroupIndex.value = currentSpeakerGroupIndex.value <= 0 + ? speakerGroups.value.length - 1 + : currentSpeakerGroupIndex.value - 1; + const group = speakerGroups.value[currentSpeakerGroupIndex.value]; + if (group && typeof group.startIndex === 'number') { + if (utils.scrollToSegmentIndex) { + utils.scrollToSegmentIndex(group.startIndex); + } + } + }; + + const focusSpeaker = (speakerId) => { + // Set this as the active speaker input + activeSpeakerInput.value = speakerId; + // Only highlight if not already highlighted (to preserve navigation state) + if (highlightedSpeaker.value !== speakerId) { + highlightSpeakerInTranscript(speakerId); + } + }; + + const blurSpeaker = () => { + // Clear the active speaker input after a delay to allow clicking on suggestions + setTimeout(() => { + activeSpeakerInput.value = null; + speakerSuggestions.value = {}; + }, 200); + clearSpeakerHighlight(); + }; + + const clearSpeakerHighlight = () => { + highlightedSpeaker.value = null; + }; + + // ========================================= + // Auto-Identify Speakers + // ========================================= + + // Split button dropdown visibility + click-outside handling + const showAutoIdDropdown = Vue.ref(false); + const autoIdSplitBtn = Vue.ref(null); + + const onAutoIdClickOutside = (e) => { + if (autoIdSplitBtn.value && !autoIdSplitBtn.value.contains(e.target)) { + showAutoIdDropdown.value = false; + } + }; + Vue.watch(showAutoIdDropdown, (open) => { + if (open) { + document.addEventListener('click', onAutoIdClickOutside, true); + } else { + document.removeEventListener('click', onAutoIdClickOutside, true); + } + }); + + /** + * Auto-identify speakers via LLM. + * @param {boolean} identifyAll - When false (default), only fill speakers with empty names. + * When true, overwrite all speaker names. + */ + const autoIdentifySpeakers = async (identifyAll = false) => { + showAutoIdDropdown.value = false; + + if (!selectedRecording.value) { + showToast(t('help.noRecordingSelected'), 'fa-exclamation-circle'); + return; + } + + isAutoIdentifying.value = true; + showToast(t('help.startingAutoIdentification'), 'fa-magic'); + + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const response = await fetch(`/recording/${selectedRecording.value.id}/auto_identify_speakers`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify({ + current_speaker_map: speakerMap.value + }) + }); + + const data = await response.json(); + if (!response.ok) { + throw new Error(data.error || 'Unknown error occurred during auto-identification.'); + } + + // Check if there's a message (e.g., all speakers already identified) + if (data.message) { + showToast(data.message, 'fa-info-circle'); + return; + } + + // Update speakerMap with the identified names + let identifiedCount = 0; + for (const speakerId in data.speaker_map) { + const identifiedName = data.speaker_map[speakerId]; + if (speakerMap.value[speakerId] && identifiedName && identifiedName.trim() !== '') { + // Skip speakers that already have a name unless identifyAll is true + if (!identifyAll && speakerMap.value[speakerId].name && speakerMap.value[speakerId].name.trim() !== '') { + continue; + } + speakerMap.value[speakerId].name = identifiedName; + identifiedCount++; + } + } + + if (identifiedCount > 0) { + showToast(tc('help.speakersIdentified', identifiedCount, { count: identifiedCount }), 'fa-check-circle'); + } else { + showToast(t('help.noSpeakersIdentified'), 'fa-info-circle'); + } + + // Refresh token budget after LLM operation + if (onChatComplete) onChatComplete(); + + } catch (error) { + console.error('Auto Identify Speakers Error:', error); + showToast(`Error: ${error.message}`, 'fa-exclamation-circle', 5000, 'error'); + } finally { + isAutoIdentifying.value = false; + } + }; + + // ========================================= + // Apply Suggested Names + // ========================================= + + /** True when any unnamed, non-isMe speaker has voice or autocomplete suggestions */ + const hasAnySuggestions = Vue.computed(() => { + for (const speakerId of modalSpeakers.value) { + const data = speakerMap.value[speakerId]; + if (!data || data.isMe) continue; + if (data.name && data.name.trim() !== '') continue; + // Check voice suggestions + if (voiceSuggestions.value[speakerId] && voiceSuggestions.value[speakerId].length > 0) { + return true; + } + // Check autocomplete suggestions + if (speakerSuggestions.value[speakerId] && speakerSuggestions.value[speakerId].length > 0) { + return true; + } + } + return false; + }); + + /** Bulk-apply voice suggestions (priority) then autocomplete suggestions to empty names only */ + const applySuggestedNames = () => { + let appliedCount = 0; + for (const speakerId of modalSpeakers.value) { + const data = speakerMap.value[speakerId]; + if (!data || data.isMe) continue; + if (data.name && data.name.trim() !== '') continue; + + // Priority 1: voice suggestions + const voice = voiceSuggestions.value[speakerId]; + if (voice && voice.length > 0) { + data.name = voice[0].name; + appliedCount++; + continue; + } + + // Priority 2: autocomplete suggestions + const auto = speakerSuggestions.value[speakerId]; + if (auto && auto.length > 0) { + data.name = auto[0].name; + appliedCount++; + } + } + + if (appliedCount > 0) { + showToast(tc('help.appliedSuggestedNames', appliedCount, { count: appliedCount }), 'fa-check-circle'); + } else { + showToast(t('help.noSuggestionsToApply'), 'fa-info-circle'); + } + }; + + // ========================================= + // Add Speaker Modal + // ========================================= + + const searchNewSpeaker = async () => { + const query = newSpeakerName.value; + if (!query || query.length < 2) { + newSpeakerSuggestions.value = []; + return; + } + + loadingNewSpeakerSuggestions.value = true; + try { + const response = await fetch(`/speakers/search?q=${encodeURIComponent(query)}`); + if (!response.ok) throw new Error('Failed to search speakers'); + + const speakers = await response.json(); + newSpeakerSuggestions.value = speakers; + } catch (error) { + console.error('Error searching speakers:', error); + newSpeakerSuggestions.value = []; + } finally { + loadingNewSpeakerSuggestions.value = false; + } + }; + + const selectNewSpeakerSuggestion = (suggestion) => { + newSpeakerName.value = suggestion.name; + newSpeakerSuggestions.value = []; + showNewSpeakerSuggestions.value = false; + }; + + const hideNewSpeakerSuggestionsDelayed = () => { + setTimeout(() => { + showNewSpeakerSuggestions.value = false; + newSpeakerSuggestions.value = []; + }, 200); + }; + + const openAddSpeakerModal = () => { + newSpeakerName.value = ''; + newSpeakerIsMe.value = false; + newSpeakerSuggestions.value = []; + loadingNewSpeakerSuggestions.value = false; + showNewSpeakerSuggestions.value = false; + showAddSpeakerModal.value = true; + }; + + const closeAddSpeakerModal = () => { + showAddSpeakerModal.value = false; + newSpeakerName.value = ''; + newSpeakerIsMe.value = false; + newSpeakerSuggestions.value = []; + loadingNewSpeakerSuggestions.value = false; + showNewSpeakerSuggestions.value = false; + }; + + const addNewSpeaker = () => { + const name = newSpeakerIsMe.value ? (currentUserName.value || 'Me') : newSpeakerName.value.trim(); + + if (!newSpeakerIsMe.value && !name) { + showToast(t('help.pleaseEnterSpeakerName'), 'fa-exclamation-circle'); + return; + } + + // Generate new speaker ID + const existingSpeakerNumbers = modalSpeakers.value + .map(s => { + const match = s.match(/^SPEAKER_(\d+)$/); + return match ? parseInt(match[1]) : -1; + }) + .filter(n => n >= 0); + + const nextNumber = existingSpeakerNumbers.length > 0 + ? Math.max(...existingSpeakerNumbers) + 1 + : modalSpeakers.value.length; + + const newSpeakerId = `SPEAKER_${String(nextNumber).padStart(2, '0')}`; + + // Add to speakerMap FIRST (before modalSpeakers) to avoid render race condition + speakerMap.value[newSpeakerId] = { + name: name, + isMe: newSpeakerIsMe.value, + color: getSpeakerColor(newSpeakerId) + }; + + // Add to speakerDisplayMap + speakerDisplayMap.value[newSpeakerId] = newSpeakerId; + + // Add to modalSpeakers LAST (triggers re-render, but speakerMap is already populated) + modalSpeakers.value.push(newSpeakerId); + + closeAddSpeakerModal(); + showToast(t('help.speakerAdded'), 'fa-check-circle'); + }; + + // ========================================= + // Edit Speakers Modal + // ========================================= + + const openEditSpeakersModal = async () => { + // Close any open suggestions + editingSegments.value.forEach(seg => seg.showSuggestions = false); + // Copy current speakers to editing list with original and current properties + editingSpeakersList.value = availableSpeakers.value.map(s => ({ + original: s, + current: s + })); + // Fetch speakers from database for autocomplete + try { + const response = await fetch('/speakers'); + const speakers = await response.json(); + // Keep full objects with id and name for autocomplete dropdown + databaseSpeakers.value = speakers; + } catch (e) { + console.error('Failed to fetch speakers:', e); + databaseSpeakers.value = []; + } + editingSpeakerSuggestions.value = {}; + showEditSpeakersModal.value = true; + }; + + const closeEditSpeakersModal = () => { + showEditSpeakersModal.value = false; + editingSpeakersList.value = []; + }; + + const addEditingSpeaker = () => { + editingSpeakersList.value.push({ original: '', current: '' }); + }; + + const removeEditingSpeaker = (index) => { + editingSpeakersList.value.splice(index, 1); + }; + + const filterEditingSpeakerSuggestions = (index) => { + const query = editingSpeakersList.value[index]?.current?.toLowerCase().trim() || ''; + if (query === '') { + // Show all speakers when field is empty/focused + editingSpeakerSuggestions.value[index] = [...databaseSpeakers.value]; + } else { + editingSpeakerSuggestions.value[index] = databaseSpeakers.value.filter( + s => s.name.toLowerCase().includes(query) + ); + } + }; + + const selectEditingSpeakerSuggestion = (index, name) => { + editingSpeakersList.value[index].current = name; + editingSpeakerSuggestions.value[index] = []; + }; + + const closeEditingSpeakerSuggestions = (index) => { + editingSpeakerSuggestions.value[index] = []; + }; + + const onEditSpeakerBlur = (index) => { + // Delay closing to allow clicking on suggestions + setTimeout(() => { + closeEditingSpeakerSuggestions(index); + }, 200); + }; + + const getEditSpeakerDropdownPosition = (index) => { + // Find the input element for this index and calculate position + const inputs = document.querySelectorAll('[class*="edit-speakers-modal"] input[placeholder="New name..."], .max-w-md input[placeholder="New name..."]'); + if (inputs[index]) { + const rect = inputs[index].getBoundingClientRect(); + return { + top: rect.bottom + 2 + 'px', + left: rect.left + 'px', + width: rect.width + 'px' + }; + } + return { top: '0px', left: '0px', width: '200px' }; + }; + + const saveEditingSpeakers = async () => { + const map = {}; + editingSpeakersList.value.forEach(item => { + if (item.original && item.current) { + map[item.original] = item.current; + } + }); + + // Update ASR editor state if it's open + if (editingSegments.value.length > 0) { + // Build new list of available speakers + const newSpeakers = new Set(); + + // Apply renames to all segments + editingSegments.value.forEach(segment => { + if (map[segment.speaker]) { + segment.speaker = map[segment.speaker]; + } + newSpeakers.add(segment.speaker); + }); + + // Add any newly added speakers from the modal + editingSpeakersList.value.forEach(item => { + if (!item.original && item.current) { + // This is a new speaker (no original) + newSpeakers.add(item.current); + } + }); + + // Update available speakers list + availableSpeakers.value = [...newSpeakers].sort(); + + // Update filtered speakers for all segments + editingSegments.value.forEach(segment => { + segment.filteredSpeakers = [...availableSpeakers.value]; + }); + + closeEditSpeakersModal(); + showToast(t('help.speakersUpdatedSaveToApply'), 'fa-check-circle'); + } else { + // Regular flow for non-ASR editor context + speakerMap.value = map; + closeEditSpeakersModal(); + await saveSpeakerNames(); + } + }; + + // ========================================= + // Edit Text Modal + // ========================================= + + const openEditTextModal = (segmentIndex) => { + if (!selectedRecording.value?.transcription) return; + + try { + const transcriptionData = JSON.parse(selectedRecording.value.transcription); + if (transcriptionData && Array.isArray(transcriptionData) && transcriptionData[segmentIndex]) { + editingSegmentIndex.value = segmentIndex; + editedText.value = transcriptionData[segmentIndex].sentence || ''; + showEditTextModal.value = true; + } + } catch (e) { + console.error('Error opening text editor:', e); + showToast(t('help.errorOpeningTextEditor'), 'fa-exclamation-circle', 3000, 'error'); + } + }; + + const closeEditTextModal = () => { + showEditTextModal.value = false; + editingSegmentIndex.value = null; + editedText.value = ''; + }; + + const saveEditedText = async () => { + if (editingSegmentIndex.value === null || !selectedRecording.value?.transcription) return; + + try { + const transcriptionData = JSON.parse(selectedRecording.value.transcription); + if (transcriptionData && Array.isArray(transcriptionData) && transcriptionData[editingSegmentIndex.value]) { + transcriptionData[editingSegmentIndex.value].sentence = editedText.value; + editedTranscriptData.value = transcriptionData; + + // Update the recording's transcription temporarily for UI update + selectedRecording.value.transcription = JSON.stringify(transcriptionData); + + closeEditTextModal(); + + // Immediately persist the change + showToast(t('help.savingProgress'), 'fa-spinner fa-spin'); + await saveTranscriptImmediately(transcriptionData); + } + } catch (e) { + console.error('Error saving text:', e); + showToast(t('help.errorSavingText'), 'fa-exclamation-circle', 3000, 'error'); + } + }; + + // ========================================= + // Change Speaker in Segment + // ========================================= + + const openSpeakerChangeDropdown = (segmentIndex) => { + editingSpeakerIndex.value = editingSpeakerIndex.value === segmentIndex ? null : segmentIndex; + }; + + const changeSpeaker = async (segmentIndex, newSpeakerId) => { + if (!selectedRecording.value?.transcription) return; + + try { + const transcriptionData = JSON.parse(selectedRecording.value.transcription); + if (transcriptionData && Array.isArray(transcriptionData) && transcriptionData[segmentIndex]) { + transcriptionData[segmentIndex].speaker = newSpeakerId; + editedTranscriptData.value = transcriptionData; + + // Update the recording's transcription temporarily for UI update + selectedRecording.value.transcription = JSON.stringify(transcriptionData); + + editingSpeakerIndex.value = null; + + // Immediately persist the change + showToast(t('help.savingProgress'), 'fa-spinner fa-spin'); + await saveTranscriptImmediately(transcriptionData); + } + } catch (e) { + console.error('Error changing speaker:', e); + showToast(t('help.errorChangingSpeaker'), 'fa-exclamation-circle', 3000, 'error'); + } + }; + + return { + // Speaker modal + openSpeakerModal, + closeSpeakerModal, + saveSpeakerNames, + + // Suggestions + loadVoiceSuggestions, + applyVoiceSuggestion, + handleIsMeChange, + shouldShowVoiceSuggestionPill, + searchSpeakers, + selectSpeakerSuggestion, + closeSpeakerSuggestionsOnClick, + + // Navigation + findSpeakerGroups, + highlightSpeakerInTranscript, + selectSpeakerForNavigation, + navigateToNextSpeakerGroup, + navigateToPrevSpeakerGroup, + focusSpeaker, + blurSpeaker, + clearSpeakerHighlight, + + // Auto-identify + autoIdentifySpeakers, + showAutoIdDropdown, + autoIdSplitBtn, + hasAnySuggestions, + applySuggestedNames, + + // Add speaker + openAddSpeakerModal, + closeAddSpeakerModal, + addNewSpeaker, + searchNewSpeaker, + selectNewSpeakerSuggestion, + hideNewSpeakerSuggestionsDelayed, + + // Edit speakers modal + openEditSpeakersModal, + closeEditSpeakersModal, + addEditingSpeaker, + removeEditingSpeaker, + filterEditingSpeakerSuggestions, + selectEditingSpeakerSuggestion, + closeEditingSpeakerSuggestions, + onEditSpeakerBlur, + getEditSpeakerDropdownPosition, + saveEditingSpeakers, + + // Edit text + openEditTextModal, + closeEditTextModal, + saveEditedText, + + // Change speaker + openSpeakerChangeDropdown, + changeSpeaker + }; +} diff --git a/static/js/modules/composables/tags.js b/static/js/modules/composables/tags.js new file mode 100644 index 0000000..6e4a7b1 --- /dev/null +++ b/static/js/modules/composables/tags.js @@ -0,0 +1,297 @@ +/** + * Tags Management Composable + * Handles tag operations for recordings + */ + +const { computed, ref } = Vue; + +export function useTags({ + recordings, + availableTags, + selectedRecording, + showEditTagsModal, + editingRecording, + tagSearchFilter, + showToast, + setGlobalError +}) { + // State (using passed refs from parent) + + // --- Tag Drag-and-Drop State for Edit Modal --- + const modalDraggedTagIndex = ref(null); + const modalDragOverTagIndex = ref(null); + + // Computed + const getRecordingTags = (recording) => { + if (!recording || !recording.tags) return []; + return recording.tags; + }; + + const getAvailableTagsForRecording = (recording) => { + if (!recording || !availableTags.value) return []; + const recordingTagIds = getRecordingTags(recording).map(tag => tag.id); + return availableTags.value.filter(tag => !recordingTagIds.includes(tag.id)); + }; + + const filteredAvailableTagsForModal = computed(() => { + if (!editingRecording.value) return []; + const availableTagsForRec = getAvailableTagsForRecording(editingRecording.value); + if (!tagSearchFilter.value) return availableTagsForRec; + + const filter = tagSearchFilter.value.toLowerCase(); + return availableTagsForRec.filter(tag => + tag.name.toLowerCase().includes(filter) + ); + }); + + // Methods + const editRecordingTags = (recording) => { + editingRecording.value = recording; + tagSearchFilter.value = ''; + showEditTagsModal.value = true; + }; + + const closeEditTagsModal = () => { + showEditTagsModal.value = false; + editingRecording.value = null; + tagSearchFilter.value = ''; + }; + + const addTagToRecording = async (tagId) => { + if (!tagId || !editingRecording.value) return; + + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + + const response = await fetch(`/api/recordings/${editingRecording.value.id}/tags`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify({ tag_id: tagId }) + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.error || 'Failed to add tag'); + } + + // Update local recording data + const tagToAdd = availableTags.value.find(tag => tag.id == tagId); + if (tagToAdd) { + // Check if tag already exists to prevent duplicates + const tagExists = editingRecording.value.tags?.some(t => t.id === tagToAdd.id); + if (!tagExists) { + if (!editingRecording.value.tags) { + editingRecording.value.tags = []; + } + editingRecording.value.tags.push(tagToAdd); + } + + // Also update in recordings list (only if different object) + const recordingInList = recordings.value.find(r => r.id === editingRecording.value.id); + if (recordingInList && recordingInList !== editingRecording.value) { + const tagExistsInList = recordingInList.tags?.some(t => t.id === tagToAdd.id); + if (!tagExistsInList) { + if (!recordingInList.tags) { + recordingInList.tags = []; + } + recordingInList.tags.push(tagToAdd); + } + } + + // Update selectedRecording if it matches (only if different object) + if (selectedRecording.value && + selectedRecording.value.id === editingRecording.value.id && + selectedRecording.value !== editingRecording.value) { + const tagExistsInSelected = selectedRecording.value.tags?.some(t => t.id === tagToAdd.id); + if (!tagExistsInSelected) { + if (!selectedRecording.value.tags) { + selectedRecording.value.tags = []; + } + selectedRecording.value.tags.push(tagToAdd); + } + } + } + + showToast('Tag added successfully', 'fa-check-circle', 2000, 'success'); + + } catch (error) { + console.error('Error adding tag to recording:', error); + setGlobalError(`Failed to add tag: ${error.message}`); + } + }; + + const removeTagFromRecording = async (tagId) => { + if (!editingRecording.value) return; + + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + + const response = await fetch(`/api/recordings/${editingRecording.value.id}/tags/${tagId}`, { + method: 'DELETE', + headers: { + 'X-CSRFToken': csrfToken + } + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.error || 'Failed to remove tag'); + } + + // Update local recording data + editingRecording.value.tags = editingRecording.value.tags.filter(tag => tag.id !== tagId); + + // Also update in recordings list + const recordingInList = recordings.value.find(r => r.id === editingRecording.value.id); + if (recordingInList && recordingInList !== editingRecording.value && recordingInList.tags) { + recordingInList.tags = recordingInList.tags.filter(tag => tag.id !== tagId); + } + + // Update selectedRecording if it matches + if (selectedRecording.value && selectedRecording.value.id === editingRecording.value.id && selectedRecording.value.tags) { + selectedRecording.value.tags = selectedRecording.value.tags.filter(tag => tag.id !== tagId); + } + + showToast('Tag removed successfully', 'fa-check-circle', 2000, 'success'); + + } catch (error) { + console.error('Error removing tag from recording:', error); + setGlobalError(`Failed to remove tag: ${error.message}`); + } + }; + + // --- Modal Tag Reordering --- + + const reorderModalTags = async (fromIndex, toIndex) => { + if (!editingRecording.value || !editingRecording.value.tags) return; + + // Reorder locally first for immediate visual feedback + const tags = [...editingRecording.value.tags]; + const [removed] = tags.splice(fromIndex, 1); + tags.splice(toIndex, 0, removed); + editingRecording.value.tags = tags; + + // Update in recordings list + const recordingInList = recordings.value.find(r => r.id === editingRecording.value.id); + if (recordingInList && recordingInList !== editingRecording.value) { + recordingInList.tags = [...tags]; + } + + // Update selectedRecording if it matches + if (selectedRecording.value && selectedRecording.value.id === editingRecording.value.id) { + selectedRecording.value.tags = [...tags]; + } + + // Persist to backend + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const tagIds = tags.map(t => t.id); + + const response = await fetch(`/api/recordings/${editingRecording.value.id}/tags/reorder`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify({ tag_ids: tagIds }) + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.error || 'Failed to reorder tags'); + } + + showToast('Tags reordered', 'fa-arrows-alt', 1500, 'success'); + + } catch (error) { + console.error('Error reordering tags:', error); + setGlobalError(`Failed to save tag order: ${error.message}`); + } + }; + + // === MOUSE DRAG HANDLERS (Modal) === + const handleModalTagDragStart = (index, event) => { + modalDraggedTagIndex.value = index; + event.dataTransfer.effectAllowed = 'move'; + event.dataTransfer.setData('text/plain', index.toString()); + }; + + const handleModalTagDragOver = (index, event) => { + event.preventDefault(); + event.dataTransfer.dropEffect = 'move'; + modalDragOverTagIndex.value = index; + }; + + const handleModalTagDrop = (targetIndex, event) => { + event.preventDefault(); + if (modalDraggedTagIndex.value !== null && modalDraggedTagIndex.value !== targetIndex) { + reorderModalTags(modalDraggedTagIndex.value, targetIndex); + } + modalDraggedTagIndex.value = null; + modalDragOverTagIndex.value = null; + }; + + const handleModalTagDragEnd = () => { + modalDraggedTagIndex.value = null; + modalDragOverTagIndex.value = null; + }; + + // === TOUCH HANDLERS (Modal - Mobile) === + let modalTouchStartIndex = null; + + const handleModalTagTouchStart = (index, event) => { + modalTouchStartIndex = index; + modalDraggedTagIndex.value = index; + }; + + const handleModalTagTouchMove = (event) => { + if (modalTouchStartIndex === null) return; + event.preventDefault(); + + const touch = event.touches[0]; + const elementBelow = document.elementFromPoint(touch.clientX, touch.clientY); + const tagElement = elementBelow?.closest('[data-modal-tag-index]'); + + if (tagElement) { + const targetIndex = parseInt(tagElement.dataset.modalTagIndex); + modalDragOverTagIndex.value = targetIndex; + } + }; + + const handleModalTagTouchEnd = () => { + if (modalTouchStartIndex !== null && modalDragOverTagIndex.value !== null && + modalTouchStartIndex !== modalDragOverTagIndex.value) { + reorderModalTags(modalTouchStartIndex, modalDragOverTagIndex.value); + } + modalTouchStartIndex = null; + modalDraggedTagIndex.value = null; + modalDragOverTagIndex.value = null; + }; + + return { + // Computed + filteredAvailableTagsForModal, + + // Methods + getRecordingTags, + getAvailableTagsForRecording, + editRecordingTags, + closeEditTagsModal, + addTagToRecording, + removeTagFromRecording, + + // Modal Tag Drag-and-Drop + modalDraggedTagIndex, + modalDragOverTagIndex, + handleModalTagDragStart, + handleModalTagDragOver, + handleModalTagDrop, + handleModalTagDragEnd, + handleModalTagTouchStart, + handleModalTagTouchMove, + handleModalTagTouchEnd + }; +} diff --git a/static/js/modules/composables/tokens.js b/static/js/modules/composables/tokens.js new file mode 100644 index 0000000..c1d4323 --- /dev/null +++ b/static/js/modules/composables/tokens.js @@ -0,0 +1,286 @@ +/** + * API Tokens Management Composable + * Handles API token operations for user authentication + */ + +const { ref, computed } = Vue; + +export function useTokens({ showToast, setGlobalError }) { + // State + const tokens = ref([]); + const isLoadingTokens = ref(false); + const showCreateTokenModal = ref(false); + const showTokenSecretModal = ref(false); + const newTokenSecret = ref(''); + const newTokenData = ref(null); + const tokenForm = ref({ + name: '', + expires_in_days: 0 // 0 = no expiration + }); + + // Computed + const hasTokens = computed(() => tokens.value.length > 0); + + const activeTokens = computed(() => { + return tokens.value.filter(token => !token.revoked && !isTokenExpired(token)); + }); + + const expiredOrRevokedTokens = computed(() => { + return tokens.value.filter(token => token.revoked || isTokenExpired(token)); + }); + + // Helper methods + const isTokenExpired = (token) => { + if (!token.expires_at) return false; + const expiryDate = new Date(token.expires_at); + return expiryDate < new Date(); + }; + + const formatTokenDate = (dateString) => { + if (!dateString) return 'Never'; + const date = new Date(dateString); + return date.toLocaleDateString() + ' ' + date.toLocaleTimeString(); + }; + + const getTokenStatus = (token) => { + if (token.revoked) return 'revoked'; + if (isTokenExpired(token)) return 'expired'; + return 'active'; + }; + + const getTokenStatusClass = (token) => { + const status = getTokenStatus(token); + const baseClasses = 'px-2 py-1 text-xs font-semibold rounded'; + + switch (status) { + case 'active': + return `${baseClasses} bg-green-100 text-green-800`; + case 'expired': + return `${baseClasses} bg-yellow-100 text-yellow-800`; + case 'revoked': + return `${baseClasses} bg-red-100 text-red-800`; + default: + return `${baseClasses} bg-gray-100 text-gray-800`; + } + }; + + // API methods + const loadTokens = async () => { + isLoadingTokens.value = true; + try { + const response = await fetch('/api/tokens', { + method: 'GET', + headers: { + 'Content-Type': 'application/json' + } + }); + + if (!response.ok) { + throw new Error('Failed to load tokens'); + } + + const data = await response.json(); + tokens.value = data.tokens || []; + } catch (error) { + console.error('Error loading tokens:', error); + setGlobalError('Failed to load API tokens: ' + error.message); + } finally { + isLoadingTokens.value = false; + } + }; + + const createToken = async () => { + if (!tokenForm.value.name || tokenForm.value.name.trim() === '') { + showToast('Please enter a token name', 'error'); + return; + } + + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + + const response = await fetch('/api/tokens', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify({ + name: tokenForm.value.name, + expires_in_days: parseInt(tokenForm.value.expires_in_days) || 0 + }) + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.error || 'Failed to create token'); + } + + const data = await response.json(); + + // Store the plaintext token to show to user (only shown once) + newTokenSecret.value = data.token; + newTokenData.value = { + id: data.id, + name: data.name, + created_at: data.created_at, + expires_at: data.expires_at + }; + + // Add to tokens list (without the plaintext token) + tokens.value.unshift({ + id: data.id, + name: data.name, + created_at: data.created_at, + last_used_at: data.last_used_at, + expires_at: data.expires_at, + revoked: data.revoked + }); + + // Reset form + tokenForm.value = { + name: '', + expires_in_days: 0 + }; + + // Close create modal and show secret modal + showCreateTokenModal.value = false; + showTokenSecretModal.value = true; + + showToast('API token created successfully', 'success'); + } catch (error) { + console.error('Error creating token:', error); + showToast('Failed to create token: ' + error.message, 'error'); + } + }; + + const revokeToken = async (tokenId, tokenName) => { + if (!confirm(`Are you sure you want to revoke the token "${tokenName}"? This action cannot be undone and any applications using this token will lose access.`)) { + return; + } + + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + + const response = await fetch(`/api/tokens/${tokenId}`, { + method: 'DELETE', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + } + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.error || 'Failed to revoke token'); + } + + // Remove from local list + tokens.value = tokens.value.filter(t => t.id !== tokenId); + + showToast('Token revoked successfully', 'success'); + } catch (error) { + console.error('Error revoking token:', error); + showToast('Failed to revoke token: ' + error.message, 'error'); + } + }; + + const updateTokenName = async (tokenId, newName) => { + if (!newName || newName.trim() === '') { + showToast('Token name cannot be empty', 'error'); + return; + } + + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + + const response = await fetch(`/api/tokens/${tokenId}`, { + method: 'PATCH', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify({ name: newName }) + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.error || 'Failed to update token'); + } + + const data = await response.json(); + + // Update local token + const token = tokens.value.find(t => t.id === tokenId); + if (token) { + token.name = data.name; + } + + showToast('Token name updated', 'success'); + } catch (error) { + console.error('Error updating token:', error); + showToast('Failed to update token: ' + error.message, 'error'); + } + }; + + const copyTokenToClipboard = async (token) => { + try { + await navigator.clipboard.writeText(token); + showToast('Token copied to clipboard', 'success'); + } catch (error) { + console.error('Error copying token:', error); + showToast('Failed to copy token to clipboard', 'error'); + } + }; + + const openCreateTokenModal = () => { + tokenForm.value = { + name: '', + expires_in_days: 0 + }; + showCreateTokenModal.value = true; + }; + + const closeCreateTokenModal = () => { + showCreateTokenModal.value = false; + tokenForm.value = { + name: '', + expires_in_days: 0 + }; + }; + + const closeTokenSecretModal = () => { + showTokenSecretModal.value = false; + newTokenSecret.value = ''; + newTokenData.value = null; + }; + + return { + // State + tokens, + isLoadingTokens, + showCreateTokenModal, + showTokenSecretModal, + newTokenSecret, + newTokenData, + tokenForm, + + // Computed + hasTokens, + activeTokens, + expiredOrRevokedTokens, + + // Methods + isTokenExpired, + formatTokenDate, + getTokenStatus, + getTokenStatusClass, + loadTokens, + createToken, + revokeToken, + updateTokenName, + copyTokenToClipboard, + openCreateTokenModal, + closeCreateTokenModal, + closeTokenSecretModal + }; +} diff --git a/static/js/modules/composables/transcription.js b/static/js/modules/composables/transcription.js new file mode 100644 index 0000000..6ac52ad --- /dev/null +++ b/static/js/modules/composables/transcription.js @@ -0,0 +1,484 @@ +/** + * Transcription editing composable + * Handles ASR editor, text editor, and segment management + */ + +export function useTranscription(state, utils) { + const { + showTextEditorModal, showAsrEditorModal, selectedRecording, + editingTranscriptionContent, editingSegments, availableSpeakers, + recordings, dropdownPositions, openAsrDropdownIndex + } = state; + + const { showToast, setGlobalError, nextTick } = utils; + + // ========================================= + // Text Editor Modal + // ========================================= + + const openTranscriptionEditor = () => { + if (!selectedRecording.value || !selectedRecording.value.transcription) { + return; + } + + // Check if transcription is JSON (ASR format) + try { + const parsed = JSON.parse(selectedRecording.value.transcription); + if (Array.isArray(parsed)) { + openAsrEditorModal(); + } else { + openTextEditorModal(); + } + } catch (e) { + // Not JSON, use text editor + openTextEditorModal(); + } + }; + + const openTextEditorModal = () => { + if (!selectedRecording.value) return; + editingTranscriptionContent.value = selectedRecording.value.transcription || ''; + showTextEditorModal.value = true; + }; + + const closeTextEditorModal = () => { + showTextEditorModal.value = false; + editingTranscriptionContent.value = ''; + }; + + const saveTranscription = async () => { + if (!selectedRecording.value) return; + await saveTranscriptionContent(editingTranscriptionContent.value); + closeTextEditorModal(); + }; + + // ========================================= + // ASR Editor Modal + // ========================================= + + // Helper to pause outer audio player when opening modals with their own player + const pauseOuterAudioPlayer = () => { + const outerAudio = document.querySelector('#rightMainColumn audio') || document.querySelector('#rightMainColumn video') || + document.querySelector('.detail-view audio:not(.fixed audio)') || document.querySelector('.detail-view video:not(.fixed video)'); + if (outerAudio && !outerAudio.paused) { + outerAudio.pause(); + } + }; + + const openAsrEditorModal = async () => { + if (!selectedRecording.value) return; + + // Pause outer audio player to avoid conflicts with modal's player + pauseOuterAudioPlayer(); + + try { + const segments = JSON.parse(selectedRecording.value.transcription); + + // Populate available speakers from THIS recording only + const speakersInTranscript = [...new Set(segments.map(s => s.speaker))].sort(); + availableSpeakers.value = speakersInTranscript; + + editingSegments.value = segments.map((s, i) => ({ + ...s, + id: i, + showSuggestions: false, + filteredSpeakers: [...speakersInTranscript] + })); + + showAsrEditorModal.value = true; + + // Reset virtual scroll state for fresh modal render + if (utils.resetAsrEditorScroll) { + utils.resetAsrEditorScroll(); + } + } catch (e) { + console.error("Could not parse transcription as JSON for ASR editor:", e); + setGlobalError("This transcription is not in the correct format for the ASR editor."); + } + }; + + const closeAsrEditorModal = () => { + // Pause any playing modal audio before closing + const modalAudio = document.querySelector('.fixed.z-50 audio') || document.querySelector('.fixed.z-50 video'); + if (modalAudio) { + modalAudio.pause(); + } + // Reset modal audio state (keep main player independent) + if (utils.resetModalAudioState) { + utils.resetModalAudioState(); + } + + showAsrEditorModal.value = false; + editingSegments.value = []; + }; + + const saveAsrTranscription = async () => { + if (!selectedRecording.value) return; + + // Remove extra UI fields and save the rest + const contentToSave = JSON.stringify(editingSegments.value.map(({ id, showSuggestions, filteredSpeakers, ...rest }) => rest)); + + await saveTranscriptionContent(contentToSave); + closeAsrEditorModal(); + }; + + // ========================================= + // Segment Management + // ========================================= + + const adjustTime = (index, field, amount) => { + if (editingSegments.value[index]) { + editingSegments.value[index][field] = Math.max(0, + editingSegments.value[index][field] + amount + ); + } + }; + + const filterSpeakerSuggestions = (index) => { + const segment = editingSegments.value[index]; + if (segment) { + const query = segment.speaker?.toLowerCase() || ''; + if (query === '') { + segment.filteredSpeakers = [...availableSpeakers.value]; + } else { + segment.filteredSpeakers = availableSpeakers.value.filter( + speaker => speaker.toLowerCase().includes(query) + ); + } + } + }; + + // O(1) dropdown management using single ref instead of O(n) forEach + const openSpeakerSuggestions = (index) => { + if (editingSegments.value[index]) { + // Simply set the open index - O(1) instead of O(n) forEach + openAsrDropdownIndex.value = index; + filterSpeakerSuggestions(index); + updateDropdownPosition(index); + } + }; + + const closeSpeakerSuggestions = (index) => { + // Only close if this index is currently open + if (openAsrDropdownIndex.value === index) { + openAsrDropdownIndex.value = null; + } + }; + + const closeAllSpeakerSuggestions = () => { + // O(1) instead of O(n) - just set to null + openAsrDropdownIndex.value = null; + }; + + // Helper to check if a dropdown is open (for template v-if) + const isDropdownOpen = (index) => { + return openAsrDropdownIndex.value === index; + }; + + const getDropdownPosition = (index) => { + const pos = dropdownPositions.value[index]; + if (pos) { + const style = { + left: pos.left + 'px', + width: pos.width + 'px' + }; + + // When opening upward, anchor from bottom so dropdown grows upward + if (pos.openUpward) { + style.bottom = pos.bottom + 'px'; + style.top = 'auto'; + } else { + style.top = pos.top + 'px'; + style.bottom = 'auto'; + } + + // Apply calculated max height + if (pos.maxHeight) { + style.maxHeight = pos.maxHeight + 'px'; + } + return style; + } + return { top: '0px', left: '0px' }; + }; + + const updateDropdownPosition = (index) => { + nextTick(() => { + // Find row by data attribute to work correctly with virtual scrolling + const row = document.querySelector(`.asr-editor-table tbody tr[data-segment-index="${index}"]`); + if (row) { + const cell = row.querySelector('td:first-child'); + if (cell) { + const rect = cell.getBoundingClientRect(); + const viewportHeight = window.innerHeight; + + // Calculate available space above and below + const spaceBelow = viewportHeight - rect.bottom - 10; + const spaceAbove = rect.top - 10; + + // Determine max height based on available space (cap at 192px which is max-h-48) + const maxDropdownHeight = 192; + + let top, bottom, openUpward, maxHeight; + + if (spaceBelow >= maxDropdownHeight || spaceBelow >= spaceAbove) { + // Open downward + top = rect.bottom + 2; + bottom = null; + openUpward = false; + maxHeight = Math.min(spaceBelow, maxDropdownHeight); + } else { + // Open upward - anchor from bottom so dropdown grows upward + openUpward = true; + maxHeight = Math.min(spaceAbove, maxDropdownHeight); + // Bottom is distance from viewport bottom to the top of the cell + bottom = viewportHeight - rect.top + 2; + top = null; + } + + dropdownPositions.value[index] = { + top: top, + bottom: bottom, + left: rect.left, + width: rect.width, + openUpward: openUpward, + maxHeight: maxHeight + }; + } + } + }); + }; + + const selectSpeaker = (index, speaker) => { + if (editingSegments.value[index]) { + editingSegments.value[index].speaker = speaker; + closeSpeakerSuggestions(index); + } + }; + + const addSegment = () => { + const lastSegment = editingSegments.value[editingSegments.value.length - 1]; + const newStart = lastSegment ? lastSegment.end_time : 0; + + editingSegments.value.push({ + speaker: availableSpeakers.value[0] || 'Speaker 1', + start_time: newStart, + end_time: newStart + 5, + sentence: '', + id: editingSegments.value.length, + showSuggestions: false, + filteredSpeakers: [...availableSpeakers.value] + }); + }; + + const removeSegment = (index) => { + editingSegments.value.splice(index, 1); + // Re-index segments + editingSegments.value.forEach((seg, i) => { + seg.id = i; + }); + }; + + const addSegmentBelow = (index) => { + const currentSegment = editingSegments.value[index]; + const nextSegment = editingSegments.value[index + 1]; + + const newStart = currentSegment.end_time; + const newEnd = nextSegment ? nextSegment.start_time : newStart + 5; + + editingSegments.value.splice(index + 1, 0, { + speaker: currentSegment.speaker, + start_time: newStart, + end_time: newEnd, + sentence: '', + id: index + 1, + showSuggestions: false, + filteredSpeakers: [...availableSpeakers.value] + }); + + // Re-index segments + editingSegments.value.forEach((seg, i) => { + seg.id = i; + }); + }; + + const seekToSegmentTime = (time) => { + // Find audio elements and use the one in a visible modal (z-50) + const mediaElements = document.querySelectorAll('.fixed.z-50 audio, .fixed.z-50 video'); + const audioElement = mediaElements.length > 0 ? mediaElements[mediaElements.length - 1] : null; + if (audioElement) { + audioElement.currentTime = time; + audioElement.play(); + } + }; + + const autoResizeTextarea = (event) => { + const textarea = event.target; + textarea.style.height = 'auto'; + textarea.style.height = textarea.scrollHeight + 'px'; + }; + + // ========================================= + // Save Transcription Content + // ========================================= + + const saveTranscriptionContent = async (content) => { + if (!selectedRecording.value) return; + + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const response = await fetch(`/recording/${selectedRecording.value.id}/update_transcription`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify({ transcription: content }) + }); + + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to update transcription'); + + // Update recording + selectedRecording.value.transcription = content; + + const index = recordings.value.findIndex(r => r.id === selectedRecording.value.id); + if (index !== -1) { + recordings.value[index].transcription = content; + } + + showToast('Transcription updated successfully!', 'fa-check-circle'); + } catch (error) { + setGlobalError(`Failed to save transcription: ${error.message}`); + } + }; + + // ========================================= + // Save Summary + // ========================================= + + const saveSummary = async (summary) => { + if (!selectedRecording.value) return; + + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const payload = { + id: selectedRecording.value.id, + title: selectedRecording.value.title, + participants: selectedRecording.value.participants, + notes: selectedRecording.value.notes, + summary: summary, + meeting_date: selectedRecording.value.meeting_date + }; + const response = await fetch('/save', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify(payload) + }); + + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to update summary'); + + // Update recording + selectedRecording.value.summary = summary; + + const index = recordings.value.findIndex(r => r.id === selectedRecording.value.id); + if (index !== -1) { + recordings.value[index].summary = summary; + } + + showToast('Summary saved!', 'fa-check-circle'); + } catch (error) { + setGlobalError(`Failed to save summary: ${error.message}`); + } + }; + + // ========================================= + // Save Notes + // ========================================= + + const saveNotes = async (notes) => { + if (!selectedRecording.value) return; + + // Handle incognito recordings - save to sessionStorage only + if (selectedRecording.value.incognito) { + selectedRecording.value.notes = notes; + // Update sessionStorage + try { + const stored = sessionStorage.getItem('speakr_incognito_recording'); + if (stored) { + const data = JSON.parse(stored); + data.notes = notes; + sessionStorage.setItem('speakr_incognito_recording', JSON.stringify(data)); + } + } catch (e) { + console.error('[Incognito] Failed to save notes to sessionStorage:', e); + } + showToast('Notes saved (in browser only)', 'fa-check-circle'); + return; + } + + try { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const response = await fetch(`/api/recordings/${selectedRecording.value.id}`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken + }, + body: JSON.stringify({ notes }) + }); + + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to update notes'); + + // Update recording + selectedRecording.value.notes = notes; + + const index = recordings.value.findIndex(r => r.id === selectedRecording.value.id); + if (index !== -1) { + recordings.value[index].notes = notes; + } + + showToast('Notes saved!', 'fa-check-circle'); + } catch (error) { + setGlobalError(`Failed to save notes: ${error.message}`); + } + }; + + return { + // Text editor + openTranscriptionEditor, + openTextEditorModal, + closeTextEditorModal, + saveTranscription, + + // ASR editor + openAsrEditorModal, + closeAsrEditorModal, + saveAsrTranscription, + + // Segment management + adjustTime, + filterSpeakerSuggestions, + openSpeakerSuggestions, + closeSpeakerSuggestions, + closeAllSpeakerSuggestions, + isDropdownOpen, + getDropdownPosition, + updateDropdownPosition, + selectSpeaker, + addSegment, + removeSegment, + addSegmentBelow, + seekToSegmentTime, + autoResizeTextarea, + + // Save + saveTranscriptionContent, + saveSummary, + saveNotes + }; +} diff --git a/static/js/modules/composables/ui.js b/static/js/modules/composables/ui.js new file mode 100644 index 0000000..deb54a8 --- /dev/null +++ b/static/js/modules/composables/ui.js @@ -0,0 +1,2110 @@ +/** + * UI management composable + * Handles dark mode, color schemes, sidebar, and other UI state + */ + +export function useUI(state, utils, processedTranscription) { + const { + isDarkMode, currentColorScheme, colorSchemes, isSidebarCollapsed, + showColorSchemeModal, isUserMenuOpen, currentView, selectedRecording, + windowWidth, isMobileScreen, showAdvancedFilters, showSortOptions, + searchTipsExpanded, isMetadataExpanded, editingParticipants, editingMeetingDate, + editingSummary, tempSummaryContent, summaryMarkdownEditorInstance, + leftColumnWidth, rightColumnWidth, isResizing, playerVolume, + audioIsPlaying, audioCurrentTime, audioDuration, audioIsMuted, audioIsLoading, + editingNotes, tempNotesContent, transcriptionViewMode, + notesMarkdownEditor, markdownEditorInstance, autoSaveTimer, csrfToken, + summaryMarkdownEditor, recordingNotesEditor, recordingMarkdownEditorInstance, + recordingNotes, showDownloadMenu, currentPlayingSegmentIndex, followPlayerMode, + playbackRate, showSpeedMenu, playbackSpeeds, modalPlaybackRate, speedMenuPosition, + videoFullscreen, fullscreenControlsVisible, fullscreenControlsTimer, videoCollapsed + } = state; + + const autoSaveDelay = 2000; // 2 seconds + + const { showToast, nextTick, t } = utils; + const { ref, computed, watch } = Vue; + + // isMobile computed + const isMobile = computed(() => windowWidth.value < 768); + + // Toggle dark mode + const toggleDarkMode = () => { + isDarkMode.value = !isDarkMode.value; + localStorage.setItem('darkMode', isDarkMode.value); + + if (isDarkMode.value) { + document.documentElement.classList.add('dark'); + } else { + document.documentElement.classList.remove('dark'); + } + + // Re-apply current color scheme for new mode + applyColorScheme(currentColorScheme.value); + }; + + // Initialize dark mode from storage + const initializeDarkMode = () => { + const savedMode = localStorage.getItem('darkMode'); + if (savedMode !== null) { + isDarkMode.value = savedMode === 'true'; + } else { + // Check system preference + isDarkMode.value = window.matchMedia('(prefers-color-scheme: dark)').matches; + } + + if (isDarkMode.value) { + document.documentElement.classList.add('dark'); + } else { + document.documentElement.classList.remove('dark'); + } + }; + + // Apply a color scheme + const applyColorScheme = (schemeId, mode = null) => { + const targetMode = mode || (isDarkMode.value ? 'dark' : 'light'); + const scheme = colorSchemes[targetMode].find(s => s.id === schemeId); + + if (!scheme) { + console.warn(`Color scheme '${schemeId}' not found for mode '${targetMode}'`); + return; + } + + // Remove all theme classes + const allThemeClasses = [ + ...colorSchemes.light.map(s => s.class), + ...colorSchemes.dark.map(s => s.class) + ].filter(c => c !== ''); + + document.documentElement.classList.remove(...allThemeClasses); + + // Add new theme class if not default + if (scheme.class) { + document.documentElement.classList.add(scheme.class); + } + + currentColorScheme.value = schemeId; + localStorage.setItem('colorScheme', schemeId); + }; + + // Initialize color scheme from storage + const initializeColorScheme = () => { + const savedScheme = localStorage.getItem('colorScheme'); + if (savedScheme) { + applyColorScheme(savedScheme); + } else { + // Apply default scheme + applyColorScheme('blue'); + } + }; + + // Open color scheme modal + const openColorSchemeModal = () => { + showColorSchemeModal.value = true; + isUserMenuOpen.value = false; + }; + + // Close color scheme modal + const closeColorSchemeModal = () => { + showColorSchemeModal.value = false; + }; + + // Select a color scheme + const selectColorScheme = (schemeId) => { + applyColorScheme(schemeId); + showToast(t('messages.colorSchemeApplied'), 'fa-palette'); + }; + + // Reset to default color scheme + const resetColorScheme = () => { + applyColorScheme('blue'); + showToast(t('messages.colorSchemeReset'), 'fa-undo'); + }; + + // Toggle sidebar + const toggleSidebar = () => { + isSidebarCollapsed.value = !isSidebarCollapsed.value; + localStorage.setItem('sidebarCollapsed', isSidebarCollapsed.value); + }; + + // Initialize sidebar state + const initializeSidebar = () => { + const saved = localStorage.getItem('sidebarCollapsed'); + if (saved !== null) { + isSidebarCollapsed.value = saved === 'true'; + } + }; + + // Switch to upload view + const switchToUploadView = () => { + currentView.value = 'upload'; + if (isMobileScreen.value) { + isSidebarCollapsed.value = true; + } + }; + + // Switch to detail view + const switchToDetailView = () => { + currentView.value = 'detail'; + }; + + // Switch to recording view + const switchToRecordingView = () => { + currentView.value = 'recording'; + if (isMobileScreen.value) { + isSidebarCollapsed.value = true; + } + }; + + // Set global error + const setGlobalError = (message, duration = 7000) => { + if (state.globalError) { + state.globalError.value = message; + if (duration > 0) { + setTimeout(() => { + if (state.globalError.value === message) { + state.globalError.value = null; + } + }, duration); + } + } + }; + + // Format file size + const formatFileSize = (bytes) => { + if (!bytes) return '0 B'; + const k = 1024; + const sizes = ['B', 'KB', 'MB', 'GB']; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; + }; + + // Format display date + const formatDisplayDate = (dateString) => { + if (!dateString) return ''; + const date = new Date(dateString); + return date.toLocaleDateString(undefined, { + year: 'numeric', + month: 'short', + day: 'numeric', + hour: '2-digit', + minute: '2-digit' + }); + }; + + // Format short date + const formatShortDate = (dateString) => { + if (!dateString) return ''; + const date = new Date(dateString); + const now = new Date(); + const diff = now - date; + const oneDay = 24 * 60 * 60 * 1000; + + if (diff < oneDay) { + return date.toLocaleTimeString(undefined, { + hour: '2-digit', + minute: '2-digit' + }); + } else if (diff < 7 * oneDay) { + return date.toLocaleDateString(undefined, { + weekday: 'short' + }); + } else { + return date.toLocaleDateString(undefined, { + month: 'short', + day: 'numeric' + }); + } + }; + + // Format status + const formatStatus = (status) => { + if (!status || status === 'COMPLETED') return ''; + const statusMap = { + 'PENDING': t('status.queued'), + 'QUEUED': t('status.queued'), + 'PROCESSING': t('status.processing'), + 'TRANSCRIBING': t('status.transcribing'), + 'SUMMARIZING': t('status.summarizing'), + 'FAILED': t('status.failed'), + 'UPLOADING': t('status.uploading') + }; + return statusMap[status] || status.charAt(0).toUpperCase() + status.slice(1).toLowerCase(); + }; + + // Get status class + const getStatusClass = (status) => { + switch(status) { + case 'PENDING': return 'status-pending'; + case 'QUEUED': return 'status-pending'; + case 'PROCESSING': return 'status-processing'; + case 'SUMMARIZING': return 'status-summarizing'; + case 'COMPLETED': return ''; + case 'FAILED': return 'status-failed'; + default: return 'status-pending'; + } + }; + + // Format time (seconds to HH:MM:SS) + const formatTime = (seconds) => { + if (!seconds && seconds !== 0) return '00:00'; + const h = Math.floor(seconds / 3600); + const m = Math.floor((seconds % 3600) / 60); + const s = Math.floor(seconds % 60); + + if (h > 0) { + return `${h}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`; + } + return `${m}:${s.toString().padStart(2, '0')}`; + }; + + // Format duration in seconds to human readable + const formatDuration = (seconds) => { + if (!seconds && seconds !== 0) return ''; + + const h = Math.floor(seconds / 3600); + const m = Math.floor((seconds % 3600) / 60); + const s = Math.floor(seconds % 60); + + const parts = []; + if (h > 0) parts.push(`${h}h`); + if (m > 0) parts.push(`${m}m`); + if (s > 0 || parts.length === 0) parts.push(`${s}s`); + + return parts.join(' '); + }; + + // Format processing duration + const formatProcessingDuration = (seconds) => { + if (!seconds) return ''; + if (seconds < 60) { + return `${Math.round(seconds)}s`; + } else if (seconds < 3600) { + const m = Math.floor(seconds / 60); + const s = Math.round(seconds % 60); + return `${m}m ${s}s`; + } else { + const h = Math.floor(seconds / 3600); + const m = Math.round((seconds % 3600) / 60); + return `${h}h ${m}m`; + } + }; + + // --- Inline Editing --- + const saveInlineEdit = async (field) => { + if (!selectedRecording.value) return; + + const fullPayload = { + id: selectedRecording.value.id, + title: selectedRecording.value.title, + participants: selectedRecording.value.participants, + notes: selectedRecording.value.notes, + summary: selectedRecording.value.summary, + meeting_date: selectedRecording.value.meeting_date + }; + + try { + const csrfTokenValue = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const response = await fetch('/save', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfTokenValue + }, + body: JSON.stringify(fullPayload) + }); + + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to save metadata'); + + // Update the recording with returned HTML + if (data.recording) { + if (field === 'notes' && data.recording.notes_html) { + selectedRecording.value.notes_html = data.recording.notes_html; + } else if (field === 'summary' && data.recording.summary_html) { + selectedRecording.value.summary_html = data.recording.summary_html; + } + } + } catch (error) { + showToast(t('messages.failedToSave', { error: error.message }), 'fa-exclamation-circle', 3000, 'error'); + } + }; + + const toggleEditParticipants = () => { + editingParticipants.value = !editingParticipants.value; + if (!editingParticipants.value) { + saveInlineEdit('participants'); + } + }; + + const toggleEditMeetingDate = () => { + editingMeetingDate.value = !editingMeetingDate.value; + if (!editingMeetingDate.value) { + saveInlineEdit('meeting_date'); + } + }; + + const toggleEditTitle = () => { + if (!selectedRecording.value) return; + + // Check if user has permission to edit + if (selectedRecording.value.can_edit === false) { + showToast(t('messages.noPermissionToEdit'), 'fa-exclamation-circle', 3000, 'error'); + return; + } + + if (!state.editingTitle.value) { + // Start editing + state.originalTitle.value = selectedRecording.value.title || ''; + state.editingTitle.value = true; + nextTick(() => { + // Focus the input field + const titleInput = document.querySelector('input[ref="titleInput"]'); + if (titleInput) { + titleInput.focus(); + titleInput.select(); + } + }); + } + }; + + const saveTitle = async () => { + if (!selectedRecording.value) return; + + state.editingTitle.value = false; + + // Only save if title changed + if (selectedRecording.value.title !== state.originalTitle.value) { + await saveInlineEdit('title'); + } + }; + + const cancelEditTitle = () => { + if (!selectedRecording.value) return; + + // Restore original title + selectedRecording.value.title = state.originalTitle.value; + state.editingTitle.value = false; + }; + + const toggleEditSummary = () => { + editingSummary.value = !editingSummary.value; + if (editingSummary.value) { + tempSummaryContent.value = selectedRecording.value?.summary || ''; + nextTick(() => { + initializeSummaryMarkdownEditor(); + }); + } + }; + + const cancelEditSummary = () => { + if (summaryMarkdownEditorInstance.value) { + summaryMarkdownEditorInstance.value.toTextArea(); + summaryMarkdownEditorInstance.value = null; + } + editingSummary.value = false; + // Restore original content + if (selectedRecording.value) { + selectedRecording.value.summary = tempSummaryContent.value; + } + }; + + const saveEditSummary = async () => { + if (summaryMarkdownEditorInstance.value) { + selectedRecording.value.summary = summaryMarkdownEditorInstance.value.value(); + summaryMarkdownEditorInstance.value.toTextArea(); + summaryMarkdownEditorInstance.value = null; + } + editingSummary.value = false; + await saveInlineEdit('summary'); + }; + + const initializeSummaryMarkdownEditor = () => { + if (!summaryMarkdownEditor.value) return; + + try { + summaryMarkdownEditorInstance.value = new EasyMDE({ + element: summaryMarkdownEditor.value, + spellChecker: false, + autofocus: true, + placeholder: t('form.enterSummaryMarkdown'), + initialValue: selectedRecording.value?.summary || '', + status: false, + toolbar: [ + "bold", "italic", "heading", "|", + "quote", "unordered-list", "ordered-list", "|", + "link", "image", "|", + "preview", "side-by-side", "fullscreen" + ], + previewClass: ["editor-preview", "notes-preview"], + theme: isDarkMode.value ? "dark" : "light" + }); + + // Add auto-save functionality + summaryMarkdownEditorInstance.value.codemirror.on('change', () => { + if (autoSaveTimer.value) { + clearTimeout(autoSaveTimer.value); + } + autoSaveTimer.value = setTimeout(() => { + autoSaveSummary(); + }, autoSaveDelay); + }); + } catch (error) { + console.error('Failed to initialize summary markdown editor:', error); + editingSummary.value = true; + } + }; + + const autoSaveSummary = async () => { + if (summaryMarkdownEditorInstance.value && editingSummary.value) { + // Just save the content to the model, don't exit edit mode + selectedRecording.value.summary = summaryMarkdownEditorInstance.value.value(); + // Silently save to backend without changing UI state + try { + const payload = { + id: selectedRecording.value.id, + title: selectedRecording.value.title, + participants: selectedRecording.value.participants, + notes: selectedRecording.value.notes, + summary: selectedRecording.value.summary, + meeting_date: selectedRecording.value.meeting_date + }; + const response = await fetch('/save', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken.value + }, + body: JSON.stringify(payload) + }); + const data = await response.json(); + if (response.ok && data.recording) { + // Update the HTML rendered versions if they exist + if (data.recording.summary_html) { + selectedRecording.value.summary_html = data.recording.summary_html; + } + } else { + console.error('Failed to auto-save summary'); + } + } catch (error) { + console.error('Error auto-saving summary:', error); + } + } + }; + + const toggleTranscriptionViewMode = () => { + transcriptionViewMode.value = transcriptionViewMode.value === 'simple' ? 'bubble' : 'simple'; + localStorage.setItem('transcriptionViewMode', transcriptionViewMode.value); + }; + + const toggleEditNotes = () => { + editingNotes.value = !editingNotes.value; + if (editingNotes.value) { + tempNotesContent.value = selectedRecording.value?.notes || ''; + // Initialize markdown editor when entering edit mode + nextTick(() => { + initializeMarkdownEditor(); + }); + } + }; + + const cancelEditNotes = () => { + if (markdownEditorInstance.value) { + markdownEditorInstance.value.toTextArea(); + markdownEditorInstance.value = null; + } + editingNotes.value = false; + // Restore original content + if (selectedRecording.value) { + selectedRecording.value.notes = tempNotesContent.value; + } + }; + + const saveEditNotes = async () => { + if (markdownEditorInstance.value) { + // Get the markdown content from the editor + selectedRecording.value.notes = markdownEditorInstance.value.value(); + markdownEditorInstance.value.toTextArea(); + markdownEditorInstance.value = null; + } + editingNotes.value = false; + await saveInlineEdit('notes'); + }; + + const initializeMarkdownEditor = () => { + if (!notesMarkdownEditor.value) return; + + try { + markdownEditorInstance.value = new EasyMDE({ + element: notesMarkdownEditor.value, + spellChecker: false, + autofocus: true, + placeholder: t('form.enterNotesMarkdown'), + initialValue: selectedRecording.value?.notes || '', + status: false, + toolbar: [ + "bold", "italic", "heading", "|", + "quote", "unordered-list", "ordered-list", "|", + "link", "image", "|", + "preview", "side-by-side", "fullscreen" + ], + previewClass: ["editor-preview", "notes-preview"], + theme: isDarkMode.value ? "dark" : "light" + }); + + // Add auto-save functionality + markdownEditorInstance.value.codemirror.on('change', () => { + if (autoSaveTimer.value) { + clearTimeout(autoSaveTimer.value); + } + autoSaveTimer.value = setTimeout(() => { + autoSaveNotes(); + }, autoSaveDelay); + }); + } catch (error) { + console.error('Failed to initialize markdown editor:', error); + // Fallback to regular textarea editing + editingNotes.value = true; + } + }; + + const autoSaveNotes = async () => { + if (markdownEditorInstance.value && editingNotes.value) { + // Just save the content to the model, don't exit edit mode + selectedRecording.value.notes = markdownEditorInstance.value.value(); + // Silently save to backend without changing UI state + try { + const payload = { + id: selectedRecording.value.id, + title: selectedRecording.value.title, + participants: selectedRecording.value.participants, + notes: selectedRecording.value.notes, + summary: selectedRecording.value.summary, + meeting_date: selectedRecording.value.meeting_date + }; + const response = await fetch('/save', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken.value + }, + body: JSON.stringify(payload) + }); + const data = await response.json(); + if (response.ok && data.recording) { + // Update the HTML rendered versions if they exist + if (data.recording.notes_html) { + selectedRecording.value.notes_html = data.recording.notes_html; + } + } else { + console.error('Failed to auto-save notes'); + } + } catch (error) { + console.error('Error auto-saving notes:', error); + } + } + }; + + const clickToEditNotes = () => { + // Allow clicking on empty notes area to start editing + if (!editingNotes.value && (!selectedRecording.value?.notes || selectedRecording.value.notes.trim() === '')) { + toggleEditNotes(); + } + }; + + const clickToEditSummary = () => { + // Allow clicking on empty summary area to start editing + if (!editingSummary.value && (!selectedRecording.value?.summary || selectedRecording.value.summary.trim() === '')) { + toggleEditSummary(); + } + }; + + const downloadNotes = async () => { + if (!selectedRecording.value || !selectedRecording.value.notes) { + showToast(t('messages.noNotesAvailableDownload'), 'fa-exclamation-circle'); + return; + } + + try { + const response = await fetch(`/recording/${selectedRecording.value.id}/download/notes`); + if (!response.ok) { + const error = await response.json(); + showToast(error.error || t('messages.notesDownloadFailed'), 'fa-exclamation-circle'); + return; + } + + // Create blob and download + const blob = await response.blob(); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `${selectedRecording.value.title || 'notes'}.md`; + document.body.appendChild(a); + a.click(); + window.URL.revokeObjectURL(url); + document.body.removeChild(a); + + showToast(t('messages.notesDownloadSuccess')); + } catch (error) { + showToast(t('messages.notesDownloadFailed'), 'fa-exclamation-circle'); + } + }; + + const downloadEventICS = async (event) => { + if (!event || !event.id) { + showToast(t('messages.invalidEventData'), 'fa-exclamation-circle'); + return; + } + + try { + const response = await fetch(`/api/event/${event.id}/ics`); + if (!response.ok) { + const error = await response.json(); + showToast(error.error || t('messages.eventDownloadFailed'), 'fa-exclamation-circle'); + return; + } + + // Create blob and download + const blob = await response.blob(); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.style.display = 'none'; + a.href = url; + a.download = `${event.title || 'event'}.ics`; + document.body.appendChild(a); + a.click(); + window.URL.revokeObjectURL(url); + document.body.removeChild(a); + + showToast(t('messages.eventDownloadSuccess', { title: event.title }), 'fa-calendar-check', 3000); + } catch (error) { + console.error('Download failed:', error); + showToast(t('messages.eventDownloadFailed'), 'fa-exclamation-circle'); + } + }; + + const downloadICS = async () => { + if (!selectedRecording.value || !selectedRecording.value.events || selectedRecording.value.events.length === 0) { + showToast(t('messages.noEventsToExport'), 'fa-exclamation-circle'); + return; + } + + try { + const response = await fetch(`/api/recording/${selectedRecording.value.id}/events/ics`); + if (!response.ok) { + const error = await response.json(); + showToast(error.error || t('messages.eventsExportFailed'), 'fa-exclamation-circle'); + return; + } + + // Create blob and download + const blob = await response.blob(); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.style.display = 'none'; + a.href = url; + a.download = `events-${selectedRecording.value.title || selectedRecording.value.id}.ics`; + document.body.appendChild(a); + a.click(); + window.URL.revokeObjectURL(url); + document.body.removeChild(a); + + showToast(t('messages.eventsExportSuccess', { count: selectedRecording.value.events.length }), 'fa-calendar-check'); + } catch (error) { + console.error('Download all events ICS error:', error); + showToast(t('messages.eventsExportFailed'), 'fa-exclamation-circle'); + } + }; + + const deleteEvent = async (event) => { + if (!event || !event.id) { + showToast(t('messages.invalidEventData'), 'fa-exclamation-circle'); + return; + } + + // Confirm deletion + if (!confirm(t('events.confirmDelete', { title: event.title }) || `Delete event "${event.title}"?`)) { + return; + } + + try { + const response = await fetch(`/api/event/${event.id}`, { + method: 'DELETE', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': document.querySelector('meta[name="csrf-token"]')?.content || '' + } + }); + + if (!response.ok) { + const error = await response.json(); + showToast(error.error || t('events.deleteFailed') || 'Failed to delete event', 'fa-exclamation-circle'); + return; + } + + // Remove event from local state + if (selectedRecording.value && selectedRecording.value.events) { + selectedRecording.value.events = selectedRecording.value.events.filter(e => e.id !== event.id); + } + + showToast(t('events.deleted') || 'Event deleted', 'fa-check-circle'); + } catch (error) { + console.error('Delete event failed:', error); + showToast(t('events.deleteFailed') || 'Failed to delete event', 'fa-exclamation-circle'); + } + }; + + const formatEventDateTime = (dateTimeStr) => { + if (!dateTimeStr) return ''; + try { + const date = new Date(dateTimeStr); + const options = { + weekday: 'short', + year: 'numeric', + month: 'short', + day: 'numeric', + hour: '2-digit', + minute: '2-digit' + }; + return date.toLocaleString(undefined, options); + } catch (e) { + return dateTimeStr; + } + }; + + // --- Column Resizing --- + const startColumnResize = (event) => { + isResizing.value = true; + const startX = event.clientX; + const startLeftWidth = leftColumnWidth.value; + + const handleMouseMove = (e) => { + if (!isResizing.value) return; + + const container = document.getElementById('mainContentColumns'); + if (!container) return; + + const containerRect = container.getBoundingClientRect(); + const deltaX = e.clientX - startX; + const containerWidth = containerRect.width; + const deltaPercent = (deltaX / containerWidth) * 100; + + let newLeftWidth = startLeftWidth + deltaPercent; + newLeftWidth = Math.max(20, Math.min(80, newLeftWidth)); + + leftColumnWidth.value = newLeftWidth; + rightColumnWidth.value = 100 - newLeftWidth; + }; + + const handleMouseUp = () => { + isResizing.value = false; + document.removeEventListener('mousemove', handleMouseMove); + document.removeEventListener('mouseup', handleMouseUp); + + localStorage.setItem('transcriptColumnWidth', leftColumnWidth.value); + localStorage.setItem('summaryColumnWidth', rightColumnWidth.value); + }; + + document.addEventListener('mousemove', handleMouseMove); + document.addEventListener('mouseup', handleMouseUp); + event.preventDefault(); + }; + + // --- Audio Player --- + const seekAudio = (time, context = 'main') => { + let audioPlayer = null; + if (context === 'modal') { + audioPlayer = document.querySelector('audio.speaker-modal-transcript') || document.querySelector('video.speaker-modal-transcript'); + } else { + audioPlayer = document.querySelector('.main-content-area audio') || document.querySelector('.main-content-area video'); + } + + if (!audioPlayer) { + audioPlayer = document.querySelector('audio') || document.querySelector('video'); + } + + if (audioPlayer && isFinite(time)) { + const wasPlaying = !audioPlayer.paused; + try { + audioPlayer.currentTime = time; + if (wasPlaying) { + audioPlayer.play().catch(e => console.warn('Play after seek failed:', e)); + } + } catch (e) { + console.warn('Seek failed:', e); + } + } + }; + + const seekAudioFromEvent = (event) => { + const segmentElement = event.target.closest('[data-start-time]'); + if (!segmentElement) return; + + const time = parseFloat(segmentElement.dataset.startTime); + if (isNaN(time)) return; + + const isInSpeakerModal = event.target.closest('.speaker-modal-transcript') !== null; + const context = isInSpeakerModal ? 'modal' : 'main'; + + seekAudio(time, context); + }; + + const onPlayerVolumeChange = (event) => { + const newVolume = event.target.volume; + playerVolume.value = newVolume; + localStorage.setItem('playerVolume', newVolume); + }; + + // --- Custom Audio Player Controls --- + const getAudioElement = () => { + // First check fullscreen overlay (teleported to body) + const fullscreenMedia = document.querySelector('.video-fullscreen-overlay video'); + if (fullscreenMedia) return fullscreenMedia; + // Then check for audio/video in visible modals (z-50 class) - these take priority + const modalMedia = document.querySelector('.fixed.z-50 audio') || document.querySelector('.fixed.z-50 video'); + if (modalMedia) { + return modalMedia; + } + // Fall back to main player in right column (desktop) or detail view (mobile) + return document.querySelector('#rightMainColumn audio') || + document.querySelector('#rightMainColumn video') || + document.querySelector('.detail-view audio') || + document.querySelector('.detail-view video') || + document.querySelector('audio') || + document.querySelector('video'); + }; + + const toggleAudioPlayback = () => { + const audio = getAudioElement(); + if (!audio) return; + + if (audio.paused) { + audio.play(); + } else { + audio.pause(); + } + }; + + const toggleAudioMute = () => { + const audio = getAudioElement(); + if (!audio) return; + + audio.muted = !audio.muted; + audioIsMuted.value = audio.muted; + }; + + const setAudioVolume = (volume) => { + const audio = getAudioElement(); + if (!audio) return; + + audio.volume = Math.max(0, Math.min(1, volume)); + playerVolume.value = audio.volume; + localStorage.setItem('playerVolume', audio.volume); + + if (audio.volume === 0) { + audio.muted = true; + audioIsMuted.value = true; + } else if (audio.muted) { + audio.muted = false; + audioIsMuted.value = false; + } + }; + + const seekAudioTo = (time) => { + const audio = getAudioElement(); + if (!audio || !isFinite(time)) return; + + // Use our tracked duration (server-side) as fallback if browser duration is broken + const maxTime = audioDuration.value || (isFinite(audio.duration) ? audio.duration : time); + try { + audio.currentTime = Math.max(0, Math.min(time, maxTime)); + } catch (e) { + console.warn('Seek failed:', e); + } + }; + + const seekAudioByPercent = (percent) => { + const audio = getAudioElement(); + // Use our tracked duration (server-side) which works for WebM files without duration metadata + const dur = audioDuration.value || audio?.duration; + if (!audio || !dur || !isFinite(dur)) return; + + const time = (percent / 100) * dur; + try { + audio.currentTime = time; + } catch (e) { + console.warn('Seek by percent failed:', e); + } + }; + + // Progress bar drag state + const isDraggingProgress = ref(false); + const dragPreviewPercent = ref(0); + + // Handle progress bar drag - supports both mouse and touch, only seeks on release + const startProgressDrag = (event) => { + const bar = event.currentTarget.querySelector('.progress-track') || event.currentTarget.querySelector('.h-2') || event.currentTarget; + const rect = bar.getBoundingClientRect(); + const isTouch = event.type === 'touchstart'; + + const getPercent = (evt) => { + const clientX = isTouch ? evt.touches[0].clientX : evt.clientX; + return Math.max(0, Math.min(100, ((clientX - rect.left) / rect.width) * 100)); + }; + + const getPercentFromEnd = (evt) => { + const clientX = isTouch ? evt.changedTouches[0].clientX : evt.clientX; + return Math.max(0, Math.min(100, ((clientX - rect.left) / rect.width) * 100)); + }; + + // Start dragging - show preview + isDraggingProgress.value = true; + dragPreviewPercent.value = getPercent(event); + + const onMove = (evt) => { + evt.preventDefault(); + const clientX = isTouch ? evt.touches[0].clientX : evt.clientX; + dragPreviewPercent.value = Math.max(0, Math.min(100, ((clientX - rect.left) / rect.width) * 100)); + }; + + const onUp = (evt) => { + document.removeEventListener(isTouch ? 'touchmove' : 'mousemove', onMove); + document.removeEventListener(isTouch ? 'touchend' : 'mouseup', onUp); + // Seek to final position on release + seekAudioByPercent(dragPreviewPercent.value); + isDraggingProgress.value = false; + }; + + document.addEventListener(isTouch ? 'touchmove' : 'mousemove', onMove, { passive: false }); + document.addEventListener(isTouch ? 'touchend' : 'mouseup', onUp); + }; + + const handleAudioPlayPause = (event) => { + audioIsPlaying.value = !event.target.paused; + }; + + const handleAudioLoadedMetadata = (event) => { + const duration = event.target.duration; + // Only set browser duration if we don't already have a server-side duration + // Server-side duration (from ffprobe) is more reliable for formats like WebM + if (!audioDuration.value || audioDuration.value === 0) { + if (duration && isFinite(duration) && duration > 0) { + audioDuration.value = duration; + } + } + audioIsLoading.value = false; + + // Apply saved playback rate when audio loads + if (playbackRate.value !== 1) { + event.target.playbackRate = playbackRate.value; + } + }; + + const handleAudioEnded = () => { + audioIsPlaying.value = false; + audioCurrentTime.value = 0; + }; + + const handleCustomAudioTimeUpdate = (event) => { + audioCurrentTime.value = event.target.currentTime; + + // Fallback: if duration wasn't set yet, try to get it now + if (!audioDuration.value || audioDuration.value === 0) { + const duration = event.target.duration; + if (duration && isFinite(duration) && duration > 0) { + audioDuration.value = duration; + } + } + + // Also call the existing handler for segment tracking + handleAudioTimeUpdate(event); + }; + + const handleAudioWaiting = () => { + audioIsLoading.value = true; + }; + + const handleAudioCanPlay = (event) => { + audioIsLoading.value = false; + + // Fallback: try to get duration if not set yet + if (!audioDuration.value || audioDuration.value === 0) { + const duration = event.target.duration; + if (duration && isFinite(duration) && duration > 0) { + audioDuration.value = duration; + } + } + }; + + const handleAudioDurationChange = (event) => { + // WebM and some other formats may initially report Infinity duration + // This handler catches when the actual duration becomes available + // Only set if we don't already have a server-side duration + if (!audioDuration.value || audioDuration.value === 0) { + const duration = event.target.duration; + if (duration && isFinite(duration) && duration > 0) { + audioDuration.value = duration; + } + } + }; + + const formatAudioTime = (seconds) => { + if (!seconds || isNaN(seconds)) return '0:00'; + const mins = Math.floor(seconds / 60); + const secs = Math.floor(seconds % 60); + return `${mins}:${secs.toString().padStart(2, '0')}`; + }; + + // --- Playback Speed Control --- + const formatPlaybackRate = (rate) => { + if (rate === 1) return '1x'; + if (rate === Math.floor(rate)) return `${rate}x`; + return `${rate}x`; + }; + + const setPlaybackRate = (rate) => { + playbackRate.value = rate; + localStorage.setItem('playbackRate', rate); + + // Apply to all audio and video elements + document.querySelectorAll('audio, video').forEach(el => { + el.playbackRate = rate; + }); + }; + + const cyclePlaybackRate = () => { + const currentIndex = playbackSpeeds.indexOf(playbackRate.value); + const nextIndex = (currentIndex + 1) % playbackSpeeds.length; + setPlaybackRate(playbackSpeeds[nextIndex]); + }; + + const cycleModalPlaybackRate = () => { + const currentIndex = playbackSpeeds.indexOf(modalPlaybackRate.value); + const nextIndex = (currentIndex + 1) % playbackSpeeds.length; + modalPlaybackRate.value = playbackSpeeds[nextIndex]; + + // Apply to modal audio elements + const modalAudio = document.querySelector('.speaker-modal-transcript')?.closest('.fixed')?.querySelector('audio') || + document.querySelector('.speaker-modal-transcript')?.closest('.fixed')?.querySelector('video') || + document.querySelector('[ref="speakerModalAudioRef"]') || + document.querySelector('[ref="asrEditorAudioRef"]'); + if (modalAudio) { + modalAudio.playbackRate = modalPlaybackRate.value; + } + }; + + const initializePlaybackRate = () => { + const savedRate = localStorage.getItem('playbackRate'); + if (savedRate) { + const rate = parseFloat(savedRate); + if (playbackSpeeds.includes(rate)) { + playbackRate.value = rate; + } + } + }; + + const updateSpeedMenuPosition = (buttonEl) => { + if (!buttonEl) return; + const rect = buttonEl.getBoundingClientRect(); + const menuWidth = 52; + const menuMaxHeight = 160; + const gap = 4; + const safeZone = 60; // Account for header/navbar + + // Check available space above and below + const spaceAbove = rect.top - safeZone; + const spaceBelow = window.innerHeight - rect.bottom - 8; + + // Decide direction: prefer above, but use below if not enough space + const showBelow = spaceAbove < menuMaxHeight && spaceBelow > spaceAbove; + + const right = window.innerWidth - rect.right; + + if (showBelow) { + // Position below the button + speedMenuPosition.value = { + right: `${Math.max(8, right)}px`, + top: `${rect.bottom + gap}px`, + bottom: 'auto', + maxHeight: `${Math.min(menuMaxHeight, spaceBelow)}px` + }; + } else { + // Position above the button + speedMenuPosition.value = { + right: `${Math.max(8, right)}px`, + bottom: `${window.innerHeight - rect.top + gap}px`, + top: 'auto', + maxHeight: `${Math.min(menuMaxHeight, spaceAbove)}px` + }; + } + }; + + const audioProgressPercent = computed(() => { + // Use preview position while dragging for smooth UI + if (isDraggingProgress.value) { + return dragPreviewPercent.value; + } + if (!audioDuration.value) return 0; + return (audioCurrentTime.value / audioDuration.value) * 100; + }); + + // Preview time display while dragging + const displayCurrentTime = computed(() => { + if (isDraggingProgress.value && audioDuration.value) { + return (dragPreviewPercent.value / 100) * audioDuration.value; + } + return audioCurrentTime.value; + }); + + // Reset audio player state (called when recording changes) + const resetAudioPlayerState = () => { + audioIsPlaying.value = false; + audioCurrentTime.value = 0; + audioDuration.value = 0; + audioIsMuted.value = false; + audioIsLoading.value = false; + }; + + // --- Active Segment Tracking --- + + // Binary search to find the segment containing the current time + // Returns the index of the last segment where startTime <= currentTime + // O(log n) instead of O(n) - critical for long transcriptions (4500+ segments) + const binarySearchSegment = (segments, currentTime) => { + if (segments.length === 0) return null; + + let low = 0; + let high = segments.length - 1; + let result = null; + + while (low <= high) { + const mid = Math.floor((low + high) / 2); + const startTime = segments[mid].startTime || segments[mid].start_time; + + if (startTime === undefined) { + // Skip segments without timing info + high = mid - 1; + continue; + } + + if (startTime <= currentTime) { + result = mid; // This segment is a candidate + low = mid + 1; // Look for later segments that might also match + } else { + high = mid - 1; // Current time is before this segment + } + } + + return result; + }; + + const handleAudioTimeUpdate = (event) => { + const transcription = processedTranscription.value; + + if (!transcription || !transcription.isJson) { + return; + } + + const audioElement = event.target; + const currentTime = audioElement.currentTime; + + // Find the segment that contains the current time + const segments = transcription.simpleSegments || []; + + if (segments.length === 0) { + return; + } + + // Find the active segment index using binary search - O(log n) + const activeIndex = binarySearchSegment(segments, currentTime); + + // Only update if changed + if (activeIndex !== currentPlayingSegmentIndex.value) { + currentPlayingSegmentIndex.value = activeIndex; + + // Scroll to active segment if follow mode is enabled + if (followPlayerMode.value && activeIndex !== null) { + scrollToActiveSegment(activeIndex); + } + } + }; + + const scrollToActiveSegment = (segmentIndex) => { + // Find the active segment element + const segments = document.querySelectorAll('.transcript-segment[data-segment-index], .speaker-segment[data-segment-index], .speaker-bubble[data-segment-index]'); + if (segments[segmentIndex]) { + segments[segmentIndex].scrollIntoView({ + behavior: 'smooth', + block: 'center' + }); + } + }; + + const toggleFollowPlayerMode = () => { + followPlayerMode.value = !followPlayerMode.value; + localStorage.setItem('followPlayerMode', followPlayerMode.value); + + if (followPlayerMode.value) { + showToast(t('messages.followPlayerEnabled'), 'fa-link'); + // Scroll to current position if we have an active segment + if (currentPlayingSegmentIndex.value !== null) { + scrollToActiveSegment(currentPlayingSegmentIndex.value); + } + } else { + showToast(t('messages.followPlayerDisabled'), 'fa-unlink'); + } + }; + + // --- Video Fullscreen --- + const handleFullscreenKeydown = (e) => { + if (e.key === 'Escape' || e.key === 'f') { + exitVideoFullscreen(); + } else if (e.key === ' ' || e.key === 'k') { + e.preventDefault(); + toggleAudioPlayback(); + } else if (e.key === 'ArrowLeft') { + e.preventDefault(); + seekAudioTo(audioCurrentTime.value - 10); + } else if (e.key === 'ArrowRight') { + e.preventDefault(); + seekAudioTo(audioCurrentTime.value + 10); + } else if (e.key === 'ArrowUp') { + e.preventDefault(); + const audio = getAudioElement(); + if (audio) setAudioVolume(Math.min(1, audio.volume + 0.1)); + } else if (e.key === 'ArrowDown') { + e.preventDefault(); + const audio = getAudioElement(); + if (audio) setAudioVolume(Math.max(0, audio.volume - 0.1)); + } + }; + + const resetFullscreenControlsTimer = () => { + fullscreenControlsVisible.value = true; + if (fullscreenControlsTimer.value) { + clearTimeout(fullscreenControlsTimer.value); + } + fullscreenControlsTimer.value = setTimeout(() => { + if (audioIsPlaying.value) { + fullscreenControlsVisible.value = false; + } + }, 3000); + }; + + const handleFullscreenMouseMove = () => { + resetFullscreenControlsTimer(); + }; + + const enterVideoFullscreen = () => { + videoFullscreen.value = true; + videoCollapsed.value = false; + fullscreenControlsVisible.value = true; + resetFullscreenControlsTimer(); + document.addEventListener('keydown', handleFullscreenKeydown); + document.body.style.overflow = 'hidden'; + }; + + const exitVideoFullscreen = () => { + videoFullscreen.value = false; + fullscreenControlsVisible.value = true; + if (fullscreenControlsTimer.value) { + clearTimeout(fullscreenControlsTimer.value); + fullscreenControlsTimer.value = null; + } + document.removeEventListener('keydown', handleFullscreenKeydown); + document.body.style.overflow = ''; + }; + + // --- Copy Functions --- + const animateCopyButton = (button) => { + if (!button) return; + const icon = button.querySelector('i'); + if (icon) { + const originalClass = icon.className; + icon.className = 'fas fa-check'; + setTimeout(() => { + icon.className = originalClass; + }, 2000); + } + }; + + const fallbackCopyTextToClipboard = (text) => { + const textArea = document.createElement('textarea'); + textArea.value = text; + textArea.style.position = 'fixed'; + textArea.style.left = '-999999px'; + document.body.appendChild(textArea); + textArea.select(); + try { + document.execCommand('copy'); + showToast(t('messages.copiedSuccessfully')); + } catch (err) { + showToast(t('messages.copyFailed'), 'fa-exclamation-circle'); + } + document.body.removeChild(textArea); + }; + + const copyTranscription = (event) => { + if (!selectedRecording.value || !selectedRecording.value.transcription) { + showToast(t('messages.noTranscriptionToCopy'), 'fa-exclamation-circle'); + return; + } + + const button = event?.currentTarget; + let textToCopy = ''; + + try { + const transcriptionData = JSON.parse(selectedRecording.value.transcription); + if (Array.isArray(transcriptionData)) { + const wasDiarized = transcriptionData.some(segment => segment.speaker); + if (wasDiarized) { + textToCopy = transcriptionData.map(segment => { + return `[${segment.speaker}]: ${segment.text || segment.sentence}`; + }).join('\n'); + } else { + textToCopy = transcriptionData.map(segment => segment.text || segment.sentence).join('\n'); + } + } else { + textToCopy = selectedRecording.value.transcription; + } + } catch (e) { + textToCopy = selectedRecording.value.transcription; + } + + animateCopyButton(button); + + if (navigator.clipboard && window.isSecureContext) { + navigator.clipboard.writeText(textToCopy) + .then(() => showToast(t('messages.transcriptionCopied'))) + .catch(() => fallbackCopyTextToClipboard(textToCopy)); + } else { + fallbackCopyTextToClipboard(textToCopy); + } + }; + + const copySummary = (event) => { + if (!selectedRecording.value || !selectedRecording.value.summary) { + showToast(t('messages.noSummaryToCopy'), 'fa-exclamation-circle'); + return; + } + const button = event?.currentTarget; + animateCopyButton(button); + + if (navigator.clipboard && window.isSecureContext) { + navigator.clipboard.writeText(selectedRecording.value.summary) + .then(() => showToast(t('messages.summaryCopied'))) + .catch(() => fallbackCopyTextToClipboard(selectedRecording.value.summary)); + } else { + fallbackCopyTextToClipboard(selectedRecording.value.summary); + } + }; + + const copyNotes = (event) => { + if (!selectedRecording.value || !selectedRecording.value.notes) { + showToast(t('messages.noNotesToCopy'), 'fa-exclamation-circle'); + return; + } + const button = event?.currentTarget; + animateCopyButton(button); + + if (navigator.clipboard && window.isSecureContext) { + navigator.clipboard.writeText(selectedRecording.value.notes) + .then(() => showToast(t('messages.notesCopied'))) + .catch(() => fallbackCopyTextToClipboard(selectedRecording.value.notes)); + } else { + fallbackCopyTextToClipboard(selectedRecording.value.notes); + } + }; + + // --- Download Functions --- + const downloadSummary = async () => { + if (!selectedRecording.value || !selectedRecording.value.summary) { + showToast(t('messages.noSummaryToDownload'), 'fa-exclamation-circle'); + return; + } + + try { + const response = await fetch(`/recording/${selectedRecording.value.id}/download/summary`); + if (!response.ok) { + const error = await response.json(); + showToast(error.error || t('messages.summaryDownloadFailed'), 'fa-exclamation-circle'); + return; + } + + const blob = await response.blob(); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.style.display = 'none'; + a.href = url; + + const contentDisposition = response.headers.get('Content-Disposition'); + let filename = 'summary.docx'; + if (contentDisposition) { + const utf8Match = /filename\*=utf-8''(.+)/.exec(contentDisposition); + if (utf8Match) { + filename = decodeURIComponent(utf8Match[1]); + } else { + const regularMatch = /filename="(.+)"/.exec(contentDisposition); + if (regularMatch) { + filename = regularMatch[1]; + } + } + } + a.download = filename; + + document.body.appendChild(a); + a.click(); + window.URL.revokeObjectURL(url); + document.body.removeChild(a); + + showToast(t('messages.summaryDownloadSuccess')); + } catch (error) { + showToast(t('messages.summaryDownloadFailed'), 'fa-exclamation-circle'); + } + }; + + + const downloadTranscriptWord = async () => { + if (!selectedRecording.value || !selectedRecording.value.transcription) { + showToast(t('messages.noTranscriptionToDownload'), 'fa-exclamation-circle'); + return; + } + + try { + const response = await fetch(`/recording/${selectedRecording.value.id}/download/transcript/word`); + if (!response.ok) { + const error = await response.json(); + showToast(error.error || 'Erreur lors du téléchargement Word', 'fa-exclamation-circle'); + return; + } + + const blob = await response.blob(); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.style.display = 'none'; + a.href = url; + + const contentDisposition = response.headers.get('Content-Disposition'); + let filename = 'transcript.docx'; + if (contentDisposition) { + const utf8Match = /filename\*=utf-8''(.+)/.exec(contentDisposition); + if (utf8Match) { + filename = decodeURIComponent(utf8Match[1]); + } else { + const regularMatch = /filename="(.+)"/.exec(contentDisposition); + if (regularMatch) { + filename = regularMatch[1]; + } + } + } + a.download = filename; + document.body.appendChild(a); + a.click(); + window.URL.revokeObjectURL(url); + document.body.removeChild(a); + + showToast('Transcription Word téléchargée !'); + } catch (error) { + showToast('Erreur lors du téléchargement Word', 'fa-exclamation-circle'); + } + }; + + const downloadTranscript = async () => { + if (!selectedRecording.value || !selectedRecording.value.transcription) { + showToast(t('messages.noTranscriptionToDownload'), 'fa-exclamation-circle'); + return; + } + + try { + // First, fetch available templates + const templatesResponse = await fetch('/api/transcript-templates'); + let templates = []; + if (templatesResponse.ok) { + templates = await templatesResponse.json(); + } + + // If there are templates, show a selection dialog + let templateId = null; + if (templates.length > 0) { + // Create a simple modal for template selection + const modal = document.createElement('div'); + modal.className = 'fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50'; + modal.innerHTML = ` + <div class="bg-[var(--bg-secondary)] rounded-lg p-6 max-w-md w-full mx-4"> + <h3 class="text-lg font-semibold mb-4">${t('transcriptTemplates.selectTemplate')}</h3> + <div class="space-y-2 max-h-60 overflow-y-auto"> + ${templates.map(tmpl => ` + <button class="template-option w-full text-left p-3 rounded border border-[var(--border-primary)] hover:bg-[var(--bg-tertiary)] ${tmpl.is_default ? 'ring-2 ring-[var(--ring-focus)]' : ''}" data-template-id="${tmpl.id}"> + <div class="font-medium">${tmpl.name}</div> + ${tmpl.description ? `<div class="text-sm text-[var(--text-muted)]">${tmpl.description}</div>` : ''} + ${tmpl.is_default ? `<div class="text-xs text-[var(--text-accent)] mt-1"><i class="fas fa-star mr-1"></i>${t('transcriptTemplates.default')}</div>` : ''} + </button> + `).join('')} + </div> + <div class="mt-4 flex gap-2"> + <button class="cancel-btn px-4 py-2 bg-[var(--bg-tertiary)] text-[var(--text-secondary)] rounded hover:bg-[var(--bg-accent-light)]">${t('transcriptTemplates.cancel')}</button> + <button class="download-without-template-btn px-4 py-2 bg-[var(--bg-accent)] text-white rounded hover:bg-[var(--bg-accent-hover)]">${t('transcriptTemplates.downloadWithoutTemplate')}</button> + </div> + </div> + `; + document.body.appendChild(modal); + + // Wait for user selection + await new Promise((resolve) => { + modal.querySelectorAll('.template-option').forEach(btn => { + btn.addEventListener('click', () => { + templateId = btn.dataset.templateId; + modal.remove(); + resolve(); + }); + }); + + modal.querySelector('.cancel-btn').addEventListener('click', () => { + templateId = 'cancelled'; + modal.remove(); + resolve(); + }); + + modal.querySelector('.download-without-template-btn').addEventListener('click', () => { + templateId = 'none'; + modal.remove(); + resolve(); + }); + + modal.addEventListener('click', (e) => { + if (e.target === modal) { + templateId = 'cancelled'; + modal.remove(); + resolve(); + } + }); + }); + + if (templateId === null || templateId === undefined || templateId === 'cancelled') { + return; + } + } + + // If templateId is 'none', download raw transcript without any template + if (templateId === 'none') { + let rawText = ''; + try { + const transcriptionData = JSON.parse(selectedRecording.value.transcription); + if (Array.isArray(transcriptionData)) { + rawText = transcriptionData.map(segment => { + const speaker = segment.speaker || 'Unknown'; + const text = segment.sentence || ''; + return `${speaker}: ${text}`; + }).join('\n'); + } else { + rawText = selectedRecording.value.transcription; + } + } catch (e) { + rawText = selectedRecording.value.transcription; + } + + const blob = new Blob([rawText], { type: 'text/plain;charset=utf-8' }); + const downloadUrl = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = downloadUrl; + a.download = `${selectedRecording.value.title || 'transcript'}_raw.txt`; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(downloadUrl); + + showToast(t('messages.transcriptDownloadSuccess')); + return; + } + + // Download the transcript with the selected template + const url = templateId + ? `/recording/${selectedRecording.value.id}/download/transcript?template_id=${templateId}` + : `/recording/${selectedRecording.value.id}/download/transcript`; + + const response = await fetch(url); + if (!response.ok) { + throw new Error(t('messages.transcriptDownloadFailed')); + } + + const blob = await response.blob(); + const contentDisposition = response.headers.get('content-disposition'); + let filename = 'transcript.txt'; + if (contentDisposition) { + const matches = contentDisposition.match(/filename="([^"]+)"/); + if (matches && matches[1]) { + filename = matches[1]; + } + } + + const downloadUrl = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = downloadUrl; + a.download = filename; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(downloadUrl); + + showToast(t('messages.transcriptDownloadSuccess')); + } catch (error) { + console.error('Error downloading transcript:', error); + showToast(t('messages.transcriptDownloadFailed'), 'fa-exclamation-circle'); + } + }; + + // Download with default template (no modal) + const downloadWithDefaultTemplate = async () => { + if (!selectedRecording.value || !selectedRecording.value.transcription) { + showToast(t('messages.noTranscriptionToDownload'), 'fa-exclamation-circle'); + return; + } + + try { + // Download using the default template (server will use user's default) + const response = await fetch(`/recording/${selectedRecording.value.id}/download/transcript`); + if (!response.ok) { + throw new Error(t('messages.transcriptDownloadFailed')); + } + + const blob = await response.blob(); + const contentDisposition = response.headers.get('content-disposition'); + let filename = 'transcript.txt'; + if (contentDisposition) { + const matches = contentDisposition.match(/filename="([^"]+)"/); + if (matches && matches[1]) { + filename = matches[1]; + } + } + + const downloadUrl = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = downloadUrl; + a.download = filename; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(downloadUrl); + + showToast(t('messages.transcriptDownloadSuccess')); + } catch (error) { + console.error('Error downloading transcript:', error); + showToast(t('messages.transcriptDownloadFailed'), 'fa-exclamation-circle'); + } + }; + + // Show template selector modal (reuses the modal from downloadTranscript) + const showTemplateSelector = async () => { + // This calls the full downloadTranscript which shows the modal + await downloadTranscript(); + }; + + // Initialize UI settings from localStorage + const initializeUI = () => { + // Load saved column widths + const savedLeftWidth = localStorage.getItem('transcriptColumnWidth'); + const savedRightWidth = localStorage.getItem('summaryColumnWidth'); + if (savedLeftWidth && savedRightWidth) { + leftColumnWidth.value = parseFloat(savedLeftWidth); + rightColumnWidth.value = parseFloat(savedRightWidth); + } + + // Load saved transcription view mode + const savedViewMode = localStorage.getItem('transcriptionViewMode'); + if (savedViewMode) { + transcriptionViewMode.value = savedViewMode; + } + + // Load saved player volume + const savedVolume = localStorage.getItem('playerVolume'); + if (savedVolume) { + playerVolume.value = parseFloat(savedVolume); + } + + // Load saved follow player mode + const savedFollowMode = localStorage.getItem('followPlayerMode'); + if (savedFollowMode !== null) { + followPlayerMode.value = savedFollowMode === 'true'; + } + + // Load saved playback rate + initializePlaybackRate(); + + // Watch for recording changes to reset active segment and audio player state + watch(selectedRecording, (newRecording) => { + if (videoFullscreen.value) exitVideoFullscreen(); + currentPlayingSegmentIndex.value = null; + resetAudioPlayerState(); + // Use server-side duration if available (more reliable than browser metadata) + if (newRecording && newRecording.audio_duration) { + audioDuration.value = newRecording.audio_duration; + } + }); + + // Set up global click handler to close dropdowns when clicking outside + setupGlobalClickHandler(); + }; + + /** + * Set up a global click handler to close all dropdowns when clicking outside + * This provides elegant UX by closing menus when users click elsewhere + */ + const setupGlobalClickHandler = () => { + document.addEventListener('click', (event) => { + const target = event.target; + + // Close user menu if clicking outside of it + if (isUserMenuOpen.value) { + const userMenuButton = target.closest('[data-user-menu-toggle]'); + const userMenuDropdown = target.closest('[data-user-menu-dropdown]'); + + if (!userMenuButton && !userMenuDropdown) { + isUserMenuOpen.value = false; + } + } + + // Close sort options if clicking outside + if (showSortOptions.value) { + const sortButton = target.closest('[data-sort-toggle]'); + const sortDropdown = target.closest('[data-sort-dropdown]'); + + if (!sortButton && !sortDropdown) { + showSortOptions.value = false; + } + } + + // Close download menu if clicking outside + if (showDownloadMenu.value) { + const downloadButton = target.closest('[data-download-toggle]'); + const downloadDropdown = target.closest('[data-download-dropdown]'); + + if (!downloadButton && !downloadDropdown) { + showDownloadMenu.value = false; + } + } + + // Close language menu if clicking outside + if (state.showLanguageMenu && state.showLanguageMenu.value) { + const languageButton = target.closest('[data-language-toggle]'); + const languageDropdown = target.closest('[data-language-dropdown]'); + + if (!languageButton && !languageDropdown) { + state.showLanguageMenu.value = false; + } + } + + // Close speed menu if clicking outside + if (showSpeedMenu.value) { + const speedButton = target.closest('[data-speed-toggle]'); + const speedDropdown = target.closest('[data-speed-dropdown]'); + + if (!speedButton && !speedDropdown) { + showSpeedMenu.value = false; + } + } + }); + }; + + // Initialize recording notes markdown editor + const initializeRecordingNotesEditor = () => { + if (!recordingNotesEditor.value) return; + + // Destroy existing instance if any + if (recordingMarkdownEditorInstance.value) { + recordingMarkdownEditorInstance.value.toTextArea(); + recordingMarkdownEditorInstance.value = null; + } + + try { + recordingMarkdownEditorInstance.value = new EasyMDE({ + element: recordingNotesEditor.value, + spellChecker: false, + autofocus: false, + placeholder: t('form.enterNotesMarkdown'), + initialValue: recordingNotes.value || '', + status: false, + toolbar: [ + "bold", "italic", "heading", "|", + "quote", "unordered-list", "ordered-list", "|", + "link", "|", + "preview", "side-by-side", "fullscreen" + ], + previewClass: ["editor-preview", "notes-preview"], + theme: isDarkMode.value ? "dark" : "light" + }); + + // Sync changes back to recordingNotes + recordingMarkdownEditorInstance.value.codemirror.on('change', () => { + recordingNotes.value = recordingMarkdownEditorInstance.value.value(); + }); + } catch (error) { + console.error('Failed to initialize recording notes markdown editor:', error); + } + }; + + // Destroy recording notes markdown editor + const destroyRecordingNotesEditor = () => { + if (recordingMarkdownEditorInstance.value) { + // Save current value before destroying + recordingNotes.value = recordingMarkdownEditorInstance.value.value(); + recordingMarkdownEditorInstance.value.toTextArea(); + recordingMarkdownEditorInstance.value = null; + } + }; + + // ========================================= + // Participants Modal + // ========================================= + + const openParticipantsModal = async () => { + if (!selectedRecording.value) return; + + // Parse current participants into array + const participants = selectedRecording.value.participants + ? selectedRecording.value.participants.split(',').map(p => p.trim()).filter(Boolean) + : []; + + state.editingParticipantsList.value = participants.map(name => ({ name })); + + // Fetch speakers from database for autocomplete + try { + const response = await fetch('/speakers'); + if (response.ok) { + const speakers = await response.json(); + state.allParticipants.value = speakers.map(s => s.name).sort(); + } + } catch (e) { + console.error('Failed to fetch speakers:', e); + state.allParticipants.value = []; + } + + state.editingParticipantSuggestions.value = {}; + state.showEditParticipantsModal.value = true; + }; + + const closeEditParticipantsModal = () => { + state.showEditParticipantsModal.value = false; + state.editingParticipantsList.value = []; + }; + + const addParticipant = () => { + state.editingParticipantsList.value.push({ name: '' }); + }; + + const removeParticipant = (index) => { + state.editingParticipantsList.value.splice(index, 1); + delete state.editingParticipantSuggestions.value[index]; + }; + + const filterParticipantSuggestions = (index) => { + // Close all other dropdowns first + closeAllParticipantSuggestions(); + + const query = state.editingParticipantsList.value[index]?.name?.toLowerCase().trim() || ''; + if (query === '') { + // Show all participants when field is empty/focused + state.editingParticipantSuggestions.value[index] = [...state.allParticipants.value]; + } else { + state.editingParticipantSuggestions.value[index] = state.allParticipants.value.filter( + p => p.toLowerCase().includes(query) + ); + } + }; + + const selectParticipantSuggestion = (index, name) => { + state.editingParticipantsList.value[index].name = name; + state.editingParticipantSuggestions.value[index] = []; + }; + + const closeParticipantSuggestions = (index) => { + state.editingParticipantSuggestions.value[index] = []; + }; + + const closeParticipantSuggestionsDelayed = (index) => { + setTimeout(() => closeParticipantSuggestions(index), 200); + }; + + const closeAllParticipantSuggestions = () => { + state.editingParticipantSuggestions.value = {}; + }; + + const getParticipantDropdownPosition = (index) => { + // Find the input element for this index and calculate position + const inputs = document.querySelectorAll('.max-w-md input[placeholder="' + t('form.participantNamePlaceholder') + '"]'); + if (inputs[index]) { + const rect = inputs[index].getBoundingClientRect(); + return { + top: rect.bottom + 2 + 'px', + left: rect.left + 'px', + width: rect.width + 'px' + }; + } + return { top: '0px', left: '0px', width: '200px' }; + }; + + const saveParticipants = async () => { + if (!selectedRecording.value) return; + + // Join participant names with comma + const participantsString = state.editingParticipantsList.value + .map(p => p.name.trim()) + .filter(Boolean) + .join(', '); + + // Update the recording + selectedRecording.value.participants = participantsString; + + // Use the same save endpoint as inline editing + const fullPayload = { + id: selectedRecording.value.id, + title: selectedRecording.value.title, + participants: selectedRecording.value.participants, + notes: selectedRecording.value.notes, + summary: selectedRecording.value.summary, + meeting_date: selectedRecording.value.meeting_date + }; + + try { + const response = await fetch('/save', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': csrfToken.value + }, + body: JSON.stringify(fullPayload) + }); + + const data = await response.json(); + if (!response.ok) throw new Error(data.error || t('messages.failedToSaveParticipants')); + + showToast(t('common.changesSaved'), 'fa-check-circle'); + closeEditParticipantsModal(); + } catch (error) { + console.error('Save error:', error); + utils.setGlobalError(t('messages.saveParticipantsFailed', { error: error.message })); + } + }; + + return { + // Initialization + initializeUI, + toggleDarkMode, + initializeDarkMode, + applyColorScheme, + initializeColorScheme, + openColorSchemeModal, + closeColorSchemeModal, + selectColorScheme, + resetColorScheme, + toggleSidebar, + initializeSidebar, + switchToUploadView, + switchToDetailView, + switchToRecordingView, + setGlobalError, + formatFileSize, + formatDisplayDate, + formatShortDate, + formatStatus, + getStatusClass, + formatTime, + formatDuration, + formatProcessingDuration, + // Inline editing + toggleEditTitle, + saveTitle, + cancelEditTitle, + toggleEditParticipants, + toggleEditMeetingDate, + toggleEditSummary, + cancelEditSummary, + saveEditSummary, + initializeSummaryMarkdownEditor, + autoSaveSummary, + toggleEditNotes, + cancelEditNotes, + saveEditNotes, + initializeMarkdownEditor, + autoSaveNotes, + clickToEditNotes, + clickToEditSummary, + // Recording notes editor + initializeRecordingNotesEditor, + destroyRecordingNotesEditor, + downloadNotes, + downloadEventICS, + downloadICS, + deleteEvent, + formatEventDateTime, + // View mode + toggleTranscriptionViewMode, + // Column resizing + startColumnResize, + // Audio player + seekAudio, + seekAudioFromEvent, + onPlayerVolumeChange, + handleAudioTimeUpdate, + toggleFollowPlayerMode, + scrollToActiveSegment, + // Custom audio player + toggleAudioPlayback, + toggleAudioMute, + setAudioVolume, + seekAudioTo, + seekAudioByPercent, + startProgressDrag, + handleAudioPlayPause, + handleAudioLoadedMetadata, + handleAudioEnded, + handleCustomAudioTimeUpdate, + handleAudioWaiting, + handleAudioCanPlay, + handleAudioDurationChange, + formatAudioTime, + audioProgressPercent, + displayCurrentTime, + isDraggingProgress, + audioIsPlaying, + audioCurrentTime, + audioDuration, + audioIsMuted, + audioIsLoading, + resetAudioPlayerState, + // Playback speed + formatPlaybackRate, + setPlaybackRate, + cyclePlaybackRate, + cycleModalPlaybackRate, + updateSpeedMenuPosition, + // Video fullscreen + enterVideoFullscreen, + exitVideoFullscreen, + handleFullscreenMouseMove, + resetFullscreenControlsTimer, + // Copy functions + copyTranscription, + copySummary, + copyNotes, + // Download functions + downloadSummary, + downloadTranscript, + downloadTranscriptWord, + downloadWithDefaultTemplate, + showTemplateSelector, + // Participants modal + openParticipantsModal, + closeEditParticipantsModal, + addParticipant, + removeParticipant, + filterParticipantSuggestions, + selectParticipantSuggestion, + closeParticipantSuggestions, + closeParticipantSuggestionsDelayed, + closeAllParticipantSuggestions, + getParticipantDropdownPosition, + saveParticipants, + // Computed + isMobile + }; +} diff --git a/static/js/modules/composables/upload.js b/static/js/modules/composables/upload.js new file mode 100644 index 0000000..98ab448 --- /dev/null +++ b/static/js/modules/composables/upload.js @@ -0,0 +1,824 @@ +/** + * Upload management composable + * Handles file uploads, queue processing, and progress tracking + */ + +import * as FailedUploads from '../db/failed-uploads.js'; +import * as IncognitoStorage from '../db/incognito-storage.js'; + +// Parse error message and return friendly error info +function getFriendlyError(errorMessage, t) { + const _t = t || ((key) => key); + if (!errorMessage) return { title: _t('errors.processingError'), message: _t('errors.processingErrorMessage') }; + const lowerText = errorMessage.toLowerCase(); + const patterns = [ + { patterns: ['maximum content size limit', 'file too large', '413', 'payload too large', 'exceeded'], title: _t('errors.fileTooLargeTitle'), guidance: _t('errors.enableChunkingGuidance') }, + { patterns: ['timed out', 'timeout', 'deadline exceeded'], title: _t('errors.processingTimeout'), guidance: _t('errors.splitAudioGuidance') }, + { patterns: ['401', 'unauthorized', 'invalid api key', 'authentication failed', 'incorrect api key'], title: _t('errors.authenticationError'), guidance: _t('errors.checkApiKeyGuidance') }, + { patterns: ['rate limit', 'too many requests', '429', 'quota exceeded'], title: _t('errors.rateLimitExceeded'), guidance: _t('errors.waitAndRetryGuidance') }, + { patterns: ['connection refused', 'connection reset', 'could not connect', 'network unreachable'], title: _t('errors.connectionError'), guidance: _t('errors.checkNetworkGuidance') }, + { patterns: ['503', '502', '500', 'service unavailable', 'server error', 'internal server error'], title: _t('errors.serviceUnavailable'), guidance: _t('errors.tryAgainLaterGuidance') }, + { patterns: ['invalid file format', 'unsupported format', 'could not decode', 'corrupt'], title: _t('errors.invalidAudioFormat'), guidance: _t('errors.convertFormatGuidance') }, + { patterns: ['audio extraction failed', 'ffmpeg failed', 'no audio stream'], title: _t('errors.audioExtractionFailed'), guidance: _t('errors.convertStandardGuidance') }, + ]; + for (const pattern of patterns) { + for (const p of pattern.patterns) { + if (lowerText.includes(p)) return { title: pattern.title, guidance: pattern.guidance }; + } + } + return { title: _t('errors.processingError'), guidance: _t('errors.processingErrorFallbackGuidance') }; +} + +export function useUpload(state, utils) { + const { + uploadQueue, currentlyProcessingFile, processingProgress, processingMessage, + isProcessingActive, pollInterval, progressPopupMinimized, progressPopupClosed, + maxFileSizeMB, chunkingEnabled, chunkingMode, chunkingLimit, maxConcurrentUploads, + recordings, selectedRecording, totalRecordings, globalError, + selectedTagIds, uploadLanguage, uploadMinSpeakers, uploadMaxSpeakers, uploadHotwords, uploadInitialPrompt, + useAsrEndpoint, connectorSupportsDiarization, asrLanguage, asrMinSpeakers, asrMaxSpeakers, + dragover, availableTags, uploadTagSearchFilter, + // Folder state + availableFolders, selectedFolderId, + // Incognito mode state + incognitoMode, incognitoRecording, incognitoProcessing, + // View state + currentView, + // Upload disclaimer state + uploadDisclaimer, showUploadDisclaimerModal + } = state; + + const { computed, nextTick, ref } = Vue; + + const { setGlobalError, showToast, formatFileSize, onChatComplete, t } = utils; + + // Compute selected tags from IDs + const selectedTags = computed(() => { + return selectedTagIds.value.map(id => + availableTags.value.find(t => t.id === id) + ).filter(Boolean); + }); + + // --- Tag Drag-and-Drop State --- + const draggedTagIndex = ref(null); + const dragOverTagIndex = ref(null); + + // Reorder selectedTagIds array + const reorderSelectedTags = (fromIndex, toIndex) => { + const tagIds = [...selectedTagIds.value]; + const [removed] = tagIds.splice(fromIndex, 1); + tagIds.splice(toIndex, 0, removed); + selectedTagIds.value = tagIds; + applyTagDefaults(); // Re-apply defaults since first tag may have changed + }; + + // === MOUSE DRAG HANDLERS === + const handleTagDragStart = (index, event) => { + draggedTagIndex.value = index; + event.dataTransfer.effectAllowed = 'move'; + event.dataTransfer.setData('text/plain', index.toString()); + }; + + const handleTagDragOver = (index, event) => { + event.preventDefault(); + event.dataTransfer.dropEffect = 'move'; + dragOverTagIndex.value = index; + }; + + const handleTagDrop = (targetIndex, event) => { + event.preventDefault(); + if (draggedTagIndex.value !== null && draggedTagIndex.value !== targetIndex) { + reorderSelectedTags(draggedTagIndex.value, targetIndex); + } + draggedTagIndex.value = null; + dragOverTagIndex.value = null; + }; + + const handleTagDragEnd = () => { + draggedTagIndex.value = null; + dragOverTagIndex.value = null; + }; + + // === TOUCH HANDLERS (Mobile) === + let touchStartIndex = null; + + const handleTagTouchStart = (index, event) => { + touchStartIndex = index; + draggedTagIndex.value = index; + }; + + const handleTagTouchMove = (event) => { + if (touchStartIndex === null) return; + event.preventDefault(); + + const touch = event.touches[0]; + const elementBelow = document.elementFromPoint(touch.clientX, touch.clientY); + const tagElement = elementBelow?.closest('[data-tag-index]'); + + if (tagElement) { + const targetIndex = parseInt(tagElement.dataset.tagIndex); + dragOverTagIndex.value = targetIndex; + } + }; + + const handleTagTouchEnd = () => { + if (touchStartIndex !== null && dragOverTagIndex.value !== null && + touchStartIndex !== dragOverTagIndex.value) { + reorderSelectedTags(touchStartIndex, dragOverTagIndex.value); + } + touchStartIndex = null; + draggedTagIndex.value = null; + dragOverTagIndex.value = null; + }; + + // Handle drag events + const handleDragOver = (e) => { + e.preventDefault(); + dragover.value = true; + }; + + const handleDragLeave = (e) => { + if (e.relatedTarget && e.currentTarget.contains(e.relatedTarget)) { + return; + } + dragover.value = false; + }; + + const handleDrop = (e) => { + e.preventDefault(); + dragover.value = false; + addFilesToQueue(e.dataTransfer.files); + }; + + const handleFileSelect = (e) => { + addFilesToQueue(e.target.files); + e.target.value = null; + }; + + // Add files to the upload queue + const addFilesToQueue = (files) => { + let filesAdded = 0; + for (const file of files) { + const fileObject = file.file ? file.file : file; + const notes = file.notes || null; + const tags = file.tags || selectedTags.value || []; + const asrOptions = file.asrOptions || { + language: asrLanguage.value, + min_speakers: asrMinSpeakers.value, + max_speakers: asrMaxSpeakers.value + }; + + // Check if it's an audio file or video container with audio + const isAudioFile = fileObject && ( + fileObject.type.startsWith('audio/') || + fileObject.type === 'video/mp4' || + fileObject.type === 'video/quicktime' || + fileObject.type === 'video/x-msvideo' || + fileObject.type === 'video/webm' || + fileObject.name.toLowerCase().endsWith('.amr') || + fileObject.name.toLowerCase().endsWith('.3gp') || + fileObject.name.toLowerCase().endsWith('.3gpp') || + fileObject.name.toLowerCase().endsWith('.mp4') || + fileObject.name.toLowerCase().endsWith('.mov') || + fileObject.name.toLowerCase().endsWith('.avi') || + fileObject.name.toLowerCase().endsWith('.mkv') || + fileObject.name.toLowerCase().endsWith('.webm') || + fileObject.name.toLowerCase().endsWith('.weba') + ); + + if (isAudioFile) { + // Only check general file size limit + if (fileObject.size > maxFileSizeMB.value * 1024 * 1024) { + setGlobalError(t('upload.fileExceedsMaxSize', { name: fileObject.name, size: maxFileSizeMB.value })); + continue; + } + + const clientId = `client-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`; + + uploadQueue.value.push({ + file: fileObject, + notes: notes, + tags: tags, + asrOptions: asrOptions, + status: 'queued', + recordingId: null, + clientId: clientId, + error: null, + willAutoSummarize: false // Server will tell us via SUMMARIZING status + }); + filesAdded++; + } else if (fileObject) { + setGlobalError(t('upload.invalidFileType', { name: fileObject.name })); + } + } + if (filesAdded > 0) { + console.log(`Added ${filesAdded} file(s) to the queue.`); + } + }; + + // Remove a file from the queue before processing starts + const removeFromQueue = (clientId) => { + const index = uploadQueue.value.findIndex(item => item.clientId === clientId); + if (index !== -1 && (uploadQueue.value[index].status === 'queued' || uploadQueue.value[index].status === 'ready')) { + uploadQueue.value.splice(index, 1); + console.log(`Removed file from queue: ${clientId}`); + } + }; + + // Cancel a waiting file from the upload progress queue + const cancelWaitingFile = (clientId) => { + const index = uploadQueue.value.findIndex(item => item.clientId === clientId); + if (index !== -1 && uploadQueue.value[index].status === 'ready') { + uploadQueue.value.splice(index, 1); + console.log(`Cancelled waiting file: ${clientId}`); + showToast(t('upload.fileRemovedFromQueue'), 'fa-trash'); + } + }; + + // Clear completed uploads from queue + const clearCompletedUploads = () => { + uploadQueue.value = uploadQueue.value.filter(item => !['completed', 'failed'].includes(item.status)); + }; + + // Start processing all queued files + const startUpload = () => { + const pendingFiles = uploadQueue.value.filter(item => item.status === 'queued'); + if (pendingFiles.length === 0) { + return; + } + // Show upload disclaimer if configured + if (uploadDisclaimer.value && uploadDisclaimer.value.trim() !== '') { + showUploadDisclaimerModal.value = true; + return; + } + // Update all queued files with current tags and ASR options + // AND change their status to 'ready' so they move to upload progress immediately + for (const item of uploadQueue.value) { + if (item.status === 'queued') { + if (!item.preserveOptions) { + // For file uploads: use current UI selection (user may have changed tags after dropping) + item.tags = [...selectedTags.value]; + item.asrOptions = { + language: asrLanguage.value, + min_speakers: asrMinSpeakers.value, + max_speakers: asrMaxSpeakers.value, + hotwords: uploadHotwords.value, + initial_prompt: uploadInitialPrompt.value, + }; + item.folder_id = selectedFolderId.value; + } + // Change status to 'ready' to remove from upload view but keep in queue + item.status = 'ready'; + } + } + progressPopupMinimized.value = false; + progressPopupClosed.value = false; + startProcessingQueue(); + }; + + // --- Parallel Upload System --- + // Concurrency limiter: configurable via MAX_CONCURRENT_UPLOADS env var (default 3) + let activeUploadCount = 0; + const pendingUploadQueue = []; // Functions waiting for a slot + + const acquireUploadSlot = () => { + return new Promise(resolve => { + if (activeUploadCount < (maxConcurrentUploads?.value || 3)) { + activeUploadCount++; + resolve(); + } else { + pendingUploadQueue.push(resolve); + } + }); + }; + + const releaseUploadSlot = () => { + activeUploadCount--; + if (pendingUploadQueue.length > 0) { + activeUploadCount++; + const next = pendingUploadQueue.shift(); + next(); + } + // When all uploads are done, clear processing active flag + const stillUploading = uploadQueue.value.some(item => + ['uploading', 'ready'].includes(item.status) + ); + if (!stillUploading) { + isProcessingActive.value = false; + } + }; + + const resetCurrentFileProcessingState = () => { + if (pollInterval.value) clearInterval(pollInterval.value); + pollInterval.value = null; + currentlyProcessingFile.value = null; + processingProgress.value = 0; + processingMessage.value = ''; + }; + + /** + * Upload a single file to the server. + * Acquires a concurrency slot, uploads, then releases. + * Status updates are per-item (no global processingProgress). + */ + const uploadSingleFile = async (fileItem) => { + await acquireUploadSlot(); + + fileItem.status = 'uploading'; + fileItem.progress = 5; + + try { + const formData = new FormData(); + formData.append('file', fileItem.file); + + // Send file's lastModified timestamp for meeting_date + if (fileItem.file.lastModified) { + const lastModified = fileItem.file.lastModified; + formData.append('file_last_modified', lastModified.toString()); + } + + if (fileItem.notes) { + formData.append('notes', fileItem.notes); + } + + // Add tags if selected + const tagsToUse = fileItem.tags || selectedTags.value || []; + tagsToUse.forEach((tag, index) => { + const tagId = tag.id || tag; + formData.append(`tag_ids[${index}]`, tagId); + }); + + // Add folder if selected + const folderToUse = fileItem.folder_id || selectedFolderId.value; + if (folderToUse) { + formData.append('folder_id', folderToUse); + } + + // Add ASR options + const asrOpts = fileItem.asrOptions || {}; + const language = asrOpts.language || uploadLanguage.value; + if (language) { + formData.append('language', language); + } + + if (connectorSupportsDiarization.value) { + const minSpeakers = asrOpts.min_speakers || uploadMinSpeakers.value; + const maxSpeakers = asrOpts.max_speakers || uploadMaxSpeakers.value; + + if (minSpeakers && minSpeakers !== '') { + formData.append('min_speakers', minSpeakers.toString()); + } + if (maxSpeakers && maxSpeakers !== '') { + formData.append('max_speakers', maxSpeakers.toString()); + } + } + + // Add hotwords and initial prompt + const hotwords = asrOpts.hotwords || uploadHotwords.value; + const initialPrompt = asrOpts.initial_prompt || uploadInitialPrompt.value; + if (hotwords && hotwords.trim()) { + formData.append('hotwords', hotwords.trim()); + } + if (initialPrompt && initialPrompt.trim()) { + formData.append('initial_prompt', initialPrompt.trim()); + } + + // Refresh CSRF token before upload (prevents stale token after sleep/idle) + let csrfToken; + if (window.csrfManager) { + try { + csrfToken = await window.csrfManager.refreshToken(); + } catch (e) { + csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + } + } else { + csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + } + + // Use XMLHttpRequest for per-file upload progress + const data = await new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + + xhr.upload.onprogress = (e) => { + if (e.lengthComputable) { + // Map upload progress to 5-90% range + fileItem.progress = Math.round(5 + (e.loaded / e.total) * 85); + } + }; + + xhr.onload = () => { + const contentType = xhr.getResponseHeader('content-type') || ''; + if (!contentType.includes('application/json')) { + const titleMatch = xhr.responseText.match(/<title>([^<]+)<\/title>/i); + const h1Match = xhr.responseText.match(/<h1>([^<]+)<\/h1>/i); + reject(new Error(titleMatch?.[1] || h1Match?.[1] || + `Server error (${xhr.status}): Response was not JSON`)); + return; + } + + let parsed; + try { + parsed = JSON.parse(xhr.responseText); + } catch { + reject(new Error(`Invalid JSON response (${xhr.status})`)); + return; + } + + if (xhr.status === 202 && parsed.id) { + resolve(parsed); + } else if (!String(xhr.status).startsWith('2')) { + let errorMsg = parsed.error || `Upload failed with status ${xhr.status}`; + if (xhr.status === 413) errorMsg = parsed.error || `File too large. Max: ${parsed.max_size_mb?.toFixed(0) || maxFileSizeMB.value} MB.`; + reject(new Error(errorMsg)); + } else { + reject(new Error('Unexpected success response from server after upload.')); + } + }; + + xhr.onerror = () => reject(new Error('Network error during upload')); + xhr.ontimeout = () => reject(new Error('Upload timed out')); + + // Store abort controller on item for cancellation + fileItem._xhr = xhr; + + xhr.open('POST', '/upload'); + if (csrfToken) { + xhr.setRequestHeader('X-CSRFToken', csrfToken); + } + xhr.send(formData); + }); + + // Upload succeeded - recording is now on the server + console.log(`File ${fileItem.file.name} uploaded. Recording ID: ${data.id}. Server will process via job queue.`); + fileItem.status = 'pending'; + fileItem.recordingId = data.id; + fileItem.progress = 100; + + // Add to recordings list + recordings.value.unshift(data); + totalRecordings.value++; + + // Clear recording session only after confirmed upload + if (fileItem.onUploadSuccess) { + await fileItem.onUploadSuccess(); + } + + // Handle duplicate warning + if (data.duplicate_warning) { + const warning = data.duplicate_warning; + const existingDate = warning.existing_created_at + ? new Date(warning.existing_created_at).toLocaleDateString() + : ''; + const existingName = warning.existing_title || 'Unknown'; + showToast( + `⚠️ ${existingName} (${existingDate})`, + 'fa-copy' + ); + fileItem.duplicateWarning = warning; + } + + } catch (error) { + console.error(`Upload Error for ${fileItem.file.name} (Client ID: ${fileItem.clientId}):`, error); + fileItem.status = 'failed'; + fileItem.error = error.message; + fileItem.progress = 0; + + // Show friendly error message + const friendlyErr = getFriendlyError(error.message, t); + setGlobalError(`${friendlyErr.title}: ${friendlyErr.guidance}`); + + // Store failed upload in IndexedDB for background sync retry + try { + await FailedUploads.storeFailedUpload({ + file: fileItem.file, + fileName: fileItem.file.name, + fileSize: fileItem.file.size, + clientId: fileItem.clientId, + notes: fileItem.notes, + tags: fileItem.tags, + asrOptions: fileItem.asrOptions, + error: error.message + }); + + if ('serviceWorker' in navigator && 'sync' in ServiceWorkerRegistration.prototype) { + const registration = await navigator.serviceWorker.ready; + await registration.sync.register('sync-uploads'); + console.log('[Upload] Registered background sync for failed upload'); + } + } catch (syncError) { + console.warn('[Upload] Failed to register background sync:', syncError); + } + } finally { + fileItem._xhr = null; + releaseUploadSlot(); + } + }; + + /** + * Start uploading all ready files in parallel (with concurrency limit). + * Processing status is tracked via allJobs polling in app.modular.js. + */ + const startProcessingQueue = async () => { + const readyItems = uploadQueue.value.filter(item => item.status === 'ready'); + if (readyItems.length === 0) { + console.log("No files ready to upload."); + return; + } + + isProcessingActive.value = true; + console.log(`Starting parallel upload of ${readyItems.length} file(s) (max ${maxConcurrentUploads?.value || 3} concurrent)...`); + + // Fire off all uploads concurrently (semaphore handles limiting) + const uploadPromises = readyItems.map(item => uploadSingleFile(item)); + // Don't await - let them run in background. isProcessingActive is cleared by releaseUploadSlot. + Promise.allSettled(uploadPromises).then(() => { + console.log('All uploads settled.'); + }); + }; + + // Keep backward-compat aliases + const startStatusPolling = (fileItem, recordingId) => { + // No longer needed - allJobs polling handles status tracking + fileItem.recordingId = recordingId; + }; + + const pollProcessingStatus = () => { + // No-op: status tracking is now handled by allJobs polling in app.modular.js + }; + + // Tag selection helpers + const addTagToSelection = (tagId) => { + if (!selectedTagIds.value.includes(tagId)) { + selectedTagIds.value.push(tagId); + applyTagDefaults(); + } + }; + + const removeTagFromSelection = (tagId) => { + const index = selectedTagIds.value.indexOf(tagId); + if (index > -1) { + selectedTagIds.value.splice(index, 1); + applyTagDefaults(); + } + }; + + const applyTagDefaults = () => { + const selectedTagsObjects = selectedTagIds.value.map(tagId => + availableTags.value.find(tag => tag.id == tagId) + ).filter(Boolean); + + const firstTag = selectedTagsObjects[0]; + if (firstTag && connectorSupportsDiarization.value) { + if (firstTag.default_language) { + uploadLanguage.value = firstTag.default_language; + } + if (firstTag.default_min_speakers) { + uploadMinSpeakers.value = firstTag.default_min_speakers; + } + if (firstTag.default_max_speakers) { + uploadMaxSpeakers.value = firstTag.default_max_speakers; + } + } + // Apply hotwords/initial_prompt from first tag (works for all connectors) + if (firstTag) { + if (firstTag.default_hotwords) { + uploadHotwords.value = firstTag.default_hotwords; + } + if (firstTag.default_initial_prompt) { + uploadInitialPrompt.value = firstTag.default_initial_prompt; + } + } + }; + + // Computed property for filtered available tags in upload view + const filteredAvailableTagsForUpload = computed(() => { + const availableForSelection = availableTags.value.filter(tag => !selectedTagIds.value.includes(tag.id)); + if (!uploadTagSearchFilter.value) return availableForSelection; + + const filter = uploadTagSearchFilter.value.toLowerCase(); + return availableForSelection.filter(tag => + tag.name.toLowerCase().includes(filter) + ); + }); + + // === INCOGNITO MODE FUNCTIONS === + + /** + * Upload and process a file in incognito mode. + * The file is processed synchronously and no data is saved to the database. + * Results are stored only in sessionStorage. + */ + const startIncognitoUpload = async () => { + const pendingFiles = uploadQueue.value.filter(item => item.status === 'queued'); + if (pendingFiles.length === 0) { + return; + } + + // Only process the first file for incognito mode + const fileItem = pendingFiles[0]; + + // Check if incognito mode state is available + if (!incognitoMode || !incognitoProcessing || !incognitoRecording) { + console.warn('[Incognito] Incognito state not available, falling back to normal upload'); + startUpload(); + return; + } + + incognitoProcessing.value = true; + processingMessage.value = t('incognito.processingInProgress'); + processingProgress.value = 10; + progressPopupMinimized.value = false; + progressPopupClosed.value = false; + + try { + const formData = new FormData(); + formData.append('file', fileItem.file); + + // Add ASR options + const asrOpts = fileItem.asrOptions || {}; + const language = asrOpts.language || uploadLanguage.value; + const minSpeakers = asrOpts.min_speakers || uploadMinSpeakers.value; + const maxSpeakers = asrOpts.max_speakers || uploadMaxSpeakers.value; + + if (language) { + formData.append('language', language); + } + if (minSpeakers && minSpeakers !== '') { + formData.append('min_speakers', minSpeakers.toString()); + } + if (maxSpeakers && maxSpeakers !== '') { + formData.append('max_speakers', maxSpeakers.toString()); + } + + const hotwords = asrOpts.hotwords || uploadHotwords.value; + const initialPrompt = asrOpts.initial_prompt || uploadInitialPrompt.value; + if (hotwords && hotwords.trim()) { + formData.append('hotwords', hotwords.trim()); + } + if (initialPrompt && initialPrompt.trim()) { + formData.append('initial_prompt', initialPrompt.trim()); + } + + // Request auto-summarization + formData.append('auto_summarize', 'true'); + + processingMessage.value = t('incognito.uploadingFile'); + processingProgress.value = 20; + + console.log('[Incognito] Uploading file:', fileItem.file.name); + + const response = await fetch('/api/recordings/incognito', { + method: 'POST', + body: formData + }); + + processingProgress.value = 50; + + // Parse response + const contentType = response.headers.get('content-type') || ''; + if (!contentType.includes('application/json')) { + const text = await response.text(); + const titleMatch = text.match(/<title>([^<]+)<\/title>/i); + throw new Error(titleMatch?.[1] || `Server error (${response.status})`); + } + + const data = await response.json(); + + if (!response.ok || data.error) { + throw new Error(data.error || `Processing failed with status ${response.status}`); + } + + processingProgress.value = 80; + processingMessage.value = t('incognito.processingComplete'); + + // Store result in sessionStorage + const incognitoData = { + id: 'incognito', + incognito: true, + title: data.title || t('incognito.recordingTitle'), + transcription: data.transcription, + summary: data.summary, + summary_html: data.summary_html, + created_at: data.created_at, + original_filename: data.original_filename, + file_size: data.file_size, + audio_duration_seconds: data.audio_duration_seconds, + processing_time_seconds: data.processing_time_seconds, + status: 'COMPLETED' + }; + + IncognitoStorage.saveIncognitoRecording(incognitoData); + incognitoRecording.value = incognitoData; + + // Remove the processed file from queue + const index = uploadQueue.value.findIndex(item => item.clientId === fileItem.clientId); + if (index !== -1) { + uploadQueue.value.splice(index, 1); + } + + processingProgress.value = 100; + processingMessage.value = t('incognito.recordingReady'); + + // Auto-select the incognito recording and switch to detail view + selectedRecording.value = incognitoData; + currentView.value = 'detail'; + + // Show toast + showToast(t('incognito.recordingProcessed'), 'fa-user-secret'); + + console.log('[Incognito] Processing complete'); + + } catch (error) { + console.error('[Incognito] Processing failed:', error); + const friendlyErr = getFriendlyError(error.message, t); + setGlobalError(`${friendlyErr.title}: ${friendlyErr.guidance}`); + fileItem.status = 'failed'; + fileItem.error = error.message; + } finally { + incognitoProcessing.value = false; + processingProgress.value = 0; + processingMessage.value = ''; + } + }; + + /** + * Clear the incognito recording with confirmation + */ + const clearIncognitoRecordingWithConfirm = () => { + if (incognitoRecording && incognitoRecording.value) { + if (confirm(t('incognito.discardConfirm'))) { + IncognitoStorage.clearIncognitoRecording(); + incognitoRecording.value = null; + // If the incognito recording was selected, clear selection + if (selectedRecording.value?.id === 'incognito') { + selectedRecording.value = null; + } + showToast(t('incognito.recordingDiscarded'), 'fa-trash'); + } + } + }; + + /** + * Select the incognito recording for viewing + */ + const selectIncognitoRecording = () => { + if (incognitoRecording && incognitoRecording.value) { + selectedRecording.value = incognitoRecording.value; + currentView.value = 'detail'; + } + }; + + /** + * Load incognito recording from sessionStorage on app init + */ + const loadIncognitoRecording = () => { + const stored = IncognitoStorage.getIncognitoRecording(); + if (stored && incognitoRecording) { + incognitoRecording.value = stored; + console.log('[Incognito] Loaded recording from sessionStorage'); + } + }; + + /** + * Check if there's an incognito recording (for navigation guards) + */ + const hasIncognitoRecording = () => { + return IncognitoStorage.hasIncognitoRecording(); + }; + + return { + handleDragOver, + handleDragLeave, + handleDrop, + handleFileSelect, + addFilesToQueue, + removeFromQueue, + cancelWaitingFile, + clearCompletedUploads, + startUpload, + startProcessingQueue, + resetCurrentFileProcessingState, + startStatusPolling, + pollProcessingStatus, + addTagToSelection, + removeTagFromSelection, + applyTagDefaults, + filteredAvailableTagsForUpload, + // Tag drag-and-drop + draggedTagIndex, + dragOverTagIndex, + handleTagDragStart, + handleTagDragOver, + handleTagDrop, + handleTagDragEnd, + handleTagTouchStart, + handleTagTouchMove, + handleTagTouchEnd, + // Incognito mode + startIncognitoUpload, + clearIncognitoRecordingWithConfirm, + selectIncognitoRecording, + loadIncognitoRecording, + hasIncognitoRecording + }; +} diff --git a/static/js/modules/composables/virtualScroll.js b/static/js/modules/composables/virtualScroll.js new file mode 100644 index 0000000..620feed --- /dev/null +++ b/static/js/modules/composables/virtualScroll.js @@ -0,0 +1,204 @@ +/** + * Virtual Scrolling Composable + * + * Renders only visible items plus a buffer for smooth scrolling. + * Critical for handling long transcriptions (4500+ segments) without UI lag. + * + * Usage: + * const { visibleItems, spacerBefore, spacerAfter, onScroll, scrollToIndex } = useVirtualScroll({ + * items: segmentsRef, + * itemHeight: 48, + * containerRef: scrollContainerRef, + * overscan: 5 + * }); + */ + +export function useVirtualScroll(options) { + const { ref, computed, watch, onMounted, onUnmounted } = Vue; + + const { + items, // Ref to the full array of items + itemHeight = 48, // Height of each item in pixels (fixed height mode) + containerRef, // Ref to the scrollable container element + overscan = 5, // Number of items to render outside viewport + keyField = null // Optional field to use for unique keys + } = options; + + // Internal state + const scrollTop = ref(0); + const containerHeight = ref(0); + const isInitialized = ref(false); + + // Calculate visible range based on scroll position + const visibleRange = computed(() => { + if (!isInitialized.value || !items.value) { + return { start: 0, end: Math.min(20, items.value?.length || 0) }; + } + + const totalItems = items.value.length; + if (totalItems === 0) { + return { start: 0, end: 0 }; + } + + // Calculate first visible item + const firstVisible = Math.floor(scrollTop.value / itemHeight); + + // Calculate number of items that fit in viewport + const visibleCount = Math.ceil(containerHeight.value / itemHeight); + + // Add overscan for smooth scrolling + const start = Math.max(0, firstVisible - overscan); + const end = Math.min(totalItems, firstVisible + visibleCount + overscan); + + return { start, end }; + }); + + // Slice of items to actually render + const visibleItems = computed(() => { + if (!items.value || items.value.length === 0) { + return []; + } + + const { start, end } = visibleRange.value; + + // Map items with their original indices for proper data binding + return items.value.slice(start, end).map((item, localIndex) => ({ + ...item, + _virtualIndex: start + localIndex, + _originalIndex: start + localIndex + })); + }); + + // Spacer height before visible items (for scroll position) + const spacerBefore = computed(() => { + return visibleRange.value.start * itemHeight; + }); + + // Spacer height after visible items + const spacerAfter = computed(() => { + if (!items.value) return 0; + const remainingItems = items.value.length - visibleRange.value.end; + return Math.max(0, remainingItems * itemHeight); + }); + + // Total height of all items (for scroll container) + const totalHeight = computed(() => { + if (!items.value) return 0; + return items.value.length * itemHeight; + }); + + // Handle scroll events + const onScroll = (event) => { + scrollTop.value = event.target.scrollTop; + }; + + // Initialize container height observer + let resizeObserver = null; + + const initializeContainer = () => { + if (!containerRef.value) return; + + // Get initial height + containerHeight.value = containerRef.value.clientHeight; + isInitialized.value = true; + + // Watch for container size changes + resizeObserver = new ResizeObserver((entries) => { + for (const entry of entries) { + containerHeight.value = entry.contentRect.height; + } + }); + resizeObserver.observe(containerRef.value); + }; + + // Scroll to a specific index + const scrollToIndex = (index, behavior = 'smooth') => { + if (!containerRef.value || !items.value) return; + + const targetIndex = Math.max(0, Math.min(index, items.value.length - 1)); + const targetScrollTop = targetIndex * itemHeight; + + containerRef.value.scrollTo({ + top: targetScrollTop, + behavior + }); + }; + + // Scroll to make an index visible (centered if possible) + const scrollToIndexIfNeeded = (index) => { + if (!containerRef.value || !items.value) return; + + const { start, end } = visibleRange.value; + + // Check if index is already visible (with some margin) + if (index >= start + overscan && index < end - overscan) { + return; // Already visible + } + + // Center the index in the viewport + const targetIndex = Math.max(0, index - Math.floor(containerHeight.value / itemHeight / 2)); + scrollToIndex(targetIndex, 'smooth'); + }; + + // Reset scroll state (call when modal opens or items change completely) + const reset = () => { + scrollTop.value = 0; + isInitialized.value = false; + // Re-initialize after a tick to allow DOM to render + Vue.nextTick(() => { + if (containerRef.value) { + containerRef.value.scrollTop = 0; + initializeContainer(); + } + }); + }; + + // Watch for containerRef changes and initialize + watch(containerRef, (newRef) => { + if (newRef) { + initializeContainer(); + } + }, { immediate: true }); + + // Cleanup on unmount + onUnmounted(() => { + if (resizeObserver) { + resizeObserver.disconnect(); + } + }); + + return { + // Data + visibleItems, + visibleRange, + + // Spacer heights for virtual scroll container + spacerBefore, + spacerAfter, + totalHeight, + + // Event handlers + onScroll, + + // Navigation + scrollToIndex, + scrollToIndexIfNeeded, + + // Control + reset, + + // State (for debugging/testing) + scrollTop, + containerHeight, + isInitialized + }; +} + +/** + * Helper to generate a unique key for virtual scroll items + */ +export function getVirtualItemKey(item, prefix = 'vs') { + const index = item._originalIndex ?? item._virtualIndex ?? 0; + const time = item.startTime ?? item.start_time ?? ''; + return `${prefix}-${index}-${time}`; +} diff --git a/static/js/modules/computed/index.js b/static/js/modules/computed/index.js new file mode 100644 index 0000000..f9464da --- /dev/null +++ b/static/js/modules/computed/index.js @@ -0,0 +1,26 @@ +/** + * Computed properties module exports + * + * Note: These computed properties are defined inline in the main app.js + * due to their tight coupling with reactive state. This module serves as + * a placeholder for future extraction if needed. + */ + +// Computed properties that could be extracted: +// - filteredRecordings +// - groupedRecordings +// - highlightedTranscript +// - activeRecordingMetadata +// - identifiedSpeakers +// - processedTranscription +// - totalInQueue +// - completedInQueue +// - finishedFilesInQueue +// - isMobileScreen +// - datePresetOptions +// - languageOptions +// - tagsWithCustomPrompts +// - filteredAvailableTagsForModal +// - isMobileDevice + +export default {}; diff --git a/static/js/modules/db/failed-uploads.js b/static/js/modules/db/failed-uploads.js new file mode 100644 index 0000000..2b216e9 --- /dev/null +++ b/static/js/modules/db/failed-uploads.js @@ -0,0 +1,272 @@ +/** + * IndexedDB Failed Uploads Storage + * Handles storing and retrying failed uploads with background sync + */ + +const DB_NAME = 'SpeakrFailedUploads'; +const DB_VERSION = 1; +const STORE_NAME = 'failedUploads'; + +let dbInstance = null; + +/** + * Initialize IndexedDB + */ +export const initDB = () => { + return new Promise((resolve, reject) => { + if (dbInstance) { + resolve(dbInstance); + return; + } + + const request = indexedDB.open(DB_NAME, DB_VERSION); + + request.onerror = () => { + console.error('[FailedUploadsDB] Failed to open database:', request.error); + reject(request.error); + }; + + request.onsuccess = () => { + dbInstance = request.result; + console.log('[FailedUploadsDB] Database opened successfully'); + resolve(dbInstance); + }; + + request.onupgradeneeded = (event) => { + const db = event.target.result; + + // Create object store for failed uploads + if (!db.objectStoreNames.contains(STORE_NAME)) { + const objectStore = db.createObjectStore(STORE_NAME, { keyPath: 'id', autoIncrement: true }); + objectStore.createIndex('timestamp', 'timestamp', { unique: false }); + objectStore.createIndex('clientId', 'clientId', { unique: false }); + console.log('[FailedUploadsDB] Object store created'); + } + }; + }); +}; + +/** + * Store a failed upload for later retry + */ +export const storeFailedUpload = async (uploadData) => { + try { + const db = await initDB(); + + // Convert File to ArrayBuffer BEFORE opening transaction. + // IDB transactions auto-close when inactive — the async arrayBuffer() + // call would cause the transaction to expire before add(). + let fileData = uploadData.fileData || null; + if (uploadData.file && !fileData) { + fileData = await uploadData.file.arrayBuffer(); + } + + const transaction = db.transaction([STORE_NAME], 'readwrite'); + const objectStore = transaction.objectStore(STORE_NAME); + + const failedUpload = { + timestamp: Date.now(), + clientId: uploadData.clientId || `client-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`, + fileName: uploadData.file?.name || uploadData.fileName || 'unknown', + fileSize: uploadData.file?.size || uploadData.fileSize || 0, + notes: uploadData.notes || '', + tags: uploadData.tags || [], + asrOptions: uploadData.asrOptions || {}, + retryCount: uploadData.retryCount || 0, + lastError: uploadData.error || '', + fileData: fileData, + mimeType: uploadData.file?.type || uploadData.mimeType || 'audio/webm' + }; + + const request = objectStore.add(failedUpload); + + return new Promise((resolve, reject) => { + request.onsuccess = () => { + console.log('[FailedUploadsDB] Upload stored for retry:', failedUpload.fileName); + resolve(request.result); // Returns the ID + }; + request.onerror = () => { + console.error('[FailedUploadsDB] Failed to store upload:', request.error); + reject(request.error); + }; + }); + } catch (error) { + console.error('[FailedUploadsDB] Error storing failed upload:', error); + throw error; + } +}; + +/** + * Get all failed uploads waiting to retry + */ +export const getFailedUploads = async () => { + try { + const db = await initDB(); + const transaction = db.transaction([STORE_NAME], 'readonly'); + const objectStore = transaction.objectStore(STORE_NAME); + + return new Promise((resolve, reject) => { + const request = objectStore.getAll(); + + request.onsuccess = () => { + console.log(`[FailedUploadsDB] Retrieved ${request.result.length} failed uploads`); + resolve(request.result); + }; + + request.onerror = () => { + console.error('[FailedUploadsDB] Failed to retrieve uploads:', request.error); + reject(request.error); + }; + }); + } catch (error) { + console.error('[FailedUploadsDB] Error getting failed uploads:', error); + return []; + } +}; + +/** + * Get a specific failed upload by ID + */ +export const getFailedUpload = async (id) => { + try { + const db = await initDB(); + const transaction = db.transaction([STORE_NAME], 'readonly'); + const objectStore = transaction.objectStore(STORE_NAME); + + return new Promise((resolve, reject) => { + const request = objectStore.get(id); + + request.onsuccess = () => { + resolve(request.result); + }; + + request.onerror = () => { + console.error('[FailedUploadsDB] Failed to get upload:', request.error); + reject(request.error); + }; + }); + } catch (error) { + console.error('[FailedUploadsDB] Error getting failed upload:', error); + return null; + } +}; + +/** + * Update retry count for a failed upload + */ +export const updateRetryCount = async (id, retryCount, error = null) => { + try { + const db = await initDB(); + const transaction = db.transaction([STORE_NAME], 'readwrite'); + const objectStore = transaction.objectStore(STORE_NAME); + + const upload = await getFailedUpload(id); + if (!upload) { + console.warn('[FailedUploadsDB] Upload not found for retry count update'); + return; + } + + upload.retryCount = retryCount; + upload.lastRetry = Date.now(); + if (error) { + upload.lastError = error; + } + + return new Promise((resolve, reject) => { + const request = objectStore.put(upload); + + request.onsuccess = () => { + console.log(`[FailedUploadsDB] Updated retry count for upload ${id}: ${retryCount}`); + resolve(); + }; + + request.onerror = () => { + console.error('[FailedUploadsDB] Failed to update retry count:', request.error); + reject(request.error); + }; + }); + } catch (error) { + console.error('[FailedUploadsDB] Error updating retry count:', error); + } +}; + +/** + * Delete a failed upload (after successful retry) + */ +export const deleteFailedUpload = async (id) => { + try { + const db = await initDB(); + const transaction = db.transaction([STORE_NAME], 'readwrite'); + const objectStore = transaction.objectStore(STORE_NAME); + + return new Promise((resolve, reject) => { + const request = objectStore.delete(id); + + request.onsuccess = () => { + console.log('[FailedUploadsDB] Deleted successful upload:', id); + resolve(); + }; + + request.onerror = () => { + console.error('[FailedUploadsDB] Failed to delete upload:', request.error); + reject(request.error); + }; + }); + } catch (error) { + console.error('[FailedUploadsDB] Error deleting failed upload:', error); + } +}; + +/** + * Clear all failed uploads + */ +export const clearAllFailedUploads = async () => { + try { + const db = await initDB(); + const transaction = db.transaction([STORE_NAME], 'readwrite'); + const objectStore = transaction.objectStore(STORE_NAME); + + return new Promise((resolve, reject) => { + const request = objectStore.clear(); + + request.onsuccess = () => { + console.log('[FailedUploadsDB] Cleared all failed uploads'); + resolve(); + }; + + request.onerror = () => { + console.error('[FailedUploadsDB] Failed to clear uploads:', request.error); + reject(request.error); + }; + }); + } catch (error) { + console.error('[FailedUploadsDB] Error clearing failed uploads:', error); + } +}; + +/** + * Get count of failed uploads + */ +export const getFailedUploadCount = async () => { + try { + const db = await initDB(); + const transaction = db.transaction([STORE_NAME], 'readonly'); + const objectStore = transaction.objectStore(STORE_NAME); + + return new Promise((resolve, reject) => { + const request = objectStore.count(); + + request.onsuccess = () => { + resolve(request.result); + }; + + request.onerror = () => { + console.error('[FailedUploadsDB] Failed to count uploads:', request.error); + reject(request.error); + }; + }); + } catch (error) { + console.error('[FailedUploadsDB] Error counting failed uploads:', error); + return 0; + } +}; diff --git a/static/js/modules/db/incognito-storage.js b/static/js/modules/db/incognito-storage.js new file mode 100644 index 0000000..4f44f6f --- /dev/null +++ b/static/js/modules/db/incognito-storage.js @@ -0,0 +1,76 @@ +/** + * Incognito Mode storage utilities + * Uses sessionStorage for temporary storage that auto-clears when tab closes + */ + +const INCOGNITO_KEY = 'speakr_incognito_recording'; + +/** + * Save incognito recording data to sessionStorage + * @param {Object} data - Recording data including transcription, summary, title + */ +export function saveIncognitoRecording(data) { + try { + sessionStorage.setItem(INCOGNITO_KEY, JSON.stringify(data)); + console.log('[Incognito] Recording saved to sessionStorage'); + } catch (e) { + console.error('[Incognito] Failed to save recording:', e); + } +} + +/** + * Get incognito recording data from sessionStorage + * @returns {Object|null} Recording data or null if not found + */ +export function getIncognitoRecording() { + try { + const data = sessionStorage.getItem(INCOGNITO_KEY); + return data ? JSON.parse(data) : null; + } catch (e) { + console.error('[Incognito] Failed to retrieve recording:', e); + return null; + } +} + +/** + * Clear incognito recording from sessionStorage + */ +export function clearIncognitoRecording() { + try { + sessionStorage.removeItem(INCOGNITO_KEY); + console.log('[Incognito] Recording cleared from sessionStorage'); + } catch (e) { + console.error('[Incognito] Failed to clear recording:', e); + } +} + +/** + * Check if an incognito recording exists + * @returns {boolean} + */ +export function hasIncognitoRecording() { + try { + return sessionStorage.getItem(INCOGNITO_KEY) !== null; + } catch (e) { + return false; + } +} + +/** + * Update specific fields of the incognito recording + * @param {Object} updates - Fields to update + */ +export function updateIncognitoRecording(updates) { + try { + const existing = getIncognitoRecording(); + if (existing) { + const updated = { ...existing, ...updates }; + saveIncognitoRecording(updated); + return updated; + } + return null; + } catch (e) { + console.error('[Incognito] Failed to update recording:', e); + return null; + } +} diff --git a/static/js/modules/db/recording-persistence.js b/static/js/modules/db/recording-persistence.js new file mode 100644 index 0000000..ccfc119 --- /dev/null +++ b/static/js/modules/db/recording-persistence.js @@ -0,0 +1,267 @@ +/** + * IndexedDB Recording Persistence + * Handles saving recording chunks to IndexedDB for crash recovery + */ + +const DB_NAME = 'SpeakrRecordings'; +const DB_VERSION = 1; +const STORE_NAME = 'activeRecording'; + +let dbInstance = null; + +/** + * Helper to promisify IDBRequest + */ +const promisifyRequest = (request) => { + return new Promise((resolve, reject) => { + request.onsuccess = () => resolve(request.result); + request.onerror = () => reject(request.error); + }); +}; + +/** + * Initialize IndexedDB + */ +export const initDB = () => { + return new Promise((resolve, reject) => { + if (dbInstance) { + resolve(dbInstance); + return; + } + + const request = indexedDB.open(DB_NAME, DB_VERSION); + + request.onerror = () => { + console.error('[RecordingDB] Failed to open database:', request.error); + reject(request.error); + }; + + request.onsuccess = () => { + dbInstance = request.result; + console.log('[RecordingDB] Database opened successfully'); + resolve(dbInstance); + }; + + request.onupgradeneeded = (event) => { + const db = event.target.result; + + // Create object store for active recording + if (!db.objectStoreNames.contains(STORE_NAME)) { + const objectStore = db.createObjectStore(STORE_NAME, { keyPath: 'id' }); + objectStore.createIndex('timestamp', 'timestamp', { unique: false }); + console.log('[RecordingDB] Object store created'); + } + }; + }); +}; + +/** + * Save recording metadata and initialize session + */ +export const startRecordingSession = async (recordingData) => { + try { + const db = await initDB(); + const transaction = db.transaction([STORE_NAME], 'readwrite'); + const objectStore = transaction.objectStore(STORE_NAME); + + const session = { + id: 'current', + timestamp: Date.now(), + startTime: new Date().toISOString(), + mode: recordingData.mode, + notes: recordingData.notes || '', + tags: recordingData.tags || [], + asrOptions: recordingData.asrOptions || {}, + chunks: [], + mimeType: recordingData.mimeType || 'audio/webm', + duration: 0 + }; + + await promisifyRequest(objectStore.put(session)); + console.log('[RecordingDB] Recording session started:', session.id); + return session; + } catch (error) { + console.error('[RecordingDB] Failed to start session:', error); + throw error; + } +}; + +/** + * Save a recording chunk to IndexedDB + */ +export const saveChunk = async (chunkBlob, chunkIndex) => { + try { + // Do async prep work BEFORE creating transaction to avoid auto-close + const db = await initDB(); + const arrayBuffer = await chunkBlob.arrayBuffer(); + + // Now create transaction and do all DB operations quickly + const transaction = db.transaction([STORE_NAME], 'readwrite'); + const objectStore = transaction.objectStore(STORE_NAME); + + // Get current session + const session = await promisifyRequest(objectStore.get('current')); + + if (!session) { + console.warn('[RecordingDB] No active session found'); + return; + } + + // Add chunk to session + session.chunks.push({ + index: chunkIndex, + data: arrayBuffer, + size: chunkBlob.size, + timestamp: Date.now() + }); + + // Update session - must happen before transaction auto-closes + await promisifyRequest(objectStore.put(session)); + // Chunk saved silently to avoid spam (happens every 5 seconds) + } catch (error) { + console.error('[RecordingDB] Failed to save chunk:', error); + // Don't throw - recording should continue even if persistence fails + } +}; + +/** + * Update recording metadata (notes, duration, etc.) + */ +export const updateRecordingMetadata = async (updates) => { + try { + const db = await initDB(); + const transaction = db.transaction([STORE_NAME], 'readwrite'); + const objectStore = transaction.objectStore(STORE_NAME); + + const session = await promisifyRequest(objectStore.get('current')); + + if (!session) { + console.warn('[RecordingDB] No active session to update'); + return; + } + + // Merge updates + Object.assign(session, updates); + await promisifyRequest(objectStore.put(session)); + // Metadata updated silently to avoid spam (happens every 5 seconds) + } catch (error) { + console.error('[RecordingDB] Failed to update metadata:', error); + } +}; + +/** + * Check if there's a recoverable recording + */ +export const checkForRecoverableRecording = async () => { + try { + const db = await initDB(); + const transaction = db.transaction([STORE_NAME], 'readonly'); + const objectStore = transaction.objectStore(STORE_NAME); + + const session = await promisifyRequest(objectStore.get('current')); + + if (!session || !session.chunks || session.chunks.length === 0) { + return null; + } + + // Calculate total size + const totalSize = session.chunks.reduce((sum, chunk) => sum + chunk.size, 0); + + // Calculate approximate duration (1 second chunks) + const duration = session.chunks.length; + + console.log('[RecordingDB] Found recoverable recording:', { + chunks: session.chunks.length, + size: totalSize, + duration: duration, + startTime: session.startTime + }); + + return { + ...session, + totalSize, + duration: duration + }; + } catch (error) { + console.error('[RecordingDB] Failed to check for recoverable recording:', error); + return null; + } +}; + +/** + * Recover recording from IndexedDB + */ +export const recoverRecording = async () => { + try { + const db = await initDB(); + const transaction = db.transaction([STORE_NAME], 'readonly'); + const objectStore = transaction.objectStore(STORE_NAME); + + const session = await promisifyRequest(objectStore.get('current')); + + if (!session || !session.chunks || session.chunks.length === 0) { + console.warn('[RecordingDB] No recording to recover'); + return null; + } + + // Convert chunks back to Blobs + const chunks = session.chunks.map(chunk => { + return new Blob([chunk.data], { type: session.mimeType }); + }); + + console.log(`[RecordingDB] Recovered ${chunks.length} chunks`); + + return { + chunks, + metadata: { + mode: session.mode, + notes: session.notes, + tags: session.tags, + asrOptions: session.asrOptions, + mimeType: session.mimeType, + duration: session.chunks.length, + startTime: session.startTime + } + }; + } catch (error) { + console.error('[RecordingDB] Failed to recover recording:', error); + return null; + } +}; + +/** + * Clear recording session (after successful upload or discard) + */ +export const clearRecordingSession = async () => { + try { + const db = await initDB(); + const transaction = db.transaction([STORE_NAME], 'readwrite'); + const objectStore = transaction.objectStore(STORE_NAME); + + await promisifyRequest(objectStore.delete('current')); + console.log('[RecordingDB] Recording session cleared'); + } catch (error) { + console.error('[RecordingDB] Failed to clear session:', error); + } +}; + +/** + * Get database size information + */ +export const getDatabaseSize = async () => { + try { + if (!navigator.storage || !navigator.storage.estimate) { + return null; + } + + const estimate = await navigator.storage.estimate(); + return { + usage: estimate.usage, + quota: estimate.quota, + percentage: ((estimate.usage / estimate.quota) * 100).toFixed(2) + }; + } catch (error) { + console.error('[RecordingDB] Failed to get database size:', error); + return null; + } +}; diff --git a/static/js/modules/state/audio.js b/static/js/modules/state/audio.js new file mode 100644 index 0000000..ff4a9f3 --- /dev/null +++ b/static/js/modules/state/audio.js @@ -0,0 +1,95 @@ +/** + * Audio recording state management + */ + +export function createAudioState(ref, computed) { + // --- Audio Recording State --- + const isRecording = ref(false); + const mediaRecorder = ref(null); + const audioChunks = ref([]); + const audioBlobURL = ref(null); + const recordingTime = ref(0); + const recordingInterval = ref(null); + const canRecordAudio = ref(navigator.mediaDevices && navigator.mediaDevices.getUserMedia); + const canRecordSystemAudio = computed(() => navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia); + const systemAudioSupported = ref(false); + const systemAudioError = ref(''); + const recordingNotes = ref(''); + const showSystemAudioHelp = ref(false); + + // ASR options for recording view + const asrLanguage = ref(''); + const asrMinSpeakers = ref(''); + const asrMaxSpeakers = ref(''); + + // Audio context and analyzers + const audioContext = ref(null); + const analyser = ref(null); + const micAnalyser = ref(null); + const systemAnalyser = ref(null); + const visualizer = ref(null); + const micVisualizer = ref(null); + const systemVisualizer = ref(null); + const animationFrameId = ref(null); + const recordingMode = ref('microphone'); + const activeStreams = ref([]); + + // --- Wake Lock and Background Recording --- + const wakeLock = ref(null); + const recordingNotification = ref(null); + const isPageVisible = ref(true); + + // --- Recording Size Monitoring --- + const estimatedFileSize = ref(0); + const fileSizeWarningShown = ref(false); + const recordingQuality = ref('optimized'); + const actualBitrate = ref(0); + const maxRecordingMB = ref(200); + const sizeCheckInterval = ref(null); + + return { + // Recording state + isRecording, + mediaRecorder, + audioChunks, + audioBlobURL, + recordingTime, + recordingInterval, + canRecordAudio, + canRecordSystemAudio, + systemAudioSupported, + systemAudioError, + recordingNotes, + showSystemAudioHelp, + + // ASR options + asrLanguage, + asrMinSpeakers, + asrMaxSpeakers, + + // Audio context + audioContext, + analyser, + micAnalyser, + systemAnalyser, + visualizer, + micVisualizer, + systemVisualizer, + animationFrameId, + recordingMode, + activeStreams, + + // Wake lock + wakeLock, + recordingNotification, + isPageVisible, + + // Size monitoring + estimatedFileSize, + fileSizeWarningShown, + recordingQuality, + actualBitrate, + maxRecordingMB, + sizeCheckInterval + }; +} diff --git a/static/js/modules/state/chat.js b/static/js/modules/state/chat.js new file mode 100644 index 0000000..e8cb411 --- /dev/null +++ b/static/js/modules/state/chat.js @@ -0,0 +1,23 @@ +/** + * Chat state management + */ + +export function createChatState(ref) { + const showChat = ref(false); + const isChatMaximized = ref(false); + const chatMessages = ref([]); + const chatInput = ref(''); + const isChatLoading = ref(false); + const chatMessagesRef = ref(null); + const chatInputRef = ref(null); + + return { + showChat, + isChatMaximized, + chatMessages, + chatInput, + isChatLoading, + chatMessagesRef, + chatInputRef + }; +} diff --git a/static/js/modules/state/core.js b/static/js/modules/state/core.js new file mode 100644 index 0000000..9150dae --- /dev/null +++ b/static/js/modules/state/core.js @@ -0,0 +1,164 @@ +/** + * Core application state + */ + +export function createCoreState(ref, computed) { + // --- Core State --- + const currentView = ref('upload'); + const dragover = ref(false); + const recordings = ref([]); + const selectedRecording = ref(null); + const selectedTab = ref('summary'); + const searchQuery = ref(''); + const isLoadingRecordings = ref(true); + const globalError = ref(null); + + // --- Pagination State --- + const currentPage = ref(1); + const perPage = ref(25); + const totalRecordings = ref(0); + const totalPages = ref(0); + const hasNextPage = ref(false); + const hasPrevPage = ref(false); + const isLoadingMore = ref(false); + const searchDebounceTimer = ref(null); + + // --- Enhanced Search & Organization State --- + const sortBy = ref('created_at'); + const selectedTagFilter = ref(null); + + // Advanced filter state + const showAdvancedFilters = ref(false); + const filterTags = ref([]); + const filterSpeakers = ref([]); // Array of speaker names for filtering + const filterDateRange = ref({ start: '', end: '' }); + const filterDatePreset = ref(''); + const filterTextQuery = ref(''); + const showArchivedRecordings = ref(false); + const showSharedWithMe = ref(false); + + // --- App Configuration --- + const useAsrEndpoint = ref(false); + const connectorSupportsDiarization = ref(false); // Connector capability for diarization UI + const connectorSupportsSpeakerCount = ref(false); // Connector capability for min/max speakers + const currentUserName = ref(''); + const canDeleteRecordings = ref(true); + const enableInternalSharing = ref(false); + const enableArchiveToggle = ref(false); + const showUsernamesInUI = ref(false); + + // --- Incognito Mode State --- + const enableIncognitoMode = ref(false); // Server config - whether feature is available + const incognitoMode = ref(false); // User toggle - whether to use incognito for current upload + const incognitoRecording = ref(null); + const incognitoProcessing = ref(false); + + // Tag Selection + const availableTags = ref([]); + const selectedTagIds = ref([]); + const uploadTagSearchFilter = ref(''); + + // Folder Selection + const availableFolders = ref([]); + const selectedFolderId = ref(null); + const foldersEnabled = ref(false); + const filterFolder = ref(''); // '' = all, 'none' = no folder, or folder id + + // Speaker Selection + const availableSpeakers = ref([]); + + const selectedTags = computed(() => { + return selectedTagIds.value.map(tagId => + availableTags.value.find(tag => tag.id == tagId) + ).filter(Boolean); + }); + + const filteredAvailableTagsForUpload = computed(() => { + const availableForSelection = availableTags.value.filter(tag => !selectedTagIds.value.includes(tag.id)); + if (!uploadTagSearchFilter.value) return availableForSelection; + + const filter = uploadTagSearchFilter.value.toLowerCase(); + return availableForSelection.filter(tag => + tag.name.toLowerCase().includes(filter) + ); + }); + + const filteredRecordings = computed(() => { + return recordings.value; + }); + + const setGlobalError = (message, duration = 7000) => { + globalError.value = message; + if (duration > 0) { + setTimeout(() => { if (globalError.value === message) globalError.value = null; }, duration); + } + }; + + return { + // Core + currentView, + dragover, + recordings, + selectedRecording, + selectedTab, + searchQuery, + isLoadingRecordings, + globalError, + setGlobalError, + + // Pagination + currentPage, + perPage, + totalRecordings, + totalPages, + hasNextPage, + hasPrevPage, + isLoadingMore, + searchDebounceTimer, + + // Search & Organization + sortBy, + selectedTagFilter, + showAdvancedFilters, + filterTags, + filterSpeakers, + filterDateRange, + filterDatePreset, + filterTextQuery, + showArchivedRecordings, + showSharedWithMe, + + // App Configuration + useAsrEndpoint, + connectorSupportsDiarization, + connectorSupportsSpeakerCount, + currentUserName, + canDeleteRecordings, + enableInternalSharing, + enableArchiveToggle, + showUsernamesInUI, + + // Tags + availableTags, + selectedTagIds, + uploadTagSearchFilter, + selectedTags, + filteredAvailableTagsForUpload, + filteredRecordings, + + // Folders + availableFolders, + selectedFolderId, + foldersEnabled, + filterFolder, + + // Speakers + availableSpeakers, + + // Incognito Mode + enableIncognitoMode, + incognitoMode, + incognitoRecording, + incognitoProcessing + }; +} diff --git a/static/js/modules/state/index.js b/static/js/modules/state/index.js new file mode 100644 index 0000000..fe5d0b4 --- /dev/null +++ b/static/js/modules/state/index.js @@ -0,0 +1,11 @@ +/** + * State module exports + */ + +export { createCoreState } from './core.js'; +export { createUIState } from './ui.js'; +export { createUploadState } from './upload.js'; +export { createAudioState } from './audio.js'; +export { createModalState } from './modals.js'; +export { createChatState } from './chat.js'; +export { createSharingState } from './sharing.js'; diff --git a/static/js/modules/state/modals.js b/static/js/modules/state/modals.js new file mode 100644 index 0000000..84e8b19 --- /dev/null +++ b/static/js/modules/state/modals.js @@ -0,0 +1,193 @@ +/** + * Modal state management + */ + +export function createModalState(ref, reactive) { + // --- Modal Visibility State --- + const showEditModal = ref(false); + const showDeleteModal = ref(false); + const showEditTagsModal = ref(false); + const showReprocessModal = ref(false); + const showResetModal = ref(false); + const showSpeakerModal = ref(false); + const speakerModalTab = ref('speakers'); // 'speakers' or 'transcript' for mobile view + const showShareModal = ref(false); + const showSharesListModal = ref(false); + const showTextEditorModal = ref(false); + const showAsrEditorModal = ref(false); + const showEditSpeakersModal = ref(false); + const showEditTextModal = ref(false); + const showAddSpeakerModal = ref(false); + const showShareDeleteModal = ref(false); + const showUnifiedShareModal = ref(false); + const showDateTimePicker = ref(false); + + // --- DateTime Picker State --- + const pickerMonth = ref(new Date().getMonth()); + const pickerYear = ref(new Date().getFullYear()); + const pickerHour = ref(12); + const pickerMinute = ref(0); + const pickerAmPm = ref('PM'); + const pickerSelectedDate = ref(null); + const dateTimePickerTarget = ref(null); // 'meeting_date' or other field name + const dateTimePickerCallback = ref(null); // callback function after applying + + // --- Modal Data State --- + const selectedNewTagId = ref(''); + const tagSearchFilter = ref(''); + const editingRecording = ref(null); + const editingTranscriptionContent = ref(''); + const editingSegments = ref([]); + const availableSpeakers = ref([]); + const editingSpeakersList = ref([]); + const databaseSpeakers = ref([]); + const editingSpeakerSuggestions = ref({}); + const recordingToDelete = ref(null); + const recordingToReset = ref(null); + const reprocessType = ref(null); + const reprocessRecording = ref(null); + const isAutoIdentifying = ref(false); + + const asrReprocessOptions = reactive({ + language: '', + min_speakers: null, + max_speakers: null + }); + + const summaryReprocessPromptSource = ref('default'); + const summaryReprocessSelectedTagId = ref(''); + const summaryReprocessCustomPrompt = ref(''); + const speakerMap = ref({}); + const regenerateSummaryAfterSpeakerUpdate = ref(true); + const speakerSuggestions = ref({}); + const loadingSuggestions = ref({}); + const activeSpeakerInput = ref(null); + const voiceSuggestions = ref({}); + const loadingVoiceSuggestions = ref(false); + + // --- Transcript Editing State --- + const editingSegmentIndex = ref(null); + const editingSpeakerIndex = ref(null); + const editedText = ref(''); + const newSpeakerName = ref(''); + const newSpeakerIsMe = ref(false); + const editedTranscriptData = ref(null); + + // --- Inline Editing State --- + const editingParticipants = ref(false); + const editingMeetingDate = ref(false); + const editingSummary = ref(false); + const editingNotes = ref(false); + const tempNotesContent = ref(''); + const tempSummaryContent = ref(''); + const autoSaveTimer = ref(null); + const autoSaveDelay = 2000; + + // --- Markdown Editor State --- + const notesMarkdownEditor = ref(null); + const markdownEditorInstance = ref(null); + const summaryMarkdownEditor = ref(null); + const summaryMarkdownEditorInstance = ref(null); + const recordingNotesEditor = ref(null); + const recordingMarkdownEditorInstance = ref(null); + + // --- Dropdown Positions --- + const dropdownPositions = ref({}); + const editSpeakerDropdownPositions = ref({}); + + // --- Single-ref dropdown tracking (performance optimization) --- + // Instead of each segment having showSuggestions property (O(n) to close all), + // track which dropdown is open with a single ref (O(1) operations) + const openAsrDropdownIndex = ref(null); + + return { + // Modal visibility + showEditModal, + showDeleteModal, + showEditTagsModal, + showReprocessModal, + showResetModal, + showSpeakerModal, + speakerModalTab, + showShareModal, + showSharesListModal, + showTextEditorModal, + showAsrEditorModal, + showEditSpeakersModal, + showEditTextModal, + showAddSpeakerModal, + showShareDeleteModal, + showUnifiedShareModal, + showDateTimePicker, + + // DateTime picker + pickerMonth, + pickerYear, + pickerHour, + pickerMinute, + pickerAmPm, + pickerSelectedDate, + dateTimePickerTarget, + dateTimePickerCallback, + + // Modal data + selectedNewTagId, + tagSearchFilter, + editingRecording, + editingTranscriptionContent, + editingSegments, + availableSpeakers, + editingSpeakersList, + databaseSpeakers, + editingSpeakerSuggestions, + recordingToDelete, + recordingToReset, + reprocessType, + reprocessRecording, + isAutoIdentifying, + asrReprocessOptions, + summaryReprocessPromptSource, + summaryReprocessSelectedTagId, + summaryReprocessCustomPrompt, + speakerMap, + regenerateSummaryAfterSpeakerUpdate, + speakerSuggestions, + loadingSuggestions, + activeSpeakerInput, + voiceSuggestions, + loadingVoiceSuggestions, + + // Transcript editing + editingSegmentIndex, + editingSpeakerIndex, + editedText, + newSpeakerName, + newSpeakerIsMe, + editedTranscriptData, + + // Inline editing + editingParticipants, + editingMeetingDate, + editingSummary, + editingNotes, + tempNotesContent, + tempSummaryContent, + autoSaveTimer, + autoSaveDelay, + + // Markdown editors + notesMarkdownEditor, + markdownEditorInstance, + summaryMarkdownEditor, + summaryMarkdownEditorInstance, + recordingNotesEditor, + recordingMarkdownEditorInstance, + + // Dropdown positions + dropdownPositions, + editSpeakerDropdownPositions, + + // Single-ref dropdown tracking + openAsrDropdownIndex + }; +} diff --git a/static/js/modules/state/pwa.js b/static/js/modules/state/pwa.js new file mode 100644 index 0000000..a8bfcb8 --- /dev/null +++ b/static/js/modules/state/pwa.js @@ -0,0 +1,39 @@ +/** + * PWA state management + */ + +export function createPWAState(ref) { + // --- Install Prompt --- + const deferredInstallPrompt = ref(null); + const showInstallButton = ref(false); + const isPWAInstalled = ref(false); + + // --- Notifications --- + const notificationPermission = ref('default'); + const pushSubscription = ref(null); + + // --- Badging --- + const appBadgeCount = ref(0); + + // --- Media Session --- + const currentMediaMetadata = ref(null); + const isMediaSessionActive = ref(false); + + return { + // Install prompt + deferredInstallPrompt, + showInstallButton, + isPWAInstalled, + + // Notifications + notificationPermission, + pushSubscription, + + // Badging + appBadgeCount, + + // Media session + currentMediaMetadata, + isMediaSessionActive + }; +} diff --git a/static/js/modules/state/sharing.js b/static/js/modules/state/sharing.js new file mode 100644 index 0000000..436b581 --- /dev/null +++ b/static/js/modules/state/sharing.js @@ -0,0 +1,66 @@ +/** + * Sharing state management + */ + +export function createSharingState(ref, reactive) { + // --- Public Sharing State --- + const recordingToShare = ref(null); + const shareOptions = reactive({ + share_summary: true, + share_notes: true, + }); + const generatedShareLink = ref(''); + const existingShareDetected = ref(false); + const userShares = ref([]); + const isLoadingShares = ref(false); + const shareToDelete = ref(null); + + // --- Internal Sharing State --- + const internalShareUserSearch = ref(''); + const internalShareSearchResults = ref([]); + const internalShareRecording = ref(null); + const internalSharePermissions = ref({ can_edit: false, can_reshare: false }); + const recordingInternalShares = ref([]); + const isLoadingInternalShares = ref(false); + const isSearchingUsers = ref(false); + const allUsers = ref([]); + const isLoadingAllUsers = ref(false); + + // --- Audio Player State --- + const playerVolume = ref(1.0); + const audioIsPlaying = ref(false); + const audioCurrentTime = ref(0); + const audioDuration = ref(0); + const audioIsMuted = ref(false); + const audioIsLoading = ref(false); + + return { + // Public sharing + recordingToShare, + shareOptions, + generatedShareLink, + existingShareDetected, + userShares, + isLoadingShares, + shareToDelete, + + // Internal sharing + internalShareUserSearch, + internalShareSearchResults, + internalShareRecording, + internalSharePermissions, + recordingInternalShares, + isLoadingInternalShares, + isSearchingUsers, + allUsers, + isLoadingAllUsers, + + // Audio player + playerVolume, + audioIsPlaying, + audioCurrentTime, + audioDuration, + audioIsMuted, + audioIsLoading + }; +} diff --git a/static/js/modules/state/ui.js b/static/js/modules/state/ui.js new file mode 100644 index 0000000..ec54df8 --- /dev/null +++ b/static/js/modules/state/ui.js @@ -0,0 +1,109 @@ +/** + * UI state management + */ + +export function createUIState(ref, computed) { + // --- UI State --- + const browser = ref('unknown'); + const isSidebarCollapsed = ref(false); + const searchTipsExpanded = ref(false); + const isUserMenuOpen = ref(false); + const isDarkMode = ref(false); + const currentColorScheme = ref('blue'); + const showColorSchemeModal = ref(false); + const windowWidth = ref(window.innerWidth); + const mobileTab = ref('transcript'); + const isMetadataExpanded = ref(false); + const expandedSection = ref('settings'); // 'notes' or 'settings' + + // --- i18n State --- + const currentLanguage = ref('en'); + const currentLanguageName = ref('English'); + const availableLanguages = ref([]); + const showLanguageMenu = ref(false); + + // --- Column Resizing State --- + const leftColumnWidth = ref(60); + const rightColumnWidth = ref(40); + const isResizing = ref(false); + + // --- Transcription State --- + const transcriptionViewMode = ref('simple'); + const legendExpanded = ref(false); + const highlightedSpeaker = ref(null); + const processingIndicatorMinimized = ref(false); + + // --- Virtual Scroll State --- + // For transcript panel virtual scrolling (performance optimization for long transcriptions) + const transcriptScrollTop = ref(0); + const transcriptContainerHeight = ref(0); + const transcriptItemHeight = 48; // Estimated height per segment in pixels + + // --- Computed Properties --- + const isMobileScreen = computed(() => { + return windowWidth.value < 1024; + }); + + // --- Color Scheme Definitions --- + const colorSchemes = { + light: [ + { id: 'blue', name: 'Ocean Blue', description: 'Classic blue theme with professional appeal', class: '' }, + { id: 'emerald', name: 'Forest Emerald', description: 'Fresh green theme for a natural feel', class: 'theme-light-emerald' }, + { id: 'purple', name: 'Royal Purple', description: 'Elegant purple theme with sophistication', class: 'theme-light-purple' }, + { id: 'rose', name: 'Sunset Rose', description: 'Warm pink theme with gentle energy', class: 'theme-light-rose' }, + { id: 'amber', name: 'Golden Amber', description: 'Warm yellow theme for brightness', class: 'theme-light-amber' }, + { id: 'teal', name: 'Ocean Teal', description: 'Cool teal theme for tranquility', class: 'theme-light-teal' } + ], + dark: [ + { id: 'blue', name: 'Midnight Blue', description: 'Deep blue theme for focused work', class: '' }, + { id: 'emerald', name: 'Dark Forest', description: 'Rich green theme for comfortable viewing', class: 'theme-dark-emerald' }, + { id: 'purple', name: 'Deep Purple', description: 'Mysterious purple theme for creativity', class: 'theme-dark-purple' }, + { id: 'rose', name: 'Dark Rose', description: 'Muted pink theme with subtle warmth', class: 'theme-dark-rose' }, + { id: 'amber', name: 'Dark Amber', description: 'Warm brown theme for cozy sessions', class: 'theme-dark-amber' }, + { id: 'teal', name: 'Deep Teal', description: 'Dark teal theme for calm focus', class: 'theme-dark-teal' } + ] + }; + + return { + // UI + browser, + isSidebarCollapsed, + searchTipsExpanded, + isUserMenuOpen, + isDarkMode, + currentColorScheme, + showColorSchemeModal, + windowWidth, + mobileTab, + isMetadataExpanded, + expandedSection, + + // i18n + currentLanguage, + currentLanguageName, + availableLanguages, + showLanguageMenu, + + // Column Resizing + leftColumnWidth, + rightColumnWidth, + isResizing, + + // Transcription + transcriptionViewMode, + legendExpanded, + highlightedSpeaker, + processingIndicatorMinimized, + + // Virtual Scroll + transcriptScrollTop, + transcriptContainerHeight, + transcriptItemHeight, + + // Computed + isMobileScreen, + + // Constants + colorSchemes + }; +} diff --git a/static/js/modules/state/upload.js b/static/js/modules/state/upload.js new file mode 100644 index 0000000..f7fa276 --- /dev/null +++ b/static/js/modules/state/upload.js @@ -0,0 +1,77 @@ +/** + * Upload state management + */ + +export function createUploadState(ref, computed) { + // --- Upload State --- + const uploadQueue = ref([]); + const currentlyProcessingFile = ref(null); + const processingProgress = ref(0); + const processingMessage = ref(''); + const isProcessingActive = ref(false); + const pollInterval = ref(null); + const progressPopupMinimized = ref(false); + const progressPopupClosed = ref(false); + const maxFileSizeMB = ref(250); + const chunkingEnabled = ref(true); + const chunkingMode = ref('size'); + const chunkingLimit = ref(20); + const chunkingLimitDisplay = ref('20MB'); + const maxConcurrentUploads = ref(3); + const recordingDisclaimer = ref(''); + const showRecordingDisclaimerModal = ref(false); + const pendingRecordingMode = ref(null); + + // Advanced Options for ASR + const showAdvancedOptions = ref(false); + const uploadLanguage = ref(''); + const uploadMinSpeakers = ref(''); + const uploadMaxSpeakers = ref(''); + const uploadHotwords = ref(''); + const uploadInitialPrompt = ref(''); + + // --- Computed Properties --- + const totalInQueue = computed(() => uploadQueue.value.length); + const completedInQueue = computed(() => uploadQueue.value.filter(item => item.status === 'completed' || item.status === 'failed').length); + const finishedFilesInQueue = computed(() => uploadQueue.value.filter(item => ['completed', 'failed'].includes(item.status))); + + const clearCompletedUploads = () => { + uploadQueue.value = uploadQueue.value.filter(item => !['completed', 'failed'].includes(item.status)); + }; + + return { + uploadQueue, + currentlyProcessingFile, + processingProgress, + processingMessage, + isProcessingActive, + pollInterval, + progressPopupMinimized, + progressPopupClosed, + maxFileSizeMB, + chunkingEnabled, + chunkingMode, + chunkingLimit, + chunkingLimitDisplay, + maxConcurrentUploads, + recordingDisclaimer, + showRecordingDisclaimerModal, + pendingRecordingMode, + + // Advanced Options + showAdvancedOptions, + uploadLanguage, + uploadMinSpeakers, + uploadMaxSpeakers, + uploadHotwords, + uploadInitialPrompt, + + // Computed + totalInQueue, + completedInQueue, + finishedFilesInQueue, + + // Methods + clearCompletedUploads + }; +} diff --git a/static/js/modules/utils/api.js b/static/js/modules/utils/api.js new file mode 100644 index 0000000..1976f1a --- /dev/null +++ b/static/js/modules/utils/api.js @@ -0,0 +1,61 @@ +/** + * API utility functions with CSRF token handling + */ + +export const createApiClient = (csrfToken) => { + const getHeaders = (contentType = 'application/json') => { + const headers = { + 'X-CSRFToken': csrfToken.value + }; + if (contentType) { + headers['Content-Type'] = contentType; + } + return headers; + }; + + return { + get: async (url) => { + const response = await fetch(url, { + headers: getHeaders() + }); + return response; + }, + + post: async (url, data = {}) => { + const response = await fetch(url, { + method: 'POST', + headers: getHeaders(), + body: JSON.stringify(data) + }); + return response; + }, + + postFormData: async (url, formData) => { + const response = await fetch(url, { + method: 'POST', + headers: { + 'X-CSRFToken': csrfToken.value + }, + body: formData + }); + return response; + }, + + delete: async (url) => { + const response = await fetch(url, { + method: 'DELETE', + headers: getHeaders() + }); + return response; + }, + + put: async (url, data = {}) => { + const response = await fetch(url, { + method: 'PUT', + headers: getHeaders(), + body: JSON.stringify(data) + }); + return response; + } + }; +}; diff --git a/static/js/modules/utils/colors.js b/static/js/modules/utils/colors.js new file mode 100644 index 0000000..14ac47f --- /dev/null +++ b/static/js/modules/utils/colors.js @@ -0,0 +1,50 @@ +/** + * Color utility functions + */ + +/** + * Calculate the relative luminance of a color + * Based on WCAG contrast ratio formula + * @param {string} hexColor - Hex color code (e.g., "#RRGGBB" or "#RGB") + * @returns {number} Luminance value between 0 and 1 + */ +function calculateLuminance(hexColor) { + // Remove # if present + const hex = hexColor.replace('#', ''); + + // Convert 3-digit hex to 6-digit + const fullHex = hex.length === 3 + ? hex.split('').map(char => char + char).join('') + : hex; + + // Parse RGB values + const r = parseInt(fullHex.substr(0, 2), 16) / 255; + const g = parseInt(fullHex.substr(2, 2), 16) / 255; + const b = parseInt(fullHex.substr(4, 2), 16) / 255; + + // Calculate relative luminance using simplified formula + // (More accurate would use gamma correction, but this is sufficient) + return 0.299 * r + 0.587 * g + 0.114 * b; +} + +/** + * Get the appropriate text color (black or white) for a given background color + * Ensures readable contrast based on background luminance + * @param {string} bgColor - Background color in hex format + * @returns {string} Either 'white' or 'black' + */ +export function getContrastTextColor(bgColor) { + if (!bgColor) { + return 'white'; // Default to white for undefined colors + } + + try { + const luminance = calculateLuminance(bgColor); + // Threshold of 0.65: only very light backgrounds get black text + // This ensures medium/dark colors like greens, blues still get white text + return luminance > 0.65 ? 'black' : 'white'; + } catch (e) { + console.warn('Failed to calculate contrast color for:', bgColor, e); + return 'white'; // Fallback to white + } +} diff --git a/static/js/modules/utils/dates.js b/static/js/modules/utils/dates.js new file mode 100644 index 0000000..768e93d --- /dev/null +++ b/static/js/modules/utils/dates.js @@ -0,0 +1,67 @@ +/** + * Date comparison utility functions + */ + +export const isSameDay = (date1, date2) => { + return date1.getFullYear() === date2.getFullYear() && + date1.getMonth() === date2.getMonth() && + date1.getDate() === date2.getDate(); +}; + +export const isToday = (date) => { + const today = new Date(); + return isSameDay(date, today); +}; + +export const isYesterday = (date) => { + const yesterday = new Date(); + yesterday.setDate(yesterday.getDate() - 1); + return isSameDay(date, yesterday); +}; + +export const isThisWeek = (date) => { + const now = new Date(); + const startOfWeek = new Date(now); + const day = now.getDay(); + const diff = now.getDate() - day + (day === 0 ? -6 : 1); // Monday as start of week + startOfWeek.setDate(diff); + startOfWeek.setHours(0, 0, 0, 0); + + const endOfWeek = new Date(startOfWeek); + endOfWeek.setDate(startOfWeek.getDate() + 6); + endOfWeek.setHours(23, 59, 59, 999); + + return date >= startOfWeek && date <= endOfWeek; +}; + +export const isLastWeek = (date) => { + const now = new Date(); + const startOfLastWeek = new Date(now); + const day = now.getDay(); + const diff = now.getDate() - day + (day === 0 ? -6 : 1) - 7; // Previous Monday + startOfLastWeek.setDate(diff); + startOfLastWeek.setHours(0, 0, 0, 0); + + const endOfLastWeek = new Date(startOfLastWeek); + endOfLastWeek.setDate(startOfLastWeek.getDate() + 6); + endOfLastWeek.setHours(23, 59, 59, 999); + + return date >= startOfLastWeek && date <= endOfLastWeek; +}; + +export const isThisMonth = (date) => { + const now = new Date(); + return date.getFullYear() === now.getFullYear() && date.getMonth() === now.getMonth(); +}; + +export const isLastMonth = (date) => { + const now = new Date(); + const lastMonth = new Date(now.getFullYear(), now.getMonth() - 1, 1); + return date.getFullYear() === lastMonth.getFullYear() && date.getMonth() === lastMonth.getMonth(); +}; + +export const getDateForSorting = (recording, sortBy) => { + const dateStr = sortBy === 'meeting_date' ? recording.meeting_date : recording.created_at; + if (!dateStr) return null; + return new Date(dateStr); +}; diff --git a/static/js/modules/utils/errorDisplay.js b/static/js/modules/utils/errorDisplay.js new file mode 100644 index 0000000..6671c2d --- /dev/null +++ b/static/js/modules/utils/errorDisplay.js @@ -0,0 +1,271 @@ +/** + * Error Display Utility + * + * Parses and displays user-friendly error messages from the backend. + * Handles both JSON-formatted errors (ERROR_JSON:...) and plain text errors. + */ + +/** + * Parse a stored error message from the backend. + * @param {string} text - The stored transcription/error text + * @returns {Object|null} - Parsed error object or null if not an error + */ +export function parseStoredError(text) { + if (!text) return null; + + // Check for JSON-formatted error + if (text.startsWith('ERROR_JSON:')) { + try { + const jsonStr = text.substring(11); // Remove 'ERROR_JSON:' prefix + const data = JSON.parse(jsonStr); + return { + title: data.t || 'Error', + message: data.m || 'An error occurred', + guidance: data.g || '', + icon: data.i || 'fa-exclamation-circle', + type: data.y || 'unknown', + isKnown: data.k || false, + technical: data.d || '', + isFormattedError: true + }; + } catch (e) { + console.error('Failed to parse error JSON:', e); + } + } + + // Check for legacy error format (starts with common error prefixes) + const errorPrefixes = [ + 'Transcription failed:', + 'Processing failed:', + 'ASR processing failed:', + 'Audio extraction failed:', + 'Error:' + ]; + + for (const prefix of errorPrefixes) { + if (text.startsWith(prefix)) { + // Parse the error using pattern matching + return parseUnformattedError(text); + } + } + + return null; +} + +/** + * Parse an unformatted error message and try to make it user-friendly. + * @param {string} text - The raw error text + * @returns {Object} - Parsed error object + */ +function parseUnformattedError(text) { + const lowerText = text.toLowerCase(); + + // Known error patterns + const patterns = [ + { + patterns: ['maximum content size limit', 'file too large', '413', 'payload too large', 'exceeded'], + title: 'File Too Large', + message: 'The audio file exceeds the maximum size allowed by the transcription service.', + guidance: 'Try enabling audio chunking in your settings, or compress the audio file before uploading.', + icon: 'fa-file-audio', + type: 'size_limit' + }, + { + patterns: ['timed out', 'timeout', 'deadline exceeded'], + title: 'Processing Timeout', + message: 'The transcription took too long to complete.', + guidance: 'This can happen with very long recordings. Try splitting the audio into smaller parts.', + icon: 'fa-clock', + type: 'timeout' + }, + { + patterns: ['401', 'unauthorized', 'invalid api key', 'authentication failed', 'incorrect api key'], + title: 'Authentication Error', + message: 'The transcription service rejected the API credentials.', + guidance: 'Please check that the API key is correct and has not expired.', + icon: 'fa-key', + type: 'auth' + }, + { + patterns: ['rate limit', 'too many requests', '429', 'quota exceeded'], + title: 'Rate Limit Exceeded', + message: 'Too many requests were sent to the transcription service.', + guidance: 'Please wait a few minutes and try reprocessing.', + icon: 'fa-hourglass-half', + type: 'rate_limit' + }, + { + patterns: ['connection refused', 'connection reset', 'could not connect', 'network unreachable'], + title: 'Connection Error', + message: 'Could not connect to the transcription service.', + guidance: 'Check your internet connection and ensure the service is available.', + icon: 'fa-wifi', + type: 'connection' + }, + { + patterns: ['503', '502', '500', 'service unavailable', 'server error', 'internal server error'], + title: 'Service Unavailable', + message: 'The transcription service is temporarily unavailable.', + guidance: 'This is usually temporary. Please try again in a few minutes.', + icon: 'fa-server', + type: 'service_error' + }, + { + patterns: ['invalid file format', 'unsupported format', 'could not decode', 'corrupt', 'not valid audio'], + title: 'Invalid Audio Format', + message: 'The audio file format is not supported or the file may be corrupted.', + guidance: 'Try converting the audio to MP3 or WAV format before uploading.', + icon: 'fa-file-audio', + type: 'format' + }, + { + patterns: ['audio extraction failed', 'ffmpeg failed', 'no audio stream'], + title: 'Audio Extraction Failed', + message: 'Could not extract audio from the uploaded file.', + guidance: 'Try converting the file to a standard audio format (MP3, WAV) before uploading.', + icon: 'fa-file-video', + type: 'extraction' + } + ]; + + // Check patterns + for (const pattern of patterns) { + for (const p of pattern.patterns) { + if (lowerText.includes(p)) { + return { + title: pattern.title, + message: pattern.message, + guidance: pattern.guidance, + icon: pattern.icon, + type: pattern.type, + isKnown: true, + technical: text, + isFormattedError: true + }; + } + } + } + + // Unknown error - clean it up as best we can + let cleanMessage = text; + for (const prefix of ['Transcription failed:', 'Processing failed:', 'Error:', 'ASR processing failed:']) { + if (cleanMessage.startsWith(prefix)) { + cleanMessage = cleanMessage.substring(prefix.length).trim(); + } + } + + // Truncate if too long + if (cleanMessage.length > 200) { + cleanMessage = cleanMessage.substring(0, 200) + '...'; + } + + return { + title: 'Processing Error', + message: cleanMessage, + guidance: 'If this error persists, try reprocessing the recording.', + icon: 'fa-exclamation-circle', + type: 'unknown', + isKnown: false, + technical: text, + isFormattedError: true + }; +} + +/** + * Check if a transcription text is actually an error message. + * @param {string} text - The transcription text + * @returns {boolean} + */ +export function isErrorMessage(text) { + if (!text) return false; + + if (text.startsWith('ERROR_JSON:')) return true; + + const errorPrefixes = [ + 'Transcription failed:', + 'Processing failed:', + 'ASR processing failed:', + 'Audio extraction failed:' + ]; + + return errorPrefixes.some(prefix => text.startsWith(prefix)); +} + +/** + * Generate HTML for displaying an error nicely. + * @param {Object} error - Parsed error object from parseStoredError + * @param {boolean} showTechnical - Whether to show technical details + * @returns {string} - HTML string + */ +export function generateErrorHTML(error, showTechnical = false) { + if (!error) return ''; + + const typeColors = { + size_limit: 'amber', + timeout: 'orange', + auth: 'red', + rate_limit: 'yellow', + connection: 'blue', + service_error: 'purple', + format: 'pink', + extraction: 'indigo', + billing: 'red', + model: 'gray', + unknown: 'gray' + }; + + const color = typeColors[error.type] || 'gray'; + + let html = ` + <div class="error-display bg-${color}-500/10 border border-${color}-500/30 rounded-lg p-4"> + <div class="flex items-start gap-3"> + <div class="flex-shrink-0 w-10 h-10 rounded-full bg-${color}-500/20 flex items-center justify-center"> + <i class="fas ${error.icon} text-${color}-500"></i> + </div> + <div class="flex-1 min-w-0"> + <h3 class="text-lg font-semibold text-${color}-600 dark:text-${color}-400 mb-1"> + ${escapeHtml(error.title)} + </h3> + <p class="text-[var(--text-primary)] mb-2"> + ${escapeHtml(error.message)} + </p> + ${error.guidance ? ` + <div class="flex items-start gap-2 text-sm text-[var(--text-secondary)] bg-[var(--bg-tertiary)]/50 rounded p-2"> + <i class="fas fa-lightbulb text-yellow-500 mt-0.5"></i> + <span>${escapeHtml(error.guidance)}</span> + </div> + ` : ''} + </div> + </div> + ${showTechnical && error.technical ? ` + <details class="mt-3 text-xs"> + <summary class="cursor-pointer text-[var(--text-muted)] hover:text-[var(--text-secondary)]"> + Technical details + </summary> + <pre class="mt-2 p-2 bg-[var(--bg-tertiary)] rounded overflow-x-auto text-[var(--text-muted)]">${escapeHtml(error.technical)}</pre> + </details> + ` : ''} + </div> + `; + + return html; +} + +/** + * Escape HTML special characters. + * @param {string} text + * @returns {string} + */ +function escapeHtml(text) { + if (!text) return ''; + const div = document.createElement('div'); + div.textContent = text; + return div.innerHTML; +} + +// Export for use in Vue components +export default { + parseStoredError, + isErrorMessage, + generateErrorHTML +}; diff --git a/static/js/modules/utils/formatters.js b/static/js/modules/utils/formatters.js new file mode 100644 index 0000000..e5e6a85 --- /dev/null +++ b/static/js/modules/utils/formatters.js @@ -0,0 +1,139 @@ +/** + * Formatting utility functions + */ + +export const formatFileSize = (bytes) => { + if (bytes == null || bytes === 0) return '0 Bytes'; + const k = 1024; + const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; + if (bytes < 0) bytes = 0; + const i = bytes === 0 ? 0 : Math.max(0, Math.floor(Math.log(bytes) / Math.log(k))); + const size = i === 0 ? bytes : parseFloat((bytes / Math.pow(k, i)).toFixed(2)); + return size + ' ' + sizes[i]; +}; + +export const formatDisplayDate = (dateString) => { + if (!dateString) return ''; + try { + let date = new Date(dateString); + + if (isNaN(date.getTime())) { + if (/^\d{4}-\d{2}-\d{2}$/.test(dateString)) { + date = new Date(dateString + 'T00:00:00'); + } else { + return dateString; + } + } + + if (isNaN(date.getTime())) { + return dateString; + } + + return date.toLocaleDateString(undefined, { year: 'numeric', month: 'long', day: 'numeric' }); + } catch (e) { + console.error("Error formatting date:", e); + return dateString; + } +}; + +export const formatShortDate = (dateString) => { + if (!dateString) return ''; + try { + let date = new Date(dateString); + + if (isNaN(date.getTime())) { + if (/^\d{4}-\d{2}-\d{2}$/.test(dateString)) { + date = new Date(dateString + 'T00:00:00'); + } else { + return dateString; + } + } + + if (isNaN(date.getTime())) { + return dateString; + } + + const now = new Date(); + const isCurrentYear = date.getFullYear() === now.getFullYear(); + + if (isCurrentYear) { + return date.toLocaleDateString(undefined, { month: 'short', day: 'numeric' }); + } else { + return date.toLocaleDateString(undefined, { year: '2-digit', month: 'short', day: 'numeric' }); + } + } catch (e) { + console.error("Error formatting short date:", e); + return dateString; + } +}; + +export const formatStatus = (status, t) => { + if (!status || status === 'COMPLETED') return ''; + const statusMap = { + 'PENDING': t('status.queued'), + 'QUEUED': t('status.queued'), + 'PROCESSING': t('status.processing'), + 'TRANSCRIBING': t('status.transcribing'), + 'SUMMARIZING': t('status.summarizing'), + 'FAILED': t('status.failed'), + 'UPLOADING': t('status.uploading') + }; + return statusMap[status] || status.charAt(0).toUpperCase() + status.slice(1).toLowerCase(); +}; + +export const getStatusClass = (status) => { + switch(status) { + case 'PENDING': return 'status-pending'; + case 'QUEUED': return 'status-pending'; + case 'PROCESSING': return 'status-processing'; + case 'SUMMARIZING': return 'status-summarizing'; + case 'COMPLETED': return ''; + case 'FAILED': return 'status-failed'; + default: return 'status-pending'; + } +}; + +export const formatTime = (seconds) => { + const minutes = Math.floor(seconds / 60); + const secs = seconds % 60; + return `${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`; +}; + +export const formatDuration = (totalSeconds) => { + if (totalSeconds == null || totalSeconds < 0) return 'N/A'; + + if (totalSeconds < 1) { + return `${totalSeconds.toFixed(2)} seconds`; + } + + totalSeconds = Math.round(totalSeconds); + + if (totalSeconds < 60) { + return `${totalSeconds} sec`; + } + + const hours = Math.floor(totalSeconds / 3600); + const minutes = Math.floor((totalSeconds % 3600) / 60); + const seconds = totalSeconds % 60; + + let parts = []; + if (hours > 0) { + parts.push(`${hours} hr`); + } + if (minutes > 0) { + parts.push(`${minutes} min`); + } + if (hours === 0 && seconds > 0) { + parts.push(`${seconds} sec`); + } + + return parts.join(' '); +}; + +export const formatProcessingDuration = (seconds) => { + if (!seconds && seconds !== 0) return null; + if (seconds < 60) return `${seconds}s`; + const mins = Math.floor(seconds / 60); + const secs = seconds % 60; + return secs > 0 ? `${mins}m ${secs}s` : `${mins}m`; +}; diff --git a/static/js/modules/utils/index.js b/static/js/modules/utils/index.js new file mode 100644 index 0000000..ae21318 --- /dev/null +++ b/static/js/modules/utils/index.js @@ -0,0 +1,9 @@ +/** + * Utils module exports + */ + +export * from './formatters.js'; +export * from './dates.js'; +export { createApiClient } from './api.js'; +export { showToast } from './toast.js'; +export { getContrastTextColor } from './colors.js'; diff --git a/static/js/modules/utils/toast.js b/static/js/modules/utils/toast.js new file mode 100644 index 0000000..9c4ab60 --- /dev/null +++ b/static/js/modules/utils/toast.js @@ -0,0 +1,91 @@ +/** + * Toast notification utility + */ + +export const showToast = (message, iconClass = 'fa-info-circle', duration = 3000, type = 'info') => { + const container = document.getElementById('toastContainer'); + if (!container) { + console.warn('Toast container not found'); + return; + } + + // Determine colors and styles based on type + let bgColor, textColor, iconColor, borderColor; + + switch (type) { + case 'success': + bgColor = '#10b981'; // green-500 + textColor = '#ffffff'; + iconColor = '#ffffff'; + borderColor = '#059669'; // green-600 + break; + case 'error': + bgColor = '#ef4444'; // red-500 + textColor = '#ffffff'; + iconColor = '#ffffff'; + borderColor = '#dc2626'; // red-600 + break; + case 'warning': + bgColor = '#f59e0b'; // amber-500 + textColor = '#ffffff'; + iconColor = '#ffffff'; + borderColor = '#d97706'; // amber-600 + break; + case 'info': + default: + bgColor = '#3b82f6'; // blue-500 + textColor = '#ffffff'; + iconColor = '#ffffff'; + borderColor = '#2563eb'; // blue-600 + break; + } + + const toast = document.createElement('div'); + toast.className = 'toast-message px-4 py-3 rounded-lg shadow-lg flex items-center gap-3 opacity-0 min-w-[300px]'; + toast.style.backgroundColor = bgColor; + toast.style.color = textColor; + toast.style.border = `1px solid ${borderColor}`; + + // Handle icon class - support both old format (just icon name) and new format (full class) + let fullIconClass = iconClass; + if (!iconClass.includes(' ')) { + // Old format: just the icon name like 'fa-check-circle' + fullIconClass = `fas ${iconClass}`; + } + + toast.innerHTML = ` + <i class="${fullIconClass}" style="color: ${iconColor}"></i> + <span class="flex-1">${message}</span> + `; + + // Make toast clickable to dismiss + toast.style.cursor = 'pointer'; + + container.appendChild(toast); + + // Trigger fly-in animation + requestAnimationFrame(() => { + toast.classList.remove('opacity-0'); + toast.classList.add('opacity-100', 'toast-show'); + }); + + // Function to dismiss the toast + const dismissToast = () => { + toast.classList.remove('opacity-100', 'toast-show'); + toast.classList.add('opacity-0'); + setTimeout(() => { + if (toast.parentNode) { + toast.parentNode.removeChild(toast); + } + }, 300); + }; + + // Add click handler to dismiss toast + toast.addEventListener('click', () => { + clearTimeout(timeoutId); + dismissToast(); + }); + + // Auto-dismiss after duration + const timeoutId = setTimeout(dismissToast, duration); +}; diff --git a/static/js/shared-components.js b/static/js/shared-components.js new file mode 100644 index 0000000..6ad28da --- /dev/null +++ b/static/js/shared-components.js @@ -0,0 +1,262 @@ +// Shared UI Components and Functionality +// This file contains reusable Vue composition functions and utilities +// that can be used across multiple pages (index, inquire, admin, etc.) + +// Dark Mode Composition +function useDarkMode() { + const isDarkMode = Vue.ref(false); + + const toggleDarkMode = () => { + isDarkMode.value = !isDarkMode.value; + if (isDarkMode.value) { + document.documentElement.classList.add('dark'); + localStorage.setItem('darkMode', 'true'); + } else { + document.documentElement.classList.remove('dark'); + localStorage.setItem('darkMode', 'false'); + } + }; + + const initializeDarkMode = () => { + const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; + const savedMode = localStorage.getItem('darkMode'); + if (savedMode === 'true' || (savedMode === null && prefersDark)) { + isDarkMode.value = true; + document.documentElement.classList.add('dark'); + } else { + isDarkMode.value = false; + document.documentElement.classList.remove('dark'); + } + }; + + return { + isDarkMode, + toggleDarkMode, + initializeDarkMode + }; +} + +// Color Scheme Composition +function useColorScheme() { + const showColorSchemeModal = Vue.ref(false); + const currentColorScheme = Vue.ref('blue'); + const isDarkMode = Vue.ref(false); + + const colorSchemes = { + light: [ + { id: 'blue', name: 'Ocean Blue', description: 'Classic blue theme with professional appeal', accent: '#3b82f6', hover: '#2563eb' }, + { id: 'emerald', name: 'Forest Emerald', description: 'Fresh green theme for a natural feel', accent: '#10b981', hover: '#059669' }, + { id: 'purple', name: 'Royal Purple', description: 'Elegant purple theme with sophistication', accent: '#8b5cf6', hover: '#7c3aed' }, + { id: 'rose', name: 'Sunset Rose', description: 'Warm pink theme with gentle energy', accent: '#f43f5e', hover: '#e11d48' }, + { id: 'amber', name: 'Golden Amber', description: 'Warm yellow theme for brightness', accent: '#f59e0b', hover: '#d97706' }, + { id: 'teal', name: 'Ocean Teal', description: 'Cool teal theme for tranquility', accent: '#06b6d4', hover: '#0891b2' } + ], + dark: [ + { id: 'blue', name: 'Midnight Blue', description: 'Deep blue for focused night work', accent: '#60a5fa', hover: '#3b82f6' }, + { id: 'emerald', name: 'Emerald Night', description: 'Rich green for comfortable viewing', accent: '#34d399', hover: '#10b981' }, + { id: 'purple', name: 'Deep Purple', description: 'Luxurious purple for creative sessions', accent: '#a78bfa', hover: '#8b5cf6' }, + { id: 'rose', name: 'Crimson', description: 'Bold red-pink for energetic work', accent: '#fb7185', hover: '#f43f5e' }, + { id: 'amber', name: 'Golden Hour', description: 'Warm amber for reduced eye strain', accent: '#fbbf24', hover: '#f59e0b' }, + { id: 'teal', name: 'Electric Cyan', description: 'Vibrant cyan for modern aesthetics', accent: '#22d3ee', hover: '#06b6d4' } + ] + }; + + const applyColorScheme = (schemeId) => { + const schemes = isDarkMode.value ? colorSchemes.dark : colorSchemes.light; + const scheme = schemes.find(s => s.id === schemeId); + if (scheme) { + // Remove all theme classes + const allThemeClasses = [ + ...colorSchemes.light.map(s => `theme-light-${s.id}`), + ...colorSchemes.dark.map(s => `theme-dark-${s.id}`) + ].filter(c => !c.includes('blue')); // blue is the default, no class needed + + document.documentElement.classList.remove(...allThemeClasses); + + // Apply new theme class if not blue (default) + if (schemeId !== 'blue') { + const themeClass = `theme-${isDarkMode.value ? 'dark' : 'light'}-${schemeId}`; + document.documentElement.classList.add(themeClass); + } + + // Don't set CSS variables - let the theme classes handle all colors + localStorage.setItem('colorScheme', schemeId); + currentColorScheme.value = schemeId; + } + }; + + const initializeColorScheme = (darkMode) => { + isDarkMode.value = darkMode; + const savedScheme = localStorage.getItem('colorScheme') || 'blue'; + currentColorScheme.value = savedScheme; + applyColorScheme(savedScheme); + }; + + // Watch for dark mode changes and reapply color scheme + Vue.watch(() => isDarkMode.value, (newValue) => { + applyColorScheme(currentColorScheme.value); + }); + + const openColorSchemeModal = () => { + showColorSchemeModal.value = true; + }; + + const closeColorSchemeModal = () => { + showColorSchemeModal.value = false; + }; + + const selectColorScheme = (schemeId) => { + applyColorScheme(schemeId); + const scheme = colorSchemes[isDarkMode.value ? 'dark' : 'light'].find(s => s.id === schemeId); + if (window.showToast && scheme) { + window.showToast(`Applied ${scheme.name} theme`, 'fa-palette'); + } + }; + + const resetColorScheme = () => { + applyColorScheme('blue'); + if (window.showToast) { + const defaultScheme = colorSchemes[isDarkMode.value ? 'dark' : 'light'].find(s => s.id === 'blue'); + window.showToast(`Reset to default ${defaultScheme?.name || 'Ocean Blue'} theme`, 'fa-undo'); + } + }; + + return { + showColorSchemeModal, + currentColorScheme, + colorSchemes, + openColorSchemeModal, + closeColorSchemeModal, + selectColorScheme, + resetColorScheme, + applyColorScheme, + initializeColorScheme + }; +} + +// Shared Transcripts Modal Composition +function useSharesModal() { + const showSharesListModal = Vue.ref(false); + const userShares = Vue.ref([]); + const isLoadingShares = Vue.ref(false); + + const openSharesList = async () => { + isLoadingShares.value = true; + showSharesListModal.value = true; + try { + const response = await fetch('/api/shares'); + const data = await response.json(); + if (!response.ok) throw new Error(data.error || 'Failed to load shared items'); + userShares.value = data; + } catch (error) { + if (window.setGlobalError) { + window.setGlobalError(`Failed to load shared items: ${error.message}`); + } else { + console.error('Failed to load shared items:', error); + } + } finally { + isLoadingShares.value = false; + } + }; + + const closeSharesList = () => { + showSharesListModal.value = false; + }; + + const copyShareLink = async (shareId) => { + const url = `${window.location.origin}/share/${shareId}`; + try { + await navigator.clipboard.writeText(url); + if (window.showToast) { + window.showToast('Share link copied to clipboard', 'fa-link'); + } + } catch (err) { + if (window.setGlobalError) { + window.setGlobalError('Failed to copy link to clipboard'); + } + } + }; + + const deleteShare = async (shareId) => { + if (!confirm('Are you sure you want to delete this share?')) return; + + try { + const response = await fetch(`/api/shares/${shareId}`, { + method: 'DELETE', + headers: { + 'X-CSRFToken': document.querySelector('meta[name="csrf-token"]')?.getAttribute('content') + } + }); + + if (!response.ok) { + const data = await response.json(); + throw new Error(data.error || 'Failed to delete share'); + } + + userShares.value = userShares.value.filter(share => share.id !== shareId); + if (window.showToast) { + window.showToast('Share deleted successfully', 'fa-trash'); + } + } catch (error) { + if (window.setGlobalError) { + window.setGlobalError(`Failed to delete share: ${error.message}`); + } + } + }; + + return { + showSharesListModal, + userShares, + isLoadingShares, + openSharesList, + closeSharesList, + copyShareLink, + deleteShare + }; +} + +// User Menu Composition +function useUserMenu() { + const isUserMenuOpen = Vue.ref(false); + + const toggleUserMenu = () => { + isUserMenuOpen.value = !isUserMenuOpen.value; + }; + + const closeUserMenu = () => { + isUserMenuOpen.value = false; + }; + + // Close menu when clicking outside + Vue.onMounted(() => { + const handleClickOutside = (e) => { + const userMenuButton = e.target.closest('button[class*="flex items-center gap"]'); + const userMenuDropdown = e.target.closest('div[class*="absolute right-0"]'); + const isUserMenuButtonClick = userMenuButton && userMenuButton.querySelector('i.fa-user-circle'); + + if (!isUserMenuButtonClick && !userMenuDropdown) { + isUserMenuOpen.value = false; + } + }; + + document.addEventListener('click', handleClickOutside); + + Vue.onUnmounted(() => { + document.removeEventListener('click', handleClickOutside); + }); + }); + + return { + isUserMenuOpen, + toggleUserMenu, + closeUserMenu + }; +} + +// Export for use in Vue components +window.SharedComponents = { + useDarkMode, + useColorScheme, + useSharesModal, + useUserMenu +}; \ No newline at end of file diff --git a/static/js/utils/apiClient.js b/static/js/utils/apiClient.js new file mode 100644 index 0000000..56b09c1 --- /dev/null +++ b/static/js/utils/apiClient.js @@ -0,0 +1,119 @@ +/** + * API client utilities for making HTTP requests + */ + +class APIError extends Error { + constructor(message, status, data) { + super(message); + this.name = 'APIError'; + this.status = status; + this.data = data; + } +} + +/** + * Safely parse JSON response, handling HTML error pages gracefully + */ +async function safeJsonParse(response) { + const contentType = response.headers.get('content-type') || ''; + + // If response is not JSON, extract useful error from HTML + if (!contentType.includes('application/json')) { + const text = await response.text(); + // Try to extract error message from HTML title or h1 + const titleMatch = text.match(/<title>([^<]+)<\/title>/i); + const h1Match = text.match(/<h1>([^<]+)<\/h1>/i); + const errorMsg = titleMatch?.[1] || h1Match?.[1] || + `Server returned non-JSON response (status ${response.status})`; + throw new APIError(errorMsg, response.status, { htmlResponse: true }); + } + + return response.json(); +} + +export async function apiRequest(url, options = {}) { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + + const defaultOptions = { + headers: { + 'Content-Type': 'application/json', + ...(csrfToken && { 'X-CSRFToken': csrfToken }) + } + }; + + const mergedOptions = { + ...defaultOptions, + ...options, + headers: { + ...defaultOptions.headers, + ...options.headers + } + }; + + try { + const response = await fetch(url, mergedOptions); + const data = await safeJsonParse(response); + + if (!response.ok) { + throw new APIError( + data.error || 'Request failed', + response.status, + data + ); + } + + return data; + } catch (error) { + if (error instanceof APIError) { + throw error; + } + throw new APIError(error.message, 0, null); + } +} + +export async function uploadFile(url, file, onProgress = null) { + const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content'); + const formData = new FormData(); + formData.append('audio_file', file); + + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + + if (onProgress) { + xhr.upload.addEventListener('progress', (e) => { + if (e.lengthComputable) { + const percentComplete = (e.loaded / e.total) * 100; + onProgress(percentComplete); + } + }); + } + + xhr.addEventListener('load', () => { + if (xhr.status >= 200 && xhr.status < 300) { + try { + const data = JSON.parse(xhr.responseText); + resolve(data); + } catch (e) { + reject(new Error('Invalid response format')); + } + } else { + try { + const error = JSON.parse(xhr.responseText); + reject(new APIError(error.error || 'Upload failed', xhr.status, error)); + } catch (e) { + reject(new APIError('Upload failed', xhr.status, null)); + } + } + }); + + xhr.addEventListener('error', () => { + reject(new Error('Network error')); + }); + + xhr.open('POST', url); + if (csrfToken) { + xhr.setRequestHeader('X-CSRFToken', csrfToken); + } + xhr.send(formData); + }); +} diff --git a/static/js/utils/audioUtils.js b/static/js/utils/audioUtils.js new file mode 100644 index 0000000..ce613c2 --- /dev/null +++ b/static/js/utils/audioUtils.js @@ -0,0 +1,61 @@ +/** + * Audio processing and visualization utilities + */ + +export function formatFileSize(bytes) { + if (bytes === 0) return '0 Bytes'; + const k = 1024; + const sizes = ['Bytes', 'KB', 'MB', 'GB']; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i]; +} + +export function createAudioVisualizer(canvas, stream, color = '#3b82f6') { + if (!canvas || !stream) return null; + + const audioContext = new (window.AudioContext || window.webkitAudioContext)(); + const analyser = audioContext.createAnalyser(); + const microphone = audioContext.createMediaStreamSource(stream); + + analyser.fftSize = 256; + const bufferLength = analyser.frequencyBinCount; + const dataArray = new Uint8Array(bufferLength); + + microphone.connect(analyser); + + const canvasCtx = canvas.getContext('2d'); + const WIDTH = canvas.width; + const HEIGHT = canvas.height; + + function draw() { + requestAnimationFrame(draw); + analyser.getByteFrequencyData(dataArray); + + canvasCtx.fillStyle = 'rgb(17, 24, 39)'; + canvasCtx.fillRect(0, 0, WIDTH, HEIGHT); + + const barWidth = (WIDTH / bufferLength) * 2.5; + let barHeight; + let x = 0; + + for (let i = 0; i < bufferLength; i++) { + barHeight = (dataArray[i] / 255) * HEIGHT; + canvasCtx.fillStyle = color; + canvasCtx.fillRect(x, HEIGHT - barHeight, barWidth, barHeight); + x += barWidth + 1; + } + } + + draw(); + + return { audioContext, analyser, stop: () => audioContext.close() }; +} + +export function detectBrowser() { + const userAgent = navigator.userAgent.toLowerCase(); + if (userAgent.indexOf('firefox') > -1) return 'firefox'; + if (userAgent.indexOf('chrome') > -1 && userAgent.indexOf('edge') === -1) return 'chrome'; + if (userAgent.indexOf('safari') > -1 && userAgent.indexOf('chrome') === -1) return 'safari'; + if (userAgent.indexOf('edge') > -1) return 'edge'; + return 'unknown'; +} diff --git a/static/js/utils/dateUtils.js b/static/js/utils/dateUtils.js new file mode 100644 index 0000000..ec8cd8c --- /dev/null +++ b/static/js/utils/dateUtils.js @@ -0,0 +1,83 @@ +/** + * Date utility functions for formatting and parsing dates + */ + +export function formatDateTime(dateString) { + if (!dateString) return ''; + const date = new Date(dateString); + const now = new Date(); + const diffMs = now - date; + const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24)); + + if (diffDays === 0) { + return 'Today at ' + date.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true }); + } else if (diffDays === 1) { + return 'Yesterday at ' + date.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true }); + } else if (diffDays < 7) { + const dayName = date.toLocaleDateString('en-US', { weekday: 'long' }); + return dayName + ' at ' + date.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true }); + } else { + return date.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' }); + } +} + +export function formatTimeAgo(dateString) { + if (!dateString) return ''; + const date = new Date(dateString); + const now = new Date(); + const diffMs = now - date; + const diffMins = Math.floor(diffMs / 60000); + const diffHours = Math.floor(diffMs / 3600000); + const diffDays = Math.floor(diffMs / 86400000); + + if (diffMins < 1) return 'Just now'; + if (diffMins < 60) return `${diffMins} minute${diffMins > 1 ? 's' : ''} ago`; + if (diffHours < 24) return `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`; + if (diffDays < 30) return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`; + + const diffMonths = Math.floor(diffDays / 30); + if (diffMonths < 12) return `${diffMonths} month${diffMonths > 1 ? 's' : ''} ago`; + + const diffYears = Math.floor(diffDays / 365); + return `${diffYears} year${diffYears > 1 ? 's' : ''} ago`; +} + +export function formatDuration(seconds) { + if (!seconds || seconds < 0) return '0:00'; + const hrs = Math.floor(seconds / 3600); + const mins = Math.floor((seconds % 3600) / 60); + const secs = Math.floor(seconds % 60); + + if (hrs > 0) { + return `${hrs}:${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`; + } + return `${mins}:${secs.toString().padStart(2, '0')}`; +} + +export function parseDateRange(preset) { + const now = new Date(); + const today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); + + switch (preset) { + case 'today': + return { start: today, end: new Date() }; + case 'yesterday': + const yesterday = new Date(today); + yesterday.setDate(yesterday.getDate() - 1); + return { start: yesterday, end: today }; + case 'week': + const weekStart = new Date(today); + weekStart.setDate(weekStart.getDate() - 7); + return { start: weekStart, end: new Date() }; + case 'month': + const monthStart = new Date(today); + monthStart.setMonth(monthStart.getMonth() - 1); + return { start: monthStart, end: new Date() }; + case 'year': + const yearStart = new Date(today); + yearStart.setFullYear(yearStart.getFullYear() - 1); + return { start: yearStart, end: new Date() }; + default: + return { start: null, end: null }; + } +} diff --git a/static/locales/de.json b/static/locales/de.json new file mode 100644 index 0000000..296e9aa --- /dev/null +++ b/static/locales/de.json @@ -0,0 +1,1505 @@ +{ + "aboutPage": { + "aiSummarization": "KI-Zusammenfassung", + "aiSummarizationDesc": "OpenRouter- und Ollama-Integration mit benutzerdefinierten Prompts", + "asrEnabled": "ASR Aktiviert", + "asrEndpoint": "ASR-Endpunkt", + "audioTranscription": "Audio-Transkription", + "audioTranscriptionDesc": "Whisper API und benutzerdefinierte ASR-Unterstützung mit hoher Genauigkeit", + "backend": "Backend", + "database": "Datenbank", + "deployment": "Bereitstellung", + "dockerDescription": "Offizielle Docker Images", + "dockerHub": "Docker Hub", + "documentation": "Dokumentation", + "documentationDescription": "Setup-Anleitungen und Benutzerhandbuch", + "endpoint": "Endpunkt", + "frontend": "Frontend", + "githubDescription": "Quellcode, Issues und Releases", + "githubRepository": "GitHub Repository", + "inquireMode": "Anfrage-Modus", + "inquireModeDesc": "Semantische Suche in all Ihren Aufnahmen", + "interactiveChat": "Interaktiver Chat", + "interactiveChatDesc": "Chatten Sie mit Ihren Transkriptionen mittels KI", + "keyFeatures": "Hauptfunktionen", + "largeLanguageModel": "Großes Sprachmodell", + "model": "Modell", + "projectDescription": "Verwandeln Sie Ihre Audioaufnahmen in organisierte, durchsuchbare Notizen mit KI-gestützten Funktionen für Transkription, Zusammenfassung und interaktiven Chat.", + "projectLinks": "Projekt-Links", + "sharingExport": "Teilen & Exportieren", + "sharingExportDesc": "Teilen Sie Aufnahmen und exportieren Sie in verschiedene Formate", + "speakerDiarization": "Sprecher-Diarisierung", + "speakerDiarizationDesc": "Automatische Identifikation und Kennzeichnung verschiedener Sprecher", + "speechRecognition": "Spracherkennung", + "systemConfiguration": "Systemkonfiguration", + "tagline": "KI-gestützte Audio-Transkription und Notizen-App", + "technologyStack": "Technologie-Stack", + "title": "Über", + "version": "Version", + "whisperApi": "Whisper API" + }, + "aboutPageDetails": { + "aiSummarizationDesc": "OpenRouter- und Ollama-Integration mit benutzerdefinierten Prompts", + "asrEnabled": "ASR Aktiviert", + "asrEndpoint": "ASR-Endpunkt", + "audioTranscriptionDesc": "Whisper-API und benutzerdefinierte ASR-Unterstützung mit hoher Genauigkeit", + "backend": "Backend", + "database": "Datenbank", + "deployment": "Bereitstellung", + "dockerDescription": "Offizielle Docker-Images", + "documentationDescription": "Setup-Anleitungen und Benutzerhandbuch", + "endpoint": "Endpunkt", + "frontend": "Frontend", + "githubDescription": "Quellcode, Issues und Releases", + "inquireModeDesc": "Semantische Suche in all Ihren Aufnahmen", + "interactiveChatDesc": "Chatten Sie mit Ihren Transkriptionen mithilfe von KI", + "model": "Modell", + "no": "Nein", + "sharingExportDesc": "Aufnahmen teilen und in verschiedene Formate exportieren", + "speakerDiarizationDesc": "Verschiedene Sprecher automatisch identifizieren und beschriften", + "whisperApi": "Whisper-API", + "yes": "Ja" + }, + "account": { + "accountActions": "Kontoaktionen", + "autoLabel": "Auto-label", + "autoSummarizationDisabled": "Auto-summarization disabled by admin", + "autoSummarize": "Auto-summarize", + "changePassword": "Passwort ändern", + "chooseLanguageForInterface": "Wählen Sie die Sprache für die Anwendungsoberfläche", + "companyOrganization": "Unternehmen / Organisation", + "completedRecordings": "Abgeschlossen", + "defaultHotwords": "Default Hotwords", + "defaultHotwordsPlaceholder": "e.g., Speakr, CTranslate2, PyAnnote, SDRs", + "defaultInitialPrompt": "Default Initial Prompt", + "defaultInitialPromptPlaceholder": "e.g., This is a meeting about AI transcription tools. The speakers discuss CTranslate2, PyAnnote, and SDRs.", + "email": "E-Mail", + "failedRecordings": "Fehlgeschlagen", + "fullName": "Vollständiger Name", + "goToRecordings": "Zu den Aufnahmen gehen", + "interfaceLanguage": "Interface-Sprache", + "jobTitle": "Berufsbezeichnung", + "languageForSummaries": "Sprache für Titel, Zusammenfassungen und Chat. Leer lassen für Standard (Standardverhalten Ihrer gewählten Modelle).", + "languagePreferences": "Spracheinstellungen", + "leaveBlankForAutoDetect": "Leer lassen für automatische Erkennung durch den Transkriptionsdienst", + "manageSpeakers": "Sprecher verwalten", + "personalFolder": "Personal Folder (Not Associated with a Group)", + "personalInfo": "Persönliche Informationen", + "personalTag": "Personal Tag (Not Associated with a Group)", + "preferredOutputLanguage": "Bevorzugte Sprache für Chatbot und Zusammenfassungen", + "processingRecordings": "In Bearbeitung", + "saveAllPreferences": "Alle Einstellungen speichern", + "ssoLinkAccount": "Link {{provider}} account", + "ssoLinked": "Linked", + "ssoNotLinked": "Not linked", + "ssoProvider": "Provider", + "ssoSetPasswordFirst": "To unlink SSO, you must first set a password.", + "ssoSubject": "Subject:", + "ssoUnlinkAccount": "Unlink {{provider}} account", + "ssoUnlinkConfirm": "Are you sure you want to unlink your SSO account? You will need to use your password to log in.", + "statistics": "Kontostatistiken", + "title": "Kontoinformationen", + "totalRecordings": "Gesamte Aufnahmen", + "transcriptionHints": "Transcription Hints", + "transcriptionHintsDesc": "These defaults are used when no tag or folder overrides are set. They help improve transcription accuracy for your specific use case.", + "transcriptionLanguage": "Transkriptionssprache", + "userDetails": "Benutzerdetails", + "username": "Benutzername" + }, + "accountTabs": { + "about": "Über", + "apiTokens": "API-Token", + "customPrompts": "Benutzerdefinierte Prompts", + "folderManagement": "Ordnerverwaltung", + "help": "Hilfe", + "namingTemplates": "Benennung", + "promptOptions": "Prompt-Optionen", + "sharedTranscripts": "Geteilte Transkripte", + "speakersManagement": "Sprecher-Verwaltung", + "tagManagement": "Tag-Verwaltung", + "templates": "Vorlagen", + "transcriptTemplates": "Transkript-Vorlagen" + }, + "admin": { + "title": "Administration", + "userMenu": "Benutzermenü" + }, + "adminDashboard": { + "aboutInquireMode": "Über den Nachfrage-Modus", + "actions": "AKTIONEN", + "addNewUser": "Neuen Benutzer Hinzufügen", + "addUser": "Benutzer hinzufügen", + "additionalContext": "Zusätzlicher Kontext", + "admin": "ADMIN", + "adminDefaultPrompt": "Admin Standard-Prompt", + "adminDefaultPromptDesc": "Der oben konfigurierte Prompt (auf dieser Seite angezeigt)", + "adminUser": "Administrator-Benutzer", + "allRecordingsProcessed": "Alle Aufnahmen sind verarbeitet!", + "allowed": "Allowed", + "available": "Verfügbar", + "blocked": "blockiert", + "budgetWarnings": "Budget-Warnungen", + "characters": "Zeichen", + "chunkSize": "Chunk-Größe", + "complete": "abgeschlossen", + "completedRecordings": "Abgeschlossen", + "confirmPasswordLabel": "Passwort Bestätigen", + "contextNotes": { + "jsonConversion": "JSON-Transkripte werden vor dem Senden in ein sauberes Textformat konvertiert", + "modelConfig": "Das verwendete Modell wird über die Umgebungsvariable TEXT_MODEL_NAME konfiguriert", + "tagPrompts": "Wenn mehrere Tag-Prompts existieren, werden sie in der Reihenfolge zusammengeführt, in der die Tags hinzugefügt wurden", + "transcriptLimit": "Transkripte sind auf eine konfigurierbare Zeichenanzahl begrenzt (Standard: 30.000)" + }, + "createFirstGroup": "Create Your First Group", + "created": "Created", + "currentUsage": "Aktuelle Nutzung", + "currentUsageMinutes": "Aktuelle Nutzung", + "defaultPromptInfo": "Dieser Standard-Prompt wird für alle Benutzer verwendet, die keinen eigenen benutzerdefinierten Prompt in ihren Kontoeinstellungen festgelegt haben.", + "defaultPrompts": "Standard-Prompts", + "defaultSummarizationPrompt": "Standard-Zusammenfassungsprompt", + "description": "Description", + "editUser": "Benutzer Bearbeiten", + "email": "E-MAIL", + "emailLabel": "E-Mail", + "embeddingModel": "Einbettungsmodell", + "embeddingsStatus": "Einbettungsstatus", + "errors": { + "failedToLoadPrompt": "Fehler beim Laden des Standard-Prompts", + "failedToSavePrompt": "Fehler beim Speichern des Standard-Prompts. Bitte versuchen Sie es erneut.", + "invalidFileSize": "Bitte geben Sie eine gültige Größe zwischen 1 und 10000 MB ein", + "invalidInteger": "Bitte geben Sie eine gültige Ganzzahl ein", + "invalidNumber": "Bitte geben Sie eine gültige Zahl ein", + "maxTimeout": "Timeout kann 10 Stunden (36000 Sekunden) nicht überschreiten", + "minCharacters": "Bitte geben Sie eine gültige Anzahl von mindestens 1000 Zeichen ein", + "minTimeout": "Timeout muss mindestens 60 Sekunden betragen" + }, + "failedRecordings": "Fehlgeschlagen", + "groupName": "Group Name", + "groupsTab": "Groups", + "id": "ID", + "inquireModeDescription": "Der Nachfrage-Modus ermöglicht es Benutzern, mit natürlichen Sprachfragen über mehrere Transkriptionen zu suchen. Es funktioniert, indem Transkriptionen in Chunks aufgeteilt und durchsuchbare Einbettungen mit KI-Modellen erstellt werden.", + "languagePreferenceNote": "Hinweis: Wenn der Benutzer eine Ausgabesprachpräferenz festgelegt hat, wird \" Stellen Sie sicher, dass Ihre Antwort in {Sprache} ist.\" hinzugefügt.", + "lastUpdated": "Zuletzt aktualisiert", + "maxFileSizeHelp": "Maximale Dateigröße in Megabyte (1-10000 MB)", + "megabytes": "MB", + "members": "Members", + "membersCount": "members", + "minutes": "Minuten", + "monthlyCost": "Monatliche Kosten", + "monthlyTokenBudget": "Monatliches Token-Budget", + "monthlyTranscriptionBudget": "Monatliches Transkriptionsbudget (Minuten)", + "needProcessing": "Benötigt Verarbeitung", + "never": "Nie", + "newPasswordLabel": "Neues Passwort (leer lassen, um das aktuelle zu behalten)", + "no": "Nein", + "noData": "Keine Daten", + "noDescription": "No description", + "noDescriptionAvailable": "Keine Beschreibung verfügbar", + "noGroupsAdmin": "You are not an admin of any groups yet", + "noGroupsCreated": "No groups created yet", + "noLimit": "Keine Begrenzung", + "noMembersYet": "No members yet", + "noTranscriptionData": "Keine Transkriptionsnutzungsdaten verfügbar", + "none": "Keine", + "notSet": "Nicht festgelegt", + "overlap": "Überlappung", + "passwordLabel": "Passwort", + "passwordsDoNotMatch": "Passwords do not match", + "pendingRecordings": "Ausstehend", + "percentUsed": "verwendet", + "placeholdersNote": "Platzhalter werden beim Verarbeiten einer Aufnahme durch tatsächliche Werte ersetzt.", + "processAllRecordings": "Alle Aufnahmen Verarbeiten", + "processNext10": "Nächste 10 Verarbeiten", + "processedForInquire": "Für Nachfrage Verarbeitet", + "processing": "Verarbeitung läuft...", + "processingActions": "Verarbeitungsaktionen", + "processingProgress": "Verarbeitungsfortschritt", + "processingRecordings": "In Bearbeitung", + "promptDescription": "Dieser Prompt wird verwendet, um Zusammenfassungen für alle Aufnahmen zu generieren, wenn Benutzer keinen eigenen Prompt festgelegt haben.", + "promptHierarchy": "Prompt-Hierarchie", + "promptPriorityDescription": "Das System verwendet die folgende Prioritätsreihenfolge bei der Auswahl des zu verwendenden Prompts:", + "promptResetMessage": "Prompt auf Systemstandard zurückgesetzt. Klicken Sie auf \"Änderungen speichern\", um anzuwenden.", + "promptSavedSuccessfully": "Standard-Prompt erfolgreich gespeichert!", + "publicShare": "Public Share", + "recordingStatusDistribution": "Verteilung des Aufnahmestatus", + "recordings": "AUFNAHMEN", + "recordingsNeedProcessing": "Es gibt {{count}} Aufnahmen, die für den Nachfrage-Modus verarbeitet werden müssen.", + "refreshStatus": "Status Aktualisieren", + "resetToDefault": "Auf Standard zurücksetzen", + "saving": "Speichern...", + "searchUsers": "Benutzer suchen...", + "seconds": "Sekunden", + "settings": { + "asrTimeoutDesc": "Maximale Zeit in Sekunden, um auf den Abschluss der ASR-Transkription zu warten. Standard ist 1800 Sekunden (30 Minuten).", + "defaultSummaryPromptDesc": "Standard-Zusammenfassungsprompt, der verwendet wird, wenn Benutzer keinen eigenen Prompt festgelegt haben. Dies dient als Basis-Prompt für alle Benutzer.", + "maxFileSizeDesc": "Maximale Dateigröße für Audio-Uploads in Megabyte (MB).", + "recordingDisclaimerDesc": "Rechtlicher Hinweis, der Benutzern vor Beginn der Aufnahme angezeigt wird. Unterstützt Markdown-Formatierung. Leer lassen zum Deaktivieren.", + "uploadDisclaimerDesc": "Rechtlicher Hinweis, der vor dem Hochladen von Dateien angezeigt wird. Unterstützt Markdown. Leer lassen zum Deaktivieren.", + "customBannerDesc": "Benutzerdefiniertes Banner oben auf der Seite. Unterstützt Markdown. Leer lassen zum Deaktivieren.", + "transcriptLengthLimitDesc": "Maximale Anzahl von Zeichen, die vom Transkript an das LLM für Zusammenfassung und Chat gesendet werden. Verwenden Sie -1 für kein Limit." + }, + "storageUsed": "GENUTZTER SPEICHER", + "summarizationInstructions": "Zusammenfassungsanweisungen", + "systemFallback": "System-Fallback", + "systemFallbackDesc": "Ein hartcodierter Standard, wenn keiner der oben genannten festgelegt ist", + "systemPrompt": "System-Prompt", + "systemSettings": "Systemeinstellungen", + "systemStatistics": "Systemstatistiken", + "tagCustomPrompt": "Tag Benutzerdefinierter Prompt", + "tagCustomPromptDesc": "Wenn eine Aufnahme Tags mit benutzerdefinierten Prompts hat", + "textSearchOnly": "Nur Textsuche", + "thisMonth": "Dieser Monat", + "timeoutRecommendation": "Empfohlen: 30-120 Minuten für lange Audiodateien", + "title": "Administrator-Dashboard", + "todaysMinutes": "Heutige Minuten", + "tokenBudgetExceeded": "Monatliches Token-Budget überschritten. Bitte kontaktieren Sie Ihren Administrator.", + "tokenBudgetHelp": "Legen Sie ein monatliches Token-Limit für KI-Funktionen fest. Leer lassen für unbegrenzt.", + "tokenBudgetPlaceholder": "Leer lassen für unbegrenzt", + "tokenUsage": "Token-Nutzung", + "tokens": "Token", + "topUsers": "Top-Benutzer", + "topUsersByStorage": "Top-Benutzer nach Speicher", + "total": "Gesamt", + "totalChunks": "Gesamte Chunks", + "totalQueries": "Gesamte Abfragen", + "totalRecordings": "Gesamte Aufnahmen", + "totalStorage": "Gesamter Speicher", + "totalUsers": "Gesamte Benutzer", + "transcriptionBudgetHelp": "Begrenzen Sie die Transkriptionsminuten pro Monat. Leer lassen für unbegrenzt.", + "transcriptionBudgetPlaceholder": "Leer lassen für unbegrenzt", + "transcriptionUsage": "Transkriptionsnutzung", + "updateUser": "Benutzer Aktualisieren", + "userCustomPrompt": "Benutzerdefinierter Prompt", + "userCustomPromptDesc": "Wenn der Benutzer seinen eigenen Prompt in den Kontoeinstellungen festgelegt hat", + "userManagement": "Benutzerverwaltung", + "userMessageTemplate": "Benutzernachricht-Vorlage", + "userTranscriptionUsage": "Benutzer-Transkriptionsnutzung (Dieser Monat)", + "username": "BENUTZERNAME", + "usernameLabel": "Benutzername", + "vectorDimensions": "Vektordimensionen", + "vectorStore": "Vektorspeicher", + "vectorStoreManagement": "Vektorspeicher-Verwaltung", + "vectorStoreUpToDate": "Der Vektorspeicher ist auf dem neuesten Stand.", + "viewFullPromptStructure": "Vollständige LLM-Prompt-Struktur anzeigen", + "warning": "Warnung", + "yes": "Ja" + }, + "apiTokens": { + "activeTokens": "Aktive Token", + "createFirstToken": "Erstellen Sie Ihr erstes API-Token, um programmgesteuerten Zugriff zu ermöglichen", + "createToken": "Token erstellen", + "created": "Erstellt", + "description": "Erstellen und verwalten Sie API-Token für den programmgesteuerten Zugriff auf Ihr Konto", + "expires": "Läuft ab", + "lastUsed": "Zuletzt verwendet", + "neverUsed": "Nie verwendet", + "noExpiration": "Kein Ablaufdatum", + "noTokens": "Keine API-Token", + "securityNotice": "Sicherheitshinweis", + "securityWarning": "Behandeln Sie API-Token wie Passwörter. Sie bieten vollen Zugriff auf Ihr Konto. Teilen Sie Token niemals in öffentlich zugänglichen Bereichen wie GitHub, clientseitigem Code oder Logs", + "title": "API-Token", + "usageExamples": "Verwendungsbeispiele" + }, + "buttons": { + "addSegment": "Segment Hinzufügen", + "addSpeaker": "Sprecher hinzufügen", + "cancel": "Cancel", + "clearAllFilters": "Alle Filter löschen", + "clearCompleted": "Abgeschlossene Uploads löschen", + "clearSearchText": "Suchtext löschen", + "close": "Close", + "copy": "Kopieren", + "copyMessage": "Nachricht kopieren", + "copyNotes": "Notizen kopieren", + "copySummary": "Zusammenfassung kopieren", + "copyToClipboard": "In Zwischenablage kopieren", + "createTag": "Create Tag", + "deleteAll": "Delete All", + "deleteSpeaker": "Sprecher löschen", + "deleteTag": "Tag löschen", + "deleteUser": "Benutzer löschen", + "downloadAsWord": "Als Word herunterladen", + "downloadAudio": "Audio herunterladen", + "downloadChat": "Chat als Word-Dokument herunterladen", + "downloadNotes": "Notizen als Word-Dokument herunterladen", + "downloadSummary": "Zusammenfassung als Word-Dokument herunterladen", + "editNotes": "Notizen bearbeiten", + "editSetting": "Einstellung bearbeiten", + "editSpeakers": "Sprecher bearbeiten...", + "editSummary": "Zusammenfassung bearbeiten", + "editTag": "Tag bearbeiten", + "editTags": "Tags bearbeiten", + "editTranscription": "Transkription bearbeiten", + "editUser": "Benutzer bearbeiten", + "exportCalendar": "In Kalender exportieren", + "help": "Hilfe", + "identifySpeakers": "Sprecher identifizieren", + "next": "Weiter", + "previous": "Zurück", + "refresh": "Refresh", + "reprocessSummary": "Zusammenfassung neu verarbeiten", + "reprocessTranscription": "Transkription neu verarbeiten", + "reprocessWithAsr": "Mit ASR neu verarbeiten", + "resetStuckProcessing": "Blockierte Verarbeitung zurücksetzen", + "saveChanges": "Änderungen speichern", + "saveCustomPrompt": "Save Custom Prompt", + "saveNames": "Namen speichern", + "saveSettings": "Einstellungen Speichern", + "shareRecording": "Aufnahme teilen", + "toggleTheme": "Design umschalten", + "updateTag": "Update Tag" + }, + "changePasswordModal": { + "confirmPassword": "Neues Passwort Bestätigen", + "currentPassword": "Aktuelles Passwort", + "newPassword": "Neues Passwort", + "passwordRequirement": "Das Passwort muss mindestens 8 Zeichen lang sein", + "title": "Passwort Ändern" + }, + "chat": { + "availableAfterTranscription": "Chat wird verfügbar sein, sobald die Transkription abgeschlossen ist", + "cannotChatTranscriptionFailed": "Cannot chat: transcription failed. Please reprocess the transcription first.", + "chatWithTranscription": "Mit Transkription chatten", + "clearChat": "Chat löschen", + "cleared": "Chat cleared", + "downloadFailed": "Failed to download chat", + "downloadSuccess": "Chat downloaded successfully!", + "error": "Nachricht konnte nicht gesendet werden", + "noMessages": "Noch keine Nachrichten", + "noMessagesToDownload": "No chat messages to download.", + "placeholder": "Eine Frage zu dieser Aufnahme stellen...", + "placeholderWithHint": "Eine Frage zu dieser Aufnahme stellen... (Enter zum Senden, Strg+Enter für neue Zeile)", + "send": "Senden", + "suggestedQuestions": "Vorgeschlagene Fragen", + "thinking": "Denke nach...", + "title": "Chat", + "whatAreActionItems": "Was sind die Aktionspunkte?", + "whatAreKeyPoints": "Was sind die wichtigsten Punkte?", + "whatWasDiscussed": "Was wurde besprochen?", + "whoSaidWhat": "Wer hat was gesagt?" + }, + "colorScheme": { + "chooseRecording": "Wählen Sie eine Aufnahme aus der Seitenleiste, um ihre Transkription und Zusammenfassung zu sehen", + "darkThemes": "Dunkle Themen", + "descriptions": { + "blue": "Classic blue theme with a clean, professional feel", + "emerald": "Nature-inspired green theme for a calming experience", + "purple": "Rich purple theme with an elegant, modern look", + "rose": "Warm rose theme with a soft, inviting aesthetic", + "amber": "Warm amber tones for a cozy, productive feel", + "teal": "Cool teal theme with a refreshing, modern vibe" + }, + "lightThemes": "Helle Themen", + "names": { + "blue": "Ocean Blue", + "emerald": "Forest Green", + "purple": "Royal Purple", + "rose": "Coral Rose", + "amber": "Golden Amber", + "teal": "Arctic Teal" + }, + "resetToDefault": "Auf Standard zurücksetzen", + "selectRecording": "Eine Aufnahme auswählen", + "subtitle": "Passen Sie Ihre Benutzeroberfläche mit schönen Farbthemen an", + "themes": { + "light": { + "blue": { + "name": "Ozeanblau", + "description": "Klassisches Blau-Thema mit professioneller Anmutung" + }, + "emerald": { + "name": "Waldsmaragd", + "description": "Frisches grünes Thema für natürliches Gefühl" + }, + "purple": { + "name": "Königslila", + "description": "Elegantes Lila-Thema mit Raffinesse" + }, + "rose": { + "name": "Sonnenuntergang-Rose", + "description": "Warmes Rosa-Thema mit sanfter Energie" + }, + "amber": { + "name": "Goldenes Bernstein", + "description": "Warmes Gelb-Thema für Helligkeit" + }, + "teal": { + "name": "Ozean-Türkis", + "description": "Kühles Türkis-Thema für Ruhe" + } + }, + "dark": { + "blue": { + "name": "Mitternachtsblau", + "description": "Tiefes Blau-Thema für konzentriertes Arbeiten" + }, + "emerald": { + "name": "Dunkler Wald", + "description": "Sattes grünes Thema für angenehmes Betrachten" + }, + "purple": { + "name": "Tiefes Lila", + "description": "Mysteriöses Lila-Thema für Kreativität" + }, + "rose": { + "name": "Dunkle Rose", + "description": "Gedämpftes Rosa-Thema mit subtiler Wärme" + }, + "amber": { + "name": "Dunkles Bernstein", + "description": "Warmes Braun-Thema für gemütliche Sitzungen" + }, + "teal": { + "name": "Tiefes Türkis", + "description": "Dunkles Türkis-Thema für ruhigen Fokus" + } + } + }, + "title": "Farbschema wählen" + }, + "common": { + "back": "Zurück", + "cancel": "Abbrechen", + "changesSaved": "Änderungen gespeichert", + "close": "Schließen", + "confirm": "Bestätigen", + "delete": "Löschen", + "deselectAll": "Alle abwählen", + "download": "Herunterladen", + "edit": "Bearbeiten", + "error": "Fehler", + "failed": "Fehlgeschlagen", + "filter": "Filter", + "info": "Info", + "loading": "Lädt...", + "new": "Neu", + "next": "Weiter", + "no": "Nein", + "noResults": "Keine Ergebnisse gefunden", + "ok": "OK", + "or": "Oder", + "previous": "Vorherige", + "processing": "Verarbeite...", + "refresh": "Aktualisieren", + "retry": "Wiederholen", + "save": "Speichern", + "search": "Suchen", + "selectAll": "Alle auswählen", + "sort": "Sortieren", + "success": "Erfolgreich", + "untitled": "Unbenannt", + "upload": "Hochladen", + "warning": "Warnung", + "yes": "Ja" + }, + "customPrompts": { + "currentDefaultPrompt": "Aktueller Standard-Prompt (Wird verwendet, wenn Sie das obige Feld leer lassen)", + "promptDescription": "Dieser Prompt wird verwendet, um Zusammenfassungen Ihrer Transkriptionen zu generieren. Er überschreibt den Standardprompt des Administrators.", + "promptPlaceholder": "Beschreiben Sie, wie Ihre Zusammenfassungen strukturiert sein sollen. Leer lassen, um den Standard-Prompt des Administrators zu verwenden.", + "summaryGeneration": "Zusammenfassungsgenerierungs-Prompt", + "tip1": "Seien Sie spezifisch bezüglich der Abschnitte, die Sie in Ihrer Zusammenfassung wünschen", + "tip2": "Verwenden Sie klare Formatierungsanweisungen (z.B. \"Verwenden Sie Aufzählungszeichen\", \"Erstellen Sie nummerierte Listen\")", + "tip3": "Geben Sie an, wenn Sie möchten, dass bestimmte Informationen priorisiert werden", + "tip4": "Das System wird automatisch den Transkriptionsinhalt an die KI weiterleiten", + "tip5": "Ihre Ausgabesprachen-Präferenz (falls gesetzt) wird automatisch angewendet", + "tipsTitle": "Tipps für das Schreiben Effektiver Prompts", + "yourCustomPrompt": "Ihr Benutzerdefinierter Zusammenfassungs-Prompt" + }, + "deleteAllSpeakersModal": { + "confirmMessage": "Sind Sie sicher, dass Sie alle gespeicherten Sprecher löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.", + "title": "Alle Sprecher Löschen" + }, + "dialogs": { + "deleteRecording": { + "cancel": "Abbrechen", + "confirm": "Löschen", + "message": "Sind Sie sicher, dass Sie diese Aufnahme löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.", + "title": "Aufnahme löschen" + }, + "deleteShare": { + "message": "Sind Sie sicher, dass Sie diese Freigabe löschen möchten? Dadurch wird der Zugriff auf den öffentlichen Link widerrufen.", + "title": "Freigabe löschen" + }, + "reprocessTranscription": { + "cancel": "Abbrechen", + "confirm": "Neu verarbeiten", + "message": "Sind Sie sicher, dass Sie diese Transkription neu verarbeiten möchten? Die aktuelle Transkription wird ersetzt.", + "title": "Transkription neu verarbeiten" + }, + "unsavedChanges": { + "cancel": "Abbrechen", + "discard": "Verwerfen", + "message": "Sie haben ungespeicherte Änderungen. Möchten Sie diese vor dem Verlassen speichern?", + "save": "Speichern", + "title": "Ungespeicherte Änderungen" + } + }, + "duration": { + "hours": "{{count}} Stunde", + "hoursPlural": "{{count}} Stunden", + "minutes": "{{count}} Minute", + "minutesPlural": "{{count}} Minuten", + "seconds": "{{count}} Sekunde", + "secondsPlural": "{{count}} Sekunden" + }, + "editTagModal": { + "asrDefaultSettings": "ASR-Standard-Einstellungen", + "asrSettingsDescription": "Diese Einstellungen werden standardmäßig angewendet, wenn dieser Tag mit ASR-Transkription verwendet wird", + "color": "Farbe", + "colorDescription": "Wählen Sie eine Farbe zur einfachen Identifikation", + "createTitle": "Tag Erstellen", + "customPrompt": "Benutzerdefinierter Zusammenfassungs-Prompt", + "customPromptPlaceholder": "Optional: Benutzerdefinierter Prompt für die Generierung von Zusammenfassungen für Aufnahmen mit diesem Tag", + "defaultLanguage": "Standard-Sprache", + "defaultPromptPlaceholder": "Leer lassen, um Ihren Standard-Zusammenfassungs-Prompt zu verwenden", + "exportTemplate": "Exportvorlage", + "exportTemplateHint": "Wählen Sie eine Exportvorlage für den Export von Aufnahmen mit diesem Tag", + "leaveBlankPrompt": "Leer lassen, um Ihren Standard-Zusammenfassungs-Prompt zu verwenden", + "maxSpeakers": "Maximale Sprecheranzahl", + "minSpeakers": "Minimale Sprecheranzahl", + "namingTemplate": "Benennungsvorlage", + "namingTemplateHint": "Wählen Sie eine Benennungsvorlage, um Titel für Aufnahmen mit diesem Tag automatisch zu formatieren", + "noExportTemplate": "Keine Vorlage (Benutzerstandard verwenden)", + "noNamingTemplate": "Keine Vorlage (Standard oder KI-Titel verwenden)", + "tagName": "Tag-Name *", + "tagNamePlaceholder": "z.B. Meetings, Interviews", + "title": "Tag Bearbeiten" + }, + "errors": { + "audioExtractionFailed": "Audio Extraction Failed", + "audioExtractionFailedGuidance": "Try converting the file to a standard audio format (MP3, WAV) before uploading.", + "audioExtractionFailedMessage": "Could not extract audio from the uploaded file.", + "audioRecordingFailed": "音频录制失败。请检查您的麦克风。", + "authenticationError": "Authentication Error", + "authenticationErrorGuidance": "Please check that the API key is correct and has not expired.", + "authenticationErrorMessage": "The transcription service rejected the API credentials.", + "checkApiKeyGuidance": "Check the API key in settings", + "checkNetworkGuidance": "Check network connection", + "connectionError": "Connection Error", + "connectionErrorGuidance": "Check your internet connection and ensure the service is available.", + "connectionErrorMessage": "Could not connect to the transcription service.", + "convertFormatGuidance": "Convert to MP3 or WAV before uploading", + "convertStandardGuidance": "Convert to standard audio format", + "enableChunkingGuidance": "Enable chunking in settings or compress the file", + "fallbackMessage": "An error occurred", + "fallbackTitle": "Error", + "fileTooLarge": "文件太大", + "fileTooLargeGuidance": "Try enabling audio chunking in your settings, or compress the audio file before uploading.", + "fileTooLargeMaxSize": "File too large. Max: {{size}} MB.", + "fileTooLargeMessage": "The audio file exceeds the maximum size allowed by the transcription service.", + "fileTooLargeTitle": "File Too Large", + "generic": "发生错误", + "invalidAudioFormat": "Invalid Audio Format", + "invalidAudioFormatGuidance": "Try converting the audio to MP3 or WAV format before uploading.", + "invalidAudioFormatMessage": "The audio file format is not supported or the file may be corrupted.", + "loadingShares": "Fehler beim Laden der Freigaben", + "networkError": "网络错误。请检查您的连接。", + "networkErrorDuringUpload": "Network error during upload", + "notFound": "未找到", + "permissionDenied": "权限被拒绝", + "processingError": "Processing Error", + "processingErrorFallbackGuidance": "Try reprocessing the recording", + "processingErrorGuidance": "If this error persists, try reprocessing the recording.", + "processingErrorMessage": "An error occurred during processing.", + "processingFailedOnServer": "Processing failed on server.", + "processingFailedWithStatus": "Processing failed with status {{status}}", + "processingTimeout": "Processing Timeout", + "processingTimeoutGuidance": "This can happen with very long recordings. Try splitting the audio into smaller parts.", + "processingTimeoutMessage": "The transcription took too long to complete.", + "quotaExceeded": "存储配额已超出", + "rateLimitExceeded": "Rate Limit Exceeded", + "rateLimitExceededGuidance": "Please wait a few minutes and try reprocessing.", + "rateLimitExceededMessage": "Too many requests were sent to the transcription service.", + "serverError": "服务器错误。请稍后重试。", + "serverErrorStatus": "Server error ({{status}})", + "serviceUnavailable": "Service Unavailable", + "serviceUnavailableGuidance": "This is usually temporary. Please try again in a few minutes.", + "serviceUnavailableMessage": "The transcription service is temporarily unavailable.", + "splitAudioGuidance": "Try splitting the audio into smaller parts", + "summaryFailed": "摘要生成失败。请重试。", + "transcriptionFailed": "转录失败。请重试。", + "tryAgainLaterGuidance": "Try again in a few minutes", + "unauthorized": "未授权", + "unexpectedResponse": "Unexpected success response from server after upload.", + "unsupportedFormat": "不支持的文件格式", + "uploadFailed": "上传失败。请重试。", + "uploadFailedWithStatus": "Upload failed with status {{status}}", + "uploadTimedOut": "Upload timed out", + "validationError": "验证错误", + "waitAndRetryGuidance": "Wait a few minutes and try again" + }, + "eventExtraction": { + "description": "Wenn aktiviert, identifiziert die KI Meetings, Termine und Fristen in Ihren Aufnahmen und erstellt herunterladbare Kalenderereignisse.", + "enableLabel": "Automatische Ereignisextraktion aus Transkripten aktivieren", + "info": "Extrahierte Ereignisse erscheinen im 'Ereignisse'-Tab bei Aufnahmen, in denen Kalenderelemente erkannt werden.", + "title": "Ereignisextraktion" + }, + "events": { + "add": "Hinzufügen", + "addToCalendar": "Zum Kalender Hinzufügen", + "attendees": "Teilnehmer", + "confirmDelete": "Ereignis \"{title}\" löschen?", + "delete": "Löschen", + "deleteFailed": "Ereignis konnte nicht gelöscht werden", + "deleted": "Ereignis gelöscht", + "end": "Ende", + "location": "Ort", + "noEvents": "Keine Ereignisse in dieser Aufnahme erkannt", + "start": "Beginn", + "title": "Ereignisse" + }, + "exportLabels": { + "created": "Erstellt", + "date": "Datum", + "fileSize": "Dateigröße", + "footer": "Erstellt mit [DictIA](https://gitea.innova-ai.ca/Innova-AI/dictia)", + "metadata": "Metadaten", + "notes": "Notizen", + "originalFile": "Originaldatei", + "participants": "Teilnehmer", + "summarizationTime": "Zusammenfassungszeit", + "summary": "Zusammenfassung", + "tags": "Tags", + "transcription": "Transkription", + "transcriptionTime": "Transkriptionszeit" + }, + "exportTemplates": { + "availableLabels": "Lokalisierte Bezeichnungen (automatisch übersetzt)", + "availableTemplates": "Verfügbare Vorlagen", + "availableVars": "Verfügbare Variablen", + "cancel": "Abbrechen", + "conditionals": "Bedingungen", + "conditionalsHint": "Verwenden Sie {{#if variable}}...{{/if}}, um Inhalte bedingt einzuschließen", + "contentSections": "Inhaltsbereiche", + "createDefaults": "Standardvorlage erstellen", + "createNew": "Vorlage erstellen", + "default": "Standard", + "delete": "Löschen", + "description": "Passen Sie an, wie Aufnahmen in Markdown-Dateien exportiert werden.", + "recordingData": "Aufnahmedaten", + "save": "Speichern", + "selectOrCreate": "Wählen Sie eine Vorlage zum Bearbeiten oder erstellen Sie eine neue", + "setDefault": "Als Standardvorlage festlegen", + "tabTitle": "Export", + "template": "Vorlage", + "templateDescription": "Beschreibung", + "templateName": "Vorlagenname", + "title": "Export-Vorlagen", + "viewGuide": "Vorlagen-Leitfaden anzeigen" + }, + "fileSize": { + "bytes": "{{count}} B", + "gigabytes": "{{count}} GB", + "kilobytes": "{{count}} KB", + "megabytes": "{{count}} MB" + }, + "folderManagement": { + "allFolders": "Alle Ordner", + "asrDefaults": "ASR-Standardwerte", + "autoShareOnApply": "Automatisch mit Gruppenmitgliedern teilen", + "autoShareOnApplyHelp": "Aufnahmen automatisch mit allen Gruppenmitgliedern teilen, wenn sie diesem Ordner hinzugefügt werden", + "confirmDelete": "Möchten Sie diesen Ordner wirklich löschen? Aufnahmen werden aus dem Ordner entfernt, aber nicht gelöscht.", + "createFolder": "Ordner erstellen", + "customPrompt": "Benutzerdefinierter Prompt", + "defaultLanguage": "Standardsprache", + "deleteFolder": "Ordner löschen", + "description": "Organisieren Sie Ihre Aufnahmen in Ordnern. Im Gegensatz zu Tags kann eine Aufnahme nur einem Ordner zugeordnet werden. Ordner-Prompts werden vor Benutzer-Prompts, aber nach Tag-Prompts angewendet.", + "editFolder": "Ordner bearbeiten", + "filterByFolder": "Nach Ordner filtern", + "folderColor": "Ordnerfarbe", + "folderName": "Ordnername", + "groupSettings": "Gruppeneinstellungen", + "maxSpeakers": "Max. Sprecher", + "minSpeakers": "Min. Sprecher", + "moveToFolder": "In Ordner verschieben", + "namingTemplate": "Benennungsvorlage", + "noFolder": "Kein Ordner", + "noFolders": "Noch keine Ordner erstellt", + "noFoldersDescription": "Erstellen Sie Ihren ersten Ordner, um Ihre Aufnahmen zu organisieren", + "protectFromDeletion": "Vor Löschung schützen", + "protectFromDeletionHelp": "Aufnahmen in diesem Ordner vor automatischer Löschung schützen", + "recordings": "Aufnahmen", + "removeFromFolder": "Aus Ordner entfernen", + "retentionDays": "Aufbewahrungstage", + "retentionDaysHelp": "Aufnahmen in diesem Ordner werden nach dieser Anzahl von Tagen gelöscht. Leer lassen für globale Aufbewahrungsregel.", + "retentionSettings": "Aufbewahrungseinstellungen", + "selectNamingTemplate": "Benennungsvorlage auswählen...", + "shareWithGroupLead": "Mit Gruppenadministratoren teilen", + "shareWithGroupLeadHelp": "Aufnahmen mit Gruppenadministratoren teilen, wenn sie diesem Ordner hinzugefügt werden", + "title": "Ordnerverwaltung" + }, + "form": { + "auto": "Auto", + "autoDetect": "Automatisch erkennen", + "dateFrom": "Von", + "dateTo": "Bis", + "enterNotesMarkdown": "Notizen im Markdown-Format eingeben...", + "enterSummaryMarkdown": "Zusammenfassung im Markdown-Format eingeben...", + "folder": "Folder", + "hotwords": "Hotwords", + "hotwordsHelp": "Comma-separated words to improve recognition of domain-specific terms", + "hotwordsPlaceholder": "e.g., Speakr, CTranslate2, PyAnnote", + "initialPrompt": "Initial Prompt", + "initialPromptHelp": "Context to steer the transcription model's style and vocabulary", + "initialPromptPlaceholder": "e.g., This is a meeting about AI transcription tools.", + "language": "Sprache", + "maxSpeakers": "Max. Sprecher", + "meetingDate": "Meeting-Datum", + "minSpeakers": "Min. Sprecher", + "minutes": "Minuten", + "notes": "Notizen", + "notesPlaceholder": "Geben Sie Ihre Notizen im Markdown-Format ein...", + "optional": "Optional", + "participantNamePlaceholder": "Participant name...", + "participants": "Teilnehmer", + "placeholderAuto": "Auto", + "placeholderCharacterLimit": "Zeichenlimit eingeben (z.B. 30000)", + "placeholderMinutes": "Minuten", + "placeholderOptional": "Optional", + "placeholderSeconds": "Sekunden", + "placeholderSizeMB": "Größe in MB eingeben", + "searchSpeakers": "Sprecher suchen...", + "searchTags": "Tags suchen...", + "seconds": "Sekunden", + "shareNotes": "Notizen teilen", + "shareSummary": "Zusammenfassung teilen", + "shareableLink": "Teilbarer Link", + "summaryPromptPlaceholder": "Standard-Zusammenfassungsprompt eingeben...", + "title": "Titel", + "transcriptionLanguage": "Transcription Language", + "yourFullName": "Ihr vollständiger Name" + }, + "groups": { + "addMembers": "Mitglieder hinzufügen...", + "autoShare": "Automatisch teilen", + "autoShareNote": "Hinweis: Wenn beide aktiviert sind, haben alle Team-Mitglieder Zugriff. Wenn nur \"Team-Administratoren\" aktiviert ist, haben nur Teamleiter Zugriff.", + "autoShareTeam": "Aufnahmen automatisch mit allen Team-Mitgliedern teilen, wenn dieser Tag angewendet wird", + "autoSharesWithTeam": "Teilt automatisch mit allen Team-Mitgliedern", + "confirmDelete": "Sind Sie sicher, dass Sie dieses Team löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.", + "createTeam": "Team erstellen", + "createTeamTag": "Neuen Team-Tag erstellen", + "dayRetention": "Tage Aufbewahrung", + "deleteTeam": "Team löschen", + "deletionExempt": "Von Löschung ausgenommen", + "deletionExemptHelp": "Aufnahmen mit diesem Tag werden von der automatischen Löschung ausgenommen, auch wenn sie die Aufbewahrungsdauer überschreiten.", + "editTeam": "Team bearbeiten", + "editTeamTag": "Team-Tag bearbeiten", + "globalRetention": "Globale Aufbewahrung", + "members": "Mitglieder", + "noMembers": "Keine Mitglieder in diesem Team", + "noTeamTags": "Noch keine Team-Tags erstellt", + "noTeams": "Noch keine Teams erstellt", + "retentionHelp": "Aufnahmen mit diesem Tag werden nach dieser Anzahl von Tagen gelöscht. Leer lassen für globale Aufbewahrung ({{days}} Tage).", + "retentionPeriod": "Aufbewahrungsdauer (Tage)", + "retentionPlaceholder": "Leer lassen für globale Aufbewahrung", + "searchUsers": "Benutzer suchen...", + "selectTeamLead": "Teamleiter auswählen...", + "shareWithAdmins": "Aufnahmen mit Team-Administratoren teilen, wenn dieser Tag angewendet wird", + "sharesWithAdminsOnly": "Teilt nur mit Team-Administratoren", + "syncComplete": "Team-Freigaben erfolgreich synchronisiert", + "syncTeamShares": "Team-Freigaben synchronisieren", + "syncTeamSharesDescription": "Dadurch werden alle Aufnahmen mit Team-Tags rückwirkend mit den entsprechenden Team-Mitgliedern gemäß den Freigabeeinstellungen des Tags geteilt.", + "teamLead": "Teamleiter", + "teamName": "Team-Name", + "teamNamePlaceholder": "Team-Name eingeben", + "teamTags": "Team-Tags", + "title": "Gruppenverwaltung", + "updateTeam": "Team aktualisieren" + }, + "help": { + "actions": "Aktionen", + "activeFilters": "Aktive Filter", + "addSegmentBelow": "Segment darunter hinzufügen", + "advancedAsrOptions": "Erweiterte ASR-Optionen", + "allRecordingsLoaded": "Alle Aufnahmen geladen", + "allTagsSelected": "All tags selected", + "appliedSuggestedNames": "{{count}} vorgeschlagener Name angewendet", + "appliedSuggestedNamesPlural": "{{count}} vorgeschlagene Namen angewendet", + "applySuggested": "Vorschläge anwenden", + "applySuggestedMobile": "Vorschlag", + "approachingLimit": "Nähert sich {{limit}}MB-Limit", + "askAboutTranscription": "Fragen zu dieser Transkription stellen", + "audioDeletedDescription": "Die Audiodatei für diese Aufnahme wurde gelöscht, aber die Transkription ist weiterhin verfügbar.", + "audioDeletedMessage": "Audiodatei wurde archiviert und ist nicht mehr zur Wiedergabe verfügbar.", + "audioDeletedTitle": "Audiodatei gelöscht", + "audioPlayer": "Audio-Player", + "autoIdentify": "Automatisch identifizieren", + "autoIdentifyMobile": "Auto", + "bothAudioDesc": "Nimmt Ihre Stimme + Meeting-Teilnehmer auf (empfohlen für Online-Meetings)", + "clearFilters": "Filter löschen", + "clickToAddNotes": "Klicken um Notizen hinzuzufügen...", + "colorRepeats": "Farbe wiederholt sich ab Sprecher {{number}}", + "completedFiles": "Abgeschlossene Dateien", + "confirmReprocessingTitle": "Neu-Verarbeitung bestätigen", + "copyMessage": "Nachricht kopieren", + "createFolders": "Create folders", + "createPublicLink": "Einen öffentlichen Link erstellen, um diese Aufnahme zu teilen. Teilen ist nur bei sicheren (HTTPS) Verbindungen verfügbar.", + "createTags": "Tags erstellen", + "defaultHotwordsHelp": "Comma-separated words or phrases that the transcription model should prioritize recognizing (brand names, acronyms, technical terms).", + "defaultInitialPromptHelp": "Context to steer the transcription model's style and vocabulary. Describe the topic or expected content of your recordings.", + "deleteSegment": "Segment löschen", + "discard": "Verwerfen", + "dragToReorder": "Drag to reorder", + "endTime": "Ende", + "enterNameFor": "Namen eingeben für", + "enterSpeakerName": "Sprechername eingeben...", + "entireScreen": "Gesamter Bildschirm", + "errorChangingSpeaker": "Fehler beim Wechseln des Sprechers", + "errorOpeningTextEditor": "Fehler beim Öffnen des Texteditors", + "errorSavingText": "Fehler beim Speichern des Textes", + "estimatedSize": "Geschätzte Größe", + "firstTagAsrSettings": "First tag's ASR settings will be applied:", + "firstTagDefaultsApplied": "First tag's defaults applied", + "folderHasCustomPrompt": "This folder has a custom summary prompt", + "generatingSummary": "Generiere Zusammenfassung...", + "groups": "Gruppen", + "howToRecordSystemAudio": "Wie man System-Audio aufnimmt", + "identifyAllSpeakers": "Alle Sprecher identifizieren", + "identifying": "Identifiziere...", + "importantNote": "Wichtiger Hinweis", + "internalSharingDesc": "Mit bestimmten Benutzern in Ihrer Organisation teilen", + "lines": "{{count}} Zeilen", + "loadingMore": "Lade weitere Aufnahmen...", + "loadingRecordings": "Lade Aufnahmen...", + "me": "Ich", + "microphoneDesc": "Nimmt nur Ihre Stimme auf", + "modelReasoning": "Modell-Begründung", + "moreSpeakersThanColors": "Mehr Sprecher als verfügbare Farben", + "navigate": "Navigiere", + "noDateSet": "Kein Datum gesetzt", + "noMatchingTags": "No matching tags", + "noParticipants": "Keine Teilnehmer", + "noRecordingSelected": "Keine Aufnahme ausgewählt.", + "noSpeakersIdentified": "Es konnten keine Sprecher aus dem Kontext identifiziert werden.", + "noSuggestionsToApply": "Keine Vorschläge zum Anwenden", + "noTagsCreated": "Noch keine Tags erstellt.", + "of": "von", + "playFromHere": "Von hier abspielen", + "pleaseEnterSpeakerName": "Bitte geben Sie einen Sprechernamen ein", + "processingTime": "Verarbeitungszeit", + "processingTimeDescription": "Dies kann einige Minuten dauern. Sie können die App während der Verarbeitung weiter verwenden.", + "processingTranscription": "Verarbeite Transkription...", + "publicLinkDesc": "Jeder mit diesem Link kann auf die Aufnahme zugreifen", + "recordSystemSteps1": "Klicken Sie auf \"System-Audio aufnehmen\" oder \"Beides aufnehmen\".", + "recordSystemSteps2": "Im Popup wählen Sie", + "recordSystemSteps3": "Stellen Sie sicher, dass Sie das Kästchen ankreuzen, das sagt", + "recordingFinished": "Aufnahme beendet", + "recordingInProgress": "Aufnahme läuft...", + "regenerateSummaryAfterNames": "Zusammenfassung nach Namens-Update neu generieren", + "saved": "Gespeichert!", + "savingProgress": "Wird gespeichert...", + "selectedTagsCustomPrompts": "Selected tags include custom summary prompts", + "sentence": "Satz", + "shareSystemAudio": "System-Audio teilen", + "shareTabAudio": "Tab-Audio teilen", + "sharedOn": "Geteilt am", + "sharingWindowNoAudio": "Das Teilen eines \"Fensters\" nimmt kein Audio auf.", + "speakerAdded": "Sprecher erfolgreich hinzugefügt", + "speakerCount": "Sprecher", + "speakerName": "Sprechername", + "speakerNamesUpdated": "Sprechernamen erfolgreich aktualisiert!", + "speakers": "Sprecher", + "speakersIdentified": "{{count}} Sprecher erfolgreich identifiziert!", + "speakersIdentifiedPlural": "{{count}} Sprecher erfolgreich identifiziert!", + "speakersUpdatedSaveToApply": "Sprecher aktualisiert! Speichern Sie die Transkription, um die Änderungen zu übernehmen.", + "specificBrowserTab": "spezifischen Browser-Tab", + "startTime": "Start", + "startingAutoIdentification": "Automatische Sprecheridentifikation wird gestartet...", + "summaryGenerationFailed": "Zusammenfassungsgenerierung fehlgeschlagen", + "summaryGenerationTimedOut": "Zeitüberschreitung bei der Zusammenfassungsgenerierung", + "summaryRegenerationStarted": "Neugenerierung der Zusammenfassung gestartet", + "summaryUpdated": "Zusammenfassung aktualisiert!", + "systemAudioDesc": "Nimmt Meeting-Teilnehmer und Systemklänge auf", + "tagManagement": "Tag-Verwaltung", + "thisActionCannotBeUndone": "Diese Aktion kann nicht rückgängig gemacht werden.", + "toCaptureAudioFromMeetings": "Um Audio von Besprechungen oder anderen Apps aufzunehmen, müssen Sie Ihren Bildschirm oder einen Browser-Tab freigeben.", + "toOrganizeRecordings": "to organize your recordings", + "transcriptUpdated": "Transkription erfolgreich aktualisiert!", + "troubleshooting": "Fehlerbehebung", + "tryAdjustingSearch": "Versuchen Sie Ihre Suche anzupassen oder", + "unsupportedBrowser": "Nicht unterstützter Browser", + "untitled": "Unbenannte Aufnahme", + "uploadRecordingNotes": "Aufnahme und Notizen hochladen", + "whatWillHappen": "Was wird passieren?", + "whyNotWorking": "Warum funktioniert es nicht?", + "youHaveXSpeakers": "Sie haben {{count}} Sprecher, aber nur 16 eindeutige Farben sind verfügbar. Die Farben wiederholen sich nach dem 16. Sprecher." + }, + "incognito": { + "audioNotStored": "Audio not stored in incognito mode", + "discardConfirm": "This will permanently discard your incognito recording. Continue?", + "mode": "Incognito Mode", + "notSavedToAccount": "Not saved to account", + "oneFileAtATime": "Incognito mode supports one file at a time", + "processInIncognito": "Process in Incognito", + "processWithoutSaving": "Process without saving", + "processing": "Processing...", + "processingComplete": "Processing complete!", + "processingInProgress": "Processing in incognito mode...", + "recordingDiscarded": "Incognito recording discarded", + "recordingProcessed": "Incognito recording processed - data will be lost when tab closes", + "recordingReady": "Incognito recording ready!", + "recordingTitle": "Incognito Recording", + "selectExactlyOneFile": "Select exactly 1 file", + "sessionOnly": "Session only", + "uploadingFile": "Uploading file for incognito processing..." + }, + "inquire": { + "activeFilters": "Aktive Filter:", + "askQuestions": "Fragen Sie zu Ihren Transkriptionen", + "clearAll": "Alle löschen", + "dateRange": "Datumsbereich", + "dateRangeActive": "Datumsbereich aktiv", + "exampleQuestion1": "\"Welche Aktionspunkte wurden besprochen?\"", + "exampleQuestion2": "\"Wann haben wir beschlossen, den Zeitplan zu ändern?\"", + "exampleQuestion3": "\"Welche Bedenken wurden bezüglich des Budgets geäußert?\"", + "exampleQuestion4": "\"Wer war für die Marketing-Aufgaben verantwortlich?\"", + "exampleQuestions": "Beispielfragen:", + "filters": "Filter", + "filtersActive": "Filter aktiv", + "from": "Von", + "noSpeakerData": "Keine Sprecherdaten verfügbar", + "placeholder": "Stellen Sie Fragen zu Ihren gefilterten Transkriptionen...", + "selectFilters": "Wählen Sie Filter auf der linken Seite aus, um Ihre Transkriptionen einzugrenzen, und stellen Sie dann Fragen, um Einblicke aus Ihren Aufnahmen zu erhalten.", + "sendHint": "Enter zum Senden • Strg+Enter für neue Zeile", + "speakerRequirement": "Sprecheridentifikation erfordert Aufnahmen mit mehreren Sprechern", + "speakers": "Sprecher", + "speakersCount": "Sprecher", + "tags": "Tags", + "tagsCount": "Tags", + "title": "Nachfragen", + "to": "Bis" + }, + "languages": { + "ar": "Arabisch", + "de": "Deutsch", + "en": "Englisch", + "es": "Spanisch", + "fr": "Französisch", + "hi": "Hindi", + "it": "Italienisch", + "ja": "Japanisch", + "ko": "Koreanisch", + "nl": "Niederländisch", + "pt": "Portugiesisch", + "ru": "Russisch", + "zh": "Chinesisch" + }, + "manageSpeakersModal": { + "created": "Erstellt", + "description": "Verwalten Sie Ihre gespeicherten Sprecher. Diese werden automatisch gespeichert, wenn Sie Sprechernamen in Ihren Aufnahmen verwenden.", + "failedToLoad": "Fehler beim Laden der Sprecher", + "lastUsed": "Zuletzt verwendet", + "loadingSpeakers": "Sprecher werden geladen...", + "noSpeakersYet": "Noch keine Sprecher gespeichert", + "speakersSaved": "{{count}} Sprecher gespeichert", + "speakersWillAppear": "Sprecher erscheinen hier, wenn Sie Sprechernamen in Ihren Aufnahmen verwenden", + "times": "mal", + "title": "Sprecher Verwalten", + "used": "Verwendet" + }, + "messages": { + "colorSchemeApplied": "Color scheme applied", + "colorSchemeReset": "Color scheme reset to default", + "copiedSuccessfully": "Copied to clipboard!", + "copiedToClipboard": "In Zwischenablage kopiert", + "copyFailed": "Failed to copy", + "copyNotSupported": "Copy failed. Your browser may not support this feature.", + "downloadStarted": "Download gestartet", + "errorRecoveringRecording": "Error recovering recording", + "eventDownloadFailed": "Failed to download event", + "eventDownloadSuccess": "Event \"{{title}}\" downloaded. Open the file to add to your calendar.", + "eventsExportFailed": "Failed to export events", + "eventsExportSuccess": "Exported {{count}} events", + "failedToDeleteJob": "Failed to delete job", + "failedToRecoverRecording": "Failed to recover recording", + "failedToRetryJob": "Failed to retry job", + "failedToSave": "Failed to save: {{error}}", + "failedToSaveParticipants": "Failed to save participants", + "followPlayerDisabled": "Follow player mode disabled", + "followPlayerEnabled": "Follow player mode enabled", + "invalidEventData": "Invalid event data", + "jobQueuedForRetry": "Job queued for retry", + "noEventsToExport": "No events to export", + "noNotesAvailableDownload": "No notes available to download.", + "noNotesToCopy": "No notes available to copy.", + "noPermissionToEdit": "You do not have permission to edit this recording", + "noSummaryToCopy": "No summary available to copy.", + "noSummaryToDownload": "No summary available to download.", + "noTranscriptionToCopy": "No transcription available to copy.", + "noTranscriptionToDownload": "No transcription available to download.", + "notesCopied": "Notes copied to clipboard!", + "notesDownloadFailed": "Failed to download notes", + "notesDownloadSuccess": "Notes downloaded successfully!", + "notesUpdated": "Notizen erfolgreich aktualisiert", + "passwordChanged": "Passwort erfolgreich geändert", + "profileUpdated": "Profil erfolgreich aktualisiert", + "recordingDeleted": "Aufnahme erfolgreich gelöscht", + "recordingDiscarded": "Recording discarded", + "recordingRecovered": "Recording recovered successfully", + "recordingSaved": "Aufnahme erfolgreich gespeichert", + "saveParticipantsFailed": "Save failed: {{error}}", + "settingsSaved": "Einstellungen erfolgreich gespeichert", + "summaryCopied": "Summary copied to clipboard!", + "summaryDownloadFailed": "Failed to download summary", + "summaryDownloadSuccess": "Summary downloaded successfully!", + "summaryGenerated": "Zusammenfassung erfolgreich generiert", + "tagAdded": "Tag erfolgreich hinzugefügt", + "tagRemoved": "Tag erfolgreich entfernt", + "transcriptDownloadFailed": "Failed to download transcript", + "transcriptDownloadSuccess": "Transcript downloaded successfully!", + "transcriptionCopied": "Transcription copied to clipboard!", + "transcriptionUpdated": "Transkription erfolgreich aktualisiert" + }, + "metadata": { + "cancelEdit": "Abbrechen", + "createdAt": "Erstellt", + "duration": "Dauer", + "editMetadata": "Metadaten bearbeiten", + "fileName": "Dateiname", + "fileSize": "Dateigröße", + "language": "Sprache", + "meetingDate": "Meeting-Datum", + "processingTime": "Verarbeitungszeit", + "saveMetadata": "Speichern", + "status": "Status", + "title": "Metadaten", + "updatedAt": "Aktualisiert", + "wordCount": "Wortanzahl" + }, + "modal": { + "addSpeaker": "Neuen Sprecher Hinzufügen", + "colorScheme": "Farbschema", + "deleteRecording": "Aufnahme löschen", + "editAsrTranscription": "ASR-Transkription bearbeiten", + "editParticipants": "Teilnehmer Bearbeiten", + "editRecording": "Aufnahme bearbeiten", + "editSpeakers": "Sprecher Bearbeiten", + "editTags": "Aufnahme-Tags bearbeiten", + "editTranscription": "Transkription bearbeiten", + "identifySpeakers": "Sprecher identifizieren", + "recordingNotice": "Aufnahme-Hinweis", + "reprocessSummary": "Zusammenfassung neu verarbeiten", + "reprocessTranscription": "Transkription neu verarbeiten", + "resetStatus": "Aufnahme-Status zurücksetzen?", + "shareRecording": "Aufnahme teilen", + "sharedTranscripts": "Meine geteilten Transkripte", + "systemAudioHelp": "System-Audio Hilfe", + "uploadFiles": "Dateien hochladen", + "uploadNotice": "Upload-Hinweis" + }, + "namingTemplates": { + "addPattern": "Muster hinzufügen", + "availableTemplates": "Verfügbare Vorlagen", + "availableVars": "Verfügbare Variablen", + "cancel": "Abbrechen", + "createDefaults": "Standardvorlagen erstellen", + "createNew": "Vorlage erstellen", + "customVarsHint": "Definieren Sie unten Regex-Muster, um benutzerdefinierte Variablen aus Dateinamen zu extrahieren.", + "delete": "Löschen", + "description": "Definieren Sie, wie Aufnahmetitel aus Dateinamen und Transkriptionsinhalt generiert werden.", + "descriptionLabel": "Beschreibung", + "noDefault": "Kein Standard (nur KI-Titel)", + "regexHint": "Daten aus Dateinamen extrahieren. Verwenden Sie Erfassungsgruppen () zur Angabe der Übereinstimmung.", + "regexPatterns": "Regex-Muster (Optional)", + "result": "Ergebnis:", + "save": "Speichern", + "selectOrCreate": "Wählen Sie eine Vorlage zum Bearbeiten oder erstellen Sie eine neue", + "tabTitle": "Benennung", + "template": "Vorlage", + "templateName": "Vorlagenname", + "test": "Testen", + "testTemplate": "Vorlage testen", + "title": "Benennungsvorlagen", + "userDefault": "Standardvorlage", + "userDefaultHint": "Wird angewendet, wenn kein Tag eine Benennungsvorlage hat." + }, + "nav": { + "account": "Konto", + "accountSettings": "Kontoeinstellungen", + "admin": "Administration", + "adminDashboard": "Admin-Dashboard", + "darkMode": "Dunkler Modus", + "groupManagement": "Gruppenverwaltung", + "home": "Startseite", + "language": "Sprache", + "lightMode": "Heller Modus", + "newRecording": "Neue Aufnahme", + "recording": "Aufnahme", + "settings": "Einstellungen", + "signOut": "Abmelden", + "teamManagement": "Gruppenverwaltung", + "upload": "Hochladen", + "userProfile": "Benutzerprofil" + }, + "notes": { + "cancelEdit": "Bearbeitung abbrechen", + "characterCount": "{{count}} Zeichen", + "characterCountPlural": "{{count}} Zeichen", + "editNotes": "Notizen bearbeiten", + "lastUpdated": "Zuletzt aktualisiert", + "placeholder": "Ihre Notizen hier hinzufügen...", + "saveNotes": "Notizen speichern", + "title": "Notizen" + }, + "pwa": { + "installApp": "App installieren", + "installed": "Erfolgreich installiert", + "installing": "Installiere...", + "notificationPermissionDenied": "Benachrichtigungsberechtigung verweigert", + "notificationsEnabled": "Benachrichtigungen aktiviert", + "offline": "Sie sind offline", + "screenAwake": "Bildschirm bleibt während der Aufnahme wach", + "screenAwakeFailed": "Bildschirm konnte nicht wach gehalten werden", + "updateAvailable": "Update verfügbar" + }, + "recording": { + "acceptDisclaimer": "Ich akzeptiere", + "cancelRecording": "Abbrechen", + "discardRecovery": "Verwerfen", + "disclaimer": "Aufnahme-Hinweis", + "duration": "Dauer", + "micPlusSys": "Mic + Sys", + "microphone": "Mikrofon", + "microphoneAndSystem": "Mikrofon + System", + "microphonePermissionDenied": "Mikrofon-Berechtigung verweigert", + "modeBoth": "Mikrofon + System", + "modeMicrophone": "Mikrofon", + "modeSystem": "System-Audio", + "notes": "Notizen", + "notesPlaceholder": "Notizen zu dieser Aufnahme hinzufügen...", + "pauseRecording": "Pause", + "recordingFailed": "Aufnahme fehlgeschlagen", + "recordingInProgress": "Aufnahme läuft...", + "recordingMode": "Aufnahmemodus", + "recordingSize": "Geschätzte Größe", + "recordingStopped": "Aufnahme gestoppt", + "recordingTime": "Aufnahmezeit", + "recoveryDescription": "Wir haben eine unvollständige Aufnahme aus einer früheren Sitzung gefunden. Möchten Sie diese wiederherstellen?", + "recoveryFound": "Nicht gespeicherte Aufnahme gefunden", + "recoveryTitle": "Aufnahme wiederherstellen", + "restoreRecording": "Wiederherstellen", + "resumeRecording": "Fortsetzen", + "saveRecording": "Aufnahme speichern", + "size": "Größe", + "startRecording": "Aufnahme starten", + "startedAt": "Gestartet am", + "stopRecording": "Aufnahme stoppen", + "systemAudio": "System-Audio", + "systemAudioNotSupported": "System-Audio-Aufnahme wird in diesem Browser nicht unterstützt", + "title": "Audio-Aufnahme" + }, + "reprocessModal": { + "audioReTranscribedFromScratch": "Das Audio wird von Grund auf neu transkribiert. Dies wird auch den Titel und die Zusammenfassung basierend auf der neuen Transkription neu generieren.", + "audioReTranscribedWithAsr": "Das Audio wird mit dem ASR-Endpoint neu transkribiert. Dies umfasst Diarisierung und wird Titel und Zusammenfassung neu generieren.", + "manualEditsOverwritten": "Alle manuellen Bearbeitungen der Transkription, des Titels oder der Zusammenfassung werden überschrieben.", + "manualEditsOverwrittenSummary": "Alle manuellen Bearbeitungen des Titels oder der Zusammenfassung werden überschrieben.", + "newTitleAndSummary": "Ein neuer Titel und eine neue Zusammenfassung werden basierend auf der vorhandenen Transkription generiert." + }, + "settings": { + "apiKeys": "API-Schlüssel", + "appearance": "Erscheinungsbild", + "changePassword": "Passwort ändern", + "dataExport": "Datenexport", + "deleteAccount": "Konto löschen", + "integrations": "Integrationen", + "language": "Sprache", + "notifications": "Benachrichtigungen", + "preferences": "Einstellungen", + "privacy": "Datenschutz", + "profile": "Profil", + "security": "Sicherheit", + "theme": "Design", + "title": "Einstellungen", + "twoFactorAuth": "Zwei-Faktor-Authentifizierung" + }, + "sharedTranscripts": { + "noSharedTranscripts": "Sie haben noch keine Transkripte geteilt.", + "shareNotes": "Notizen Teilen", + "shareSummary": "Zusammenfassung Teilen", + "sharedOn": "Geteilt am" + }, + "sharedTranscriptsPage": { + "noSharedTranscripts": "Sie haben noch keine Transkripte geteilt." + }, + "sharing": { + "canEdit": "Kann bearbeiten", + "canReshare": "Kann weitergeben", + "internalSharing": "Interne Freigabe", + "notSharedYet": "Noch nicht geteilt", + "publicBadge": "Öffentlich", + "publicLink": "Öffentlicher Link", + "publicLinks": "öffentliche(r) Link(s)", + "publicLinksGenerated": "öffentliche(r) Link(s) generiert", + "searchUsers": "Benutzer suchen...", + "sharedBadge": "Geteilt", + "sharedBy": "Geteilt von", + "sharedWith": "Geteilt mit", + "teamBadge": "Group", + "teamRecording": "Team-Aufnahme", + "unknown": "Unbekannt", + "users": "Benutzer" + }, + "sidebar": { + "advancedSearch": "Erweiterte Suche", + "archived": "Archiviert", + "archivedRecordings": "Archivierte Aufnahmen", + "dateRange": "Datumsbereich", + "filters": "Filter", + "highlighted": "Hervorgehoben", + "inbox": "Posteingang", + "lastMonth": "Letzten Monat", + "lastWeek": "Letzte Woche", + "loadMore": "Mehr laden", + "markAsRead": "Als gelesen markieren", + "moveToInbox": "In Posteingang verschieben", + "noRecordings": "Keine Aufnahmen gefunden", + "older": "Älter", + "removeFromHighlighted": "Von Favoriten entfernen", + "searchRecordings": "Aufnahmen suchen...", + "sharedWithMe": "Mit mir geteilt", + "sortBy": "Sortieren nach", + "sortByDate": "Erstellungsdatum", + "sortByMeetingDate": "Meeting-Datum", + "starred": "Starred", + "tags": "Tags", + "thisMonth": "Diesen Monat", + "thisWeek": "Diese Woche", + "today": "Heute", + "totalRecordings": "{{count}} Aufnahme", + "totalRecordingsPlural": "{{count}} Aufnahmen", + "upcoming": "Bevorstehend", + "yesterday": "Gestern" + }, + "speakers": { + "filterBySpeaker": "Nach Sprecher filtern", + "noMatchingSpeakers": "Keine passenden Sprecher", + "searchSpeakers": "Suchen..." + }, + "speakersManagement": { + "added": "Hinzugefügt", + "confidence": "Zuverlässigkeit", + "confidenceHigh": "hoch", + "confidenceLow": "niedrig", + "confidenceMedium": "mittel", + "created": "Erstellt", + "description": "Verwalten Sie Ihre gespeicherten Sprecher. Diese werden automatisch gespeichert, wenn Sie Sprechernamen in Ihren Aufnahmen verwenden.", + "failedToLoad": "Fehler beim Laden der Sprecher", + "failedToLoadSnippets": "Fehler beim Laden der Ausschnitte", + "keepThisSpeaker": "Diesen Sprecher behalten (andere werden damit zusammengeführt):", + "last": "Zuletzt", + "lastUsed": "Zuletzt verwendet", + "loadingSpeakers": "Sprecher werden geladen...", + "match": "Übereinstimmung", + "mergeDescription": "Kombinieren Sie mehrere Sprecherprofile zu einem. Alle Einbettungen, Ausschnitte und Nutzungsdaten werden zusammengeführt.", + "mergeFailed": "Fehler beim Zusammenführen der Sprecher", + "mergeNSpeakers": "{{count}} Sprecher Zusammenführen", + "mergeSpeakers": "Sprecher Zusammenführen", + "mergeSuccess": "Sprecher erfolgreich zusammengeführt", + "noSnippetsAvailable": "Keine Ausschnitte verfügbar", + "noSpeakersYet": "Noch keine Sprecher gespeichert", + "sample": "Probe", + "samples": "Proben", + "selectToMerge": "Wählen Sie 2+ zum Zusammenführen", + "speakersToMerge": "Zusammenzuführende Sprecher:", + "speakersWillAppear": "Sprecher erscheinen hier, wenn Sie Sprechernamen in Ihren Aufnahmen verwenden", + "targetWillReceive": "Der ausgewählte Sprecher erhält alle Stimmdaten und Ausschnitte der anderen.", + "time": "Mal", + "times": "Mal", + "totalSpeakers": "Sprecher gespeichert", + "used": "Verwendet", + "usedTimes": "Verwendet", + "viewSnippets": "Ausschnitte Anzeigen", + "voiceMatchSuggestions": "Stimmübereinstimmungs-Vorschläge", + "voiceProfile": "Stimmprofil" + }, + "status": { + "completed": "Abgeschlossen", + "failed": "Fehlgeschlagen", + "processing": "Verarbeitung", + "queued": "In Warteschlange", + "stuck": "Blockierte Verarbeitung zurücksetzen", + "summarizing": "Zusammenfassung", + "transcribing": "Transkribierung", + "uploading": "Upload" + }, + "summary": { + "actionItems": "Aktionspunkte", + "cancelEdit": "Bearbeitung abbrechen", + "decisions": "Entscheidungen", + "editSummary": "Zusammenfassung bearbeiten", + "generateSummary": "Zusammenfassung generieren", + "keyPoints": "Wichtige Punkte", + "noSummary": "Keine Zusammenfassung verfügbar", + "participants": "Teilnehmer", + "regenerateSummary": "Zusammenfassung neu generieren", + "saveSummary": "Zusammenfassung speichern", + "summaryFailed": "Generierung der Zusammenfassung fehlgeschlagen", + "summaryInProgress": "Zusammenfassung wird generiert...", + "title": "Zusammenfassung" + }, + "tagManagement": { + "asrDefaults": "ASR-Standards", + "createTag": "Tag Erstellen", + "customPrompt": "Benutzerdefinierter Prompt", + "description": "Organisieren Sie Ihre Aufnahmen mit benutzerdefinierten Tags. Jeder Tag kann seinen eigenen Zusammenfassungs-Prompt und Standard-ASR-Einstellungen haben.", + "maxSpeakers": "Max", + "minSpeakers": "Min", + "noTags": "Sie haben noch keine Tags erstellt." + }, + "tags": { + "addTag": "Tag hinzufügen", + "clearTagFilter": "Filter löschen", + "createTag": "Tag erstellen", + "currentTags": "Aktuelle Tags", + "filterByTag": "Nach Tag filtern", + "manageAllTags": "Alle Tags verwalten", + "noAvailableTags": "Keine verfügbaren Tags", + "noMatchingTags": "Keine passenden Tags", + "noTags": "Keine Tags", + "removeTag": "Tag entfernen", + "searchTags": "Suchen...", + "tagColor": "Tag-Farbe", + "tagName": "Tag-Name", + "title": "Tags" + }, + "tagsModal": { + "addTags": "Tags hinzufügen", + "currentTags": "Aktuelle Tags", + "done": "Fertig", + "noTagsAssigned": "Dieser Aufnahme sind keine Tags zugewiesen", + "searchTags": "Tags suchen..." + }, + "time": { + "dayAgo": "Vor 1 Tag", + "daysAgo": "Vor {{count}} Tagen", + "hourAgo": "Vor 1 Stunde", + "hoursAgo": "Vor {{count}} Stunden", + "justNow": "Gerade eben", + "minuteAgo": "Vor 1 Minute", + "minutesAgo": "Vor {{count}} Minuten", + "monthAgo": "Vor 1 Monat", + "monthsAgo": "Vor {{count}} Monaten", + "weekAgo": "Vor 1 Woche", + "weeksAgo": "Vor {{count}} Wochen", + "yearAgo": "Vor 1 Jahr", + "yearsAgo": "Vor {{count}} Jahren" + }, + "tooltips": { + "changeSpeaker": "Sprecher ändern", + "clearChat": "Chat leeren", + "copyTranscript": "Transkript kopieren", + "deleteTeam": "Gruppe Löschen", + "doubleClickToEdit": "Doppelklicken zum Bearbeiten", + "downloadTranscriptWithTemplate": "Transkript mit Vorlage herunterladen", + "editTeam": "Gruppe Bearbeiten", + "editText": "Text bearbeiten", + "editTitle": "Titel bearbeiten", + "editTranscript": "Transkript bearbeiten", + "exitFullscreen": "Exit fullscreen", + "expand": "Erweitern", + "followPlayerDisabled": "Automatisches Scrollen aktivieren - Transkript folgt der Audiowiedergabe", + "followPlayerEnabled": "Automatisches Scrollen deaktivieren - Transkript bleibt an Ort und Stelle", + "fullscreenVideo": "Fullscreen video", + "grantPublicSharing": "Öffentliche Freigabeberechtigung erteilen", + "hideVideo": "Hide video", + "highlight": "Hervorheben", + "makeAdmin": "Zum Admin Machen", + "manageMembers": "Mitglieder Verwalten", + "manageTeamTags": "Gruppen-Tags Verwalten", + "markAsRead": "Als gelesen markieren", + "maximizeChat": "Chat maximieren", + "minimize": "Minimieren", + "moveToInbox": "In Posteingang verschieben", + "mute": "Stumm", + "pause": "Pause", + "play": "Abspielen", + "playbackSpeed": "Wiedergabegeschwindigkeit", + "removeAdmin": "Admin Entfernen", + "removeFromQueue": "Aus Warteschlange entfernen", + "removeFromTeam": "Aus Team entfernen", + "removeHighlight": "Hervorhebung entfernen", + "reprocessTranscription": "Transkript neu verarbeiten", + "reprocessWithAsr": "Mit ASR neu verarbeiten", + "restoreChat": "Chat wiederherstellen", + "revokePublicSharing": "Öffentliche Freigabeberechtigung widerrufen", + "shareWithUsers": "Mit Benutzern teilen", + "showVideo": "Show video", + "switchToDarkMode": "Zum Dunkelmodus Wechseln", + "switchToLightMode": "Zum Hellmodus Wechseln", + "unmute": "Ton an" + }, + "transcriptTemplates": { + "availableTemplates": "Verfügbare Vorlagen", + "availableVars": "Verfügbare Variablen", + "cancel": "Abbrechen", + "chooseTemplate": "Vorlage wählen...", + "createDefaults": "Standardvorlagen Erstellen", + "createNew": "Vorlage Erstellen", + "default": "Standard", + "delete": "Löschen", + "description": "Anpassen, wie Transkripte für Download und Export formatiert werden.", + "downloadDefault": "Standard herunterladen", + "downloadWithoutTemplate": "Ohne Vorlage Herunterladen", + "filters": "Filter: |upper für Großbuchstaben, |srt für Untertitelformat", + "save": "Speichern", + "selectOrCreate": "Wählen Sie eine Vorlage zum Bearbeiten oder erstellen Sie eine neue", + "selectTemplate": "Vorlage Auswählen", + "setDefault": "Als Standardvorlage festlegen", + "tabTitle": "Transkript", + "template": "Vorlage", + "templateName": "Vorlagenname", + "title": "Transkript-Vorlagen", + "viewGuide": "Vorlagen-Leitfaden Anzeigen" + }, + "transcription": { + "autoIdentifySpeakers": "Sprecher automatisch identifizieren", + "bubble": "Blase", + "cancelEdit": "Bearbeitung abbrechen", + "copy": "Kopieren", + "copyToClipboard": "In Zwischenablage kopieren", + "download": "Herunterladen", + "downloadTranscript": "Transkript herunterladen", + "edit": "Bearbeiten", + "editSpeakers": "Sprecher bearbeiten", + "editTranscription": "Transkription bearbeiten", + "highlightSearchResults": "Suchergebnisse hervorheben", + "noTranscription": "Keine Transkription verfügbar", + "regenerateTranscription": "Transkription neu generieren", + "saveTranscription": "Transkription speichern", + "searchInTranscript": "In Transkript suchen...", + "simple": "Einfach", + "speaker": "Sprecher {{number}}", + "speakerLabels": "Sprecher-Labels", + "title": "Transkription", + "unknownSpeaker": "Unbekannter Sprecher" + }, + "upload": { + "chunking": "Große Dateien werden automatisch für die Verarbeitung aufgeteilt", + "completed": "Abgeschlossen", + "copies": "Kopien dieser Datei", + "dropzone": "Audio-Dateien hier hineinziehen oder klicken zum Durchsuchen", + "duplicateDetected": "Diese Datei scheint ein Duplikat von \"{{existingName}}\" zu sein (hochgeladen am {{existingDate}})", + "duplicateFile": "Doppelte Datei", + "failed": "Fehlgeschlagen", + "fileExceedsMaxSize": "File \"{{name}}\" exceeds the maximum size of {{size}} MB and was skipped.", + "fileRemovedFromQueue": "File removed from queue", + "filesToUpload": "Files to Upload", + "invalidFileType": "Invalid file type \"{{name}}\". Only audio files and video containers with audio (MP3, WAV, MP4, MOV, AVI, etc.) are accepted. File skipped.", + "maxFileSize": "Maximale Dateigröße", + "queued": "In Warteschlange", + "selectFiles": "Dateien auswählen", + "settingsApplyToAll": "Settings apply to all files in this session", + "summarizing": "Zusammenfasse...", + "supportedFormats": "Unterstützt MP3, WAV, M4A, MP4, MOV, AVI, AMR und mehr", + "title": "Audio hochladen", + "transcribing": "Transkribiere...", + "untitled": "Unbenannte Aufnahme", + "uploadNFiles": "Upload {{count}} File(s)", + "uploadProgress": "Upload-Fortschritt", + "videoRetained": "Video für Wiedergabe beibehalten", + "willAutoSummarize": "Wird nach der Transkription automatisch zusammengefasst" + }, + "uploadProgress": { + "title": "Upload-Fortschritt" + } +} \ No newline at end of file diff --git a/static/locales/en.json b/static/locales/en.json new file mode 100644 index 0000000..7b14490 --- /dev/null +++ b/static/locales/en.json @@ -0,0 +1,1506 @@ +{ + "aboutPage": { + "aiSummarization": "AI Summarization", + "aiSummarizationDesc": "OpenRouter and Ollama integration with custom prompts", + "asrEnabled": "ASR Enabled", + "asrEndpoint": "ASR Endpoint", + "audioTranscription": "Audio Transcription", + "audioTranscriptionDesc": "Whisper API and custom ASR support with high accuracy", + "backend": "Backend", + "database": "Database", + "deployment": "Deployment", + "dockerDescription": "Official Docker images", + "dockerHub": "Docker Hub", + "documentation": "Documentation", + "documentationDescription": "User guide and tutorials", + "endpoint": "Endpoint", + "frontend": "Frontend", + "githubDescription": "Source code, issues, and releases", + "githubRepository": "GitHub Repository", + "inquireMode": "Inquire Mode", + "inquireModeDesc": "Semantic search across all your recordings", + "interactiveChat": "Interactive Chat", + "interactiveChatDesc": "Chat with your transcriptions using AI", + "keyFeatures": "Key Features", + "largeLanguageModel": "Large Language Model", + "model": "Model", + "projectDescription": "Transform your audio recordings into organized, searchable notes with AI-powered transcription, summarization, and interactive chat features.", + "projectLinks": "Project Links", + "sharingExport": "Sharing & Export", + "sharingExportDesc": "Share recordings and export to various formats", + "speakerDiarization": "Speaker Diarization", + "speakerDiarizationDesc": "Identify and label different speakers automatically", + "speechRecognition": "Speech Recognition", + "systemConfiguration": "System Configuration", + "tagline": "AI-Powered Audio Transcription & Note-Taking", + "technologyStack": "Technology Stack", + "title": "About", + "version": "Version", + "whisperApi": "Whisper API" + }, + "aboutPageDetails": { + "aiSummarizationDesc": "OpenRouter and Ollama integration with custom prompts", + "asrEnabled": "ASR Enabled", + "asrEndpoint": "ASR Endpoint", + "audioTranscriptionDesc": "Whisper API and custom ASR support with high accuracy", + "backend": "Backend", + "database": "Database", + "deployment": "Deployment", + "dockerDescription": "Official Docker images", + "documentationDescription": "Setup guides and user manual", + "endpoint": "Endpoint", + "frontend": "Frontend", + "githubDescription": "Source code, issues, and releases", + "inquireModeDesc": "Semantic search across all your recordings", + "interactiveChatDesc": "Chat with your transcriptions using AI", + "model": "Model", + "no": "No", + "sharingExportDesc": "Share recordings and export to various formats", + "speakerDiarizationDesc": "Identify and label different speakers automatically", + "whisperApi": "Whisper API", + "yes": "Yes" + }, + "account": { + "accountActions": "Account Actions", + "autoLabel": "Auto-label", + "autoSummarizationDisabled": "Auto-summarization disabled by admin", + "autoSummarize": "Auto-summarize", + "changePassword": "Change Password", + "chooseLanguageForInterface": "Choose the language for the application interface", + "companyOrganization": "Company / Organization", + "completedRecordings": "Completed", + "defaultHotwords": "Default Hotwords", + "defaultHotwordsPlaceholder": "e.g., Speakr, CTranslate2, PyAnnote, SDRs", + "defaultInitialPrompt": "Default Initial Prompt", + "defaultInitialPromptPlaceholder": "e.g., This is a meeting about AI transcription tools. The speakers discuss CTranslate2, PyAnnote, and SDRs.", + "email": "Email", + "failedRecordings": "Failed", + "fullName": "Full Name", + "goToRecordings": "Go to Recordings", + "interfaceLanguage": "Interface Language", + "jobTitle": "Job Title", + "languageForSummaries": "Language for titles, summaries, and chat. Leave blank for default (default behavior of your chosen models).", + "languagePreferences": "Language Preferences", + "leaveBlankForAutoDetect": "Leave blank for auto-detection by transcription service", + "manageSpeakers": "Manage Speakers", + "personalFolder": "Personal Folder (Not Associated with a Group)", + "personalInfo": "Personal Information", + "personalTag": "Personal Tag (Not Associated with a Group)", + "preferredOutputLanguage": "Preferred Chatbot and Summarization Language", + "processingRecordings": "Processing", + "saveAllPreferences": "Save All Preferences", + "ssoLinkAccount": "Link {{provider}} account", + "ssoLinked": "Linked", + "ssoNotLinked": "Not linked", + "ssoProvider": "Provider", + "ssoSetPasswordFirst": "To unlink SSO, you must first set a password.", + "ssoSubject": "Subject:", + "ssoUnlinkAccount": "Unlink {{provider}} account", + "ssoUnlinkConfirm": "Are you sure you want to unlink your SSO account? You will need to use your password to log in.", + "statistics": "Account Statistics", + "title": "Account Information", + "totalRecordings": "Total Recordings", + "transcriptionHints": "Transcription Hints", + "transcriptionHintsDesc": "These defaults are used when no tag or folder overrides are set. They help improve transcription accuracy for your specific use case.", + "transcriptionLanguage": "Transcription Language", + "userDetails": "User Details", + "username": "Username" + }, + "accountTabs": { + "about": "About", + "apiTokens": "API Tokens", + "customPrompts": "Custom Prompts", + "folderManagement": "Folder Management", + "help": "Help", + "namingTemplates": "Naming", + "promptOptions": "Prompt Options", + "sharedTranscripts": "Shared Transcripts", + "speakersManagement": "Speakers Management", + "tagManagement": "Tag Management", + "templates": "Templates", + "transcriptTemplates": "Transcript Templates" + }, + "admin": { + "title": "Admin", + "userMenu": "User Menu" + }, + "adminDashboard": { + "aboutInquireMode": "About Inquire Mode", + "actions": "ACTIONS", + "addNewUser": "Add New User", + "addUser": "Add User", + "additionalContext": "Additional Context", + "admin": "ADMIN", + "adminDefaultPrompt": "Admin Default Prompt", + "adminDefaultPromptDesc": "The prompt configured above (shown on this page)", + "adminUser": "Admin User", + "allRecordingsProcessed": "All recordings are processed!", + "allowed": "Allowed", + "available": "Available", + "blocked": "blocked", + "budgetWarnings": "Budget Warnings", + "characters": "characters", + "chunkSize": "Chunk Size", + "complete": "complete", + "completedRecordings": "Completed", + "confirmPasswordLabel": "Confirm Password", + "contextNotes": { + "jsonConversion": "JSON transcripts are converted to clean text format before sending", + "modelConfig": "The model used is configured via TEXT_MODEL_NAME environment variable", + "tagPrompts": "If multiple tag prompts exist, they are merged in the order tags were added", + "transcriptLimit": "Transcripts are limited to a configurable character count (default: 30,000)" + }, + "createFirstGroup": "Create Your First Group", + "created": "Created", + "currentUsage": "Current usage", + "currentUsageMinutes": "Current Usage", + "defaultPromptInfo": "This default prompt will be used for all users who haven't set their own custom prompt in their account settings.", + "defaultPrompts": "Default Prompts", + "defaultSummarizationPrompt": "Default Summarization Prompt", + "description": "Description", + "editUser": "Edit User", + "email": "EMAIL", + "emailLabel": "Email", + "embeddingModel": "Embedding Model", + "embeddingsStatus": "Embeddings Status", + "errors": { + "failedToLoadPrompt": "Failed to load default prompt", + "failedToSavePrompt": "Failed to save default prompt. Please try again.", + "invalidFileSize": "Please enter a valid size between 1 and 10000 MB", + "invalidInteger": "Please enter a valid integer", + "invalidNumber": "Please enter a valid number", + "maxTimeout": "Timeout cannot exceed 10 hours (36000 seconds)", + "minCharacters": "Please enter a valid number of at least 1000 characters", + "minTimeout": "Timeout must be at least 60 seconds" + }, + "failedRecordings": "Failed", + "groupName": "Group Name", + "groupsTab": "Groups", + "id": "ID", + "inquireModeDescription": "Inquire Mode allows users to search across multiple transcriptions using natural language questions. It works by breaking transcriptions into chunks and creating searchable embeddings using AI models.", + "languagePreferenceNote": "Note: If the user has set an output language preference, \" Ensure your response is in {language}.\" will be added.", + "lastUpdated": "Last updated", + "maxFileSizeHelp": "Maximum file size in megabytes (1-10000 MB)", + "megabytes": "MB", + "members": "Members", + "membersCount": "members", + "minutes": "minutes", + "monthlyCost": "Monthly Cost", + "monthlyTokenBudget": "Monthly Token Budget", + "monthlyTranscriptionBudget": "Monthly Transcription Budget (minutes)", + "needProcessing": "Need Processing", + "never": "Never", + "newPasswordLabel": "New Password (leave blank to keep current)", + "no": "No", + "noData": "No data", + "noDescription": "No description", + "noDescriptionAvailable": "No description available", + "noGroupsAdmin": "You are not an admin of any groups yet", + "noGroupsCreated": "No groups created yet", + "noLimit": "No Limit", + "noMembersYet": "No members yet", + "noTranscriptionData": "No transcription usage data available", + "none": "None", + "notSet": "Not set", + "overlap": "Overlap", + "passwordLabel": "Password", + "passwordsDoNotMatch": "Passwords do not match", + "pendingRecordings": "Pending", + "percentUsed": "used", + "placeholdersNote": "Placeholders are replaced with actual values when processing a recording.", + "processAllRecordings": "Process All Recordings", + "processNext10": "Process Next 10", + "processedForInquire": "Processed for Inquire", + "processing": "Processing...", + "processingActions": "Processing Actions", + "processingProgress": "Processing Progress", + "processingRecordings": "Processing", + "promptDescription": "This prompt will be used to generate summaries for all recordings when users haven't set their own prompt.", + "promptHierarchy": "Prompt Hierarchy", + "promptPriorityDescription": "The system uses the following priority order when selecting which prompt to use:", + "promptResetMessage": "Prompt reset to system default. Click \"Save Changes\" to apply.", + "promptSavedSuccessfully": "Default prompt saved successfully!", + "publicShare": "Public Share", + "recordingStatusDistribution": "Recording Status Distribution", + "recordings": "RECORDINGS", + "recordingsNeedProcessing": "There are {{count}} recordings that need to be processed for Inquire Mode.", + "refreshStatus": "Refresh Status", + "resetToDefault": "Reset to Default", + "saving": "Saving...", + "searchUsers": "Search users...", + "seconds": "seconds", + "settings": { + "asrTimeoutDesc": "Maximum time in seconds to wait for ASR transcription to complete. Default is 1800 seconds (30 minutes).", + "defaultSummaryPromptDesc": "Default summarization prompt used when users have not set their own prompt. This serves as the base prompt for all users.", + "maxFileSizeDesc": "Maximum file size allowed for audio uploads in megabytes (MB).", + "recordingDisclaimerDesc": "Legal disclaimer shown to users before recording starts. Supports Markdown formatting. Leave empty to disable.", + "uploadDisclaimerDesc": "Legal disclaimer shown before file uploads. Supports Markdown. Leave empty to disable.", + "customBannerDesc": "Custom banner shown at the top of the page. Supports Markdown. Leave empty to disable.", + "transcriptLengthLimitDesc": "Maximum number of characters to send from transcript to LLM for summarization and chat. Use -1 for no limit." + }, + "storageUsed": "STORAGE USED", + "summarizationInstructions": "Summarization Instructions", + "systemFallback": "System Fallback", + "systemFallbackDesc": "A hardcoded default if none of the above are set", + "systemPrompt": "System Prompt", + "systemSettings": "System Settings", + "systemStatistics": "System Statistics", + "tagCustomPrompt": "Tag Custom Prompt", + "tagCustomPromptDesc": "If a recording has tags with custom prompts", + "textSearchOnly": "Text Search Only", + "thisMonth": "This Month", + "timeoutRecommendation": "Recommended: 30-120 minutes for long audio files", + "title": "Admin Dashboard", + "todaysMinutes": "Today's Minutes", + "tokenBudgetExceeded": "Monthly token budget exceeded. Please contact your administrator.", + "tokenBudgetHelp": "Set a monthly token limit for AI features. Leave empty for unlimited.", + "tokenBudgetPlaceholder": "Leave empty for unlimited", + "tokenUsage": "Token usage", + "tokens": "tokens", + "topUsers": "Top Users", + "topUsersByStorage": "Top Users by Storage", + "total": "Total", + "totalChunks": "Total Chunks", + "totalQueries": "Total Queries", + "totalRecordings": "Total Recordings", + "totalStorage": "Total Storage", + "totalUsers": "Total Users", + "transcriptionBudgetHelp": "Limit transcription minutes per month. Leave empty for unlimited.", + "transcriptionBudgetPlaceholder": "Leave empty for unlimited", + "transcriptionUsage": "Transcription Usage", + "updateUser": "Update User", + "userCustomPrompt": "User Custom Prompt", + "userCustomPromptDesc": "If the user has set their own prompt in account settings", + "userManagement": "User Management", + "userMessageTemplate": "User Message Template", + "userTranscriptionUsage": "User Transcription Usage (This Month)", + "username": "USERNAME", + "usernameLabel": "Username", + "vectorDimensions": "Vector Dimensions", + "vectorStore": "Vector Store", + "vectorStoreManagement": "Vector Store Management", + "vectorStoreUpToDate": "The vector store is up to date.", + "viewFullPromptStructure": "View Full LLM Prompt Structure", + "warning": "warning", + "yes": "Yes" + }, + "apiTokens": { + "activeTokens": "Active Tokens", + "createFirstToken": "Create your first API token to enable programmatic access", + "createToken": "Create Token", + "created": "Created", + "description": "Create and manage API tokens for programmatic access to your account", + "expires": "Expires", + "lastUsed": "Last used", + "neverUsed": "Never used", + "noExpiration": "No expiration", + "noTokens": "No API Tokens", + "securityNotice": "Security Notice", + "securityWarning": "Treat API tokens like passwords. They provide full access to your account. Never share tokens in publicly accessible areas such as GitHub, client-side code, or logs", + "title": "API Tokens", + "usageExamples": "Usage Examples" + }, + "buttons": { + "addSegment": "Add Segment", + "addSpeaker": "Add Speaker", + "cancel": "Cancel", + "clearAllFilters": "Clear all filters", + "clearCompleted": "Clear completed uploads", + "clearSearchText": "Clear search text", + "close": "Close", + "copy": "Copy", + "copyMessage": "Copy message", + "copyNotes": "Copy notes", + "copySummary": "Copy summary", + "copyToClipboard": "Copy to clipboard", + "createTag": "Create Tag", + "deleteAll": "Delete All", + "deleteSpeaker": "Delete speaker", + "deleteTag": "Delete tag", + "deleteUser": "Delete User", + "downloadAsWord": "Download as Word", + "downloadAudio": "Download audio", + "downloadChat": "Download chat as Word document", + "downloadNotes": "Download Notes as Word Document", + "downloadSummary": "Download Summary as Word Document", + "editNotes": "Edit notes", + "editSetting": "Edit Setting", + "editSpeakers": "Edit Speakers...", + "editSummary": "Edit summary", + "editTag": "Edit tag", + "editTags": "Edit Tags", + "editTranscription": "Edit transcription", + "editUser": "Edit User", + "exportCalendar": "Export to Calendar", + "help": "Help", + "identifySpeakers": "Identify speakers", + "next": "Next", + "previous": "Previous", + "refresh": "Refresh", + "reprocessSummary": "Reprocess summary", + "reprocessTranscription": "Reprocess transcription", + "reprocessWithAsr": "Reprocess with ASR", + "resetStuckProcessing": "Reset stuck processing", + "saveChanges": "Save Changes", + "saveCustomPrompt": "Save Custom Prompt", + "saveNames": "Save Names", + "saveSettings": "Save Settings", + "shareRecording": "Share recording", + "toggleTheme": "Toggle theme", + "updateTag": "Update Tag" + }, + "changePasswordModal": { + "confirmPassword": "Confirm New Password", + "currentPassword": "Current Password", + "newPassword": "New Password", + "passwordRequirement": "Password must be at least 8 characters long", + "title": "Change Password" + }, + "chat": { + "availableAfterTranscription": "Chat will be available once transcription is complete", + "cannotChatTranscriptionFailed": "Cannot chat: transcription failed. Please reprocess the transcription first.", + "chatWithTranscription": "Chat with Transcription", + "clearChat": "Clear Chat", + "cleared": "Chat cleared", + "downloadFailed": "Failed to download chat", + "downloadSuccess": "Chat downloaded successfully!", + "error": "Failed to send message", + "noMessages": "No messages yet", + "noMessagesToDownload": "No chat messages to download.", + "placeholder": "Ask a question about this recording...", + "placeholderWithHint": "Ask a question about this recording... (Enter to send, Ctrl+Enter for new line)", + "send": "Send", + "suggestedQuestions": "Suggested Questions", + "thinking": "Thinking...", + "title": "Chat", + "whatAreActionItems": "What are the action items?", + "whatAreKeyPoints": "What are the key points?", + "whatWasDiscussed": "What was discussed?", + "whoSaidWhat": "Who said what?" + }, + "colorScheme": { + "chooseRecording": "Choose a recording from the sidebar to view its transcription and summary", + "darkThemes": "Dark Themes", + "descriptions": { + "blue": "Classic blue theme with a clean, professional feel", + "emerald": "Nature-inspired green theme for a calming experience", + "purple": "Rich purple theme with an elegant, modern look", + "rose": "Warm rose theme with a soft, inviting aesthetic", + "amber": "Warm amber tones for a cozy, productive feel", + "teal": "Cool teal theme with a refreshing, modern vibe" + }, + "lightThemes": "Light Themes", + "names": { + "blue": "Ocean Blue", + "emerald": "Forest Green", + "purple": "Royal Purple", + "rose": "Coral Rose", + "amber": "Golden Amber", + "teal": "Arctic Teal" + }, + "resetToDefault": "Reset to Default", + "selectRecording": "Select a Recording", + "subtitle": "Customize your interface with beautiful color themes", + "themes": { + "light": { + "blue": { + "name": "Ocean Blue", + "description": "Classic blue theme with professional appeal" + }, + "emerald": { + "name": "Forest Emerald", + "description": "Fresh green theme for a natural feel" + }, + "purple": { + "name": "Royal Purple", + "description": "Elegant purple theme with sophistication" + }, + "rose": { + "name": "Sunset Rose", + "description": "Warm pink theme with gentle energy" + }, + "amber": { + "name": "Golden Amber", + "description": "Warm yellow theme for brightness" + }, + "teal": { + "name": "Ocean Teal", + "description": "Cool teal theme for tranquility" + } + }, + "dark": { + "blue": { + "name": "Midnight Blue", + "description": "Deep blue theme for focused work" + }, + "emerald": { + "name": "Dark Forest", + "description": "Rich green theme for comfortable viewing" + }, + "purple": { + "name": "Deep Purple", + "description": "Mysterious purple theme for creativity" + }, + "rose": { + "name": "Dark Rose", + "description": "Muted pink theme with subtle warmth" + }, + "amber": { + "name": "Dark Amber", + "description": "Warm brown theme for cozy sessions" + }, + "teal": { + "name": "Deep Teal", + "description": "Dark teal theme for calm focus" + } + } + }, + "title": "Choose Color Scheme" + }, + "common": { + "back": "Back", + "cancel": "Cancel", + "changesSaved": "Changes saved", + "close": "Close", + "confirm": "Confirm", + "delete": "Delete", + "deselectAll": "Deselect All", + "download": "Download", + "edit": "Edit", + "error": "Error", + "failed": "Failed", + "filter": "Filter", + "info": "Info", + "loading": "Loading...", + "new": "New", + "next": "Next", + "no": "No", + "noResults": "No results found", + "ok": "OK", + "or": "Or", + "previous": "Previous", + "processing": "Processing...", + "refresh": "Refresh", + "retry": "Retry", + "save": "Save", + "search": "Search", + "selectAll": "Select All", + "sort": "Sort", + "success": "Success", + "untitled": "Untitled", + "upload": "Upload", + "warning": "Warning", + "yes": "Yes" + }, + "customPrompts": { + "currentDefaultPrompt": "Current Default Prompt (Used if you leave the above blank)", + "promptDescription": "This prompt will be used to generate summaries for your transcriptions. It overrides the admin's default prompt.", + "promptPlaceholder": "Describe how you want your summaries structured. Leave blank to use the admin's default prompt.", + "summaryGeneration": "Summary Generation Prompt", + "tip1": "Be specific about the sections you want in your summary", + "tip2": "Use clear formatting instructions (e.g., \"Use bullet points\", \"Create numbered lists\")", + "tip3": "Specify if you want certain information prioritized", + "tip4": "The system will automatically provide the transcript content to the AI", + "tip5": "Your output language preference (if set) will be applied automatically", + "tipsTitle": "Tips for Writing Effective Prompts", + "yourCustomPrompt": "Your Custom Summary Prompt" + }, + "deleteAllSpeakersModal": { + "confirmMessage": "Are you sure you want to delete all saved speakers? This action cannot be undone.", + "title": "Delete All Speakers" + }, + "dialogs": { + "deleteRecording": { + "cancel": "Cancel", + "confirm": "Delete", + "message": "Are you sure you want to delete this recording? This action cannot be undone.", + "title": "Delete Recording" + }, + "deleteShare": { + "message": "Are you sure you want to delete this share? This will revoke access to the public link.", + "title": "Delete Share" + }, + "reprocessTranscription": { + "cancel": "Cancel", + "confirm": "Reprocess", + "message": "Are you sure you want to reprocess this transcription? The current transcription will be replaced.", + "title": "Reprocess Transcription" + }, + "unsavedChanges": { + "cancel": "Cancel", + "discard": "Discard", + "message": "You have unsaved changes. Do you want to save them before leaving?", + "save": "Save", + "title": "Unsaved Changes" + } + }, + "duration": { + "hours": "{{count}} hour", + "hoursPlural": "{{count}} hours", + "minutes": "{{count}} minute", + "minutesPlural": "{{count}} minutes", + "seconds": "{{count}} second", + "secondsPlural": "{{count}} seconds" + }, + "editTagModal": { + "asrDefaultSettings": "ASR Default Settings", + "asrSettingsDescription": "These settings will be applied by default when using this tag with ASR transcription", + "color": "Color", + "colorDescription": "Choose a color for easy identification", + "createTitle": "Create Tag", + "customPrompt": "Custom Summary Prompt", + "customPromptPlaceholder": "Optional: Custom prompt for generating summaries for recordings with this tag", + "defaultLanguage": "Default Language", + "defaultPromptPlaceholder": "Leer lassen, um Ihren Standard-Zusammenfassungs-Prompt zu verwenden", + "exportTemplate": "Export Template", + "exportTemplateHint": "Select an export template to use when exporting recordings with this tag", + "leaveBlankPrompt": "Leave blank to use your default summary prompt", + "maxSpeakers": "Max Speakers", + "minSpeakers": "Min Speakers", + "namingTemplate": "Naming Template", + "namingTemplateHint": "Select a naming template to automatically format titles for recordings with this tag", + "noExportTemplate": "No template (use user default)", + "noNamingTemplate": "No template (use user default or AI title)", + "tagName": "Tag Name *", + "tagNamePlaceholder": "e.g., Meetings, Interviews", + "title": "Edit Tag" + }, + "errors": { + "audioExtractionFailed": "Audio Extraction Failed", + "audioExtractionFailedGuidance": "Try converting the file to a standard audio format (MP3, WAV) before uploading.", + "audioExtractionFailedMessage": "Could not extract audio from the uploaded file.", + "audioRecordingFailed": "音频录制失败。请检查您的麦克风。", + "authenticationError": "Authentication Error", + "authenticationErrorGuidance": "Please check that the API key is correct and has not expired.", + "authenticationErrorMessage": "The transcription service rejected the API credentials.", + "checkApiKeyGuidance": "Check the API key in settings", + "checkNetworkGuidance": "Check network connection", + "connectionError": "Connection Error", + "connectionErrorGuidance": "Check your internet connection and ensure the service is available.", + "connectionErrorMessage": "Could not connect to the transcription service.", + "convertFormatGuidance": "Convert to MP3 or WAV before uploading", + "convertStandardGuidance": "Convert to standard audio format", + "enableChunkingGuidance": "Enable chunking in settings or compress the file", + "fallbackMessage": "An error occurred", + "fallbackTitle": "Error", + "fileTooLarge": "文件太大", + "fileTooLargeGuidance": "Try enabling audio chunking in your settings, or compress the audio file before uploading.", + "fileTooLargeMaxSize": "File too large. Max: {{size}} MB.", + "fileTooLargeMessage": "The audio file exceeds the maximum size allowed by the transcription service.", + "fileTooLargeTitle": "File Too Large", + "generic": "发生错误", + "invalidAudioFormat": "Invalid Audio Format", + "invalidAudioFormatGuidance": "Try converting the audio to MP3 or WAV format before uploading.", + "invalidAudioFormatMessage": "The audio file format is not supported or the file may be corrupted.", + "loadingShares": "Error loading shares", + "networkError": "网络错误。请检查您的连接。", + "networkErrorDuringUpload": "Network error during upload", + "notFound": "未找到", + "permissionDenied": "权限被拒绝", + "processingError": "Processing Error", + "processingErrorFallbackGuidance": "Try reprocessing the recording", + "processingErrorGuidance": "If this error persists, try reprocessing the recording.", + "processingErrorMessage": "An error occurred during processing.", + "processingFailedOnServer": "Processing failed on server.", + "processingFailedWithStatus": "Processing failed with status {{status}}", + "processingTimeout": "Processing Timeout", + "processingTimeoutGuidance": "This can happen with very long recordings. Try splitting the audio into smaller parts.", + "processingTimeoutMessage": "The transcription took too long to complete.", + "quotaExceeded": "存储配额已超出", + "rateLimitExceeded": "Rate Limit Exceeded", + "rateLimitExceededGuidance": "Please wait a few minutes and try reprocessing.", + "rateLimitExceededMessage": "Too many requests were sent to the transcription service.", + "serverError": "Server error ({{status}}): Response was not JSON", + "serverErrorStatus": "Server error ({{status}})", + "serviceUnavailable": "Service Unavailable", + "serviceUnavailableGuidance": "This is usually temporary. Please try again in a few minutes.", + "serviceUnavailableMessage": "The transcription service is temporarily unavailable.", + "splitAudioGuidance": "Try splitting the audio into smaller parts", + "summaryFailed": "摘要生成失败。请重试。", + "transcriptionFailed": "转录失败。请重试。", + "tryAgainLaterGuidance": "Try again in a few minutes", + "unauthorized": "未授权", + "unexpectedResponse": "Unexpected success response from server after upload.", + "unsupportedFormat": "不支持的文件格式", + "uploadFailed": "上传失败。请重试。", + "uploadFailedWithStatus": "Upload failed with status {{status}}", + "uploadTimedOut": "Upload timed out", + "validationError": "验证错误", + "waitAndRetryGuidance": "Wait a few minutes and try again" + }, + "eventExtraction": { + "description": "When enabled, the AI will identify meetings, appointments, and deadlines mentioned in your recordings and create downloadable calendar events.", + "enableLabel": "Enable automatic event extraction from transcripts", + "info": "Extracted events will appear in an 'Events' tab on recordings where calendar items are detected.", + "title": "Event Extraction" + }, + "events": { + "add": "Add", + "addToCalendar": "Add to Calendar", + "attendees": "Attendees", + "confirmDelete": "Delete event \"{title}\"?", + "delete": "Delete", + "deleteFailed": "Failed to delete event", + "deleted": "Event deleted", + "end": "End", + "location": "Location", + "noEvents": "No events detected in this recording", + "start": "Start", + "title": "Events" + }, + "exportLabels": { + "created": "Created", + "date": "Date", + "fileSize": "File Size", + "footer": "Generated with [DictIA](https://gitea.innova-ai.ca/Innova-AI/dictia)", + "metadata": "Metadata", + "notes": "Notes", + "originalFile": "Original File", + "participants": "Participants", + "summarizationTime": "Summarization Time", + "summary": "Summary", + "tags": "Tags", + "transcription": "Transcription", + "transcriptionTime": "Transcription Time" + }, + "exportTemplates": { + "availableLabels": "Localized Labels (auto-translated)", + "availableTemplates": "Available Templates", + "availableVars": "Available Variables", + "cancel": "Cancel", + "conditionals": "Conditionals", + "conditionalsHint": "Use {{#if variable}}...{{/if}} to conditionally include content", + "contentSections": "Content Sections", + "createDefaults": "Create Default Template", + "createNew": "Create Template", + "default": "Default", + "delete": "Delete", + "description": "Customize how recordings are exported to markdown files.", + "recordingData": "Recording Data", + "save": "Save", + "selectOrCreate": "Select a template to edit or create a new one", + "setDefault": "Set as default template", + "tabTitle": "Export", + "template": "Template", + "templateDescription": "Description", + "templateName": "Template Name", + "title": "Export Templates", + "viewGuide": "View Template Guide" + }, + "fileSize": { + "bytes": "{{count}} B", + "gigabytes": "{{count}} GB", + "kilobytes": "{{count}} KB", + "megabytes": "{{count}} MB" + }, + "folderManagement": { + "allFolders": "All Folders", + "asrDefaults": "ASR Defaults", + "autoShareOnApply": "Auto-share with group members", + "autoShareOnApplyHelp": "Auto-share recordings with all group members when added to this folder", + "confirmDelete": "Are you sure you want to delete this folder? Recordings will be removed from this folder but not deleted.", + "createFolder": "Create Folder", + "customPrompt": "Custom Prompt", + "defaultLanguage": "Default Language", + "deleteFolder": "Delete Folder", + "description": "Organize your recordings into folders. Unlike tags, a recording can only belong to one folder. Folder prompts are applied before user prompts but after tag prompts.", + "editFolder": "Edit Folder", + "filterByFolder": "Filter by Folder", + "folderColor": "Folder Color", + "folderName": "Folder Name", + "groupSettings": "Group Settings", + "maxSpeakers": "Max Speakers", + "minSpeakers": "Min Speakers", + "moveToFolder": "Move to Folder", + "namingTemplate": "Naming Template", + "noFolder": "No Folder", + "noFolders": "No folders created yet", + "noFoldersDescription": "Create your first folder to organize your recordings", + "protectFromDeletion": "Protect from Deletion", + "protectFromDeletionHelp": "Protect recordings in this folder from auto-deletion", + "recordings": "recordings", + "removeFromFolder": "Remove from folder", + "retentionDays": "Retention Days", + "retentionDaysHelp": "Recordings in this folder will be deleted after this many days. Leave empty to use global retention.", + "retentionSettings": "Retention Settings", + "retentionDisabledWarning": "Auto-deletion is currently disabled. These settings will take effect when enabled by an admin.", + "selectNamingTemplate": "Select naming template...", + "shareWithGroupLead": "Share with group admins", + "shareWithGroupLeadHelp": "Share recordings with group admins when added to this folder", + "title": "Folder Management" + }, + "form": { + "auto": "Auto", + "autoDetect": "Auto-detect", + "dateFrom": "From", + "dateTo": "To", + "enterNotesMarkdown": "Enter notes in Markdown format...", + "enterSummaryMarkdown": "Enter summary in Markdown format...", + "folder": "Folder", + "hotwords": "Hotwords", + "hotwordsHelp": "Comma-separated words to improve recognition of domain-specific terms", + "hotwordsPlaceholder": "e.g., Speakr, CTranslate2, PyAnnote", + "initialPrompt": "Initial Prompt", + "initialPromptHelp": "Context to steer the transcription model's style and vocabulary", + "initialPromptPlaceholder": "e.g., This is a meeting about AI transcription tools.", + "language": "Language", + "maxSpeakers": "Max Speakers", + "meetingDate": "Meeting Date", + "minSpeakers": "Min Speakers", + "minutes": "Minutes", + "notes": "Notes", + "notesPlaceholder": "Type your notes in Markdown format...", + "optional": "Optional", + "participantNamePlaceholder": "Participant name...", + "participants": "Participants", + "placeholderAuto": "Auto", + "placeholderCharacterLimit": "Enter character limit (e.g., 30000)", + "placeholderMinutes": "Minutes", + "placeholderOptional": "Optional", + "placeholderSeconds": "Seconds", + "placeholderSizeMB": "Enter size in MB", + "searchSpeakers": "Search speakers...", + "searchTags": "Search tags...", + "seconds": "Seconds", + "shareNotes": "Share Notes", + "shareSummary": "Share Summary", + "shareableLink": "Shareable Link", + "summaryPromptPlaceholder": "Enter the default summarization prompt...", + "title": "Title", + "transcriptionLanguage": "Transcription Language", + "yourFullName": "Your full name" + }, + "groups": { + "addMembers": "Add members...", + "autoShare": "Auto-share", + "autoShareNote": "Note: If both are enabled, all team members will have access. If only \"team admins\" is enabled, only group leads will have access.", + "autoShareTeam": "Auto-share recordings with all team members when this tag is applied", + "autoSharesWithTeam": "Auto-shares with all team members", + "confirmDelete": "Are you sure you want to delete this group? This action cannot be undone.", + "createTeam": "Create Group", + "createTeamTag": "Create New Group Tag", + "dayRetention": "day retention", + "deleteTeam": "Delete Group", + "deletionExempt": "Exempt from deletion", + "deletionExemptHelp": "Recordings with this tag will be exempt from automatic deletion, even if they exceed the retention period.", + "editTeam": "Edit Group", + "editTeamTag": "Edit Group Tag", + "globalRetention": "Global retention", + "members": "Members", + "noMembers": "No members in this group", + "noTeamTags": "No group tags created yet", + "noTeams": "No teams created yet", + "retentionHelp": "Recordings with this tag will be deleted after this many days. Leave empty to use global retention ({{days}} days).", + "retentionPeriod": "Retention Period (days)", + "retentionPlaceholder": "Leave empty to use global retention", + "searchUsers": "Search users...", + "selectTeamLead": "Select group lead...", + "shareWithAdmins": "Share recordings with team admins when this tag is applied", + "sharesWithAdminsOnly": "Shares with team admins only", + "syncComplete": "Group shares synchronized successfully", + "syncTeamShares": "Sync Group Shares", + "syncTeamSharesDescription": "This will retroactively share all recordings that have group tags with the appropriate group members based on the tag's sharing settings.", + "teamLead": "Group Lead", + "teamName": "Group Name", + "teamNamePlaceholder": "Enter group name", + "teamTags": "Group Tags", + "title": "Group Management", + "updateTeam": "Update Group" + }, + "help": { + "actions": "Actions", + "activeFilters": "Active filters", + "addSegmentBelow": "Add segment below", + "advancedAsrOptions": "Advanced ASR Options", + "allRecordingsLoaded": "All recordings loaded", + "allTagsSelected": "All tags selected", + "appliedSuggestedNames": "Applied {{count}} suggested name", + "appliedSuggestedNamesPlural": "Applied {{count}} suggested names", + "applySuggested": "Apply Suggested", + "applySuggestedMobile": "Suggest", + "approachingLimit": "Approaching {{limit}}MB limit", + "askAboutTranscription": "Ask questions about this transcription", + "audioDeletedDescription": "The audio file for this recording has been deleted, but the transcription remains available.", + "audioDeletedMessage": "Audio file has been archived and is no longer available for playback.", + "audioDeletedTitle": "Audio file deleted", + "audioPlayer": "Audio Player", + "autoIdentify": "Auto Identify", + "autoIdentifyMobile": "Auto", + "bothAudioDesc": "Records your voice + meeting participants (recommended for online meetings)", + "clearFilters": "clear filters", + "clickToAddNotes": "Click to add notes...", + "colorRepeats": "Color repeats from speaker {{number}}", + "completedFiles": "Completed Files", + "confirmReprocessingTitle": "Confirm Reprocessing", + "copyMessage": "Copy message", + "createFolders": "Create folders", + "createPublicLink": "Create a public link to share this recording. Sharing is only available on secure (HTTPS) connections.", + "createTags": "Create tags", + "defaultHotwordsHelp": "Comma-separated words or phrases that the transcription model should prioritize recognizing (brand names, acronyms, technical terms).", + "defaultInitialPromptHelp": "Context to steer the transcription model's style and vocabulary. Describe the topic or expected content of your recordings.", + "deleteSegment": "Delete segment", + "discard": "Discard", + "dragToReorder": "Drag to reorder", + "endTime": "End", + "enterNameFor": "Enter name for", + "enterSpeakerName": "Enter speaker name...", + "entireScreen": "Entire Screen", + "errorChangingSpeaker": "Error changing speaker", + "errorOpeningTextEditor": "Error opening text editor", + "errorSavingText": "Error saving text", + "estimatedSize": "Estimated size", + "firstTagAsrSettings": "First tag's ASR settings will be applied:", + "firstTagDefaultsApplied": "First tag's defaults applied", + "folderHasCustomPrompt": "This folder has a custom summary prompt", + "generatingSummary": "Generating summary...", + "groups": "groups", + "howToRecordSystemAudio": "How to Record System Audio", + "identifyAllSpeakers": "Identify all speakers", + "identifying": "Identifying...", + "importantNote": "Important note", + "internalSharingDesc": "Share with specific users in your organization", + "lines": "{{count}} lines", + "loadingMore": "Loading more recordings...", + "loadingRecordings": "Loading recordings...", + "me": "Me", + "microphoneDesc": "Records your voice only", + "modelReasoning": "Model Reasoning", + "moreSpeakersThanColors": "More speakers than available colors", + "navigate": "Navigate", + "noDateSet": "No date set", + "noMatchingTags": "No matching tags", + "noParticipants": "No participants", + "noRecordingSelected": "No recording selected.", + "noSpeakersIdentified": "No speakers could be identified from the context.", + "noSuggestionsToApply": "No suggestions to apply", + "noTagsCreated": "No tags created yet.", + "of": "of", + "playFromHere": "Play from here", + "pleaseEnterSpeakerName": "Please enter a speaker name", + "processingTime": "Processing time", + "processingTimeDescription": "This may take a few minutes to complete. You can continue using the app while processing.", + "processingTranscription": "Processing transcription...", + "publicLinkDesc": "Anyone with this link can access the recording", + "recordSystemSteps1": "Click \"Record System Audio\" or \"Record Both\".", + "recordSystemSteps2": "In the popup, choose", + "recordSystemSteps3": "Make sure to check the box that says", + "recordingFinished": "Recording finished", + "recordingInProgress": "Recording in progress...", + "regenerateSummaryAfterNames": "Regenerate summary after updating names", + "saved": "Saved!", + "savingProgress": "Saving...", + "selectedTagsCustomPrompts": "Selected tags include custom summary prompts", + "sentence": "Sentence", + "shareSystemAudio": "Share system audio", + "shareTabAudio": "Share tab audio", + "sharedOn": "Shared on", + "sharingWindowNoAudio": "Sharing a \"Window\" will not capture audio.", + "speakerAdded": "Speaker added successfully", + "speakerCount": "Speaker", + "speakerName": "Speaker Name", + "speakerNamesUpdated": "Speaker names updated successfully!", + "speakers": "Speakers", + "speakersIdentified": "{{count}} speaker identified successfully!", + "speakersIdentifiedPlural": "{{count}} speakers identified successfully!", + "speakersUpdatedSaveToApply": "Speakers updated! Save the transcript to apply changes.", + "specificBrowserTab": "specific browser tab", + "startTime": "Start", + "startingAutoIdentification": "Starting automatic speaker identification...", + "summaryGenerationFailed": "Summary generation failed", + "summaryGenerationTimedOut": "Summary generation timed out", + "summaryRegenerationStarted": "Summary regeneration started", + "summaryUpdated": "Summary updated!", + "systemAudioDesc": "Records meeting participants and system sounds", + "tagManagement": "Tag Management", + "thisActionCannotBeUndone": "This action cannot be undone.", + "toCaptureAudioFromMeetings": "To capture audio from meetings or other apps, you must share your screen or a browser tab.", + "toOrganizeRecordings": "to organize your recordings", + "transcriptUpdated": "Transcript updated successfully!", + "troubleshooting": "Troubleshooting", + "tryAdjustingSearch": "Try adjusting your search or", + "unsupportedBrowser": "Unsupported Browser", + "untitled": "Untitled Recording", + "uploadRecordingNotes": "Upload Recording & Notes", + "whatWillHappen": "What will happen?", + "whyNotWorking": "Why isn't it working?", + "youHaveXSpeakers": "You have {{count}} speakers, but only 16 unique colors are available. Colors will repeat after the 16th speaker." + }, + "incognito": { + "audioNotStored": "Audio not stored in incognito mode", + "discardConfirm": "This will permanently discard your incognito recording. Continue?", + "mode": "Incognito Mode", + "notSavedToAccount": "Not saved to account", + "oneFileAtATime": "Incognito mode supports one file at a time", + "processInIncognito": "Process in Incognito", + "processWithoutSaving": "Process without saving", + "processing": "Processing...", + "processingComplete": "Processing complete!", + "processingInProgress": "Processing in incognito mode...", + "recordingDiscarded": "Incognito recording discarded", + "recordingProcessed": "Incognito recording processed - data will be lost when tab closes", + "recordingReady": "Incognito recording ready!", + "recordingTitle": "Incognito Recording", + "selectExactlyOneFile": "Select exactly 1 file", + "sessionOnly": "Session only", + "uploadingFile": "Uploading file for incognito processing..." + }, + "inquire": { + "activeFilters": "Active Filters:", + "askQuestions": "Ask Questions About Your Transcriptions", + "clearAll": "Clear All", + "dateRange": "Date Range", + "dateRangeActive": "Date range active", + "exampleQuestion1": "\"What action items were discussed?\"", + "exampleQuestion2": "\"When did we decide to change the timeline?\"", + "exampleQuestion3": "\"What concerns were raised about the budget?\"", + "exampleQuestion4": "\"Who was responsible for the marketing tasks?\"", + "exampleQuestions": "Example Questions:", + "filters": "Filters", + "filtersActive": "Filters active", + "from": "From", + "noSpeakerData": "No speaker data available", + "placeholder": "Ask questions about your filtered transcriptions...", + "selectFilters": "Select filters on the left to narrow down your transcriptions, then ask questions to get insights from your recordings.", + "sendHint": "Press Enter to send • Ctrl+Enter for new line", + "speakerRequirement": "Speaker identification requires recordings with multiple speakers", + "speakers": "Speakers", + "speakersCount": "speakers", + "tags": "Tags", + "tagsCount": "tags", + "title": "Inquire", + "to": "To" + }, + "languages": { + "ar": "Arabic", + "de": "German", + "en": "English", + "es": "Spanish", + "fr": "French", + "hi": "Hindi", + "it": "Italian", + "ja": "Japanese", + "ko": "Korean", + "nl": "Dutch", + "pt": "Portuguese", + "ru": "Russian", + "zh": "Chinese" + }, + "manageSpeakersModal": { + "created": "Created", + "description": "Manage your saved speakers. These are automatically saved when you use speaker names in your recordings.", + "failedToLoad": "Failed to load speakers", + "lastUsed": "Last used", + "loadingSpeakers": "Loading speakers...", + "noSpeakersYet": "No speakers saved yet", + "speakersSaved": "{{count}} speakers saved", + "speakersWillAppear": "Speakers will appear here when you use speaker names in your recordings", + "times": "times", + "title": "Manage Speakers", + "used": "Used" + }, + "messages": { + "colorSchemeApplied": "Color scheme applied", + "colorSchemeReset": "Color scheme reset to default", + "copiedSuccessfully": "Copied to clipboard!", + "copiedToClipboard": "Copied to clipboard", + "copyFailed": "Failed to copy", + "copyNotSupported": "Copy failed. Your browser may not support this feature.", + "downloadStarted": "Download started", + "errorRecoveringRecording": "Error recovering recording", + "eventDownloadFailed": "Failed to download event", + "eventDownloadSuccess": "Event \"{{title}}\" downloaded. Open the file to add to your calendar.", + "eventsExportFailed": "Failed to export events", + "eventsExportSuccess": "Exported {{count}} events", + "failedToDeleteJob": "Failed to delete job", + "failedToRecoverRecording": "Failed to recover recording", + "failedToRetryJob": "Failed to retry job", + "failedToSave": "Failed to save: {{error}}", + "failedToSaveParticipants": "Failed to save participants", + "followPlayerDisabled": "Follow player mode disabled", + "followPlayerEnabled": "Follow player mode enabled", + "invalidEventData": "Invalid event data", + "jobQueuedForRetry": "Job queued for retry", + "noEventsToExport": "No events to export", + "noNotesAvailableDownload": "No notes available to download.", + "noNotesToCopy": "No notes available to copy.", + "noPermissionToEdit": "You do not have permission to edit this recording", + "noSummaryToCopy": "No summary available to copy.", + "noSummaryToDownload": "No summary available to download.", + "noTranscriptionToCopy": "No transcription available to copy.", + "noTranscriptionToDownload": "No transcription available to download.", + "notesCopied": "Notes copied to clipboard!", + "notesDownloadFailed": "Failed to download notes", + "notesDownloadSuccess": "Notes downloaded successfully!", + "notesUpdated": "Notes updated successfully", + "passwordChanged": "Password changed successfully", + "profileUpdated": "Profile updated successfully", + "recordingDeleted": "Recording deleted successfully", + "recordingDiscarded": "Recording discarded", + "recordingRecovered": "Recording recovered successfully", + "recordingSaved": "Recording saved successfully", + "saveParticipantsFailed": "Save failed: {{error}}", + "settingsSaved": "Settings saved successfully", + "summaryCopied": "Summary copied to clipboard!", + "summaryDownloadFailed": "Failed to download summary", + "summaryDownloadSuccess": "Summary downloaded successfully!", + "summaryGenerated": "Summary generated successfully", + "tagAdded": "Tag added successfully", + "tagRemoved": "Tag removed successfully", + "transcriptDownloadFailed": "Failed to download transcript", + "transcriptDownloadSuccess": "Transcript downloaded successfully!", + "transcriptionCopied": "Transcription copied to clipboard!", + "transcriptionUpdated": "Transcription updated successfully" + }, + "metadata": { + "cancelEdit": "Cancel", + "createdAt": "Created", + "duration": "Duration", + "editMetadata": "Edit Metadata", + "fileName": "File Name", + "fileSize": "File Size", + "language": "Language", + "meetingDate": "Meeting Date", + "processingTime": "Processing Time", + "saveMetadata": "Save", + "status": "Status", + "title": "Metadata", + "updatedAt": "Updated", + "wordCount": "Word Count" + }, + "modal": { + "addSpeaker": "Add New Speaker", + "colorScheme": "Color Scheme", + "deleteRecording": "Delete Recording", + "editAsrTranscription": "Edit ASR Transcription", + "editParticipants": "Edit Participants", + "editRecording": "Edit Recording", + "editSpeakers": "Edit Speakers", + "editTags": "Edit Recording Tags", + "editTranscription": "Edit Transcription", + "identifySpeakers": "Identify Speakers", + "recordingNotice": "Recording Notice", + "reprocessSummary": "Reprocess Summary", + "reprocessTranscription": "Reprocess Transcription", + "resetStatus": "Reset Recording Status?", + "shareRecording": "Share Recording", + "sharedTranscripts": "Shared Transcripts", + "systemAudioHelp": "System Audio Help", + "uploadFiles": "Upload Files", + "uploadNotice": "Upload Notice" + }, + "namingTemplates": { + "addPattern": "Add Pattern", + "availableTemplates": "Available Templates", + "availableVars": "Built-in Variables", + "cancel": "Cancel", + "createDefaults": "Create Default Templates", + "createNew": "Create Template", + "customVarsHint": "Define regex patterns below to extract custom variables from filenames.", + "delete": "Delete", + "description": "Define how recording titles are generated from filenames and transcription content.", + "descriptionLabel": "Description", + "noDefault": "No default (AI title only)", + "regexHint": "Extract data from filenames. Use capture groups () to specify the match. Example: (\\d{10}) for phone numbers.", + "regexPatterns": "Regex Patterns (Optional)", + "result": "Result:", + "save": "Save", + "selectOrCreate": "Select a template to edit or create a new one", + "tabTitle": "Naming", + "template": "Template", + "templateName": "Template Name", + "test": "Test", + "testTemplate": "Test Template", + "title": "Naming Templates", + "userDefault": "Default Template", + "userDefaultHint": "Applied when no tag has a naming template set." + }, + "nav": { + "account": "Account", + "accountSettings": "Account Settings", + "admin": "Admin", + "adminDashboard": "Admin Dashboard", + "darkMode": "Dark Mode", + "groupManagement": "Group Management", + "home": "Home", + "language": "Language", + "lightMode": "Light Mode", + "newRecording": "New Recording", + "recording": "Recording", + "settings": "Settings", + "signOut": "Sign Out", + "teamManagement": "Group Management", + "upload": "Upload", + "userProfile": "User Profile" + }, + "notes": { + "cancelEdit": "Cancel Edit", + "characterCount": "{{count}} character", + "characterCountPlural": "{{count}} characters", + "editNotes": "Edit Notes", + "lastUpdated": "Last updated", + "placeholder": "Add your notes here...", + "saveNotes": "Save Notes", + "title": "Notes" + }, + "pwa": { + "installApp": "Install App", + "installed": "Installed successfully", + "installing": "Installing...", + "notificationPermissionDenied": "Notification permission denied", + "notificationsEnabled": "Notifications enabled", + "offline": "You're offline", + "screenAwake": "Screen will stay awake during recording", + "screenAwakeFailed": "Could not keep screen awake", + "updateAvailable": "Update available" + }, + "recording": { + "acceptDisclaimer": "I Accept", + "cancelRecording": "Cancel", + "discardRecovery": "Discard", + "disclaimer": "Recording Disclaimer", + "duration": "Duration", + "micPlusSys": "Mic + Sys", + "microphone": "Microphone", + "microphoneAndSystem": "Microphone + System", + "microphonePermissionDenied": "Microphone permission denied", + "modeBoth": "Microphone + System", + "modeMicrophone": "Microphone", + "modeSystem": "System Audio", + "notes": "Notes", + "notesPlaceholder": "Add notes about this recording...", + "pauseRecording": "Pause", + "recordingFailed": "Recording failed", + "recordingInProgress": "Recording in progress...", + "recordingMode": "Recording Mode", + "recordingSize": "Estimated Size", + "recordingStopped": "Recording stopped", + "recordingTime": "Recording Time", + "recoveryDescription": "We found an unfinished recording from a previous session. Would you like to restore it?", + "recoveryFound": "Unsaved Recording Detected", + "recoveryTitle": "Recover Recording", + "restoreRecording": "Restore", + "resumeRecording": "Resume", + "saveRecording": "Save Recording", + "size": "Size", + "startRecording": "Start Recording", + "startedAt": "Started At", + "stopRecording": "Stop Recording", + "systemAudio": "System Audio", + "systemAudioNotSupported": "System audio recording is not supported in this browser", + "title": "Audio Recording" + }, + "reprocessModal": { + "audioReTranscribedFromScratch": "The audio will be re-transcribed from scratch. This will also regenerate the title and summary based on the new transcription.", + "audioReTranscribedWithAsr": "The audio will be re-transcribed using the ASR endpoint. This includes diarization and will regenerate the title and summary.", + "manualEditsOverwritten": "Any manual edits to the transcription, title, or summary will be overwritten.", + "manualEditsOverwrittenSummary": "Any manual edits to the title or summary will be overwritten.", + "newTitleAndSummary": "A new title and summary will be generated based on the existing transcription." + }, + "settings": { + "apiKeys": "API Keys", + "appearance": "Appearance", + "changePassword": "Change Password", + "dataExport": "Data Export", + "deleteAccount": "Delete Account", + "integrations": "Integrations", + "language": "Language", + "notifications": "Notifications", + "preferences": "Preferences", + "privacy": "Privacy", + "profile": "Profile", + "security": "Security", + "theme": "Theme", + "title": "Settings", + "twoFactorAuth": "Two-Factor Authentication" + }, + "sharedTranscripts": { + "noSharedTranscripts": "You haven't shared any transcripts yet.", + "shareNotes": "Share Notes", + "shareSummary": "Share Summary", + "sharedOn": "Shared on" + }, + "sharedTranscriptsPage": { + "noSharedTranscripts": "You have not shared any transcripts yet." + }, + "sharing": { + "canEdit": "Can edit", + "canReshare": "Can reshare", + "internalSharing": "Internal Sharing", + "notSharedYet": "Not shared yet", + "publicBadge": "Public", + "publicLink": "Public Link", + "publicLinks": "public link(s)", + "publicLinksGenerated": "public link(s) generated", + "searchUsers": "Search users...", + "sharedBadge": "Shared", + "sharedBy": "Shared by", + "sharedWith": "Shared with", + "teamBadge": "Group", + "teamRecording": "Group recording", + "unknown": "Unknown", + "users": "user(s)" + }, + "sidebar": { + "advancedSearch": "Advanced Search", + "archived": "Archived", + "archivedRecordings": "Archived Recordings", + "dateRange": "Date Range", + "filters": "Filters", + "highlighted": "Highlighted", + "inbox": "Inbox", + "lastMonth": "Last Month", + "lastWeek": "Last Week", + "loadMore": "Load More", + "markAsRead": "Mark as read", + "moveToInbox": "Move to Inbox", + "noRecordings": "No recordings found", + "older": "Older", + "removeFromHighlighted": "Remove from starred", + "searchRecordings": "Search recordings...", + "sharedWithMe": "Shared with Me", + "sortBy": "Sort By", + "sortByDate": "Created Date", + "sortByMeetingDate": "Meeting Date", + "starred": "Starred", + "tags": "Tags", + "thisMonth": "This Month", + "thisWeek": "This Week", + "today": "Today", + "totalRecordings": "{{count}} recording", + "totalRecordingsPlural": "{{count}} recordings", + "upcoming": "Upcoming", + "yesterday": "Yesterday" + }, + "speakers": { + "filterBySpeaker": "Filter by speaker", + "noMatchingSpeakers": "No matching speakers", + "searchSpeakers": "Search..." + }, + "speakersManagement": { + "added": "Added", + "confidence": "Confidence", + "confidenceHigh": "high", + "confidenceLow": "low", + "confidenceMedium": "medium", + "created": "Created", + "description": "Manage your saved speakers. These are automatically saved when you use speaker names in your recordings.", + "failedToLoad": "Failed to load speakers", + "failedToLoadSnippets": "Failed to load snippets", + "keepThisSpeaker": "Keep this speaker (others will be merged into it):", + "last": "Last", + "lastUsed": "Last used", + "loadingSpeakers": "Loading speakers...", + "match": "match", + "mergeDescription": "Combine multiple speaker profiles into one. All embeddings, snippets, and usage data will be merged.", + "mergeFailed": "Failed to merge speakers", + "mergeNSpeakers": "Merge {{count}} Speakers", + "mergeSpeakers": "Merge Speakers", + "mergeSuccess": "Speakers merged successfully", + "noSnippetsAvailable": "No snippets available", + "noSpeakersYet": "No speakers saved yet", + "sample": "sample", + "samples": "samples", + "selectToMerge": "Select 2+ to Merge", + "speakersToMerge": "Speakers to merge:", + "speakersWillAppear": "Speakers will appear here when you use speaker names in your recordings", + "targetWillReceive": "The selected speaker will receive all voice data and snippets from the others.", + "time": "time", + "times": "times", + "totalSpeakers": "speakers saved", + "used": "Used", + "usedTimes": "Used", + "viewSnippets": "View Snippets", + "voiceMatchSuggestions": "Voice Match Suggestions", + "voiceProfile": "Voice Profile" + }, + "status": { + "completed": "Completed", + "failed": "Failed", + "processing": "Processing", + "queued": "Queued", + "stuck": "Reset stuck processing", + "summarizing": "Summarizing", + "transcribing": "Transcribing", + "uploading": "Uploading" + }, + "summary": { + "actionItems": "Action Items", + "cancelEdit": "Cancel Edit", + "decisions": "Decisions", + "editSummary": "Edit Summary", + "generateSummary": "Generate Summary", + "keyPoints": "Key Points", + "noSummary": "No summary available", + "participants": "Participants", + "regenerateSummary": "Regenerate Summary", + "saveSummary": "Save Summary", + "summaryFailed": "Summary generation failed", + "summaryInProgress": "Summary generation in progress...", + "title": "Summary" + }, + "tagManagement": { + "asrDefaults": "ASR Defaults", + "createTag": "Create Tag", + "customPrompt": "Custom Prompt", + "description": "Organize your recordings with custom tags. Each tag can have its own summary prompt and default ASR settings.", + "maxSpeakers": "Max", + "minSpeakers": "Min", + "noTags": "You haven't created any tags yet." + }, + "tags": { + "addTag": "Add Tag", + "clearTagFilter": "Clear filter", + "createTag": "Create Tag", + "currentTags": "Current Tags", + "filterByTag": "Filter by tag", + "manageAllTags": "Manage All Tags", + "noAvailableTags": "No available tags", + "noMatchingTags": "No matching tags", + "noTags": "No tags", + "removeTag": "Remove Tag", + "searchTags": "Search...", + "tagColor": "Tag Color", + "tagName": "Tag Name", + "title": "Tags" + }, + "tagsModal": { + "addTags": "Add Tags", + "currentTags": "Current Tags", + "done": "Done", + "noTagsAssigned": "No tags assigned to this recording", + "searchTags": "Search tags..." + }, + "time": { + "dayAgo": "1 day ago", + "daysAgo": "{{count}} days ago", + "hourAgo": "1 hour ago", + "hoursAgo": "{{count}} hours ago", + "justNow": "Just now", + "minuteAgo": "1 minute ago", + "minutesAgo": "{{count}} minutes ago", + "monthAgo": "1 month ago", + "monthsAgo": "{{count}} months ago", + "weekAgo": "1 week ago", + "weeksAgo": "{{count}} weeks ago", + "yearAgo": "1 year ago", + "yearsAgo": "{{count}} years ago" + }, + "tooltips": { + "changeSpeaker": "Change speaker", + "clearChat": "Clear chat", + "copyTranscript": "Copy transcript", + "deleteTeam": "Delete Group", + "doubleClickToEdit": "Double-click to edit", + "downloadTranscriptWithTemplate": "Download transcript with template", + "editTeam": "Edit Group", + "editText": "Edit text", + "editTitle": "Edit title", + "editTranscript": "Edit transcript", + "exitFullscreen": "Exit fullscreen", + "expand": "Expand", + "followPlayerDisabled": "Enable auto-scroll - transcript follows audio playback", + "followPlayerEnabled": "Disable auto-scroll - transcript stays in place", + "fullscreenVideo": "Fullscreen video", + "grantPublicSharing": "Grant public sharing permission", + "hideVideo": "Hide video", + "highlight": "Highlight", + "makeAdmin": "Make Admin", + "manageMembers": "Manage Members", + "manageTeamTags": "Manage Group Tags", + "markAsRead": "Mark as read", + "maximizeChat": "Maximize chat", + "minimize": "Minimize", + "moveToInbox": "Move to inbox", + "mute": "Mute", + "pause": "Pause", + "play": "Play", + "playbackSpeed": "Playback speed", + "removeAdmin": "Remove Admin", + "removeFromQueue": "Remove from queue", + "removeFromTeam": "Remove from team", + "removeHighlight": "Remove highlight", + "reprocessTranscription": "Reprocess transcription", + "reprocessWithAsr": "Reprocess with ASR", + "restoreChat": "Restore chat", + "revokePublicSharing": "Revoke public sharing permission", + "shareWithUsers": "Share with users", + "showVideo": "Show video", + "switchToDarkMode": "Switch to Dark Mode", + "switchToLightMode": "Switch to Light Mode", + "unmute": "Unmute" + }, + "transcriptTemplates": { + "availableTemplates": "Available Templates", + "availableVars": "Available Variables", + "cancel": "Cancel", + "chooseTemplate": "Choose template...", + "createDefaults": "Create Default Templates", + "createNew": "Create Template", + "default": "Default", + "delete": "Delete", + "description": "Customize how transcripts are formatted for download and export.", + "downloadDefault": "Download default", + "downloadWithoutTemplate": "Download without template", + "filters": "Filters: |upper for uppercase, |srt for subtitle time format", + "save": "Save", + "selectOrCreate": "Select a template to edit or create a new one", + "selectTemplate": "Select Template", + "setDefault": "Set as default template", + "tabTitle": "Transcript", + "template": "Template", + "templateName": "Template Name", + "title": "Transcript Templates", + "viewGuide": "View Template Guide" + }, + "transcription": { + "autoIdentifySpeakers": "Auto-identify Speakers", + "bubble": "Bubble", + "cancelEdit": "Cancel Edit", + "copy": "Copy", + "copyToClipboard": "Copy to Clipboard", + "download": "Download", + "downloadTranscript": "Download Transcript", + "edit": "Edit", + "editSpeakers": "Edit Speakers", + "editTranscription": "Edit Transcription", + "highlightSearchResults": "Highlight search results", + "noTranscription": "No transcription available", + "regenerateTranscription": "Regenerate Transcription", + "saveTranscription": "Save Transcription", + "searchInTranscript": "Search in transcript...", + "simple": "Simple", + "speaker": "Speaker {{number}}", + "speakerLabels": "Speaker Labels", + "title": "Transcription", + "unknownSpeaker": "Unknown Speaker" + }, + "upload": { + "chunking": "Large files will be automatically chunked for processing", + "completed": "Completed", + "copies": "copies of this file", + "dropzone": "Drag and drop audio files here, or click to browse", + "duplicateDetected": "This file appears to be a duplicate of \"{{existingName}}\" (uploaded {{existingDate}})", + "duplicateFile": "Duplicate file", + "failed": "Failed", + "fileExceedsMaxSize": "File \"{{name}}\" exceeds the maximum size of {{size}} MB and was skipped.", + "fileRemovedFromQueue": "File removed from queue", + "filesToUpload": "Files to Upload", + "invalidFileType": "Invalid file type \"{{name}}\". Only audio files and video containers with audio (MP3, WAV, MP4, MOV, AVI, etc.) are accepted. File skipped.", + "maxFileSize": "Maximum file size", + "queued": "Queued", + "selectFiles": "Select Files", + "settingsApplyToAll": "Settings apply to all files in this session", + "summarizing": "Summarizing...", + "supportedFormats": "Supports MP3, WAV, M4A, MP4, MOV, AVI, AMR, and more", + "title": "Upload Audio", + "transcribing": "Transcribing...", + "untitled": "Untitled Recording", + "uploadNFiles": "Upload {{count}} File(s)", + "uploadProgress": "Upload Progress", + "videoRetained": "Video preserved for playback", + "willAutoSummarize": "Will auto-summarize after transcription" + }, + "uploadProgress": { + "title": "Upload Progress" + } +} \ No newline at end of file diff --git a/static/locales/es.json b/static/locales/es.json new file mode 100644 index 0000000..9865d6f --- /dev/null +++ b/static/locales/es.json @@ -0,0 +1,1505 @@ +{ + "aboutPage": { + "aiSummarization": "Resumen con IA", + "aiSummarizationDesc": "Integración de OpenRouter y Ollama con prompts personalizados", + "asrEnabled": "ASR Habilitado", + "asrEndpoint": "Punto de Acceso ASR", + "audioTranscription": "Transcripción de Audio", + "audioTranscriptionDesc": "API de Whisper y soporte ASR personalizado con alta precisión", + "backend": "Backend", + "database": "Base de Datos", + "deployment": "Despliegue", + "dockerDescription": "Imágenes oficiales de Docker", + "dockerHub": "Docker Hub", + "documentation": "Documentación", + "documentationDescription": "Guías de configuración y manual del usuario", + "endpoint": "Punto de Acceso", + "frontend": "Frontend", + "githubDescription": "Código fuente, problemas y versiones", + "githubRepository": "Repositorio de GitHub", + "inquireMode": "Modo de Consulta", + "inquireModeDesc": "Búsqueda semántica en todas tus grabaciones", + "interactiveChat": "Chat Interactivo", + "interactiveChatDesc": "Chatea con tus transcripciones usando IA", + "keyFeatures": "Características Principales", + "largeLanguageModel": "Modelo de Lenguaje Grande", + "model": "Modelo", + "projectDescription": "Transforma tus grabaciones de audio en notas organizadas y buscables con funciones de transcripción, resumen y chat interactivo impulsadas por IA.", + "projectLinks": "Enlaces del Proyecto", + "sharingExport": "Compartir y Exportar", + "sharingExportDesc": "Comparte grabaciones y exporta a varios formatos", + "speakerDiarization": "Diarización de Hablantes", + "speakerDiarizationDesc": "Identifica y etiqueta diferentes hablantes automáticamente", + "speechRecognition": "Reconocimiento de Voz", + "systemConfiguration": "Configuración del Sistema", + "tagline": "Transcripción de Audio y Toma de Notas Impulsada por IA", + "technologyStack": "Pila Tecnológica", + "title": "Acerca de", + "version": "Versión", + "whisperApi": "API de Whisper" + }, + "aboutPageDetails": { + "aiSummarizationDesc": "Integración con OpenRouter y Ollama con prompts personalizados", + "asrEnabled": "ASR Habilitado", + "asrEndpoint": "Punto de Acceso ASR", + "audioTranscriptionDesc": "API de Whisper y soporte ASR personalizado con alta precisión", + "backend": "Backend", + "database": "Base de Datos", + "deployment": "Implementación", + "dockerDescription": "Imágenes oficiales de Docker", + "documentationDescription": "Guías de configuración y manual de usuario", + "endpoint": "Punto de Acceso", + "frontend": "Frontend", + "githubDescription": "Código fuente, problemas y versiones", + "inquireModeDesc": "Búsqueda semántica en todas tus grabaciones", + "interactiveChatDesc": "Chatea con tus transcripciones usando IA", + "model": "Modelo", + "no": "No", + "sharingExportDesc": "Comparte grabaciones y exporta a varios formatos", + "speakerDiarizationDesc": "Identifica y etiqueta diferentes oradores automáticamente", + "whisperApi": "API de Whisper", + "yes": "Sí" + }, + "account": { + "accountActions": "Acciones de la Cuenta", + "autoLabel": "Auto-label", + "autoSummarizationDisabled": "Auto-summarization disabled by admin", + "autoSummarize": "Auto-summarize", + "changePassword": "Cambiar Contraseña", + "chooseLanguageForInterface": "Elige el idioma para la interfaz de la aplicación", + "companyOrganization": "Empresa / Organización", + "completedRecordings": "Completadas", + "defaultHotwords": "Default Hotwords", + "defaultHotwordsPlaceholder": "e.g., Speakr, CTranslate2, PyAnnote, SDRs", + "defaultInitialPrompt": "Default Initial Prompt", + "defaultInitialPromptPlaceholder": "e.g., This is a meeting about AI transcription tools. The speakers discuss CTranslate2, PyAnnote, and SDRs.", + "email": "Correo Electrónico", + "failedRecordings": "Fallidas", + "fullName": "Nombre Completo", + "goToRecordings": "Ir a Grabaciones", + "interfaceLanguage": "Idioma de la Interfaz", + "jobTitle": "Cargo", + "languageForSummaries": "Idioma para títulos, resúmenes y chat. Dejar en blanco para el predeterminado (comportamiento predeterminado de sus modelos elegidos).", + "languagePreferences": "Preferencias de Idioma", + "leaveBlankForAutoDetect": "Dejar en blanco para detección automática por el servicio de transcripción", + "manageSpeakers": "Gestionar Hablantes", + "personalFolder": "Personal Folder (Not Associated with a Group)", + "personalInfo": "Información Personal", + "personalTag": "Personal Tag (Not Associated with a Group)", + "preferredOutputLanguage": "Idioma Preferido para Chatbot y Resúmenes", + "processingRecordings": "En Procesamiento", + "saveAllPreferences": "Guardar Todas las Preferencias", + "ssoLinkAccount": "Link {{provider}} account", + "ssoLinked": "Linked", + "ssoNotLinked": "Not linked", + "ssoProvider": "Provider", + "ssoSetPasswordFirst": "To unlink SSO, you must first set a password.", + "ssoSubject": "Subject:", + "ssoUnlinkAccount": "Unlink {{provider}} account", + "ssoUnlinkConfirm": "Are you sure you want to unlink your SSO account? You will need to use your password to log in.", + "statistics": "Estadísticas de la Cuenta", + "title": "Información de la Cuenta", + "totalRecordings": "Total de Grabaciones", + "transcriptionHints": "Transcription Hints", + "transcriptionHintsDesc": "These defaults are used when no tag or folder overrides are set. They help improve transcription accuracy for your specific use case.", + "transcriptionLanguage": "Idioma de Transcripción", + "userDetails": "Detalles del Usuario", + "username": "Nombre de Usuario" + }, + "accountTabs": { + "about": "Acerca de", + "apiTokens": "Tokens de API", + "customPrompts": "Prompts Personalizados", + "folderManagement": "Gestión de carpetas", + "help": "Ayuda", + "namingTemplates": "Nombrado", + "promptOptions": "Opciones de Prompt", + "sharedTranscripts": "Transcripciones Compartidas", + "speakersManagement": "Gestión de Hablantes", + "tagManagement": "Gestión de Etiquetas", + "templates": "Plantillas", + "transcriptTemplates": "Plantillas de Transcripción" + }, + "admin": { + "title": "Administración", + "userMenu": "Menú de Usuario" + }, + "adminDashboard": { + "aboutInquireMode": "Acerca del Modo Consulta", + "actions": "ACCIONES", + "addNewUser": "Agregar Nuevo Usuario", + "addUser": "Agregar Usuario", + "additionalContext": "Contexto Adicional", + "admin": "ADMIN", + "adminDefaultPrompt": "Prompt Predeterminado del Administrador", + "adminDefaultPromptDesc": "El prompt configurado arriba (mostrado en esta página)", + "adminUser": "Usuario Administrador", + "allRecordingsProcessed": "¡Todas las grabaciones están procesadas!", + "allowed": "Allowed", + "available": "Disponible", + "blocked": "bloqueado", + "budgetWarnings": "Advertencias de Presupuesto", + "characters": "caracteres", + "chunkSize": "Tamaño del Fragmento", + "complete": "completado", + "completedRecordings": "Completadas", + "confirmPasswordLabel": "Confirmar contraseña", + "contextNotes": { + "jsonConversion": "Las transcripciones JSON se convierten a formato de texto limpio antes de enviar", + "modelConfig": "El modelo utilizado se configura a través de la variable de entorno TEXT_MODEL_NAME", + "tagPrompts": "Si existen múltiples indicaciones de etiquetas, se fusionan en el orden en que se agregaron las etiquetas", + "transcriptLimit": "Las transcripciones están limitadas a un número configurable de caracteres (predeterminado: 30,000)" + }, + "createFirstGroup": "Create Your First Group", + "created": "Created", + "currentUsage": "Uso actual", + "currentUsageMinutes": "Uso Actual", + "defaultPromptInfo": "Este prompt predeterminado se utilizará para todos los usuarios que no hayan establecido su propio prompt personalizado en la configuración de su cuenta.", + "defaultPrompts": "Prompts por Defecto", + "defaultSummarizationPrompt": "Prompt de Resumen Predeterminado", + "description": "Description", + "editUser": "Editar Usuario", + "email": "E-MAIL", + "emailLabel": "Correo electrónico", + "embeddingModel": "Modelo de Incrustación", + "embeddingsStatus": "Estado de Incrustaciones", + "errors": { + "failedToLoadPrompt": "Error al cargar el prompt predeterminado", + "failedToSavePrompt": "Error al guardar el prompt predeterminado. Por favor, inténtalo de nuevo.", + "invalidFileSize": "Por favor ingrese un tamaño válido entre 1 y 10000 MB", + "invalidInteger": "Por favor ingrese un número entero válido", + "invalidNumber": "Por favor ingrese un número válido", + "maxTimeout": "El tiempo de espera no puede exceder 10 horas (36000 segundos)", + "minCharacters": "Por favor ingrese un número válido de al menos 1000 caracteres", + "minTimeout": "El tiempo de espera debe ser de al menos 60 segundos" + }, + "failedRecordings": "Fallidas", + "groupName": "Group Name", + "groupsTab": "Groups", + "id": "ID", + "inquireModeDescription": "El Modo Inquire permite a los usuarios buscar en múltiples transcripciones usando preguntas en lenguaje natural. Funciona dividiendo las transcripciones en fragmentos y creando incrustaciones buscables usando modelos de IA.", + "languagePreferenceNote": "Nota: Si el usuario ha establecido una preferencia de idioma de salida, se agregará \" Asegúrese de que su respuesta esté en {idioma}.\".", + "lastUpdated": "Última actualización", + "maxFileSizeHelp": "Tamaño máximo de archivo en megabytes (1-10000 MB)", + "megabytes": "MB", + "members": "Members", + "membersCount": "members", + "minutes": "minutos", + "monthlyCost": "Costo Mensual", + "monthlyTokenBudget": "Presupuesto Mensual de Tokens", + "monthlyTranscriptionBudget": "Presupuesto Mensual de Transcripción (minutos)", + "needProcessing": "Necesita Procesamiento", + "never": "Nunca", + "newPasswordLabel": "Nueva Contraseña (dejar en blanco para mantener la actual)", + "no": "No", + "noData": "Sin datos", + "noDescription": "No description", + "noDescriptionAvailable": "Sin descripción disponible", + "noGroupsAdmin": "You are not an admin of any groups yet", + "noGroupsCreated": "No groups created yet", + "noLimit": "Sin Límite", + "noMembersYet": "No members yet", + "noTranscriptionData": "No hay datos de uso de transcripción disponibles", + "none": "Ninguno", + "notSet": "No establecido", + "overlap": "Superposición", + "passwordLabel": "Contraseña", + "passwordsDoNotMatch": "Passwords do not match", + "pendingRecordings": "Pendientes", + "percentUsed": "usado", + "placeholdersNote": "Los marcadores de posición se reemplazan con valores reales al procesar una grabación.", + "processAllRecordings": "Procesar Todas las Grabaciones", + "processNext10": "Procesar Próximas 10", + "processedForInquire": "Procesado para Consulta", + "processing": "Procesando...", + "processingActions": "Acciones de Procesamiento", + "processingProgress": "Progreso de Procesamiento", + "processingRecordings": "En Procesamiento", + "promptDescription": "Este prompt se utilizará para generar resúmenes para todas las grabaciones cuando los usuarios no hayan establecido su propio prompt.", + "promptHierarchy": "Jerarquía de Prompts", + "promptPriorityDescription": "El sistema utiliza el siguiente orden de prioridad al seleccionar qué prompt usar:", + "promptResetMessage": "Prompt restablecido al predeterminado del sistema. Haz clic en \"Guardar Cambios\" para aplicar.", + "promptSavedSuccessfully": "¡Prompt predeterminado guardado con éxito!", + "publicShare": "Public Share", + "recordingStatusDistribution": "Distribución del Estado de Grabaciones", + "recordings": "GRABACIONES", + "recordingsNeedProcessing": "Hay {{count}} grabaciones que necesitan ser procesadas para el Modo Inquire.", + "refreshStatus": "Actualizar Estado", + "resetToDefault": "Restablecer a Predeterminado", + "saving": "Guardando...", + "searchUsers": "Buscar usuarios...", + "seconds": "segundos", + "settings": { + "asrTimeoutDesc": "Tiempo máximo en segundos para esperar a que se complete la transcripción ASR. El valor predeterminado es 1800 segundos (30 minutos).", + "defaultSummaryPromptDesc": "Indicación de resumen predeterminada utilizada cuando los usuarios no han establecido su propia indicación. Esto sirve como la indicación base para todos los usuarios.", + "maxFileSizeDesc": "Tamaño máximo de archivo permitido para cargas de audio en megabytes (MB).", + "recordingDisclaimerDesc": "Aviso legal mostrado a los usuarios antes de comenzar la grabación. Admite formato Markdown. Dejar vacío para desactivar.", + "uploadDisclaimerDesc": "Aviso legal mostrado antes de subir archivos. Admite Markdown. Dejar vacío para desactivar.", + "customBannerDesc": "Banner personalizado mostrado en la parte superior de la página. Admite Markdown. Dejar vacío para desactivar.", + "transcriptLengthLimitDesc": "Número máximo de caracteres a enviar desde la transcripción al LLM para resumen y chat. Use -1 para sin límite." + }, + "storageUsed": "ALMACENAMIENTO USADO", + "summarizationInstructions": "Instrucciones de Resumen", + "systemFallback": "Respaldo del Sistema", + "systemFallbackDesc": "Un valor predeterminado codificado si ninguno de los anteriores está establecido", + "systemPrompt": "Prompt del Sistema", + "systemSettings": "Configuración del Sistema", + "systemStatistics": "Estadísticas del Sistema", + "tagCustomPrompt": "Prompt Personalizado de Etiqueta", + "tagCustomPromptDesc": "Si una grabación tiene etiquetas con prompts personalizados", + "textSearchOnly": "Solo Búsqueda de Texto", + "thisMonth": "Este Mes", + "timeoutRecommendation": "Recomendado: 30-120 minutos para archivos de audio largos", + "title": "Panel de Administración", + "todaysMinutes": "Minutos de Hoy", + "tokenBudgetExceeded": "Presupuesto mensual de tokens excedido. Por favor contacte a su administrador.", + "tokenBudgetHelp": "Establezca un límite mensual de tokens para funciones de IA. Deje vacío para ilimitado.", + "tokenBudgetPlaceholder": "Deje vacío para ilimitado", + "tokenUsage": "Uso de tokens", + "tokens": "tokens", + "topUsers": "Usuarios Principales", + "topUsersByStorage": "Principales Usuarios por Almacenamiento", + "total": "Total", + "totalChunks": "Total de Fragmentos", + "totalQueries": "Total de Consultas", + "totalRecordings": "Total de Grabaciones", + "totalStorage": "Almacenamiento Total", + "totalUsers": "Total de Usuarios", + "transcriptionBudgetHelp": "Limite los minutos de transcripción por mes. Deje vacío para ilimitado.", + "transcriptionBudgetPlaceholder": "Deje vacío para ilimitado", + "transcriptionUsage": "Uso de Transcripción", + "updateUser": "Actualizar Usuario", + "userCustomPrompt": "Prompt Personalizado del Usuario", + "userCustomPromptDesc": "Si el usuario ha establecido su propio prompt en la configuración de la cuenta", + "userManagement": "Gestión de Usuarios", + "userMessageTemplate": "Plantilla de Mensaje del Usuario", + "userTranscriptionUsage": "Uso de Transcripción por Usuario (Este Mes)", + "username": "NOMBRE DE USUARIO", + "usernameLabel": "Nombre de usuario", + "vectorDimensions": "Dimensiones del Vector", + "vectorStore": "Almacén Vectorial", + "vectorStoreManagement": "Gestión del Almacén Vectorial", + "vectorStoreUpToDate": "El almacén de vectores está actualizado.", + "viewFullPromptStructure": "Ver Estructura Completa del Prompt LLM", + "warning": "advertencia", + "yes": "Sí" + }, + "apiTokens": { + "activeTokens": "Tokens activos", + "createFirstToken": "Crea tu primer token de API para habilitar el acceso programático", + "createToken": "Crear token", + "created": "Creado", + "description": "Crea y gestiona tokens de API para acceso programático a tu cuenta", + "expires": "Expira", + "lastUsed": "Último uso", + "neverUsed": "Nunca usado", + "noExpiration": "Sin expiración", + "noTokens": "Sin tokens de API", + "securityNotice": "Aviso de seguridad", + "securityWarning": "Trata los tokens de API como contraseñas. Proporcionan acceso completo a tu cuenta. Nunca compartas tokens en áreas públicas como GitHub, código del lado del cliente o logs", + "title": "Tokens de API", + "usageExamples": "Ejemplos de uso" + }, + "buttons": { + "addSegment": "Agregar Segmento", + "addSpeaker": "Añadir Hablante", + "cancel": "Cancel", + "clearAllFilters": "Limpiar todos los filtros", + "clearCompleted": "Limpiar cargas completadas", + "clearSearchText": "Limpiar texto de búsqueda", + "close": "Close", + "copy": "Copiar", + "copyMessage": "Copiar mensaje", + "copyNotes": "Copiar Notas", + "copySummary": "Copiar Resumen", + "copyToClipboard": "Copiar al Portapapeles", + "createTag": "Create Tag", + "deleteAll": "Delete All", + "deleteSpeaker": "Eliminar hablante", + "deleteTag": "Eliminar etiqueta", + "deleteUser": "Eliminar usuario", + "downloadAsWord": "Descargar como Word", + "downloadAudio": "Descargar audio", + "downloadChat": "Descargar chat como documento de Word", + "downloadNotes": "Descargar notas como documento de Word", + "downloadSummary": "Descargar resumen como documento de Word", + "editNotes": "Editar Notas", + "editSetting": "Editar configuración", + "editSpeakers": "Editar Hablantes...", + "editSummary": "Editar Resumen", + "editTag": "Editar etiqueta", + "editTags": "Editar etiquetas", + "editTranscription": "Editar Transcripción", + "editUser": "Editar usuario", + "exportCalendar": "Exportar al Calendario", + "help": "Ayuda", + "identifySpeakers": "Identificar Hablantes", + "next": "Siguiente", + "previous": "Anterior", + "refresh": "Refresh", + "reprocessSummary": "Reprocesar resumen", + "reprocessTranscription": "Reprocesar transcripción", + "reprocessWithAsr": "Reprocesar con ASR", + "resetStuckProcessing": "Restablecer procesamiento bloqueado", + "saveChanges": "Guardar Cambios", + "saveCustomPrompt": "Guardar Prompt Personalizado", + "saveNames": "Guardar Nombres", + "saveSettings": "Guardar Configuración", + "shareRecording": "Compartir Grabación", + "toggleTheme": "Cambiar tema", + "updateTag": "Update Tag" + }, + "changePasswordModal": { + "confirmPassword": "Confirmar Nueva Contraseña", + "currentPassword": "Contraseña Actual", + "newPassword": "Nueva Contraseña", + "passwordRequirement": "La contraseña debe tener al menos 8 caracteres", + "title": "Cambiar Contraseña" + }, + "chat": { + "availableAfterTranscription": "El chat estará disponible una vez que se complete la transcripción", + "cannotChatTranscriptionFailed": "Cannot chat: transcription failed. Please reprocess the transcription first.", + "chatWithTranscription": "Chatear con la Transcripción", + "clearChat": "Limpiar Chat", + "cleared": "Chat cleared", + "downloadFailed": "Failed to download chat", + "downloadSuccess": "Chat downloaded successfully!", + "error": "Error al enviar el mensaje", + "noMessages": "No hay mensajes aún", + "noMessagesToDownload": "No chat messages to download.", + "placeholder": "Haz una pregunta sobre esta grabación...", + "placeholderWithHint": "Haz una pregunta sobre esta grabación... (Enter para enviar, Ctrl+Enter para nueva línea)", + "send": "Enviar", + "suggestedQuestions": "Preguntas Sugeridas", + "thinking": "Pensando...", + "title": "Chat", + "whatAreActionItems": "¿Cuáles son los elementos de acción?", + "whatAreKeyPoints": "¿Cuáles son los puntos clave?", + "whatWasDiscussed": "¿Qué se discutió?", + "whoSaidWhat": "¿Quién dijo qué?" + }, + "colorScheme": { + "chooseRecording": "Elige una grabación de la barra lateral para ver su transcripción y resumen", + "darkThemes": "Temas Oscuros", + "descriptions": { + "blue": "Classic blue theme with a clean, professional feel", + "emerald": "Nature-inspired green theme for a calming experience", + "purple": "Rich purple theme with an elegant, modern look", + "rose": "Warm rose theme with a soft, inviting aesthetic", + "amber": "Warm amber tones for a cozy, productive feel", + "teal": "Cool teal theme with a refreshing, modern vibe" + }, + "lightThemes": "Temas Claros", + "names": { + "blue": "Ocean Blue", + "emerald": "Forest Green", + "purple": "Royal Purple", + "rose": "Coral Rose", + "amber": "Golden Amber", + "teal": "Arctic Teal" + }, + "resetToDefault": "Restablecer por Defecto", + "selectRecording": "Seleccionar una Grabación", + "subtitle": "Personaliza tu interfaz con hermosos temas de color", + "themes": { + "light": { + "blue": { + "name": "Azul Océano", + "description": "Tema azul clásico con atractivo profesional" + }, + "emerald": { + "name": "Esmeralda Bosque", + "description": "Tema verde fresco para sensación natural" + }, + "purple": { + "name": "Púrpura Real", + "description": "Tema púrpura elegante con sofisticación" + }, + "rose": { + "name": "Rosa Atardecer", + "description": "Tema rosa cálido con energía suave" + }, + "amber": { + "name": "Ámbar Dorado", + "description": "Tema amarillo cálido para luminosidad" + }, + "teal": { + "name": "Turquesa Océano", + "description": "Tema turquesa fresco para tranquilidad" + } + }, + "dark": { + "blue": { + "name": "Azul Medianoche", + "description": "Tema azul profundo para trabajo enfocado" + }, + "emerald": { + "name": "Bosque Oscuro", + "description": "Tema verde rico para visualización cómoda" + }, + "purple": { + "name": "Púrpura Profundo", + "description": "Tema púrpura misterioso para creatividad" + }, + "rose": { + "name": "Rosa Oscuro", + "description": "Tema rosa tenue con calidez sutil" + }, + "amber": { + "name": "Ámbar Oscuro", + "description": "Tema marrón cálido para sesiones acogedoras" + }, + "teal": { + "name": "Turquesa Profundo", + "description": "Tema turquesa oscuro para enfoque tranquilo" + } + } + }, + "title": "Elegir Esquema de Color" + }, + "common": { + "back": "Atrás", + "cancel": "Cancelar", + "changesSaved": "Cambios guardados", + "close": "Cerrar", + "confirm": "Confirmar", + "delete": "Eliminar", + "deselectAll": "Deseleccionar Todo", + "download": "Descargar", + "edit": "Editar", + "error": "Error", + "failed": "Fallido", + "filter": "Filtrar", + "info": "Información", + "loading": "Cargando...", + "new": "Nuevo", + "next": "Siguiente", + "no": "No", + "noResults": "No se encontraron resultados", + "ok": "OK", + "or": "Or", + "previous": "Anterior", + "processing": "Procesando...", + "refresh": "Actualizar", + "retry": "Reintentar", + "save": "Guardar", + "search": "Buscar", + "selectAll": "Seleccionar Todo", + "sort": "Ordenar", + "success": "Éxito", + "untitled": "Grabación sin título", + "upload": "Subir", + "warning": "Advertencia", + "yes": "Sí" + }, + "customPrompts": { + "currentDefaultPrompt": "Prompt Predeterminado Actual (Se usa si dejas lo anterior en blanco)", + "promptDescription": "Este prompt se utilizará para generar resúmenes de tus transcripciones. Anula el prompt predeterminado del administrador.", + "promptPlaceholder": "Describe cómo quieres que estén estructurados tus resúmenes. Deja en blanco para usar el prompt predeterminado del administrador.", + "summaryGeneration": "Prompt de Generación de Resúmenes", + "tip1": "Sé específico sobre las secciones que quieres en tu resumen", + "tip2": "Usa instrucciones de formato claras (ej. \"Usa viñetas\", \"Crea listas numeradas\")", + "tip3": "Especifica si quieres que cierta información sea priorizada", + "tip4": "El sistema proporcionará automáticamente el contenido de la transcripción a la IA", + "tip5": "Tu preferencia de idioma de salida (si está configurada) se aplicará automáticamente", + "tipsTitle": "Consejos para Escribir Prompts Efectivos", + "yourCustomPrompt": "Tu Prompt Personalizado de Resumen" + }, + "deleteAllSpeakersModal": { + "confirmMessage": "¿Estás seguro de que quieres eliminar todos los oradores guardados? Esta acción no se puede deshacer.", + "title": "Eliminar Todos los Oradores" + }, + "dialogs": { + "deleteRecording": { + "cancel": "Cancelar", + "confirm": "Eliminar", + "message": "¿Estás seguro de que deseas eliminar esta grabación? Esta acción no se puede deshacer.", + "title": "Eliminar Grabación" + }, + "deleteShare": { + "message": "¿Estás seguro de que quieres eliminar este enlace compartido? Esto revocará el acceso al enlace público.", + "title": "Eliminar enlace compartido" + }, + "reprocessTranscription": { + "cancel": "Cancelar", + "confirm": "Reprocesar", + "message": "¿Estás seguro de que deseas reprocesar esta transcripción? La transcripción actual será reemplazada.", + "title": "Reprocesar Transcripción" + }, + "unsavedChanges": { + "cancel": "Cancelar", + "discard": "Descartar", + "message": "Tienes cambios sin guardar. ¿Deseas guardarlos antes de salir?", + "save": "Guardar", + "title": "Cambios Sin Guardar" + } + }, + "duration": { + "hours": "{{count}} hora", + "hoursPlural": "{{count}} horas", + "minutes": "{{count}} minuto", + "minutesPlural": "{{count}} minutos", + "seconds": "{{count}} segundo", + "secondsPlural": "{{count}} segundos" + }, + "editTagModal": { + "asrDefaultSettings": "Configuraciones Predeterminadas de ASR", + "asrSettingsDescription": "Estas configuraciones se aplicarán por defecto al usar esta etiqueta con transcripción ASR", + "color": "Color", + "colorDescription": "Elige un color para fácil identificación", + "createTitle": "Crear Etiqueta", + "customPrompt": "Prompt de Resumen Personalizado", + "customPromptPlaceholder": "Opcional: Prompt personalizado para generar resúmenes de grabaciones con esta etiqueta", + "defaultLanguage": "Idioma Predeterminado", + "defaultPromptPlaceholder": "Deja en blanco para usar tu prompt de resumen predeterminado", + "exportTemplate": "Plantilla de exportación", + "exportTemplateHint": "Selecciona una plantilla de exportación para usar al exportar grabaciones con esta etiqueta", + "leaveBlankPrompt": "Deja en blanco para usar tu prompt de resumen predeterminado", + "maxSpeakers": "Máximo de Oradores", + "minSpeakers": "Mínimo de Oradores", + "namingTemplate": "Plantilla de nombrado", + "namingTemplateHint": "Selecciona una plantilla de nombrado para formatear automáticamente los títulos de las grabaciones con esta etiqueta", + "noExportTemplate": "Sin plantilla (usar predeterminado del usuario)", + "noNamingTemplate": "Sin plantilla (usar predeterminado o título IA)", + "tagName": "Nombre de la Etiqueta *", + "tagNamePlaceholder": "ej., Reuniones, Entrevistas", + "title": "Editar Etiqueta" + }, + "errors": { + "audioExtractionFailed": "Audio Extraction Failed", + "audioExtractionFailedGuidance": "Try converting the file to a standard audio format (MP3, WAV) before uploading.", + "audioExtractionFailedMessage": "Could not extract audio from the uploaded file.", + "audioRecordingFailed": "音频录制失败。请检查您的麦克风。", + "authenticationError": "Authentication Error", + "authenticationErrorGuidance": "Please check that the API key is correct and has not expired.", + "authenticationErrorMessage": "The transcription service rejected the API credentials.", + "checkApiKeyGuidance": "Check the API key in settings", + "checkNetworkGuidance": "Check network connection", + "connectionError": "Connection Error", + "connectionErrorGuidance": "Check your internet connection and ensure the service is available.", + "connectionErrorMessage": "Could not connect to the transcription service.", + "convertFormatGuidance": "Convert to MP3 or WAV before uploading", + "convertStandardGuidance": "Convert to standard audio format", + "enableChunkingGuidance": "Enable chunking in settings or compress the file", + "fallbackMessage": "An error occurred", + "fallbackTitle": "Error", + "fileTooLarge": "文件太大", + "fileTooLargeGuidance": "Try enabling audio chunking in your settings, or compress the audio file before uploading.", + "fileTooLargeMaxSize": "File too large. Max: {{size}} MB.", + "fileTooLargeMessage": "The audio file exceeds the maximum size allowed by the transcription service.", + "fileTooLargeTitle": "File Too Large", + "generic": "发生错误", + "invalidAudioFormat": "Invalid Audio Format", + "invalidAudioFormatGuidance": "Try converting the audio to MP3 or WAV format before uploading.", + "invalidAudioFormatMessage": "The audio file format is not supported or the file may be corrupted.", + "loadingShares": "Error al cargar los compartidos", + "networkError": "网络错误。请检查您的连接。", + "networkErrorDuringUpload": "Network error during upload", + "notFound": "未找到", + "permissionDenied": "权限被拒绝", + "processingError": "Processing Error", + "processingErrorFallbackGuidance": "Try reprocessing the recording", + "processingErrorGuidance": "If this error persists, try reprocessing the recording.", + "processingErrorMessage": "An error occurred during processing.", + "processingFailedOnServer": "Processing failed on server.", + "processingFailedWithStatus": "Processing failed with status {{status}}", + "processingTimeout": "Processing Timeout", + "processingTimeoutGuidance": "This can happen with very long recordings. Try splitting the audio into smaller parts.", + "processingTimeoutMessage": "The transcription took too long to complete.", + "quotaExceeded": "存储配额已超出", + "rateLimitExceeded": "Rate Limit Exceeded", + "rateLimitExceededGuidance": "Please wait a few minutes and try reprocessing.", + "rateLimitExceededMessage": "Too many requests were sent to the transcription service.", + "serverError": "服务器错误。请稍后重试。", + "serverErrorStatus": "Server error ({{status}})", + "serviceUnavailable": "Service Unavailable", + "serviceUnavailableGuidance": "This is usually temporary. Please try again in a few minutes.", + "serviceUnavailableMessage": "The transcription service is temporarily unavailable.", + "splitAudioGuidance": "Try splitting the audio into smaller parts", + "summaryFailed": "摘要生成失败。请重试。", + "transcriptionFailed": "转录失败。请重试。", + "tryAgainLaterGuidance": "Try again in a few minutes", + "unauthorized": "未授权", + "unexpectedResponse": "Unexpected success response from server after upload.", + "unsupportedFormat": "不支持的文件格式", + "uploadFailed": "上传失败。请重试。", + "uploadFailedWithStatus": "Upload failed with status {{status}}", + "uploadTimedOut": "Upload timed out", + "validationError": "验证错误", + "waitAndRetryGuidance": "Wait a few minutes and try again" + }, + "eventExtraction": { + "description": "Cuando está habilitado, la IA identificará reuniones, citas y plazos mencionados en tus grabaciones y creará eventos de calendario descargables.", + "enableLabel": "Habilitar extracción automática de eventos de las transcripciones", + "info": "Los eventos extraídos aparecerán en la pestaña 'Eventos' en las grabaciones donde se detecten elementos de calendario.", + "title": "Extracción de Eventos" + }, + "events": { + "add": "Agregar", + "addToCalendar": "Agregar al Calendario", + "attendees": "Asistentes", + "confirmDelete": "¿Eliminar evento \"{title}\"?", + "delete": "Eliminar", + "deleteFailed": "Error al eliminar el evento", + "deleted": "Evento eliminado", + "end": "Fin", + "location": "Ubicación", + "noEvents": "No se detectaron eventos en esta grabación", + "start": "Inicio", + "title": "Eventos" + }, + "exportLabels": { + "created": "Creado", + "date": "Fecha", + "fileSize": "Tamaño del archivo", + "footer": "Generado con [DictIA](https://gitea.innova-ai.ca/Innova-AI/dictia)", + "metadata": "Metadatos", + "notes": "Notas", + "originalFile": "Archivo original", + "participants": "Participantes", + "summarizationTime": "Tiempo de resumen", + "summary": "Resumen", + "tags": "Etiquetas", + "transcription": "Transcripción", + "transcriptionTime": "Tiempo de transcripción" + }, + "exportTemplates": { + "availableLabels": "Etiquetas localizadas (traducidas automáticamente)", + "availableTemplates": "Plantillas disponibles", + "availableVars": "Variables disponibles", + "cancel": "Cancelar", + "conditionals": "Condicionales", + "conditionalsHint": "Usa {{#if variable}}...{{/if}} para incluir contenido condicionalmente", + "contentSections": "Secciones de contenido", + "createDefaults": "Crear plantilla predeterminada", + "createNew": "Crear plantilla", + "default": "Predeterminada", + "delete": "Eliminar", + "description": "Personaliza cómo se exportan las grabaciones a archivos markdown.", + "recordingData": "Datos de grabación", + "save": "Guardar", + "selectOrCreate": "Selecciona una plantilla para editar o crea una nueva", + "setDefault": "Establecer como plantilla predeterminada", + "tabTitle": "Exportación", + "template": "Plantilla", + "templateDescription": "Descripción", + "templateName": "Nombre de la plantilla", + "title": "Plantillas de exportación", + "viewGuide": "Ver guía de plantillas" + }, + "fileSize": { + "bytes": "{{count}} B", + "gigabytes": "{{count}} GB", + "kilobytes": "{{count}} KB", + "megabytes": "{{count}} MB" + }, + "folderManagement": { + "allFolders": "Todas las carpetas", + "asrDefaults": "Valores ASR predeterminados", + "autoShareOnApply": "Compartir automáticamente con miembros del grupo", + "autoShareOnApplyHelp": "Compartir grabaciones automáticamente con todos los miembros del grupo al añadirlas a esta carpeta", + "confirmDelete": "¿Estás seguro de que quieres eliminar esta carpeta? Las grabaciones se eliminarán de la carpeta pero no se borrarán.", + "createFolder": "Crear carpeta", + "customPrompt": "Prompt personalizado", + "defaultLanguage": "Idioma predeterminado", + "deleteFolder": "Eliminar carpeta", + "description": "Organiza tus grabaciones en carpetas. A diferencia de las etiquetas, una grabación solo puede pertenecer a una carpeta. Los prompts de carpeta se aplican antes que los del usuario pero después de los de etiqueta.", + "editFolder": "Editar carpeta", + "filterByFolder": "Filtrar por carpeta", + "folderColor": "Color de carpeta", + "folderName": "Nombre de carpeta", + "groupSettings": "Configuración de grupo", + "maxSpeakers": "Máx. hablantes", + "minSpeakers": "Mín. hablantes", + "moveToFolder": "Mover a carpeta", + "namingTemplate": "Plantilla de nombrado", + "noFolder": "Sin carpeta", + "noFolders": "Aún no se han creado carpetas", + "noFoldersDescription": "Crea tu primera carpeta para organizar tus grabaciones", + "protectFromDeletion": "Proteger contra eliminación", + "protectFromDeletionHelp": "Proteger las grabaciones en esta carpeta contra la eliminación automática", + "recordings": "grabaciones", + "removeFromFolder": "Quitar de carpeta", + "retentionDays": "Días de retención", + "retentionDaysHelp": "Las grabaciones en esta carpeta se eliminarán después de estos días. Dejar vacío para usar la retención global.", + "retentionSettings": "Configuración de retención", + "selectNamingTemplate": "Seleccionar plantilla de nombrado...", + "shareWithGroupLead": "Compartir con administradores del grupo", + "shareWithGroupLeadHelp": "Compartir grabaciones con administradores del grupo al añadirlas a esta carpeta", + "title": "Gestión de carpetas" + }, + "form": { + "auto": "Auto", + "autoDetect": "Detección automática", + "dateFrom": "Desde", + "dateTo": "Hasta", + "enterNotesMarkdown": "Ingrese notas en formato Markdown...", + "enterSummaryMarkdown": "Ingrese resumen en formato Markdown...", + "folder": "Folder", + "hotwords": "Hotwords", + "hotwordsHelp": "Comma-separated words to improve recognition of domain-specific terms", + "hotwordsPlaceholder": "e.g., Speakr, CTranslate2, PyAnnote", + "initialPrompt": "Initial Prompt", + "initialPromptHelp": "Context to steer the transcription model's style and vocabulary", + "initialPromptPlaceholder": "e.g., This is a meeting about AI transcription tools.", + "language": "Idioma", + "maxSpeakers": "Hablantes Máximos", + "meetingDate": "Fecha de Reunión", + "minSpeakers": "Hablantes Mínimos", + "minutes": "Minutos", + "notes": "Notas", + "notesPlaceholder": "Escriba sus notas en formato Markdown...", + "optional": "Opcional", + "participantNamePlaceholder": "Participant name...", + "participants": "Participantes", + "placeholderAuto": "Auto", + "placeholderCharacterLimit": "Ingrese límite de caracteres (ej. 30000)", + "placeholderMinutes": "Minutos", + "placeholderOptional": "Opcional", + "placeholderSeconds": "Segundos", + "placeholderSizeMB": "Ingrese tamaño en MB", + "searchSpeakers": "Buscar hablantes...", + "searchTags": "Buscar etiquetas...", + "seconds": "Segundos", + "shareNotes": "Compartir Notas", + "shareSummary": "Compartir Resumen", + "shareableLink": "Enlace Compartible", + "summaryPromptPlaceholder": "Ingrese el prompt predeterminado de resumen...", + "title": "Título", + "transcriptionLanguage": "Transcription Language", + "yourFullName": "Su nombre completo" + }, + "groups": { + "addMembers": "Añadir miembros...", + "autoShare": "Compartir automáticamente", + "autoShareNote": "Nota: Si ambos están habilitados, todos los miembros del equipo tendrán acceso. Si solo \"administradores del equipo\" está habilitado, solo los líderes del equipo tendrán acceso.", + "autoShareTeam": "Compartir automáticamente grabaciones con todos los miembros del equipo cuando se aplique esta etiqueta", + "autoSharesWithTeam": "Comparte automáticamente con todos los miembros del equipo", + "confirmDelete": "¿Estás seguro de que quieres eliminar este equipo? Esta acción no se puede deshacer.", + "createTeam": "Crear Equipo", + "createTeamTag": "Crear Nueva Etiqueta de Equipo", + "dayRetention": "días de retención", + "deleteTeam": "Eliminar Equipo", + "deletionExempt": "Exento de eliminación", + "deletionExemptHelp": "Las grabaciones con esta etiqueta estarán exentas de eliminación automática, incluso si exceden el período de retención.", + "editTeam": "Editar Equipo", + "editTeamTag": "Editar Etiqueta de Equipo", + "globalRetention": "Retención global", + "members": "Miembros", + "noMembers": "No hay miembros en este equipo", + "noTeamTags": "Aún no se han creado etiquetas de equipo", + "noTeams": "Aún no se han creado equipos", + "retentionHelp": "Las grabaciones con esta etiqueta serán eliminadas después de estos días. Dejar vacío para usar retención global ({{days}} días).", + "retentionPeriod": "Período de Retención (días)", + "retentionPlaceholder": "Dejar vacío para usar retención global", + "searchUsers": "Buscar usuarios...", + "selectTeamLead": "Seleccionar líder del equipo...", + "shareWithAdmins": "Compartir grabaciones con administradores del equipo cuando se aplique esta etiqueta", + "sharesWithAdminsOnly": "Comparte solo con administradores del equipo", + "syncComplete": "Compartidos del equipo sincronizados exitosamente", + "syncTeamShares": "Sincronizar Compartidos del Equipo", + "syncTeamSharesDescription": "Esto compartirá retroactivamente todas las grabaciones con etiquetas de equipo con los miembros apropiados según la configuración de compartición de la etiqueta.", + "teamLead": "Líder del Equipo", + "teamName": "Nombre del Equipo", + "teamNamePlaceholder": "Ingrese nombre del equipo", + "teamTags": "Etiquetas del Equipo", + "title": "Gestión de Grupos", + "updateTeam": "Actualizar Equipo" + }, + "help": { + "actions": "Acciones", + "activeFilters": "Filtros activos", + "addSegmentBelow": "Añadir segmento debajo", + "advancedAsrOptions": "Opciones ASR Avanzadas", + "allRecordingsLoaded": "Todas las grabaciones cargadas", + "allTagsSelected": "All tags selected", + "appliedSuggestedNames": "{{count}} nombre sugerido aplicado", + "appliedSuggestedNamesPlural": "{{count}} nombres sugeridos aplicados", + "applySuggested": "Aplicar sugeridos", + "applySuggestedMobile": "Sugerir", + "approachingLimit": "Acercándose al límite de {{limit}}MB", + "askAboutTranscription": "Haz preguntas sobre esta transcripción", + "audioDeletedDescription": "El archivo de audio de esta grabación ha sido eliminado, pero la transcripción sigue disponible.", + "audioDeletedMessage": "El archivo de audio ha sido archivado y ya no está disponible para reproducción.", + "audioDeletedTitle": "Archivo de audio eliminado", + "audioPlayer": "Reproductor de Audio", + "autoIdentify": "Identificar Automáticamente", + "autoIdentifyMobile": "Auto", + "bothAudioDesc": "Graba tu voz + participantes de reunión (recomendado para reuniones en línea)", + "clearFilters": "limpiar filtros", + "clickToAddNotes": "Haz clic para añadir notas...", + "colorRepeats": "Color se repite desde el hablante {{number}}", + "completedFiles": "Archivos Completados", + "confirmReprocessingTitle": "Confirmar Reprocesamiento", + "copyMessage": "Copiar mensaje", + "createFolders": "Create folders", + "createPublicLink": "Crear un enlace público para compartir esta grabación. Compartir solo está disponible en conexiones seguras (HTTPS).", + "createTags": "Crear etiquetas", + "defaultHotwordsHelp": "Comma-separated words or phrases that the transcription model should prioritize recognizing (brand names, acronyms, technical terms).", + "defaultInitialPromptHelp": "Context to steer the transcription model's style and vocabulary. Describe the topic or expected content of your recordings.", + "deleteSegment": "Eliminar segmento", + "discard": "Descartar", + "dragToReorder": "Drag to reorder", + "endTime": "Fin", + "enterNameFor": "Ingresa nombre para", + "enterSpeakerName": "Ingrese nombre del orador...", + "entireScreen": "Pantalla Completa", + "errorChangingSpeaker": "Error al cambiar hablante", + "errorOpeningTextEditor": "Error al abrir el editor de texto", + "errorSavingText": "Error al guardar texto", + "estimatedSize": "Tamaño estimado", + "firstTagAsrSettings": "First tag's ASR settings will be applied:", + "firstTagDefaultsApplied": "First tag's defaults applied", + "folderHasCustomPrompt": "This folder has a custom summary prompt", + "generatingSummary": "Generando resumen...", + "groups": "grupos", + "howToRecordSystemAudio": "Cómo Grabar Audio del Sistema", + "identifyAllSpeakers": "Identificar todos los hablantes", + "identifying": "Identificando...", + "importantNote": "Nota importante", + "internalSharingDesc": "Compartir con usuarios específicos de su organización", + "lines": "{{count}} líneas", + "loadingMore": "Cargando más grabaciones...", + "loadingRecordings": "Cargando grabaciones...", + "me": "Yo", + "microphoneDesc": "Graba solo tu voz", + "modelReasoning": "Razonamiento del Modelo", + "moreSpeakersThanColors": "Más hablantes que colores disponibles", + "navigate": "Navegar", + "noDateSet": "Sin fecha establecida", + "noMatchingTags": "No matching tags", + "noParticipants": "Sin participantes", + "noRecordingSelected": "No se seleccionó ninguna grabación.", + "noSpeakersIdentified": "No se pudieron identificar hablantes a partir del contexto.", + "noSuggestionsToApply": "No hay sugerencias para aplicar", + "noTagsCreated": "Aún no se han creado etiquetas.", + "of": "de", + "playFromHere": "Reproducir desde aquí", + "pleaseEnterSpeakerName": "Por favor ingresa un nombre de hablante", + "processingTime": "Tiempo de procesamiento", + "processingTimeDescription": "Esto puede tardar unos minutos en completarse. Puedes continuar usando la aplicación mientras se procesa.", + "processingTranscription": "Procesando transcripción...", + "publicLinkDesc": "Cualquiera con este enlace puede acceder a la grabación", + "recordSystemSteps1": "Haz clic en \"Grabar Audio del Sistema\" o \"Grabar Ambos\".", + "recordSystemSteps2": "En la ventana emergente, elige", + "recordSystemSteps3": "Asegúrate de marcar la casilla que dice", + "recordingFinished": "Grabación terminada", + "recordingInProgress": "Grabación en progreso...", + "regenerateSummaryAfterNames": "Regenerar resumen después de actualizar nombres", + "saved": "¡Guardado!", + "savingProgress": "Guardando...", + "selectedTagsCustomPrompts": "Selected tags include custom summary prompts", + "sentence": "Oración", + "shareSystemAudio": "Compartir audio del sistema", + "shareTabAudio": "Compartir audio de pestaña", + "sharedOn": "Compartido el", + "sharingWindowNoAudio": "Compartir una \"Ventana\" no capturará audio.", + "speakerAdded": "Hablante añadido correctamente", + "speakerCount": "Hablante", + "speakerName": "Nombre del hablante", + "speakerNamesUpdated": "¡Nombres de hablantes actualizados correctamente!", + "speakers": "Hablantes", + "speakersIdentified": "{{count}} hablante identificado correctamente!", + "speakersIdentifiedPlural": "{{count}} hablantes identificados correctamente!", + "speakersUpdatedSaveToApply": "¡Hablantes actualizados! Guarda la transcripción para aplicar los cambios.", + "specificBrowserTab": "pestaña específica del navegador", + "startTime": "Inicio", + "startingAutoIdentification": "Iniciando identificación automática de hablantes...", + "summaryGenerationFailed": "Error al generar el resumen", + "summaryGenerationTimedOut": "La generación del resumen expiró", + "summaryRegenerationStarted": "Regeneración del resumen iniciada", + "summaryUpdated": "¡Resumen actualizado!", + "systemAudioDesc": "Graba participantes de reunión y sonidos del sistema", + "tagManagement": "Gestión de Etiquetas", + "thisActionCannotBeUndone": "Esta acción no se puede deshacer.", + "toCaptureAudioFromMeetings": "Para capturar audio de reuniones u otras aplicaciones, debes compartir tu pantalla o una pestaña del navegador.", + "toOrganizeRecordings": "to organize your recordings", + "transcriptUpdated": "¡Transcripción actualizada correctamente!", + "troubleshooting": "Solución de Problemas", + "tryAdjustingSearch": "Intenta ajustar tu búsqueda o", + "unsupportedBrowser": "Navegador No Soportado", + "untitled": "Grabación Sin Título", + "uploadRecordingNotes": "Subir Grabación y Notas", + "whatWillHappen": "¿Qué pasará?", + "whyNotWorking": "¿Por qué no funciona?", + "youHaveXSpeakers": "Tiene {{count}} oradores, pero solo hay 16 colores únicos disponibles. Los colores se repetirán después del decimosexto orador." + }, + "incognito": { + "audioNotStored": "Audio not stored in incognito mode", + "discardConfirm": "This will permanently discard your incognito recording. Continue?", + "mode": "Incognito Mode", + "notSavedToAccount": "Not saved to account", + "oneFileAtATime": "Incognito mode supports one file at a time", + "processInIncognito": "Process in Incognito", + "processWithoutSaving": "Process without saving", + "processing": "Processing...", + "processingComplete": "Processing complete!", + "processingInProgress": "Processing in incognito mode...", + "recordingDiscarded": "Incognito recording discarded", + "recordingProcessed": "Incognito recording processed - data will be lost when tab closes", + "recordingReady": "Incognito recording ready!", + "recordingTitle": "Incognito Recording", + "selectExactlyOneFile": "Select exactly 1 file", + "sessionOnly": "Session only", + "uploadingFile": "Uploading file for incognito processing..." + }, + "inquire": { + "activeFilters": "Filtros Activos:", + "askQuestions": "Haga Preguntas Sobre Sus Transcripciones", + "clearAll": "Limpiar Todo", + "dateRange": "Rango de Fechas", + "dateRangeActive": "Rango de fechas activo", + "exampleQuestion1": "\"¿Qué elementos de acción se discutieron?\"", + "exampleQuestion2": "\"¿Cuándo decidimos cambiar la cronología?\"", + "exampleQuestion3": "\"¿Qué preocupaciones se plantearon sobre el presupuesto?\"", + "exampleQuestion4": "\"¿Quién fue responsable de las tareas de marketing?\"", + "exampleQuestions": "Preguntas de Ejemplo:", + "filters": "Filtros", + "filtersActive": "Filtros activos", + "from": "Desde", + "noSpeakerData": "No hay datos de oradores disponibles", + "placeholder": "Haga preguntas sobre sus transcripciones filtradas...", + "selectFilters": "Seleccione filtros a la izquierda para reducir sus transcripciones, luego haga preguntas para obtener información de sus grabaciones.", + "sendHint": "Presione Enter para enviar • Ctrl+Enter para nueva línea", + "speakerRequirement": "La identificación de oradores requiere grabaciones con múltiples oradores", + "speakers": "Oradores", + "speakersCount": "oradores", + "tags": "Etiquetas", + "tagsCount": "etiquetas", + "title": "Consultar", + "to": "Hasta" + }, + "languages": { + "ar": "Árabe", + "de": "Alemán", + "en": "Inglés", + "es": "Español", + "fr": "Francés", + "hi": "Hindi", + "it": "Italiano", + "ja": "Japonés", + "ko": "Coreano", + "nl": "Holandés", + "pt": "Portugués", + "ru": "Ruso", + "zh": "Chino" + }, + "manageSpeakersModal": { + "created": "Creado", + "description": "Gestiona tus oradores guardados. Estos se guardan automáticamente cuando usas nombres de oradores en tus grabaciones.", + "failedToLoad": "Error al cargar oradores", + "lastUsed": "Último uso", + "loadingSpeakers": "Cargando oradores...", + "noSpeakersYet": "Aún no hay oradores guardados", + "speakersSaved": "{{count}} oradores guardados", + "speakersWillAppear": "Los oradores aparecerán aquí cuando uses nombres de oradores en tus grabaciones", + "times": "veces", + "title": "Gestionar Oradores", + "used": "Usado" + }, + "messages": { + "colorSchemeApplied": "Color scheme applied", + "colorSchemeReset": "Color scheme reset to default", + "copiedSuccessfully": "Copied to clipboard!", + "copiedToClipboard": "Copiado al portapapeles", + "copyFailed": "Failed to copy", + "copyNotSupported": "Copy failed. Your browser may not support this feature.", + "downloadStarted": "Descarga iniciada", + "errorRecoveringRecording": "Error recovering recording", + "eventDownloadFailed": "Failed to download event", + "eventDownloadSuccess": "Event \"{{title}}\" downloaded. Open the file to add to your calendar.", + "eventsExportFailed": "Failed to export events", + "eventsExportSuccess": "Exported {{count}} events", + "failedToDeleteJob": "Failed to delete job", + "failedToRecoverRecording": "Failed to recover recording", + "failedToRetryJob": "Failed to retry job", + "failedToSave": "Failed to save: {{error}}", + "failedToSaveParticipants": "Failed to save participants", + "followPlayerDisabled": "Follow player mode disabled", + "followPlayerEnabled": "Follow player mode enabled", + "invalidEventData": "Invalid event data", + "jobQueuedForRetry": "Job queued for retry", + "noEventsToExport": "No events to export", + "noNotesAvailableDownload": "No notes available to download.", + "noNotesToCopy": "No notes available to copy.", + "noPermissionToEdit": "You do not have permission to edit this recording", + "noSummaryToCopy": "No summary available to copy.", + "noSummaryToDownload": "No summary available to download.", + "noTranscriptionToCopy": "No transcription available to copy.", + "noTranscriptionToDownload": "No transcription available to download.", + "notesCopied": "Notes copied to clipboard!", + "notesDownloadFailed": "Failed to download notes", + "notesDownloadSuccess": "Notes downloaded successfully!", + "notesUpdated": "Notas actualizadas exitosamente", + "passwordChanged": "Contraseña cambiada exitosamente", + "profileUpdated": "Perfil actualizado exitosamente", + "recordingDeleted": "Grabación eliminada exitosamente", + "recordingDiscarded": "Recording discarded", + "recordingRecovered": "Recording recovered successfully", + "recordingSaved": "Grabación guardada exitosamente", + "saveParticipantsFailed": "Save failed: {{error}}", + "settingsSaved": "Configuración guardada exitosamente", + "summaryCopied": "Summary copied to clipboard!", + "summaryDownloadFailed": "Failed to download summary", + "summaryDownloadSuccess": "Summary downloaded successfully!", + "summaryGenerated": "Resumen generado exitosamente", + "tagAdded": "Etiqueta añadida exitosamente", + "tagRemoved": "Etiqueta eliminada exitosamente", + "transcriptDownloadFailed": "Failed to download transcript", + "transcriptDownloadSuccess": "Transcript downloaded successfully!", + "transcriptionCopied": "Transcription copied to clipboard!", + "transcriptionUpdated": "Transcripción actualizada exitosamente" + }, + "metadata": { + "cancelEdit": "Cancelar", + "createdAt": "Creado", + "duration": "Duración", + "editMetadata": "Editar Metadatos", + "fileName": "Nombre del Archivo", + "fileSize": "Tamaño del Archivo", + "language": "Idioma", + "meetingDate": "Fecha de Reunión", + "processingTime": "Tiempo de Procesamiento", + "saveMetadata": "Guardar", + "status": "Estado", + "title": "Metadatos", + "updatedAt": "Actualizado", + "wordCount": "Recuento de Palabras" + }, + "modal": { + "addSpeaker": "Agregar Nuevo Orador", + "colorScheme": "Esquema de Color", + "deleteRecording": "Eliminar Grabación", + "editAsrTranscription": "Editar Transcripción ASR", + "editParticipants": "Editar Participantes", + "editRecording": "Editar Grabación", + "editSpeakers": "Editar Oradores", + "editTags": "Editar Etiquetas de Grabación", + "editTranscription": "Editar Transcripción", + "identifySpeakers": "Identificar Hablantes", + "recordingNotice": "Aviso de Grabación", + "reprocessSummary": "Reprocesar Resumen", + "reprocessTranscription": "Reprocesar Transcripción", + "resetStatus": "¿Restablecer Estado de Grabación?", + "shareRecording": "Compartir Grabación", + "sharedTranscripts": "Mis Transcripciones Compartidas", + "systemAudioHelp": "Ayuda de Audio del Sistema", + "uploadFiles": "Subir Archivos", + "uploadNotice": "Aviso de Carga" + }, + "namingTemplates": { + "addPattern": "Añadir Patrón", + "availableTemplates": "Plantillas Disponibles", + "availableVars": "Variables Disponibles", + "cancel": "Cancelar", + "createDefaults": "Crear Plantillas Predeterminadas", + "createNew": "Crear Plantilla", + "customVarsHint": "Define patrones regex para extraer variables personalizadas de nombres de archivo.", + "delete": "Eliminar", + "description": "Define cómo se generan los títulos de las grabaciones a partir de nombres de archivo y contenido de transcripción.", + "descriptionLabel": "Descripción", + "noDefault": "Sin predeterminado (solo título IA)", + "regexHint": "Extrae datos de nombres de archivo. Usa grupos de captura () para especificar la coincidencia.", + "regexPatterns": "Patrones Regex (Opcional)", + "result": "Resultado:", + "save": "Guardar", + "selectOrCreate": "Selecciona una plantilla para editar o crea una nueva", + "tabTitle": "Nombrado", + "template": "Plantilla", + "templateName": "Nombre de Plantilla", + "test": "Probar", + "testTemplate": "Probar Plantilla", + "title": "Plantillas de Nombrado", + "userDefault": "Plantilla Predeterminada", + "userDefaultHint": "Se aplica cuando ninguna etiqueta tiene una plantilla de nombrado." + }, + "nav": { + "account": "Cuenta", + "accountSettings": "Configuración de Cuenta", + "admin": "Administración", + "adminDashboard": "Panel de Administración", + "darkMode": "Modo Oscuro", + "groupManagement": "Gestión de Grupos", + "home": "Inicio", + "language": "Idioma", + "lightMode": "Modo Claro", + "newRecording": "Nueva Grabación", + "recording": "Grabación", + "settings": "Configuración", + "signOut": "Cerrar Sesión", + "teamManagement": "Gestión de Grupos", + "upload": "Subir", + "userProfile": "Perfil de Usuario" + }, + "notes": { + "cancelEdit": "Cancelar Edición", + "characterCount": "{{count}} carácter", + "characterCountPlural": "{{count}} caracteres", + "editNotes": "Editar Notas", + "lastUpdated": "Última actualización", + "placeholder": "Añade tus notas aquí...", + "saveNotes": "Guardar Notas", + "title": "Notas" + }, + "pwa": { + "installApp": "Instalar App", + "installed": "Instalado exitosamente", + "installing": "Instalando...", + "notificationPermissionDenied": "Permiso de notificación denegado", + "notificationsEnabled": "Notificaciones habilitadas", + "offline": "Estás desconectado", + "screenAwake": "La pantalla permanecerá activa durante la grabación", + "screenAwakeFailed": "No se pudo mantener la pantalla activa", + "updateAvailable": "Actualización disponible" + }, + "recording": { + "acceptDisclaimer": "Acepto", + "cancelRecording": "Cancelar", + "discardRecovery": "Descartar", + "disclaimer": "Aviso de Grabación", + "duration": "Duración", + "micPlusSys": "Mic + Sys", + "microphone": "Micrófono", + "microphoneAndSystem": "Micrófono + Sistema", + "microphonePermissionDenied": "Permiso del micrófono denegado", + "modeBoth": "Micrófono + Sistema", + "modeMicrophone": "Micrófono", + "modeSystem": "Audio del sistema", + "notes": "Notas", + "notesPlaceholder": "Añade notas sobre esta grabación...", + "pauseRecording": "Pausar", + "recordingFailed": "La grabación falló", + "recordingInProgress": "Grabación en progreso...", + "recordingMode": "Modo de grabación", + "recordingSize": "Tamaño Estimado", + "recordingStopped": "Grabación detenida", + "recordingTime": "Tiempo de Grabación", + "recoveryDescription": "Encontramos una grabación sin terminar de una sesión anterior. ¿Deseas restaurarla?", + "recoveryFound": "Grabación no guardada detectada", + "recoveryTitle": "Recuperar grabación", + "restoreRecording": "Restaurar", + "resumeRecording": "Reanudar", + "saveRecording": "Guardar Grabación", + "size": "Tamaño", + "startRecording": "Iniciar Grabación", + "startedAt": "Iniciado el", + "stopRecording": "Detener Grabación", + "systemAudio": "Audio del Sistema", + "systemAudioNotSupported": "La grabación de audio del sistema no es compatible con este navegador", + "title": "Grabación de Audio" + }, + "reprocessModal": { + "audioReTranscribedFromScratch": "El audio será re-transcrito desde cero. Esto también regenerará el título y resumen basado en la nueva transcripción.", + "audioReTranscribedWithAsr": "El audio será re-transcrito usando el endpoint ASR. Esto incluye diarización y regenerará el título y resumen.", + "manualEditsOverwritten": "Cualquier edición manual de la transcripción, título o resumen será sobrescrita.", + "manualEditsOverwrittenSummary": "Cualquier edición manual del título o resumen será sobrescrita.", + "newTitleAndSummary": "Se generará un nuevo título y resumen basado en la transcripción existente." + }, + "settings": { + "apiKeys": "Claves API", + "appearance": "Apariencia", + "changePassword": "Cambiar Contraseña", + "dataExport": "Exportación de Datos", + "deleteAccount": "Eliminar Cuenta", + "integrations": "Integraciones", + "language": "Idioma", + "notifications": "Notificaciones", + "preferences": "Preferencias", + "privacy": "Privacidad", + "profile": "Perfil", + "security": "Seguridad", + "theme": "Tema", + "title": "Configuración", + "twoFactorAuth": "Autenticación de Dos Factores" + }, + "sharedTranscripts": { + "noSharedTranscripts": "Aún no has compartido ninguna transcripción.", + "shareNotes": "Compartir Notas", + "shareSummary": "Compartir Resumen", + "sharedOn": "Compartido el" + }, + "sharedTranscriptsPage": { + "noSharedTranscripts": "Aún no has compartido ninguna transcripción." + }, + "sharing": { + "canEdit": "Puede editar", + "canReshare": "Puede recompartir", + "internalSharing": "Compartir Interno", + "notSharedYet": "Aún no compartido", + "publicBadge": "Público", + "publicLink": "Enlace Público", + "publicLinks": "enlace(s) público(s)", + "publicLinksGenerated": "enlace(s) público(s) generado(s)", + "searchUsers": "Buscar usuarios...", + "sharedBadge": "Compartido", + "sharedBy": "Compartido por", + "sharedWith": "Compartido con", + "teamBadge": "Equipo", + "teamRecording": "Grabación del equipo", + "unknown": "Desconocido", + "users": "usuario(s)" + }, + "sidebar": { + "advancedSearch": "Búsqueda Avanzada", + "archived": "Archivado", + "archivedRecordings": "Grabaciones Archivadas", + "dateRange": "Rango de Fechas", + "filters": "Filtros", + "highlighted": "Destacado", + "inbox": "Bandeja de Entrada", + "lastMonth": "Mes Pasado", + "lastWeek": "Semana Pasada", + "loadMore": "Cargar Más", + "markAsRead": "Marcar como leído", + "moveToInbox": "Mover a bandeja de entrada", + "noRecordings": "No se encontraron grabaciones", + "older": "Más Antiguo", + "removeFromHighlighted": "Quitar de destacados", + "searchRecordings": "Buscar grabaciones...", + "sharedWithMe": "Compartido Conmigo", + "sortBy": "Ordenar Por", + "sortByDate": "Fecha de Creación", + "sortByMeetingDate": "Fecha de Reunión", + "starred": "Starred", + "tags": "Etiquetas", + "thisMonth": "Este Mes", + "thisWeek": "Esta Semana", + "today": "Hoy", + "totalRecordings": "{{count}} grabación", + "totalRecordingsPlural": "{{count}} grabaciones", + "upcoming": "Próximo", + "yesterday": "Ayer" + }, + "speakers": { + "filterBySpeaker": "Filtrar por orador", + "noMatchingSpeakers": "No hay oradores coincidentes", + "searchSpeakers": "Buscar..." + }, + "speakersManagement": { + "added": "Añadido", + "confidence": "Confianza", + "confidenceHigh": "alta", + "confidenceLow": "baja", + "confidenceMedium": "media", + "created": "Creado", + "description": "Gestiona tus hablantes guardados. Se guardan automáticamente cuando usas nombres de hablantes en tus grabaciones.", + "failedToLoad": "Error al cargar hablantes", + "failedToLoadSnippets": "Error al cargar fragmentos", + "keepThisSpeaker": "Mantener este hablante (los demás se fusionarán en él):", + "last": "Último", + "lastUsed": "Último uso", + "loadingSpeakers": "Cargando hablantes...", + "match": "coincidencia", + "mergeDescription": "Combinar varios perfiles de hablante en uno. Todos los embeddings, fragmentos y datos de uso se fusionarán.", + "mergeFailed": "Error al fusionar hablantes", + "mergeNSpeakers": "Fusionar {{count}} hablantes", + "mergeSpeakers": "Fusionar hablantes", + "mergeSuccess": "Hablantes fusionados correctamente", + "noSnippetsAvailable": "Sin fragmentos disponibles", + "noSpeakersYet": "Aún no hay hablantes guardados", + "sample": "muestra", + "samples": "muestras", + "selectToMerge": "Seleccionar 2+ para fusionar", + "speakersToMerge": "Hablantes a fusionar:", + "speakersWillAppear": "Los hablantes aparecerán aquí cuando uses nombres de hablantes en tus grabaciones", + "targetWillReceive": "El hablante seleccionado recibirá todos los datos de voz y fragmentos de los demás.", + "time": "vez", + "times": "veces", + "totalSpeakers": "hablantes guardados", + "used": "Usado", + "usedTimes": "Usado", + "viewSnippets": "Ver fragmentos", + "voiceMatchSuggestions": "Sugerencias de coincidencia de voz", + "voiceProfile": "Perfil de voz" + }, + "status": { + "completed": "Completado", + "failed": "Falló", + "processing": "Procesando", + "queued": "En cola", + "stuck": "Restablecer procesamiento bloqueado", + "summarizing": "Resumiendo", + "transcribing": "Transcribiendo", + "uploading": "Subiendo" + }, + "summary": { + "actionItems": "Elementos de Acción", + "cancelEdit": "Cancelar Edición", + "decisions": "Decisiones", + "editSummary": "Editar Resumen", + "generateSummary": "Generar Resumen", + "keyPoints": "Puntos Clave", + "noSummary": "No hay resumen disponible", + "participants": "Participantes", + "regenerateSummary": "Regenerar Resumen", + "saveSummary": "Guardar Resumen", + "summaryFailed": "La generación del resumen falló", + "summaryInProgress": "Generación de resumen en progreso...", + "title": "Resumen" + }, + "tagManagement": { + "asrDefaults": "Configuraciones ASR Predeterminadas", + "createTag": "Crear Etiqueta", + "customPrompt": "Prompt Personalizado", + "description": "Organiza tus grabaciones con etiquetas personalizadas. Cada etiqueta puede tener su propio prompt de resumen y configuraciones ASR predeterminadas.", + "maxSpeakers": "Máx", + "minSpeakers": "Mín", + "noTags": "Aún no has creado ninguna etiqueta." + }, + "tags": { + "addTag": "Añadir Etiqueta", + "clearTagFilter": "Limpiar filtro", + "createTag": "Crear Etiqueta", + "currentTags": "Etiquetas Actuales", + "filterByTag": "Filtrar por etiqueta", + "manageAllTags": "Gestionar Todas las Etiquetas", + "noAvailableTags": "No hay etiquetas disponibles", + "noMatchingTags": "No hay etiquetas coincidentes", + "noTags": "Sin etiquetas", + "removeTag": "Eliminar Etiqueta", + "searchTags": "Buscar...", + "tagColor": "Color de Etiqueta", + "tagName": "Nombre de Etiqueta", + "title": "Etiquetas" + }, + "tagsModal": { + "addTags": "Añadir Etiquetas", + "currentTags": "Etiquetas Actuales", + "done": "Listo", + "noTagsAssigned": "No hay etiquetas asignadas a esta grabación", + "searchTags": "Buscar etiquetas..." + }, + "time": { + "dayAgo": "Hace 1 día", + "daysAgo": "Hace {{count}} días", + "hourAgo": "Hace 1 hora", + "hoursAgo": "Hace {{count}} horas", + "justNow": "Justo ahora", + "minuteAgo": "Hace 1 minuto", + "minutesAgo": "Hace {{count}} minutos", + "monthAgo": "Hace 1 mes", + "monthsAgo": "Hace {{count}} meses", + "weekAgo": "Hace 1 semana", + "weeksAgo": "Hace {{count}} semanas", + "yearAgo": "Hace 1 año", + "yearsAgo": "Hace {{count}} años" + }, + "tooltips": { + "changeSpeaker": "Cambiar orador", + "clearChat": "Limpiar chat", + "copyTranscript": "Copiar transcripción", + "deleteTeam": "Eliminar Grupo", + "doubleClickToEdit": "Doble clic para editar", + "downloadTranscriptWithTemplate": "Descargar transcripción con plantilla", + "editTeam": "Editar Grupo", + "editText": "Editar texto", + "editTitle": "Editar título", + "editTranscript": "Editar transcripción", + "exitFullscreen": "Exit fullscreen", + "expand": "Expandir", + "followPlayerDisabled": "Activar desplazamiento automático - la transcripción sigue la reproducción de audio", + "followPlayerEnabled": "Desactivar desplazamiento automático - la transcripción permanece en su lugar", + "fullscreenVideo": "Fullscreen video", + "grantPublicSharing": "Otorgar permiso para compartir públicamente", + "hideVideo": "Hide video", + "highlight": "Resaltar", + "makeAdmin": "Hacer Administrador", + "manageMembers": "Administrar Miembros", + "manageTeamTags": "Administrar Etiquetas de Grupo", + "markAsRead": "Marcar como leído", + "maximizeChat": "Maximizar chat", + "minimize": "Minimizar", + "moveToInbox": "Mover a la bandeja de entrada", + "mute": "Silenciar", + "pause": "Pausa", + "play": "Reproducir", + "playbackSpeed": "Velocidad de reproducción", + "removeAdmin": "Remover Administrador", + "removeFromQueue": "Eliminar de la cola", + "removeFromTeam": "Eliminar del equipo", + "removeHighlight": "Quitar resaltado", + "reprocessTranscription": "Reprocesar transcripción", + "reprocessWithAsr": "Reprocesar con ASR", + "restoreChat": "Restaurar chat", + "revokePublicSharing": "Revocar permiso para compartir públicamente", + "shareWithUsers": "Compartir con usuarios", + "showVideo": "Show video", + "switchToDarkMode": "Cambiar a Modo Oscuro", + "switchToLightMode": "Cambiar a Modo Claro", + "unmute": "Activar sonido" + }, + "transcriptTemplates": { + "availableTemplates": "Plantillas Disponibles", + "availableVars": "Variables Disponibles", + "cancel": "Cancelar", + "chooseTemplate": "Elegir plantilla...", + "createDefaults": "Crear Plantillas Predeterminadas", + "createNew": "Crear Plantilla", + "default": "Predeterminado", + "delete": "Eliminar", + "description": "Personaliza cómo se formatean las transcripciones para descarga y exportación.", + "downloadDefault": "Descargar predeterminado", + "downloadWithoutTemplate": "Descargar sin plantilla", + "filters": "Filtros: |upper para mayúsculas, |srt para formato de subtítulos", + "save": "Guardar", + "selectOrCreate": "Selecciona una plantilla para editar o crea una nueva", + "selectTemplate": "Seleccionar Plantilla", + "setDefault": "Establecer como plantilla predeterminada", + "tabTitle": "Transcripción", + "template": "Plantilla", + "templateName": "Nombre de Plantilla", + "title": "Plantillas de Transcripción", + "viewGuide": "Ver Guía de Plantillas" + }, + "transcription": { + "autoIdentifySpeakers": "Identificar Hablantes Automáticamente", + "bubble": "Burbuja", + "cancelEdit": "Cancelar Edición", + "copy": "Copiar", + "copyToClipboard": "Copiar al Portapapeles", + "download": "Descargar", + "downloadTranscript": "Descargar Transcripción", + "edit": "Editar", + "editSpeakers": "Editar Hablantes", + "editTranscription": "Editar Transcripción", + "highlightSearchResults": "Resaltar resultados de búsqueda", + "noTranscription": "No hay transcripción disponible", + "regenerateTranscription": "Regenerar Transcripción", + "saveTranscription": "Guardar Transcripción", + "searchInTranscript": "Buscar en la transcripción...", + "simple": "Simple", + "speaker": "Hablante {{number}}", + "speakerLabels": "Etiquetas de Hablante", + "title": "Transcripción", + "unknownSpeaker": "Hablante Desconocido" + }, + "upload": { + "chunking": "Los archivos grandes se dividirán automáticamente para su procesamiento", + "completed": "Completado", + "copies": "copias de este archivo", + "dropzone": "Arrastra y suelta archivos de audio aquí, o haz clic para explorar", + "duplicateDetected": "Este archivo parece ser un duplicado de \"{{existingName}}\" (subido el {{existingDate}})", + "duplicateFile": "Archivo duplicado", + "failed": "Falló", + "fileExceedsMaxSize": "File \"{{name}}\" exceeds the maximum size of {{size}} MB and was skipped.", + "fileRemovedFromQueue": "File removed from queue", + "filesToUpload": "Files to Upload", + "invalidFileType": "Invalid file type \"{{name}}\". Only audio files and video containers with audio (MP3, WAV, MP4, MOV, AVI, etc.) are accepted. File skipped.", + "maxFileSize": "Tamaño máximo de archivo", + "queued": "En cola", + "selectFiles": "Seleccionar Archivos", + "settingsApplyToAll": "Settings apply to all files in this session", + "summarizing": "Resumiendo...", + "supportedFormats": "Soporta MP3, WAV, M4A, MP4, MOV, AVI, AMR, y más", + "title": "Subir Audio", + "transcribing": "Transcribiendo...", + "untitled": "Grabación Sin Título", + "uploadNFiles": "Upload {{count}} File(s)", + "uploadProgress": "Progreso de Carga", + "videoRetained": "Video conservado para reproducción", + "willAutoSummarize": "Se resumirá automáticamente después de la transcripción" + }, + "uploadProgress": { + "title": "Progreso de Carga" + } +} \ No newline at end of file diff --git a/static/locales/fr.json b/static/locales/fr.json new file mode 100644 index 0000000..4cf797b --- /dev/null +++ b/static/locales/fr.json @@ -0,0 +1,1532 @@ +{ + "aboutPage": { + "aiSummarization": "Résumé par IA", + "aiSummarizationDesc": "Intégration OpenRouter et Ollama avec invites personnalisées", + "asrEnabled": "ASR Activé", + "asrEndpoint": "Point de Terminaison ASR", + "audioTranscription": "Transcription Audio", + "audioTranscriptionDesc": "API Whisper et support ASR personnalisé avec haute précision", + "backend": "Backend", + "database": "Base de Données", + "deployment": "Déploiement", + "dockerDescription": "Images Docker officielles", + "dockerHub": "Docker Hub", + "documentation": "Documentation", + "documentationDescription": "Guides de configuration et manuel utilisateur", + "endpoint": "Point de Terminaison", + "frontend": "Frontend", + "githubDescription": "Code source, problèmes et versions", + "githubRepository": "Référentiel GitHub", + "inquireMode": "Mode Enquête", + "inquireModeDesc": "Recherche sémantique dans tous vos enregistrements", + "interactiveChat": "Chat Interactif", + "interactiveChatDesc": "Discutez avec vos transcriptions en utilisant l'IA", + "keyFeatures": "Fonctionnalités Principales", + "largeLanguageModel": "Grand Modèle de Langage", + "model": "Modèle", + "projectDescription": "Transformez vos enregistrements audio en notes organisées et consultables avec des fonctionnalités de transcription, de résumé et de chat interactif pilotées par IA.", + "projectLinks": "Liens du Projet", + "sharingExport": "Partage et Exportation", + "sharingExportDesc": "Partagez des enregistrements et exportez vers divers formats", + "speakerDiarization": "Diarisation des Orateurs", + "speakerDiarizationDesc": "Identifie et étiquette automatiquement différents orateurs", + "speechRecognition": "Reconnaissance Vocale", + "systemConfiguration": "Configuration du Système", + "tagline": "Transcription Audio et Prise de Notes Pilotées par IA", + "technologyStack": "Pile Technologique", + "title": "À Propos", + "version": "Version", + "whisperApi": "API Whisper" + }, + "aboutPageDetails": { + "aiSummarizationDesc": "Intégration OpenRouter et Ollama avec invites personnalisées", + "asrEnabled": "ASR Activé", + "asrEndpoint": "Point de Terminaison ASR", + "audioTranscriptionDesc": "API Whisper et support ASR personnalisé avec haute précision", + "backend": "Backend", + "database": "Base de Données", + "deployment": "Déploiement", + "dockerDescription": "Images Docker officielles", + "documentationDescription": "Guides de configuration et manuel utilisateur", + "endpoint": "Point de Terminaison", + "frontend": "Frontend", + "githubDescription": "Code source, problèmes et versions", + "inquireModeDesc": "Recherche sémantique dans tous vos enregistrements", + "interactiveChatDesc": "Chattez avec vos transcriptions en utilisant l'IA", + "model": "Modèle", + "no": "Non", + "sharingExportDesc": "Partagez des enregistrements et exportez vers divers formats", + "speakerDiarizationDesc": "Identifier et étiqueter automatiquement les différents intervenants", + "whisperApi": "API Whisper", + "yes": "Oui" + }, + "account": { + "accountActions": "Actions du Compte", + "autoLabel": "Étiquetage automatique", + "autoSummarizationDisabled": "Résumé automatique désactivé par l'administrateur", + "autoSummarize": "Résumer automatiquement", + "changePassword": "Changer le Mot de Passe", + "chooseLanguageForInterface": "Choisissez la langue pour l'interface de l'application", + "companyOrganization": "Entreprise / Organisation", + "completedRecordings": "Terminés", + "defaultHotwords": "Mots-clés par défaut", + "defaultHotwordsPlaceholder": "ex., DictIA, CTranslate2, PyAnnote, SDRs", + "defaultInitialPrompt": "Invite initiale par défaut", + "defaultInitialPromptPlaceholder": "ex., C'est une réunion sur les outils de transcription IA. Les intervenants discutent de CTranslate2, PyAnnote et SDRs.", + "email": "E-mail", + "failedRecordings": "Échoués", + "fullName": "Nom Complet", + "goToRecordings": "Aller aux Enregistrements", + "interfaceLanguage": "Langue de l'Interface", + "jobTitle": "Titre du Poste", + "languageForSummaries": "Langue pour les titres, résumés et chat. Laisser vide pour le défaut (comportement par défaut de vos modèles choisis).", + "languagePreferences": "Préférences Linguistiques", + "leaveBlankForAutoDetect": "Laisser vide pour la détection automatique par le service de transcription", + "manageSpeakers": "Gérer les Orateurs", + "personalFolder": "Dossier Personnel (Non associé à un groupe)", + "personalInfo": "Informations Personnelles", + "personalTag": "Étiquette Personnelle (Non associée à un groupe)", + "preferredOutputLanguage": "Langue Préférée pour Chatbot et Résumés", + "processingRecordings": "En Traitement", + "saveAllPreferences": "Sauvegarder Toutes les Préférences", + "ssoLinkAccount": "Lier le compte {{provider}}", + "ssoLinked": "Lié", + "ssoNotLinked": "Non lié", + "ssoProvider": "Fournisseur", + "ssoSetPasswordFirst": "Pour dissocier l'authentification unique, vous devez d'abord définir un mot de passe.", + "ssoSubject": "Sujet :", + "ssoUnlinkAccount": "Dissocier le compte {{provider}}", + "ssoUnlinkConfirm": "Êtes-vous sûr de vouloir dissocier votre compte d'authentification unique ? Vous devrez utiliser votre mot de passe pour vous connecter.", + "statistics": "Statistiques du Compte", + "title": "Informations du Compte", + "totalRecordings": "Total d'Enregistrements", + "transcriptionHints": "Conseils de transcription", + "transcriptionHintsDesc": "Ces paramètres par défaut s'appliquent quand aucune étiquette ou dossier ne définit ses propres réglages. Ils améliorent la précision de la transcription pour votre contexte spécifique.", + "transcriptionLanguage": "Langue de Transcription", + "userDetails": "Détails de l'Utilisateur", + "username": "Nom d'Utilisateur" + }, + "accountTabs": { + "about": "À Propos", + "apiTokens": "Jetons API", + "customPrompts": "Invites Personnalisées", + "folderManagement": "Gestion des dossiers", + "help": "Aide", + "namingTemplates": "Nommage", + "promptOptions": "Options de Prompt", + "sharedTranscripts": "Transcriptions Partagées", + "speakersManagement": "Gestion des Locuteurs", + "tagManagement": "Gestion des Étiquettes", + "templates": "Modèles", + "transcriptTemplates": "Modèles de Transcription" + }, + "admin": { + "title": "Administration", + "userMenu": "Menu Utilisateur" + }, + "adminDashboard": { + "aboutInquireMode": "À Propos du Mode Enquête", + "actions": "ACTIONS", + "addNewUser": "Ajouter un Nouvel Utilisateur", + "addUser": "Ajouter un Utilisateur", + "additionalContext": "Contexte Supplémentaire", + "admin": "ADMIN", + "adminDefaultPrompt": "Invite par Défaut de l'Admin", + "adminDefaultPromptDesc": "L'invite configurée ci-dessus (affichée sur cette page)", + "adminUser": "Utilisateur Administrateur", + "allRecordingsProcessed": "Tous les enregistrements sont traités !", + "allowed": "Autorisé", + "available": "Disponible", + "blocked": "bloqué", + "budgetWarnings": "Alertes de Budget", + "characters": "caractères", + "chunkSize": "Taille du Morceau", + "complete": "terminé", + "completedRecordings": "Terminés", + "confirmPasswordLabel": "Confirmer le mot de passe", + "contextNotes": { + "jsonConversion": "Les transcriptions JSON sont converties en format texte brut avant l'envoi", + "modelConfig": "Le modèle utilisé est configuré via la variable d'environnement TEXT_MODEL_NAME", + "tagPrompts": "Si plusieurs invites d'étiquettes existent, elles sont fusionnées dans l'ordre où les étiquettes ont été ajoutées", + "transcriptLimit": "Les transcriptions sont limitées à un nombre configurable de caractères (par défaut : 30 000)" + }, + "createFirstGroup": "Créer votre premier groupe", + "created": "Créé", + "currentUsage": "Utilisation actuelle", + "currentUsageMinutes": "Utilisation Actuelle", + "defaultPromptInfo": "Cette invite par défaut sera utilisée pour tous les utilisateurs qui n'ont pas défini leur propre invite personnalisée dans les paramètres de leur compte.", + "defaultPrompts": "Invites par Défaut", + "defaultSummarizationPrompt": "Invite de Résumé par Défaut", + "description": "Description", + "editUser": "Modifier l'Utilisateur", + "email": "E-MAIL", + "emailLabel": "E-mail", + "embeddingModel": "Modèle d'Intégration", + "embeddingsStatus": "Statut des Intégrations", + "errors": { + "failedToLoadPrompt": "Échec du chargement de l'invite par défaut", + "failedToSavePrompt": "Échec de la sauvegarde de l'invite par défaut. Veuillez réessayer.", + "invalidFileSize": "Veuillez entrer une taille valide entre 1 et 10000 Mo", + "invalidInteger": "Veuillez entrer un nombre entier valide", + "invalidNumber": "Veuillez entrer un nombre valide", + "maxTimeout": "Le délai d'attente ne peut pas dépasser 10 heures (36000 secondes)", + "minCharacters": "Veuillez entrer un nombre valide d'au moins 1000 caractères", + "minTimeout": "Le délai d'attente doit être d'au moins 60 secondes" + }, + "failedRecordings": "Échoués", + "groupName": "Nom du groupe", + "groupsTab": "Groupes", + "id": "ID", + "inquireModeDescription": "Le mode Enquête permet aux utilisateurs de rechercher dans plusieurs transcriptions en utilisant des questions en langage naturel. Il fonctionne en divisant les transcriptions en morceaux et en créant des intégrations consultables à l'aide de modèles IA.", + "languagePreferenceNote": "Note: Si l'utilisateur a défini une préférence de langue de sortie, \" Assurez-vous que votre réponse est en {langue}.\" sera ajouté.", + "lastUpdated": "Dernière mise à jour", + "maxFileSizeHelp": "Taille maximale du fichier en mégaoctets (1-10000 Mo)", + "megabytes": "Mo", + "members": "Membres", + "membersCount": "membres", + "minutes": "minutes", + "monthlyCost": "Coût Mensuel", + "monthlyTokenBudget": "Budget Mensuel de Tokens", + "monthlyTranscriptionBudget": "Budget Mensuel de Transcription (minutes)", + "needProcessing": "Nécessite un Traitement", + "never": "Jamais", + "newPasswordLabel": "Nouveau Mot de Passe (laisser vide pour conserver l'actuel)", + "no": "Non", + "noData": "Aucune donnée", + "noDescription": "Aucune description", + "noDescriptionAvailable": "Aucune description disponible", + "noGroupsAdmin": "Vous n'êtes encore administrateur d'aucun groupe", + "noGroupsCreated": "Aucun groupe créé pour le moment", + "noLimit": "Aucune Limite", + "noMembersYet": "Aucun membre pour le moment", + "noTranscriptionData": "Aucune donnée d'utilisation de transcription disponible", + "none": "Aucun", + "notSet": "Non défini", + "overlap": "Chevauchement", + "passwordLabel": "Mot de passe", + "passwordsDoNotMatch": "Les mots de passe ne correspondent pas", + "pendingRecordings": "En Attente", + "percentUsed": "utilisé", + "placeholdersNote": "Les espaces réservés sont remplacés par des valeurs réelles lors du traitement d'un enregistrement.", + "processAllRecordings": "Traiter Tous les Enregistrements", + "processNext10": "Traiter les 10 Prochains", + "processedForInquire": "Traité pour Enquête", + "processing": "Traitement en cours...", + "processingActions": "Actions de Traitement", + "processingProgress": "Progression du Traitement", + "processingRecordings": "En Traitement", + "promptDescription": "Cette invite sera utilisée pour générer des résumés pour tous les enregistrements lorsque les utilisateurs n'ont pas défini leur propre invite.", + "promptHierarchy": "Hiérarchie des Invites", + "promptPriorityDescription": "Le système utilise l'ordre de priorité suivant lors de la sélection de l'invite à utiliser:", + "promptResetMessage": "Invite réinitialisée par défaut du système. Cliquez sur \"Enregistrer les modifications\" pour appliquer.", + "promptSavedSuccessfully": "Invite par défaut enregistrée avec succès !", + "publicShare": "Partage public", + "recordingStatusDistribution": "Répartition du Statut des Enregistrements", + "recordings": "ENREGISTREMENTS", + "recordingsNeedProcessing": "Il y a {{count}} enregistrements qui doivent être traités pour le mode Enquête.", + "refreshStatus": "Actualiser le Statut", + "resetToDefault": "Réinitialiser par Défaut", + "saving": "Enregistrement...", + "searchUsers": "Rechercher des utilisateurs...", + "seconds": "secondes", + "settings": { + "asrTimeoutDesc": "Temps maximal en secondes pour attendre la fin de la transcription ASR. La valeur par défaut est 1800 secondes (30 minutes).", + "defaultSummaryPromptDesc": "Invite de résumé par défaut utilisée lorsque les utilisateurs n'ont pas défini leur propre invite. Cela sert d'invite de base pour tous les utilisateurs.", + "maxFileSizeDesc": "Taille maximale de fichier autorisée pour les téléchargements audio en mégaoctets (Mo).", + "recordingDisclaimerDesc": "Avis légal affiché aux utilisateurs avant le début de l'enregistrement. Prend en charge le formatage Markdown. Laisser vide pour désactiver.", + "uploadDisclaimerDesc": "Avis légal affiché avant le téléchargement de fichiers. Prend en charge Markdown. Laisser vide pour désactiver.", + "customBannerDesc": "Bannière personnalisée affichée en haut de la page. Prend en charge Markdown. Laisser vide pour désactiver.", + "transcriptLengthLimitDesc": "Nombre maximal de caractères à envoyer de la transcription au LLM pour le résumé et le chat. Utilisez -1 pour aucune limite." + }, + "storageUsed": "STOCKAGE UTILISÉ", + "summarizationInstructions": "Instructions de Résumé", + "systemFallback": "Repli Système", + "systemFallbackDesc": "Une valeur par défaut codée en dur si aucune des précédentes n'est définie", + "systemPrompt": "Invite Système", + "systemSettings": "Paramètres du Système", + "systemStatistics": "Statistiques du Système", + "tagCustomPrompt": "Invite Personnalisée de l'Étiquette", + "tagCustomPromptDesc": "Si un enregistrement a des étiquettes avec des invites personnalisées", + "textSearchOnly": "Recherche de Texte Uniquement", + "thisMonth": "Ce Mois", + "timeoutRecommendation": "Recommandé : 30-120 minutes pour les longs fichiers audio", + "title": "Tableau de Bord Administrateur", + "todaysMinutes": "Minutes Aujourd'hui", + "tokenBudgetExceeded": "Budget mensuel de tokens dépassé. Veuillez contacter votre administrateur.", + "tokenBudgetHelp": "Définissez une limite mensuelle de tokens pour les fonctionnalités IA. Laissez vide pour illimité.", + "tokenBudgetPlaceholder": "Laissez vide pour illimité", + "tokenUsage": "Utilisation des tokens", + "tokens": "tokens", + "topUsers": "Meilleurs Utilisateurs", + "topUsersByStorage": "Principaux Utilisateurs par Stockage", + "total": "Total", + "totalChunks": "Total des Segments", + "totalQueries": "Total des Requêtes", + "totalRecordings": "Total des Enregistrements", + "totalStorage": "Stockage Total", + "totalUsers": "Total des Utilisateurs", + "transcriptionBudgetHelp": "Limitez les minutes de transcription par mois. Laissez vide pour illimité.", + "transcriptionBudgetPlaceholder": "Laissez vide pour illimité", + "transcriptionUsage": "Utilisation de la Transcription", + "updateUser": "Mettre à jour l'Utilisateur", + "userCustomPrompt": "Invite Personnalisée de l'Utilisateur", + "userCustomPromptDesc": "Si l'utilisateur a défini sa propre invite dans les paramètres du compte", + "userManagement": "Gestion des Utilisateurs", + "userMessageTemplate": "Modèle de Message Utilisateur", + "userTranscriptionUsage": "Utilisation de Transcription par Utilisateur (Ce Mois)", + "username": "NOM D'UTILISATEUR", + "usernameLabel": "Nom d'utilisateur", + "vectorDimensions": "Dimensions du Vecteur", + "vectorStore": "Magasin Vectoriel", + "vectorStoreManagement": "Gestion du Magasin Vectoriel", + "vectorStoreUpToDate": "Le magasin de vecteurs est à jour.", + "viewFullPromptStructure": "Voir la Structure Complète de l'Invite LLM", + "warning": "avertissement", + "yes": "Oui" + }, + "apiTokens": { + "activeTokens": "Jetons actifs", + "createFirstToken": "Créez votre premier jeton API pour activer l'accès programmatique", + "createToken": "Créer un jeton", + "created": "Créé", + "description": "Créez et gérez des jetons API pour l'accès programmatique à votre compte", + "expires": "Expire", + "lastUsed": "Dernière utilisation", + "neverUsed": "Jamais utilisé", + "noExpiration": "Pas d'expiration", + "noTokens": "Aucun jeton API", + "securityNotice": "Avis de sécurité", + "securityWarning": "Traitez les jetons API comme des mots de passe. Ils fournissent un accès complet à votre compte. Ne partagez jamais les jetons dans des zones accessibles au public comme GitHub, le code côté client ou les logs", + "title": "Jetons API", + "createTitle": "Créer un Jeton API", + "expiration": "Expiration", + "expirationHelp": "Date d'expiration de ce jeton", + "onceShownWarning": "Le jeton ne sera affiché qu'une seule fois après sa création. Assurez-vous de le copier et de le sauvegarder de façon sécurisée.", + "tokenName": "Nom du Jeton *", + "tokenNameHelp": "Un nom descriptif pour identifier ce jeton", + "tokenNamePlaceholder": "ex., automatisation n8n, accès CLI", + "usageExamples": "Exemples d'utilisation" + }, + "buttons": { + "addSegment": "Ajouter un Segment", + "addSpeaker": "Ajouter un orateur", + "cancel": "Annuler", + "clearAllFilters": "Effacer tous les filtres", + "clearCompleted": "Effacer les téléchargements terminés", + "clearSearchText": "Effacer le texte de recherche", + "close": "Fermer", + "copy": "Copier", + "copyMessage": "Copier le message", + "copyNotes": "Copier les Notes", + "copySummary": "Copier le Résumé", + "copyToClipboard": "Copier dans le Presse-papiers", + "createTag": "Créer une Étiquette", + "deleteAll": "Tout supprimer", + "deleteSpeaker": "Supprimer l'intervenant", + "deleteTag": "Supprimer l'étiquette", + "deleteUser": "Supprimer l'utilisateur", + "downloadAsWord": "Télécharger en Word", + "downloadAudio": "Télécharger l'audio", + "downloadChat": "Télécharger la conversation en document Word", + "downloadNotes": "Télécharger les notes en document Word", + "downloadSummary": "Télécharger le résumé en document Word", + "editNotes": "Modifier les Notes", + "editSetting": "Éditer le paramètre", + "editSpeakers": "Éditer les orateurs...", + "editSummary": "Modifier le Résumé", + "editTag": "Éditer l'étiquette", + "editTags": "Éditer les étiquettes", + "editTranscription": "Modifier la Transcription", + "editUser": "Éditer l'utilisateur", + "exportCalendar": "Exporter vers le calendrier", + "help": "Aide", + "identifySpeakers": "Identifier les Orateurs", + "next": "Suivant", + "previous": "Précédent", + "refresh": "Actualiser", + "reprocessSummary": "Retraiter le résumé", + "reprocessTranscription": "Retraiter la transcription", + "reprocessWithAsr": "Retraiter avec ASR", + "resetStuckProcessing": "Réinitialiser le traitement bloqué", + "saveChanges": "Enregistrer les Modifications", + "saveCustomPrompt": "Enregistrer l'invite personnalisée", + "saveNames": "Enregistrer les noms", + "saveSettings": "Enregistrer les Paramètres", + "shareRecording": "Partager l'Enregistrement", + "toggleTheme": "Changer de thème", + "updateTag": "Mettre à jour l'Étiquette" + }, + "changePasswordModal": { + "confirmPassword": "Confirmer le Nouveau Mot de Passe", + "currentPassword": "Mot de Passe Actuel", + "newPassword": "Nouveau Mot de Passe", + "passwordRequirement": "Le mot de passe doit comporter au moins 8 caractères", + "title": "Changer le Mot de Passe" + }, + "chat": { + "availableAfterTranscription": "Le chat sera disponible une fois la transcription terminée", + "cannotChatTranscriptionFailed": "Impossible de discuter : la transcription a échoué. Veuillez retraiter la transcription d'abord.", + "chatWithTranscription": "Discuter avec la Transcription", + "clearChat": "Effacer la Discussion", + "cleared": "Discussion effacée", + "downloadFailed": "Échec du téléchargement de la discussion", + "downloadSuccess": "Discussion téléchargée avec succès !", + "error": "Échec de l'envoi du message", + "noMessages": "Pas encore de messages", + "noMessagesToDownload": "Aucun message de discussion à télécharger.", + "placeholder": "Posez une question sur cet enregistrement...", + "placeholderWithHint": "Posez une question sur cet enregistrement... (Entrée pour envoyer, Ctrl+Entrée pour nouvelle ligne)", + "send": "Envoyer", + "suggestedQuestions": "Questions Suggérées", + "thinking": "Réflexion...", + "title": "Discussion", + "whatAreActionItems": "Quelles sont les actions à mener?", + "whatAreKeyPoints": "Quels sont les points clés?", + "whatWasDiscussed": "Qu'est-ce qui a été discuté?", + "whoSaidWhat": "Qui a dit quoi?" + }, + "colorScheme": { + "chooseRecording": "Choisissez un enregistrement dans la barre latérale pour voir sa transcription et son résumé", + "darkThemes": "Thèmes Sombres", + "descriptions": { + "blue": "Thème bleu classique avec un aspect professionnel et épuré", + "emerald": "Thème vert inspiré de la nature pour une expérience apaisante", + "purple": "Thème violet riche avec un look élégant et moderne", + "rose": "Thème rose chaud avec une esthétique douce et accueillante", + "amber": "Tons ambrés chauds pour une ambiance cosy et productive", + "teal": "Thème sarcelle frais avec une ambiance rafraîchissante et moderne" + }, + "lightThemes": "Thèmes Clairs", + "names": { + "blue": "Bleu Océan", + "emerald": "Forêt Verte", + "purple": "Violet Royal", + "rose": "Rose Corail", + "amber": "Ambre Doré", + "teal": "Sarcelle Arctique" + }, + "resetToDefault": "Réinitialiser par Défaut", + "selectRecording": "Sélectionner un Enregistrement", + "subtitle": "Personnalisez votre interface avec de magnifiques thèmes de couleur", + "themes": { + "light": { + "blue": { + "name": "Bleu Océan", + "description": "Thème bleu classique avec attrait professionnel" + }, + "emerald": { + "name": "Émeraude Forêt", + "description": "Thème vert frais pour une sensation naturelle" + }, + "purple": { + "name": "Violet Royal", + "description": "Thème violet élégant avec sophistication" + }, + "rose": { + "name": "Rose Coucher de Soleil", + "description": "Thème rose chaud avec énergie douce" + }, + "amber": { + "name": "Ambre Doré", + "description": "Thème jaune chaud pour la luminosité" + }, + "teal": { + "name": "Turquoise Océan", + "description": "Thème turquoise frais pour la tranquillité" + } + }, + "dark": { + "blue": { + "name": "Bleu Minuit", + "description": "Thème bleu profond pour travail concentré" + }, + "emerald": { + "name": "Forêt Sombre", + "description": "Thème vert riche pour visualisation confortable" + }, + "purple": { + "name": "Violet Profond", + "description": "Thème violet mystérieux pour la créativité" + }, + "rose": { + "name": "Rose Sombre", + "description": "Thème rose atténué avec chaleur subtile" + }, + "amber": { + "name": "Ambre Sombre", + "description": "Thème marron chaud pour sessions confortables" + }, + "teal": { + "name": "Turquoise Profond", + "description": "Thème turquoise sombre pour concentration calme" + } + } + }, + "title": "Choisir le Schéma de Couleurs" + }, + "common": { + "back": "Retour", + "cancel": "Annuler", + "changesSaved": "Modifications enregistrées", + "close": "Fermer", + "confirm": "Confirmer", + "delete": "Supprimer", + "deselectAll": "Tout Désélectionner", + "download": "Télécharger", + "edit": "Modifier", + "error": "Erreur", + "failed": "Échoué", + "filter": "Filtrer", + "info": "Information", + "loading": "Chargement...", + "new": "Nouveau", + "next": "Suivant", + "no": "Non", + "noResults": "Aucun résultat trouvé", + "ok": "OK", + "or": "Or", + "previous": "Précédent", + "processing": "Traitement...", + "refresh": "Actualiser", + "retry": "Réessayer", + "save": "Enregistrer", + "search": "Rechercher", + "selectAll": "Tout Sélectionner", + "sort": "Trier", + "success": "Succès", + "untitled": "Sans titre", + "upload": "Télécharger", + "warning": "Avertissement", + "yes": "Oui" + }, + "customPrompts": { + "currentDefaultPrompt": "Invite Par Défaut Actuelle (Utilisée si vous laissez le champ ci-dessus vide)", + "promptDescription": "Cette invite sera utilisée pour générer des résumés de vos transcriptions. Elle remplace l'invite par défaut de l'administrateur.", + "promptPlaceholder": "Décrivez comment vous voulez que vos résumés soient structurés. Laissez vide pour utiliser l'invite par défaut de l'administrateur.", + "summaryGeneration": "Invite de Génération de Résumé", + "tip1": "Soyez spécifique sur les sections que vous voulez dans votre résumé", + "tip2": "Utilisez des instructions de formatage claires (ex. \"Utilisez des puces\", \"Créez des listes numérotées\")", + "tip3": "Spécifiez si vous voulez que certaines informations soient prioritaires", + "tip4": "Le système fournira automatiquement le contenu de la transcription à l'IA", + "tip5": "Votre préférence de langue de sortie (si définie) sera appliquée automatiquement", + "tipsTitle": "Conseils pour Rédiger des Invites Efficaces", + "yourCustomPrompt": "Votre Invite Personnalisée de Résumé" + }, + "deleteAllSpeakersModal": { + "confirmMessage": "Êtes-vous sûr de vouloir supprimer tous les intervenants sauvegardés ? Cette action ne peut pas être annulée.", + "title": "Supprimer Tous les Intervenants" + }, + "dialogs": { + "deleteRecording": { + "cancel": "Annuler", + "confirm": "Supprimer", + "message": "Êtes-vous sûr de vouloir supprimer cet enregistrement? Cette action ne peut pas être annulée.", + "title": "Supprimer l'Enregistrement" + }, + "deleteShare": { + "message": "Êtes-vous sûr de vouloir supprimer ce partage ? Cela révoquera l'accès au lien public.", + "title": "Supprimer le partage" + }, + "reprocessTranscription": { + "cancel": "Annuler", + "confirm": "Retraiter", + "message": "Êtes-vous sûr de vouloir retraiter cette transcription? La transcription actuelle sera remplacée.", + "title": "Retraiter la Transcription" + }, + "unsavedChanges": { + "cancel": "Annuler", + "discard": "Ignorer", + "message": "Vous avez des modifications non enregistrées. Voulez-vous les enregistrer avant de partir?", + "save": "Enregistrer", + "title": "Modifications Non Enregistrées" + } + }, + "duration": { + "hours": "{{count}} heure", + "hoursPlural": "{{count}} heures", + "minutes": "{{count}} minute", + "minutesPlural": "{{count}} minutes", + "seconds": "{{count}} seconde", + "secondsPlural": "{{count}} secondes" + }, + "editTagModal": { + "asrDefaultSettings": "Paramètres ASR par Défaut", + "asrSettingsDescription": "Ces paramètres seront appliqués par défaut lors de l'utilisation de cette étiquette avec la transcription ASR", + "color": "Couleur", + "colorDescription": "Choisissez une couleur pour faciliter l'identification", + "createTitle": "Créer une Étiquette", + "customPrompt": "Invite de Résumé Personnalisée", + "customPromptPlaceholder": "Optionnel : Invite personnalisée pour générer des résumés pour les enregistrements avec cette étiquette", + "defaultLanguage": "Langue par Défaut", + "defaultPromptPlaceholder": "Laissez vide pour utiliser votre invite de résumé par défaut", + "exportTemplate": "Modèle d'exportation", + "exportTemplateHint": "Sélectionnez un modèle d'exportation à utiliser lors de l'exportation des enregistrements avec cette étiquette", + "leaveBlankPrompt": "Laissez vide pour utiliser votre invite de résumé par défaut", + "maxSpeakers": "Maximum d'Intervenants", + "minSpeakers": "Minimum d'Intervenants", + "namingTemplate": "Modèle de nommage", + "namingTemplateHint": "Sélectionnez un modèle de nommage pour formater automatiquement les titres des enregistrements avec cette étiquette", + "noExportTemplate": "Aucun modèle (utiliser le défaut de l'utilisateur)", + "noNamingTemplate": "Pas de modèle (utiliser le défaut ou le titre IA)", + "tagName": "Nom de l'Étiquette *", + "tagNamePlaceholder": "ex., Réunions, Entretiens", + "title": "Modifier l'Étiquette" + }, + "errors": { + "audioExtractionFailed": "Échec de l'extraction audio", + "audioExtractionFailedGuidance": "Essayez de convertir le fichier en format audio standard (MP3, WAV) avant de télécharger.", + "audioExtractionFailedMessage": "Impossible d'extraire l'audio du fichier téléchargé.", + "audioRecordingFailed": "L'enregistrement audio a échoué. Vérifiez votre microphone.", + "authenticationError": "Erreur d'authentification", + "authenticationErrorGuidance": "Vérifiez que la clé API est correcte et n'a pas expiré.", + "authenticationErrorMessage": "Le service de transcription a rejeté les identifiants API.", + "checkApiKeyGuidance": "Vérifiez la clé API dans les paramètres", + "checkNetworkGuidance": "Vérifiez la connexion réseau", + "connectionError": "Erreur de connexion", + "connectionErrorGuidance": "Vérifiez votre connexion internet et assurez-vous que le service est disponible.", + "connectionErrorMessage": "Impossible de se connecter au service de transcription.", + "convertFormatGuidance": "Convertir en MP3 ou WAV avant de télécharger", + "convertStandardGuidance": "Convertir en format audio standard", + "enableChunkingGuidance": "Activez le découpage dans les paramètres ou compressez le fichier", + "fallbackMessage": "Une erreur s'est produite", + "fallbackTitle": "Erreur", + "fileTooLarge": "Fichier trop volumineux", + "fileTooLargeGuidance": "Essayez d'activer le découpage audio dans vos paramètres, ou compressez le fichier audio avant de télécharger.", + "fileTooLargeMaxSize": "Fichier trop volumineux. Max : {{size}} Mo.", + "fileTooLargeMessage": "Le fichier audio dépasse la taille maximale autorisée par le service de transcription.", + "fileTooLargeTitle": "Fichier Trop Volumineux", + "generic": "Une erreur s'est produite", + "invalidAudioFormat": "Format audio invalide", + "invalidAudioFormatGuidance": "Essayez de convertir l'audio en format MP3 ou WAV avant de télécharger.", + "invalidAudioFormatMessage": "Le format du fichier audio n'est pas pris en charge ou le fichier est peut-être corrompu.", + "loadingShares": "Erreur lors du chargement des partages", + "networkError": "Erreur réseau. Vérifiez votre connexion.", + "networkErrorDuringUpload": "Erreur réseau lors du téléchargement", + "notFound": "Introuvable", + "permissionDenied": "Permission refusée", + "processingError": "Erreur de traitement", + "processingErrorFallbackGuidance": "Essayez de retraiter l'enregistrement", + "processingErrorGuidance": "Si cette erreur persiste, essayez de retraiter l'enregistrement.", + "processingErrorMessage": "Une erreur s'est produite lors du traitement.", + "processingFailedOnServer": "Le traitement a échoué sur le serveur.", + "processingFailedWithStatus": "Le traitement a échoué avec le statut {{status}}", + "processingTimeout": "Délai de traitement dépassé", + "processingTimeoutGuidance": "Cela peut arriver avec des enregistrements très longs. Essayez de diviser l'audio en parties plus petites.", + "processingTimeoutMessage": "La transcription a pris trop de temps.", + "quotaExceeded": "Quota de stockage dépassé", + "rateLimitExceeded": "Limite de requêtes dépassée", + "rateLimitExceededGuidance": "Veuillez attendre quelques minutes et réessayer.", + "rateLimitExceededMessage": "Trop de requêtes ont été envoyées au service de transcription.", + "serverError": "Erreur serveur. Veuillez réessayer plus tard.", + "serverErrorStatus": "Erreur serveur ({{status}})", + "serviceUnavailable": "Service indisponible", + "serviceUnavailableGuidance": "C'est généralement temporaire. Veuillez réessayer dans quelques minutes.", + "serviceUnavailableMessage": "Le service de transcription est temporairement indisponible.", + "splitAudioGuidance": "Essayez de diviser l'audio en parties plus petites", + "summaryFailed": "La génération du résumé a échoué. Veuillez réessayer.", + "transcriptionFailed": "La transcription a échoué. Veuillez réessayer.", + "tryAgainLaterGuidance": "Réessayez dans quelques minutes", + "unauthorized": "Non autorisé", + "unexpectedResponse": "Réponse inattendue du serveur après le téléchargement.", + "unsupportedFormat": "Format de fichier non pris en charge", + "uploadFailed": "Le téléchargement a échoué. Veuillez réessayer.", + "uploadFailedWithStatus": "Le téléchargement a échoué avec le statut {{status}}", + "uploadTimedOut": "Délai de téléchargement dépassé", + "validationError": "Erreur de validation", + "waitAndRetryGuidance": "Attendez quelques minutes et réessayez" + }, + "eventExtraction": { + "description": "Lorsqu'activé, l'IA identifiera les réunions, rendez-vous et échéances mentionnés dans vos enregistrements et créera des événements de calendrier téléchargeables.", + "enableLabel": "Activer l'extraction automatique d'événements des transcriptions", + "info": "Les événements extraits apparaîtront dans l'onglet 'Événements' sur les enregistrements où des éléments de calendrier sont détectés.", + "title": "Extraction d'Événements" + }, + "events": { + "add": "Ajouter", + "addToCalendar": "Ajouter au Calendrier", + "attendees": "Participants", + "confirmDelete": "Supprimer l'événement « {title} » ?", + "delete": "Supprimer", + "deleteFailed": "Échec de la suppression de l'événement", + "deleted": "Événement supprimé", + "end": "Fin", + "location": "Lieu", + "noEvents": "Aucun événement détecté dans cet enregistrement", + "start": "Début", + "title": "Événements" + }, + "exportLabels": { + "created": "Créé", + "date": "Date", + "fileSize": "Taille du fichier", + "footer": "Généré avec [DictIA](https://gitea.innova-ai.ca/Innova-AI/dictia)", + "metadata": "Métadonnées", + "notes": "Notes", + "originalFile": "Fichier original", + "participants": "Participants", + "summarizationTime": "Temps de résumé", + "summary": "Résumé", + "tags": "Tags", + "transcription": "Transcription", + "transcriptionTime": "Temps de transcription" + }, + "exportTemplates": { + "availableLabels": "Libellés localisés (traduits automatiquement)", + "availableTemplates": "Modèles disponibles", + "availableVars": "Variables disponibles", + "cancel": "Annuler", + "conditionals": "Conditions", + "conditionalsHint": "Utilisez {{#if variable}}...{{/if}} pour inclure conditionnellement du contenu", + "contentSections": "Sections de contenu", + "createDefaults": "Créer un modèle par défaut", + "createNew": "Créer un modèle", + "default": "Par défaut", + "delete": "Supprimer", + "description": "Personnalisez la façon dont les enregistrements sont exportés vers des fichiers markdown.", + "recordingData": "Données d'enregistrement", + "save": "Enregistrer", + "selectOrCreate": "Sélectionnez un modèle à modifier ou créez-en un nouveau", + "setDefault": "Définir comme modèle par défaut", + "tabTitle": "Exportation", + "template": "Modèle", + "templateDescription": "Description", + "templateName": "Nom du modèle", + "title": "Modèles d'exportation", + "viewGuide": "Voir le guide des modèles" + }, + "fileSize": { + "bytes": "{{count}} B", + "gigabytes": "{{count}} GB", + "kilobytes": "{{count}} KB", + "megabytes": "{{count}} MB" + }, + "folderManagement": { + "allFolders": "Tous les dossiers", + "asrDefaults": "Paramètres ASR par défaut", + "autoShareOnApply": "Partager automatiquement avec les membres du groupe", + "autoShareOnApplyHelp": "Partager automatiquement les enregistrements avec tous les membres du groupe lors de l'ajout à ce dossier", + "confirmDelete": "Êtes-vous sûr de vouloir supprimer ce dossier ? Les enregistrements seront retirés du dossier mais pas supprimés.", + "createFolder": "Créer un dossier", + "customPrompt": "Prompt personnalisé", + "defaultLanguage": "Langue par défaut", + "deleteFolder": "Supprimer le dossier", + "description": "Organisez vos enregistrements dans des dossiers. Contrairement aux étiquettes, un enregistrement ne peut appartenir qu'à un seul dossier. Les prompts de dossier sont appliqués avant les prompts utilisateur mais après les prompts d'étiquette.", + "editFolder": "Modifier le dossier", + "filterByFolder": "Filtrer par dossier", + "folderColor": "Couleur du dossier", + "folderName": "Nom du dossier", + "groupSettings": "Paramètres de groupe", + "maxSpeakers": "Orateurs max.", + "minSpeakers": "Orateurs min.", + "moveToFolder": "Déplacer vers le dossier", + "namingTemplate": "Modèle de nommage", + "noFolder": "Aucun dossier", + "noFolders": "Aucun dossier créé pour le moment", + "noFoldersDescription": "Créez votre premier dossier pour organiser vos enregistrements", + "protectFromDeletion": "Protéger contre la suppression", + "protectFromDeletionHelp": "Protéger les enregistrements de ce dossier contre la suppression automatique", + "recordings": "enregistrements", + "removeFromFolder": "Retirer du dossier", + "retentionDays": "Jours de rétention", + "retentionDaysHelp": "Les enregistrements de ce dossier seront supprimés après ce nombre de jours. Laisser vide pour utiliser la rétention globale.", + "retentionPeriod": "Période de rétention (jours)", + "retentionPlaceholder": "Laisser vide pour utiliser la rétention globale", + "retentionSettings": "Paramètres de rétention", + "retentionDisabledWarning": "La suppression automatique est actuellement désactivée. Ces paramètres prendront effet lorsqu'un administrateur l'activera.", + "selectNamingTemplate": "Sélectionner un modèle de nommage...", + "shareWithGroupLead": "Partager avec les administrateurs du groupe", + "shareWithGroupLeadHelp": "Partager les enregistrements avec les administrateurs du groupe lors de l'ajout à ce dossier", + "title": "Gestion des dossiers", + "folderNamePlaceholder": "ex., Appels bureau, Entretiens", + "tabTranscription": "Transcription", + "tabSummaryTemplates": "Résumé et Modèles", + "tabSharing": "Partage", + "tagPriorityNote": "Les paramètres d'étiquette ont priorité sur les paramètres de dossier", + "defaultLanguagePlaceholder": "ex., fr, en, es", + "customPromptPlaceholder": "Optionnel : Invite personnalisée pour les résumés des enregistrements de ce dossier", + "customPromptHelp": "Laisser vide pour utiliser votre invite par défaut. Les invites d'étiquette ont priorité sur les invites de dossier.", + "namingTemplateHint": "Sélectionnez un modèle de nommage pour formater automatiquement les titres des enregistrements dans ce dossier", + "exportTemplateHint": "Sélectionnez un modèle d'exportation à utiliser lors de l'exportation des enregistrements dans ce dossier", + "groupAssignment": "Affectation de groupe (Optionnel)", + "groupAssignmentHelp": "Affecter ce dossier à un groupe pour activer le partage automatique lors de l'ajout d'enregistrements", + "groupSharingSettings": "Paramètres de partage de groupe", + "autoShareAllHelp": "Tous les membres du groupe auront automatiquement accès aux enregistrements de ce dossier", + "shareAdminsOnlyHelp": "Seuls les administrateurs du groupe auront accès (pas tous les membres)", + "bothEnabledNote": "Note : Si les deux sont activés, tous les membres du groupe auront accès.", + "saveFolder": "Enregistrer le dossier" + }, + "form": { + "auto": "Auto", + "autoDetect": "Détection automatique", + "dateFrom": "De", + "dateTo": "À", + "enterNotesMarkdown": "Entrez des notes au format Markdown...", + "enterSummaryMarkdown": "Entrez un résumé au format Markdown...", + "folder": "Dossier", + "hotwords": "Mots-clés", + "hotwordsHelp": "Mots séparés par des virgules pour améliorer la reconnaissance des termes spécifiques à votre domaine", + "hotwordsPlaceholder": "ex., DictIA, CTranslate2, PyAnnote", + "initialPrompt": "Invite initiale", + "initialPromptHelp": "Contexte pour orienter le style et le vocabulaire du modèle de transcription", + "initialPromptPlaceholder": "ex., C'est une réunion sur les outils de transcription IA.", + "language": "Langue", + "maxSpeakers": "Orateurs Maximum", + "meetingDate": "Date de Réunion", + "minSpeakers": "Orateurs Minimum", + "minutes": "Minutes", + "notes": "Notes", + "notesPlaceholder": "Tapez vos notes au format Markdown...", + "optional": "Optionnel", + "participantNamePlaceholder": "Nom du participant...", + "participants": "Participants", + "placeholderAuto": "Auto", + "placeholderCharacterLimit": "Entrez la limite de caractères (ex. 30000)", + "placeholderMinutes": "Minutes", + "placeholderOptional": "Optionnel", + "placeholderSeconds": "Secondes", + "placeholderSizeMB": "Entrez la taille en Mo", + "searchSpeakers": "Rechercher des intervenants...", + "searchTags": "Rechercher des étiquettes...", + "seconds": "Secondes", + "shareNotes": "Partager les Notes", + "shareSummary": "Partager le Résumé", + "shareableLink": "Lien Partageable", + "summaryPromptPlaceholder": "Entrez l'invite de résumé par défaut...", + "title": "Titre", + "transcriptionLanguage": "Langue de Transcription", + "yourFullName": "Votre nom complet" + }, + "groups": { + "addMembers": "Ajouter des membres...", + "autoShare": "Partage automatique", + "autoShareNote": "Note : Si les deux sont activés, tous les membres de l'équipe auront accès. Si seulement \"administrateurs de l'équipe\" est activé, seuls les chefs d'équipe auront accès.", + "autoShareTeam": "Partager automatiquement les enregistrements avec tous les membres de l'équipe lorsque cette étiquette est appliquée", + "autoSharesWithTeam": "Partage automatiquement avec tous les membres de l'équipe", + "confirmDelete": "Êtes-vous sûr de vouloir supprimer cette équipe ? Cette action ne peut pas être annulée.", + "createTeam": "Créer une Équipe", + "createTeamTag": "Créer une Nouvelle Étiquette d'Équipe", + "dayRetention": "jours de rétention", + "deleteTeam": "Supprimer l'Équipe", + "deletionExempt": "Exempté de suppression", + "deletionExemptHelp": "Les enregistrements avec cette étiquette seront exemptés de suppression automatique, même s'ils dépassent la période de rétention.", + "editTeam": "Modifier l'Équipe", + "editTeamTag": "Modifier l'Étiquette d'Équipe", + "globalRetention": "Rétention globale", + "members": "Membres", + "noMembers": "Aucun membre dans cette équipe", + "noTeamTags": "Aucune étiquette d'équipe créée", + "noTeams": "Aucune équipe créée", + "retentionHelp": "Les enregistrements avec cette étiquette seront supprimés après ce nombre de jours. Laisser vide pour utiliser la rétention globale ({{days}} jours).", + "retentionPeriod": "Période de Rétention (jours)", + "retentionPlaceholder": "Laisser vide pour utiliser la rétention globale", + "searchUsers": "Rechercher des utilisateurs...", + "selectTeamLead": "Sélectionner le chef d'équipe...", + "shareWithAdmins": "Partager les enregistrements avec les administrateurs de l'équipe lorsque cette étiquette est appliquée", + "sharesWithAdminsOnly": "Partage uniquement avec les administrateurs de l'équipe", + "syncComplete": "Partages d'équipe synchronisés avec succès", + "syncTeamShares": "Synchroniser les Partages d'Équipe", + "syncTeamSharesDescription": "Cela partagera rétroactivement tous les enregistrements avec des étiquettes d'équipe avec les membres appropriés selon les paramètres de partage de l'étiquette.", + "teamLead": "Chef d'Équipe", + "teamName": "Nom de l'Équipe", + "teamNamePlaceholder": "Entrez le nom de l'équipe", + "teamTags": "Étiquettes d'Équipe", + "title": "Gestion de Groupe", + "updateTeam": "Mettre à jour l'Équipe" + }, + "help": { + "actions": "Actions", + "activeFilters": "Filtres actifs", + "addSegmentBelow": "Ajouter un segment en dessous", + "advancedAsrOptions": "Options ASR Avancées", + "allRecordingsLoaded": "Tous les enregistrements chargés", + "allTagsSelected": "Toutes les étiquettes sélectionnées", + "appliedSuggestedNames": "{{count}} nom suggéré appliqué", + "appliedSuggestedNamesPlural": "{{count}} noms suggérés appliqués", + "applySuggested": "Appliquer les suggestions", + "applySuggestedMobile": "Suggérer", + "approachingLimit": "Approche de la limite de {{limit}}MB", + "askAboutTranscription": "Posez des questions sur cette transcription", + "audioDeletedDescription": "Le fichier audio de cet enregistrement a été supprimé, mais la transcription reste disponible.", + "audioDeletedMessage": "Le fichier audio a été archivé et n'est plus disponible pour la lecture.", + "audioDeletedTitle": "Fichier audio supprimé", + "audioPlayer": "Lecteur Audio", + "autoIdentify": "Identifier Automatiquement", + "autoIdentifyMobile": "Auto", + "bothAudioDesc": "Enregistre votre voix + les participants à la réunion (recommandé pour les réunions en ligne)", + "clearFilters": "effacer les filtres", + "clickToAddNotes": "Cliquez pour ajouter des notes...", + "colorRepeats": "La couleur se répète à partir de l'orateur {{number}}", + "completedFiles": "Fichiers Terminés", + "confirmReprocessingTitle": "Confirmer le Retraitement", + "copyMessage": "Copier le message", + "createFolders": "Créer des dossiers", + "createPublicLink": "Créer un lien public pour partager cet enregistrement. Le partage n'est disponible que sur les connexions sécurisées (HTTPS).", + "createTags": "Créer des étiquettes", + "defaultHotwordsHelp": "Mots ou expressions séparés par des virgules que le modèle de transcription doit prioriser (noms de marques, acronymes, termes techniques).", + "defaultInitialPromptHelp": "Contexte pour orienter le style et le vocabulaire du modèle de transcription. Décrivez le sujet ou le contenu attendu de vos enregistrements.", + "deleteSegment": "Supprimer le segment", + "discard": "Ignorer", + "dragToReorder": "Glisser pour réordonner", + "endTime": "Fin", + "enterNameFor": "Entrez le nom pour", + "enterSpeakerName": "Entrez le nom du locuteur...", + "entireScreen": "Écran Entier", + "errorChangingSpeaker": "Erreur lors du changement d'orateur", + "errorOpeningTextEditor": "Erreur lors de l'ouverture de l'éditeur de texte", + "errorSavingText": "Erreur lors de la sauvegarde du texte", + "estimatedSize": "Taille estimée", + "firstTagAsrSettings": "Les paramètres ASR de la première étiquette seront appliqués :", + "firstTagDefaultsApplied": "Paramètres par défaut de la première étiquette appliqués", + "folderHasCustomPrompt": "Ce dossier a une invite de résumé personnalisée", + "generatingSummary": "Génération du résumé...", + "groups": "groupes", + "howToRecordSystemAudio": "Comment Enregistrer l'Audio Système", + "identifyAllSpeakers": "Identifier tous les orateurs", + "identifying": "Identification...", + "importantNote": "Note importante", + "internalSharingDesc": "Partager avec des utilisateurs spécifiques de votre organisation", + "lines": "{{count}} lignes", + "loadingMore": "Chargement de plus d'enregistrements...", + "loadingRecordings": "Chargement des enregistrements...", + "me": "Moi", + "microphoneDesc": "Enregistre uniquement votre voix", + "modelReasoning": "Raisonnement du Modèle", + "moreSpeakersThanColors": "Plus d'orateurs que de couleurs disponibles", + "navigate": "Naviguer", + "noDateSet": "Aucune date définie", + "noMatchingTags": "Aucune étiquette correspondante", + "noParticipants": "Aucun participant", + "noRecordingSelected": "Aucun enregistrement sélectionné.", + "noSpeakersIdentified": "Aucun orateur n'a pu être identifié à partir du contexte.", + "noSuggestionsToApply": "Aucune suggestion à appliquer", + "noTagsCreated": "Aucune étiquette créée pour le moment.", + "of": "sur", + "playFromHere": "Lire à partir d'ici", + "pleaseEnterSpeakerName": "Veuillez entrer un nom d'orateur", + "processingTime": "Temps de traitement", + "processingTimeDescription": "Cela peut prendre quelques minutes. Vous pouvez continuer à utiliser l'application pendant le traitement.", + "processingTranscription": "Traitement de la transcription...", + "publicLinkDesc": "Toute personne disposant de ce lien peut accéder à l'enregistrement", + "recordSystemSteps1": "Cliquez sur \"Enregistrer l'Audio Système\" ou \"Enregistrer les Deux\".", + "recordSystemSteps2": "Dans la fenêtre contextuelle, choisissez", + "recordSystemSteps3": "Assurez-vous de cocher la case qui dit", + "recordingFinished": "Enregistrement terminé", + "recordingInProgress": "Enregistrement en cours...", + "regenerateSummaryAfterNames": "Régénérer le résumé après la mise à jour des noms", + "saved": "Sauvegardé !", + "savingProgress": "Sauvegarde en cours...", + "selectedTagsCustomPrompts": "Les étiquettes sélectionnées incluent des invites de résumé personnalisées", + "sentence": "Phrase", + "shareSystemAudio": "Partager l'audio du système", + "shareTabAudio": "Partager l'audio de l'onglet", + "sharedOn": "Partagé le", + "sharingWindowNoAudio": "Partager une \"Fenêtre\" ne capturera pas l'audio.", + "speakerAdded": "Orateur ajouté avec succès", + "speakerCount": "Orateur", + "speakerName": "Nom de l'orateur", + "speakerNamesUpdated": "Noms des orateurs mis à jour avec succès !", + "speakers": "Orateurs", + "speakersIdentified": "{{count}} orateur identifié avec succès !", + "speakersIdentifiedPlural": "{{count}} orateurs identifiés avec succès !", + "speakersUpdatedSaveToApply": "Orateurs mis à jour ! Sauvegardez la transcription pour appliquer les modifications.", + "specificBrowserTab": "onglet de navigateur spécifique", + "startTime": "Début", + "startingAutoIdentification": "Identification automatique des orateurs en cours...", + "summaryGenerationFailed": "Échec de la génération du résumé", + "summaryGenerationTimedOut": "La génération du résumé a expiré", + "summaryRegenerationStarted": "Régénération du résumé lancée", + "summaryUpdated": "Résumé mis à jour !", + "systemAudioDesc": "Enregistre les participants à la réunion et les sons du système", + "tagManagement": "Gestion des Étiquettes", + "thisActionCannotBeUndone": "Cette action ne peut pas être annulée.", + "toCaptureAudioFromMeetings": "Pour capturer l'audio des réunions ou d'autres applications, vous devez partager votre écran ou un onglet du navigateur.", + "toOrganizeRecordings": "pour organiser vos enregistrements", + "transcriptUpdated": "Transcription mise à jour avec succès !", + "troubleshooting": "Dépannage", + "tryAdjustingSearch": "Essayez d'ajuster votre recherche ou", + "unsupportedBrowser": "Navigateur Non Pris en Charge", + "untitled": "Enregistrement Sans Titre", + "uploadRecordingNotes": "Télécharger l'Enregistrement et les Notes", + "whatWillHappen": "Que va-t-il se passer?", + "whyNotWorking": "Pourquoi ça ne marche pas?", + "youHaveXSpeakers": "Vous avez {{count}} locuteurs, mais seulement 16 couleurs uniques sont disponibles. Les couleurs se répéteront après le 16ème locuteur." + }, + "incognito": { + "audioNotStored": "Audio non conservé en mode incognito", + "discardConfirm": "Cela supprimera définitivement votre enregistrement incognito. Continuer ?", + "mode": "Mode Incognito", + "notSavedToAccount": "Non sauvegardé dans le compte", + "oneFileAtATime": "Le mode incognito traite un seul fichier à la fois", + "processInIncognito": "Traiter en incognito", + "processWithoutSaving": "Traiter sans sauvegarder", + "processing": "Traitement...", + "processingComplete": "Traitement terminé !", + "processingInProgress": "Traitement en cours en mode incognito...", + "recordingDiscarded": "Enregistrement incognito supprimé", + "recordingProcessed": "Enregistrement incognito traité - les données seront perdues à la fermeture de l'onglet", + "recordingReady": "Enregistrement incognito prêt !", + "recordingTitle": "Enregistrement Incognito", + "selectExactlyOneFile": "Sélectionner exactement 1 fichier", + "sessionOnly": "Session uniquement", + "uploadingFile": "Téléchargement du fichier pour le traitement incognito..." + }, + "inquire": { + "activeFilters": "Filtres Actifs :", + "askQuestions": "Posez des Questions sur Vos Transcriptions", + "clearAll": "Effacer Tout", + "dateRange": "Plage de Dates", + "dateRangeActive": "Plage de dates active", + "exampleQuestion1": "\"Quels éléments d'action ont été discutés ?\"", + "exampleQuestion2": "\"Quand avons-nous décidé de changer le calendrier ?\"", + "exampleQuestion3": "\"Quelles préoccupations ont été soulevées concernant le budget ?\"", + "exampleQuestion4": "\"Qui était responsable des tâches de marketing ?\"", + "exampleQuestions": "Exemples de Questions :", + "filters": "Filtres", + "filtersActive": "Filtres actifs", + "from": "De", + "noSpeakerData": "Aucune donnée d'intervenant disponible", + "placeholder": "Posez des questions sur vos transcriptions filtrées...", + "selectFilters": "Sélectionnez les filtres à gauche pour affiner vos transcriptions, puis posez des questions pour obtenir des informations à partir de vos enregistrements.", + "sendHint": "Appuyez sur Entrée pour envoyer • Ctrl+Entrée pour nouvelle ligne", + "speakerRequirement": "L'identification des intervenants nécessite des enregistrements avec plusieurs intervenants", + "speakers": "Intervenants", + "speakersCount": "intervenants", + "tags": "Étiquettes", + "tagsCount": "étiquettes", + "title": "Enquêter", + "to": "À" + }, + "languages": { + "ar": "Arabe", + "de": "Allemand", + "en": "Anglais", + "es": "Espagnol", + "fr": "Français", + "hi": "Hindi", + "it": "Italien", + "ja": "Japonais", + "ko": "Coréen", + "nl": "Néerlandais", + "pt": "Portugais", + "ru": "Russe", + "zh": "Chinois" + }, + "manageSpeakersModal": { + "created": "Créé", + "description": "Gérez vos intervenants sauvegardés. Ils sont automatiquement sauvegardés lorsque vous utilisez des noms d'intervenants dans vos enregistrements.", + "failedToLoad": "Échec du chargement des intervenants", + "lastUsed": "Dernière utilisation", + "loadingSpeakers": "Chargement des intervenants...", + "noSpeakersYet": "Aucun intervenant sauvegardé pour le moment", + "speakersSaved": "{{count}} intervenants sauvegardés", + "speakersWillAppear": "Les intervenants apparaîtront ici lorsque vous utiliserez des noms d'intervenants dans vos enregistrements", + "times": "fois", + "title": "Gérer les Intervenants", + "used": "Utilisé" + }, + "messages": { + "colorSchemeApplied": "Schéma de couleurs appliqué", + "colorSchemeReset": "Schéma de couleurs réinitialisé par défaut", + "copiedSuccessfully": "Copié dans le presse-papiers !", + "copiedToClipboard": "Copié dans le presse-papiers", + "copyFailed": "Échec de la copie", + "copyNotSupported": "Échec de la copie. Votre navigateur ne prend peut-être pas en charge cette fonctionnalité.", + "downloadStarted": "Téléchargement commencé", + "errorRecoveringRecording": "Erreur lors de la récupération de l'enregistrement", + "eventDownloadFailed": "Échec du téléchargement de l'événement", + "eventDownloadSuccess": "Événement \"{{title}}\" téléchargé. Ouvrez le fichier pour l'ajouter à votre calendrier.", + "eventsExportFailed": "Échec de l'export des événements", + "eventsExportSuccess": "{{count}} événements exportés", + "failedToDeleteJob": "Échec de la suppression de la tâche", + "failedToRecoverRecording": "Échec de la récupération de l'enregistrement", + "failedToRetryJob": "Échec de la nouvelle tentative de tâche", + "failedToSave": "Échec de l'enregistrement : {{error}}", + "failedToSaveParticipants": "Échec de l'enregistrement des participants", + "followPlayerDisabled": "Mode suivi du lecteur désactivé", + "followPlayerEnabled": "Mode suivi du lecteur activé", + "invalidEventData": "Données d'événement invalides", + "jobQueuedForRetry": "Tâche mise en file d'attente pour nouvelle tentative", + "noEventsToExport": "Aucun événement à exporter", + "noNotesAvailableDownload": "Aucune note disponible au téléchargement.", + "noNotesToCopy": "Aucune note disponible à copier.", + "noPermissionToEdit": "Vous n'avez pas la permission de modifier cet enregistrement", + "noSummaryToCopy": "Aucun résumé disponible à copier.", + "noSummaryToDownload": "Aucun résumé disponible au téléchargement.", + "noTranscriptionToCopy": "Aucune transcription disponible à copier.", + "noTranscriptionToDownload": "Aucune transcription disponible au téléchargement.", + "notesCopied": "Notes copiées dans le presse-papiers !", + "notesDownloadFailed": "Échec du téléchargement des notes", + "notesDownloadSuccess": "Notes téléchargées avec succès !", + "notesUpdated": "Notes mises à jour avec succès", + "passwordChanged": "Mot de passe changé avec succès", + "profileUpdated": "Profil mis à jour avec succès", + "recordingDeleted": "Enregistrement supprimé avec succès", + "recordingDiscarded": "Enregistrement supprimé", + "recordingRecovered": "Enregistrement récupéré avec succès", + "recordingSaved": "Enregistrement sauvegardé avec succès", + "saveParticipantsFailed": "Échec de l'enregistrement : {{error}}", + "settingsSaved": "Paramètres enregistrés avec succès", + "summaryCopied": "Résumé copié dans le presse-papiers !", + "summaryDownloadFailed": "Échec du téléchargement du résumé", + "summaryDownloadSuccess": "Résumé téléchargé avec succès !", + "summaryGenerated": "Résumé généré avec succès", + "tagAdded": "Étiquette ajoutée avec succès", + "tagRemoved": "Étiquette supprimée avec succès", + "transcriptDownloadFailed": "Échec du téléchargement de la transcription", + "transcriptDownloadSuccess": "Transcription téléchargée avec succès !", + "transcriptionCopied": "Transcription copiée dans le presse-papiers !", + "transcriptionUpdated": "Transcription mise à jour avec succès" + }, + "metadata": { + "cancelEdit": "Annuler", + "createdAt": "Créé", + "duration": "Durée", + "editMetadata": "Modifier les Métadonnées", + "fileName": "Nom du Fichier", + "fileSize": "Taille du Fichier", + "language": "Langue", + "meetingDate": "Date de Réunion", + "processingTime": "Temps de Traitement", + "saveMetadata": "Enregistrer", + "status": "Statut", + "title": "Métadonnées", + "updatedAt": "Mis à jour", + "wordCount": "Nombre de Mots" + }, + "modal": { + "addSpeaker": "Ajouter un Nouveau Locuteur", + "colorScheme": "Schéma de Couleurs", + "deleteRecording": "Supprimer l'Enregistrement", + "editAsrTranscription": "Modifier la Transcription ASR", + "editParticipants": "Modifier les Participants", + "editRecording": "Modifier l'Enregistrement", + "editSpeakers": "Modifier les Locuteurs", + "editTags": "Modifier les Étiquettes d'Enregistrement", + "editTranscription": "Modifier la Transcription", + "identifySpeakers": "Identifier les Orateurs", + "recordingNotice": "Avis d'Enregistrement", + "reprocessSummary": "Retraiter le Résumé", + "reprocessTranscription": "Retraiter la Transcription", + "resetStatus": "Réinitialiser le Statut de l'Enregistrement?", + "shareRecording": "Partager l'Enregistrement", + "sharedTranscripts": "Mes Transcriptions Partagées", + "systemAudioHelp": "Aide Audio Système", + "uploadFiles": "Télécharger les fichiers", + "uploadNotice": "Avis de Téléchargement" + }, + "namingTemplates": { + "addPattern": "Ajouter un Motif", + "availableTemplates": "Modèles Disponibles", + "availableVars": "Variables Disponibles", + "cancel": "Annuler", + "createDefaults": "Créer des Modèles par Défaut", + "createNew": "Créer un Modèle", + "customVarsHint": "Définissez des motifs regex pour extraire des variables personnalisées des noms de fichiers.", + "delete": "Supprimer", + "description": "Définissez comment les titres d'enregistrement sont générés à partir des noms de fichiers et du contenu de transcription.", + "descriptionLabel": "Description", + "noDefault": "Pas de défaut (titre IA uniquement)", + "regexHint": "Extraire des données des noms de fichiers. Utilisez des groupes de capture () pour spécifier la correspondance.", + "regexPatterns": "Motifs Regex (Optionnel)", + "result": "Résultat:", + "save": "Enregistrer", + "selectOrCreate": "Sélectionnez un modèle à modifier ou créez-en un nouveau", + "tabTitle": "Nommage", + "template": "Modèle", + "templateName": "Nom du Modèle", + "test": "Tester", + "testTemplate": "Tester le Modèle", + "title": "Modèles de Nommage", + "userDefault": "Modèle par Défaut", + "userDefaultHint": "Appliqué quand aucune étiquette n'a de modèle de nommage." + }, + "nav": { + "account": "Compte", + "accountSettings": "Paramètres du Compte", + "admin": "Administration", + "adminDashboard": "Tableau de Bord Admin", + "darkMode": "Mode Sombre", + "groupManagement": "Gestion de Groupe", + "home": "Accueil", + "language": "Langue", + "lightMode": "Mode Clair", + "newRecording": "Nouvel Enregistrement", + "recording": "Enregistrement", + "settings": "Paramètres", + "signOut": "Déconnexion", + "teamManagement": "Gestion de Groupe", + "upload": "Télécharger", + "userProfile": "Profil Utilisateur" + }, + "notes": { + "cancelEdit": "Annuler la Modification", + "characterCount": "{{count}} caractère", + "characterCountPlural": "{{count}} caractères", + "editNotes": "Modifier les Notes", + "lastUpdated": "Dernière mise à jour", + "placeholder": "Ajoutez vos notes ici...", + "saveNotes": "Enregistrer les Notes", + "title": "Notes" + }, + "pwa": { + "installApp": "Installer l'App", + "installed": "Installé avec succès", + "installing": "Installation...", + "notificationPermissionDenied": "Permission de notification refusée", + "notificationsEnabled": "Notifications activées", + "offline": "Vous êtes hors ligne", + "screenAwake": "L'écran restera actif pendant l'enregistrement", + "screenAwakeFailed": "Impossible de garder l'écran actif", + "updateAvailable": "Mise à jour disponible" + }, + "recording": { + "acceptDisclaimer": "J'accepte", + "cancelRecording": "Annuler", + "discardRecovery": "Ignorer", + "disclaimer": "Avertissement d'Enregistrement", + "duration": "Durée", + "micPlusSys": "Mic + Sys", + "microphone": "Microphone", + "microphoneAndSystem": "Microphone + Système", + "microphonePermissionDenied": "Permission du microphone refusée", + "modeBoth": "Microphone + Système", + "modeMicrophone": "Microphone", + "modeSystem": "Audio système", + "notes": "Notes", + "notesPlaceholder": "Ajouter des notes sur cet enregistrement...", + "pauseRecording": "Pause", + "recordingFailed": "L'enregistrement a échoué", + "recordingInProgress": "Enregistrement en cours...", + "recordingMode": "Mode d'enregistrement", + "recordingSize": "Taille Estimée", + "recordingStopped": "Enregistrement arrêté", + "recordingTime": "Temps d'Enregistrement", + "recoveryDescription": "Nous avons trouvé un enregistrement inachevé d'une session précédente. Souhaitez-vous le restaurer ?", + "recoveryFound": "Enregistrement non sauvegardé détecté", + "recoveryTitle": "Récupérer l'enregistrement", + "restoreRecording": "Restaurer", + "resumeRecording": "Reprendre", + "saveRecording": "Enregistrer l'Enregistrement", + "size": "Taille", + "startRecording": "Démarrer l'Enregistrement", + "startedAt": "Commencé le", + "stopRecording": "Arrêter l'Enregistrement", + "systemAudio": "Audio Système", + "systemAudioNotSupported": "L'enregistrement audio système n'est pas pris en charge dans ce navigateur", + "title": "Enregistrement Audio" + }, + "reprocessModal": { + "audioReTranscribedFromScratch": "L'audio sera re-transcrit à partir de zéro. Cela régénérera également le titre et le résumé basés sur la nouvelle transcription.", + "audioReTranscribedWithAsr": "L'audio sera re-transcrit en utilisant l'endpoint ASR. Cela inclut la diarisation et régénérera le titre et le résumé.", + "manualEditsOverwritten": "Toute modification manuelle de la transcription, du titre ou du résumé sera écrasée.", + "manualEditsOverwrittenSummary": "Toute modification manuelle du titre ou du résumé sera écrasée.", + "newTitleAndSummary": "Un nouveau titre et résumé seront générés basés sur la transcription existante." + }, + "settings": { + "apiKeys": "Clés API", + "appearance": "Apparence", + "changePassword": "Changer le Mot de Passe", + "dataExport": "Export de Données", + "deleteAccount": "Supprimer le Compte", + "integrations": "Intégrations", + "language": "Langue", + "notifications": "Notifications", + "preferences": "Préférences", + "privacy": "Confidentialité", + "profile": "Profil", + "security": "Sécurité", + "theme": "Thème", + "title": "Paramètres", + "twoFactorAuth": "Authentification à Deux Facteurs" + }, + "sharedTranscripts": { + "noSharedTranscripts": "Vous n'avez encore partagé aucune transcription.", + "shareNotes": "Partager les Notes", + "shareSummary": "Partager le Résumé", + "sharedOn": "Partagé le" + }, + "sharedTranscriptsPage": { + "noSharedTranscripts": "Vous n'avez pas encore partagé de transcriptions." + }, + "sharing": { + "canEdit": "Peut modifier", + "canReshare": "Peut repartager", + "internalSharing": "Partage Interne", + "notSharedYet": "Pas encore partagé", + "publicBadge": "Public", + "publicLink": "Lien Public", + "publicLinks": "lien(s) public(s)", + "publicLinksGenerated": "lien(s) public(s) généré(s)", + "searchUsers": "Rechercher des utilisateurs...", + "sharedBadge": "Partagé", + "sharedBy": "Partagé par", + "sharedWith": "Partagé avec", + "teamBadge": "Équipe", + "teamRecording": "Enregistrement d'équipe", + "unknown": "Inconnu", + "users": "utilisateur(s)" + }, + "sidebar": { + "advancedSearch": "Recherche Avancée", + "archived": "Archivé", + "archivedRecordings": "Enregistrements Archivés", + "dateRange": "Plage de Dates", + "filters": "Filtres", + "highlighted": "Mis en Évidence", + "inbox": "Boîte de Réception", + "lastMonth": "Mois Dernier", + "lastWeek": "Semaine Dernière", + "loadMore": "Charger Plus", + "markAsRead": "Marquer comme lu", + "moveToInbox": "Déplacer vers la boîte de réception", + "noRecordings": "Aucun enregistrement trouvé", + "older": "Plus Ancien", + "removeFromHighlighted": "Retirer des favoris", + "searchRecordings": "Rechercher des enregistrements...", + "sharedWithMe": "Partagé avec Moi", + "sortBy": "Trier Par", + "sortByDate": "Date de Création", + "sortByMeetingDate": "Date de Réunion", + "starred": "Favoris", + "tags": "Étiquettes", + "thisMonth": "Ce Mois", + "thisWeek": "Cette Semaine", + "today": "Aujourd'hui", + "totalRecordings": "{{count}} enregistrement", + "totalRecordingsPlural": "{{count}} enregistrements", + "upcoming": "À venir", + "yesterday": "Hier" + }, + "speakers": { + "filterBySpeaker": "Filtrer par intervenant", + "noMatchingSpeakers": "Aucun intervenant correspondant", + "searchSpeakers": "Rechercher..." + }, + "speakersManagement": { + "added": "Ajouté", + "confidence": "Confiance", + "confidenceHigh": "élevée", + "confidenceLow": "faible", + "confidenceMedium": "moyenne", + "created": "Créé", + "description": "Gérez vos orateurs sauvegardés. Ils sont automatiquement enregistrés lorsque vous utilisez des noms d'orateurs dans vos enregistrements.", + "failedToLoad": "Échec du chargement des orateurs", + "failedToLoadSnippets": "Échec du chargement des extraits", + "keepThisSpeaker": "Garder cet orateur (les autres seront fusionnés) :", + "last": "Dernier", + "lastUsed": "Dernière utilisation", + "loadingSpeakers": "Chargement des orateurs...", + "match": "correspondance", + "mergeDescription": "Combiner plusieurs profils d'orateurs en un seul. Tous les embeddings, extraits et données d'utilisation seront fusionnés.", + "mergeFailed": "Échec de la fusion des orateurs", + "mergeNSpeakers": "Fusionner {{count}} orateurs", + "mergeSpeakers": "Fusionner les orateurs", + "mergeSuccess": "Orateurs fusionnés avec succès", + "noSnippetsAvailable": "Aucun extrait disponible", + "noSpeakersYet": "Aucun orateur sauvegardé pour le moment", + "sample": "échantillon", + "samples": "échantillons", + "selectToMerge": "Sélectionner 2+ pour fusionner", + "speakersToMerge": "Orateurs à fusionner :", + "speakersWillAppear": "Les orateurs apparaîtront ici lorsque vous utiliserez des noms d'orateurs dans vos enregistrements", + "targetWillReceive": "L'orateur sélectionné recevra toutes les données vocales et les extraits des autres.", + "time": "fois", + "times": "fois", + "totalSpeakers": "orateurs sauvegardés", + "used": "Utilisé", + "usedTimes": "Utilisé", + "viewSnippets": "Voir les extraits", + "voiceMatchSuggestions": "Suggestions de correspondance vocale", + "voiceProfile": "Profil vocal" + }, + "status": { + "completed": "Terminé", + "failed": "Échec", + "processing": "Traitement", + "queued": "En file d'attente", + "stuck": "Réinitialiser le traitement bloqué", + "summarizing": "Résumé", + "transcribing": "Transcription", + "uploading": "Téléchargement" + }, + "summary": { + "actionItems": "Actions à Mener", + "cancelEdit": "Annuler la Modification", + "decisions": "Décisions", + "editSummary": "Modifier le Résumé", + "generateSummary": "Générer un Résumé", + "keyPoints": "Points Clés", + "noSummary": "Aucun résumé disponible", + "participants": "Participants", + "regenerateSummary": "Régénérer le Résumé", + "saveSummary": "Enregistrer le Résumé", + "summaryFailed": "La génération du résumé a échoué", + "summaryInProgress": "Génération du résumé en cours...", + "title": "Résumé" + }, + "tagManagement": { + "asrDefaults": "Paramètres ASR par Défaut", + "createTag": "Créer une Étiquette", + "customPrompt": "Invite Personnalisée", + "description": "Organisez vos enregistrements avec des étiquettes personnalisées. Chaque étiquette peut avoir sa propre invite de résumé et ses paramètres ASR par défaut.", + "maxSpeakers": "Max", + "minSpeakers": "Min", + "noTags": "Vous n'avez pas encore créé d'étiquettes." + }, + "tags": { + "addTag": "Ajouter une Étiquette", + "clearTagFilter": "Effacer le filtre", + "createTag": "Créer une Étiquette", + "currentTags": "Étiquettes Actuelles", + "filterByTag": "Filtrer par étiquette", + "manageAllTags": "Gérer Toutes les Étiquettes", + "noAvailableTags": "Aucune étiquette disponible", + "noMatchingTags": "Aucune étiquette correspondante", + "noTags": "Aucune étiquette", + "removeTag": "Supprimer l'Étiquette", + "searchTags": "Rechercher...", + "tagColor": "Couleur de l'Étiquette", + "tagName": "Nom de l'Étiquette", + "title": "Étiquettes" + }, + "tagsModal": { + "addTags": "Ajouter des Étiquettes", + "currentTags": "Étiquettes Actuelles", + "done": "Terminé", + "noTagsAssigned": "Aucune étiquette assignée à cet enregistrement", + "searchTags": "Rechercher des étiquettes..." + }, + "time": { + "dayAgo": "Il y a 1 jour", + "daysAgo": "Il y a {{count}} jours", + "hourAgo": "Il y a 1 heure", + "hoursAgo": "Il y a {{count}} heures", + "justNow": "À l'instant", + "minuteAgo": "Il y a 1 minute", + "minutesAgo": "Il y a {{count}} minutes", + "monthAgo": "Il y a 1 mois", + "monthsAgo": "Il y a {{count}} mois", + "weekAgo": "Il y a 1 semaine", + "weeksAgo": "Il y a {{count}} semaines", + "yearAgo": "Il y a 1 an", + "yearsAgo": "Il y a {{count}} ans" + }, + "tooltips": { + "changeSpeaker": "Changer le locuteur", + "clearChat": "Effacer le chat", + "copyTranscript": "Copier la transcription", + "deleteTeam": "Supprimer le Groupe", + "doubleClickToEdit": "Double-cliquez pour modifier", + "downloadTranscriptWithTemplate": "Télécharger la transcription avec modèle", + "editTeam": "Modifier le Groupe", + "editText": "Modifier le texte", + "editTitle": "Modifier le titre", + "editTranscript": "Modifier la transcription", + "exitFullscreen": "Quitter le plein écran", + "expand": "Développer", + "followPlayerDisabled": "Activer le défilement automatique - la transcription suit la lecture audio", + "followPlayerEnabled": "Désactiver le défilement automatique - la transcription reste en place", + "fullscreenVideo": "Vidéo en plein écran", + "grantPublicSharing": "Accorder la permission de partage public", + "hideVideo": "Masquer la vidéo", + "highlight": "Surligner", + "makeAdmin": "Nommer Administrateur", + "manageMembers": "Gérer les Membres", + "manageTeamTags": "Gérer les Étiquettes de Groupe", + "markAsRead": "Marquer comme lu", + "maximizeChat": "Maximiser le chat", + "minimize": "Réduire", + "moveToInbox": "Déplacer vers la boîte de réception", + "mute": "Muet", + "pause": "Pause", + "play": "Lecture", + "playbackSpeed": "Vitesse de lecture", + "removeAdmin": "Retirer l'Administrateur", + "removeFromQueue": "Retirer de la file d'attente", + "removeFromTeam": "Retirer de l'équipe", + "removeHighlight": "Retirer le surlignage", + "reprocessTranscription": "Retraiter la transcription", + "reprocessWithAsr": "Retraiter avec ASR", + "restoreChat": "Restaurer le chat", + "revokePublicSharing": "Révoquer la permission de partage public", + "shareWithUsers": "Partager avec des utilisateurs", + "showVideo": "Afficher la vidéo", + "switchToDarkMode": "Passer en Mode Sombre", + "switchToLightMode": "Passer en Mode Clair", + "unmute": "Activer le son" + }, + "transcriptTemplates": { + "availableTemplates": "Modèles Disponibles", + "availableVars": "Variables Disponibles", + "cancel": "Annuler", + "chooseTemplate": "Choisir un modèle...", + "createDefaults": "Créer des Modèles par Défaut", + "createNew": "Créer un Modèle", + "default": "Par Défaut", + "delete": "Supprimer", + "description": "Personnalisez le formatage des transcriptions pour le téléchargement et l'exportation.", + "downloadDefault": "Télécharger par défaut", + "downloadWithoutTemplate": "Télécharger sans modèle", + "filters": "Filtres: |upper pour majuscules, |srt pour format sous-titres", + "save": "Enregistrer", + "selectOrCreate": "Sélectionnez un modèle à éditer ou créez-en un nouveau", + "selectTemplate": "Sélectionner un Modèle", + "setDefault": "Définir comme modèle par défaut", + "tabTitle": "Transcription", + "template": "Modèle", + "templateName": "Nom du Modèle", + "title": "Modèles de Transcription", + "viewGuide": "Voir le Guide des Modèles" + }, + "transcription": { + "autoIdentifySpeakers": "Identifier Automatiquement les Orateurs", + "bubble": "Bulle", + "cancelEdit": "Annuler la Modification", + "copy": "Copier", + "copyToClipboard": "Copier dans le Presse-papiers", + "download": "Télécharger", + "downloadTranscript": "Télécharger la Transcription", + "edit": "Éditer", + "editSpeakers": "Modifier les Orateurs", + "editTranscription": "Modifier la Transcription", + "highlightSearchResults": "Surligner les résultats de recherche", + "noTranscription": "Aucune transcription disponible", + "regenerateTranscription": "Régénérer la Transcription", + "saveTranscription": "Enregistrer la Transcription", + "searchInTranscript": "Rechercher dans la transcription...", + "simple": "Simple", + "speaker": "Orateur {{number}}", + "speakerLabels": "Étiquettes d'Orateur", + "title": "Transcription", + "unknownSpeaker": "Orateur Inconnu" + }, + "upload": { + "chunking": "Les gros fichiers seront automatiquement divisés pour le traitement", + "completed": "Terminé", + "copies": "copies de ce fichier", + "dropzone": "Glissez et déposez des fichiers audio ici, ou cliquez pour parcourir", + "duplicateDetected": "Ce fichier semble être un doublon de \"{{existingName}}\" (importé le {{existingDate}})", + "duplicateFile": "Fichier en double", + "failed": "Échec", + "fileExceedsMaxSize": "Le fichier \"{{name}}\" dépasse la taille maximale de {{size}} Mo et a été ignoré.", + "fileRemovedFromQueue": "Fichier retiré de la file d'attente", + "filesToUpload": "Fichiers à télécharger", + "invalidFileType": "Type de fichier invalide \"{{name}}\". Seuls les fichiers audio et les conteneurs vidéo avec audio (MP3, WAV, MP4, MOV, AVI, etc.) sont acceptés. Fichier ignoré.", + "maxFileSize": "Taille maximale du fichier", + "queued": "En file d'attente", + "selectFiles": "Sélectionner des Fichiers", + "settingsApplyToAll": "Les paramètres s'appliquent à tous les fichiers de cette session", + "summarizing": "Résumé...", + "supportedFormats": "Supports MP3, WAV, M4A, MP4, MOV, AVI, AMR, et plus", + "title": "Télécharger Audio", + "transcribing": "Transcription...", + "untitled": "Enregistrement Sans Titre", + "uploadNFiles": "Télécharger {{count}} fichier(s)", + "uploadProgress": "Progression du Téléchargement", + "videoRetained": "Vidéo conservée pour la lecture", + "willAutoSummarize": "Résumé automatique après la transcription" + }, + "uploadProgress": { + "title": "Progression du Téléchargement" + } +} \ No newline at end of file diff --git a/static/locales/ru.json b/static/locales/ru.json new file mode 100644 index 0000000..844d91e --- /dev/null +++ b/static/locales/ru.json @@ -0,0 +1,1505 @@ +{ + "aboutPage": { + "aiSummarization": "ИИ-резюмирование", + "aiSummarizationDesc": "Интеграция OpenRouter и Ollama с настраиваемыми запросами", + "asrEnabled": "ASR включён", + "asrEndpoint": "ASR-эндпоинт", + "audioTranscription": "Транскрибирование аудио", + "audioTranscriptionDesc": "Поддержка Whisper API и пользовательских ASR с высокой точностью", + "backend": "Бэкенд", + "database": "База данных", + "deployment": "Развёртывание", + "dockerDescription": "Официальные Docker-образы", + "dockerHub": "Docker Hub", + "documentation": "Документация", + "documentationDescription": "Руководство пользователя и учебные материалы", + "endpoint": "Эндпоинт", + "frontend": "Фронтенд", + "githubDescription": "Исходный код, задачи и релизы", + "githubRepository": "Репозиторий GitHub", + "inquireMode": "Режим Inquire", + "inquireModeDesc": "Семантический поиск по всем вашим записям", + "interactiveChat": "Интерактивный чат", + "interactiveChatDesc": "Общайтесь с транскрипциями при помощи ИИ", + "keyFeatures": "Ключевые возможности", + "largeLanguageModel": "Большая языковая модель", + "model": "Модель", + "projectDescription": "Преобразуйте аудиозаписи в организованные заметки с поддержкой поиска. ИИ-транскрибирование, резюмирование и интерактивный чат.", + "projectLinks": "Ссылки на проект", + "sharingExport": "Обмен и экспорт", + "sharingExportDesc": "Делитесь записями и экспортируйте в разные форматы", + "speakerDiarization": "Диаризация спикеров", + "speakerDiarizationDesc": "Автоматическое определение и маркировка разных спикеров", + "speechRecognition": "Распознавание речи", + "systemConfiguration": "Конфигурация системы", + "tagline": "ИИ-транскрибирование аудио и создание заметок", + "technologyStack": "Технологический стек", + "title": "О продукте", + "version": "Версия", + "whisperApi": "Whisper API" + }, + "aboutPageDetails": { + "aiSummarizationDesc": "Интеграция OpenRouter и Ollama с настраиваемыми запросами", + "asrEnabled": "ASR включён", + "asrEndpoint": "ASR-эндпоинт", + "audioTranscriptionDesc": "Поддержка Whisper API и пользовательских ASR с высокой точностью", + "backend": "Бэкенд", + "database": "База данных", + "deployment": "Развёртывание", + "dockerDescription": "Официальные Docker-образы", + "documentationDescription": "Инструкции по настройке и руководство пользователя", + "endpoint": "Эндпоинт", + "frontend": "Фронтенд", + "githubDescription": "Исходный код, задачи и релизы", + "inquireModeDesc": "Семантический поиск по всем вашим записям", + "interactiveChatDesc": "Общайтесь с транскрипциями при помощи ИИ", + "model": "Модель", + "no": "Нет", + "sharingExportDesc": "Делитесь записями и экспортируйте в разные форматы", + "speakerDiarizationDesc": "Автоматическое определение и маркировка разных спикеров", + "whisperApi": "Whisper API", + "yes": "Да" + }, + "account": { + "accountActions": "Действия с аккаунтом", + "autoLabel": "Auto-label", + "autoSummarizationDisabled": "Auto-summarization disabled by admin", + "autoSummarize": "Auto-summarize", + "changePassword": "Изменить пароль", + "chooseLanguageForInterface": "Выберите язык интерфейса приложения", + "companyOrganization": "Компания / Организация", + "completedRecordings": "Завершено", + "defaultHotwords": "Default Hotwords", + "defaultHotwordsPlaceholder": "e.g., Speakr, CTranslate2, PyAnnote, SDRs", + "defaultInitialPrompt": "Default Initial Prompt", + "defaultInitialPromptPlaceholder": "e.g., This is a meeting about AI transcription tools. The speakers discuss CTranslate2, PyAnnote, and SDRs.", + "email": "Email", + "failedRecordings": "С ошибкой", + "fullName": "Полное имя", + "goToRecordings": "Перейти к записям", + "interfaceLanguage": "Язык интерфейса", + "jobTitle": "Должность", + "languageForSummaries": "Язык для заголовков, резюме и чата. Оставьте пустым для использования поведения по умолчанию выбранных моделей.", + "languagePreferences": "Языковые настройки", + "leaveBlankForAutoDetect": "Оставьте пустым для автоматического определения сервисом транскрибирования", + "manageSpeakers": "Управление спикерами", + "personalFolder": "Personal Folder (Not Associated with a Group)", + "personalInfo": "Личная информация", + "personalTag": "Personal Tag (Not Associated with a Group)", + "preferredOutputLanguage": "Предпочитаемый язык чат-бота и резюмирования", + "processingRecordings": "В обработке", + "saveAllPreferences": "Сохранить все настройки", + "ssoLinkAccount": "Link {{provider}} account", + "ssoLinked": "Linked", + "ssoNotLinked": "Not linked", + "ssoProvider": "Provider", + "ssoSetPasswordFirst": "To unlink SSO, you must first set a password.", + "ssoSubject": "Subject:", + "ssoUnlinkAccount": "Unlink {{provider}} account", + "ssoUnlinkConfirm": "Are you sure you want to unlink your SSO account? You will need to use your password to log in.", + "statistics": "Статистика аккаунта", + "title": "Информация об аккаунте", + "totalRecordings": "Всего записей", + "transcriptionHints": "Transcription Hints", + "transcriptionHintsDesc": "These defaults are used when no tag or folder overrides are set. They help improve transcription accuracy for your specific use case.", + "transcriptionLanguage": "Язык транскрибирования", + "userDetails": "Данные пользователя", + "username": "Имя пользователя" + }, + "accountTabs": { + "about": "О продукте", + "apiTokens": "API-токены", + "customPrompts": "Пользовательские запросы", + "folderManagement": "Управление папками", + "help": "Помощь", + "namingTemplates": "Именование", + "promptOptions": "Настройки запросов", + "sharedTranscripts": "Общие транскрипты", + "speakersManagement": "Управление спикерами", + "tagManagement": "Управление тегами", + "templates": "Шаблоны", + "transcriptTemplates": "Шаблоны транскриптов" + }, + "admin": { + "title": "Администратор", + "userMenu": "Меню пользователя" + }, + "adminDashboard": { + "aboutInquireMode": "О режиме Inquire", + "actions": "ДЕЙСТВИЯ", + "addNewUser": "Добавить нового пользователя", + "addUser": "Добавить пользователя", + "additionalContext": "Дополнительный контекст", + "admin": "АДМИНИСТРАТОР", + "adminDefaultPrompt": "Системный запрос по умолчанию", + "adminDefaultPromptDesc": "Запрос, настроенный выше (показан на этой странице)", + "adminUser": "Администратор", + "allRecordingsProcessed": "Все записи обработаны!", + "allowed": "Allowed", + "available": "Доступно", + "blocked": "заблокировано", + "budgetWarnings": "Предупреждения о бюджете", + "characters": "символов", + "chunkSize": "Размер фрагмента", + "complete": "завершено", + "completedRecordings": "Завершено", + "confirmPasswordLabel": "Подтвердите пароль", + "contextNotes": { + "jsonConversion": "JSON-транскрипты конвертируются в чистый текст перед отправкой", + "modelConfig": "Используемая модель задаётся через переменную окружения TEXT_MODEL_NAME", + "tagPrompts": "Если существует несколько запросов тегов, они объединяются в порядке добавления тегов", + "transcriptLimit": "Транскрипты ограничены настраиваемым количеством символов (по умолчанию: 30 000)" + }, + "createFirstGroup": "Create Your First Group", + "created": "Created", + "currentUsage": "Текущее использование", + "currentUsageMinutes": "Текущее использование", + "defaultPromptInfo": "Этот запрос по умолчанию будет использоваться для всех пользователей, которые не настроили свой собственный в настройках аккаунта.", + "defaultPrompts": "Запросы по умолчанию", + "defaultSummarizationPrompt": "Запрос резюмирования по умолчанию", + "description": "Description", + "editUser": "Редактировать пользователя", + "email": "EMAIL", + "emailLabel": "Email", + "embeddingModel": "Модель эмбеддингов", + "embeddingsStatus": "Статус эмбеддингов", + "errors": { + "failedToLoadPrompt": "Не удалось загрузить запрос по умолчанию", + "failedToSavePrompt": "Не удалось сохранить запрос по умолчанию. Попробуйте снова.", + "invalidFileSize": "Введите корректный размер от 1 до 10000 МБ", + "invalidInteger": "Введите корректное целое число", + "invalidNumber": "Введите корректное число", + "maxTimeout": "Время ожидания не может превышать 10 часов (36000 секунд)", + "minCharacters": "Введите корректное число, не менее 1000 символов", + "minTimeout": "Время ожидания должно быть не менее 60 секунд" + }, + "failedRecordings": "С ошибкой", + "groupName": "Group Name", + "groupsTab": "Groups", + "id": "ID", + "inquireModeDescription": "Режим Inquire позволяет пользователям искать в нескольких транскрипциях, используя вопросы на естественном языке. Работает путём разбиения транскрипций на фрагменты и создания эмбеддингов для поиска с помощью ИИ-моделей.", + "languagePreferenceNote": "Примечание: если у пользователя установлен предпочитаемый язык вывода, будет добавлено \"Ensure your response is in {language}.\"", + "lastUpdated": "Последнее обновление", + "maxFileSizeHelp": "Максимальный размер файла в мегабайтах (1-10000 МБ)", + "megabytes": "МБ", + "members": "Members", + "membersCount": "members", + "minutes": "минут", + "monthlyCost": "Месячная стоимость", + "monthlyTokenBudget": "Месячный лимит токенов", + "monthlyTranscriptionBudget": "Месячный бюджет транскрипции (минуты)", + "needProcessing": "Требуют обработки", + "never": "Никогда", + "newPasswordLabel": "Новый пароль (оставьте пустым, чтобы сохранить текущий)", + "no": "Нет", + "noData": "Нет данных", + "noDescription": "No description", + "noDescriptionAvailable": "Описание недоступно", + "noGroupsAdmin": "You are not an admin of any groups yet", + "noGroupsCreated": "No groups created yet", + "noLimit": "Без ограничений", + "noMembersYet": "No members yet", + "noTranscriptionData": "Данные об использовании транскрипции недоступны", + "none": "Нет", + "notSet": "Не задано", + "overlap": "Перекрытие", + "passwordLabel": "Пароль", + "passwordsDoNotMatch": "Passwords do not match", + "pendingRecordings": "В ожидании", + "percentUsed": "использовано", + "placeholdersNote": "Заполнители заменяются фактическими значениями при обработке записи.", + "processAllRecordings": "Обработать все записи", + "processNext10": "Обработать следующие 10", + "processedForInquire": "Обработано для Inquire", + "processing": "Обработка...", + "processingActions": "Действия обработки", + "processingProgress": "Прогресс обработки", + "processingRecordings": "В обработке", + "promptDescription": "Этот запрос будет использоваться для генерации резюме всех записей, когда пользователи не установили свой собственный запрос.", + "promptHierarchy": "Иерархия запросов", + "promptPriorityDescription": "Система использует следующий порядок приоритетов при выборе запроса:", + "promptResetMessage": "Запрос сброшен на системный по умолчанию. Нажмите \"Сохранить изменения\" для применения.", + "promptSavedSuccessfully": "Запрос по умолчанию успешно сохранён!", + "publicShare": "Public Share", + "recordingStatusDistribution": "Распределение статусов записей", + "recordings": "ЗАПИСИ", + "recordingsNeedProcessing": "{{count}} записей требуют обработки для режима Inquire.", + "refreshStatus": "Обновить статус", + "resetToDefault": "Сбросить на стандартный", + "saving": "Сохранение...", + "searchUsers": "Поиск пользователей...", + "seconds": "секунд", + "settings": { + "asrTimeoutDesc": "Максимальное время ожидания завершения ASR-транскрибирования в секундах. По умолчанию 1800 секунд (30 минут).", + "defaultSummaryPromptDesc": "Запрос резюмирования по умолчанию, используемый когда пользователи не установили свой собственный. Служит базовым запросом для всех пользователей.", + "maxFileSizeDesc": "Максимальный допустимый размер файла для загрузки аудио в мегабайтах (МБ).", + "recordingDisclaimerDesc": "Юридическое предупреждение, показываемое пользователям перед началом записи. Поддерживает форматирование Markdown. Оставьте пустым, чтобы отключить.", + "uploadDisclaimerDesc": "Юридическое предупреждение, показываемое перед загрузкой файлов. Поддерживает Markdown. Оставьте пустым, чтобы отключить.", + "customBannerDesc": "Пользовательский баннер в верхней части страницы. Поддерживает Markdown. Оставьте пустым, чтобы отключить.", + "transcriptLengthLimitDesc": "Максимальное количество символов транскрипта для отправки в LLM для резюмирования и чата. Используйте -1 для отсутствия ограничений." + }, + "storageUsed": "ИСПОЛЬЗОВАНО ХРАНИЛИЩА", + "summarizationInstructions": "Инструкции для резюмирования", + "systemFallback": "Системный резервный", + "systemFallbackDesc": "Жёстко заданный по умолчанию, если ничего из вышеперечисленного не установлено", + "systemPrompt": "Системный запрос", + "systemSettings": "Системные настройки", + "systemStatistics": "Системная статистика", + "tagCustomPrompt": "Пользовательский запрос тега", + "tagCustomPromptDesc": "Если у записи есть теги с пользовательскими запросами", + "textSearchOnly": "Только текстовый поиск", + "thisMonth": "Этот месяц", + "timeoutRecommendation": "Рекомендуется: 30-120 минут для длинных аудиофайлов", + "title": "Панель администратора", + "todaysMinutes": "Минуты сегодня", + "tokenBudgetExceeded": "Месячный лимит токенов превышен. Пожалуйста, свяжитесь с администратором.", + "tokenBudgetHelp": "Установите месячный лимит токенов для функций ИИ. Оставьте пустым для неограниченного использования.", + "tokenBudgetPlaceholder": "Оставьте пустым для неограниченного", + "tokenUsage": "Использование токенов", + "tokens": "токенов", + "topUsers": "Топ пользователей", + "topUsersByStorage": "Топ пользователей по использованию хранилища", + "total": "Всего", + "totalChunks": "Всего фрагментов", + "totalQueries": "Всего запросов", + "totalRecordings": "Всего записей", + "totalStorage": "Общее хранилище", + "totalUsers": "Всего пользователей", + "transcriptionBudgetHelp": "Ограничьте минуты транскрипции в месяц. Оставьте пустым для неограниченного.", + "transcriptionBudgetPlaceholder": "Оставьте пустым для неограниченного", + "transcriptionUsage": "Использование транскрипции", + "updateUser": "Обновить пользователя", + "userCustomPrompt": "Пользовательский запрос", + "userCustomPromptDesc": "Если пользователь установил свой собственный запрос в настройках аккаунта", + "userManagement": "Управление пользователями", + "userMessageTemplate": "Шаблон сообщения пользователя", + "userTranscriptionUsage": "Использование транскрипции пользователями (Этот месяц)", + "username": "ИМЯ ПОЛЬЗОВАТЕЛЯ", + "usernameLabel": "Имя пользователя", + "vectorDimensions": "Размерность векторов", + "vectorStore": "Векторное хранилище", + "vectorStoreManagement": "Управление векторным хранилищем", + "vectorStoreUpToDate": "Векторное хранилище актуально.", + "viewFullPromptStructure": "Показать полную структуру запросов LLM", + "warning": "предупреждение", + "yes": "Да" + }, + "apiTokens": { + "activeTokens": "Активные токены", + "createFirstToken": "Создайте свой первый API-токен для программного доступа", + "createToken": "Создать токен", + "created": "Создан", + "description": "Создавайте и управляйте API-токенами для программного доступа к вашему аккаунту", + "expires": "Истекает", + "lastUsed": "Последнее использование", + "neverUsed": "Не использовался", + "noExpiration": "Без срока истечения", + "noTokens": "Нет API-токенов", + "securityNotice": "Уведомление о безопасности", + "securityWarning": "Относитесь к API-токенам как к паролям. Они предоставляют полный доступ к вашему аккаунту. Никогда не публикуйте токены в общедоступных местах, таких как GitHub, клиентский код или логи", + "title": "API-токены", + "usageExamples": "Примеры использования" + }, + "buttons": { + "addSegment": "Добавить сегмент", + "addSpeaker": "Добавить спикера", + "cancel": "Отмена", + "clearAllFilters": "Сбросить все фильтры", + "clearCompleted": "Очистить завершённые загрузки", + "clearSearchText": "Очистить текст поиска", + "close": "Закрыть", + "copy": "Копировать", + "copyMessage": "Копировать сообщение", + "copyNotes": "Копировать заметки", + "copySummary": "Копировать резюме", + "copyToClipboard": "Скопировать в буфер обмена", + "createTag": "Создать тег", + "deleteAll": "Удалить всё", + "deleteSpeaker": "Удалить спикера", + "deleteTag": "Удалить тег", + "deleteUser": "Удалить пользователя", + "downloadAsWord": "Скачать как Word", + "downloadAudio": "Скачать аудио", + "downloadChat": "Скачать чат как документ Word", + "downloadNotes": "Скачать заметки как документ Word", + "downloadSummary": "Скачать резюме как документ Word", + "editNotes": "Редактировать заметки", + "editSetting": "Редактировать настройку", + "editSpeakers": "Редактировать спикеров...", + "editSummary": "Редактировать резюме", + "editTag": "Редактировать тег", + "editTags": "Редактировать теги", + "editTranscription": "Редактировать транскрипцию", + "editUser": "Редактировать пользователя", + "exportCalendar": "Экспортировать в календарь", + "help": "Справка", + "identifySpeakers": "Определить спикеров", + "next": "Далее", + "previous": "Назад", + "refresh": "Обновить", + "reprocessSummary": "Перегенерировать резюме", + "reprocessTranscription": "Перегенерировать транскрипцию", + "reprocessWithAsr": "Перегенерировать через ASR", + "resetStuckProcessing": "Сбросить зависшую обработку", + "saveChanges": "Сохранить изменения", + "saveCustomPrompt": "Сохранить пользовательский запрос", + "saveNames": "Сохранить имена", + "saveSettings": "Сохранить настройки", + "shareRecording": "Поделиться записью", + "toggleTheme": "Переключить тему", + "updateTag": "Обновить тег" + }, + "changePasswordModal": { + "confirmPassword": "Подтвердите новый пароль", + "currentPassword": "Текущий пароль", + "newPassword": "Новый пароль", + "passwordRequirement": "Пароль должен содержать не менее 8 символов", + "title": "Изменение пароля" + }, + "chat": { + "availableAfterTranscription": "Чат будет доступен после завершения транскрибирования", + "cannotChatTranscriptionFailed": "Cannot chat: transcription failed. Please reprocess the transcription first.", + "chatWithTranscription": "Чат с транскрипцией", + "clearChat": "Очистить чат", + "cleared": "Chat cleared", + "downloadFailed": "Failed to download chat", + "downloadSuccess": "Chat downloaded successfully!", + "error": "Не удалось отправить сообщение", + "noMessages": "Сообщений пока нет", + "noMessagesToDownload": "No chat messages to download.", + "placeholder": "Задайте вопрос об этой записи...", + "placeholderWithHint": "Задайте вопрос об этой записи... (Enter для отправки, Ctrl+Enter для новой строки)", + "send": "Отправить", + "suggestedQuestions": "Предлагаемые вопросы", + "thinking": "Обдумываю...", + "title": "Чат", + "whatAreActionItems": "Какие есть задачи к выполнению?", + "whatAreKeyPoints": "Каковы ключевые моменты?", + "whatWasDiscussed": "Что обсуждалось?", + "whoSaidWhat": "Кто что сказал?" + }, + "colorScheme": { + "chooseRecording": "Выберите запись на боковой панели, чтобы увидеть её транскрипцию и резюме", + "darkThemes": "Тёмные темы", + "descriptions": { + "blue": "Classic blue theme with a clean, professional feel", + "emerald": "Nature-inspired green theme for a calming experience", + "purple": "Rich purple theme with an elegant, modern look", + "rose": "Warm rose theme with a soft, inviting aesthetic", + "amber": "Warm amber tones for a cozy, productive feel", + "teal": "Cool teal theme with a refreshing, modern vibe" + }, + "lightThemes": "Светлые темы", + "names": { + "blue": "Ocean Blue", + "emerald": "Forest Green", + "purple": "Royal Purple", + "rose": "Coral Rose", + "amber": "Golden Amber", + "teal": "Arctic Teal" + }, + "resetToDefault": "Сбросить на стандартную", + "selectRecording": "Выберите запись", + "subtitle": "Настройте интерфейс с помощью красивых цветовых тем", + "themes": { + "light": { + "blue": { + "name": "Океанический синий", + "description": "Классическая синяя тема с профессиональным видом" + }, + "emerald": { + "name": "Лесной изумруд", + "description": "Свежая зелёная тема для естественного ощущения" + }, + "purple": { + "name": "Королевский пурпур", + "description": "Элегантная фиолетовая тема с изысканностью" + }, + "rose": { + "name": "Закат в розовых тонах", + "description": "Тёплая розовая тема с мягкой энергией" + }, + "amber": { + "name": "Золотистый янтарь", + "description": "Тёплая жёлтая тема для яркости" + }, + "teal": { + "name": "Океанский бирюзовый", + "description": "Прохладная бирюзовая тема для спокойствия" + } + }, + "dark": { + "blue": { + "name": "Полуночный синий", + "description": "Глубокий синий для сосредоточенной работы" + }, + "emerald": { + "name": "Тёмный лес", + "description": "Насыщенный зелёный для комфортного просмотра" + }, + "purple": { + "name": "Глубокий пурпур", + "description": "Таинственный фиолетовый для творчества" + }, + "rose": { + "name": "Тёмная роза", + "description": "Приглушённый розовый с едва заметным теплом" + }, + "amber": { + "name": "Тёмный янтарь", + "description": "Тёплый коричневый для уютных сессий" + }, + "teal": { + "name": "Глубокий бирюзовый", + "description": "Тёмный бирюзовый для спокойной сосредоточенности" + } + } + }, + "title": "Выбор цветовой схемы" + }, + "common": { + "back": "Назад", + "cancel": "Отмена", + "changesSaved": "Изменения сохранены", + "close": "Закрыть", + "confirm": "Подтвердить", + "delete": "Удалить", + "deselectAll": "Снять выделение со всех", + "download": "Скачать", + "edit": "Редактировать", + "error": "Ошибка", + "failed": "Не удалось", + "filter": "Фильтр", + "info": "Информация", + "loading": "Загрузка...", + "new": "Новый", + "next": "Далее", + "no": "Нет", + "noResults": "Результатов не найдено", + "ok": "ОК", + "or": "Или", + "previous": "Назад", + "processing": "Обработка...", + "refresh": "Обновить", + "retry": "Повторить", + "save": "Сохранить", + "search": "Поиск", + "selectAll": "Выбрать всё", + "sort": "Сортировать", + "success": "Успешно", + "untitled": "Без названия", + "upload": "Загрузить", + "warning": "Предупреждение", + "yes": "Да" + }, + "customPrompts": { + "currentDefaultPrompt": "Текущий запрос по умолчанию (используется, если поле выше пустое)", + "promptDescription": "Этот запрос будет использоваться для генерации резюме ваших транскрипций. Он переопределяет запрос администратора по умолчанию.", + "promptPlaceholder": "Опишите, как вы хотите структурировать резюме. Оставьте пустым, чтобы использовать запрос администратора по умолчанию.", + "summaryGeneration": "Запрос для генерации резюме", + "tip1": "Будьте конкретны в отношении разделов, которые вы хотите видеть в резюме", + "tip2": "Используйте чёткие инструкции по форматированию (например, \"Используйте маркированные списки\", \"Создавайте нумерованные списки\")", + "tip3": "Укажите, если хотите приоритизировать определённую информацию", + "tip4": "Система автоматически предоставит содержимое транскрипта ИИ", + "tip5": "Ваше предпочтение по языку вывода (если установлено) будет применено автоматически", + "tipsTitle": "Советы по написанию эффективных запросов", + "yourCustomPrompt": "Ваш пользовательский запрос для резюме" + }, + "deleteAllSpeakersModal": { + "confirmMessage": "Вы уверены, что хотите удалить всех сохранённых спикеров? Это действие нельзя отменить.", + "title": "Удалить всех спикеров" + }, + "dialogs": { + "deleteRecording": { + "cancel": "Отмена", + "confirm": "Удалить", + "message": "Вы уверены, что хотите удалить эту запись? Это действие нельзя отменить.", + "title": "Удаление записи" + }, + "deleteShare": { + "message": "Вы уверены, что хотите удалить этот общий доступ? Это отзовёт доступ к публичной ссылке.", + "title": "Удалить общий доступ" + }, + "reprocessTranscription": { + "cancel": "Отмена", + "confirm": "Перегенерировать", + "message": "Вы уверены, что хотите перегенерировать эту транскрипцию? Текущая транскрипция будет заменена.", + "title": "Перегенерация транскрипции" + }, + "unsavedChanges": { + "cancel": "Отмена", + "discard": "Не сохранять", + "message": "У вас есть несохранённые изменения. Хотите сохранить их перед уходом?", + "save": "Сохранить", + "title": "Несохранённые изменения" + } + }, + "duration": { + "hours": "{{count}} час", + "hoursPlural": "{{count}} часов", + "minutes": "{{count}} минута", + "minutesPlural": "{{count}} минут", + "seconds": "{{count}} секунда", + "secondsPlural": "{{count}} секунд" + }, + "editTagModal": { + "asrDefaultSettings": "Настройки ASR по умолчанию", + "asrSettingsDescription": "Эти настройки будут применяться по умолчанию при использовании этого тега с ASR-транскрибированием", + "color": "Цвет", + "colorDescription": "Выберите цвет для лёгкой идентификации", + "createTitle": "Создать тег", + "customPrompt": "Пользовательский запрос для резюме", + "customPromptPlaceholder": "Необязательно: пользовательский запрос для генерации резюме записей с этим тегом", + "defaultLanguage": "Язык по умолчанию", + "defaultPromptPlaceholder": "Оставьте пустым, чтобы использовать ваш запрос резюмирования по умолчанию", + "exportTemplate": "Шаблон экспорта", + "exportTemplateHint": "Выберите шаблон экспорта для использования при экспорте записей с этим тегом", + "leaveBlankPrompt": "Оставьте пустым, чтобы использовать ваш запрос резюмирования по умолчанию", + "maxSpeakers": "Макс. спикеров", + "minSpeakers": "Мин. спикеров", + "namingTemplate": "Шаблон именования", + "namingTemplateHint": "Выберите шаблон именования для автоматического форматирования заголовков записей с этим тегом", + "noExportTemplate": "Без шаблона (использовать пользовательский по умолчанию)", + "noNamingTemplate": "Без шаблона (использовать по умолчанию или ИИ-заголовок)", + "tagName": "Название тега *", + "tagNamePlaceholder": "например, Встречи, Интервью", + "title": "Редактирование тега" + }, + "errors": { + "audioExtractionFailed": "Audio Extraction Failed", + "audioExtractionFailedGuidance": "Try converting the file to a standard audio format (MP3, WAV) before uploading.", + "audioExtractionFailedMessage": "Could not extract audio from the uploaded file.", + "audioRecordingFailed": "Не удалось записать аудио. Пожалуйста, проверьте ваш микрофон.", + "authenticationError": "Authentication Error", + "authenticationErrorGuidance": "Please check that the API key is correct and has not expired.", + "authenticationErrorMessage": "The transcription service rejected the API credentials.", + "checkApiKeyGuidance": "Check the API key in settings", + "checkNetworkGuidance": "Check network connection", + "connectionError": "Connection Error", + "connectionErrorGuidance": "Check your internet connection and ensure the service is available.", + "connectionErrorMessage": "Could not connect to the transcription service.", + "convertFormatGuidance": "Convert to MP3 or WAV before uploading", + "convertStandardGuidance": "Convert to standard audio format", + "enableChunkingGuidance": "Enable chunking in settings or compress the file", + "fallbackMessage": "An error occurred", + "fallbackTitle": "Error", + "fileTooLarge": "Файл слишком большой", + "fileTooLargeGuidance": "Try enabling audio chunking in your settings, or compress the audio file before uploading.", + "fileTooLargeMaxSize": "File too large. Max: {{size}} MB.", + "fileTooLargeMessage": "The audio file exceeds the maximum size allowed by the transcription service.", + "fileTooLargeTitle": "File Too Large", + "generic": "Произошла ошибка", + "invalidAudioFormat": "Invalid Audio Format", + "invalidAudioFormatGuidance": "Try converting the audio to MP3 or WAV format before uploading.", + "invalidAudioFormatMessage": "The audio file format is not supported or the file may be corrupted.", + "loadingShares": "Ошибка загрузки общих доступов", + "networkError": "Ошибка сети. Пожалуйста, проверьте ваше подключение.", + "networkErrorDuringUpload": "Network error during upload", + "notFound": "Не найдено", + "permissionDenied": "Доступ запрещён", + "processingError": "Processing Error", + "processingErrorFallbackGuidance": "Try reprocessing the recording", + "processingErrorGuidance": "If this error persists, try reprocessing the recording.", + "processingErrorMessage": "An error occurred during processing.", + "processingFailedOnServer": "Processing failed on server.", + "processingFailedWithStatus": "Processing failed with status {{status}}", + "processingTimeout": "Processing Timeout", + "processingTimeoutGuidance": "This can happen with very long recordings. Try splitting the audio into smaller parts.", + "processingTimeoutMessage": "The transcription took too long to complete.", + "quotaExceeded": "Превышена квота хранилища", + "rateLimitExceeded": "Rate Limit Exceeded", + "rateLimitExceededGuidance": "Please wait a few minutes and try reprocessing.", + "rateLimitExceededMessage": "Too many requests were sent to the transcription service.", + "serverError": "Ошибка сервера. Пожалуйста, попробуйте позже.", + "serverErrorStatus": "Server error ({{status}})", + "serviceUnavailable": "Service Unavailable", + "serviceUnavailableGuidance": "This is usually temporary. Please try again in a few minutes.", + "serviceUnavailableMessage": "The transcription service is temporarily unavailable.", + "splitAudioGuidance": "Try splitting the audio into smaller parts", + "summaryFailed": "Не удалось сгенерировать резюме. Пожалуйста, попробуйте снова.", + "transcriptionFailed": "Не удалось выполнить транскрибирование. Пожалуйста, попробуйте снова.", + "tryAgainLaterGuidance": "Try again in a few minutes", + "unauthorized": "Не авторизовано", + "unexpectedResponse": "Unexpected success response from server after upload.", + "unsupportedFormat": "Неподдерживаемый формат файла", + "uploadFailed": "Не удалось загрузить. Пожалуйста, попробуйте снова.", + "uploadFailedWithStatus": "Upload failed with status {{status}}", + "uploadTimedOut": "Upload timed out", + "validationError": "Ошибка валидации", + "waitAndRetryGuidance": "Wait a few minutes and try again" + }, + "eventExtraction": { + "description": "При включении ИИ будет определять встречи, назначения и дедлайны, упомянутые в ваших записях, и создавать загружаемые календарные события.", + "enableLabel": "Включить автоматическое извлечение событий из транскриптов", + "info": "Извлечённые события появятся на вкладке \"События\" в записях, где обнаружены элементы календаря.", + "title": "Извлечение событий" + }, + "events": { + "add": "Добавить", + "addToCalendar": "Добавить в календарь", + "attendees": "Участники", + "confirmDelete": "Удалить событие «{title}»?", + "delete": "Удалить", + "deleteFailed": "Не удалось удалить событие", + "deleted": "Событие удалено", + "end": "Конец", + "location": "Место", + "noEvents": "В этой записи не обнаружено событий", + "start": "Начало", + "title": "События" + }, + "exportLabels": { + "created": "Создано", + "date": "Дата", + "fileSize": "Размер файла", + "footer": "Создано с помощью [DictIA](https://gitea.innova-ai.ca/Innova-AI/dictia)", + "metadata": "Метаданные", + "notes": "Заметки", + "originalFile": "Исходный файл", + "participants": "Участники", + "summarizationTime": "Время резюмирования", + "summary": "Резюме", + "tags": "Теги", + "transcription": "Транскрипция", + "transcriptionTime": "Время транскрипции" + }, + "exportTemplates": { + "availableLabels": "Локализованные метки (переводятся автоматически)", + "availableTemplates": "Доступные шаблоны", + "availableVars": "Доступные переменные", + "cancel": "Отмена", + "conditionals": "Условия", + "conditionalsHint": "Используйте {{#if variable}}...{{/if}} для условного включения содержимого", + "contentSections": "Разделы содержимого", + "createDefaults": "Создать шаблон по умолчанию", + "createNew": "Создать шаблон", + "default": "По умолчанию", + "delete": "Удалить", + "description": "Настройте, как записи экспортируются в файлы markdown.", + "recordingData": "Данные записи", + "save": "Сохранить", + "selectOrCreate": "Выберите шаблон для редактирования или создайте новый", + "setDefault": "Установить как шаблон по умолчанию", + "tabTitle": "Экспорт", + "template": "Шаблон", + "templateDescription": "Описание", + "templateName": "Название шаблона", + "title": "Шаблоны экспорта", + "viewGuide": "Просмотреть руководство по шаблонам" + }, + "fileSize": { + "bytes": "{{count}} Б", + "gigabytes": "{{count}} ГБ", + "kilobytes": "{{count}} КБ", + "megabytes": "{{count}} МБ" + }, + "folderManagement": { + "allFolders": "Все папки", + "asrDefaults": "Настройки ASR по умолчанию", + "autoShareOnApply": "Автоматически делиться с участниками группы", + "autoShareOnApplyHelp": "Автоматически делиться записями со всеми участниками группы при добавлении в эту папку", + "confirmDelete": "Вы уверены, что хотите удалить эту папку? Записи будут удалены из папки, но не удалены.", + "createFolder": "Создать папку", + "customPrompt": "Пользовательский промпт", + "defaultLanguage": "Язык по умолчанию", + "deleteFolder": "Удалить папку", + "description": "Организуйте записи в папках. В отличие от тегов, запись может принадлежать только одной папке. Промпты папки применяются перед пользовательскими, но после промптов тегов.", + "editFolder": "Редактировать папку", + "filterByFolder": "Фильтр по папке", + "folderColor": "Цвет папки", + "folderName": "Название папки", + "groupSettings": "Настройки группы", + "maxSpeakers": "Макс. спикеров", + "minSpeakers": "Мин. спикеров", + "moveToFolder": "Переместить в папку", + "namingTemplate": "Шаблон именования", + "noFolder": "Без папки", + "noFolders": "Папки ещё не созданы", + "noFoldersDescription": "Создайте первую папку для организации записей", + "protectFromDeletion": "Защитить от удаления", + "protectFromDeletionHelp": "Защитить записи в этой папке от автоматического удаления", + "recordings": "записей", + "removeFromFolder": "Убрать из папки", + "retentionDays": "Дней хранения", + "retentionDaysHelp": "Записи в этой папке будут удалены через указанное количество дней. Оставьте пустым для глобального правила.", + "retentionSettings": "Настройки хранения", + "selectNamingTemplate": "Выбрать шаблон именования...", + "shareWithGroupLead": "Поделиться с администраторами группы", + "shareWithGroupLeadHelp": "Делиться записями с администраторами группы при добавлении в эту папку", + "title": "Управление папками" + }, + "form": { + "auto": "Автоматически", + "autoDetect": "Автоопределение", + "dateFrom": "С", + "dateTo": "По", + "enterNotesMarkdown": "Введите заметки в формате Markdown...", + "enterSummaryMarkdown": "Введите резюме в формате Markdown...", + "folder": "Folder", + "hotwords": "Hotwords", + "hotwordsHelp": "Comma-separated words to improve recognition of domain-specific terms", + "hotwordsPlaceholder": "e.g., Speakr, CTranslate2, PyAnnote", + "initialPrompt": "Initial Prompt", + "initialPromptHelp": "Context to steer the transcription model's style and vocabulary", + "initialPromptPlaceholder": "e.g., This is a meeting about AI transcription tools.", + "language": "Язык", + "maxSpeakers": "Макс. спикеров", + "meetingDate": "Дата встречи", + "minSpeakers": "Мин. спикеров", + "minutes": "Минуты", + "notes": "Заметки", + "notesPlaceholder": "Введите ваши заметки в формате Markdown...", + "optional": "Необязательно", + "participantNamePlaceholder": "Participant name...", + "participants": "Участники", + "placeholderAuto": "Автоматически", + "placeholderCharacterLimit": "Введите лимит символов (например, 30000)", + "placeholderMinutes": "Минуты", + "placeholderOptional": "Необязательно", + "placeholderSeconds": "Секунды", + "placeholderSizeMB": "Введите размер в МБ", + "searchSpeakers": "Поиск спикеров...", + "searchTags": "Поиск тегов...", + "seconds": "Секунды", + "shareNotes": "Поделиться заметками", + "shareSummary": "Поделиться резюме", + "shareableLink": "Ссылка для общего доступа", + "summaryPromptPlaceholder": "Введите запрос резюмирования по умолчанию...", + "title": "Заголовок", + "transcriptionLanguage": "Transcription Language", + "yourFullName": "Ваше полное имя" + }, + "groups": { + "addMembers": "Добавить участников...", + "autoShare": "Автоматический общий доступ", + "autoShareNote": "Примечание: если включены оба варианта, доступ будут иметь все участники группы. Если включен только \"администраторы группы\", доступ будут иметь только руководители группы.", + "autoShareTeam": "Автоматически предоставлять общий доступ к записям всем участникам группы при применении этого тега", + "autoSharesWithTeam": "Автоматический общий доступ для всех участников группы", + "confirmDelete": "Вы уверены, что хотите удалить эту группу? Это действие нельзя отменить.", + "createTeam": "Создать группу", + "createTeamTag": "Создать новый групповой тег", + "dayRetention": "дней хранения", + "deleteTeam": "Удалить группу", + "deletionExempt": "Исключить из удаления", + "deletionExemptHelp": "Записи с этим тегом будут освобождены от автоматического удаления, даже если они превышают период хранения.", + "editTeam": "Редактировать группу", + "editTeamTag": "Редактировать групповой тег", + "globalRetention": "Глобальное хранение", + "members": "Участники", + "noMembers": "В этой группе нет участников", + "noTeamTags": "Групповые теги ещё не созданы", + "noTeams": "Группы ещё не созданы", + "retentionHelp": "Записи с этим тегом будут удалены через указанное количество дней. Оставьте пустым, чтобы использовать глобальный период хранения ({{days}} дней).", + "retentionPeriod": "Период хранения (дни)", + "retentionPlaceholder": "Оставьте пустым, чтобы использовать глобальный период хранения", + "searchUsers": "Поиск пользователей...", + "selectTeamLead": "Выберите руководителя группы...", + "shareWithAdmins": "Предоставлять общий доступ к записям администраторам группы при применении этого тега", + "sharesWithAdminsOnly": "Общий доступ только для администраторов", + "syncComplete": "Общий доступ группы успешно синхронизирован", + "syncTeamShares": "Синхронизировать общий доступ группы", + "syncTeamSharesDescription": "Это ретроактивно предоставит общий доступ ко всем записям с групповыми тегами соответствующим участникам группы на основе настроек общего доступа тега.", + "teamLead": "Руководитель группы", + "teamName": "Название группы", + "teamNamePlaceholder": "Введите название группы", + "teamTags": "Групповые теги", + "title": "Управление группами", + "updateTeam": "Обновить группу" + }, + "help": { + "actions": "Действия", + "activeFilters": "Активные фильтры", + "addSegmentBelow": "Добавить сегмент ниже", + "advancedAsrOptions": "Расширенные параметры ASR", + "allRecordingsLoaded": "Все записи загружены", + "allTagsSelected": "All tags selected", + "appliedSuggestedNames": "Применено {{count}} предложенное имя", + "appliedSuggestedNamesPlural": "Применено {{count}} предложенных имён", + "applySuggested": "Применить предложенные", + "applySuggestedMobile": "Предложить", + "approachingLimit": "Приближается лимит в {{limit}} МБ", + "askAboutTranscription": "Задавайте вопросы об этой транскрипции", + "audioDeletedDescription": "Аудиофайл для этой записи был удалён, но транскрипция остаётся доступной.", + "audioDeletedMessage": "Аудиофайл был архивирован и больше не доступен для воспроизведения.", + "audioDeletedTitle": "Аудиофайл удалён", + "audioPlayer": "Аудиоплеер", + "autoIdentify": "Автоопределение", + "autoIdentifyMobile": "Авто", + "bothAudioDesc": "Записывает ваш голос + участников встречи (рекомендуется для онлайн-встреч)", + "clearFilters": "сбросить фильтры", + "clickToAddNotes": "Нажмите, чтобы добавить заметки...", + "colorRepeats": "Цвет повторяется начиная со спикера {{number}}", + "completedFiles": "Завершённые файлы", + "confirmReprocessingTitle": "Подтвердите перегенерацию", + "copyMessage": "Копировать сообщение", + "createFolders": "Create folders", + "createPublicLink": "Создайте публичную ссылку для общего доступа к этой записи. Общий доступ доступен только при безопасных (HTTPS) соединениях.", + "createTags": "Создайте теги", + "defaultHotwordsHelp": "Comma-separated words or phrases that the transcription model should prioritize recognizing (brand names, acronyms, technical terms).", + "defaultInitialPromptHelp": "Context to steer the transcription model's style and vocabulary. Describe the topic or expected content of your recordings.", + "deleteSegment": "Удалить сегмент", + "discard": "Отклонить", + "dragToReorder": "Drag to reorder", + "endTime": "Конец", + "enterNameFor": "Введите имя для", + "enterSpeakerName": "Введите имя спикера...", + "entireScreen": "Весь экран", + "errorChangingSpeaker": "Ошибка при смене спикера", + "errorOpeningTextEditor": "Ошибка при открытии текстового редактора", + "errorSavingText": "Ошибка при сохранении текста", + "estimatedSize": "Предполагаемый размер", + "firstTagAsrSettings": "First tag's ASR settings will be applied:", + "firstTagDefaultsApplied": "First tag's defaults applied", + "folderHasCustomPrompt": "This folder has a custom summary prompt", + "generatingSummary": "Генерация резюме...", + "groups": "группы", + "howToRecordSystemAudio": "Как записать системный звук", + "identifyAllSpeakers": "Определить всех спикеров", + "identifying": "Определение...", + "importantNote": "Важное примечание", + "internalSharingDesc": "Поделиться с конкретными пользователями в вашей организации", + "lines": "{{count}} строк", + "loadingMore": "Загрузка дополнительных записей...", + "loadingRecordings": "Загрузка записей...", + "me": "Я", + "microphoneDesc": "Записывает только ваш голос", + "modelReasoning": "Рассуждения модели", + "moreSpeakersThanColors": "Спикеров больше, чем доступных цветов", + "navigate": "Навигация", + "noDateSet": "Дата не установлена", + "noMatchingTags": "No matching tags", + "noParticipants": "Нет участников", + "noRecordingSelected": "Запись не выбрана.", + "noSpeakersIdentified": "Не удалось определить спикеров из контекста.", + "noSuggestionsToApply": "Нет предложений для применения", + "noTagsCreated": "Теги ещё не созданы.", + "of": "из", + "playFromHere": "Воспроизвести отсюда", + "pleaseEnterSpeakerName": "Пожалуйста, введите имя спикера", + "processingTime": "Время обработки", + "processingTimeDescription": "Это может занять несколько минут. Вы можете продолжать использовать приложение во время обработки.", + "processingTranscription": "Обработка транскрипции...", + "publicLinkDesc": "Любой, у кого есть эта ссылка, может получить доступ к записи", + "recordSystemSteps1": "Нажмите \"Записать системный звук\" или \"Записать оба\".", + "recordSystemSteps2": "Во всплывающем окне выберите", + "recordSystemSteps3": "Убедитесь, что установлен флажок", + "recordingFinished": "Запись завершена", + "recordingInProgress": "Идёт запись...", + "regenerateSummaryAfterNames": "Перегенерируйте резюме после обновления имён", + "saved": "Сохранено!", + "savingProgress": "Сохранение...", + "selectedTagsCustomPrompts": "Selected tags include custom summary prompts", + "sentence": "Предложение", + "shareSystemAudio": "Поделиться системным звуком", + "shareTabAudio": "Поделиться звуком вкладки", + "sharedOn": "Опубликовано", + "sharingWindowNoAudio": "При демонстрации \"Окна\" звук не захватывается.", + "speakerAdded": "Спикер успешно добавлен", + "speakerCount": "Спикер", + "speakerName": "Имя спикера", + "speakerNamesUpdated": "Имена спикеров успешно обновлены!", + "speakers": "Спикеры", + "speakersIdentified": "{{count}} спикер успешно определён!", + "speakersIdentifiedPlural": "{{count}} спикеров успешно определено!", + "speakersUpdatedSaveToApply": "Спикеры обновлены! Сохраните транскрипцию, чтобы применить изменения.", + "specificBrowserTab": "конкретную вкладку браузера", + "startTime": "Начало", + "startingAutoIdentification": "Запуск автоматического определения спикеров...", + "summaryGenerationFailed": "Ошибка генерации резюме", + "summaryGenerationTimedOut": "Превышено время генерации резюме", + "summaryRegenerationStarted": "Перегенерация резюме запущена", + "summaryUpdated": "Резюме обновлено!", + "systemAudioDesc": "Записывает участников встречи и системные звуки", + "tagManagement": "Управление тегами", + "thisActionCannotBeUndone": "Это действие нельзя отменить.", + "toCaptureAudioFromMeetings": "Чтобы захватить звук со встреч или других приложений, вы должны поделиться экраном или вкладкой браузера.", + "toOrganizeRecordings": "to organize your recordings", + "transcriptUpdated": "Транскрипция успешно обновлена!", + "troubleshooting": "Устранение неполадок", + "tryAdjustingSearch": "Попробуйте скорректировать поиск или", + "unsupportedBrowser": "Неподдерживаемый браузер", + "untitled": "Запись без названия", + "uploadRecordingNotes": "Загрузить запись и заметки", + "whatWillHappen": "Что произойдёт?", + "whyNotWorking": "Почему не работает?", + "youHaveXSpeakers": "У вас {{count}} спикеров, но доступно только 16 уникальных цветов. Цвета будут повторяться после 16-го спикера." + }, + "incognito": { + "audioNotStored": "Audio not stored in incognito mode", + "discardConfirm": "This will permanently discard your incognito recording. Continue?", + "mode": "Incognito Mode", + "notSavedToAccount": "Not saved to account", + "oneFileAtATime": "Incognito mode supports one file at a time", + "processInIncognito": "Process in Incognito", + "processWithoutSaving": "Process without saving", + "processing": "Processing...", + "processingComplete": "Processing complete!", + "processingInProgress": "Processing in incognito mode...", + "recordingDiscarded": "Incognito recording discarded", + "recordingProcessed": "Incognito recording processed - data will be lost when tab closes", + "recordingReady": "Incognito recording ready!", + "recordingTitle": "Incognito Recording", + "selectExactlyOneFile": "Select exactly 1 file", + "sessionOnly": "Session only", + "uploadingFile": "Uploading file for incognito processing..." + }, + "inquire": { + "activeFilters": "Активные фильтры:", + "askQuestions": "Задавайте вопросы о ваших транскрипциях", + "clearAll": "Сбросить всё", + "dateRange": "Диапазон дат", + "dateRangeActive": "Диапазон дат активен", + "exampleQuestion1": "\"Какие задачи к выполнению были обсуждены?\"", + "exampleQuestion2": "\"Когда мы решили изменить сроки?\"", + "exampleQuestion3": "\"Какие опасения были высказаны по поводу бюджета?\"", + "exampleQuestion4": "\"Кто отвечал за маркетинговые задачи?\"", + "exampleQuestions": "Примеры вопросов:", + "filters": "Фильтры", + "filtersActive": "Фильтры активны", + "from": "С", + "noSpeakerData": "Нет данных о спикерах", + "placeholder": "Задавайте вопросы о ваших отфильтрованных транскрипциях...", + "selectFilters": "Выберите фильтры слева, чтобы сузить круг транскрипций, затем задавайте вопросы для получения информации из ваших записей.", + "sendHint": "Нажмите Enter для отправки • Ctrl+Enter для новой строки", + "speakerRequirement": "Идентификация спикеров требует записей с несколькими спикерами", + "speakers": "Спикеры", + "speakersCount": "спикеров", + "tags": "Теги", + "tagsCount": "тегов", + "title": "Inquire", + "to": "По" + }, + "languages": { + "ar": "Арабский", + "de": "Немецкий", + "en": "Английский", + "es": "Испанский", + "fr": "Французский", + "hi": "Хинди", + "it": "Итальянский", + "ja": "Японский", + "ko": "Корейский", + "nl": "Нидерландский", + "pt": "Португальский", + "ru": "Русский", + "zh": "Китайский" + }, + "manageSpeakersModal": { + "created": "Создан", + "description": "Управляйте сохранёнными спикерами. Они сохраняются автоматически при использовании имён спикеров в ваших записях.", + "failedToLoad": "Не удалось загрузить спикеров", + "lastUsed": "Последнее использование", + "loadingSpeakers": "Загрузка спикеров...", + "noSpeakersYet": "Спикеров пока не сохранено", + "speakersSaved": "{{count}} спикеров сохранено", + "speakersWillAppear": "Спикеры появятся здесь, когда вы будете использовать имена спикеров в ваших записях", + "times": "раз", + "title": "Управление спикерами", + "used": "Использовано" + }, + "messages": { + "colorSchemeApplied": "Color scheme applied", + "colorSchemeReset": "Color scheme reset to default", + "copiedSuccessfully": "Copied to clipboard!", + "copiedToClipboard": "Скопировано в буфер обмена", + "copyFailed": "Failed to copy", + "copyNotSupported": "Copy failed. Your browser may not support this feature.", + "downloadStarted": "Загрузка начата", + "errorRecoveringRecording": "Error recovering recording", + "eventDownloadFailed": "Failed to download event", + "eventDownloadSuccess": "Event \"{{title}}\" downloaded. Open the file to add to your calendar.", + "eventsExportFailed": "Failed to export events", + "eventsExportSuccess": "Exported {{count}} events", + "failedToDeleteJob": "Failed to delete job", + "failedToRecoverRecording": "Failed to recover recording", + "failedToRetryJob": "Failed to retry job", + "failedToSave": "Failed to save: {{error}}", + "failedToSaveParticipants": "Failed to save participants", + "followPlayerDisabled": "Follow player mode disabled", + "followPlayerEnabled": "Follow player mode enabled", + "invalidEventData": "Invalid event data", + "jobQueuedForRetry": "Job queued for retry", + "noEventsToExport": "No events to export", + "noNotesAvailableDownload": "No notes available to download.", + "noNotesToCopy": "No notes available to copy.", + "noPermissionToEdit": "You do not have permission to edit this recording", + "noSummaryToCopy": "No summary available to copy.", + "noSummaryToDownload": "No summary available to download.", + "noTranscriptionToCopy": "No transcription available to copy.", + "noTranscriptionToDownload": "No transcription available to download.", + "notesCopied": "Notes copied to clipboard!", + "notesDownloadFailed": "Failed to download notes", + "notesDownloadSuccess": "Notes downloaded successfully!", + "notesUpdated": "Заметки успешно обновлены", + "passwordChanged": "Пароль успешно изменён", + "profileUpdated": "Профиль успешно обновлён", + "recordingDeleted": "Запись успешно удалена", + "recordingDiscarded": "Recording discarded", + "recordingRecovered": "Recording recovered successfully", + "recordingSaved": "Запись успешно сохранена", + "saveParticipantsFailed": "Save failed: {{error}}", + "settingsSaved": "Настройки успешно сохранены", + "summaryCopied": "Summary copied to clipboard!", + "summaryDownloadFailed": "Failed to download summary", + "summaryDownloadSuccess": "Summary downloaded successfully!", + "summaryGenerated": "Резюме успешно сгенерировано", + "tagAdded": "Тег успешно добавлен", + "tagRemoved": "Тег успешно удалён", + "transcriptDownloadFailed": "Failed to download transcript", + "transcriptDownloadSuccess": "Transcript downloaded successfully!", + "transcriptionCopied": "Transcription copied to clipboard!", + "transcriptionUpdated": "Транскрипция успешно обновлена" + }, + "metadata": { + "cancelEdit": "Отмена", + "createdAt": "Создано", + "duration": "Длительность", + "editMetadata": "Редактировать метаданные", + "fileName": "Имя файла", + "fileSize": "Размер файла", + "language": "Язык", + "meetingDate": "Дата встречи", + "processingTime": "Время обработки", + "saveMetadata": "Сохранить", + "status": "Статус", + "title": "Метаданные", + "updatedAt": "Обновлено", + "wordCount": "Количество слов" + }, + "modal": { + "addSpeaker": "Добавить нового спикера", + "colorScheme": "Цветовая схема", + "deleteRecording": "Удалить запись", + "editAsrTranscription": "Редактировать ASR-транскрипцию", + "editParticipants": "Редактировать участников", + "editRecording": "Редактировать запись", + "editSpeakers": "Редактировать спикеров", + "editTags": "Редактировать теги записи", + "editTranscription": "Редактировать транскрипцию", + "identifySpeakers": "Определить спикеров", + "recordingNotice": "Уведомление о записи", + "reprocessSummary": "Перегенерировать резюме", + "reprocessTranscription": "Перегенерировать транскрипцию", + "resetStatus": "Сбросить статус записи?", + "shareRecording": "Поделиться записью", + "sharedTranscripts": "Общие транскрипты", + "systemAudioHelp": "Справка по системному звуку", + "uploadFiles": "Загрузить файлы", + "uploadNotice": "Уведомление о загрузке" + }, + "namingTemplates": { + "addPattern": "Добавить шаблон", + "availableTemplates": "Доступные шаблоны", + "availableVars": "Доступные переменные", + "cancel": "Отмена", + "createDefaults": "Создать стандартные шаблоны", + "createNew": "Создать шаблон", + "customVarsHint": "Определите regex-шаблоны для извлечения пользовательских переменных из имён файлов.", + "delete": "Удалить", + "description": "Определите, как генерируются заголовки записей из имён файлов и содержимого транскрипции.", + "descriptionLabel": "Описание", + "noDefault": "Без умолчания (только ИИ-заголовок)", + "regexHint": "Извлекайте данные из имён файлов. Используйте группы захвата () для указания совпадения.", + "regexPatterns": "Regex-шаблоны (необязательно)", + "result": "Результат:", + "save": "Сохранить", + "selectOrCreate": "Выберите шаблон для редактирования или создайте новый", + "tabTitle": "Именование", + "template": "Шаблон", + "templateName": "Название шаблона", + "test": "Тест", + "testTemplate": "Тестировать шаблон", + "title": "Шаблоны именования", + "userDefault": "Шаблон по умолчанию", + "userDefaultHint": "Применяется, когда ни один тег не имеет шаблона именования." + }, + "nav": { + "account": "Аккаунт", + "accountSettings": "Настройки аккаунта", + "admin": "Администратор", + "adminDashboard": "Панель администратора", + "darkMode": "Тёмная тема", + "groupManagement": "Управление группами", + "home": "Главная", + "language": "Язык", + "lightMode": "Светлая тема", + "newRecording": "Новая запись", + "recording": "Запись", + "settings": "Настройки", + "signOut": "Выйти", + "teamManagement": "Управление группами", + "upload": "Загрузить", + "userProfile": "Профиль пользователя" + }, + "notes": { + "cancelEdit": "Отменить редактирование", + "characterCount": "{{count}} символ", + "characterCountPlural": "{{count}} символов", + "editNotes": "Редактировать заметки", + "lastUpdated": "Последнее обновление", + "placeholder": "Добавьте ваши заметки здесь...", + "saveNotes": "Сохранить заметки", + "title": "Заметки" + }, + "pwa": { + "installApp": "Установить приложение", + "installed": "Успешно установлено", + "installing": "Установка...", + "notificationPermissionDenied": "Доступ к уведомлениям запрещён", + "notificationsEnabled": "Уведомления включены", + "offline": "Вы не в сети", + "screenAwake": "Экран будет оставаться активным во время записи", + "screenAwakeFailed": "Не удалось сохранить экран активным", + "updateAvailable": "Доступно обновление" + }, + "recording": { + "acceptDisclaimer": "Принимаю", + "cancelRecording": "Отмена", + "discardRecovery": "Отклонить", + "disclaimer": "Предупреждение о записи", + "duration": "Длительность", + "micPlusSys": "Mic + Sys", + "microphone": "Микрофон", + "microphoneAndSystem": "Микрофон + система", + "microphonePermissionDenied": "Доступ к микрофону запрещён", + "modeBoth": "Микрофон + система", + "modeMicrophone": "Микрофон", + "modeSystem": "Системный звук", + "notes": "Заметки", + "notesPlaceholder": "Добавьте заметки об этой записи...", + "pauseRecording": "Пауза", + "recordingFailed": "Запись не удалась", + "recordingInProgress": "Идёт запись...", + "recordingMode": "Режим записи", + "recordingSize": "Предполагаемый размер", + "recordingStopped": "Запись остановлена", + "recordingTime": "Время записи", + "recoveryDescription": "Мы обнаружили незавершённую запись из предыдущей сессии. Хотите восстановить её?", + "recoveryFound": "Обнаружена несохранённая запись", + "recoveryTitle": "Восстановить запись", + "restoreRecording": "Восстановить", + "resumeRecording": "Возобновить", + "saveRecording": "Сохранить запись", + "size": "Размер", + "startRecording": "Начать запись", + "startedAt": "Начато в", + "stopRecording": "Остановить запись", + "systemAudio": "Системный звук", + "systemAudioNotSupported": "Запись системного звука не поддерживается в этом браузере", + "title": "Аудиозапись" + }, + "reprocessModal": { + "audioReTranscribedFromScratch": "Аудио будет транскрибировано заново с нуля. Это также перегенерирует заголовок и резюме на основе новой транскрипции.", + "audioReTranscribedWithAsr": "Аудио будет транскрибировано заново с использованием ASR-эндпоинта. Это включает диаризацию и перегенерирует заголовок и резюме.", + "manualEditsOverwritten": "Любые ручные правки транскрипции, заголовка или резюме будут перезаписаны.", + "manualEditsOverwrittenSummary": "Любые ручные правки заголовка или резюме будут перезаписаны.", + "newTitleAndSummary": "Новый заголовок и резюме будут сгенерированы на основе существующей транскрипции." + }, + "settings": { + "apiKeys": "API-ключи", + "appearance": "Внешний вид", + "changePassword": "Изменить пароль", + "dataExport": "Экспорт данных", + "deleteAccount": "Удалить аккаунт", + "integrations": "Интеграции", + "language": "Язык", + "notifications": "Уведомления", + "preferences": "Предпочтения", + "privacy": "Конфиденциальность", + "profile": "Профиль", + "security": "Безопасность", + "theme": "Тема", + "title": "Настройки", + "twoFactorAuth": "Двухфакторная аутентификация" + }, + "sharedTranscripts": { + "noSharedTranscripts": "Вы пока не делились транскриптами.", + "shareNotes": "Поделиться заметками", + "shareSummary": "Поделиться резюме", + "sharedOn": "Опубликовано" + }, + "sharedTranscriptsPage": { + "noSharedTranscripts": "Вы пока не делились транскриптами." + }, + "sharing": { + "canEdit": "Может редактировать", + "canReshare": "Может поделиться повторно", + "internalSharing": "Внутренний общий доступ", + "notSharedYet": "Пока не опубликовано", + "publicBadge": "Публичный", + "publicLink": "Публичная ссылка", + "publicLinks": "публичных ссылок", + "publicLinksGenerated": "публичных ссылок создано", + "searchUsers": "Поиск пользователей...", + "sharedBadge": "Общий", + "sharedBy": "Опубликовал", + "sharedWith": "Доступ есть у", + "teamBadge": "Группа", + "teamRecording": "Групповая запись", + "unknown": "Неизвестно", + "users": "пользователей" + }, + "sidebar": { + "advancedSearch": "Расширенный поиск", + "archived": "Архивировано", + "archivedRecordings": "Архивные записи", + "dateRange": "Диапазон дат", + "filters": "Фильтры", + "highlighted": "Избранное", + "inbox": "Входящие", + "lastMonth": "Прошлый месяц", + "lastWeek": "Прошлая неделя", + "loadMore": "Загрузить ещё", + "markAsRead": "Отметить как прочитанное", + "moveToInbox": "Переместить во входящие", + "noRecordings": "Записей не найдено", + "older": "Более старые", + "removeFromHighlighted": "Убрать из избранного", + "searchRecordings": "Поиск записей...", + "sharedWithMe": "Доступные мне", + "sortBy": "Сортировать по", + "sortByDate": "Дата создания", + "sortByMeetingDate": "Дата встречи", + "starred": "Избранное", + "tags": "Теги", + "thisMonth": "Этот месяц", + "thisWeek": "Эта неделя", + "today": "Сегодня", + "totalRecordings": "{{count}} запись", + "totalRecordingsPlural": "{{count}} записей", + "upcoming": "Предстоящие", + "yesterday": "Вчера" + }, + "speakers": { + "filterBySpeaker": "Фильтр по спикеру", + "noMatchingSpeakers": "Нет подходящих спикеров", + "searchSpeakers": "Поиск..." + }, + "speakersManagement": { + "added": "Добавлен", + "confidence": "Уверенность", + "confidenceHigh": "высокая", + "confidenceLow": "низкая", + "confidenceMedium": "средняя", + "created": "Создан", + "description": "Управляйте сохранёнными спикерами. Они сохраняются автоматически при использовании имён спикеров в ваших записях.", + "failedToLoad": "Не удалось загрузить спикеров", + "failedToLoadSnippets": "Не удалось загрузить фрагменты", + "keepThisSpeaker": "Оставить этого спикера (остальные будут объединены с ним):", + "last": "Последний", + "lastUsed": "Последнее использование", + "loadingSpeakers": "Загрузка спикеров...", + "match": "совпадение", + "mergeDescription": "Объедините несколько профилей спикеров в один. Все эмбеддинги, фрагменты и данные об использовании будут объединены.", + "mergeFailed": "Не удалось объединить спикеров", + "mergeNSpeakers": "Объединить {{count}} спикеров", + "mergeSpeakers": "Объединить спикеров", + "mergeSuccess": "Спикеры успешно объединены", + "noSnippetsAvailable": "Фрагменты недоступны", + "noSpeakersYet": "Спикеров пока не сохранено", + "sample": "образец", + "samples": "образцов", + "selectToMerge": "Выберите 2+ для объединения", + "speakersToMerge": "Спикеры для объединения:", + "speakersWillAppear": "Спикеры появятся здесь, когда вы будете использовать имена спикеров в ваших записях", + "targetWillReceive": "Выбранный спикер получит все голосовые данные и фрагменты от остальных.", + "time": "раз", + "times": "раз", + "totalSpeakers": "спикеров сохранено", + "used": "Использовано", + "usedTimes": "Использовано", + "viewSnippets": "Просмотреть фрагменты", + "voiceMatchSuggestions": "Предложения совпадений голоса", + "voiceProfile": "Голосовой профиль" + }, + "status": { + "completed": "Завершено", + "failed": "Не удалось", + "processing": "Обработка", + "queued": "В очереди", + "stuck": "Сбросить зависшую обработку", + "summarizing": "Резюмирование", + "transcribing": "Транскрибирование", + "uploading": "Загрузка" + }, + "summary": { + "actionItems": "Задачи к выполнению", + "cancelEdit": "Отменить редактирование", + "decisions": "Решения", + "editSummary": "Редактировать резюме", + "generateSummary": "Сгенерировать резюме", + "keyPoints": "Ключевые моменты", + "noSummary": "Резюме недоступно", + "participants": "Участники", + "regenerateSummary": "Перегенерировать резюме", + "saveSummary": "Сохранить резюме", + "summaryFailed": "Не удалось сгенерировать резюме", + "summaryInProgress": "Генерация резюме...", + "title": "Резюме" + }, + "tagManagement": { + "asrDefaults": "Настройки ASR по умолчанию", + "createTag": "Создать тег", + "customPrompt": "Пользовательский запрос", + "description": "Организуйте ваши записи с помощью пользовательских тегов. Каждый тег может иметь свой собственный запрос для резюме и настройки ASR по умолчанию.", + "maxSpeakers": "Макс.", + "minSpeakers": "Мин.", + "noTags": "Вы ещё не создали теги." + }, + "tags": { + "addTag": "Добавить тег", + "clearTagFilter": "Сбросить фильтр", + "createTag": "Создать тег", + "currentTags": "Текущие теги", + "filterByTag": "Фильтр по тегу", + "manageAllTags": "Управлять всеми тегами", + "noAvailableTags": "Нет доступных тегов", + "noMatchingTags": "Нет подходящих тегов", + "noTags": "Нет тегов", + "removeTag": "Удалить тег", + "searchTags": "Поиск...", + "tagColor": "Цвет тега", + "tagName": "Название тега", + "title": "Теги" + }, + "tagsModal": { + "addTags": "Добавить теги", + "currentTags": "Текущие теги", + "done": "Готово", + "noTagsAssigned": "К этой записи не назначены теги", + "searchTags": "Поиск тегов..." + }, + "time": { + "dayAgo": "1 день назад", + "daysAgo": "{{count}} дней назад", + "hourAgo": "1 час назад", + "hoursAgo": "{{count}} часов назад", + "justNow": "Только что", + "minuteAgo": "1 минуту назад", + "minutesAgo": "{{count}} минут назад", + "monthAgo": "1 месяц назад", + "monthsAgo": "{{count}} месяцев назад", + "weekAgo": "1 неделю назад", + "weeksAgo": "{{count}} недель назад", + "yearAgo": "1 год назад", + "yearsAgo": "{{count}} лет назад" + }, + "tooltips": { + "changeSpeaker": "Изменить спикера", + "clearChat": "Очистить чат", + "copyTranscript": "Копировать транскрипт", + "deleteTeam": "Удалить группу", + "doubleClickToEdit": "Двойной щелчок для редактирования", + "downloadTranscriptWithTemplate": "Скачать транскрипт с шаблоном", + "editTeam": "Редактировать группу", + "editText": "Редактировать текст", + "editTitle": "Редактировать заголовок", + "editTranscript": "Редактировать транскрипт", + "exitFullscreen": "Exit fullscreen", + "expand": "Развернуть", + "followPlayerDisabled": "Включить автопрокрутку - транскрипт следует за воспроизведением аудио", + "followPlayerEnabled": "Отключить автопрокрутку - транскрипт остаётся на месте", + "fullscreenVideo": "Fullscreen video", + "grantPublicSharing": "Предоставить разрешение на публичный доступ", + "hideVideo": "Hide video", + "highlight": "Добавить в избранное", + "makeAdmin": "Сделать администратором", + "manageMembers": "Управлять участниками", + "manageTeamTags": "Управлять групповыми тегами", + "markAsRead": "Отметить как прочитанное", + "maximizeChat": "Развернуть чат", + "minimize": "Свернуть", + "moveToInbox": "Переместить во входящие", + "mute": "Без звука", + "pause": "Пауза", + "play": "Воспроизвести", + "playbackSpeed": "Скорость воспроизведения", + "removeAdmin": "Убрать права администратора", + "removeFromQueue": "Удалить из очереди", + "removeFromTeam": "Удалить из группы", + "removeHighlight": "Убрать из избранного", + "reprocessTranscription": "Перегенерировать транскрипцию", + "reprocessWithAsr": "Перегенерировать через ASR", + "restoreChat": "Восстановить чат", + "revokePublicSharing": "Отозвать разрешение на публичный доступ", + "shareWithUsers": "Поделиться с пользователями", + "showVideo": "Show video", + "switchToDarkMode": "Переключить на тёмную тему", + "switchToLightMode": "Переключить на светлую тему", + "unmute": "Включить звук" + }, + "transcriptTemplates": { + "availableTemplates": "Доступные шаблоны", + "availableVars": "Доступные переменные", + "cancel": "Отмена", + "chooseTemplate": "Выберите шаблон...", + "createDefaults": "Создать стандартные шаблоны", + "createNew": "Создать шаблон", + "default": "По умолчанию", + "delete": "Удалить", + "description": "Настройте форматирование транскриптов для скачивания и экспорта.", + "downloadDefault": "Скачать с шаблоном по умолчанию", + "downloadWithoutTemplate": "Скачать без шаблона", + "filters": "Фильтры: |upper для верхнего регистра, |srt для формата временных меток субтитров", + "save": "Сохранить", + "selectOrCreate": "Выберите шаблон для редактирования или создайте новый", + "selectTemplate": "Выберите шаблон", + "setDefault": "Сделать шаблоном по умолчанию", + "tabTitle": "Транскрипт", + "template": "Шаблон", + "templateName": "Название шаблона", + "title": "Шаблоны транскриптов", + "viewGuide": "Посмотреть руководство по шаблонам" + }, + "transcription": { + "autoIdentifySpeakers": "Автоопределение спикеров", + "bubble": "Пузыри", + "cancelEdit": "Отменить редактирование", + "copy": "Копировать", + "copyToClipboard": "Копировать в буфер обмена", + "download": "Скачать", + "downloadTranscript": "Скачать транскрипт", + "edit": "Редактировать", + "editSpeakers": "Редактировать спикеров", + "editTranscription": "Редактировать транскрипцию", + "highlightSearchResults": "Подсветить результаты поиска", + "noTranscription": "Транскрипция недоступна", + "regenerateTranscription": "Перегенерировать транскрипцию", + "saveTranscription": "Сохранить транскрипцию", + "searchInTranscript": "Поиск в транскрипте...", + "simple": "Простой", + "speaker": "Спикер {{number}}", + "speakerLabels": "Метки спикеров", + "title": "Транскрипция", + "unknownSpeaker": "Неизвестный спикер" + }, + "upload": { + "chunking": "Большие файлы будут автоматически разделены на части для обработки", + "completed": "Завершено", + "copies": "копий этого файла", + "dropzone": "Перетащите аудиофайлы сюда или нажмите для выбора", + "duplicateDetected": "Этот файл является дубликатом \"{{existingName}}\" (загружен {{existingDate}})", + "duplicateFile": "Дубликат файла", + "failed": "Не удалось", + "fileExceedsMaxSize": "File \"{{name}}\" exceeds the maximum size of {{size}} MB and was skipped.", + "fileRemovedFromQueue": "File removed from queue", + "filesToUpload": "Files to Upload", + "invalidFileType": "Invalid file type \"{{name}}\". Only audio files and video containers with audio (MP3, WAV, MP4, MOV, AVI, etc.) are accepted. File skipped.", + "maxFileSize": "Максимальный размер файла", + "queued": "В очереди", + "selectFiles": "Выбрать файлы", + "settingsApplyToAll": "Settings apply to all files in this session", + "summarizing": "Резюмирование...", + "supportedFormats": "Поддерживаются форматы MP3, WAV, M4A, MP4, MOV, AVI, AMR и другие", + "title": "Загрузка аудио", + "transcribing": "Транскрибирование...", + "untitled": "Запись без названия", + "uploadNFiles": "Upload {{count}} File(s)", + "uploadProgress": "Прогресс загрузки", + "videoRetained": "Видео сохранено для воспроизведения", + "willAutoSummarize": "Автоматически создаст резюме после транскрибирования" + }, + "uploadProgress": { + "title": "Прогресс загрузки" + } +} \ No newline at end of file diff --git a/static/locales/zh.json b/static/locales/zh.json new file mode 100644 index 0000000..264fac6 --- /dev/null +++ b/static/locales/zh.json @@ -0,0 +1,1656 @@ +{ + "aboutPage": { + "aiSummarization": "AI 摘要生成", + "aiSummarizationDesc": "集成 OpenRouter 和 Ollama,支持自定义提示词", + "asrEnabled": "ASR 已启用", + "asrEndpoint": "ASR 端点", + "audioTranscription": "音频转录", + "audioTranscriptionDesc": "支持 Whisper API 和自定义 ASR,准确率高", + "backend": "后端", + "database": "数据库", + "deployment": "部署", + "dockerDescription": "官方 Docker 镜像", + "dockerHub": "Docker Hub", + "documentation": "文档", + "documentationDescription": "设置指南和用户手册", + "endpoint": "端点", + "frontend": "前端", + "githubDescription": "源代码、问题和发布", + "githubRepository": "GitHub 仓库", + "inquireMode": "查询模式", + "inquireModeDesc": "在所有录音中进行语义搜索", + "interactiveChat": "交互式聊天", + "interactiveChatDesc": "使用 AI 与您的转录内容对话", + "keyFeatures": "主要功能", + "largeLanguageModel": "大语言模型", + "model": "模型", + "projectDescription": "通过 AI 驱动的转录、摘要和交互式聊天功能,将您的音频录音转换为有组织、可搜索的笔记。", + "projectLinks": "项目链接", + "sharingExport": "分享和导出", + "sharingExportDesc": "分享录音并导出为各种格式", + "speakerDiarization": "说话人分离", + "speakerDiarizationDesc": "自动识别和标记不同的说话人", + "speechRecognition": "语音识别", + "systemConfiguration": "系统配置", + "systemInformation": "系统信息", + "tagline": "AI 驱动的音频转录和笔记工具", + "techStack": "技术栈", + "technologyStack": "技术栈", + "title": "关于", + "version": "版本", + "whisperApi": "Whisper API", + "whisperModel": "Whisper 模型" + }, + "aboutPageDetails": { + "aiSummarizationDesc": "集成 OpenRouter 和 Ollama,支持自定义提示词", + "asrEnabled": "ASR 已启用", + "asrEndpoint": "ASR 端点", + "audioTranscriptionDesc": "支持 Whisper API 和自定义 ASR,准确率高", + "backend": "后端", + "database": "数据库", + "deployment": "部署", + "dockerDescription": "官方 Docker 镜像", + "dockerHub": "Docker Hub", + "documentation": "文档", + "documentationDescription": "设置指南和用户手册", + "endpoint": "端点", + "frontend": "前端", + "githubDescription": "源代码、问题和发布", + "githubRepository": "GitHub 仓库", + "inquireModeDesc": "在所有录音中进行语义搜索", + "interactiveChatDesc": "使用 AI 与您的转录内容对话", + "largeLanguageModel": "大语言模型", + "model": "模型", + "no": "否", + "projectDescription": "通过 AI 驱动的转录、摘要和交互式聊天功能,将您的音频录音转换为有组织、可搜索的笔记。", + "sharingExportDesc": "分享录音并导出为各种格式", + "speakerDiarizationDesc": "自动识别和标记不同的说话人", + "whisperApi": "Whisper API", + "whisperModel": "Whisper 模型", + "yes": "是" + }, + "account": { + "about": "关于", + "accountActions": "账户操作", + "accountSettings": "账户设置", + "autoLabel": "Auto-label", + "autoSummarizationDisabled": "Auto-summarization disabled by admin", + "autoSummarize": "Auto-summarize", + "changePassword": "更改密码", + "chooseLanguageForInterface": "选择应用程序界面语言", + "companyOrganization": "公司/组织", + "completedRecordings": "已完成", + "customPrompts": "自定义提示", + "defaultHotwords": "Default Hotwords", + "defaultHotwordsPlaceholder": "e.g., Speakr, CTranslate2, PyAnnote, SDRs", + "defaultInitialPrompt": "Default Initial Prompt", + "defaultInitialPromptPlaceholder": "e.g., This is a meeting about AI transcription tools. The speakers discuss CTranslate2, PyAnnote, and SDRs.", + "email": "邮箱", + "failedRecordings": "失败", + "fullName": "全名", + "goToRecordings": "前往录音", + "interfaceLanguage": "界面语言", + "jobTitle": "职位", + "languageForSummaries": "标题、摘要和聊天的语言。留空使用默认值(您所选模型的默认行为)", + "languagePreferences": "语言偏好", + "leaveBlankForAutoDetect": "留空以自动检测语言", + "manageSpeakers": "管理发言人", + "mySharedTranscripts": "我的共享转录", + "name": "姓名", + "outputLanguage": "输出语言", + "personalFolder": "Personal Folder (Not Associated with a Group)", + "personalInfo": "个人信息", + "personalTag": "Personal Tag (Not Associated with a Group)", + "preferredOutputLanguage": "聊天机器人和摘要的首选语言", + "processingRecordings": "处理中", + "profile": "个人资料", + "saveAllPreferences": "保存所有偏好设置", + "sharedTranscripts": "共享转录", + "ssoLinkAccount": "Link {{provider}} account", + "ssoLinked": "Linked", + "ssoNotLinked": "Not linked", + "ssoProvider": "Provider", + "ssoSetPasswordFirst": "To unlink SSO, you must first set a password.", + "ssoSubject": "Subject:", + "ssoUnlinkAccount": "Unlink {{provider}} account", + "ssoUnlinkConfirm": "Are you sure you want to unlink your SSO account? You will need to use your password to log in.", + "statistics": "账户统计", + "tagManagement": "标签管理", + "title": "账户信息", + "totalRecordings": "录音总数", + "transcriptionHints": "Transcription Hints", + "transcriptionHintsDesc": "These defaults are used when no tag or folder overrides are set. They help improve transcription accuracy for your specific use case.", + "transcriptionLanguage": "转录语言", + "userDetails": "用户详情", + "username": "用户名" + }, + "accountTabs": { + "about": "关于", + "apiTokens": "API 令牌", + "customPrompts": "自定义提示", + "folderManagement": "文件夹管理", + "help": "帮助", + "namingTemplates": "命名", + "promptOptions": "提示选项", + "sharedTranscripts": "共享转录", + "speakersManagement": "发言人管理", + "tagManagement": "标签管理", + "templates": "模板", + "transcriptTemplates": "转录模板" + }, + "admin": { + "admin": "管理员", + "adminPanel": "管理面板", + "colorScheme": "配色方案", + "logout": "退出登录", + "mySharedTranscripts": "我的共享转录", + "settings": "设置", + "tagManagement": "标签管理", + "title": "管理员", + "userMenu": "用户菜单" + }, + "adminDashboard": { + "aboutInquireMode": "关于查询模式", + "actions": "操作", + "addNewUser": "添加新用户", + "addUser": "添加用户", + "additionalContext": "附加上下文", + "admin": "管理员", + "adminDefaultPrompt": "管理员默认提示", + "adminDefaultPromptDesc": "上面配置的提示(显示在此页面)", + "adminUser": "管理员用户", + "allJobsCompleted": "所有任务已完成", + "allRecordingsProcessed": "所有录音已处理完成!", + "allowed": "Allowed", + "asrConfigurationTitle": "ASR 配置", + "asrTimeout": "ASR 超时", + "asrTimeoutSeconds": "ASR 超时(秒)", + "asrTimeoutSecondsDesc": "ASR 处理的最大超时时间(秒)", + "available": "可用", + "blackHoleDirectory": "黑洞目录", + "blocked": "已阻止", + "budgetWarnings": "预算警告", + "buildVectorStore": "构建向量存储", + "buildingVectorStore": "构建向量存储", + "cancelAll": "取消全部", + "characters": "字符", + "charactersWithLimit": "{{count}} 字符", + "chunkSize": "块大小", + "clearBlackHoleJobs": "清除黑洞任务", + "complete": "完成", + "completedRecordings": "已完成", + "confirmDeleteUser": "确认删除用户", + "confirmDeleteUserMessage": "您确定要删除用户 {{username}} 吗?", + "confirmPassword": "确认密码", + "confirmPasswordLabel": "确认密码", + "contextNotes": { + "jsonConversion": "JSON 转录在发送前会转换为纯文本格式", + "modelConfig": "使用的模型通过 TEXT_MODEL_NAME 环境变量配置", + "tagPrompts": "如果存在多个标签提示,它们将按添加标签的顺序合并", + "transcriptLimit": "转录限制为可配置的字符数(默认:30,000)" + }, + "createFirstGroup": "Create Your First Group", + "created": "Created", + "currentUsage": "当前使用量", + "currentUsageMinutes": "当前使用量", + "customPrompts": "自定义提示", + "defaultPrompt": "默认提示", + "defaultPromptInfo": "此默认提示将用于所有未在账户设置中设置自定义提示的用户。", + "defaultPrompts": "默认提示", + "defaultSummarizationPrompt": "默认摘要提示", + "defaultSummaryPrompt": "默认摘要提示", + "deleteUser": "删除用户", + "description": "描述", + "editPrompt": "编辑提示", + "editSetting": "编辑设置", + "editUser": "编辑用户", + "email": "邮箱", + "emailLabel": "邮箱", + "embeddingModel": "嵌入模型", + "embeddingsInfo": "嵌入信息", + "embeddingsStatus": "嵌入状态", + "enableBlackHole": "启用黑洞", + "errors": { + "failedToLoadPrompt": "加载默认提示失败", + "failedToSavePrompt": "保存默认提示失败,请重试。", + "invalidFileSize": "请输入 1 到 10000 MB 之间的有效大小", + "invalidInteger": "请输入有效的整数", + "invalidNumber": "请输入有效的数字", + "maxTimeout": "超时不能超过 10 小时(36000 秒)", + "minCharacters": "请输入至少 1000 个字符", + "minTimeout": "超时必须至少为 60 秒" + }, + "failedJobs": "失败的任务", + "failedRecordings": "失败", + "groupName": "Group Name", + "groupsTab": "Groups", + "id": "ID", + "inquireMode": "查询模式", + "inquireModeDescription": "查询模式允许用户使用自然语言问题搜索多个转录。它通过将转录分成块并使用 AI 模型创建可搜索的嵌入来工作。", + "inquireModeSettings": "查询模式设置", + "isActive": "已激活", + "isAdmin": "是管理员", + "jobStatus": "任务状态", + "languagePreferenceNote": "注意:如果用户设置了输出语言偏好,将添加\"确保您的回复使用 {language}\"。", + "lastUpdated": "最后更新", + "llmPromptTemplate": "LLM 提示模板", + "loadingInquireStatus": "加载查询状态...", + "maxFileSizeDesc": "最大文件大小(MB)", + "maxFileSizeHelp": "最大文件大小(兆字节)(1-10000 MB)", + "maxFileSizeMb": "最大文件大小 MB", + "megabytes": "MB", + "members": "Members", + "membersCount": "members", + "minutes": "分钟", + "monitorBlackHoleDirectory": "监控黑洞目录", + "monthlyCost": "月度成本", + "monthlyTokenBudget": "每月令牌预算", + "monthlyTranscriptionBudget": "每月转录预算(分钟)", + "name": "名称", + "needProcessing": "需要处理", + "never": "从未", + "newPasswordLabel": "新密码(留空保持不变)", + "no": "否", + "noData": "无数据", + "noDescription": "No description", + "noDescriptionAvailable": "无描述", + "noGroupsAdmin": "You are not an admin of any groups yet", + "noGroupsCreated": "No groups created yet", + "noLimit": "无限制", + "noMembersYet": "No members yet", + "noTranscriptionData": "暂无转录使用数据", + "none": "无", + "notSet": "未设置", + "overlap": "重叠", + "password": "密码", + "passwordLabel": "密码", + "passwordsDoNotMatch": "Passwords do not match", + "pendingJobs": "待处理任务", + "pendingRecordings": "待处理", + "percentUsed": "已使用", + "placeholdersNote": "处理录音时,占位符会被实际值替换。", + "processAllRecordings": "处理所有录音", + "processNext10": "处理接下来的 10 个", + "processedForInquire": "已为查询处理", + "processing": "处理中...", + "processingActions": "处理操作", + "processingJobs": "处理中任务", + "processingProgress": "处理进度", + "processingRecordings": "处理中", + "promptDescription": "当用户未设置自己的提示时,此提示将用于生成所有录音的摘要。", + "promptHierarchy": "提示优先级", + "promptPriorityDescription": "系统在选择使用哪个提示时使用以下优先级顺序:", + "promptResetMessage": "提示已重置为系统默认值。点击\"保存更改\"应用。", + "promptSavedSuccessfully": "默认提示保存成功!", + "publicShare": "Public Share", + "rebuildVectorStore": "重建向量存储", + "recordingDisclaimer": "录音免责声明", + "recordingStatusDistribution": "录音状态分布", + "recordings": "录音", + "recordingsNeedProcessing": "{{count}} 个录音需要处理", + "recordingsProcessed": "{{count}} 个录音已处理", + "refreshStatus": "刷新状态", + "resetToDefault": "重置为默认", + "saveDefaultPrompt": "保存默认提示", + "saveInquireSettings": "保存查询设置", + "saveSetting": "保存设置", + "saveUser": "保存用户", + "saving": "保存中...", + "searchUsers": "搜索用户...", + "seconds": "秒", + "setting": "设置", + "settings": { + "asrTimeoutDesc": "等待 ASR 转录完成的最大时间(秒)。默认为 1800 秒(30 分钟)。", + "defaultSummaryPromptDesc": "用户未设置自己的提示时使用的默认摘要提示。这作为所有用户的基础提示。", + "maxFileSizeDesc": "允许的音频上传最大文件大小(兆字节)。", + "recordingDisclaimerDesc": "录音开始前向用户显示的法律免责声明。支持 Markdown 格式。留空以禁用。", + "uploadDisclaimerDesc": "文件上传前显示的法律免责声明。支持 Markdown。留空以禁用。", + "customBannerDesc": "页面顶部显示的自定义横幅。支持 Markdown。留空以禁用。", + "transcriptLengthLimitDesc": "从转录发送到 LLM 进行摘要和聊天的最大字符数。使用 -1 表示无限制。" + }, + "settingsManagement": "设置管理", + "storageUsed": "已用存储", + "summarizationInstructions": "摘要说明", + "systemFallback": "系统回退", + "systemFallbackDesc": "如果以上都未设置,则使用硬编码默认值", + "systemPrompt": "系统提示", + "systemSettings": "系统设置", + "systemStatistics": "系统统计", + "tagCustomPrompt": "标签自定义提示", + "tagCustomPromptDesc": "如果录音有带自定义提示的标签", + "textSearchOnly": "仅文本搜索", + "thisMonth": "本月", + "timeoutRecommendation": "推荐:长音频文件使用 30-120 分钟", + "title": "管理仪表板", + "todaysMinutes": "今日分钟数", + "tokenBudgetExceeded": "每月令牌预算已超出。请联系您的管理员。", + "tokenBudgetHelp": "设置 AI 功能的每月令牌限制。留空表示无限制。", + "tokenBudgetPlaceholder": "留空表示无限制", + "tokenUsage": "令牌使用量", + "tokens": "令牌", + "topUsers": "顶级用户", + "topUsersByStorage": "按存储排序的顶级用户", + "total": "总计", + "totalChunks": "总块数", + "totalQueries": "总查询数", + "totalRecordings": "总录音数", + "totalStorage": "总存储", + "totalUsers": "总用户数", + "transcriptLengthLimit": "转录长度限制", + "transcriptLengthLimitDesc": "转录的最大字符数限制", + "transcriptionBudgetHelp": "限制每月转录分钟数。留空表示无限制。", + "transcriptionBudgetPlaceholder": "留空表示无限制", + "transcriptionUsage": "转录使用情况", + "updateUser": "更新用户", + "userCustomPrompt": "用户自定义提示", + "userCustomPromptDesc": "如果用户在账户设置中设置了自己的提示", + "userManagement": "用户管理", + "userMessageTemplate": "用户消息模板", + "userTranscriptionUsage": "用户转录使用情况(本月)", + "username": "用户名", + "usernameLabel": "用户名", + "users": "用户", + "value": "值", + "vectorDimensions": "向量维度", + "vectorStore": "向量存储", + "vectorStoreInfo": "向量存储信息", + "vectorStoreManagement": "向量存储管理", + "vectorStoreStatus": "向量存储状态", + "vectorStoreUpToDate": "向量存储是最新的", + "viewFullPromptStructure": "查看完整的 LLM 提示结构", + "warning": "警告", + "yes": "是" + }, + "apiTokens": { + "activeTokens": "活跃令牌", + "createFirstToken": "创建您的第一个 API 令牌以启用编程访问", + "createToken": "创建令牌", + "created": "创建于", + "description": "创建和管理 API 令牌以编程方式访问您的账户", + "expires": "过期时间", + "lastUsed": "最后使用", + "neverUsed": "从未使用", + "noExpiration": "永不过期", + "noTokens": "没有 API 令牌", + "securityNotice": "安全提示", + "securityWarning": "请像密码一样对待 API 令牌。它们提供对您账户的完全访问权限。切勿在公共区域分享令牌", + "title": "API 令牌", + "usageExamples": "使用示例" + }, + "buttons": { + "addSegment": "添加片段", + "addSpeaker": "添加发言人", + "cancel": "取消", + "clearAllFilters": "清除所有筛选", + "clearCompleted": "清除已完成的上传", + "clearSearchText": "清除搜索文本", + "close": "关闭", + "copy": "复制", + "copyMessage": "复制消息", + "copyNotes": "复制笔记", + "copySummary": "复制摘要", + "copyToClipboard": "复制到剪贴板", + "createTag": "创建标签", + "deleteAll": "删除全部", + "deleteSpeaker": "删除发言人", + "deleteTag": "删除标签", + "deleteUser": "删除用户", + "downloadAsWord": "下载为Word文档", + "downloadAudio": "下载音频", + "downloadChat": "下载聊天记录为Word文档", + "downloadNotes": "下载笔记为Word文档", + "downloadSummary": "下载摘要为Word文档", + "editNotes": "编辑笔记", + "editSetting": "编辑设置", + "editSpeakers": "编辑发言人...", + "editSummary": "编辑摘要", + "editTag": "编辑标签", + "editTags": "编辑标签", + "editTranscription": "编辑转录", + "editUser": "编辑用户", + "exportCalendar": "导出到日历", + "help": "帮助", + "identifySpeakers": "识别发言人", + "next": "下一个", + "previous": "上一个", + "refresh": "刷新", + "reprocessSummary": "重新处理摘要", + "reprocessTranscription": "重新处理转录", + "reprocessWithAsr": "使用ASR重新处理", + "resetStuckProcessing": "重置卡住的处理", + "saveChanges": "保存更改", + "saveCustomPrompt": "保存自定义提示", + "saveNames": "保存名称", + "saveSettings": "保存设置", + "shareRecording": "分享录音", + "toggleTheme": "切换主题", + "updateTag": "更新标签" + }, + "changePasswordModal": { + "confirmPassword": "确认新密码", + "currentPassword": "当前密码", + "newPassword": "新密码", + "passwordRequirement": "密码必须至少 8 个字符", + "title": "更改密码" + }, + "chat": { + "availableAfterTranscription": "转录完成后聊天功能将可用", + "cannotChatTranscriptionFailed": "Cannot chat: transcription failed. Please reprocess the transcription first.", + "chatWithTranscription": "与转录内容对话", + "clearChat": "清除聊天", + "cleared": "Chat cleared", + "downloadFailed": "Failed to download chat", + "downloadSuccess": "Chat downloaded successfully!", + "error": "发送消息失败", + "noMessages": "暂无消息", + "noMessagesToDownload": "No chat messages to download.", + "placeholder": "询问有关此录音的问题...", + "placeholderWithHint": "询问有关此录音的问题...(按回车发送,Ctrl+回车换行)", + "send": "发送", + "suggestedQuestions": "建议问题", + "thinking": "思考中...", + "title": "聊天", + "whatAreActionItems": "有哪些行动项?", + "whatAreKeyPoints": "关键要点是什么?", + "whatWasDiscussed": "讨论了什么?", + "whoSaidWhat": "谁说了什么?" + }, + "colorScheme": { + "chooseRecording": "从侧边栏选择一个录音以查看其转录和摘要", + "darkThemes": "深色主题", + "descriptions": { + "blue": "Classic blue theme with a clean, professional feel", + "emerald": "Nature-inspired green theme for a calming experience", + "purple": "Rich purple theme with an elegant, modern look", + "rose": "Warm rose theme with a soft, inviting aesthetic", + "amber": "Warm amber tones for a cozy, productive feel", + "teal": "Cool teal theme with a refreshing, modern vibe" + }, + "lightThemes": "浅色主题", + "names": { + "blue": "Ocean Blue", + "emerald": "Forest Green", + "purple": "Royal Purple", + "rose": "Coral Rose", + "amber": "Golden Amber", + "teal": "Arctic Teal" + }, + "resetToDefault": "重置为默认", + "selectRecording": "选择录音", + "subtitle": "使用美观的颜色主题自定义您的界面", + "themes": { + "light": { + "blue": { + "name": "海洋蓝", + "description": "专业风格的经典蓝色主题" + }, + "emerald": { + "name": "森林翠绿", + "description": "清新自然的绿色主题" + }, + "purple": { + "name": "皇家紫", + "description": "优雅精致的紫色主题" + }, + "rose": { + "name": "日落玫瑰", + "description": "温暖柔和的粉色主题" + }, + "amber": { + "name": "金色琥珀", + "description": "明亮温暖的黄色主题" + }, + "teal": { + "name": "海洋青", + "description": "清凉宁静的青色主题" + } + }, + "dark": { + "blue": { + "name": "午夜蓝", + "description": "专注工作的深蓝主题" + }, + "emerald": { + "name": "暗夜森林", + "description": "舒适观看的浓绿主题" + }, + "purple": { + "name": "深紫", + "description": "激发创意的神秘紫色主题" + }, + "rose": { + "name": "暗玫瑰", + "description": "微妙温暖的柔粉主题" + }, + "amber": { + "name": "暗琥珀", + "description": "舒适温馨的棕色主题" + }, + "teal": { + "name": "深青", + "description": "平静专注的深青主题" + } + } + }, + "title": "选择配色方案" + }, + "common": { + "back": "返回", + "cancel": "取消", + "changesSaved": "更改已保存", + "close": "关闭", + "confirm": "确认", + "delete": "删除", + "deselectAll": "取消全选", + "download": "下载", + "edit": "编辑", + "error": "错误", + "failed": "失败", + "filter": "筛选", + "info": "信息", + "loading": "加载中...", + "new": "新建", + "next": "下一步", + "no": "否", + "noResults": "未找到结果", + "ok": "确定", + "or": "或", + "previous": "上一步", + "processing": "处理中...", + "refresh": "刷新", + "retry": "重试", + "save": "保存", + "search": "搜索", + "selectAll": "全选", + "sort": "排序", + "success": "成功", + "untitled": "无标题", + "upload": "上传", + "warning": "警告", + "yes": "是" + }, + "customPrompts": { + "currentDefaultPrompt": "当前默认提示(如果上面留空则使用此提示)", + "promptDescription": "此提示将用于生成转录的摘要。它将覆盖管理员的默认提示。", + "promptPlaceholder": "描述您希望摘要的结构。留空以使用管理员的默认提示。", + "summaryGeneration": "摘要生成提示", + "tip1": "具体说明您希望在摘要中包含的部分", + "tip2": "使用清晰的格式说明(例如,\"使用项目符号\",\"创建编号列表\")", + "tip3": "指定您是否希望优先处理某些信息", + "tip4": "系统将自动向 AI 提供转录内容", + "tip5": "您的输出语言偏好(如果设置)将自动应用", + "tipsTitle": "编写有效提示的技巧", + "yourCustomPrompt": "您的自定义摘要提示" + }, + "deleteAllSpeakersModal": { + "confirmMessage": "您确定要删除所有保存的发言人吗?此操作无法撤销。", + "title": "删除所有发言人" + }, + "dialogs": { + "deleteRecording": { + "cancel": "取消", + "confirm": "删除", + "message": "您确定要删除此录音吗?此操作无法撤销。", + "title": "删除录音" + }, + "deleteShare": { + "message": "您确定要删除此共享吗?这将撤销对公共链接的访问。", + "title": "删除共享" + }, + "reprocessTranscription": { + "cancel": "取消", + "confirm": "重新处理", + "message": "您确定要重新处理此转录吗?当前转录将被替换。", + "title": "重新处理转录" + }, + "unsavedChanges": { + "cancel": "取消", + "discard": "放弃", + "message": "您有未保存的更改。在离开之前是否要保存?", + "save": "保存", + "title": "未保存的更改" + } + }, + "duration": { + "hours": "{{count}} 小时", + "hoursPlural": "{{count}} 小时", + "minutes": "{{count}} 分钟", + "minutesPlural": "{{count}} 分钟", + "seconds": "{{count}} 秒", + "secondsPlural": "{{count}} 秒" + }, + "editTagModal": { + "asrDefaultSettings": "ASR 默认设置", + "asrSettingsDescription": "使用此标签进行 ASR 转录时,这些设置将默认应用", + "color": "颜色", + "colorDescription": "选择颜色以便识别", + "createTitle": "创建标签", + "customPrompt": "自定义摘要提示", + "customPromptPlaceholder": "可选:为带有此标签的录音生成摘要的自定义提示", + "defaultLanguage": "默认语言", + "defaultPromptPlaceholder": "Leer lassen, um Ihren Standard-Zusammenfassungs-Prompt zu verwenden", + "exportTemplate": "导出模板", + "exportTemplateHint": "选择导出带有此标签的录音时使用的导出模板", + "leaveBlankPrompt": "留空以使用您的默认摘要提示", + "maxSpeakers": "最大发言人数", + "minSpeakers": "最小发言人数", + "namingTemplate": "命名模板", + "namingTemplateHint": "选择命名模板以自动格式化带有此标签的录音标题", + "noExportTemplate": "无模板(使用用户默认)", + "noNamingTemplate": "无模板(使用用户默认或 AI 标题)", + "tagName": "标签名称 *", + "tagNamePlaceholder": "例如,会议、访谈", + "title": "编辑标签" + }, + "errors": { + "audioExtractionFailed": "Audio Extraction Failed", + "audioExtractionFailedGuidance": "Try converting the file to a standard audio format (MP3, WAV) before uploading.", + "audioExtractionFailedMessage": "Could not extract audio from the uploaded file.", + "audioRecordingFailed": "音频录制失败。请检查您的麦克风。", + "authenticationError": "Authentication Error", + "authenticationErrorGuidance": "Please check that the API key is correct and has not expired.", + "authenticationErrorMessage": "The transcription service rejected the API credentials.", + "checkApiKeyGuidance": "Check the API key in settings", + "checkNetworkGuidance": "Check network connection", + "connectionError": "Connection Error", + "connectionErrorGuidance": "Check your internet connection and ensure the service is available.", + "connectionErrorMessage": "Could not connect to the transcription service.", + "convertFormatGuidance": "Convert to MP3 or WAV before uploading", + "convertStandardGuidance": "Convert to standard audio format", + "enableChunkingGuidance": "Enable chunking in settings or compress the file", + "fallbackMessage": "An error occurred", + "fallbackTitle": "Error", + "fileTooLarge": "文件太大", + "fileTooLargeGuidance": "Try enabling audio chunking in your settings, or compress the audio file before uploading.", + "fileTooLargeMaxSize": "File too large. Max: {{size}} MB.", + "fileTooLargeMessage": "The audio file exceeds the maximum size allowed by the transcription service.", + "fileTooLargeTitle": "File Too Large", + "generic": "发生错误", + "invalidAudioFormat": "Invalid Audio Format", + "invalidAudioFormatGuidance": "Try converting the audio to MP3 or WAV format before uploading.", + "invalidAudioFormatMessage": "The audio file format is not supported or the file may be corrupted.", + "loadingShares": "加载共享时出错", + "networkError": "网络错误。请检查您的连接。", + "networkErrorDuringUpload": "Network error during upload", + "notFound": "未找到", + "permissionDenied": "权限被拒绝", + "processingError": "Processing Error", + "processingErrorFallbackGuidance": "Try reprocessing the recording", + "processingErrorGuidance": "If this error persists, try reprocessing the recording.", + "processingErrorMessage": "An error occurred during processing.", + "processingFailedOnServer": "Processing failed on server.", + "processingFailedWithStatus": "Processing failed with status {{status}}", + "processingTimeout": "Processing Timeout", + "processingTimeoutGuidance": "This can happen with very long recordings. Try splitting the audio into smaller parts.", + "processingTimeoutMessage": "The transcription took too long to complete.", + "quotaExceeded": "存储配额已超出", + "rateLimitExceeded": "Rate Limit Exceeded", + "rateLimitExceededGuidance": "Please wait a few minutes and try reprocessing.", + "rateLimitExceededMessage": "Too many requests were sent to the transcription service.", + "serverError": "服务器错误。请稍后重试。", + "serverErrorStatus": "Server error ({{status}})", + "serviceUnavailable": "Service Unavailable", + "serviceUnavailableGuidance": "This is usually temporary. Please try again in a few minutes.", + "serviceUnavailableMessage": "The transcription service is temporarily unavailable.", + "splitAudioGuidance": "Try splitting the audio into smaller parts", + "summaryFailed": "摘要生成失败。请重试。", + "transcriptionFailed": "转录失败。请重试。", + "tryAgainLaterGuidance": "Try again in a few minutes", + "unauthorized": "未授权", + "unexpectedResponse": "Unexpected success response from server after upload.", + "unsupportedFormat": "不支持的文件格式", + "uploadFailed": "上传失败。请重试。", + "uploadFailedWithStatus": "Upload failed with status {{status}}", + "uploadTimedOut": "Upload timed out", + "validationError": "验证错误", + "waitAndRetryGuidance": "Wait a few minutes and try again" + }, + "eventExtraction": { + "description": "启用后,AI将识别录音中提到的会议、约会和截止日期,并创建可下载的日历事件。", + "enableLabel": "启用从转录中自动提取事件", + "info": "提取的事件将显示在检测到日历项目的录音的\"事件\"选项卡中。", + "title": "事件提取" + }, + "events": { + "add": "添加", + "addToCalendar": "添加到日历", + "attendees": "参与者", + "confirmDelete": "删除事件“{title}”?", + "delete": "删除", + "deleteFailed": "删除事件失败", + "deleted": "事件已删除", + "end": "结束", + "location": "地点", + "noEvents": "此录音中未检测到事件", + "start": "开始", + "title": "事件" + }, + "exportLabels": { + "created": "创建时间", + "date": "日期", + "fileSize": "文件大小", + "footer": "由 [DictIA](https://gitea.innova-ai.ca/Innova-AI/dictia) 生成", + "metadata": "元数据", + "notes": "笔记", + "originalFile": "原始文件", + "participants": "参与者", + "summarizationTime": "摘要时间", + "summary": "摘要", + "tags": "标签", + "transcription": "转录", + "transcriptionTime": "转录时间" + }, + "exportTemplates": { + "availableLabels": "本地化标签(自动翻译)", + "availableTemplates": "可用模板", + "availableVars": "可用变量", + "cancel": "取消", + "conditionals": "条件", + "conditionalsHint": "使用 {{#if variable}}...{{/if}} 来有条件地包含内容", + "contentSections": "内容部分", + "createDefaults": "创建默认模板", + "createNew": "创建模板", + "default": "默认", + "delete": "删除", + "description": "自定义录音导出为 markdown 文件的方式。", + "recordingData": "录音数据", + "save": "保存", + "selectOrCreate": "选择一个模板进行编辑或创建新模板", + "setDefault": "设为默认模板", + "tabTitle": "导出", + "template": "模板", + "templateDescription": "描述", + "templateName": "模板名称", + "title": "导出模板", + "viewGuide": "查看模板指南" + }, + "fileSize": { + "bytes": "{{count}} B", + "gigabytes": "{{count}} GB", + "kilobytes": "{{count}} KB", + "megabytes": "{{count}} MB" + }, + "folderManagement": { + "allFolders": "所有文件夹", + "asrDefaults": "ASR 默认设置", + "autoShareOnApply": "自动与群组成员共享", + "autoShareOnApplyHelp": "添加到此文件夹时自动与所有群组成员共享录音", + "confirmDelete": "确定要删除此文件夹吗?录音将从文件夹中移除但不会被删除。", + "createFolder": "创建文件夹", + "customPrompt": "自定义提示词", + "defaultLanguage": "默认语言", + "deleteFolder": "删除文件夹", + "description": "将录音整理到文件夹中。与标签不同,录音只能属于一个文件夹。文件夹提示词在用户提示词之前、标签提示词之后应用。", + "editFolder": "编辑文件夹", + "filterByFolder": "按文件夹筛选", + "folderColor": "文件夹颜色", + "folderName": "文件夹名称", + "groupSettings": "群组设置", + "maxSpeakers": "最大发言人数", + "minSpeakers": "最小发言人数", + "moveToFolder": "移动到文件夹", + "namingTemplate": "命名模板", + "noFolder": "无文件夹", + "noFolders": "尚未创建文件夹", + "noFoldersDescription": "创建您的第一个文件夹来整理录音", + "protectFromDeletion": "防止删除", + "protectFromDeletionHelp": "保护此文件夹中的录音不被自动删除", + "recordings": "录音", + "removeFromFolder": "从文件夹中移除", + "retentionDays": "保留天数", + "retentionDaysHelp": "此文件夹中的录音将在指定天数后删除。留空使用全局保留设置。", + "retentionSettings": "保留设置", + "selectNamingTemplate": "选择命名模板...", + "shareWithGroupLead": "与群组管理员共享", + "shareWithGroupLeadHelp": "添加到此文件夹时与群组管理员共享录音", + "title": "文件夹管理" + }, + "form": { + "auto": "自动", + "autoDetect": "自动检测", + "dateFrom": "从", + "dateTo": "至", + "enterNotesMarkdown": "以Markdown格式输入笔记...", + "enterSummaryMarkdown": "以Markdown格式输入摘要...", + "folder": "Folder", + "hotwords": "Hotwords", + "hotwordsHelp": "Comma-separated words to improve recognition of domain-specific terms", + "hotwordsPlaceholder": "e.g., Speakr, CTranslate2, PyAnnote", + "initialPrompt": "Initial Prompt", + "initialPromptHelp": "Context to steer the transcription model's style and vocabulary", + "initialPromptPlaceholder": "e.g., This is a meeting about AI transcription tools.", + "language": "语言", + "maxSpeakers": "最多发言人数", + "meetingDate": "会议日期", + "minSpeakers": "最少发言人数", + "minutes": "分钟", + "notes": "笔记", + "notesPlaceholder": "以Markdown格式输入您的笔记...", + "optional": "可选", + "participantNamePlaceholder": "Participant name...", + "participants": "参与者", + "placeholderAuto": "自动", + "placeholderCharacterLimit": "输入字符限制(例如:30000)", + "placeholderMinutes": "分钟", + "placeholderOptional": "可选", + "placeholderSeconds": "秒", + "placeholderSizeMB": "输入大小(MB)", + "searchSpeakers": "搜索发言人...", + "searchTags": "搜索标签...", + "seconds": "秒", + "shareNotes": "分享笔记", + "shareSummary": "分享摘要", + "shareableLink": "可分享链接", + "summaryPromptPlaceholder": "输入默认摘要提示...", + "title": "标题", + "transcriptionLanguage": "Transcription Language", + "yourFullName": "您的全名" + }, + "groups": { + "addMembers": "添加成员...", + "autoShare": "自动分享", + "autoShareNote": "注意:如果两者都启用,所有团队成员都将有访问权限。如果只启用\"团队管理员\",则只有团队负责人有访问权限。", + "autoShareTeam": "应用此标签时自动与所有团队成员分享录音", + "autoSharesWithTeam": "自动与所有团队成员分享", + "confirmDelete": "确定要删除此团队吗?此操作无法撤销。", + "createTeam": "创建团队", + "createTeamTag": "创建新团队标签", + "dayRetention": "天保留期限", + "deleteTeam": "删除团队", + "deletionExempt": "免于删除", + "deletionExemptHelp": "带有此标签的录音将免于自动删除,即使超过保留期限。", + "editTeam": "编辑团队", + "editTeamTag": "编辑团队标签", + "globalRetention": "全局保留期限", + "members": "成员", + "noMembers": "此团队暂无成员", + "noTeamTags": "尚未创建团队标签", + "noTeams": "尚未创建团队", + "retentionHelp": "带有此标签的录音将在此天数后删除。留空则使用全局保留期限({{days}}天)。", + "retentionPeriod": "保留期限(天)", + "retentionPlaceholder": "留空则使用全局保留期限", + "searchUsers": "搜索用户...", + "selectTeamLead": "选择团队负责人...", + "shareWithAdmins": "应用此标签时与团队管理员分享录音", + "sharesWithAdminsOnly": "仅与团队管理员分享", + "syncComplete": "团队分享同步成功", + "syncTeamShares": "同步团队分享", + "syncTeamSharesDescription": "这将根据标签的分享设置,追溯性地将所有带有团队标签的录音分享给相应的团队成员。", + "teamLead": "团队负责人", + "teamName": "团队名称", + "teamNamePlaceholder": "输入团队名称", + "teamTags": "团队标签", + "title": "群组管理", + "updateTeam": "更新团队" + }, + "help": { + "actions": "操作", + "activeFilters": "活动筛选器", + "addSegmentBelow": "在下方添加片段", + "advancedAsrOptions": "高级 ASR 选项", + "allRecordingsLoaded": "已加载所有录音", + "allTagsSelected": "All tags selected", + "appliedSuggestedNames": "已应用 {{count}} 个建议名称", + "appliedSuggestedNamesPlural": "已应用 {{count}} 个建议名称", + "applySuggested": "应用建议", + "applySuggestedMobile": "建议", + "approachingLimit": "接近 {{limit}}MB 限制", + "askAboutTranscription": "询问有关此转录的问题", + "audioDeletedDescription": "此录音的音频文件已被删除,但转录内容仍然可用。", + "audioDeletedMessage": "音频文件已归档,无法播放。", + "audioDeletedTitle": "音频文件已删除", + "audioPlayer": "音频播放器", + "autoIdentify": "自动识别", + "autoIdentifyMobile": "自动", + "bothAudioDesc": "录制您的声音 + 会议参与者(推荐用于在线会议)", + "clearFilters": "清除筛选", + "clickToAddNotes": "点击添加笔记...", + "colorRepeats": "颜色从发言人 {{number}} 开始重复", + "completedFiles": "已完成文件", + "confirmReprocessingTitle": "确认重新处理", + "copyMessage": "复制消息", + "createFolders": "Create folders", + "createPublicLink": "创建公共链接以分享此录音。分享仅在安全(HTTPS)连接上可用。", + "createTags": "创建标签", + "defaultHotwordsHelp": "Comma-separated words or phrases that the transcription model should prioritize recognizing (brand names, acronyms, technical terms).", + "defaultInitialPromptHelp": "Context to steer the transcription model's style and vocabulary. Describe the topic or expected content of your recordings.", + "deleteSegment": "删除片段", + "discard": "放弃", + "dragToReorder": "Drag to reorder", + "endTime": "结束", + "enterNameFor": "输入名称", + "enterSpeakerName": "输入发言人姓名...", + "entireScreen": "整个屏幕", + "errorChangingSpeaker": "更改发言人时出错", + "errorOpeningTextEditor": "打开文本编辑器时出错", + "errorSavingText": "保存文本时出错", + "estimatedSize": "预计大小", + "expandAll": "全部展开", + "failedReprocess": "重新处理失败", + "filterByTag": "按标签筛选", + "filterOptions": "筛选选项", + "finishDrop": "完成拖放以上传文件", + "firstTagAsrSettings": "First tag's ASR settings will be applied:", + "firstTagDefaultsApplied": "First tag's defaults applied", + "folderHasCustomPrompt": "This folder has a custom summary prompt", + "generatingSummary": "生成摘要中...", + "groups": "组", + "hideAll": "全部隐藏", + "highlighted": "已标记", + "howToRecordSystemAudio": "如何录制系统音频", + "identifyAllSpeakers": "识别所有发言人", + "identifying": "识别中...", + "importantNote": "重要提示", + "inProgress": "进行中", + "internalSharingDesc": "与您组织中的特定用户分享", + "lines": "{{count}} 行", + "loadingMore": "加载更多录音中...", + "loadingRecordings": "加载录音中...", + "markdownEditor": "Markdown 编辑器", + "me": "Me", + "meetingDate": "会议日期", + "meetingParticipants": "会议参与者", + "microphoneDesc": "仅录制您的声音", + "microphoneOnly": "仅麦克风", + "microphoneOnlyDesc": "仅录制您的声音(用于独自工作或面对面会议)", + "minutes": "分钟", + "modelReasoning": "模型推理", + "moreSpeakersThanColors": "发言人数超过可用颜色数", + "navigate": "导航", + "newTranscriptions": "新转录", + "noDateSet": "未设置日期", + "noMatchingTags": "No matching tags", + "noParticipants": "无参与者", + "noRecordingSelected": "未选择录音。", + "noRecordingsFound": "未找到录音", + "noSpeakersIdentified": "无法从上下文中识别发言人。", + "noSuggestionsToApply": "没有可应用的建议", + "noTagsCreated": "尚未创建标签。", + "notes": "笔记", + "of": "/", + "or": "或", + "participants": "参与者", + "playFromHere": "从此处播放", + "playPause": "播放/暂停", + "pleaseEnterSpeakerName": "请输入发言人名称", + "processingTime": "处理时间", + "processingTimeDescription": "这可能需要几分钟完成。处理期间您可以继续使用应用。", + "processingTranscription": "处理转录中...", + "publicLinkDesc": "任何拥有此链接的人都可以访问录音", + "recordSystemSteps1": "点击\"录制系统音频\"或\"录制两者\"。", + "recordSystemSteps2": "在弹出窗口中,选择", + "recordSystemSteps3": "确保勾选显示的框", + "recordingFinished": "录音完成", + "recordingInProgress": "录音进行中...", + "recordingSettings": "录音设置", + "recordingStatus": "录音状态", + "regenerateSummaryAfterNames": "更新名称后重新生成摘要", + "reprocessed": "已重新处理", + "saved": "已保存!", + "savingProgress": "保存中...", + "seconds": "秒", + "selectedTagsCustomPrompts": "Selected tags include custom summary prompts", + "sentence": "句子", + "shareSystemAudio": "共享系统音频", + "shareTabAudio": "共享标签页音频", + "shareableLink": "可分享链接", + "sharedOn": "共享于", + "sharingWindowNoAudio": "共享\"窗口\"不会捕获音频。", + "showAll": "显示全部", + "showLess": "显示更少", + "showMore": "显示更多", + "speaker": "发言人", + "speakerAdded": "发言人添加成功", + "speakerCount": "发言人", + "speakerName": "发言人名称", + "speakerNamesUpdated": "发言人名称更新成功!", + "speakers": "发言人", + "speakersIdentified": "成功识别 {{count}} 位发言人!", + "speakersIdentifiedPlural": "成功识别 {{count}} 位发言人!", + "speakersUpdatedSaveToApply": "发言人已更新!保存转录以应用更改。", + "specificBrowserTab": "特定浏览器标签页", + "startRecording": "开始录音", + "startTime": "开始", + "startingAutoIdentification": "正在启动自动发言人识别...", + "stopRecording": "停止录音", + "summary": "摘要", + "summaryGenerationFailed": "摘要生成失败", + "summaryGenerationTimedOut": "摘要生成超时", + "summaryRegenerationStarted": "摘要重新生成已开始", + "summaryUpdated": "摘要已更新!", + "systemAudioBoth": "系统音频 + 麦克风", + "systemAudioDesc": "录制会议参与者和系统声音", + "tagManagement": "标签管理", + "tags": "标签", + "tapToAddNotes": "点击添加笔记...", + "thisActionCannotBeUndone": "此操作无法撤销。", + "title": "标题", + "toCaptureAudioFromMeetings": "要从会议或其他应用捕获音频,您必须共享屏幕或浏览器标签页。", + "toOrganizeRecordings": "to organize your recordings", + "totalDuration": "总时长", + "transcriptUpdated": "转录更新成功!", + "transcription": "转录", + "transcriptionSaved": "转录已保存", + "troubleshooting": "故障排除", + "tryAdjustingSearch": "尝试调整您的搜索或", + "unsupportedBrowser": "不支持的浏览器", + "untitled": "无标题录音", + "updateSpeakerNames": "更新发言人名称", + "uploadComplete": "上传完成", + "uploadFailed": "上传失败", + "uploadFiles": "上传文件", + "uploadRecordingNotes": "上传录音和笔记", + "uploading": "上传中", + "viewDetails": "查看详情", + "waitingToUpload": "等待上传", + "whatWillHappen": "会发生什么?", + "whyNotWorking": "为什么不工作?", + "youHaveXSpeakers": "您有 {{count}} 位发言人,但只有16种独特的颜色可用。颜色将在第16位发言人之后重复。" + }, + "incognito": { + "audioNotStored": "Audio not stored in incognito mode", + "discardConfirm": "This will permanently discard your incognito recording. Continue?", + "mode": "Incognito Mode", + "notSavedToAccount": "Not saved to account", + "oneFileAtATime": "Incognito mode supports one file at a time", + "processInIncognito": "Process in Incognito", + "processWithoutSaving": "Process without saving", + "processing": "Processing...", + "processingComplete": "Processing complete!", + "processingInProgress": "Processing in incognito mode...", + "recordingDiscarded": "Incognito recording discarded", + "recordingProcessed": "Incognito recording processed - data will be lost when tab closes", + "recordingReady": "Incognito recording ready!", + "recordingTitle": "Incognito Recording", + "selectExactlyOneFile": "Select exactly 1 file", + "sessionOnly": "Session only", + "uploadingFile": "Uploading file for incognito processing..." + }, + "inquire": { + "activeFilters": "活动筛选器:", + "askQuestions": "询问您的转录内容", + "clearAll": "清除全部", + "dateRange": "日期范围", + "dateRangeActive": "日期范围已激活", + "exampleQuestion1": "\"讨论了哪些行动项目?\"", + "exampleQuestion2": "\"我们什么时候决定更改时间表?\"", + "exampleQuestion3": "\"对预算提出了什么担忧?\"", + "exampleQuestion4": "\"谁负责营销任务?\"", + "exampleQuestions": "示例问题:", + "filters": "筛选器", + "filtersActive": "筛选器已激活", + "from": "开始日期", + "noSpeakerData": "无发言人数据", + "placeholder": "询问关于您筛选的转录内容...", + "selectFilters": "在左侧选择筛选器以缩小转录范围,然后提问以从录音中获得见解。", + "sendHint": "按Enter发送 • Ctrl+Enter换行", + "speakerRequirement": "发言人识别需要包含多个发言人的录音", + "speakers": "发言人", + "speakersCount": "个发言人", + "tags": "标签", + "tagsCount": "个标签", + "title": "查询", + "to": "结束日期" + }, + "languages": { + "ar": "阿拉伯语", + "de": "德语", + "en": "英语", + "es": "西班牙语", + "fr": "法语", + "hi": "印地语", + "it": "意大利语", + "ja": "日语", + "ko": "韩语", + "nl": "荷兰语", + "pt": "葡萄牙语", + "ru": "俄语", + "zh": "中文" + }, + "manageSpeakersModal": { + "created": "创建时间", + "description": "管理您保存的发言人。当您在录音中使用发言人名称时,这些会自动保存。", + "failedToLoad": "加载发言人失败", + "lastUsed": "最后使用", + "loadingSpeakers": "加载发言人中...", + "noSpeakersYet": "尚未保存发言人", + "speakersSaved": "已保存 {{count}} 位发言人", + "speakersWillAppear": "当您在录音中使用发言人名称时,发言人将显示在这里", + "times": "次", + "title": "管理发言人", + "used": "已使用" + }, + "messages": { + "colorSchemeApplied": "Color scheme applied", + "colorSchemeReset": "Color scheme reset to default", + "copiedSuccessfully": "Copied to clipboard!", + "copiedToClipboard": "已复制到剪贴板", + "copyFailed": "Failed to copy", + "copyNotSupported": "Copy failed. Your browser may not support this feature.", + "downloadStarted": "下载已开始", + "errorRecoveringRecording": "Error recovering recording", + "eventDownloadFailed": "Failed to download event", + "eventDownloadSuccess": "Event \"{{title}}\" downloaded. Open the file to add to your calendar.", + "eventsExportFailed": "Failed to export events", + "eventsExportSuccess": "Exported {{count}} events", + "failedToDeleteJob": "Failed to delete job", + "failedToRecoverRecording": "Failed to recover recording", + "failedToRetryJob": "Failed to retry job", + "failedToSave": "Failed to save: {{error}}", + "failedToSaveParticipants": "Failed to save participants", + "followPlayerDisabled": "Follow player mode disabled", + "followPlayerEnabled": "Follow player mode enabled", + "invalidEventData": "Invalid event data", + "jobQueuedForRetry": "Job queued for retry", + "noEventsToExport": "No events to export", + "noNotesAvailableDownload": "No notes available to download.", + "noNotesToCopy": "No notes available to copy.", + "noPermissionToEdit": "You do not have permission to edit this recording", + "noSummaryToCopy": "No summary available to copy.", + "noSummaryToDownload": "No summary available to download.", + "noTranscriptionToCopy": "No transcription available to copy.", + "noTranscriptionToDownload": "No transcription available to download.", + "notesCopied": "Notes copied to clipboard!", + "notesDownloadFailed": "Failed to download notes", + "notesDownloadSuccess": "Notes downloaded successfully!", + "notesUpdated": "笔记更新成功", + "passwordChanged": "密码更改成功", + "profileUpdated": "个人资料更新成功", + "recordingDeleted": "录音删除成功", + "recordingDiscarded": "Recording discarded", + "recordingRecovered": "Recording recovered successfully", + "recordingSaved": "录音保存成功", + "saveParticipantsFailed": "Save failed: {{error}}", + "settingsSaved": "设置保存成功", + "summaryCopied": "Summary copied to clipboard!", + "summaryDownloadFailed": "Failed to download summary", + "summaryDownloadSuccess": "Summary downloaded successfully!", + "summaryGenerated": "摘要生成成功", + "tagAdded": "标签添加成功", + "tagRemoved": "标签删除成功", + "transcriptDownloadFailed": "Failed to download transcript", + "transcriptDownloadSuccess": "Transcript downloaded successfully!", + "transcriptionCopied": "Transcription copied to clipboard!", + "transcriptionUpdated": "转录更新成功" + }, + "metadata": { + "cancelEdit": "取消", + "createdAt": "创建时间", + "duration": "时长", + "editMetadata": "编辑元数据", + "fileName": "文件名", + "fileSize": "文件大小", + "language": "语言", + "meetingDate": "会议日期", + "processingTime": "处理时间", + "saveMetadata": "保存", + "status": "状态", + "title": "元数据", + "updatedAt": "更新时间", + "wordCount": "字数" + }, + "modal": { + "addSpeaker": "添加新发言人", + "colorScheme": "配色方案", + "deleteRecording": "删除录音", + "editAsrTranscription": "编辑 ASR 转录", + "editParticipants": "编辑参与者", + "editRecording": "编辑录音", + "editSpeakers": "编辑发言人", + "editTags": "编辑录音标签", + "editTranscription": "编辑转录", + "identifySpeakers": "识别发言人", + "recordingNotice": "录音提示", + "reprocessSummary": "重新处理摘要", + "reprocessTranscription": "重新处理转录", + "resetStatus": "重置录音状态?", + "shareRecording": "分享录音", + "sharedTranscripts": "我的共享转录", + "systemAudioHelp": "系统音频帮助", + "uploadFiles": "上传文件", + "uploadNotice": "上传提示" + }, + "namingTemplates": { + "addPattern": "添加模式", + "availableTemplates": "可用模板", + "availableVars": "可用变量", + "cancel": "取消", + "createDefaults": "创建默认模板", + "createNew": "创建模板", + "customVarsHint": "定义正则表达式模式以从文件名中提取自定义变量。", + "delete": "删除", + "description": "定义如何从文件名和转录内容生成录音标题。", + "descriptionLabel": "描述", + "noDefault": "无默认(仅 AI 标题)", + "regexHint": "从文件名中提取数据。使用捕获组 () 指定匹配项。", + "regexPatterns": "正则表达式模式(可选)", + "result": "结果:", + "save": "保存", + "selectOrCreate": "选择要编辑的模板或创建新模板", + "tabTitle": "命名", + "template": "模板", + "templateName": "模板名称", + "test": "测试", + "testTemplate": "测试模板", + "title": "命名模板", + "userDefault": "默认模板", + "userDefaultHint": "当没有标签设置命名模板时应用。" + }, + "nav": { + "account": "账户", + "accountSettings": "账户设置", + "admin": "管理", + "adminDashboard": "管理面板", + "darkMode": "深色模式", + "groupManagement": "群组管理", + "home": "主页", + "language": "语言", + "lightMode": "浅色模式", + "newRecording": "新录音", + "recording": "录音", + "settings": "设置", + "signOut": "退出登录", + "teamManagement": "群组管理", + "upload": "上传", + "userProfile": "用户资料" + }, + "notes": { + "cancelEdit": "取消编辑", + "characterCount": "{{count}} 个字符", + "characterCountPlural": "{{count}} 个字符", + "editNotes": "编辑笔记", + "lastUpdated": "最后更新", + "placeholder": "在此添加您的笔记...", + "saveNotes": "保存笔记", + "title": "笔记" + }, + "pwa": { + "installApp": "安装应用", + "installed": "安装成功", + "installing": "安装中...", + "notificationPermissionDenied": "通知权限被拒绝", + "notificationsEnabled": "通知已启用", + "offline": "您处于离线状态", + "screenAwake": "录音时屏幕将保持唤醒", + "screenAwakeFailed": "无法保持屏幕唤醒", + "updateAvailable": "有可用更新" + }, + "recording": { + "acceptDisclaimer": "我接受", + "cancelRecording": "取消", + "discardRecovery": "丢弃", + "disclaimer": "录音免责声明", + "duration": "时长", + "micPlusSys": "Mic + Sys", + "microphone": "麦克风", + "microphoneAndSystem": "麦克风 + 系统", + "microphonePermissionDenied": "麦克风权限被拒绝", + "modeBoth": "麦克风 + 系统", + "modeMicrophone": "麦克风", + "modeSystem": "系统音频", + "notes": "笔记", + "notesPlaceholder": "添加关于此录音的笔记...", + "pauseRecording": "暂停", + "recordingFailed": "录音失败", + "recordingInProgress": "录音进行中...", + "recordingMode": "录音模式", + "recordingSize": "预计大小", + "recordingStopped": "录音已停止", + "recordingTime": "录音时长", + "recoveryDescription": "我们发现了上次会话中未完成的录音。是否要恢复?", + "recoveryFound": "检测到未保存的录音", + "recoveryTitle": "恢复录音", + "restoreRecording": "恢复", + "resumeRecording": "恢复", + "saveRecording": "保存录音", + "size": "大小", + "startRecording": "开始录音", + "startedAt": "开始时间", + "stopRecording": "停止录音", + "systemAudio": "系统音频", + "systemAudioNotSupported": "此浏览器不支持系统音频录制", + "title": "音频录制" + }, + "recordingView": { + "audioPlayer": "音频播放器", + "bubble": "气泡", + "chat": "聊天", + "copy": "复制", + "download": "下载", + "edit": "编辑", + "minutes": "分钟", + "notes": "笔记", + "participants": "参与者", + "save": "保存", + "share": "分享", + "simple": "简单", + "speakers": "发言人", + "summary": "摘要", + "transcription": "转录" + }, + "reprocessModal": { + "audioReTranscribedFromScratch": "音频将从头重新转录。这也将基于新转录重新生成标题和摘要。", + "audioReTranscribedWithAsr": "音频将使用 ASR 端点重新转录。这包括说话人分离,并将重新生成标题和摘要。", + "manualEditsOverwritten": "对转录、标题或摘要的任何手动编辑都将被覆盖。", + "manualEditsOverwrittenSummary": "对标题或摘要的任何手动编辑都将被覆盖。", + "newTitleAndSummary": "将基于现有转录生成新的标题和摘要。" + }, + "settings": { + "apiKeys": "API密钥", + "appearance": "外观", + "changePassword": "更改密码", + "dataExport": "数据导出", + "deleteAccount": "删除账户", + "integrations": "集成", + "language": "语言", + "notifications": "通知", + "preferences": "偏好设置", + "privacy": "隐私", + "profile": "个人资料", + "security": "安全", + "theme": "主题", + "title": "设置", + "twoFactorAuth": "双因素认证" + }, + "sharedTranscripts": { + "noSharedTranscripts": "您尚未分享任何转录。", + "shareNotes": "分享笔记", + "shareSummary": "分享摘要", + "sharedOn": "分享于" + }, + "sharedTranscriptsPage": { + "noSharedTranscripts": "您尚未分享任何转录。" + }, + "sharing": { + "canEdit": "可以编辑", + "canReshare": "可以转发", + "internalSharing": "内部分享", + "notSharedYet": "尚未分享", + "publicBadge": "公开", + "publicLink": "公开链接", + "publicLinks": "个公开链接", + "publicLinksGenerated": "个公开链接已生成", + "searchUsers": "搜索用户...", + "sharedBadge": "已分享", + "sharedBy": "分享者", + "sharedWith": "分享给", + "teamBadge": "团队", + "teamRecording": "团队录音", + "unknown": "未知", + "users": "位用户" + }, + "sidebar": { + "advancedSearch": "高级搜索", + "allRecordings": "所有录音", + "archived": "已归档", + "archivedRecordings": "已归档录音", + "clearSearch": "清除搜索", + "dateRange": "日期范围", + "filterByDate": "按日期筛选", + "filterByStatus": "按状态筛选", + "filterByTags": "按标签筛选", + "filters": "筛选器", + "highlighted": "已标记", + "inbox": "收件箱", + "inquireMode": "查询模式", + "lastMonth": "上月", + "lastWeek": "上周", + "loadMore": "加载更多", + "markAsRead": "标记为已读", + "moveToInbox": "移至收件箱", + "newRecording": "新录音", + "noRecordings": "没有录音", + "older": "更早", + "recordings": "录音", + "removeFromHighlighted": "取消标记", + "searchRecordings": "搜索录音", + "sharedWithMe": "分享给我", + "sortBy": "排序方式", + "sortByDate": "按日期排序", + "sortByDuration": "按时长排序", + "sortByMeetingDate": "会议日期", + "sortByName": "按名称排序", + "starred": "Starred", + "tags": "标签", + "thisMonth": "本月", + "thisWeek": "本周", + "today": "今天", + "totalRecordings": "{{count}} 个录音", + "totalRecordingsPlural": "{{count}} 个录音", + "upcoming": "即将到来", + "uploadFiles": "上传文件", + "yesterday": "昨天" + }, + "speakers": { + "filterBySpeaker": "按发言人筛选", + "noMatchingSpeakers": "没有匹配的发言人", + "searchSpeakers": "搜索..." + }, + "speakersManagement": { + "added": "添加时间", + "confidence": "置信度", + "confidenceHigh": "高", + "confidenceLow": "低", + "confidenceMedium": "中", + "created": "创建时间", + "description": "管理您保存的发言人。当您在录音中使用发言人姓名时,这些会自动保存。", + "failedToLoad": "加载发言人失败", + "failedToLoadSnippets": "加载片段失败", + "keepThisSpeaker": "保留此发言人(其他将合并到其中):", + "last": "上次", + "lastUsed": "上次使用", + "loadingSpeakers": "加载发言人...", + "match": "匹配", + "mergeDescription": "将多个发言人档案合并为一个。所有嵌入、片段和使用数据将被合并。", + "mergeFailed": "合并发言人失败", + "mergeNSpeakers": "合并 {{count}} 个发言人", + "mergeSpeakers": "合并发言人", + "mergeSuccess": "发言人合并成功", + "noSnippetsAvailable": "无可用片段", + "noSpeakersYet": "尚未保存发言人", + "sample": "个样本", + "samples": "个样本", + "selectToMerge": "选择2个以上进行合并", + "speakersToMerge": "要合并的发言人:", + "speakersWillAppear": "当您在录音中使用发言人姓名时,发言人将出现在这里", + "targetWillReceive": "选定的发言人将接收所有其他人的声音数据和片段。", + "time": "次", + "times": "次", + "totalSpeakers": "个已保存发言人", + "used": "已使用", + "usedTimes": "已使用", + "viewSnippets": "查看片段", + "voiceMatchSuggestions": "声音匹配建议", + "voiceProfile": "声音档案" + }, + "status": { + "completed": "已完成", + "failed": "失败", + "processing": "处理中", + "queued": "排队中", + "stuck": "重置卡住的处理", + "summarizing": "生成摘要中", + "transcribing": "转录中", + "uploading": "上传中" + }, + "summary": { + "actionItems": "行动事项", + "cancelEdit": "取消编辑", + "decisions": "决定", + "editSummary": "编辑摘要", + "generateSummary": "生成摘要", + "keyPoints": "关键要点", + "noSummary": "无可用摘要", + "participants": "参与者", + "regenerateSummary": "重新生成摘要", + "saveSummary": "保存摘要", + "summaryFailed": "摘要生成失败", + "summaryInProgress": "摘要生成中...", + "title": "摘要" + }, + "tagManagement": { + "asrDefaults": "ASR 默认值", + "createTag": "创建标签", + "customPrompt": "自定义提示", + "description": "使用自定义标签组织您的录音。每个标签可以有自己的摘要提示和默认 ASR 设置。", + "maxSpeakers": "最大", + "minSpeakers": "最小", + "noTags": "您尚未创建任何标签。" + }, + "tags": { + "addTag": "添加标签", + "clearTagFilter": "清除筛选", + "createTag": "创建标签", + "currentTags": "当前标签", + "filterByTag": "按标签筛选", + "manageAllTags": "管理所有标签", + "noAvailableTags": "没有可用标签", + "noMatchingTags": "没有匹配的标签", + "noTags": "无标签", + "removeTag": "删除标签", + "searchTags": "搜索...", + "tagColor": "标签颜色", + "tagName": "标签名称", + "title": "标签" + }, + "tagsModal": { + "addTags": "添加标签", + "currentTags": "当前标签", + "done": "完成", + "noTagsAssigned": "此录音未分配标签", + "searchTags": "搜索标签..." + }, + "time": { + "dayAgo": "1 天前", + "daysAgo": "{{count}} 天前", + "hourAgo": "1 小时前", + "hoursAgo": "{{count}} 小时前", + "justNow": "刚刚", + "minuteAgo": "1 分钟前", + "minutesAgo": "{{count}} 分钟前", + "monthAgo": "1 个月前", + "monthsAgo": "{{count}} 个月前", + "weekAgo": "1 周前", + "weeksAgo": "{{count}} 周前", + "yearAgo": "1 年前", + "yearsAgo": "{{count}} 年前" + }, + "tooltips": { + "changeSpeaker": "更改发言人", + "clearChat": "清空聊天", + "copyTranscript": "复制转录", + "deleteTeam": "删除群组", + "doubleClickToEdit": "双击编辑", + "downloadTranscriptWithTemplate": "使用模板下载转录", + "editTeam": "编辑群组", + "editText": "编辑文本", + "editTitle": "编辑标题", + "editTranscript": "编辑转录", + "exitFullscreen": "Exit fullscreen", + "expand": "展开", + "followPlayerDisabled": "启用自动滚动 - 文字记录跟随音频播放", + "followPlayerEnabled": "禁用自动滚动 - 文字记录保持位置", + "fullscreenVideo": "Fullscreen video", + "grantPublicSharing": "授予公开分享权限", + "hideVideo": "Hide video", + "highlight": "高亮", + "makeAdmin": "设为管理员", + "manageMembers": "管理成员", + "manageTeamTags": "管理群组标签", + "markAsRead": "标记为已读", + "maximizeChat": "最大化聊天", + "minimize": "最小化", + "moveToInbox": "移至收件箱", + "mute": "静音", + "pause": "暂停", + "play": "播放", + "playbackSpeed": "播放速度", + "removeAdmin": "移除管理员", + "removeFromQueue": "从队列中移除", + "removeFromTeam": "从团队中移除", + "removeHighlight": "移除高亮", + "reprocessTranscription": "重新处理转录", + "reprocessWithAsr": "使用ASR重新处理", + "restoreChat": "恢复聊天", + "revokePublicSharing": "撤销公开分享权限", + "shareWithUsers": "与用户分享", + "showVideo": "Show video", + "switchToDarkMode": "切换到深色模式", + "switchToLightMode": "切换到浅色模式", + "unmute": "取消静音" + }, + "transcriptTemplates": { + "availableTemplates": "可用模板", + "availableVars": "可用变量", + "cancel": "取消", + "chooseTemplate": "选择模板...", + "createDefaults": "创建默认模板", + "createNew": "创建模板", + "default": "默认", + "delete": "删除", + "description": "自定义转录的下载和导出格式。", + "downloadDefault": "下载默认", + "downloadWithoutTemplate": "不使用模板下载", + "filters": "过滤器:|upper 转大写,|srt 字幕格式", + "save": "保存", + "selectOrCreate": "选择要编辑的模板或创建新模板", + "selectTemplate": "选择模板", + "setDefault": "设为默认模板", + "tabTitle": "转录", + "template": "模板", + "templateName": "模板名称", + "title": "转录模板", + "viewGuide": "查看模板指南" + }, + "transcription": { + "autoIdentifySpeakers": "自动识别发言人", + "bubble": "气泡", + "cancelEdit": "取消编辑", + "copy": "复制", + "copyToClipboard": "复制到剪贴板", + "download": "下载", + "downloadTranscript": "下载转录文本", + "edit": "编辑", + "editSpeakers": "编辑发言人", + "editTranscription": "编辑转录", + "highlightSearchResults": "高亮搜索结果", + "noTranscription": "无可用转录", + "regenerateTranscription": "重新生成转录", + "saveTranscription": "保存转录", + "searchInTranscript": "在转录中搜索...", + "simple": "简单", + "speaker": "发言人 {{number}}", + "speakerLabels": "发言人标签", + "title": "转录", + "unknownSpeaker": "未知发言人" + }, + "upload": { + "chunking": "大文件将自动分块处理", + "completed": "已完成", + "copies": "份此文件的副本", + "dropzone": "拖拽音频文件到此处,或点击浏览", + "duplicateDetected": "此文件似乎与 \"{{existingName}}\" 重复(上传于 {{existingDate}})", + "duplicateFile": "重复文件", + "failed": "失败", + "fileExceedsMaxSize": "File \"{{name}}\" exceeds the maximum size of {{size}} MB and was skipped.", + "fileRemovedFromQueue": "File removed from queue", + "filesToUpload": "Files to Upload", + "invalidFileType": "Invalid file type \"{{name}}\". Only audio files and video containers with audio (MP3, WAV, MP4, MOV, AVI, etc.) are accepted. File skipped.", + "maxFileSize": "最大文件大小", + "queued": "排队中", + "selectFiles": "选择文件", + "settingsApplyToAll": "Settings apply to all files in this session", + "summarizing": "生成摘要中...", + "supportedFormats": "支持 MP3, WAV, M4A, MP4, MOV, AVI, AMR 等格式", + "title": "上传音频", + "transcribing": "转录中...", + "untitled": "无标题录音", + "uploadNFiles": "Upload {{count}} File(s)", + "uploadProgress": "上传进度", + "videoRetained": "视频已保留供播放", + "willAutoSummarize": "转录后将自动生成摘要" + }, + "uploadProgress": { + "title": "上传进度" + } +} \ No newline at end of file diff --git a/static/manifest.json b/static/manifest.json new file mode 100644 index 0000000..ba9c764 --- /dev/null +++ b/static/manifest.json @@ -0,0 +1,122 @@ +{ + "id": "ca.innova-ai.dictia", + "name": "DictIA", + "short_name": "DictIA", + "description": "DictIA - Transcription audio par IA", + "start_url": "/", + "scope": "/", + "display": "standalone", + "display_override": ["window-controls-overlay", "standalone"], + "background_color": "#000000", + "theme_color": "#000000", + "orientation": "any", + "prefer_related_applications": false, + "categories": ["productivity", "utilities", "business"], + "lang": "en", + "dir": "ltr", + "icons": [ + { + "src": "/static/img/icon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/static/img/icon-maskable-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "/static/img/icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/static/img/icon-180x180.png", + "sizes": "180x180", + "type": "image/png", + "purpose": "any" + } + ], + "screenshots": [ + { + "src": "/static/img/screenshots/main-view.png", + "sizes": "1920x1080", + "type": "image/png", + "form_factor": "wide", + "label": "Main recording gallery view" + }, + { + "src": "/static/img/screenshots/recording-interface.png", + "sizes": "1920x1080", + "type": "image/png", + "form_factor": "wide", + "label": "Live recording interface with notes" + }, + { + "src": "/static/img/screenshots/transcript-view.png", + "sizes": "1920x1080", + "type": "image/png", + "form_factor": "wide", + "label": "Transcript view with speaker identification" + }, + { + "src": "/static/img/screenshots/mobile-view.png", + "sizes": "390x844", + "type": "image/png", + "form_factor": "narrow", + "label": "Mobile recording view" + } + ], + "shortcuts": [ + { + "name": "New Recording", + "short_name": "New", + "description": "Upload or record new audio", + "url": "/#upload", + "icons": [{ "src": "/static/img/icon-192x192.png", "sizes": "192x192" }] + }, + { + "name": "View Gallery", + "short_name": "Gallery", + "description": "Access your recordings gallery", + "url": "/#gallery", + "icons": [{ "src": "/static/img/icon-192x192.png", "sizes": "192x192" }] + } + ], + "share_target": { + "action": "/#upload", + "method": "POST", + "enctype": "multipart/form-data", + "params": { + "title": "title", + "text": "text", + "url": "url", + "files": [ + { + "name": "shared_audio", + "accept": ["audio/*"] + } + ] + } + }, + "edge_side_panel": { + "preferred_width": 480 + }, + "file_handlers": [ + { + "action": "/", + "accept": { + "audio/*": [".mp3", ".wav", ".m4a", ".ogg", ".webm", ".flac", ".aac", ".wma", ".opus"] + } + } + ], + "protocol_handlers": [ + { + "protocol": "web+dictia", + "url": "/?audio=%s" + } + ] +} diff --git a/static/offline.html b/static/offline.html new file mode 100644 index 0000000..59ca87f --- /dev/null +++ b/static/offline.html @@ -0,0 +1,64 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Offline - DictIA + + + + +
    + DictIA +

    You're Offline

    +

    It looks like you're not connected to the internet. Please check your connection and try again.

    +

    Some content may be unavailable until you're back online.

    +
    + + diff --git a/static/robots.txt b/static/robots.txt new file mode 100644 index 0000000..e19eb7a --- /dev/null +++ b/static/robots.txt @@ -0,0 +1,65 @@ +# DictIA - Block all web crawlers and search engines +# This application contains private user data and should not be indexed + +User-agent: * +Disallow: / + +# Specific directives for major search engines +User-agent: Googlebot +Disallow: / + +User-agent: Googlebot-Image +Disallow: / + +User-agent: Bingbot +Disallow: / + +User-agent: Slurp +Disallow: / + +User-agent: DuckDuckBot +Disallow: / + +User-agent: Baiduspider +Disallow: / + +User-agent: YandexBot +Disallow: / + +User-agent: ia_archiver +Disallow: / + +# AI Crawlers +User-agent: GPTBot +Disallow: / + +User-agent: ChatGPT-User +Disallow: / + +User-agent: CCBot +Disallow: / + +User-agent: anthropic-ai +Disallow: / + +User-agent: Claude-Web +Disallow: / + +User-agent: cohere-ai +Disallow: / + +# Social Media Crawlers +User-agent: facebookexternalhit +Disallow: / + +User-agent: Twitterbot +Disallow: / + +User-agent: LinkedInBot +Disallow: / + +User-agent: Slackbot +Disallow: / + +User-agent: Discordbot +Disallow: / diff --git a/static/sw.js b/static/sw.js new file mode 100644 index 0000000..644e8b2 --- /dev/null +++ b/static/sw.js @@ -0,0 +1,541 @@ +const CACHE_NAME = 'DictIA-cache-v4'; +const ASSETS_TO_CACHE = [ + '/', + '/static/offline.html', + '/static/manifest.json', + '/static/css/styles.css', + '/static/js/app.modular.js', + '/static/js/i18n.js', + '/static/js/csrf-refresh.js', + '/static/img/icon-192x192.png', + '/static/img/icon-512x512.png', + '/static/img/favicon.ico', + // Local vendor assets (no external CDN dependencies) + '/static/vendor/js/tailwind.min.js', + '/static/vendor/js/vue.global.js', + '/static/vendor/js/marked.min.js', + '/static/vendor/js/easymde.min.js', + '/static/vendor/css/fontawesome.min.css', + '/static/vendor/css/easymde.min.css' +]; + +// Function to update shortcuts (structure from your example) +// The actual `lists` data would need to be sent from your client-side app.js +const updateShortcuts = async (lists) => { + if (!self.registration || !('shortcuts' in self.registration)) { + console.log('Shortcuts API not supported or registration not available.'); + return; + } + + try { + let shortcuts = [ + { + name: "New Recording", + short_name: "New", + description: "Upload or record new audio", + url: "/#upload", // Or your direct upload page route + icons: [{ src: "/static/img/icon-192x192.png", sizes: "192x192" }] + }, + { + name: "View Gallery", + short_name: "Gallery", + description: "Access your recordings gallery", + url: "/#gallery", // Or your direct gallery page route + icons: [{ src: "/static/img/icon-192x192.png", sizes: "192x192" }] + } + ]; + + // Example: If you had dynamic lists to add as shortcuts + if (Array.isArray(lists) && lists.length > 0) { + const dynamicShortcuts = lists.slice(0, 2).map(list => { // Max 2 dynamic, total 4 + if (list && list.id && list.title) { + return { + name: list.title, + short_name: list.title.length > 10 ? list.title.substring(0, 9) + '…' : list.title, + description: `View ${list.title}`, + url: `/list/${list.id}`, // Example dynamic URL + icons: [{ src: "/static/img/icon-192x192.png", sizes: "192x192" }] + }; + } + return null; + }).filter(Boolean); + shortcuts = [...shortcuts, ...dynamicShortcuts]; + } + + await self.registration.shortcuts.set(shortcuts); + console.log('PWA shortcuts updated successfully:', shortcuts); + } catch (error) { + console.error('Error updating PWA shortcuts:', error); + } +}; + + +// Cache first strategy: Respond from cache if available, otherwise fetch from network and cache. +const cacheFirst = async (request) => { + const responseFromCache = await caches.match(request); + if (responseFromCache) { + return responseFromCache; + } + try { + const responseFromNetwork = await fetch(request); + // Check if the response is valid before caching + if (responseFromNetwork && responseFromNetwork.ok) { + const cache = await caches.open(CACHE_NAME); + cache.put(request, responseFromNetwork.clone()); + } + return responseFromNetwork; + } catch (error) { + console.error('CacheFirst: Network request failed for:', request.url, error); + // For assets, returning a generic error or specific offline asset might be better than network error. + // However, if it's a critical asset not found, this indicates an issue. + return new Response('Network error trying to fetch asset.', { + status: 408, + headers: { 'Content-Type': 'text/plain' }, + }); + } +}; + +// Stale-while-revalidate strategy: Respond from cache immediately if available, +// then update the cache with a fresh response from the network. +const staleWhileRevalidate = async (request) => { + const cache = await caches.open(CACHE_NAME); + const cachedResponsePromise = cache.match(request); + const networkResponsePromise = fetch(request).then(networkResponse => { + if (networkResponse && networkResponse.ok) { + cache.put(request, networkResponse.clone()); + } + return networkResponse; + }).catch(error => { + console.error('StaleWhileRevalidate: Network request failed for:', request.url, error); + // If network fails, we still might have a cached response. + // If not, this error will propagate. + return new Response('API request failed and no cache available.', { + status: 503, // Service Unavailable + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ error: 'Service temporarily unavailable. Please try again later.' }) + }); + }); + + return (await cachedResponsePromise) || networkResponsePromise; +}; + +// Network first strategy: Try to fetch from network first. +// If network fails, fall back to cache. If cache also fails, serve offline page for navigation. +const networkFirst = async (request) => { + try { + const networkResponse = await fetch(request); + if (networkResponse && networkResponse.ok) { + const cache = await caches.open(CACHE_NAME); + cache.put(request, networkResponse.clone()); + } + return networkResponse; + } catch (error) { + console.warn('NetworkFirst: Network request failed for:', request.url, error); + const cachedResponse = await caches.match(request); + if (cachedResponse) { + return cachedResponse; + } + // For navigation requests, fall back to the offline page if both network and cache fail. + if (request.mode === 'navigate') { + const offlinePage = await caches.match('/static/offline.html'); + if (offlinePage) return offlinePage; + } + // For other types of requests, or if offline page isn't cached, re-throw or return error. + return new Response('Network error and no cache available.', { + status: 408, + headers: { 'Content-Type': 'text/plain' }, + }); + } +}; + +self.addEventListener('install', (event) => { + self.skipWaiting(); // Activate new service worker immediately + event.waitUntil( + caches.open(CACHE_NAME).then((cache) => { + console.log('Service Worker: Caching app shell'); + return cache.addAll(ASSETS_TO_CACHE.map(url => new Request(url, { cache: 'reload' }))) // Force reload from network for app shell + .catch(error => { + console.error('Failed to cache app shell during install:', error); + // You might want to log which specific asset failed + ASSETS_TO_CACHE.forEach(url => { + cache.add(new Request(url, { cache: 'reload' })).catch(err => console.warn(`Failed to cache: ${url}`, err)); + }); + }); + }) + ); +}); + +self.addEventListener('activate', (event) => { + event.waitUntil( + caches.keys().then((cacheNames) => { + return Promise.all( + cacheNames + .filter((name) => name !== CACHE_NAME) + .map((name) => { + console.log('Service Worker: Deleting old cache', name); + return caches.delete(name); + }) + ); + }).then(() => { + console.log('Service Worker: Activated and old caches cleared.'); + return self.clients.claim(); // Take control of all open clients + }) + ); +}); + +self.addEventListener('fetch', (event) => { + const request = event.request; + const url = new URL(request.url); + + // Skip non-GET requests from caching strategies (they should pass through) + if (request.method !== 'GET') { + // event.respondWith(fetch(request)); // Let non-GET requests pass through to the network + return; // Or simply return to let the browser handle it + } + + // Serve API calls from /api/ with stale-while-revalidate + // (excluding auth-related endpoints) + if (url.pathname.startsWith('/api/')) { + if (url.pathname.includes('/login') || url.pathname.includes('/logout') || url.pathname.includes('/auth')) { + // For auth, always go to network, don't cache + event.respondWith(fetch(request)); + return; + } + event.respondWith(staleWhileRevalidate(request)); + return; + } + + // Serve /audio/ requests with cache-first, then network. + // These are media files and can be large, so cache-first is good. + if (url.pathname.startsWith('/audio/')) { + event.respondWith(cacheFirst(request)); + return; + } + + // Handle navigation requests (HTML pages) with network-first, then cache, then offline page. + if (request.mode === 'navigate') { + event.respondWith(networkFirst(request)); + return; + } + + // For static assets listed in ASSETS_TO_CACHE, use cache-first. + // This ensures that if an asset path is directly requested, it's served from cache if possible. + // We need to match against the origin + pathname for ASSETS_TO_CACHE. + const requestPath = url.origin === self.origin ? url.pathname : request.url; + if (ASSETS_TO_CACHE.includes(requestPath)) { + event.respondWith(cacheFirst(request)); + return; + } + + // Default strategy for other GET requests: try cache, then network. + // This is a good general fallback for other static assets not explicitly listed + // or for assets from other origins if not handled by ASSETS_TO_CACHE. + event.respondWith( + caches.match(request).then((cachedResponse) => { + if (cachedResponse) { + return cachedResponse; + } + return fetch(request).then(networkResponse => { + // Optionally cache other successful GET responses here if desired + // if (networkResponse && networkResponse.ok) { + // const cache = await caches.open(CACHE_NAME); + // cache.put(request, networkResponse.clone()); + // } + return networkResponse; + }).catch(() => { + // If network fails for a non-navigation, non-API, non-explicitly-cached asset + // there isn't much we can do other than return an error or nothing. + // For simplicity, let the browser handle the error. + }); + }) + ); +}); + +// Listen for messages from the client (e.g., to update shortcuts) +self.addEventListener('message', (event) => { + if (event.data && event.data.type === 'UPDATE_SHORTCUTS') { + console.log('Service Worker: Received UPDATE_SHORTCUTS message:', event.data.lists); + // updateShortcuts(event.data.lists); // Call if you implement dynamic shortcuts based on client data + } + if (event.data && event.data.type === 'SKIP_WAITING') { + self.skipWaiting(); + } +}); + +// Background sync for failed uploads +self.addEventListener('sync', (event) => { + console.log('[Service Worker] Background sync triggered:', event.tag); + + if (event.tag === 'sync-uploads') { + event.waitUntil(syncFailedUploads()); + } +}); + +// IndexedDB helper for failed uploads +async function openFailedUploadsDB() { + return new Promise((resolve, reject) => { + const request = indexedDB.open('SpeakrFailedUploads', 1); + + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(request.result); + + request.onupgradeneeded = (event) => { + const db = event.target.result; + if (!db.objectStoreNames.contains('failedUploads')) { + const objectStore = db.createObjectStore('failedUploads', { keyPath: 'id', autoIncrement: true }); + objectStore.createIndex('timestamp', 'timestamp', { unique: false }); + objectStore.createIndex('clientId', 'clientId', { unique: false }); + } + }; + }); +} + +// Get all failed uploads from IndexedDB +async function getFailedUploads(db) { + return new Promise((resolve, reject) => { + const transaction = db.transaction(['failedUploads'], 'readonly'); + const objectStore = transaction.objectStore('failedUploads'); + const request = objectStore.getAll(); + + request.onsuccess = () => resolve(request.result); + request.onerror = () => reject(request.error); + }); +} + +// Delete a failed upload after successful retry +async function deleteFailedUpload(db, id) { + return new Promise((resolve, reject) => { + const transaction = db.transaction(['failedUploads'], 'readwrite'); + const objectStore = transaction.objectStore('failedUploads'); + const request = objectStore.delete(id); + + request.onsuccess = () => resolve(); + request.onerror = () => reject(request.error); + }); +} + +// Update retry count for a failed upload +async function updateRetryCount(db, id, retryCount, error) { + return new Promise(async (resolve, reject) => { + try { + const transaction = db.transaction(['failedUploads'], 'readwrite'); + const objectStore = transaction.objectStore('failedUploads'); + const getRequest = objectStore.get(id); + + getRequest.onsuccess = () => { + const upload = getRequest.result; + if (!upload) { + reject(new Error('Upload not found')); + return; + } + + upload.retryCount = retryCount; + upload.lastRetry = Date.now(); + if (error) { + upload.lastError = error; + } + + const putRequest = objectStore.put(upload); + putRequest.onsuccess = () => resolve(); + putRequest.onerror = () => reject(putRequest.error); + }; + + getRequest.onerror = () => reject(getRequest.error); + } catch (error) { + reject(error); + } + }); +} + +// Retry uploading a failed upload +async function retryUpload(upload) { + const formData = new FormData(); + + // Reconstruct File from ArrayBuffer + const file = new File([upload.fileData], upload.fileName, { type: upload.mimeType }); + formData.append('file', file); + + if (upload.notes) { + formData.append('notes', upload.notes); + } + + if (upload.tags && upload.tags.length > 0) { + upload.tags.forEach(tag => { + formData.append('tags[]', JSON.stringify(tag)); + }); + } + + if (upload.asrOptions) { + if (upload.asrOptions.language) { + formData.append('asr_language', upload.asrOptions.language); + } + if (upload.asrOptions.min_speakers) { + formData.append('asr_min_speakers', upload.asrOptions.min_speakers); + } + if (upload.asrOptions.max_speakers) { + formData.append('asr_max_speakers', upload.asrOptions.max_speakers); + } + } + + // Get CSRF token from cookies + const csrfToken = getCookie('csrf_access_token'); + const headers = csrfToken ? { 'X-CSRF-TOKEN': csrfToken } : {}; + + const response = await fetch('/upload', { + method: 'POST', + headers: headers, + body: formData, + credentials: 'same-origin' + }); + + if (!response.ok) { + throw new Error(`Upload failed: ${response.status} ${response.statusText}`); + } + + return response.json(); +} + +// Get cookie value +function getCookie(name) { + const value = `; ${self.cookies || ''}`; + const parts = value.split(`; ${name}=`); + if (parts.length === 2) return parts.pop().split(';').shift(); + return null; +} + +// Sync failed uploads from IndexedDB +async function syncFailedUploads() { + console.log('[Service Worker] Syncing failed uploads'); + + try { + const db = await openFailedUploadsDB(); + const failedUploads = await getFailedUploads(db); + + if (failedUploads.length === 0) { + console.log('[Service Worker] No failed uploads to retry'); + return Promise.resolve(); + } + + console.log(`[Service Worker] Found ${failedUploads.length} failed uploads to retry`); + + // Notify that sync started + await self.registration.showNotification('DictIA Upload Sync', { + body: `Retrying ${failedUploads.length} failed upload(s)...`, + icon: '/static/img/icon-192x192.png', + badge: '/static/img/icon-192x192.png', + tag: 'upload-sync', + requireInteraction: false + }); + + let successCount = 0; + let failCount = 0; + + for (const upload of failedUploads) { + try { + // Limit retries to 3 attempts + if (upload.retryCount >= 3) { + console.log(`[Service Worker] Upload ${upload.id} exceeded retry limit (${upload.retryCount})`); + failCount++; + continue; + } + + console.log(`[Service Worker] Retrying upload ${upload.id} (attempt ${upload.retryCount + 1})`); + + await retryUpload(upload); + + // Success - delete from IndexedDB + await deleteFailedUpload(db, upload.id); + successCount++; + + console.log(`[Service Worker] Successfully retried upload ${upload.id}`); + } catch (error) { + // Update retry count + await updateRetryCount(db, upload.id, upload.retryCount + 1, error.message); + failCount++; + + console.error(`[Service Worker] Failed to retry upload ${upload.id}:`, error); + } + } + + // Show final notification + await self.registration.showNotification('DictIA Upload Sync Complete', { + body: `${successCount} succeeded, ${failCount} failed`, + icon: '/static/img/icon-192x192.png', + badge: '/static/img/icon-192x192.png', + tag: 'upload-sync-complete', + requireInteraction: false + }); + + return Promise.resolve(); + } catch (error) { + console.error('[Service Worker] Failed to sync uploads:', error); + + await self.registration.showNotification('DictIA Upload Sync Failed', { + body: 'Could not sync failed uploads. Will retry later.', + icon: '/static/img/icon-192x192.png', + badge: '/static/img/icon-192x192.png', + tag: 'upload-sync-error', + requireInteraction: false + }); + + return Promise.reject(error); + } +} + +// Push notification handler +self.addEventListener('push', (event) => { + console.log('[Service Worker] Push notification received'); + + const options = { + icon: '/static/img/icon-192x192.png', + badge: '/static/img/icon-192x192.png', + vibrate: [200, 100, 200], + data: { + dateOfArrival: Date.now(), + primaryKey: 1 + } + }; + + if (event.data) { + const data = event.data.json(); + event.waitUntil( + self.registration.showNotification(data.title || 'DictIA Notification', { + body: data.body || 'You have a new notification', + ...options, + data: data + }) + ); + } else { + event.waitUntil( + self.registration.showNotification('DictIA Notification', { + body: 'You have a new notification', + ...options + }) + ); + } +}); + +// Notification click handler +self.addEventListener('notificationclick', (event) => { + console.log('[Service Worker] Notification clicked:', event.notification.tag); + event.notification.close(); + + // Handle different notification types + const urlToOpen = event.notification.data?.url || '/'; + + event.waitUntil( + clients.matchAll({ type: 'window', includeUncontrolled: true }) + .then((clientList) => { + // Check if there's already a window open + for (const client of clientList) { + if (client.url === urlToOpen && 'focus' in client) { + return client.focus(); + } + } + // If no window is open, open a new one + if (clients.openWindow) { + return clients.openWindow(urlToOpen); + } + }) + ); +}); diff --git a/templates/account.html b/templates/account.html new file mode 100644 index 0000000..300bfc1 --- /dev/null +++ b/templates/account.html @@ -0,0 +1,7207 @@ + + + + + + + + {{ title }} - DictIA + + + + + + + + + + {% include 'includes/loading_overlay.html' %} + + + + + +
    +
    +

    + + DictIA + DictIA + +

    +
    + +
    + + +
    +
    +
    + +
    +
    + + +
    +
    +

    Account Information

    + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + {% for category, message in messages %} +
    + {{ message }} +
    + {% endfor %} + {% endif %} + {% endwith %} + +
    + +
    +
    +
    + +

    Personal Information

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +

    Préférences Linguistiques

    +
    +
    + + +

    Choose the language for the application interface.

    +
    +
    + + +

    Sélectionner détection automatique pour laisser le service de transcription déterminer la langue.

    +
    +
    + + +

    Langue pour les titres, résumés et chat. Laisser vide pour le défaut (comportement par défaut de vos modèles choisis).

    +
    +
    +
    + + +
    +
    + + +
    +
    +

    Account Statistics

    +
    +
    +
    + {{ current_user.recordings|length }} + Total Recordings +
    + +
    + + {% set completed_count = current_user.recordings|selectattr('status', 'equalto', 'COMPLETED')|list|length %} + {{ completed_count }} + + Completed +
    + +
    + + {% set processing_count = current_user.recordings|selectattr('status', 'in', ['PENDING', 'PROCESSING', 'SUMMARIZING'])|list|length %} + {{ processing_count }} + + Processing +
    + +
    + + {% set failed_count = current_user.recordings|selectattr('status', 'equalto', 'FAILED')|list|length %} + {{ failed_count }} + + Failed +
    +
    +
    +
    + +
    +

    User Details

    +
    +
    + Username + {{ current_user.username }} +
    +
    + Email + {{ current_user.email }} +
    +
    +
    + + {% if sso_enabled %} +
    +

    Single Sign-On

    +
    +
    +
    + Provider + {{ sso_provider_name }} +
    + {% if sso_linked %} + Linked + {% else %} + Not linked + {% endif %} +
    + + {% if sso_linked %} +
    + Subject: {{ sso_subject }} +
    + {% if has_password %} +
    + + +
    + {% elif not password_login_disabled or current_user.is_admin %} +
    + To unlink SSO, you must first set a password. +
    + {% endif %} + {% else %} +
    + + +
    + {% endif %} +
    +
    + {% endif %} + +
    +

    Account Actions

    +
    + + Go to Recordings + + {% if not password_login_disabled or current_user.is_admin %} + + {% endif %} +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + {% include 'components/dictia/help-tab.html' %} + +
    +
    +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/admin.html b/templates/admin.html new file mode 100644 index 0000000..b03f9ce --- /dev/null +++ b/templates/admin.html @@ -0,0 +1,3689 @@ + + + + + + + + {% if is_group_admin_only %}Group Management{% else %}Admin Dashboard{% endif %} - DictIA + + + {% include 'includes/loading_overlay.html' %} + + + + + + + + + + + + + + + +
    +
    +

    + + DictIA + DictIA + +

    +
    + + +
    +
    + +
    +
    +

    + + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + {% for category, message in messages %} +
    + {{ message }} +
    + {% endfor %} + {% endif %} + {% endwith %} + + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + + +
    +
    +

    ${t('adminDashboard.userManagement')}

    + +
    + + +
    +
    + + +
    +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ${t('adminDashboard.id')}${t('adminDashboard.username')}${t('adminDashboard.email')}${t('adminDashboard.admin')}${t('adminDashboard.publicShare')}${t('adminDashboard.recordings')}${t('adminDashboard.storageUsed')}${t('adminDashboard.actions')}
    ${ user.id }${ user.username }${ user.email } + Yes + No + + + ${ user.recordings_count }${ formatFileSize(user.storage_used) } +
    + + + +
    +
    +
    + Loading users... +
    +
    + No users found. +
    +
    +
    +
    + + +
    +

    ${t('adminDashboard.systemStatistics')}

    + + +
    +
    +
    +
    + +
    +
    +

    ${t('adminDashboard.totalUsers')}

    +

    ${ stats.total_users }

    +
    +
    +
    + +
    +
    +
    + +
    +
    +

    ${t('adminDashboard.totalRecordings')}

    +

    ${ stats.total_recordings }

    +
    +
    +
    + +
    +
    +
    + +
    +
    +

    ${t('adminDashboard.totalStorage')}

    +

    ${ formatFileSize(stats.total_storage) }

    +
    +
    +
    + +
    +
    +
    + +
    +
    +

    ${t('adminDashboard.totalQueries')}

    +

    ${ stats.total_queries }

    +
    +
    +
    +
    + + +
    +
    +

    ${t('adminDashboard.recordingStatusDistribution')}

    +
    +
    + ${ stats.completed_recordings } + ${t('adminDashboard.completedRecordings')} +
    +
    + ${ stats.processing_recordings } + ${t('adminDashboard.processingRecordings')} +
    +
    + ${ stats.pending_recordings } + ${t('adminDashboard.pendingRecordings')} +
    +
    + ${ stats.failed_recordings } + ${t('adminDashboard.failedRecordings')} +
    +
    +
    + +
    +

    ${t('adminDashboard.topUsersByStorage')}

    +
    +
    +
    + + ${ user.username } +
    +
    + ${ formatFileSize(user.storage_used) } + (${ user.recordings_count} recordings) +
    +
    +
    + No data available +
    +
    +
    +
    + + +
    +

    + Token Usage Statistics +

    + + +
    + +
    +
    Usage Summary
    +
    +
    +
    +
    + +
    +
    +

    Today

    +

    ${ tokenStats.today?.tokens?.toLocaleString() || 0 }

    +
    +
    +
    +
    +
    +
    + +
    +
    +

    This Month

    +

    ${ tokenStats.current_month?.tokens?.toLocaleString() || 0 }

    +
    +
    +
    +
    +
    +
    + +
    +
    +

    Monthly Cost

    +

    $${ (tokenStats.current_month?.cost || 0).toFixed(4) }

    +
    +
    +
    +
    +
    +
    + +
    +
    +

    Warnings

    +

    + ${ tokenStats.users_at_100_percent } blocked + ${ tokenStats.users_over_80_percent } warning + None +

    +
    +
    +
    +
    +
    + + +
    +
    User Token Usage (This Month)
    +
    +
    +
    +
    + + ${ user.username } +
    +
    + ${ user.current_usage?.toLocaleString() || 0 } + / ${ user.monthly_budget?.toLocaleString() } + (unlimited) +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + No token usage data available +
    +
    +
    +
    + + +
    + +
    +
    Daily Token Usage (Last 30 Days)
    +
    + +
    +
    + + +
    +
    Monthly Token Usage (Last 12 Months)
    +
    + +
    +
    +
    +
    + + +
    +

    + ${t('adminDashboard.transcriptionUsage')} +

    + + +
    + +
    +
    Usage Summary
    +
    +
    +
    +
    + +
    +
    +

    ${t('adminDashboard.todaysMinutes')}

    +

    ${ transcriptionStats.today?.minutes || 0 }

    +
    +
    +
    +
    +
    +
    + +
    +
    +

    ${t('adminDashboard.thisMonth')}

    +

    ${ transcriptionStats.current_month?.minutes || 0 } min

    +
    +
    +
    +
    +
    +
    + +
    +
    +

    ${t('adminDashboard.monthlyCost')}

    +

    $${ (transcriptionStats.current_month?.cost || 0).toFixed(4) }

    +
    +
    +
    +
    +
    +
    + +
    +
    +

    ${t('adminDashboard.budgetWarnings')}

    +

    + ${ transcriptionStats.users_at_100_percent } ${t('adminDashboard.blocked')} + ${ transcriptionStats.users_over_80_percent } ${t('adminDashboard.warning')} + ${t('adminDashboard.none')} +

    +
    +
    +
    +
    +
    + + +
    +
    ${t('adminDashboard.userTranscriptionUsage')}
    +
    +
    +
    +
    + + ${ user.username } +
    +
    + ${ user.current_usage_minutes || 0 } min + / ${ user.monthly_budget_minutes } min + (unlimited) +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + ${t('adminDashboard.noTranscriptionData')} +
    +
    +
    +
    +
    +
    + + +
    +
    +

    ${t('adminDashboard.systemSettings')}

    + +
    + + +
    +
    +
    +
    +

    ${ setting.key }

    +

    ${ getSettingDescription(setting) }

    +
    + ${ setting.setting_type } + ${t('adminDashboard.lastUpdated')}: ${ formatDate(setting.updated_at) } +
    +
    +
    +
    +
    + + + Enabled + + + Disabled + + + + ${t('adminDashboard.noLimit')} + + + ${ Number(setting.value).toLocaleString() } ${t('adminDashboard.characters')} + + + ${ Number(setting.value).toLocaleString() } ${t('adminDashboard.megabytes')} + + + ${ Number(setting.value).toLocaleString() } ${t('adminDashboard.seconds')} + + ${ setting.value.substring(0, 80) }... + ${ setting.value || t('adminDashboard.notSet') } +
    +
    + +
    +
    +
    + +
    +
    + Loading settings... +
    +
    + No system settings found. +
    +
    +
    +
    + + +
    +
    +

    ${t('adminDashboard.defaultPrompts')}

    +
    + + ${t('adminDashboard.defaultPromptInfo')} +
    +
    + +
    +
    + +

    + ${t('adminDashboard.promptDescription')} +

    + +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + ${ promptSaveMessage } +
    +
    +
    + +
    +

    ${t('adminDashboard.promptHierarchy')}

    +

    + ${t('adminDashboard.promptPriorityDescription')} +

    +
      +
    1. ${t('adminDashboard.tagCustomPrompt')}: ${t('adminDashboard.tagCustomPromptDesc')}
    2. +
    3. Folder Custom Prompt: Applied when recording is in a folder with a custom prompt (if Folders feature enabled)
    4. +
    5. ${t('adminDashboard.userCustomPrompt')}: ${t('adminDashboard.userCustomPromptDesc')}
    6. +
    7. ${t('adminDashboard.adminDefaultPrompt')}: ${t('adminDashboard.adminDefaultPromptDesc')}
    8. +
    9. ${t('adminDashboard.systemFallback')}: ${t('adminDashboard.systemFallbackDesc')}
    10. +
    +
    + + +
    + + +
    +
    +
    +
    ${t('adminDashboard.systemPrompt')}:
    +
    +
    You are an AI assistant that generates comprehensive summaries for meeting transcripts. Respond only with the summary in Markdown format. Do NOT use markdown code blocks (```markdown). Provide raw markdown content directly.
    +
    +Context:
    +- Current date: {current_date}
    +- Tags applied to this transcript by the user: {tag_names} (if tags exist)
    +- Information about the user: Name: {name}, Job title: {job_title}, Company: {company} (if provided)
    +
    +Language Requirement: You MUST generate the entire summary in {user_output_language}. This is mandatory. (if language preference is set)
    +
    +
    + +
    +
    ${t('adminDashboard.userMessageTemplate')}:
    +
    +
    Transcription:
    +"""
    +{transcript_text}
    +"""
    +
    +Summarization Instructions:
    +/* This section is dynamically replaced with one of the following (in order of priority):
    +   1. Combined tag prompts (if tags with custom prompts are selected)
    +   2. User's personal summarization prompt (if set in account settings)
    +   3. Admin default prompt (shown below)
    +   4. System fallback prompt */
    +${ defaultSummaryPrompt || originalDefaultPrompt }
    +
    +{language_directive} (e.g., "Ensure your response is in {language}." if language is set)
    +
    +

    + + ${t('adminDashboard.placeholdersNote')} +

    +
    + +
    +
    ${t('adminDashboard.additionalContext')}:
    +
    +
      +
    • ${t('adminDashboard.contextNotes.transcriptLimit')}
    • +
    • ${t('adminDashboard.contextNotes.jsonConversion')}
    • +
    • ${t('adminDashboard.contextNotes.tagPrompts')}
    • +
    • ${t('adminDashboard.contextNotes.modelConfig')}
    • +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +

    ${t('adminDashboard.vectorStoreManagement')}

    + +
    + + +
    +

    + ${t('adminDashboard.aboutInquireMode')} +

    +

    + ${t('adminDashboard.inquireModeDescription')} +

    +
    +
    + ${t('adminDashboard.chunkSize')}: + 500 ${t('adminDashboard.characters')} +
    +
    + ${t('adminDashboard.overlap')}: + 50 ${t('adminDashboard.characters')} +
    +
    + ${t('adminDashboard.embeddingModel')}: + all-MiniLM-L6-v2 +
    +
    + ${t('adminDashboard.vectorDimensions')}: + 384 +
    +
    +
    + + +
    +
    +
    +
    +

    ${t('adminDashboard.totalRecordings')}

    +

    ${ inquireStatus.total_completed_recordings || 0 }

    +
    + +
    +
    + +
    +
    +
    +

    ${t('adminDashboard.processedForInquire')}

    +

    ${ inquireStatus.processed_for_inquire || 0 }

    +
    + +
    +
    + +
    +
    +
    +

    ${t('adminDashboard.needProcessing')}

    +

    + ${ inquireStatus.need_processing || 0 } +

    +
    + +
    +
    + +
    +
    +
    +

    ${t('adminDashboard.totalChunks')}

    +

    ${ inquireStatus.total_chunks || 0 }

    +
    + +
    +
    + +
    +
    +
    +

    ${t('adminDashboard.embeddingsStatus')}

    +

    + + ${ inquireStatus.embeddings_available ? t('adminDashboard.available') : t('adminDashboard.textSearchOnly') } +

    +
    + +
    +
    + +
    +
    +
    +

    ${t('adminDashboard.processingProgress')}

    +
    +
    +
    +
    +

    ${ getProcessingProgress() }% ${t('adminDashboard.complete')}

    +
    +
    + +
    +
    +
    + + +
    +

    + ${t('adminDashboard.processingActions')} +

    + +
    +

    + ${t('adminDashboard.recordingsNeedProcessing').replace('{{count}}', inquireStatus.need_processing)} +

    + +
    + + + +
    + +
    +

    ${ processingResult.message }

    +
    +

    Failed recordings:

    +
      +
    • + ID ${ fail.id }: ${ fail.title } - ${ fail.reason } +
    • +
    +
    +
    +
    + +
    + +

    ${t('adminDashboard.allRecordingsProcessed')}

    +

    ${t('adminDashboard.vectorStoreUpToDate')}

    +
    +
    +
    + + +
    +
    +

    Group Management

    + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + +
    ${t('adminDashboard.groupName')}${t('adminDashboard.description')}${t('adminDashboard.members')}${t('adminDashboard.created')}${t('adminDashboard.actions')}
    +
    ${ group.name }
    +
    +
    ${ group.description || t('adminDashboard.noDescription') }
    +
    +
    + + ${ group.member_count || 0 } ${t('adminDashboard.membersCount')} +
    +
    + ${ new Date(group.created_at).toLocaleDateString() } + + + + + +
    +
    +
    + +

    + +
    +
    +
    + + +
    +
    +

    + Journal d'audit +

    +
    + +
    +
    + + +
    +
    + +
    +

    Journal d'audit désactivé

    +

    Ajoutez ENABLE_AUDIT_LOG=true dans le fichier .env pour activer la traçabilité Loi 25.

    +
    +
    +
    + + +
    + + +
    + + +
    + + + +
    + + +
    + +

    Chargement des journaux...

    +
    + + +
    + + + + + + + + + + + + + + + + + + + + + +
    DateUtilisateurActionRessourceStatutIP
    ${ formatDate(log.timestamp) }${ log.username || 'Anonyme' } + + ${ auditActionLabel(log.action) } + + + ${ auditResourceLabel(log.resource_type) } + #${ log.resource_id } + + + ${ log.status } + + ${ log.ip_address || '-' }
    +
    + +

    Aucun log d'accès enregistré

    +
    +
    + + +
    + + + + + + + + + + + + + + + + + + + +
    DateUtilisateurActionIPDétails
    ${ formatDate(log.timestamp) }${ log.username || '-' } + + ${ auditActionLabel(log.action) } + + ${ log.ip_address || '-' }${ log.details ? JSON.stringify(log.details) : '-' }
    +
    + +

    Aucun log d'authentification enregistré

    +
    +
    + + +
    +

    + Page ${ auditPage } de ${ auditTotalPages } + (${ auditSubTab === 'access' ? auditAccessTotal : auditAuthTotal } entrées) +

    +
    + + +
    +
    +
    + +
    +
    + + + + +
    +
    +
    +

    ${t('adminDashboard.addNewUser')}

    + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + + +

    ${t('adminDashboard.tokenBudgetHelp')}

    +
    +
    + + +

    ${t('adminDashboard.transcriptionBudgetHelp')}

    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +

    ${t('adminDashboard.editUser')}

    + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + + +

    ${t('adminDashboard.tokenBudgetHelp')}

    +
    +
    + ${t('adminDashboard.currentUsage')}: ${ editingUser.current_token_usage?.toLocaleString() || 0 } ${t('adminDashboard.tokens')} + ${ editingUser.token_usage_percentage || 0 }% +
    +
    +
    +
    +
    +
    +
    + + +

    ${t('adminDashboard.transcriptionBudgetHelp')}

    +
    +
    + ${t('adminDashboard.currentUsageMinutes')}: ${ editingUser.current_transcription_usage_minutes || 0 } ${t('adminDashboard.minutes')} + ${ editingUser.transcription_usage_percentage || 0 }% +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +

    Confirm Delete

    + +
    +

    Are you sure you want to delete the user ${ userToDelete?.username }? This action cannot be undone.

    +
    + + +
    +
    +
    + + +
    +
    +
    +

    Edit System Setting

    + +
    + +
    +
    + +
    + ${ editingSetting.key } +
    +
    + +
    + +
    + ${ editingSetting.description || 'No description available' } +
    +
    + +
    + + + ${ editingSetting.setting_type } + +
    + +
    + +
    + + ${t('adminDashboard.noLimit')} + + + ${ Number(editingSetting.value).toLocaleString() } ${t('adminDashboard.characters')} + + + ${ Number(editingSetting.value).toLocaleString() } ${t('adminDashboard.megabytes')} + + + ${ Number(editingSetting.value).toLocaleString() } ${t('adminDashboard.seconds')} (${ Math.round(Number(editingSetting.value) / 60) } ${t('adminDashboard.minutes')}) + + ${ editingSetting.value || t('adminDashboard.notSet') } +
    +
    + +
    + + + +
    + + +
    + + +
    + +
    +
    + + +
    + + Recommended: 30000-50000 characters for most LLMs +
    + + +
    + + ${t('adminDashboard.maxFileSizeHelp')} +
    + + +
    +
    +
    + + ${t('adminDashboard.minutes')} +
    +
    + + ${t('adminDashboard.seconds')} +
    +
    +
    + ${t('adminDashboard.total')}: ${ (settingTimeoutMinutes * 60 + settingTimeoutSeconds).toLocaleString() } ${t('adminDashboard.seconds')} +
    + ${t('adminDashboard.timeoutRecommendation')} +
    + + + +
    + + + +
    + +
    + ${ settingError } +
    +
    + +
    + + +
    +
    +
    + + +
    +
    +
    +

    ${ editingTeam ? 'Edit Group' : 'Create Group' }

    + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + ${ teamError } +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +

    Manage Group: ${ currentTeam?.name }

    + +
    + + +
    +

    Add Member

    +
    +
    + +
    +
    + +
    + +
    +
    + + +
    +

    Current Members (${ teamMembers.length })

    +
    +
    +
    + +
    +
    ${ member.username }
    +
    ${ member.email }
    +
    +
    +
    + + +
    +
    +
    +
    + ${t('adminDashboard.noMembersYet')} +
    +
    + +
    + ${ teamMemberError } +
    + +
    + + +
    +
    +
    + + +
    +
    +
    +

    Sync Group Shares

    + +
    +

    + This will create shares for all recordings with group tags that have auto-sharing enabled. +

    +

    + + Only missing shares will be created - existing shares won't be duplicated. +

    +
    + + +
    +
    +
    + + +
    +
    +
    +

    + Sync Complete +

    + +
    +
    +
    + Shares created: + ${ syncResults.shares_created } +
    +
    + Recordings processed: + ${ syncResults.recordings_processed } +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    +

    Delete Group

    + +
    +

    Are you sure you want to delete the group ${ teamToDelete?.name }? This will remove all members from the group. This action cannot be undone.

    +
    + + +
    +
    +
    + + +
    +
    +
    +

    Manage Tags for ${ currentTeam?.name }

    + +
    + + +
    +
    +

    + ${ editingTeamTagId ? 'Edit Group Tag' : 'Create New Group Tag' } +

    + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    + + +

    + Recordings with this tag will use this prompt for AI summaries and chat. +

    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + + +

    + Les enregistrements avec cette étiquette seront supprimés après ce nombre de jours. Laisser vide pour la rétention globale (${ globalRetentionDays } jours). +

    +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +

    + Note : Si les deux sont activés, tous les membres du groupe auront accès. Si seulement « administrateurs du groupe » est activé, seuls les responsables du groupe y auront accès. +

    +
    +
    ${ teamTagError }
    + +
    +
    + + +
    +

    Group Tags

    +
    +
    +
    +
    + +
    +
    ${ tag.name }
    +
    + + ${ tag.retention_days } day retention + + + Global retention + + + Protected + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + Custom prompt configured +
    +
    + Language: ${ tag.default_language.toUpperCase() } +
    +
    + Speakers: + ${ tag.default_min_speakers }-${ tag.default_max_speakers }auto +
    +
    +
    +
    +
    + +

    No group tags created yet

    +
    +
    + +
    +
    +
    + + + + diff --git a/templates/auth/check_email.html b/templates/auth/check_email.html new file mode 100644 index 0000000..8962962 --- /dev/null +++ b/templates/auth/check_email.html @@ -0,0 +1,127 @@ + + + + + + + {{ title }} - DictIA + + + + + + {% include 'includes/loading_overlay.html' %} + + + + +
    +
    +

    + + DictIA + DictIA + +

    +
    + +
    +
    + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + {% for category, message in messages %} +
    + {{ message }} +
    + {% endfor %} + {% endif %} + {% endwith %} + +
    +
    +
    + +
    +
    + + {% if action == 'verification' %} +

    Check Your Email

    +

    We've sent a verification link to:

    +

    {{ email }}

    +

    + Click the link in the email to verify your account. The link will expire in 24 hours. +

    + {% elif action == 'verification_required' %} +

    Email Verification Required

    +

    Please verify your email address:

    +

    {{ email }}

    +

    + Check your inbox for a verification email. If you haven't received it, you can request a new one. +

    + {% elif action == 'password_reset' %} +

    Check Your Email

    +

    If an account exists with this email:

    +

    {{ email }}

    +

    + We've sent a password reset link. The link will expire in 1 hour. +

    + {% endif %} + + {% if show_resend and (action == 'verification' or action == 'verification_required') %} +
    +
    + + + +
    +
    + {% endif %} + + +
    +
    +
    + + +
    + + + + diff --git a/templates/auth/forgot_password.html b/templates/auth/forgot_password.html new file mode 100644 index 0000000..80941fb --- /dev/null +++ b/templates/auth/forgot_password.html @@ -0,0 +1,105 @@ + + + + + + + {{ title }} - DictIA + + + + + + {% include 'includes/loading_overlay.html' %} + + + + +
    +
    +

    + + DictIA + DictIA + +

    +
    + +
    +
    +

    Forgot Password

    +

    + Enter your email address and we'll send you a link to reset your password. +

    + + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + {% for category, message in messages %} +
    + {{ message }} +
    + {% endfor %} + {% endif %} + {% endwith %} + +
    + + +
    + + +
    + +
    + + +
    + Remember your password? + Back to Login +
    +
    +
    +
    +
    + + +
    + + + + diff --git a/templates/auth/reset_password.html b/templates/auth/reset_password.html new file mode 100644 index 0000000..c3dcdf7 --- /dev/null +++ b/templates/auth/reset_password.html @@ -0,0 +1,114 @@ + + + + + + + {{ title }} - DictIA + + + + + + {% include 'includes/loading_overlay.html' %} + + + + +
    +
    +

    + + DictIA + DictIA + +

    +
    + +
    +
    +

    Reset Password

    +

    + Enter your new password below. +

    + + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + {% for category, message in messages %} +
    + {{ message }} +
    + {% endfor %} + {% endif %} + {% endwith %} + +
    + + +
    + + +

    Password must be at least 8 characters long.

    +
    + +
    + + +
    + +
    + + + +
    +
    +
    +
    + + +
    + + + + diff --git a/templates/auth/verify_success.html b/templates/auth/verify_success.html new file mode 100644 index 0000000..86084b0 --- /dev/null +++ b/templates/auth/verify_success.html @@ -0,0 +1,85 @@ + + + + + + + {{ title }} - DictIA + + + + + + {% include 'includes/loading_overlay.html' %} + + + + +
    +
    +

    + + DictIA + DictIA + +

    +
    + +
    +
    +
    +
    +
    + +
    +
    + +

    Email Verified!

    +

    + Your email address has been successfully verified. You can now log in to your account. +

    + + + Continue to Login + +
    +
    +
    + + +
    + + + + diff --git a/templates/components/banner.html b/templates/components/banner.html new file mode 100644 index 0000000..25b6bca --- /dev/null +++ b/templates/components/banner.html @@ -0,0 +1,11 @@ + +
    + + + +
    diff --git a/templates/components/detail-view.html b/templates/components/detail-view.html new file mode 100644 index 0000000..cdd1cb1 --- /dev/null +++ b/templates/components/detail-view.html @@ -0,0 +1,57 @@ + +
    + +
    +
    +
    +
    + +
    +
    + Incognito + + • Session only • Not saved to account + +
    +
    + +
    +
    + + +
    + {% include 'components/detail/mobile-header.html' %} + {% include 'components/detail/audio-player.html' %} + {% include 'components/detail/tab-navigation.html' %} + + +
    + {% include 'components/detail/mobile-transcript-panel.html' %} + {% include 'components/detail/mobile-summary-panel.html' %} + {% include 'components/detail/mobile-notes-panel.html' %} + {% include 'components/detail/mobile-chat-panel.html' %} + {% include 'components/detail/mobile-events-panel.html' %} +
    +
    + + +
    + {% include 'components/detail/desktop-header.html' %} + + +
    + {% include 'components/detail/desktop-transcription-panel.html' %} + + +
    + + {% include 'components/detail/desktop-right-panel.html' %} +
    +
    +
    + +{% include 'components/detail/empty-state.html' %} diff --git a/templates/components/detail/audio-player.html b/templates/components/detail/audio-player.html new file mode 100644 index 0000000..27c1b76 --- /dev/null +++ b/templates/components/detail/audio-player.html @@ -0,0 +1,236 @@ + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + + + + + +
    + ${ currentSubtitle.speaker }: + ${ currentSubtitle.text } +
    + + +
    + + +
    +
    +
    +
    +
    +
    +
    +
    + + +
    + + + + +
    + + +
    + + +
    + ${ formatAudioTime(displayCurrentTime) } + / + ${ formatAudioTime(audioDuration) } +
    + +
    + + + + + + +
    +
    +
    +
    + + +
    + +
    + +
    + +
    +
    + +
    +
    + + +
    + + + + +
    + ${ formatAudioTime(displayCurrentTime) } + / + ${ formatAudioTime(audioDuration) } +
    + + +
    + + + +
    +
    + +
    +
    +
    +
    + + +
    + + +
    + + +
    +
    + ${ Math.round(playerVolume * 100) } + +
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    diff --git a/templates/components/detail/desktop-chat-section.html b/templates/components/detail/desktop-chat-section.html new file mode 100644 index 0000000..263ac14 --- /dev/null +++ b/templates/components/detail/desktop-chat-section.html @@ -0,0 +1,115 @@ + +
    + +
    + +
    + + + +
    +
    + + +
    + + + + +
    +
    + +

    +
    + +
    + + + +
    + +
    +
    ${message.thinking}
    +
    +
    + +
    +
    ${message.content}
    +
    + +
    + + ${ t('chat.thinking') } +
    +
    + + +
    +
    + + +
    +

    + + ${ t('chat.cannotChatTranscriptionFailed') } +

    +

    + ${ t('chat.availableAfterTranscription') } +

    +
    +
    +
    diff --git a/templates/components/detail/desktop-events-tab.html b/templates/components/detail/desktop-events-tab.html new file mode 100644 index 0000000..cfa7d27 --- /dev/null +++ b/templates/components/detail/desktop-events-tab.html @@ -0,0 +1,65 @@ + +
    +
    +
    +
    +
    +

    + + ${ event.title } +

    +

    + ${ event.description } +

    +
    +
    + + +
    +
    + +
    +
    + + + ${ formatEventDateTime(event.start_datetime) } + +
    +
    + + + ${ formatEventDateTime(event.end_datetime) } + +
    +
    + + + ${ event.location } + +
    +
    + +
    + + ${ event.attendees.join(', ') } +
    +
    +
    +
    + +
    + +

    +
    +
    +
    diff --git a/templates/components/detail/desktop-header.html b/templates/components/detail/desktop-header.html new file mode 100644 index 0000000..991669d --- /dev/null +++ b/templates/components/detail/desktop-header.html @@ -0,0 +1,220 @@ + +
    +
    +
    +
    +
    +

    + ${selectedRecording.title || 'Untitled Recording'} +

    + + + + + + + ${formatStatus(selectedRecording.status)} + +
    +
    + + +
    + + + + + +
    +
    + + +
    + +
    + + + + ${ getFolderName(selectedRecording.folder_id) } + + + + + + + + + + + + + + + + + + + + + + + + + ${tag.name} + +
    + + +
    + + + ${selectedRecording.participants || t('help.noParticipants')} + +
    + + +
    + + + ${selectedRecording.owner_username || t('sharing.unknown')} + +
    + + +
    + + + ${selectedRecording.meeting_date ? formatDisplayDate(selectedRecording.meeting_date) : 'No date set'} + +
    + + +
    + + + ${item.text} + +
    + + + +
    +
    +
    diff --git a/templates/components/detail/desktop-notes-tab.html b/templates/components/detail/desktop-notes-tab.html new file mode 100644 index 0000000..0aed304 --- /dev/null +++ b/templates/components/detail/desktop-notes-tab.html @@ -0,0 +1,57 @@ + +
    +
    +
    + + + +
    + +
    +
    +
    +
    + ${selectedRecording.notes} +
    +
    + ${ t('help.clickToAddNotes') } +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    diff --git a/templates/components/detail/desktop-right-panel.html b/templates/components/detail/desktop-right-panel.html new file mode 100644 index 0000000..6055f3b --- /dev/null +++ b/templates/components/detail/desktop-right-panel.html @@ -0,0 +1,272 @@ + +
    + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + + + + + +
    + ${ currentSubtitle.speaker }: + ${ currentSubtitle.text } +
    + + +
    + + +
    +
    +
    +
    +
    +
    +
    +
    + + +
    + + + + +
    + + +
    + + +
    + ${ formatAudioTime(displayCurrentTime) } + / + ${ formatAudioTime(audioDuration) } +
    + +
    + + + + + + +
    +
    +
    +
    + + +
    + +
    + +
    + +
    +
    + +
    +
    + + +
    + + + + +
    + ${ formatAudioTime(displayCurrentTime) } + / + ${ formatAudioTime(audioDuration) } +
    + + +
    + + + +
    +
    + +
    +
    +
    +
    + + +
    + + + + + + + + + + + + + + +
    +
    +
    +
    + + +
    + +
    + + + +
    + + +
    + {% include 'components/detail/desktop-summary-tab.html' %} + {% include 'components/detail/desktop-notes-tab.html' %} + {% include 'components/detail/desktop-events-tab.html' %} +
    +
    + + + {% include 'components/detail/desktop-chat-section.html' %} +
    diff --git a/templates/components/detail/desktop-summary-tab.html b/templates/components/detail/desktop-summary-tab.html new file mode 100644 index 0000000..a0684e7 --- /dev/null +++ b/templates/components/detail/desktop-summary-tab.html @@ -0,0 +1,71 @@ + +
    +
    + +

    +
    + +
    + +

    + +

    + + Cannot generate summary: transcription failed +

    + +
    + +
    +
    + + + +
    + +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    diff --git a/templates/components/detail/desktop-transcription-panel.html b/templates/components/detail/desktop-transcription-panel.html new file mode 100644 index 0000000..95dbdc2 --- /dev/null +++ b/templates/components/detail/desktop-transcription-panel.html @@ -0,0 +1,263 @@ + +
    + +
    +

    + + +

    +
    + + + + +
    + + +
    + + + + +
    + + +
    + + + +
    +
    + + +
    +
    + + +
    + +
    + + +
    + + +
    + +

    +
    + + +
    +
    +
    +
    + +
    +
    +

    + ${processedTranscription.error.title} +

    +

    + ${processedTranscription.error.message} +

    +
    + + ${processedTranscription.error.guidance} +
    +
    +
    + +
    + +
    + + Technical details + +
    ${processedTranscription.error.technical}
    +
    +
    +
    +
    + + +
    +
    +
    + + + (${processedTranscription.speakers.length}) +
    + +
    +
    +
    + ${speaker.name} +
    +
    +
    + + +
    + +
    +
    +
    +
    + ${segment.speaker} +
    +
    + ${segment.sentence} +
    +
    +
    +
    +
    +
    + ${segment.sentence} +
    +
    +
    + ${processedTranscription.content} +
    +
    +
    + + +
    + +
    +
    +
    +
    diff --git a/templates/components/detail/empty-state.html b/templates/components/detail/empty-state.html new file mode 100644 index 0000000..69565e0 --- /dev/null +++ b/templates/components/detail/empty-state.html @@ -0,0 +1,12 @@ + +
    +
    + +

    +

    + +
    +
    diff --git a/templates/components/detail/mobile-chat-panel.html b/templates/components/detail/mobile-chat-panel.html new file mode 100644 index 0000000..809fc37 --- /dev/null +++ b/templates/components/detail/mobile-chat-panel.html @@ -0,0 +1,59 @@ + +
    + + + +
    +
    + +

    +
    +
    + + + +
    + +
    +
    ${message.thinking}
    +
    +
    + +
    +
    ${message.content}
    +
    +
    + ${ t('chat.thinking') } +
    +
    +
    +
    + + +
    +

    + + ${ t('chat.cannotChatTranscriptionFailed') } +

    +
    +
    diff --git a/templates/components/detail/mobile-events-panel.html b/templates/components/detail/mobile-events-panel.html new file mode 100644 index 0000000..93e0cc4 --- /dev/null +++ b/templates/components/detail/mobile-events-panel.html @@ -0,0 +1,65 @@ + +
    +
    + +
    +
    +
    +
    +
    +
    +

    + + ${ event.title } +

    +

    + ${ event.description } +

    +
    +
    + + +
    +
    +
    +
    + + + ${ formatEventDateTime(event.start_datetime) } + + +
    +
    + + ${ event.location } +
    +
    + +
    + + ${ attendee } + +
    +
    +
    +
    +
    +
    +
    diff --git a/templates/components/detail/mobile-header.html b/templates/components/detail/mobile-header.html new file mode 100644 index 0000000..0a21c39 --- /dev/null +++ b/templates/components/detail/mobile-header.html @@ -0,0 +1,153 @@ + +
    +
    +
    +
    +
    +

    + ${selectedRecording.title || 'Untitled Recording'} +

    + + + + + + + ${formatStatus(selectedRecording.status)} + +
    +

    + ${selectedRecording.participants || t('help.noParticipants')} +

    + +
    + + + + ${ getFolderName(selectedRecording.folder_id) } + + + + Shared + + + ${selectedRecording.shared_with_count} + + + ${selectedRecording.public_share_count} + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + ${selectedRecording.meeting_date ? formatDisplayDate(selectedRecording.meeting_date) : 'No date set'} +
    +
    + + + ${selectedRecording.owner_username || t('sharing.unknown')} + +
    + +
    + + +
    + +
    + + + + + +
    +
    +
    diff --git a/templates/components/detail/mobile-notes-panel.html b/templates/components/detail/mobile-notes-panel.html new file mode 100644 index 0000000..5215246 --- /dev/null +++ b/templates/components/detail/mobile-notes-panel.html @@ -0,0 +1,26 @@ + +
    +
    + + + +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    + +

    +
    +
    +
    +
    +
    diff --git a/templates/components/detail/mobile-summary-panel.html b/templates/components/detail/mobile-summary-panel.html new file mode 100644 index 0000000..0a3f33e --- /dev/null +++ b/templates/components/detail/mobile-summary-panel.html @@ -0,0 +1,45 @@ + +
    +
    + + + +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    + +

    +
    +
    + +

    + +

    + + Cannot generate summary: transcription failed +

    + +
    +
    +
    +
    +
    diff --git a/templates/components/detail/mobile-transcript-panel.html b/templates/components/detail/mobile-transcript-panel.html new file mode 100644 index 0000000..4e7214c --- /dev/null +++ b/templates/components/detail/mobile-transcript-panel.html @@ -0,0 +1,130 @@ + +
    +
    + + +
    +
    + + +
    + + + +
    +
    +
    + +
    + + +
    + + +
    + +

    +
    + + +
    +
    +
    +
    + +
    +
    +

    + ${processedTranscription.error.title} +

    +

    + ${processedTranscription.error.message} +

    +
    + + ${processedTranscription.error.guidance} +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    +
    +
    ${segment.speaker}
    +
    ${segment.sentence}
    +
    +
    +
    +
    +
    ${segment.sentence}
    +
    +
    ${processedTranscription.content}
    +
    +
    +
    + +
    +
    +
    +
    diff --git a/templates/components/detail/tab-navigation.html b/templates/components/detail/tab-navigation.html new file mode 100644 index 0000000..5269281 --- /dev/null +++ b/templates/components/detail/tab-navigation.html @@ -0,0 +1,20 @@ + +
    + + + + + +
    diff --git a/templates/components/dictia/help-tab.html b/templates/components/dictia/help-tab.html new file mode 100644 index 0000000..1bf5f27 --- /dev/null +++ b/templates/components/dictia/help-tab.html @@ -0,0 +1,91 @@ + diff --git a/templates/components/header.html b/templates/components/header.html new file mode 100644 index 0000000..c4fd0cd --- /dev/null +++ b/templates/components/header.html @@ -0,0 +1,99 @@ + +
    + +
    + + + + +
    + DictIA +

    DictIA

    +
    +
    + + +
    + {% include 'components/token_budget_indicator.html' %} + + + {% if inquire_mode_enabled %} + + + + + {% endif %} + + + + + + + + + {% if current_user.is_authenticated %} +
    + + + +
    + + + + + + + + {% if current_user.is_admin %} + + + + + {% elif is_group_admin %} + + + + + {% endif %} +
    + + +
    + + + +
    +
    + {% endif %} +
    +
    diff --git a/templates/components/progress-popup.html b/templates/components/progress-popup.html new file mode 100644 index 0000000..f8a6879 --- /dev/null +++ b/templates/components/progress-popup.html @@ -0,0 +1,189 @@ + +
    +
    + +
    +
    +
    + + Processing Queue + + ${totalProcessingCount} + +
    +
    + + + +
    +
    + +
    + + ${activeProgressItems.filter(i => i.status === 'uploading').length} uploading, + + + ${activeProgressItems.filter(i => i.status === 'transcribing').length} transcribing, + + + ${activeProgressItems.filter(i => i.status === 'summarizing').length} summarizing, + + + ${activeProgressItems.filter(i => i.status === 'queued').length} queued + +
    +
    + + +
    + + + + +
    +
    + + Failed (${failedProgressItems.length}) +
    +
    +
    + + ${item.title} +
    + + +
    +
    + +
    + ${item.friendlyError.title} + ${item.friendlyError.guidance} +
    + + ${item.errorMessage} +
    +
    + + +
    +
    + + Completed (${completedProgressItems.length}) +
    +
    + + ${item.title} + + Done +
    +
    + + +
    + +

    No items in queue

    +
    +
    +
    +
    diff --git a/templates/components/recording-view.html b/templates/components/recording-view.html new file mode 100644 index 0000000..841604d --- /dev/null +++ b/templates/components/recording-view.html @@ -0,0 +1,403 @@ + +
    +
    + +
    +
    + +
    +
    +
    + +
    +

    +
    +
    +
    + +
    +

    +
    +
    + +
    +
    + +
    +

    ${recordingMode}

    +
    +
    +
    +
    + +
    +
    + +
    +
    ${formatTime(recordingTime)}
    +

    ${ isRecording ? 'Recording in progress...' : 'Recording finished' }

    + +
    +

    + Estimated size: ${formatFileSize(estimatedFileSize)} + + (${Math.round(actualBitrate / 1000)}kbps) + +

    + +
    +
    + + +
    +
    +
    + + +
    +
    + +
    +
    + Keep this app visible! + Recording pauses if minimized or screen locked. +
    +
    +
    +
    +
    +
    + + +
    + + + + + + +
    + + +
    +
    + +
    +
    + + + + + +
    +
    +
    +
    diff --git a/templates/components/sidebar.html b/templates/components/sidebar.html new file mode 100644 index 0000000..7ba3fe3 --- /dev/null +++ b/templates/components/sidebar.html @@ -0,0 +1,604 @@ + +
    +
    + + + + + + +
    + +
    + ${ selectedCount } +
    + + + + + + + + + + + +
    + + + + +
    +
    + + +
    +
    +
    +
    +

    + + Move to Folder +

    + +
    +

    + ${ selectedCount } recording(s) selected +

    +
    +
    + + + + +
    + + + + + +

    + No folders created. Create folders in your account settings. +

    +
    +
    + +
    +
    +
    diff --git a/templates/components/token_budget_indicator.html b/templates/components/token_budget_indicator.html new file mode 100644 index 0000000..edbebc2 --- /dev/null +++ b/templates/components/token_budget_indicator.html @@ -0,0 +1,17 @@ + + + diff --git a/templates/components/upload-view.html b/templates/components/upload-view.html new file mode 100644 index 0000000..660eaa0 --- /dev/null +++ b/templates/components/upload-view.html @@ -0,0 +1,404 @@ + +
    +
    + +
    +

    + + +

    +
    + +
    + +
    + +

    +

    +
    + + + +
    +
    +

    + + ${ t('upload.filesToUpload') } (${pendingQueueFiles.length}) +

    +
    +
    +
    +
    + + ${item.file.name} + (${formatFileSize(item.file.size)}) +
    + +
    +
    + + +
    + +
    + + +
    + + + + + + +

    + + ${ t('incognito.oneFileAtATime') } +

    +
    +
    + + +
    +
    + +
    +
    + + +
    +

    + + + + + +
    + + + + + +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    + + +
    +
    +
    + + ${ t('recording.systemAudioNotSupported') } + +
    +
    +
    + + +
    + +
    + + + +
    +

    + + ${ t('help.folderHasCustomPrompt') } +

    +

    + + ${ t('help.createFolders') } ${ t('help.toOrganizeRecordings') } +

    +
    + + +
    + + + +
    +
    +
    + + ${index + 1}. + + ${tag.group_name}: + ${tag.name} + + +
    +
    +

    + + ${ t('help.dragToReorder') } • ${ t('help.firstTagDefaultsApplied') } +

    +
    + + +
    + +
    +
    + + + +
    +
    + + +
    +
    + +
    +
    +
    +

    + + ${ t('help.noMatchingTags') } +

    +
    +
    + +
    +

    + + +

    +
    +
    +

    + + ${ t('help.allTagsSelected') } +

    +
    + +

    + + ${ t('help.selectedTagsCustomPrompts') } +

    +

    + + ${ t('help.firstTagAsrSettings') } ${selectedTags[0].name} +

    +
    + + +
    + + +
    + +
    + + +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + + +

    ${ t('form.hotwordsHelp') }

    +
    + + +
    + + +

    ${ t('form.initialPromptHelp') }

    +
    + +

    + + ${ t('upload.settingsApplyToAll') } +

    +
    +
    +
    +
    +
    diff --git a/templates/group-admin.html b/templates/group-admin.html new file mode 100644 index 0000000..34c4503 --- /dev/null +++ b/templates/group-admin.html @@ -0,0 +1,1617 @@ + + + + + + + + Group Management - DictIA + + + {% include 'includes/loading_overlay.html' %} + + + + + + + + + + + + + + +
    +
    +

    + + DictIA + DictIA + +

    +
    + +
    + + +
    +
    +
    + +
    +
    +

    Group Management

    + + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + {% for category, message in messages %} +
    + {{ message }} +
    + {% endfor %} + {% endif %} + {% endwith %} + + + +
    + +
    +
    +

    Group Management

    + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + +
    Group NameDescriptionMembersCreatedActions
    +
    ${ group.name }
    +
    +
    ${ group.description || 'No description' }
    +
    +
    + + ${ group.member_count || 0 } members +
    +
    + ${ new Date(group.created_at).toLocaleDateString() } + + + + + + +
    +
    +
    + +

    + +
    +
    +
    +
    +
    + + +
    +
    +
    +

    ${ editingTeam ? 'Edit Group' : 'Create Group' }

    + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + ${ teamError } +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +

    Manage Group: ${ currentTeam?.name }

    + +
    + + +
    +

    Add Member

    +
    +
    + +
    +
    + +
    + +
    +
    + + +
    +

    Current Members (${ teamMembers.length })

    +
    +
    +
    + +
    +
    ${ member.username }
    +
    ${ member.email }
    +
    +
    +
    + + +
    +
    +
    +
    + No members yet +
    +
    + +
    + ${ teamMemberError } +
    + +
    + + +
    +
    +
    + + +
    +
    +
    +

    Sync Group Shares

    + +
    +

    + This will create shares for all recordings with group tags that have auto-sharing enabled. +

    +

    + + Only missing shares will be created - existing shares won't be duplicated. +

    +
    + + +
    +
    +
    + + +
    +
    +
    +

    + Sync Complete +

    + +
    +
    +
    + Shares created: + ${ syncResults.shares_created } +
    +
    + Recordings processed: + ${ syncResults.recordings_processed } +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    +

    Delete Group

    + +
    +

    Are you sure you want to delete the group ${ teamToDelete?.name }? This will remove all members from the group. This action cannot be undone.

    +
    + + +
    +
    +
    + + +
    +
    +
    +

    Manage Tags for ${ currentTeam?.name }

    + +
    + + +
    +
    +

    + ${ editingTeamTagId ? 'Edit Group Tag' : 'Create New Group Tag' } +

    + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    + + +

    + Recordings with this tag will use this prompt for AI summaries and chat. +

    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + + +

    + Recordings with this tag will be deleted after this many days. Leave empty to use global retention (${ globalRetentionDays } days). +

    +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +

    + Note: If both are enabled, all group members will have access. If only "group admins" is enabled, only group leads will have access. +

    +
    +
    ${ teamTagError }
    + +
    +
    + + +
    +

    Group Tags

    +
    +
    +
    +
    + +
    +
    ${ tag.name }
    +
    + + ${ tag.retention_days } day retention + + + Global retention + + + Protected + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + Custom prompt configured +
    +
    + Language: ${ tag.default_language.toUpperCase() } +
    +
    + Speakers: + ${ tag.default_min_speakers }-${ tag.default_max_speakers }auto +
    +
    +
    +
    +
    + +

    No group tags created yet

    +
    +
    +
    +
    + + +
    +
    +
    +

    + + Manage Folders for ${ currentTeam?.name } +

    + +
    + + +
    +
    +

    + ${ editingTeamFolderId ? 'Edit Group Folder' : 'Create New Group Folder' } +

    + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    + + +

    + Recordings in this folder will use this prompt (unless overridden by a tag). +

    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + + +

    + Recordings in this folder will be deleted after this many days. Leave empty to use global retention (${ globalRetentionDays } days). +

    +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +

    + Note: If both are enabled, all group members will have access. If only "group admins" is enabled, only group leads will have access. +

    +
    +
    ${ teamFolderError }
    + +
    +
    + + +
    +

    Group Folders

    +
    +
    +
    +
    + +
    +
    ${ folder.name }
    +
    + + ${ folder.retention_days } day retention + + + Global retention + + + Protected + + + ${ folder.recording_count || 0 } recordings + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + Custom prompt configured +
    +
    + Language: ${ folder.default_language.toUpperCase() } +
    +
    + Speakers: + ${ folder.default_min_speakers }-${ folder.default_max_speakers }auto +
    +
    +
    +
    +
    + +

    No group folders created yet

    +
    +
    +
    +
    +
    + + + + diff --git a/templates/includes/loading_overlay.html b/templates/includes/loading_overlay.html new file mode 100644 index 0000000..bbdd5a0 --- /dev/null +++ b/templates/includes/loading_overlay.html @@ -0,0 +1,69 @@ + + + + \ No newline at end of file diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..6e24e81 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,171 @@ + + + + + + + + DictIA - Transcription Audio par IA + {% include 'includes/loading_overlay.html' %} + + + + + + + + + + + + + + + + + +
    +
    Loading...
    +
    +
    + + + {% include 'components/header.html' %} + +
    + +
    +
    + + + {% include 'components/sidebar.html' %} + + +
    + + {% include 'components/banner.html' %} + + {% include 'components/upload-view.html' %} + + + {% include 'components/recording-view.html' %} + + + {% include 'components/detail-view.html' %} +
    +
    + + + {% include 'components/progress-popup.html' %} + + + {% include 'modals/edit-modal.html' %} + {% include 'modals/delete-modal.html' %} + {% include 'modals/edit-tags-modal.html' %} + {% include 'modals/datetime-picker-modal.html' %} + {% include 'modals/shares-list-modal.html' %} + {% include 'modals/reset-modal.html' %} + {% include 'modals/reprocess-modal.html' %} + {% include 'modals/speaker-modal.html' %} + {% include 'modals/add-speaker-modal.html' %} + {% include 'modals/edit-text-modal.html' %} + {% include 'modals/text-editor-modal.html' %} + {% include 'modals/asr-editor-modal.html' %} + {% include 'modals/edit-speakers-modal.html' %} + {% include 'modals/edit-participants-modal.html' %} + {% include 'modals/color-scheme-modal.html' %} + {% include 'modals/system-audio-help-modal.html' %} + {% include 'modals/recording-disclaimer-modal.html' %} + {% include 'modals/upload-disclaimer-modal.html' %} + {% include 'modals/recording-recovery-modal.html' %} + {% include 'modals/unified-share-modal.html' %} + {% include 'modals/share-delete-modal.html' %} + {% include 'modals/duplicates-modal.html' %} + {% include 'modals/global-error.html' %} + {% include 'modals/toast-container.html' %} + + + {% include 'modals/bulk-delete-modal.html' %} + {% include 'modals/bulk-tag-modal.html' %} + {% include 'modals/bulk-reprocess-modal.html' %} + + + +
    + + + + + + + + + + + + + + + + diff --git a/templates/inquire.html b/templates/inquire.html new file mode 100644 index 0000000..0aa5abb --- /dev/null +++ b/templates/inquire.html @@ -0,0 +1,969 @@ + + + + + + + + Inquire Mode - DictIA + + + + + + + + + + + + + + + {% include 'includes/loading_overlay.html' %} + + + + + +
    + + +
    + + + + +
    + {% include 'components/token_budget_indicator.html' %} + + + + + + + + + {% if current_user.is_authenticated %} +
    + + + +
    + + + + + + + + + + + {% if current_user.is_admin or is_group_admin %} + + + + + {% endif %} +
    + + +
    + + + +
    +
    + {% endif %} +
    +
    + + +
    + +
    + + +
    + +
    +

    ${t('inquire.filters')}

    + +
    + +
    +
    +
    + + +
    + + +
    +

    + ${t('inquire.tags')} +

    + +
    + +
    +
    + +
    +
    + + +
    +

    + ${t('inquire.speakers')} +

    +
    + +
    + +
    +
    + +
    +
    + + +
    + +

    ${t('inquire.noSpeakerData')}

    +

    ${t('inquire.speakerRequirement')}

    +
    +
    + + +
    +

    + ${t('inquire.dateRange')} +

    +
    +
    + + +
    +
    + + +
    +
    +
    + + + + + +
    +

    + ${t('inquire.activeFilters')} +

    +
    +
    + ${inquireFilters.selectedTags.length} ${t('inquire.tagsCount')} +
    +
    + ${inquireFilters.selectedSpeakers.length} ${t('inquire.speakersCount')} +
    +
    + ${t('inquire.dateRangeActive')} +
    +
    +
    +
    +
    +
    + + +
    + +
    + +
    +
    + + + +
    +

    ${t('inquire.askQuestions')}

    +

    + ${t('inquire.selectFilters')} +

    +
    +

    ${t('inquire.exampleQuestions')}

    +
      +
    • ${t('inquire.exampleQuestion1')}
    • +
    • ${t('inquire.exampleQuestion2')}
    • +
    • ${t('inquire.exampleQuestion3')}
    • +
    • ${t('inquire.exampleQuestion4')}
    • +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + ${chatProcessingStatus} + Analyzing transcriptions... +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    + ${t('inquire.sendHint')} + + ${t('inquire.filtersActive')} + +
    +
    +
    +
    + + +
    + + +
    +
    +
    + + ${ globalError } +
    + +
    +
    + +
    +
    +
    +

    + + +

    +

    +
    + +
    +
    +

    + + +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    +

    + +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +

    ${share.recording_title}

    +

    ${ t('help.sharedOn') }: ${share.created_at}

    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + \ No newline at end of file diff --git a/templates/login.html b/templates/login.html new file mode 100644 index 0000000..a7084f7 --- /dev/null +++ b/templates/login.html @@ -0,0 +1,178 @@ + + + + + + + {{ title }} - DictIA + + + + + + + + + {% include 'includes/loading_overlay.html' %} + + + + +
    +
    +

    + + DictIA + DictIA + +

    +
    + +
    +
    +

    Connexion

    + + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + {% for category, message in messages %} +
    + {{ message }} +
    + {% endfor %} + {% endif %} + {% endwith %} + + {% if sso_enabled %} + + {% endif %} + + {% if password_login_disabled %} +
    + +
    + + {% else %} +
    + {{ form.hidden_tag() }} + +
    + {{ form.email.label(class="block text-sm font-medium text-[var(--text-secondary)] mb-1") }} + {% if form.email.errors %} + {{ form.email(class="mt-1 block w-full rounded-md border-[var(--border-danger)] shadow-sm focus:border-[var(--border-focus)] focus:ring-[var(--ring-focus)] focus:ring-opacity-50 bg-[var(--bg-input)] text-[var(--text-primary)]") }} +
    + {% for error in form.email.errors %} + {{ error }} + {% endfor %} +
    + {% else %} + {{ form.email(class="mt-1 block w-full rounded-md border-[var(--border-secondary)] shadow-sm focus:border-[var(--border-focus)] focus:ring-[var(--ring-focus)] focus:ring-opacity-50 bg-[var(--bg-input)] text-[var(--text-primary)]") }} + {% endif %} +
    + +
    + {{ form.password.label(class="block text-sm font-medium text-[var(--text-secondary)] mb-1") }} + {% if form.password.errors %} + {{ form.password(class="mt-1 block w-full rounded-md border-[var(--border-danger)] shadow-sm focus:border-[var(--border-focus)] focus:ring-[var(--ring-focus)] focus:ring-opacity-50 bg-[var(--bg-input)] text-[var(--text-primary)]") }} +
    + {% for error in form.password.errors %} + {{ error }} + {% endfor %} +
    + {% else %} + {{ form.password(class="mt-1 block w-full rounded-md border-[var(--border-secondary)] shadow-sm focus:border-[var(--border-focus)] focus:ring-[var(--ring-focus)] focus:ring-opacity-50 bg-[var(--bg-input)] text-[var(--text-primary)]") }} + {% endif %} +
    + +
    +
    + {{ form.remember(class="h-4 w-4 text-[var(--text-accent)] focus:ring-[var(--ring-focus)] border-[var(--border-secondary)] rounded") }} + {{ form.remember.label(class="ml-2 block text-sm text-[var(--text-secondary)]") }} +
    + Mot de passe oublié ? +
    + +
    + {{ form.submit(class="w-full py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-[var(--text-button)] bg-[var(--bg-button)] hover:bg-[var(--bg-button-hover)] focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-[var(--border-focus)]") }} + +
    + Pas encore de compte ? + S'inscrire +
    +
    +
    + {% endif %} +
    +
    + + +
    + + + + diff --git a/templates/modals/add-speaker-modal.html b/templates/modals/add-speaker-modal.html new file mode 100644 index 0000000..6a19611 --- /dev/null +++ b/templates/modals/add-speaker-modal.html @@ -0,0 +1,77 @@ + +
    +
    +
    +
    +

    + +
    +
    +
    + + +
    + +
    + + +
    + + + + +
    + +
    + + +
    +
    +
    +
    +
    ${ suggestion.name }
    +
    + Used ${ suggestion.use_count } time${ suggestion.use_count !== 1 ? 's' : '' } + + • Last: ${ new Date(suggestion.last_used).toLocaleDateString() } + +
    +
    + +
    +
    +
    +
    + + +
    + + +
    +
    +
    +
    diff --git a/templates/modals/asr-editor-modal.html b/templates/modals/asr-editor-modal.html new file mode 100644 index 0000000..97e6a3c --- /dev/null +++ b/templates/modals/asr-editor-modal.html @@ -0,0 +1,154 @@ + +
    +
    +
    +

    + +
    + + +
    + +
    + + +
    + +
    + + Audio not stored in incognito mode +
    + +
    + + + + +
    + ${ formatAudioTime(modalAudioCurrentTime) } + ${ formatAudioTime(modalAudioDuration) } +
    + +
    +
    +
    +
    + +
    + + +
    + + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    +
    + + +
    +
    ${speaker}
    +
    + +
    +
    +
    +
    + + + + + + +
    + + + +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    diff --git a/templates/modals/bulk-action-bar.html b/templates/modals/bulk-action-bar.html new file mode 100644 index 0000000..572433c --- /dev/null +++ b/templates/modals/bulk-action-bar.html @@ -0,0 +1,79 @@ + + +
    +
    + +
    + +
    + + ${ selectedCount } selected + +
    + + +
    +
    + + +
    + + + + + + + + + +
    +
    +
    + + +
    +
    + + Processing... +
    +
    +
    +
    diff --git a/templates/modals/bulk-delete-modal.html b/templates/modals/bulk-delete-modal.html new file mode 100644 index 0000000..e332652 --- /dev/null +++ b/templates/modals/bulk-delete-modal.html @@ -0,0 +1,48 @@ + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Delete ${ selectedCount } Recording${ selectedCount !== 1 ? 's' : '' }

    +

    This action cannot be undone

    +
    +
    + +
    + +
    +

    + You are about to permanently delete: +

    +
      +
    • + + ${ recording.title || 'Untitled' } +
    • +
    • + ...and ${ selectedRecordings.length - 5 } more +
    • +
    +
    + +
    + + +
    +
    +
    +
    diff --git a/templates/modals/bulk-reprocess-modal.html b/templates/modals/bulk-reprocess-modal.html new file mode 100644 index 0000000..66d01df --- /dev/null +++ b/templates/modals/bulk-reprocess-modal.html @@ -0,0 +1,89 @@ + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Bulk Reprocess

    +

    ${ selectedCount } recording${ selectedCount !== 1 ? 's' : '' } selected

    +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    +
    + + +
    +
    + +
    +

    Note

    +

    + This will overwrite any manual edits to titles and summaries. +

    +

    + This will overwrite all transcriptions, titles, and summaries. Manual edits will be lost. +

    +
    +
    +
    + + +
    + + + ${ selectedCount } recording${ selectedCount !== 1 ? 's' : '' } will be queued for summary regeneration. + + + ${ selectedCount } recording${ selectedCount !== 1 ? 's' : '' } will be queued for full reprocessing. + +
    +
    + +
    + + +
    +
    +
    diff --git a/templates/modals/bulk-tag-modal.html b/templates/modals/bulk-tag-modal.html new file mode 100644 index 0000000..028f0a6 --- /dev/null +++ b/templates/modals/bulk-tag-modal.html @@ -0,0 +1,101 @@ + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Bulk Tag Update

    +

    ${ selectedCount } recording${ selectedCount !== 1 ? 's' : '' } selected

    +
    +
    + +
    +
    + +
    + +
    + + +
    + + +
    + +
    + +

    + No tags available. Create tags in settings. +

    +
    +
    + + +
    + + + The selected tag will be added to all ${ selectedCount } recording${ selectedCount !== 1 ? 's' : '' }. + + + The selected tag will be removed from all ${ selectedCount } recording${ selectedCount !== 1 ? 's' : '' } that have it. + +
    +
    + +
    + + +
    +
    +
    diff --git a/templates/modals/color-scheme-modal.html b/templates/modals/color-scheme-modal.html new file mode 100644 index 0000000..82dded7 --- /dev/null +++ b/templates/modals/color-scheme-modal.html @@ -0,0 +1,51 @@ + +
    +
    +
    +
    +

    + + +

    + +
    +

    +
    + +
    +
    +

    + + +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    diff --git a/templates/modals/datetime-picker-modal.html b/templates/modals/datetime-picker-modal.html new file mode 100644 index 0000000..da79bbf --- /dev/null +++ b/templates/modals/datetime-picker-modal.html @@ -0,0 +1,132 @@ + +
    +
    + +
    +
    +

    + + Select Date & Time +

    + +
    +
    + + +
    + +
    + +
    + + +
    + +
    + + +
    +
    + ${day} +
    +
    + + +
    + +
    + + +
    + +
    + + : + + +
    +
    + + +
    + + + + + + + + + +
    + + +
    + + + +
    +
    + + +
    +
    + + ${formatPickerPreview()} + + No date selected +
    +
    + + +
    +
    +
    +
    diff --git a/templates/modals/delete-modal.html b/templates/modals/delete-modal.html new file mode 100644 index 0000000..679d1e7 --- /dev/null +++ b/templates/modals/delete-modal.html @@ -0,0 +1,32 @@ + +
    +
    +
    +
    +
    + +
    +

    +

    +
    +
    + +
    +

    + Are you sure you want to delete "${recordingToDelete?.title || 'this recording'}"? +

    +
    + + +
    +
    +
    +
    diff --git a/templates/modals/duplicates-modal.html b/templates/modals/duplicates-modal.html new file mode 100644 index 0000000..fb035a1 --- /dev/null +++ b/templates/modals/duplicates-modal.html @@ -0,0 +1,40 @@ + +
    +
    +
    +
    +
    +
    + +
    +

    + ${ duplicatesModalData.total_copies } ${ t('upload.copies') || 'copies' } +

    +
    + +
    +
    + +
    +
    +
    +
    diff --git a/templates/modals/edit-modal.html b/templates/modals/edit-modal.html new file mode 100644 index 0000000..e9a53f4 --- /dev/null +++ b/templates/modals/edit-modal.html @@ -0,0 +1,50 @@ + +
    +
    +
    +

    + +
    +
    +
    + + +
    +
    + + +
    +
    + +
    + + ${editingRecording.meeting_date ? formatDisplayDate(editingRecording.meeting_date) : 'Select date and time...'} + + +
    +
    +
    + + +
    +
    +
    + + +
    +
    +
    diff --git a/templates/modals/edit-participants-modal.html b/templates/modals/edit-participants-modal.html new file mode 100644 index 0000000..e38cd86 --- /dev/null +++ b/templates/modals/edit-participants-modal.html @@ -0,0 +1,61 @@ + +
    +
    +
    +
    +

    + +
    +
    +
    +

    Manage participants for this recording.

    + +
    +
    +
    +
    + +
    + + +
    + +
    +
    + +
    +
    +
    + + +
    +
    + + +
    +
    +
    diff --git a/templates/modals/edit-speakers-modal.html b/templates/modals/edit-speakers-modal.html new file mode 100644 index 0000000..4a150c5 --- /dev/null +++ b/templates/modals/edit-speakers-modal.html @@ -0,0 +1,63 @@ + +
    +
    +
    +
    +

    + +
    +
    +
    +

    Rename speakers in the transcript.

    + +
    +
    +
    + ${speaker.original || 'New'} + +
    + +
    + + +
    + +
    +
    + +
    +
    +
    + + +
    +
    + + +
    +
    +
    diff --git a/templates/modals/edit-tags-modal.html b/templates/modals/edit-tags-modal.html new file mode 100644 index 0000000..31e49ba --- /dev/null +++ b/templates/modals/edit-tags-modal.html @@ -0,0 +1,85 @@ + +
    +
    +
    +
    +

    + +
    +
    +
    + +
    + +
    + + ${index + 1}. + + ${ tag.group_name }: ${ tag.name } + + +
    +

    +

    + + ${ t('help.dragToReorder') } • ${ t('help.firstTagDefaultsApplied') } +

    +
    + + +
    + + + +
    + + +
    + + +
    + +
    +

    +
    +
    +
    + +
    +
    +
    diff --git a/templates/modals/edit-text-modal.html b/templates/modals/edit-text-modal.html new file mode 100644 index 0000000..e4bf55d --- /dev/null +++ b/templates/modals/edit-text-modal.html @@ -0,0 +1,38 @@ + +
    +
    +
    +
    +

    Edit Transcript Text

    + +
    +
    +
    + + +
    + + +
    + + +
    + + +
    +
    +
    +
    diff --git a/templates/modals/global-error.html b/templates/modals/global-error.html new file mode 100644 index 0000000..5126bc0 --- /dev/null +++ b/templates/modals/global-error.html @@ -0,0 +1,18 @@ + + diff --git a/templates/modals/recording-disclaimer-modal.html b/templates/modals/recording-disclaimer-modal.html new file mode 100644 index 0000000..bbed85f --- /dev/null +++ b/templates/modals/recording-disclaimer-modal.html @@ -0,0 +1,36 @@ + +
    +
    +
    +
    +
    + +

    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    diff --git a/templates/modals/recording-recovery-modal.html b/templates/modals/recording-recovery-modal.html new file mode 100644 index 0000000..4007b2c --- /dev/null +++ b/templates/modals/recording-recovery-modal.html @@ -0,0 +1,64 @@ + +
    +
    +
    +
    +
    + +

    +
    + +
    +
    + +
    +
    +
    + +
    +

    ${ t('recording.recoveryFound') }

    +

    ${ t('recording.recoveryDescription') }

    +
    +
    +
    + +
    +
    + ${ t('recording.recordingMode') }: + ${ formatRecordingMode(recoverableRecording.mode) } +
    +
    + ${ t('recording.duration') }: + ${ formatTime(recoverableRecording.duration) } +
    +
    + ${ t('recording.size') }: + ${ formatFileSize(recoverableRecording.totalSize) } +
    +
    + ${ t('recording.startedAt') }: + ${ formatDateTime(recoverableRecording.startTime) } +
    +
    + ${ t('recording.notes') }: +

    ${ recoverableRecording.notes }

    +
    +
    +
    + +
    + + +
    +
    +
    diff --git a/templates/modals/reprocess-modal.html b/templates/modals/reprocess-modal.html new file mode 100644 index 0000000..ba6b2a2 --- /dev/null +++ b/templates/modals/reprocess-modal.html @@ -0,0 +1,184 @@ + +
    +
    + +
    +
    +
    +
    + +
    +
    +

    +

    ${ reprocessType } reprocessing

    +
    +
    + +
    +
    + + + + + +
    + + +
    +
    +
    diff --git a/templates/modals/reset-modal.html b/templates/modals/reset-modal.html new file mode 100644 index 0000000..6acba42 --- /dev/null +++ b/templates/modals/reset-modal.html @@ -0,0 +1,31 @@ + +
    +
    +
    +
    +
    +
    + +
    +
    +

    +
    +
    + +
    +

    + This will mark the recording as 'Failed'. This is useful if processing is stuck. You will be able to reprocess it afterwards. +

    +
    +
    + + +
    +
    +
    diff --git a/templates/modals/share-delete-modal.html b/templates/modals/share-delete-modal.html new file mode 100644 index 0000000..1f54397 --- /dev/null +++ b/templates/modals/share-delete-modal.html @@ -0,0 +1,52 @@ + +
    +
    + +
    +
    +
    +
    + +
    +
    +

    Delete Shared Link

    +

    This action cannot be undone

    +
    +
    + +
    +
    + + +
    +

    + Are you sure you want to delete the shared link for: +

    +
    +

    ${shareToDelete.recording_title}

    +

    Shared on: ${shareToDelete.created_at}

    +
    +
    +
    + +

    + The share link will be permanently deleted and anyone with this link will no longer be able to access the recording. +

    +
    +
    +
    + + +
    + + +
    +
    +
    diff --git a/templates/modals/share-modal.html b/templates/modals/share-modal.html new file mode 100644 index 0000000..1a4b8cf --- /dev/null +++ b/templates/modals/share-modal.html @@ -0,0 +1,82 @@ + +
    +
    +
    +

    + +
    +
    +

    + + +
    + + +
    + + + + + +
    + +

    Loading share links...

    +
    + + +
    +

    + Existing Share Links (${recordingPublicShares.length}) +

    +
    +
    +
    +

    ${ t('help.sharedOn') }: ${share.created_at}

    +
    + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    + +

    +

    Click the button above to create one

    +
    +
    +
    + +
    +
    +
    diff --git a/templates/modals/shares-list-modal.html b/templates/modals/shares-list-modal.html new file mode 100644 index 0000000..b765e51 --- /dev/null +++ b/templates/modals/shares-list-modal.html @@ -0,0 +1,46 @@ + +
    +
    +
    +

    + +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +

    ${share.recording_title}

    +

    ${ t('help.sharedOn') }: ${share.created_at}

    +
    + +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    diff --git a/templates/modals/speaker-modal.html b/templates/modals/speaker-modal.html new file mode 100644 index 0000000..02d1fe0 --- /dev/null +++ b/templates/modals/speaker-modal.html @@ -0,0 +1,353 @@ + +
    +
    + +
    +
    +

    + +
    + +
    +
    + +
    +

    +

    +

    +
    +
    +
    +
    + + +
    + + +
    + + + + + +
    + +
    + + +
    + +
    + +
    + + + + + +
    + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    diff --git a/templates/modals/system-audio-help-modal.html b/templates/modals/system-audio-help-modal.html new file mode 100644 index 0000000..4751881 --- /dev/null +++ b/templates/modals/system-audio-help-modal.html @@ -0,0 +1,53 @@ + +
    +
    +
    +
    +

    + +
    +
    +
    +
    +
    + +
    +

    Compatibilité des navigateurs

    +

    + L'enregistrement audio système fonctionne mieux dans Chrome, Edge et Brave. Firefox est supporté mais nécessite que l'onglet soit en train de jouer de l'audio. Non supporté sur Safari ou les appareils mobiles. +

    +
    +
    +
    + +
    +

    Comment enregistrer l'audio système :

    +
      +
    1. Cliquez sur le bouton "Audio Système" ou "Micro + Système"
    2. +
    3. Une fenêtre de partage d'écran apparaîtra
    4. +
    5. Sélectionnez un onglet ou une fenêtre qui joue de l'audio activement
    6. +
    7. Assurez-vous que la case "Partager l'audio" est cochée
    8. +
    9. Cliquez sur "Partager" pour démarrer l'enregistrement
    10. +
    +
    + +
    +

    Dépannage :

    +
      +
    • Important : L'onglet/fenêtre doit jouer de l'audio au moment du partage
    • +
    • Vérifiez que la case "Partager l'audio" est cochée dans la fenêtre de partage
    • +
    • Sur Firefox, lancez d'abord la lecture audio, puis cliquez sur enregistrer
    • +
    • Certains contenus peuvent avoir une protection DRM qui bloque l'enregistrement
    • +
    • Non supporté sur Safari ou les navigateurs mobiles
    • +
    +
    +
    +
    + +
    +
    +
    diff --git a/templates/modals/text-editor-modal.html b/templates/modals/text-editor-modal.html new file mode 100644 index 0000000..00d71b4 --- /dev/null +++ b/templates/modals/text-editor-modal.html @@ -0,0 +1,32 @@ + +
    +
    +
    +
    +

    + +
    +
    +
    +
    + + +
    +
    +
    + + +
    +
    +
    diff --git a/templates/modals/toast-container.html b/templates/modals/toast-container.html new file mode 100644 index 0000000..1c977e6 --- /dev/null +++ b/templates/modals/toast-container.html @@ -0,0 +1,2 @@ + +
    diff --git a/templates/modals/unified-share-modal.html b/templates/modals/unified-share-modal.html new file mode 100644 index 0000000..769718a --- /dev/null +++ b/templates/modals/unified-share-modal.html @@ -0,0 +1,281 @@ + +
    +
    +
    +
    +
    +

    +

    ${internalShareRecording?.title}

    +
    + +
    +
    + +
    + +
    +

    + + +

    + +

    + +
    + +
    + + +
    + + + + + +
    + +

    Loading share links...

    +
    + + +
    +
    + Existing Share Links (${recordingPublicShares.length}) +
    +
    +
    +
    + + Created: ${share.created_at} + + Summary + + + Notes + +
    + +
    +
    + + +
    +
    +
    + + +
    + +

    No public share links yet

    +

    Click the button above to create one

    +
    +
    +
    + + +
    +

    + + +

    + +

    + + +
    +
    + + Share with User +
    + + +
    + +
    + + +
    + + +
    + +

    Loading users...

    +
    +
    + +

    No users found

    +
    +
    +
    +
    +
    + ${user.username ? user.username.charAt(0).toUpperCase() : '?'} +
    +
    +

    ${user.username}

    +

    ${user.email}

    +
    + +
    +
    +
    +
    + + +
    +

    Enter the exact username to share with

    +
    + + +
    +

    + + You must enter the exact username. If the user exists, they will be added to the share list. +

    +
    + + +
    +

    Share Permissions

    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + + Already Shared With + + + ${recordingInternalShares.length} user(s) + +
    + +
    + +

    Loading shares...

    +
    +
    + +

    Not shared with anyone yet

    +

    Select a user above to share this recording

    +
    +
    +
    +
    +
    + ${share.username ? share.username.charAt(0).toUpperCase() : '#'} +
    +
    +

    ${share.username || 'User #' + share.user_id}

    +

    ${share.is_owner ? 'Recording Owner' : formatShareDate(share.created_at)}

    +
    + + Owner + + +
    +
    + +
    +
    +
    +
    +
    +
    + + +
    +
    + +

    Sharing Not Available

    +

    + This recording was shared with you, but you don't have permission to share it with others. +

    +
    +
    + +
    + +
    +
    +
    diff --git a/templates/modals/upload-disclaimer-modal.html b/templates/modals/upload-disclaimer-modal.html new file mode 100644 index 0000000..554e798 --- /dev/null +++ b/templates/modals/upload-disclaimer-modal.html @@ -0,0 +1,36 @@ + +
    +
    +
    +
    +
    + +

    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    diff --git a/templates/register.html b/templates/register.html new file mode 100644 index 0000000..fc405ef --- /dev/null +++ b/templates/register.html @@ -0,0 +1,164 @@ + + + + + + + {{ title }} - DictIA + + + + + + + + + {% include 'includes/loading_overlay.html' %} + + + + +
    +
    +

    + + DictIA + DictIA + +

    +
    + +
    +
    +

    Create an Account

    + + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + {% for category, message in messages %} +
    + {{ message }} +
    + {% endfor %} + {% endif %} + {% endwith %} + +
    + {{ form.hidden_tag() }} + +
    + {{ form.username.label(class="block text-sm font-medium text-[var(--text-secondary)] mb-1") }} + {% if form.username.errors %} + {{ form.username(class="mt-1 block w-full rounded-md border-[var(--border-danger)] shadow-sm focus:border-[var(--border-focus)] focus:ring-[var(--ring-focus)] focus:ring-opacity-50 bg-[var(--bg-input)] text-[var(--text-primary)]") }} +
    + {% for error in form.username.errors %} + {{ error }} + {% endfor %} +
    + {% else %} + {{ form.username(class="mt-1 block w-full rounded-md border-[var(--border-secondary)] shadow-sm focus:border-[var(--border-focus)] focus:ring-[var(--ring-focus)] focus:ring-opacity-50 bg-[var(--bg-input)] text-[var(--text-primary)]") }} + {% endif %} +
    + +
    + {{ form.email.label(class="block text-sm font-medium text-[var(--text-secondary)] mb-1") }} + {% if form.email.errors %} + {{ form.email(class="mt-1 block w-full rounded-md border-[var(--border-danger)] shadow-sm focus:border-[var(--border-focus)] focus:ring-[var(--ring-focus)] focus:ring-opacity-50 bg-[var(--bg-input)] text-[var(--text-primary)]") }} +
    + {% for error in form.email.errors %} + {{ error }} + {% endfor %} +
    + {% else %} + {{ form.email(class="mt-1 block w-full rounded-md border-[var(--border-secondary)] shadow-sm focus:border-[var(--border-focus)] focus:ring-[var(--ring-focus)] focus:ring-opacity-50 bg-[var(--bg-input)] text-[var(--text-primary)]") }} + {% endif %} +
    + +
    + {{ form.password.label(class="block text-sm font-medium text-[var(--text-secondary)] mb-1") }} + {% if form.password.errors %} + {{ form.password(class="mt-1 block w-full rounded-md border-[var(--border-danger)] shadow-sm focus:border-[var(--border-focus)] focus:ring-[var(--ring-focus)] focus:ring-opacity-50 bg-[var(--bg-input)] text-[var(--text-primary)]") }} +
    + {% for error in form.password.errors %} + {{ error }} + {% endfor %} +
    + {% else %} + {{ form.password(class="mt-1 block w-full rounded-md border-[var(--border-secondary)] shadow-sm focus:border-[var(--border-focus)] focus:ring-[var(--ring-focus)] focus:ring-opacity-50 bg-[var(--bg-input)] text-[var(--text-primary)]") }} + {% endif %} +

    Password must be at least 8 characters long.

    +
    + +
    + {{ form.confirm_password.label(class="block text-sm font-medium text-[var(--text-secondary)] mb-1") }} + {% if form.confirm_password.errors %} + {{ form.confirm_password(class="mt-1 block w-full rounded-md border-[var(--border-danger)] shadow-sm focus:border-[var(--border-focus)] focus:ring-[var(--ring-focus)] focus:ring-opacity-50 bg-[var(--bg-input)] text-[var(--text-primary)]") }} +
    + {% for error in form.confirm_password.errors %} + {{ error }} + {% endfor %} +
    + {% else %} + {{ form.confirm_password(class="mt-1 block w-full rounded-md border-[var(--border-secondary)] shadow-sm focus:border-[var(--border-focus)] focus:ring-[var(--ring-focus)] focus:ring-opacity-50 bg-[var(--bg-input)] text-[var(--text-primary)]") }} + {% endif %} +
    + +
    + {{ form.submit(class="w-full py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-[var(--text-button)] bg-[var(--bg-button)] hover:bg-[var(--bg-button-hover)] focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-[var(--border-focus)]") }} + +
    + Already have an account? + Login here +
    +
    +
    +
    +
    + + +
    + + + + diff --git a/templates/share.html b/templates/share.html new file mode 100644 index 0000000..ebc375b --- /dev/null +++ b/templates/share.html @@ -0,0 +1,898 @@ + + + + + + + Shared Recording - {{ recording.title }} + + + + + + + + + + + + {% include 'includes/loading_overlay.html' %} + + + + +
    + +
    +
    + DictIA +
    +

    ${ recording.title }

    +

    Shared Recording

    +
    +
    +
    + +
    +
    + + +
    + +
    +
    + +
    + + Audio file has been archived and is no longer available for playback. +
    + +
    + + +
    + + + +
    + ${ formatAudioTime(audioCurrentTime) } + ${ formatAudioTime(audioDuration) } +
    + +
    + + +
    +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    + + +
    +
    +
    +
    +
    + + +
    +
    +
    + + {% if recording.summary %} + + {% endif %} + {% if recording.notes %} + + {% endif %} +
    +
    +
    + + +
    +
    + +
    + +
    +
    + + +
    +
    + + +
    +
    + + {% if readable_mode and transcript %} + + + {% if transcript.has_speakers and transcript.speakers %} +
    +
    +
    + + Speakers + ({{ transcript.speakers|length }}) +
    + +
    +
    + {% for speaker in transcript.speakers %} +
    + {{ speaker.name }} +
    + {% endfor %} +
    +
    + {% endif %} + + +
    + {% if transcript.is_json and transcript.segments %} + +
    + {% for segment in transcript.segments %} +
    + {% if segment.show_speaker and segment.speaker %} +
    {{ segment.speaker }}
    + {% endif %} +
    {{ segment.text }}
    +
    + {% endfor %} +
    + + +
    + {% set ns = namespace(last_speaker=None) %} + {% for segment in transcript.segments %} + {% if segment.speaker != ns.last_speaker %} + {% if not loop.first %}
    {% endif %} +
    + {% endif %} +
    +
    {{ segment.text }}
    +
    + {% set ns.last_speaker = segment.speaker %} + {% endfor %} + {% if transcript.segments %}
    {% endif %} +
    + {% else %} + +
    {{ transcript.plain_text }}
    + {% endif %} +
    + {% else %} + + +
    +
    +
    + + Speakers + (${processedTranscription.speakers.length}) +
    + +
    +
    +
    + ${speaker.name} +
    +
    +
    + + +
    + +
    +
    +
    + ${segment.speaker} +
    +
    + ${segment.sentence} +
    +
    +
    + + +
    +
    +
    +
    + ${bubble.sentence} +
    +
    +
    +
    + + +
    + ${processedTranscription.content} +
    +
    + {% endif %} +
    + + + {% if recording.summary %} +
    +
    + +
    +
    + {{ recording.summary|safe }} +
    +
    + {% endif %} + + + {% if recording.notes %} +
    +
    + +
    +
    + {{ recording.notes|safe }} +
    +
    + {% endif %} +
    +
    + + + + + + +
    + + + + + diff --git a/tests/test_api_v1_speakers.py b/tests/test_api_v1_speakers.py new file mode 100644 index 0000000..2b616c9 --- /dev/null +++ b/tests/test_api_v1_speakers.py @@ -0,0 +1,971 @@ +#!/usr/bin/env python3 +""" +Test suite for Speaker API v1 endpoints. + +Covers: + - PUT /recordings//speakers/assign (17 tests) + - POST /recordings//speakers/identify (10 tests) + - PUT /settings/auto-summarization (5 tests) + - Regression for GET /speakers and GET /recordings//speakers (2 tests) + +Pattern follows tests/test_api_v1_upload.py — standalone, no pytest fixtures. +""" + +import json +import secrets +import sys +import os +from unittest.mock import patch, MagicMock + +# Add parent directory so we can import the app +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from src.app import app, db +from src.models import User, APIToken, Recording, Speaker +from src.utils.token_auth import hash_token + +# --------------------------------------------------------------------------- +# Test data constants +# --------------------------------------------------------------------------- + +SAMPLE_TRANSCRIPTION_JSON = json.dumps([ + {"speaker": "SPEAKER_00", "sentence": "Hi, I'm Alice."}, + {"speaker": "SPEAKER_01", "sentence": "Hello Alice, I'm Bob."}, + {"speaker": "SPEAKER_00", "sentence": "Nice to meet you, Bob."}, +]) + +SAMPLE_TRANSCRIPTION_TEXT = ( + "[SPEAKER_00]: Hi, I'm Alice.\n" + "[SPEAKER_01]: Hello Alice, I'm Bob.\n" + "[SPEAKER_00]: Nice to meet you, Bob." +) + +SAMPLE_EMBEDDINGS = json.dumps({ + "SPEAKER_00": [0.1] * 256, + "SPEAKER_01": [0.2] * 256, +}) + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _get_or_create_test_user(suffix=""): + """Get or create a test user. Returns (user, created_bool).""" + username = f"speaker_test_user{suffix}" + user = User.query.filter_by(username=username).first() + created = False + if not user: + user = User( + username=username, + email=f"{username}@local.test", + name="Test User" if not suffix else None, + ) + db.session.add(user) + db.session.commit() + created = True + return user, created + + +def _create_api_token(user): + """Create a fresh API token. Returns (token_record, plaintext).""" + plaintext = f"test-token-{secrets.token_urlsafe(16)}" + token = APIToken( + user_id=user.id, + token_hash=hash_token(plaintext), + name="test-api-token", + ) + db.session.add(token) + db.session.commit() + return token, plaintext + + +def _create_test_recording(user, transcription=None, speaker_embeddings=None, status="COMPLETED"): + """Create a Recording owned by *user*.""" + rec = Recording( + user_id=user.id, + title="Test Recording", + status=status, + transcription=transcription, + speaker_embeddings=speaker_embeddings, + ) + db.session.add(rec) + db.session.commit() + return rec + + +def _create_test_speaker(user, name="Alice"): + """Create a Speaker owned by *user*.""" + speaker = Speaker(name=name, user_id=user.id) + db.session.add(speaker) + db.session.commit() + return speaker + + +def _cleanup(*objects): + """Delete DB objects in reverse order, committing once.""" + for obj in reversed(objects): + try: + db.session.delete(obj) + except Exception: + db.session.rollback() + try: + merged = db.session.merge(obj) + db.session.delete(merged) + except Exception: + pass + db.session.commit() + + +# ========================================================================= +# Group 1: PUT /recordings//speakers/assign (17 tests) +# ========================================================================= + + +def test_assign_no_auth(): + """No token -> 302 redirect (Flask-Login).""" + with app.app_context(): + user, cu = _get_or_create_test_user() + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + resp = client.put(f"/api/v1/recordings/{rec.id}/speakers/assign", + json={"speaker_map": {}}) + assert resp.status_code in (302, 401), f"Expected 302/401, got {resp.status_code}" + return True + finally: + _cleanup(rec) + if cu: + _cleanup(user) + + +def test_assign_recording_not_found(): + """Nonexistent recording ID -> 404.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + client = app.test_client() + try: + resp = client.put("/api/v1/recordings/999999/speakers/assign", + headers={"X-API-Token": token}, + json={"speaker_map": {}}) + assert resp.status_code == 404, f"Expected 404, got {resp.status_code}" + return True + finally: + _cleanup(token_rec) + if cu: + _cleanup(user) + + +def test_assign_wrong_user_recording(): + """Other user's recording -> 403.""" + with app.app_context(): + owner, co = _get_or_create_test_user("_owner") + other, cu = _get_or_create_test_user("_other") + token_rec, token = _create_api_token(other) + rec = _create_test_recording(owner, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + resp = client.put(f"/api/v1/recordings/{rec.id}/speakers/assign", + headers={"X-API-Token": token}, + json={"speaker_map": {"SPEAKER_00": "Alice"}}) + assert resp.status_code == 403, f"Expected 403, got {resp.status_code}" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(other) + if co: + _cleanup(owner) + + +def test_assign_missing_speaker_map(): + """Body {} -> 400 'speaker_map is required'.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + resp = client.put(f"/api/v1/recordings/{rec.id}/speakers/assign", + headers={"X-API-Token": token}, + json={}) + assert resp.status_code == 400, f"Expected 400, got {resp.status_code}" + body = resp.get_json() + assert "speaker_map" in body.get("error", "").lower(), f"Unexpected error: {body}" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_assign_invalid_speaker_map_type(): + """speaker_map: 'string' -> 400.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + resp = client.put(f"/api/v1/recordings/{rec.id}/speakers/assign", + headers={"X-API-Token": token}, + json={"speaker_map": "not a dict"}) + assert resp.status_code == 400, f"Expected 400, got {resp.status_code}" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_assign_string_value_json_transcript(): + """Happy path: string names update JSON segments + participants.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + resp = client.put(f"/api/v1/recordings/{rec.id}/speakers/assign", + headers={"X-API-Token": token}, + json={"speaker_map": {"SPEAKER_00": "Alice", "SPEAKER_01": "Bob"}}) + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + body = resp.get_json() + assert body.get("success") is True + # Verify participants + participants = body["recording"]["participants"] + assert "Alice" in participants and "Bob" in participants + # Verify transcription was updated + db.session.refresh(rec) + segments = json.loads(rec.transcription) + assert segments[0]["speaker"] == "Alice" + assert segments[1]["speaker"] == "Bob" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_assign_object_value_with_name(): + """Happy path: {name, isMe} object format.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + resp = client.put(f"/api/v1/recordings/{rec.id}/speakers/assign", + headers={"X-API-Token": token}, + json={"speaker_map": { + "SPEAKER_00": {"name": "Alice", "isMe": False}, + }}) + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + db.session.refresh(rec) + segments = json.loads(rec.transcription) + assert segments[0]["speaker"] == "Alice" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_assign_is_me_flag_with_user_name(): + """isMe: true resolves to user.name.""" + with app.app_context(): + user, cu = _get_or_create_test_user() # user.name == "Test User" + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + resp = client.put(f"/api/v1/recordings/{rec.id}/speakers/assign", + headers={"X-API-Token": token}, + json={"speaker_map": { + "SPEAKER_00": {"name": "", "isMe": True}, + }}) + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + db.session.refresh(rec) + segments = json.loads(rec.transcription) + assert segments[0]["speaker"] == "Test User", f"Got {segments[0]['speaker']}" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_assign_is_me_flag_without_user_name(): + """isMe: true falls back to 'Me' when user.name is None.""" + with app.app_context(): + user, cu = _get_or_create_test_user("_noname") + # Ensure user.name is None + user.name = None + db.session.commit() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + resp = client.put(f"/api/v1/recordings/{rec.id}/speakers/assign", + headers={"X-API-Token": token}, + json={"speaker_map": { + "SPEAKER_00": {"name": "", "isMe": True}, + }}) + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + db.session.refresh(rec) + segments = json.loads(rec.transcription) + assert segments[0]["speaker"] == "Me", f"Got {segments[0]['speaker']}" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_assign_plain_text_transcript(): + """Replaces [SPEAKER_XX] in plain text format.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_TEXT) + client = app.test_client() + try: + resp = client.put(f"/api/v1/recordings/{rec.id}/speakers/assign", + headers={"X-API-Token": token}, + json={"speaker_map": {"SPEAKER_00": "Alice", "SPEAKER_01": "Bob"}}) + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + db.session.refresh(rec) + assert "[Alice]" in rec.transcription + assert "[Bob]" in rec.transcription + assert "[SPEAKER_00]" not in rec.transcription + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_assign_speaker_xx_filtered_from_participants(): + """Unresolved SPEAKER_XX labels excluded from participants.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + # Only assign one speaker - SPEAKER_01 stays unresolved + resp = client.put(f"/api/v1/recordings/{rec.id}/speakers/assign", + headers={"X-API-Token": token}, + json={"speaker_map": {"SPEAKER_00": "Alice"}}) + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + body = resp.get_json() + participants = body["recording"]["participants"] + assert "SPEAKER_01" not in participants, f"SPEAKER_01 should be filtered: {participants}" + assert "Alice" in participants + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_assign_invalid_value_type(): + """Array value -> 400 'Invalid value type'.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + resp = client.put(f"/api/v1/recordings/{rec.id}/speakers/assign", + headers={"X-API-Token": token}, + json={"speaker_map": {"SPEAKER_00": [1, 2, 3]}}) + assert resp.status_code == 400, f"Expected 400, got {resp.status_code}" + body = resp.get_json() + assert "invalid value type" in body.get("error", "").lower(), f"Unexpected: {body}" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_assign_empty_speaker_map(): + """Empty speaker_map {} -> 200 with no changes.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + resp = client.put(f"/api/v1/recordings/{rec.id}/speakers/assign", + headers={"X-API-Token": token}, + json={"speaker_map": {}}) + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + body = resp.get_json() + assert body.get("success") is True + # Transcription should be unchanged + db.session.refresh(rec) + segments = json.loads(rec.transcription) + assert segments[0]["speaker"] == "SPEAKER_00" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_assign_regenerate_summary(): + """regenerate_summary: true -> job_queue.enqueue called, summary_queued: true.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + mock_jq = MagicMock() + mock_jq.enqueue = MagicMock(return_value="job-123") + with patch("src.services.job_queue.job_queue", mock_jq): + resp = client.put(f"/api/v1/recordings/{rec.id}/speakers/assign", + headers={"X-API-Token": token}, + json={ + "speaker_map": {"SPEAKER_00": "Alice"}, + "regenerate_summary": True, + }) + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + body = resp.get_json() + assert body.get("summary_queued") is True + mock_jq.enqueue.assert_called_once() + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_assign_embeddings_updated(): + """With speaker_embeddings -> update_speaker_embedding called, counts returned.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording( + user, + transcription=SAMPLE_TRANSCRIPTION_JSON, + speaker_embeddings=SAMPLE_EMBEDDINGS, + ) + speaker = _create_test_speaker(user, "Alice") + client = app.test_client() + try: + mock_update = MagicMock() + mock_snippets = MagicMock(return_value=2) + with patch("src.services.speaker_embedding_matcher.update_speaker_embedding", mock_update), \ + patch("src.services.speaker_snippets.create_speaker_snippets", mock_snippets): + resp = client.put(f"/api/v1/recordings/{rec.id}/speakers/assign", + headers={"X-API-Token": token}, + json={"speaker_map": {"SPEAKER_00": "Alice"}}) + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + body = resp.get_json() + assert body.get("embeddings_updated") >= 1, f"embeddings_updated: {body}" + mock_update.assert_called() + return True + finally: + _cleanup(rec, speaker, token_rec) + if cu: + _cleanup(user) + + +def test_assign_no_transcription(): + """Recording without transcription -> speakers applied to empty content gracefully.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=None) + client = app.test_client() + try: + resp = client.put(f"/api/v1/recordings/{rec.id}/speakers/assign", + headers={"X-API-Token": token}, + json={"speaker_map": {"SPEAKER_00": "Alice"}}) + # Should succeed (or at least not 500) + assert resp.status_code in (200, 400), f"Expected 200/400, got {resp.status_code}" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_assign_whitespace_name_trimmed(): + """Names with leading/trailing whitespace get trimmed.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + resp = client.put(f"/api/v1/recordings/{rec.id}/speakers/assign", + headers={"X-API-Token": token}, + json={"speaker_map": {"SPEAKER_00": " Alice "}}) + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + db.session.refresh(rec) + segments = json.loads(rec.transcription) + assert segments[0]["speaker"] == "Alice", f"Name not trimmed: '{segments[0]['speaker']}'" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +# ========================================================================= +# Group 2: POST /recordings//speakers/identify (10 tests) +# ========================================================================= + + +def test_identify_no_auth(): + """No token -> 302.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + resp = client.post(f"/api/v1/recordings/{rec.id}/speakers/identify") + assert resp.status_code in (302, 401), f"Expected 302/401, got {resp.status_code}" + return True + finally: + _cleanup(rec) + if cu: + _cleanup(user) + + +def test_identify_recording_not_found(): + """Nonexistent ID -> 404.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + client = app.test_client() + try: + resp = client.post("/api/v1/recordings/999999/speakers/identify", + headers={"X-API-Token": token}) + assert resp.status_code == 404, f"Expected 404, got {resp.status_code}" + return True + finally: + _cleanup(token_rec) + if cu: + _cleanup(user) + + +def test_identify_wrong_user_recording(): + """Other user's recording -> 403.""" + with app.app_context(): + owner, co = _get_or_create_test_user("_id_owner") + other, cu = _get_or_create_test_user("_id_other") + token_rec, token = _create_api_token(other) + rec = _create_test_recording(owner, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + resp = client.post(f"/api/v1/recordings/{rec.id}/speakers/identify", + headers={"X-API-Token": token}) + assert resp.status_code == 403, f"Expected 403, got {resp.status_code}" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(other) + if co: + _cleanup(owner) + + +def test_identify_no_transcription(): + """No transcription -> 400.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=None) + client = app.test_client() + try: + resp = client.post(f"/api/v1/recordings/{rec.id}/speakers/identify", + headers={"X-API-Token": token}) + assert resp.status_code == 400, f"Expected 400, got {resp.status_code}" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_identify_non_json_transcription(): + """Plain text -> 400.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_TEXT) + client = app.test_client() + try: + resp = client.post(f"/api/v1/recordings/{rec.id}/speakers/identify", + headers={"X-API-Token": token}) + assert resp.status_code == 400, f"Expected 400, got {resp.status_code}" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_identify_json_but_not_list(): + """Dict JSON -> 400.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=json.dumps({"key": "value"})) + client = app.test_client() + try: + resp = client.post(f"/api/v1/recordings/{rec.id}/speakers/identify", + headers={"X-API-Token": token}) + assert resp.status_code == 400, f"Expected 400, got {resp.status_code}" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_identify_happy_path(): + """Mock LLM returns names -> 200 with speaker_map.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + # Build a mock LLM completion response + mock_completion = MagicMock() + mock_completion.choices = [MagicMock()] + mock_completion.choices[0].message.content = json.dumps({ + "SPEAKER_00": "Alice", + "SPEAKER_01": "Bob", + }) + + with patch("src.services.llm.call_llm_completion", return_value=mock_completion), \ + patch("src.models.system.SystemSetting") as mock_ss: + mock_ss.get_setting.return_value = 30000 + resp = client.post(f"/api/v1/recordings/{rec.id}/speakers/identify", + headers={"X-API-Token": token}) + + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + body = resp.get_json() + assert body.get("success") is True + sm = body.get("speaker_map", {}) + assert sm.get("SPEAKER_00") == "Alice" + assert sm.get("SPEAKER_01") == "Bob" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_identify_post_processing_unknown_values(): + """'Unknown'/'N/A' cleared to ''.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + mock_completion = MagicMock() + mock_completion.choices = [MagicMock()] + mock_completion.choices[0].message.content = json.dumps({ + "SPEAKER_00": "Unknown", + "SPEAKER_01": "N/A", + }) + + with patch("src.services.llm.call_llm_completion", return_value=mock_completion), \ + patch("src.models.system.SystemSetting") as mock_ss: + mock_ss.get_setting.return_value = 30000 + resp = client.post(f"/api/v1/recordings/{rec.id}/speakers/identify", + headers={"X-API-Token": token}) + + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + body = resp.get_json() + sm = body.get("speaker_map", {}) + assert sm.get("SPEAKER_00") == "", f"Expected empty, got {sm.get('SPEAKER_00')}" + assert sm.get("SPEAKER_01") == "", f"Expected empty, got {sm.get('SPEAKER_01')}" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_identify_no_speakers_in_transcript(): + """Segments without speaker field -> 400.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + no_speakers = json.dumps([{"sentence": "Hello"}, {"sentence": "World"}]) + rec = _create_test_recording(user, transcription=no_speakers) + client = app.test_client() + try: + resp = client.post(f"/api/v1/recordings/{rec.id}/speakers/identify", + headers={"X-API-Token": token}) + assert resp.status_code == 400, f"Expected 400, got {resp.status_code}" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +def test_identify_llm_error(): + """LLM raises exception -> 500.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + with patch("src.services.llm.call_llm_completion", + side_effect=RuntimeError("LLM down")), \ + patch("src.models.system.SystemSetting") as mock_ss: + mock_ss.get_setting.return_value = 30000 + resp = client.post(f"/api/v1/recordings/{rec.id}/speakers/identify", + headers={"X-API-Token": token}) + assert resp.status_code == 500, f"Expected 500, got {resp.status_code}" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +# ========================================================================= +# Group 3: PUT /settings/auto-summarization (5 tests) +# ========================================================================= + + +def test_auto_summarization_no_auth(): + """No token -> 302.""" + with app.app_context(): + client = app.test_client() + resp = client.put("/api/v1/settings/auto-summarization", + json={"enabled": True}) + assert resp.status_code in (302, 401), f"Expected 302/401, got {resp.status_code}" + return True + + +def test_auto_summarization_missing_enabled(): + """Body {} -> 400.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + client = app.test_client() + try: + resp = client.put("/api/v1/settings/auto-summarization", + headers={"X-API-Token": token}, + json={}) + assert resp.status_code == 400, f"Expected 400, got {resp.status_code}" + body = resp.get_json() + assert "enabled" in body.get("error", "").lower(), f"Unexpected: {body}" + return True + finally: + _cleanup(token_rec) + if cu: + _cleanup(user) + + +def test_auto_summarization_invalid_json(): + """Non-JSON body -> 400.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + client = app.test_client() + try: + resp = client.put("/api/v1/settings/auto-summarization", + headers={"X-API-Token": token, + "Content-Type": "application/json"}, + data="not valid json") + assert resp.status_code == 400, f"Expected 400, got {resp.status_code}" + return True + finally: + _cleanup(token_rec) + if cu: + _cleanup(user) + + +def test_auto_summarization_enable(): + """enabled: true -> updates user, returns true.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + user.auto_summarization = False + db.session.commit() + token_rec, token = _create_api_token(user) + client = app.test_client() + try: + resp = client.put("/api/v1/settings/auto-summarization", + headers={"X-API-Token": token}, + json={"enabled": True}) + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + body = resp.get_json() + assert body.get("auto_summarization") is True + db.session.refresh(user) + assert user.auto_summarization is True + return True + finally: + _cleanup(token_rec) + if cu: + _cleanup(user) + + +def test_auto_summarization_disable(): + """enabled: false -> updates user, returns false.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + user.auto_summarization = True + db.session.commit() + token_rec, token = _create_api_token(user) + client = app.test_client() + try: + resp = client.put("/api/v1/settings/auto-summarization", + headers={"X-API-Token": token}, + json={"enabled": False}) + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + body = resp.get_json() + assert body.get("auto_summarization") is False + db.session.refresh(user) + assert user.auto_summarization is False + return True + finally: + _cleanup(token_rec) + if cu: + _cleanup(user) + + +# ========================================================================= +# Group 4: Regression tests (2 tests) +# ========================================================================= + + +def test_regression_get_speakers_list(): + """GET /speakers still returns user's speakers.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + speaker = _create_test_speaker(user, "Regression Speaker") + client = app.test_client() + try: + resp = client.get("/api/v1/speakers", + headers={"X-API-Token": token}) + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + body = resp.get_json() + names = [s["name"] for s in body.get("speakers", [])] + assert "Regression Speaker" in names, f"Speaker not found: {names}" + return True + finally: + _cleanup(speaker, token_rec) + if cu: + _cleanup(user) + + +def test_regression_get_recording_speakers(): + """GET /recordings//speakers still returns transcript speakers.""" + with app.app_context(): + user, cu = _get_or_create_test_user() + token_rec, token = _create_api_token(user) + rec = _create_test_recording(user, transcription=SAMPLE_TRANSCRIPTION_JSON) + client = app.test_client() + try: + with patch("src.services.speaker_embedding_matcher.find_matching_speakers", return_value={}): + resp = client.get(f"/api/v1/recordings/{rec.id}/speakers", + headers={"X-API-Token": token}) + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + body = resp.get_json() + labels = [s["label"] for s in body.get("speakers", [])] + assert "SPEAKER_00" in labels and "SPEAKER_01" in labels, f"Labels: {labels}" + return True + finally: + _cleanup(rec, token_rec) + if cu: + _cleanup(user) + + +# ========================================================================= +# Runner +# ========================================================================= + +ALL_TESTS = [ + # Group 1: assign + test_assign_no_auth, + test_assign_recording_not_found, + test_assign_wrong_user_recording, + test_assign_missing_speaker_map, + test_assign_invalid_speaker_map_type, + test_assign_string_value_json_transcript, + test_assign_object_value_with_name, + test_assign_is_me_flag_with_user_name, + test_assign_is_me_flag_without_user_name, + test_assign_plain_text_transcript, + test_assign_speaker_xx_filtered_from_participants, + test_assign_invalid_value_type, + test_assign_empty_speaker_map, + test_assign_regenerate_summary, + test_assign_embeddings_updated, + test_assign_no_transcription, + test_assign_whitespace_name_trimmed, + # Group 2: identify + test_identify_no_auth, + test_identify_recording_not_found, + test_identify_wrong_user_recording, + test_identify_no_transcription, + test_identify_non_json_transcription, + test_identify_json_but_not_list, + test_identify_happy_path, + test_identify_post_processing_unknown_values, + test_identify_no_speakers_in_transcript, + test_identify_llm_error, + # Group 3: auto-summarization + test_auto_summarization_no_auth, + test_auto_summarization_missing_enabled, + test_auto_summarization_invalid_json, + test_auto_summarization_enable, + test_auto_summarization_disable, + # Group 4: regression + test_regression_get_speakers_list, + test_regression_get_recording_speakers, +] + + +def main(): + print(f"Running {len(ALL_TESTS)} Speaker API tests...\n") + passed = 0 + failed = 0 + errors = [] + + for test_fn in ALL_TESTS: + name = test_fn.__name__ + try: + result = test_fn() + if result: + print(f" PASS {name}") + passed += 1 + else: + print(f" FAIL {name} (returned False)") + failed += 1 + errors.append(name) + except Exception as e: + print(f" ERROR {name}: {e}") + failed += 1 + errors.append(name) + + print(f"\n{'=' * 60}") + print(f"Results: {passed} passed, {failed} failed out of {len(ALL_TESTS)}") + if errors: + print("Failed tests:") + for e in errors: + print(f" - {e}") + print('=' * 60) + sys.exit(0 if failed == 0 else 1) + + +if __name__ == "__main__": + main() diff --git a/tests/test_api_v1_upload.py b/tests/test_api_v1_upload.py new file mode 100644 index 0000000..d003780 --- /dev/null +++ b/tests/test_api_v1_upload.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +""" +Integration test for API v1 recording upload endpoint. + +Validates API token authentication and expected 400 response when no file is provided. +""" + +import secrets +import sys +import os + +# Add the parent directory to the path to import app +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from src.app import app, db +from src.models import User, APIToken +from src.utils.token_auth import hash_token + + +def _get_or_create_test_user(): + user = User.query.filter_by(username="api_test_user").first() + created = False + if not user: + user = User(username="api_test_user", email="api_test_user@local.test") + db.session.add(user) + db.session.commit() + created = True + return user, created + + +def _create_api_token(user): + plaintext = f"test-token-{secrets.token_urlsafe(16)}" + token = APIToken( + user_id=user.id, + token_hash=hash_token(plaintext), + name="test-api-token" + ) + db.session.add(token) + db.session.commit() + return token, plaintext + + +def test_upload_requires_file(): + with app.app_context(): + user, created_user = _get_or_create_test_user() + token_record, token = _create_api_token(user) + client = app.test_client() + + try: + response = client.post( + "/api/v1/recordings/upload", + headers={"X-API-Token": token} + ) + + if response.status_code != 400: + print(f"❌ Expected 400, got {response.status_code}") + return False + + payload = response.get_json(silent=True) or {} + if payload.get("error") != "No file provided": + print(f"❌ Unexpected error payload: {payload}") + return False + + print("✅ Token auth works and missing file returns 400 as expected") + return True + finally: + db.session.delete(token_record) + db.session.commit() + if created_user: + db.session.delete(user) + db.session.commit() + + +def main(): + print("🚀 Running API v1 upload test...\n") + ok = test_upload_requires_file() + print("\n" + ("✅ PASS" if ok else "❌ FAIL")) + sys.exit(0 if ok else 1) + + +if __name__ == "__main__": + main() diff --git a/tests/test_audit.py b/tests/test_audit.py new file mode 100644 index 0000000..cc96177 --- /dev/null +++ b/tests/test_audit.py @@ -0,0 +1,331 @@ +#!/usr/bin/env python3 +""" +Tests for the Loi 25 audit system. + +Covers: +- audit_access(): adds to session, does NOT commit +- audit_login(): commits independently +- audit_failed_login(): commits, uses email_hash (not plain email) +- _is_recent_duplicate(): deduplication window +- get_access_logs() / get_auth_logs(): pagination and filters +- Admin API endpoints: /api/admin/audit/status, /access, /auth +""" + +import os +import sys +import hashlib + +# Add the parent directory to the path to import app +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +os.environ.setdefault('SQLALCHEMY_DATABASE_URI', 'sqlite:///:memory:') +os.environ.setdefault('ENABLE_AUDIT_LOG', 'true') +os.environ['ENABLE_AUDIT_LOG'] = 'true' + +from src.app import app, db +from src.models import User +from src.models.access_log import AccessLog +from src.models.auth_log import AuthLog + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +def _make_user(username, is_admin=False): + user = User(username=username, email=f"{username}@test.local", is_admin=is_admin) + user.set_password("TestPass1!") + db.session.add(user) + db.session.commit() + return user + + +def _login_client(client, user): + """Push a real Flask-Login session for a user via test request context.""" + from flask_login import login_user + with client.session_transaction() as sess: + pass + # Use the test client's post to login + with app.test_request_context(): + login_user(user) + # Directly inject the user_id into the session cookie + with client.session_transaction() as sess: + sess['_user_id'] = str(user.id) + sess['_fresh'] = True + + +# --------------------------------------------------------------------------- +# Service-level tests +# --------------------------------------------------------------------------- + +def test_audit_access_no_commit(): + """audit_access() adds to session but does NOT commit.""" + with app.app_context(): + db.create_all() + user = _make_user("audit_no_commit") + try: + initial_count = AccessLog.query.count() + + from src.services.audit import audit_access + with app.test_request_context(): + from flask_login import login_user + login_user(user) + log = audit_access('edit', 'recording', 1, user_id=user.id) + + # Log object returned but not yet in DB (no commit happened) + assert log is not None, "audit_access should return a log object" + # The session hasn't been committed, so count is still the same + # (SQLite in :memory: — flush to verify it's in session) + db.session.flush() + assert AccessLog.query.count() == initial_count + 1, "Log should be in session after flush" + db.session.rollback() # undo — simulates caller rollback + assert AccessLog.query.count() == initial_count, "Log should be gone after rollback" + + print("✅ audit_access() does not commit") + return True + finally: + db.session.delete(user) + db.session.commit() + + +def test_audit_login_commits(): + """audit_login() commits its own transaction.""" + with app.app_context(): + db.create_all() + user = _make_user("audit_login_user") + try: + initial_count = AuthLog.query.count() + + from src.services.audit import audit_login + with app.test_request_context(): + audit_login(user.id) + + # Should be committed — visible in a fresh query + assert AuthLog.query.count() == initial_count + 1, "auth log should be committed" + log = AuthLog.query.order_by(AuthLog.id.desc()).first() + assert log.action == 'login' + assert log.user_id == user.id + + print("✅ audit_login() commits independently") + return True + finally: + AuthLog.query.filter_by(user_id=user.id).delete() + db.session.delete(user) + db.session.commit() + + +def test_audit_failed_login_uses_email_hash(): + """audit_failed_login() stores email_hash, not plain email.""" + with app.app_context(): + db.create_all() + initial_count = AuthLog.query.count() + email = "attacker-target@example.com" + email_hash = hashlib.sha256(email.lower().encode()).hexdigest()[:16] + + from src.services.audit import audit_failed_login + with app.test_request_context(): + audit_failed_login(details={'email_hash': email_hash, 'reason': 'wrong_password'}) + + assert AuthLog.query.count() == initial_count + 1 + log = AuthLog.query.order_by(AuthLog.id.desc()).first() + assert log.action == 'failed_login' + assert log.details is not None + assert 'email_hash' in log.details, "Should store email_hash, not plain email" + assert 'email' not in log.details, "Should NOT store plain email" + assert log.details['email_hash'] == email_hash + + # Cleanup + db.session.delete(log) + db.session.commit() + + print("✅ audit_failed_login() stores email_hash, not plain email") + return True + + +def test_audit_view_deduplication(): + """audit_view() on the same resource within 5 min creates only one log entry.""" + with app.app_context(): + db.create_all() + user = _make_user("audit_dedup_user") + try: + initial_count = AccessLog.query.count() + + from src.services.audit import audit_view + with app.test_request_context(): + from flask_login import login_user + login_user(user) + # First view — should log + log1 = audit_view('recording', 42, user_id=user.id) + db.session.commit() + # Second view within 5 min — should be deduped + log2 = audit_view('recording', 42, user_id=user.id) + if log2 is not None: + db.session.commit() + + count_after = AccessLog.query.filter_by( + user_id=user.id, action='view', resource_type='recording', resource_id=42 + ).count() + assert count_after == 1, f"Expected 1 log entry, got {count_after} (dedup failed)" + + print("✅ audit_view() deduplication works (5-min window)") + return True + finally: + AccessLog.query.filter_by(user_id=user.id).delete() + db.session.delete(user) + db.session.commit() + + +def test_get_access_logs_pagination(): + """get_access_logs() returns paginated results.""" + with app.app_context(): + db.create_all() + user = _make_user("audit_pag_user") + try: + # Create 5 access log entries + for i in range(5): + log = AccessLog.log_access( + action='view', resource_type='recording', resource_id=i, + user_id=user.id, status='success', + ) + db.session.add(log) + db.session.commit() + + from src.services.audit import get_access_logs + page1 = get_access_logs(page=1, per_page=3, user_id=user.id) + assert page1.total >= 5 + assert len(page1.items) == 3 + + page2 = get_access_logs(page=2, per_page=3, user_id=user.id) + assert len(page2.items) >= 2 + + print("✅ get_access_logs() pagination works") + return True + finally: + AccessLog.query.filter_by(user_id=user.id).delete() + db.session.delete(user) + db.session.commit() + + +# --------------------------------------------------------------------------- +# Admin API endpoint tests +# --------------------------------------------------------------------------- + +def test_audit_status_requires_admin(): + """GET /api/admin/audit/status: 401 anon, 403 non-admin, 200 admin.""" + with app.app_context(): + db.create_all() + regular = _make_user("audit_status_regular") + admin = _make_user("audit_status_admin", is_admin=True) + client = app.test_client() + + try: + # Anonymous — should redirect to login (302) or 401 + resp = client.get('/api/admin/audit/status') + assert resp.status_code in (401, 302), f"Expected 401/302 for anon, got {resp.status_code}" + + # Regular user — should get 403 + _login_client(client, regular) + resp = client.get('/api/admin/audit/status') + assert resp.status_code == 403, f"Expected 403 for non-admin, got {resp.status_code}" + + # Admin — should get 200 + _login_client(client, admin) + resp = client.get('/api/admin/audit/status') + assert resp.status_code == 200, f"Expected 200 for admin, got {resp.status_code}" + data = resp.get_json() + assert 'enabled' in data + + print("✅ /api/admin/audit/status access control works") + return True + finally: + db.session.delete(regular) + db.session.delete(admin) + db.session.commit() + + +def test_audit_access_logs_endpoint(): + """GET /api/admin/audit/access returns paginated logs for admin.""" + with app.app_context(): + db.create_all() + admin = _make_user("audit_access_ep_admin", is_admin=True) + client = app.test_client() + + try: + _login_client(client, admin) + resp = client.get('/api/admin/audit/access?per_page=10') + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + data = resp.get_json() + assert 'logs' in data + assert 'total' in data + assert 'page' in data + + print("✅ /api/admin/audit/access returns correct structure") + return True + finally: + db.session.delete(admin) + db.session.commit() + + +def test_audit_auth_logs_endpoint(): + """GET /api/admin/audit/auth returns paginated auth logs for admin.""" + with app.app_context(): + db.create_all() + admin = _make_user("audit_auth_ep_admin", is_admin=True) + client = app.test_client() + + try: + _login_client(client, admin) + resp = client.get('/api/admin/audit/auth?per_page=10') + assert resp.status_code == 200, f"Expected 200, got {resp.status_code}" + data = resp.get_json() + assert 'logs' in data + assert 'total' in data + + print("✅ /api/admin/audit/auth returns correct structure") + return True + finally: + db.session.delete(admin) + db.session.commit() + + +# --------------------------------------------------------------------------- +# Runner +# --------------------------------------------------------------------------- + +def main(): + print("🚀 Running audit system tests...\n") + tests = [ + test_audit_access_no_commit, + test_audit_login_commits, + test_audit_failed_login_uses_email_hash, + test_audit_view_deduplication, + test_get_access_logs_pagination, + test_audit_status_requires_admin, + test_audit_access_logs_endpoint, + test_audit_auth_logs_endpoint, + ] + + passed = 0 + failed = 0 + for test in tests: + try: + result = test() + if result: + passed += 1 + else: + print(f"❌ {test.__name__} returned False") + failed += 1 + except Exception as e: + print(f"❌ {test.__name__} raised: {e}") + import traceback + traceback.print_exc() + failed += 1 + + print(f"\n{'='*40}") + print(f"Results: {passed} passed, {failed} failed") + print("✅ ALL PASS" if failed == 0 else "❌ SOME FAILED") + sys.exit(0 if failed == 0 else 1) + + +if __name__ == "__main__": + main() diff --git a/tests/test_bugfixes.py b/tests/test_bugfixes.py new file mode 100644 index 0000000..1737c1f --- /dev/null +++ b/tests/test_bugfixes.py @@ -0,0 +1,239 @@ +#!/usr/bin/env python3 +""" +Tests for specific bug fixes. + +- Issue #230: Bulk delete crash when recordings have speaker_snippets +- Issue #223: File monitor stability time env var +""" + +import json +import os +import sys +import time +import tempfile +from pathlib import Path +from unittest.mock import patch, MagicMock + +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from src.app import app, db +from src.models import User, Recording +from src.models.speaker_snippet import SpeakerSnippet + +# Disable CSRF for testing +app.config['WTF_CSRF_ENABLED'] = False + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +def _get_or_create_user(): + user = User.query.filter_by(username="bugfix_test_user").first() + if not user: + user = User(username="bugfix_test_user", email="bugfix@local.test") + db.session.add(user) + db.session.commit() + return user + + +def _create_recording_with_snippets(user): + """Create a recording that has speaker_snippet records attached.""" + rec = Recording( + user_id=user.id, + title="Recording with snippets", + status="COMPLETED", + transcription=json.dumps([ + {"speaker": "SPEAKER_00", "sentence": "Hello there."}, + ]), + ) + db.session.add(rec) + db.session.commit() + + # We need a speaker to attach snippets to + from src.models import Speaker + speaker = Speaker.query.filter_by(user_id=user.id, name="BugfixTestSpeaker").first() + if not speaker: + speaker = Speaker(name="BugfixTestSpeaker", user_id=user.id) + db.session.add(speaker) + db.session.commit() + + snippet = SpeakerSnippet( + speaker_id=speaker.id, + recording_id=rec.id, + segment_index=0, + text_snippet="Hello there.", + ) + db.session.add(snippet) + db.session.commit() + + return rec, speaker, snippet + + +# --------------------------------------------------------------------------- +# Issue #230: Deleting recordings with speaker_snippets +# --------------------------------------------------------------------------- + +class TestIssue230BulkDeleteCascade: + """Verify that deleting a recording with speaker_snippets doesn't crash.""" + + def test_single_delete_with_snippets(self): + """Single DELETE /recording/ should succeed when snippets exist.""" + with app.app_context(): + user = _get_or_create_user() + rec, speaker, snippet = _create_recording_with_snippets(user) + rec_id = rec.id + snippet_id = snippet.id + + with app.test_client() as client: + # Login + with client.session_transaction() as sess: + sess['_user_id'] = str(user.id) + + resp = client.delete(f'/recording/{rec_id}') + assert resp.status_code == 200, f"Delete failed: {resp.get_json()}" + data = resp.get_json() + assert data.get('success') is True + + # Verify snippet was also deleted + orphan = db.session.get(SpeakerSnippet, snippet_id) + assert orphan is None, "Speaker snippet should have been deleted with recording" + + # Cleanup speaker + db.session.delete(speaker) + db.session.commit() + + def test_bulk_delete_with_snippets(self): + """DELETE /api/recordings/bulk should succeed when snippets exist.""" + with app.app_context(): + user = _get_or_create_user() + rec, speaker, snippet = _create_recording_with_snippets(user) + rec_id = rec.id + snippet_id = snippet.id + + with app.test_client() as client: + with client.session_transaction() as sess: + sess['_user_id'] = str(user.id) + + resp = client.delete( + '/api/recordings/bulk', + json={'recording_ids': [rec_id]}, + content_type='application/json', + ) + assert resp.status_code == 200, f"Bulk delete failed: {resp.get_json()}" + data = resp.get_json() + assert data.get('success') is True + assert rec_id in data.get('deleted_ids', []) + + # Verify snippet was also deleted + orphan = db.session.get(SpeakerSnippet, snippet_id) + assert orphan is None, "Speaker snippet should have been deleted with recording" + + # Cleanup speaker + db.session.delete(speaker) + db.session.commit() + + def test_bulk_delete_multiple_with_snippets(self): + """Bulk deleting multiple recordings (some with snippets) should succeed.""" + with app.app_context(): + user = _get_or_create_user() + rec1, speaker, snippet = _create_recording_with_snippets(user) + rec2 = Recording(user_id=user.id, title="No snippets", status="COMPLETED") + db.session.add(rec2) + db.session.commit() + + rec1_id, rec2_id = rec1.id, rec2.id + + with app.test_client() as client: + with client.session_transaction() as sess: + sess['_user_id'] = str(user.id) + + resp = client.delete( + '/api/recordings/bulk', + json={'recording_ids': [rec1_id, rec2_id]}, + content_type='application/json', + ) + assert resp.status_code == 200, f"Bulk delete failed: {resp.get_json()}" + data = resp.get_json() + assert data.get('deleted_count') == 2 + + # Cleanup speaker + db.session.delete(speaker) + db.session.commit() + + +# --------------------------------------------------------------------------- +# Issue #223: File monitor stability time +# --------------------------------------------------------------------------- + +class TestIssue223StabilityTime: + """Verify AUTO_PROCESS_STABILITY_TIME env var is respected.""" + + def test_default_stability_time(self): + """Without env var, stability_time defaults to 5.""" + from src.file_monitor import FileMonitor + monitor = FileMonitor.__new__(FileMonitor) + monitor.logger = MagicMock() + + with tempfile.NamedTemporaryFile(suffix='.wav', delete=False) as f: + f.write(b'fake audio data') + tmp_path = Path(f.name) + + try: + with patch.dict(os.environ, {}, clear=False): + # Remove the env var if it exists + os.environ.pop('AUTO_PROCESS_STABILITY_TIME', None) + with patch('time.sleep') as mock_sleep: + monitor._is_file_stable(tmp_path) + mock_sleep.assert_called_once_with(5) + finally: + tmp_path.unlink(missing_ok=True) + + def test_custom_stability_time(self): + """AUTO_PROCESS_STABILITY_TIME=15 should sleep for 15 seconds.""" + from src.file_monitor import FileMonitor + monitor = FileMonitor.__new__(FileMonitor) + monitor.logger = MagicMock() + + with tempfile.NamedTemporaryFile(suffix='.wav', delete=False) as f: + f.write(b'fake audio data') + tmp_path = Path(f.name) + + try: + with patch.dict(os.environ, {'AUTO_PROCESS_STABILITY_TIME': '15'}): + with patch('time.sleep') as mock_sleep: + # _is_file_stable uses the default param, but the caller reads env + # So we test the caller path via _scan_user_directory indirectly + # or just call with explicit value + stability_time = int(os.environ.get('AUTO_PROCESS_STABILITY_TIME', '5')) + monitor._is_file_stable(tmp_path, stability_time) + mock_sleep.assert_called_once_with(15) + finally: + tmp_path.unlink(missing_ok=True) + + def test_no_hardcoded_cap(self): + """Stability time should NOT be capped at 2 seconds anymore.""" + from src.file_monitor import FileMonitor + monitor = FileMonitor.__new__(FileMonitor) + monitor.logger = MagicMock() + + with tempfile.NamedTemporaryFile(suffix='.wav', delete=False) as f: + f.write(b'fake audio data') + tmp_path = Path(f.name) + + try: + with patch('time.sleep') as mock_sleep: + monitor._is_file_stable(tmp_path, stability_time=30) + # Should sleep for 30, NOT min(30, 2) = 2 + mock_sleep.assert_called_once_with(30) + finally: + tmp_path.unlink(missing_ok=True) + + +# --------------------------------------------------------------------------- +# Runner +# --------------------------------------------------------------------------- + +if __name__ == "__main__": + import pytest + sys.exit(pytest.main([__file__, "-v"])) diff --git a/tests/test_connector_architecture.py b/tests/test_connector_architecture.py new file mode 100644 index 0000000..028e5e2 --- /dev/null +++ b/tests/test_connector_architecture.py @@ -0,0 +1,564 @@ +#!/usr/bin/env python3 +""" +Test script for the transcription connector architecture. + +This script tests: +1. Connector auto-detection from environment variables +2. Backwards compatibility with legacy config +3. Connector specifications and capabilities +4. Chunking logic (connector-aware) +5. Codec handling per connector +6. Request/Response data types + +Run with: docker exec speakr-dev python /app/tests/test_connector_architecture.py +""" + +import os +import sys +import io +import json +from pathlib import Path + +# Add parent directory to path for imports +sys.path.insert(0, str(Path(__file__).parent.parent)) + +# Test results tracking +PASSED = 0 +FAILED = 0 +ERRORS = [] + + +def run_test(name, func): + """Run a test function and track results.""" + global PASSED, FAILED, ERRORS + try: + func() + print(f" ✓ {name}") + PASSED += 1 + except AssertionError as e: + print(f" ✗ {name}: {e}") + FAILED += 1 + ERRORS.append((name, str(e))) + except Exception as e: + print(f" ✗ {name}: EXCEPTION - {e}") + FAILED += 1 + ERRORS.append((name, f"Exception: {e}")) + + +def clear_env(): + """Clear all transcription-related environment variables.""" + keys_to_clear = [ + 'TRANSCRIPTION_CONNECTOR', 'TRANSCRIPTION_API_KEY', 'TRANSCRIPTION_BASE_URL', + 'TRANSCRIPTION_MODEL', 'WHISPER_MODEL', 'USE_ASR_ENDPOINT', 'ASR_BASE_URL', + 'ASR_DIARIZE', 'ASR_RETURN_SPEAKER_EMBEDDINGS', 'ASR_TIMEOUT', + 'ASR_MIN_SPEAKERS', 'ASR_MAX_SPEAKERS', 'ENABLE_CHUNKING', 'CHUNK_LIMIT', + 'CHUNK_OVERLAP_SECONDS', 'AUDIO_UNSUPPORTED_CODECS', + ] + for key in keys_to_clear: + os.environ.pop(key, None) + + +def reset_registry(): + """Reset the connector registry singleton.""" + from src.services.transcription import registry + registry._registry = None + registry.ConnectorRegistry._instance = None + registry.ConnectorRegistry._initialized = False + registry.ConnectorRegistry._active_connector = None + registry.ConnectorRegistry._connector_name = "" + + +# ============================================================================= +# TEST SECTION 1: Base Classes and Data Types +# ============================================================================= + +def test_base_classes(): + """Test base classes and data types.""" + print("\n=== Testing Base Classes ===") + + from src.services.transcription.base import ( + TranscriptionCapability, ConnectorSpecifications, TranscriptionRequest, + TranscriptionResponse, TranscriptionSegment, + ) + + def t1(): + assert TranscriptionCapability.DIARIZATION is not None + assert TranscriptionCapability.TIMESTAMPS is not None + assert TranscriptionCapability.SPEAKER_COUNT_CONTROL is not None + run_test("TranscriptionCapability enum has expected values", t1) + + def t2(): + specs = ConnectorSpecifications() + assert specs.max_file_size_bytes is None + assert specs.handles_chunking_internally is False + assert specs.recommended_chunk_seconds == 600 + run_test("ConnectorSpecifications has correct defaults", t2) + + def t3(): + specs = ConnectorSpecifications( + max_file_size_bytes=25 * 1024 * 1024, + handles_chunking_internally=True, + unsupported_codecs=frozenset({'opus'}) + ) + assert specs.max_file_size_bytes == 25 * 1024 * 1024 + assert 'opus' in specs.unsupported_codecs + run_test("ConnectorSpecifications with custom values", t3) + + def t4(): + audio = io.BytesIO(b"fake audio data") + request = TranscriptionRequest(audio_file=audio, filename="test.wav", diarize=True) + assert request.filename == "test.wav" + assert request.diarize is True + run_test("TranscriptionRequest creation", t4) + + def t5(): + segments = [ + TranscriptionSegment(text="Hello", speaker="SPEAKER_00", start_time=0.0, end_time=1.0), + TranscriptionSegment(text="World", speaker="SPEAKER_01", start_time=1.0, end_time=2.0), + ] + response = TranscriptionResponse(text="Hello World", segments=segments, provider="test") + storage = response.to_storage_format() + data = json.loads(storage) + assert len(data) == 2 + assert data[0]['speaker'] == "SPEAKER_00" + run_test("TranscriptionResponse to_storage_format", t5) + + def t6(): + segments = [TranscriptionSegment(text="Hello", speaker="SPEAKER_00")] + response = TranscriptionResponse(text="Hello", segments=segments) + assert response.has_diarization() is True + + response2 = TranscriptionResponse(text="Hello", segments=None) + assert response2.has_diarization() is False + run_test("TranscriptionResponse has_diarization", t6) + + +# ============================================================================= +# TEST SECTION 2: Connector Auto-Detection +# ============================================================================= + +def test_auto_detection(): + """Test connector auto-detection from environment variables.""" + print("\n=== Testing Connector Auto-Detection ===") + + from src.services.transcription.registry import get_registry + + def t1(): + clear_env() + reset_registry() + os.environ['TRANSCRIPTION_CONNECTOR'] = 'openai_whisper' + os.environ['TRANSCRIPTION_API_KEY'] = 'test-key' + os.environ['ASR_BASE_URL'] = 'http://should-be-ignored:9000' + registry = get_registry() + registry.initialize_from_env() + assert registry.get_active_connector_name() == 'openai_whisper' + run_test("Explicit TRANSCRIPTION_CONNECTOR takes priority", t1) + + def t2(): + clear_env() + reset_registry() + os.environ['ASR_BASE_URL'] = 'http://whisperx:9000' + registry = get_registry() + registry.initialize_from_env() + assert registry.get_active_connector_name() == 'asr_endpoint' + run_test("ASR_BASE_URL auto-detects asr_endpoint", t2) + + def t3(): + clear_env() + reset_registry() + os.environ['USE_ASR_ENDPOINT'] = 'true' + os.environ['ASR_BASE_URL'] = 'http://whisperx:9000' + registry = get_registry() + registry.initialize_from_env() + assert registry.get_active_connector_name() == 'asr_endpoint' + run_test("Legacy USE_ASR_ENDPOINT=true still works", t3) + + def t4(): + clear_env() + reset_registry() + os.environ['TRANSCRIPTION_API_KEY'] = 'test-key' + os.environ['TRANSCRIPTION_MODEL'] = 'gpt-4o-transcribe-diarize' + registry = get_registry() + registry.initialize_from_env() + assert registry.get_active_connector_name() == 'openai_transcribe' + run_test("gpt-4o model auto-detects openai_transcribe", t4) + + def t5(): + clear_env() + reset_registry() + os.environ['TRANSCRIPTION_API_KEY'] = 'test-key' + os.environ['TRANSCRIPTION_MODEL'] = 'whisper-1' + registry = get_registry() + registry.initialize_from_env() + assert registry.get_active_connector_name() == 'openai_whisper' + run_test("whisper-1 model uses openai_whisper", t5) + + def t6(): + clear_env() + reset_registry() + os.environ['TRANSCRIPTION_API_KEY'] = 'test-key' + os.environ['WHISPER_MODEL'] = 'whisper-1' + registry = get_registry() + registry.initialize_from_env() + assert registry.get_active_connector_name() == 'openai_whisper' + run_test("Legacy WHISPER_MODEL still works", t6) + + def t7(): + clear_env() + reset_registry() + os.environ['TRANSCRIPTION_API_KEY'] = 'test-key' + registry = get_registry() + registry.initialize_from_env() + assert registry.get_active_connector_name() == 'openai_whisper' + run_test("Default falls back to openai_whisper", t7) + + +# ============================================================================= +# TEST SECTION 3: Connector Specifications +# ============================================================================= + +def test_connector_specifications(): + """Test connector specifications are correctly defined.""" + print("\n=== Testing Connector Specifications ===") + + from src.services.transcription.connectors.openai_whisper import OpenAIWhisperConnector + from src.services.transcription.connectors.openai_transcribe import OpenAITranscribeConnector + from src.services.transcription.connectors.asr_endpoint import ASREndpointConnector + from src.services.transcription.base import TranscriptionCapability + + def t1(): + specs = OpenAIWhisperConnector.SPECIFICATIONS + assert specs.max_file_size_bytes == 25 * 1024 * 1024 + assert specs.handles_chunking_internally is False + run_test("OpenAI Whisper has 25MB limit", t1) + + def t2(): + specs = OpenAIWhisperConnector.SPECIFICATIONS + assert specs.unsupported_codecs is not None + assert 'opus' in specs.unsupported_codecs + run_test("OpenAI Whisper declares opus as unsupported", t2) + + def t3(): + specs = OpenAITranscribeConnector.SPECIFICATIONS + assert specs.handles_chunking_internally is True + assert specs.requires_chunking_param is True + run_test("OpenAI Transcribe has internal chunking", t3) + + def t4(): + specs = ASREndpointConnector.SPECIFICATIONS + assert specs.max_file_size_bytes is None + assert specs.handles_chunking_internally is True + run_test("ASR Endpoint has no limits (handles internally)", t4) + + def t5(): + assert TranscriptionCapability.DIARIZATION not in OpenAIWhisperConnector.CAPABILITIES + run_test("OpenAI Whisper does NOT support diarization", t5) + + def t6(): + # Diarization is added dynamically based on model at instance level + connector = OpenAITranscribeConnector({'api_key': 'test', 'model': 'gpt-4o-transcribe-diarize'}) + assert TranscriptionCapability.DIARIZATION in connector.CAPABILITIES + assert connector.supports_diarization is True + run_test("OpenAI Transcribe with diarize model supports diarization", t6) + + def t7(): + assert TranscriptionCapability.DIARIZATION in ASREndpointConnector.CAPABILITIES + assert TranscriptionCapability.SPEAKER_COUNT_CONTROL in ASREndpointConnector.CAPABILITIES + run_test("ASR Endpoint supports diarization and speaker count control", t7) + + def t8(): + assert TranscriptionCapability.SPEAKER_COUNT_CONTROL not in OpenAIWhisperConnector.CAPABILITIES + assert TranscriptionCapability.SPEAKER_COUNT_CONTROL not in OpenAITranscribeConnector.CAPABILITIES + run_test("OpenAI connectors do NOT support speaker count control", t8) + + +# ============================================================================= +# TEST SECTION 4: Chunking Logic +# ============================================================================= + +def test_chunking_logic(): + """Test connector-aware chunking logic.""" + print("\n=== Testing Chunking Logic ===") + + from src.audio_chunking import get_effective_chunking_config + from src.services.transcription.base import ConnectorSpecifications + + def t1(): + clear_env() + os.environ['ENABLE_CHUNKING'] = 'true' + os.environ['CHUNK_LIMIT'] = '20MB' + specs = ConnectorSpecifications(handles_chunking_internally=True) + config = get_effective_chunking_config(specs) + assert config.enabled is False + assert config.source == 'connector_internal' + run_test("Connector with internal chunking disables app chunking", t1) + + def t2(): + clear_env() + os.environ['ENABLE_CHUNKING'] = 'true' + os.environ['CHUNK_LIMIT'] = '15MB' + os.environ['CHUNK_OVERLAP_SECONDS'] = '5' + specs = ConnectorSpecifications(handles_chunking_internally=False) + config = get_effective_chunking_config(specs) + assert config.enabled is True + assert config.source == 'env' + assert config.mode == 'size' + assert config.limit_value == 15.0 + run_test("Connector without internal chunking uses ENV settings", t2) + + def t3(): + clear_env() + os.environ['ENABLE_CHUNKING'] = 'false' + specs = ConnectorSpecifications(handles_chunking_internally=False) + config = get_effective_chunking_config(specs) + assert config.enabled is False + assert config.source == 'disabled' + run_test("ENABLE_CHUNKING=false disables chunking", t3) + + def t4(): + clear_env() + os.environ['ENABLE_CHUNKING'] = 'true' + os.environ['CHUNK_LIMIT'] = '10m' + specs = ConnectorSpecifications(handles_chunking_internally=False) + config = get_effective_chunking_config(specs) + assert config.enabled is True + assert config.mode == 'duration' + assert config.limit_value == 600.0 + run_test("Duration-based chunk limit parsing (10m = 600s)", t4) + + +# ============================================================================= +# TEST SECTION 5: Codec Handling +# ============================================================================= + +def test_codec_handling(): + """Test codec handling with connector specifications.""" + print("\n=== Testing Codec Handling ===") + + from src.services.transcription.base import ConnectorSpecifications + + def reload_audio_module(): + """Properly reload audio_conversion module with fresh env vars.""" + import sys + # Remove relevant modules from cache to force fresh import + # app_config reads AUDIO_UNSUPPORTED_CODECS at import time + for mod_name in list(sys.modules.keys()): + if mod_name.startswith('src.utils') or mod_name.startswith('src.config'): + del sys.modules[mod_name] + from src.utils import audio_conversion + return audio_conversion + + def t1(): + clear_env() + mod = reload_audio_module() + codecs = mod.get_supported_codecs() + assert 'mp3' in codecs + assert 'flac' in codecs + run_test("Default supported codecs include common formats", t1) + + def t2(): + clear_env() + mod = reload_audio_module() + specs = ConnectorSpecifications(unsupported_codecs=frozenset({'opus', 'vorbis'})) + codecs = mod.get_supported_codecs(connector_specs=specs) + assert 'opus' not in codecs + assert 'vorbis' not in codecs + assert 'mp3' in codecs + run_test("Connector unsupported_codecs removes from defaults", t2) + + def t3(): + clear_env() + os.environ['AUDIO_UNSUPPORTED_CODECS'] = 'aac,opus' + mod = reload_audio_module() + codecs = mod.get_supported_codecs() + assert 'aac' not in codecs, f"aac should not be in {codecs}" + assert 'opus' not in codecs, f"opus should not be in {codecs}" + run_test("AUDIO_UNSUPPORTED_CODECS env var still works", t3) + + def t4(): + clear_env() + os.environ['AUDIO_UNSUPPORTED_CODECS'] = 'aac' + mod = reload_audio_module() + specs = ConnectorSpecifications(unsupported_codecs=frozenset({'opus'})) + codecs = mod.get_supported_codecs(connector_specs=specs) + assert 'aac' not in codecs, f"aac should not be in {codecs}" + assert 'opus' not in codecs, f"opus should not be in {codecs}" + assert 'mp3' in codecs + run_test("Both connector specs and ENV var work together", t4) + + +# ============================================================================= +# TEST SECTION 6: Connector Capabilities +# ============================================================================= + +def test_connector_capabilities(): + """Test connector capabilities are exposed correctly.""" + print("\n=== Testing Connector Capabilities ===") + + from src.services.transcription.connectors.asr_endpoint import ASREndpointConnector + from src.services.transcription.connectors.openai_transcribe import OpenAITranscribeConnector + from src.services.transcription.base import TranscriptionCapability + + def t1(): + connector = ASREndpointConnector({'base_url': 'http://test:9000'}) + assert connector.supports_diarization is True + run_test("ASR connector supports_diarization property", t1) + + def t2(): + connector = ASREndpointConnector({'base_url': 'http://test:9000'}) + assert connector.supports_speaker_count_control is True + run_test("ASR connector supports_speaker_count_control property", t2) + + def t3(): + connector = OpenAITranscribeConnector({'api_key': 'test-key', 'model': 'gpt-4o-transcribe-diarize'}) + assert connector.supports_diarization is True + assert connector.supports_speaker_count_control is False + run_test("OpenAI Transcribe supports diarization but not speaker_count_control", t3) + + def t4(): + connector = ASREndpointConnector({'base_url': 'http://test:9000'}) + assert connector.supports(TranscriptionCapability.DIARIZATION) is True + assert connector.supports(TranscriptionCapability.STREAMING) is False + run_test("supports() method works correctly", t4) + + +# ============================================================================= +# TEST SECTION 7: Registry Operations +# ============================================================================= + +def test_registry_operations(): + """Test registry listing and connector info.""" + print("\n=== Testing Registry Operations ===") + + from src.services.transcription.registry import get_registry + + def t1(): + clear_env() + reset_registry() + registry = get_registry() + connectors = registry.list_connectors() + names = [c['name'] for c in connectors] + assert 'openai_whisper' in names + assert 'openai_transcribe' in names + assert 'asr_endpoint' in names + run_test("Registry lists all built-in connectors", t1) + + def t2(): + clear_env() + reset_registry() + registry = get_registry() + connectors = registry.list_connectors() + asr = next(c for c in connectors if c['name'] == 'asr_endpoint') + assert 'DIARIZATION' in asr['capabilities'] + assert 'SPEAKER_COUNT_CONTROL' in asr['capabilities'] + run_test("Connector info includes capabilities", t2) + + def t3(): + clear_env() + reset_registry() + os.environ['TRANSCRIPTION_API_KEY'] = 'test-key' + os.environ['TRANSCRIPTION_MODEL'] = 'whisper-1' + registry = get_registry() + registry.initialize_from_env() + assert registry.get_active_connector_name() == 'openai_whisper' + + os.environ['TRANSCRIPTION_MODEL'] = 'gpt-4o-transcribe-diarize' + registry.reinitialize() + assert registry.get_active_connector_name() == 'openai_transcribe' + run_test("reinitialize() resets the active connector", t3) + + +# ============================================================================= +# TEST SECTION 8: Edge Cases +# ============================================================================= + +def test_edge_cases(): + """Test edge cases and error handling.""" + print("\n=== Testing Edge Cases ===") + + from src.services.transcription.registry import get_registry + from src.services.transcription.exceptions import ConfigurationError + from src.services.transcription.base import TranscriptionResponse, TranscriptionSegment + + def t1(): + # Empty segments list returns the text (empty string), not "[]" + response = TranscriptionResponse(text="", segments=[], provider="test") + assert response.to_storage_format() == "" + assert response.has_diarization() is False + run_test("Empty transcription response handling", t1) + + def t2(): + segments = [TranscriptionSegment(text="Hello", speaker=None)] + response = TranscriptionResponse(text="Hello", segments=segments) + storage = response.to_storage_format() + data = json.loads(storage) + assert data[0]['speaker'] == 'Unknown Speaker' + run_test("Transcription with unknown speaker handling", t2) + + def t3(): + clear_env() + reset_registry() + os.environ['TRANSCRIPTION_CONNECTOR'] = 'nonexistent_connector' + registry = get_registry() + try: + registry.initialize_from_env() + assert False, "Should have raised ConfigurationError" + except ConfigurationError as e: + assert 'Unknown connector' in str(e) + run_test("Invalid connector name raises ConfigurationError", t3) + + def t4(): + from src.services.transcription.connectors.asr_endpoint import ASREndpointConnector + try: + ASREndpointConnector({}) + assert False, "Should have raised ConfigurationError" + except ConfigurationError as e: + assert 'base_url' in str(e) + run_test("ASR connector validates base_url is required", t4) + + def t5(): + clear_env() + reset_registry() + os.environ['ASR_BASE_URL'] = 'http://whisperx:9000 # This is a comment' + registry = get_registry() + connector = registry.initialize_from_env() + assert connector.base_url == 'http://whisperx:9000' + run_test("ASR_BASE_URL with trailing comment is handled", t5) + + +# ============================================================================= +# Main +# ============================================================================= + +def main(): + """Run all tests.""" + global PASSED, FAILED, ERRORS + + print("=" * 60) + print("Transcription Connector Architecture Tests") + print("=" * 60) + + test_base_classes() + test_auto_detection() + test_connector_specifications() + test_chunking_logic() + test_codec_handling() + test_connector_capabilities() + test_registry_operations() + test_edge_cases() + + print("\n" + "=" * 60) + print(f"RESULTS: {PASSED} passed, {FAILED} failed") + print("=" * 60) + + if ERRORS: + print("\nFailed tests:") + for name, error in ERRORS: + print(f" - {name}: {error}") + + clear_env() + return 0 if FAILED == 0 else 1 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/tests/test_ffprobe_codec_detection.py b/tests/test_ffprobe_codec_detection.py new file mode 100644 index 0000000..be7f70b --- /dev/null +++ b/tests/test_ffprobe_codec_detection.py @@ -0,0 +1,319 @@ +#!/usr/bin/env python3 +""" +Test script for ffprobe codec detection functionality. + +This script tests the new codec-based detection system to ensure it correctly +identifies audio codecs, video files, and lossless formats. +""" + +import os +import sys +import tempfile +import subprocess +from pathlib import Path + +# Add parent directory to path for imports +sys.path.insert(0, str(Path(__file__).parent.parent)) + +from src.utils.ffprobe import ( + get_codec_info, + is_video_file, + is_audio_file, + get_audio_codec, + needs_audio_conversion, + is_lossless_audio, + get_duration, + FFProbeError +) + + +def create_test_audio_file(codec, output_path, duration=1.0): + """Create a test audio file with specific codec.""" + codec_map = { + 'mp3': ['ffmpeg', '-f', 'lavfi', '-i', f'sine=frequency=440:duration={duration}', '-acodec', 'libmp3lame', '-b:a', '128k', output_path], + 'aac': ['ffmpeg', '-f', 'lavfi', '-i', f'sine=frequency=440:duration={duration}', '-acodec', 'aac', '-b:a', '128k', output_path], + 'opus': ['ffmpeg', '-f', 'lavfi', '-i', f'sine=frequency=440:duration={duration}', '-acodec', 'libopus', '-b:a', '64k', output_path], + 'flac': ['ffmpeg', '-f', 'lavfi', '-i', f'sine=frequency=440:duration={duration}', '-acodec', 'flac', output_path], + 'pcm_s16le': ['ffmpeg', '-f', 'lavfi', '-i', f'sine=frequency=440:duration={duration}', '-acodec', 'pcm_s16le', '-ar', '44100', output_path], + 'vorbis': ['ffmpeg', '-f', 'lavfi', '-i', f'sine=frequency=440:duration={duration}', '-acodec', 'libvorbis', '-b:a', '128k', output_path], + } + + if codec not in codec_map: + raise ValueError(f"Unknown codec: {codec}") + + subprocess.run(codec_map[codec], check=True, capture_output=True) + + +def create_test_video_file(output_path, duration=1.0): + """Create a test video file with audio.""" + subprocess.run([ + 'ffmpeg', '-f', 'lavfi', '-i', f'testsrc=duration={duration}:size=320x240:rate=1', + '-f', 'lavfi', '-i', f'sine=frequency=440:duration={duration}', + '-acodec', 'aac', '-vcodec', 'libx264', '-pix_fmt', 'yuv420p', + output_path + ], check=True, capture_output=True) + + +def test_codec_detection(): + """Test basic codec detection.""" + print("\n=== Testing Codec Detection ===\n") + + with tempfile.TemporaryDirectory() as tmpdir: + test_files = { + 'mp3': 'test.mp3', + 'aac': 'test.m4a', + 'opus': 'test.opus', + 'flac': 'test.flac', + 'pcm_s16le': 'test.wav', + 'vorbis': 'test.ogg', + } + + for codec, filename in test_files.items(): + filepath = os.path.join(tmpdir, filename) + try: + print(f"Creating test file: {filename} with codec {codec}...") + create_test_audio_file(codec, filepath) + + print(f" Probing {filename}...") + codec_info = get_codec_info(filepath) + + detected_codec = codec_info['audio_codec'] + print(f" ✓ Detected codec: {detected_codec}") + print(f" Has audio: {codec_info['has_audio']}") + print(f" Has video: {codec_info['has_video']}") + print(f" Format: {codec_info['format_name']}") + print(f" Duration: {codec_info['duration']:.2f}s" if codec_info['duration'] else " Duration: N/A") + + if detected_codec != codec: + print(f" ⚠️ Warning: Expected {codec}, got {detected_codec}") + + print() + + except Exception as e: + print(f" ✗ Failed to test {codec}: {e}\n") + + +def test_video_detection(): + """Test video file detection.""" + print("\n=== Testing Video Detection ===\n") + + with tempfile.TemporaryDirectory() as tmpdir: + video_path = os.path.join(tmpdir, 'test_video.mp4') + audio_path = os.path.join(tmpdir, 'test_audio.mp3') + + try: + print("Creating test video file...") + create_test_video_file(video_path) + + print("Creating test audio file...") + create_test_audio_file('mp3', audio_path) + + print(f"\nProbing video file...") + codec_info = get_codec_info(video_path) + print(f" Audio codec: {codec_info['audio_codec']}") + print(f" Video codec: {codec_info['video_codec']}") + print(f" Has audio: {codec_info['has_audio']}") + print(f" Has video: {codec_info['has_video']}") + + is_video = is_video_file(video_path) + print(f" is_video_file(): {is_video}") + + if not is_video: + print(" ✗ Video file not detected as video!") + else: + print(" ✓ Video file correctly detected") + + print(f"\nProbing audio file...") + codec_info = get_codec_info(audio_path) + print(f" Audio codec: {codec_info['audio_codec']}") + print(f" Video codec: {codec_info['video_codec']}") + print(f" Has audio: {codec_info['has_audio']}") + print(f" Has video: {codec_info['has_video']}") + + is_video = is_video_file(audio_path) + print(f" is_video_file(): {is_video}") + + if is_video: + print(" ✗ Audio file incorrectly detected as video!") + else: + print(" ✓ Audio file correctly identified as audio-only") + + print() + + except Exception as e: + print(f"✗ Failed to test video detection: {e}\n") + + +def test_lossless_detection(): + """Test lossless audio detection.""" + print("\n=== Testing Lossless Detection ===\n") + + with tempfile.TemporaryDirectory() as tmpdir: + test_cases = { + 'pcm_s16le': ('test.wav', True), + 'flac': ('test.flac', True), + 'mp3': ('test.mp3', False), + 'aac': ('test.m4a', False), + 'opus': ('test.opus', False), + } + + for codec, (filename, expected_lossless) in test_cases.items(): + filepath = os.path.join(tmpdir, filename) + try: + print(f"Creating {filename} with codec {codec}...") + create_test_audio_file(codec, filepath) + + is_lossless = is_lossless_audio(filepath) + status = "✓" if is_lossless == expected_lossless else "✗" + + print(f" {status} {codec}: is_lossless={is_lossless} (expected {expected_lossless})") + + except Exception as e: + print(f" ✗ Failed to test {codec}: {e}") + + print() + + +def test_conversion_check(): + """Test conversion requirement detection.""" + print("\n=== Testing Conversion Check ===\n") + + with tempfile.TemporaryDirectory() as tmpdir: + # Supported codecs for direct transcription + supported_codecs = ['pcm_s16le', 'mp3', 'flac', 'opus', 'aac'] + + test_cases = { + 'mp3': ('test.mp3', False), # Supported, no conversion needed + 'aac': ('test.m4a', False), # Supported, no conversion needed + 'opus': ('test.opus', False), # Supported, no conversion needed + 'vorbis': ('test.ogg', True), # Not in supported list, needs conversion + } + + for codec, (filename, should_convert) in test_cases.items(): + filepath = os.path.join(tmpdir, filename) + try: + print(f"Creating {filename} with codec {codec}...") + create_test_audio_file(codec, filepath) + + needs_conversion, detected_codec = needs_audio_conversion(filepath, supported_codecs) + status = "✓" if needs_conversion == should_convert else "✗" + + print(f" {status} {codec}: needs_conversion={needs_conversion} (expected {should_convert})") + print(f" Detected codec: {detected_codec}") + + except Exception as e: + print(f" ✗ Failed to test {codec}: {e}") + + print() + + +def test_misnamed_file(): + """Test detection of files with wrong extensions.""" + print("\n=== Testing Misnamed File Detection ===\n") + + with tempfile.TemporaryDirectory() as tmpdir: + # Create an MP3 file but name it .wav + wrong_name_path = os.path.join(tmpdir, 'actually_mp3.wav') + + try: + print("Creating MP3 file with .wav extension...") + create_test_audio_file('mp3', wrong_name_path) + + codec_info = get_codec_info(wrong_name_path) + detected_codec = codec_info['audio_codec'] + + print(f" Filename: actually_mp3.wav") + print(f" Detected codec: {detected_codec}") + + if detected_codec == 'mp3': + print(" ✓ Correctly detected MP3 codec despite .wav extension") + else: + print(f" ✗ Incorrectly detected as {detected_codec}") + + # Create a FLAC file but name it .mp3 + wrong_name_path2 = os.path.join(tmpdir, 'actually_flac.mp3') + print("\nCreating FLAC file with .mp3 extension...") + create_test_audio_file('flac', wrong_name_path2) + + codec_info = get_codec_info(wrong_name_path2) + detected_codec = codec_info['audio_codec'] + + print(f" Filename: actually_flac.mp3") + print(f" Detected codec: {detected_codec}") + + if detected_codec == 'flac': + print(" ✓ Correctly detected FLAC codec despite .mp3 extension") + else: + print(f" ✗ Incorrectly detected as {detected_codec}") + + print() + + except Exception as e: + print(f"✗ Failed to test misnamed files: {e}\n") + + +def test_duration(): + """Test duration extraction.""" + print("\n=== Testing Duration Extraction ===\n") + + with tempfile.TemporaryDirectory() as tmpdir: + durations = [1.0, 2.5, 5.0] + + for expected_duration in durations: + filepath = os.path.join(tmpdir, f'test_{expected_duration}s.mp3') + try: + print(f"Creating {expected_duration}s audio file...") + create_test_audio_file('mp3', filepath, duration=expected_duration) + + detected_duration = get_duration(filepath) + + # Allow 0.1s tolerance for encoding variations + if detected_duration and abs(detected_duration - expected_duration) < 0.1: + print(f" ✓ Duration: {detected_duration:.2f}s (expected {expected_duration}s)") + else: + print(f" ✗ Duration: {detected_duration:.2f}s (expected {expected_duration}s)") + + except Exception as e: + print(f" ✗ Failed to test duration: {e}") + + print() + + +def main(): + """Run all tests.""" + print("=" * 60) + print("FFProbe Codec Detection Test Suite") + print("=" * 60) + + # Check if ffmpeg/ffprobe are available + try: + subprocess.run(['ffprobe', '-version'], capture_output=True, check=True) + subprocess.run(['ffmpeg', '-version'], capture_output=True, check=True) + except (FileNotFoundError, subprocess.CalledProcessError): + print("\n✗ Error: ffmpeg/ffprobe not found. Please install ffmpeg to run tests.\n") + return 1 + + try: + test_codec_detection() + test_video_detection() + test_lossless_detection() + test_conversion_check() + test_misnamed_file() + test_duration() + + print("=" * 60) + print("All tests completed!") + print("=" * 60) + print() + + return 0 + + except Exception as e: + print(f"\n✗ Test suite failed with error: {e}\n") + import traceback + traceback.print_exc() + return 1 + + +if __name__ == '__main__': + sys.exit(main()) \ No newline at end of file diff --git a/tests/test_hotwords.sh b/tests/test_hotwords.sh new file mode 100755 index 0000000..88cb69b --- /dev/null +++ b/tests/test_hotwords.sh @@ -0,0 +1,241 @@ +#!/bin/bash +# test_hotwords.sh - Test hotwords and initial_prompt features +# +# Usage: +# ./tests/test_hotwords.sh +# ./tests/test_hotwords.sh http://localhost:9000 temp/Recording\ 4.flac +# +# The audio should contain domain-specific words that Whisper tends to +# misspell (brand names, acronyms, unusual proper nouns). The script runs +# three transcriptions and compares the results. + +set -euo pipefail + +ASR_URL="${1:-http://localhost:9000}" +AUDIO_FILE="${2:-temp/Recording 4.flac}" +OUTPUT_DIR="temp/hotwords_test_results" + +# Colors +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +CYAN='\033[0;36m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +# Configurable test values - adjust these for your audio +HOTWORDS="Speakr,CTranslate2,PyAnnote,WhisperX" +INITIAL_PROMPT="This is a meeting about AI-powered audio transcription tools including Speakr, CTranslate2, and PyAnnote." + +echo -e "${CYAN}============================================${NC}" +echo -e "${CYAN} Hotwords & Initial Prompt Test Suite${NC}" +echo -e "${CYAN}============================================${NC}" +echo "" +echo -e "ASR URL: ${YELLOW}${ASR_URL}${NC}" +echo -e "Audio file: ${YELLOW}${AUDIO_FILE}${NC}" +echo -e "Hotwords: ${YELLOW}${HOTWORDS}${NC}" +echo -e "Initial prompt: ${YELLOW}${INITIAL_PROMPT}${NC}" +echo "" + +# Verify audio file exists +if [ ! -f "$AUDIO_FILE" ]; then + echo -e "${RED}ERROR: Audio file not found: ${AUDIO_FILE}${NC}" + exit 1 +fi + +# Verify ASR endpoint is reachable +echo -n "Checking ASR endpoint... " +if curl -sf "${ASR_URL}/" > /dev/null 2>&1 || curl -sf "${ASR_URL}/health" > /dev/null 2>&1; then + echo -e "${GREEN}OK${NC}" +else + echo -e "${RED}FAILED${NC}" + echo "Cannot reach ASR endpoint at ${ASR_URL}" + exit 1 +fi + +# Create output directory +mkdir -p "$OUTPUT_DIR" + +# ============================================================== +# Test 1: Baseline (no hints) +# ============================================================== +echo "" +echo -e "${CYAN}--- Test 1: Baseline (no hotwords, no initial_prompt) ---${NC}" +echo -n "Transcribing... " + +BASELINE_FILE="$OUTPUT_DIR/1_baseline.json" +curl -sS -X POST "${ASR_URL}/asr?output=json&task=transcribe" \ + -F "audio_file=@${AUDIO_FILE}" \ + -o "$BASELINE_FILE" + +BASELINE_TEXT=$(python3 -c " +import json +d=json.load(open('$BASELINE_FILE')) +t=d.get('text','') +if isinstance(t, list): + t=' '.join(seg.get('text','') for seg in t) +print(t[:500]) +" 2>/dev/null || echo "PARSE_ERROR") +echo -e "${GREEN}Done${NC}" +echo -e "Preview: ${BASELINE_TEXT:0:200}..." +echo "" + +# ============================================================== +# Test 2: With hotwords only +# ============================================================== +echo -e "${CYAN}--- Test 2: With hotwords ---${NC}" +echo -n "Transcribing... " + +HOTWORDS_FILE="$OUTPUT_DIR/2_with_hotwords.json" +curl -sS -X POST "${ASR_URL}/asr?output=json&task=transcribe&hotwords=${HOTWORDS}" \ + -F "audio_file=@${AUDIO_FILE}" \ + -o "$HOTWORDS_FILE" + +HOTWORDS_TEXT=$(python3 -c " +import json +d=json.load(open('$HOTWORDS_FILE')) +t=d.get('text','') +if isinstance(t, list): + t=' '.join(seg.get('text','') for seg in t) +print(t[:500]) +" 2>/dev/null || echo "PARSE_ERROR") +echo -e "${GREEN}Done${NC}" +echo -e "Preview: ${HOTWORDS_TEXT:0:200}..." +echo "" + +# ============================================================== +# Test 3: With hotwords + initial_prompt +# ============================================================== +echo -e "${CYAN}--- Test 3: With hotwords + initial_prompt ---${NC}" +echo -n "Transcribing... " + +BOTH_FILE="$OUTPUT_DIR/3_with_both.json" +ENCODED_PROMPT=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$INITIAL_PROMPT'))") +curl -sS -X POST "${ASR_URL}/asr?output=json&task=transcribe&hotwords=${HOTWORDS}&initial_prompt=${ENCODED_PROMPT}" \ + -F "audio_file=@${AUDIO_FILE}" \ + -o "$BOTH_FILE" + +BOTH_TEXT=$(python3 -c " +import json +d=json.load(open('$BOTH_FILE')) +t=d.get('text','') +if isinstance(t, list): + t=' '.join(seg.get('text','') for seg in t) +print(t[:500]) +" 2>/dev/null || echo "PARSE_ERROR") +echo -e "${GREEN}Done${NC}" +echo -e "Preview: ${BOTH_TEXT:0:200}..." +echo "" + +# ============================================================== +# Test 4: With initial_prompt only +# ============================================================== +echo -e "${CYAN}--- Test 4: With initial_prompt only ---${NC}" +echo -n "Transcribing... " + +PROMPT_FILE="$OUTPUT_DIR/4_with_initial_prompt.json" +curl -sS -X POST "${ASR_URL}/asr?output=json&task=transcribe&initial_prompt=${ENCODED_PROMPT}" \ + -F "audio_file=@${AUDIO_FILE}" \ + -o "$PROMPT_FILE" + +PROMPT_TEXT=$(python3 -c " +import json +d=json.load(open('$PROMPT_FILE')) +t=d.get('text','') +if isinstance(t, list): + t=' '.join(seg.get('text','') for seg in t) +print(t[:500]) +" 2>/dev/null || echo "PARSE_ERROR") +echo -e "${GREEN}Done${NC}" +echo -e "Preview: ${PROMPT_TEXT:0:200}..." +echo "" + +# ============================================================== +# Comparison +# ============================================================== +echo -e "${CYAN}============================================${NC}" +echo -e "${CYAN} Comparison Results${NC}" +echo -e "${CYAN}============================================${NC}" +echo "" + +# Check if hotwords appear in outputs +python3 << 'PYEOF' +import json +import os + +def extract_text(data): + """Extract full text from ASR response, handling both string and segment list formats.""" + text = data.get("text", "") + if isinstance(text, list): + return " ".join(seg.get("text", "") for seg in text) + return text + +hotwords = ["Speakr", "CTranslate2", "PyAnnote", "WhisperX"] +output_dir = os.environ.get("OUTPUT_DIR", "temp/hotwords_test_results") +test_files = { + "1. Baseline": f"{output_dir}/1_baseline.json", + "2. Hotwords only": f"{output_dir}/2_with_hotwords.json", + "3. Hotwords + prompt": f"{output_dir}/3_with_both.json", + "4. Initial prompt only": f"{output_dir}/4_with_initial_prompt.json", +} + +print(f"{'Test':<25} | {'Hotword Matches':<20} | {'Words Found'}") +print("-" * 75) + +for label, filepath in test_files.items(): + try: + with open(filepath) as f: + data = json.load(f) + text = extract_text(data) + found = [] + for hw in hotwords: + if hw.lower() in text.lower(): + found.append(hw) + match_str = f"{len(found)}/{len(hotwords)}" + found_str = ", ".join(found) if found else "(none)" + print(f"{label:<25} | {match_str:<20} | {found_str}") + except Exception as e: + print(f"{label:<25} | ERROR: {e}") + +print() +print("Full outputs saved to: " + output_dir) +PYEOF + +echo "" +echo -e "${CYAN}============================================${NC}" +echo -e "${CYAN} Precedence Test via Speakr API${NC}" +echo -e "${CYAN}============================================${NC}" +echo "" +echo -e "${YELLOW}To test the full precedence chain (user → folder → tag → upload form),${NC}" +echo -e "${YELLOW}use the Speakr web API with authentication:${NC}" +echo "" +echo -e "1. Set user-level defaults in Account Settings → Prompt Options" +echo -e "2. Create a tag with different hotwords/initial_prompt" +echo -e "3. Create a folder with different hotwords/initial_prompt" +echo -e "4. Upload via API and check server logs for resolved values:" +echo "" +cat << 'EXAMPLE' +# Upload with user defaults only (no tag, no folder) +curl -X POST "https://your-speakr/upload" \ + -H "Authorization: Bearer YOUR_TOKEN" \ + -F "file=@test.flac" +# → Should use user defaults + +# Upload with a tag that has hotwords set +curl -X POST "https://your-speakr/upload" \ + -H "Authorization: Bearer YOUR_TOKEN" \ + -F "file=@test.flac" \ + -F "tags=TAG_ID_WITH_HOTWORDS" +# → Should use tag defaults (overrides user) + +# Upload with explicit form values (highest priority) +curl -X POST "https://your-speakr/upload" \ + -H "Authorization: Bearer YOUR_TOKEN" \ + -F "file=@test.flac" \ + -F "tags=TAG_ID_WITH_HOTWORDS" \ + -F "hotwords=FormOverride1,FormOverride2" \ + -F "initial_prompt=Form level prompt" +# → Should use form values (overrides tag and user) +EXAMPLE + +echo "" +echo -e "${GREEN}Test complete!${NC}" diff --git a/tests/test_inquire_mode.py b/tests/test_inquire_mode.py new file mode 100644 index 0000000..539766f --- /dev/null +++ b/tests/test_inquire_mode.py @@ -0,0 +1,187 @@ +#!/usr/bin/env python3 +""" +Test script for Inquire Mode functionality +""" +import os +import sys + +# Add the parent directory to the path to import app +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from src.app import app, db, User, Recording, TranscriptChunk, InquireSession, Tag + +def test_database_models(): + """Test that the new database models work correctly.""" + with app.app_context(): + print("🔍 Testing Inquire Mode Database Models...") + + # Test that tables exist + from sqlalchemy import inspect + inspector = inspect(db.engine) + tables = inspector.get_table_names() + + required_tables = ['transcript_chunk', 'inquire_session'] + for table in required_tables: + if table in tables: + print(f"✅ Table '{table}' exists") + else: + print(f"❌ Table '{table}' missing") + return False + + # Test creating sample data + try: + # Create a test user (or get existing one) + user = User.query.first() + if not user: + print("❌ No users found. Please create a user first.") + return False + + print(f"📝 Using test user: {user.username}") + + # Create a test recording if none exist + recording = Recording.query.filter_by(user_id=user.id).first() + if not recording: + print("❌ No recordings found. Please create a recording first.") + return False + + print(f"🎵 Using test recording: {recording.title}") + + # Test TranscriptChunk creation + chunk = TranscriptChunk( + recording_id=recording.id, + user_id=user.id, + chunk_index=0, + content="This is a test transcription chunk.", + start_time=0.0, + end_time=5.0, + speaker_name="Test Speaker" + ) + + db.session.add(chunk) + + # Test InquireSession creation + session = InquireSession( + user_id=user.id, + session_name="Test Session", + filter_tags='[]', + filter_speakers='["Test Speaker"]' + ) + + db.session.add(session) + db.session.commit() + + print("✅ Successfully created test TranscriptChunk and InquireSession") + + # Clean up test data + db.session.delete(chunk) + db.session.delete(session) + db.session.commit() + + print("✅ Test data cleaned up") + + except Exception as e: + print(f"❌ Error testing models: {e}") + return False + + return True + +def test_chunking_functions(): + """Test the chunking and embedding functions.""" + with app.app_context(): + print("🔧 Testing Chunking Functions...") + + try: + from src.app import chunk_transcription, generate_embeddings, serialize_embedding, deserialize_embedding + + # Test chunking + test_text = "This is a test sentence. This is another sentence for testing. And here's a third sentence to make sure chunking works properly with longer text that should be split into multiple chunks." + chunks = chunk_transcription(test_text, max_chunk_length=100, overlap=20) + + if len(chunks) > 1: + print(f"✅ Chunking works: {len(chunks)} chunks created") + else: + print("✅ Text too short for chunking (expected behavior)") + + # Test embeddings (will only work if sentence-transformers is installed) + try: + embeddings = generate_embeddings(["test sentence", "another test"]) + if len(embeddings) == 2: + print("✅ Embedding generation works") + + # Test serialization + if embeddings[0] is not None: + serialized = serialize_embedding(embeddings[0]) + deserialized = deserialize_embedding(serialized) + if deserialized is not None and len(deserialized) > 0: + print("✅ Embedding serialization/deserialization works") + else: + print("❌ Embedding serialization/deserialization failed") + else: + print("❌ Embedding generation returned wrong number of embeddings") + + except Exception as e: + print(f"⚠️ Embedding test skipped (sentence-transformers may not be installed): {e}") + + except Exception as e: + print(f"❌ Error testing chunking functions: {e}") + return False + + return True + +def test_api_imports(): + """Test that all API endpoints can be imported.""" + print("🔌 Testing API Endpoint Imports...") + + try: + from src.app import ( + get_inquire_sessions, create_inquire_session, inquire_search, + inquire_chat, get_available_filters, process_recording_chunks_endpoint + ) + print("✅ All inquire mode API endpoints imported successfully") + return True + except ImportError as e: + print(f"❌ Failed to import API endpoints: {e}") + return False + +def main(): + """Run all tests.""" + print("🚀 Starting Inquire Mode Tests...\n") + + tests = [ + ("Database Models", test_database_models), + ("Chunking Functions", test_chunking_functions), + ("API Imports", test_api_imports) + ] + + results = [] + for test_name, test_func in tests: + print(f"\n--- {test_name} ---") + try: + success = test_func() + results.append((test_name, success)) + except Exception as e: + print(f"❌ {test_name} failed with exception: {e}") + results.append((test_name, False)) + + print("\n" + "="*50) + print("📊 Test Results Summary:") + print("="*50) + + all_passed = True + for test_name, success in results: + status = "✅ PASS" if success else "❌ FAIL" + print(f"{status} - {test_name}") + if not success: + all_passed = False + + print("\n" + "="*50) + if all_passed: + print("🎉 All tests passed! Inquire Mode is ready to use.") + else: + print("⚠️ Some tests failed. Please check the output above.") + + return all_passed + +if __name__ == "__main__": + success = main() + sys.exit(0 if success else 1) \ No newline at end of file diff --git a/tests/test_job_queue_race_condition.py b/tests/test_job_queue_race_condition.py new file mode 100644 index 0000000..dee5811 --- /dev/null +++ b/tests/test_job_queue_race_condition.py @@ -0,0 +1,281 @@ +#!/usr/bin/env python3 +""" +Test script for job queue race condition fix. + +This script verifies that the atomic job claiming mechanism prevents +multiple workers from claiming the same job simultaneously. + +The fix uses an atomic UPDATE with WHERE clause to ensure only one +worker can claim a job, even with multiple processes/threads. +""" + +import os +import sys +import threading +import time +from pathlib import Path +from datetime import datetime +from concurrent.futures import ThreadPoolExecutor, as_completed + +# Add parent directory to path for imports +sys.path.insert(0, str(Path(__file__).parent.parent)) + + +def test_atomic_job_claiming(): + """ + Test that only one worker can claim a job even with concurrent attempts. + + This simulates the race condition where multiple workers try to claim + the same job simultaneously. + """ + print("\n=== Testing Atomic Job Claiming ===\n") + + # Import Flask app and models + from src.app import app + from src.database import db + from src.models import ProcessingJob, User, Recording + from sqlalchemy import update + + with app.app_context(): + # Use the first existing user for testing, or create a minimal test user + test_user = User.query.first() + if not test_user: + test_user = User( + username='test_race_condition_user', + email='test_race@example.com', + password='not_used' # Password not needed for this test + ) + db.session.add(test_user) + db.session.commit() + + # Create a test recording + test_recording = Recording( + user_id=test_user.id, + title='Test Race Condition Recording', + audio_path='/tmp/test_audio.mp3', + status='QUEUED' + ) + db.session.add(test_recording) + db.session.commit() + + # Create a test job in 'queued' status + test_job = ProcessingJob( + recording_id=test_recording.id, + user_id=test_user.id, + job_type='transcribe', + status='queued' + ) + db.session.add(test_job) + db.session.commit() + + job_id = test_job.id + print(f"Created test job {job_id} with status 'queued'") + + # Track which threads successfully claimed the job + successful_claims = [] + claim_lock = threading.Lock() + + def attempt_claim(worker_id): + """Simulate a worker attempting to claim the job.""" + with app.app_context(): + try: + # This is the atomic claim logic from the fix + claim_time = datetime.utcnow() + result = db.session.execute( + update(ProcessingJob) + .where( + ProcessingJob.id == job_id, + ProcessingJob.status == 'queued' + ) + .values(status='processing', started_at=claim_time) + ) + + if result.rowcount == 1: + db.session.commit() + with claim_lock: + successful_claims.append(worker_id) + return f"Worker {worker_id}: Successfully claimed job" + else: + db.session.rollback() + return f"Worker {worker_id}: Job already claimed (rowcount=0)" + + except Exception as e: + db.session.rollback() + return f"Worker {worker_id}: Error - {e}" + + # Spawn multiple threads to claim simultaneously + num_workers = 10 + print(f"\nSpawning {num_workers} workers to claim job {job_id} simultaneously...") + + # Use a barrier to ensure all threads start at the same time + barrier = threading.Barrier(num_workers) + + def worker_with_barrier(worker_id): + barrier.wait() # Wait for all threads to be ready + return attempt_claim(worker_id) + + with ThreadPoolExecutor(max_workers=num_workers) as executor: + futures = {executor.submit(worker_with_barrier, i): i for i in range(num_workers)} + + for future in as_completed(futures): + result = future.result() + print(f" {result}") + + # Verify results + print(f"\n=== Results ===") + print(f"Total workers: {num_workers}") + print(f"Successful claims: {len(successful_claims)}") + print(f"Workers that claimed: {successful_claims}") + + # Check final job status + db.session.expire_all() + final_job = db.session.get(ProcessingJob, job_id) + print(f"Final job status: {final_job.status}") + + # Cleanup + db.session.delete(final_job) + db.session.delete(test_recording) + db.session.commit() + + # Assert only one worker claimed the job + assert len(successful_claims) == 1, f"Expected 1 successful claim, got {len(successful_claims)}" + assert final_job.status == 'processing', f"Expected status 'processing', got {final_job.status}" + + print("\n[PASS] Only one worker successfully claimed the job!") + return True + + +def test_multiple_jobs_fair_distribution(): + """ + Test that multiple jobs are distributed fairly across workers. + """ + print("\n=== Testing Multiple Jobs Distribution ===\n") + + from src.app import app + from src.database import db + from src.models import ProcessingJob, User, Recording + from sqlalchemy import update + + with app.app_context(): + # Use the first existing user for testing + test_user = User.query.first() + if not test_user: + test_user = User( + username='test_distribution_user', + email='test_dist@example.com', + password='not_used' + ) + db.session.add(test_user) + db.session.commit() + + # Create multiple test jobs + num_jobs = 5 + job_ids = [] + recording_ids = [] + + for i in range(num_jobs): + recording = Recording( + user_id=test_user.id, + title=f'Test Distribution Recording {i}', + audio_path=f'/tmp/test_audio_{i}.mp3', + status='QUEUED' + ) + db.session.add(recording) + db.session.commit() + recording_ids.append(recording.id) + + job = ProcessingJob( + recording_id=recording.id, + user_id=test_user.id, + job_type='transcribe', + status='queued' + ) + db.session.add(job) + db.session.commit() + job_ids.append(job.id) + + print(f"Created {num_jobs} test jobs: {job_ids}") + + # Have workers claim jobs + claimed_jobs = [] + + def claim_any_job(worker_id): + with app.app_context(): + # Find a queued job + candidate = ProcessingJob.query.filter( + ProcessingJob.status == 'queued', + ProcessingJob.job_type == 'transcribe' + ).first() + + if not candidate: + return None + + # Atomic claim + result = db.session.execute( + update(ProcessingJob) + .where( + ProcessingJob.id == candidate.id, + ProcessingJob.status == 'queued' + ) + .values(status='processing', started_at=datetime.utcnow()) + ) + + if result.rowcount == 1: + db.session.commit() + return candidate.id + else: + db.session.rollback() + return None + + # Each "worker" claims one job + for i in range(num_jobs + 2): # Extra attempts to ensure no double claims + job_id = claim_any_job(i) + if job_id: + claimed_jobs.append(job_id) + print(f" Worker {i} claimed job {job_id}") + else: + print(f" Worker {i} found no available jobs") + + print(f"\nClaimed jobs: {claimed_jobs}") + print(f"Unique jobs claimed: {len(set(claimed_jobs))}") + + # Verify no duplicates + assert len(claimed_jobs) == len(set(claimed_jobs)), "Duplicate job claims detected!" + assert len(claimed_jobs) == num_jobs, f"Expected {num_jobs} claims, got {len(claimed_jobs)}" + + # Cleanup + for job_id in job_ids: + job = db.session.get(ProcessingJob, job_id) + if job: + db.session.delete(job) + for rec_id in recording_ids: + rec = db.session.get(Recording, rec_id) + if rec: + db.session.delete(rec) + db.session.commit() + + print("\n[PASS] All jobs claimed exactly once!") + return True + + +if __name__ == '__main__': + print("=" * 60) + print("Job Queue Race Condition Tests") + print("=" * 60) + + try: + test_atomic_job_claiming() + test_multiple_jobs_fair_distribution() + + print("\n" + "=" * 60) + print("All tests passed!") + print("=" * 60) + + except AssertionError as e: + print(f"\n[FAIL] Test failed: {e}") + sys.exit(1) + except Exception as e: + print(f"\n[ERROR] Unexpected error: {e}") + import traceback + traceback.print_exc() + sys.exit(1) diff --git a/tests/test_json_fix.py b/tests/test_json_fix.py new file mode 100644 index 0000000..9fe148c --- /dev/null +++ b/tests/test_json_fix.py @@ -0,0 +1,58 @@ +import json +import sys +import os + +# Add the parent directory to the path to import app +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from src.app import auto_close_json, safe_json_loads + +def run_tests(): + """Runs a series of tests for the JSON fixing functions.""" + + test_cases_auto_close = { + "Unterminated string": ('{"title": "Test", "summary": "This is a test', '{"title": "Test", "summary": "This is a test"}'), + "Missing closing brace": ('{"title": "Test", "summary": "This is a test"}', '{"title": "Test", "summary": "This is a test"}'), + "Missing closing bracket": ('[{"item": 1}, {"item": 2}', '[{"item": 1}, {"item": 2}]'), + "Nested unterminated": ('{"data": {"items": [1, 2', '{"data": {"items": [1, 2]}}'), + "String at the end": ('{"key": "value', '{"key": "value"}'), + "Empty string": ('', ''), + "Already valid": ('{"a": 1}', '{"a": 1}'), + "Complex nested object": ('{"a": {"b": {"c": [1, 2, {"d": "e' , '{"a": {"b": {"c": [1, 2, {"d": "e"}]}}}') + } + + print("--- Testing auto_close_json ---") + for name, (input_str, expected_str) in test_cases_auto_close.items(): + result = auto_close_json(input_str) + print(f"Test: {name}") + print(f" Input: '{input_str}'") + print(f" Output: '{result}'") + print(f" Expected: '{expected_str}'") + assert result == expected_str, f"Failed: {name}" + print(" Result: PASSED\n") + + test_cases_safe_loads = { + "Unterminated string": '{"title": "Test", "summary": "This is a test', + "Markdown with unterminated JSON": '```json\n{"title": "Test", "summary": "This is a test\n```', + "Missing closing brace": '{"title": "Test", "summary": "This is a test"}', + "Valid JSON": '{"title": "Complete", "summary": "This is a complete JSON."}', + "JSON with escaped quotes": '{"title": "Escaped", "summary": "This is a \\"test\\" with quotes."}', + "Invalid JSON": 'this is not json', + } + + print("\n--- Testing safe_json_loads ---") + for name, input_str in test_cases_safe_loads.items(): + result = safe_json_loads(input_str) + print(f"Test: {name}") + print(f" Input: '{input_str}'") + print(f" Output: {result}") + if name == "Invalid JSON": + assert result is None, f"Failed: {name}" + print(" Result: PASSED (Correctly returned None)\n") + else: + assert isinstance(result, dict), f"Failed: {name}" + print(" Result: PASSED\n") + +if __name__ == "__main__": + run_tests() + print("All tests completed successfully!") diff --git a/tests/test_json_preprocessing.py b/tests/test_json_preprocessing.py new file mode 100644 index 0000000..d316143 --- /dev/null +++ b/tests/test_json_preprocessing.py @@ -0,0 +1,291 @@ +#!/usr/bin/env python3 +""" +Test suite for JSON preprocessing functionality in Speakr app. +Tests the safe_json_loads function with various malformed JSON scenarios. +""" + +import sys +import os +import json +import unittest +from unittest.mock import Mock + +# Add the app directory to the path so we can import from app.py +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +# Mock the Flask app and logger for testing +class MockApp: + def __init__(self): + self.logger = Mock() + +# Set up the mock app before importing +app = MockApp() + +# Import the functions we want to test +from src.app import safe_json_loads, preprocess_json_escapes, extract_json_object + +class TestJSONPreprocessing(unittest.TestCase): + """Test cases for JSON preprocessing functionality.""" + + def test_valid_json(self): + """Test that valid JSON is parsed correctly.""" + valid_json = '{"title": "Test Meeting", "summary": "This is a test summary"}' + result = safe_json_loads(valid_json) + expected = {"title": "Test Meeting", "summary": "This is a test summary"} + self.assertEqual(result, expected) + + def test_json_with_markdown_code_blocks(self): + """Test JSON wrapped in markdown code blocks.""" + markdown_json = '''```json +{ + "title": "Meeting Notes", + "summary": "Key points discussed" +} +```''' + result = safe_json_loads(markdown_json) + expected = {"title": "Meeting Notes", "summary": "Key points discussed"} + self.assertEqual(result, expected) + + def test_json_with_unescaped_quotes(self): + """Test JSON with unescaped quotes in string values.""" + malformed_json = '{"title": "John said "Hello world" to everyone", "summary": "Meeting summary"}' + result = safe_json_loads(malformed_json) + expected = {"title": 'John said "Hello world" to everyone', "summary": "Meeting summary"} + self.assertEqual(result, expected) + + def test_json_with_mixed_quotes(self): + """Test JSON with mixed quote scenarios.""" + malformed_json = '{"title": "Alice\'s "big idea" presentation", "summary": "She said "this will change everything""}' + result = safe_json_loads(malformed_json) + self.assertIsInstance(result, dict) + self.assertIn("title", result) + self.assertIn("summary", result) + + def test_json_with_newlines_and_special_chars(self): + """Test JSON with newlines and special characters.""" + malformed_json = '''{"title": "Complex Meeting", "summary": "Discussion about:\n- Point 1\n- Point 2 with "quotes"\n- Point 3"}''' + result = safe_json_loads(malformed_json) + self.assertIsInstance(result, dict) + self.assertIn("title", result) + self.assertIn("summary", result) + + def test_empty_or_invalid_input(self): + """Test handling of empty or invalid input.""" + # Empty string + result = safe_json_loads("", {"default": "value"}) + self.assertEqual(result, {"default": "value"}) + + # None input + result = safe_json_loads(None, {"default": "value"}) + self.assertEqual(result, {"default": "value"}) + + # Non-string input + result = safe_json_loads(123, {"default": "value"}) + self.assertEqual(result, {"default": "value"}) + + def test_completely_malformed_json(self): + """Test completely malformed JSON that can't be fixed.""" + malformed_json = '{"title": "Test", "summary": unclosed string and missing quotes}' + result = safe_json_loads(malformed_json, {"error": "fallback"}) + self.assertEqual(result, {"error": "fallback"}) + + def test_json_with_nested_quotes(self): + """Test JSON with deeply nested quote scenarios.""" + malformed_json = '{"title": "Meeting about "Project Alpha" and "Project Beta"", "summary": "Both projects involve "cutting-edge" technology"}' + result = safe_json_loads(malformed_json) + self.assertIsInstance(result, dict) + # Should have successfully parsed something + self.assertTrue(len(result) > 0) + + def test_json_array_format(self): + """Test JSON array format (for transcription data).""" + json_array = '[{"speaker": "John", "sentence": "Hello everyone"}, {"speaker": "Jane", "sentence": "Good morning"}]' + result = safe_json_loads(json_array) + expected = [{"speaker": "John", "sentence": "Hello everyone"}, {"speaker": "Jane", "sentence": "Good morning"}] + self.assertEqual(result, expected) + + def test_preprocess_json_escapes_function(self): + """Test the preprocess_json_escapes function directly.""" + input_json = '{"title": "John said "Hello" to Mary", "summary": "Simple test"}' + processed = preprocess_json_escapes(input_json) + # Should be valid JSON after preprocessing + result = json.loads(processed) + self.assertIsInstance(result, dict) + self.assertIn("title", result) + self.assertIn("summary", result) + + def test_extract_json_object_function(self): + """Test the extract_json_object function directly.""" + # Test with extra text around JSON object + text_with_json = 'Here is some text {"title": "Test", "summary": "Content"} and more text' + extracted = extract_json_object(text_with_json) + result = json.loads(extracted) + expected = {"title": "Test", "summary": "Content"} + self.assertEqual(result, expected) + + # Test with JSON array + text_with_array = 'Some text [{"item": "one"}, {"item": "two"}] more text' + extracted = extract_json_object(text_with_array) + result = json.loads(extracted) + expected = [{"item": "one"}, {"item": "two"}] + self.assertEqual(result, expected) + + def test_real_world_llm_response_scenarios(self): + """Test real-world scenarios that might come from LLM responses.""" + + # Scenario 1: LLM response with explanation text + llm_response1 = '''Here's the JSON response you requested: + +```json +{ + "title": "Q3 Planning Meeting", + "summary": "We discussed the "new initiative" and John's "breakthrough idea" for next quarter." +} +``` + +This should help with your transcription needs.''' + + result1 = safe_json_loads(llm_response1) + self.assertIsInstance(result1, dict) + self.assertIn("title", result1) + self.assertIn("summary", result1) + + # Scenario 2: LLM response with unescaped quotes and no code blocks + llm_response2 = '{"title": "Team Standup", "summary": "Alice mentioned "the deadline is tight" and Bob said "we need more resources""}' + + result2 = safe_json_loads(llm_response2) + self.assertIsInstance(result2, dict) + self.assertIn("title", result2) + self.assertIn("summary", result2) + + # Scenario 3: LLM response with speaker identification + llm_response3 = '''{"SPEAKER_00": "John Smith", "SPEAKER_01": "Jane "The Expert" Doe", "SPEAKER_02": "Bob"}''' + + result3 = safe_json_loads(llm_response3) + self.assertIsInstance(result3, dict) + self.assertTrue(len(result3) >= 2) # Should have parsed at least some speakers + + def test_fallback_strategies(self): + """Test that different parsing strategies work as fallbacks.""" + + # Test ast.literal_eval fallback for simple cases + simple_dict = "{'title': 'Simple', 'summary': 'Test'}" + result = safe_json_loads(simple_dict) + expected = {"title": "Simple", "summary": "Test"} + self.assertEqual(result, expected) + + # Test regex extraction fallback + messy_response = 'Some text before {"title": "Extracted", "summary": "From regex"} some text after' + result = safe_json_loads(messy_response) + expected = {"title": "Extracted", "summary": "From regex"} + self.assertEqual(result, expected) + + def test_performance_with_large_content(self): + """Test performance with larger JSON content.""" + large_summary = "This is a very long summary. " * 100 # Create a long string + large_json = f'{{"title": "Large Content Test", "summary": "{large_summary}"}}' + + result = safe_json_loads(large_json) + self.assertIsInstance(result, dict) + self.assertIn("title", result) + self.assertIn("summary", result) + self.assertEqual(result["title"], "Large Content Test") + +def run_comprehensive_test(): + """Run a comprehensive test with various malformed JSON examples.""" + print("🧪 Running comprehensive JSON preprocessing tests...\n") + + test_cases = [ + { + "name": "Valid JSON", + "input": '{"title": "Test", "summary": "Valid JSON"}', + "should_succeed": True + }, + { + "name": "Unescaped quotes in title", + "input": '{"title": "Meeting about "Project X"", "summary": "Discussion summary"}', + "should_succeed": True + }, + { + "name": "Multiple unescaped quotes", + "input": '{"title": "John said "Hello" and Mary replied "Hi there"", "summary": "Conversation log"}', + "should_succeed": True + }, + { + "name": "Markdown code block", + "input": '```json\n{"title": "Wrapped", "summary": "In code block"}\n```', + "should_succeed": True + }, + { + "name": "Mixed quotes and apostrophes", + "input": '{"title": "Alice\'s "big idea" presentation", "summary": "She said it\'s "revolutionary""}', + "should_succeed": True + }, + { + "name": "JSON with newlines", + "input": '{"title": "Multi-line", "summary": "Line 1\\nLine 2 with \\"quotes\\"\\nLine 3"}', + "should_succeed": True + }, + { + "name": "Completely malformed", + "input": '{"title": "Test", "summary": this is not valid json at all}', + "should_succeed": False + }, + { + "name": "Empty string", + "input": "", + "should_succeed": False + } + ] + + passed = 0 + failed = 0 + + for i, test_case in enumerate(test_cases, 1): + print(f"Test {i}: {test_case['name']}") + print(f"Input: {test_case['input'][:100]}{'...' if len(test_case['input']) > 100 else ''}") + + try: + result = safe_json_loads(test_case['input'], {"error": "fallback"}) + + if test_case['should_succeed']: + if result != {"error": "fallback"} and isinstance(result, dict): + print("✅ PASSED - Successfully parsed JSON") + passed += 1 + else: + print("❌ FAILED - Expected successful parsing but got fallback") + failed += 1 + else: + if result == {"error": "fallback"}: + print("✅ PASSED - Correctly returned fallback for malformed JSON") + passed += 1 + else: + print("❌ FAILED - Expected fallback but got parsed result") + failed += 1 + + except Exception as e: + print(f"❌ FAILED - Exception occurred: {e}") + failed += 1 + + print("-" * 50) + + print(f"\n📊 Test Results: {passed} passed, {failed} failed") + return failed == 0 + +if __name__ == "__main__": + print("🚀 Starting JSON Preprocessing Tests for Speakr App\n") + + # Run the comprehensive manual test + manual_success = run_comprehensive_test() + + print("\n" + "="*60) + print("🔬 Running Unit Tests") + print("="*60) + + # Run the unit tests + unittest.main(argv=[''], exit=False, verbosity=2) + + if manual_success: + print("\n🎉 All tests completed! JSON preprocessing should handle LLM response issues gracefully.") + else: + print("\n⚠️ Some tests failed. Please review the implementation.") diff --git a/tests/test_json_standalone.py b/tests/test_json_standalone.py new file mode 100644 index 0000000..c08827b --- /dev/null +++ b/tests/test_json_standalone.py @@ -0,0 +1,340 @@ +#!/usr/bin/env python3 +""" +Standalone test for JSON preprocessing functionality. +Tests the safe_json_loads function with various malformed JSON scenarios. +""" + +import json +import re +import ast +from unittest.mock import Mock + +# Mock logger for testing +class MockLogger: + def warning(self, msg): print(f"WARNING: {msg}") + def info(self, msg): print(f"INFO: {msg}") + def debug(self, msg): print(f"DEBUG: {msg}") + def error(self, msg): print(f"ERROR: {msg}") + +# Create mock app with logger +class MockApp: + logger = MockLogger() + +app = MockApp() + +def safe_json_loads(json_string, fallback_value=None): + """ + Safely parse JSON with preprocessing to handle common LLM JSON formatting issues. + + Args: + json_string (str): The JSON string to parse + fallback_value: Value to return if parsing fails (default: None) + + Returns: + Parsed JSON object or fallback_value if parsing fails + """ + if not json_string or not isinstance(json_string, str): + app.logger.warning(f"Invalid JSON input: {type(json_string)} - {json_string}") + return fallback_value + + # Step 1: Clean the input string + cleaned_json = json_string.strip() + + # Step 2: Extract JSON from markdown code blocks if present + json_match = re.search(r'```(?:json)?\s*(.*?)\s*```', cleaned_json, re.DOTALL) + if json_match: + cleaned_json = json_match.group(1).strip() + + # Step 3: Try multiple parsing strategies + parsing_strategies = [ + # Strategy 1: Direct parsing (for well-formed JSON) + lambda x: json.loads(x), + + # Strategy 2: Fix common escape issues + lambda x: json.loads(preprocess_json_escapes(x)), + + # Strategy 3: Use ast.literal_eval as fallback for simple cases + lambda x: ast.literal_eval(x) if x.startswith(('{', '[')) else None, + + # Strategy 4: Extract JSON object/array using regex + lambda x: json.loads(extract_json_object(x)), + ] + + for i, strategy in enumerate(parsing_strategies): + try: + result = strategy(cleaned_json) + if result is not None: + if i > 0: # Log if we had to use a fallback strategy + app.logger.info(f"JSON parsed successfully using strategy {i+1}") + return result + except (json.JSONDecodeError, ValueError, SyntaxError) as e: + if i == 0: # Only log the first failure to avoid spam + app.logger.debug(f"JSON parsing strategy {i+1} failed: {e}") + continue + + # All strategies failed + app.logger.error(f"All JSON parsing strategies failed for: {cleaned_json[:200]}...") + return fallback_value + +def preprocess_json_escapes(json_string): + """ + Preprocess JSON string to fix common escape issues from LLM responses. + Uses a more sophisticated approach to handle nested quotes properly. + """ + if not json_string: + return json_string + + result = [] + i = 0 + in_string = False + escape_next = False + expecting_value = False # Track if we're expecting a value (after :) + + while i < len(json_string): + char = json_string[i] + + if escape_next: + # This character is escaped, add it as-is + result.append(char) + escape_next = False + elif char == '\\': + # This is an escape character + result.append(char) + escape_next = True + elif char == ':' and not in_string: + # We found a colon, next string will be a value + result.append(char) + expecting_value = True + elif char == ',' and not in_string: + # We found a comma, reset expecting_value + result.append(char) + expecting_value = False + elif char == '"': + if not in_string: + # Starting a string + in_string = True + result.append(char) + else: + # We're in a string, check if this quote should be escaped + # Look ahead to see if this is the end of the string value + j = i + 1 + while j < len(json_string) and json_string[j].isspace(): + j += 1 + + # For keys (not expecting_value), only end on colon + # For values (expecting_value), end on comma, closing brace, or closing bracket + if expecting_value: + end_chars = ',}]' + else: + end_chars = ':' + + if j < len(json_string) and json_string[j] in end_chars: + # This is the end of the string + in_string = False + result.append(char) + if not expecting_value: + # We just finished a key, next will be expecting value + expecting_value = True + else: + # This is an inner quote that should be escaped + result.append('\\"') + else: + result.append(char) + + i += 1 + + return ''.join(result) + +def extract_json_object(text): + """ + Extract the first complete JSON object or array from text using regex. + """ + # Look for JSON object + obj_match = re.search(r'\{.*\}', text, re.DOTALL) + if obj_match: + return obj_match.group(0) + + # Look for JSON array + arr_match = re.search(r'\[.*\]', text, re.DOTALL) + if arr_match: + return arr_match.group(0) + + # Return original if no JSON structure found + return text + +def run_comprehensive_test(): + """Run a comprehensive test with various malformed JSON examples.""" + print("🧪 Running comprehensive JSON preprocessing tests...\n") + + test_cases = [ + { + "name": "Valid JSON", + "input": '{"title": "Test", "summary": "Valid JSON"}', + "should_succeed": True + }, + { + "name": "Unescaped quotes in title", + "input": '{"title": "Meeting about "Project X"", "summary": "Discussion summary"}', + "should_succeed": True + }, + { + "name": "Multiple unescaped quotes", + "input": '{"title": "John said "Hello" and Mary replied "Hi there"", "summary": "Conversation log"}', + "should_succeed": True + }, + { + "name": "Markdown code block", + "input": '```json\n{"title": "Wrapped", "summary": "In code block"}\n```', + "should_succeed": True + }, + { + "name": "Mixed quotes and apostrophes", + "input": '{"title": "Alice\'s "big idea" presentation", "summary": "She said it\'s "revolutionary""}', + "should_succeed": True + }, + { + "name": "JSON with newlines", + "input": '{"title": "Multi-line", "summary": "Line 1\\nLine 2 with \\"quotes\\"\\nLine 3"}', + "should_succeed": True + }, + { + "name": "LLM response with explanation", + "input": '''Here's the JSON: +```json +{ + "title": "Q3 Planning", + "summary": "We discussed the "new initiative" for next quarter." +} +``` +Hope this helps!''', + "should_succeed": True + }, + { + "name": "Speaker identification with quotes", + "input": '{"SPEAKER_00": "John Smith", "SPEAKER_01": "Jane "The Expert" Doe", "SPEAKER_02": "Bob"}', + "should_succeed": True + }, + { + "name": "Completely malformed", + "input": '{"title": "Test", "summary": this is not valid json at all}', + "should_succeed": False + }, + { + "name": "Empty string", + "input": "", + "should_succeed": False + } + ] + + passed = 0 + failed = 0 + + for i, test_case in enumerate(test_cases, 1): + print(f"Test {i}: {test_case['name']}") + print(f"Input: {test_case['input'][:100]}{'...' if len(test_case['input']) > 100 else ''}") + + try: + result = safe_json_loads(test_case['input'], {"error": "fallback"}) + + if test_case['should_succeed']: + if result != {"error": "fallback"} and isinstance(result, (dict, list)): + print("✅ PASSED - Successfully parsed JSON") + print(f" Result: {result}") + passed += 1 + else: + print("❌ FAILED - Expected successful parsing but got fallback") + failed += 1 + else: + if result == {"error": "fallback"}: + print("✅ PASSED - Correctly returned fallback for malformed JSON") + passed += 1 + else: + print("❌ FAILED - Expected fallback but got parsed result") + print(f" Unexpected result: {result}") + failed += 1 + + except Exception as e: + print(f"❌ FAILED - Exception occurred: {e}") + failed += 1 + + print("-" * 50) + + print(f"\n📊 Test Results: {passed} passed, {failed} failed") + return failed == 0 + +def test_preprocessing_function(): + """Test the preprocessing function directly.""" + print("\n🔧 Testing preprocessing function directly...\n") + + test_input = '{"title": "Meeting about "Project X"", "summary": "Discussion summary"}' + print(f"Original: {test_input}") + + processed = preprocess_json_escapes(test_input) + print(f"Processed: {processed}") + + try: + result = json.loads(processed) + print(f"✅ Successfully parsed: {result}") + except json.JSONDecodeError as e: + print(f"❌ Still failed: {e}") + +def test_specific_scenarios(): + """Test specific real-world scenarios.""" + print("\n🎯 Testing specific LLM response scenarios...\n") + + # Test case from the original issue + gemini_response = '''{"title": "Meeting about "Project Phoenix" and budget allocation", "summary": "The team discussed John's "breakthrough idea" and Mary said "this will change everything" during the Q3 planning session."}''' + + print("Testing Gemini-style response with unescaped quotes:") + print(f"Input: {gemini_response}") + + # Test preprocessing directly + processed = preprocess_json_escapes(gemini_response) + print(f"Processed: {processed}") + + result = safe_json_loads(gemini_response) + if isinstance(result, dict) and "title" in result and "summary" in result: + print("✅ SUCCESS - Parsed Gemini response correctly!") + print(f"Title: {result['title']}") + print(f"Summary: {result['summary'][:100]}...") + else: + print("❌ FAILED - Could not parse Gemini response") + print(f"Result: {result}") + + print("-" * 50) + + # Test speaker identification scenario + speaker_response = '''{"SPEAKER_00": "John "The Manager" Smith", "SPEAKER_01": "Alice Johnson", "SPEAKER_02": "Bob "Tech Lead" Wilson"}''' + + print("Testing speaker identification with quotes in names:") + print(f"Input: {speaker_response}") + + # Test preprocessing directly + processed = preprocess_json_escapes(speaker_response) + print(f"Processed: {processed}") + + result = safe_json_loads(speaker_response) + if isinstance(result, dict) and len(result) >= 3: + print("✅ SUCCESS - Parsed speaker identification correctly!") + for speaker, name in result.items(): + print(f" {speaker}: {name}") + else: + print("❌ FAILED - Could not parse speaker identification") + print(f"Result: {result}") + +if __name__ == "__main__": + print("🚀 Starting Standalone JSON Preprocessing Tests\n") + + # Test preprocessing function directly + test_preprocessing_function() + + # Run the comprehensive test + success = run_comprehensive_test() + + # Test specific scenarios + test_specific_scenarios() + + if success: + print("\n🎉 All tests completed successfully! JSON preprocessing should handle LLM response issues gracefully.") + else: + print("\n⚠️ Some tests failed. The implementation may need refinement.") diff --git a/tests/test_migration_compatibility.py b/tests/test_migration_compatibility.py new file mode 100644 index 0000000..e8a43b5 --- /dev/null +++ b/tests/test_migration_compatibility.py @@ -0,0 +1,251 @@ +""" +Test suite to ensure database migrations are compatible with both SQLite and PostgreSQL. + +These tests scan the init_db.py file for patterns that would break on PostgreSQL, +such as SQLite-only boolean defaults (0/1 instead of FALSE/TRUE) and unquoted +reserved keywords. + +Run with: python tests/test_migration_compatibility.py +""" + +import re +import unittest +import os + + +class TestMigrationCompatibility(unittest.TestCase): + """Tests to ensure init_db.py uses cross-database compatible SQL.""" + + @classmethod + def setUpClass(cls): + """Load init_db.py content once for all tests.""" + # Find the project root + test_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(test_dir) + init_db_path = os.path.join(project_root, 'src', 'init_db.py') + + with open(init_db_path, 'r') as f: + cls.content = f.read() + + def test_no_raw_boolean_defaults_in_alter_table(self): + """ + Ensure no raw ALTER TABLE statements use SQLite-only boolean defaults. + + The pattern 'BOOLEAN DEFAULT 0' or 'BOOLEAN DEFAULT 1' in raw SQL + will fail on PostgreSQL, which requires 'DEFAULT FALSE' or 'DEFAULT TRUE'. + + Using add_column_if_not_exists() handles this conversion automatically. + """ + # Pattern to find raw SQL with text() that has BOOLEAN DEFAULT 0/1 + # This matches: text('... BOOLEAN DEFAULT 0 ...') or text("...") + pattern = r"conn\.execute\s*\(\s*text\s*\(['\"]([^'\"]*BOOLEAN\s+DEFAULT\s+[01][^'\"]*)['\"]" + + matches = re.findall(pattern, self.content, re.IGNORECASE) + + # Filter out false positives - we're looking for raw ALTER TABLE statements + # not UPDATE statements or other SQL that legitimately uses 0/1 + problematic = [] + for match in matches: + match_upper = match.upper() + # Only flag if it's an ALTER TABLE with BOOLEAN DEFAULT 0/1 + if 'ALTER TABLE' in match_upper and 'BOOLEAN' in match_upper: + if 'DEFAULT 0' in match or 'DEFAULT 1' in match: + problematic.append(match) + + self.assertEqual( + len(problematic), 0, + f"Found SQLite-only boolean defaults in raw ALTER TABLE statements. " + f"Use add_column_if_not_exists() instead:\n" + + "\n".join(f" - {m[:100]}..." if len(m) > 100 else f" - {m}" for m in problematic) + ) + + def test_no_boolean_integer_comparisons_in_raw_sql(self): + """ + Ensure raw SQL doesn't compare boolean columns to integers (0/1). + + PostgreSQL strictly separates boolean and integer types: + - 'column = 1' fails with 'operator does not exist: boolean = integer' + - 'column = TRUE' works on both SQLite (3.23+) and PostgreSQL + + Known boolean columns in migrations: protect_from_deletion, email_verified, + auto_share_on_apply, share_with_group_lead, is_inbox, is_highlighted, + deletion_exempt, is_admin, can_share_publicly. + """ + boolean_columns = [ + 'protect_from_deletion', 'email_verified', 'auto_share_on_apply', + 'share_with_group_lead', 'is_inbox', 'is_highlighted', + 'deletion_exempt', 'is_admin', 'can_share_publicly', + 'auto_speaker_labelling', 'auto_summarization' + ] + + # Find raw SQL in text() calls + sql_pattern = r"text\s*\(\s*['\"\"]\"\"(.*?)['\"\"]\"\"?\s*\)" + # Simpler: find lines with known boolean column = 0 or = 1 + problematic = [] + for col in boolean_columns: + # Match: column = 0 or column = 1 (not = TRUE/FALSE) + pattern = rf"{col}\s*=\s*[01]\b" + matches = re.finditer(pattern, self.content, re.IGNORECASE) + for match in matches: + # Get surrounding context to check if it's in a text() SQL call + start = max(0, match.start() - 200) + context = self.content[start:match.end() + 50] + if 'text(' in context and 'sqlite_master' not in context: + problematic.append(f"{col}: ...{match.group()}...") + + self.assertEqual( + len(problematic), 0, + f"Found boolean columns compared to integers in raw SQL. " + f"Use TRUE/FALSE instead of 1/0 for PostgreSQL compatibility:\n" + + "\n".join(f" - {p}" for p in problematic) + ) + + def test_reserved_keywords_quoted_in_index_creation(self): + """ + Ensure reserved keywords like 'user' are properly quoted in index creation. + + Raw SQL like 'CREATE INDEX ... ON user (column)' will fail on some databases + because 'user' is a reserved keyword. It should be quoted as "user" or use + the create_index_if_not_exists() utility. + """ + reserved_keywords = ['user', 'order', 'group', 'table', 'select', 'index'] + + problematic = [] + + for keyword in reserved_keywords: + # Pattern to find unquoted reserved keyword after ON in index creation + # Matches: CREATE INDEX ... ON user ( but not ON "user" or ON `user` + pattern = rf"CREATE\s+(?:UNIQUE\s+)?INDEX[^;]*\s+ON\s+{keyword}\s*\(" + + matches = re.findall(pattern, self.content, re.IGNORECASE) + + for match in matches: + # Skip if the keyword is already quoted + if f'"{keyword}"' in match.lower() or f'`{keyword}`' in match.lower(): + continue + problematic.append((keyword, match[:80])) + + self.assertEqual( + len(problematic), 0, + f"Found unquoted reserved keywords in index creation. " + f"Use create_index_if_not_exists() or quote the table name:\n" + + "\n".join(f" - '{kw}' in: {sql}..." for kw, sql in problematic) + ) + + def test_add_column_uses_utility(self): + """ + Ensure most ADD COLUMN operations use add_column_if_not_exists(). + + Direct ALTER TABLE ADD COLUMN statements should use the utility function + to ensure cross-database compatibility with boolean defaults and quoting. + """ + # Count direct ALTER TABLE ADD COLUMN in text() calls + direct_pattern = r"conn\.execute\s*\(\s*text\s*\(['\"][^'\"]*ALTER\s+TABLE[^'\"]*ADD\s+COLUMN" + direct_matches = re.findall(direct_pattern, self.content, re.IGNORECASE) + + # Count uses of add_column_if_not_exists + utility_pattern = r"add_column_if_not_exists\s*\(" + utility_matches = re.findall(utility_pattern, self.content) + + # We expect most ADD COLUMN operations to use the utility + # Allow some direct usage for special cases (e.g., table recreation) + # but utility usage should significantly outnumber direct usage + self.assertGreater( + len(utility_matches), len(direct_matches), + f"Found {len(direct_matches)} direct ALTER TABLE ADD COLUMN statements " + f"vs {len(utility_matches)} add_column_if_not_exists() calls. " + f"Consider using the utility function for cross-database compatibility." + ) + + def test_incompatible_types_handled_by_utility(self): + """ + Ensure columns with PostgreSQL-incompatible types (DATETIME, BLOB) are + added through add_column_if_not_exists() which auto-converts them, + and NOT via raw ALTER TABLE statements that would bypass conversion. + + PostgreSQL type differences: + - DATETIME -> TIMESTAMP + - BLOB -> BYTEA + """ + incompatible_types = ['DATETIME', 'BLOB'] + + # Check for raw ALTER TABLE statements using incompatible types + for sql_type in incompatible_types: + pattern = rf"conn\.execute\s*\(\s*text\s*\(['\"][^'\"]*ALTER\s+TABLE[^'\"]*\b{sql_type}\b[^'\"]*['\"]" + matches = re.findall(pattern, self.content, re.IGNORECASE) + + self.assertEqual( + len(matches), 0, + f"Found raw ALTER TABLE statements using '{sql_type}' which is incompatible with PostgreSQL. " + f"Use add_column_if_not_exists() which auto-converts types:\n" + + "\n".join(f" - {m[:100]}..." if len(m) > 100 else f" - {m}" for m in matches) + ) + + # Verify that add_column_if_not_exists calls using these types exist + # (confirming they go through the utility which handles conversion) + for sql_type in incompatible_types: + pattern = rf"add_column_if_not_exists\s*\([^)]*['\"]({sql_type})['\"]" + matches = re.findall(pattern, self.content, re.IGNORECASE) + # Just informational - these are fine because the utility converts them + + def test_no_double_quoted_string_defaults(self): + """ + Ensure no SQL DEFAULT values use double-quoted strings. + + In SQL, double quotes denote identifiers (column/table names), not string + literals. SQLite tolerates this, but PostgreSQL will interpret DEFAULT "en" + as a reference to a column named "en" and fail with 'column "en" does not exist'. + + String defaults must use single quotes: DEFAULT 'en' + """ + # Match DEFAULT followed by a double-quoted string value + pattern = r'DEFAULT\s+"[^"]*"' + + lines = self.content.splitlines() + problematic = [] + for i, line in enumerate(lines, 1): + if re.search(pattern, line, re.IGNORECASE): + problematic.append(f" Line {i}: {line.strip()}") + + self.assertEqual( + len(problematic), 0, + f"Found double-quoted string defaults in init_db.py. " + f"PostgreSQL interprets double quotes as column identifiers, not string literals. " + f"Use single quotes instead (e.g., DEFAULT 'en' not DEFAULT \"en\"):\n" + + "\n".join(problematic) + ) + + def test_create_index_uses_utility_for_user_table(self): + """ + Ensure index creation on 'user' table uses create_index_if_not_exists(). + + The 'user' table name is a reserved keyword that requires special quoting. + Using create_index_if_not_exists() handles this automatically. + """ + # Find all index creation on user table + pattern = r"CREATE\s+(?:UNIQUE\s+)?INDEX[^;]*ON\s+[\"'`]?user[\"'`]?\s*\(" + + # Count raw index creation on user table in text() calls + raw_pattern = r"conn\.execute\s*\(\s*text\s*\(['\"][^'\"]*CREATE\s+(?:UNIQUE\s+)?INDEX[^'\"]*ON\s+[\"'`]?user" + raw_matches = re.findall(raw_pattern, self.content, re.IGNORECASE) + + # Count uses of create_index_if_not_exists for user table + utility_pattern = r"create_index_if_not_exists\s*\([^)]*['\"]user['\"]" + utility_matches = re.findall(utility_pattern, self.content, re.IGNORECASE) + + # All index creation on user table should use the utility + # (excluding table recreation scenarios which have their own quoting) + if len(raw_matches) > 0: + # Check if these are in table recreation blocks (acceptable) + table_recreation_pattern = r"CREATE\s+TABLE\s+user_new" + has_table_recreation = re.search(table_recreation_pattern, self.content, re.IGNORECASE) + + if not has_table_recreation or len(raw_matches) > 1: + self.fail( + f"Found {len(raw_matches)} raw CREATE INDEX statements on 'user' table. " + f"Use create_index_if_not_exists() for proper quoting of reserved keywords." + ) + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/test_postgres_migrations.py b/tests/test_postgres_migrations.py new file mode 100644 index 0000000..7ea39d2 --- /dev/null +++ b/tests/test_postgres_migrations.py @@ -0,0 +1,165 @@ +""" +Integration test for database migrations against a real database engine. + +Runs initialize_database() and verifies that all tables and critical columns +are created successfully. Works with both SQLite (default, for local runs) +and PostgreSQL (when TEST_DATABASE_URI env var is set). + +IMPORTANT: This test uses TEST_DATABASE_URI (not SQLALCHEMY_DATABASE_URI) to +avoid accidentally connecting to and destroying a real application database. + +Usage: + # Local (SQLite in-memory, safe): + python tests/test_postgres_migrations.py + + # Against PostgreSQL (CI or explicit testing): + TEST_DATABASE_URI=postgresql://user:pass@localhost:5432/testdb \ + python tests/test_postgres_migrations.py +""" + +import os +import sys +import unittest + +# Ensure project root is on the path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) + +from flask import Flask +from src.database import db +# Importing models registers them with SQLAlchemy so create_all() builds all tables +import src.models # noqa: F401 +from src.init_db import initialize_database + + +def create_test_app(): + """Create a minimal Flask app for testing database operations. + + Uses TEST_DATABASE_URI env var (NOT SQLALCHEMY_DATABASE_URI) to prevent + accidental connection to production/dev databases. + """ + app = Flask(__name__) + app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get( + 'TEST_DATABASE_URI', 'sqlite://' # in-memory SQLite by default + ) + app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False + app.config['TESTING'] = True + db.init_app(app) + return app + + +class TestDatabaseMigrations(unittest.TestCase): + """Test that initialize_database() runs cleanly against the configured DB engine.""" + + @classmethod + def setUpClass(cls): + cls.app = create_test_app() + with cls.app.app_context(): + initialize_database(cls.app) + + @classmethod + def tearDownClass(cls): + with cls.app.app_context(): + # Use raw DROP to avoid circular FK dependency errors in SQLAlchemy's + # drop_all() (user <-> naming_template have mutual foreign keys) + from sqlalchemy import inspect, text + tables = inspect(db.engine).get_table_names() + with db.engine.connect() as conn: + if db.engine.name == 'postgresql': + for table in tables: + conn.execute(text(f'DROP TABLE IF EXISTS "{table}" CASCADE')) + else: + conn.execute(text('PRAGMA foreign_keys = OFF')) + for table in tables: + conn.execute(text(f'DROP TABLE IF EXISTS "{table}"')) + conn.execute(text('PRAGMA foreign_keys = ON')) + conn.commit() + + def _get_table_names(self): + from sqlalchemy import inspect + inspector = inspect(db.engine) + return inspector.get_table_names() + + def _get_column_names(self, table): + from sqlalchemy import inspect + inspector = inspect(db.engine) + return [col['name'] for col in inspector.get_columns(table)] + + def test_core_tables_exist(self): + """Verify that all core tables were created.""" + with self.app.app_context(): + tables = self._get_table_names() + expected_tables = [ + 'user', 'recording', 'transcript_chunk', 'tag', + 'folder', 'share', 'internal_share', 'system_setting', + 'speaker', 'processing_job', 'group', 'group_membership', + ] + for table in expected_tables: + self.assertIn(table, tables, f"Missing table: {table}") + + def test_user_migration_columns(self): + """Verify columns added by migrations exist on the user table.""" + with self.app.app_context(): + columns = self._get_column_names('user') + expected = [ + 'id', 'username', 'email', 'password', + 'transcription_language', 'output_language', 'ui_language', + 'summary_prompt', 'extract_events', 'name', 'job_title', + 'company', 'diarize', 'sso_provider', 'sso_subject', + 'can_share_publicly', 'monthly_token_budget', + 'monthly_transcription_budget', 'email_verified', + 'auto_speaker_labelling', 'auto_summarization', + ] + for col in expected: + self.assertIn(col, columns, f"Missing user column: {col}") + + def test_recording_migration_columns(self): + """Verify columns added by migrations exist on the recording table.""" + with self.app.app_context(): + columns = self._get_column_names('recording') + expected = [ + 'id', 'is_inbox', 'is_highlighted', 'mime_type', + 'completed_at', 'processing_time_seconds', 'error_message', + 'folder_id', 'audio_deleted_at', 'deletion_exempt', + 'speaker_embeddings', + ] + for col in expected: + self.assertIn(col, columns, f"Missing recording column: {col}") + + def test_tag_migration_columns(self): + """Verify columns added by migrations exist on the tag table.""" + with self.app.app_context(): + columns = self._get_column_names('tag') + expected = [ + 'id', 'protect_from_deletion', 'group_id', + 'retention_days', 'auto_share_on_apply', + 'naming_template_id', 'export_template_id', + ] + for col in expected: + self.assertIn(col, columns, f"Missing tag column: {col}") + + def test_system_settings_initialized(self): + """Verify that default system settings were created.""" + with self.app.app_context(): + from src.models import SystemSetting + expected_keys = [ + 'transcript_length_limit', 'max_file_size_mb', + 'asr_timeout_seconds', 'disable_auto_summarization', + 'enable_folders', + ] + for key in expected_keys: + setting = SystemSetting.query.filter_by(key=key).first() + self.assertIsNotNone(setting, f"Missing system setting: {key}") + + def test_engine_type_matches_expectation(self): + """Sanity check: confirm we're testing against the expected engine.""" + with self.app.app_context(): + uri = self.app.config['SQLALCHEMY_DATABASE_URI'] + engine_name = db.engine.name + if uri.startswith('postgresql'): + self.assertEqual(engine_name, 'postgresql') + else: + self.assertEqual(engine_name, 'sqlite') + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/test_video_passthrough.py b/tests/test_video_passthrough.py new file mode 100644 index 0000000..eb2c133 --- /dev/null +++ b/tests/test_video_passthrough.py @@ -0,0 +1,435 @@ +""" +Test suite for the VIDEO_PASSTHROUGH_ASR feature. + +Tests configuration, code path correctness, and interaction with VIDEO_RETENTION +across all entry points (processing pipeline, upload handler, file monitor, incognito). +Uses static analysis — no running server or real video files required. + +Run with: python tests/test_video_passthrough.py +""" + +import os +import re +import sys +import unittest +from pathlib import Path + +TEST_DIR = os.path.dirname(os.path.abspath(__file__)) +PROJECT_ROOT = os.path.dirname(TEST_DIR) +sys.path.insert(0, PROJECT_ROOT) + + +def read_file(rel_path): + with open(os.path.join(PROJECT_ROOT, rel_path), 'r') as f: + return f.read() + + +# Cache file contents once — they don't change during the run +PROCESSING = read_file('src/tasks/processing.py') +RECORDINGS = read_file('src/api/recordings.py') +FILE_MONITOR = read_file('src/file_monitor.py') +APP_CONFIG = read_file('src/config/app_config.py') +ENV_EXAMPLE = read_file('config/env.transcription.example') + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +def get_function_body(source, func_name): + """Extract the body of a top-level function from source code.""" + pattern = rf'^def {func_name}\(' + lines = source.split('\n') + start = None + for i, line in enumerate(lines): + if re.match(pattern, line): + start = i + break + if start is None: + return '' + # Collect until next top-level def or class or EOF + body_lines = [lines[start]] + for line in lines[start + 1:]: + if line and not line[0].isspace() and (line.startswith('def ') or line.startswith('class ')): + break + body_lines.append(line) + return '\n'.join(body_lines) + + +def split_at_incognito(source): + """Split processing.py into main and incognito sections.""" + marker = 'def transcribe_incognito(' + idx = source.find(marker) + if idx == -1: + return source, '' + return source[:idx], source[idx:] + + +PROCESSING_MAIN, PROCESSING_INCOGNITO = split_at_incognito(PROCESSING) + + +# =========================================================================== +# 1. Configuration +# =========================================================================== + +class TestPassthroughConfig(unittest.TestCase): + """VIDEO_PASSTHROUGH_ASR env var is defined and defaults to false.""" + + FILES_THAT_NEED_IT = [ + ('src/config/app_config.py', APP_CONFIG), + ('src/tasks/processing.py', PROCESSING), + ('src/api/recordings.py', RECORDINGS), + ('src/file_monitor.py', FILE_MONITOR), + ] + + def test_defined_in_all_files(self): + for rel_path, content in self.FILES_THAT_NEED_IT: + with self.subTest(file=rel_path): + self.assertIn('VIDEO_PASSTHROUGH_ASR', content, + f"VIDEO_PASSTHROUGH_ASR missing from {rel_path}") + + def test_default_is_false_everywhere(self): + for rel_path, content in self.FILES_THAT_NEED_IT: + match = re.search( + r"VIDEO_PASSTHROUGH_ASR\s*=\s*os\.environ\.get\('VIDEO_PASSTHROUGH_ASR',\s*'(\w+)'\)", + content + ) + if match: + with self.subTest(file=rel_path): + self.assertEqual(match.group(1), 'false', + f"Default should be 'false' in {rel_path}") + + def test_canonical_definition_in_app_config(self): + self.assertIn( + "VIDEO_PASSTHROUGH_ASR = os.environ.get('VIDEO_PASSTHROUGH_ASR', 'false').lower() == 'true'", + APP_CONFIG + ) + + def test_documented_in_env_example(self): + self.assertIn('VIDEO_PASSTHROUGH_ASR', ENV_EXAMPLE) + + def test_processing_imports_from_config(self): + self.assertIn('VIDEO_PASSTHROUGH_ASR', PROCESSING) + # Should import from app_config, not read os.environ directly + self.assertIn('import', PROCESSING) + # Verify it's in an import line from app_config + import_lines = [l for l in PROCESSING.split('\n') + if 'from src.config.app_config import' in l] + found = any('VIDEO_PASSTHROUGH_ASR' in l for l in import_lines) + self.assertTrue(found, "processing.py should import VIDEO_PASSTHROUGH_ASR from app_config") + + +# =========================================================================== +# 2. Processing pipeline — main transcription path +# =========================================================================== + +class TestProcessingMainPath(unittest.TestCase): + """Test transcribe_with_connector() video passthrough code paths.""" + + def test_passthrough_branch_exists_before_retention(self): + """VIDEO_PASSTHROUGH_ASR is checked before VIDEO_RETENTION in the is_video block.""" + # Inside the `if is_video:` block, passthrough should be the first check + video_block_start = PROCESSING_MAIN.find('if is_video:') + self.assertNotEqual(video_block_start, -1) + + after_video = PROCESSING_MAIN[video_block_start:] + passthrough_pos = after_video.find('if VIDEO_PASSTHROUGH_ASR:') + retention_pos = after_video.find('elif VIDEO_RETENTION:') + + self.assertNotEqual(passthrough_pos, -1, "Missing VIDEO_PASSTHROUGH_ASR check in is_video block") + self.assertNotEqual(retention_pos, -1, "Missing elif VIDEO_RETENTION check") + self.assertLess(passthrough_pos, retention_pos, + "VIDEO_PASSTHROUGH_ASR should be checked before VIDEO_RETENTION") + + def test_passthrough_does_not_call_extract_audio(self): + """The passthrough branch must not call extract_audio_from_video.""" + video_block = PROCESSING_MAIN[PROCESSING_MAIN.find('if is_video:'):] + # Find the passthrough branch (from `if VIDEO_PASSTHROUGH_ASR:` to `elif VIDEO_RETENTION:`) + pt_start = video_block.find('if VIDEO_PASSTHROUGH_ASR:') + pt_end = video_block.find('elif VIDEO_RETENTION:') + passthrough_block = video_block[pt_start:pt_end] + self.assertNotIn('extract_audio_from_video', passthrough_block, + "Passthrough branch should NOT extract audio") + + def test_passthrough_keeps_original_filepath(self): + """Passthrough sets actual_filepath = filepath (the original video).""" + video_block = PROCESSING_MAIN[PROCESSING_MAIN.find('if is_video:'):] + pt_start = video_block.find('if VIDEO_PASSTHROUGH_ASR:') + pt_end = video_block.find('elif VIDEO_RETENTION:') + passthrough_block = video_block[pt_start:pt_end] + self.assertIn('actual_filepath = filepath', passthrough_block) + + def test_passthrough_with_retention_sets_recording_path(self): + """When both passthrough and retention are on, recording.audio_path is set.""" + video_block = PROCESSING_MAIN[PROCESSING_MAIN.find('if is_video:'):] + pt_start = video_block.find('if VIDEO_PASSTHROUGH_ASR:') + pt_end = video_block.find('elif VIDEO_RETENTION:') + passthrough_block = video_block[pt_start:pt_end] + self.assertIn('if VIDEO_RETENTION:', passthrough_block, + "Passthrough branch should conditionally handle retention") + self.assertIn('recording.audio_path = filepath', passthrough_block) + self.assertIn("mimetypes.guess_type(filepath)", passthrough_block) + + def test_video_passthrough_active_flag_set(self): + """video_passthrough_active flag is computed from is_video and VIDEO_PASSTHROUGH_ASR.""" + self.assertIn('video_passthrough_active = is_video and VIDEO_PASSTHROUGH_ASR', + PROCESSING_MAIN) + + def test_conversion_skipped_when_passthrough(self): + """convert_if_needed is inside an else block gated by video_passthrough_active.""" + self.assertIn('if video_passthrough_active:', PROCESSING_MAIN) + # The conversion call should be in the else branch + flag_pos = PROCESSING_MAIN.find('video_passthrough_active = is_video and VIDEO_PASSTHROUGH_ASR') + after_flag = PROCESSING_MAIN[flag_pos:] + passthrough_if = after_flag.find('if video_passthrough_active:') + else_pos = after_flag.find('else:', passthrough_if) + convert_pos = after_flag.find('convert_if_needed(', else_pos) + self.assertGreater(convert_pos, else_pos, + "convert_if_needed should be in else branch after passthrough check") + + def test_chunking_skipped_when_passthrough(self): + """Chunking evaluates to False when video_passthrough_active.""" + # Find the chunking decision area after the flag + flag_pos = PROCESSING_MAIN.find('video_passthrough_active = is_video and VIDEO_PASSTHROUGH_ASR') + after_flag = PROCESSING_MAIN[flag_pos:] + self.assertIn('if video_passthrough_active:\n should_chunk = False', after_flag) + + def test_conversion_still_runs_for_non_passthrough(self): + """convert_if_needed still runs when passthrough is off or file is audio.""" + # The else branch of the passthrough check should contain convert_if_needed + self.assertIn('conversion_result = convert_if_needed(', PROCESSING_MAIN) + + def test_chunking_still_evaluated_for_non_passthrough(self): + """Chunking is still evaluated normally when passthrough is not active.""" + self.assertIn('chunking_service.needs_chunking(actual_filepath, False, connector_specs)', + PROCESSING_MAIN) + + +# =========================================================================== +# 3. Processing pipeline — VIDEO_RETENTION paths still intact +# =========================================================================== + +class TestRetentionNotBroken(unittest.TestCase): + """Existing VIDEO_RETENTION behavior must be preserved.""" + + def test_retention_branch_still_extracts_audio(self): + """elif VIDEO_RETENTION branch still calls extract_audio_from_video.""" + video_block = PROCESSING_MAIN[PROCESSING_MAIN.find('if is_video:'):] + ret_start = video_block.find('elif VIDEO_RETENTION:') + # Find next else: at the same indent level + after_ret = video_block[ret_start:] + else_pos = after_ret.find('\n else:') + retention_block = after_ret[:else_pos] if else_pos != -1 else after_ret[:500] + self.assertIn('extract_audio_from_video(filepath, cleanup_original=False)', + retention_block) + + def test_default_branch_still_extracts_and_deletes(self): + """The final else branch extracts audio with default cleanup (deletes video).""" + video_block = PROCESSING_MAIN[PROCESSING_MAIN.find('if is_video:'):] + # The last else in the is_video block + self.assertIn('extract_audio_from_video(filepath)', video_block) + + def test_temp_audio_cleanup_still_present(self): + """Temp audio from retention is still cleaned up after transcription.""" + self.assertIn('is_video and VIDEO_RETENTION and audio_filepath', PROCESSING_MAIN) + self.assertIn('Cleaned up temp audio from video retention', PROCESSING_MAIN) + + +# =========================================================================== +# 4. Incognito path +# =========================================================================== + +class TestIncognitoPassthrough(unittest.TestCase): + """Test passthrough in the incognito transcription path.""" + + def test_passthrough_flag_set_in_incognito(self): + """video_passthrough_active is computed in incognito path.""" + self.assertIn('video_passthrough_active = is_video and VIDEO_PASSTHROUGH_ASR', + PROCESSING_INCOGNITO) + + def test_passthrough_skips_extraction_in_incognito(self): + """When passthrough is on, incognito skips extract_audio_from_video.""" + # The passthrough branch logs and does NOT extract + self.assertIn('[Incognito] Video passthrough: sending original video to ASR', + PROCESSING_INCOGNITO) + + def test_passthrough_skips_conversion_in_incognito(self): + """When passthrough is on, incognito skips convert_if_needed.""" + self.assertIn('[Incognito] Video passthrough: skipping codec conversion', + PROCESSING_INCOGNITO) + + def test_passthrough_skips_chunking_in_incognito(self): + """When passthrough is on, incognito chunking is False.""" + body = PROCESSING_INCOGNITO + self.assertIn('if video_passthrough_active:\n should_chunk = False', body) + + def test_incognito_does_not_reference_video_retention(self): + """Incognito path should NOT reference VIDEO_RETENTION (no retention in incognito).""" + self.assertNotIn('VIDEO_RETENTION', PROCESSING_INCOGNITO) + + def test_incognito_still_extracts_without_passthrough(self): + """Without passthrough, incognito still extracts audio from video.""" + self.assertIn('extract_audio_from_video(filepath, cleanup_original=False)', + PROCESSING_INCOGNITO) + + def test_incognito_still_converts_without_passthrough(self): + """Without passthrough, incognito still runs convert_if_needed.""" + self.assertIn('convert_if_needed(', PROCESSING_INCOGNITO) + + +# =========================================================================== +# 5. Upload handler (recordings.py) +# =========================================================================== + +class TestUploadHandlerPassthrough(unittest.TestCase): + """Test recordings.py upload handler respects VIDEO_PASSTHROUGH_ASR.""" + + def test_skip_conversion_for_passthrough_video(self): + """Upload handler skips conversion when passthrough or retention + video.""" + self.assertIn('VIDEO_RETENTION or VIDEO_PASSTHROUGH_ASR) and has_video', RECORDINGS) + + def test_extension_fallback_checks_passthrough(self): + """Extension-based video detection also fires for VIDEO_PASSTHROUGH_ASR.""" + self.assertIn('VIDEO_RETENTION or VIDEO_PASSTHROUGH_ASR', RECORDINGS) + + def test_convert_if_needed_still_in_else(self): + """convert_if_needed still runs for audio files or when both flags are off.""" + self.assertIn('convert_if_needed(', RECORDINGS) + + def test_passthrough_log_message(self): + """Upload handler logs which mode caused the skip.""" + self.assertIn("'VIDEO_PASSTHROUGH_ASR'", RECORDINGS) + + +# =========================================================================== +# 6. File monitor +# =========================================================================== + +class TestFileMonitorPassthrough(unittest.TestCase): + """Test file_monitor.py respects VIDEO_PASSTHROUGH_ASR.""" + + def test_passthrough_defined(self): + self.assertIn('VIDEO_PASSTHROUGH_ASR', FILE_MONITOR) + + def test_skip_conversion_for_passthrough_or_retention(self): + """File monitor skips conversion when passthrough or retention + video.""" + self.assertIn('VIDEO_PASSTHROUGH_ASR or VIDEO_RETENTION) and has_video', FILE_MONITOR) + + def test_convert_if_needed_in_else_branch(self): + """convert_if_needed is in the else branch, not inside the skip block.""" + lines = FILE_MONITOR.split('\n') + in_skip_block = False + found_else = False + for i, line in enumerate(lines): + if 'VIDEO_PASSTHROUGH_ASR or VIDEO_RETENTION) and has_video' in line: + in_skip_block = True + elif in_skip_block and line.strip().startswith('else:'): + in_skip_block = False + found_else = True + elif in_skip_block and 'convert_if_needed' in line: + self.fail(f"convert_if_needed inside skip block at line {i + 1}") + self.assertTrue(found_else, "Should have else branch after passthrough/retention skip") + + def test_log_distinguishes_passthrough_from_retention(self): + """Log message indicates whether passthrough or retention caused the skip.""" + self.assertIn("'passthrough'", FILE_MONITOR) + self.assertIn("'retention'", FILE_MONITOR) + + +# =========================================================================== +# 7. Audio files unaffected by passthrough +# =========================================================================== + +class TestAudioUnaffected(unittest.TestCase): + """VIDEO_PASSTHROUGH_ASR must only affect video files, never audio.""" + + def test_passthrough_flag_gated_on_is_video(self): + """video_passthrough_active is always `is_video and VIDEO_PASSTHROUGH_ASR`.""" + # Main path + self.assertIn('video_passthrough_active = is_video and VIDEO_PASSTHROUGH_ASR', + PROCESSING_MAIN) + # Incognito path + self.assertIn('video_passthrough_active = is_video and VIDEO_PASSTHROUGH_ASR', + PROCESSING_INCOGNITO) + + def test_upload_handler_gated_on_has_video(self): + """Upload handler skip is gated on `has_video`.""" + self.assertIn('and has_video', RECORDINGS) + + def test_file_monitor_gated_on_has_video(self): + """File monitor skip is gated on `has_video`.""" + self.assertIn('and has_video', FILE_MONITOR) + + +# =========================================================================== +# 8. Documentation +# =========================================================================== + +class TestDocumentation(unittest.TestCase): + """VIDEO_PASSTHROUGH_ASR is documented in all relevant places.""" + + DOC_FILES = [ + 'config/env.transcription.example', + 'docs/admin-guide/system-settings.md', + 'docs/features.md', + 'docs/getting-started/installation.md', + ] + + def test_documented_in_all_relevant_files(self): + for rel_path in self.DOC_FILES: + content = read_file(rel_path) + with self.subTest(file=rel_path): + self.assertIn('VIDEO_PASSTHROUGH_ASR', content, + f"VIDEO_PASSTHROUGH_ASR missing from {rel_path}") + + def test_env_example_commented_out_by_default(self): + """The env example has the option commented out (opt-in).""" + self.assertIn('# VIDEO_PASSTHROUGH_ASR=false', ENV_EXAMPLE) + + def test_docs_warn_about_asr_compatibility(self): + """Docs warn that standard APIs will reject video input.""" + system_settings = read_file('docs/admin-guide/system-settings.md') + installation = read_file('docs/getting-started/installation.md') + self.assertIn('reject', system_settings.lower()) + self.assertIn('reject', installation.lower()) + + +# =========================================================================== +# 9. Interaction matrix — structural verification +# =========================================================================== + +class TestInteractionMatrix(unittest.TestCase): + """ + Verify the 3-way branch structure in processing.py: + if VIDEO_PASSTHROUGH_ASR → passthrough + elif VIDEO_RETENTION → retention + else → default extraction + """ + + def test_three_way_branch_in_main_path(self): + """Main path has if/elif/else for passthrough/retention/default.""" + video_block = PROCESSING_MAIN[PROCESSING_MAIN.find('if is_video:'):] + # All three branches present in order + pt_pos = video_block.find('if VIDEO_PASSTHROUGH_ASR:') + ret_pos = video_block.find('elif VIDEO_RETENTION:') + else_pos = video_block.find('\n else:', ret_pos) + self.assertNotEqual(pt_pos, -1) + self.assertNotEqual(ret_pos, -1) + self.assertNotEqual(else_pos, -1) + self.assertLess(pt_pos, ret_pos) + self.assertLess(ret_pos, else_pos) + + def test_incognito_two_way_branch(self): + """Incognito has if/else for passthrough/extract (no retention).""" + video_block = PROCESSING_INCOGNITO[PROCESSING_INCOGNITO.find('if is_video:'):] + pt_pos = video_block.find('if VIDEO_PASSTHROUGH_ASR:') + else_pos = video_block.find('\n else:', pt_pos) + self.assertNotEqual(pt_pos, -1) + self.assertNotEqual(else_pos, -1) + # No VIDEO_RETENTION in incognito + incognito_video_block = video_block[:500] + self.assertNotIn('VIDEO_RETENTION', incognito_video_block) + + +if __name__ == '__main__': + unittest.main(verbosity=2) diff --git a/tests/test_video_retention.py b/tests/test_video_retention.py new file mode 100644 index 0000000..5428d57 --- /dev/null +++ b/tests/test_video_retention.py @@ -0,0 +1,370 @@ +""" +Test suite for the VIDEO_RETENTION feature. + +Tests code paths, configuration, and template correctness for video retention. +Does NOT require a running server or real video files - uses static analysis +and mocking where possible. + +Run with: python tests/test_video_retention.py +""" + +import os +import re +import sys +import json +import unittest +from unittest.mock import patch, MagicMock +from pathlib import Path + +# Find project root +TEST_DIR = os.path.dirname(os.path.abspath(__file__)) +PROJECT_ROOT = os.path.dirname(TEST_DIR) +sys.path.insert(0, PROJECT_ROOT) + + +class TestVideoRetentionConfig(unittest.TestCase): + """Test that VIDEO_RETENTION env var is read correctly everywhere.""" + + ALL_FILES = [ + 'src/app.py', + 'src/tasks/processing.py', + 'src/api/system.py', + 'src/api/recordings.py', + 'src/file_monitor.py', + ] + + def _read_file(self, rel_path): + with open(os.path.join(PROJECT_ROOT, rel_path), 'r') as f: + return f.read() + + def test_env_var_read_in_all_entry_points(self): + """VIDEO_RETENTION env var is read in all files that need it.""" + for rel_path in self.ALL_FILES: + content = self._read_file(rel_path) + self.assertIn("VIDEO_RETENTION", content, f"VIDEO_RETENTION missing from {rel_path}") + + def test_exposed_in_api_config(self): + """VIDEO_RETENTION is exposed in the /api/config response.""" + content = self._read_file('src/api/system.py') + self.assertIn("'video_retention': VIDEO_RETENTION", content) + + def test_default_is_false(self): + """All VIDEO_RETENTION reads default to 'false'.""" + for rel_path in self.ALL_FILES: + content = self._read_file(rel_path) + match = re.search(r"VIDEO_RETENTION\s*=\s*os\.environ\.get\('VIDEO_RETENTION',\s*'(\w+)'\)", content) + if match: + self.assertEqual(match.group(1), 'false', f"Default should be 'false' in {rel_path}") + + +class TestProcessingPipelineVideoRetention(unittest.TestCase): + """Test processing.py video retention code paths via static analysis.""" + + @classmethod + def setUpClass(cls): + with open(os.path.join(PROJECT_ROOT, 'src/tasks/processing.py'), 'r') as f: + cls.content = f.read() + + def test_video_retention_true_keeps_original(self): + """When VIDEO_RETENTION=True, recording.audio_path is set to original filepath.""" + # The VIDEO_RETENTION=True branch should set recording.audio_path = filepath + self.assertIn('recording.audio_path = filepath', self.content) + + def test_video_retention_true_extracts_without_cleanup(self): + """When VIDEO_RETENTION=True, extract_audio_from_video is called with cleanup_original=False.""" + self.assertIn('extract_audio_from_video(filepath, cleanup_original=False)', self.content) + + def test_video_retention_false_extracts_with_cleanup(self): + """When VIDEO_RETENTION=False, extract_audio_from_video is called with default cleanup.""" + self.assertIn('extract_audio_from_video(filepath)', self.content) + + def test_temp_audio_cleanup_after_transcription(self): + """Temp audio from video retention is cleaned up after transcription.""" + self.assertIn('is_video and VIDEO_RETENTION and audio_filepath', self.content) + self.assertIn('Cleaned up temp audio from video retention', self.content) + + def test_audio_filepath_initialized_to_none(self): + """audio_filepath is initialized to None before the is_video check.""" + # Find the initialization line + self.assertIn('audio_filepath = None', self.content) + + def test_video_mime_type_set_for_retention(self): + """When retaining video, mime_type reflects actual video type.""" + self.assertIn("mimetypes.guess_type(filepath)[0] or 'video/mp4'", self.content) + + def test_duration_uses_recording_audio_path(self): + """Duration lookup uses recording.audio_path (always valid), not filepath.""" + self.assertIn('chunking_service.get_audio_duration(recording.audio_path)', self.content) + # Should NOT use bare filepath for duration (pre-existing bug was fixed) + self.assertNotIn('chunking_service.get_audio_duration(filepath)', self.content) + + +class TestUploadHandlerVideoRetention(unittest.TestCase): + """Test recordings.py upload handler video retention code paths.""" + + @classmethod + def setUpClass(cls): + with open(os.path.join(PROJECT_ROOT, 'src/api/recordings.py'), 'r') as f: + cls.content = f.read() + + def test_upload_handler_skips_conversion_for_video_retention(self): + """Upload handler skips convert_if_needed for videos when retention is on.""" + self.assertIn('VIDEO_RETENTION and has_video', self.content) + self.assertIn('skipping conversion', self.content) + + def test_upload_handler_has_video_from_codec_info(self): + """Upload handler reads has_video from codec_info probe.""" + self.assertIn("has_video = codec_info.get('has_video', False)", self.content) + + def test_convert_if_needed_still_in_else_branch(self): + """convert_if_needed still runs for non-video files or when retention is off.""" + self.assertIn('convert_if_needed(', self.content) + + def test_processing_pipeline_still_converts_audio(self): + """Processing pipeline runs convert_if_needed on extracted audio (the safety net).""" + proc_content = open(os.path.join(PROJECT_ROOT, 'src/tasks/processing.py')).read() + # After the video extraction block, convert_if_needed runs on actual_filepath + self.assertIn('conversion_result = convert_if_needed(\n' + ' filepath=actual_filepath,', proc_content) + + +class TestFileMonitorVideoRetention(unittest.TestCase): + """Test file_monitor.py video retention code paths.""" + + @classmethod + def setUpClass(cls): + with open(os.path.join(PROJECT_ROOT, 'src/file_monitor.py'), 'r') as f: + cls.content = f.read() + + def test_video_retention_skips_conversion(self): + """When VIDEO_RETENTION=True and has_video=True, convert_if_needed is skipped.""" + # Should have the guard: if VIDEO_RETENTION and has_video: ... skip conversion + self.assertIn('VIDEO_RETENTION and has_video', self.content) + self.assertIn('skipping conversion', self.content) + + def test_no_double_extraction(self): + """File monitor does NOT call convert_if_needed for videos when retention is on.""" + # The convert_if_needed call should be in the else branch + lines = self.content.split('\n') + in_retention_skip_block = False + found_convert_in_else = False + + for i, line in enumerate(lines): + if 'VIDEO_RETENTION and has_video' in line and 'if' in line: + in_retention_skip_block = True + elif in_retention_skip_block and 'else:' in line: + in_retention_skip_block = False + found_convert_in_else = True + elif in_retention_skip_block and 'convert_if_needed' in line: + self.fail(f"convert_if_needed called inside VIDEO_RETENTION skip block at line {i+1}") + + self.assertTrue(found_convert_in_else, "Should have else branch after video retention skip") + + def test_no_video_retention_param_in_convert_call(self): + """convert_if_needed should NOT receive a video_retention parameter.""" + # Ensure the old video_retention parameter isn't being passed + self.assertNotIn('video_retention=VIDEO_RETENTION', self.content) + + +class TestAudioConversionNotModified(unittest.TestCase): + """Verify audio_conversion.py was fully reverted (no video_retention parameter).""" + + @classmethod + def setUpClass(cls): + with open(os.path.join(PROJECT_ROOT, 'src/utils/audio_conversion.py'), 'r') as f: + cls.content = f.read() + + def test_no_video_retention_parameter(self): + """convert_if_needed should not have a video_retention parameter.""" + self.assertNotIn('video_retention', self.content) + + def test_no_should_delete_original(self): + """No should_delete_original variable should exist.""" + self.assertNotIn('should_delete_original', self.content) + + +class TestSendFileConditional(unittest.TestCase): + """Test that send_file calls use conditional=True for range request support.""" + + def _read_file(self, rel_path): + with open(os.path.join(PROJECT_ROOT, rel_path), 'r') as f: + return f.read() + + def test_recordings_streaming_has_conditional(self): + """Streaming send_file in recordings.py has conditional=True.""" + content = self._read_file('src/api/recordings.py') + # Find the non-download send_file call + self.assertIn('send_file(recording.audio_path, conditional=True)', content) + + def test_recordings_download_has_conditional(self): + """Download send_file in recordings.py has conditional=True.""" + content = self._read_file('src/api/recordings.py') + self.assertIn('as_attachment=True, download_name=filename, conditional=True', content) + + def test_shares_has_conditional(self): + """send_file in shares.py has conditional=True.""" + content = self._read_file('src/api/shares.py') + self.assertIn('send_file(recording.audio_path, conditional=True)', content) + + +class TestFrontendTemplates(unittest.TestCase): + """Test that frontend templates correctly switch between video and audio.""" + + TEMPLATE_FILES = [ + 'templates/components/detail/desktop-right-panel.html', + 'templates/components/detail/audio-player.html', + 'templates/modals/speaker-modal.html', + 'templates/share.html', + ] + + def _read_template(self, rel_path): + with open(os.path.join(PROJECT_ROOT, rel_path), 'r') as f: + return f.read() + + def test_all_templates_use_dynamic_component(self): + """All player templates use for video/audio switching.""" + for tmpl in self.TEMPLATE_FILES: + content = self._read_template(tmpl) + self.assertIn("", content, f"Missing in {tmpl}") + + def test_no_bare_audio_elements_in_main_players(self): + """Main player templates should not have bare

    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 PI;moRUdF_ree`&C_P0JmPy(eldKQ}k{E+< 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 z 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�$!Y0gs-s2g!;l{qtVe7<4Q;x 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