-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
94 lines (86 loc) · 2.96 KB
/
Copy pathpyproject.toml
File metadata and controls
94 lines (86 loc) · 2.96 KB
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
[project]
name = "groundwork"
version = "0.1.0"
description = "Open-source RAG service with a first-class evaluation lab."
readme = "README.md"
requires-python = ">=3.12"
license = { file = "LICENSE" }
authors = [{ name = "Arshiya Shafizade" }]
dependencies = [
"alembic==1.18.5",
"arq==0.28.0",
"beautifulsoup4==4.15.0",
"fastapi==0.139.0",
"httpx==0.28.1",
"opentelemetry-instrumentation-fastapi==0.64b0",
"opentelemetry-sdk==1.43.0",
"pgvector==0.5.0",
"prometheus-client==0.24.1",
"psycopg[binary]==3.3.4",
"pydantic==2.13.4",
"pydantic-settings==2.14.2",
"pyyaml==6.0.3",
"redis==5.3.1",
"sqlalchemy[asyncio]==2.0.51",
"sse-starlette==3.4.5",
"uvicorn==0.51.0",
]
[dependency-groups]
# locust is a dev dependency on purpose: the load generator is a tool of this
# repository, never a runtime dependency of the service (ADR 0025). Nothing
# under src/ imports it — tests/test_packaging.py enforces that.
dev = [
"pytest==9.1.1",
"pytest-asyncio==1.4.0",
"ruff==0.15.21",
"mypy==2.2.0",
"locust==2.45.0",
]
[build-system]
requires = ["uv_build>=0.6,<1.0"]
build-backend = "uv_build"
[tool.ruff]
line-length = 100
src = ["src", "tests", "loadtest"]
[tool.ruff.lint]
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # pyflakes
"I", # isort
"UP", # pyupgrade
"B", # bugbear
]
[tool.mypy]
strict = true
# The locustfile is checked too (`make type` passes it explicitly, and so does
# this default): it is the only code that touches the running service outside
# the app itself, and excluding it to dodge the type checker would make it the
# one unchecked file in the repo.
files = ["src", "loadtest"]
mypy_path = "src"
# PyYAML ships no py.typed marker, and its stubs live in a separate
# distribution (types-PyYAML) that is not on the CLAUDE.md dependency
# allowlist. The single import site (evals/golden.py) narrows the resulting
# Any to `object` immediately and validates it by hand, so nothing untyped
# escapes the loader.
[[tool.mypy.overrides]]
module = ["yaml"]
ignore_missing_imports = true
# The OTLP span exporter ships in opentelemetry-exporter-otlp-proto-http, which
# is NOT on the CLAUDE.md dependency allowlist and is therefore not installed
# (ADR 0023). telemetry.py imports it lazily and optionally — a configured OTLP
# endpoint without the distribution raises TracingUnavailableError — so the
# module is legitimately absent at type-check time. The single import site
# narrows the resulting Any to SpanExporter immediately.
[[tool.mypy.overrides]]
module = ["opentelemetry.exporter.otlp.proto.http.trace_exporter"]
ignore_missing_imports = true
[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "strict"
asyncio_default_fixture_loop_scope = "function"
markers = [
"db: needs live Postgres from compose.yaml (make db-up); skips when unreachable",
"redis: needs live Redis from compose.yaml (make db-up); skips when unreachable",
]