[build-system] requires = ["setuptools>=61"] build-backend = "setuptools.build_meta" [project] name = "quillwright" version = "0.1.0" requires-python = ">=3.11" dependencies = [ "gradio>=4.44", "langgraph>=0.2", "langchain-core>=0.3", "pydantic>=2.7", "reportlab>=4.2", "uvicorn>=0.30", "requests>=2.31", ] [project.optional-dependencies] dev = ["pytest>=8.0", "ruff>=0.15"] # Semantic Recall embedder (ADR-0003): heavy (~2GB torch). Opt-in — NOT in the Space # requirements.txt (stub mode has no torch). Install with: pip install -e ".[embed]" embed = ["sentence-transformers>=3.0", "numpy>=1.26"] # Spoken voice note via Cohere Transcribe (ADR-0009): on-device STT. Opt-in, heavy. # Gated model — needs HF access + token. Install with: pip install -e ".[audio]" audio = ["transformers>=5.4", "torch", "accelerate", "soundfile", "librosa", "sentencepiece", "protobuf"] # Finalize & Send (S10): real SMS (Twilio) + email (SendGrid). Third-party APIs — # deliberately NOT in the Space requirements.txt (the Space drafts only; creds can't # live on a public Space — ADR-0005). Local/demo path only. Install: pip install -e ".[send]" send = ["twilio>=9.0", "sendgrid>=6.11"] # QR phone-capture (Tier 3): segno is a tiny pure-Python QR encoder, only needed on the # local/tunnel demo path (the Space has no tunnel to pair against). Opt-in, lazy-imported, # NOT in the Space requirements. Install with: pip install -e ".[capture]" capture = ["segno>=1.6"] # Flat layout with sibling dirs (data/, node_modules/) — scope discovery to the # quillwright package (and its subpackages) so setuptools auto-discovery doesn't # error on "multiple top-level packages". [tool.setuptools.packages.find] include = ["quillwright*"] [tool.pytest.ini_options] testpaths = ["tests"] addopts = "-v" [tool.ruff] line-length = 100 target-version = "py311"