[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "tradingagents" version = "0.2.3" description = "TradingAgents: Multi-Agents LLM Financial Trading Framework" readme = "README.md" requires-python = ">=3.10" dependencies = [ "langchain-core>=0.3.81", "backtrader>=1.9.78.123", "langchain-anthropic>=0.3.15", "langchain-experimental>=0.3.4", "langchain-google-genai>=4.0.0", "langchain-openai>=0.3.23", "langgraph>=0.4.8", "pandas>=2.3.0", "parsel>=1.10.0", "pytz>=2025.2", "questionary>=2.1.0", "rank-bm25>=0.2.2", "redis>=6.2.0", "requests>=2.32.4", "rich>=14.0.0", "typer>=0.21.0", "setuptools>=80.9.0", "stockstats>=0.6.5", "tqdm>=4.67.1", "typing-extensions>=4.14.0", "yfinance>=0.2.63", ] [project.scripts] tradingagents = "cli.main:app" [tool.setuptools.packages.find] include = ["tradingagents*", "cli*"] [tool.setuptools.package-data] cli = ["static/*"] [tool.ruff] line-length = 120 [tool.ruff.lint] select = ["E", "F", "I"] ignore = ["E731"] [tool.ruff.lint.isort] combine-as-imports = true [tool.ruff.lint.per-file-ignores] "__init__.py" = ["F401"] # Agent files contain LLM system prompt strings that are intentionally long. "tradingagents/agents/**/*.py" = ["E501"] # These dataflow files contain long indicator/tool description strings, not logic code. "tradingagents/dataflows/alpha_vantage_indicator.py" = ["E501"] "tradingagents/dataflows/y_finance.py" = ["E501"] # Reflection module contains a multi-line LLM prompt defined as a string constant. "tradingagents/graph/reflection.py" = ["E501"] [tool.uv] [dependency-groups] dev = [ "pytest>=8.3.0", "ruff>=0.9.0", ] # Install with: uv sync