[project]
name = "upsonic"
version = "0.77.3"
description = "Agent Framework For Fintech"
readme = "README.md"
authors = [
    { name = "Onur ULUSOY", email = "onur@upsonic.co" },
    { name = "Dogan Keskin", email = "dogan@upsonic.co" }
]

classifiers = [
  "Programming Language :: Python :: 3",
  "Programming Language :: Python :: 3.10",
  "Programming Language :: Python :: 3.11",
  "Programming Language :: Python :: 3.12",
]

requires-python = ">=3.10"
dependencies = [
    "psutil==6.1.1",
    "rich>=13.9.4",
    "sentry-sdk[opentelemetry]>=2.35.0",
    "toml>=0.10.2",
    "python-dotenv>=1.0.1",
    "uvicorn>=0.34.0",
    "nest-asyncio>=1.6.0",
    "pydantic>=2.10.5",
    "pydantic-core>=2.27.2",
    "typing-extensions>=4.15.0",
    "anyio>=4.10.0",
    "griffe>=1.14.0",
    "typing-inspection>=0.4.1",
    "httpx>=0.28.1",
    "aiohttp>=3.13.3",
    "requests>=2.32.5",
    "openai>=2.2.0",
    "genai-prices>=0.0.38",
    "protobuf>=5.27.2,<6.0.0",
    "cloudpickle>=3.1.2",
]

[project.optional-dependencies]
mcp = [
    "mcp[cli]>=1.26.0",
    "fastmcp>=2.14.5",
]
asqav = [
    "asqav>=0.2.21",
]
chroma = [
    "chromadb>=1.0.20; python_version < '3.14'",
]
qdrant = [
    "qdrant-client>=1.12.1",
]
milvus = [
    "pymilvus>=2.6.1",
]
weaviate = [
    "weaviate-client>=4.16.9",
]
pinecone = [
    "pinecone>=7.3.0",
    "pinecone-text>=0.11.0; python_version < '3.14'",
]
faiss = [
    "faiss-cpu>=1.12.0",
    "numpy>=2.2.6",
]
pgvector = [
    "psycopg>=3.2.9",
    "pgvector>=0.4.1",
    "sqlalchemy>=2.0.44",
]
supermemory = [
    "supermemory>=3.25.0",
]
vectordb = [
    "chromadb>=1.0.20; python_version < '3.14'",
    "faiss-cpu>=1.12.0",
    "pinecone>=7.3.0",
    "psycopg>=3.2.9",
    "pymilvus[milvus-lite]>=2.6.1",
    "qdrant-client>=1.12.1",
    "weaviate-client>=4.16.9",
    "scipy>=1.13.0",
    "scikit-learn>=1.4.0",
    "reportlab>=4.1.0",
    "pgvector>=0.4.1",
    "sqlalchemy>=2.0.44",
    "pinecone-text>=0.11.0; python_version < '3.14'",
    "supermemory>=3.25.0",
]

sqlite-storage = [
    "sqlalchemy>=2.0.42",
    "aiosqlite>=0.21.0",
    "greenlet>=3.2.3",
]
redis-storage = [
    "redis>=5.2.1",
]
postgres-storage = [
    "sqlalchemy>=2.0.42",
    "psycopg2-binary>=2.9.10",
    "psycopg[binary]>=3.2.9",
    "asyncpg>=0.30.0",
    "greenlet>=3.2.3",
]
mongo-storage = [
    "pymongo>=4.9.0",
    "motor>=3.7.1",
]
mem0-storage = [
    "mem0ai>=0.1.116",
]

storage = [
    "upsonic[sqlite-storage]",
    "upsonic[redis-storage]",
    "upsonic[postgres-storage]",
    "upsonic[mongo-storage]",
    "upsonic[mem0-storage]",
]
models = [
    "anthropic>=0.69.0",
    "anyio>=4.10.0",
    "azure-core>=1.35.1",
    "azure-identity>=1.25.0",
    "boto3>=1.40.45",
    "botocore>=1.40.45",
    "cohere>=5.18.0",
    "google-auth>=2.40.3",
    "google-genai>=1.41.0",
    "groq>=0.32.0",
    "httpx>=0.28.1",
    "mistralai>=1.9.11",
    "mypy-boto3-bedrock-runtime>=1.40.41",
    "openai>=2.1.0",
    "outlines>=1.2.9",
    "xai-sdk>=1.4.0",
]
embeddings = [
    "aiohttp>=3.13.3",
    "anthropic>=0.69.0",
    "azure-core>=1.35.1",
    "azure-identity>=1.25.0",
    "boto3>=1.40.45",
    "botocore>=1.40.45",
    "fastembed>=0.7.3; python_version < '3.14'",
    "google-auth>=2.40.3",
    "google-genai>=1.41.0",
    "huggingface-hub>=0.34.4",
    "numpy>=2.2.6",
    "onnxruntime>=1.22.1; python_version < '3.14'",
    "openai>=2.1.0",
    "requests>=2.32.5",
    "torch>=2.8.0",
    "transformers>=4.57.0",
]
csv-loader = [
    "aiofiles>=24.1.0",
]
docling-loader = [
    "docling>=2.55.1",
]
docx-loader = [
    "python-docx>=1.2.0",
]
html-loader = [
    "aiohttp>=3.13.3",
    "beautifulsoup4>=4.14.2",
    "requests>=2.32.5",
]
json-loader = [
    "jq>=1.10.0",
]
markdown-loader = [
    "markdown-it-py>=4.0.0",
    "python-frontmatter>=1.1.0",
]
pdf-loader = [
    "pypdf>=6.1.1",
    "rapidocr-onnxruntime>=1.4.4; python_version < '3.13'",
]
pdfplumber-loader = [
    "pdfplumber>=0.11.7",
    "rapidocr-onnxruntime>=1.4.4; python_version < '3.13'",
]
pymupdf-loader = [
    "pymupdf>=1.26.4",
    "rapidocr-onnxruntime>=1.4.4; python_version < '3.13'",
]
text-loader = [
    "aiofiles>=24.1.0",
]
xml-loader = [
    "lxml>=4.9.1",
]
yaml-loader = [
    "jq>=1.10.0",
    "pyyaml>=6.0.2",
]
loaders = [
    "aiofiles>=24.1.0",
    "aiohttp>=3.13.3",
    "beautifulsoup4>=4.14.2",
    "docling>=2.55.1",
    "jq>=1.10.0",
    "lxml>=4.9.1",
    "markdown-it-py>=4.0.0",
    "pdfplumber>=0.11.7",
    "pillow>=11.3.0",
    "pymupdf>=1.26.4",
    "pypdf>=6.1.1",
    "python-docx>=1.2.0",
    "python-frontmatter>=1.1.0",
    "pyyaml>=6.0.2",
    "rapidocr-onnxruntime>=1.4.4; python_version < '3.13'",
    "requests>=2.32.5",
]
tools = [
    "beautifulsoup4>=4.14.2",
    "ddgs>=9.10.0",
    "genai-prices>=0.0.29",
    "pandas>=2.3.2",
    "tavily-python>=0.7.12",
    "yfinance>=0.2.66",
]
web = [
    "celery>=5.5.3",
    "fastapi",
    "python-multipart>=0.0.20",
    "uvicorn>=0.35.0",
]
ocr = [
    "easyocr>=1.7.2",
    "paddleocr>=2.10.0",
    "pymupdf>=1.26.4",
    "pillow>=11.3.0",
    "pytesseract>=0.3.13",
    "rapidocr-onnxruntime>=1.4.4; python_version < '3.13'",
]

custom-tools = [
    "apify-client>=1.8.1",
    "firecrawl-py>=4.14.1",
    "slack-sdk>=3.38.0",
    "crawlee[beautifulsoup]>=1.4.0",
]
apify-tool = [
    "apify-client>=1.8.1",
]
crawlee-browser = [
    "crawlee[playwright]>=1.4.0",
]
gmail-interface = [
    "fastapi",
    "google-api-python-client",
    "google-auth-httplib2",
    "google-auth-oauthlib",
]
safety-engine = [
    "detoxify>=0.5.2",
]
slack-interface = [
    "fastapi>=0.128.0",
    "slack-sdk>=3.39.0",
]
mail-interface = [
    "fastapi>=0.128.0",
]
discord-interface = [
    "fastapi>=0.128.0",
    "websockets>=12.0",
]
otel = [
    "opentelemetry-api>=1.39.1",
    "opentelemetry-exporter-otlp-proto-grpc>=1.39.1",
    "opentelemetry-exporter-otlp-proto-http>=1.39.1",
    "opentelemetry-sdk>=1.39.1",
]
langfuse = [
    "opentelemetry-api>=1.39.1",
    "opentelemetry-exporter-otlp-proto-http>=1.39.1",
    "opentelemetry-sdk>=1.39.1",
]
gmail-tool = [
    "google-api-python-client>=2.188.0",
    "google-auth-httplib2>=0.3.0",
    "google-auth-oauthlib>=1.2.4",
]

[project.scripts]
upsonic = "upsonic.cli.main:main"

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"


[tool.uv]
default-groups = ["dev"]
required-version = ">=0.10.0"
override-dependencies = ["packaging>=25.0,<26"]

[tool.hatch.build.targets.wheel]
packages = ["src/upsonic"]

[dependency-groups]
dev = [
    "mypy>=1.14.1",
    "pre-commit>=4.0.1",
    "pytest>=8.3.4",
    "pytest-asyncio>=0.25.1",
    "pytest-timeout>=2.3.1",
    "tomlkit>=0.13.3",
    "uv>=0.5.20",
]





[[tool.uv.index]]
name = "pypi"
url = "https://pypi.org/simple/"
publish-url = "https://upload.pypi.org/legacy/"

[[tool.uv.index]]
name = "testpypi"
url = "https://test.pypi.org/simple/"
publish-url = "https://test.pypi.org/legacy/"