httpx>=0.25
pyyaml>=6.0
python-dotenv>=1.0
pydantic<3.0,>=2.0

[all]
langfuse<3.0,>=2.0
fastapi>=0.110
uvicorn[standard]>=0.27
rich>=13.0
textual>=0.40
click>=8.0
prompt_toolkit>=3.0
rapidfuzz>=3.0
tiktoken>=0.7
trafilatura>=1.12
ragas>=0.2
datasets>=2.14
pandas>=2.0
deepeval>=0.20
sentence-transformers>=2.7
Sastrawi>=1.0.1
pytest>=7.0
pytest-asyncio>=0.23
pytest-cov
pytest-benchmark>=4.0
ruff>=0.4.0
mypy<2.4.0,>=1.19.1
bandit>=1.9
types-PyYAML

[api]
fastapi>=0.110
uvicorn[standard]>=0.27

[browser]
playwright>=1.40

[dev]
pytest>=7.0
pytest-asyncio>=0.23
pytest-cov
pytest-benchmark>=4.0
ruff>=0.4.0
mypy<2.4.0,>=1.19.1
bandit>=1.9
types-PyYAML

[eval-all]
ragas>=0.2
datasets>=2.14
pandas>=2.0
deepeval>=0.20

[eval-deepeval]
deepeval>=0.20

[eval-gaia]
datasets>=2.14
pandas>=2.0

[eval-ragas]
ragas>=0.2
datasets>=2.14

[eval-swe-bench]
datasets>=2.14
pandas>=2.0

[indo-nlp]
Sastrawi>=1.0.1

[rag]
pypdf>=4.0
python-docx>=1.1
pdfplumber>=0.11

[rag-cloud]
boto3>=1.34

[rerank-local]
sentence-transformers>=2.7

[tokenizer]
tiktoken>=0.7

[tracing]
langfuse<3.0,>=2.0

[tui]
rich>=13.0
textual>=0.40
click>=8.0
prompt_toolkit>=3.0
rapidfuzz>=3.0

[websearch]
trafilatura>=1.12
