django-cfg 1.1.75__tar.gz → 1.1.77__tar.gz

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.
Files changed (276) hide show
  1. {django_cfg-1.1.75 → django_cfg-1.1.77}/PKG-INFO +1 -1
  2. {django_cfg-1.1.75 → django_cfg-1.1.77}/pyproject.toml +1 -1
  3. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/__init__.py +1 -1
  4. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_llm/llm/client.py +38 -26
  5. django_cfg-1.1.77/src/django_cfg/modules/django_llm/llm/models.py +114 -0
  6. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_llm/llm/models_cache.py +2 -1
  7. {django_cfg-1.1.75 → django_cfg-1.1.77}/.gitignore +0 -0
  8. {django_cfg-1.1.75 → django_cfg-1.1.77}/LICENSE +0 -0
  9. {django_cfg-1.1.75 → django_cfg-1.1.77}/MANIFEST.in +0 -0
  10. {django_cfg-1.1.75 → django_cfg-1.1.77}/README.md +0 -0
  11. {django_cfg-1.1.75 → django_cfg-1.1.77}/requirements-dev.txt +0 -0
  12. {django_cfg-1.1.75 → django_cfg-1.1.77}/requirements-test.txt +0 -0
  13. {django_cfg-1.1.75 → django_cfg-1.1.77}/requirements.txt +0 -0
  14. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/README.md +0 -0
  15. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/__init__.py +0 -0
  16. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/README.md +0 -0
  17. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/__init__.py +0 -0
  18. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/admin/__init__.py +0 -0
  19. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/admin/activity.py +0 -0
  20. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/admin/filters.py +0 -0
  21. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/admin/group.py +0 -0
  22. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/admin/inlines.py +0 -0
  23. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/admin/otp.py +0 -0
  24. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/admin/registration_source.py +0 -0
  25. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/admin/resources.py +0 -0
  26. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/admin/twilio_response.py +0 -0
  27. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/admin/user.py +0 -0
  28. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/apps.py +0 -0
  29. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/management/commands/test_otp.py +0 -0
  30. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/managers/__init__.py +0 -0
  31. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/managers/user_manager.py +0 -0
  32. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/migrations/0001_initial.py +0 -0
  33. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/migrations/0002_add_phone_otp_clean.py +0 -0
  34. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/migrations/0003_twilioresponse.py +0 -0
  35. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/migrations/0004_delete_twilioresponse.py +0 -0
  36. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/migrations/0005_twilioresponse.py +0 -0
  37. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/migrations/__init__.py +0 -0
  38. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/models.py +0 -0
  39. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/serializers/__init__.py +0 -0
  40. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/serializers/otp.py +0 -0
  41. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/serializers/profile.py +0 -0
  42. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/serializers/webhook.py +0 -0
  43. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/services/__init__.py +0 -0
  44. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/services/activity_service.py +0 -0
  45. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/services/otp_service.py +0 -0
  46. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/signals.py +0 -0
  47. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/templates/emails/base_email.html +0 -0
  48. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/templates/emails/base_email.txt +0 -0
  49. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/templates/emails/otp_email.html +0 -0
  50. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/templates/emails/otp_email.txt +0 -0
  51. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/templates/emails/welcome_email.html +0 -0
  52. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/templates/emails/welcome_email.txt +0 -0
  53. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/urls.py +0 -0
  54. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/utils/notifications.py +0 -0
  55. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/views/__init__.py +0 -0
  56. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/views/otp.py +0 -0
  57. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/views/profile.py +0 -0
  58. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/accounts/views/webhook.py +0 -0
  59. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/api/__init__.py +0 -0
  60. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/api/commands/__init__.py +0 -0
  61. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/api/commands/urls.py +0 -0
  62. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/api/commands/views.py +0 -0
  63. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/api/health/__init__.py +0 -0
  64. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/api/health/urls.py +0 -0
  65. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/api/health/views.py +0 -0
  66. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/leads/README.md +0 -0
  67. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/leads/__init__.py +0 -0
  68. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/leads/admin/__init__.py +0 -0
  69. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/leads/admin/leads_admin.py +0 -0
  70. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/leads/admin/resources.py +0 -0
  71. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/leads/apps.py +0 -0
  72. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/leads/migrations/0001_initial.py +0 -0
  73. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/leads/migrations/__init__.py +0 -0
  74. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/leads/models.py +0 -0
  75. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/leads/serializers.py +0 -0
  76. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/leads/signals.py +0 -0
  77. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/leads/tests.py +0 -0
  78. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/leads/urls.py +0 -0
  79. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/leads/views.py +0 -0
  80. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/README.md +0 -0
  81. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/__init__.py +0 -0
  82. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/admin/__init__.py +0 -0
  83. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/admin/filters.py +0 -0
  84. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/admin/newsletter_admin.py +0 -0
  85. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/admin/resources.py +0 -0
  86. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/apps.py +0 -0
  87. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/management/__init__.py +0 -0
  88. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/management/commands/__init__.py +0 -0
  89. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/management/commands/test_newsletter.py +0 -0
  90. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/managers/README.md +0 -0
  91. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/managers/__init__.py +0 -0
  92. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/migrations/0001_initial.py +0 -0
  93. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/migrations/__init__.py +0 -0
  94. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/models.py +0 -0
  95. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/serializers.py +0 -0
  96. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/services/email_service.py +0 -0
  97. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/signals.py +0 -0
  98. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/urls.py +0 -0
  99. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/utils/__init__.py +0 -0
  100. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/views/__init__.py +0 -0
  101. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/views/campaigns.py +0 -0
  102. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/views/emails.py +0 -0
  103. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/views/newsletters.py +0 -0
  104. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/views/subscriptions.py +0 -0
  105. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/newsletter/views/tracking.py +0 -0
  106. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/__init__.py +0 -0
  107. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/admin/__init__.py +0 -0
  108. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/admin/filters.py +0 -0
  109. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/admin/resources.py +0 -0
  110. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/admin/support_admin.py +0 -0
  111. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/apps.py +0 -0
  112. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/managers/message_manager.py +0 -0
  113. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/managers/ticket_manager.py +0 -0
  114. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/migrations/0001_initial.py +0 -0
  115. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/migrations/0002_alter_message_ticket.py +0 -0
  116. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/migrations/__init__.py +0 -0
  117. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/models.py +0 -0
  118. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/serializers.py +0 -0
  119. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/signals.py +0 -0
  120. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/templates/support/chat/access_denied.html +0 -0
  121. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/templates/support/chat/ticket_chat.html +0 -0
  122. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/urls.py +0 -0
  123. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/utils/__init__.py +0 -0
  124. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/utils/support_email_service.py +0 -0
  125. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/views/__init__.py +0 -0
  126. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/views/admin.py +0 -0
  127. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/views/api.py +0 -0
  128. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/support/views/chat.py +0 -0
  129. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/__init__.py +0 -0
  130. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/admin.py +0 -0
  131. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/apps.py +0 -0
  132. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/serializers.py +0 -0
  133. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/static/tasks/css/dashboard.css +0 -0
  134. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/static/tasks/js/api.js +0 -0
  135. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/static/tasks/js/dashboard.js +0 -0
  136. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/static/tasks/js/modals.js +0 -0
  137. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/static/tasks/js/notifications.js +0 -0
  138. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/static/tasks/js/task-monitor.js +0 -0
  139. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/static/tasks/js/theme.js +0 -0
  140. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/templates/tasks/base.html +0 -0
  141. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/templates/tasks/components/info_cards.html +0 -0
  142. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/templates/tasks/components/management_actions.html +0 -0
  143. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/templates/tasks/components/overview_tab.html +0 -0
  144. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/templates/tasks/components/queues_tab.html +0 -0
  145. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/templates/tasks/components/status_cards.html +0 -0
  146. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html +0 -0
  147. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/templates/tasks/components/task_details_modal.html +0 -0
  148. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/templates/tasks/components/tasks_tab.html +0 -0
  149. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/templates/tasks/components/workers_tab.html +0 -0
  150. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/templates/tasks/dashboard.html +0 -0
  151. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/urls.py +0 -0
  152. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/tasks/views.py +0 -0
  153. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps/urls.py +0 -0
  154. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/apps.py +0 -0
  155. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/archive/django_sample.zip +0 -0
  156. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/cli/README.md +0 -0
  157. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/cli/__init__.py +0 -0
  158. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/cli/commands/__init__.py +0 -0
  159. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/cli/commands/create_project.py +0 -0
  160. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/cli/commands/info.py +0 -0
  161. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/cli/main.py +0 -0
  162. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/cli/utils.py +0 -0
  163. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/core/__init__.py +0 -0
  164. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/core/config.py +0 -0
  165. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/core/environment.py +0 -0
  166. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/core/generation.py +0 -0
  167. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/core/validation.py +0 -0
  168. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/exceptions.py +0 -0
  169. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/integration.py +0 -0
  170. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/__init__.py +0 -0
  171. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/__init__.py +0 -0
  172. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/check_settings.py +0 -0
  173. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/clear_constance.py +0 -0
  174. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/create_token.py +0 -0
  175. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/generate.py +0 -0
  176. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/list_urls.py +0 -0
  177. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/migrate_all.py +0 -0
  178. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/migrator.py +0 -0
  179. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/rundramatiq.py +0 -0
  180. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/runserver_ngrok.py +0 -0
  181. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/script.py +0 -0
  182. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/show_config.py +0 -0
  183. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/show_urls.py +0 -0
  184. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/superuser.py +0 -0
  185. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/task_clear.py +0 -0
  186. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/task_status.py +0 -0
  187. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/test_email.py +0 -0
  188. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/test_telegram.py +0 -0
  189. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/test_twilio.py +0 -0
  190. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/tree.py +0 -0
  191. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/management/commands/validate_config.py +0 -0
  192. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/middleware/README.md +0 -0
  193. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/middleware/__init__.py +0 -0
  194. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/middleware/public_endpoints.py +0 -0
  195. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/middleware/user_activity.py +0 -0
  196. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/models/__init__.py +0 -0
  197. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/models/cache.py +0 -0
  198. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/models/constance.py +0 -0
  199. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/models/database.py +0 -0
  200. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/models/drf.py +0 -0
  201. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/models/jwt.py +0 -0
  202. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/models/limits.py +0 -0
  203. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/models/ngrok.py +0 -0
  204. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/models/revolution.py +0 -0
  205. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/models/services.py +0 -0
  206. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/models/tasks.py +0 -0
  207. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/models/unfold.py +0 -0
  208. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/__init__.py +0 -0
  209. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/base.py +0 -0
  210. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_currency/README.md +0 -0
  211. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_currency/__init__.py +0 -0
  212. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_currency/cache.py +0 -0
  213. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_currency/converter.py +0 -0
  214. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_currency/service.py +0 -0
  215. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_email.py +0 -0
  216. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_llm/README.md +0 -0
  217. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_llm/__init__.py +0 -0
  218. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_llm/example.py +0 -0
  219. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_llm/llm/__init__.py +0 -0
  220. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_llm/llm/cache.py +0 -0
  221. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_llm/llm/costs.py +0 -0
  222. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_llm/llm/extractor.py +0 -0
  223. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_llm/llm/tokenizer.py +0 -0
  224. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_llm/translator/__init__.py +0 -0
  225. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_llm/translator/cache.py +0 -0
  226. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_llm/translator/translator.py +0 -0
  227. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_logger.py +0 -0
  228. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_ngrok.py +0 -0
  229. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_tasks.py +0 -0
  230. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_telegram.py +0 -0
  231. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_twilio/README.md +0 -0
  232. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_twilio/__init__.py +0 -0
  233. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_twilio/exceptions.py +0 -0
  234. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_twilio/models.py +0 -0
  235. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_twilio/sendgrid_service.py +0 -0
  236. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_twilio/service.py +0 -0
  237. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_twilio/simple_service.py +0 -0
  238. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_twilio/templates/guide.md +0 -0
  239. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_twilio/templates/sendgrid_otp_email.html +0 -0
  240. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_twilio/templates/sendgrid_test_data.json +0 -0
  241. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/django_twilio/twilio_service.py +0 -0
  242. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/dramatiq_setup.py +0 -0
  243. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/logger.py +0 -0
  244. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/unfold/__init__.py +0 -0
  245. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/unfold/callbacks.py +0 -0
  246. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/unfold/dashboard.py +0 -0
  247. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/unfold/models.py +0 -0
  248. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/unfold/system_monitor.py +0 -0
  249. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/modules/unfold/tailwind.py +0 -0
  250. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/pyproject.toml +0 -0
  251. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/routers.py +0 -0
  252. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/__init__.py +0 -0
  253. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/index.html +0 -0
  254. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/layouts/dashboard_with_tabs.html +0 -0
  255. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/components/activity_tracker.html +0 -0
  256. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/components/charts_section.html +0 -0
  257. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/components/django_commands.html +0 -0
  258. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/components/quick_actions.html +0 -0
  259. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/components/recent_activity.html +0 -0
  260. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/components/recent_users_table.html +0 -0
  261. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/components/stats_cards.html +0 -0
  262. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/components/stats_tiles.html +0 -0
  263. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/components/system_health.html +0 -0
  264. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/components/system_metrics.html +0 -0
  265. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/components/user_permissions.html +0 -0
  266. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/tabs/app_stats_tab.html +0 -0
  267. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/tabs/commands_tab.html +0 -0
  268. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/tabs/overview_tab.html +0 -0
  269. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/tabs/stats_tab.html +0 -0
  270. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/tabs/users_tab.html +0 -0
  271. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/admin/snippets/zones/zones_table.html +0 -0
  272. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/templates/emails/base_email.html +0 -0
  273. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/utils/__init__.py +0 -0
  274. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/utils/path_resolution.py +0 -0
  275. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/utils/smart_defaults.py +0 -0
  276. {django_cfg-1.1.75 → django_cfg-1.1.77}/src/django_cfg/version_check.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-cfg
3
- Version: 1.1.75
3
+ Version: 1.1.77
4
4
  Summary: 🚀 Production-ready Django configuration framework with type-safe settings, smart automation, and modern developer experience
5
5
  Project-URL: Homepage, https://github.com/markolofsen/django-cfg
6
6
  Project-URL: Documentation, https://django-cfg.readthedocs.io
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "django-cfg"
7
- version = "1.1.75"
7
+ version = "1.1.77"
8
8
  description = "🚀 Production-ready Django configuration framework with type-safe settings, smart automation, and modern developer experience"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -38,7 +38,7 @@ default_app_config = "django_cfg.apps.DjangoCfgConfig"
38
38
  from typing import TYPE_CHECKING
39
39
 
40
40
  # Version information
41
- __version__ = "1.1.75"
41
+ __version__ = "1.1.77"
42
42
  __author__ = "Unrealos Team"
43
43
  __email__ = "info@unrealos.com"
44
44
  __license__ = "MIT"
@@ -26,6 +26,17 @@ from .models_cache import ModelsCache, ModelInfo
26
26
  from .costs import calculate_chat_cost, calculate_embedding_cost, estimate_cost
27
27
  from .tokenizer import Tokenizer
28
28
  from .extractor import JSONExtractor
29
+ from .models import (
30
+ EmbeddingResponse,
31
+ ChatCompletionResponse,
32
+ TokenUsage,
33
+ ChatChoice,
34
+ LLMStats,
35
+ CostEstimate,
36
+ ValidationResult,
37
+ CacheInfo,
38
+ LLMError
39
+ )
29
40
 
30
41
  logger = logging.getLogger(__name__)
31
42
 
@@ -458,7 +469,7 @@ class LLMClient:
458
469
  self.models_cache.clear_cache()
459
470
  logger.info("LLM client cache cleared")
460
471
 
461
- def generate_embedding(self, text: str, model: str = "text-embedding-ada-002") -> Dict[str, Any]:
472
+ def generate_embedding(self, text: str, model: str = "text-embedding-ada-002") -> EmbeddingResponse:
462
473
  """
463
474
  Generate embedding for text.
464
475
 
@@ -484,7 +495,8 @@ class LLMClient:
484
495
  if cached_response:
485
496
  logger.debug("Cache hit for embedding generation")
486
497
  self.stats['cache_hits'] += 1
487
- return cached_response
498
+ # Convert cached dict back to Pydantic model
499
+ return EmbeddingResponse(**cached_response)
488
500
 
489
501
  self.stats['cache_misses'] += 1
490
502
  self.stats['total_requests'] += 1
@@ -526,16 +538,16 @@ class LLMClient:
526
538
  tokens_used = len(text.split()) # Rough estimate
527
539
  cost = calculate_embedding_cost(tokens_used, model, self.models_cache)
528
540
 
529
- result = {
530
- "embedding": mock_embedding,
531
- "tokens": tokens_used,
532
- "cost": cost,
533
- "model": model,
534
- "text_length": len(text),
535
- "dimension": len(mock_embedding),
536
- "response_time": time.time() - start_time,
537
- "warning": "This is a mock embedding, not a real one. OpenRouter doesn't support embedding models."
538
- }
541
+ result = EmbeddingResponse(
542
+ embedding=mock_embedding,
543
+ tokens=tokens_used,
544
+ cost=cost,
545
+ model=model,
546
+ text_length=len(text),
547
+ dimension=len(mock_embedding),
548
+ response_time=time.time() - start_time,
549
+ warning="This is a mock embedding, not a real one. OpenRouter doesn't support embedding models."
550
+ )
539
551
  else:
540
552
  # Use real OpenAI embedding API
541
553
  response = self.client.embeddings.create(
@@ -551,25 +563,25 @@ class LLMClient:
551
563
  tokens_used = response.usage.total_tokens
552
564
  cost = calculate_embedding_cost(tokens_used, model, self.models_cache)
553
565
 
554
- result = {
555
- "embedding": embedding_vector,
556
- "tokens": tokens_used,
557
- "cost": cost,
558
- "model": model,
559
- "text_length": len(text),
560
- "dimension": len(embedding_vector),
561
- "response_time": time.time() - start_time
562
- }
566
+ result = EmbeddingResponse(
567
+ embedding=embedding_vector,
568
+ tokens=tokens_used,
569
+ cost=cost,
570
+ model=model,
571
+ text_length=len(text),
572
+ dimension=len(embedding_vector),
573
+ response_time=time.time() - start_time
574
+ )
563
575
 
564
576
  # Update statistics
565
577
  self.stats['successful_requests'] += 1
566
- self.stats['total_tokens_used'] += result["tokens"]
567
- self.stats['total_cost_usd'] += result["cost"]
578
+ self.stats['total_tokens_used'] += result.tokens
579
+ self.stats['total_cost_usd'] += result.cost
568
580
 
569
- # Cache the result
570
- self.cache.set_response(request_hash, result, model)
581
+ # Cache the result (convert to dict for caching)
582
+ self.cache.set_response(request_hash, result.model_dump(), model)
571
583
 
572
- logger.debug(f"Generated embedding: {result['tokens']} tokens, ${result['cost']:.6f}")
584
+ logger.debug(f"Generated embedding: {result.tokens} tokens, ${result.cost:.6f}")
573
585
  return result
574
586
 
575
587
  except Exception as e:
@@ -0,0 +1,114 @@
1
+ """
2
+ Pydantic models for LLM client responses.
3
+ """
4
+
5
+ from typing import List, Optional, Dict, Any, Union
6
+ from pydantic import BaseModel, Field
7
+ from datetime import datetime
8
+
9
+
10
+ class TokenUsage(BaseModel):
11
+ """Token usage information."""
12
+ prompt_tokens: int = Field(default=0, description="Number of tokens in the prompt")
13
+ completion_tokens: int = Field(default=0, description="Number of tokens in the completion")
14
+ total_tokens: int = Field(default=0, description="Total number of tokens used")
15
+
16
+
17
+ class ChatChoice(BaseModel):
18
+ """Chat completion choice."""
19
+ index: int = Field(description="Choice index")
20
+ message: Dict[str, Any] = Field(description="Message content")
21
+ finish_reason: Optional[str] = Field(default=None, description="Reason for finishing")
22
+
23
+
24
+ class ChatCompletionResponse(BaseModel):
25
+ """Chat completion response from LLM."""
26
+ id: str = Field(description="Response ID")
27
+ model: str = Field(description="Model used")
28
+ created: str = Field(description="Creation timestamp")
29
+ choices: List[ChatChoice] = Field(default_factory=list, description="Response choices")
30
+ usage: Optional[TokenUsage] = Field(default=None, description="Token usage")
31
+ finish_reason: Optional[str] = Field(default=None, description="Finish reason")
32
+ content: str = Field(description="Response content")
33
+ tokens_used: int = Field(default=0, description="Total tokens used")
34
+ cost_usd: float = Field(default=0.0, description="Cost in USD")
35
+ processing_time: float = Field(default=0.0, description="Processing time in seconds")
36
+ extracted_json: Optional[Dict[str, Any]] = Field(default=None, description="Extracted JSON if any")
37
+
38
+
39
+ class EmbeddingResponse(BaseModel):
40
+ """Embedding generation response from LLM."""
41
+ embedding: List[float] = Field(description="Generated embedding vector")
42
+ tokens: int = Field(description="Number of tokens processed")
43
+ cost: float = Field(description="Cost in USD")
44
+ model: str = Field(description="Model used for embedding")
45
+ text_length: int = Field(description="Length of input text")
46
+ dimension: int = Field(description="Embedding vector dimension")
47
+ response_time: float = Field(description="Response time in seconds")
48
+ warning: Optional[str] = Field(default=None, description="Warning message if any")
49
+
50
+ class Config:
51
+ """Pydantic configuration."""
52
+ json_encoders = {
53
+ # Custom encoders if needed
54
+ }
55
+
56
+
57
+ class LLMStats(BaseModel):
58
+ """LLM client statistics."""
59
+ successful_requests: int = Field(default=0, description="Number of successful requests")
60
+ failed_requests: int = Field(default=0, description="Number of failed requests")
61
+ total_tokens_used: int = Field(default=0, description="Total tokens used")
62
+ total_cost_usd: float = Field(default=0.0, description="Total cost in USD")
63
+ model_usage: Dict[str, int] = Field(default_factory=dict, description="Usage per model")
64
+ provider_usage: Dict[str, int] = Field(default_factory=dict, description="Usage per provider")
65
+ cache_hits: int = Field(default=0, description="Number of cache hits")
66
+ cache_misses: int = Field(default=0, description="Number of cache misses")
67
+
68
+
69
+ class ModelInfo(BaseModel):
70
+ """Model information."""
71
+ id: str = Field(description="Model ID")
72
+ name: str = Field(description="Model name")
73
+ provider: str = Field(description="Provider name")
74
+ max_tokens: int = Field(description="Maximum tokens")
75
+ input_cost_per_token: float = Field(description="Input cost per token")
76
+ output_cost_per_token: float = Field(description="Output cost per token")
77
+ supports_functions: bool = Field(default=False, description="Supports function calling")
78
+ supports_vision: bool = Field(default=False, description="Supports vision")
79
+ context_window: int = Field(description="Context window size")
80
+
81
+
82
+ class CostEstimate(BaseModel):
83
+ """Cost estimation result."""
84
+ estimated_cost: float = Field(description="Estimated cost in USD")
85
+ input_tokens: int = Field(description="Estimated input tokens")
86
+ output_tokens: int = Field(description="Estimated output tokens")
87
+ total_tokens: int = Field(description="Total estimated tokens")
88
+ model: str = Field(description="Model used for estimation")
89
+
90
+
91
+ class ValidationResult(BaseModel):
92
+ """Validation result for requests."""
93
+ is_valid: bool = Field(description="Whether the request is valid")
94
+ errors: List[str] = Field(default_factory=list, description="Validation errors")
95
+ warnings: List[str] = Field(default_factory=list, description="Validation warnings")
96
+ estimated_tokens: Optional[int] = Field(default=None, description="Estimated token count")
97
+ estimated_cost: Optional[float] = Field(default=None, description="Estimated cost")
98
+
99
+
100
+ class CacheInfo(BaseModel):
101
+ """Cache information."""
102
+ hit: bool = Field(description="Whether it was a cache hit")
103
+ key: str = Field(description="Cache key")
104
+ ttl: Optional[int] = Field(default=None, description="Time to live in seconds")
105
+ size: Optional[int] = Field(default=None, description="Cache entry size")
106
+
107
+
108
+ class LLMError(BaseModel):
109
+ """LLM error information."""
110
+ error_type: str = Field(description="Type of error")
111
+ message: str = Field(description="Error message")
112
+ code: Optional[str] = Field(default=None, description="Error code")
113
+ details: Optional[Dict[str, Any]] = Field(default=None, description="Additional error details")
114
+ retry_after: Optional[int] = Field(default=None, description="Retry after seconds")
@@ -70,7 +70,8 @@ class ModelsCache:
70
70
  from django.conf import settings
71
71
  if hasattr(settings, 'CACHES') and 'default' in settings.CACHES:
72
72
  cache_location = settings.CACHES['default'].get('LOCATION')
73
- if cache_location:
73
+ # Only use cache_location if it's a file path, not a Redis URL
74
+ if cache_location and not cache_location.startswith(('redis://', 'rediss://')):
74
75
  self.cache_dir = Path(cache_location) / "django_llm"
75
76
  else:
76
77
  self.cache_dir = Path.cwd() / "cache" / "django_llm"
File without changes
File without changes
File without changes
File without changes