bertrend 0.3.18__tar.gz → 0.3.20__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {bertrend-0.3.18 → bertrend-0.3.20}/PKG-INFO +35 -13
- {bertrend-0.3.18 → bertrend-0.3.20}/README.md +30 -9
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/BERTopicModel.py +1 -1
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/__init__.py +13 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/config/services_default_config.toml +3 -3
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/demos_utils/data_loading_component.py +1 -1
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/demos_utils/icons.py +5 -0
- bertrend-0.3.20/bertrend/demos/start_summarizer_app.sh +9 -0
- bertrend-0.3.20/bertrend/demos/streamlit_components/input_with_pills_component.py +101 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/summarization/summarizer_app.py +8 -4
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/topic_analysis/demo_pages/explore_topics.py +4 -4
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/topic_analysis/demo_pages/newsletters_generation.py +1 -1
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/topic_analysis/demo_pages/temporal_visualizations.py +8 -8
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/topic_analysis/demo_pages/topic_visualizations.py +3 -3
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/topic_analysis/demo_pages/training_page.py +1 -1
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/weak_signals/app.py +8 -8
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/weak_signals/visualizations_utils.py +6 -6
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/llm_utils/agent_utils.py +28 -4
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/llm_utils/newsletter_features.py +1 -1
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/llm_utils/newsletter_template.html +2 -6
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/llm_utils/openai_client.py +87 -30
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_client.py +3 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_server/security.py +1 -1
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_service.py +3 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/summary/chatgpt_summarizer.py +6 -12
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/summary/extractive_summarizer.py +3 -3
- bertrend-0.3.20/bertrend/services/summary/prompts.py +43 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_agent_utils.py +7 -3
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_chatgpt_summarizer.py +4 -4
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_data_structure.py +1 -1
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_extractive_summarizer.py +2 -2
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_newsletter_features.py +6 -6
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_openai_client.py +13 -13
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_topic_description.py +3 -3
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/topic_analysis/topic_description.py +1 -1
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/trend_analysis/signal_llm_template_en.html +2 -2
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/trend_analysis/weak_signals.py +1 -1
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/utils/config_utils.py +5 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/common/crontab_utils.py +5 -2
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/data_provider/__main__.py +14 -8
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/data_provider/arxiv_provider.py +3 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/data_provider/data_provider.py +4 -1
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/data_provider/newscatcher_provider.py +3 -0
- bertrend-0.3.20/bertrend_apps/data_provider/rss_feed_provider.py +107 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/curebot/app_utils.py +3 -3
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/curebot/tabs/tab2.py +1 -1
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/geolocalization/spacy/utils.py +3 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/__init__.py +7 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/app.py +7 -1
- bertrend-0.3.20/bertrend_apps/prospective_demo/automated_report_generation.py +351 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/dashboard_common.py +1 -1
- bertrend-0.3.20/bertrend_apps/prospective_demo/dashboard_comparative.py +731 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/dashboard_signals.py +1 -1
- bertrend-0.3.20/bertrend_apps/prospective_demo/docs/automated_report_generation.md +289 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/feeds_config.py +13 -2
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/feeds_data.py +49 -7
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/i18n_translations.py +121 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/models_info.py +219 -57
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/process_new_data.py +36 -33
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/report_generation.py +2 -18
- bertrend-0.3.20/bertrend_apps/prospective_demo/utils.py +11 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/tests/test_process_new_data.py +57 -39
- {bertrend-0.3.18 → bertrend-0.3.20}/pyproject.toml +5 -4
- bertrend-0.3.18/bertrend/demos/start_summarizer_app.sh +0 -9
- bertrend-0.3.18/bertrend/demos/streamlit_components/input_with_pills_components.py +0 -83
- bertrend-0.3.18/bertrend/services/summary/prompts.py +0 -43
- {bertrend-0.3.18 → bertrend-0.3.20}/AUTHORS.txt +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/LICENSE.md +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/BERTrend.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/article_scoring/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/article_scoring/article_scoring.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/article_scoring/prompts.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/article_scoring/scoring_agent.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/config/bertopic_default_config.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/config/bertrend_default_config.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/config/parameters.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/demos_utils/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/demos_utils/embed_documents_component.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/demos_utils/i18n.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/demos_utils/i18n_translations.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/demos_utils/parameters_component.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/demos_utils/state_utils.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/start_topic_analysis_app.sh +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/start_weak_signals_app.sh +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/streamlit_components/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/streamlit_components/clickable_df_component.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/summarization/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/topic_analysis/.streamlit/config.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/topic_analysis/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/topic_analysis/app.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/topic_analysis/app_utils.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/topic_analysis/demo_pages/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/topic_analysis/i18n_translations.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/weak_signals/.streamlit/config.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/weak_signals/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/weak_signals/i18n_translations.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/llm_utils/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/llm_utils/newsletter.css +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/llm_utils/newsletter_model.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/llm_utils/newsletter_outlook_template.html +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/llm_utils/prompts.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/metrics/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/metrics/temporal_metrics_embedding.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/metrics/topic_metrics.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/resources/common_ngrams.json +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/resources/stopwords-en.json +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/resources/stopwords-fr.json +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/resources/stopwords-rte.json +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/authentication.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/cert.pem +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_server/README.md +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_server/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_server/bertrend_client_registry.json +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_server/config/default_config.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_server/config/settings.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_server/main.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_server/models.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_server/requirements.txt +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_server/routers/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_server/routers/authentication.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_server/routers/embeddings.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_server/routers/info.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_server/start.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_server/status.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/embedding_server/stop.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/key.pem +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/summarizer.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/summary/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/summary/abstractive_summarizer.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/services/summary/lexrank.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/README_integration_tests.md +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/conftest.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_abstractive_summarizer.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_article_scoring.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_article_scoring_models.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_bertrend.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_cache_utils.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_config_utils.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_data_loading.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_embedding_client.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_installation.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_integration.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_mail_utils.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_newsletter_model.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_representative_docs.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_summarizer.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_temporal_metrics_embedding.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_topic_metrics.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_topic_model.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_trend_analysis_data_structure.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_trend_analysis_prompts.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_trend_analysis_visualizations.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_trend_analysis_weak_signals.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_utils_init.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/tests/test_visualizations.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/topic_analysis/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/topic_analysis/data_structure.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/topic_analysis/prompts.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/topic_analysis/representative_docs.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/topic_analysis/visualizations.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/trend_analysis/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/trend_analysis/data_structure.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/trend_analysis/prompts.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/trend_analysis/signal_llm_template_fr.html +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/trend_analysis/visualizations.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/utils/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/utils/cache_utils.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend/utils/data_loading.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/common/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/common/mail_utils.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/config/feeds/arxiv_feed.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/config/feeds/decarbonation_feed.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/config/feeds/llm_en_feed.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/config/feeds/llm_feed.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/config/feeds/nlp_feed.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/config/feeds/rte_feed.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/config/newsletters/arxiv_newsletter_from_last.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/config/newsletters/decarbonation_newsletter_from_last.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/config/newsletters/decarbonation_newsletter_from_scratch.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/config/newsletters/llm_en_newsletter_from_last.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/config/newsletters/llm_newsletter_from_last.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/config/newsletters/nlp_newsletter_from_last.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/config/newsletters/rte_newsletter_from_last.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/config/newsletters/rte_newsletter_from_scratch.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/data_provider/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/data_provider/atom_feed_provider.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/data_provider/bing_news_provider.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/data_provider/google_news_provider.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/data_provider/utils.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/curebot/.streamlit/config.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/curebot/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/curebot/app.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/curebot/config.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/curebot/import_extraction_article.ipynb +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/curebot/prompts.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/curebot/start_newsletter_generator.sh +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/curebot/tabs/tab1.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/curebot/tabs/tab3.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/dataviz/Main_page.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/dataviz/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/dataviz/pages/1_Data_feeds.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/geolocalization/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/geolocalization/entity_utils.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/geolocalization/spacy/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/geolocalization/spacy/common_factory.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/geolocalization/spacy/dbpedia.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/exploration/geolocalization/spacy/nlp.config +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/install_feeds_and_newsletters.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/newsletters/__init__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/newsletters/__main__.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/.streamlit/config.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/.streamlit/secrets.toml +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/authentication.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/dashboard_analysis.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/data_model.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/detailed_report_template.html +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/feeds_common.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/llm_utils.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/perf_utils.py +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/prospective_demo/start_demo.sh +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/start_apps.sh +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/stop_apps.sh +0 -0
- {bertrend-0.3.18 → bertrend-0.3.20}/bertrend_apps/tests/__init__.py +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bertrend
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.20
|
|
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
|
|
7
7
|
License-File: LICENSE.md
|
|
8
|
-
Keywords: topics,BERTopic,transformers,weak signals,LLM
|
|
8
|
+
Keywords: topics,BERTopic,transformers,weak signals,LLM,trend analysis
|
|
9
9
|
Author: Jérôme Picault
|
|
10
10
|
Author-email: jerome.picault@rte-france.com
|
|
11
11
|
Maintainer: Jérôme Picault
|
|
@@ -44,7 +44,7 @@ Requires-Dist: newspaper4k (>=0.9.3.1) ; extra == "apps"
|
|
|
44
44
|
Requires-Dist: nltk (>=3.9.1)
|
|
45
45
|
Requires-Dist: numpy (<2)
|
|
46
46
|
Requires-Dist: openai (>=1.77.0)
|
|
47
|
-
Requires-Dist: openai-agents[litellm] (>=0.
|
|
47
|
+
Requires-Dist: openai-agents[litellm] (>=0.4.0)
|
|
48
48
|
Requires-Dist: openpyxl (>=3.1.5)
|
|
49
49
|
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc (==1.25.0)
|
|
50
50
|
Requires-Dist: pandas (>=2.2.2)
|
|
@@ -55,6 +55,7 @@ Requires-Dist: pygooglenews (>=0.1.3) ; extra == "apps"
|
|
|
55
55
|
Requires-Dist: pylabeladjust (==0.1.13)
|
|
56
56
|
Requires-Dist: pytest (>=8.4.0)
|
|
57
57
|
Requires-Dist: pytest-asyncio
|
|
58
|
+
Requires-Dist: python-dotenv (>=1.1.1)
|
|
58
59
|
Requires-Dist: requests (>=2.32.3)
|
|
59
60
|
Requires-Dist: scikit-learn (>=1.5.2)
|
|
60
61
|
Requires-Dist: scipy (==1.12)
|
|
@@ -62,7 +63,7 @@ Requires-Dist: seaborn (>=0.13.2)
|
|
|
62
63
|
Requires-Dist: sentence-transformers (==3.0.1)
|
|
63
64
|
Requires-Dist: sentencepiece (>=0.2.0)
|
|
64
65
|
Requires-Dist: starlette (>=0.46.2)
|
|
65
|
-
Requires-Dist: streamlit (>=1.
|
|
66
|
+
Requires-Dist: streamlit (>=1.50)
|
|
66
67
|
Requires-Dist: streamlit-code-editor (>=0.1.22)
|
|
67
68
|
Requires-Dist: supervisor (>=4.3.0)
|
|
68
69
|
Requires-Dist: thefuzz (>=0.22.1)
|
|
@@ -150,15 +151,36 @@ https://github.com/user-attachments/assets/d79368d9-d4e0-4324-8a98-a888f0ab3b65
|
|
|
150
151
|
|
|
151
152
|
## Installation
|
|
152
153
|
|
|
153
|
-
### Environment
|
|
154
|
-
|
|
155
|
-
BERTrend
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
154
|
+
### Environment Setup (.env and .venv)
|
|
155
|
+
|
|
156
|
+
BERTrend now supports configuration via a repository-level `.env` file. On import, the package attempts to load environment variables automatically using `python-dotenv`.
|
|
157
|
+
|
|
158
|
+
Recommended steps:
|
|
159
|
+
|
|
160
|
+
1. Create and fill your `.env` at the repo root (a template is provided):
|
|
161
|
+
- Copy `.env` and set your values (do not commit secrets).
|
|
162
|
+
- Common keys:
|
|
163
|
+
- `BERTREND_BASE_DIR`: base directory for BERTrend data/models/logs
|
|
164
|
+
- OpenAI/LLM:
|
|
165
|
+
- `OPENAI_API_KEY`
|
|
166
|
+
- `OPENAI_BASE_URL` (optional for OpenAI-compatible providers such as LiteLLM and Azure)
|
|
167
|
+
- `OPENAI_DEFAULT_MODEL`
|
|
168
|
+
- Providers (optional): `SEMANTIC_SCHOLAR_API_KEY`, `NEWSCATCHER_API_KEY`, `DBPEDIA_REST_API_URL`
|
|
169
|
+
- Embedding service security (optional): `BERTREND_SECRET_KEY`, `DEFAULT_RATE_LIMIT`, `DEFAULT_RATE_WINDOW`, `CLIENT_REGISTRY_FILE`
|
|
170
|
+
- Email (optional): `BERTREND_EMAIL_BACKEND`, `GMAIL_*`, `SMTP_*`, `SENDGRID_API_KEY`
|
|
171
|
+
- Misc: `CUDA_VISIBLE_DEVICES`
|
|
172
|
+
2. Use a virtual environment and install dependencies inside it:
|
|
173
|
+
```bash
|
|
174
|
+
python -m venv .venv
|
|
175
|
+
source .venv/bin/activate # Windows: .venv\\Scripts\\activate
|
|
176
|
+
pip install -U pip
|
|
177
|
+
pip install . # or pip install ".[apps]"
|
|
178
|
+
pip install python-dotenv # ensures .env is auto-loaded
|
|
179
|
+
```
|
|
180
|
+
3. Notes
|
|
181
|
+
- If `python-dotenv` isn’t installed, `.env` won’t be auto-loaded; you can either install it or export variables via your shell/runner.
|
|
182
|
+
- Scheduled jobs created from the apps use the exact interpreter of your active environment (`sys.executable`), ensuring `.venv/bin/python` is used. Keep your venv path stable on the machine running cron.
|
|
183
|
+
- Cron entries source your shell profile and pass through any required variables. You can also rely on `.env` for most settings.
|
|
162
184
|
|
|
163
185
|
### Hardware and Software Requirements
|
|
164
186
|
|
|
@@ -69,15 +69,36 @@ https://github.com/user-attachments/assets/d79368d9-d4e0-4324-8a98-a888f0ab3b65
|
|
|
69
69
|
|
|
70
70
|
## Installation
|
|
71
71
|
|
|
72
|
-
### Environment
|
|
73
|
-
|
|
74
|
-
BERTrend
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
72
|
+
### Environment Setup (.env and .venv)
|
|
73
|
+
|
|
74
|
+
BERTrend now supports configuration via a repository-level `.env` file. On import, the package attempts to load environment variables automatically using `python-dotenv`.
|
|
75
|
+
|
|
76
|
+
Recommended steps:
|
|
77
|
+
|
|
78
|
+
1. Create and fill your `.env` at the repo root (a template is provided):
|
|
79
|
+
- Copy `.env` and set your values (do not commit secrets).
|
|
80
|
+
- Common keys:
|
|
81
|
+
- `BERTREND_BASE_DIR`: base directory for BERTrend data/models/logs
|
|
82
|
+
- OpenAI/LLM:
|
|
83
|
+
- `OPENAI_API_KEY`
|
|
84
|
+
- `OPENAI_BASE_URL` (optional for OpenAI-compatible providers such as LiteLLM and Azure)
|
|
85
|
+
- `OPENAI_DEFAULT_MODEL`
|
|
86
|
+
- Providers (optional): `SEMANTIC_SCHOLAR_API_KEY`, `NEWSCATCHER_API_KEY`, `DBPEDIA_REST_API_URL`
|
|
87
|
+
- Embedding service security (optional): `BERTREND_SECRET_KEY`, `DEFAULT_RATE_LIMIT`, `DEFAULT_RATE_WINDOW`, `CLIENT_REGISTRY_FILE`
|
|
88
|
+
- Email (optional): `BERTREND_EMAIL_BACKEND`, `GMAIL_*`, `SMTP_*`, `SENDGRID_API_KEY`
|
|
89
|
+
- Misc: `CUDA_VISIBLE_DEVICES`
|
|
90
|
+
2. Use a virtual environment and install dependencies inside it:
|
|
91
|
+
```bash
|
|
92
|
+
python -m venv .venv
|
|
93
|
+
source .venv/bin/activate # Windows: .venv\\Scripts\\activate
|
|
94
|
+
pip install -U pip
|
|
95
|
+
pip install . # or pip install ".[apps]"
|
|
96
|
+
pip install python-dotenv # ensures .env is auto-loaded
|
|
97
|
+
```
|
|
98
|
+
3. Notes
|
|
99
|
+
- If `python-dotenv` isn’t installed, `.env` won’t be auto-loaded; you can either install it or export variables via your shell/runner.
|
|
100
|
+
- Scheduled jobs created from the apps use the exact interpreter of your active environment (`sys.executable`), ensuring `.venv/bin/python` is used. Keep your venv path stable on the machine running cron.
|
|
101
|
+
- Cron entries source your shell profile and pass through any required variables. You can also rely on `.env` for most settings.
|
|
81
102
|
|
|
82
103
|
### Hardware and Software Requirements
|
|
83
104
|
|
|
@@ -177,7 +177,7 @@ class BERTopicModel:
|
|
|
177
177
|
return OpenAI(
|
|
178
178
|
client=OpenAI_Client(
|
|
179
179
|
api_key=LLM_CONFIG["api_key"],
|
|
180
|
-
|
|
180
|
+
base_url=LLM_CONFIG["base_url"],
|
|
181
181
|
model=LLM_CONFIG["model"],
|
|
182
182
|
).llm_client,
|
|
183
183
|
model=LLM_CONFIG["model"],
|
|
@@ -5,6 +5,19 @@
|
|
|
5
5
|
import os
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
|
|
8
|
+
from loguru import logger
|
|
9
|
+
|
|
10
|
+
# Auto-load .env if python-dotenv is available
|
|
11
|
+
try:
|
|
12
|
+
from dotenv import load_dotenv # type: ignore
|
|
13
|
+
|
|
14
|
+
if load_dotenv(override=True):
|
|
15
|
+
logger.info("Loaded .env file")
|
|
16
|
+
else:
|
|
17
|
+
logger.warning("Failed to load .env file")
|
|
18
|
+
except Exception:
|
|
19
|
+
pass
|
|
20
|
+
|
|
8
21
|
from bertrend.utils.config_utils import load_toml_config
|
|
9
22
|
|
|
10
23
|
# Default config files path
|
|
@@ -24,9 +24,9 @@ embedding_max_seq_length = 512
|
|
|
24
24
|
# - local LLM deployed with VLLM or similar libraries
|
|
25
25
|
# - the official OpenAI endpoint
|
|
26
26
|
# - models deployed on Azure cloud
|
|
27
|
-
api_key = "$
|
|
28
|
-
|
|
29
|
-
model = "$
|
|
27
|
+
api_key = "$OPENAI_API_KEY"
|
|
28
|
+
base_url = "$OPENAI_BASE_URL"
|
|
29
|
+
model = "$OPENAI_DEFAULT_MODEL"
|
|
30
30
|
temperature = 0.1
|
|
31
31
|
max_output_tokens = 2048
|
|
32
32
|
system_prompt = "You are a helpful assistant, skilled in detailing topic evolution over time for the detection of emerging trends and signals."
|
|
@@ -21,6 +21,7 @@ TOPIC_VISUALIZATION_ICON = ":material/monitoring:"
|
|
|
21
21
|
TEMPORAL_VISUALIZATION_ICON = ":material/timelapse:"
|
|
22
22
|
NEWSLETTER_ICON = ":material/newspaper:"
|
|
23
23
|
ANALYSIS_ICON = ":material/query_stats:"
|
|
24
|
+
TIMELINE_ICON = ":material/timeline:"
|
|
24
25
|
DATA_LOADING_ICON = ":material/drive_folder_upload:"
|
|
25
26
|
MODEL_TRAINING_ICON = ":material/cognition:"
|
|
26
27
|
SERVER_STORAGE_ICON = ":material/database:"
|
|
@@ -35,6 +36,10 @@ DOWNLOAD_ICON = ":material/download:"
|
|
|
35
36
|
EMAIL_ICON = ":material/mail:"
|
|
36
37
|
RESTART_ICON = ":material/restart_alt:"
|
|
37
38
|
PERSON_ADD_ICON = ":material/person_add:"
|
|
39
|
+
PERSON_REMOVE_ICON = ":material/person_remove:"
|
|
40
|
+
POPULARITY_ICON = ":material/thumbs_up_down:"
|
|
41
|
+
SIGNAL_EVOLUTION_ICON = ":material/signal_cellular_alt:"
|
|
42
|
+
CYCLE_ICON = ":material/cycle:"
|
|
38
43
|
|
|
39
44
|
JSON_ICON = "🧾"
|
|
40
45
|
PARQUET_ICON = "📦️"
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2024, RTE (https://www.rte-france.com)
|
|
3
|
+
# See AUTHORS.txt
|
|
4
|
+
# SPDX-License-Identifier: MPL-2.0
|
|
5
|
+
# This file is part of BERTrend.
|
|
6
|
+
#
|
|
7
|
+
|
|
8
|
+
# Starts the Summarizer app (a comparison of various method of text summarization)
|
|
9
|
+
CUDA_VISIBLE_DEVICES=0 OPENAI_API_KEY=$OPENAI_API_KEY OPENAI_BASE_URL=$OPENAI_BASE_URL OPENAI_DEFAULT_MODEL=$OPENAI_DEFAULT_MODEL streamlit run --theme.primaryColor royalblue summarization/summarizer_app.py
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import streamlit as st
|
|
2
|
+
from typing import Callable
|
|
3
|
+
|
|
4
|
+
from bertrend.demos.demos_utils.icons import PERSON_ADD_ICON
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def input_with_pills(
|
|
8
|
+
label: str,
|
|
9
|
+
key: str,
|
|
10
|
+
placeholder: str = "",
|
|
11
|
+
validate_fn: Callable[[str], bool] | None = None,
|
|
12
|
+
label_visibility: str = "hidden",
|
|
13
|
+
help: str = None,
|
|
14
|
+
value: list[str] = None,
|
|
15
|
+
) -> list[str] | None:
|
|
16
|
+
"""
|
|
17
|
+
A simple Streamlit component that auto-adds valid input to pills.
|
|
18
|
+
Dialog-safe version that doesn't use st.rerun()
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
# Define all keys
|
|
22
|
+
all_items_key = f"{key}_all_items"
|
|
23
|
+
input_key = f"{key}_input"
|
|
24
|
+
pills_widget_key = f"{key}_pills_widget"
|
|
25
|
+
selection_tracking_key = f"{key}_selection_tracking"
|
|
26
|
+
|
|
27
|
+
if all_items_key not in st.session_state:
|
|
28
|
+
initial_value = value if value is not None else []
|
|
29
|
+
st.session_state[all_items_key] = initial_value
|
|
30
|
+
st.session_state[selection_tracking_key] = initial_value[:]
|
|
31
|
+
|
|
32
|
+
if input_key not in st.session_state:
|
|
33
|
+
st.session_state[input_key] = ""
|
|
34
|
+
|
|
35
|
+
col1, col2 = st.columns([3, 3])
|
|
36
|
+
|
|
37
|
+
with col1:
|
|
38
|
+
with st.form(key=f"{key}_form", clear_on_submit=True, border=False):
|
|
39
|
+
current_input = st.text_input(
|
|
40
|
+
label,
|
|
41
|
+
placeholder=placeholder,
|
|
42
|
+
key=input_key,
|
|
43
|
+
label_visibility=label_visibility,
|
|
44
|
+
help=help,
|
|
45
|
+
)
|
|
46
|
+
submitted = st.form_submit_button(PERSON_ADD_ICON)
|
|
47
|
+
|
|
48
|
+
if submitted and current_input.strip():
|
|
49
|
+
is_valid = True
|
|
50
|
+
error_msg = ""
|
|
51
|
+
stripped_input = current_input.strip()
|
|
52
|
+
|
|
53
|
+
if validate_fn and not validate_fn(stripped_input):
|
|
54
|
+
is_valid = False
|
|
55
|
+
error_msg = "Invalid format"
|
|
56
|
+
elif stripped_input in st.session_state[all_items_key]:
|
|
57
|
+
is_valid = False
|
|
58
|
+
error_msg = "Already exists"
|
|
59
|
+
|
|
60
|
+
if is_valid:
|
|
61
|
+
# Add to the list of all items
|
|
62
|
+
st.session_state[all_items_key].append(stripped_input)
|
|
63
|
+
|
|
64
|
+
# Update tracking selection
|
|
65
|
+
st.session_state[selection_tracking_key].append(stripped_input)
|
|
66
|
+
|
|
67
|
+
# Update pills widget selection
|
|
68
|
+
st.session_state[pills_widget_key] = st.session_state[
|
|
69
|
+
selection_tracking_key
|
|
70
|
+
][:]
|
|
71
|
+
else:
|
|
72
|
+
st.error(error_msg)
|
|
73
|
+
|
|
74
|
+
with col2:
|
|
75
|
+
# Display pills
|
|
76
|
+
if st.session_state[all_items_key]:
|
|
77
|
+
st.markdown("<div style='margin-top: 8px;'></div>", unsafe_allow_html=True)
|
|
78
|
+
|
|
79
|
+
# Initialize pills widget if not exists
|
|
80
|
+
if pills_widget_key not in st.session_state:
|
|
81
|
+
st.session_state[pills_widget_key] = st.session_state[
|
|
82
|
+
selection_tracking_key
|
|
83
|
+
][:]
|
|
84
|
+
|
|
85
|
+
def on_pills_change():
|
|
86
|
+
# Sync the widget selection to our tracking key
|
|
87
|
+
st.session_state[selection_tracking_key] = st.session_state[
|
|
88
|
+
pills_widget_key
|
|
89
|
+
][:]
|
|
90
|
+
|
|
91
|
+
selected = st.pills(
|
|
92
|
+
"Items",
|
|
93
|
+
st.session_state[all_items_key],
|
|
94
|
+
selection_mode="multi",
|
|
95
|
+
key=pills_widget_key,
|
|
96
|
+
label_visibility="collapsed",
|
|
97
|
+
on_change=on_pills_change,
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
st.session_state[key] = st.session_state[selection_tracking_key]
|
|
101
|
+
return st.session_state[key]
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
# SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
# This file is part of BERTrend.
|
|
5
5
|
import os
|
|
6
|
-
|
|
7
6
|
import streamlit as st
|
|
7
|
+
from dotenv import load_dotenv
|
|
8
8
|
from loguru import logger
|
|
9
9
|
|
|
10
10
|
from bertrend.demos.demos_utils.icons import WARNING_ICON
|
|
@@ -15,6 +15,9 @@ from bertrend.services.summary.extractive_summarizer import (
|
|
|
15
15
|
ExtractiveSummarizer,
|
|
16
16
|
)
|
|
17
17
|
|
|
18
|
+
load_dotenv(override=True)
|
|
19
|
+
|
|
20
|
+
|
|
18
21
|
SUMMARIZER_OPTIONS_MAPPER = {
|
|
19
22
|
"GPTSummarizer": GPTSummarizer,
|
|
20
23
|
"EnhancedExtractiveSummarizer": EnhancedExtractiveSummarizer,
|
|
@@ -39,7 +42,7 @@ def get_summarizer(summary_model):
|
|
|
39
42
|
kwargs = {}
|
|
40
43
|
if summary_model == "GPTSummarizer":
|
|
41
44
|
kwargs["api_key"] = st.session_state.openai_api_key
|
|
42
|
-
kwargs["
|
|
45
|
+
kwargs["base_url"] = st.session_state.openai_base_url
|
|
43
46
|
|
|
44
47
|
summarizer_class = SUMMARIZER_OPTIONS_MAPPER[summary_model]
|
|
45
48
|
return summarizer_class(**kwargs)
|
|
@@ -63,6 +66,7 @@ def app():
|
|
|
63
66
|
)
|
|
64
67
|
/ 100
|
|
65
68
|
)
|
|
69
|
+
|
|
66
70
|
st.text_input(
|
|
67
71
|
"Openai API key",
|
|
68
72
|
key="openai_api_key",
|
|
@@ -70,12 +74,12 @@ def app():
|
|
|
70
74
|
type="password",
|
|
71
75
|
)
|
|
72
76
|
st.text_input(
|
|
73
|
-
"Openai
|
|
77
|
+
"Openai base URL", key="openai_base_url", value=os.getenv("OPENAI_BASE_URL")
|
|
74
78
|
)
|
|
75
79
|
st.text_input(
|
|
76
80
|
"Openai model name",
|
|
77
81
|
key="openai_model_name",
|
|
78
|
-
value=os.getenv("
|
|
82
|
+
value=os.getenv("OPENAI_DEFAULT_MODEL"),
|
|
79
83
|
)
|
|
80
84
|
|
|
81
85
|
col1, col2 = st.columns(2)
|
{bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/topic_analysis/demo_pages/explore_topics.py
RENAMED
|
@@ -87,7 +87,7 @@ def display_sidebar():
|
|
|
87
87
|
button_title += f" :red[+{new_docs_number}]"
|
|
88
88
|
st.button(
|
|
89
89
|
button_title,
|
|
90
|
-
|
|
90
|
+
width="stretch",
|
|
91
91
|
on_click=set_topic_selection,
|
|
92
92
|
args=(topic_number,),
|
|
93
93
|
)
|
|
@@ -119,7 +119,7 @@ def plot_topic_over_time():
|
|
|
119
119
|
st.session_state["topic_model"],
|
|
120
120
|
),
|
|
121
121
|
config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
122
|
-
|
|
122
|
+
width="stretch",
|
|
123
123
|
)
|
|
124
124
|
else:
|
|
125
125
|
st.plotly_chart(
|
|
@@ -132,7 +132,7 @@ def plot_topic_over_time():
|
|
|
132
132
|
].max(),
|
|
133
133
|
),
|
|
134
134
|
config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
135
|
-
|
|
135
|
+
width="stretch",
|
|
136
136
|
)
|
|
137
137
|
|
|
138
138
|
|
|
@@ -203,7 +203,7 @@ def display_source_distribution(
|
|
|
203
203
|
showlegend=False, height=600, width=500, margin=dict(t=0, b=0, l=0, r=0)
|
|
204
204
|
)
|
|
205
205
|
|
|
206
|
-
st.plotly_chart(fig, config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
206
|
+
st.plotly_chart(fig, config=PLOTLY_BUTTON_SAVE_CONFIG, width="stretch")
|
|
207
207
|
|
|
208
208
|
|
|
209
209
|
def get_website_name(url):
|
|
@@ -340,7 +340,7 @@ def display_topic_evolution_dataframe():
|
|
|
340
340
|
st.session_state.temptopic.final_df[columns_present].sort_values(
|
|
341
341
|
by=["Topic", "Timestamp"], ascending=[True, True]
|
|
342
342
|
),
|
|
343
|
-
|
|
343
|
+
width="stretch",
|
|
344
344
|
)
|
|
345
345
|
|
|
346
346
|
|
|
@@ -349,14 +349,14 @@ def display_topic_info_dataframe():
|
|
|
349
349
|
with st.expander(translate("topic_info_dataframe")):
|
|
350
350
|
st.dataframe(
|
|
351
351
|
st.session_state.temptopic.topic_model.get_topic_info(),
|
|
352
|
-
|
|
352
|
+
width="stretch",
|
|
353
353
|
)
|
|
354
354
|
|
|
355
355
|
|
|
356
356
|
def display_documents_per_date_dataframe():
|
|
357
357
|
"""Display the Documents per Date Dataframe."""
|
|
358
358
|
with st.expander(translate("documents_per_date_dataframe")):
|
|
359
|
-
st.dataframe(st.session_state.aggregated_df,
|
|
359
|
+
st.dataframe(st.session_state.aggregated_df, width="stretch")
|
|
360
360
|
|
|
361
361
|
|
|
362
362
|
def display_temptopic_visualizations():
|
|
@@ -423,7 +423,7 @@ def display_topic_evolution(topics_to_show):
|
|
|
423
423
|
color_palette=color_palette,
|
|
424
424
|
)
|
|
425
425
|
st.plotly_chart(
|
|
426
|
-
fig_topic_evolution, config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
426
|
+
fig_topic_evolution, config=PLOTLY_BUTTON_SAVE_CONFIG, width="stretch"
|
|
427
427
|
)
|
|
428
428
|
|
|
429
429
|
st.divider()
|
|
@@ -447,7 +447,7 @@ def display_overall_topic_stability(topics_to_show):
|
|
|
447
447
|
st.plotly_chart(
|
|
448
448
|
fig_overall_stability,
|
|
449
449
|
config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
450
|
-
|
|
450
|
+
width="stretch",
|
|
451
451
|
)
|
|
452
452
|
|
|
453
453
|
st.divider()
|
|
@@ -463,7 +463,7 @@ def display_temporal_stability_metrics(topics_to_show):
|
|
|
463
463
|
topics_to_show=topics_to_show,
|
|
464
464
|
)
|
|
465
465
|
st.plotly_chart(
|
|
466
|
-
fig_topic_stability, config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
466
|
+
fig_topic_stability, config=PLOTLY_BUTTON_SAVE_CONFIG, width="stretch"
|
|
467
467
|
)
|
|
468
468
|
|
|
469
469
|
fig_representation_stability = plot_temporal_stability_metrics(
|
|
@@ -474,7 +474,7 @@ def display_temporal_stability_metrics(topics_to_show):
|
|
|
474
474
|
st.plotly_chart(
|
|
475
475
|
fig_representation_stability,
|
|
476
476
|
config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
477
|
-
|
|
477
|
+
width="stretch",
|
|
478
478
|
)
|
|
479
479
|
|
|
480
480
|
|
|
@@ -511,7 +511,7 @@ def display_topics_popularity():
|
|
|
511
511
|
st.session_state["topic_model"],
|
|
512
512
|
),
|
|
513
513
|
config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
514
|
-
|
|
514
|
+
width="stretch",
|
|
515
515
|
)
|
|
516
516
|
|
|
517
517
|
|
{bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/topic_analysis/demo_pages/topic_visualizations.py
RENAMED
|
@@ -231,7 +231,7 @@ def main():
|
|
|
231
231
|
st.plotly_chart(
|
|
232
232
|
overall_results_plot,
|
|
233
233
|
config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
234
|
-
|
|
234
|
+
width="stretch",
|
|
235
235
|
)
|
|
236
236
|
else:
|
|
237
237
|
st.error(translate("overall_results_display_error"), icon=ERROR_ICON)
|
|
@@ -242,7 +242,7 @@ def main():
|
|
|
242
242
|
with st.spinner(translate("topics_treemap_computation")):
|
|
243
243
|
treemap_plot = create_treemap()
|
|
244
244
|
st.plotly_chart(
|
|
245
|
-
treemap_plot, config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
245
|
+
treemap_plot, config=PLOTLY_BUTTON_SAVE_CONFIG, width="stretch"
|
|
246
246
|
)
|
|
247
247
|
|
|
248
248
|
# Data Map
|
|
@@ -263,7 +263,7 @@ def main():
|
|
|
263
263
|
data=get_binary_file_downloader_html(save_path),
|
|
264
264
|
file_name="datamapplot.html",
|
|
265
265
|
mime="text/html",
|
|
266
|
-
|
|
266
|
+
width="stretch",
|
|
267
267
|
type="secondary",
|
|
268
268
|
)
|
|
269
269
|
else:
|
{bertrend-0.3.18 → bertrend-0.3.20}/bertrend/demos/topic_analysis/demo_pages/training_page.py
RENAMED
|
@@ -70,7 +70,7 @@ def data_distribution(df: pd.DataFrame):
|
|
|
70
70
|
value="1M",
|
|
71
71
|
)
|
|
72
72
|
fig = plot_docs_repartition_over_time(df, freq)
|
|
73
|
-
st.plotly_chart(fig, config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
73
|
+
st.plotly_chart(fig, config=PLOTLY_BUTTON_SAVE_CONFIG, width="stretch")
|
|
74
74
|
|
|
75
75
|
|
|
76
76
|
def save_model_interface():
|
|
@@ -195,7 +195,7 @@ def training_page():
|
|
|
195
195
|
selected_docs[
|
|
196
196
|
["timestamp", TEXT_COLUMN, "document_id", "source", "url"]
|
|
197
197
|
],
|
|
198
|
-
|
|
198
|
+
width="stretch",
|
|
199
199
|
)
|
|
200
200
|
else:
|
|
201
201
|
st.warning(translate("no_data_warning"), icon=WARNING_ICON)
|
|
@@ -285,13 +285,13 @@ def analysis_page():
|
|
|
285
285
|
st.plotly_chart(
|
|
286
286
|
plot_num_topics(topic_models),
|
|
287
287
|
config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
288
|
-
|
|
288
|
+
width="stretch",
|
|
289
289
|
)
|
|
290
290
|
# Size of Outlier Topic for each topic model
|
|
291
291
|
st.plotly_chart(
|
|
292
292
|
plot_size_outliers(topic_models),
|
|
293
293
|
config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
294
|
-
|
|
294
|
+
width="stretch",
|
|
295
295
|
)
|
|
296
296
|
|
|
297
297
|
display_topics_per_timestamp(topic_models)
|
|
@@ -335,7 +335,7 @@ def analysis_page():
|
|
|
335
335
|
st.plotly_chart(
|
|
336
336
|
fig_trend,
|
|
337
337
|
config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
338
|
-
|
|
338
|
+
width="stretch",
|
|
339
339
|
)
|
|
340
340
|
|
|
341
341
|
# Display the dataframe with zeroshot topics information
|
|
@@ -352,7 +352,7 @@ def analysis_page():
|
|
|
352
352
|
for timestamp, data in weak_signal_trend.items()
|
|
353
353
|
]
|
|
354
354
|
zeroshot_topics_df = pd.DataFrame(zeroshot_topics_data)
|
|
355
|
-
st.dataframe(zeroshot_topics_df,
|
|
355
|
+
st.dataframe(zeroshot_topics_df, width="stretch")
|
|
356
356
|
|
|
357
357
|
# Save the zeroshot topics data to a JSON file
|
|
358
358
|
json_file_path = ZEROSHOT_TOPICS_DATA_DIR
|
|
@@ -462,7 +462,7 @@ def main():
|
|
|
462
462
|
# State Management
|
|
463
463
|
st.subheader(translate("state_management"))
|
|
464
464
|
|
|
465
|
-
if st.button(translate("restore_previous_run"),
|
|
465
|
+
if st.button(translate("restore_previous_run"), width="stretch"):
|
|
466
466
|
restore_state()
|
|
467
467
|
try:
|
|
468
468
|
SessionStateManager.set("bertrend", BERTrend.restore_model())
|
|
@@ -470,10 +470,10 @@ def main():
|
|
|
470
470
|
except Exception:
|
|
471
471
|
st.warning(translate("no_models_warning"), icon=WARNING_ICON)
|
|
472
472
|
|
|
473
|
-
if st.button(translate("purge_cache"),
|
|
473
|
+
if st.button(translate("purge_cache"), width="stretch"):
|
|
474
474
|
purge_cache()
|
|
475
475
|
|
|
476
|
-
if st.button(translate("clear_session_state"),
|
|
476
|
+
if st.button(translate("clear_session_state"), width="stretch"):
|
|
477
477
|
SessionStateManager.clear()
|
|
478
478
|
|
|
479
479
|
# BERTopic Hyperparameters
|
|
@@ -75,7 +75,7 @@ def display_sankey_diagram(all_merge_histories_df: pd.DataFrame) -> None:
|
|
|
75
75
|
|
|
76
76
|
# Display the diagram using Streamlit in an expander
|
|
77
77
|
st.plotly_chart(
|
|
78
|
-
sankey_diagram, config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
78
|
+
sankey_diagram, config=PLOTLY_BUTTON_SAVE_CONFIG, width="stretch"
|
|
79
79
|
)
|
|
80
80
|
|
|
81
81
|
|
|
@@ -227,7 +227,7 @@ def display_popularity_evolution():
|
|
|
227
227
|
q1,
|
|
228
228
|
q3,
|
|
229
229
|
)
|
|
230
|
-
st.plotly_chart(fig, config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
230
|
+
st.plotly_chart(fig, config=PLOTLY_BUTTON_SAVE_CONFIG, width="stretch")
|
|
231
231
|
|
|
232
232
|
|
|
233
233
|
def display_signal_types():
|
|
@@ -309,7 +309,7 @@ def display_newly_emerged_topics(all_new_topics_df: pd.DataFrame) -> None:
|
|
|
309
309
|
].sort_values(by=["Timestamp", "Document_Count"], ascending=[True, False])
|
|
310
310
|
)
|
|
311
311
|
st.plotly_chart(
|
|
312
|
-
fig_new_topics, config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
312
|
+
fig_new_topics, config=PLOTLY_BUTTON_SAVE_CONFIG, width="stretch"
|
|
313
313
|
)
|
|
314
314
|
|
|
315
315
|
|
|
@@ -330,15 +330,15 @@ def display_topics_per_timestamp(topic_models: dict[pd.Timestamp, BERTopic]) ->
|
|
|
330
330
|
|
|
331
331
|
fig = plot_topics_for_model(selected_model)
|
|
332
332
|
|
|
333
|
-
st.plotly_chart(fig, config=PLOTLY_BUTTON_SAVE_CONFIG,
|
|
333
|
+
st.plotly_chart(fig, config=PLOTLY_BUTTON_SAVE_CONFIG, width="stretch")
|
|
334
334
|
|
|
335
335
|
st.dataframe(
|
|
336
336
|
selected_model.doc_info_df[
|
|
337
337
|
["Paragraph", "document_id", "Topic", "Representation", "source"]
|
|
338
338
|
],
|
|
339
|
-
|
|
339
|
+
width="stretch",
|
|
340
340
|
)
|
|
341
|
-
st.dataframe(selected_model.topic_info_df,
|
|
341
|
+
st.dataframe(selected_model.topic_info_df, width="stretch")
|
|
342
342
|
|
|
343
343
|
|
|
344
344
|
def display_signal_analysis(topic_number: int):
|