# 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