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