cleanup cli and rename project and add copyright notice of the predecessor project

This commit is contained in:
Marvin Gabler 2025-10-21 18:08:06 +02:00
parent 167e53a86e
commit 8d1e7afe69
21 changed files with 139 additions and 121 deletions

View File

@ -1,6 +1,8 @@
# Configuration Guide
TradingAgents supports configuration through multiple methods with the following priority:
**Copyright Notice:** Litadel is a successor of TradingAgents by TaurusResearch.
Litadel supports configuration through multiple methods with the following priority:
**Priority (highest to lowest):**
1. Environment variables
@ -200,7 +202,7 @@ The `→` lines show values being used from your config, skipping the prompts!
## Troubleshooting
**CLI still prompts for everything:**
- Check that `config.ini` exists in the TradingAgents directory
- Check that `config.ini` exists in the Litadel directory
- Verify the file has the correct structure (see `config.example.ini`)
- Check for typos in section names and keys

View File

@ -1,5 +1,5 @@
<p align="center">
<img src="assets/TauricResearch.png" style="width: 60%; height: auto;">
<img src="assets/litadel.png" style="width: 60%; height: auto;">
</p>
<div align="center" style="line-height: 1;">
@ -25,37 +25,29 @@
---
# TradingAgents: Multi-Agents LLM Financial Trading Framework
# Litadel: Multi-Agents LLM Financial Trading Framework
> 🎉 **TradingAgents** officially released! We have received numerous inquiries about the work, and we would like to express our thanks for the enthusiasm in our community.
> **Copyright Notice:** Litadel is a successor of TradingAgents by TaurusResearch. This project builds upon and extends the original TradingAgents framework.
>
> 🎉 **Litadel** officially released! We have received numerous inquiries about the work, and we would like to express our thanks for the enthusiasm in our community.
>
> So we decided to fully open-source the framework. Looking forward to building impactful projects with you!
<div align="center">
<a href="https://www.star-history.com/#TauricResearch/TradingAgents&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=TauricResearch/TradingAgents&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=TauricResearch/TradingAgents&type=Date" />
<img alt="TradingAgents Star History" src="https://api.star-history.com/svg?repos=TauricResearch/TradingAgents&type=Date" style="width: 80%; height: auto;" />
</picture>
</a>
</div>
<div align="center">
🚀 [TradingAgents](#tradingagents-framework) | ⚡ [Installation & CLI](#installation-and-cli) | 🎬 [Demo](https://www.youtube.com/watch?v=90gr5lwjIho) | 📦 [Package Usage](#tradingagents-package) | 🤝 [Contributing](#contributing) | 📄 [Citation](#citation)
🚀 [Litadel](#litadel-framework) | ⚡ [Installation & CLI](#installation-and-cli) | 🎬 [Demo](https://www.youtube.com/watch?v=90gr5lwjIho) | 📦 [Package Usage](#litadel-package) | 🤝 [Contributing](#contributing) | 📄 [Citation](#citation)
</div>
## TradingAgents Framework
## Litadel Framework
TradingAgents is a multi-agent trading framework that mirrors the dynamics of real-world trading firms. By deploying specialized LLM-powered agents: from fundamental analysts, sentiment experts, and technical analysts, to trader, risk management team, the platform collaboratively evaluates market conditions and informs trading decisions. Moreover, these agents engage in dynamic discussions to pinpoint the optimal strategy.
Litadel is a multi-agent trading framework that mirrors the dynamics of real-world trading firms. By deploying specialized LLM-powered agents: from fundamental analysts, sentiment experts, and technical analysts, to trader, risk management team, the platform collaboratively evaluates market conditions and informs trading decisions. Moreover, these agents engage in dynamic discussions to pinpoint the optimal strategy.
<p align="center">
<img src="assets/schema.png" style="width: 100%; height: auto;">
</p>
> TradingAgents framework is designed for research purposes. Trading performance may vary based on many factors, including the chosen backbone language models, model temperature, trading periods, the quality of data, and other non-deterministic factors. [It is not intended as financial, investment, or trading advice.](https://tauric.ai/disclaimer/)
> Litadel framework is designed for research purposes. Trading performance may vary based on many factors, including the chosen backbone language models, model temperature, trading periods, the quality of data, and other non-deterministic factors. [It is not intended as financial, investment, or trading advice.](https://tauric.ai/disclaimer/)
Our framework decomposes complex trading tasks into specialized roles. This ensures the system achieves a robust, scalable approach to market analysis and decision-making.
@ -95,16 +87,16 @@ Our framework decomposes complex trading tasks into specialized roles. This ensu
### Installation
Clone TradingAgents:
Clone Litadel:
```bash
git clone https://github.com/TauricResearch/TradingAgents.git
cd TradingAgents
git clone https://github.com/TauricResearch/Litadel.git
cd Litadel
```
Create a virtual environment in any of your favorite environment managers:
```bash
conda create -n tradingagents python=3.13
conda activate tradingagents
conda create -n litadel python=3.13
conda activate litadel
```
Install dependencies:
@ -127,7 +119,7 @@ cp .env.example .env
# Edit .env with your actual API keys
```
**Note:** We are happy to partner with Alpha Vantage to provide robust API support for TradingAgents. You can get a free AlphaVantage API [here](https://www.alphavantage.co/support/#api-key), TradingAgents-sourced requests also have increased rate limits to 60 requests per minute with no daily limits. Typically the quota is sufficient for performing complex tasks with TradingAgents thanks to Alpha Vantages open-source support program. If you prefer to use OpenAI for these data sources instead, you can modify the data vendor settings in `tradingagents/default_config.py`.
**Note:** We are happy to partner with Alpha Vantage to provide robust API support for Litadel. You can get a free AlphaVantage API [here](https://www.alphavantage.co/support/#api-key), Litadel-sourced requests also have increased rate limits to 60 requests per minute with no daily limits. Typically the quota is sufficient for performing complex tasks with Litadel thanks to Alpha Vantage's open-source support program. If you prefer to use OpenAI for these data sources instead, you can modify the data vendor settings in `tradingagents/default_config.py`.
### CLI Usage
@ -151,15 +143,15 @@ An interface will appear showing results as they load, letting you track the age
<img src="assets/cli/cli_transaction.png" width="100%" style="display: inline-block; margin: 0 2%;">
</p>
## TradingAgents Package
## Litadel Package
### Implementation Details
We built TradingAgents with LangGraph to ensure flexibility and modularity. We utilize `o1-preview` and `gpt-4o` as our deep thinking and fast thinking LLMs for our experiments. However, for testing purposes, we recommend you use `o4-mini` and `gpt-4.1-mini` to save on costs as our framework makes **lots of** API calls.
We built Litadel with LangGraph to ensure flexibility and modularity. We utilize `o1-preview` and `gpt-4o` as our deep thinking and fast thinking LLMs for our experiments. However, for testing purposes, we recommend you use `o4-mini` and `gpt-4.1-mini` to save on costs as our framework makes **lots of** API calls.
### Python Usage
To use TradingAgents inside your code, you can import the `tradingagents` module and initialize a `TradingAgentsGraph()` object. The `.propagate()` function will return a decision. You can run `main.py`, here's also a quick example:
To use Litadel inside your code, you can import the `tradingagents` module and initialize a `TradingAgentsGraph()` object. The `.propagate()` function will return a decision. You can run `main.py`, here's also a quick example:
```python
from tradingagents.graph.trading_graph import TradingAgentsGraph
@ -204,13 +196,20 @@ print(decision)
You can view the full list of configurations in `tradingagents/default_config.py`.
## Roadmap
### Upcoming Improvements
- [ ] **Switch from LangChain/LangGraph to OpenAI Agents SDK** - For better maintainability and parallelization
## Contributing
We welcome contributions from the community! Whether it's fixing a bug, improving documentation, or suggesting a new feature, your input helps make this project better. If you are interested in this line of research, please consider joining our open-source financial AI research community [Tauric Research](https://tauric.ai/).
## Citation
Please reference our work if you find *TradingAgents* provides you with some help :)
Please reference our work if you find *Litadel* provides you with some help :)
Original TradingAgents citation:
```
@misc{xiao2025tradingagentsmultiagentsllmfinancial,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

BIN
assets/litadel.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

View File

@ -1,4 +1,4 @@
"""File handling and logging decorators for the TradingAgents CLI."""
"""File handling and logging decorators for the Litadel CLI."""
from functools import wraps
from pathlib import Path

View File

@ -1,4 +1,4 @@
"""LLM provider and model configuration data for the TradingAgents CLI."""
"""LLM provider and model configuration data for the Litadel CLI."""
# LLM provider base URLs
LLM_PROVIDERS = [

View File

@ -37,8 +37,8 @@ from cli.stream_processor import process_chunk
console = Console()
app = typer.Typer(
name="TradingAgents",
help="TradingAgents CLI: Multi-Agents LLM Financial Trading Framework",
name="Litadel",
help="Litadel CLI: Multi-Agents LLM Financial Trading Framework (successor of TradingAgents)",
add_completion=True, # Enable shell completion
)
@ -59,7 +59,8 @@ def get_user_selections():
# Create welcome box content
welcome_content = f"{welcome_ascii}\n"
welcome_content += "[bold green]TradingAgents: Multi-Agents LLM Financial Trading Framework - CLI[/bold green]\n\n"
welcome_content += "[bold green]Litadel: Multi-Agents LLM Financial Trading Framework - CLI[/bold green]\n\n"
welcome_content += "[dim]Successor of TradingAgents by TaurusResearch[/dim]\n\n"
welcome_content += "[bold]Workflow Steps:[/bold]\n"
welcome_content += "I. Analyst Team → II. Research Team → III. Trader → IV. Risk Management → V. Portfolio Management\n\n"
welcome_content += (
@ -71,7 +72,7 @@ def get_user_selections():
welcome_content,
border_style="green",
padding=(1, 2),
title="Welcome to TradingAgents",
title="Welcome to Litadel",
subtitle="Multi-Agents LLM Financial Trading Framework",
)
console.print(Align.center(welcome_box))

View File

@ -1,4 +1,4 @@
"""Interactive user prompts for the TradingAgents CLI."""
"""Interactive user prompts for the Litadel CLI."""
import questionary
from typing import List, Optional, Tuple, Dict

View File

@ -1,4 +1,4 @@
"""Report display functions for the TradingAgents CLI."""
"""Report display functions for the Litadel CLI."""
from rich.console import Console
from rich.panel import Panel

View File

@ -1,4 +1,4 @@
"""Stream processing logic for handling agent analysis chunks in the TradingAgents CLI."""
"""Stream processing logic for handling agent analysis chunks in the Litadel CLI."""
from cli.helpers import extract_content_string, update_research_team_status

View File

@ -1,4 +1,4 @@
"""UI display functions for the TradingAgents CLI using Rich library."""
"""UI display functions for the Litadel CLI using Rich library."""
from rich.panel import Panel
from rich.spinner import Spinner
@ -30,9 +30,9 @@ def update_display(layout, message_buffer, spinner_text=None):
# Header with welcome message
layout["header"].update(
Panel(
"[bold green]Welcome to TradingAgents CLI[/bold green]\n"
"[bold green]Welcome to Litadel CLI[/bold green]\n"
"[dim]© [Tauric Research](https://github.com/TauricResearch)[/dim]",
title="Welcome to TradingAgents",
title="Welcome to Litadel",
border_style="green",
padding=(1, 2),
expand=True,

View File

@ -1,4 +1,5 @@
# TradingAgents Configuration
# Litadel Configuration
# Copyright Notice: Litadel is a successor of TradingAgents by TaurusResearch
# Copy this file to config.ini and customize your settings
[llm]

View File

@ -1,7 +1,7 @@
[project]
name = "tradingagents"
name = "litadel"
version = "0.1.0"
description = "Add your description here"
description = "Multi-Agents LLM Financial Trading Framework (successor of TradingAgents by TaurusResearch)"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [

View File

@ -1,14 +1,17 @@
"""
Setup script for the TradingAgents package.
Setup script for the Litadel package.
Copyright Notice: Litadel is a successor of TradingAgents by TaurusResearch.
This project builds upon and extends the original TradingAgents framework.
"""
from setuptools import setup, find_packages
setup(
name="tradingagents",
name="litadel",
version="0.1.0",
description="Multi-Agents LLM Financial Trading Framework",
author="TradingAgents Team",
description="Multi-Agents LLM Financial Trading Framework (successor of TradingAgents)",
author="Litadel Team",
author_email="yijia.xiao@cs.ucla.edu",
url="https://github.com/TauricResearch",
packages=find_packages(),
@ -29,7 +32,7 @@ setup(
python_requires=">=3.10",
entry_points={
"console_scripts": [
"tradingagents=cli.main:app",
"litadel=cli.main:app",
],
},
classifiers=[

View File

@ -1,4 +1,6 @@
# TradingAgents/graph/__init__.py
# Litadel/graph/__init__.py
# Copyright Notice: Litadel is a successor of TradingAgents by TaurusResearch.
# This project builds upon and extends the original TradingAgents framework.
from .trading_graph import TradingAgentsGraph
from .conditional_logic import ConditionalLogic

View File

@ -1,4 +1,6 @@
# TradingAgents/graph/propagation.py
# Litadel/graph/propagation.py
# Copyright Notice: Litadel is a successor of TradingAgents by TaurusResearch.
# This project builds upon and extends the original TradingAgents framework.
from typing import Dict, Any
from tradingagents.agents.utils.agent_states import (

View File

@ -1,4 +1,6 @@
# TradingAgents/graph/reflection.py
# Litadel/graph/reflection.py
# Copyright Notice: Litadel is a successor of TradingAgents by TaurusResearch.
# This project builds upon and extends the original TradingAgents framework.
from typing import Dict, Any
from langchain_openai import ChatOpenAI

View File

@ -1,4 +1,6 @@
# TradingAgents/graph/setup.py
# Litadel/graph/setup.py
# Copyright Notice: Litadel is a successor of TradingAgents by TaurusResearch.
# This project builds upon and extends the original TradingAgents framework.
from typing import Dict, Any
from langchain_openai import ChatOpenAI

View File

@ -1,4 +1,6 @@
# TradingAgents/graph/signal_processing.py
# Litadel/graph/signal_processing.py
# Copyright Notice: Litadel is a successor of TradingAgents by TaurusResearch.
# This project builds upon and extends the original TradingAgents framework.
from langchain_openai import ChatOpenAI

View File

@ -1,4 +1,6 @@
# TradingAgents/graph/trading_graph.py
# Litadel/graph/trading_graph.py
# Copyright Notice: Litadel is a successor of TradingAgents by TaurusResearch.
# This project builds upon and extends the original TradingAgents framework.
import os
from pathlib import Path

132
uv.lock
View File

@ -1,5 +1,5 @@
version = 1
revision = 3
revision = 2
requires-python = ">=3.10"
resolution-markers = [
"python_full_version >= '3.13'",
@ -1951,6 +1951,71 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/03/a5/866b44697cee47d1cae429ed370281d937ad4439f71af82a6baaa139d26a/Lazify-0.4.0-py2.py3-none-any.whl", hash = "sha256:c2c17a7a33e9406897e3f66fde4cd3f84716218d580330e5af10cfe5a0cd195a", size = 3107, upload-time = "2018-06-14T13:12:22.273Z" },
]
[[package]]
name = "litadel"
version = "0.1.0"
source = { virtual = "." }
dependencies = [
{ name = "akshare" },
{ name = "backtrader" },
{ name = "chainlit" },
{ name = "chromadb" },
{ name = "eodhd" },
{ name = "feedparser" },
{ name = "finnhub-python" },
{ name = "grip" },
{ name = "langchain-anthropic" },
{ name = "langchain-experimental" },
{ name = "langchain-google-genai" },
{ name = "langchain-openai" },
{ name = "langgraph" },
{ name = "pandas" },
{ name = "parsel" },
{ name = "praw" },
{ name = "pytz" },
{ name = "questionary" },
{ name = "redis" },
{ name = "requests" },
{ name = "rich" },
{ name = "setuptools" },
{ name = "stockstats" },
{ name = "tqdm" },
{ name = "tushare" },
{ name = "typing-extensions" },
{ name = "yfinance" },
]
[package.metadata]
requires-dist = [
{ name = "akshare", specifier = ">=1.16.98" },
{ name = "backtrader", specifier = ">=1.9.78.123" },
{ name = "chainlit", specifier = ">=2.5.5" },
{ name = "chromadb", specifier = ">=1.0.12" },
{ name = "eodhd", specifier = ">=1.0.32" },
{ name = "feedparser", specifier = ">=6.0.11" },
{ name = "finnhub-python", specifier = ">=2.4.23" },
{ name = "grip", specifier = ">=4.6.2" },
{ name = "langchain-anthropic", specifier = ">=0.3.15" },
{ name = "langchain-experimental", specifier = ">=0.3.4" },
{ name = "langchain-google-genai", specifier = ">=2.1.5" },
{ name = "langchain-openai", specifier = ">=0.3.23" },
{ name = "langgraph", specifier = ">=0.4.8" },
{ name = "pandas", specifier = ">=2.3.0" },
{ name = "parsel", specifier = ">=1.10.0" },
{ name = "praw", specifier = ">=7.8.1" },
{ name = "pytz", specifier = ">=2025.2" },
{ name = "questionary", specifier = ">=2.1.0" },
{ name = "redis", specifier = ">=6.2.0" },
{ name = "requests", specifier = ">=2.32.4" },
{ name = "rich", specifier = ">=14.0.0" },
{ name = "setuptools", specifier = ">=80.9.0" },
{ name = "stockstats", specifier = ">=0.6.5" },
{ name = "tqdm", specifier = ">=4.67.1" },
{ name = "tushare", specifier = ">=1.4.21" },
{ name = "typing-extensions", specifier = ">=4.14.0" },
{ name = "yfinance", specifier = ">=0.2.63" },
]
[[package]]
name = "literalai"
version = "0.1.201"
@ -4762,71 +4827,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/67/53/d840eff3b6cc64f40f115b8de9a17a100973be3679f14b66056ab5a4615e/traceloop_sdk-0.40.9-py3-none-any.whl", hash = "sha256:c061a278f40062986379bc2df76635cb545c3f81301f6b38d51b3a6f9c288f54", size = 31486, upload-time = "2025-06-10T09:55:57.458Z" },
]
[[package]]
name = "tradingagents"
version = "0.1.0"
source = { virtual = "." }
dependencies = [
{ name = "akshare" },
{ name = "backtrader" },
{ name = "chainlit" },
{ name = "chromadb" },
{ name = "eodhd" },
{ name = "feedparser" },
{ name = "finnhub-python" },
{ name = "grip" },
{ name = "langchain-anthropic" },
{ name = "langchain-experimental" },
{ name = "langchain-google-genai" },
{ name = "langchain-openai" },
{ name = "langgraph" },
{ name = "pandas" },
{ name = "parsel" },
{ name = "praw" },
{ name = "pytz" },
{ name = "questionary" },
{ name = "redis" },
{ name = "requests" },
{ name = "rich" },
{ name = "setuptools" },
{ name = "stockstats" },
{ name = "tqdm" },
{ name = "tushare" },
{ name = "typing-extensions" },
{ name = "yfinance" },
]
[package.metadata]
requires-dist = [
{ name = "akshare", specifier = ">=1.16.98" },
{ name = "backtrader", specifier = ">=1.9.78.123" },
{ name = "chainlit", specifier = ">=2.5.5" },
{ name = "chromadb", specifier = ">=1.0.12" },
{ name = "eodhd", specifier = ">=1.0.32" },
{ name = "feedparser", specifier = ">=6.0.11" },
{ name = "finnhub-python", specifier = ">=2.4.23" },
{ name = "grip", specifier = ">=4.6.2" },
{ name = "langchain-anthropic", specifier = ">=0.3.15" },
{ name = "langchain-experimental", specifier = ">=0.3.4" },
{ name = "langchain-google-genai", specifier = ">=2.1.5" },
{ name = "langchain-openai", specifier = ">=0.3.23" },
{ name = "langgraph", specifier = ">=0.4.8" },
{ name = "pandas", specifier = ">=2.3.0" },
{ name = "parsel", specifier = ">=1.10.0" },
{ name = "praw", specifier = ">=7.8.1" },
{ name = "pytz", specifier = ">=2025.2" },
{ name = "questionary", specifier = ">=2.1.0" },
{ name = "redis", specifier = ">=6.2.0" },
{ name = "requests", specifier = ">=2.32.4" },
{ name = "rich", specifier = ">=14.0.0" },
{ name = "setuptools", specifier = ">=80.9.0" },
{ name = "stockstats", specifier = ">=0.6.5" },
{ name = "tqdm", specifier = ">=4.67.1" },
{ name = "tushare", specifier = ">=1.4.21" },
{ name = "typing-extensions", specifier = ">=4.14.0" },
{ name = "yfinance", specifier = ">=0.2.63" },
]
[[package]]
name = "tushare"
version = "1.4.21"