mirror of
https://github.com/TauricResearch/TradingAgents.git
synced 2026-06-16 21:06:15 +03:00
Headline themes in v0.2.5: - Sentiment Analyst grounded in real data. Renamed from social_media_analyst and redesigned to pre-fetch Yahoo News, StockTwits, and Reddit before the LLM is invoked, ending the prior fabrication behavior. - MiniMax provider with full M2.x catalog and dual-region split. Qwen and GLM also split into international + China regions with separate API keys and a clean secondary region prompt in the CLI. - TRADINGAGENTS_* env-var overlay for DEFAULT_CONFIG with type-aware coercion; .env loading centralized so every entry point sees the user's keys. Interactive API-key detection prompts and persists missing keys to .env on the fly. - OLLAMA_BASE_URL end-to-end for remote ollama-serve, plus a Custom model ID option in the Ollama dropdown. - Configurable news-fetch parameters and configurable alpha benchmark for non-US tickers (.NS / .T / .HK / .L / .TO / .AX / .BO ship with sensible regional defaults). - Multi-language output now propagates to every user-facing agent (researchers, risk debators, research manager, trader) instead of only the analysts and portfolio manager. - Model catalog refresh across all providers (GPT-5.5 frontier, Claude Opus 4.7, Gemini 3.1 Flash-Lite GA, Grok 4.20, Qwen 3.6 line). - Capability-dispatch table drives provider-specific structured-output quirks (DeepSeek V4/reasoner and MiniMax M2.x tool_choice rejection, MiniMax reasoning_split) so the general client stays clean. - Fixes: ticker path-traversal validation (security), dotenv loading via console script, reports save bug, exchange-suffix truncation in the ticker prompt, Docker permission errors, deepcopy config isolation, max_recur_limit plumbing, clearer missing-API-key error. See CHANGELOG.md for the full per-item list with issue/PR references.
342 lines
17 KiB
Markdown
342 lines
17 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to TradingAgents are documented here.
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
Breaking changes within the 0.x line are called out explicitly.
|
|
|
|
## [0.2.5] — 2026-05-11
|
|
|
|
### Added
|
|
|
|
- **Grounded Sentiment Analyst.** The renamed `sentiment_analyst` now reads
|
|
real Yahoo News, StockTwits, and Reddit data before generating its report,
|
|
replacing the prior flow that could fabricate social posts under prompt
|
|
pressure. (#557, #607)
|
|
- **MiniMax provider** with the full M2.x catalog (M2.7 / M2.5 / M2.1 / M2
|
|
plus highspeed variants, 204K context). Dual-region: Global
|
|
(`MINIMAX_API_KEY`) and China (`MINIMAX_CN_API_KEY`).
|
|
- **Dual-region Qwen and GLM** with separate keys per region — international
|
|
(`DASHSCOPE_API_KEY`, `ZHIPU_API_KEY`) and China (`DASHSCOPE_CN_API_KEY`,
|
|
`ZHIPU_CN_API_KEY`), selectable via a secondary region prompt. (#758)
|
|
- **`TRADINGAGENTS_*` env-var configurability for `DEFAULT_CONFIG`.** Override
|
|
`llm_provider`, deep/quick model IDs, `backend_url`, `output_language`,
|
|
debate-round counts, checkpoint flag, and benchmark ticker via `.env` with
|
|
type-aware coercion (string / int / bool). (#602)
|
|
- **Interactive API-key detection in the CLI.** When the selected provider's
|
|
key is missing, the CLI prompts for it and persists the value to `.env`
|
|
so the analysis run continues without restart.
|
|
- **Remote Ollama support.** `OLLAMA_BASE_URL` points the CLI and the
|
|
programmatic client at a remote `ollama-serve`. The CLI surfaces the
|
|
resolved endpoint and warns on common malformed inputs. Adds a
|
|
`"Custom model ID"` option for models pulled via `ollama pull`. (#648, #768)
|
|
- **Configurable news-fetch parameters** in `DEFAULT_CONFIG` — per-ticker
|
|
article limit, macro headline limit, lookback window, and macro search
|
|
queries. (#606, #683)
|
|
- **Configurable alpha benchmark** for non-US tickers. Replaces hardcoded
|
|
SPY with regional indices for `.NS` (^NSEI), `.T` (^N225), `.HK` (^HSI),
|
|
`.L` (^FTSE), `.TO` (^GSPTSE), `.AX` (^AXJO), `.BO` (^BSESN); explicit
|
|
`benchmark_ticker` override available. Eliminates FX drift dominating
|
|
alpha for non-USD listings. (#628, #684)
|
|
- **Multi-language output covers every user-facing agent** — researchers,
|
|
risk debators, research manager, and trader, ending the previous
|
|
partial-localization reports. (#575)
|
|
- **Model catalog refresh.** OpenAI GPT-5.5 frontier, Anthropic Claude Opus
|
|
4.7, Gemini 3.1 Flash-Lite GA, xAI Grok 4.20, Qwen 3.6 line. Versioned IDs
|
|
only; auto-shifting aliases moved to the `"Custom model ID"` option.
|
|
|
|
### Changed
|
|
|
|
- **Sentiment Analyst** is now consistently named across the CLI dropdown,
|
|
status panel, and final reports (previously the backend was renamed but
|
|
the CLI still said "Social Analyst"). The `AnalystType.SOCIAL = "social"`
|
|
wire value is kept for saved-config back-compat.
|
|
|
|
### Fixed
|
|
|
|
- **Structured output works on DeepSeek V4 / reasoner and MiniMax M2.x.**
|
|
Those providers reject `tool_choice` per their tool-calling docs; the
|
|
binding flow now skips it automatically via a capability table.
|
|
- **`pip install .` installations pick up the project `.env`** when running
|
|
the CLI as a console script. (#747)
|
|
- **Reports save end-to-end** — streamed chunks were previously dropped from
|
|
`complete_report.md`. (#719, #736)
|
|
- **Ticker prompt preserves exchange suffixes** (`.SH`, `.SZ`, `.SS`, `.HK`,
|
|
`.T`, etc.) for A-share, HK, Tokyo, and other non-US flows. (#770)
|
|
- **Docker permission errors** no longer block first-run write to
|
|
`~/.tradingagents/`. (#519, #627, #672, #771)
|
|
- **Config state no longer leaks between runs** when sub-dicts are mutated;
|
|
`set_config` partial updates preserve sibling defaults. (#788)
|
|
- **`max_recur_limit` config actually applies** — previously read but not
|
|
forwarded to the propagator. (#764)
|
|
- **Missing-API-key error** names the exact env var to set. (#680)
|
|
- **Quieter startup** — suppressed the noisy upstream
|
|
`LangChainPendingDeprecationWarning` from langgraph-checkpoint; will be
|
|
removed once that package ships its fix.
|
|
|
|
### Security
|
|
|
|
- **Ticker path-traversal validation** at every filesystem-path site (cache,
|
|
checkpoint database, results) so a malicious ticker cannot escape its
|
|
intended directory. (#618)
|
|
|
|
## [0.2.4] — 2026-04-25
|
|
|
|
### Added
|
|
|
|
- **Structured-output decision agents.** Research Manager, Trader, and Portfolio
|
|
Manager now use `llm.with_structured_output(Schema)` on their primary call
|
|
and return typed Pydantic instances. Each provider's native structured-output
|
|
mode is used (`json_schema` for OpenAI / xAI, `response_schema` for Gemini,
|
|
tool-use for Anthropic, function-calling for OpenAI-compatible providers).
|
|
Render helpers preserve the existing markdown shape so memory log, CLI
|
|
display, and saved reports keep working unchanged. (#434)
|
|
- **LangGraph checkpoint resume** — opt-in via `--checkpoint`. State is saved
|
|
after each node so crashed or interrupted runs resume from the last
|
|
successful step. Per-ticker SQLite databases under
|
|
`~/.tradingagents/cache/checkpoints/`. `--clear-checkpoints` resets them. (#594)
|
|
- **Persistent decision log** replacing the per-agent BM25 memory. Decisions
|
|
are stored automatically at the end of `propagate()`; the next same-ticker
|
|
run resolves prior pending entries with realised return, alpha vs SPY, and
|
|
a one-paragraph reflection. Override path with `TRADINGAGENTS_MEMORY_LOG_PATH`.
|
|
Optional `memory_log_max_entries` config caps resolved entries; pending
|
|
entries are never pruned. (#578, #563, #564, #579)
|
|
- **DeepSeek, Qwen (Alibaba DashScope), GLM (Zhipu), and Azure OpenAI**
|
|
providers, plus dynamic OpenRouter model selection.
|
|
- **Docker support** — multi-stage build with separate dev and runtime images.
|
|
- **`scripts/smoke_structured_output.py`** — diagnostic that exercises the
|
|
three structured-output agents against any provider so contributors can
|
|
verify their setup with one command.
|
|
- **5-tier rating scale** (Buy / Overweight / Hold / Underweight / Sell) used
|
|
consistently by Research Manager, Portfolio Manager, signal processor, and
|
|
the memory log; Trader keeps 3-tier (Buy / Hold / Sell) since transaction
|
|
direction is naturally ternary.
|
|
- **Pytest fixtures** — lazy LLM client imports plus placeholder API keys so
|
|
the test suite runs cleanly without credentials. (#588)
|
|
|
|
### Changed
|
|
|
|
- **`backend_url` default is now `None`** rather than the OpenAI URL. Each
|
|
provider client falls back to its native default. The previous default
|
|
leaked the OpenAI URL into non-OpenAI clients (e.g. Gemini), producing
|
|
malformed request URLs for Python users who switched providers without
|
|
overriding `backend_url`. The CLI flow is unaffected.
|
|
- All file I/O passes explicit `encoding="utf-8"` so Windows users no longer
|
|
hit `UnicodeEncodeError` with the cp1252 default. (#543, #550, #576)
|
|
- Cache and log directories moved to `~/.tradingagents/` to resolve Docker
|
|
permission issues. (#519)
|
|
- `SignalProcessor` reads the rating from the Portfolio Manager's rendered
|
|
markdown via a deterministic heuristic — no extra LLM call.
|
|
- OpenAI structured-output calls default to `method="function_calling"` to
|
|
avoid noisy `PydanticSerializationUnexpectedValue` warnings emitted by
|
|
langchain-openai's Responses-API parse path. Same typed result, no warnings.
|
|
|
|
### Fixed
|
|
|
|
- Empty memory no longer triggers fabricated past-lessons in agent prompts;
|
|
the memory-log redesign makes this structurally impossible since only the
|
|
Portfolio Manager consults memory and only when entries exist. (#572)
|
|
- Tool-call logging processes every chunk message, not just the last one, and
|
|
memory score normalization handles empty score arrays. (#534, #531)
|
|
|
|
### Removed
|
|
|
|
- `FinancialSituationMemory` (the per-agent BM25 system) and the dead
|
|
`reflect_and_remember()` plumbing; subsumed by the persistent decision log.
|
|
- Hardcoded Google endpoint that caused 404 when `langchain-google-genai`
|
|
changed its API path. (#493, #496)
|
|
|
|
### Contributors
|
|
|
|
Thanks to everyone who shaped this release through code, design, and reports:
|
|
|
|
- [@claytonbrown](https://github.com/claytonbrown) — checkpoint resume (#594), test fixtures (#588), design feedback on cost tracking (#582) and structured validation (#583)
|
|
- [@Bcardo](https://github.com/Bcardo) — memory-log redesign (#579), empty-memory hallucination report (#572), encoding fix proposal (#570)
|
|
- [@voidborne-d](https://github.com/voidborne-d) — memory persistence design (#564), portfolio manager state fix (#503)
|
|
- [@mannubaveja007](https://github.com/mannubaveja007) — structured-output feature request (#434)
|
|
- [@kelder66](https://github.com/kelder66) — RAM-only memory issue (#563)
|
|
- [@Gujiassh](https://github.com/Gujiassh) — tool-call logging fix (#534), test stub PR (#533)
|
|
- [@iuyup](https://github.com/iuyup) — memory score normalization fix (#531)
|
|
- [@kaihg](https://github.com/kaihg) — Google base_url fix (#496)
|
|
- [@32ryh98yfe](https://github.com/32ryh98yfe) — Gemini 404 report (#493)
|
|
- [@uppb](https://github.com/uppb) — OpenRouter dynamic model selection (#482)
|
|
- [@guoz14](https://github.com/guoz14) — OpenRouter limited-model report (#337)
|
|
- [@samchenku](https://github.com/samchenku) — indicator name normalization (#490)
|
|
- [@JasonOA888](https://github.com/JasonOA888) — y_finance pandas import fix (#488)
|
|
- [@tiffanychum](https://github.com/tiffanychum) — stale import cleanup (#499)
|
|
- [@zaizou](https://github.com/zaizou) — Docker permission issue (#519)
|
|
- [@Stosman123](https://github.com/Stosman123), [@mauropuga](https://github.com/mauropuga), [@hotwind2015](https://github.com/hotwind2015) — Windows encoding bug reports (#543, #550, #576)
|
|
- [@nnishad](https://github.com/nnishad), [@atharvajoshi01](https://github.com/atharvajoshi01) — encoding fix proposals (#568, #549)
|
|
|
|
## [0.2.3] — 2026-03-29
|
|
|
|
### Added
|
|
|
|
- **Multi-language output** for analyst reports and final decisions, with a
|
|
CLI selector. Internal agent debate stays in English for reasoning quality. (#472)
|
|
- **GPT-5.4 family models** in the default catalog, with deep/quick model split.
|
|
- **Unified model catalog** as a single source of truth for CLI options and
|
|
provider validation.
|
|
|
|
### Changed
|
|
|
|
- `base_url` is forwarded to Google and Anthropic clients so corporate proxies
|
|
work consistently across providers. (#427)
|
|
- Standardised the Google `api_key` parameter to the unified `api_key` form.
|
|
|
|
### Fixed
|
|
|
|
- Backtesting fetchers no longer leak look-ahead data when `curr_date` is in
|
|
the middle of a fetched window. (#475)
|
|
- Invalid indicator names from the LLM are caught at the tool boundary instead
|
|
of crashing the run. (#429)
|
|
- yfinance news fetchers respect the same exponential-backoff retry as price
|
|
fetchers. (#445)
|
|
|
|
### Contributors
|
|
|
|
- [@ahmedk20](https://github.com/ahmedk20) — multi-language output (#472)
|
|
- [@CadeYu](https://github.com/CadeYu) — model catalog typing (#464)
|
|
- [@javierdejesusda](https://github.com/javierdejesusda) — unified Google API key parameter (#453)
|
|
- [@voidborne-d](https://github.com/voidborne-d) — yfinance news retry (#445)
|
|
- [@kostakost2](https://github.com/kostakost2) — look-ahead bias report (#475)
|
|
- [@lu-zhengda](https://github.com/lu-zhengda) — proxy/base_url support request (#427)
|
|
- [@VamsiKrishna2021](https://github.com/VamsiKrishna2021) — invalid indicator crash report (#429)
|
|
|
|
## [0.2.2] — 2026-03-22
|
|
|
|
### Added
|
|
|
|
- **Five-tier rating scale** (Buy / Overweight / Hold / Underweight / Sell)
|
|
introduced for the Portfolio Manager.
|
|
- **Anthropic effort level** support for Claude models.
|
|
- **OpenAI Responses API** path for native OpenAI models.
|
|
|
|
### Changed
|
|
|
|
- `risk_manager` renamed to `portfolio_manager` to match the role description
|
|
shown in the CLI display.
|
|
- Exchange-qualified tickers (e.g. `7203.T`, `BRK.B`) preserved across all
|
|
agent prompts and tool calls.
|
|
- Process-level UTF-8 default attempted for cross-platform consistency
|
|
(note: this approach did not actually take effect; replaced in v0.2.4 with
|
|
explicit per-call `encoding="utf-8"` arguments).
|
|
|
|
### Fixed
|
|
|
|
- yfinance rate-limit errors are retried with exponential backoff. (#426)
|
|
- HTTP client SSL customisation is supported for environments that need
|
|
custom certificate bundles. (#379)
|
|
- Report-section writes handle list-of-string content gracefully.
|
|
|
|
### Contributors
|
|
|
|
- [@CadeYu](https://github.com/CadeYu) — exchange-qualified ticker preservation (#413)
|
|
- [@yang1002378395-cmyk](https://github.com/yang1002378395-cmyk) — HTTP client SSL customisation (#379)
|
|
|
|
## [0.2.1] — 2026-03-15
|
|
|
|
### Security
|
|
|
|
- Patched `langchain-core` vulnerability (LangGrinch). (#335)
|
|
- Removed `chainlit` dependency affected by CVE-2026-22218.
|
|
|
|
### Added
|
|
|
|
- `pyproject.toml` build-system configuration; the project now installs via
|
|
modern packaging tooling.
|
|
|
|
### Removed
|
|
|
|
- `setup.py` — dependencies consolidated to `pyproject.toml`.
|
|
|
|
### Fixed
|
|
|
|
- Risk manager reads the correct fundamental report source. (#341)
|
|
- All `open()` calls receive an explicit UTF-8 encoding (initial pass).
|
|
- `get_indicators` tool handles comma-separated indicator names from the LLM. (#368)
|
|
- `Propagation` initialises every debate-state field so risk debaters never
|
|
see missing keys.
|
|
- Stock data parsing tolerates malformed CSVs and NaN values.
|
|
- Conditional debate logic respects the configured round count. (#361)
|
|
|
|
### Contributors
|
|
|
|
- [@RinZ27](https://github.com/RinZ27) — `langchain-core` security patch (#335)
|
|
- [@Ljx-007](https://github.com/Ljx-007) — risk manager fundamental-report fix (#341)
|
|
- [@makk9](https://github.com/makk9) — debate-rounds config issue (#361)
|
|
|
|
## [0.2.0] — 2026-02-04
|
|
|
|
This is the largest release since the initial public version. The framework
|
|
moved from single-provider to a multi-provider architecture and grew several
|
|
production-ready surfaces.
|
|
|
|
### Added
|
|
|
|
- **Multi-provider LLM support** (OpenAI, Google, Anthropic, xAI, OpenRouter,
|
|
Ollama) via a factory pattern, with provider-specific thinking configurations.
|
|
- **Alpha Vantage** integration as a configurable primary data provider, with
|
|
yfinance as a community-stability fallback.
|
|
- **Footer statistics** in the CLI: real-time tracking of LLM calls, tool
|
|
calls, and token usage via LangChain callbacks.
|
|
- **Post-analysis report saving** — the framework writes per-section markdown
|
|
files (analyst reports, debate transcripts, final decision) when a run
|
|
completes.
|
|
- **Announcements panel** — fetches updates from `api.tauric.ai/v1/announcements`
|
|
for the CLI welcome screen.
|
|
- **Tool fallbacks** so a single vendor outage does not stop the pipeline.
|
|
|
|
### Changed
|
|
|
|
- Risky / Safe risk debaters renamed to **Aggressive / Conservative** for
|
|
consistency with the displayed agent labels.
|
|
- Default data vendor switched to balance reliability and quota across
|
|
community deployments.
|
|
- Ollama and OpenRouter model lists updated; default endpoints clarified.
|
|
|
|
### Fixed
|
|
|
|
- Analyst status tracking and message deduplication in the live display.
|
|
- Infinite-loop guard in the agent loop; reflection and logging hardened.
|
|
- Various data-vendor implementation bugs and tool-signature mismatches.
|
|
|
|
### Contributors
|
|
|
|
This release is the first with substantial outside contributions; many community
|
|
PRs from late 2025 also landed here.
|
|
|
|
- [@luohy15](https://github.com/luohy15) — Alpha Vantage data-vendor integration (#235)
|
|
- [@EdwardoSunny](https://github.com/EdwardoSunny) — yfinance fetching optimisations (#245)
|
|
- [@Mirza-Samad-Ahmed-Baig](https://github.com/Mirza-Samad-Ahmed-Baig) — infinite-loop guard, reflection, and logging fixes (#89)
|
|
- [@ZeroAct](https://github.com/ZeroAct) — saved results path support (#29)
|
|
- [@Zhongyi-Lu](https://github.com/Zhongyi-Lu) — `.env` gitignore (#49)
|
|
- [@csoboy](https://github.com/csoboy) — local Ollama setup (#53)
|
|
- [@chauhang](https://github.com/chauhang) — initial Docker support attempt (#47, later reverted; the merged Docker support shipped in v0.2.4)
|
|
|
|
## [0.1.1] — 2025-06-07
|
|
|
|
### Removed
|
|
|
|
- Static site assets that had been bundled with v0.1.0; the public site now
|
|
lives separately.
|
|
|
|
## [0.1.0] — 2025-06-05
|
|
|
|
### Added
|
|
|
|
- **Initial public release** of the TradingAgents multi-agent trading
|
|
framework: market / sentiment / news / fundamentals analysts; bull and bear
|
|
researchers; trader; aggressive, conservative, and neutral risk debaters;
|
|
portfolio manager. LangGraph orchestration, yfinance data, per-agent
|
|
BM25 memory, single-provider OpenAI integration, interactive CLI.
|
|
|
|
[0.2.4]: https://github.com/TauricResearch/TradingAgents/compare/v0.2.3...v0.2.4
|
|
[0.2.3]: https://github.com/TauricResearch/TradingAgents/compare/v0.2.2...v0.2.3
|
|
[0.2.2]: https://github.com/TauricResearch/TradingAgents/compare/v0.2.1...v0.2.2
|
|
[0.2.1]: https://github.com/TauricResearch/TradingAgents/compare/v0.2.0...v0.2.1
|
|
[0.2.0]: https://github.com/TauricResearch/TradingAgents/compare/v0.1.1...v0.2.0
|
|
[0.1.1]: https://github.com/TauricResearch/TradingAgents/compare/v0.1.0...v0.1.1
|
|
[0.1.0]: https://github.com/TauricResearch/TradingAgents/releases/tag/v0.1.0
|