mirror of
https://github.com/TauricResearch/TradingAgents.git
synced 2026-09-27 06:56:39 +03:00
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:
+2
-2
@@ -35,8 +35,8 @@ NVIDIA_API_KEY=
|
|||||||
|
|
||||||
# Override these DEFAULT_CONFIG keys. Provider, models, language and round counts also skip their CLI prompt.
|
# Override these DEFAULT_CONFIG keys. Provider, models, language and round counts also skip their CLI prompt.
|
||||||
#TRADINGAGENTS_LLM_PROVIDER=openai
|
#TRADINGAGENTS_LLM_PROVIDER=openai
|
||||||
#TRADINGAGENTS_DEEP_THINK_LLM=gpt-5.6
|
#TRADINGAGENTS_DEEP_THINK_LLM=gpt-6-sol
|
||||||
#TRADINGAGENTS_QUICK_THINK_LLM=gpt-5.6-luna
|
#TRADINGAGENTS_QUICK_THINK_LLM=gpt-6-luna
|
||||||
#TRADINGAGENTS_LLM_BACKEND_URL=
|
#TRADINGAGENTS_LLM_BACKEND_URL=
|
||||||
#TRADINGAGENTS_OUTPUT_LANGUAGE=English
|
#TRADINGAGENTS_OUTPUT_LANGUAGE=English
|
||||||
#TRADINGAGENTS_MAX_DEBATE_ROUNDS=1
|
#TRADINGAGENTS_MAX_DEBATE_ROUNDS=1
|
||||||
|
|||||||
@@ -243,8 +243,8 @@ from tradingagents.default_config import DEFAULT_CONFIG
|
|||||||
|
|
||||||
config = DEFAULT_CONFIG.copy()
|
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["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["deep_think_llm"] = "gpt-6-sol" # Model for complex reasoning
|
||||||
config["quick_think_llm"] = "gpt-5.6-luna" # Model for quick tasks
|
config["quick_think_llm"] = "gpt-6-luna" # Model for quick tasks
|
||||||
config["max_debate_rounds"] = 2
|
config["max_debate_rounds"] = 2
|
||||||
|
|
||||||
ta = TradingAgentsGraph(debug=True, config=config)
|
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.
|
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".
|
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".
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,8 @@ class TestEffortGate:
|
|||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"model",
|
"model",
|
||||||
# Claude 5 family uses single-number version IDs; all are effort-capable.
|
# 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):
|
def test_claude_5_family_receives_effort(self, monkeypatch, model):
|
||||||
captured = _capture_kwargs(monkeypatch)
|
captured = _capture_kwargs(monkeypatch)
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ def _reload_with_env(monkeypatch, **overrides):
|
|||||||
def test_no_env_uses_built_in_defaults(monkeypatch):
|
def test_no_env_uses_built_in_defaults(monkeypatch):
|
||||||
dc = _reload_with_env(monkeypatch)
|
dc = _reload_with_env(monkeypatch)
|
||||||
assert dc.DEFAULT_CONFIG["llm_provider"] == "openai"
|
assert dc.DEFAULT_CONFIG["llm_provider"] == "openai"
|
||||||
assert dc.DEFAULT_CONFIG["deep_think_llm"] == "gpt-5.6"
|
assert dc.DEFAULT_CONFIG["deep_think_llm"] == "gpt-6-sol"
|
||||||
assert dc.DEFAULT_CONFIG["quick_think_llm"] == "gpt-5.6-luna"
|
assert dc.DEFAULT_CONFIG["quick_think_llm"] == "gpt-6-luna"
|
||||||
assert dc.DEFAULT_CONFIG["backend_url"] is None
|
assert dc.DEFAULT_CONFIG["backend_url"] is None
|
||||||
assert dc.DEFAULT_CONFIG["max_debate_rounds"] == 1
|
assert dc.DEFAULT_CONFIG["max_debate_rounds"] == 1
|
||||||
assert dc.DEFAULT_CONFIG["checkpoint_enabled"] is False
|
assert dc.DEFAULT_CONFIG["checkpoint_enabled"] is False
|
||||||
|
|||||||
@@ -79,8 +79,8 @@ DEFAULT_CONFIG = _apply_env_overrides({
|
|||||||
"memory_log_max_entries": None,
|
"memory_log_max_entries": None,
|
||||||
# LLM settings
|
# LLM settings
|
||||||
"llm_provider": "openai",
|
"llm_provider": "openai",
|
||||||
"deep_think_llm": "gpt-5.6",
|
"deep_think_llm": "gpt-6-sol",
|
||||||
"quick_think_llm": "gpt-5.6-luna",
|
"quick_think_llm": "gpt-6-luna",
|
||||||
# When None, each provider's client falls back to its own default endpoint
|
# When None, each provider's client falls back to its own default endpoint
|
||||||
# (api.openai.com for OpenAI, generativelanguage.googleapis.com for Gemini, ...).
|
# (api.openai.com for OpenAI, generativelanguage.googleapis.com for Gemini, ...).
|
||||||
# The CLI overrides this per provider when the user picks one. Keeping a
|
# 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+,
|
# 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"``
|
# 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``,
|
# (#831). Versions may be dotted (``opus-4-8``) or single-number (``sonnet-5``,
|
||||||
# ``fable-5``); the per-family minimum below is forward-compatible.
|
# ``fable-5``); the per-family minimum below is forward-compatible.
|
||||||
|
|||||||
@@ -96,16 +96,16 @@ _MINIMAX_MODELS: dict[str, list[ModelOption]] = {
|
|||||||
MODEL_OPTIONS: ProviderModeOptions = {
|
MODEL_OPTIONS: ProviderModeOptions = {
|
||||||
"openai": {
|
"openai": {
|
||||||
"quick": [
|
"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.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"),
|
("Custom model ID", "custom"),
|
||||||
],
|
],
|
||||||
"deep": [
|
"deep": [
|
||||||
("GPT-6 Astra - Latest frontier reasoning", "gpt-6-astra"),
|
("GPT-6 Sol - Complex reasoning and analysis", "gpt-6-sol"),
|
||||||
("GPT-5.6 - Frontier reasoning (Sol)", "gpt-5.6"),
|
("GPT-6 Astra - Hardest multi-step reasoning", "gpt-6-astra"),
|
||||||
("GPT-5.6 Terra - Balances intelligence and cost", "gpt-5.6-terra"),
|
("GPT-5.6 - Previous-gen reasoning (Sol)", "gpt-5.6"),
|
||||||
("GPT-5.5 - Previous-gen frontier, 1M context", "gpt-5.5"),
|
("GPT-5.5 - Earlier frontier, 1M context", "gpt-5.5"),
|
||||||
("Custom model ID", "custom"),
|
("Custom model ID", "custom"),
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -116,7 +116,7 @@ MODEL_OPTIONS: ProviderModeOptions = {
|
|||||||
("Custom model ID", "custom"),
|
("Custom model ID", "custom"),
|
||||||
],
|
],
|
||||||
"deep": [
|
"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 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"),
|
("Claude Sonnet 5 - Near-frontier intelligence at Sonnet cost", "claude-sonnet-5"),
|
||||||
("Custom model ID", "custom"),
|
("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
|
# 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.
|
# validation so a config naming one runs without an unknown-model warning.
|
||||||
LEGACY_MODELS: dict[str, list[str]] = {
|
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",
|
"xai": ["grok-4.20-0309-reasoning", "grok-4.20-0309-non-reasoning",
|
||||||
"grok-4.20-multi-agent-0309"],
|
"grok-4.20-multi-agent-0309"],
|
||||||
"deepseek": ["deepseek-v4-flash"],
|
"deepseek": ["deepseek-v4-flash"],
|
||||||
"qwen": ["qwen3.7-max", "qwen3.7-plus", "qwen3.6-max", "qwen3.6-plus"],
|
"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"],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user