# Web Framework
# fastapi and starlette are pinned for reproducible builds; bump them together and
# run the API suite. fastapi only requires starlette>=0.46.0 (no upper bound).
# starlette must stay >=1.3.1: that release enforces the request.form() limits
# for urlencoded bodies (GHSA-82w8-qh3p-5jfq).
# (The earlier "fastapi 0.138.0 breaks error handling" note was the takeover
# tests' route-swap hack becoming live, not a framework regression; the hack is gone.)
fastapi==0.137.2
starlette==1.6.0
uvicorn
python-socketio
websockets

# Database
sqlalchemy
alembic
psycopg[binary]>=3.1.0
asyncpg

# Authentication & Security
python-jose[cryptography]
passlib[bcrypt]
bcrypt>=3.2.0,<4.0.0
python-multipart

# Environment & Config
python-dotenv
pydantic>=2.0.0
pydantic-settings>=2.0.0

# Utilities
email-validator
python-dateutil
requests
beautifulsoup4

# Testing
pytest
pytest-asyncio
pytest-cov==4.1.0
pytest-mock
coverage==7.4.1


# Sentiment Analysis
textblob

#ai
openai
agno==1.7.6
duckduckgo-search
pypdf
pgvector

google-generativeai
# Required by agno==1.7.6's Gemini model wrapper.
google-genai==1.75.0
google-cloud-aiplatform
ollama
anthropic
mistralai<2  # agno 1.7.6 uses the mistralai 1.x API (mistralai.models); 2.x breaks the import

#ocr
rapidocr-onnxruntime==1.4.4
onnxruntime==1.23.0
opencv-python==4.12.0.88

#pdf
pypdf

pytz

firebase_admin
beautifulsoup4
aiofiles

# help-center article rendering: FAQ answers are authored/stored as Markdown and
# rendered to sanitized HTML on the public page (markdown -> nh3 allowlist clean).
markdown
nh3
# help-center article import: crawled help pages are converted HTML -> Markdown
# (subclassed converter re-hosts images and absolutizes links inline).
markdownify

gunicorn

redis


aiohttp

bs4

boto3

groq

# Embeddings run on fastembed (ONNX); no torch/transformers stack is installed.
fastembed==0.7.3

# Shopify API
ShopifyAPI

# Razorpay payment gateway
razorpay

# Pinned below 2.0: mcp 2.0.0 (2026-07-28) dropped streamablehttp_client from
# mcp.client.streamable_http, which the pinned agno==1.7.6 imports at module
# scope. agno catches the failure and re-raises it as "`mcp` not installed",
# so an unpinned install breaks every import of app.main with a message that
# points at the wrong problem. Lift this together with the agno 2.x upgrade.
mcp<2

# UV tool runner for Python-based MCP servers
uv

# Web Crawling
httpx
# pyOpenSSL and cryptography move together: each pyOpenSSL release bounds the
# cryptography versions it accepts (26.4 needs >=49,<51).
pyOpenSSL==26.4.0
cryptography==50.0.1
# 0.7.x hard-required sentence-transformers (and with it torch); 0.9 dropped that.
crawl4ai>=0.9

# Help center (public SSR templates + custom-domain DNS verification)
jinja2
dnspython
sqlglot>=30.0
pymysql>=1.1
sshtunnel>=0.4.0
paramiko>=3.4,<4
