bertrend 0.3.4__tar.gz → 0.3.6__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.4 → bertrend-0.3.6}/PKG-INFO +5 -4
- {bertrend-0.3.4 → bertrend-0.3.6}/README.md +1 -1
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/config/bertopic_default_config.toml +1 -1
- bertrend-0.3.6/bertrend/demos/start_topic_analysis_app.sh +14 -0
- bertrend-0.3.6/bertrend/demos/start_weak_signals_app.sh +14 -0
- bertrend-0.3.6/bertrend/demos/topic_analysis/.streamlit/config.toml +6 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/topic_analysis/demo_pages/explore_topics.py +3 -1
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/topic_analysis/demo_pages/newsletters_generation.py +8 -0
- bertrend-0.3.6/bertrend/demos/weak_signals/.streamlit/config.toml +6 -0
- bertrend-0.3.6/bertrend/services/embedding_server/README.md +31 -0
- bertrend-0.3.6/bertrend/services/embedding_server/config/default_config.toml +7 -0
- bertrend-0.3.6/bertrend/services/embedding_server/config/settings.py +34 -0
- bertrend-0.3.6/bertrend/services/embedding_server/main.py +14 -0
- bertrend-0.3.6/bertrend/services/embedding_server/models.py +12 -0
- bertrend-0.3.6/bertrend/services/embedding_server/routers/authentication.py +45 -0
- bertrend-0.3.6/bertrend/services/embedding_server/routers/embeddings.py +39 -0
- bertrend-0.3.6/bertrend/services/embedding_server/routers/info.py +29 -0
- bertrend-0.3.6/bertrend/services/embedding_server/security.py +368 -0
- bertrend-0.3.6/bertrend/services/embedding_server/start.py +26 -0
- bertrend-0.3.6/bertrend/services/embedding_server/status.py +30 -0
- bertrend-0.3.6/bertrend/services/embedding_server/stop.py +14 -0
- bertrend-0.3.6/bertrend/tests/test_installation.py +103 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/trend_analysis/data_structure.py +1 -1
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/trend_analysis/prompts.py +84 -7
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/trend_analysis/weak_signals.py +1 -1
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/utils/data_loading.py +4 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/common/crontab_utils.py +28 -3
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/data_provider/data_provider.py +12 -8
- bertrend-0.3.6/bertrend_apps/exploration/curebot/.streamlit/config.toml +6 -0
- bertrend-0.3.6/bertrend_apps/exploration/curebot/__init__.py +4 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/curebot/app_utils.py +21 -6
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/curebot/prompts.py +1 -1
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/curebot/start_newsletter_generator.sh +6 -1
- bertrend-0.3.6/bertrend_apps/newsletters/__init__.py +4 -0
- bertrend-0.3.6/bertrend_apps/prospective_demo/.streamlit/config.toml +6 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/app.py +2 -2
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/feeds_config.py +60 -26
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/feeds_data.py +17 -11
- bertrend-0.3.6/bertrend_apps/prospective_demo/i18n_translations.py +380 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/models_info.py +77 -54
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/report_generation.py +25 -24
- bertrend-0.3.6/bertrend_apps/prospective_demo/start_demo.sh +16 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/pyproject.toml +4 -3
- bertrend-0.3.4/bertrend/demos/start_topic_analysis_app.sh +0 -9
- bertrend-0.3.4/bertrend/demos/start_weak_signals_app.sh +0 -9
- bertrend-0.3.4/bertrend/tests/test_installation.py +0 -181
- bertrend-0.3.4/bertrend_apps/exploration/curebot/old_veille_analyse.py +0 -298
- bertrend-0.3.4/bertrend_apps/prospective_demo/.streamlit/config.toml +0 -3
- bertrend-0.3.4/bertrend_apps/prospective_demo/i18n_translations.py +0 -91
- bertrend-0.3.4/bertrend_apps/prospective_demo/start_demo.sh +0 -9
- {bertrend-0.3.4 → bertrend-0.3.6}/AUTHORS.txt +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/LICENSE.md +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/BERTopicModel.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/BERTrend.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/config/bertrend_default_config.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/config/parameters.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/config/services_default_config.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/demos_utils/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/demos_utils/data_loading_component.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/demos_utils/embed_documents_component.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/demos_utils/i18n.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/demos_utils/i18n_translations.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/demos_utils/icons.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/demos_utils/parameters_component.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/demos_utils/state_utils.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/start_summarizer_app.sh +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/summarization/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/summarization/summarizer_app.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/topic_analysis/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/topic_analysis/app.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/topic_analysis/app_utils.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/topic_analysis/demo_pages/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/topic_analysis/demo_pages/temporal_visualizations.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/topic_analysis/demo_pages/topic_visualizations.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/topic_analysis/demo_pages/training_page.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/topic_analysis/i18n_translations.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/weak_signals/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/weak_signals/app.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/weak_signals/i18n_translations.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/weak_signals/visualizations_utils.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/llm_utils/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/llm_utils/newsletter.css +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/llm_utils/newsletter_features.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/llm_utils/openai_client.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/llm_utils/prompts.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/metrics/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/metrics/temporal_metrics_embedding.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/metrics/topic_metrics.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/resources/common_ngrams.json +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/resources/stopwords-en.json +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/resources/stopwords-fr.json +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/resources/stopwords-rte.json +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/services/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/services/authentication.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/services/embedding_client.py +0 -0
- {bertrend-0.3.4/bertrend/services/summary → bertrend-0.3.6/bertrend/services/embedding_server}/__init__.py +0 -0
- {bertrend-0.3.4/bertrend/tests → bertrend-0.3.6/bertrend/services/embedding_server/routers}/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/services/embedding_service.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/services/summarizer.py +0 -0
- {bertrend-0.3.4/bertrend/topic_analysis → bertrend-0.3.6/bertrend/services/summary}/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/services/summary/abstractive_summarizer.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/services/summary/chatgpt_summarizer.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/services/summary/extractive_summarizer.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/services/summary/lexrank.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/services/summary/prompts.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/README_integration_tests.md +0 -0
- {bertrend-0.3.4/bertrend/trend_analysis → bertrend-0.3.6/bertrend/tests}/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/conftest.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_abstractive_summarizer.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_bertrend.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_cache_utils.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_chatgpt_summarizer.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_config_utils.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_data_loading.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_data_structure.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_embedding_client.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_extractive_summarizer.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_integration.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_newsletter_features.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_openai_client.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_representative_docs.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_summarizer.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_temporal_metrics_embedding.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_topic_description.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_topic_metrics.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_topic_model.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_trend_analysis_data_structure.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_trend_analysis_prompts.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_trend_analysis_visualizations.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_trend_analysis_weak_signals.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_utils_init.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/tests/test_visualizations.py +0 -0
- {bertrend-0.3.4/bertrend_apps → bertrend-0.3.6/bertrend/topic_analysis}/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/topic_analysis/data_structure.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/topic_analysis/prompts.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/topic_analysis/representative_docs.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/topic_analysis/topic_description.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/topic_analysis/visualizations.py +0 -0
- {bertrend-0.3.4/bertrend_apps/common → bertrend-0.3.6/bertrend/trend_analysis}/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/trend_analysis/signal_llm_template_en.html +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/trend_analysis/signal_llm_template_fr.html +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/trend_analysis/visualizations.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/utils/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/utils/cache_utils.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend/utils/config_utils.py +0 -0
- {bertrend-0.3.4/bertrend_apps/exploration → bertrend-0.3.6/bertrend_apps}/__init__.py +0 -0
- {bertrend-0.3.4/bertrend_apps/exploration/curebot → bertrend-0.3.6/bertrend_apps/common}/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/common/mail_utils.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/config/feeds/arxiv_feed.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/config/feeds/decarbonation_feed.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/config/feeds/llm_en_feed.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/config/feeds/llm_feed.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/config/feeds/nlp_feed.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/config/feeds/rte_feed.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/config/gmail_credentials.json +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/config/newsletters/arxiv_newsletter_from_last.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/config/newsletters/arxiv_newsletter_from_scratch.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/config/newsletters/decarbonation_newsletter_from_last.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/config/newsletters/decarbonation_newsletter_from_scratch.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/config/newsletters/llm_en_newsletter_from_last.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/config/newsletters/llm_newsletter_from_last.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/config/newsletters/nlp_newsletter_from_last.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/config/newsletters/rte_newsletter_from_last.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/config/newsletters/rte_newsletter_from_scratch.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/data_provider/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/data_provider/__main__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/data_provider/arxiv_provider.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/data_provider/atom_feed_provider.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/data_provider/bing_news_provider.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/data_provider/google_news_provider.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/data_provider/newscatcher_provider.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/data_provider/utils.py +0 -0
- {bertrend-0.3.4/bertrend_apps/newsletters → bertrend-0.3.6/bertrend_apps/exploration}/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/curebot/app.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/curebot/config.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/curebot/import_extraction_article.ipynb +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/curebot/tabs/tab1.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/curebot/tabs/tab2.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/curebot/tabs/tab3.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/dataviz/Main_page.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/dataviz/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/dataviz/pages/1_Data_feeds.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/geolocalization/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/geolocalization/entity_utils.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/geolocalization/spacy/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/geolocalization/spacy/common_factory.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/geolocalization/spacy/dbpedia.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/geolocalization/spacy/nlp.config +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/exploration/geolocalization/spacy/utils.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/install_feeds_and_newsletters.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/newsletters/__main__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/.streamlit/secrets.toml +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/__init__.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/authentication.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/dashboard_analysis.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/dashboard_common.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/dashboard_signals.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/feeds_common.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/llm_utils.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/perf_utils.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/process_new_data.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/report_template.html +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/report_utils.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/prospective_demo/streamlit_utils.py +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/start_apps.sh +0 -0
- {bertrend-0.3.4 → bertrend-0.3.6}/bertrend_apps/stop_apps.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: bertrend
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.6
|
|
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
|
Keywords: topics,BERTopic,transformers,weak signals,LLM
|
|
@@ -11,6 +11,7 @@ Maintainer-email: jerome.picault@rte-france.com
|
|
|
11
11
|
Requires-Python: >=3.12,<4.0
|
|
12
12
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
13
13
|
Provides-Extra: apps
|
|
14
|
+
Requires-Dist: PyJWT (>=2.10.1)
|
|
14
15
|
Requires-Dist: Pyqtree (==1.0.0)
|
|
15
16
|
Requires-Dist: arxiv (>=2.2.0) ; extra == "apps"
|
|
16
17
|
Requires-Dist: bertopic (==0.16.2)
|
|
@@ -48,7 +49,7 @@ Requires-Dist: plotly (>=5.24.1)
|
|
|
48
49
|
Requires-Dist: plotly-resampler (>=0.10.0)
|
|
49
50
|
Requires-Dist: pygooglenews (>=0.1.3) ; extra == "apps"
|
|
50
51
|
Requires-Dist: pylabeladjust (==0.1.13)
|
|
51
|
-
Requires-Dist: pytest (>=8.
|
|
52
|
+
Requires-Dist: pytest (>=8.4.0)
|
|
52
53
|
Requires-Dist: requests (>=2.32.3)
|
|
53
54
|
Requires-Dist: scikit-learn (>=1.5.2)
|
|
54
55
|
Requires-Dist: scipy (==1.12)
|
|
@@ -56,7 +57,7 @@ Requires-Dist: seaborn (>=0.13.2)
|
|
|
56
57
|
Requires-Dist: sentence-transformers (==3.0.1)
|
|
57
58
|
Requires-Dist: sentencepiece (>=0.2.0)
|
|
58
59
|
Requires-Dist: starlette (>=0.46.2)
|
|
59
|
-
Requires-Dist: streamlit (>=1.45.
|
|
60
|
+
Requires-Dist: streamlit (>=1.45.1)
|
|
60
61
|
Requires-Dist: streamlit-code-editor (>=0.1.22)
|
|
61
62
|
Requires-Dist: thefuzz (>=0.22.1)
|
|
62
63
|
Requires-Dist: tiktoken (>=0.8.0)
|
|
@@ -259,7 +260,7 @@ We recommend using a remote embedding service (this is now the default config) a
|
|
|
259
260
|
|
|
260
261
|
The change of configuration can be done in: [services_default_config.toml](bertrend/config/services_default_config.toml).
|
|
261
262
|
|
|
262
|
-
An example of a very simple implementation to deploy a separate embedding service can be found here:
|
|
263
|
+
An example of a very simple implementation to deploy a separate embedding service can be found here: `bertrend/services/embedding_server`
|
|
263
264
|
|
|
264
265
|
|
|
265
266
|

|
|
@@ -186,7 +186,7 @@ We recommend using a remote embedding service (this is now the default config) a
|
|
|
186
186
|
|
|
187
187
|
The change of configuration can be done in: [services_default_config.toml](bertrend/config/services_default_config.toml).
|
|
188
188
|
|
|
189
|
-
An example of a very simple implementation to deploy a separate embedding service can be found here:
|
|
189
|
+
An example of a very simple implementation to deploy a separate embedding service can be found here: `bertrend/services/embedding_server`
|
|
190
190
|
|
|
191
191
|
|
|
192
192
|

|
|
@@ -30,7 +30,7 @@ prediction_data = true
|
|
|
30
30
|
|
|
31
31
|
# CountVectorizer: https://scikit-learn.org/1.5/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html
|
|
32
32
|
[vectorizer_model]
|
|
33
|
-
ngram_range = [1,
|
|
33
|
+
ngram_range = [1, 2]
|
|
34
34
|
stop_words = true # If true, will check `language` parameter and load associated stopwords file
|
|
35
35
|
min_df = 2
|
|
36
36
|
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
+
|
|
9
|
+
# Set logs directory and create if not exists
|
|
10
|
+
export BERTREND_LOGS_DIR=$BERTREND_BASE_DIR/logs/bertrend
|
|
11
|
+
mkdir -p $BERTREND_LOGS_DIR
|
|
12
|
+
|
|
13
|
+
echo "Starting BERTrend Topic Analysis demo"
|
|
14
|
+
cd `pwd`/topic_analysis && CUDA_VISIBLE_DEVICES=0 streamlit run app.py 2>&1 | tee -a $BERTREND_LOGS_DIR/topic_analysis_demo.log
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
+
|
|
9
|
+
# Set logs directory and create if not exists
|
|
10
|
+
export BERTREND_LOGS_DIR=$BERTREND_BASE_DIR/logs/bertrend
|
|
11
|
+
mkdir -p $BERTREND_LOGS_DIR
|
|
12
|
+
|
|
13
|
+
echo "Starting BERTrend Weak Signal Analysis demo"
|
|
14
|
+
cd `pwd`/weak_signals && CUDA_VISIBLE_DEVICES=0 streamlit run app.py 2>&1 | tee -a $BERTREND_LOGS_DIR/weak_signals_demo.log
|
{bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/topic_analysis/demo_pages/explore_topics.py
RENAMED
|
@@ -291,7 +291,9 @@ def _display_topic_description(filtered_df: pd.DataFrame):
|
|
|
291
291
|
):
|
|
292
292
|
with st.spinner(translate("generating_description")):
|
|
293
293
|
language_code = (
|
|
294
|
-
"fr"
|
|
294
|
+
"fr"
|
|
295
|
+
if SessionStateManager.get("internationalization_language") == "French"
|
|
296
|
+
else "en"
|
|
295
297
|
)
|
|
296
298
|
gpt_description = generate_topic_description(
|
|
297
299
|
st.session_state["topic_model"],
|
{bertrend-0.3.4 → bertrend-0.3.6}/bertrend/demos/topic_analysis/demo_pages/newsletters_generation.py
RENAMED
|
@@ -14,6 +14,7 @@ from bertrend.demos.demos_utils.state_utils import (
|
|
|
14
14
|
save_widget_state,
|
|
15
15
|
restore_widget_state,
|
|
16
16
|
register_multiple_widget,
|
|
17
|
+
SessionStateManager,
|
|
17
18
|
)
|
|
18
19
|
from bertrend.services.summary.abstractive_summarizer import AbstractiveSummarizer
|
|
19
20
|
from bertrend.services.summary.chatgpt_summarizer import GPTSummarizer
|
|
@@ -48,6 +49,12 @@ def generate_newsletter_wrapper(
|
|
|
48
49
|
else st.session_state["newsletter_nb_docs"]
|
|
49
50
|
)
|
|
50
51
|
|
|
52
|
+
language_code = (
|
|
53
|
+
"fr"
|
|
54
|
+
if SessionStateManager.get("internationalization_language") == "French"
|
|
55
|
+
else "en"
|
|
56
|
+
)
|
|
57
|
+
|
|
51
58
|
return generate_newsletter(
|
|
52
59
|
topic_model=st.session_state["topic_model"],
|
|
53
60
|
df=df,
|
|
@@ -60,6 +67,7 @@ def generate_newsletter_wrapper(
|
|
|
60
67
|
st.session_state["summarizer_classname"]
|
|
61
68
|
],
|
|
62
69
|
summary_mode=st.session_state["summary_mode"],
|
|
70
|
+
prompt_language=language_code,
|
|
63
71
|
)
|
|
64
72
|
|
|
65
73
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# How to use the embedding server
|
|
2
|
+
|
|
3
|
+
## Launch the embedding server
|
|
4
|
+
|
|
5
|
+
- check the file `config/default_config.toml`
|
|
6
|
+
|
|
7
|
+
- run the embedding server
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
python start.py
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Check the embedding server
|
|
14
|
+
Ensure the API is launched.
|
|
15
|
+
|
|
16
|
+
```python
|
|
17
|
+
from bertrend.services.embedding_client import EmbeddingAPIClient
|
|
18
|
+
|
|
19
|
+
embedding_service_endpoint = "https://yourservice:1234"
|
|
20
|
+
|
|
21
|
+
# Initialize the API
|
|
22
|
+
api = EmbeddingAPIClient(embedding_service_endpoint)
|
|
23
|
+
|
|
24
|
+
# Get embedding model name
|
|
25
|
+
print(api.get_api_model_name())
|
|
26
|
+
|
|
27
|
+
# Transform text to embedding
|
|
28
|
+
text = "Hello, world!"
|
|
29
|
+
embedding = api.embed_query(text)
|
|
30
|
+
print(embedding)
|
|
31
|
+
```
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Copyright (c) 2024, 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
|
+
from pathlib import Path
|
|
8
|
+
import tomllib
|
|
9
|
+
from pydantic_settings import BaseSettings
|
|
10
|
+
|
|
11
|
+
DEFAULT_CONFIG_FILE = Path(__file__).parent / "default_config.toml"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class EmbeddingAPIConfig(BaseSettings):
|
|
15
|
+
host: str
|
|
16
|
+
port: int
|
|
17
|
+
model_name: str
|
|
18
|
+
number_workers: int
|
|
19
|
+
cuda_visible_devices: str
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# Use environment variable to specify which config to load
|
|
23
|
+
def get_config() -> EmbeddingAPIConfig:
|
|
24
|
+
"""
|
|
25
|
+
Return the configuration for the embedding API.
|
|
26
|
+
The configuration is loaded from a toml file.
|
|
27
|
+
The path to the toml file can be specified using the environment variable `EMBEDDING_API_CONFIG_FILE`.
|
|
28
|
+
If the environment variable is not set, the default configuration file is used.
|
|
29
|
+
"""
|
|
30
|
+
config_file = os.environ.get("EMBEDDING_API_CONFIG_FILE", None)
|
|
31
|
+
if config_file is None:
|
|
32
|
+
config_file = DEFAULT_CONFIG_FILE
|
|
33
|
+
with open(config_file, "rb") as f:
|
|
34
|
+
return EmbeddingAPIConfig(**tomllib.load(f))
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Copyright (c) 2024, 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.embedding_server.routers import embeddings, info, authentication
|
|
9
|
+
|
|
10
|
+
app = FastAPI()
|
|
11
|
+
|
|
12
|
+
app.include_router(info.router, tags=["Info"])
|
|
13
|
+
app.include_router(embeddings.router, tags=["Embedding"])
|
|
14
|
+
app.include_router(authentication.router, tags=["Authentication"])
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Copyright (c) 2024, 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
|
+
# Pydantic class for FastAPI typing control
|
|
7
|
+
from pydantic import BaseModel
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class InputText(BaseModel):
|
|
11
|
+
text: str | list[str]
|
|
12
|
+
show_progress_bar: bool
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Copyright (c) 2024, 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
|
+
from typing import Annotated
|
|
6
|
+
|
|
7
|
+
from fastapi import Depends, APIRouter, Security
|
|
8
|
+
from fastapi.security import OAuth2PasswordRequestForm
|
|
9
|
+
|
|
10
|
+
from bertrend.services.embedding_server.security import (
|
|
11
|
+
ADMIN,
|
|
12
|
+
Token,
|
|
13
|
+
TokenData,
|
|
14
|
+
get_token,
|
|
15
|
+
list_registered_clients,
|
|
16
|
+
get_current_client,
|
|
17
|
+
view_rate_limits,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
router = APIRouter()
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@router.post("/token")
|
|
24
|
+
async def login_for_access_token(
|
|
25
|
+
form_data: Annotated[OAuth2PasswordRequestForm, Depends()],
|
|
26
|
+
) -> Token:
|
|
27
|
+
return get_token(form_data)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@router.get(
|
|
31
|
+
"/list_registered_clients", summary="List registered clients (requires admin scope)"
|
|
32
|
+
)
|
|
33
|
+
async def list_clients(
|
|
34
|
+
current_client: TokenData = Security(get_current_client, scopes=[ADMIN])
|
|
35
|
+
):
|
|
36
|
+
return list_registered_clients()
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@router.get(
|
|
40
|
+
"/rate-limits", summary="Check current rate limit usage (requires admin scope)"
|
|
41
|
+
)
|
|
42
|
+
async def get_rate_limits(
|
|
43
|
+
current_client: TokenData = Security(get_current_client, scopes=[ADMIN]),
|
|
44
|
+
):
|
|
45
|
+
return view_rate_limits()
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Copyright (c) 2024, 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, Security
|
|
7
|
+
from loguru import logger
|
|
8
|
+
from sentence_transformers import SentenceTransformer
|
|
9
|
+
|
|
10
|
+
from bertrend.services.embedding_server.security import (
|
|
11
|
+
TokenData,
|
|
12
|
+
get_current_client,
|
|
13
|
+
FULL_ACCESS,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
from bertrend.services.embedding_server.config.settings import get_config
|
|
17
|
+
from bertrend.services.embedding_server.models import InputText
|
|
18
|
+
|
|
19
|
+
# Load the configuration
|
|
20
|
+
CONFIG = get_config()
|
|
21
|
+
|
|
22
|
+
# Load embedding model
|
|
23
|
+
logger.debug(f"Loading embedding model : {CONFIG.model_name}")
|
|
24
|
+
EMBEDDING_MODEL = SentenceTransformer(CONFIG.model_name, trust_remote_code=True)
|
|
25
|
+
|
|
26
|
+
# Fix max model length error
|
|
27
|
+
if EMBEDDING_MODEL.max_seq_length == 514:
|
|
28
|
+
EMBEDDING_MODEL.max_seq_length = 512
|
|
29
|
+
router = APIRouter()
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@router.post("/encode", summary="Embed data (requires full_access scope)")
|
|
33
|
+
def embed(
|
|
34
|
+
input: InputText,
|
|
35
|
+
current_client: TokenData = Security(get_current_client, scopes=[FULL_ACCESS]),
|
|
36
|
+
):
|
|
37
|
+
logger.debug(f"Request by: {current_client.client_id}")
|
|
38
|
+
emb = EMBEDDING_MODEL.encode(input.text, show_progress_bar=input.show_progress_bar)
|
|
39
|
+
return {"embeddings": emb.tolist()}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Copyright (c) 2024, 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
|
+
|
|
8
|
+
from bertrend.services.embedding_server.config.settings import get_config
|
|
9
|
+
|
|
10
|
+
# Load the configuration
|
|
11
|
+
CONFIG = get_config()
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
router = APIRouter()
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@router.get("/health")
|
|
18
|
+
def health():
|
|
19
|
+
return {"status": "ok"}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@router.get("/model_name")
|
|
23
|
+
def get_model_name():
|
|
24
|
+
return CONFIG.model_name
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@router.get("/num_workers")
|
|
28
|
+
def get_num_workers():
|
|
29
|
+
return CONFIG.number_workers
|