django-unicom 25.4.2.dev1__tar.gz → 25.4.2.dev2__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 (215) hide show
  1. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/PKG-INFO +2 -1
  2. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/django_unicom.egg-info/PKG-INFO +2 -1
  3. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/django_unicom.egg-info/requires.txt +1 -0
  4. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/setup.py +1 -0
  5. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/_version.py +2 -2
  6. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/message.py +9 -2
  7. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/.cursor/rules/match_codebase_style.mdc +0 -0
  8. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/.cursor/rules/preserve_comments_and_irrelevant_code.mdc +0 -0
  9. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/.cursor/rules/require_context_before_changes.mdc +0 -0
  10. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/Dockerfile +0 -0
  11. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/MANIFEST.in +0 -0
  12. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/Makefile +0 -0
  13. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/README.md +0 -0
  14. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/conftest.py +0 -0
  15. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/data/definitions/bots/__init__.py +0 -0
  16. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/data/definitions/tools/__init__.py +0 -0
  17. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/django_unicom.egg-info/SOURCES.txt +0 -0
  18. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/django_unicom.egg-info/dependency_links.txt +0 -0
  19. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/django_unicom.egg-info/top_level.txt +0 -0
  20. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/docker-compose.yaml +0 -0
  21. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/entrypoint.sh +0 -0
  22. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/internal-channel-modernization.md +0 -0
  23. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/manage.py +0 -0
  24. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/pyproject.toml +0 -0
  25. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/pytest.ini +0 -0
  26. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/requirements.txt +0 -0
  27. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/scripts/reacher_validate.sh +0 -0
  28. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/setup.cfg +0 -0
  29. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/tests/__init__.py +0 -0
  30. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/tests/test_cross_platform_buttons.py +0 -0
  31. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/tests/test_email_authentication.py +0 -0
  32. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/tests/test_email_live.py +0 -0
  33. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/tests/test_email_request_processing.py +0 -0
  34. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/tests/test_telegram_live.py +0 -0
  35. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/tests/test_webchat.py +0 -0
  36. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/tests/test_webchat_branching.py +0 -0
  37. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/tests/utils.py +0 -0
  38. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/todo.md +0 -0
  39. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/__init__.py +0 -0
  40. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/admin/__init__.py +0 -0
  41. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/admin/account_admin.py +0 -0
  42. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/admin/channel_admin.py +0 -0
  43. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/admin/chat_admin.py +0 -0
  44. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/admin/draft_message_admin.py +0 -0
  45. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/admin/email_inline_image_admin.py +0 -0
  46. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/admin/filters.py +0 -0
  47. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/admin/member_admin.py +0 -0
  48. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/admin/message_admin.py +0 -0
  49. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/admin/message_template_admin.py +0 -0
  50. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/admin/request_admin.py +0 -0
  51. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/apps.py +0 -0
  52. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/consumers/__init__.py +0 -0
  53. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/consumers/webchat_consumer.py +0 -0
  54. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/management/__init__.py +0 -0
  55. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/management/commands/__init__.py +0 -0
  56. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/management/commands/mail_inbox_listen.py +0 -0
  57. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/management/commands/run_as_llm_chat.py +0 -0
  58. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/management/commands/send_scheduled_messages.py +0 -0
  59. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/management/commands/start_imap_listeners.py +0 -0
  60. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0001_initial.py +0 -0
  61. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0002_emailinlineimage.py +0 -0
  62. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0003_alter_emailinlineimage_email_message.py +0 -0
  63. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0004_messagetemplateinlineimage.py +0 -0
  64. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0005_emailinlineimage_hash_and_more.py +0 -0
  65. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0006_channel_created_at_channel_created_by_and_more.py +0 -0
  66. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0007_message_imap_uid.py +0 -0
  67. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0008_add_all_members_group.py +0 -0
  68. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0009_add_tool_call_types.py +0 -0
  69. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0010_request_initial_request_request_llm_calls_count_and_more.py +0 -0
  70. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0011_toolcall_add_message_reference.py +0 -0
  71. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0012_message_response_to_tool_call_and_more.py +0 -0
  72. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0013_callbackexecution.py +0 -0
  73. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0014_rename_authorized_user_to_intended_account.py +0 -0
  74. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0015_simplify_callback_execution.py +0 -0
  75. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0016_callbackexecution_tool_call.py +0 -0
  76. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0017_add_chat_metadata.py +0 -0
  77. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0018_message_bounce_details_message_bounce_reason_and_more.py +0 -0
  78. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0019_draftmessage_skip_reacher_validation.py +0 -0
  79. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0020_message_provider_message_id.py +0 -0
  80. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0021_message_open_count.py +0 -0
  81. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0022_toolcall_result_status.py +0 -0
  82. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0023_toolcall_progress_updates_for_user.py +0 -0
  83. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0024_email_from_name.py +0 -0
  84. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0025_message_unicom_message_channel_imap_uid_unique.py +0 -0
  85. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/0026_message_email_sender_authenticated.py +0 -0
  86. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/migrations/__init__.py +0 -0
  87. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/__init__.py +0 -0
  88. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/account.py +0 -0
  89. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/account_chat.py +0 -0
  90. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/callback_execution.py +0 -0
  91. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/channel.py +0 -0
  92. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/chat.py +0 -0
  93. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/constants.py +0 -0
  94. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/draft_message.py +0 -0
  95. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/fields.py +0 -0
  96. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/member.py +0 -0
  97. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/member_group.py +0 -0
  98. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/message_template.py +0 -0
  99. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/request.py +0 -0
  100. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/request_category.py +0 -0
  101. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/tool_call.py +0 -0
  102. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/models/update.py +0 -0
  103. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/__init__.py +0 -0
  104. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/chat_summary.py +0 -0
  105. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/crossplatform/__init__.py +0 -0
  106. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/crossplatform/reply_to_message.py +0 -0
  107. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/crossplatform/scheduler.py +0 -0
  108. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/crossplatform/send_message.py +0 -0
  109. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/decode_base64_image.py +0 -0
  110. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/email/IMAP_thread_manager.py +0 -0
  111. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/email/__init__.py +0 -0
  112. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/email/auth_helpers.py +0 -0
  113. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/email/email_tracking.py +0 -0
  114. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/email/listen_to_IMAP.py +0 -0
  115. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/email/quote_filter.py +0 -0
  116. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/email/replace_cid_images_with_base64.py +0 -0
  117. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/email/save_email_message.py +0 -0
  118. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/email/send_email_message.py +0 -0
  119. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/email/system_channel.py +0 -0
  120. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/email/validate_email_config.py +0 -0
  121. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/get_public_origin.py +0 -0
  122. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/html_inline_images.py +0 -0
  123. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/internal/__init__.py +0 -0
  124. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/internal/generate_text_message_data.py +0 -0
  125. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/internal/save_internal_message.py +0 -0
  126. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/internal/send_internal_message.py +0 -0
  127. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/llm/__init__.py +0 -0
  128. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/llm/tool_calls.py +0 -0
  129. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/telegram/__init__.py +0 -0
  130. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/telegram/answer_callback_query.py +0 -0
  131. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/telegram/create_inline_keyboard.py +0 -0
  132. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/telegram/download_file.py +0 -0
  133. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/telegram/edit_telegram_message.py +0 -0
  134. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/telegram/escape_markdown.py +0 -0
  135. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/telegram/get_file_path.py +0 -0
  136. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/telegram/handle_telegram_callback.py +0 -0
  137. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/telegram/save_telegram_message.py +0 -0
  138. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/telegram/send_telegram_message.py +0 -0
  139. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/telegram/set_telegram_webhook.py +0 -0
  140. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/telegram/start_typing_in_telegram.py +0 -0
  141. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/telegram/stop_typing_in_telegram.py +0 -0
  142. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/template_renderer.py +0 -0
  143. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/webchat/__init__.py +0 -0
  144. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/webchat/generate_chat_title.py +0 -0
  145. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/webchat/get_or_create_account.py +0 -0
  146. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/webchat/migrate_guest_to_user.py +0 -0
  147. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/webchat/save_webchat_message.py +0 -0
  148. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/webchat/send_webchat_message.py +0 -0
  149. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/whatsapp/__init__.py +0 -0
  150. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/whatsapp/get_template.py +0 -0
  151. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/whatsapp/save_whatsapp_message.py +0 -0
  152. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/whatsapp/save_whatsapp_message_status.py +0 -0
  153. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/services/whatsapp/send_whatsapp_message.py +0 -0
  154. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/signals.py +0 -0
  155. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/css/bootstrap_scoped.css +0 -0
  156. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/css/draft_message_mobile.css +0 -0
  157. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/js/channel_config.js +0 -0
  158. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/js/tinymce_ai_template.js +0 -0
  159. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/js/tinymce_init.js +0 -0
  160. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/webchat/components/chat-list.js +0 -0
  161. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/webchat/components/media-preview.js +0 -0
  162. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/webchat/components/message-input.js +0 -0
  163. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/webchat/components/message-item.js +0 -0
  164. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/webchat/components/message-list.js +0 -0
  165. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/webchat/components/voice-recorder.js +0 -0
  166. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/webchat/utils/api-client.js +0 -0
  167. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/webchat/utils/datetime-formatter.js +0 -0
  168. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/webchat/utils/font-awesome-loader.js +0 -0
  169. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/webchat/utils/morphdom.js +0 -0
  170. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/webchat/utils/realtime-client.js +0 -0
  171. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/webchat/webchat-component.js +0 -0
  172. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/webchat/webchat-styles.js +0 -0
  173. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/static/unicom/webchat/webchat-with-sidebar.js +0 -0
  174. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/templates/admin/unicom/chat/change_list.html +0 -0
  175. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/templates/admin/unicom/chat/compose.html +0 -0
  176. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/templates/admin/unicom/chat_history.html +0 -0
  177. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/templates/admin/unicom/forms/email_message_form.html +0 -0
  178. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/templates/admin/unicom/forms/text_message_form.html +0 -0
  179. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/templates/admin/unicom/includes/ai_template_modal.html +0 -0
  180. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/templates/admin/unicom/includes/loading_indicators.html +0 -0
  181. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/templates/admin/unicom/includes/message_actions_menu.html +0 -0
  182. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/templates/admin/unicom/messagetemplate/change_form.html +0 -0
  183. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/templates/code_templates/category_processor.py +0 -0
  184. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/templates/unicom/webchat_demo.html +0 -0
  185. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/templatetags/__init__.py +0 -0
  186. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/templatetags/unicom_tags.py +0 -0
  187. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/urls.py +0 -0
  188. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/views/__init__.py +0 -0
  189. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/views/chat_history_view.py +0 -0
  190. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/views/compose_view.py +0 -0
  191. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/views/email_tracking.py +0 -0
  192. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/views/inline_image.py +0 -0
  193. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/views/message_template.py +0 -0
  194. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/views/telegram_webhook.py +0 -0
  195. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/views/webchat_demo_view.py +0 -0
  196. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/views/webchat_views.py +0 -0
  197. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom/views/whatsapp_webhook.py +0 -0
  198. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/__init__.py +0 -0
  199. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/apps.py +0 -0
  200. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/asgi.py +0 -0
  201. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/callback_handlers.py +0 -0
  202. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/definitions/__init__.py +0 -0
  203. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/definitions/bots/__init__.py +0 -0
  204. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/definitions/bots/assistant_bot.py +0 -0
  205. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/definitions/tools/__init__.py +0 -0
  206. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/definitions/tools/cross_platform_buttons.py +0 -0
  207. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/definitions/tools/get_system_info.py +0 -0
  208. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/definitions/tools/interactive_menu.py +0 -0
  209. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/definitions/tools/interval_alarm.py +0 -0
  210. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/definitions/tools/ip_lookup.py +0 -0
  211. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/definitions/tools/simple_timer.py +0 -0
  212. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/settings.py +0 -0
  213. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/test_button_handlers.py +0 -0
  214. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/urls.py +0 -0
  215. {django_unicom-25.4.2.dev1 → django_unicom-25.4.2.dev2}/unicom_project/wsgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-unicom
3
- Version: 25.4.2.dev1
3
+ Version: 25.4.2.dev2
4
4
  Summary: Unified communication layer for Django (Telegram, WhatsApp, Email)
5
5
  Home-page: https://github.com/meena-erian/django-unicom
6
6
  Author: Meena (Menas) Erian
@@ -23,6 +23,7 @@ Requires-Dist: Pillow>=10.4.0
23
23
  Requires-Dist: django-ace>=1.39.2
24
24
  Requires-Dist: fa2svg==0.1.10
25
25
  Requires-Dist: pytz>=2024.1
26
+ Requires-Dist: Jinja2>=3.1.0
26
27
  Requires-Dist: openai
27
28
  Requires-Dist: pydub>=0.25.1
28
29
  Requires-Dist: audioop-lts; python_version >= "3.13"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-unicom
3
- Version: 25.4.2.dev1
3
+ Version: 25.4.2.dev2
4
4
  Summary: Unified communication layer for Django (Telegram, WhatsApp, Email)
5
5
  Home-page: https://github.com/meena-erian/django-unicom
6
6
  Author: Meena (Menas) Erian
@@ -23,6 +23,7 @@ Requires-Dist: Pillow>=10.4.0
23
23
  Requires-Dist: django-ace>=1.39.2
24
24
  Requires-Dist: fa2svg==0.1.10
25
25
  Requires-Dist: pytz>=2024.1
26
+ Requires-Dist: Jinja2>=3.1.0
26
27
  Requires-Dist: openai
27
28
  Requires-Dist: pydub>=0.25.1
28
29
  Requires-Dist: audioop-lts; python_version >= "3.13"
@@ -12,6 +12,7 @@ Pillow>=10.4.0
12
12
  django-ace>=1.39.2
13
13
  fa2svg==0.1.10
14
14
  pytz>=2024.1
15
+ Jinja2>=3.1.0
15
16
  openai
16
17
  pydub>=0.25.1
17
18
  WeasyPrint==52.5
@@ -27,6 +27,7 @@ setup(
27
27
  'django-ace>=1.39.2',
28
28
  'fa2svg==0.1.10',
29
29
  'pytz>=2024.1',
30
+ 'Jinja2>=3.1.0',
30
31
  'openai',
31
32
  'pydub>=0.25.1',
32
33
  'audioop-lts; python_version >= "3.13"',
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '25.4.2.dev1'
32
- __version_tuple__ = version_tuple = (25, 4, 2, 'dev1')
31
+ __version__ = version = '25.4.2.dev2'
32
+ __version_tuple__ = version_tuple = (25, 4, 2, 'dev2')
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -13,6 +13,7 @@ import base64
13
13
  from .fields import DedupFileField, only_delete_file_if_unused
14
14
  from unicom.services.get_public_origin import get_public_origin
15
15
  from openai import OpenAI
16
+ from openai import OpenAIError
16
17
  from django.conf import settings
17
18
  from pydub import AudioSegment
18
19
  import io
@@ -20,7 +21,13 @@ import io
20
21
  if TYPE_CHECKING:
21
22
  from unicom.models import Channel
22
23
 
23
- openai_client = OpenAI(api_key=getattr(settings, 'OPENAI_API_KEY', None))
24
+ def get_openai_client():
25
+ api_key = getattr(settings, 'OPENAI_API_KEY', None)
26
+ if not api_key:
27
+ raise OpenAIError(
28
+ "OPENAI_API_KEY is required only for LLM features such as Message.reply_using_llm()."
29
+ )
30
+ return OpenAI(api_key=api_key)
24
31
 
25
32
 
26
33
  class Message(models.Model):
@@ -598,7 +605,7 @@ class Message(models.Model):
598
605
  openai_kwargs["modalities"] = ["text", "audio"]
599
606
  openai_kwargs["audio"] = {"voice": voice, "format": "opus"}
600
607
  # Call OpenAI ChatCompletion API
601
- response = openai_client.chat.completions.create(
608
+ response = get_openai_client().chat.completions.create(
602
609
  model=model,
603
610
  messages=messages,
604
611
  **openai_kwargs