bertrend 0.4.2__tar.gz → 0.4.4__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.2 → bertrend-0.4.4}/PKG-INFO +43 -49
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_monitor/app.py +33 -9
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/demos_utils/icons.py +7 -1
- bertrend-0.4.4/bertrend/services/scheduling/dashboard_scheduling.py +280 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_temporal_metrics_embedding.py +486 -28
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_visualizations.py +2 -2
- bertrend-0.4.4/bertrend/tests/demos/summarization/test_summarizer_app.py +321 -0
- bertrend-0.4.4/bertrend/tests/services/bertrend/__init__.py +5 -0
- bertrend-0.4.4/bertrend/tests/services/bertrend/test_routers_newsletters.py +115 -0
- bertrend-0.4.4/bertrend/tests/services/embedding_server/test_models.py +35 -0
- bertrend-0.4.4/bertrend/tests/services/embedding_server/test_routers.py +337 -0
- bertrend-0.4.4/bertrend/tests/services/embedding_server/test_security.py +373 -0
- bertrend-0.4.4/bertrend/tests/services/embedding_server/test_settings.py +54 -0
- bertrend-0.4.4/bertrend/tests/services/summarizer/__init__.py +4 -0
- bertrend-0.4.4/bertrend/tests/services/summary/__init__.py +4 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/test_installation.py +0 -6
- bertrend-0.4.4/bertrend/tests/utils/__init__.py +4 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_apscheduler_utils.py +135 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/pyproject.toml +43 -49
- bertrend-0.4.2/bertrend/services/scheduling/dashboard.html +0 -699
- {bertrend-0.4.2 → bertrend-0.4.4}/AUTHORS.txt +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/LICENSE.md +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/README.md +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/BERTopicModel.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/BERTrend.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/article_scoring/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/article_scoring/article_scoring.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/article_scoring/prompts.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/article_scoring/scoring_agent.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/common/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/common/apscheduler_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/common/crontab_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/common/date_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/common/mail_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/common/scheduler_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/feeds/arxiv_feed.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/feeds/decarbonation_feed.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/feeds/feed_deep_research_example.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/feeds/llm_en_feed.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/feeds/llm_feed.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/feeds/nlp_feed.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/feeds/rte_feed.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/newsletters/arxiv_newsletter_from_last.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/newsletters/decarbonation_newsletter_from_last.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/newsletters/llm_en_newsletter_from_last.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/newsletters/llm_newsletter_from_last.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/newsletters/nlp_newsletter_from_last.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/config/newsletters/rte_newsletter_from_last.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/__main__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/arxiv_provider.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/atom_feed_provider.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/bing_news_provider.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/data_provider.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/data_provider_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/deep_research_provider.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/google_news_provider.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/newscatcher_provider.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/rss_feed_provider.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/data_provider/utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/.streamlit/config.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/app.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/app_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/config.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/import_extraction_article.ipynb +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/prompts.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/start_newsletter_generator.sh +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/tabs/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/tabs/tab1.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/tabs/tab2.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/curebot/tabs/tab3.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/geoviz/.streamlit/config.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/geoviz/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/geoviz/app.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/geoviz/backend.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/start_apps.sh +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/exploration/stop_apps.sh +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/install_feeds_and_newsletters.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/newsletters/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/newsletters/__main__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/newsletters/newsletter_generation.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/newsletters/utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/.streamlit/config.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/.streamlit/secrets.toml.example +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/app.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/authentication.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/automated_report_generation.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/dashboard_analysis.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/dashboard_common.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/dashboard_comparative.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/dashboard_signals.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/data_model.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/detailed_report_template.html +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/feeds_common.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/feeds_config.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/feeds_data.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/i18n.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/i18n_translations.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/llm_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/models_info.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/perf_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/process_new_data.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/report_generation.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/report_generation_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/start_demo.sh +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/prospective_demo/utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/bertrend_service.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/config/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/config/default_config.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/config/settings.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/models/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/models/bertrend_app_models.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/models/data_provider_models.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/models/newsletters_models.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/routers/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/routers/bertrend_app.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/routers/data_provider.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/routers/info.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/routers/newsletters.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/start.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/status.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/bertrend/stop.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_management/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_management/bertrend_worker.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_management/client.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_management/docker-compose-rabbitmq.yml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_management/queue_manager.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_management/rabbitmq_config.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_management/start_rabbitmq.sh +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_monitor/.streamlit/config.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/queue_monitor/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/utils/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/bertrend_apps/services/utils/logging_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/config/bertopic_default_config.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/config/bertrend_default_config.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/config/parameters.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/config/services_default_config.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/demos_utils/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/demos_utils/data_loading_component.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/demos_utils/embed_documents_component.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/demos_utils/i18n.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/demos_utils/i18n_translations.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/demos_utils/parameters_component.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/demos_utils/state_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/start_summarizer_app.sh +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/start_topic_analysis_app.sh +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/start_weak_signals_app.sh +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/streamlit_components/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/streamlit_components/clickable_df_component.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/streamlit_components/input_with_pills_component.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/summarization/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/summarization/summarizer_app.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/.streamlit/config.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/app.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/app_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/demo_pages/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/demo_pages/explore_topics.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/demo_pages/newsletters_generation.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/demo_pages/temporal_visualizations.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/demo_pages/topic_visualizations.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/demo_pages/training_page.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/topic_analysis/i18n_translations.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/weak_signals/.streamlit/config.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/weak_signals/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/weak_signals/app.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/weak_signals/i18n_translations.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/demos/weak_signals/visualizations_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/agent_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/newsletter.css +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/newsletter_features.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/newsletter_model.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/newsletter_outlook_template.html +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/newsletter_template.html +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/openai_client.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/llm_utils/prompts.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/metrics/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/metrics/temporal_metrics_embedding.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/metrics/topic_metrics.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/resources/common_ngrams.json +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/resources/stopwords-en.json +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/resources/stopwords-fr.json +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/resources/stopwords-rte.json +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/authentication.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/cert.pem +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_client.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/README.md +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/bertrend_client_registry.json +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/config/default_config.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/config/settings.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/main.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/models.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/requirements.txt +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/routers/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/routers/authentication.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/routers/embeddings.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/routers/info.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/security.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/start.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/status.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_server/stop.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/embedding_service.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/key.pem +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/.dockerignore +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/Docker_setup.md +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/Dockerfile +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/docker-compose.yml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/job_utils/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/job_utils/job_functions.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/models/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/models/scheduling_models.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/requirements.txt +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/routers/info.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/routers/scheduling.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/scheduling_service.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/scheduling/start_docker_scheduling_service.sh +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summarizer.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary/abstractive_summarizer.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary/chatgpt_summarizer.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary/extractive_summarizer.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary/lexrank.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary/prompts.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_client.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/config/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/config/default_config.toml +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/config/settings.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/main.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/models.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/routers/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/routers/info.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/routers/summarize.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/services/summary_server/start.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/README_integration_tests.md +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/apps/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/apps/test_process_new_data.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/conftest.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_bertrend.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_data_structure.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_representative_docs.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_topic_description.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_topic_metrics.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_topic_model.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_trend_analysis_data_structure.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_trend_analysis_prompts.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_trend_analysis_visualizations.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/core/test_trend_analysis_weak_signals.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_arxiv_provider.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_bing_news_provider.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_data_provider_base.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_data_provider_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_deep_research_live.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_deep_research_provider.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_google_news_provider.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_newscatcher_provider.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/data_provider/test_rss_atom_provider.py +0 -0
- {bertrend-0.4.2/bertrend/tests/llm → bertrend-0.4.4/bertrend/tests/demos}/__init__.py +0 -0
- {bertrend-0.4.2/bertrend/tests/services → bertrend-0.4.4/bertrend/tests/demos/summarization}/__init__.py +0 -0
- {bertrend-0.4.2/bertrend/tests/services/embedding → bertrend-0.4.4/bertrend/tests/llm}/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/llm/test_agent_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/llm/test_article_scoring.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/llm/test_article_scoring_models.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/llm/test_newsletter_features.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/llm/test_newsletter_model.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/llm/test_openai_client.py +0 -0
- {bertrend-0.4.2/bertrend/tests/services/queue → bertrend-0.4.4/bertrend/tests/services}/__init__.py +0 -0
- {bertrend-0.4.2/bertrend/tests/apps → bertrend-0.4.4/bertrend/tests/services/bertrend}/test_bertrend_service.py +0 -0
- {bertrend-0.4.2/bertrend/tests/apps → bertrend-0.4.4/bertrend/tests/services/bertrend}/test_models.py +0 -0
- {bertrend-0.4.2/bertrend/tests/apps → bertrend-0.4.4/bertrend/tests/services/bertrend}/test_routers_bertrend_app.py +0 -0
- {bertrend-0.4.2/bertrend/tests/apps → bertrend-0.4.4/bertrend/tests/services/bertrend}/test_routers_info.py +0 -0
- {bertrend-0.4.2/bertrend/tests/services/scheduling → bertrend-0.4.4/bertrend/tests/services/embedding}/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/embedding/test_embedding_client.py +0 -0
- {bertrend-0.4.2/bertrend/tests/services/summarizer → bertrend-0.4.4/bertrend/tests/services/embedding_server}/__init__.py +0 -0
- {bertrend-0.4.2/bertrend/tests/services/summary → bertrend-0.4.4/bertrend/tests/services/queue}/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/queue/test_bertrend_worker.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/queue/test_client.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/queue/test_queue_manager.py +0 -0
- {bertrend-0.4.2/bertrend/tests/utils → bertrend-0.4.4/bertrend/tests/services/scheduling}/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/scheduling/test_job_exception_fix.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/scheduling/test_scheduling_service.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/scheduling/test_stress_test.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/summarizer/test_abstractive_summarizer.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/summarizer/test_chatgpt_summarizer.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/summarizer/test_extractive_summarizer.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/summarizer/test_summarizer.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/summary/test_summary_client.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/summary/test_summary_config.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/services/summary/test_summary_server.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/test_integration.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_cache_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_config_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_crontab_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_data_loading.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_date_utils.py +0 -0
- {bertrend-0.4.2/bertrend/tests/apps → bertrend-0.4.4/bertrend/tests/utils}/test_lazy_scheduler.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_mail_utils.py +0 -0
- {bertrend-0.4.2/bertrend/tests/apps → bertrend-0.4.4/bertrend/tests/utils}/test_multiworker.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_scheduler_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/tests/utils/test_utils_init.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/topic_analysis/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/topic_analysis/data_structure.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/topic_analysis/prompts.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/topic_analysis/representative_docs.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/topic_analysis/topic_description.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/topic_analysis/visualizations.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/trend_analysis/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/trend_analysis/data_structure.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/trend_analysis/prompts.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/trend_analysis/signal_llm_template_en.html +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/trend_analysis/signal_llm_template_fr.html +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/trend_analysis/visualizations.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/trend_analysis/weak_signals.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/utils/__init__.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/utils/cache_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/bertrend/utils/config_utils.py +0 -0
- {bertrend-0.4.2 → bertrend-0.4.4}/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.4
|
|
4
4
|
Summary: BERTrend analyses topic evolution over time using state-of-the-art transformer models: topic modelling and LLM
|
|
5
5
|
License: LICENSE.md
|
|
6
6
|
License-File: AUTHORS.txt
|
|
@@ -12,75 +12,69 @@ Maintainer: Jérôme Picault
|
|
|
12
12
|
Maintainer-email: jerome.picault@rte-france.com
|
|
13
13
|
Requires-Python: >=3.12,<4.0
|
|
14
14
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
15
|
-
Requires-Dist: APScheduler (>=3.11.
|
|
16
|
-
Requires-Dist: PyJWT (>=2.
|
|
17
|
-
Requires-Dist:
|
|
18
|
-
Requires-Dist: SQLAlchemy (>=2.0.40)
|
|
15
|
+
Requires-Dist: APScheduler (>=3.11.2)
|
|
16
|
+
Requires-Dist: PyJWT (>=2.11.0)
|
|
17
|
+
Requires-Dist: SQLAlchemy (>=2.0.46)
|
|
19
18
|
Requires-Dist: aio-pika (>=9.5.5)
|
|
20
|
-
Requires-Dist: arxiv (>=2.
|
|
21
|
-
Requires-Dist: bertopic (
|
|
22
|
-
Requires-Dist:
|
|
23
|
-
Requires-Dist:
|
|
24
|
-
Requires-Dist:
|
|
25
|
-
Requires-Dist:
|
|
26
|
-
Requires-Dist: datamapplot (==0.3.0)
|
|
27
|
-
Requires-Dist: dateparser (>=1.2.0)
|
|
19
|
+
Requires-Dist: arxiv (>=2.4.0)
|
|
20
|
+
Requires-Dist: bertopic (>=0.16.2)
|
|
21
|
+
Requires-Dist: coverage (>=7.13.2)
|
|
22
|
+
Requires-Dist: cron-descriptor (>=2.0.6)
|
|
23
|
+
Requires-Dist: datamapplot (>=0.6.4)
|
|
24
|
+
Requires-Dist: dateparser (>=1.2.2)
|
|
28
25
|
Requires-Dist: ddgs (>=9.10.0)
|
|
29
|
-
Requires-Dist: dill (>=0.4.
|
|
30
|
-
Requires-Dist: fastapi (>=0.
|
|
31
|
-
Requires-Dist: feedparser (>=6.0.
|
|
26
|
+
Requires-Dist: dill (>=0.4.1)
|
|
27
|
+
Requires-Dist: fastapi (>=0.128.0)
|
|
28
|
+
Requires-Dist: feedparser (>=6.0.12)
|
|
32
29
|
Requires-Dist: folium (>=0.20.0)
|
|
33
|
-
Requires-Dist: gensim (>=4.
|
|
30
|
+
Requires-Dist: gensim (>=4.4.0)
|
|
34
31
|
Requires-Dist: geopy (>=2.4.1)
|
|
35
|
-
Requires-Dist: google-api-python-client (>=2.
|
|
36
|
-
Requires-Dist: google-auth-oauthlib (>=1.2.
|
|
32
|
+
Requires-Dist: google-api-python-client (>=2.189.0)
|
|
33
|
+
Requires-Dist: google-auth-oauthlib (>=1.2.4)
|
|
37
34
|
Requires-Dist: googlenewsdecoder (>=0.1.7)
|
|
38
|
-
Requires-Dist: goose3 (>=3.1.
|
|
39
|
-
Requires-Dist: hdbscan (>=0.8.
|
|
35
|
+
Requires-Dist: goose3 (>=3.1.21)
|
|
36
|
+
Requires-Dist: hdbscan (>=0.8.41)
|
|
40
37
|
Requires-Dist: ipython (>=8.28.0)
|
|
41
|
-
Requires-Dist: joblib (>=1.
|
|
38
|
+
Requires-Dist: joblib (>=1.5.3)
|
|
42
39
|
Requires-Dist: jsonlines (>=4.0.0)
|
|
43
|
-
Requires-Dist: langchain-core (>=
|
|
40
|
+
Requires-Dist: langchain-core (>=1.2.9)
|
|
44
41
|
Requires-Dist: langdetect (>=1.0.9)
|
|
45
42
|
Requires-Dist: loguru (>=0.7.3)
|
|
46
|
-
Requires-Dist: lxml-html-clean (>=0.
|
|
47
|
-
Requires-Dist: markdown (>=3.
|
|
43
|
+
Requires-Dist: lxml-html-clean (>=0.4.3)
|
|
44
|
+
Requires-Dist: markdown (>=3.10.1)
|
|
48
45
|
Requires-Dist: newscatcher-sdk (>=1.4.0)
|
|
49
46
|
Requires-Dist: newspaper4k (>=0.9.3.1)
|
|
50
|
-
Requires-Dist:
|
|
51
|
-
Requires-Dist:
|
|
52
|
-
Requires-Dist: openai
|
|
47
|
+
Requires-Dist: nicegui[highcharts] (>=3.8.0)
|
|
48
|
+
Requires-Dist: nltk (>=3.9.2)
|
|
49
|
+
Requires-Dist: openai (>=2.18.0)
|
|
50
|
+
Requires-Dist: openai-agents[litellm] (>=0.8.3)
|
|
53
51
|
Requires-Dist: openpyxl (>=3.1.5)
|
|
54
|
-
Requires-Dist:
|
|
55
|
-
Requires-Dist: pandas (>=2.2.2)
|
|
52
|
+
Requires-Dist: pandas (<3.0.0)
|
|
56
53
|
Requires-Dist: pika (>=1.3.2)
|
|
57
|
-
Requires-Dist: plotly (>=5.
|
|
58
|
-
Requires-Dist: plotly-resampler (>=0.
|
|
59
|
-
Requires-Dist: psutil (>=7.2.
|
|
60
|
-
Requires-Dist: pyarrow (>=21.0.0)
|
|
54
|
+
Requires-Dist: plotly (>=6.5.2)
|
|
55
|
+
Requires-Dist: plotly-resampler (>=0.11.0)
|
|
56
|
+
Requires-Dist: psutil (>=7.2.2)
|
|
61
57
|
Requires-Dist: pygooglenews (>=0.1.3)
|
|
62
|
-
Requires-Dist:
|
|
63
|
-
Requires-Dist: pytest (>=8.4.0)
|
|
58
|
+
Requires-Dist: pytest
|
|
64
59
|
Requires-Dist: pytest-asyncio
|
|
65
|
-
Requires-Dist: python-dotenv (>=1.
|
|
60
|
+
Requires-Dist: python-dotenv (>=1.2.1)
|
|
66
61
|
Requires-Dist: requests (>=2.32.3)
|
|
67
|
-
Requires-Dist: ruff (>=0.
|
|
68
|
-
Requires-Dist: scikit-learn (>=1.
|
|
62
|
+
Requires-Dist: ruff (>=0.15.0)
|
|
63
|
+
Requires-Dist: scikit-learn (>=1.8.0)
|
|
69
64
|
Requires-Dist: seaborn (>=0.13.2)
|
|
70
|
-
Requires-Dist: sentence-transformers (
|
|
71
|
-
Requires-Dist:
|
|
72
|
-
Requires-Dist:
|
|
73
|
-
Requires-Dist: streamlit (>=1.51.0)
|
|
65
|
+
Requires-Dist: sentence-transformers (>=5.2.2)
|
|
66
|
+
Requires-Dist: starlette (>=0.52.1)
|
|
67
|
+
Requires-Dist: streamlit (>=1.54.0)
|
|
74
68
|
Requires-Dist: streamlit-code-editor (>=0.1.22)
|
|
75
69
|
Requires-Dist: streamlit-folium (>=0.26.1)
|
|
76
70
|
Requires-Dist: supervisor (>=4.3.0)
|
|
77
71
|
Requires-Dist: thefuzz (>=0.22.1)
|
|
78
|
-
Requires-Dist: tiktoken (>=0.
|
|
79
|
-
Requires-Dist: tldextract (>=
|
|
80
|
-
Requires-Dist: torch (>=2.
|
|
81
|
-
Requires-Dist: tqdm (>=4.67.
|
|
82
|
-
Requires-Dist: typer (>=0.
|
|
83
|
-
Requires-Dist: umap-learn (>=0.5.
|
|
72
|
+
Requires-Dist: tiktoken (>=0.12.0)
|
|
73
|
+
Requires-Dist: tldextract (>=5.3.1)
|
|
74
|
+
Requires-Dist: torch (>=2.10.0)
|
|
75
|
+
Requires-Dist: tqdm (>=4.67.3)
|
|
76
|
+
Requires-Dist: typer (>=0.21.1)
|
|
77
|
+
Requires-Dist: umap-learn (>=0.5.11)
|
|
84
78
|
Project-URL: Bug Tracker, https://github.com/rte-france/BERTrend/issues
|
|
85
79
|
Project-URL: Documentation, https://github.com/rte-france/BERTrend
|
|
86
80
|
Project-URL: Homepage, https://github.com/rte-france/BERTrend
|
|
@@ -25,6 +25,17 @@ import streamlit as st
|
|
|
25
25
|
from bertrend.bertrend_apps.services.queue_management.rabbitmq_config import (
|
|
26
26
|
RabbitMQConfig,
|
|
27
27
|
)
|
|
28
|
+
from bertrend.demos.demos_utils.icons import (
|
|
29
|
+
DASHBOARD_ICON,
|
|
30
|
+
ERROR_ICON,
|
|
31
|
+
ERROR_OUTLINE_ICON,
|
|
32
|
+
INFO_ICON,
|
|
33
|
+
INVENTORY_ICON,
|
|
34
|
+
REFRESH_ICON,
|
|
35
|
+
REPLY_ICON,
|
|
36
|
+
SEARCH_ICON,
|
|
37
|
+
SETTINGS_ICON,
|
|
38
|
+
)
|
|
28
39
|
|
|
29
40
|
|
|
30
41
|
# ---------- Helpers: Management API client ----------
|
|
@@ -65,6 +76,17 @@ class RabbitMQAdminClient:
|
|
|
65
76
|
# ---------- UI Logic & formatters ----------
|
|
66
77
|
|
|
67
78
|
|
|
79
|
+
def queue_icon(queue_name: str) -> str:
|
|
80
|
+
"""Returns an icon based on queue name"""
|
|
81
|
+
return (
|
|
82
|
+
ERROR_OUTLINE_ICON
|
|
83
|
+
if "failed" in queue_name
|
|
84
|
+
else REPLY_ICON
|
|
85
|
+
if "response" in queue_name
|
|
86
|
+
else INVENTORY_ICON
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
|
|
68
90
|
def _decode_message_payload(msg: Dict[str, Any]) -> Tuple[str, Any]:
|
|
69
91
|
"""Returns (format_type, decoded_object)"""
|
|
70
92
|
body_text = msg.get("payload")
|
|
@@ -190,7 +212,7 @@ cfg = RabbitMQConfig()
|
|
|
190
212
|
admin_url_default = f"http://{cfg.host}:15672"
|
|
191
213
|
|
|
192
214
|
with st.sidebar:
|
|
193
|
-
st.title("
|
|
215
|
+
st.title(f"{SETTINGS_ICON} Settings")
|
|
194
216
|
|
|
195
217
|
with st.expander("Connection Details", expanded=False):
|
|
196
218
|
mgmt_url = st.text_input(
|
|
@@ -220,7 +242,7 @@ with st.sidebar:
|
|
|
220
242
|
refresh_rate = c2.select_slider(
|
|
221
243
|
"Refresh (s)", options=[5, 10, 30, 60, 120], value=30
|
|
222
244
|
)
|
|
223
|
-
force_refresh = c3.button(
|
|
245
|
+
force_refresh = c3.button(REFRESH_ICON, help="Force refresh the queue data")
|
|
224
246
|
|
|
225
247
|
if auto_refresh:
|
|
226
248
|
st.caption(f"Refreshing every {refresh_rate}s...")
|
|
@@ -261,11 +283,11 @@ except Exception as e:
|
|
|
261
283
|
|
|
262
284
|
st.title("📬 BERTrend Queue Monitor")
|
|
263
285
|
if error_msg:
|
|
264
|
-
st.error(f"Connection Error: {error_msg}")
|
|
286
|
+
st.error(f"Connection Error: {error_msg}", icon=ERROR_ICON)
|
|
265
287
|
st.stop()
|
|
266
288
|
|
|
267
289
|
# 1. Global Overview Row
|
|
268
|
-
st.markdown("###
|
|
290
|
+
st.markdown(f"### {DASHBOARD_ICON} System Overview")
|
|
269
291
|
kpi1, kpi2, kpi3, kpi4 = st.columns(4)
|
|
270
292
|
kpi1.metric(
|
|
271
293
|
"Total Backlog", global_stats["total"], help="Total messages in all selected queues"
|
|
@@ -283,9 +305,9 @@ st.divider()
|
|
|
283
305
|
|
|
284
306
|
# 2. Queue Tabs
|
|
285
307
|
if not selected_queues:
|
|
286
|
-
st.info("Select queues in the sidebar to begin monitoring.")
|
|
308
|
+
st.info("Select queues in the sidebar to begin monitoring.", icon=INFO_ICON)
|
|
287
309
|
else:
|
|
288
|
-
tabs = st.tabs([f"
|
|
310
|
+
tabs = st.tabs([f"{queue_icon(q)} {q}" for q in selected_queues])
|
|
289
311
|
|
|
290
312
|
for tab, qname in zip(tabs, selected_queues):
|
|
291
313
|
info = queue_data.get(qname, {})
|
|
@@ -340,10 +362,10 @@ else:
|
|
|
340
362
|
)
|
|
341
363
|
msgs = client.peek_messages(qname, count=fetch_count)
|
|
342
364
|
except Exception as e:
|
|
343
|
-
st.error(f"Failed to peek: {e}")
|
|
365
|
+
st.error(f"Failed to peek: {e}", icon=ERROR_ICON)
|
|
344
366
|
|
|
345
367
|
if not msgs:
|
|
346
|
-
st.info("Queue is empty or messages are not available.", icon=
|
|
368
|
+
st.info("Queue is empty or messages are not available.", icon=INFO_ICON)
|
|
347
369
|
else:
|
|
348
370
|
# Decode all first for filtering/sorting/collecting filter values
|
|
349
371
|
decoded_msgs = []
|
|
@@ -477,7 +499,7 @@ else:
|
|
|
477
499
|
)
|
|
478
500
|
|
|
479
501
|
# Filtering inputs
|
|
480
|
-
with st.expander("
|
|
502
|
+
with st.expander("Filters", expanded=True, icon=SEARCH_ICON):
|
|
481
503
|
fc1, fc2, fc3 = st.columns(3)
|
|
482
504
|
|
|
483
505
|
# Options for selectboxes (sorted for better UX)
|
|
@@ -538,6 +560,8 @@ else:
|
|
|
538
560
|
info_tags.append(d["endpoint"])
|
|
539
561
|
if d["user"]:
|
|
540
562
|
info_tags.append(f"User: {d['user']}")
|
|
563
|
+
if d["model_id"]:
|
|
564
|
+
info_tags.append(f"Model: {d['model_id']}")
|
|
541
565
|
|
|
542
566
|
info_str = f" | {' | '.join(info_tags)}" if info_tags else ""
|
|
543
567
|
label = f"#{idx + 1} | {fmt} | CID: {corr_id}{info_str} | {msg_size} bytes"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) 2024, RTE (https://www.rte-france.com)
|
|
1
|
+
# Copyright (c) 2024-2026, RTE (https://www.rte-france.com)
|
|
2
2
|
# See AUTHORS.txt
|
|
3
3
|
# SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
# This file is part of BERTrend.
|
|
@@ -40,6 +40,12 @@ PERSON_REMOVE_ICON = ":material/person_remove:"
|
|
|
40
40
|
POPULARITY_ICON = ":material/thumbs_up_down:"
|
|
41
41
|
SIGNAL_EVOLUTION_ICON = ":material/signal_cellular_alt:"
|
|
42
42
|
CYCLE_ICON = ":material/cycle:"
|
|
43
|
+
SEARCH_ICON = ":material/search:"
|
|
44
|
+
REFRESH_ICON = ":material/refresh:"
|
|
45
|
+
DASHBOARD_ICON = ":material/dashboard:"
|
|
46
|
+
INVENTORY_ICON = ":material/inventory_2:"
|
|
47
|
+
REPLY_ICON = ":material/reply:"
|
|
48
|
+
ERROR_OUTLINE_ICON = ":material/error_outline:"
|
|
43
49
|
|
|
44
50
|
JSON_ICON = "🧾"
|
|
45
51
|
PARQUET_ICON = "📦️"
|
|
@@ -0,0 +1,280 @@
|
|
|
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
|
+
import hashlib
|
|
6
|
+
from datetime import datetime
|
|
7
|
+
|
|
8
|
+
import requests
|
|
9
|
+
from nicegui import run, ui
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _clamp(x, lo=0, hi=255):
|
|
13
|
+
return max(lo, min(hi, x))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _adjust_color(hex_color, factor):
|
|
17
|
+
"""
|
|
18
|
+
Adjust color brightness.
|
|
19
|
+
factor > 1 -> lighten, factor < 1 -> darken.
|
|
20
|
+
"""
|
|
21
|
+
hex_color = hex_color.lstrip("#")
|
|
22
|
+
r = int(hex_color[0:2], 16)
|
|
23
|
+
g = int(hex_color[2:4], 16)
|
|
24
|
+
b = int(hex_color[4:6], 16)
|
|
25
|
+
|
|
26
|
+
r = _clamp(int(r * factor))
|
|
27
|
+
g = _clamp(int(g * factor))
|
|
28
|
+
b = _clamp(int(b * factor))
|
|
29
|
+
|
|
30
|
+
return "#{:02x}{:02x}{:02x}".format(r, g, b)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def get_color(user, model_id, endpoint):
|
|
34
|
+
"""
|
|
35
|
+
Generates a stable hex color from (user, model_id).
|
|
36
|
+
- Lighter for 'scrape' endpoints
|
|
37
|
+
- Darker for 'report' endpoints
|
|
38
|
+
"""
|
|
39
|
+
seed = f"{user}-{model_id}".encode("utf-8")
|
|
40
|
+
hash_hex = hashlib.md5(seed).hexdigest()
|
|
41
|
+
base_color = f"#{hash_hex[:6]}"
|
|
42
|
+
|
|
43
|
+
ep = endpoint.lower()
|
|
44
|
+
if "scrape" in ep:
|
|
45
|
+
# lighten ~30%
|
|
46
|
+
return _adjust_color(base_color, 1.3)
|
|
47
|
+
if "report" in ep:
|
|
48
|
+
# darken ~30%
|
|
49
|
+
return _adjust_color(base_color, 0.7)
|
|
50
|
+
|
|
51
|
+
return base_color
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def parse_jobs(data):
|
|
55
|
+
parsed = []
|
|
56
|
+
if not isinstance(data, list):
|
|
57
|
+
return []
|
|
58
|
+
for item in data:
|
|
59
|
+
kwargs = item.get("kwargs", {}) or {}
|
|
60
|
+
url = kwargs.get("url", "")
|
|
61
|
+
endpoint = url.split("/")[-1] if url else "N/A"
|
|
62
|
+
json_data = kwargs.get("json_data", {}) or {}
|
|
63
|
+
user = str(json_data.get("user", "system"))
|
|
64
|
+
model_id = json_data.get("model_id", "N/A")
|
|
65
|
+
parsed.append(
|
|
66
|
+
{
|
|
67
|
+
"user": user,
|
|
68
|
+
"model_id": model_id,
|
|
69
|
+
"endpoint": endpoint,
|
|
70
|
+
"time": item.get("next_run_time", ""),
|
|
71
|
+
"job_id": item.get("job_id", "N/A"),
|
|
72
|
+
"color": get_color(user, model_id, endpoint),
|
|
73
|
+
}
|
|
74
|
+
)
|
|
75
|
+
return sorted(parsed, key=lambda x: x["time"])
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class JobDashboard:
|
|
79
|
+
def __init__(self):
|
|
80
|
+
self.api_url = "http://dsia.rte-france.com:8882/jobs"
|
|
81
|
+
self.all_jobs = []
|
|
82
|
+
self.filtered_jobs = []
|
|
83
|
+
|
|
84
|
+
async def fetch_data(self):
|
|
85
|
+
try:
|
|
86
|
+
response = await run.io_bound(requests.get, self.api_url, timeout=10)
|
|
87
|
+
if response.status_code == 200:
|
|
88
|
+
self.all_jobs = parse_jobs(response.json())
|
|
89
|
+
self.filtered_jobs = self.all_jobs[:]
|
|
90
|
+
ui.notify(f"Fetched {len(self.all_jobs)} jobs", type="positive")
|
|
91
|
+
else:
|
|
92
|
+
ui.notify(f"Error: {response.status_code}", type="negative")
|
|
93
|
+
except Exception as e:
|
|
94
|
+
ui.notify(f"Connection Failed: {e}", type="negative")
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
@ui.page("/")
|
|
98
|
+
async def main_page():
|
|
99
|
+
# Load Highcharts Module
|
|
100
|
+
ui.add_head_html(
|
|
101
|
+
'<script src="https://code.highcharts.com/modules/timeline.js"></script>'
|
|
102
|
+
)
|
|
103
|
+
ui.colors(primary="#0052a1")
|
|
104
|
+
dashboard = JobDashboard()
|
|
105
|
+
|
|
106
|
+
# --- LOGIC ---
|
|
107
|
+
def update_display():
|
|
108
|
+
f_users = user_filter.value
|
|
109
|
+
f_models = model_filter.value
|
|
110
|
+
f_urls = url_filter.value
|
|
111
|
+
|
|
112
|
+
dashboard.filtered_jobs = [
|
|
113
|
+
j
|
|
114
|
+
for j in dashboard.all_jobs
|
|
115
|
+
if (not f_users or j["user"] in f_users)
|
|
116
|
+
and (not f_models or j["model_id"] in f_models)
|
|
117
|
+
and (not f_urls or j["endpoint"] in f_urls)
|
|
118
|
+
]
|
|
119
|
+
render_content()
|
|
120
|
+
|
|
121
|
+
def reset_filters():
|
|
122
|
+
user_filter.value = []
|
|
123
|
+
model_filter.value = []
|
|
124
|
+
url_filter.value = []
|
|
125
|
+
update_display()
|
|
126
|
+
|
|
127
|
+
def render_content():
|
|
128
|
+
# Clear both containers
|
|
129
|
+
chart_container.clear()
|
|
130
|
+
timeline_container.clear()
|
|
131
|
+
|
|
132
|
+
if not dashboard.filtered_jobs:
|
|
133
|
+
with chart_container:
|
|
134
|
+
ui.label("No jobs match selected filters.").classes(
|
|
135
|
+
"mx-auto py-10 text-slate-400"
|
|
136
|
+
)
|
|
137
|
+
return
|
|
138
|
+
|
|
139
|
+
# 1. Update Chart Dashboard
|
|
140
|
+
with chart_container:
|
|
141
|
+
chart_options = {
|
|
142
|
+
"chart": {"type": "timeline", "height": 350, "zoomType": "x"},
|
|
143
|
+
"title": {
|
|
144
|
+
"text": "Job Schedule Timeline",
|
|
145
|
+
"style": {"fontSize": "14px"},
|
|
146
|
+
},
|
|
147
|
+
"xAxis": {"type": "datetime"},
|
|
148
|
+
"series": [
|
|
149
|
+
{
|
|
150
|
+
"data": [
|
|
151
|
+
{
|
|
152
|
+
"x": int(
|
|
153
|
+
datetime.fromisoformat(j["time"]).timestamp() * 1000
|
|
154
|
+
),
|
|
155
|
+
"name": f"/{j['endpoint']}",
|
|
156
|
+
"label": f"{j['user']} | {j['model_id']}",
|
|
157
|
+
"color": j["color"],
|
|
158
|
+
}
|
|
159
|
+
for j in dashboard.filtered_jobs
|
|
160
|
+
if j["time"]
|
|
161
|
+
]
|
|
162
|
+
}
|
|
163
|
+
],
|
|
164
|
+
}
|
|
165
|
+
ui.highchart(chart_options, extras=["timeline"]).classes("w-full")
|
|
166
|
+
|
|
167
|
+
# 2. Update Timeline List Dashboard
|
|
168
|
+
with timeline_container:
|
|
169
|
+
ui.label("Detailed Job Queue").classes(
|
|
170
|
+
"text-sm font-bold text-slate-500 mb-4 uppercase"
|
|
171
|
+
)
|
|
172
|
+
# --- Generate and inject CSS for our custom hex colors ---
|
|
173
|
+
unique_colors = set(job["color"] for job in dashboard.filtered_jobs)
|
|
174
|
+
css_rules = []
|
|
175
|
+
for hex_color in unique_colors:
|
|
176
|
+
# Create a valid CSS identifier from the hex (e.g., #ff0000 -> c_ff0000)
|
|
177
|
+
class_name = f"c_{hex_color.lstrip('#')}"
|
|
178
|
+
css_rules.append(
|
|
179
|
+
f".text-{class_name} {{ color: {hex_color} !important; }}"
|
|
180
|
+
)
|
|
181
|
+
css_rules.append(
|
|
182
|
+
f".bg-{class_name} {{ background-color: {hex_color} !important; }}"
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
if css_rules:
|
|
186
|
+
ui.add_css("\n".join(css_rules))
|
|
187
|
+
# --------------------------------------------------------------
|
|
188
|
+
with ui.timeline(side="right"):
|
|
189
|
+
for job in dashboard.filtered_jobs:
|
|
190
|
+
custom_color_name = f"c_{job['color'].lstrip('#')}"
|
|
191
|
+
ui.timeline_entry(
|
|
192
|
+
f"Model: {job['model_id']}",
|
|
193
|
+
title=f"/{job['endpoint']} ({job['user']})",
|
|
194
|
+
subtitle=job["time"],
|
|
195
|
+
color=custom_color_name,
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
async def refresh_all():
|
|
199
|
+
await dashboard.fetch_data()
|
|
200
|
+
# Refresh options based on new data
|
|
201
|
+
user_filter.set_options(
|
|
202
|
+
sorted(list(set(j["user"] for j in dashboard.all_jobs)))
|
|
203
|
+
)
|
|
204
|
+
model_filter.set_options(
|
|
205
|
+
sorted(list(set(j["model_id"] for j in dashboard.all_jobs)))
|
|
206
|
+
)
|
|
207
|
+
url_filter.set_options(
|
|
208
|
+
sorted(list(set(j["endpoint"] for j in dashboard.all_jobs)))
|
|
209
|
+
)
|
|
210
|
+
update_display()
|
|
211
|
+
|
|
212
|
+
# --- UI LAYOUT ---
|
|
213
|
+
with ui.header().classes("items-center justify-between px-4 py-2"):
|
|
214
|
+
with ui.row().classes("items-center"):
|
|
215
|
+
ui.icon("analytics", size="md")
|
|
216
|
+
ui.label("BERTrend Scheduler").classes("text-lg font-bold")
|
|
217
|
+
|
|
218
|
+
# Endpoint Config in Header
|
|
219
|
+
with ui.row().classes("items-center bg-white/10 p-1 rounded-md"):
|
|
220
|
+
ui.input(value=dashboard.api_url).bind_value(dashboard, "api_url").props(
|
|
221
|
+
"dark dense borderless"
|
|
222
|
+
).classes("w-64 px-2 text-sm")
|
|
223
|
+
ui.button(icon="refresh", on_click=refresh_all).props(
|
|
224
|
+
"flat color=white dense"
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
# Filter Bar
|
|
228
|
+
with ui.row().classes("w-full items-center p-2 bg-slate-50 border-b gap-3"):
|
|
229
|
+
ui.label("FILTERS:").classes("text-xs font-bold text-slate-500 ml-2")
|
|
230
|
+
|
|
231
|
+
url_filter = (
|
|
232
|
+
ui.select(
|
|
233
|
+
[],
|
|
234
|
+
label="URL Type",
|
|
235
|
+
multiple=True,
|
|
236
|
+
with_input=True,
|
|
237
|
+
on_change=update_display,
|
|
238
|
+
)
|
|
239
|
+
.props("dense outlined")
|
|
240
|
+
.classes("w-48 text-xs bg-white")
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
user_filter = (
|
|
244
|
+
ui.select(
|
|
245
|
+
[],
|
|
246
|
+
label="User",
|
|
247
|
+
multiple=True,
|
|
248
|
+
with_input=True,
|
|
249
|
+
on_change=update_display,
|
|
250
|
+
)
|
|
251
|
+
.props("dense outlined")
|
|
252
|
+
.classes("w-40 text-xs bg-white")
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
model_filter = (
|
|
256
|
+
ui.select(
|
|
257
|
+
[],
|
|
258
|
+
label="Model ID",
|
|
259
|
+
multiple=True,
|
|
260
|
+
with_input=True,
|
|
261
|
+
on_change=update_display,
|
|
262
|
+
)
|
|
263
|
+
.props("dense outlined")
|
|
264
|
+
.classes("w-40 text-xs bg-white")
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
ui.button("Reset", on_click=reset_filters, icon="filter_alt_off").props(
|
|
268
|
+
"outline dense"
|
|
269
|
+
).classes("text-xs")
|
|
270
|
+
|
|
271
|
+
# The two Dashboard Containers
|
|
272
|
+
chart_container = ui.column().classes("w-full p-4")
|
|
273
|
+
ui.separator()
|
|
274
|
+
timeline_container = ui.column().classes("w-full p-4")
|
|
275
|
+
|
|
276
|
+
# Initial Load
|
|
277
|
+
await refresh_all()
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
ui.run(title="BERTrend Job Viewer", port=8885)
|