diff --git a/.env.example b/.env.example index d17ac1c2b..fa24e8963 100644 --- a/.env.example +++ b/.env.example @@ -35,8 +35,8 @@ NVIDIA_API_KEY= # Override these DEFAULT_CONFIG keys. Provider, models, language and round counts also skip their CLI prompt. #TRADINGAGENTS_LLM_PROVIDER=openai -#TRADINGAGENTS_DEEP_THINK_LLM=gpt-5.6 -#TRADINGAGENTS_QUICK_THINK_LLM=gpt-5.6-luna +#TRADINGAGENTS_DEEP_THINK_LLM=gpt-6-sol +#TRADINGAGENTS_QUICK_THINK_LLM=gpt-6-luna #TRADINGAGENTS_LLM_BACKEND_URL= #TRADINGAGENTS_OUTPUT_LANGUAGE=English #TRADINGAGENTS_MAX_DEBATE_ROUNDS=1 diff --git a/README.md b/README.md index 54213bb4e..d5008133c 100644 --- a/README.md +++ b/README.md @@ -243,8 +243,8 @@ from tradingagents.default_config import DEFAULT_CONFIG config = DEFAULT_CONFIG.copy() config["llm_provider"] = "openai" # e.g. openai, google, anthropic, deepseek, groq, ollama; openai_compatible covers any OpenAI-compatible endpoint (vLLM, LM Studio, llama.cpp, ...) -config["deep_think_llm"] = "gpt-5.6" # Model for complex reasoning -config["quick_think_llm"] = "gpt-5.6-luna" # Model for quick tasks +config["deep_think_llm"] = "gpt-6-sol" # Model for complex reasoning +config["quick_think_llm"] = "gpt-6-luna" # Model for quick tasks config["max_debate_rounds"] = 2 ta = TradingAgentsGraph(debug=True, config=config) @@ -343,7 +343,7 @@ Each cell is scored on realized alpha against the instrument's regional benchmar TradingAgents is LLM-driven, so two runs of the same ticker and date can differ. This is expected for a research tool built on language models, not a defect. The variation comes from a few distinct sources, and it helps to separate them. -Language model sampling is non-deterministic. Even at a fixed temperature, providers do not guarantee byte-identical output across calls, and reasoning models (the default GPT-5.x family, and any thinking-mode model) vary the most because their internal reasoning is itself sampled. +Language model sampling is non-deterministic. Even at a fixed temperature, providers do not guarantee byte-identical output across calls, and reasoning models (the default GPT-6 family, and any thinking-mode model) vary the most because their internal reasoning is itself sampled. Live data moves. News, StockTwits, and Reddit return different content as time passes, so a run today sees different inputs than a run last week even for the same historical trade date. Pin the analysis date to hold the price and indicator window fixed, but the social and news sources still reflect "now". diff --git a/tests/test_anthropic_effort.py b/tests/test_anthropic_effort.py index 7d98c7d78..d576f6aa6 100644 --- a/tests/test_anthropic_effort.py +++ b/tests/test_anthropic_effort.py @@ -60,7 +60,8 @@ class TestEffortGate: @pytest.mark.parametrize( "model", # Claude 5 family uses single-number version IDs; all are effort-capable. - ["claude-sonnet-5", "claude-fable-5", "claude-mythos-5", "claude-opus-5", "claude-fable-5-1"], + ["claude-sonnet-5", "claude-fable-5", "claude-mythos-5", "claude-opus-5", "claude-opus-5-5", + "claude-fable-5-1"], ) def test_claude_5_family_receives_effort(self, monkeypatch, model): captured = _capture_kwargs(monkeypatch) diff --git a/tests/test_env_overrides.py b/tests/test_env_overrides.py index 7afc6833a..8dde7b492 100644 --- a/tests/test_env_overrides.py +++ b/tests/test_env_overrides.py @@ -22,8 +22,8 @@ def _reload_with_env(monkeypatch, **overrides): def test_no_env_uses_built_in_defaults(monkeypatch): dc = _reload_with_env(monkeypatch) assert dc.DEFAULT_CONFIG["llm_provider"] == "openai" - assert dc.DEFAULT_CONFIG["deep_think_llm"] == "gpt-5.6" - assert dc.DEFAULT_CONFIG["quick_think_llm"] == "gpt-5.6-luna" + assert dc.DEFAULT_CONFIG["deep_think_llm"] == "gpt-6-sol" + assert dc.DEFAULT_CONFIG["quick_think_llm"] == "gpt-6-luna" assert dc.DEFAULT_CONFIG["backend_url"] is None assert dc.DEFAULT_CONFIG["max_debate_rounds"] == 1 assert dc.DEFAULT_CONFIG["checkpoint_enabled"] is False diff --git a/tradingagents/default_config.py b/tradingagents/default_config.py index 918053dd7..3bfaf3db9 100644 --- a/tradingagents/default_config.py +++ b/tradingagents/default_config.py @@ -79,8 +79,8 @@ DEFAULT_CONFIG = _apply_env_overrides({ "memory_log_max_entries": None, # LLM settings "llm_provider": "openai", - "deep_think_llm": "gpt-5.6", - "quick_think_llm": "gpt-5.6-luna", + "deep_think_llm": "gpt-6-sol", + "quick_think_llm": "gpt-6-luna", # When None, each provider's client falls back to its own default endpoint # (api.openai.com for OpenAI, generativelanguage.googleapis.com for Gemini, ...). # The CLI overrides this per provider when the user picks one. Keeping a diff --git a/tradingagents/llm_clients/anthropic_client.py b/tradingagents/llm_clients/anthropic_client.py index 04afee071..23772c65c 100644 --- a/tradingagents/llm_clients/anthropic_client.py +++ b/tradingagents/llm_clients/anthropic_client.py @@ -12,7 +12,7 @@ _PASSTHROUGH_KWARGS = ( ) # Anthropic's extended-thinking ``effort`` parameter is accepted by Opus 4.5+, -# Sonnet 4.6+, and the Claude 5 family (Sonnet 5, Fable 5). Sonnet 4.5 and any +# Sonnet 4.6+, and the Claude 5 family (Sonnet 5, Opus 5.5, Fable 5). Sonnet 4.5 and any # Haiku version 400 with ``"This model does not support the effort parameter"`` # (#831). Versions may be dotted (``opus-4-8``) or single-number (``sonnet-5``, # ``fable-5``); the per-family minimum below is forward-compatible. diff --git a/tradingagents/llm_clients/model_catalog.py b/tradingagents/llm_clients/model_catalog.py index b799d4b2a..d57ffe0a4 100644 --- a/tradingagents/llm_clients/model_catalog.py +++ b/tradingagents/llm_clients/model_catalog.py @@ -96,16 +96,16 @@ _MINIMAX_MODELS: dict[str, list[ModelOption]] = { MODEL_OPTIONS: ProviderModeOptions = { "openai": { "quick": [ - ("GPT-5.6 Luna - Fast, cost-efficient frontier", "gpt-5.6-luna"), + ("GPT-6 Luna - Fast, high-volume and cost-efficient", "gpt-6-luna"), + ("GPT-5.6 Luna - Previous-gen fast tier", "gpt-5.6-luna"), ("GPT-5.6 Terra - Balances intelligence and cost", "gpt-5.6-terra"), - ("GPT-5.4 Mini - Fast, strong coding and tool use", "gpt-5.4-mini"), ("Custom model ID", "custom"), ], "deep": [ - ("GPT-6 Astra - Latest frontier reasoning", "gpt-6-astra"), - ("GPT-5.6 - Frontier reasoning (Sol)", "gpt-5.6"), - ("GPT-5.6 Terra - Balances intelligence and cost", "gpt-5.6-terra"), - ("GPT-5.5 - Previous-gen frontier, 1M context", "gpt-5.5"), + ("GPT-6 Sol - Complex reasoning and analysis", "gpt-6-sol"), + ("GPT-6 Astra - Hardest multi-step reasoning", "gpt-6-astra"), + ("GPT-5.6 - Previous-gen reasoning (Sol)", "gpt-5.6"), + ("GPT-5.5 - Earlier frontier, 1M context", "gpt-5.5"), ("Custom model ID", "custom"), ], }, @@ -116,7 +116,7 @@ MODEL_OPTIONS: ProviderModeOptions = { ("Custom model ID", "custom"), ], "deep": [ - ("Claude Opus 5 - Frontier agentic and enterprise work", "claude-opus-5"), + ("Claude Opus 5.5 - Frontier agentic and enterprise work", "claude-opus-5-5"), ("Claude Fable 5.1 - Most capable, demanding long-horizon reasoning", "claude-fable-5-1"), ("Claude Sonnet 5 - Near-frontier intelligence at Sonnet cost", "claude-sonnet-5"), ("Custom model ID", "custom"), @@ -233,12 +233,12 @@ def get_model_options(provider: str, mode: str) -> list[ModelOption]: # menu, and the explicit ID of a model listed under a shorter name. Known to # validation so a config naming one runs without an unknown-model warning. LEGACY_MODELS: dict[str, list[str]] = { - "openai": ["gpt-5.4", "gpt-5.6-sol"], + "openai": ["gpt-5.4", "gpt-5.4-mini", "gpt-5.6-sol"], "xai": ["grok-4.20-0309-reasoning", "grok-4.20-0309-non-reasoning", "grok-4.20-multi-agent-0309"], "deepseek": ["deepseek-v4-flash"], "qwen": ["qwen3.7-max", "qwen3.7-plus", "qwen3.6-max", "qwen3.6-plus"], - "anthropic": ["claude-fable-5", "claude-opus-4-8", "claude-opus-4-7"], + "anthropic": ["claude-opus-5", "claude-fable-5", "claude-opus-4-8", "claude-opus-4-7"], }