[tool.poetry]
name = "openhands-ai"
version = "0.14.1"
description = "OpenHands: Code Less, Make More"
authors = ["OpenHands"]
license = "MIT"
readme = "README.md"
repository = "https://github.com/All-Hands-AI/OpenHands"
packages = [
  { include = "openhands/**/*" }
]

[tool.poetry.dependencies]
python = "^3.12"
datasets = "*"
pandas = "*"
litellm = "^1.52.3"
google-generativeai = "*" # To use litellm with Gemini Pro API
google-api-python-client = "*" # For Google Sheets API
google-auth-httplib2 = "*" # For Google Sheets authentication
google-auth-oauthlib = "*" # For Google Sheets OAuth
termcolor = "*"
seaborn = "*"
docker = "*"
fastapi = "*"
toml = "*"
uvicorn = "*"
types-toml = "*"
numpy = "*"
json-repair = "*"
browsergym = "0.10.2" # integrate browsergym as the browsing interface
html2text = "*"
e2b = "^0.17.1"
pexpect = "*"
jinja2 = "^3.1.3"
python-multipart = "*"
boto3 = "*"
minio = "^7.2.8"
gevent = "^24.2.1"
pyarrow = "17.0.0" # transitive dependency, pinned here to avoid conflicts
tenacity = "^8.5.0"
zope-interface = "7.1.1"
pathspec = "^0.12.1"
google-cloud-aiplatform = "*"
anthropic = {extras = ["vertex"], version = "*"}
grep-ast = "0.3.3"
tree-sitter = "0.21.3"
bashlex = "^0.18"
pyjwt = "^2.9.0"
dirhash = "*"
python-frontmatter = "^1.1.0"
python-docx = "*"
PyPDF2 = "*"
python-pptx = "*"
pylatexenc = "*"
tornado = "*"
python-dotenv = "*"
pylcs = "^0.1.1"
whatthepatch = "^1.0.6"
protobuf = "^4.21.6,<5.0.0" # chromadb currently fails on 5.0+
opentelemetry-api = "1.25.0"
opentelemetry-exporter-otlp-proto-grpc = "1.25.0"
modal = "^0.64.145"
runloop-api-client = "0.7.0"
pygithub = "^2.5.0"
openhands-aci = "^0.1.1"

[tool.poetry.group.llama-index.dependencies]
llama-index = "*"
llama-index-vector-stores-chroma = "*"
chromadb = "*"
llama-index-embeddings-huggingface = "*"
torch = "2.5.0"
llama-index-embeddings-azure-openai = "*"
llama-index-embeddings-ollama = "*"

[tool.poetry.group.dev.dependencies]
ruff = "0.7.1"
mypy = "1.13.0"
pre-commit = "4.0.1"
build = "*"

[tool.poetry.group.test.dependencies]
pytest = "*"
pytest-cov = "*"
pytest-asyncio = "*"
pytest-forked = "*"
pytest-xdist = "*"
flake8 = "*"
openai = "*"
opencv-python = "*"
pandas = "*"
reportlab = "*"

[tool.coverage.run]
concurrency = ["gevent"]

[tool.poetry.group.runtime.dependencies]
jupyterlab = "*"
notebook = "*"
jupyter_kernel_gateway = "*"
flake8 = "*"
opencv-python = "*"


[build-system]
build-backend = "poetry.core.masonry.api"
requires = [
  "poetry-core",
]

[tool.autopep8]
# autopep8 fights with mypy on line length issue
ignore = [ "E501" ]

[tool.black]
# prevent black (if installed) from changing single quotes to double quotes
skip-string-normalization = true

[tool.ruff.lint]
select = ["D"]
# ignore warnings for missing docstrings
ignore = ["D1"]

[tool.ruff.lint.pydocstyle]
convention = "google"

[tool.poetry.group.evaluation.dependencies]
streamlit = "*"
whatthepatch = "*"
retry = "*"
evaluate = "*"
swebench = { git = "https://github.com/All-Hands-AI/SWE-bench.git" }
func_timeout = "*"
sympy = "*"
gdown = "*"
matplotlib = "*"
seaborn = "*"
tabulate = "*"

[tool.poetry-dynamic-versioning]
enable = true
style = "semver"

[tool.poetry.scripts]
openhands = "openhands.core.cli:main"
