
[project]
name = "agentscope"
dynamic = ["version"]
description = "AgentScope: A Flexible yet Robust Multi-Agent Platform."
readme = "README.md"
authors = [
    { name = "SysML team of Alibaba Tongyi Lab", email = "gaodawei.gdw@alibaba-inc.com" }
]
license = "Apache-2.0"
keywords = ["deep-learning", "multi agents", "agents"]
classifiers = [
    "Development Status :: 4 - Beta",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.10",
    "Operating System :: OS Independent",
    "Intended Audience :: Developers",
    "Intended Audience :: Science/Research",
    "Topic :: Scientific/Engineering :: Artificial Intelligence",
]
requires-python = ">=3.10"
dependencies = [
    "aioitertools",
    "anthropic",
    "dashscope",
    "docstring_parser",
    "json5",
    "json_repair",
    "mcp>=1.13",
    "numpy",
    "openai",
    "python-datauri",
    "opentelemetry-api>=1.39.0",
    "opentelemetry-sdk>=1.39.0",
    "opentelemetry-exporter-otlp>=1.39.0",
    "opentelemetry-semantic-conventions>=0.60b0",
    "python-socketio",
    "shortuuid",
    "tiktoken",
    "sounddevice",
    "sqlalchemy",
    "python-frontmatter",
]

[project.optional-dependencies]
# ------------ A2A protocol ------------
a2a = [
    "a2a-sdk",
    "httpx",
    # TODO: split the card resolvers from the a2a dependency
    "nacos-sdk-python>=3.0.0",
]

# ------------ Realtime -------------
realtime = ["websockets>=14.0", "scipy"]

# ------------ Model APIs ------------
gemini = ["google-genai"]
ollama = ["ollama>=0.5.4"]
models = [
    "agentscope[ollama]",
    "agentscope[gemini]",
]

# ------------ Tokenizers ------------
tokens = [
    "Pillow",
    "transformers",
    "jinja2",
]

# ------------ Memory ------------
redis_memory = ["redis"]

mem0ai = [
    "mem0ai<=1.0.3",
    "packaging"
]
reme = ["reme-ai>=0.2.0.3"]
memory = [
    "agentscope[redis_memory]",
    "agentscope[mem0ai]",
    "agentscope[reme]",
]

# ------------ RAG ------------
# readers
text-reader = ["nltk"]
pdf-reader = [
    "agentscope[text-reader]",
    # TODO: the latest pypdf has some issues with parsing PDFs
    #  (2026-01-13), so we fix the version here temporarily.
    "pypdf<=6.5.0",
]
docx-reader = [
    "agentscope[text-reader]",
    "python-docx"
]
excel-reader = [
    "agentscope[text-reader]",
    "pandas",
    "openpyxl",
]
ppt-reader = [
    "agentscope[text-reader]",
    "python-pptx"
]
readers = [
    "agentscope[text-reader]",
    "agentscope[pdf-reader]",
    "agentscope[docx-reader]",
    "agentscope[excel-reader]",
    "agentscope[ppt-reader]",
]

# vdb
# The qdrant-client >= 1.16.0 has conflicts with pymilvus, so we fix
# the version to 1.15.1 here.
qdrant = ["qdrant-client==1.15.1"]
milvus = ["pymilvus[milvus_lite]"]
ali_mysql = ["mysql-connector-python"]
mongodb = ["pymongo"]
oceanbase = ["pyobvector>=0.2.0,<0.3.0"]
vdbs = [
    "agentscope[ali_mysql]",
    "agentscope[qdrant]",
    "agentscope[milvus]",
    "agentscope[mongodb]",
    "agentscope[oceanbase]",
]

rag = [
    "agentscope[readers]",
    "agentscope[vdbs]",
]

# ------------ Evaluation ------------
evaluate = ["ray"]

# ------------ Full ------------
full = [
    "agentscope[a2a]",
    "agentscope[models]",
    "agentscope[tokens]",
    "agentscope[memory]",
    "agentscope[rag]",
    "agentscope[evaluate]",
    "agentscope[realtime]",
]

# ------------ Development ------------
dev = [
    # Include full dependencies from local package
    "agentscope[full]",
    # Development tools
    "pre-commit",
    "pytest",
    "pytest-forked",
    "sphinx-gallery",
    "furo",
    "myst_parser",
    "matplotlib",
    # For unittests
    # For mocking redis in unittests
    "fakeredis",
    "aiosqlite",
    "greenlet",
    # For openjudge
    "py-openjudge",
]

[project.urls]
Homepage = "https://github.com/agentscope-ai/agentscope"
Documentation = "https://doc.agentscope.io/"
Repository = "https://github.com/agentscope-ai/agentscope"

[tool.setuptools]
packages = { find = { where = ["src"] } }
include-package-data = true

[tool.setuptools.package-data]
"*" = ["py.typed"]

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

[tool.setuptools.dynamic]
version = {attr = "agentscope._version.__version__"}
