python-dotenv>=1.2
pyyaml>=6.0.2
structlog>=26.1
nanoid>=2.0
rich>=15.0

[admin]
pf-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]
pf-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

[eval]
pf-core[jobs,tracking]

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

[http]
httpx>=0.28

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

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

[jsonschema]
jsonschema>=4.26

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

[mysql]
pymysql>=1.2

[postgres]
psycopg[binary]>=3.3

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

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

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

[tracking]
pf-core[db,llm]

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

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