forecasting-tools 0.2.91__tar.gz → 0.2.92__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.
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/PKG-INFO +1 -1
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/ai_congress_v2/congress_orchestrator.py +1 -1
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/ai_congress_v2/data_models.py +1 -1
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/ai_congress_v2/member_profiles.py +27 -23
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/other/data_analyzer.py +2 -2
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/agent_runner.py +1 -1
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/data_models.py +1 -1
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/intervention_testing/intervention_policy_agent.py +1 -1
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/intervention_testing/intervention_runner.py +1 -1
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/situation_generator.py +2 -2
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/app_pages/chat_page.py +9 -6
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/app_pages/congress_v2_page.py +4 -4
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/app_pages/forecaster_page.py +91 -7
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/helpers/asknews_searcher.py +6 -11
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/pyproject.toml +1 -1
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/LICENSE +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/README.md +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/__init__.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/__init__.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/ai_congress_v2/__init__.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/ai_congress_v2/congress_member_agent.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/ai_congress_v2/tools.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/base_rates/base_rate_researcher.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/base_rates/deduplicator.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/base_rates/estimator.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/base_rates/niche_list_researcher.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/deprecated/configured_llms.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/deprecated/general_researcher.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/deprecated/question_generator.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/deprecated/question_responder.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/deprecated/question_router.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/deprecated/research_coordinator.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/minor_tools.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/other/hosted_file.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/question_generators/generated_question.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/question_generators/harmful_question_identifier.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/question_generators/q3_q4_quarterly_questions.json +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/question_generators/question_decomposer.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/question_generators/question_operationalizer.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/question_generators/simple_question.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/question_generators/topic_generator.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/research/computer_use.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/research/find_a_dataset.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/research/key_factors_researcher.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/research/smart_searcher.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/__init__.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/effect_engine.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/example_situations/industrial_basin.json +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/example_situations/milbrook.json +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/example_situations/simple_business.json +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/example_situations/simple_dnd.json +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/example_situations/simple_election.json +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/example_situations/willowbrook.json +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/example_situations/z_broken_mafia.json +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/intervention_testing/__init__.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/intervention_testing/data_models.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/intervention_testing/forecast_resolver.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/intervention_testing/intervention_storage.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/situation_simulator/simulator.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/__init__.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/agent_wrappers.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/ai_utils/__init__.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/ai_utils/openai_utils.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/ai_utils/response_types.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/deprecated_model_classes/README.md +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/deprecated_model_classes/claude35sonnet.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/deprecated_model_classes/deepseek_r1.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/deprecated_model_classes/gpt4o.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/deprecated_model_classes/gpt4ovision.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/deprecated_model_classes/gpto1.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/deprecated_model_classes/gpto1preview.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/deprecated_model_classes/metaculus4o.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/deprecated_model_classes/perplexity.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/exa_searcher.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/general_llm.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/model_interfaces/__init__.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/model_interfaces/ai_model.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/model_interfaces/combined_llm_archetype.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/model_interfaces/incurs_cost.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/model_interfaces/named_model.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/model_interfaces/outputs_text.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/model_interfaces/priced_per_request.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/model_interfaces/request_limited_model.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/model_interfaces/retryable_model.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/model_interfaces/time_limited_model.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/model_interfaces/token_limited_model.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/model_interfaces/tokens_are_calculatable.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/model_interfaces/tokens_incur_cost.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/model_tracker.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/resource_managers/__init__.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/resource_managers/hard_limit_manager.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/resource_managers/monetary_cost_manager.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/ai_models/resource_managers/refreshing_bucket_rate_limiter.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/auto_optimizers/bot_evaluator.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/auto_optimizers/bot_optimizer.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/auto_optimizers/control_prompt.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/auto_optimizers/customizable_bot.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/auto_optimizers/prompt_data_models.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/auto_optimizers/prompt_optimizer.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/auto_optimizers/question_plus_research.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/calibration_adjustment/.gitignore +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/calibration_adjustment/__init__.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/calibration_adjustment/_training_data.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/calibration_adjustment/benchmark.ipynb +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/calibration_adjustment/calibration_adjuster.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/calibration_adjustment/constant_shift_adjuster.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/calibration_adjustment/decision_tree_adjuster.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/calibration_adjustment/k_means_adjuster.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/calibration_adjustment/logistic_recalibration_adjuster.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/calibration_adjustment/step_adjuster.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/cp_benchmarking/benchmark_displayer.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/cp_benchmarking/benchmark_for_bot.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/cp_benchmarking/benchmarker.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/data_models/__init__.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/data_models/binary_report.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/data_models/coherence_link.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/data_models/conditional_models.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/data_models/conditional_report.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/data_models/data_organizer.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/data_models/forecast_report.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/data_models/markdown_tree.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/data_models/multiple_choice_report.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/data_models/numeric_report.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/data_models/questions.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/data_models/timestamped_predictions.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/data_models/user_response.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/__init__.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/bot_lists.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/experiments/__init__.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/experiments/q1_veritas_bot.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/experiments/q1t_w_convert_to_binary.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/experiments/q1t_w_personas_and_exa.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/experiments/q2t_w_decomposition.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/experiments/q3t_w_asknews.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/experiments/q3t_w_exa.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/experiments/q3t_w_q4vbinary.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/experiments/q4_veritas_bot.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/experiments/q4v_w_exa.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/experiments/q4v_w_exa_and_dseekr1.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/experiments/q4v_w_exa_and_o1_preview.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/forecast_bot.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/main_bot.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/official_bots/__init__.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/official_bots/gpt_4_1_optimized_bot.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/official_bots/q1_template_bot.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/official_bots/q2_template_bot.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/official_bots/q3_template_bot.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/official_bots/q4_template_bot.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/official_bots/research_only_bot_2025_fall.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/official_bots/template_bot_2025_fall.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/official_bots/template_bot_2026_spring.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/official_bots/template_bot_2026_summer.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/official_bots/uniform_probability_bot.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/forecast_bots/template_bot.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/Home.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/app_pages/base_rate_page.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/app_pages/benchmark_page.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/app_pages/csv_agent.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/app_pages/estimator_page.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/app_pages/intervention_leaderboard_page.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/app_pages/key_factors_page.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/app_pages/niche_list_researcher_page.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/app_pages/simulator_page.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/example_outputs/base_rate_page_examples.json +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/example_outputs/congress_page_example.json +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/example_outputs/congress_v2_page_example.json +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/example_outputs/estimator_page_examples.json +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/example_outputs/forecast_page_examples.json +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/example_outputs/key_factors_page_examples.json +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/example_outputs/niche_list_page_examples.json +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/example_outputs/question_generator_page_examples.json +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/helpers/app_page.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/helpers/custom_auth.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/helpers/report_displayer.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/front_end/helpers/tool_page.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/helpers/__init__.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/helpers/asknews_cache.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/helpers/forecast_database_manager.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/helpers/metaculus_api.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/helpers/metaculus_client.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/helpers/prediction_extractor.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/helpers/structure_output.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/helpers/works_cited_creator.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/util/__init__.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/util/async_batching.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/util/coda_utils.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/util/custom_logger.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/util/file_manipulation.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/util/jsonable.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/util/misc.py +0 -0
- {forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/util/stats.py +0 -0
|
@@ -32,7 +32,7 @@ LONG_TIMEOUT = 480
|
|
|
32
32
|
class CongressOrchestrator:
|
|
33
33
|
def __init__(
|
|
34
34
|
self,
|
|
35
|
-
aggregation_model: str = "openrouter/anthropic/claude-sonnet-4",
|
|
35
|
+
aggregation_model: str = "openrouter/anthropic/claude-sonnet-4.6",
|
|
36
36
|
num_delphi_rounds: int = 1,
|
|
37
37
|
):
|
|
38
38
|
self.aggregation_model = aggregation_model
|
|
@@ -23,7 +23,7 @@ class CongressMember(BaseModel, Jsonable):
|
|
|
23
23
|
general_motivation: str
|
|
24
24
|
expertise_areas: list[str]
|
|
25
25
|
personality_traits: list[str]
|
|
26
|
-
ai_model: str = "openrouter/anthropic/claude-sonnet-4"
|
|
26
|
+
ai_model: str = "openrouter/anthropic/claude-sonnet-4.6"
|
|
27
27
|
search_model: str = "openrouter/perplexity/sonar-reasoning-pro"
|
|
28
28
|
|
|
29
29
|
@property
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
from forecasting_tools.agents_and_tools.ai_congress_v2.data_models import CongressMember
|
|
2
2
|
|
|
3
|
+
DEFAULT_POLITICAL_MODEL = "openrouter/anthropic/claude-sonnet-4.6"
|
|
4
|
+
|
|
3
5
|
# =============================================================================
|
|
4
6
|
# POLITICAL VALUE-BASED MEMBERS
|
|
7
|
+
# Note: All names below are intentionally fictional and do not refer to any real
|
|
8
|
+
# politician. They are archetypes selected to span a broad ideological space.
|
|
5
9
|
# =============================================================================
|
|
6
10
|
|
|
7
11
|
TRADITIONAL_CONSERVATIVE = CongressMember(
|
|
8
|
-
name="Sen.
|
|
12
|
+
name="Sen. Thornbury",
|
|
9
13
|
role="Traditional Conservative",
|
|
10
14
|
political_leaning="traditional conservative",
|
|
11
15
|
general_motivation=(
|
|
@@ -27,11 +31,11 @@ TRADITIONAL_CONSERVATIVE = CongressMember(
|
|
|
27
31
|
"respects established institutions",
|
|
28
32
|
"emphasizes personal responsibility",
|
|
29
33
|
],
|
|
30
|
-
ai_model=
|
|
34
|
+
ai_model=DEFAULT_POLITICAL_MODEL,
|
|
31
35
|
)
|
|
32
36
|
|
|
33
37
|
PROGRESSIVE_REFORMER = CongressMember(
|
|
34
|
-
name="Rep.
|
|
38
|
+
name="Rep. Hartwell",
|
|
35
39
|
role="Progressive Reformer",
|
|
36
40
|
political_leaning="progressive",
|
|
37
41
|
general_motivation=(
|
|
@@ -53,11 +57,11 @@ PROGRESSIVE_REFORMER = CongressMember(
|
|
|
53
57
|
"prioritizes workers and consumers",
|
|
54
58
|
"impatient with incrementalism",
|
|
55
59
|
],
|
|
56
|
-
ai_model=
|
|
60
|
+
ai_model=DEFAULT_POLITICAL_MODEL,
|
|
57
61
|
)
|
|
58
62
|
|
|
59
63
|
LIBERTARIAN = CongressMember(
|
|
60
|
-
name="Rep.
|
|
64
|
+
name="Rep. Calloway",
|
|
61
65
|
role="Libertarian",
|
|
62
66
|
political_leaning="libertarian",
|
|
63
67
|
general_motivation=(
|
|
@@ -79,11 +83,11 @@ LIBERTARIAN = CongressMember(
|
|
|
79
83
|
"consistent across issues",
|
|
80
84
|
"opposes paternalism",
|
|
81
85
|
],
|
|
82
|
-
ai_model=
|
|
86
|
+
ai_model=DEFAULT_POLITICAL_MODEL,
|
|
83
87
|
)
|
|
84
88
|
|
|
85
89
|
POPULIST_NATIONALIST = CongressMember(
|
|
86
|
-
name="Sen.
|
|
90
|
+
name="Sen. Marsden",
|
|
87
91
|
role="Populist Nationalist",
|
|
88
92
|
political_leaning="populist nationalist",
|
|
89
93
|
general_motivation=(
|
|
@@ -105,11 +109,11 @@ POPULIST_NATIONALIST = CongressMember(
|
|
|
105
109
|
"questions free trade orthodoxy",
|
|
106
110
|
"focuses on forgotten communities",
|
|
107
111
|
],
|
|
108
|
-
ai_model=
|
|
112
|
+
ai_model=DEFAULT_POLITICAL_MODEL,
|
|
109
113
|
)
|
|
110
114
|
|
|
111
115
|
NATIONAL_SECURITY_HAWK = CongressMember(
|
|
112
|
-
name="Sen.
|
|
116
|
+
name="Sen. Ashford",
|
|
113
117
|
role="National Security Hawk",
|
|
114
118
|
political_leaning="hawkish internationalist",
|
|
115
119
|
general_motivation=(
|
|
@@ -131,11 +135,11 @@ NATIONAL_SECURITY_HAWK = CongressMember(
|
|
|
131
135
|
"willing to use force",
|
|
132
136
|
"prioritizes deterrence",
|
|
133
137
|
],
|
|
134
|
-
ai_model=
|
|
138
|
+
ai_model=DEFAULT_POLITICAL_MODEL,
|
|
135
139
|
)
|
|
136
140
|
|
|
137
141
|
ENVIRONMENTALIST = CongressMember(
|
|
138
|
-
name="Rep.
|
|
142
|
+
name="Rep. Vellacott",
|
|
139
143
|
role="Climate and Environmental Advocate",
|
|
140
144
|
political_leaning="green progressive",
|
|
141
145
|
general_motivation=(
|
|
@@ -157,11 +161,11 @@ ENVIRONMENTALIST = CongressMember(
|
|
|
157
161
|
"intergenerational focus",
|
|
158
162
|
"skeptical of fossil fuel industry",
|
|
159
163
|
],
|
|
160
|
-
ai_model=
|
|
164
|
+
ai_model=DEFAULT_POLITICAL_MODEL,
|
|
161
165
|
)
|
|
162
166
|
|
|
163
167
|
DEMOCRATIC_SOCIALIST = CongressMember(
|
|
164
|
-
name="Sen.
|
|
168
|
+
name="Sen. Quill",
|
|
165
169
|
role="Democratic Socialist",
|
|
166
170
|
political_leaning="democratic socialist",
|
|
167
171
|
general_motivation=(
|
|
@@ -183,11 +187,11 @@ DEMOCRATIC_SOCIALIST = CongressMember(
|
|
|
183
187
|
"consistent ideology",
|
|
184
188
|
"grassroots orientation",
|
|
185
189
|
],
|
|
186
|
-
ai_model=
|
|
190
|
+
ai_model=DEFAULT_POLITICAL_MODEL,
|
|
187
191
|
)
|
|
188
192
|
|
|
189
193
|
TECHNOCRATIC_CENTRIST = CongressMember(
|
|
190
|
-
name="Sec.
|
|
194
|
+
name="Sec. Drummond",
|
|
191
195
|
role="Technocratic Centrist",
|
|
192
196
|
political_leaning="technocratic centrist",
|
|
193
197
|
general_motivation=(
|
|
@@ -209,7 +213,7 @@ TECHNOCRATIC_CENTRIST = CongressMember(
|
|
|
209
213
|
"values expertise",
|
|
210
214
|
"incrementalist",
|
|
211
215
|
],
|
|
212
|
-
ai_model=
|
|
216
|
+
ai_model=DEFAULT_POLITICAL_MODEL,
|
|
213
217
|
)
|
|
214
218
|
|
|
215
219
|
# =============================================================================
|
|
@@ -217,7 +221,7 @@ TECHNOCRATIC_CENTRIST = CongressMember(
|
|
|
217
221
|
# =============================================================================
|
|
218
222
|
|
|
219
223
|
CLAUDE_MEMBER = CongressMember(
|
|
220
|
-
name="Opus 4.
|
|
224
|
+
name="Claude Opus 4.7 (Anthropic)",
|
|
221
225
|
role="AI Policy Analyst",
|
|
222
226
|
political_leaning="behaves as Claude naturally does",
|
|
223
227
|
general_motivation=(
|
|
@@ -227,7 +231,7 @@ CLAUDE_MEMBER = CongressMember(
|
|
|
227
231
|
),
|
|
228
232
|
expertise_areas=["general policy analysis"],
|
|
229
233
|
personality_traits=["behaves naturally as Claude"],
|
|
230
|
-
ai_model="openrouter/anthropic/claude-opus-4.
|
|
234
|
+
ai_model="openrouter/anthropic/claude-opus-4.7",
|
|
231
235
|
)
|
|
232
236
|
|
|
233
237
|
GPT_MEMBER = CongressMember(
|
|
@@ -245,7 +249,7 @@ GPT_MEMBER = CongressMember(
|
|
|
245
249
|
)
|
|
246
250
|
|
|
247
251
|
GEMINI_MEMBER = CongressMember(
|
|
248
|
-
name="Gemini 3 Pro (Google)",
|
|
252
|
+
name="Gemini 3.1 Pro (Google)",
|
|
249
253
|
role="AI Policy Analyst",
|
|
250
254
|
political_leaning="behaves as Gemini naturally does",
|
|
251
255
|
general_motivation=(
|
|
@@ -255,11 +259,11 @@ GEMINI_MEMBER = CongressMember(
|
|
|
255
259
|
),
|
|
256
260
|
expertise_areas=["general policy analysis"],
|
|
257
261
|
personality_traits=["behaves naturally as Gemini"],
|
|
258
|
-
ai_model="openrouter/google/gemini-3-pro-preview",
|
|
262
|
+
ai_model="openrouter/google/gemini-3.1-pro-preview",
|
|
259
263
|
)
|
|
260
264
|
|
|
261
265
|
GROK_MEMBER = CongressMember(
|
|
262
|
-
name="Grok 4 (xAI)",
|
|
266
|
+
name="Grok 4.20 (xAI)",
|
|
263
267
|
role="AI Policy Analyst",
|
|
264
268
|
political_leaning="behaves as Grok naturally does",
|
|
265
269
|
general_motivation=(
|
|
@@ -269,7 +273,7 @@ GROK_MEMBER = CongressMember(
|
|
|
269
273
|
),
|
|
270
274
|
expertise_areas=["general policy analysis"],
|
|
271
275
|
personality_traits=["behaves naturally as Grok"],
|
|
272
|
-
ai_model="openrouter/x-ai/grok-4",
|
|
276
|
+
ai_model="openrouter/x-ai/grok-4.20",
|
|
273
277
|
)
|
|
274
278
|
|
|
275
279
|
DEEPSEEK_MEMBER = CongressMember(
|
|
@@ -309,7 +313,7 @@ AI_MODEL_MEMBERS: list[CongressMember] = [
|
|
|
309
313
|
DEEPSEEK_MEMBER,
|
|
310
314
|
]
|
|
311
315
|
|
|
312
|
-
AVAILABLE_MEMBERS: list[CongressMember] =
|
|
316
|
+
AVAILABLE_MEMBERS: list[CongressMember] = AI_MODEL_MEMBERS + POLITICAL_MEMBERS
|
|
313
317
|
|
|
314
318
|
MEMBER_BY_NAME: dict[str, CongressMember] = {m.name: m for m in AVAILABLE_MEMBERS}
|
|
315
319
|
|
|
@@ -98,7 +98,7 @@ class DataAnalyzer:
|
|
|
98
98
|
def data_analysis_tool(
|
|
99
99
|
instruction: str,
|
|
100
100
|
additional_context: str | None = None,
|
|
101
|
-
files: list | None = None,
|
|
101
|
+
files: list[AvailableFile] | None = None,
|
|
102
102
|
) -> str:
|
|
103
103
|
"""
|
|
104
104
|
This tool attempts to use code to achieve the user's instructions.
|
|
@@ -109,7 +109,7 @@ class DataAnalyzer:
|
|
|
109
109
|
Format files as a list of dicts with the following format: {"file_name": "string", "file_id": "string"}
|
|
110
110
|
"""
|
|
111
111
|
data_analysis = DataAnalyzer()
|
|
112
|
-
available_files =
|
|
112
|
+
available_files = list(files) if files else []
|
|
113
113
|
return asyncio.run(
|
|
114
114
|
data_analysis.run_data_analysis(
|
|
115
115
|
instruction, additional_context, available_files
|
|
@@ -75,7 +75,7 @@ class LlmMessage(BaseModel, Jsonable):
|
|
|
75
75
|
class SimulationAgentRunner:
|
|
76
76
|
def __init__(
|
|
77
77
|
self,
|
|
78
|
-
default_model: str = "openrouter/anthropic/claude-sonnet-4.
|
|
78
|
+
default_model: str = "openrouter/anthropic/claude-sonnet-4.6",
|
|
79
79
|
timeout: int = AGENT_TURN_TIMEOUT,
|
|
80
80
|
) -> None:
|
|
81
81
|
self.default_model = default_model
|
|
@@ -78,7 +78,7 @@ class AgentDefinition(BaseModel, Jsonable):
|
|
|
78
78
|
starting_inventory: dict[str, int] = Field(default_factory=dict)
|
|
79
79
|
special_actions: list[ActionDefinition] = Field(default_factory=list)
|
|
80
80
|
inventory_rules: list[InventoryRule] = Field(default_factory=list)
|
|
81
|
-
ai_model: str = "openrouter/anthropic/claude-sonnet-4.
|
|
81
|
+
ai_model: str = "openrouter/anthropic/claude-sonnet-4.6"
|
|
82
82
|
|
|
83
83
|
|
|
84
84
|
class Channel(BaseModel, Jsonable):
|
|
@@ -22,7 +22,7 @@ POLICY_AGENT_TIMEOUT = 300
|
|
|
22
22
|
class InterventionPolicyAgent:
|
|
23
23
|
def __init__(
|
|
24
24
|
self,
|
|
25
|
-
model_name: str = "openrouter/anthropic/claude-sonnet-4",
|
|
25
|
+
model_name: str = "openrouter/anthropic/claude-sonnet-4.6",
|
|
26
26
|
timeout: int = POLICY_AGENT_TIMEOUT,
|
|
27
27
|
structure_output_model: GeneralLlm | None = None,
|
|
28
28
|
) -> None:
|
|
@@ -41,7 +41,7 @@ INTERVENTION_ADVISOR_NAME = "Intervention Advisor"
|
|
|
41
41
|
class InterventionRunner:
|
|
42
42
|
def __init__(
|
|
43
43
|
self,
|
|
44
|
-
model_name: str = "openrouter/anthropic/claude-sonnet-4",
|
|
44
|
+
model_name: str = "openrouter/anthropic/claude-sonnet-4.6",
|
|
45
45
|
cost_limit: float = 100.0,
|
|
46
46
|
) -> None:
|
|
47
47
|
self.model_name = model_name
|
|
@@ -45,7 +45,7 @@ SITUATION_SCHEMA_GUIDE = clean_indents(
|
|
|
45
45
|
"effects": [<Effect objects>]
|
|
46
46
|
}
|
|
47
47
|
],
|
|
48
|
-
"ai_model": "openrouter/anthropic/claude-sonnet-4.
|
|
48
|
+
"ai_model": "openrouter/anthropic/claude-sonnet-4.6"
|
|
49
49
|
}
|
|
50
50
|
],
|
|
51
51
|
"environment": {
|
|
@@ -186,7 +186,7 @@ SITUATION_DESIGN_GUIDE = clean_indents(
|
|
|
186
186
|
class SituationGenerator:
|
|
187
187
|
def __init__(
|
|
188
188
|
self,
|
|
189
|
-
model: str = "openrouter/anthropic/claude-sonnet-4.
|
|
189
|
+
model: str = "openrouter/anthropic/claude-sonnet-4.6",
|
|
190
190
|
) -> None:
|
|
191
191
|
self.model = model
|
|
192
192
|
|
|
@@ -60,22 +60,25 @@ from forecasting_tools.util.misc import clean_indents
|
|
|
60
60
|
logger = logging.getLogger(__name__)
|
|
61
61
|
|
|
62
62
|
|
|
63
|
-
DEFAULT_MODEL: str =
|
|
64
|
-
"openrouter/google/gemini-2.5-pro" # "openrouter/anthropic/claude-sonnet-4.5.5"
|
|
65
|
-
)
|
|
63
|
+
DEFAULT_MODEL: str = "openrouter/google/gemini-2.5-pro"
|
|
66
64
|
MODEL_CHOICES: list[str] = [
|
|
67
65
|
DEFAULT_MODEL,
|
|
66
|
+
"openrouter/anthropic/claude-sonnet-4.6",
|
|
67
|
+
"openrouter/anthropic/claude-opus-4.7",
|
|
68
|
+
"gemini/gemini-3.1-pro-preview",
|
|
69
|
+
"openai/gpt-5.2",
|
|
70
|
+
"xai/grok-4.20",
|
|
71
|
+
"openrouter/anthropic/claude-sonnet-4.5",
|
|
68
72
|
"openai/gpt-5",
|
|
69
73
|
"openrouter/x-ai/grok-4",
|
|
70
74
|
"openrouter/anthropic/claude-opus-4.1",
|
|
71
75
|
"openrouter/anthropic/claude-sonnet-4",
|
|
72
|
-
"openrouter/anthropic/claude-sonnet-4.5",
|
|
73
76
|
"openai/o3",
|
|
74
77
|
"openai/o4-mini",
|
|
75
78
|
"openai/gpt-4.1",
|
|
76
79
|
"gpt-4o",
|
|
77
|
-
"openrouter/google/gemini-2.5-pro-preview",
|
|
78
80
|
"openrouter/google/gemini-3-pro-preview",
|
|
81
|
+
"openrouter/google/gemini-2.5-pro-preview",
|
|
79
82
|
]
|
|
80
83
|
|
|
81
84
|
|
|
@@ -502,7 +505,7 @@ class ChatPage(AppPage):
|
|
|
502
505
|
output = message["output"]
|
|
503
506
|
last_message["content"][0][
|
|
504
507
|
"text"
|
|
505
|
-
] += f"\n\n---\n\nNOTICE: There is a bug in gemini tool calling in OpenAI agents SDK, here is the content. Consider using openrouter/anthropic/claude-sonnet-4:\n\n {output}."
|
|
508
|
+
] += f"\n\n---\n\nNOTICE: There is a bug in gemini tool calling in OpenAI agents SDK, here is the content. Consider using openrouter/anthropic/claude-sonnet-4.6:\n\n {output}."
|
|
506
509
|
|
|
507
510
|
@classmethod
|
|
508
511
|
def clear_chat_history(cls) -> None:
|
|
@@ -38,7 +38,6 @@ SESSIONS_FOLDER = "temp/congress_v2_sessions"
|
|
|
38
38
|
EXAMPLE_SESSION_PATH = (
|
|
39
39
|
"forecasting_tools/front_end/example_outputs/congress_v2_page_example.json"
|
|
40
40
|
)
|
|
41
|
-
V2_PASSPHRASE = f"metac {CustomAuth.DEFAULT_PASSPHRASE}"
|
|
42
41
|
|
|
43
42
|
|
|
44
43
|
class CongressV2Page(AppPage):
|
|
@@ -92,6 +91,7 @@ class CongressV2Page(AppPage):
|
|
|
92
91
|
]
|
|
93
92
|
|
|
94
93
|
@classmethod
|
|
94
|
+
@CustomAuth.add_access_control()
|
|
95
95
|
async def _async_main(cls) -> None:
|
|
96
96
|
st.title("🏛️ AI Forecasting Congress V2")
|
|
97
97
|
st.markdown(
|
|
@@ -215,10 +215,10 @@ class CongressV2Page(AppPage):
|
|
|
215
215
|
|
|
216
216
|
member_names = [m.name for m in AVAILABLE_MEMBERS]
|
|
217
217
|
default_members = [
|
|
218
|
-
"Opus 4.
|
|
218
|
+
"Claude Opus 4.7 (Anthropic)",
|
|
219
219
|
"GPT 5.2 (OpenAI)",
|
|
220
|
-
"Gemini 3 Pro (Google)",
|
|
221
|
-
"Grok 4 (xAI)",
|
|
220
|
+
"Gemini 3.1 Pro (Google)",
|
|
221
|
+
"Grok 4.20 (xAI)",
|
|
222
222
|
"DeepSeek V3.2 (DeepSeek)",
|
|
223
223
|
]
|
|
224
224
|
selected_members = st.multiselect(
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import json
|
|
1
2
|
import logging
|
|
2
3
|
import re
|
|
3
4
|
|
|
@@ -7,6 +8,8 @@ from pydantic import BaseModel
|
|
|
7
8
|
|
|
8
9
|
from forecasting_tools.data_models.binary_report import BinaryReport
|
|
9
10
|
from forecasting_tools.data_models.questions import BinaryQuestion
|
|
11
|
+
from forecasting_tools.forecast_bots.bot_lists import get_all_important_bot_classes
|
|
12
|
+
from forecasting_tools.forecast_bots.forecast_bot import ForecastBot
|
|
10
13
|
from forecasting_tools.forecast_bots.main_bot import MainBot
|
|
11
14
|
from forecasting_tools.front_end.helpers.report_displayer import ReportDisplayer
|
|
12
15
|
from forecasting_tools.front_end.helpers.tool_page import ToolPage
|
|
@@ -33,7 +36,6 @@ class ForecasterPage(ToolPage):
|
|
|
33
36
|
"forecasting_tools/front_end/example_outputs/forecast_page_examples.json"
|
|
34
37
|
)
|
|
35
38
|
|
|
36
|
-
# Form input keys
|
|
37
39
|
QUESTION_TEXT_BOX = "question_text_box"
|
|
38
40
|
RESOLUTION_CRITERIA_BOX = "resolution_criteria_box"
|
|
39
41
|
FINE_PRINT_BOX = "fine_print_box"
|
|
@@ -42,13 +44,91 @@ class ForecasterPage(ToolPage):
|
|
|
42
44
|
NUM_BASE_RATE_QUESTIONS_BOX = "num_base_rate_questions_box"
|
|
43
45
|
METACULUS_URL_INPUT = "metaculus_url_input"
|
|
44
46
|
FETCH_BUTTON = "fetch_button"
|
|
47
|
+
BOT_CHOICE_KEY = "forecaster_bot_choice"
|
|
48
|
+
DEFAULT_BOT_NAME = MainBot.__name__
|
|
45
49
|
|
|
46
50
|
@classmethod
|
|
47
51
|
async def _display_intro_text(cls) -> None:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
+
cls._display_bot_selector_and_config()
|
|
53
|
+
|
|
54
|
+
@classmethod
|
|
55
|
+
def _get_available_bot_classes(cls) -> list[type[ForecastBot]]:
|
|
56
|
+
bot_classes = get_all_important_bot_classes()
|
|
57
|
+
ordered: list[type[ForecastBot]] = []
|
|
58
|
+
for bot_class in bot_classes:
|
|
59
|
+
if bot_class is MainBot:
|
|
60
|
+
ordered.insert(0, bot_class)
|
|
61
|
+
elif bot_class not in ordered:
|
|
62
|
+
ordered.append(bot_class)
|
|
63
|
+
if MainBot not in ordered:
|
|
64
|
+
ordered.insert(0, MainBot)
|
|
65
|
+
return ordered
|
|
66
|
+
|
|
67
|
+
@classmethod
|
|
68
|
+
def _get_selected_bot_class(cls) -> type[ForecastBot]:
|
|
69
|
+
bot_classes = cls._get_available_bot_classes()
|
|
70
|
+
bot_class_by_name = {bot.__name__: bot for bot in bot_classes}
|
|
71
|
+
chosen_name = st.session_state.get(cls.BOT_CHOICE_KEY, cls.DEFAULT_BOT_NAME)
|
|
72
|
+
return bot_class_by_name.get(chosen_name, MainBot)
|
|
73
|
+
|
|
74
|
+
@classmethod
|
|
75
|
+
def _display_bot_selector_and_config(cls) -> None:
|
|
76
|
+
bot_classes = cls._get_available_bot_classes()
|
|
77
|
+
bot_names = [bot.__name__ for bot in bot_classes]
|
|
78
|
+
if cls.BOT_CHOICE_KEY not in st.session_state:
|
|
79
|
+
st.session_state[cls.BOT_CHOICE_KEY] = cls.DEFAULT_BOT_NAME
|
|
80
|
+
|
|
81
|
+
default_index = (
|
|
82
|
+
bot_names.index(st.session_state[cls.BOT_CHOICE_KEY])
|
|
83
|
+
if st.session_state[cls.BOT_CHOICE_KEY] in bot_names
|
|
84
|
+
else 0
|
|
85
|
+
)
|
|
86
|
+
st.selectbox(
|
|
87
|
+
"Forecasting Bot",
|
|
88
|
+
options=bot_names,
|
|
89
|
+
index=default_index,
|
|
90
|
+
key=cls.BOT_CHOICE_KEY,
|
|
91
|
+
help=(
|
|
92
|
+
"The bot used to forecast. "
|
|
93
|
+
f"`{cls.DEFAULT_BOT_NAME}` is the default and the verified "
|
|
94
|
+
"highest-accuracy bot."
|
|
95
|
+
),
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
bot_class = cls._get_selected_bot_class()
|
|
99
|
+
with st.expander("Bot Configuration", expanded=False):
|
|
100
|
+
cls._render_bot_config(bot_class)
|
|
101
|
+
|
|
102
|
+
@classmethod
|
|
103
|
+
def _render_bot_config(cls, bot_class: type[ForecastBot]) -> None:
|
|
104
|
+
try:
|
|
105
|
+
bot_instance = bot_class(
|
|
106
|
+
research_reports_per_question=1,
|
|
107
|
+
predictions_per_research_report=5,
|
|
108
|
+
publish_reports_to_metaculus=False,
|
|
109
|
+
folder_to_save_reports_to=None,
|
|
110
|
+
)
|
|
111
|
+
except Exception as exception:
|
|
112
|
+
st.error(f"Could not instantiate {bot_class.__name__}: {exception}")
|
|
113
|
+
return
|
|
114
|
+
|
|
115
|
+
docstring = (bot_class.__doc__ or "").strip()
|
|
116
|
+
if docstring:
|
|
117
|
+
st.markdown(f"**Description:** {docstring}")
|
|
118
|
+
st.markdown(f"**Bot Class:** `{bot_class.__name__}`")
|
|
119
|
+
st.markdown(
|
|
120
|
+
f"**Research Reports per Question:** "
|
|
121
|
+
f"{bot_instance.research_reports_per_question}"
|
|
122
|
+
)
|
|
123
|
+
st.markdown(
|
|
124
|
+
f"**Predictions per Research Report:** "
|
|
125
|
+
f"{bot_instance.predictions_per_research_report}"
|
|
126
|
+
)
|
|
127
|
+
st.markdown("**LLM Configuration:**")
|
|
128
|
+
st.code(
|
|
129
|
+
json.dumps(bot_instance.make_llm_dict(), indent=2, default=str),
|
|
130
|
+
language="json",
|
|
131
|
+
)
|
|
52
132
|
|
|
53
133
|
@classmethod
|
|
54
134
|
async def _get_input(cls) -> ForecastInput | None:
|
|
@@ -87,8 +167,12 @@ class ForecasterPage(ToolPage):
|
|
|
87
167
|
|
|
88
168
|
@classmethod
|
|
89
169
|
async def _run_tool(cls, input: ForecastInput) -> BinaryReport:
|
|
90
|
-
|
|
91
|
-
|
|
170
|
+
bot_class = cls._get_selected_bot_class()
|
|
171
|
+
with st.spinner(
|
|
172
|
+
f"Forecasting with `{bot_class.__name__}`... "
|
|
173
|
+
"This may take a minute or two..."
|
|
174
|
+
):
|
|
175
|
+
report = await bot_class(
|
|
92
176
|
research_reports_per_question=1,
|
|
93
177
|
predictions_per_research_report=5,
|
|
94
178
|
publish_reports_to_metaculus=False,
|
{forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/helpers/asknews_searcher.py
RENAMED
|
@@ -53,23 +53,18 @@ class AskNewsSearcher:
|
|
|
53
53
|
self.client_secret = client_secret or os.getenv("ASKNEWS_SECRET")
|
|
54
54
|
self.api_key = api_key or os.getenv("ASKNEWS_API_KEY")
|
|
55
55
|
|
|
56
|
-
# Check if both authentication methods are defined
|
|
57
56
|
has_oauth = bool(self.client_id and self.client_secret)
|
|
58
57
|
has_api_key = bool(self.api_key)
|
|
59
58
|
|
|
60
59
|
if has_oauth and has_api_key:
|
|
61
|
-
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
# Validate OAuth credentials
|
|
67
|
-
if has_oauth and (not self.client_id or not self.client_secret):
|
|
68
|
-
raise ValueError(
|
|
69
|
-
"Incomplete OAuth credentials. Both ASKNEWS_CLIENT_ID and ASKNEWS_SECRET must be set."
|
|
60
|
+
logger.warning(
|
|
61
|
+
"Both AskNews OAuth (ASKNEWS_CLIENT_ID + ASKNEWS_SECRET) and "
|
|
62
|
+
"ASKNEWS_API_KEY were provided. Preferring OAuth and ignoring the "
|
|
63
|
+
"API key."
|
|
70
64
|
)
|
|
65
|
+
self.api_key = None
|
|
66
|
+
has_api_key = False
|
|
71
67
|
|
|
72
|
-
# Validate that at least one authentication method is provided
|
|
73
68
|
if not has_oauth and not has_api_key:
|
|
74
69
|
raise ValueError(
|
|
75
70
|
"No authentication credentials provided. "
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forecasting_tools-0.2.91 → forecasting_tools-0.2.92}/forecasting_tools/agents_and_tools/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|