[project]
name = "arklex"
description = "The official Python library for the arklex API"
authors = [
  { name="Arklex.AI", email="support@arklex.ai" },
]
readme = "README.md"
requires-python = ">=3.10"
dynamic = ["version"]
classifiers = [
  "Operating System :: OS Independent",
  "Programming Language :: Python :: 3.10",
  "Programming Language :: Python :: 3.11",
  "Programming Language :: Python :: 3.12",
]
dependencies = [
  "email_validator>=2.2.0,<3.0.0",
  "fastapi>=0.115.3,<1.0.0",
  "fastapi-cli>=0.0.5,<1.0.0",
  "greenlet>=3.1.1,<4.0.0",
  "httptools>=0.6.4,<1.0.0",
  "langchain-community>=0.3.3,<1.0.0",
  "langchain-openai>=0.2.3,<1.0.0",
  "langchain-anthropic>=0.3.5,<1.0.0",
  "langchain-google-genai>=2.0.9,<3.0.0",
  "langchain-huggingface>=0.1.2,<1.0.0",
  "langgraph>=0.2.39,<1.0.0",
  "linkify-it-py>=2.0.3,<3.0.0",
  "mdit-py-plugins>=0.4.2,<1.0.0",
  "networkx>=3.4.2,<4.0.0",
  "phonenumbers>=8.13.48,<9.0.0",
  "PySocks>=1.7.1,<2.0.0",
  "python-Levenshtein>=0.26.0,<1.0.0",
  "python-multipart>=0.0.12,<1.0.0",
  "selenium>=4.26.1,<5.0.0",
  "textual>=0.85.2,<1.0.0",
  "unstructured[all-docs]>=0.16.4,<1.0.0",
  "unstructured-client>=0.30.0,<1.0.0",
  "watchfiles>=0.24.0,<1.0.0",
  "websockets>=13.1,<14.0",
  "faiss-cpu>=1.10.0,<2.0.0",
  "tavily-python>=0.5.0,<1.0.0",
  "webdriver-manager==4.0.2",
  "scipy>=1.14.1,<2.0.0",
  "litellm>=1.59.0,<2.0.0",
  "janus>=1.0.0,<2.0.0",
  "pydantic_ai>=0.1.10,<1.0.0",
  "markdown>=3.8",
  "pytest>=8.3.5,<9.0.0",
  "pytest-asyncio>=0.18.0,<0.19.0",
  "pytest-cov>=3.0.0,<4.0.0",
  "pytest-mock>=3.10.0,<4.0.0",
  "pytest-env>=1.0.0,<2.0.0",
  "parsedatetime>=2.6,<3.0",
  "scikit-learn>=1.7.0,<2.0.0",
  "sentence-transformers>=2.2.2,<3.0.0"
]
license = "MIT"

[project.optional-dependencies]
milvus = [
  "pymilvus>=2.4.7,<3.0.0",
  "mysql-connector-python>=8.3.0,<9.0.0",
  "PyMySQL>=1.1.0,<2.0.0",
]
shopify = ["ShopifyAPI>=12.7.0,<13.0.0"]
hubspot = ["hubspot-api-client>=11.1.0,<12.0.0"]
strict-versions = [
  "email_validator==2.2.0",
  "fastapi==0.115.3",
  "fastapi-cli==0.0.5",
  "greenlet==3.1.1",
  "httptools==0.6.4",
  "langchain-community==0.3.3",
  "langchain-openai==0.2.3",
  "langchain-anthropic==0.3.5",
  "langchain-google-genai==2.0.9",
  "langchain-huggingface==0.1.2",
  "langgraph==0.2.39",
  "linkify-it-py==2.0.3",
  "mdit-py-plugins==0.4.2",
  "networkx==3.4.2",
  "phonenumbers==8.13.48",
  "PySocks==1.7.1",
  "python-Levenshtein==0.26.0",
  "python-multipart==0.0.12",
  "selenium==4.26.1",
  "textual==0.85.2",
  "unstructured[all-docs]==0.16.4",
  "unstructured-client==0.30.0",
  "watchfiles==0.24.0",
  "websockets==13.1",
  "faiss-cpu==1.10.0",
  "tavily-python==0.5.0",
  "webdriver-manager==4.0.2",
  "scipy==1.14.1",
  "litellm==1.59.0",
  "janus==1.0.0",
  "pydantic_ai==0.1.10",
  "markdown==3.8",
  "pytest==8.3.5",
  "pytest-asyncio==0.18.0",
  "pytest-cov==3.0.0",
  "pytest-mock==3.10.0",
  "pytest-env==1.0.0",
  "parsedatetime==2.6",
  "pymilvus==2.4.7",
  "mysql-connector-python==8.3.0",
  "PyMySQL==1.1.0",
  "ShopifyAPI==12.7.0",
  "hubspot-api-client==11.1.0"
]

[tool.hatch.version]
path = "arklex/__init__.py"

[project.urls]
Homepage = "https://github.com/arklexai/Agent-First-Organization"
Issues = "https://github.com/arklexai/Agent-First-Organization/issues"

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

[tool.ruff]
line-length = 88  # Match Black, or use your own standard
target-version = "py310"  # Adjust to match your minimum Python version
exclude = [
    ".bzr",
    ".direnv",
    ".eggs",
    ".git",
    ".git-rewrite",
    ".hg",
    ".ipynb_checkpoints",
    ".mypy_cache",
    ".nox",
    ".pants.d",
    ".pyenv",
    ".pytest_cache",
    ".pytype",
    ".ruff_cache",
    ".svn",
    ".tox",
    ".venv",
    ".vscode",
    "__pypackages__",
    "_build",
    "buck-out",
    "build",
    "dist",
    "node_modules",
    "site-packages",
    "venv",
]
indent-width = 4

[tool.ruff.lint]
select = [
  "E",  # pycodestyle (formatting errors)
  "F",  # pyflakes (undefined names, etc.)
  "I",  # isort (import sorting)
  "UP",  # pyupgrade (modernizes syntax)
  "ANN",  # flake8-annotations (type hints)
  "B",  # flake8-bugbear (likely bugs/bad practices)
  "SIM",  # flake8-simplify (simpler constructs)
  "C4",  # flake8-comprehensions
  "TID", # flake8-tidy-imports
]
ignore = [
  "E501",  # Line too long (if you're using Black)
]

[tool.ruff.format]
quote-style = "double"
indent-style = "space"
skip-magic-trailing-comma = false
line-ending = "auto"
docstring-code-format = false
docstring-code-line-length = "dynamic"

[tool.coverage.run]
relative_files = true