bertrend 0.3.23__tar.gz → 0.4.0__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.
- {bertrend-0.3.23 → bertrend-0.4.0}/PKG-INFO +143 -106
- {bertrend-0.3.23 → bertrend-0.4.0}/README.md +128 -91
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/BERTopicModel.py +17 -19
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/BERTrend.py +12 -14
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/__init__.py +1 -2
- bertrend-0.4.0/bertrend/article_scoring/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/article_scoring/article_scoring.py +5 -5
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/article_scoring/prompts.py +1 -1
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/article_scoring/scoring_agent.py +7 -4
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/__init__.py +3 -5
- bertrend-0.4.0/bertrend/bertrend_apps/common/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/common/apscheduler_utils.py +95 -53
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/common/crontab_utils.py +3 -3
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/common/date_utils.py +1 -1
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/common/mail_utils.py +2 -3
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/common/scheduler_utils.py +4 -23
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/data_provider/__init__.py +1 -2
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/data_provider/__main__.py +5 -6
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/data_provider/arxiv_provider.py +8 -9
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/data_provider/atom_feed_provider.py +4 -4
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/data_provider/bing_news_provider.py +3 -3
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/data_provider/data_provider.py +30 -11
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/data_provider/data_provider_utils.py +12 -10
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/data_provider/google_news_provider.py +3 -3
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/data_provider/newscatcher_provider.py +3 -3
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/data_provider/rss_feed_provider.py +4 -4
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/data_provider/utils.py +7 -8
- bertrend-0.4.0/bertrend/bertrend_apps/exploration/__init__.py +4 -0
- bertrend-0.4.0/bertrend/bertrend_apps/exploration/curebot/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/curebot/app.py +6 -1
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/curebot/app_utils.py +20 -11
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/curebot/import_extraction_article.ipynb +1 -5
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/curebot/prompts.py +5 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/curebot/start_newsletter_generator.sh +1 -1
- bertrend-0.4.0/bertrend/bertrend_apps/exploration/curebot/tabs/__init__.py +5 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/curebot/tabs/tab1.py +7 -2
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/curebot/tabs/tab2.py +6 -1
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/curebot/tabs/tab3.py +8 -1
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/dataviz/Main_page.py +2 -2
- bertrend-0.4.0/bertrend/bertrend_apps/exploration/dataviz/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/dataviz/pages/1_Data_feeds.py +5 -5
- bertrend-0.4.0/bertrend/bertrend_apps/exploration/dataviz/pages/__init__.py +5 -0
- bertrend-0.4.0/bertrend/bertrend_apps/exploration/geolocalization/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/geolocalization/entity_utils.py +5 -5
- bertrend-0.4.0/bertrend/bertrend_apps/exploration/geolocalization/spacy/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/geolocalization/spacy/common_factory.py +3 -3
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/geolocalization/spacy/dbpedia.py +9 -11
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/geolocalization/spacy/utils.py +3 -3
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/start_apps.sh +1 -1
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/stop_apps.sh +1 -1
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/install_feeds_and_newsletters.py +3 -2
- bertrend-0.4.0/bertrend/bertrend_apps/newsletters/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/newsletters/__main__.py +4 -5
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/newsletters/newsletter_generation.py +22 -22
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/newsletters/utils.py +2 -2
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/__init__.py +2 -2
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/app.py +51 -20
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/authentication.py +9 -1
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/automated_report_generation.py +22 -20
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/dashboard_analysis.py +13 -11
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/dashboard_common.py +4 -4
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/dashboard_comparative.py +17 -17
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/dashboard_signals.py +21 -17
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/data_model.py +2 -2
- bertrend-0.4.0/bertrend/bertrend_apps/prospective_demo/detailed_report_template.html +451 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/feeds_common.py +2 -2
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/feeds_config.py +51 -32
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/feeds_data.py +5 -5
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/i18n.py +3 -4
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/i18n_translations.py +1 -3
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/llm_utils.py +1 -1
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/models_info.py +35 -33
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/perf_utils.py +1 -1
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/process_new_data.py +16 -15
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/report_generation.py +27 -25
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/report_generation_utils.py +2 -3
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/start_demo.sh +1 -2
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/utils.py +1 -1
- bertrend-0.4.0/bertrend/bertrend_apps/services/__init__.py +4 -0
- bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend/__init__.py +5 -0
- {bertrend-0.3.23/bertrend_apps/services → bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend}/bertrend_service.py +4 -4
- bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend/config/__init__.py +5 -0
- {bertrend-0.3.23/bertrend_apps/services → bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend}/config/settings.py +3 -2
- bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend/models/__init__.py +4 -0
- {bertrend-0.3.23/bertrend_apps/services → bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend}/models/bertrend_app_models.py +2 -1
- {bertrend-0.3.23/bertrend_apps/services → bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend}/models/data_provider_models.py +5 -3
- {bertrend-0.3.23/bertrend_apps/services → bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend}/models/newsletters_models.py +1 -1
- bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend/routers/__init__.py +4 -0
- bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend/routers/bertrend_app.py +124 -0
- {bertrend-0.3.23/bertrend_apps/services → bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend}/routers/data_provider.py +75 -54
- {bertrend-0.3.23/bertrend_apps/services → bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend}/routers/info.py +3 -3
- {bertrend-0.3.23/bertrend_apps/services → bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend}/routers/newsletters.py +27 -26
- {bertrend-0.3.23/bertrend_apps/services → bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend}/start.py +5 -5
- {bertrend-0.3.23/bertrend_apps/services → bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend}/status.py +10 -9
- {bertrend-0.3.23/bertrend_apps/services → bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend}/stop.py +2 -2
- bertrend-0.4.0/bertrend/bertrend_apps/services/queue_management/__init__.py +5 -0
- bertrend-0.4.0/bertrend/bertrend_apps/services/queue_management/bertrend_worker.py +299 -0
- bertrend-0.4.0/bertrend/bertrend_apps/services/queue_management/client.py +337 -0
- bertrend-0.4.0/bertrend/bertrend_apps/services/queue_management/docker-compose-rabbitmq.yml +15 -0
- bertrend-0.4.0/bertrend/bertrend_apps/services/queue_management/queue_manager.py +208 -0
- bertrend-0.4.0/bertrend/bertrend_apps/services/queue_management/rabbitmq_config.py +40 -0
- bertrend-0.4.0/bertrend/bertrend_apps/services/queue_management/start_rabbitmq.sh +8 -0
- bertrend-0.4.0/bertrend/bertrend_apps/services/queue_monitor/.streamlit/config.toml +6 -0
- bertrend-0.4.0/bertrend/bertrend_apps/services/queue_monitor/__init__.py +5 -0
- bertrend-0.4.0/bertrend/bertrend_apps/services/queue_monitor/app.py +603 -0
- bertrend-0.4.0/bertrend/bertrend_apps/services/utils/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/services/utils/logging_utils.py +1 -1
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/demos_utils/data_loading_component.py +14 -32
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/demos_utils/i18n.py +3 -4
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/demos_utils/parameters_component.py +10 -12
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/demos_utils/state_utils.py +0 -1
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/streamlit_components/clickable_df_component.py +3 -1
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/streamlit_components/input_with_pills_component.py +3 -2
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/topic_analysis/demo_pages/explore_topics.py +11 -12
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/topic_analysis/demo_pages/newsletters_generation.py +9 -10
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/topic_analysis/demo_pages/temporal_visualizations.py +15 -15
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/topic_analysis/demo_pages/training_page.py +11 -11
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/topic_analysis/i18n_translations.py +0 -1
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/weak_signals/app.py +32 -29
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/weak_signals/visualizations_utils.py +10 -11
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/llm_utils/agent_utils.py +9 -21
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/llm_utils/newsletter_features.py +12 -11
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/llm_utils/openai_client.py +52 -100
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/metrics/temporal_metrics_embedding.py +11 -12
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/metrics/topic_metrics.py +4 -4
- bertrend-0.4.0/bertrend/services/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/authentication.py +25 -24
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/embedding_client.py +48 -44
- bertrend-0.4.0/bertrend/services/embedding_server/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/embedding_server/config/settings.py +3 -2
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/embedding_server/main.py +2 -3
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/embedding_server/models.py +1 -1
- bertrend-0.4.0/bertrend/services/embedding_server/routers/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/embedding_server/routers/authentication.py +2 -2
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/embedding_server/routers/embeddings.py +1 -1
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/embedding_server/routers/info.py +1 -1
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/embedding_server/security.py +11 -7
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/embedding_server/start.py +3 -3
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/embedding_server/status.py +9 -8
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/embedding_server/stop.py +1 -1
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/embedding_service.py +14 -13
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/scheduling/Dockerfile +1 -1
- bertrend-0.4.0/bertrend/services/scheduling/__init__.py +4 -0
- bertrend-0.4.0/bertrend/services/scheduling/dashboard.html +699 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/scheduling/docker-compose.yml +5 -3
- bertrend-0.4.0/bertrend/services/scheduling/job_utils/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/scheduling/job_utils/job_functions.py +9 -7
- bertrend-0.4.0/bertrend/services/scheduling/models/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/scheduling/models/scheduling_models.py +2 -2
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/scheduling/routers/info.py +1 -1
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/scheduling/routers/scheduling.py +25 -28
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/scheduling/scheduling_service.py +4 -3
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/summarizer.py +1 -1
- bertrend-0.4.0/bertrend/services/summary/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/summary/abstractive_summarizer.py +2 -3
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/summary/chatgpt_summarizer.py +2 -4
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/summary/extractive_summarizer.py +8 -8
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/summary/lexrank.py +1 -1
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/summary/prompts.py +1 -2
- bertrend-0.4.0/bertrend/tests/__init__.py +4 -0
- bertrend-0.4.0/bertrend/tests/apps/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/apps/test_bertrend_service.py +109 -22
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/apps/test_lazy_scheduler.py +4 -4
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/apps/test_models.py +11 -10
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/apps/test_multiworker.py +4 -4
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/apps/test_process_new_data.py +77 -63
- bertrend-0.4.0/bertrend/tests/apps/test_routers_bertrend_app.py +339 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/apps/test_routers_info.py +2 -2
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/conftest.py +1 -1
- bertrend-0.4.0/bertrend/tests/core/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/core/test_bertrend.py +12 -13
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/core/test_data_structure.py +1 -1
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/core/test_representative_docs.py +4 -3
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/core/test_temporal_metrics_embedding.py +4 -5
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/core/test_topic_description.py +5 -4
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/core/test_topic_metrics.py +5 -7
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/core/test_topic_model.py +3 -4
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/core/test_trend_analysis_data_structure.py +6 -6
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/core/test_trend_analysis_prompts.py +17 -16
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/core/test_trend_analysis_visualizations.py +8 -7
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/core/test_trend_analysis_weak_signals.py +12 -13
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/core/test_visualizations.py +8 -7
- bertrend-0.4.0/bertrend/tests/llm/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/llm/test_agent_utils.py +22 -12
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/llm/test_article_scoring.py +6 -5
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/llm/test_article_scoring_models.py +4 -3
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/llm/test_newsletter_features.py +13 -12
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/llm/test_newsletter_model.py +6 -5
- bertrend-0.4.0/bertrend/tests/llm/test_openai_client.py +264 -0
- bertrend-0.4.0/bertrend/tests/services/__init__.py +4 -0
- bertrend-0.4.0/bertrend/tests/services/embedding/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/services/embedding/test_embedding_client.py +13 -5
- bertrend-0.4.0/bertrend/tests/services/queue/__init__.py +4 -0
- bertrend-0.4.0/bertrend/tests/services/queue/test_bertrend_worker.py +176 -0
- bertrend-0.4.0/bertrend/tests/services/queue/test_client.py +103 -0
- bertrend-0.4.0/bertrend/tests/services/queue/test_queue_manager.py +152 -0
- bertrend-0.4.0/bertrend/tests/services/scheduling/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/services/scheduling/test_job_exception_fix.py +10 -12
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/services/scheduling/test_scheduling_service.py +5 -3
- bertrend-0.4.0/bertrend/tests/services/scheduling/test_stress_test.py +308 -0
- bertrend-0.4.0/bertrend/tests/services/summarizer/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/services/summarizer/test_abstractive_summarizer.py +4 -5
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/services/summarizer/test_chatgpt_summarizer.py +5 -4
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/services/summarizer/test_extractive_summarizer.py +5 -6
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/services/summarizer/test_summarizer.py +4 -3
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/test_installation.py +6 -1
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/test_integration.py +12 -12
- bertrend-0.4.0/bertrend/tests/utils/__init__.py +4 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/utils/test_apscheduler_utils.py +58 -47
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/utils/test_cache_utils.py +3 -3
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/utils/test_config_utils.py +3 -2
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/utils/test_crontab_utils.py +61 -34
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/utils/test_data_loading.py +9 -8
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/utils/test_date_utils.py +2 -2
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/utils/test_mail_utils.py +34 -34
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/utils/test_scheduler_utils.py +8 -8
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/utils/test_utils_init.py +3 -1
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/topic_analysis/visualizations.py +3 -2
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/trend_analysis/prompts.py +3 -4
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/trend_analysis/visualizations.py +0 -3
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/trend_analysis/weak_signals.py +2 -2
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/utils/__init__.py +1 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/utils/cache_utils.py +1 -2
- {bertrend-0.3.23 → bertrend-0.4.0}/pyproject.toml +15 -22
- bertrend-0.3.23/bertrend/services/embedding_server/__init__.py +0 -4
- bertrend-0.3.23/bertrend/services/embedding_server/routers/__init__.py +0 -4
- bertrend-0.3.23/bertrend/services/scheduling/__init__.py +0 -4
- bertrend-0.3.23/bertrend/services/scheduling/dashboard.html +0 -698
- bertrend-0.3.23/bertrend/services/scheduling/job_utils/__init__.py +0 -4
- bertrend-0.3.23/bertrend/services/scheduling/models/__init__.py +0 -4
- bertrend-0.3.23/bertrend/services/summary/__init__.py +0 -4
- bertrend-0.3.23/bertrend/tests/__init__.py +0 -4
- bertrend-0.3.23/bertrend/tests/apps/__init__.py +0 -4
- bertrend-0.3.23/bertrend/tests/apps/test_routers_bertrend_app.py +0 -285
- bertrend-0.3.23/bertrend/tests/core/__init__.py +0 -4
- bertrend-0.3.23/bertrend/tests/llm/__init__.py +0 -4
- bertrend-0.3.23/bertrend/tests/llm/test_openai_client.py +0 -210
- bertrend-0.3.23/bertrend/tests/services/__init__.py +0 -4
- bertrend-0.3.23/bertrend/tests/services/embedding/__init__.py +0 -4
- bertrend-0.3.23/bertrend/tests/services/scheduling/__init__.py +0 -4
- bertrend-0.3.23/bertrend/tests/services/summarizer/__init__.py +0 -4
- bertrend-0.3.23/bertrend/tests/utils/__init__.py +0 -4
- bertrend-0.3.23/bertrend/topic_analysis/__init__.py +0 -4
- bertrend-0.3.23/bertrend/trend_analysis/__init__.py +0 -4
- bertrend-0.3.23/bertrend_apps/common/__init__.py +0 -4
- bertrend-0.3.23/bertrend_apps/exploration/__init__.py +0 -4
- bertrend-0.3.23/bertrend_apps/exploration/curebot/__init__.py +0 -4
- bertrend-0.3.23/bertrend_apps/exploration/dataviz/__init__.py +0 -4
- bertrend-0.3.23/bertrend_apps/exploration/geolocalization/__init__.py +0 -4
- bertrend-0.3.23/bertrend_apps/exploration/geolocalization/spacy/__init__.py +0 -4
- bertrend-0.3.23/bertrend_apps/newsletters/__init__.py +0 -4
- bertrend-0.3.23/bertrend_apps/prospective_demo/detailed_report_template.html +0 -438
- bertrend-0.3.23/bertrend_apps/prospective_demo/docs/architecture.md +0 -82
- bertrend-0.3.23/bertrend_apps/prospective_demo/docs/automated_report_generation.md +0 -289
- bertrend-0.3.23/bertrend_apps/services/__init__.py +0 -4
- bertrend-0.3.23/bertrend_apps/services/models/__init__.py +0 -4
- bertrend-0.3.23/bertrend_apps/services/routers/__init__.py +0 -4
- bertrend-0.3.23/bertrend_apps/services/routers/bertrend_app.py +0 -140
- bertrend-0.3.23/bertrend_apps/services/utils/__init__.py +0 -4
- {bertrend-0.3.23 → bertrend-0.4.0}/AUTHORS.txt +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/LICENSE.md +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/config/feeds/arxiv_feed.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/config/feeds/decarbonation_feed.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/config/feeds/llm_en_feed.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/config/feeds/llm_feed.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/config/feeds/nlp_feed.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/config/feeds/rte_feed.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/config/newsletters/arxiv_newsletter_from_last.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/config/newsletters/decarbonation_newsletter_from_last.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/config/newsletters/llm_en_newsletter_from_last.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/config/newsletters/llm_newsletter_from_last.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/config/newsletters/nlp_newsletter_from_last.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/config/newsletters/rte_newsletter_from_last.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/curebot/.streamlit/config.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/curebot/config.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/exploration/geolocalization/spacy/nlp.config +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/.streamlit/config.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0/bertrend}/bertrend_apps/prospective_demo/.streamlit/secrets.toml.example +0 -0
- {bertrend-0.3.23/bertrend_apps/services → bertrend-0.4.0/bertrend/bertrend_apps/services/bertrend}/config/default_config.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/config/bertopic_default_config.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/config/bertrend_default_config.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/config/parameters.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/config/services_default_config.toml +0 -0
- {bertrend-0.3.23/bertrend/article_scoring → bertrend-0.4.0/bertrend/demos}/__init__.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/demos_utils/__init__.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/demos_utils/embed_documents_component.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/demos_utils/i18n_translations.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/demos_utils/icons.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/start_summarizer_app.sh +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/start_topic_analysis_app.sh +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/start_weak_signals_app.sh +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/streamlit_components/__init__.py +0 -0
- {bertrend-0.3.23/bertrend/demos → bertrend-0.4.0/bertrend/demos/summarization}/__init__.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/summarization/summarizer_app.py +1 -1
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/topic_analysis/.streamlit/config.toml +0 -0
- {bertrend-0.3.23/bertrend/demos/summarization → bertrend-0.4.0/bertrend/demos/topic_analysis}/__init__.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/topic_analysis/app.py +6 -6
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/topic_analysis/app_utils.py +2 -2
- {bertrend-0.3.23/bertrend/demos/topic_analysis → bertrend-0.4.0/bertrend/demos/topic_analysis/demo_pages}/__init__.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/topic_analysis/demo_pages/topic_visualizations.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/weak_signals/.streamlit/config.toml +0 -0
- {bertrend-0.3.23/bertrend/demos/topic_analysis/demo_pages → bertrend-0.4.0/bertrend/demos/weak_signals}/__init__.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/demos/weak_signals/i18n_translations.py +0 -0
- {bertrend-0.3.23/bertrend/demos/weak_signals → bertrend-0.4.0/bertrend/llm_utils}/__init__.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/llm_utils/newsletter.css +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/llm_utils/newsletter_model.py +1 -1
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/llm_utils/newsletter_outlook_template.html +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/llm_utils/newsletter_template.html +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/llm_utils/prompts.py +0 -0
- {bertrend-0.3.23/bertrend/llm_utils → bertrend-0.4.0/bertrend/metrics}/__init__.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/resources/common_ngrams.json +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/resources/stopwords-en.json +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/resources/stopwords-fr.json +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/resources/stopwords-rte.json +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/cert.pem +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/embedding_server/README.md +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/embedding_server/bertrend_client_registry.json +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/embedding_server/config/default_config.toml +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/embedding_server/requirements.txt +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/key.pem +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/scheduling/.dockerignore +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/scheduling/Docker_setup.md +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/services/scheduling/requirements.txt +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/tests/README_integration_tests.md +0 -0
- {bertrend-0.3.23/bertrend/metrics → bertrend-0.4.0/bertrend/topic_analysis}/__init__.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/topic_analysis/data_structure.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/topic_analysis/prompts.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/topic_analysis/representative_docs.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/topic_analysis/topic_description.py +0 -0
- {bertrend-0.3.23/bertrend/services → bertrend-0.4.0/bertrend/trend_analysis}/__init__.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/trend_analysis/data_structure.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/trend_analysis/signal_llm_template_en.html +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/trend_analysis/signal_llm_template_fr.html +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/utils/config_utils.py +0 -0
- {bertrend-0.3.23 → bertrend-0.4.0}/bertrend/utils/data_loading.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bertrend
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
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,12 +12,12 @@ 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
|
-
Provides-Extra: apps
|
|
16
15
|
Requires-Dist: APScheduler (>=3.11.0)
|
|
17
16
|
Requires-Dist: PyJWT (>=2.10.1)
|
|
18
17
|
Requires-Dist: Pyqtree (==1.0.0)
|
|
19
18
|
Requires-Dist: SQLAlchemy (>=2.0.40)
|
|
20
|
-
Requires-Dist:
|
|
19
|
+
Requires-Dist: aio-pika (>=9.5.5)
|
|
20
|
+
Requires-Dist: arxiv (>=2.2.0)
|
|
21
21
|
Requires-Dist: bertopic (==0.16.2)
|
|
22
22
|
Requires-Dist: black (>=24.10.0)
|
|
23
23
|
Requires-Dist: coverage (>=7.6.9)
|
|
@@ -27,12 +27,12 @@ Requires-Dist: datamapplot (==0.3.0)
|
|
|
27
27
|
Requires-Dist: dateparser (>=1.2.0)
|
|
28
28
|
Requires-Dist: dill (>=0.4.0)
|
|
29
29
|
Requires-Dist: fastapi (>=0.120.0)
|
|
30
|
-
Requires-Dist: feedparser (>=6.0.11)
|
|
30
|
+
Requires-Dist: feedparser (>=6.0.11)
|
|
31
31
|
Requires-Dist: gensim (>=4.3.3)
|
|
32
|
-
Requires-Dist: google-api-python-client (>=2.148.0)
|
|
33
|
-
Requires-Dist: google-auth-oauthlib (>=1.2.1)
|
|
34
|
-
Requires-Dist: googlenewsdecoder (>=0.1.7)
|
|
35
|
-
Requires-Dist: goose3 (>=3.1.19)
|
|
32
|
+
Requires-Dist: google-api-python-client (>=2.148.0)
|
|
33
|
+
Requires-Dist: google-auth-oauthlib (>=1.2.1)
|
|
34
|
+
Requires-Dist: googlenewsdecoder (>=0.1.7)
|
|
35
|
+
Requires-Dist: goose3 (>=3.1.19)
|
|
36
36
|
Requires-Dist: hdbscan (>=0.8.40)
|
|
37
37
|
Requires-Dist: ipython (>=8.28.0)
|
|
38
38
|
Requires-Dist: joblib (>=1.4.2)
|
|
@@ -42,37 +42,37 @@ Requires-Dist: langdetect (>=1.0.9)
|
|
|
42
42
|
Requires-Dist: loguru (>=0.7.3)
|
|
43
43
|
Requires-Dist: lxml-html-clean (>=0.2.2)
|
|
44
44
|
Requires-Dist: markdown (>=3.7)
|
|
45
|
-
Requires-Dist: newscatcher-sdk (>=1.4.0)
|
|
46
|
-
Requires-Dist: newspaper4k (>=0.9.3.1)
|
|
45
|
+
Requires-Dist: newscatcher-sdk (>=1.4.0)
|
|
46
|
+
Requires-Dist: newspaper4k (>=0.9.3.1)
|
|
47
47
|
Requires-Dist: nltk (>=3.9.1)
|
|
48
|
-
Requires-Dist: numpy (<2)
|
|
49
48
|
Requires-Dist: openai (>=1.77.0)
|
|
50
49
|
Requires-Dist: openai-agents[litellm] (>=0.4.0)
|
|
51
50
|
Requires-Dist: openpyxl (>=3.1.5)
|
|
52
51
|
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc (==1.25.0)
|
|
53
52
|
Requires-Dist: pandas (>=2.2.2)
|
|
53
|
+
Requires-Dist: pika (>=1.3.2)
|
|
54
54
|
Requires-Dist: plotly (>=5.24.1)
|
|
55
55
|
Requires-Dist: plotly-resampler (>=0.10.0)
|
|
56
|
+
Requires-Dist: psutil (>=7.2.1)
|
|
56
57
|
Requires-Dist: pyarrow (>=21.0.0)
|
|
57
|
-
Requires-Dist: pygooglenews (>=0.1.3)
|
|
58
|
+
Requires-Dist: pygooglenews (>=0.1.3)
|
|
58
59
|
Requires-Dist: pylabeladjust (==0.1.13)
|
|
59
60
|
Requires-Dist: pytest (>=8.4.0)
|
|
60
61
|
Requires-Dist: pytest-asyncio
|
|
61
62
|
Requires-Dist: python-dotenv (>=1.1.1)
|
|
62
63
|
Requires-Dist: requests (>=2.32.3)
|
|
64
|
+
Requires-Dist: ruff (>=0.14.14)
|
|
63
65
|
Requires-Dist: scikit-learn (>=1.5.2)
|
|
64
|
-
Requires-Dist: scipy (==1.12)
|
|
65
66
|
Requires-Dist: seaborn (>=0.13.2)
|
|
66
67
|
Requires-Dist: sentence-transformers (==3.0.1)
|
|
67
68
|
Requires-Dist: sentencepiece (>=0.2.0)
|
|
68
69
|
Requires-Dist: starlette (>=0.46.2)
|
|
69
|
-
Requires-Dist: streamlit (>=1.
|
|
70
|
+
Requires-Dist: streamlit (>=1.51.0)
|
|
70
71
|
Requires-Dist: streamlit-code-editor (>=0.1.22)
|
|
71
72
|
Requires-Dist: supervisor (>=4.3.0)
|
|
72
73
|
Requires-Dist: thefuzz (>=0.22.1)
|
|
73
74
|
Requires-Dist: tiktoken (>=0.8.0)
|
|
74
75
|
Requires-Dist: tldextract (>=2.0.1)
|
|
75
|
-
Requires-Dist: tokenizers (<0.20.0)
|
|
76
76
|
Requires-Dist: torch (>=2.7.0)
|
|
77
77
|
Requires-Dist: tqdm (>=4.67.1)
|
|
78
78
|
Requires-Dist: typer (>=0.16.0)
|
|
@@ -94,42 +94,59 @@ Description-Content-Type: text/markdown
|
|
|
94
94
|

|
|
95
95
|

|
|
96
96
|
|
|
97
|
+
## News
|
|
98
|
+
|
|
99
|
+
2025-11-24: BERTrend has been integrated into
|
|
100
|
+
the [Netminer 5](https://netminer.gitbook.io/netminer5/module-reference/text/bertopic/bertrend) data analysis tool !
|
|
101
|
+
|
|
102
|
+
## Overview
|
|
103
|
+
|
|
97
104
|

|
|
98
105
|
|
|
99
106
|
## Paper
|
|
100
107
|
|
|
101
|
-
The code in this repository is part of the work described in the paper:
|
|
108
|
+
The code in this repository is part of the work described in the paper:
|
|
102
109
|
[BERTrend: Neural Topic Modeling for Emerging Trends Detection](./BERTrend%20paper.pdf).
|
|
103
110
|
|
|
104
111
|
## Description
|
|
105
112
|
|
|
106
|
-
BERTrend is a novel framework for detecting and monitoring weak signals in large, evolving text corpora. It uses neural
|
|
107
|
-
|
|
108
|
-
|
|
113
|
+
BERTrend is a novel framework for detecting and monitoring weak signals in large, evolving text corpora. It uses neural
|
|
114
|
+
topic modeling, specifically [BERTopic](https://github.com/MaartenGr/BERTopic), in an online learning setting to
|
|
115
|
+
identify and track topic evolution over time.
|
|
109
116
|
|
|
117
|
+
BERTrend classifies topics as noise, weak signals, or strong signals based on their popularity trends, using a metric
|
|
118
|
+
that considers both the number of documents and update frequency. This method allows for real-time monitoring and
|
|
119
|
+
analysis of emerging trends while filtering out noise.
|
|
110
120
|
|
|
111
121
|
## Main Features
|
|
112
122
|
|
|
113
|
-
The BERTrend repository provides a set of metrics, methods, and visualization tools to support the analysis of dynamic
|
|
123
|
+
The BERTrend repository provides a set of metrics, methods, and visualization tools to support the analysis of dynamic
|
|
124
|
+
topic modeling in large text corpora. The tools are designed to help users detect, analyze, and visualize emerging
|
|
125
|
+
topics and trends over time.
|
|
114
126
|
|
|
115
127
|
The code base is illustrated via two main demos:
|
|
116
128
|
|
|
117
129
|
### Dynamic Topic Modeling Analysis
|
|
118
130
|
|
|
119
131
|
- [bertrend/demos/topic_analysis](bertrend/demos/topic_analysis): Focuses on dynamic topic modeling analysis using:
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
132
|
+
- Dedicated metrics, called TEMPTopic:
|
|
133
|
+
- Stability Evaluation: Measures the stability of topics over time, evaluating how consistent and coherent
|
|
134
|
+
topics remain.
|
|
135
|
+
- Volatility Assessment: Analyzes the volatility of topics, identifying how much topics change over different
|
|
136
|
+
time periods.
|
|
137
|
+
- Two Perspectives:
|
|
138
|
+
- Temporal Topic Embedding Stability: Evaluates the stability of topic embeddings over time.
|
|
139
|
+
- Temporal Topic Representation Stability: Assesses the stability of topic representations over time.
|
|
140
|
+
- Visualization tools to easily assess the results.
|
|
141
|
+
|
|
142
|
+
#### Topic Modeling Analysis Demonstrator Video
|
|
143
|
+
|
|
129
144
|
https://github.com/user-attachments/assets/f600f666-a6da-40be-8b07-5041b3bde1dc
|
|
130
145
|
|
|
131
146
|
#### Demonstrator Features
|
|
132
|
-
|
|
147
|
+
|
|
148
|
+
- Data management: selection of single/multiple datasets, filter by time, filter by size, split long documents by
|
|
149
|
+
paragraphs
|
|
133
150
|
- Customization of BERTopic parameters
|
|
134
151
|
- Exploration of topics by source, generate topic summaries using specific sources
|
|
135
152
|
- Generate and customize newsletters by applying LLMs on BERTopic's output topics
|
|
@@ -142,10 +159,11 @@ https://github.com/user-attachments/assets/f600f666-a6da-40be-8b07-5041b3bde1dc
|
|
|
142
159
|
- [bertrend/demos/weak_signals](bertrend/demos/weak_signals): Identifies and analyzes emerging trends and signals
|
|
143
160
|
|
|
144
161
|
#### Weak Signal Analysis Demonstrator Video
|
|
145
|
-
https://github.com/user-attachments/assets/d79368d9-d4e0-4324-8a98-a888f0ab3b65
|
|
146
162
|
|
|
163
|
+
https://github.com/user-attachments/assets/d79368d9-d4e0-4324-8a98-a888f0ab3b65
|
|
147
164
|
|
|
148
165
|
#### Demonstrator Features
|
|
166
|
+
|
|
149
167
|
- Exploration of signals in real time at any given timestamp
|
|
150
168
|
- Categorization of signals into three different dataframes: noise, weak and strong signals
|
|
151
169
|
(each dataframe contains useful information about the signals)
|
|
@@ -156,70 +174,72 @@ https://github.com/user-attachments/assets/d79368d9-d4e0-4324-8a98-a888f0ab3b65
|
|
|
156
174
|
|
|
157
175
|
### Environment Setup (.env and .venv)
|
|
158
176
|
|
|
159
|
-
BERTrend now supports configuration via a repository-level `.env` file. On import, the package attempts to load
|
|
177
|
+
BERTrend now supports configuration via a repository-level `.env` file. On import, the package attempts to load
|
|
178
|
+
environment variables automatically using `python-dotenv`.
|
|
160
179
|
|
|
161
180
|
Recommended steps:
|
|
162
181
|
|
|
163
182
|
1. Create and fill your `.env` at the repo root (a template is provided):
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
183
|
+
- Copy `.env` and set your values (do not commit secrets).
|
|
184
|
+
- Common keys:
|
|
185
|
+
- `BERTREND_BASE_DIR`: base directory for BERTrend data/models/logs
|
|
186
|
+
- OpenAI/LLM:
|
|
187
|
+
- `OPENAI_API_KEY`
|
|
188
|
+
- `OPENAI_BASE_URL` (optional for OpenAI-compatible providers such as LiteLLM and Azure)
|
|
189
|
+
- `OPENAI_DEFAULT_MODEL`
|
|
190
|
+
- Providers (optional): `SEMANTIC_SCHOLAR_API_KEY`, `NEWSCATCHER_API_KEY`, `DBPEDIA_REST_API_URL`
|
|
191
|
+
- Embedding service security (optional): `BERTREND_SECRET_KEY`, `DEFAULT_RATE_LIMIT`, `DEFAULT_RATE_WINDOW`,
|
|
192
|
+
`CLIENT_REGISTRY_FILE`
|
|
193
|
+
- Email (optional): `BERTREND_EMAIL_BACKEND`, `GMAIL_*`, `SMTP_*`, `SENDGRID_API_KEY`
|
|
194
|
+
- Misc: `CUDA_VISIBLE_DEVICES`
|
|
175
195
|
2. Use a virtual environment and install dependencies inside it:
|
|
176
196
|
```bash
|
|
177
|
-
|
|
197
|
+
uv venv --python 3.13
|
|
178
198
|
source .venv/bin/activate # Windows: .venv\\Scripts\\activate
|
|
179
|
-
pip install
|
|
180
|
-
pip install
|
|
181
|
-
pip install python-dotenv # ensures .env is auto-loaded
|
|
199
|
+
uv pip install .
|
|
200
|
+
uv pip install python-dotenv # ensures .env is auto-loaded
|
|
182
201
|
```
|
|
183
202
|
3. Notes
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
203
|
+
- If `python-dotenv` isn’t installed, `.env` won’t be auto-loaded; you can either install it or export variables via
|
|
204
|
+
your shell/runner.
|
|
205
|
+
- Scheduled jobs created from the apps use the exact interpreter of your active environment (`sys.executable`),
|
|
206
|
+
ensuring `.venv/bin/python` is used. Keep your venv path stable on the machine running cron.
|
|
207
|
+
- Cron entries source your shell profile and pass through any required variables. You can also rely on `.env` for
|
|
208
|
+
most settings.
|
|
187
209
|
|
|
188
210
|
### Hardware and Software Requirements
|
|
189
211
|
|
|
190
212
|
- Recommended: at least one GPU with 16GB RAM for faster processing
|
|
191
|
-
- Python >= 3.
|
|
213
|
+
- Python >= 3.13 is required
|
|
192
214
|
|
|
193
215
|
### Docker Installation
|
|
194
216
|
|
|
195
|
-
BERTrend can be run using Docker, which provides an easy way to run the application without installing dependencies
|
|
217
|
+
BERTrend can be run using Docker, which provides an easy way to run the application without installing dependencies
|
|
218
|
+
directly on your system.
|
|
196
219
|
|
|
197
220
|
For detailed instructions on using BERTrend with Docker, see the [Docker documentation](./docs/docker.md).
|
|
198
221
|
|
|
199
222
|
### Package Installation
|
|
200
223
|
|
|
201
|
-
- (Recommended): create a new python environment using `
|
|
224
|
+
- (Recommended): create a new python environment using `uv`:
|
|
202
225
|
|
|
203
|
-
`
|
|
226
|
+
`uv venv --python 3.13`
|
|
204
227
|
|
|
205
228
|
|
|
206
229
|
- Installation from pypi
|
|
207
230
|
|
|
208
|
-
`pip install bertrend`
|
|
231
|
+
`uv pip install bertrend`
|
|
209
232
|
|
|
210
233
|
|
|
211
234
|
- Install using pip or poetry in the BERTrend home directory:
|
|
212
235
|
|
|
213
236
|
```bash
|
|
214
237
|
# Basic installation with core dependencies
|
|
215
|
-
pip install .
|
|
216
|
-
|
|
217
|
-
# Installation with apps dependencies
|
|
218
|
-
pip install ".[apps]" # or poetry install --extras apps
|
|
238
|
+
uv pip install .
|
|
219
239
|
|
|
220
240
|
```
|
|
221
241
|
|
|
222
|
-
- (Use `pip install -e .` for a local installation)
|
|
242
|
+
- (Use `uv pip install -e .` for a local installation)
|
|
223
243
|
|
|
224
244
|
NB. Due to the number of dependencies, the installation may take some time on an empty environment.
|
|
225
245
|
|
|
@@ -233,12 +253,8 @@ BERTrend's dependencies are organized into logical groups for easier management:
|
|
|
233
253
|
- **Visualization and UI**: Tools for data visualization and user interfaces
|
|
234
254
|
- **Utilities**: General utility libraries
|
|
235
255
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
- **test**: Dependencies for running tests and measuring code coverage
|
|
239
|
-
- **apps**: Additional dependencies required for BERTrend applications
|
|
240
|
-
|
|
241
|
-
This organization simplifies installation and maintenance, allowing users to install only the dependencies they need for their specific use case.
|
|
256
|
+
This organization simplifies installation and maintenance, allowing users to install only the dependencies they need for
|
|
257
|
+
their specific use case.
|
|
242
258
|
|
|
243
259
|
### Verifying Installation
|
|
244
260
|
|
|
@@ -248,35 +264,43 @@ To verify that your installation is working correctly, you can run the installat
|
|
|
248
264
|
python -m bertrend.tests.test_installation
|
|
249
265
|
```
|
|
250
266
|
|
|
251
|
-
This script will check that all dependencies are installed correctly and provide a summary of the installation status.
|
|
267
|
+
This script will check that all dependencies are installed correctly and provide a summary of the installation status.
|
|
268
|
+
If any dependencies are missing, the script will provide instructions on how to install them.
|
|
252
269
|
|
|
253
270
|
### Datasets
|
|
254
271
|
|
|
255
272
|
#### Dataset Sources
|
|
273
|
+
|
|
256
274
|
BERTrend can work with various text datasets such as:
|
|
275
|
+
|
|
257
276
|
- Scientific publications
|
|
258
277
|
- News articles
|
|
259
278
|
- Social media publications
|
|
260
279
|
|
|
261
280
|
Recommended public datasets:
|
|
281
|
+
|
|
262
282
|
- New York Times dataset: https://www.kaggle.com/datasets/aryansingh0909/nyt-articles-21m-2000-present
|
|
263
283
|
- Arxiv dataset: https://www.kaggle.com/datasets/Cornell-University/arxiv
|
|
264
284
|
|
|
265
285
|
For custom dataset creation, please refer to the documentation page about [data providers](./docs/data_provider.md).
|
|
266
286
|
|
|
267
|
-
For email configuration and newsletter sending (optional), please refer to
|
|
268
|
-
|
|
287
|
+
For email configuration and newsletter sending (optional), please refer to
|
|
288
|
+
the [mail configuration guide](./docs/mail_configuration.md).
|
|
269
289
|
|
|
270
290
|
In order to use the provided demos, datasets :
|
|
291
|
+
|
|
271
292
|
- can be stored on the server in: `$BERTREND_BASE_DIR/data/bertrend/`
|
|
272
293
|
- or can be uploaded from the client device on which are displayed the Streamlit apps.
|
|
273
294
|
|
|
274
295
|
#### Dataset Format
|
|
296
|
+
|
|
275
297
|
Required columns:
|
|
298
|
+
|
|
276
299
|
- `text`
|
|
277
300
|
- `timestamp`
|
|
278
301
|
|
|
279
302
|
Supported formats:
|
|
303
|
+
|
|
280
304
|
- csv
|
|
281
305
|
- xlsx
|
|
282
306
|
- parquet
|
|
@@ -287,94 +311,105 @@ Supported formats:
|
|
|
287
311
|
### 1. Dynamic Topic Modeling Analysis
|
|
288
312
|
|
|
289
313
|
#### Launch the Demonstrator
|
|
314
|
+
|
|
290
315
|
```bash
|
|
291
316
|
cd bertrend/demos/topic_analysis
|
|
292
317
|
CUDA_VISIBLE_DEVICES=<gpu_number> streamlit run app.py
|
|
293
318
|
```
|
|
294
319
|
|
|
295
320
|
#### Description of Main Pages
|
|
321
|
+
|
|
296
322
|
- `Parameters`: Include all BERTopic parameters. Choose the embedding model carefully based on your data language.
|
|
297
|
-
The embedding model can run locally (a GPU is recommended); it is also possible to use a remote embedding service.
|
|
323
|
+
The embedding model can run locally (a GPU is recommended); it is also possible to use a remote embedding service.
|
|
298
324
|
|
|
299
325
|
We recommend using a remote embedding service (this is now the default config) as it simplifies the computing.
|
|
300
326
|
|
|
301
|
-
The change of configuration can be done
|
|
302
|
-
|
|
303
|
-
An example of a very simple implementation to deploy a separate embedding service can be found here: `bertrend/services/embedding_server`
|
|
327
|
+
The change of configuration can be done
|
|
328
|
+
in: [services_default_config.toml](bertrend/config/services_default_config.toml).
|
|
304
329
|
|
|
330
|
+
An example of a very simple implementation to deploy a separate embedding service can be found here:
|
|
331
|
+
`bertrend/services/embedding_server`
|
|
305
332
|
|
|
306
333
|

|
|
307
334
|
|
|
308
|
-
Please refer to the [BERTopic documentation](https://maartengr.github.io/BERTopic/algorithm/algorithm.html) for
|
|
335
|
+
Please refer to the [BERTopic documentation](https://maartengr.github.io/BERTopic/algorithm/algorithm.html) for
|
|
336
|
+
parameter details.
|
|
309
337
|
|
|
310
338
|
The application is split into several pages:
|
|
311
339
|
|
|
312
|
-
- `Data loading & model training`: Allows to
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
340
|
+
- `Data loading & model training`: Allows to
|
|
341
|
+
- Select a dataset
|
|
342
|
+
- Select the range of timestamps
|
|
343
|
+
- Split paragraphs if needed
|
|
344
|
+
- Train a topic model
|
|
317
345
|
|
|
318
346
|

|
|
319
347
|
|
|
320
348
|
- `Topic exploration`
|
|
321
|
-
|
|
322
|
-
|
|
349
|
+
- Computes topics over time
|
|
350
|
+

|
|
323
351
|
|
|
324
|
-
|
|
325
|
-
|
|
352
|
+
- Allow selecting sources and generating short descriptions for each theme
|
|
353
|
+

|
|
326
354
|
|
|
327
355
|
- `Topic visualization`: Several visualization types available:
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
356
|
+
- `Overall Results`: Standard information such as inter-topic distance map
|
|
357
|
+
- `Topics Treemap`: Block view of topics and their relative importance
|
|
358
|
+
- `Data Map`: Easy topic and data search interface
|
|
331
359
|
|
|
332
|
-

|
|
360
|
+

|
|
333
361
|
|
|
334
362
|
- `Temporal Visualization`: Focus on dynamic topic modeling:
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
363
|
+
- 3D visualization of temporal topic evolution
|
|
364
|
+
- Metrics to assess topic stability over time
|
|
365
|
+
- Overall topic stability, temporal topic stability, and temporal representation stability
|
|
338
366
|
|
|
339
|
-

|
|
367
|
+

|
|
340
368
|
|
|
341
369
|
- `Generate Newsletters`
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
370
|
+
- This is an example of an application combining topic analysis and LLMs
|
|
371
|
+
- Generates newsletters based on prominent topics
|
|
372
|
+
- Uses LLMs to generate topic descriptions and summarize representative documents
|
|
346
373
|
|
|
347
374
|
### 2. Weak Signal Analysis
|
|
348
|
-
**Weak signals** refer to early, small indicators of larger, important trends (like disruptive technologies or public health issues).
|
|
349
375
|
|
|
350
|
-
|
|
376
|
+
**Weak signals** refer to early, small indicators of larger, important trends (like disruptive technologies or public
|
|
377
|
+
health issues).
|
|
378
|
+
|
|
379
|
+
Identifying weak signals early is critical for decision-making across domains such as politics, healthcare, and
|
|
380
|
+
innovation
|
|
351
381
|
|
|
352
382
|
Key Features of the demonstrator:
|
|
383
|
+
|
|
353
384
|
- Dynamic Topic Modeling in an online learning setting
|
|
354
385
|
- Popularity-based Signal Classification
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
386
|
+
* based on their popularity trends: noise, weak signals, and strong signals
|
|
387
|
+
* **new popularity metric** considers both the number of documents within a topic and the **frequency of updates**
|
|
358
388
|
|
|
359
389
|
#### Launch the Weak Signal Analysis Demonstrator
|
|
390
|
+
|
|
360
391
|
```bash
|
|
361
392
|
cd bertrend/demos/weak_signals
|
|
362
393
|
CUDA_VISIBLE_DEVICES=<gpu_number> streamlit run app.py
|
|
363
394
|
```
|
|
364
395
|
|
|
365
396
|
#### Data Preparation
|
|
397
|
+
|
|
366
398
|
- Choose from available datasets
|
|
367
|
-

|
|
399
|
+

|
|
368
400
|
- Click on `Embed Documents`
|
|
369
401
|
|
|
370
402
|
#### Train Model
|
|
403
|
+
|
|
371
404
|
- Select the `Model Training` tab
|
|
372
405
|
- Choose time granularity (in days)
|
|
373
406
|
- Click `Train Models` to generate topic models per time slice
|
|
374
407
|
- Click `Merge Models` for the aggregated model
|
|
375
408
|
|
|
376
409
|
#### Results Analysis
|
|
410
|
+
|
|
377
411
|
Provides various statistics about topics:
|
|
412
|
+
|
|
378
413
|
- Number of topics detected
|
|
379
414
|
- Topic size evolution
|
|
380
415
|
- Topic popularity evolution
|
|
@@ -385,13 +420,13 @@ Provides various statistics about topics:
|
|
|
385
420
|
- Lists of noise, weak, and strong signals
|
|
386
421
|
|
|
387
422
|
#### LLM-based signal interpretation
|
|
423
|
+
|
|
388
424
|
- As topics are hard to interprete by humans, we showcase how it can be
|
|
389
|
-
done using LLMs.
|
|
425
|
+
done using LLMs.
|
|
390
426
|
- Choose a specific topic and click on the button to generate an interpretation
|
|
391
427
|
- LLM-based in-depth signal analysis is done using predefined templates, for example:
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
428
|
+
- describe what's happened since the last timestamp (summary of main events)
|
|
429
|
+
- present through a multi-faceted description info about key developments, foreseen changes, potential impact, etc.
|
|
395
430
|
|
|
396
431
|

|
|
397
432
|
|
|
@@ -404,6 +439,7 @@ Please use the 'Issues' section to report and discuss any problems with BERTrend
|
|
|
404
439
|
We welcome contributions. For major changes, please open an issue first to discuss your proposal.
|
|
405
440
|
|
|
406
441
|
To contribute:
|
|
442
|
+
|
|
407
443
|
1. Fork the repository at https://github.com/rte-france/BERTrend
|
|
408
444
|
2. Sync your fork with the latest development branch
|
|
409
445
|
3. Implement your changes
|
|
@@ -419,7 +455,8 @@ See [AUTHORS](./AUTHORS.txt) for the full list of contributors.
|
|
|
419
455
|
|
|
420
456
|
Copyright 2023–2025 RTE France RTE: http://www.rte-france.com
|
|
421
457
|
|
|
422
|
-
This Source Code is subject to the terms of the Mozilla Public License (MPL) v2 also available
|
|
458
|
+
This Source Code is subject to the terms of the Mozilla Public License (MPL) v2 also available
|
|
459
|
+
here: https://www.mozilla.org/en-US/MPL/2.0/
|
|
423
460
|
|
|
424
461
|
## Citation
|
|
425
462
|
|