[build-system]
requires = ["setuptools>=68.0", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "cyberverse"
version = "0.1.0"
description = "CyberVerse - Real-time Interactive Digital Human Platform"
requires-python = ">=3.10"
dependencies = [
    "numpy>=1.24",
    "pydantic>=2.0",
    "pyyaml>=6.0",
]

[project.optional-dependencies]
inference = [
    "grpcio>=1.80",
    "grpcio-tools>=1.80",
    "grpcio-health-checking>=1.60",
]
llm = ["openai>=1.0"]
tts = ["openai>=1.0", "scipy>=1.10"]
omni = ["websockets>=12.0"]
voice_llm = ["websockets>=12.0"]
qwen = ["openai>=1.0", "websockets>=12.0", "scipy>=1.10"]
rag = [
    "langchain>=1.0",
    "langchain-core>=1.0",
    "langchain-openai>=1.0",
    "langchain-text-splitters>=1.0",
    "langchain-community>=0.4",
    "langchain-chroma>=1.0",
    "pypdf>=5.0",
    "python-docx>=1.1",
]
flash_head = [
    "opencv-python-headless>=4.12.0",
    "diffusers>=0.34.0",
    "transformers==4.57.3",
    "tokenizers>=0.20.3",
    "accelerate>=1.8.1",
    "tqdm",
    "imageio",
    "easydict",
    "ftfy",
    "imageio-ffmpeg",
    "scikit-image",
    "loguru",
    "gradio==5.50.0",
    "xfuser==0.4.5",
    "pyloudnorm",
    "decord",
    "xformers==0.0.32.post1",
    "librosa",
    "mediapipe>=0.10.13",
    "flask",
    "nvidia-nccl-cu12==2.27.3",
]
live_act = [
    "opencv-python>=4.11.0",
    "diffusers>=0.31.0",
    "transformers>=4.49.0",
    "tokenizers>=0.20.3",
    "accelerate>=1.12.1",
    "tqdm",
    "imageio",
    "easydict",
    "ftfy",
    "imageio-ffmpeg",
    "scikit-image",
    "loguru",
    "xfuser==0.4.5",
    "einops",
    "safetensors",
]
asr = ["openai-whisper>=20231117"]
dev = [
    "pytest>=7.0",
    "pytest-asyncio>=0.21",
]
agent = [
    "openai>=1.0",
    "httpx>=0.27",
    "langchain>=1.0",
    "langchain-core>=1.0",
    "langchain-openai>=1.0",
    "langgraph>=1.0",
    "langgraph-checkpoint-sqlite>=2.0.0",
    "aiosqlite>=0.20",
]
all = [
    "cyberverse[inference,llm,tts,omni,asr,rag,flash_head,live_act,agent]",
]

[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
markers = [
    "integration: 需要 GPU、权重与 flash_head 等重依赖的端到端测试（较慢）",
]

[tool.setuptools.packages.find]
include = ["inference*"]
