[project] name = "crewai-workspace" dynamic = ["version"] description = "Cutting-edge framework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks." readme = "README.md" authors = [ { name = "Joao Moura", email = "joao@crewai.com" } ] requires-python = ">=3.10,<3.14" [project.urls] Homepage = "https://crewai.com" Documentation = "https://docs.crewai.com" Repository = "https://github.com/crewAIInc/crewAI" [dependency-groups] all = [ "crewai", "crewai-tools", ] dev = [ "ruff>=0.13.1", "mypy>=1.18.2", "pre-commit>=4.3.0", "bandit>=1.8.6", "pytest>=8.4.2", "pytest-asyncio>=1.2.0", "pytest-subprocess>=1.5.3", "pytest-recording>=0.13.4", "pytest-randomly>=4.0.1", "pytest-timeout>=2.4.0", "pytest-xdist>=3.8.0", "pytest-split>=0.10.0", "types-requests==2.32.*", "types-pyyaml==6.0.*", "types-regex==2024.11.6.*", "types-appdirs==1.4.*", "git-filter-repo>=2.47.0", ] [tool.uv] default-groups = "all" [tool.ruff] exclude = [ "lib/crewai/src/crewai/cli/templates", ] fix = true [tool.ruff.lint] select = [ "E", # pycodestyle errors (style issues) "F", # Pyflakes (code errors) "B", # flake8-bugbear (bug prevention) "S", # bandit (security issues) "RUF", # ruff-specific rules "N", # pep8-naming (naming conventions) "W", # pycodestyle warnings "PERF", # performance issues "PIE", # flake8-pie (unnecessary code) "ASYNC", # async/await best practices "RET", # flake8-return (return improvements) "UP006", # use collections.abc "UP007", # use X | Y for unions "UP035", # use dict/list instead of typing.Dict/List "UP037", # remove quotes from type annotations "UP045", # use X | None instead of Optional[X] "UP004", # use isinstance instead of type "UP008", # use super() instead of super(Class, self) "UP010", # use isinstance for type checks "UP018", # use str() instead of "string" "UP031", # use f-strings for .format() "UP032", # use f-strings for .format() with positional "I001", # sort imports "I002", # remove unused imports ] ignore = ["E501"] # ignore line too long globally [tool.ruff.lint.per-file-ignores] "tests/**/*.py" = ["S101", "RET504"] # Allow assert statements and unnecessary assignments before return in tests [tool.mypy] exclude = ["lib/crewai/src/crewai/cli/templates", "lib/crewai/src/tests/"] plugins = ["pydantic.mypy"] [tool.bandit] exclude_dirs = ["lib/crewai/src/crewai/cli/templates"] [tool.pytest.ini_options] markers = [ "telemetry: mark test as a telemetry test (don't mock telemetry)", "requires_local_services: mark test as requiring local services like Ollama (skip in CI)", ] [[tool.uv.index]] name = "pytorch-nightly" url = "https://download.pytorch.org/whl/nightly/cpu" explicit = true [[tool.uv.index]] name = "pytorch" url = "https://download.pytorch.org/whl/cpu" explicit = true [tool.uv.sources] torch = [ { index = "pytorch-nightly", marker = "python_version >= '3.13'" }, { index = "pytorch", marker = "python_version < '3.13'" }, ] torchvision = [ { index = "pytorch-nightly", marker = "python_version >= '3.13'" }, { index = "pytorch", marker = "python_version < '3.13'" }, ] crewai = { workspace = true } crewai-tools = { workspace = true } [tool.uv.workspace] members = [ "lib/tools", "lib/crewai", ] # #[build-system] #requires = ["hatchling"] #build-backend = "hatchling.build" #[tool.hatch.build.targets.sdist] #exclude = [ # "docs/**", # "docs/", #] # #[tool.hatch.version] #path = "src/crewai/__init__.py" # #[tool.hatch.build.targets.wheel] #only-include = [ # "lib/crewai/src", # "lib/tools/src", #]