pymupdf<2.0.0,>=1.23.0
python-docx<2.0.0,>=1.1.0
python-pptx<1.0.0,>=0.6.21
openpyxl<4.0.0,>=3.1.0
beautifulsoup4<5.0.0,>=4.12.0

[:python_version < "3.11"]
tomli<3.0.0,>=1.1.0

[ai]
openai<2.0.0,>=1.0.0

[ai-anthropic]
anthropic<1.0.0,>=0.30.0

[ai-gemini]
google-generativeai<1.0.0,>=0.6.0

[all]
runeextract[ai,ai-anthropic,ai-gemini,async,audio,dataframe,embeddings,epub,notion,ocr,pdf-alt,protected,rag,server,structured,vector-stores,video,xml,youtube]

[async]
aiohttp<4.0.0,>=3.9.0

[audio]
openai-whisper<20250000,>=20231117

[auto-rag]
runeextract[embeddings,rag,vector-stores]

[dataframe]
pandas<3.0.0,>=2.0.0

[dev]
pytest<9.0.0,>=7.4.0
pytest-cov<7.0.0,>=4.1.0
ruff<1.0.0,>=0.1.0

[embeddings]
sentence-transformers<4.0.0,>=2.2.0

[epub]
EbookLib<1.0.0,>=0.18
beautifulsoup4<5.0.0,>=4.12.0
lxml<6.0.0,>=4.9.0

[notion]
requests<3.0.0,>=2.28.0

[ocr]
easyocr<2.0.0,>=1.7.0
Pillow<12.0.0,>=10.0.0

[pdf-alt]
pdfplumber<1.0.0,>=0.10.0

[protected]
msoffcrypto-tool<6.0.0,>=5.0.0

[rag]
tiktoken<1.0.0,>=0.5.0
rank-bm25<1.0.0,>=0.2.0
numpy<3.0.0,>=1.24.0

[server]
websockets<14.0.0,>=12.0.0

[structured]
pydantic<3.0.0,>=2.0.0

[vector-stores]
chromadb<1.0.0,>=0.4.0
faiss-cpu<2.0.0,>=1.7.0

[video]
opencv-python-headless<5.0.0,>=4.8.0

[xml]
lxml<6.0.0,>=4.9.0

[youtube]
youtube-transcript-api<1.0.0,>=0.6.0
yt-dlp<2025.0.0,>=2023.0.0
