django-cfg 1.4.21__py3-none-any.whl → 1.4.24__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- django_cfg/__init__.py +4 -4
- django_cfg/apps/accounts/__init__.py +1 -1
- django_cfg/apps/accounts/__models.py +30 -29
- django_cfg/apps/accounts/admin/__init__.py +14 -3
- django_cfg/apps/accounts/admin/activity_admin.py +19 -19
- django_cfg/apps/accounts/admin/filters.py +7 -6
- django_cfg/apps/accounts/admin/group_admin.py +10 -16
- django_cfg/apps/accounts/admin/inlines.py +21 -19
- django_cfg/apps/accounts/admin/otp_admin.py +12 -12
- django_cfg/apps/accounts/admin/registration_admin.py +24 -24
- django_cfg/apps/accounts/admin/resources.py +49 -48
- django_cfg/apps/accounts/admin/twilio_admin.py +37 -37
- django_cfg/apps/accounts/admin/user_admin.py +45 -41
- django_cfg/apps/accounts/management/commands/otp_test.py +11 -11
- django_cfg/apps/accounts/managers/__init__.py +1 -1
- django_cfg/apps/accounts/managers/user_manager.py +6 -7
- django_cfg/apps/accounts/migrations/0001_initial.py +3 -2
- django_cfg/apps/accounts/models/__init__.py +15 -16
- django_cfg/apps/accounts/models/activity.py +5 -5
- django_cfg/apps/accounts/models/integrations.py +15 -15
- django_cfg/apps/accounts/models/registration.py +3 -2
- django_cfg/apps/accounts/models/user.py +3 -2
- django_cfg/apps/accounts/serializers/__init__.py +10 -3
- django_cfg/apps/accounts/serializers/otp.py +5 -4
- django_cfg/apps/accounts/serializers/profile.py +4 -5
- django_cfg/apps/accounts/serializers/webhook.py +13 -13
- django_cfg/apps/accounts/services/activity_service.py +13 -12
- django_cfg/apps/accounts/services/otp_service.py +16 -14
- django_cfg/apps/accounts/signals.py +18 -16
- django_cfg/apps/accounts/urls.py +10 -5
- django_cfg/apps/accounts/utils/notifications.py +22 -22
- django_cfg/apps/accounts/views/__init__.py +1 -1
- django_cfg/apps/accounts/views/otp.py +15 -14
- django_cfg/apps/accounts/views/profile.py +14 -10
- django_cfg/apps/accounts/views/webhook.py +46 -48
- django_cfg/apps/agents/__init__.py +3 -3
- django_cfg/apps/agents/admin/__init__.py +1 -1
- django_cfg/apps/agents/admin/execution_admin.py +68 -72
- django_cfg/apps/agents/admin/registry_admin.py +50 -54
- django_cfg/apps/agents/admin/toolsets_admin.py +63 -67
- django_cfg/apps/agents/apps.py +3 -3
- django_cfg/apps/agents/core/__init__.py +4 -4
- django_cfg/apps/agents/core/dependencies.py +24 -23
- django_cfg/apps/agents/core/django_agent.py +41 -39
- django_cfg/apps/agents/core/exceptions.py +12 -12
- django_cfg/apps/agents/core/models.py +16 -15
- django_cfg/apps/agents/core/orchestrator.py +58 -58
- django_cfg/apps/agents/examples/simple_example.py +24 -19
- django_cfg/apps/agents/integration/__init__.py +1 -1
- django_cfg/apps/agents/integration/middleware.py +12 -11
- django_cfg/apps/agents/integration/registry.py +52 -49
- django_cfg/apps/agents/integration/signals.py +5 -5
- django_cfg/apps/agents/management/commands/create_agent.py +39 -38
- django_cfg/apps/agents/management/commands/orchestrator_status.py +40 -39
- django_cfg/apps/agents/managers/__init__.py +8 -3
- django_cfg/apps/agents/managers/execution.py +42 -41
- django_cfg/apps/agents/managers/registry.py +40 -39
- django_cfg/apps/agents/managers/toolsets.py +87 -86
- django_cfg/apps/agents/migrations/0001_initial.py +2 -1
- django_cfg/apps/agents/models/__init__.py +2 -2
- django_cfg/apps/agents/models/execution.py +43 -42
- django_cfg/apps/agents/models/registry.py +46 -45
- django_cfg/apps/agents/models/toolsets.py +63 -62
- django_cfg/apps/agents/patterns/__init__.py +5 -5
- django_cfg/apps/agents/patterns/content_agents.py +17 -16
- django_cfg/apps/agents/toolsets/__init__.py +3 -3
- django_cfg/apps/agents/toolsets/cache_toolset.py +56 -55
- django_cfg/apps/agents/toolsets/django_toolset.py +43 -42
- django_cfg/apps/agents/toolsets/file_toolset.py +64 -63
- django_cfg/apps/agents/toolsets/orm_toolset.py +75 -74
- django_cfg/apps/agents/urls.py +3 -2
- django_cfg/apps/api/commands/urls.py +1 -0
- django_cfg/apps/api/commands/views.py +23 -26
- django_cfg/apps/api/endpoints/checker.py +5 -4
- django_cfg/apps/api/endpoints/drf_views.py +2 -2
- django_cfg/apps/api/endpoints/tests.py +6 -5
- django_cfg/apps/api/endpoints/urls.py +2 -1
- django_cfg/apps/api/endpoints/views.py +1 -0
- django_cfg/apps/api/health/drf_views.py +6 -6
- django_cfg/apps/api/health/urls.py +2 -1
- django_cfg/apps/api/health/views.py +41 -41
- django_cfg/{modules/django_ipc_client → apps/ipc}/__init__.py +6 -6
- django_cfg/apps/ipc/apps.py +28 -0
- django_cfg/apps/ipc/serializers/__init__.py +19 -0
- django_cfg/apps/ipc/serializers/serializers.py +229 -0
- django_cfg/apps/ipc/services/__init__.py +7 -0
- django_cfg/apps/ipc/services/client/__init__.py +23 -0
- django_cfg/{modules/django_ipc_client → apps/ipc/services/client}/client.py +7 -6
- django_cfg/{modules/django_ipc_client → apps/ipc/services/client}/exceptions.py +1 -1
- django_cfg/{modules/django_ipc_client/dashboard → apps/ipc/services}/monitor.py +36 -7
- django_cfg/{modules/django_ipc_client/dashboard/static/django_ipc_dashboard/js/dashboard.js → apps/ipc/static/django_cfg_ipc/js/dashboard.mjs} +131 -63
- django_cfg/{modules/django_ipc_client/dashboard/templates/django_ipc_dashboard → apps/ipc/templates/django_cfg_ipc}/base.html +5 -10
- django_cfg/apps/ipc/templates/django_cfg_ipc/dashboard.html +202 -0
- django_cfg/apps/ipc/urls.py +21 -0
- django_cfg/apps/ipc/urls_admin.py +20 -0
- django_cfg/apps/ipc/views/__init__.py +8 -0
- django_cfg/apps/ipc/views/dashboard.py +15 -0
- django_cfg/apps/ipc/views/viewsets.py +245 -0
- django_cfg/apps/knowbase/admin/__init__.py +2 -2
- django_cfg/apps/knowbase/admin/actions/__init__.py +1 -1
- django_cfg/apps/knowbase/admin/actions/visibility_actions.py +2 -1
- django_cfg/apps/knowbase/admin/archive_admin.py +81 -84
- django_cfg/apps/knowbase/admin/chat_admin.py +70 -72
- django_cfg/apps/knowbase/admin/document_admin.py +10 -11
- django_cfg/apps/knowbase/admin/external_data_admin.py +69 -71
- django_cfg/apps/knowbase/admin/helpers/__init__.py +1 -1
- django_cfg/apps/knowbase/admin/helpers/configs.py +2 -2
- django_cfg/apps/knowbase/admin/helpers/statistics.py +1 -1
- django_cfg/apps/knowbase/apps.py +13 -13
- django_cfg/apps/knowbase/config/__init__.py +7 -6
- django_cfg/apps/knowbase/config/constance_fields.py +14 -12
- django_cfg/apps/knowbase/config/constance_settings.py +32 -31
- django_cfg/apps/knowbase/config/settings.py +28 -28
- django_cfg/apps/knowbase/examples/external_data_usage.py +35 -32
- django_cfg/apps/knowbase/management/commands/knowbase_stats.py +33 -32
- django_cfg/apps/knowbase/management/commands/setup_knowbase.py +11 -13
- django_cfg/apps/knowbase/managers/__init__.py +2 -2
- django_cfg/apps/knowbase/managers/archive.py +86 -85
- django_cfg/apps/knowbase/managers/base.py +5 -5
- django_cfg/apps/knowbase/managers/chat.py +29 -28
- django_cfg/apps/knowbase/managers/document.py +39 -39
- django_cfg/apps/knowbase/managers/external_data.py +74 -73
- django_cfg/apps/knowbase/migrations/0001_initial.py +2 -1
- django_cfg/apps/knowbase/migrations/0002_archiveitem_archiveitemchunk_documentarchive_and_more.py +2 -1
- django_cfg/apps/knowbase/mixins/__init__.py +4 -4
- django_cfg/apps/knowbase/mixins/config/__init__.py +1 -1
- django_cfg/apps/knowbase/mixins/config/meta_config.py +1 -1
- django_cfg/apps/knowbase/mixins/config.py +19 -18
- django_cfg/apps/knowbase/mixins/creator.py +7 -7
- django_cfg/apps/knowbase/mixins/examples/vehicle_model_example.py +29 -28
- django_cfg/apps/knowbase/mixins/external_data_mixin.py +6 -5
- django_cfg/apps/knowbase/mixins/generators/__init__.py +1 -1
- django_cfg/apps/knowbase/mixins/generators/content_generator.py +2 -2
- django_cfg/apps/knowbase/mixins/service.py +47 -45
- django_cfg/apps/knowbase/models/__init__.py +7 -7
- django_cfg/apps/knowbase/models/archive.py +72 -72
- django_cfg/apps/knowbase/models/base.py +12 -13
- django_cfg/apps/knowbase/models/chat.py +20 -19
- django_cfg/apps/knowbase/models/document.py +37 -35
- django_cfg/apps/knowbase/models/external_data.py +41 -42
- django_cfg/apps/knowbase/serializers/__init__.py +7 -7
- django_cfg/apps/knowbase/serializers/archive_serializers.py +50 -42
- django_cfg/apps/knowbase/serializers/chat_serializers.py +16 -15
- django_cfg/apps/knowbase/serializers/document_serializers.py +13 -12
- django_cfg/apps/knowbase/serializers/external_data_serializers.py +31 -31
- django_cfg/apps/knowbase/serializers/public_serializers.py +10 -9
- django_cfg/apps/knowbase/services/__init__.py +7 -7
- django_cfg/apps/knowbase/services/archive/__init__.py +7 -7
- django_cfg/apps/knowbase/services/archive/analyzers/__init__.py +1 -1
- django_cfg/apps/knowbase/services/archive/analyzers/tag_generator.py +1 -1
- django_cfg/apps/knowbase/services/archive/archive_service.py +109 -112
- django_cfg/apps/knowbase/services/archive/chunking/__init__.py +3 -3
- django_cfg/apps/knowbase/services/archive/chunking/base.py +1 -0
- django_cfg/apps/knowbase/services/archive/chunking/json_chunker.py +4 -3
- django_cfg/apps/knowbase/services/archive/chunking/markdown_chunker.py +5 -4
- django_cfg/apps/knowbase/services/archive/chunking/python_chunker.py +6 -5
- django_cfg/apps/knowbase/services/archive/chunking/text_chunker.py +4 -3
- django_cfg/apps/knowbase/services/archive/chunking_service.py +3 -7
- django_cfg/apps/knowbase/services/archive/context/__init__.py +1 -1
- django_cfg/apps/knowbase/services/archive/context/builders.py +2 -1
- django_cfg/apps/knowbase/services/archive/context/models.py +2 -1
- django_cfg/apps/knowbase/services/archive/exceptions.py +5 -5
- django_cfg/apps/knowbase/services/archive/extraction_service.py +111 -110
- django_cfg/apps/knowbase/services/archive/vectorization_service.py +80 -77
- django_cfg/apps/knowbase/services/base.py +11 -9
- django_cfg/apps/knowbase/services/chat_service.py +40 -39
- django_cfg/apps/knowbase/services/document_service.py +28 -27
- django_cfg/apps/knowbase/services/embedding/__init__.py +9 -9
- django_cfg/apps/knowbase/services/embedding/async_processor.py +38 -40
- django_cfg/apps/knowbase/services/embedding/batch_processor.py +45 -42
- django_cfg/apps/knowbase/services/embedding/batch_result.py +7 -6
- django_cfg/apps/knowbase/services/embedding/models.py +52 -51
- django_cfg/apps/knowbase/services/embedding/processors.py +24 -23
- django_cfg/apps/knowbase/services/embedding/utils.py +17 -17
- django_cfg/apps/knowbase/services/prompt_builder.py +24 -23
- django_cfg/apps/knowbase/services/search_service.py +52 -49
- django_cfg/apps/knowbase/signals/__init__.py +2 -5
- django_cfg/apps/knowbase/signals/archive_signals.py +35 -34
- django_cfg/apps/knowbase/signals/chat_signals.py +6 -5
- django_cfg/apps/knowbase/signals/document_signals.py +22 -22
- django_cfg/apps/knowbase/signals/external_data_signals.py +22 -22
- django_cfg/apps/knowbase/tasks/__init__.py +6 -7
- django_cfg/apps/knowbase/tasks/archive_tasks.py +41 -41
- django_cfg/apps/knowbase/tasks/document_processing.py +49 -44
- django_cfg/apps/knowbase/tasks/external_data_tasks.py +46 -44
- django_cfg/apps/knowbase/tasks/maintenance.py +26 -24
- django_cfg/apps/knowbase/urls.py +3 -2
- django_cfg/apps/knowbase/urls_admin.py +6 -3
- django_cfg/apps/knowbase/urls_system.py +4 -5
- django_cfg/apps/knowbase/utils/chunk_settings.py +22 -20
- django_cfg/apps/knowbase/utils/text_processing.py +76 -75
- django_cfg/apps/knowbase/utils/validation.py +9 -9
- django_cfg/apps/knowbase/views/__init__.py +5 -5
- django_cfg/apps/knowbase/views/archive_views.py +90 -87
- django_cfg/apps/knowbase/views/base.py +9 -12
- django_cfg/apps/knowbase/views/chat_views.py +32 -32
- django_cfg/apps/knowbase/views/document_views.py +27 -28
- django_cfg/apps/knowbase/views/public_views.py +19 -19
- django_cfg/apps/leads/admin/leads_admin.py +41 -45
- django_cfg/apps/leads/admin/resources.py +14 -14
- django_cfg/apps/leads/admin.py +7 -9
- django_cfg/apps/leads/apps.py +1 -1
- django_cfg/apps/leads/models.py +17 -17
- django_cfg/apps/leads/serializers.py +5 -4
- django_cfg/apps/leads/signals.py +7 -7
- django_cfg/apps/leads/tests.py +47 -47
- django_cfg/apps/leads/urls.py +2 -2
- django_cfg/apps/leads/views.py +11 -11
- django_cfg/apps/maintenance/__init__.py +3 -3
- django_cfg/apps/maintenance/admin/__init__.py +1 -1
- django_cfg/apps/maintenance/admin/api_key_admin.py +36 -36
- django_cfg/apps/maintenance/admin/log_admin.py +35 -37
- django_cfg/apps/maintenance/admin/scheduled_admin.py +47 -51
- django_cfg/apps/maintenance/admin/site_admin.py +49 -52
- django_cfg/apps/maintenance/apps.py +2 -2
- django_cfg/apps/maintenance/management/commands/maintenance.py +53 -52
- django_cfg/apps/maintenance/management/commands/process_scheduled_maintenance.py +44 -44
- django_cfg/apps/maintenance/management/commands/sync_cloudflare.py +32 -32
- django_cfg/apps/maintenance/managers/__init__.py +1 -1
- django_cfg/apps/maintenance/managers/cloudflare_site_manager.py +39 -38
- django_cfg/apps/maintenance/managers/maintenance_log_manager.py +32 -31
- django_cfg/apps/maintenance/migrations/0001_initial.py +1 -0
- django_cfg/apps/maintenance/models/__init__.py +2 -2
- django_cfg/apps/maintenance/models/cloudflare_api_key.py +15 -15
- django_cfg/apps/maintenance/models/cloudflare_site.py +24 -22
- django_cfg/apps/maintenance/models/maintenance_log.py +15 -14
- django_cfg/apps/maintenance/models/scheduled_maintenance.py +53 -52
- django_cfg/apps/maintenance/services/__init__.py +3 -3
- django_cfg/apps/maintenance/services/bulk_operations_service.py +68 -68
- django_cfg/apps/maintenance/services/maintenance_service.py +59 -58
- django_cfg/apps/maintenance/services/scheduled_maintenance_service.py +52 -52
- django_cfg/apps/maintenance/services/site_sync_service.py +64 -65
- django_cfg/apps/maintenance/utils/__init__.py +1 -1
- django_cfg/apps/maintenance/utils/retry_utils.py +17 -17
- django_cfg/apps/newsletter/admin/__init__.py +12 -16
- django_cfg/apps/newsletter/admin/newsletter_admin.py +90 -87
- django_cfg/apps/newsletter/admin/resources.py +29 -29
- django_cfg/apps/newsletter/admin.py +39 -32
- django_cfg/apps/newsletter/management/commands/test_newsletter.py +3 -3
- django_cfg/apps/newsletter/managers/__init__.py +1 -1
- django_cfg/apps/newsletter/migrations/0001_initial.py +2 -1
- django_cfg/apps/newsletter/models.py +34 -33
- django_cfg/apps/newsletter/serializers.py +13 -13
- django_cfg/apps/newsletter/services/email_service.py +42 -40
- django_cfg/apps/newsletter/signals.py +4 -3
- django_cfg/apps/newsletter/urls.py +7 -7
- django_cfg/apps/newsletter/views/__init__.py +14 -19
- django_cfg/apps/newsletter/views/campaigns.py +19 -19
- django_cfg/apps/newsletter/views/emails.py +20 -20
- django_cfg/apps/newsletter/views/newsletters.py +5 -5
- django_cfg/apps/newsletter/views/subscriptions.py +24 -24
- django_cfg/apps/newsletter/views/tracking.py +6 -5
- django_cfg/apps/payments/admin/__init__.py +6 -5
- django_cfg/apps/payments/admin/api_keys_admin.py +43 -45
- django_cfg/apps/payments/admin/balance_admin.py +41 -47
- django_cfg/apps/payments/admin/currencies_admin.py +60 -62
- django_cfg/apps/payments/admin/endpoint_groups_admin.py +14 -28
- django_cfg/apps/payments/admin/filters.py +59 -59
- django_cfg/apps/payments/admin/networks_admin.py +36 -50
- django_cfg/apps/payments/admin/payments_admin.py +47 -49
- django_cfg/apps/payments/admin/subscriptions_admin.py +30 -32
- django_cfg/apps/payments/admin/tariffs_admin.py +37 -42
- django_cfg/apps/payments/admin_interface/serializers/__init__.py +12 -13
- django_cfg/apps/payments/admin_interface/serializers/payment_serializers.py +28 -27
- django_cfg/apps/payments/admin_interface/serializers/webhook_serializers.py +4 -5
- django_cfg/apps/payments/admin_interface/templates/payments/base.html +407 -3
- django_cfg/apps/payments/admin_interface/templates/payments/components/ngrok_status.html +13 -13
- django_cfg/apps/payments/admin_interface/templates/payments/payment_dashboard.html +5 -1
- django_cfg/apps/payments/admin_interface/templates/payments/payment_detail.html +105 -49
- django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +4 -1
- django_cfg/apps/payments/admin_interface/templates/payments/payment_list.html +16 -8
- django_cfg/apps/payments/admin_interface/templates/payments/webhook_dashboard.html +16 -8
- django_cfg/apps/payments/admin_interface/views/__init__.py +8 -9
- django_cfg/apps/payments/admin_interface/views/api/__init__.py +3 -3
- django_cfg/apps/payments/admin_interface/views/api/payments.py +52 -54
- django_cfg/apps/payments/admin_interface/views/api/stats.py +33 -30
- django_cfg/apps/payments/admin_interface/views/api/users.py +10 -11
- django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +46 -51
- django_cfg/apps/payments/admin_interface/views/api/webhook_public.py +9 -9
- django_cfg/apps/payments/admin_interface/views/base.py +17 -19
- django_cfg/apps/payments/admin_interface/views/dashboard.py +10 -10
- django_cfg/apps/payments/admin_interface/views/forms.py +21 -20
- django_cfg/apps/payments/apps.py +7 -6
- django_cfg/apps/payments/config/__init__.py +4 -4
- django_cfg/apps/payments/config/django_cfg_integration.py +22 -21
- django_cfg/apps/payments/config/helpers.py +14 -12
- django_cfg/apps/payments/management/commands/cleanup_expired_data.py +85 -86
- django_cfg/apps/payments/management/commands/currency_stats.py +84 -87
- django_cfg/apps/payments/management/commands/manage_currencies.py +59 -58
- django_cfg/apps/payments/management/commands/manage_providers.py +103 -105
- django_cfg/apps/payments/management/commands/process_pending_payments.py +67 -70
- django_cfg/apps/payments/management/commands/test_providers.py +83 -84
- django_cfg/apps/payments/middleware/__init__.py +1 -1
- django_cfg/apps/payments/middleware/api_access.py +77 -78
- django_cfg/apps/payments/middleware/rate_limiting.py +72 -72
- django_cfg/apps/payments/middleware/usage_tracking.py +66 -64
- django_cfg/apps/payments/migrations/0001_initial.py +2 -1
- django_cfg/apps/payments/models/__init__.py +11 -12
- django_cfg/apps/payments/models/api_keys.py +29 -27
- django_cfg/apps/payments/models/balance.py +38 -38
- django_cfg/apps/payments/models/base.py +12 -11
- django_cfg/apps/payments/models/currencies.py +53 -52
- django_cfg/apps/payments/models/managers/__init__.py +13 -14
- django_cfg/apps/payments/models/managers/api_key_managers.py +55 -53
- django_cfg/apps/payments/models/managers/balance_managers.py +98 -97
- django_cfg/apps/payments/models/managers/currency_managers.py +70 -69
- django_cfg/apps/payments/models/managers/payment_managers.py +113 -111
- django_cfg/apps/payments/models/managers/subscription_managers.py +99 -97
- django_cfg/apps/payments/models/payments.py +167 -73
- django_cfg/apps/payments/models/subscriptions.py +56 -54
- django_cfg/apps/payments/models/tariffs.py +35 -34
- django_cfg/apps/payments/services/__init__.py +33 -36
- django_cfg/apps/payments/services/cache/__init__.py +7 -1
- django_cfg/apps/payments/services/cache_service/__init__.py +22 -20
- django_cfg/apps/payments/services/cache_service/api_key_cache.py +6 -5
- django_cfg/apps/payments/services/cache_service/interfaces.py +5 -5
- django_cfg/apps/payments/services/cache_service/keys.py +8 -8
- django_cfg/apps/payments/services/cache_service/rate_limit_cache.py +8 -7
- django_cfg/apps/payments/services/cache_service/simple_cache.py +17 -14
- django_cfg/apps/payments/services/core/__init__.py +3 -3
- django_cfg/apps/payments/services/core/balance_service.py +69 -65
- django_cfg/apps/payments/services/core/base.py +25 -22
- django_cfg/apps/payments/services/core/currency/__init__.py +1 -1
- django_cfg/apps/payments/services/core/currency/currency_converter.py +2 -0
- django_cfg/apps/payments/services/core/currency_service.py +68 -66
- django_cfg/apps/payments/services/core/operations/__init__.py +1 -1
- django_cfg/apps/payments/services/core/operations/payment_canceller.py +2 -1
- django_cfg/apps/payments/services/core/operations/payment_creator.py +2 -1
- django_cfg/apps/payments/services/core/operations/status_checker.py +2 -1
- django_cfg/apps/payments/services/core/payment_service.py +10 -7
- django_cfg/apps/payments/services/core/providers/provider_client.py +2 -2
- django_cfg/apps/payments/services/core/subscription_service.py +77 -74
- django_cfg/apps/payments/services/core/utils/data_converter.py +1 -0
- django_cfg/apps/payments/services/core/utils/statistics_calculator.py +1 -0
- django_cfg/apps/payments/services/core/webhook_service.py +67 -63
- django_cfg/apps/payments/services/integrations/__init__.py +3 -3
- django_cfg/apps/payments/services/integrations/ngrok_service.py +1 -0
- django_cfg/apps/payments/services/integrations/providers_config.py +3 -2
- django_cfg/apps/payments/services/providers/base.py +59 -57
- django_cfg/apps/payments/services/providers/models/__init__.py +7 -14
- django_cfg/apps/payments/services/providers/models/base.py +15 -15
- django_cfg/apps/payments/services/providers/models/providers.py +13 -12
- django_cfg/apps/payments/services/providers/models/universal.py +6 -5
- django_cfg/apps/payments/services/providers/nowpayments/__init__.py +4 -4
- django_cfg/apps/payments/services/providers/nowpayments/config.py +9 -8
- django_cfg/apps/payments/services/providers/nowpayments/models.py +15 -15
- django_cfg/apps/payments/services/providers/nowpayments/parsers/data/__init__.py +2 -2
- django_cfg/apps/payments/services/providers/nowpayments/parsers/data/patterns.py +26 -26
- django_cfg/apps/payments/services/providers/nowpayments/parsers/parser.py +3 -2
- django_cfg/apps/payments/services/providers/nowpayments/provider.py +95 -99
- django_cfg/apps/payments/services/providers/nowpayments/sync.py +41 -40
- django_cfg/apps/payments/services/providers/registry.py +65 -63
- django_cfg/apps/payments/services/providers/sync_service.py +50 -50
- django_cfg/apps/payments/services/types/__init__.py +21 -22
- django_cfg/apps/payments/services/types/data.py +14 -13
- django_cfg/apps/payments/services/types/requests.py +21 -22
- django_cfg/apps/payments/services/types/responses.py +16 -15
- django_cfg/apps/payments/services/types/webhooks.py +30 -30
- django_cfg/apps/payments/signals/__init__.py +4 -6
- django_cfg/apps/payments/signals/api_key_signals.py +33 -32
- django_cfg/apps/payments/signals/balance_signals.py +28 -26
- django_cfg/apps/payments/signals/payment_signals.py +29 -28
- django_cfg/apps/payments/signals/subscription_signals.py +39 -38
- django_cfg/apps/payments/static/payments/js/ngrok-status.js +12 -8
- django_cfg/apps/payments/static/payments/js/payment-detail.js +1 -1
- django_cfg/apps/payments/static/payments/js/payment-form.js +3 -3
- django_cfg/apps/payments/static/payments/js/payment-list.js +13 -6
- django_cfg/apps/payments/static/payments/js/webhook-dashboard-mjs.js +241 -0
- django_cfg/apps/payments/tasks/__init__.py +11 -12
- django_cfg/apps/payments/tasks/types.py +10 -9
- django_cfg/apps/payments/tasks/usage_tracking.py +44 -46
- django_cfg/apps/payments/templatetags/payment_tags.py +27 -27
- django_cfg/apps/payments/urls.py +31 -14
- django_cfg/apps/payments/urls_admin.py +10 -10
- django_cfg/apps/payments/views/api/__init__.py +32 -33
- django_cfg/apps/payments/views/api/api_keys.py +62 -62
- django_cfg/apps/payments/views/api/balances.py +63 -64
- django_cfg/apps/payments/views/api/base.py +52 -52
- django_cfg/apps/payments/views/api/currencies.py +75 -63
- django_cfg/apps/payments/views/api/payments.py +73 -74
- django_cfg/apps/payments/views/api/subscriptions.py +71 -72
- django_cfg/apps/payments/views/api/webhooks.py +85 -84
- django_cfg/apps/payments/views/overview/__init__.py +7 -7
- django_cfg/apps/payments/views/overview/serializers.py +13 -14
- django_cfg/apps/payments/views/overview/services.py +66 -67
- django_cfg/apps/payments/views/overview/urls.py +2 -1
- django_cfg/apps/payments/views/overview/views.py +31 -31
- django_cfg/apps/payments/views/serializers/__init__.py +35 -36
- django_cfg/apps/payments/views/serializers/api_keys.py +59 -57
- django_cfg/apps/payments/views/serializers/balances.py +34 -33
- django_cfg/apps/payments/views/serializers/currencies.py +36 -34
- django_cfg/apps/payments/views/serializers/payments.py +48 -47
- django_cfg/apps/payments/views/serializers/subscriptions.py +50 -45
- django_cfg/apps/payments/views/serializers/webhooks.py +17 -16
- django_cfg/apps/support/admin/__init__.py +3 -3
- django_cfg/apps/support/admin/resources.py +26 -26
- django_cfg/apps/support/admin/support_admin.py +44 -48
- django_cfg/apps/support/admin.py +16 -15
- django_cfg/apps/support/apps.py +1 -1
- django_cfg/apps/support/managers/message_manager.py +4 -4
- django_cfg/apps/support/managers/ticket_manager.py +13 -12
- django_cfg/apps/support/migrations/0001_initial.py +2 -1
- django_cfg/apps/support/models.py +3 -1
- django_cfg/apps/support/serializers.py +4 -2
- django_cfg/apps/support/signals.py +12 -10
- django_cfg/apps/support/urls.py +4 -3
- django_cfg/apps/support/utils/support_email_service.py +11 -9
- django_cfg/apps/support/views/__init__.py +3 -3
- django_cfg/apps/support/views/admin.py +9 -9
- django_cfg/apps/support/views/api.py +10 -9
- django_cfg/apps/support/views/chat.py +14 -14
- django_cfg/apps/tasks/admin/tasks_admin.py +65 -74
- django_cfg/apps/tasks/apps.py +2 -2
- django_cfg/apps/tasks/serializers.py +6 -6
- django_cfg/apps/tasks/static/tasks/js/dashboard/main.mjs +44 -20
- django_cfg/apps/tasks/static/tasks/js/dashboard/overview.mjs +7 -5
- django_cfg/apps/tasks/static/tasks/js/dashboard/queues.mjs +5 -3
- django_cfg/apps/tasks/static/tasks/js/dashboard/tasks.mjs +5 -3
- django_cfg/apps/tasks/static/tasks/js/dashboard/workers.mjs +5 -3
- django_cfg/apps/tasks/tasks/demo_tasks.py +12 -11
- django_cfg/apps/tasks/templates/tasks/components/tasks_mjs_integration.html +269 -0
- django_cfg/apps/tasks/templates/tasks/pages/dashboard-improved.html +168 -0
- django_cfg/apps/tasks/templates/tasks/pages/dashboard.html +21 -2
- django_cfg/apps/tasks/urls.py +3 -2
- django_cfg/apps/tasks/urls_admin.py +1 -0
- django_cfg/apps/tasks/utils/simulator.py +49 -52
- django_cfg/apps/tasks/views/api.py +75 -73
- django_cfg/apps/tasks/views/dashboard.py +5 -4
- django_cfg/apps/urls.py +20 -11
- django_cfg/apps.py +6 -5
- django_cfg/cli/commands/create_project.py +7 -6
- django_cfg/cli/commands/info.py +25 -25
- django_cfg/cli/utils.py +27 -27
- django_cfg/config.py +1 -1
- django_cfg/core/__init__.py +8 -8
- django_cfg/core/base/config_model.py +13 -12
- django_cfg/core/builders/apps_builder.py +2 -2
- django_cfg/core/builders/middleware_builder.py +1 -1
- django_cfg/core/builders/security_builder.py +1 -1
- django_cfg/core/config.py +2 -2
- django_cfg/core/environment/detector.py +27 -28
- django_cfg/core/exceptions.py +1 -1
- django_cfg/core/generation/core_generators/settings.py +1 -1
- django_cfg/core/generation/core_generators/static.py +11 -5
- django_cfg/core/generation/core_generators/templates.py +1 -1
- django_cfg/core/generation/data_generators/__init__.py +1 -1
- django_cfg/core/generation/data_generators/cache.py +1 -1
- django_cfg/core/generation/data_generators/database.py +1 -1
- django_cfg/core/generation/generation.py +1 -3
- django_cfg/core/generation/integration_generators/__init__.py +2 -2
- django_cfg/core/generation/integration_generators/api.py +12 -2
- django_cfg/core/generation/integration_generators/sessions.py +1 -1
- django_cfg/core/generation/integration_generators/tailwind.py +1 -1
- django_cfg/core/generation/integration_generators/tasks.py +1 -1
- django_cfg/core/generation/integration_generators/third_party.py +1 -1
- django_cfg/core/generation/orchestrator.py +1 -1
- django_cfg/core/generation/protocols.py +1 -1
- django_cfg/core/generation/utility_generators/__init__.py +1 -1
- django_cfg/core/generation/utility_generators/email.py +1 -1
- django_cfg/core/generation/utility_generators/i18n.py +1 -1
- django_cfg/core/generation/utility_generators/limits.py +1 -1
- django_cfg/core/generation/utility_generators/logging.py +1 -1
- django_cfg/core/generation/utility_generators/security.py +1 -1
- django_cfg/core/generation/utils/helpers.py +1 -1
- django_cfg/core/integration/__init__.py +5 -5
- django_cfg/core/integration/commands_collector.py +38 -39
- django_cfg/core/integration/display/__init__.py +2 -2
- django_cfg/core/integration/display/base.py +30 -30
- django_cfg/core/integration/display/ngrok.py +35 -36
- django_cfg/core/integration/display/startup.py +149 -139
- django_cfg/core/integration/url_integration.py +10 -10
- django_cfg/core/integration/version_checker.py +20 -19
- django_cfg/core/services/config_service.py +4 -4
- django_cfg/core/state/__init__.py +1 -1
- django_cfg/core/state/registry.py +1 -1
- django_cfg/core/types/__init__.py +8 -1
- django_cfg/core/validation.py +36 -39
- django_cfg/management/commands/check_endpoints.py +3 -1
- django_cfg/management/commands/check_settings.py +3 -1
- django_cfg/management/commands/clear_constance.py +3 -1
- django_cfg/management/commands/create_token.py +3 -1
- django_cfg/management/commands/generate_clients.py +3 -1
- django_cfg/management/commands/migrate_all.py +3 -1
- django_cfg/management/commands/rundramatiq.py +3 -1
- django_cfg/management/commands/rundramatiq_simulator.py +3 -1
- django_cfg/management/commands/runserver_ngrok.py +3 -1
- django_cfg/management/commands/show_config.py +3 -1
- django_cfg/management/commands/superuser.py +3 -1
- django_cfg/management/commands/task_clear.py +3 -1
- django_cfg/management/commands/task_status.py +3 -1
- django_cfg/management/commands/test_email.py +3 -1
- django_cfg/management/commands/test_telegram.py +3 -1
- django_cfg/management/commands/test_twilio.py +3 -1
- django_cfg/management/commands/validate_openapi.py +3 -1
- django_cfg/middleware/pagination.py +8 -8
- django_cfg/middleware/public_endpoints.py +24 -23
- django_cfg/middleware/user_activity.py +27 -25
- django_cfg/models/__init__.py +19 -20
- django_cfg/models/api/__init__.py +4 -4
- django_cfg/models/api/config.py +23 -21
- django_cfg/models/api/cors.py +17 -16
- django_cfg/models/api/drf/__init__.py +1 -1
- django_cfg/models/api/drf/config.py +2 -1
- django_cfg/models/api/drf/redoc.py +2 -1
- django_cfg/models/api/drf/spectacular.py +4 -2
- django_cfg/models/api/drf/swagger.py +2 -1
- django_cfg/models/api/jwt.py +37 -36
- django_cfg/models/api/keys.py +13 -12
- django_cfg/models/api/limits.py +31 -30
- django_cfg/models/base/config.py +40 -41
- django_cfg/models/base/module.py +8 -8
- django_cfg/models/django/__init__.py +1 -1
- django_cfg/models/django/constance.py +8 -7
- django_cfg/models/django/environment.py +5 -3
- django_cfg/models/django/openapi.py +6 -16
- django_cfg/models/django/revolution_legacy.py +17 -16
- django_cfg/models/infrastructure/__init__.py +1 -1
- django_cfg/models/infrastructure/cache.py +46 -45
- django_cfg/models/infrastructure/database/config.py +4 -6
- django_cfg/models/infrastructure/database/converters.py +1 -1
- django_cfg/models/infrastructure/database/parsers.py +1 -1
- django_cfg/models/infrastructure/database/validators.py +1 -1
- django_cfg/models/infrastructure/logging.py +59 -57
- django_cfg/models/infrastructure/security.py +26 -24
- django_cfg/models/ngrok/auth.py +2 -1
- django_cfg/models/ngrok/config.py +3 -2
- django_cfg/models/ngrok/tunnel.py +2 -1
- django_cfg/models/payments/__init__.py +1 -1
- django_cfg/models/payments/api_keys.py +3 -1
- django_cfg/models/payments/config.py +4 -1
- django_cfg/models/payments/providers/base.py +2 -1
- django_cfg/models/payments/providers/nowpayments.py +3 -1
- django_cfg/models/services/__init__.py +1 -1
- django_cfg/models/services/base.py +2 -1
- django_cfg/models/services/email.py +28 -26
- django_cfg/models/services/telegram.py +2 -1
- django_cfg/models/tasks/__init__.py +2 -2
- django_cfg/models/tasks/backends.py +4 -3
- django_cfg/models/tasks/config.py +6 -4
- django_cfg/models/tasks/utils.py +3 -3
- django_cfg/modules/base.py +18 -17
- django_cfg/modules/django_admin/__init__.py +14 -15
- django_cfg/modules/django_admin/decorators/__init__.py +1 -1
- django_cfg/modules/django_admin/decorators/actions.py +8 -7
- django_cfg/modules/django_admin/decorators/display.py +9 -7
- django_cfg/modules/django_admin/icons/__init__.py +1 -1
- django_cfg/modules/django_admin/icons/constants.py +27 -27
- django_cfg/modules/django_admin/icons/generate_icons.py +54 -54
- django_cfg/modules/django_admin/management/commands/check_endpoints.py +5 -3
- django_cfg/modules/django_admin/management/commands/check_settings.py +40 -44
- django_cfg/modules/django_admin/management/commands/clear_constance.py +29 -30
- django_cfg/modules/django_admin/management/commands/create_token.py +42 -42
- django_cfg/modules/django_admin/management/commands/list_urls.py +37 -38
- django_cfg/modules/django_admin/management/commands/migrate_all.py +13 -15
- django_cfg/modules/django_admin/management/commands/migrator.py +17 -17
- django_cfg/modules/django_admin/management/commands/script.py +58 -60
- django_cfg/modules/django_admin/management/commands/show_config.py +32 -30
- django_cfg/modules/django_admin/management/commands/show_urls.py +46 -44
- django_cfg/modules/django_admin/management/commands/superuser.py +47 -48
- django_cfg/modules/django_admin/management/commands/tree.py +50 -54
- django_cfg/modules/django_admin/mixins/display_mixin.py +16 -15
- django_cfg/modules/django_admin/mixins/optimization_mixin.py +9 -8
- django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +25 -24
- django_cfg/modules/django_admin/models/__init__.py +4 -4
- django_cfg/modules/django_admin/models/action_models.py +3 -1
- django_cfg/modules/django_admin/models/badge_models.py +4 -2
- django_cfg/modules/django_admin/models/base.py +3 -3
- django_cfg/modules/django_admin/models/display_models.py +1 -0
- django_cfg/modules/django_admin/utils/badges.py +27 -26
- django_cfg/modules/django_admin/utils/displays.py +49 -49
- django_cfg/modules/django_client/apps.py +21 -3
- django_cfg/modules/django_client/core/__init__.py +9 -10
- django_cfg/modules/django_client/core/archive/manager.py +2 -2
- django_cfg/modules/django_client/core/cli/main.py +1 -3
- django_cfg/modules/django_client/core/config/config.py +3 -1
- django_cfg/modules/django_client/core/config/group.py +1 -0
- django_cfg/modules/django_client/core/config/service.py +2 -1
- django_cfg/modules/django_client/core/generator/__init__.py +1 -1
- django_cfg/modules/django_client/core/generator/base.py +2 -2
- django_cfg/modules/django_client/core/generator/python/async_client_gen.py +1 -1
- django_cfg/modules/django_client/core/generator/python/files_generator.py +1 -1
- django_cfg/modules/django_client/core/generator/python/generator.py +4 -4
- django_cfg/modules/django_client/core/generator/python/models_generator.py +1 -1
- django_cfg/modules/django_client/core/generator/python/operations_generator.py +2 -2
- django_cfg/modules/django_client/core/generator/python/sync_client_gen.py +1 -1
- django_cfg/modules/django_client/core/generator/typescript/client_generator.py +3 -1
- django_cfg/modules/django_client/core/generator/typescript/fetchers_generator.py +14 -13
- django_cfg/modules/django_client/core/generator/typescript/files_generator.py +1 -0
- django_cfg/modules/django_client/core/generator/typescript/generator.py +6 -6
- django_cfg/modules/django_client/core/generator/typescript/hooks_generator.py +12 -10
- django_cfg/modules/django_client/core/generator/typescript/models_generator.py +2 -1
- django_cfg/modules/django_client/core/generator/typescript/naming.py +2 -3
- django_cfg/modules/django_client/core/generator/typescript/operations_generator.py +12 -10
- django_cfg/modules/django_client/core/generator/typescript/schemas_generator.py +3 -2
- django_cfg/modules/django_client/core/generator/typescript/templates/client/client.ts.jinja +14 -6
- django_cfg/modules/django_client/core/generator/typescript/templates/main_index.ts.jinja +4 -10
- django_cfg/modules/django_client/core/groups/__init__.py +1 -1
- django_cfg/modules/django_client/core/groups/detector.py +2 -1
- django_cfg/modules/django_client/core/groups/manager.py +2 -1
- django_cfg/modules/django_client/core/ir/schema.py +1 -1
- django_cfg/modules/django_client/core/parser/base.py +0 -2
- django_cfg/modules/django_client/core/parser/models/schema.py +1 -1
- django_cfg/modules/django_client/core/validation/__init__.py +1 -1
- django_cfg/modules/django_client/core/validation/fixer.py +1 -2
- django_cfg/modules/django_client/core/validation/reporter.py +2 -2
- django_cfg/modules/django_client/core/validation/safety.py +1 -1
- django_cfg/modules/django_client/management/commands/generate_client.py +14 -11
- django_cfg/modules/django_client/management/commands/validate_openapi.py +4 -6
- django_cfg/modules/django_client/spectacular/__init__.py +1 -1
- django_cfg/modules/django_client/spectacular/async_detection.py +3 -2
- django_cfg/modules/django_client/spectacular/enum_naming.py +1 -1
- django_cfg/modules/django_client/spectacular/schema.py +5 -5
- django_cfg/modules/django_client/system/__init__.py +24 -0
- django_cfg/modules/django_client/system/base_generator.py +123 -0
- django_cfg/modules/django_client/system/generate_mjs_clients.py +174 -0
- django_cfg/modules/django_client/system/mjs_generator.py +219 -0
- django_cfg/modules/django_client/system/schema_parser.py +195 -0
- django_cfg/modules/django_client/system/templates/api_client.js.j2 +87 -0
- django_cfg/modules/django_client/system/templates/app_index.js.j2 +13 -0
- django_cfg/modules/django_client/system/templates/base_client.js.j2 +166 -0
- django_cfg/modules/django_client/system/templates/main_index.js.j2 +80 -0
- django_cfg/modules/django_client/system/templates/types.js.j2 +24 -0
- django_cfg/modules/django_client/urls.py +3 -2
- django_cfg/modules/django_currency/__init__.py +17 -18
- django_cfg/modules/django_currency/clients/__init__.py +2 -2
- django_cfg/modules/django_currency/clients/coinpaprika_client.py +48 -48
- django_cfg/modules/django_currency/clients/hybrid_client.py +76 -75
- django_cfg/modules/django_currency/core/__init__.py +7 -13
- django_cfg/modules/django_currency/core/converter.py +25 -24
- django_cfg/modules/django_currency/core/models.py +9 -8
- django_cfg/modules/django_currency/database/__init__.py +4 -4
- django_cfg/modules/django_currency/database/database_loader.py +65 -66
- django_cfg/modules/django_currency/examples/example_database_usage.py +29 -28
- django_cfg/modules/django_currency/utils/cache.py +10 -11
- django_cfg/modules/django_dashboard/__init__.py +4 -5
- django_cfg/modules/django_dashboard/components.py +11 -7
- django_cfg/modules/django_dashboard/debug.py +1 -3
- django_cfg/modules/django_dashboard/management/commands/debug_dashboard.py +3 -3
- django_cfg/modules/django_dashboard/sections/base.py +2 -1
- django_cfg/modules/django_dashboard/sections/commands.py +3 -2
- django_cfg/modules/django_dashboard/sections/documentation.py +8 -6
- django_cfg/modules/django_dashboard/sections/overview.py +13 -9
- django_cfg/modules/django_dashboard/sections/stats.py +2 -2
- django_cfg/modules/django_dashboard/sections/system.py +2 -1
- django_cfg/modules/django_drf_theme/templatetags/tailwind_tags.py +12 -4
- django_cfg/modules/django_email/management/commands/test_email.py +8 -7
- django_cfg/modules/django_email/service.py +5 -4
- django_cfg/modules/django_health/service.py +46 -44
- django_cfg/modules/django_import_export/__init__.py +7 -3
- django_cfg/modules/django_llm/__init__.py +3 -2
- django_cfg/modules/django_llm/example.py +58 -56
- django_cfg/modules/django_llm/llm/__init__.py +1 -1
- django_cfg/modules/django_llm/llm/cache.py +21 -20
- django_cfg/modules/django_llm/llm/client.py +9 -9
- django_cfg/modules/django_llm/llm/costs.py +14 -14
- django_cfg/modules/django_llm/llm/embeddings/__init__.py +1 -1
- django_cfg/modules/django_llm/llm/embeddings/mock_embedder.py +1 -2
- django_cfg/modules/django_llm/llm/embeddings/openai_embedder.py +1 -2
- django_cfg/modules/django_llm/llm/extractor.py +8 -8
- django_cfg/modules/django_llm/llm/models.py +5 -5
- django_cfg/modules/django_llm/llm/models_api/models_query.py +2 -2
- django_cfg/modules/django_llm/llm/models_cache.py +91 -92
- django_cfg/modules/django_llm/llm/providers/config_builder.py +1 -1
- django_cfg/modules/django_llm/llm/providers/provider_manager.py +2 -1
- django_cfg/modules/django_llm/llm/requests/cache_manager.py +1 -1
- django_cfg/modules/django_llm/llm/requests/chat_handler.py +2 -2
- django_cfg/modules/django_llm/llm/requests/embedding_handler.py +1 -1
- django_cfg/modules/django_llm/llm/responses/response_builder.py +2 -2
- django_cfg/modules/django_llm/llm/stats/stats_manager.py +1 -1
- django_cfg/modules/django_llm/llm/tokenizer.py +10 -9
- django_cfg/modules/django_llm/translator/__init__.py +1 -1
- django_cfg/modules/django_llm/translator/cache.py +36 -35
- django_cfg/modules/django_llm/translator/detectors/__init__.py +1 -1
- django_cfg/modules/django_llm/translator/detectors/script_detector.py +0 -1
- django_cfg/modules/django_llm/translator/stats/stats_tracker.py +1 -1
- django_cfg/modules/django_llm/translator/translator.py +5 -4
- django_cfg/modules/django_llm/translator/translators/__init__.py +1 -1
- django_cfg/modules/django_llm/translator/translators/json_translator.py +1 -1
- django_cfg/modules/django_llm/translator/utils/__init__.py +1 -1
- django_cfg/modules/django_llm/translator/utils/prompt_builder.py +0 -1
- django_cfg/modules/django_logging/__init__.py +1 -1
- django_cfg/modules/django_logging/django_logger.py +33 -34
- django_cfg/modules/django_logging/logger.py +3 -7
- django_cfg/modules/django_ngrok/__init__.py +7 -7
- django_cfg/modules/django_ngrok/management/commands/runserver_ngrok.py +33 -30
- django_cfg/modules/django_ngrok/service.py +33 -32
- django_cfg/modules/django_tailwind/templates/django_tailwind/base.html +4 -36
- django_cfg/modules/django_tailwind/templates/django_tailwind/components/navbar.html +1 -1
- django_cfg/modules/django_tasks/__init__.py +5 -5
- django_cfg/modules/django_tasks/dramatiq_setup.py +1 -1
- django_cfg/modules/django_tasks/factory.py +1 -1
- django_cfg/modules/django_tasks/management/commands/rundramatiq.py +39 -40
- django_cfg/modules/django_tasks/management/commands/rundramatiq_simulator.py +79 -80
- django_cfg/modules/django_tasks/management/commands/task_clear.py +34 -34
- django_cfg/modules/django_tasks/management/commands/task_status.py +34 -34
- django_cfg/modules/django_tasks/service.py +4 -3
- django_cfg/modules/django_tasks/settings.py +1 -1
- django_cfg/modules/django_telegram/__init__.py +4 -4
- django_cfg/modules/django_telegram/management/commands/test_telegram.py +4 -5
- django_cfg/modules/django_telegram/service.py +4 -3
- django_cfg/modules/django_telegram/utils.py +1 -1
- django_cfg/modules/django_twilio/__init__.py +15 -16
- django_cfg/modules/django_twilio/_imports.py +1 -1
- django_cfg/modules/django_twilio/base.py +9 -5
- django_cfg/modules/django_twilio/email_otp.py +4 -3
- django_cfg/modules/django_twilio/exceptions.py +36 -36
- django_cfg/modules/django_twilio/management/commands/test_twilio.py +6 -7
- django_cfg/modules/django_twilio/models.py +54 -53
- django_cfg/modules/django_twilio/sendgrid_service.py +70 -72
- django_cfg/modules/django_twilio/simple_service.py +42 -41
- django_cfg/modules/django_twilio/sms.py +1 -0
- django_cfg/modules/django_twilio/twilio_service.py +79 -83
- django_cfg/modules/django_twilio/unified.py +6 -5
- django_cfg/modules/django_twilio/utils.py +2 -3
- django_cfg/modules/django_twilio/whatsapp.py +3 -2
- django_cfg/modules/django_unfold/__init__.py +7 -6
- django_cfg/modules/django_unfold/callbacks/actions.py +6 -5
- django_cfg/modules/django_unfold/callbacks/apizones.py +122 -0
- django_cfg/modules/django_unfold/callbacks/base.py +9 -8
- django_cfg/modules/django_unfold/callbacks/charts.py +36 -37
- django_cfg/modules/django_unfold/callbacks/commands.py +2 -2
- django_cfg/modules/django_unfold/callbacks/main.py +27 -27
- django_cfg/modules/django_unfold/callbacks/statistics.py +12 -12
- django_cfg/modules/django_unfold/callbacks/system.py +5 -5
- django_cfg/modules/django_unfold/callbacks/users.py +4 -4
- django_cfg/modules/django_unfold/dashboard.py +29 -29
- django_cfg/modules/django_unfold/models/__init__.py +23 -8
- django_cfg/modules/django_unfold/models/config.py +84 -81
- django_cfg/modules/django_unfold/models/dashboard.py +20 -19
- django_cfg/modules/django_unfold/models/dropdown.py +6 -4
- django_cfg/modules/django_unfold/models/navigation.py +6 -4
- django_cfg/modules/django_unfold/models/tabs.py +4 -3
- django_cfg/modules/django_unfold/models.py +2 -3
- django_cfg/modules/django_unfold/system_monitor.py +27 -25
- django_cfg/modules/django_unfold/tailwind.py +12 -14
- django_cfg/modules/django_unfold/utils.py +7 -6
- django_cfg/pyproject.toml +1 -1
- django_cfg/registry/__init__.py +3 -3
- django_cfg/registry/core.py +8 -8
- django_cfg/registry/modules.py +2 -2
- django_cfg/registry/services.py +2 -2
- django_cfg/registry/third_party.py +3 -3
- django_cfg/routing/__init__.py +3 -3
- django_cfg/routing/callbacks.py +27 -26
- django_cfg/routing/routers.py +2 -2
- django_cfg/static/js/api/accounts/client.mjs +69 -0
- django_cfg/static/js/api/accounts/index.mjs +13 -0
- django_cfg/static/js/api/base.mjs +166 -0
- django_cfg/static/js/api/index.mjs +100 -0
- django_cfg/static/js/api/ipc/client.mjs +74 -0
- django_cfg/static/js/api/ipc/index.mjs +13 -0
- django_cfg/static/js/api/leads/client.mjs +71 -0
- django_cfg/static/js/api/leads/index.mjs +13 -0
- django_cfg/static/js/api/newsletter/client.mjs +109 -0
- django_cfg/static/js/api/newsletter/index.mjs +13 -0
- django_cfg/static/js/api/payments/client.mjs +1264 -0
- django_cfg/static/js/api/payments/index.mjs +13 -0
- django_cfg/static/js/api/support/client.mjs +84 -0
- django_cfg/static/js/api/support/index.mjs +13 -0
- django_cfg/static/js/api/tasks/client.mjs +74 -0
- django_cfg/static/js/api/tasks/index.mjs +13 -0
- django_cfg/static/js/api/types.mjs +729 -0
- django_cfg/static/js/api-loader.mjs +169 -0
- django_cfg/templates/admin/snippets/zones/zones_table.html +4 -3
- django_cfg/templatetags/django_cfg.py +4 -4
- django_cfg/utils/path_resolution.py +49 -50
- django_cfg/utils/smart_defaults.py +27 -29
- django_cfg/utils/version_check.py +14 -14
- {django_cfg-1.4.21.dist-info → django_cfg-1.4.24.dist-info}/METADATA +1 -1
- django_cfg-1.4.24.dist-info/RECORD +1137 -0
- django_cfg/apps/payments/static/payments/js/api-client.js +0 -408
- django_cfg/modules/django_ipc_client/dashboard/README.md +0 -517
- django_cfg/modules/django_ipc_client/dashboard/UNFOLD_INTEGRATION.md +0 -439
- django_cfg/modules/django_ipc_client/dashboard/__init__.py +0 -11
- django_cfg/modules/django_ipc_client/dashboard/apps.py +0 -22
- django_cfg/modules/django_ipc_client/dashboard/templates/django_ipc_dashboard/dashboard.html +0 -200
- django_cfg/modules/django_ipc_client/dashboard/urls.py +0 -22
- django_cfg/modules/django_ipc_client/dashboard/urls_admin.py +0 -9
- django_cfg/modules/django_ipc_client/dashboard/views.py +0 -251
- django_cfg/modules/django_rpc_old/POETRY.md +0 -344
- django_cfg/modules/django_rpc_old/README.md +0 -397
- django_cfg/modules/django_rpc_old/TESTING.md +0 -358
- django_cfg/modules/django_rpc_old/__init__.py +0 -39
- django_cfg/modules/django_rpc_old/client.py +0 -531
- django_cfg/modules/django_rpc_old/config.py +0 -279
- django_cfg/modules/django_rpc_old/exceptions.py +0 -172
- django_cfg/modules/django_unfold/callbacks/revolution.py +0 -81
- django_cfg-1.4.21.dist-info/RECORD +0 -1111
- /django_cfg/{modules/django_ipc_client → apps/ipc}/README.md +0 -0
- /django_cfg/{modules/django_ipc_client → apps/ipc/services/client}/config.py +0 -0
- {django_cfg-1.4.21.dist-info → django_cfg-1.4.24.dist-info}/WHEEL +0 -0
- {django_cfg-1.4.21.dist-info → django_cfg-1.4.24.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.4.21.dist-info → django_cfg-1.4.24.dist-info}/licenses/LICENSE +0 -0
@@ -2,15 +2,17 @@
|
|
2
2
|
Document models with pgvector support.
|
3
3
|
"""
|
4
4
|
|
5
|
+
from typing import List, Optional
|
6
|
+
|
5
7
|
from django.db import models
|
6
8
|
from pgvector.django import VectorField
|
7
|
-
|
8
|
-
from .base import
|
9
|
+
|
10
|
+
from .base import ProcessingStatus, TimestampedModel, UserScopedModel
|
9
11
|
|
10
12
|
|
11
13
|
class DocumentCategory(TimestampedModel):
|
12
14
|
"""Document category for organization and access control."""
|
13
|
-
|
15
|
+
|
14
16
|
name = models.CharField(
|
15
17
|
max_length=255,
|
16
18
|
unique=True,
|
@@ -24,24 +26,24 @@ class DocumentCategory(TimestampedModel):
|
|
24
26
|
default=True,
|
25
27
|
help_text="Whether documents in this category are publicly accessible"
|
26
28
|
)
|
27
|
-
|
29
|
+
|
28
30
|
class Meta:
|
29
31
|
db_table = 'django_cfg_knowbase_document_categories'
|
30
32
|
verbose_name = 'Document Category'
|
31
33
|
verbose_name_plural = 'Document Categories'
|
32
34
|
ordering = ['name']
|
33
|
-
|
35
|
+
|
34
36
|
def __str__(self) -> str:
|
35
37
|
return f"{self.name} ({'Public' if self.is_public else 'Private'})"
|
36
38
|
|
37
39
|
|
38
40
|
class Document(UserScopedModel):
|
39
41
|
"""Knowledge document with processing status tracking."""
|
40
|
-
|
42
|
+
|
41
43
|
# Custom managers
|
42
44
|
from ..managers.document import DocumentManager
|
43
45
|
objects = DocumentManager()
|
44
|
-
|
46
|
+
|
45
47
|
title = models.CharField(
|
46
48
|
max_length=512,
|
47
49
|
help_text="Document title"
|
@@ -74,7 +76,7 @@ class Document(UserScopedModel):
|
|
74
76
|
default=0,
|
75
77
|
help_text="Original file size in bytes"
|
76
78
|
)
|
77
|
-
|
79
|
+
|
78
80
|
# Processing status
|
79
81
|
processing_status = models.CharField(
|
80
82
|
max_length=20,
|
@@ -85,17 +87,17 @@ class Document(UserScopedModel):
|
|
85
87
|
processing_started_at = models.DateTimeField(null=True, blank=True)
|
86
88
|
processing_completed_at = models.DateTimeField(null=True, blank=True)
|
87
89
|
processing_error = models.TextField(blank=True, default="")
|
88
|
-
|
90
|
+
|
89
91
|
# Chunk statistics
|
90
92
|
chunks_count = models.PositiveIntegerField(default=0)
|
91
93
|
total_tokens = models.PositiveIntegerField(default=0)
|
92
|
-
|
94
|
+
|
93
95
|
# Cost tracking for monitoring
|
94
96
|
total_cost_usd = models.FloatField(
|
95
97
|
default=0.0,
|
96
98
|
help_text="Total processing cost in USD"
|
97
99
|
)
|
98
|
-
|
100
|
+
|
99
101
|
# Metadata
|
100
102
|
metadata = models.JSONField(
|
101
103
|
default=dict,
|
@@ -103,7 +105,7 @@ class Document(UserScopedModel):
|
|
103
105
|
null=True,
|
104
106
|
help_text="Additional document metadata"
|
105
107
|
)
|
106
|
-
|
108
|
+
|
107
109
|
class Meta:
|
108
110
|
db_table = 'django_cfg_knowbase_documents'
|
109
111
|
indexes = [
|
@@ -118,27 +120,27 @@ class Document(UserScopedModel):
|
|
118
120
|
name='unique_user_document'
|
119
121
|
)
|
120
122
|
]
|
121
|
-
|
123
|
+
|
122
124
|
def save(self, *args, **kwargs):
|
123
125
|
"""Override save to generate content_hash if not provided."""
|
124
126
|
if not self.content_hash and self.content:
|
125
127
|
import hashlib
|
126
128
|
self.content_hash = hashlib.sha256(self.content.encode()).hexdigest()
|
127
|
-
|
129
|
+
|
128
130
|
# Set file_size if not provided
|
129
131
|
if not self.file_size and self.content:
|
130
132
|
self.file_size = len(self.content.encode('utf-8'))
|
131
|
-
|
133
|
+
|
132
134
|
super().save(*args, **kwargs)
|
133
|
-
|
135
|
+
|
134
136
|
def __str__(self) -> str:
|
135
137
|
return f"{self.title} ({self.user.username})"
|
136
|
-
|
138
|
+
|
137
139
|
@property
|
138
140
|
def is_processed(self) -> bool:
|
139
141
|
"""Check if document processing is completed."""
|
140
142
|
return self.processing_status == ProcessingStatus.COMPLETED
|
141
|
-
|
143
|
+
|
142
144
|
@property
|
143
145
|
def processing_duration(self) -> Optional[float]:
|
144
146
|
"""Calculate processing duration in seconds."""
|
@@ -146,32 +148,32 @@ class Document(UserScopedModel):
|
|
146
148
|
delta = self.processing_completed_at - self.processing_started_at
|
147
149
|
return delta.total_seconds()
|
148
150
|
return None
|
149
|
-
|
151
|
+
|
150
152
|
@property
|
151
153
|
def is_publicly_accessible(self) -> bool:
|
152
154
|
"""Check if document is publicly accessible (document and at least one category must be public)."""
|
153
155
|
if not self.is_public:
|
154
156
|
return False
|
155
|
-
|
157
|
+
|
156
158
|
# If document has categories, at least one must be public
|
157
159
|
if self.categories.exists():
|
158
160
|
return self.categories.filter(is_public=True).exists()
|
159
|
-
|
161
|
+
|
160
162
|
# If no categories assigned, document is public by default
|
161
163
|
return True
|
162
|
-
|
164
|
+
|
163
165
|
def get_all_categories(self):
|
164
166
|
"""Get all categories for this document."""
|
165
167
|
return list(self.categories.all())
|
166
|
-
|
168
|
+
|
167
169
|
def add_category(self, category):
|
168
170
|
"""Add a category to this document."""
|
169
171
|
self.categories.add(category)
|
170
|
-
|
172
|
+
|
171
173
|
def remove_category(self, category):
|
172
174
|
"""Remove a category from this document."""
|
173
175
|
self.categories.remove(category)
|
174
|
-
|
176
|
+
|
175
177
|
def set_categories(self, categories_list):
|
176
178
|
"""Set multiple categories for this document."""
|
177
179
|
self.categories.set(categories_list)
|
@@ -179,11 +181,11 @@ class Document(UserScopedModel):
|
|
179
181
|
|
180
182
|
class DocumentChunk(UserScopedModel):
|
181
183
|
"""Text chunk with vector embedding for semantic search."""
|
182
|
-
|
184
|
+
|
183
185
|
# Custom managers
|
184
186
|
from ..managers.document import DocumentChunkManager
|
185
187
|
objects = DocumentChunkManager()
|
186
|
-
|
188
|
+
|
187
189
|
document = models.ForeignKey(
|
188
190
|
Document,
|
189
191
|
on_delete=models.CASCADE,
|
@@ -196,13 +198,13 @@ class DocumentChunk(UserScopedModel):
|
|
196
198
|
chunk_index = models.PositiveIntegerField(
|
197
199
|
help_text="Sequential chunk number within document"
|
198
200
|
)
|
199
|
-
|
201
|
+
|
200
202
|
# Vector embedding (1536 dimensions for OpenAI text-embedding-ada-002)
|
201
203
|
embedding = VectorField(
|
202
204
|
dimensions=1536,
|
203
205
|
help_text="Vector embedding for semantic search"
|
204
206
|
)
|
205
|
-
|
207
|
+
|
206
208
|
# Chunk statistics
|
207
209
|
token_count = models.PositiveIntegerField(
|
208
210
|
default=0,
|
@@ -212,7 +214,7 @@ class DocumentChunk(UserScopedModel):
|
|
212
214
|
default=0,
|
213
215
|
help_text="Number of characters in chunk"
|
214
216
|
)
|
215
|
-
|
217
|
+
|
216
218
|
# Processing metadata
|
217
219
|
embedding_model = models.CharField(
|
218
220
|
max_length=100,
|
@@ -223,7 +225,7 @@ class DocumentChunk(UserScopedModel):
|
|
223
225
|
default=0.0,
|
224
226
|
help_text="Cost in USD for embedding generation"
|
225
227
|
)
|
226
|
-
|
228
|
+
|
227
229
|
# Additional metadata
|
228
230
|
metadata = models.JSONField(
|
229
231
|
default=dict,
|
@@ -231,7 +233,7 @@ class DocumentChunk(UserScopedModel):
|
|
231
233
|
null=True,
|
232
234
|
help_text="Chunk-specific metadata"
|
233
235
|
)
|
234
|
-
|
236
|
+
|
235
237
|
class Meta:
|
236
238
|
db_table = 'django_cfg_knowbase_document_chunks'
|
237
239
|
indexes = [
|
@@ -245,10 +247,10 @@ class DocumentChunk(UserScopedModel):
|
|
245
247
|
)
|
246
248
|
]
|
247
249
|
ordering = ['document', 'chunk_index']
|
248
|
-
|
250
|
+
|
249
251
|
def __str__(self) -> str:
|
250
252
|
return f"Chunk {self.chunk_index} of {self.document.title}"
|
251
|
-
|
253
|
+
|
252
254
|
@classmethod
|
253
255
|
def semantic_search(
|
254
256
|
cls,
|
@@ -259,7 +261,7 @@ class DocumentChunk(UserScopedModel):
|
|
259
261
|
):
|
260
262
|
"""Perform semantic search using pgvector."""
|
261
263
|
from pgvector.django import CosineDistance
|
262
|
-
|
264
|
+
|
263
265
|
return cls.objects.filter(user=user).annotate(
|
264
266
|
similarity=1 - CosineDistance('embedding', query_embedding)
|
265
267
|
).filter(
|
@@ -4,14 +4,13 @@ External Data models for integrating external Django models into django_cfg.apps
|
|
4
4
|
Provides a unified way to vectorize and search any external data source.
|
5
5
|
"""
|
6
6
|
|
7
|
-
from
|
7
|
+
from typing import Any, Dict
|
8
|
+
|
8
9
|
from django.conf import settings
|
10
|
+
from django.db import models
|
9
11
|
from pgvector.django import VectorField
|
10
|
-
from typing import Optional, List, Dict, Any
|
11
|
-
import json
|
12
|
-
from enum import Enum
|
13
12
|
|
14
|
-
from .base import
|
13
|
+
from .base import TimestampedModel, UserScopedModel
|
15
14
|
from .document import DocumentCategory
|
16
15
|
|
17
16
|
|
@@ -40,11 +39,11 @@ class ExternalData(UserScopedModel):
|
|
40
39
|
This model represents any external data source (Django models, APIs, etc.)
|
41
40
|
that has been integrated into the knowledge base for semantic search.
|
42
41
|
"""
|
43
|
-
|
42
|
+
|
44
43
|
# Manager will be set after class definition
|
45
44
|
from ..managers.external_data import ExternalDataManager
|
46
45
|
objects = ExternalDataManager()
|
47
|
-
|
46
|
+
|
48
47
|
# Basic information
|
49
48
|
title = models.CharField(
|
50
49
|
max_length=512,
|
@@ -54,7 +53,7 @@ class ExternalData(UserScopedModel):
|
|
54
53
|
blank=True,
|
55
54
|
help_text="Description of what this external data contains"
|
56
55
|
)
|
57
|
-
|
56
|
+
|
58
57
|
# Source configuration
|
59
58
|
source_type = models.CharField(
|
60
59
|
max_length=20,
|
@@ -72,7 +71,7 @@ class ExternalData(UserScopedModel):
|
|
72
71
|
blank=True,
|
73
72
|
help_text="Configuration for data extraction (fields, filters, etc.)"
|
74
73
|
)
|
75
|
-
|
74
|
+
|
76
75
|
# Content and metadata
|
77
76
|
content = models.TextField(
|
78
77
|
blank=True,
|
@@ -89,7 +88,7 @@ class ExternalData(UserScopedModel):
|
|
89
88
|
blank=True,
|
90
89
|
help_text="Additional metadata from the source"
|
91
90
|
)
|
92
|
-
|
91
|
+
|
93
92
|
# Processing status
|
94
93
|
status = models.CharField(
|
95
94
|
max_length=20,
|
@@ -101,7 +100,7 @@ class ExternalData(UserScopedModel):
|
|
101
100
|
blank=True,
|
102
101
|
help_text="Error message if processing failed"
|
103
102
|
)
|
104
|
-
|
103
|
+
|
105
104
|
# Vectorization settings
|
106
105
|
chunk_size = models.PositiveIntegerField(
|
107
106
|
default=1000,
|
@@ -116,13 +115,13 @@ class ExternalData(UserScopedModel):
|
|
116
115
|
default="text-embedding-ada-002",
|
117
116
|
help_text="Embedding model used for vectorization"
|
118
117
|
)
|
119
|
-
|
118
|
+
|
120
119
|
# Search settings
|
121
120
|
similarity_threshold = models.FloatField(
|
122
121
|
default=0.5,
|
123
122
|
help_text="Similarity threshold for this external data (0.0-1.0). Lower = more results, higher = more precise"
|
124
123
|
)
|
125
|
-
|
124
|
+
|
126
125
|
# Processing timestamps
|
127
126
|
processed_at = models.DateTimeField(
|
128
127
|
null=True, blank=True,
|
@@ -132,7 +131,7 @@ class ExternalData(UserScopedModel):
|
|
132
131
|
null=True, blank=True,
|
133
132
|
help_text="When the source data was last updated"
|
134
133
|
)
|
135
|
-
|
134
|
+
|
136
135
|
# Statistics
|
137
136
|
total_chunks = models.PositiveIntegerField(
|
138
137
|
default=0,
|
@@ -146,7 +145,7 @@ class ExternalData(UserScopedModel):
|
|
146
145
|
default=0.0,
|
147
146
|
help_text="Total cost for processing this data (USD)"
|
148
147
|
)
|
149
|
-
|
148
|
+
|
150
149
|
# Organization
|
151
150
|
category = models.ForeignKey(
|
152
151
|
DocumentCategory,
|
@@ -159,7 +158,7 @@ class ExternalData(UserScopedModel):
|
|
159
158
|
blank=True,
|
160
159
|
help_text="Tags for categorization and filtering"
|
161
160
|
)
|
162
|
-
|
161
|
+
|
163
162
|
# Access control
|
164
163
|
is_active = models.BooleanField(
|
165
164
|
default=True,
|
@@ -169,7 +168,7 @@ class ExternalData(UserScopedModel):
|
|
169
168
|
default=False,
|
170
169
|
help_text="Whether this data is publicly searchable"
|
171
170
|
)
|
172
|
-
|
171
|
+
|
173
172
|
class Meta:
|
174
173
|
db_table = 'django_cfg_knowbase_external_data'
|
175
174
|
verbose_name = 'External Data'
|
@@ -184,7 +183,7 @@ class ExternalData(UserScopedModel):
|
|
184
183
|
models.Index(fields=['content_hash']),
|
185
184
|
]
|
186
185
|
ordering = ['-processed_at', '-created_at']
|
187
|
-
|
186
|
+
|
188
187
|
def save(self, *args, **kwargs):
|
189
188
|
"""Override save to generate content_hash if not provided."""
|
190
189
|
# Store original hash for comparison in signals
|
@@ -196,7 +195,7 @@ class ExternalData(UserScopedModel):
|
|
196
195
|
self._original_content_hash = None
|
197
196
|
else:
|
198
197
|
self._original_content_hash = None
|
199
|
-
|
198
|
+
|
200
199
|
# Generate hash if not provided
|
201
200
|
if not self.content_hash and self.content:
|
202
201
|
import hashlib
|
@@ -207,51 +206,51 @@ class ExternalData(UserScopedModel):
|
|
207
206
|
new_hash = hashlib.sha256(self.content.encode()).hexdigest()
|
208
207
|
if self.content_hash != new_hash:
|
209
208
|
self.content_hash = new_hash
|
210
|
-
|
209
|
+
|
211
210
|
super().save(*args, **kwargs)
|
212
|
-
|
211
|
+
|
213
212
|
def __str__(self) -> str:
|
214
213
|
return f"{self.title} ({self.source_type})"
|
215
|
-
|
214
|
+
|
216
215
|
@property
|
217
216
|
def full_name(self) -> str:
|
218
217
|
"""Full name including source type."""
|
219
218
|
return f"{self.title} ({self.get_source_type_display()})"
|
220
|
-
|
219
|
+
|
221
220
|
@property
|
222
221
|
def is_processed(self) -> bool:
|
223
222
|
"""Check if data has been successfully processed."""
|
224
223
|
return self.status == ExternalDataStatus.COMPLETED
|
225
|
-
|
224
|
+
|
226
225
|
@property
|
227
226
|
def is_outdated(self) -> bool:
|
228
227
|
"""Check if data needs reprocessing."""
|
229
228
|
return (
|
230
229
|
self.status == ExternalDataStatus.OUTDATED or
|
231
|
-
(self.source_updated_at and self.processed_at and
|
230
|
+
(self.source_updated_at and self.processed_at and
|
232
231
|
self.source_updated_at > self.processed_at)
|
233
232
|
)
|
234
|
-
|
233
|
+
|
235
234
|
@property
|
236
235
|
def chunks_count(self) -> int:
|
237
236
|
"""Get the number of chunks for this external data."""
|
238
237
|
return self.chunks.count()
|
239
|
-
|
238
|
+
|
240
239
|
def get_config_value(self, key: str, default=None):
|
241
240
|
"""Get a configuration value."""
|
242
241
|
return self.source_config.get(key, default)
|
243
|
-
|
242
|
+
|
244
243
|
def set_config_value(self, key: str, value):
|
245
244
|
"""Set a configuration value."""
|
246
245
|
self.source_config[key] = value
|
247
246
|
self.save(update_fields=['source_config'])
|
248
|
-
|
247
|
+
|
249
248
|
def add_tag(self, tag: str):
|
250
249
|
"""Add a tag if it doesn't exist."""
|
251
250
|
if tag not in self.tags:
|
252
251
|
self.tags.append(tag)
|
253
252
|
self.save(update_fields=['tags'])
|
254
|
-
|
253
|
+
|
255
254
|
def remove_tag(self, tag: str):
|
256
255
|
"""Remove a tag if it exists."""
|
257
256
|
if tag in self.tags:
|
@@ -265,10 +264,10 @@ class ExternalDataChunk(TimestampedModel):
|
|
265
264
|
|
266
265
|
Similar to DocumentChunk but for external data sources.
|
267
266
|
"""
|
268
|
-
|
267
|
+
|
269
268
|
# Manager will be set after class definition
|
270
269
|
objects = models.Manager() # Temporary default manager
|
271
|
-
|
270
|
+
|
272
271
|
# Relationships
|
273
272
|
user = models.ForeignKey(
|
274
273
|
settings.AUTH_USER_MODEL,
|
@@ -282,7 +281,7 @@ class ExternalDataChunk(TimestampedModel):
|
|
282
281
|
related_name='chunks',
|
283
282
|
help_text="External data this chunk belongs to"
|
284
283
|
)
|
285
|
-
|
284
|
+
|
286
285
|
# Content
|
287
286
|
content = models.TextField(
|
288
287
|
blank=True,
|
@@ -292,7 +291,7 @@ class ExternalDataChunk(TimestampedModel):
|
|
292
291
|
default=0,
|
293
292
|
help_text="Sequential index of this chunk within the external data"
|
294
293
|
)
|
295
|
-
|
294
|
+
|
296
295
|
# Vector embedding
|
297
296
|
embedding = VectorField(
|
298
297
|
dimensions=1536, # OpenAI ada-002 default
|
@@ -304,7 +303,7 @@ class ExternalDataChunk(TimestampedModel):
|
|
304
303
|
default="text-embedding-ada-002",
|
305
304
|
help_text="Model used for embedding generation"
|
306
305
|
)
|
307
|
-
|
306
|
+
|
308
307
|
# Metrics
|
309
308
|
token_count = models.PositiveIntegerField(
|
310
309
|
default=0,
|
@@ -318,14 +317,14 @@ class ExternalDataChunk(TimestampedModel):
|
|
318
317
|
default=0.0,
|
319
318
|
help_text="Cost for generating this embedding (USD)"
|
320
319
|
)
|
321
|
-
|
320
|
+
|
322
321
|
# Context information
|
323
322
|
chunk_metadata = models.JSONField(
|
324
323
|
default=dict,
|
325
324
|
blank=True,
|
326
325
|
help_text="Additional metadata for this specific chunk"
|
327
326
|
)
|
328
|
-
|
327
|
+
|
329
328
|
class Meta:
|
330
329
|
db_table = 'django_cfg_knowbase_external_data_chunk'
|
331
330
|
verbose_name = 'External Data Chunk'
|
@@ -338,10 +337,10 @@ class ExternalDataChunk(TimestampedModel):
|
|
338
337
|
models.Index(fields=['chunk_index']),
|
339
338
|
]
|
340
339
|
ordering = ['external_data', 'chunk_index']
|
341
|
-
|
340
|
+
|
342
341
|
def __str__(self) -> str:
|
343
342
|
return f"{self.external_data.title} - Chunk {self.chunk_index}"
|
344
|
-
|
343
|
+
|
345
344
|
@property
|
346
345
|
def content_preview(self) -> str:
|
347
346
|
"""Get a preview of the chunk content."""
|
@@ -350,19 +349,19 @@ class ExternalDataChunk(TimestampedModel):
|
|
350
349
|
if len(self.content) <= 100:
|
351
350
|
return self.content
|
352
351
|
return self.content[:100] + "..."
|
353
|
-
|
352
|
+
|
354
353
|
@property
|
355
354
|
def embedding_info(self) -> str:
|
356
355
|
"""Get embedding information."""
|
357
356
|
if not self.embedding:
|
358
357
|
return "No embedding"
|
359
358
|
return f"{len(self.embedding)} dimensions"
|
360
|
-
|
359
|
+
|
361
360
|
@property
|
362
361
|
def similarity_search_ready(self) -> bool:
|
363
362
|
"""Check if chunk is ready for similarity search."""
|
364
363
|
return self.embedding is not None
|
365
|
-
|
364
|
+
|
366
365
|
@property
|
367
366
|
def source_info(self) -> Dict[str, Any]:
|
368
367
|
"""Get source information for this chunk."""
|
@@ -4,11 +4,11 @@ Knowledge Base Serializers
|
|
4
4
|
Pydantic v2 models for API request/response validation.
|
5
5
|
"""
|
6
6
|
|
7
|
-
from .document_serializers import *
|
8
|
-
from .chat_serializers import *
|
9
|
-
from .public_serializers import *
|
10
7
|
from .archive_serializers import *
|
8
|
+
from .chat_serializers import *
|
9
|
+
from .document_serializers import *
|
11
10
|
from .external_data_serializers import *
|
11
|
+
from .public_serializers import *
|
12
12
|
|
13
13
|
__all__ = [
|
14
14
|
# Document serializers
|
@@ -16,19 +16,19 @@ __all__ = [
|
|
16
16
|
'DocumentSerializer',
|
17
17
|
'DocumentStatsSerializer',
|
18
18
|
'DocumentProcessingStatusSerializer',
|
19
|
-
|
19
|
+
|
20
20
|
# Public serializers
|
21
21
|
'PublicCategorySerializer',
|
22
22
|
'PublicDocumentListSerializer',
|
23
23
|
'PublicDocumentSerializer',
|
24
|
-
|
24
|
+
|
25
25
|
# Chat serializers
|
26
26
|
'ChatSessionCreateRequest',
|
27
27
|
'ChatSessionResponse',
|
28
28
|
'ChatQueryRequest',
|
29
29
|
'ChatResponse',
|
30
30
|
'ChatHistoryResponse',
|
31
|
-
|
31
|
+
|
32
32
|
# Archive serializers
|
33
33
|
'DocumentArchiveCreateSerializer',
|
34
34
|
'DocumentArchiveSerializer',
|
@@ -46,7 +46,7 @@ __all__ = [
|
|
46
46
|
'ArchiveUploadSerializer',
|
47
47
|
'ChunkRevectorizationRequestSerializer',
|
48
48
|
'VectorizationResultSerializer',
|
49
|
-
|
49
|
+
|
50
50
|
# External data serializers
|
51
51
|
'ExternalDataCreateRequest',
|
52
52
|
'ExternalDataResponse',
|