File size: 1,452 Bytes
187966e 8ff26a0 275338a 187966e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | [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",
]
[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
|