feat(models): add GPT-6 Sol and Luna and Claude Opus 5.5

- gpt-6-sol and gpt-6-luna are the new default deep and quick models
- claude-opus-5-5 replaces claude-opus-5 in the picker; opus-5 and gpt-5.4-mini stay known as legacy IDs
This commit is contained in:
Yijia-Xiao
2026-09-24 05:00:36 +00:00
parent 8efb702871
commit f281feb483
7 changed files with 21 additions and 20 deletions
+2 -2
View File
@@ -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
+3 -3
View File
@@ -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".
+2 -1
View File
@@ -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)
+2 -2
View File
@@ -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
+2 -2
View File
@@ -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
@@ -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.
+9 -9
View File
@@ -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"],
}