import sys
import platform

from setuptools import find_packages, setup

# Base requirements for all platforms
install_requires = [
  "aiohttp==3.10.2",
  "aiohttp_cors==0.7.0",
  "aiofiles==24.1.0",
  "grpcio==1.64.1",
  "grpcio-tools==1.64.1",
  "Jinja2==3.1.4",
  "netifaces==0.11.0",
  "numpy==2.0.0",
  "nvidia-ml-py==12.560.30",
  "pillow==10.4.0",
  "prometheus-client==0.20.0",
  "protobuf==5.27.1",
  "psutil==6.0.0",
  "pydantic==2.9.2",
  "requests==2.32.3",
  "rich==13.7.1",
  "safetensors==0.4.3",
  "tenacity==9.0.0",
  "tqdm==4.66.4",
  "transformers==4.43.3",
  "uuid==1.30",
  "tinygrad @ git+https://github.com/tinygrad/tinygrad.git@232edcfd4f8b388807c64fb1817a7668ce27cbad",
]

extras_require = {
  "linting": [
    "pylint==3.2.6",
    "ruff==0.5.5",
    "mypy==1.11.0",
    "yapf==0.40.2",
  ],
  "apple_silicon": [
    "mlx==0.18.0",
    "mlx-lm==0.18.2",
  ],
}

# Check if running on macOS with Apple Silicon
if sys.platform.startswith("darwin") and platform.machine() == "arm64":
  install_requires.extend(extras_require["apple_silicon"])

setup(
  name="exo",
  version="0.0.1",
  packages=find_packages(),
  install_requires=install_requires,
  extras_require=extras_require,
  package_data={"exo": ["tinychat/**/*"]},
  entry_points={"console_scripts": ["exo = exo.main:run"]},
)
