[project] name = "polyglot-tutor" version = "0.1.0" description = "Adaptive language tutor: CEFR-aware exercises across the four skills, driven by a predictive spaced-repetition learner model." readme = "README.md" requires-python = ">=3.12" license = "MIT" authors = [{ name = "Arthur" }] dependencies = [ # Runtime deps only — keep the Docker image (HF Space, cpu-basic) lean. "gradio>=6.17,<7", "huggingface-hub>=1.18.0", "jiwer>=4.0.0", "numpy>=2.4.6", "onnxruntime>=1.26.0", "openai>=2.41,<3", # single OpenAI-compatible client: Gemini / Mistral / Ollama / OpenAI (ADR 0002) "pydantic>=2.8", "pydantic-settings>=2.14,<3", "tokenizers>=0.22.2", ] [dependency-groups] dev = [ "pytest>=9.0", "pytest-asyncio>=1.4", "ruff==0.15.16", # exact pin, mirrored in .pre-commit-config.yaml "pre-commit>=4.6", ] data = [ # Dataset download / EDA (UniversalCEFR & friends). Not in the runtime image. "datasets>=5.0", "huggingface-hub>=1.18.0", ] train = [ "accelerate>=1.14.0", # M1: transformers, torch (CUDA, local GPU), optimum/onnxruntime for CPU export. "datasets>=5.0.0", "mlflow>=3.13.0", "onnx>=1.21.0", "torch>=2.12.0", "transformers>=5.11.0", ] asr = [ "faster-whisper>=1.0", "soundfile>=0.12", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/tutor"] [tool.ruff] target-version = "py312" line-length = 100 src = ["src", "tests", "scripts"] [tool.ruff.lint] select = [ "E", "W", # pycodestyle "F", # pyflakes "I", # isort "UP", # pyupgrade "B", # bugbear "SIM", # simplify "C4", # comprehensions "PTH", # pathlib "RET", # return "ASYNC", # async pitfalls "RUF", ] [tool.pytest.ini_options] testpaths = ["tests"] asyncio_mode = "auto" addopts = "-q"