forecasting-tools 0.2.80__tar.gz → 0.2.81__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.80 → forecasting_tools-0.2.81}/PKG-INFO +1 -1
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/data_models/numeric_report.py +1 -1
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/data_models/questions.py +9 -2
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/official_bots/template_bot_2026_spring.py +6 -5
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/helpers/metaculus_client.py +8 -6
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/util/misc.py +4 -4
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/pyproject.toml +1 -1
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/LICENSE +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/README.md +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/__init__.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/__init__.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/base_rates/base_rate_researcher.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/base_rates/deduplicator.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/base_rates/estimator.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/base_rates/niche_list_researcher.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/deprecated/configured_llms.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/deprecated/general_researcher.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/deprecated/question_generator.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/deprecated/question_responder.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/deprecated/question_router.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/deprecated/research_coordinator.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/minor_tools.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/other/data_analyzer.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/other/hosted_file.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/question_generators/generated_question.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/question_generators/harmful_question_identifier.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/question_generators/q3_q4_quarterly_questions.json +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/question_generators/question_decomposer.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/question_generators/question_operationalizer.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/question_generators/simple_question.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/question_generators/topic_generator.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/research/computer_use.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/research/find_a_dataset.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/research/key_factors_researcher.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/agents_and_tools/research/smart_searcher.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/__init__.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/agent_wrappers.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/ai_utils/__init__.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/ai_utils/openai_utils.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/ai_utils/response_types.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/deprecated_model_classes/README.md +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/deprecated_model_classes/claude35sonnet.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/deprecated_model_classes/deepseek_r1.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/deprecated_model_classes/gpt4o.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/deprecated_model_classes/gpt4ovision.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/deprecated_model_classes/gpto1.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/deprecated_model_classes/gpto1preview.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/deprecated_model_classes/metaculus4o.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/deprecated_model_classes/perplexity.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/exa_searcher.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/general_llm.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/model_interfaces/__init__.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/model_interfaces/ai_model.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/model_interfaces/combined_llm_archetype.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/model_interfaces/incurs_cost.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/model_interfaces/named_model.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/model_interfaces/outputs_text.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/model_interfaces/priced_per_request.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/model_interfaces/request_limited_model.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/model_interfaces/retryable_model.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/model_interfaces/time_limited_model.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/model_interfaces/token_limited_model.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/model_interfaces/tokens_are_calculatable.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/model_interfaces/tokens_incur_cost.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/model_tracker.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/resource_managers/__init__.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/resource_managers/hard_limit_manager.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/resource_managers/monetary_cost_manager.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/resource_managers/refreshing_bucket_rate_limiter.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/auto_optimizers/bot_evaluator.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/auto_optimizers/bot_optimizer.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/auto_optimizers/control_prompt.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/auto_optimizers/customizable_bot.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/auto_optimizers/prompt_data_models.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/auto_optimizers/prompt_optimizer.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/auto_optimizers/question_plus_research.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/cp_benchmarking/benchmark_displayer.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/cp_benchmarking/benchmark_for_bot.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/cp_benchmarking/benchmarker.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/data_models/__init__.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/data_models/binary_report.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/data_models/coherence_link.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/data_models/conditional_models.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/data_models/conditional_report.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/data_models/data_organizer.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/data_models/forecast_report.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/data_models/markdown_tree.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/data_models/multiple_choice_report.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/data_models/timestamped_predictions.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/__init__.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/bot_lists.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/experiments/__init__.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/experiments/q1_veritas_bot.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/experiments/q1t_w_convert_to_binary.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/experiments/q1t_w_personas_and_exa.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/experiments/q2t_w_decomposition.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/experiments/q3t_w_asknews.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/experiments/q3t_w_exa.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/experiments/q3t_w_q4vbinary.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/experiments/q4_veritas_bot.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/experiments/q4v_w_exa.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/experiments/q4v_w_exa_and_dseekr1.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/experiments/q4v_w_exa_and_o1_preview.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/forecast_bot.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/main_bot.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/official_bots/__init__.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/official_bots/gpt_4_1_optimized_bot.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/official_bots/q1_template_bot.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/official_bots/q2_template_bot.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/official_bots/q3_template_bot.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/official_bots/q4_template_bot.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/official_bots/research_only_bot_2025_fall.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/official_bots/template_bot_2025_fall.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/official_bots/uniform_probability_bot.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/template_bot.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/Home.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/app_pages/base_rate_page.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/app_pages/benchmark_page.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/app_pages/chat_page.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/app_pages/csv_agent.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/app_pages/estimator_page.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/app_pages/forecaster_page.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/app_pages/key_factors_page.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/app_pages/niche_list_researcher_page.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/example_outputs/base_rate_page_examples.json +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/example_outputs/estimator_page_examples.json +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/example_outputs/forecast_page_examples.json +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/example_outputs/key_factors_page_examples.json +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/example_outputs/niche_list_page_examples.json +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/example_outputs/question_generator_page_examples.json +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/helpers/app_page.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/helpers/custom_auth.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/helpers/report_displayer.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/front_end/helpers/tool_page.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/helpers/__init__.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/helpers/adjacent_news_api.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/helpers/asknews_searcher.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/helpers/forecast_database_manager.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/helpers/metaculus_api.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/helpers/prediction_extractor.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/helpers/structure_output.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/helpers/works_cited_creator.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/util/__init__.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/util/async_batching.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/util/coda_utils.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/util/custom_logger.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/util/file_manipulation.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/util/jsonable.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/util/launch_utils.py +0 -0
- {forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/util/stats.py +0 -0
|
@@ -22,10 +22,10 @@ logger = logging.getLogger(__name__)
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class NumericDefaults:
|
|
25
|
-
DEFAULT_INBOUND_OUTCOME_COUNT = 200
|
|
26
25
|
DEFAULT_CDF_SIZE = (
|
|
27
26
|
201 # Discrete questions have fewer points, Numeric will have 201 points
|
|
28
27
|
)
|
|
28
|
+
DEFAULT_INBOUND_OUTCOME_COUNT = DEFAULT_CDF_SIZE - 1
|
|
29
29
|
MAX_NUMERIC_PMF_VALUE = 0.2
|
|
30
30
|
|
|
31
31
|
@classmethod
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/data_models/questions.py
RENAMED
|
@@ -403,8 +403,15 @@ class BoundedQuestionMixin:
|
|
|
403
403
|
lower_bound = api_json["question"]["scaling"]["range_min"]
|
|
404
404
|
zero_point = api_json["question"]["scaling"]["zero_point"]
|
|
405
405
|
|
|
406
|
-
|
|
407
|
-
|
|
406
|
+
try:
|
|
407
|
+
upper_bound = float(upper_bound)
|
|
408
|
+
lower_bound = float(lower_bound)
|
|
409
|
+
except (TypeError, ValueError):
|
|
410
|
+
logger.error(
|
|
411
|
+
f"Error parsing bounds from API JSON. "
|
|
412
|
+
f"Upper bound: {upper_bound}, Lower bound: {lower_bound}"
|
|
413
|
+
)
|
|
414
|
+
raise
|
|
408
415
|
return (
|
|
409
416
|
open_upper_bound,
|
|
410
417
|
open_lower_bound,
|
|
@@ -45,7 +45,7 @@ class SpringTemplateBot2026(ForecastBot):
|
|
|
45
45
|
So far our track record has been 1 mentionable bug per season (affecting forecasts for 1-2% of total questions)
|
|
46
46
|
|
|
47
47
|
Main changes since Fall:
|
|
48
|
-
- Additional prompting has been added to numeric questions to emphasize putting
|
|
48
|
+
- Additional prompting has been added to numeric questions to emphasize putting percentile values in the correct order.
|
|
49
49
|
- Support for conditional and date questions has been added
|
|
50
50
|
- Note: Spring AIB will not use date/conditional questions, so these are only for forecasting on the main site as you wish.
|
|
51
51
|
|
|
@@ -93,7 +93,7 @@ class SpringTemplateBot2026(ForecastBot):
|
|
|
93
93
|
|
|
94
94
|
Then you can access the model in custom functions like this:
|
|
95
95
|
```python
|
|
96
|
-
research_strategy = self.get_llm("researcher", "model_name"
|
|
96
|
+
research_strategy = self.get_llm("researcher", "model_name")
|
|
97
97
|
if research_strategy == "asknews/news-summaries":
|
|
98
98
|
...
|
|
99
99
|
# OR
|
|
@@ -265,7 +265,7 @@ class SpringTemplateBot2026(ForecastBot):
|
|
|
265
265
|
Before answering you write:
|
|
266
266
|
(a) The time left until the outcome to the question is known.
|
|
267
267
|
(b) The status quo outcome if nothing changed.
|
|
268
|
-
(c) A description of
|
|
268
|
+
(c) A description of a scenario that results in an unexpected outcome.
|
|
269
269
|
|
|
270
270
|
{self._get_conditional_disclaimer_if_necessary(question)}
|
|
271
271
|
You write your rationale remembering that (1) good forecasters put extra weight on the status quo outcome since the world changes slowly most of the time, and (2) good forecasters leave some moderate probability on most options to account for unexpected outcomes.
|
|
@@ -436,7 +436,7 @@ class SpringTemplateBot2026(ForecastBot):
|
|
|
436
436
|
|
|
437
437
|
Formatting Instructions:
|
|
438
438
|
- This is a date question, and as such, the answer must be expressed in terms of dates.
|
|
439
|
-
- The dates must be written in the format of YYYY-MM-DD. If hours matter, please append the date with the hour in UTC and military time: YYYY-MM-DDTHH:MM:SSZ.No other formatting is allowed.
|
|
439
|
+
- The dates must be written in the format of YYYY-MM-DD. If hours matter, please append the date with the hour in UTC and military time: YYYY-MM-DDTHH:MM:SSZ. No other formatting is allowed.
|
|
440
440
|
- Always start with a lower date chronologically and then increase from there.
|
|
441
441
|
- Do NOT forget this. The dates must be written in chronological order starting at the earliest time at percentile 10 and increasing from there.
|
|
442
442
|
|
|
@@ -590,7 +590,7 @@ class SpringTemplateBot2026(ForecastBot):
|
|
|
590
590
|
previous_forecast.timestamp_end is None
|
|
591
591
|
or previous_forecast.timestamp_end > current_utc_time
|
|
592
592
|
):
|
|
593
|
-
pretty_value = DataOrganizer.get_readable_prediction(previous_forecast)
|
|
593
|
+
pretty_value = DataOrganizer.get_readable_prediction(previous_forecast) # type: ignore
|
|
594
594
|
prediction = ReasonedPrediction(
|
|
595
595
|
prediction_value=PredictionAffirmed(),
|
|
596
596
|
reasoning=f"Already existing forecast reaffirmed at {pretty_value}.",
|
|
@@ -673,6 +673,7 @@ if __name__ == "__main__":
|
|
|
673
673
|
publish_reports_to_metaculus=True,
|
|
674
674
|
folder_to_save_reports_to=None,
|
|
675
675
|
skip_previously_forecasted_questions=True,
|
|
676
|
+
extra_metadata_in_explanation=True,
|
|
676
677
|
# llms={ # choose your model names or GeneralLlm llms here, otherwise defaults will be chosen for you
|
|
677
678
|
# "default": GeneralLlm(
|
|
678
679
|
# model="openrouter/openai/gpt-4o", # "anthropic/claude-sonnet-4-20250514", etc (see docs for litellm)
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/helpers/metaculus_client.py
RENAMED
|
@@ -38,6 +38,8 @@ from forecasting_tools.util.misc import (
|
|
|
38
38
|
|
|
39
39
|
logger = logging.getLogger(__name__)
|
|
40
40
|
|
|
41
|
+
API_BASE_URL = os.getenv("METACULUS_API_BASE_URL", "https://www.metaculus.com/api")
|
|
42
|
+
|
|
41
43
|
Q = TypeVar("Q", bound=MetaculusQuestion)
|
|
42
44
|
T = TypeVar("T", bound=BaseModel)
|
|
43
45
|
|
|
@@ -140,14 +142,14 @@ class MetaculusClient:
|
|
|
140
142
|
|
|
141
143
|
def __init__(
|
|
142
144
|
self,
|
|
143
|
-
base_url: str =
|
|
145
|
+
base_url: str = API_BASE_URL,
|
|
144
146
|
timeout: int = 30,
|
|
145
|
-
|
|
146
|
-
sleep_jitter_seconds: float =
|
|
147
|
+
sleep_seconds_between_requests: float = 3.5,
|
|
148
|
+
sleep_jitter_seconds: float = 1,
|
|
147
149
|
):
|
|
148
150
|
self.base_url = base_url
|
|
149
151
|
self.timeout = timeout
|
|
150
|
-
self.sleep_time_between_requests_min =
|
|
152
|
+
self.sleep_time_between_requests_min = sleep_seconds_between_requests
|
|
151
153
|
self.sleep_jitter_seconds = sleep_jitter_seconds
|
|
152
154
|
|
|
153
155
|
@retry_with_exponential_backoff()
|
|
@@ -398,7 +400,7 @@ class MetaculusClient:
|
|
|
398
400
|
return questions
|
|
399
401
|
|
|
400
402
|
@retry_with_exponential_backoff()
|
|
401
|
-
def get_current_user_id(self):
|
|
403
|
+
def get_current_user_id(self) -> int:
|
|
402
404
|
self._sleep_between_requests()
|
|
403
405
|
response = requests.get(
|
|
404
406
|
f"{self.base_url}/users/me",
|
|
@@ -406,7 +408,7 @@ class MetaculusClient:
|
|
|
406
408
|
)
|
|
407
409
|
raise_for_status_with_additional_info(response)
|
|
408
410
|
content = json.loads(response.content)
|
|
409
|
-
return content["id"]
|
|
411
|
+
return int(content["id"])
|
|
410
412
|
|
|
411
413
|
@retry_with_exponential_backoff()
|
|
412
414
|
def post_question_link(
|
|
@@ -39,10 +39,10 @@ def raise_for_status_with_additional_info(
|
|
|
39
39
|
|
|
40
40
|
def retry_with_exponential_backoff(
|
|
41
41
|
max_retries: int = 3,
|
|
42
|
-
initial_delay: float =
|
|
43
|
-
exponential_base: float =
|
|
44
|
-
jitter_factor: float =
|
|
45
|
-
max_delay: float =
|
|
42
|
+
initial_delay: float = 2.5,
|
|
43
|
+
exponential_base: float = 3,
|
|
44
|
+
jitter_factor: float = 8.0,
|
|
45
|
+
max_delay: float = 75.0,
|
|
46
46
|
retry_on_exceptions: tuple[type[Exception], ...] = (
|
|
47
47
|
requests.exceptions.RequestException,
|
|
48
48
|
requests.exceptions.Timeout,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/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
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/__init__.py
RENAMED
|
File without changes
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/agent_wrappers.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
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/exa_searcher.py
RENAMED
|
File without changes
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/general_llm.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
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/ai_models/model_tracker.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
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/data_models/__init__.py
RENAMED
|
File without changes
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/data_models/binary_report.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/data_models/markdown_tree.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/__init__.py
RENAMED
|
File without changes
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/bot_lists.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
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/forecast_bots/main_bot.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
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/helpers/adjacent_news_api.py
RENAMED
|
File without changes
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/helpers/asknews_searcher.py
RENAMED
|
File without changes
|
|
File without changes
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/helpers/metaculus_api.py
RENAMED
|
File without changes
|
|
File without changes
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/helpers/structure_output.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/util/async_batching.py
RENAMED
|
File without changes
|
|
File without changes
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/util/custom_logger.py
RENAMED
|
File without changes
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/util/file_manipulation.py
RENAMED
|
File without changes
|
|
File without changes
|
{forecasting_tools-0.2.80 → forecasting_tools-0.2.81}/forecasting_tools/util/launch_utils.py
RENAMED
|
File without changes
|
|
File without changes
|