finresearch-ai / pyproject.toml
YanCotta's picture
fix: Constrain Python version to <=3.13 for crewai-tools compatibility
c8553cb
[tool.poetry]
name = "finresearch-ai"
version = "1.0.0"
description = "Multi-Agent Financial Research System powered by CrewAI"
authors = ["Yan Cotta <yan.cotta@example.com>"]
readme = "README.md"
license = "MIT"
packages = [{ include = "src" }]
keywords = ["finance", "ai", "agents", "crewai", "research", "fastapi"]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Environment :: Web Environment",
"Framework :: FastAPI",
"Intended Audience :: Financial and Insurance Industry",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business :: Financial :: Investment",
"Typing :: Typed",
]
[tool.poetry.dependencies]
python = ">=3.11,<=3.13"
# CrewAI Framework
crewai = "^0.86.0"
crewai-tools = "^0.17.0"
# LLM Integration
langchain-openai = "^0.2.14"
openai = "^1.58.0"
# Financial Data
yfinance = "^0.2.51"
# News Search
duckduckgo-search = "^6.3.7"
# Vector Memory
chromadb = "^0.5.23"
# Configuration & Validation
pydantic = "^2.10.3"
pydantic-settings = "^2.6.1"
python-dotenv = "^1.0.1"
pyyaml = "^6.0.2"
# Web Server (FastAPI)
fastapi = "^0.115.0"
uvicorn = { version = "^0.32.0", extras = ["standard"] }
python-multipart = "^0.0.18"
[tool.poetry.group.dev.dependencies]
# Testing
pytest = "^8.3.4"
pytest-cov = "^6.0.0"
pytest-asyncio = "^0.24.0"
pytest-mock = "^3.14.0"
# Code Quality
black = "^24.10.0"
isort = "^5.13.2"
ruff = "^0.8.3"
mypy = "^1.13.0"
# Type Stubs
types-pyyaml = "^6.0.12"
types-requests = "^2.32.0"
[tool.poetry.scripts]
finresearch = "main:main"
[build-system]
requires = ["poetry-core>=1.9.0"]
build-backend = "poetry.core.masonry.api"
# ============================================================================
# Tool Configuration
# ============================================================================
[tool.black]
line-length = 100
target-version = ["py311", "py312"]
include = '\.pyi?$'
extend-exclude = '''
/(
\.git
| \.venv
| \.chroma_db
| __pycache__
| reports
)/
'''
[tool.isort]
profile = "black"
line_length = 100
known_first_party = ["src"]
skip = [".venv", ".chroma_db", "reports"]
[tool.ruff]
line-length = 100
target-version = "py311"
exclude = [
".git",
".venv",
".chroma_db",
"__pycache__",
"reports",
]
[tool.ruff.lint]
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # Pyflakes
"I", # isort
"B", # flake8-bugbear
"C4", # flake8-comprehensions
"UP", # pyupgrade
"ARG", # flake8-unused-arguments
"SIM", # flake8-simplify
]
ignore = [
"E501", # line too long (handled by black)
"B008", # do not perform function calls in argument defaults
"B904", # raise without from in except
]
[tool.mypy]
python_version = "3.11"
warn_return_any = true
warn_unused_ignores = true
disallow_untyped_defs = true
disallow_incomplete_defs = true
check_untyped_defs = true
ignore_missing_imports = true
exclude = [
".venv",
".chroma_db",
"reports",
]
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
addopts = [
"-v",
"--strict-markers",
"--tb=short",
"--cov=src",
"--cov-report=term-missing",
"--cov-report=html:reports/coverage",
]
markers = [
"unit: Unit tests (no external dependencies)",
"integration: Integration tests (may require network)",
"slow: Slow tests (deselect with -m 'not slow')",
]
filterwarnings = [
"ignore::DeprecationWarning",
"ignore::PendingDeprecationWarning",
]
[tool.coverage.run]
source = ["src"]
omit = [
"*/tests/*",
"*/__pycache__/*",
]
[tool.coverage.report]
exclude_lines = [
"pragma: no cover",
"def __repr__",
"raise NotImplementedError",
"if TYPE_CHECKING:",
"if __name__ == .__main__.:",
]