[project] name = "shopify-support-bot" version = "0.1.0" description = "Embeddable Shopify support chatbot (info RAG + order tracking) on free LLMs" requires-python = ">=3.12,<3.13" dependencies = [ "fastapi>=0.115", "uvicorn[standard]>=0.32", "pydantic>=2.9", "pydantic-settings>=2.6", "sqlalchemy[asyncio]>=2.0", "psycopg[binary]>=3.2", "pgvector>=0.3", "alembic>=1.14", "httpx>=0.28", "fastembed>=0.4", "pypdf>=5.1", "openpyxl>=3.1", "python-docx>=1.1", "selectolax>=0.3.25", "python-multipart>=0.0.12", "tenacity>=9.0", "anyio>=4.6", "cryptography>=48.0.0", "langdetect>=1.0.9", "ddgs>=9.14.4", "xlrd>=2.0", ] [dependency-groups] dev = [ "pytest>=8.3", "pytest-asyncio>=0.24", "respx>=0.22", "aiosqlite>=0.20", "ruff>=0.8", "fpdf2>=2.8", ] [tool.pytest.ini_options] asyncio_mode = "auto" pythonpath = ["."] testpaths = ["tests"] filterwarnings = ["ignore::DeprecationWarning"] markers = [ "slow: tests that download/load the embedding model", ] [tool.ruff] line-length = 100 target-version = "py312" [tool.ruff.lint] select = ["E", "F", "I", "UP", "B"] [tool.ruff.lint.per-file-ignores] "tests/**" = ["E501"] # test fixtures/data can be long [tool.ruff.lint.flake8-bugbear] # FastAPI idiom: dependency markers in argument defaults are intentional. extend-immutable-calls = [ "fastapi.Depends", "fastapi.File", "fastapi.Header", "fastapi.Query", "fastapi.Form", ] [tool.uv] package = false