sql-drift-env / pyproject.toml
visheshrathi's picture
Upload folder using huggingface_hub
bbf206f verified
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
[build-system]
requires = ["setuptools>=45", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "sql_drift_env"
version = "0.1.0"
description = "SQLDrift: OpenEnv gym for repairing and optimizing SQL under live schema/business-rule drift"
requires-python = ">=3.12,<3.14"
dependencies = [
"duckdb>=1.5.2,<2.0",
# huggingface-hub: floor must satisfy `transformers>=5.2.0` (which
# needs hub>=1.3.0) — and the highest transformers we allow
# (5.4.x–5.5.0) needs hub>=1.5.0. Pin the floor at 1.5.0 to match
# the worst case so the [train] extra resolves cleanly. Cap <2.0
# because the `run_job` / `fetch_job_logs` / `inspect_job` API we
# call in utilities/run_training_job.py landed in the 1.x line.
"huggingface-hub>=1.5.0,<2.0",
"openenv-core[core]>=0.2.2,<0.4",
"sqlglot>=30.6.0,<40.0",
"pydantic>=2.8.0,<3.0",
"python-dotenv>=1.2.2,<2.0",
"openai>=2.32.0,<3.0",
]
[project.optional-dependencies]
evidence = [
"matplotlib>=3.8.0,<4.0",
"pandas>=2.0.0,<3.0",
]
dev = [
"mypy>=1.20.1",
"pytest>=9.0.3",
"pytest-asyncio>=1.3.0",
"pytest-cov>=7.0.0",
"ruff>=0.15.11",
"httpx>=0.28.0",
]
train = [
# TRL-only stack — mirrors Hugging Face's reference notebooks for
# GRPO with QLoRA (`grpo_trl_lora_qlora.ipynb`) and the OpenEnv
# multi-turn tool-calling examples (`openenv_wordle_grpo.ipynb`).
# No Unsloth: AutoModelForCausalLM + BitsAndBytesConfig is the
# canonical path the TRL examples use, and it resolves cleanly
# on a free Colab T4.
"trl[peft]>=1.2.0,<2.0",
"datasets>=3.0.0,<5.0",
# TRL 1.2 floors transformers at >=5.0. Keep the ceiling open so
# we follow the TRL release cadence.
"transformers>=5.5.0",
"accelerate>=1.13.0",
"peft>=0.19",
"bitsandbytes>=0.46.1,!=0.48.0",
# jmespath: required by TRL's GRPOTrainer whenever `tools` or
# `environment_factory` is used (parses tool-call responses from
# the model). TRL raises ImportError at GRPOTrainer.__init__
# otherwise. Pure-Python, no transitive deps.
# https://github.com/huggingface/trl/blob/main/trl/trainer/grpo_trainer.py
"jmespath>=1.0,<2.0",
"tensorboard>=2.20,<3.0",
]
[project.scripts]
# Flat package layout; see _cli.py. Runtime path: site-packages/sql_drift_env/
server = "sql_drift_env._cli:main"
[tool.setuptools]
include-package-data = true
packages = [
"sql_drift_env",
"sql_drift_env.scenarios",
"sql_drift_env.engine",
"sql_drift_env.skill_library",
"sql_drift_env.actors",
"sql_drift_env.training",
"sql_drift_env.server",
"sql_drift_env.utilities",
]
[tool.setuptools.package-dir]
"sql_drift_env" = "."
"sql_drift_env.scenarios" = "scenarios"
"sql_drift_env.engine" = "engine"
"sql_drift_env.skill_library" = "skill_library"
"sql_drift_env.actors" = "actors"
"sql_drift_env.training" = "training"
"sql_drift_env.server" = "server"
"sql_drift_env.utilities" = "utilities"
[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
markers = [
"slow: marks tests as slow (excluded by default; run via `pytest -m slow`)",
]
# Default excludes slow tests so CI stays on a fast path; run `pytest -m slow` for full suite.
addopts = "-ra --strict-markers -m 'not slow'"
[tool.ruff]
line-length = 100
target-version = "py312"
extend-exclude = [".venv", "design", "*.egg-info", "*.ipynb"]
[tool.ruff.lint]
select = ["E", "F", "I", "B", "UP", "SIM"]
ignore = ["E501"]
# Prefer fixing structure over scattered inline suppressions. See each rule in Ruff docs.
[tool.ruff.lint.per-file-ignores]
"_cli.py" = ["PLC0415"]
"training/grpo_train.py" = ["PLC0415"]
"engine/profiler.py" = ["BLE001"]
"scenarios/__init__.py" = ["F401"]
"tests/unit/test_p0_smoke.py" = ["F401"]
"utilities/verbose_api_rollout.py" = ["E402"]
"utilities/demo_rollout.py" = ["E402"]
"tests/unit/test_drift_scenarios.py" = ["E402"]
"tests/unit/test_profiler.py" = ["E402"]
"tests/unit/test_drift.py" = ["E402"]
"tests/unit/test_runtime.py" = ["E402"]
[tool.mypy]
python_version = "3.12"
strict = true
ignore_missing_imports = true
explicit_package_bases = true
mypy_path = "."
files = [
"_cli.py",
"actors",
"client.py",
"engine",
"models.py",
"scenarios",
"utilities",
"server",
"skill_library",
"training",
]
exclude = [
"\\.venv",
"design",
".*\\.egg-info",
"tests",
"build",
"dist",
]
# Subclasses in these modules call into openenv-core (no stubs). Relax only here.
[[tool.mypy.overrides]]
module = [
"client",
"models",
"engine.reward",
"server.app",
"server.sql_drift_env_environment",
"training.grpo_train",
]
disallow_subclassing_any = false
warn_return_any = false
[tool.coverage.run]
# pytest-cov can hit upstream issues with beartype when tracing; run plain pytest for CI.
source = ["engine", "scenarios", "skill_library", "actors", "models.py"]
omit = ["tests/*", ".venv/*"]
[tool.coverage.report]
skip_empty = true
exclude_lines = [
"pragma: no cover",
"if __name__ == \"__main__\":",
"if TYPE_CHECKING:",
"raise NotImplementedError",
"if 0:",
"if False:",
"\\.\\.\\.",
]