pw-foundation~=1.0
pyyaml>=6.0.2

[admin]
pw-core[tracking,web]

[anthropic]
anthropic<1.0,>=0.105

[articles]
trafilatura>=2.2
htmldate>=1.10
tenacity>=9.1

[cli]
typer>=0.27
click>=8.4

[crawl]
pw-core[articles,http]

[db]
sqlalchemy>=2.0.52
alembic>=1.19

[dev]
pytest>=9.1
httpx>=0.28
factory-boy>=3.3.3
ruff~=0.16.0
mypy~=2.3.0
types-PyYAML
types-PyMySQL
types-jsonschema
types-nanoid
pre-commit>=4.6
build>=1.2

[eval]
pw-core[jobs,tracking]
jinja2>=3.1.6

[full]
pw-core[db]
pw-core[web]
pw-core[llm]
pw-core[cli]
pw-core[jobs]
pw-core[tracking]
pw-core[admin]
pw-core[eval]
pw-core[redis]
pw-core[ratelimit]
pw-core[jsonschema]

[http]
httpx>=0.28

[image-phash]
ImageHash>=4.3.2
Pillow>=12.3

[jobs]
pw-core[cli,db,tracking]
pydantic>=2.13

[jsonschema]
jsonschema>=4.26

[llm]
pw-core[http,validate]
tenacity>=9.1

[mysql]
pymysql>=1.2

[otel]
pw-core[cli,tracking]
opentelemetry-api>=1.45
opentelemetry-sdk>=1.45
opentelemetry-exporter-otlp-proto-http>=1.45

[postgres]
psycopg[binary]>=3.3

[ratelimit]
pw-core[web]
slowapi>=0.1.10

[redis]
dogpile.cache>=1.5
redis>=8.1

[test-containers]
testcontainers[mysql]>=4.15

[tracking]
pw-core[db,llm]

[validate]
json-repair>=0.63
pydantic>=2.13

[web]
fastapi>=0.141
jinja2>=3.1.6
uvicorn[standard]>=0.52
