bertrend 0.4.5__tar.gz → 0.4.7__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.4.5 → bertrend-0.4.7}/PKG-INFO +22 -2
- {bertrend-0.4.5 → bertrend-0.4.7}/README.md +20 -1
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/BERTrend.py +8 -1
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/common/apscheduler_utils.py +41 -8
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/curebot/tabs/tab1.py +1 -1
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/curebot/tabs/tab3.py +2 -2
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/authentication.py +18 -1
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/feeds_config.py +3 -1
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/i18n_translations.py +10 -2
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/models_info.py +21 -10
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/process_new_data.py +38 -28
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/queue_management/bertrend_worker.py +48 -6
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/utils/logging_utils.py +1 -1
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/config/bertopic_default_config.toml +1 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary_server/config/default_config.toml +1 -1
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary_server/routers/info.py +7 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/data_provider/test_bing_news_provider.py +1 -1
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/data_provider/test_data_provider_base.py +0 -3
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/data_provider/test_deep_research_provider.py +1 -2
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/data_provider/test_newscatcher_provider.py +1 -1
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/demos/summarization/test_summarizer_app.py +0 -1
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/llm/test_openai_client.py +1 -1
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/embedding_server/test_security.py +1 -2
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/summary/test_summary_client.py +1 -1
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/summary/test_summary_config.py +1 -1
- {bertrend-0.4.5 → bertrend-0.4.7}/pyproject.toml +6 -3
- {bertrend-0.4.5 → bertrend-0.4.7}/AUTHORS.txt +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/LICENSE.md +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/BERTopicModel.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/article_scoring/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/article_scoring/article_scoring.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/article_scoring/prompts.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/article_scoring/scoring_agent.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/common/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/common/crontab_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/common/date_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/common/mail_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/common/scheduler_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/config/feeds/arxiv_feed.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/config/feeds/decarbonation_feed.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/config/feeds/feed_deep_research_example.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/config/feeds/llm_en_feed.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/config/feeds/llm_feed.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/config/feeds/nlp_feed.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/config/feeds/rte_feed.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/config/newsletters/arxiv_newsletter_from_last.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/config/newsletters/decarbonation_newsletter_from_last.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/config/newsletters/llm_en_newsletter_from_last.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/config/newsletters/llm_newsletter_from_last.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/config/newsletters/nlp_newsletter_from_last.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/config/newsletters/rte_newsletter_from_last.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/data_provider/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/data_provider/__main__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/data_provider/arxiv_provider.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/data_provider/atom_feed_provider.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/data_provider/bing_news_provider.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/data_provider/data_provider.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/data_provider/data_provider_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/data_provider/deep_research_provider.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/data_provider/google_news_provider.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/data_provider/newscatcher_provider.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/data_provider/rss_feed_provider.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/data_provider/utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/curebot/.streamlit/config.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/curebot/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/curebot/app.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/curebot/app_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/curebot/config.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/curebot/import_extraction_article.ipynb +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/curebot/prompts.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/curebot/start_newsletter_generator.sh +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/curebot/tabs/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/curebot/tabs/tab2.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/geoviz/.streamlit/config.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/geoviz/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/geoviz/app.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/geoviz/backend.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/start_apps.sh +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/exploration/stop_apps.sh +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/install_feeds_and_newsletters.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/newsletters/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/newsletters/__main__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/newsletters/newsletter_generation.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/newsletters/utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/.streamlit/config.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/.streamlit/secrets.toml.example +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/app.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/automated_report_generation.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/dashboard_analysis.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/dashboard_common.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/dashboard_comparative.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/dashboard_signals.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/data_model.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/detailed_report_template.html +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/feeds_common.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/feeds_data.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/i18n.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/llm_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/perf_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/report_generation.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/report_generation_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/start_demo.sh +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/bertrend_service.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/config/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/config/default_config.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/config/settings.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/models/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/models/bertrend_app_models.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/models/data_provider_models.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/models/newsletters_models.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/routers/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/routers/bertrend_app.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/routers/data_provider.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/routers/info.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/routers/newsletters.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/start.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/status.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/bertrend/stop.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/queue_management/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/queue_management/client.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/queue_management/docker-compose-rabbitmq.yml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/queue_management/queue_manager.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/queue_management/rabbitmq_config.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/queue_management/start_rabbitmq.sh +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/queue_monitor/.streamlit/config.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/queue_monitor/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/queue_monitor/app.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/services/utils/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/config/bertrend_default_config.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/config/parameters.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/config/services_default_config.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/demos_utils/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/demos_utils/data_loading_component.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/demos_utils/embed_documents_component.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/demos_utils/i18n.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/demos_utils/i18n_translations.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/demos_utils/icons.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/demos_utils/parameters_component.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/demos_utils/state_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/start_summarizer_app.sh +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/start_topic_analysis_app.sh +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/start_weak_signals_app.sh +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/streamlit_components/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/streamlit_components/clickable_df_component.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/streamlit_components/input_with_pills_component.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/summarization/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/summarization/summarizer_app.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/topic_analysis/.streamlit/config.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/topic_analysis/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/topic_analysis/app.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/topic_analysis/app_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/topic_analysis/demo_pages/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/topic_analysis/demo_pages/explore_topics.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/topic_analysis/demo_pages/newsletters_generation.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/topic_analysis/demo_pages/temporal_visualizations.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/topic_analysis/demo_pages/topic_visualizations.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/topic_analysis/demo_pages/training_page.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/topic_analysis/i18n_translations.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/weak_signals/.streamlit/config.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/weak_signals/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/weak_signals/app.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/weak_signals/i18n_translations.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/demos/weak_signals/visualizations_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/llm_utils/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/llm_utils/agent_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/llm_utils/newsletter.css +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/llm_utils/newsletter_features.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/llm_utils/newsletter_model.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/llm_utils/newsletter_outlook_template.html +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/llm_utils/newsletter_template.html +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/llm_utils/openai_client.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/llm_utils/prompts.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/metrics/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/metrics/temporal_metrics_embedding.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/metrics/topic_metrics.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/resources/common_ngrams.json +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/resources/stopwords-en.json +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/resources/stopwords-fr.json +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/resources/stopwords-rte.json +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/authentication.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/cert.pem +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_client.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_server/README.md +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_server/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_server/bertrend_client_registry.json +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_server/config/default_config.toml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_server/config/settings.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_server/main.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_server/models.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_server/requirements.txt +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_server/routers/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_server/routers/authentication.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_server/routers/embeddings.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_server/routers/info.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_server/security.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_server/start.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_server/status.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_server/stop.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/embedding_service.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/key.pem +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/scheduling/.dockerignore +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/scheduling/Docker_setup.md +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/scheduling/Dockerfile +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/scheduling/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/scheduling/dashboard_scheduling.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/scheduling/docker-compose.yml +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/scheduling/job_utils/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/scheduling/job_utils/job_functions.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/scheduling/models/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/scheduling/models/scheduling_models.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/scheduling/requirements.txt +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/scheduling/routers/info.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/scheduling/routers/scheduling.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/scheduling/scheduling_service.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/scheduling/start_docker_scheduling_service.sh +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summarizer.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary/abstractive_summarizer.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary/chatgpt_summarizer.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary/extractive_summarizer.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary/lexrank.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary/prompts.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary_client.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary_server/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary_server/config/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary_server/config/settings.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary_server/main.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary_server/models.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary_server/routers/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary_server/routers/summarize.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/services/summary_server/start.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/README_integration_tests.md +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/apps/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/apps/test_process_new_data.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/conftest.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/core/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/core/test_bertrend.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/core/test_data_structure.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/core/test_representative_docs.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/core/test_temporal_metrics_embedding.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/core/test_topic_description.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/core/test_topic_metrics.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/core/test_topic_model.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/core/test_trend_analysis_data_structure.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/core/test_trend_analysis_prompts.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/core/test_trend_analysis_visualizations.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/core/test_trend_analysis_weak_signals.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/core/test_visualizations.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/data_provider/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/data_provider/test_arxiv_provider.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/data_provider/test_data_provider_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/data_provider/test_deep_research_live.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/data_provider/test_google_news_provider.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/data_provider/test_rss_atom_provider.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/demos/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/demos/summarization/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/llm/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/llm/test_agent_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/llm/test_article_scoring.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/llm/test_article_scoring_models.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/llm/test_newsletter_features.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/llm/test_newsletter_model.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/bertrend/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/bertrend/test_bertrend_service.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/bertrend/test_models.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/bertrend/test_routers_bertrend_app.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/bertrend/test_routers_info.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/bertrend/test_routers_newsletters.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/embedding/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/embedding/test_embedding_client.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/embedding_server/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/embedding_server/test_models.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/embedding_server/test_routers.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/embedding_server/test_settings.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/queue/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/queue/test_bertrend_worker.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/queue/test_client.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/queue/test_queue_manager.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/scheduling/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/scheduling/test_job_exception_fix.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/scheduling/test_scheduling_service.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/scheduling/test_stress_test.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/summarizer/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/summarizer/test_abstractive_summarizer.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/summarizer/test_chatgpt_summarizer.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/summarizer/test_extractive_summarizer.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/summarizer/test_summarizer.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/summary/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/services/summary/test_summary_server.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/test_installation.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/test_integration.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/utils/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/utils/test_apscheduler_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/utils/test_cache_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/utils/test_config_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/utils/test_crontab_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/utils/test_data_loading.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/utils/test_date_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/utils/test_lazy_scheduler.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/utils/test_mail_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/utils/test_multiworker.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/utils/test_scheduler_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/tests/utils/test_utils_init.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/topic_analysis/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/topic_analysis/data_structure.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/topic_analysis/prompts.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/topic_analysis/representative_docs.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/topic_analysis/topic_description.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/topic_analysis/visualizations.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/trend_analysis/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/trend_analysis/data_structure.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/trend_analysis/prompts.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/trend_analysis/signal_llm_template_en.html +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/trend_analysis/signal_llm_template_fr.html +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/trend_analysis/visualizations.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/trend_analysis/weak_signals.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/utils/__init__.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/utils/cache_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/bertrend/utils/config_utils.py +0 -0
- {bertrend-0.4.5 → bertrend-0.4.7}/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.
|
|
3
|
+
Version: 0.4.7
|
|
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,6 +12,7 @@ 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
|
+
Classifier: Development Status :: 4 - Beta
|
|
15
16
|
Requires-Dist: APScheduler (>=3.11.2)
|
|
16
17
|
Requires-Dist: PyJWT (>=2.11.0)
|
|
17
18
|
Requires-Dist: SQLAlchemy (>=2.0.46)
|
|
@@ -91,6 +92,7 @@ Description-Content-Type: text/markdown
|
|
|
91
92
|
[](https://pypi.org/project/bertrend/)
|
|
92
93
|

|
|
93
94
|

|
|
95
|
+
[](https://tokei.kojix2.net/github/rte-france/BERTrend)
|
|
94
96
|
|
|
95
97
|
## News
|
|
96
98
|
|
|
@@ -122,7 +124,7 @@ The BERTrend repository provides a set of metrics, methods, and visualization to
|
|
|
122
124
|
topic modeling in large text corpora. The tools are designed to help users detect, analyze, and visualize emerging
|
|
123
125
|
topics and trends over time.
|
|
124
126
|
|
|
125
|
-
The code base is illustrated via
|
|
127
|
+
The code base is illustrated via three main demos:
|
|
126
128
|
|
|
127
129
|
### Dynamic Topic Modeling Analysis
|
|
128
130
|
|
|
@@ -168,6 +170,24 @@ https://github.com/user-attachments/assets/d79368d9-d4e0-4324-8a98-a888f0ab3b65
|
|
|
168
170
|
- Interpretation of these signals using LLMs
|
|
169
171
|
- Inspection of the topic merging process using Sankey diagram
|
|
170
172
|
|
|
173
|
+
### Prospective Analysis
|
|
174
|
+
|
|
175
|
+
- [bertrend/bertrend_apps/prospective_demo](bertrend/bertrend_apps/prospective_demo): A comprehensive "Prospective
|
|
176
|
+
Analysis Demo" application for monitoring, analysis, and trend detection in real time (works with live data).
|
|
177
|
+
|
|
178
|
+
#### Prospective Analysis Demonstrator Video
|
|
179
|
+
|
|
180
|
+
(Coming soon)
|
|
181
|
+
|
|
182
|
+
#### Demonstrator Features
|
|
183
|
+
|
|
184
|
+
- Data flow configuration and collection status monitoring
|
|
185
|
+
- Model status and monitoring by information source
|
|
186
|
+
- Real-time signal analysis and trend exploration
|
|
187
|
+
- Detailed topic analysis and interpretation
|
|
188
|
+
- Automated report and newsletter generation
|
|
189
|
+
- Comparative analysis between different periods
|
|
190
|
+
|
|
171
191
|
## Installation
|
|
172
192
|
|
|
173
193
|
### Environment Setup (.env and .venv)
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
[](https://pypi.org/project/bertrend/)
|
|
9
9
|

|
|
10
10
|

|
|
11
|
+
[](https://tokei.kojix2.net/github/rte-france/BERTrend)
|
|
11
12
|
|
|
12
13
|
## News
|
|
13
14
|
|
|
@@ -39,7 +40,7 @@ The BERTrend repository provides a set of metrics, methods, and visualization to
|
|
|
39
40
|
topic modeling in large text corpora. The tools are designed to help users detect, analyze, and visualize emerging
|
|
40
41
|
topics and trends over time.
|
|
41
42
|
|
|
42
|
-
The code base is illustrated via
|
|
43
|
+
The code base is illustrated via three main demos:
|
|
43
44
|
|
|
44
45
|
### Dynamic Topic Modeling Analysis
|
|
45
46
|
|
|
@@ -85,6 +86,24 @@ https://github.com/user-attachments/assets/d79368d9-d4e0-4324-8a98-a888f0ab3b65
|
|
|
85
86
|
- Interpretation of these signals using LLMs
|
|
86
87
|
- Inspection of the topic merging process using Sankey diagram
|
|
87
88
|
|
|
89
|
+
### Prospective Analysis
|
|
90
|
+
|
|
91
|
+
- [bertrend/bertrend_apps/prospective_demo](bertrend/bertrend_apps/prospective_demo): A comprehensive "Prospective
|
|
92
|
+
Analysis Demo" application for monitoring, analysis, and trend detection in real time (works with live data).
|
|
93
|
+
|
|
94
|
+
#### Prospective Analysis Demonstrator Video
|
|
95
|
+
|
|
96
|
+
(Coming soon)
|
|
97
|
+
|
|
98
|
+
#### Demonstrator Features
|
|
99
|
+
|
|
100
|
+
- Data flow configuration and collection status monitoring
|
|
101
|
+
- Model status and monitoring by information source
|
|
102
|
+
- Real-time signal analysis and trend exploration
|
|
103
|
+
- Detailed topic analysis and interpretation
|
|
104
|
+
- Automated report and newsletter generation
|
|
105
|
+
- Comparative analysis between different periods
|
|
106
|
+
|
|
88
107
|
## Installation
|
|
89
108
|
|
|
90
109
|
### Environment Setup (.env and .venv)
|
|
@@ -364,7 +364,7 @@ class BERTrend:
|
|
|
364
364
|
# Check if both timestamps exist in topic models
|
|
365
365
|
if new_model is None or self.last_topic_model is None:
|
|
366
366
|
raise ValueError(
|
|
367
|
-
|
|
367
|
+
"At least one topic model is not valid. You must fit the BERTrend model before merging models."
|
|
368
368
|
)
|
|
369
369
|
|
|
370
370
|
# Get default BERTrend config if argument is not provided
|
|
@@ -782,6 +782,13 @@ class BERTrend:
|
|
|
782
782
|
# Unserialize BERTrend object (using dill as an improvement of pickle for complex objects)
|
|
783
783
|
with open(models_path / BERTREND_FILE, "rb") as f:
|
|
784
784
|
bertrend = dill.load(f)
|
|
785
|
+
|
|
786
|
+
# Ensure compatibility with older HDBSCAN versions: cluster_selection_persistence attribute
|
|
787
|
+
if getattr(bertrend, "last_topic_model", None) is not None and not hasattr(
|
|
788
|
+
bertrend.last_topic_model.hdbscan_model, "cluster_selection_persistence"
|
|
789
|
+
):
|
|
790
|
+
bertrend.last_topic_model.hdbscan_model.cluster_selection_persistence = 0.0
|
|
791
|
+
|
|
785
792
|
return bertrend
|
|
786
793
|
|
|
787
794
|
@classmethod
|
|
@@ -7,6 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
|
|
8
8
|
import hashlib
|
|
9
9
|
import os
|
|
10
|
+
import re
|
|
10
11
|
from contextlib import contextmanager
|
|
11
12
|
from datetime import datetime
|
|
12
13
|
from pathlib import Path
|
|
@@ -293,11 +294,15 @@ class APSchedulerUtils(SchedulerUtils):
|
|
|
293
294
|
|
|
294
295
|
def remove_scrapping_for_user(self, feed_id: str, user: str | None = None):
|
|
295
296
|
"""Removes from the scheduler service the job matching the provided feed_id"""
|
|
297
|
+
# NB. user and model_id are escaped in case they contain special characters that can be interpreted in the regex search
|
|
296
298
|
try:
|
|
297
299
|
job_ids = self.find_jobs(
|
|
298
300
|
patterns={
|
|
299
301
|
"url": ".*/scrape-feed.*",
|
|
300
|
-
"json_data": {
|
|
302
|
+
"json_data": {
|
|
303
|
+
"user": re.escape(user),
|
|
304
|
+
"model_id": re.escape(feed_id),
|
|
305
|
+
},
|
|
301
306
|
}
|
|
302
307
|
)
|
|
303
308
|
self.remove_jobs(job_ids)
|
|
@@ -308,11 +313,15 @@ class APSchedulerUtils(SchedulerUtils):
|
|
|
308
313
|
|
|
309
314
|
def remove_scheduled_training_for_user(self, model_id: str, user: str):
|
|
310
315
|
"""Removes from the crontab the training job matching the provided model_id"""
|
|
316
|
+
# NB. user and model_id are escaped in case they contain special characters that can be interpreted in the regex search
|
|
311
317
|
try:
|
|
312
318
|
job_ids = self.find_jobs(
|
|
313
319
|
patterns={
|
|
314
320
|
"url": ".*/train-new-model.*",
|
|
315
|
-
"json_data": {
|
|
321
|
+
"json_data": {
|
|
322
|
+
"user": re.escape(user),
|
|
323
|
+
"model_id": re.escape(model_id),
|
|
324
|
+
},
|
|
316
325
|
}
|
|
317
326
|
)
|
|
318
327
|
self.remove_jobs(job_ids)
|
|
@@ -325,11 +334,15 @@ class APSchedulerUtils(SchedulerUtils):
|
|
|
325
334
|
self, model_id: str, user: str
|
|
326
335
|
) -> bool:
|
|
327
336
|
"""Removes from the crontab the report generation job matching the provided model_id"""
|
|
337
|
+
# NB. user and model_id are escaped in case they contain special characters that can be interpreted in the regex search
|
|
328
338
|
try:
|
|
329
339
|
job_ids = self.find_jobs(
|
|
330
340
|
patterns={
|
|
331
341
|
"url": ".*/generate-report.*",
|
|
332
|
-
"json_data": {
|
|
342
|
+
"json_data": {
|
|
343
|
+
"user": re.escape(user),
|
|
344
|
+
"model_id": re.escape(model_id),
|
|
345
|
+
},
|
|
333
346
|
}
|
|
334
347
|
)
|
|
335
348
|
self.remove_jobs(job_ids)
|
|
@@ -342,11 +355,15 @@ class APSchedulerUtils(SchedulerUtils):
|
|
|
342
355
|
self, feed_id: str, user: str | None = None
|
|
343
356
|
) -> bool:
|
|
344
357
|
"""Checks if a given scrapping feed is active (registered with the service)."""
|
|
358
|
+
# NB. user and model_id are escaped in case they contain special characters that can be interpreted in the regex search
|
|
345
359
|
try:
|
|
346
360
|
job_ids = self.find_jobs(
|
|
347
361
|
patterns={
|
|
348
362
|
"url": ".*/scrape-feed.*",
|
|
349
|
-
"json_data": {
|
|
363
|
+
"json_data": {
|
|
364
|
+
"user": re.escape(user),
|
|
365
|
+
"model_id": re.escape(feed_id),
|
|
366
|
+
},
|
|
350
367
|
}
|
|
351
368
|
)
|
|
352
369
|
return len(job_ids) > 0
|
|
@@ -358,11 +375,15 @@ class APSchedulerUtils(SchedulerUtils):
|
|
|
358
375
|
|
|
359
376
|
def check_if_learning_active_for_user(self, model_id: str, user: str) -> bool:
|
|
360
377
|
"""Checks if a given scrapping feed is active (registered in the crontab"""
|
|
378
|
+
# NB. user and model_id are escaped in case they contain special characters that can be interpreted in the regex search
|
|
361
379
|
try:
|
|
362
380
|
job_ids = self.find_jobs(
|
|
363
381
|
patterns={
|
|
364
382
|
"url": ".*/train-new-model.*",
|
|
365
|
-
"json_data": {
|
|
383
|
+
"json_data": {
|
|
384
|
+
"user": re.escape(user),
|
|
385
|
+
"model_id": re.escape(model_id),
|
|
386
|
+
},
|
|
366
387
|
}
|
|
367
388
|
)
|
|
368
389
|
return len(job_ids) > 0
|
|
@@ -376,11 +397,15 @@ class APSchedulerUtils(SchedulerUtils):
|
|
|
376
397
|
self, model_id: str, user: str
|
|
377
398
|
) -> bool:
|
|
378
399
|
"""Checks if automated report generation is active (registered in the crontab)"""
|
|
400
|
+
# NB. user and model_id are escaped in case they contain special characters that can be interpreted in the regex search
|
|
379
401
|
try:
|
|
380
402
|
job_ids = self.find_jobs(
|
|
381
403
|
patterns={
|
|
382
404
|
"url": ".*/generate-report.*",
|
|
383
|
-
"json_data": {
|
|
405
|
+
"json_data": {
|
|
406
|
+
"user": re.escape(user),
|
|
407
|
+
"model_id": re.escape(model_id),
|
|
408
|
+
},
|
|
384
409
|
}
|
|
385
410
|
)
|
|
386
411
|
return len(job_ids) > 0
|
|
@@ -394,11 +419,15 @@ class APSchedulerUtils(SchedulerUtils):
|
|
|
394
419
|
self, feed_id: str, user: str | None = None
|
|
395
420
|
) -> datetime | None:
|
|
396
421
|
"""Return the next scrapping date for the given feed_id and user"""
|
|
422
|
+
# NB. user and model_id are escaped in case they contain special characters that can be interpreted in the regex search
|
|
397
423
|
try:
|
|
398
424
|
jobs = self.find_jobs_description(
|
|
399
425
|
patterns={
|
|
400
426
|
"url": ".*/scrape-feed.*",
|
|
401
|
-
"json_data": {
|
|
427
|
+
"json_data": {
|
|
428
|
+
"user": re.escape(user),
|
|
429
|
+
"model_id": re.escape(feed_id),
|
|
430
|
+
},
|
|
402
431
|
}
|
|
403
432
|
)
|
|
404
433
|
if len(jobs) == 0:
|
|
@@ -414,11 +443,15 @@ class APSchedulerUtils(SchedulerUtils):
|
|
|
414
443
|
self, model_id: str, user: str | None = None
|
|
415
444
|
) -> datetime | None:
|
|
416
445
|
"""Return the next scrapping date for the given feed_id and user"""
|
|
446
|
+
# NB. user and model_id are escaped in case they contain special characters that can be interpreted in the regex search
|
|
417
447
|
try:
|
|
418
448
|
jobs = self.find_jobs_description(
|
|
419
449
|
patterns={
|
|
420
450
|
"url": ".*/train-new-model.*",
|
|
421
|
-
"json_data": {
|
|
451
|
+
"json_data": {
|
|
452
|
+
"user": re.escape(user),
|
|
453
|
+
"model_id": re.escape(model_id),
|
|
454
|
+
},
|
|
422
455
|
}
|
|
423
456
|
)
|
|
424
457
|
if len(jobs) == 0:
|
|
@@ -31,7 +31,7 @@ def show() -> None:
|
|
|
31
31
|
except Exception as e:
|
|
32
32
|
logger.error(e)
|
|
33
33
|
st.error(
|
|
34
|
-
|
|
34
|
+
"Erreur lors du chargement des données. Vérifiez que vos données respectent le format Curebot attendu."
|
|
35
35
|
)
|
|
36
36
|
|
|
37
37
|
# If data is loaded
|
|
@@ -45,7 +45,7 @@ def show() -> None:
|
|
|
45
45
|
st.button(
|
|
46
46
|
"Éditer",
|
|
47
47
|
on_click=edit_newsletter,
|
|
48
|
-
disabled=
|
|
48
|
+
disabled="newsletter_text" not in st.session_state,
|
|
49
49
|
)
|
|
50
50
|
|
|
51
51
|
# Show newsletter download button
|
|
@@ -65,7 +65,7 @@ def show() -> None:
|
|
|
65
65
|
file_name="newsletters.html",
|
|
66
66
|
mime="text/html",
|
|
67
67
|
data=data,
|
|
68
|
-
disabled=
|
|
68
|
+
disabled="newsletter_text" not in st.session_state,
|
|
69
69
|
)
|
|
70
70
|
|
|
71
71
|
# Show newsletter
|
|
@@ -3,14 +3,17 @@
|
|
|
3
3
|
# SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
# This file is part of BERTrend.
|
|
5
5
|
import hmac
|
|
6
|
+
import os
|
|
6
7
|
|
|
7
8
|
import streamlit as st
|
|
8
9
|
|
|
9
|
-
from bertrend.
|
|
10
|
+
from bertrend.bertrend_apps.prospective_demo.i18n import translate
|
|
11
|
+
from bertrend.demos.demos_utils.icons import EMAIL_ICON, UNHAPPY_ICON
|
|
10
12
|
|
|
11
13
|
|
|
12
14
|
def login_form():
|
|
13
15
|
"""Form with widgets to collect user information"""
|
|
16
|
+
st.header("")
|
|
14
17
|
with st.form("Credentials"):
|
|
15
18
|
st.text_input("Username", key="username")
|
|
16
19
|
st.text_input("Password", type="password", key="password")
|
|
@@ -38,6 +41,16 @@ def logout():
|
|
|
38
41
|
del st.session_state["username"]
|
|
39
42
|
|
|
40
43
|
|
|
44
|
+
def show_contact_info():
|
|
45
|
+
contact = os.getenv("BERTREND_CONTACT_EMAIL", "contact@bertrend.com")
|
|
46
|
+
st.link_button(translate("contact_msg"), f"mailto:{contact}", icon=EMAIL_ICON)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def show_project_info():
|
|
50
|
+
st.write("")
|
|
51
|
+
st.markdown(translate("project_info_msg"))
|
|
52
|
+
|
|
53
|
+
|
|
41
54
|
def check_password() -> str | None:
|
|
42
55
|
"""Returns the user name if the user had a correct password, otherwise None."""
|
|
43
56
|
|
|
@@ -49,4 +62,8 @@ def check_password() -> str | None:
|
|
|
49
62
|
login_form()
|
|
50
63
|
if "password_correct" in st.session_state:
|
|
51
64
|
st.error(f"{UNHAPPY_ICON} User not known or password incorrect")
|
|
65
|
+
|
|
66
|
+
show_contact_info()
|
|
67
|
+
|
|
68
|
+
show_project_info()
|
|
52
69
|
return None
|
|
@@ -20,6 +20,7 @@ from bertrend.bertrend_apps.prospective_demo.feeds_common import (
|
|
|
20
20
|
read_user_feeds,
|
|
21
21
|
)
|
|
22
22
|
from bertrend.bertrend_apps.prospective_demo.i18n import translate
|
|
23
|
+
from bertrend.bertrend_apps.prospective_demo.models_info import delete_model_config
|
|
23
24
|
from bertrend.config.parameters import LANGUAGES
|
|
24
25
|
from bertrend.demos.demos_utils.icons import (
|
|
25
26
|
ADD_ICON,
|
|
@@ -337,7 +338,6 @@ def handle_delete(row_dict: dict):
|
|
|
337
338
|
feed_id=feed_id, user=st.session_state.username
|
|
338
339
|
)
|
|
339
340
|
delete_feed_config(feed_id)
|
|
340
|
-
logger.info(f"Flux {feed_id} supprimé !")
|
|
341
341
|
# Remove from crontab associated training
|
|
342
342
|
SCHEDULER_UTILS.remove_scheduled_training_for_user(
|
|
343
343
|
model_id=feed_id, user=st.session_state.username
|
|
@@ -349,6 +349,8 @@ def handle_delete(row_dict: dict):
|
|
|
349
349
|
SCHEDULER_UTILS.remove_scheduled_report_generation_for_user(
|
|
350
350
|
model_id=feed_id, user=st.session_state.username
|
|
351
351
|
)
|
|
352
|
+
delete_model_config(feed_id)
|
|
353
|
+
logger.info(f"Flux {feed_id} supprimé !")
|
|
352
354
|
time.sleep(0.2)
|
|
353
355
|
st.rerun()
|
|
354
356
|
with col2:
|
{bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/i18n_translations.py
RENAMED
|
@@ -3,10 +3,18 @@
|
|
|
3
3
|
# SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
# This file is part of BERTrend.
|
|
5
5
|
TRANSLATIONS = {
|
|
6
|
+
"project_info_msg": {
|
|
7
|
+
"fr": "BERTrend est un projet open-source développé par RTE. Visitez notre github pour plus d'informations: https://github.com/rte-france/BERTrend",
|
|
8
|
+
"en": "BERTrend is an open-source project developed by RTE. Visit our github for more information: https://github.com/rte-france/BERTrend",
|
|
9
|
+
},
|
|
10
|
+
"contact_msg": {
|
|
11
|
+
"en": "Questions, new account or bug reports? Contact us !",
|
|
12
|
+
"fr": "Des questions, un nouveau compte ou des rapports de bugs ? Contactez-nous !",
|
|
13
|
+
},
|
|
6
14
|
# App.py translations
|
|
7
15
|
"app_title": {
|
|
8
|
-
"fr": "BERTrend -
|
|
9
|
-
"en": "BERTrend - Monitoring &
|
|
16
|
+
"fr": "BERTrend - IA pour la Veille (Analyses & Tendances)",
|
|
17
|
+
"en": "BERTrend - AI for Monitoring, Analysis & Trends",
|
|
10
18
|
},
|
|
11
19
|
"check_data_button_label": {"fr": "Vérifier les données", "en": "Check data"},
|
|
12
20
|
"tab_monitoring": {"fr": "Veilles", "en": "Monitoring"},
|
|
@@ -13,6 +13,16 @@ import toml
|
|
|
13
13
|
from loguru import logger
|
|
14
14
|
|
|
15
15
|
from bertrend import load_toml_config
|
|
16
|
+
from bertrend.bertrend_apps import SCHEDULER_UTILS
|
|
17
|
+
from bertrend.bertrend_apps.prospective_demo import (
|
|
18
|
+
DEFAULT_ANALYSIS_CFG,
|
|
19
|
+
get_model_cfg_path,
|
|
20
|
+
get_user_models_path,
|
|
21
|
+
)
|
|
22
|
+
from bertrend.bertrend_apps.prospective_demo.i18n import translate
|
|
23
|
+
from bertrend.bertrend_apps.prospective_demo.perf_utils import get_least_used_gpu
|
|
24
|
+
from bertrend.bertrend_apps.prospective_demo.process_new_data import regenerate_models
|
|
25
|
+
from bertrend.bertrend_apps.prospective_demo.utils import is_valid_email
|
|
16
26
|
from bertrend.config.parameters import LANGUAGES
|
|
17
27
|
from bertrend.demos.demos_utils.icons import (
|
|
18
28
|
DELETE_ICON,
|
|
@@ -28,16 +38,6 @@ from bertrend.demos.streamlit_components.clickable_df_component import clickable
|
|
|
28
38
|
from bertrend.demos.streamlit_components.input_with_pills_component import (
|
|
29
39
|
input_with_pills,
|
|
30
40
|
)
|
|
31
|
-
from bertrend.bertrend_apps import SCHEDULER_UTILS
|
|
32
|
-
from bertrend.bertrend_apps.prospective_demo import (
|
|
33
|
-
DEFAULT_ANALYSIS_CFG,
|
|
34
|
-
get_model_cfg_path,
|
|
35
|
-
get_user_models_path,
|
|
36
|
-
)
|
|
37
|
-
from bertrend.bertrend_apps.prospective_demo.i18n import translate
|
|
38
|
-
from bertrend.bertrend_apps.prospective_demo.perf_utils import get_least_used_gpu
|
|
39
|
-
from bertrend.bertrend_apps.prospective_demo.process_new_data import regenerate_models
|
|
40
|
-
from bertrend.bertrend_apps.prospective_demo.utils import is_valid_email
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
@st.cache_data(ttl=60)
|
|
@@ -302,6 +302,17 @@ def save_model_config(model_id: str, config: dict):
|
|
|
302
302
|
logger.debug(f"Saved model analysis config {config} to {model_cfg_path}")
|
|
303
303
|
|
|
304
304
|
|
|
305
|
+
def delete_model_config(model_id: str):
|
|
306
|
+
model_cfg_path = get_model_cfg_path(
|
|
307
|
+
user_name=st.session_state.username, model_id=model_id
|
|
308
|
+
)
|
|
309
|
+
if os.path.exists(model_cfg_path):
|
|
310
|
+
os.remove(model_cfg_path)
|
|
311
|
+
logger.info(f"Model config {model_id} removed")
|
|
312
|
+
else:
|
|
313
|
+
logger.warning(f"Model config {model_id} not found")
|
|
314
|
+
|
|
315
|
+
|
|
305
316
|
@st.dialog(translate("dialog_confirmation"))
|
|
306
317
|
def handle_delete_models(row_dict: dict):
|
|
307
318
|
"""Function to handle remove models from cache"""
|
{bertrend-0.4.5 → bertrend-0.4.7}/bertrend/bertrend_apps/prospective_demo/process_new_data.py
RENAMED
|
@@ -14,14 +14,6 @@ from loguru import logger
|
|
|
14
14
|
from bertrend import FEED_BASE_PATH, load_toml_config
|
|
15
15
|
from bertrend.BERTopicModel import BERTopicModel
|
|
16
16
|
from bertrend.BERTrend import BERTrend, train_new_data
|
|
17
|
-
from bertrend.services.embedding_service import EmbeddingService
|
|
18
|
-
from bertrend.trend_analysis.weak_signals import analyze_signal
|
|
19
|
-
from bertrend.utils.data_loading import (
|
|
20
|
-
TEXT_COLUMN,
|
|
21
|
-
group_by_days,
|
|
22
|
-
load_data,
|
|
23
|
-
split_data,
|
|
24
|
-
)
|
|
25
17
|
from bertrend.bertrend_apps.prospective_demo import (
|
|
26
18
|
LLM_TOPIC_DESCRIPTION_COLUMN,
|
|
27
19
|
LLM_TOPIC_TITLE_COLUMN,
|
|
@@ -37,6 +29,14 @@ from bertrend.bertrend_apps.prospective_demo import (
|
|
|
37
29
|
from bertrend.bertrend_apps.prospective_demo.llm_utils import (
|
|
38
30
|
generate_bertrend_topic_description,
|
|
39
31
|
)
|
|
32
|
+
from bertrend.services.embedding_service import EmbeddingService
|
|
33
|
+
from bertrend.trend_analysis.weak_signals import analyze_signal
|
|
34
|
+
from bertrend.utils.data_loading import (
|
|
35
|
+
TEXT_COLUMN,
|
|
36
|
+
group_by_days,
|
|
37
|
+
load_data,
|
|
38
|
+
split_data,
|
|
39
|
+
)
|
|
40
40
|
|
|
41
41
|
DEFAULT_TOP_K = 5
|
|
42
42
|
|
|
@@ -236,7 +236,7 @@ def train_new_model_for_period(
|
|
|
236
236
|
reference_timestamp: pd.Timestamp,
|
|
237
237
|
):
|
|
238
238
|
logger.info(
|
|
239
|
-
f"
|
|
239
|
+
f"[U:{user_name}|M:{model_id}|TS:{reference_timestamp}] Training BERTrend model with new data..."
|
|
240
240
|
)
|
|
241
241
|
# Initialization of embedding service
|
|
242
242
|
# TODO: customize service (lang, etc)
|
|
@@ -317,17 +317,24 @@ def train_new_model_for_period(
|
|
|
317
317
|
|
|
318
318
|
output_path = interpretation_path / f"{df_name}.parquet"
|
|
319
319
|
df.to_parquet(output_path)
|
|
320
|
-
logger.success(
|
|
321
|
-
|
|
322
|
-
# Obtain detailed LLM-based interpretion for signals
|
|
323
|
-
generate_llm_interpretation(
|
|
324
|
-
bertrend,
|
|
325
|
-
reference_timestamp=reference_timestamp,
|
|
326
|
-
df=df,
|
|
327
|
-
df_name=df_name,
|
|
328
|
-
output_path=interpretation_path,
|
|
320
|
+
logger.success(
|
|
321
|
+
f"[U:{user_name}|M:{model_id}|TS:{reference_timestamp}] {df_name} saved to: {output_path}"
|
|
329
322
|
)
|
|
330
323
|
|
|
324
|
+
# Do not generate LLM interpretation for NOISE
|
|
325
|
+
if df_name != NOISE:
|
|
326
|
+
# Obtain detailed LLM-based interpretion for signals
|
|
327
|
+
logger.info(
|
|
328
|
+
f"[U:{user_name}|M:{model_id}|TS:{reference_timestamp}] Generating LLM interpretation for {df_name}"
|
|
329
|
+
)
|
|
330
|
+
generate_llm_interpretation(
|
|
331
|
+
bertrend,
|
|
332
|
+
reference_timestamp=reference_timestamp,
|
|
333
|
+
df=df,
|
|
334
|
+
df_name=df_name,
|
|
335
|
+
output_path=interpretation_path,
|
|
336
|
+
)
|
|
337
|
+
|
|
331
338
|
|
|
332
339
|
def regenerate_models(
|
|
333
340
|
model_id: str, user: str, with_analysis: bool = True, since: pd.Timestamp = None
|
|
@@ -335,8 +342,7 @@ def regenerate_models(
|
|
|
335
342
|
"""Regenerate from scratch (method retrospective) the models associated with the specified model identifier
|
|
336
343
|
for the specified user."""
|
|
337
344
|
logger.info(
|
|
338
|
-
f"Regenerating models
|
|
339
|
-
f"with analysis: {with_analysis}..."
|
|
345
|
+
f"[U:{user}|M:{model_id}] Regenerating models, with analysis: {with_analysis}..."
|
|
340
346
|
)
|
|
341
347
|
# Get relevant model info from config
|
|
342
348
|
model_config = get_model_config(model_id=model_id, user=user)
|
|
@@ -346,12 +352,14 @@ def regenerate_models(
|
|
|
346
352
|
|
|
347
353
|
# Load model config
|
|
348
354
|
df = load_all_data(model_id=model_id, user=user, language_code=language_code)
|
|
349
|
-
logger.info(f"Size of dataset: {len(df)}")
|
|
355
|
+
logger.info(f"[U:{user}|M:{model_id}] Size of dataset: {len(df)}")
|
|
350
356
|
|
|
351
357
|
if since:
|
|
352
358
|
# Keep only the most recent data
|
|
353
359
|
df = df[df["timestamp"] >= since]
|
|
354
|
-
logger.info(
|
|
360
|
+
logger.info(
|
|
361
|
+
f"[U:{user}|M:{model_id}] Size of dataset (after date {since}): {len(df)}"
|
|
362
|
+
)
|
|
355
363
|
|
|
356
364
|
# Split data by paragraphs
|
|
357
365
|
if split_by_paragraph:
|
|
@@ -392,7 +400,7 @@ def regenerate_models(
|
|
|
392
400
|
bertrend.save_model(models_path=bertrend_models_path)
|
|
393
401
|
|
|
394
402
|
logger.success(
|
|
395
|
-
f"Regenerated models
|
|
403
|
+
f"[U:{user}|M:{model_id}] Regenerated models from scratch. BERTrend model was built using {len(bertrend.doc_groups)} models/time periods."
|
|
396
404
|
)
|
|
397
405
|
|
|
398
406
|
else: # with analysis
|
|
@@ -405,7 +413,7 @@ def regenerate_models(
|
|
|
405
413
|
)
|
|
406
414
|
|
|
407
415
|
logger.success(
|
|
408
|
-
f"Regenerated models
|
|
416
|
+
f"[U:{user}|M:{model_id}] Regenerated models from scratch with LLM-based analysis. BERTrend model was built using {len(grouped_data)} models/time periods."
|
|
409
417
|
)
|
|
410
418
|
|
|
411
419
|
|
|
@@ -419,7 +427,7 @@ def train_new_model(
|
|
|
419
427
|
Returns:
|
|
420
428
|
dict with keys: status, message, and optionally error details
|
|
421
429
|
"""
|
|
422
|
-
logger.info(f
|
|
430
|
+
logger.info(f"[U:{user_name}|M:{model_id}] Processing new data...")
|
|
423
431
|
|
|
424
432
|
# Get relevant model info from config
|
|
425
433
|
model_config = get_model_config(model_id=model_id, user=user_name)
|
|
@@ -427,7 +435,9 @@ def train_new_model(
|
|
|
427
435
|
language_code = model_config["language"]
|
|
428
436
|
split_by_paragraph = model_config.get("split_by_paragraph", True)
|
|
429
437
|
|
|
430
|
-
logger.info(
|
|
438
|
+
logger.info(
|
|
439
|
+
f"[U:{user_name}|M:{model_id}] Splitting data by paragraphs: {split_by_paragraph}"
|
|
440
|
+
)
|
|
431
441
|
|
|
432
442
|
# Load data for last period
|
|
433
443
|
new_data = load_all_data(
|
|
@@ -437,7 +447,7 @@ def train_new_model(
|
|
|
437
447
|
if new_data is None or new_data.empty:
|
|
438
448
|
return {
|
|
439
449
|
"status": "no_data",
|
|
440
|
-
"message": f"No new data found
|
|
450
|
+
"message": f"[U:{user_name}|M:{model_id}] No new data found.",
|
|
441
451
|
}
|
|
442
452
|
|
|
443
453
|
# Filter data according to granularity
|
|
@@ -463,7 +473,7 @@ def train_new_model(
|
|
|
463
473
|
|
|
464
474
|
return {
|
|
465
475
|
"status": "success",
|
|
466
|
-
"message": f"Successfully trained new model
|
|
476
|
+
"message": f"[U:{user_name}|M:{model_id}|TS:{reference_timestamp}] Successfully trained new model",
|
|
467
477
|
}
|
|
468
478
|
|
|
469
479
|
|