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

|
|
450
450
|
|
|
451
|
+
## Article Scoring Service
|
|
452
|
+
|
|
453
|
+
For service setup and API details, see:
|
|
454
|
+
[`docs/services/article_scoring_service.md`](docs/services/article_scoring_service.md).
|
|
455
|
+
|
|
451
456
|
## Support
|
|
452
457
|
|
|
453
458
|
Please use the 'Issues' section to report and discuss any problems with BERTrend.
|
|
@@ -364,6 +364,11 @@ Provides various statistics about topics:
|
|
|
364
364
|
|
|
365
365
|

|
|
366
366
|
|
|
367
|
+
## Article Scoring Service
|
|
368
|
+
|
|
369
|
+
For service setup and API details, see:
|
|
370
|
+
[`docs/services/article_scoring_service.md`](docs/services/article_scoring_service.md).
|
|
371
|
+
|
|
367
372
|
## Support
|
|
368
373
|
|
|
369
374
|
Please use the 'Issues' section to report and discuss any problems with BERTrend.
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
# See AUTHORS.txt
|
|
3
3
|
# SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
# This file is part of BERTrend.
|
|
5
|
-
import asyncio
|
|
6
5
|
import os
|
|
7
6
|
from abc import ABC, abstractmethod
|
|
8
7
|
from pathlib import Path
|
|
@@ -10,6 +9,7 @@ from pathlib import Path
|
|
|
10
9
|
import jsonlines
|
|
11
10
|
import langdetect
|
|
12
11
|
import pandas as pd
|
|
12
|
+
import requests
|
|
13
13
|
from dateutil import parser
|
|
14
14
|
from goose3 import Goose
|
|
15
15
|
from joblib import Parallel, delayed
|
|
@@ -17,12 +17,11 @@ from loguru import logger
|
|
|
17
17
|
from newspaper import Article
|
|
18
18
|
|
|
19
19
|
from bertrend.article_scoring.article_scoring import QualityLevel
|
|
20
|
-
from bertrend.article_scoring.scoring_agent import score_articles
|
|
21
|
-
from bertrend.utils.data_loading import TEXT_COLUMN
|
|
22
20
|
from bertrend.bertrend_apps.data_provider.utils import (
|
|
23
21
|
decode_google_news_url,
|
|
24
22
|
wait_if_seen_url,
|
|
25
23
|
)
|
|
24
|
+
from bertrend.utils.data_loading import TEXT_COLUMN
|
|
26
25
|
|
|
27
26
|
# Ensures to write with +rw for both user and groups
|
|
28
27
|
os.umask(0o002)
|
|
@@ -85,27 +84,53 @@ class DataProvider(ABC):
|
|
|
85
84
|
|
|
86
85
|
@staticmethod
|
|
87
86
|
def evaluate_quality(
|
|
88
|
-
articles: list[dict], minimum_quality_level: QualityLevel
|
|
87
|
+
articles: list[dict], minimum_quality_level: QualityLevel = QualityLevel.AVERAGE
|
|
89
88
|
) -> list[dict]:
|
|
90
89
|
texts = [article[TEXT_COLUMN] for article in articles]
|
|
90
|
+
article_scoring_service_url = os.getenv("ARTICLE_SCORING_SERVICE_URL")
|
|
91
|
+
|
|
92
|
+
if not article_scoring_service_url:
|
|
93
|
+
logger.warning(
|
|
94
|
+
"ARTICLE_SCORING_SERVICE_URL is not set; skipping article quality filtering."
|
|
95
|
+
)
|
|
96
|
+
return articles
|
|
97
|
+
|
|
98
|
+
try:
|
|
99
|
+
response = requests.post(
|
|
100
|
+
f"{article_scoring_service_url.rstrip('/')}/score",
|
|
101
|
+
json={"articles": texts},
|
|
102
|
+
timeout=300,
|
|
103
|
+
)
|
|
104
|
+
response.raise_for_status()
|
|
105
|
+
payload = response.json()
|
|
106
|
+
results = payload.get("results", [])
|
|
107
|
+
except requests.RequestException as exc:
|
|
108
|
+
logger.warning(
|
|
109
|
+
f"Article scoring service unavailable at {article_scoring_service_url}: {exc}. "
|
|
110
|
+
"Skipping article quality filtering."
|
|
111
|
+
)
|
|
112
|
+
return articles
|
|
91
113
|
|
|
92
|
-
|
|
93
|
-
|
|
114
|
+
if len(results) != len(texts):
|
|
115
|
+
logger.warning(
|
|
116
|
+
"Article scoring service returned an unexpected number of results; "
|
|
117
|
+
"skipping article quality filtering."
|
|
118
|
+
)
|
|
119
|
+
return articles
|
|
94
120
|
|
|
95
|
-
# Filter out articles with quality <
|
|
121
|
+
# Filter out articles with quality < minimum_quality_level
|
|
96
122
|
filtered_articles = [
|
|
97
123
|
{
|
|
98
124
|
**article,
|
|
99
|
-
"quality_metrics": results[i]
|
|
100
|
-
"overall_quality": results[i]
|
|
125
|
+
"quality_metrics": results[i]["quality_metrics"],
|
|
126
|
+
"overall_quality": results[i]["overall_quality"],
|
|
101
127
|
}
|
|
102
|
-
# 1. Ensure output is NOT None before proceeding
|
|
103
128
|
for i, article in enumerate(articles)
|
|
104
|
-
if results[i].
|
|
105
|
-
|
|
106
|
-
and results[i].
|
|
129
|
+
if results[i].get("overall_quality") in QualityLevel.__members__
|
|
130
|
+
and QualityLevel[results[i]["overall_quality"]] >= minimum_quality_level
|
|
131
|
+
and not results[i].get("error")
|
|
107
132
|
]
|
|
108
|
-
|
|
133
|
+
|
|
109
134
|
logger.info(
|
|
110
135
|
f"Filtered out {len(articles) - len(filtered_articles)} articles with quality < {minimum_quality_level.name}"
|
|
111
136
|
)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Copyright (c) 2024-2026, RTE (https://www.rte-france.com)
|
|
2
|
+
# See AUTHORS.txt
|
|
3
|
+
# SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
# This file is part of BERTrend.
|
|
5
|
+
|
|
6
|
+
import os
|
|
7
|
+
import tomllib
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
from pydantic_settings import BaseSettings
|
|
11
|
+
|
|
12
|
+
DEFAULT_CONFIG_FILE = Path(__file__).parent / "default_config.toml"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ArticleScoringAPIConfig(BaseSettings):
|
|
16
|
+
host: str
|
|
17
|
+
port: int
|
|
18
|
+
number_workers: int
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def get_config() -> ArticleScoringAPIConfig:
|
|
22
|
+
"""
|
|
23
|
+
Return the configuration for the summary API.
|
|
24
|
+
The configuration is loaded from a toml file.
|
|
25
|
+
The path to the toml file can be specified using the environment variable `SUMMARY_API_CONFIG_FILE`.
|
|
26
|
+
If the environment variable is not set, the default configuration file is used.
|
|
27
|
+
"""
|
|
28
|
+
config_file = os.environ.get("ARTICLE_SCORING_API_CONFIG_FILE", None)
|
|
29
|
+
if config_file is None:
|
|
30
|
+
config_file = DEFAULT_CONFIG_FILE
|
|
31
|
+
with open(config_file, "rb") as f:
|
|
32
|
+
return ArticleScoringAPIConfig(**tomllib.load(f))
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Copyright (c) 2024-2026, RTE (https://www.rte-france.com)
|
|
2
|
+
# See AUTHORS.txt
|
|
3
|
+
# SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
# This file is part of BERTrend.
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ScoreArticlesRequest(BaseModel):
|
|
10
|
+
articles: list[str]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ScoredArticle(BaseModel):
|
|
14
|
+
article_index: int
|
|
15
|
+
quality_metrics: dict | None = None
|
|
16
|
+
overall_quality: str | None = None
|
|
17
|
+
error: str | None = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ScoreArticlesResponse(BaseModel):
|
|
21
|
+
results: list[ScoredArticle]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Copyright (c) 2024-2026, RTE (https://www.rte-france.com)
|
|
2
|
+
# See AUTHORS.txt
|
|
3
|
+
# SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
# This file is part of BERTrend.
|
|
5
|
+
|
|
6
|
+
from fastapi import APIRouter
|
|
7
|
+
from starlette.responses import RedirectResponse
|
|
8
|
+
|
|
9
|
+
router = APIRouter()
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@router.get("/health")
|
|
13
|
+
def health():
|
|
14
|
+
return {"status": "ok"}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@router.get("/", summary="Redirect to API documentation")
|
|
18
|
+
def root():
|
|
19
|
+
return RedirectResponse(url="/docs")
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Copyright (c) 2024-2026, RTE (https://www.rte-france.com)
|
|
2
|
+
# See AUTHORS.txt
|
|
3
|
+
# SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
# This file is part of BERTrend.
|
|
5
|
+
|
|
6
|
+
from fastapi import APIRouter, HTTPException
|
|
7
|
+
|
|
8
|
+
from bertrend.article_scoring.scoring_agent import score_articles
|
|
9
|
+
from bertrend.services.article_scoring_server.models import (
|
|
10
|
+
ScoreArticlesRequest,
|
|
11
|
+
ScoreArticlesResponse,
|
|
12
|
+
ScoredArticle,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
router = APIRouter()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@router.post("/score", response_model=ScoreArticlesResponse)
|
|
19
|
+
async def score(request: ScoreArticlesRequest):
|
|
20
|
+
try:
|
|
21
|
+
score_results = await score_articles(request.articles)
|
|
22
|
+
except Exception as e:
|
|
23
|
+
raise HTTPException(
|
|
24
|
+
status_code=500,
|
|
25
|
+
detail=f"Failed to score articles: {e}",
|
|
26
|
+
) from e
|
|
27
|
+
|
|
28
|
+
results = []
|
|
29
|
+
for index, item in enumerate(score_results):
|
|
30
|
+
quality_metrics = item.output.serialize_model() if item.output else None
|
|
31
|
+
overall_quality = (
|
|
32
|
+
item.output.quality_level.name if item.output and not item.error else None
|
|
33
|
+
)
|
|
34
|
+
results.append(
|
|
35
|
+
ScoredArticle(
|
|
36
|
+
article_index=index,
|
|
37
|
+
quality_metrics=quality_metrics,
|
|
38
|
+
overall_quality=overall_quality,
|
|
39
|
+
error=item.error,
|
|
40
|
+
)
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
return ScoreArticlesResponse(results=results)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Copyright (c) 2024-2026, RTE (https://www.rte-france.com)
|
|
2
|
+
# See AUTHORS.txt
|
|
3
|
+
# SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
# This file is part of BERTrend.
|
|
5
|
+
|
|
6
|
+
from fastapi import FastAPI
|
|
7
|
+
|
|
8
|
+
from bertrend.services.article_scoring_server.routers import info, scoring
|
|
9
|
+
|
|
10
|
+
app = FastAPI(title="BERTrend Article Scoring Service")
|
|
11
|
+
app.include_router(info.router, tags=["Info"])
|
|
12
|
+
app.include_router(scoring.router, tags=["Article scoring"])
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Copyright (c) 2024-2026, RTE (https://www.rte-france.com)
|
|
2
|
+
# See AUTHORS.txt
|
|
3
|
+
# SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
# This file is part of BERTrend.
|
|
5
|
+
|
|
6
|
+
import uvicorn
|
|
7
|
+
|
|
8
|
+
from bertrend.services.article_scoring_server.config.settings import get_config
|
|
9
|
+
|
|
10
|
+
CONFIG = get_config()
|
|
11
|
+
|
|
12
|
+
if __name__ == "__main__":
|
|
13
|
+
uvicorn.run(
|
|
14
|
+
"bertrend.services.article_scoring_server.scoring_service:app",
|
|
15
|
+
host=CONFIG.host,
|
|
16
|
+
port=CONFIG.port,
|
|
17
|
+
workers=CONFIG.number_workers,
|
|
18
|
+
)
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
from unittest.mock import MagicMock, patch
|
|
7
7
|
|
|
8
8
|
import pytest
|
|
9
|
+
import requests
|
|
9
10
|
|
|
10
11
|
from bertrend.article_scoring.article_scoring import QualityLevel
|
|
11
12
|
from bertrend.bertrend_apps.data_provider.data_provider import DataProvider
|
|
@@ -80,23 +81,34 @@ def test_get_text(mock_goose, provider):
|
|
|
80
81
|
assert title == "Goose title"
|
|
81
82
|
|
|
82
83
|
|
|
83
|
-
@patch(
|
|
84
|
-
|
|
84
|
+
@patch.dict(
|
|
85
|
+
"os.environ", {"ARTICLE_SCORING_SERVICE_URL": "http://localhost:8887"}, clear=False
|
|
86
|
+
)
|
|
87
|
+
@patch("bertrend.bertrend_apps.data_provider.data_provider.requests.post")
|
|
88
|
+
def test_evaluate_quality(mock_requests_post, provider):
|
|
85
89
|
articles = [
|
|
86
90
|
{"text": "high quality content", "id": 1},
|
|
87
91
|
{"text": "low quality", "id": 2},
|
|
88
92
|
]
|
|
89
93
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
94
|
+
mock_response = MagicMock()
|
|
95
|
+
mock_response.json.return_value = {
|
|
96
|
+
"results": [
|
|
97
|
+
{
|
|
98
|
+
"article_index": 0,
|
|
99
|
+
"quality_metrics": {"score": 0.9},
|
|
100
|
+
"overall_quality": "EXCELLENT",
|
|
101
|
+
"error": None,
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"article_index": 1,
|
|
105
|
+
"quality_metrics": {"score": 0.1},
|
|
106
|
+
"overall_quality": "POOR",
|
|
107
|
+
"error": None,
|
|
108
|
+
},
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
mock_requests_post.return_value = mock_response
|
|
100
112
|
|
|
101
113
|
filtered = provider.evaluate_quality(articles, QualityLevel.AVERAGE)
|
|
102
114
|
|
|
@@ -105,6 +117,22 @@ def test_evaluate_quality(mock_asyncio_run, provider):
|
|
|
105
117
|
assert filtered[0]["overall_quality"] == "EXCELLENT"
|
|
106
118
|
|
|
107
119
|
|
|
120
|
+
@patch.dict(
|
|
121
|
+
"os.environ", {"ARTICLE_SCORING_SERVICE_URL": "http://localhost:8887"}, clear=False
|
|
122
|
+
)
|
|
123
|
+
@patch("bertrend.bertrend_apps.data_provider.data_provider.requests.post")
|
|
124
|
+
def test_evaluate_quality_service_unavailable(mock_requests_post, provider):
|
|
125
|
+
articles = [
|
|
126
|
+
{"text": "high quality content", "id": 1},
|
|
127
|
+
{"text": "low quality", "id": 2},
|
|
128
|
+
]
|
|
129
|
+
mock_requests_post.side_effect = requests.ConnectionError("service unavailable")
|
|
130
|
+
|
|
131
|
+
filtered = provider.evaluate_quality(articles, QualityLevel.AVERAGE)
|
|
132
|
+
|
|
133
|
+
assert filtered == articles
|
|
134
|
+
|
|
135
|
+
|
|
108
136
|
def test_process_entries(provider):
|
|
109
137
|
entries = [{"title": "Entry 1"}, {"title": "Entry 2"}]
|
|
110
138
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/config/feeds/decarbonation_feed.toml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/data_provider/atom_feed_provider.py
RENAMED
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/data_provider/bing_news_provider.py
RENAMED
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/data_provider/data_provider_utils.py
RENAMED
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/data_provider/deep_research_provider.py
RENAMED
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/data_provider/google_news_provider.py
RENAMED
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/data_provider/newscatcher_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/exploration/curebot/.streamlit/config.toml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/exploration/curebot/tabs/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/exploration/geoviz/.streamlit/config.toml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/newsletters/newsletter_generation.py
RENAMED
|
File without changes
|
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/prospective_demo/.streamlit/config.toml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/prospective_demo/dashboard_analysis.py
RENAMED
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/prospective_demo/dashboard_common.py
RENAMED
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/prospective_demo/dashboard_comparative.py
RENAMED
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/prospective_demo/dashboard_signals.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/prospective_demo/i18n_translations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/prospective_demo/process_new_data.py
RENAMED
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/prospective_demo/report_generation.py
RENAMED
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/prospective_demo/report_generation_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bertrend-0.4.7 → bertrend-0.4.8}/bertrend/bertrend_apps/services/bertrend/bertrend_service.py
RENAMED
|
File without changes
|