bertrend 0.4.2__tar.gz → 0.4.4__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 (332) hide show
  1. {bertrend-0.4.2 → bertrend-0.4.4}/PKG-INFO +43 -49
  2. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_monitor/app.py +33 -9
  3. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/demos_utils/icons.py +7 -1
  4. bertrend-0.4.4/bertrend/services/scheduling/dashboard_scheduling.py +280 -0
  5. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_temporal_metrics_embedding.py +486 -28
  6. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_visualizations.py +2 -2
  7. bertrend-0.4.4/bertrend/tests/demos/summarization/test_summarizer_app.py +321 -0
  8. bertrend-0.4.4/bertrend/tests/services/bertrend/__init__.py +5 -0
  9. bertrend-0.4.4/bertrend/tests/services/bertrend/test_routers_newsletters.py +115 -0
  10. bertrend-0.4.4/bertrend/tests/services/embedding_server/test_models.py +35 -0
  11. bertrend-0.4.4/bertrend/tests/services/embedding_server/test_routers.py +337 -0
  12. bertrend-0.4.4/bertrend/tests/services/embedding_server/test_security.py +373 -0
  13. bertrend-0.4.4/bertrend/tests/services/embedding_server/test_settings.py +54 -0
  14. bertrend-0.4.4/bertrend/tests/services/summarizer/__init__.py +4 -0
  15. bertrend-0.4.4/bertrend/tests/services/summary/__init__.py +4 -0
  16. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/test_installation.py +0 -6
  17. bertrend-0.4.4/bertrend/tests/utils/__init__.py +4 -0
  18. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_apscheduler_utils.py +135 -0
  19. {bertrend-0.4.2 → bertrend-0.4.4}/pyproject.toml +43 -49
  20. bertrend-0.4.2/bertrend/services/scheduling/dashboard.html +0 -699
  21. {bertrend-0.4.2 → bertrend-0.4.4}/AUTHORS.txt +0 -0
  22. {bertrend-0.4.2 → bertrend-0.4.4}/LICENSE.md +0 -0
  23. {bertrend-0.4.2 → bertrend-0.4.4}/README.md +0 -0
  24. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/BERTopicModel.py +0 -0
  25. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/BERTrend.py +0 -0
  26. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/__init__.py +0 -0
  27. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/article_scoring/__init__.py +0 -0
  28. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/article_scoring/article_scoring.py +0 -0
  29. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/article_scoring/prompts.py +0 -0
  30. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/article_scoring/scoring_agent.py +0 -0
  31. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/__init__.py +0 -0
  32. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/common/__init__.py +0 -0
  33. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/common/apscheduler_utils.py +0 -0
  34. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/common/crontab_utils.py +0 -0
  35. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/common/date_utils.py +0 -0
  36. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/common/mail_utils.py +0 -0
  37. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/common/scheduler_utils.py +0 -0
  38. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/feeds/arxiv_feed.toml +0 -0
  39. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/feeds/decarbonation_feed.toml +0 -0
  40. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/feeds/feed_deep_research_example.toml +0 -0
  41. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/feeds/llm_en_feed.toml +0 -0
  42. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/feeds/llm_feed.toml +0 -0
  43. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/feeds/nlp_feed.toml +0 -0
  44. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/feeds/rte_feed.toml +0 -0
  45. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/newsletters/arxiv_newsletter_from_last.toml +0 -0
  46. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/newsletters/decarbonation_newsletter_from_last.toml +0 -0
  47. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/newsletters/llm_en_newsletter_from_last.toml +0 -0
  48. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/newsletters/llm_newsletter_from_last.toml +0 -0
  49. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/newsletters/nlp_newsletter_from_last.toml +0 -0
  50. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/newsletters/rte_newsletter_from_last.toml +0 -0
  51. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/__init__.py +0 -0
  52. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/__main__.py +0 -0
  53. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/arxiv_provider.py +0 -0
  54. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/atom_feed_provider.py +0 -0
  55. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/bing_news_provider.py +0 -0
  56. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/data_provider.py +0 -0
  57. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/data_provider_utils.py +0 -0
  58. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/deep_research_provider.py +0 -0
  59. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/google_news_provider.py +0 -0
  60. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/newscatcher_provider.py +0 -0
  61. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/rss_feed_provider.py +0 -0
  62. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/utils.py +0 -0
  63. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/__init__.py +0 -0
  64. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/.streamlit/config.toml +0 -0
  65. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/__init__.py +0 -0
  66. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/app.py +0 -0
  67. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/app_utils.py +0 -0
  68. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/config.toml +0 -0
  69. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/import_extraction_article.ipynb +0 -0
  70. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/prompts.py +0 -0
  71. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/start_newsletter_generator.sh +0 -0
  72. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/tabs/__init__.py +0 -0
  73. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/tabs/tab1.py +0 -0
  74. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/tabs/tab2.py +0 -0
  75. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/tabs/tab3.py +0 -0
  76. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/geoviz/.streamlit/config.toml +0 -0
  77. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/geoviz/__init__.py +0 -0
  78. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/geoviz/app.py +0 -0
  79. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/geoviz/backend.py +0 -0
  80. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/start_apps.sh +0 -0
  81. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/stop_apps.sh +0 -0
  82. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/install_feeds_and_newsletters.py +0 -0
  83. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/newsletters/__init__.py +0 -0
  84. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/newsletters/__main__.py +0 -0
  85. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/newsletters/newsletter_generation.py +0 -0
  86. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/newsletters/utils.py +0 -0
  87. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/.streamlit/config.toml +0 -0
  88. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/.streamlit/secrets.toml.example +0 -0
  89. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/__init__.py +0 -0
  90. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/app.py +0 -0
  91. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/authentication.py +0 -0
  92. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/automated_report_generation.py +0 -0
  93. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/dashboard_analysis.py +0 -0
  94. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/dashboard_common.py +0 -0
  95. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/dashboard_comparative.py +0 -0
  96. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/dashboard_signals.py +0 -0
  97. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/data_model.py +0 -0
  98. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/detailed_report_template.html +0 -0
  99. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/feeds_common.py +0 -0
  100. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/feeds_config.py +0 -0
  101. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/feeds_data.py +0 -0
  102. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/i18n.py +0 -0
  103. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/i18n_translations.py +0 -0
  104. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/llm_utils.py +0 -0
  105. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/models_info.py +0 -0
  106. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/perf_utils.py +0 -0
  107. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/process_new_data.py +0 -0
  108. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/report_generation.py +0 -0
  109. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/report_generation_utils.py +0 -0
  110. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/start_demo.sh +0 -0
  111. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/utils.py +0 -0
  112. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/__init__.py +0 -0
  113. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/__init__.py +0 -0
  114. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/bertrend_service.py +0 -0
  115. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/config/__init__.py +0 -0
  116. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/config/default_config.toml +0 -0
  117. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/config/settings.py +0 -0
  118. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/models/__init__.py +0 -0
  119. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/models/bertrend_app_models.py +0 -0
  120. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/models/data_provider_models.py +0 -0
  121. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/models/newsletters_models.py +0 -0
  122. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/routers/__init__.py +0 -0
  123. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/routers/bertrend_app.py +0 -0
  124. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/routers/data_provider.py +0 -0
  125. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/routers/info.py +0 -0
  126. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/routers/newsletters.py +0 -0
  127. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/start.py +0 -0
  128. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/status.py +0 -0
  129. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/stop.py +0 -0
  130. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_management/__init__.py +0 -0
  131. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_management/bertrend_worker.py +0 -0
  132. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_management/client.py +0 -0
  133. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_management/docker-compose-rabbitmq.yml +0 -0
  134. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_management/queue_manager.py +0 -0
  135. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_management/rabbitmq_config.py +0 -0
  136. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_management/start_rabbitmq.sh +0 -0
  137. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_monitor/.streamlit/config.toml +0 -0
  138. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_monitor/__init__.py +0 -0
  139. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/utils/__init__.py +0 -0
  140. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/utils/logging_utils.py +0 -0
  141. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/config/bertopic_default_config.toml +0 -0
  142. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/config/bertrend_default_config.toml +0 -0
  143. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/config/parameters.py +0 -0
  144. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/config/services_default_config.toml +0 -0
  145. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/__init__.py +0 -0
  146. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/demos_utils/__init__.py +0 -0
  147. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/demos_utils/data_loading_component.py +0 -0
  148. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/demos_utils/embed_documents_component.py +0 -0
  149. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/demos_utils/i18n.py +0 -0
  150. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/demos_utils/i18n_translations.py +0 -0
  151. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/demos_utils/parameters_component.py +0 -0
  152. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/demos_utils/state_utils.py +0 -0
  153. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/start_summarizer_app.sh +0 -0
  154. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/start_topic_analysis_app.sh +0 -0
  155. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/start_weak_signals_app.sh +0 -0
  156. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/streamlit_components/__init__.py +0 -0
  157. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/streamlit_components/clickable_df_component.py +0 -0
  158. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/streamlit_components/input_with_pills_component.py +0 -0
  159. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/summarization/__init__.py +0 -0
  160. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/summarization/summarizer_app.py +0 -0
  161. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/.streamlit/config.toml +0 -0
  162. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/__init__.py +0 -0
  163. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/app.py +0 -0
  164. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/app_utils.py +0 -0
  165. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/demo_pages/__init__.py +0 -0
  166. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/demo_pages/explore_topics.py +0 -0
  167. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/demo_pages/newsletters_generation.py +0 -0
  168. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/demo_pages/temporal_visualizations.py +0 -0
  169. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/demo_pages/topic_visualizations.py +0 -0
  170. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/demo_pages/training_page.py +0 -0
  171. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/i18n_translations.py +0 -0
  172. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/weak_signals/.streamlit/config.toml +0 -0
  173. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/weak_signals/__init__.py +0 -0
  174. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/weak_signals/app.py +0 -0
  175. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/weak_signals/i18n_translations.py +0 -0
  176. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/weak_signals/visualizations_utils.py +0 -0
  177. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/__init__.py +0 -0
  178. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/agent_utils.py +0 -0
  179. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/newsletter.css +0 -0
  180. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/newsletter_features.py +0 -0
  181. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/newsletter_model.py +0 -0
  182. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/newsletter_outlook_template.html +0 -0
  183. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/newsletter_template.html +0 -0
  184. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/openai_client.py +0 -0
  185. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/prompts.py +0 -0
  186. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/metrics/__init__.py +0 -0
  187. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/metrics/temporal_metrics_embedding.py +0 -0
  188. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/metrics/topic_metrics.py +0 -0
  189. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/resources/common_ngrams.json +0 -0
  190. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/resources/stopwords-en.json +0 -0
  191. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/resources/stopwords-fr.json +0 -0
  192. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/resources/stopwords-rte.json +0 -0
  193. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/__init__.py +0 -0
  194. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/authentication.py +0 -0
  195. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/cert.pem +0 -0
  196. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_client.py +0 -0
  197. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/README.md +0 -0
  198. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/__init__.py +0 -0
  199. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/bertrend_client_registry.json +0 -0
  200. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/config/default_config.toml +0 -0
  201. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/config/settings.py +0 -0
  202. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/main.py +0 -0
  203. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/models.py +0 -0
  204. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/requirements.txt +0 -0
  205. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/routers/__init__.py +0 -0
  206. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/routers/authentication.py +0 -0
  207. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/routers/embeddings.py +0 -0
  208. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/routers/info.py +0 -0
  209. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/security.py +0 -0
  210. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/start.py +0 -0
  211. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/status.py +0 -0
  212. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/stop.py +0 -0
  213. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_service.py +0 -0
  214. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/key.pem +0 -0
  215. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/.dockerignore +0 -0
  216. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/Docker_setup.md +0 -0
  217. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/Dockerfile +0 -0
  218. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/__init__.py +0 -0
  219. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/docker-compose.yml +0 -0
  220. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/job_utils/__init__.py +0 -0
  221. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/job_utils/job_functions.py +0 -0
  222. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/models/__init__.py +0 -0
  223. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/models/scheduling_models.py +0 -0
  224. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/requirements.txt +0 -0
  225. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/routers/info.py +0 -0
  226. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/routers/scheduling.py +0 -0
  227. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/scheduling_service.py +0 -0
  228. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/start_docker_scheduling_service.sh +0 -0
  229. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summarizer.py +0 -0
  230. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary/__init__.py +0 -0
  231. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary/abstractive_summarizer.py +0 -0
  232. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary/chatgpt_summarizer.py +0 -0
  233. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary/extractive_summarizer.py +0 -0
  234. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary/lexrank.py +0 -0
  235. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary/prompts.py +0 -0
  236. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_client.py +0 -0
  237. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/__init__.py +0 -0
  238. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/config/__init__.py +0 -0
  239. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/config/default_config.toml +0 -0
  240. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/config/settings.py +0 -0
  241. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/main.py +0 -0
  242. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/models.py +0 -0
  243. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/routers/__init__.py +0 -0
  244. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/routers/info.py +0 -0
  245. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/routers/summarize.py +0 -0
  246. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/start.py +0 -0
  247. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/README_integration_tests.md +0 -0
  248. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/__init__.py +0 -0
  249. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/apps/__init__.py +0 -0
  250. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/apps/test_process_new_data.py +0 -0
  251. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/conftest.py +0 -0
  252. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/__init__.py +0 -0
  253. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_bertrend.py +0 -0
  254. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_data_structure.py +0 -0
  255. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_representative_docs.py +0 -0
  256. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_topic_description.py +0 -0
  257. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_topic_metrics.py +0 -0
  258. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_topic_model.py +0 -0
  259. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_trend_analysis_data_structure.py +0 -0
  260. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_trend_analysis_prompts.py +0 -0
  261. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_trend_analysis_visualizations.py +0 -0
  262. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_trend_analysis_weak_signals.py +0 -0
  263. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/__init__.py +0 -0
  264. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_arxiv_provider.py +0 -0
  265. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_bing_news_provider.py +0 -0
  266. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_data_provider_base.py +0 -0
  267. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_data_provider_utils.py +0 -0
  268. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_deep_research_live.py +0 -0
  269. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_deep_research_provider.py +0 -0
  270. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_google_news_provider.py +0 -0
  271. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_newscatcher_provider.py +0 -0
  272. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_rss_atom_provider.py +0 -0
  273. {bertrend-0.4.2/bertrend/tests/llm → bertrend-0.4.4/bertrend/tests/demos}/__init__.py +0 -0
  274. {bertrend-0.4.2/bertrend/tests/services → bertrend-0.4.4/bertrend/tests/demos/summarization}/__init__.py +0 -0
  275. {bertrend-0.4.2/bertrend/tests/services/embedding → bertrend-0.4.4/bertrend/tests/llm}/__init__.py +0 -0
  276. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/llm/test_agent_utils.py +0 -0
  277. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/llm/test_article_scoring.py +0 -0
  278. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/llm/test_article_scoring_models.py +0 -0
  279. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/llm/test_newsletter_features.py +0 -0
  280. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/llm/test_newsletter_model.py +0 -0
  281. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/llm/test_openai_client.py +0 -0
  282. {bertrend-0.4.2/bertrend/tests/services/queue → bertrend-0.4.4/bertrend/tests/services}/__init__.py +0 -0
  283. {bertrend-0.4.2/bertrend/tests/apps → bertrend-0.4.4/bertrend/tests/services/bertrend}/test_bertrend_service.py +0 -0
  284. {bertrend-0.4.2/bertrend/tests/apps → bertrend-0.4.4/bertrend/tests/services/bertrend}/test_models.py +0 -0
  285. {bertrend-0.4.2/bertrend/tests/apps → bertrend-0.4.4/bertrend/tests/services/bertrend}/test_routers_bertrend_app.py +0 -0
  286. {bertrend-0.4.2/bertrend/tests/apps → bertrend-0.4.4/bertrend/tests/services/bertrend}/test_routers_info.py +0 -0
  287. {bertrend-0.4.2/bertrend/tests/services/scheduling → bertrend-0.4.4/bertrend/tests/services/embedding}/__init__.py +0 -0
  288. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/embedding/test_embedding_client.py +0 -0
  289. {bertrend-0.4.2/bertrend/tests/services/summarizer → bertrend-0.4.4/bertrend/tests/services/embedding_server}/__init__.py +0 -0
  290. {bertrend-0.4.2/bertrend/tests/services/summary → bertrend-0.4.4/bertrend/tests/services/queue}/__init__.py +0 -0
  291. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/queue/test_bertrend_worker.py +0 -0
  292. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/queue/test_client.py +0 -0
  293. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/queue/test_queue_manager.py +0 -0
  294. {bertrend-0.4.2/bertrend/tests/utils → bertrend-0.4.4/bertrend/tests/services/scheduling}/__init__.py +0 -0
  295. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/scheduling/test_job_exception_fix.py +0 -0
  296. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/scheduling/test_scheduling_service.py +0 -0
  297. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/scheduling/test_stress_test.py +0 -0
  298. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/summarizer/test_abstractive_summarizer.py +0 -0
  299. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/summarizer/test_chatgpt_summarizer.py +0 -0
  300. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/summarizer/test_extractive_summarizer.py +0 -0
  301. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/summarizer/test_summarizer.py +0 -0
  302. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/summary/test_summary_client.py +0 -0
  303. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/summary/test_summary_config.py +0 -0
  304. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/summary/test_summary_server.py +0 -0
  305. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/test_integration.py +0 -0
  306. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_cache_utils.py +0 -0
  307. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_config_utils.py +0 -0
  308. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_crontab_utils.py +0 -0
  309. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_data_loading.py +0 -0
  310. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_date_utils.py +0 -0
  311. {bertrend-0.4.2/bertrend/tests/apps → bertrend-0.4.4/bertrend/tests/utils}/test_lazy_scheduler.py +0 -0
  312. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_mail_utils.py +0 -0
  313. {bertrend-0.4.2/bertrend/tests/apps → bertrend-0.4.4/bertrend/tests/utils}/test_multiworker.py +0 -0
  314. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_scheduler_utils.py +0 -0
  315. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_utils_init.py +0 -0
  316. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/topic_analysis/__init__.py +0 -0
  317. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/topic_analysis/data_structure.py +0 -0
  318. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/topic_analysis/prompts.py +0 -0
  319. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/topic_analysis/representative_docs.py +0 -0
  320. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/topic_analysis/topic_description.py +0 -0
  321. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/topic_analysis/visualizations.py +0 -0
  322. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/trend_analysis/__init__.py +0 -0
  323. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/trend_analysis/data_structure.py +0 -0
  324. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/trend_analysis/prompts.py +0 -0
  325. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/trend_analysis/signal_llm_template_en.html +0 -0
  326. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/trend_analysis/signal_llm_template_fr.html +0 -0
  327. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/trend_analysis/visualizations.py +0 -0
  328. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/trend_analysis/weak_signals.py +0 -0
  329. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/utils/__init__.py +0 -0
  330. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/utils/cache_utils.py +0 -0
  331. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/utils/config_utils.py +0 -0
  332. {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/utils/data_loading.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bertrend
3
- Version: 0.4.2
3
+ Version: 0.4.4
4
4
  Summary: BERTrend analyses topic evolution over time using state-of-the-art transformer models: topic modelling and LLM
5
5
  License: LICENSE.md
6
6
  License-File: AUTHORS.txt
@@ -12,75 +12,69 @@ Maintainer: Jérôme Picault
12
12
  Maintainer-email: jerome.picault@rte-france.com
13
13
  Requires-Python: >=3.12,<4.0
14
14
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
15
- Requires-Dist: APScheduler (>=3.11.0)
16
- Requires-Dist: PyJWT (>=2.10.1)
17
- Requires-Dist: Pyqtree (==1.0.0)
18
- Requires-Dist: SQLAlchemy (>=2.0.40)
15
+ Requires-Dist: APScheduler (>=3.11.2)
16
+ Requires-Dist: PyJWT (>=2.11.0)
17
+ Requires-Dist: SQLAlchemy (>=2.0.46)
19
18
  Requires-Dist: aio-pika (>=9.5.5)
20
- Requires-Dist: arxiv (>=2.2.0)
21
- Requires-Dist: bertopic (==0.16.2)
22
- Requires-Dist: black (>=24.10.0)
23
- Requires-Dist: coverage (>=7.6.9)
24
- Requires-Dist: cron-descriptor (>=1.4.5)
25
- Requires-Dist: dask (==2024.12.0)
26
- Requires-Dist: datamapplot (==0.3.0)
27
- Requires-Dist: dateparser (>=1.2.0)
19
+ Requires-Dist: arxiv (>=2.4.0)
20
+ Requires-Dist: bertopic (>=0.16.2)
21
+ Requires-Dist: coverage (>=7.13.2)
22
+ Requires-Dist: cron-descriptor (>=2.0.6)
23
+ Requires-Dist: datamapplot (>=0.6.4)
24
+ Requires-Dist: dateparser (>=1.2.2)
28
25
  Requires-Dist: ddgs (>=9.10.0)
29
- Requires-Dist: dill (>=0.4.0)
30
- Requires-Dist: fastapi (>=0.120.0)
31
- Requires-Dist: feedparser (>=6.0.11)
26
+ Requires-Dist: dill (>=0.4.1)
27
+ Requires-Dist: fastapi (>=0.128.0)
28
+ Requires-Dist: feedparser (>=6.0.12)
32
29
  Requires-Dist: folium (>=0.20.0)
33
- Requires-Dist: gensim (>=4.3.3)
30
+ Requires-Dist: gensim (>=4.4.0)
34
31
  Requires-Dist: geopy (>=2.4.1)
35
- Requires-Dist: google-api-python-client (>=2.148.0)
36
- Requires-Dist: google-auth-oauthlib (>=1.2.1)
32
+ Requires-Dist: google-api-python-client (>=2.189.0)
33
+ Requires-Dist: google-auth-oauthlib (>=1.2.4)
37
34
  Requires-Dist: googlenewsdecoder (>=0.1.7)
38
- Requires-Dist: goose3 (>=3.1.19)
39
- Requires-Dist: hdbscan (>=0.8.40)
35
+ Requires-Dist: goose3 (>=3.1.21)
36
+ Requires-Dist: hdbscan (>=0.8.41)
40
37
  Requires-Dist: ipython (>=8.28.0)
41
- Requires-Dist: joblib (>=1.4.2)
38
+ Requires-Dist: joblib (>=1.5.3)
42
39
  Requires-Dist: jsonlines (>=4.0.0)
43
- Requires-Dist: langchain-core (>=0.3.59)
40
+ Requires-Dist: langchain-core (>=1.2.9)
44
41
  Requires-Dist: langdetect (>=1.0.9)
45
42
  Requires-Dist: loguru (>=0.7.3)
46
- Requires-Dist: lxml-html-clean (>=0.2.2)
47
- Requires-Dist: markdown (>=3.7)
43
+ Requires-Dist: lxml-html-clean (>=0.4.3)
44
+ Requires-Dist: markdown (>=3.10.1)
48
45
  Requires-Dist: newscatcher-sdk (>=1.4.0)
49
46
  Requires-Dist: newspaper4k (>=0.9.3.1)
50
- Requires-Dist: nltk (>=3.9.1)
51
- Requires-Dist: openai (>=1.77.0)
52
- Requires-Dist: openai-agents[litellm] (>=0.4.0)
47
+ Requires-Dist: nicegui[highcharts] (>=3.8.0)
48
+ Requires-Dist: nltk (>=3.9.2)
49
+ Requires-Dist: openai (>=2.18.0)
50
+ Requires-Dist: openai-agents[litellm] (>=0.8.3)
53
51
  Requires-Dist: openpyxl (>=3.1.5)
54
- Requires-Dist: opentelemetry-exporter-otlp-proto-grpc (==1.25.0)
55
- Requires-Dist: pandas (>=2.2.2)
52
+ Requires-Dist: pandas (<3.0.0)
56
53
  Requires-Dist: pika (>=1.3.2)
57
- Requires-Dist: plotly (>=5.24.1)
58
- Requires-Dist: plotly-resampler (>=0.10.0)
59
- Requires-Dist: psutil (>=7.2.1)
60
- Requires-Dist: pyarrow (>=21.0.0)
54
+ Requires-Dist: plotly (>=6.5.2)
55
+ Requires-Dist: plotly-resampler (>=0.11.0)
56
+ Requires-Dist: psutil (>=7.2.2)
61
57
  Requires-Dist: pygooglenews (>=0.1.3)
62
- Requires-Dist: pylabeladjust (==0.1.13)
63
- Requires-Dist: pytest (>=8.4.0)
58
+ Requires-Dist: pytest
64
59
  Requires-Dist: pytest-asyncio
65
- Requires-Dist: python-dotenv (>=1.1.1)
60
+ Requires-Dist: python-dotenv (>=1.2.1)
66
61
  Requires-Dist: requests (>=2.32.3)
67
- Requires-Dist: ruff (>=0.14.14)
68
- Requires-Dist: scikit-learn (>=1.5.2)
62
+ Requires-Dist: ruff (>=0.15.0)
63
+ Requires-Dist: scikit-learn (>=1.8.0)
69
64
  Requires-Dist: seaborn (>=0.13.2)
70
- Requires-Dist: sentence-transformers (==3.0.1)
71
- Requires-Dist: sentencepiece (>=0.2.0)
72
- Requires-Dist: starlette (>=0.46.2)
73
- Requires-Dist: streamlit (>=1.51.0)
65
+ Requires-Dist: sentence-transformers (>=5.2.2)
66
+ Requires-Dist: starlette (>=0.52.1)
67
+ Requires-Dist: streamlit (>=1.54.0)
74
68
  Requires-Dist: streamlit-code-editor (>=0.1.22)
75
69
  Requires-Dist: streamlit-folium (>=0.26.1)
76
70
  Requires-Dist: supervisor (>=4.3.0)
77
71
  Requires-Dist: thefuzz (>=0.22.1)
78
- Requires-Dist: tiktoken (>=0.8.0)
79
- Requires-Dist: tldextract (>=2.0.1)
80
- Requires-Dist: torch (>=2.7.0)
81
- Requires-Dist: tqdm (>=4.67.1)
82
- Requires-Dist: typer (>=0.16.0)
83
- Requires-Dist: umap-learn (>=0.5.7)
72
+ Requires-Dist: tiktoken (>=0.12.0)
73
+ Requires-Dist: tldextract (>=5.3.1)
74
+ Requires-Dist: torch (>=2.10.0)
75
+ Requires-Dist: tqdm (>=4.67.3)
76
+ Requires-Dist: typer (>=0.21.1)
77
+ Requires-Dist: umap-learn (>=0.5.11)
84
78
  Project-URL: Bug Tracker, https://github.com/rte-france/BERTrend/issues
85
79
  Project-URL: Documentation, https://github.com/rte-france/BERTrend
86
80
  Project-URL: Homepage, https://github.com/rte-france/BERTrend
@@ -25,6 +25,17 @@ import streamlit as st
25
25
  from bertrend.bertrend_apps.services.queue_management.rabbitmq_config import (
26
26
  RabbitMQConfig,
27
27
  )
28
+ from bertrend.demos.demos_utils.icons import (
29
+ DASHBOARD_ICON,
30
+ ERROR_ICON,
31
+ ERROR_OUTLINE_ICON,
32
+ INFO_ICON,
33
+ INVENTORY_ICON,
34
+ REFRESH_ICON,
35
+ REPLY_ICON,
36
+ SEARCH_ICON,
37
+ SETTINGS_ICON,
38
+ )
28
39
 
29
40
 
30
41
  # ---------- Helpers: Management API client ----------
@@ -65,6 +76,17 @@ class RabbitMQAdminClient:
65
76
  # ---------- UI Logic & formatters ----------
66
77
 
67
78
 
79
+ def queue_icon(queue_name: str) -> str:
80
+ """Returns an icon based on queue name"""
81
+ return (
82
+ ERROR_OUTLINE_ICON
83
+ if "failed" in queue_name
84
+ else REPLY_ICON
85
+ if "response" in queue_name
86
+ else INVENTORY_ICON
87
+ )
88
+
89
+
68
90
  def _decode_message_payload(msg: Dict[str, Any]) -> Tuple[str, Any]:
69
91
  """Returns (format_type, decoded_object)"""
70
92
  body_text = msg.get("payload")
@@ -190,7 +212,7 @@ cfg = RabbitMQConfig()
190
212
  admin_url_default = f"http://{cfg.host}:15672"
191
213
 
192
214
  with st.sidebar:
193
- st.title("⚙️ Settings")
215
+ st.title(f"{SETTINGS_ICON} Settings")
194
216
 
195
217
  with st.expander("Connection Details", expanded=False):
196
218
  mgmt_url = st.text_input(
@@ -220,7 +242,7 @@ with st.sidebar:
220
242
  refresh_rate = c2.select_slider(
221
243
  "Refresh (s)", options=[5, 10, 30, 60, 120], value=30
222
244
  )
223
- force_refresh = c3.button("🔄", help="Force refresh the queue data")
245
+ force_refresh = c3.button(REFRESH_ICON, help="Force refresh the queue data")
224
246
 
225
247
  if auto_refresh:
226
248
  st.caption(f"Refreshing every {refresh_rate}s...")
@@ -261,11 +283,11 @@ except Exception as e:
261
283
 
262
284
  st.title("📬 BERTrend Queue Monitor")
263
285
  if error_msg:
264
- st.error(f"Connection Error: {error_msg}")
286
+ st.error(f"Connection Error: {error_msg}", icon=ERROR_ICON)
265
287
  st.stop()
266
288
 
267
289
  # 1. Global Overview Row
268
- st.markdown("### 📊 System Overview")
290
+ st.markdown(f"### {DASHBOARD_ICON} System Overview")
269
291
  kpi1, kpi2, kpi3, kpi4 = st.columns(4)
270
292
  kpi1.metric(
271
293
  "Total Backlog", global_stats["total"], help="Total messages in all selected queues"
@@ -283,9 +305,9 @@ st.divider()
283
305
 
284
306
  # 2. Queue Tabs
285
307
  if not selected_queues:
286
- st.info("Select queues in the sidebar to begin monitoring.")
308
+ st.info("Select queues in the sidebar to begin monitoring.", icon=INFO_ICON)
287
309
  else:
288
- tabs = st.tabs([f"📦 {q}" for q in selected_queues])
310
+ tabs = st.tabs([f"{queue_icon(q)} {q}" for q in selected_queues])
289
311
 
290
312
  for tab, qname in zip(tabs, selected_queues):
291
313
  info = queue_data.get(qname, {})
@@ -340,10 +362,10 @@ else:
340
362
  )
341
363
  msgs = client.peek_messages(qname, count=fetch_count)
342
364
  except Exception as e:
343
- st.error(f"Failed to peek: {e}")
365
+ st.error(f"Failed to peek: {e}", icon=ERROR_ICON)
344
366
 
345
367
  if not msgs:
346
- st.info("Queue is empty or messages are not available.", icon="ℹ️")
368
+ st.info("Queue is empty or messages are not available.", icon=INFO_ICON)
347
369
  else:
348
370
  # Decode all first for filtering/sorting/collecting filter values
349
371
  decoded_msgs = []
@@ -477,7 +499,7 @@ else:
477
499
  )
478
500
 
479
501
  # Filtering inputs
480
- with st.expander("🔍 Filters", expanded=False):
502
+ with st.expander("Filters", expanded=True, icon=SEARCH_ICON):
481
503
  fc1, fc2, fc3 = st.columns(3)
482
504
 
483
505
  # Options for selectboxes (sorted for better UX)
@@ -538,6 +560,8 @@ else:
538
560
  info_tags.append(d["endpoint"])
539
561
  if d["user"]:
540
562
  info_tags.append(f"User: {d['user']}")
563
+ if d["model_id"]:
564
+ info_tags.append(f"Model: {d['model_id']}")
541
565
 
542
566
  info_str = f" | {' | '.join(info_tags)}" if info_tags else ""
543
567
  label = f"#{idx + 1} | {fmt} | CID: {corr_id}{info_str} | {msg_size} bytes"
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2024, RTE (https://www.rte-france.com)
1
+ # Copyright (c) 2024-2026, RTE (https://www.rte-france.com)
2
2
  # See AUTHORS.txt
3
3
  # SPDX-License-Identifier: MPL-2.0
4
4
  # This file is part of BERTrend.
@@ -40,6 +40,12 @@ PERSON_REMOVE_ICON = ":material/person_remove:"
40
40
  POPULARITY_ICON = ":material/thumbs_up_down:"
41
41
  SIGNAL_EVOLUTION_ICON = ":material/signal_cellular_alt:"
42
42
  CYCLE_ICON = ":material/cycle:"
43
+ SEARCH_ICON = ":material/search:"
44
+ REFRESH_ICON = ":material/refresh:"
45
+ DASHBOARD_ICON = ":material/dashboard:"
46
+ INVENTORY_ICON = ":material/inventory_2:"
47
+ REPLY_ICON = ":material/reply:"
48
+ ERROR_OUTLINE_ICON = ":material/error_outline:"
43
49
 
44
50
  JSON_ICON = "🧾"
45
51
  PARQUET_ICON = "📦️"
@@ -0,0 +1,280 @@
1
+ # Copyright (c) 2024-2026, RTE (https://www.rte-france.com)
2
+ # See AUTHORS.txt
3
+ # SPDX-License-Identifier: MPL-2.0
4
+ # This file is part of BERTrend.
5
+ import hashlib
6
+ from datetime import datetime
7
+
8
+ import requests
9
+ from nicegui import run, ui
10
+
11
+
12
+ def _clamp(x, lo=0, hi=255):
13
+ return max(lo, min(hi, x))
14
+
15
+
16
+ def _adjust_color(hex_color, factor):
17
+ """
18
+ Adjust color brightness.
19
+ factor > 1 -> lighten, factor < 1 -> darken.
20
+ """
21
+ hex_color = hex_color.lstrip("#")
22
+ r = int(hex_color[0:2], 16)
23
+ g = int(hex_color[2:4], 16)
24
+ b = int(hex_color[4:6], 16)
25
+
26
+ r = _clamp(int(r * factor))
27
+ g = _clamp(int(g * factor))
28
+ b = _clamp(int(b * factor))
29
+
30
+ return "#{:02x}{:02x}{:02x}".format(r, g, b)
31
+
32
+
33
+ def get_color(user, model_id, endpoint):
34
+ """
35
+ Generates a stable hex color from (user, model_id).
36
+ - Lighter for 'scrape' endpoints
37
+ - Darker for 'report' endpoints
38
+ """
39
+ seed = f"{user}-{model_id}".encode("utf-8")
40
+ hash_hex = hashlib.md5(seed).hexdigest()
41
+ base_color = f"#{hash_hex[:6]}"
42
+
43
+ ep = endpoint.lower()
44
+ if "scrape" in ep:
45
+ # lighten ~30%
46
+ return _adjust_color(base_color, 1.3)
47
+ if "report" in ep:
48
+ # darken ~30%
49
+ return _adjust_color(base_color, 0.7)
50
+
51
+ return base_color
52
+
53
+
54
+ def parse_jobs(data):
55
+ parsed = []
56
+ if not isinstance(data, list):
57
+ return []
58
+ for item in data:
59
+ kwargs = item.get("kwargs", {}) or {}
60
+ url = kwargs.get("url", "")
61
+ endpoint = url.split("/")[-1] if url else "N/A"
62
+ json_data = kwargs.get("json_data", {}) or {}
63
+ user = str(json_data.get("user", "system"))
64
+ model_id = json_data.get("model_id", "N/A")
65
+ parsed.append(
66
+ {
67
+ "user": user,
68
+ "model_id": model_id,
69
+ "endpoint": endpoint,
70
+ "time": item.get("next_run_time", ""),
71
+ "job_id": item.get("job_id", "N/A"),
72
+ "color": get_color(user, model_id, endpoint),
73
+ }
74
+ )
75
+ return sorted(parsed, key=lambda x: x["time"])
76
+
77
+
78
+ class JobDashboard:
79
+ def __init__(self):
80
+ self.api_url = "http://dsia.rte-france.com:8882/jobs"
81
+ self.all_jobs = []
82
+ self.filtered_jobs = []
83
+
84
+ async def fetch_data(self):
85
+ try:
86
+ response = await run.io_bound(requests.get, self.api_url, timeout=10)
87
+ if response.status_code == 200:
88
+ self.all_jobs = parse_jobs(response.json())
89
+ self.filtered_jobs = self.all_jobs[:]
90
+ ui.notify(f"Fetched {len(self.all_jobs)} jobs", type="positive")
91
+ else:
92
+ ui.notify(f"Error: {response.status_code}", type="negative")
93
+ except Exception as e:
94
+ ui.notify(f"Connection Failed: {e}", type="negative")
95
+
96
+
97
+ @ui.page("/")
98
+ async def main_page():
99
+ # Load Highcharts Module
100
+ ui.add_head_html(
101
+ '<script src="https://code.highcharts.com/modules/timeline.js"></script>'
102
+ )
103
+ ui.colors(primary="#0052a1")
104
+ dashboard = JobDashboard()
105
+
106
+ # --- LOGIC ---
107
+ def update_display():
108
+ f_users = user_filter.value
109
+ f_models = model_filter.value
110
+ f_urls = url_filter.value
111
+
112
+ dashboard.filtered_jobs = [
113
+ j
114
+ for j in dashboard.all_jobs
115
+ if (not f_users or j["user"] in f_users)
116
+ and (not f_models or j["model_id"] in f_models)
117
+ and (not f_urls or j["endpoint"] in f_urls)
118
+ ]
119
+ render_content()
120
+
121
+ def reset_filters():
122
+ user_filter.value = []
123
+ model_filter.value = []
124
+ url_filter.value = []
125
+ update_display()
126
+
127
+ def render_content():
128
+ # Clear both containers
129
+ chart_container.clear()
130
+ timeline_container.clear()
131
+
132
+ if not dashboard.filtered_jobs:
133
+ with chart_container:
134
+ ui.label("No jobs match selected filters.").classes(
135
+ "mx-auto py-10 text-slate-400"
136
+ )
137
+ return
138
+
139
+ # 1. Update Chart Dashboard
140
+ with chart_container:
141
+ chart_options = {
142
+ "chart": {"type": "timeline", "height": 350, "zoomType": "x"},
143
+ "title": {
144
+ "text": "Job Schedule Timeline",
145
+ "style": {"fontSize": "14px"},
146
+ },
147
+ "xAxis": {"type": "datetime"},
148
+ "series": [
149
+ {
150
+ "data": [
151
+ {
152
+ "x": int(
153
+ datetime.fromisoformat(j["time"]).timestamp() * 1000
154
+ ),
155
+ "name": f"/{j['endpoint']}",
156
+ "label": f"{j['user']} | {j['model_id']}",
157
+ "color": j["color"],
158
+ }
159
+ for j in dashboard.filtered_jobs
160
+ if j["time"]
161
+ ]
162
+ }
163
+ ],
164
+ }
165
+ ui.highchart(chart_options, extras=["timeline"]).classes("w-full")
166
+
167
+ # 2. Update Timeline List Dashboard
168
+ with timeline_container:
169
+ ui.label("Detailed Job Queue").classes(
170
+ "text-sm font-bold text-slate-500 mb-4 uppercase"
171
+ )
172
+ # --- Generate and inject CSS for our custom hex colors ---
173
+ unique_colors = set(job["color"] for job in dashboard.filtered_jobs)
174
+ css_rules = []
175
+ for hex_color in unique_colors:
176
+ # Create a valid CSS identifier from the hex (e.g., #ff0000 -> c_ff0000)
177
+ class_name = f"c_{hex_color.lstrip('#')}"
178
+ css_rules.append(
179
+ f".text-{class_name} {{ color: {hex_color} !important; }}"
180
+ )
181
+ css_rules.append(
182
+ f".bg-{class_name} {{ background-color: {hex_color} !important; }}"
183
+ )
184
+
185
+ if css_rules:
186
+ ui.add_css("\n".join(css_rules))
187
+ # --------------------------------------------------------------
188
+ with ui.timeline(side="right"):
189
+ for job in dashboard.filtered_jobs:
190
+ custom_color_name = f"c_{job['color'].lstrip('#')}"
191
+ ui.timeline_entry(
192
+ f"Model: {job['model_id']}",
193
+ title=f"/{job['endpoint']} ({job['user']})",
194
+ subtitle=job["time"],
195
+ color=custom_color_name,
196
+ )
197
+
198
+ async def refresh_all():
199
+ await dashboard.fetch_data()
200
+ # Refresh options based on new data
201
+ user_filter.set_options(
202
+ sorted(list(set(j["user"] for j in dashboard.all_jobs)))
203
+ )
204
+ model_filter.set_options(
205
+ sorted(list(set(j["model_id"] for j in dashboard.all_jobs)))
206
+ )
207
+ url_filter.set_options(
208
+ sorted(list(set(j["endpoint"] for j in dashboard.all_jobs)))
209
+ )
210
+ update_display()
211
+
212
+ # --- UI LAYOUT ---
213
+ with ui.header().classes("items-center justify-between px-4 py-2"):
214
+ with ui.row().classes("items-center"):
215
+ ui.icon("analytics", size="md")
216
+ ui.label("BERTrend Scheduler").classes("text-lg font-bold")
217
+
218
+ # Endpoint Config in Header
219
+ with ui.row().classes("items-center bg-white/10 p-1 rounded-md"):
220
+ ui.input(value=dashboard.api_url).bind_value(dashboard, "api_url").props(
221
+ "dark dense borderless"
222
+ ).classes("w-64 px-2 text-sm")
223
+ ui.button(icon="refresh", on_click=refresh_all).props(
224
+ "flat color=white dense"
225
+ )
226
+
227
+ # Filter Bar
228
+ with ui.row().classes("w-full items-center p-2 bg-slate-50 border-b gap-3"):
229
+ ui.label("FILTERS:").classes("text-xs font-bold text-slate-500 ml-2")
230
+
231
+ url_filter = (
232
+ ui.select(
233
+ [],
234
+ label="URL Type",
235
+ multiple=True,
236
+ with_input=True,
237
+ on_change=update_display,
238
+ )
239
+ .props("dense outlined")
240
+ .classes("w-48 text-xs bg-white")
241
+ )
242
+
243
+ user_filter = (
244
+ ui.select(
245
+ [],
246
+ label="User",
247
+ multiple=True,
248
+ with_input=True,
249
+ on_change=update_display,
250
+ )
251
+ .props("dense outlined")
252
+ .classes("w-40 text-xs bg-white")
253
+ )
254
+
255
+ model_filter = (
256
+ ui.select(
257
+ [],
258
+ label="Model ID",
259
+ multiple=True,
260
+ with_input=True,
261
+ on_change=update_display,
262
+ )
263
+ .props("dense outlined")
264
+ .classes("w-40 text-xs bg-white")
265
+ )
266
+
267
+ ui.button("Reset", on_click=reset_filters, icon="filter_alt_off").props(
268
+ "outline dense"
269
+ ).classes("text-xs")
270
+
271
+ # The two Dashboard Containers
272
+ chart_container = ui.column().classes("w-full p-4")
273
+ ui.separator()
274
+ timeline_container = ui.column().classes("w-full p-4")
275
+
276
+ # Initial Load
277
+ await refresh_all()
278
+
279
+
280
+ ui.run(title="BERTrend Job Viewer", port=8885)