c2743251e9
Self-evolving AI scientist framework built on LangGraph/LangChain with CLI/TUI core, FastAPI gateway, and Next.js frontend. Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
192 lines
4.3 KiB
TOML
192 lines
4.3 KiB
TOML
[project]
|
||
name = "EvoScientist"
|
||
dynamic = ["version"]
|
||
description = "EvoScientist core agent and command-line interface"
|
||
readme = "README.md"
|
||
requires-python = ">=3.11,<3.13"
|
||
license = "Apache-2.0"
|
||
authors = [
|
||
{ name = "BoYang" },
|
||
]
|
||
maintainers = [
|
||
{ name = "BoYang" },
|
||
]
|
||
keywords = ["ai-scientific", "scientific-discovery", "self-evolving", "ai-scientists", "end-to-end"]
|
||
classifiers = [
|
||
"Programming Language :: Python :: 3",
|
||
]
|
||
dependencies = [
|
||
"deepagents>=0.5.1",
|
||
"langchain>=1.2.12",
|
||
"langchain-anthropic>=1.4.0",
|
||
"langchain-openai>=1.1",
|
||
"langchain-nvidia-ai-endpoints>=0.3",
|
||
"langchain-google-genai>=4.2.1",
|
||
"langchain-ollama>=1.0",
|
||
"langchain-openrouter>=0.2.1",
|
||
"tavily-python>=0.7",
|
||
"pyyaml>=6.0",
|
||
"rich>=14.0",
|
||
"prompt-toolkit>=3.0",
|
||
"questionary>=2.0.1",
|
||
"typer>=0.12",
|
||
"python-dotenv>=1.0",
|
||
"langgraph-cli[inmem]>=0.4",
|
||
"langgraph-checkpoint-postgres>=3.1.0",
|
||
"psycopg[binary]>=3.3",
|
||
"httpx>=0.27",
|
||
"markdownify>=0.14",
|
||
"nest-asyncio>=1.6",
|
||
"langchain-mcp-adapters>=0.1",
|
||
"textual>=0.80",
|
||
"bcrypt>=4.0",
|
||
"pydantic>=2.0",
|
||
"arxiv-mcp-server>=0.4.11",
|
||
"fastmcp>=3.2.4",
|
||
"python-docx>=1.2.0",
|
||
"asyncpg>=0.31.0",
|
||
]
|
||
|
||
[dependency-groups]
|
||
dev = [
|
||
"pytest>=8.0",
|
||
"pytest-cov>=5.0",
|
||
"pytest-timeout>=2.4",
|
||
"ruff>=0.5",
|
||
"build>=1.0",
|
||
"pre-commit>=3.5.0",
|
||
]
|
||
|
||
[project.optional-dependencies]
|
||
dev = [
|
||
"pytest>=8.0",
|
||
"pytest-cov>=5.0",
|
||
"pytest-timeout>=2.4",
|
||
"ruff>=0.5",
|
||
"build>=1.0",
|
||
"pre-commit>=3.5.0",
|
||
]
|
||
telegram = ["python-telegram-bot>=21.0"]
|
||
discord = ["discord.py>=2.3"]
|
||
slack = ["slack-sdk>=3.27", "aiohttp>=3.9"]
|
||
wechat = ["pycryptodome>=3.20"]
|
||
feishu = ["lark-oapi>=1.4.0"]
|
||
qq = ["qq-botpy>=1.0"]
|
||
stt = ["faster-whisper>=1.0"]
|
||
search = [
|
||
"zhipuai>=2.1.5",
|
||
"firecrawl-py>=4.27.1",
|
||
"exa-py>=1.0",
|
||
]
|
||
search-zhipu = ["zhipuai>=2.1.5"]
|
||
search-firecrawl = ["firecrawl-py>=4.27.1"]
|
||
search-exa = ["exa-py>=1.0"]
|
||
oauth = ["ccproxy-api>=0.2.7"]
|
||
all-channels = [
|
||
"python-telegram-bot>=21.0",
|
||
"discord.py>=2.3",
|
||
"aiohttp>=3.9",
|
||
"slack-sdk>=3.27",
|
||
"pycryptodome>=3.20",
|
||
"lark-oapi>=1.4.0",
|
||
"qq-botpy>=1.0",
|
||
]
|
||
|
||
[project.urls]
|
||
"Homepage" = "https://github.com/EvoScientist/EvoScientist"
|
||
"Bug Tracker" = "https://github.com/EvoScientist/EvoScientist/issues"
|
||
"Documentation" = "https://github.com/EvoScientist/EvoScientist#readme"
|
||
|
||
[project.scripts]
|
||
evoscientist = "EvoScientist.cli:main"
|
||
EvoScientist = "EvoScientist.cli:main"
|
||
evosci = "EvoScientist.cli:main"
|
||
EvoSci = "EvoScientist.cli:main"
|
||
evo-admin = "EvoScientist.cli:admin_main"
|
||
|
||
[build-system]
|
||
requires = ["setuptools>=68.0"]
|
||
build-backend = "setuptools.build_meta"
|
||
|
||
[tool.uv]
|
||
override-dependencies = [
|
||
"pyjwt>=2.12.1",
|
||
]
|
||
|
||
[tool.setuptools.packages.find]
|
||
include = ["EvoScientist*"]
|
||
|
||
[tool.setuptools.dynamic]
|
||
version = { attr = "EvoScientist._version.__version__" }
|
||
|
||
[tool.setuptools.package-data]
|
||
EvoScientist = ["subagent.yaml", "skills/**/*"]
|
||
|
||
[tool.pytest.ini_options]
|
||
testpaths = ["tests"]
|
||
filterwarnings = [
|
||
"ignore::UserWarning:langchain_nvidia_ai_endpoints",
|
||
]
|
||
|
||
[tool.ruff]
|
||
# Exclude a variety of commonly ignored directories.
|
||
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",
|
||
]
|
||
|
||
line-length = 88
|
||
indent-width = 4
|
||
target-version = "py311"
|
||
|
||
[tool.ruff.lint]
|
||
select = [
|
||
"E", "W", # pycodestyle (Error & Warning)
|
||
"F", # Pyflakes (Logical errors)
|
||
"I", # isort (Import sorting)
|
||
"B", # flake8-bugbear (Common bugs)
|
||
"C4", # flake8-comprehensions (List/Dict perf)
|
||
"UP", # pyupgrade (Modern Python syntax)
|
||
"PT", # flake8-pytest-style (If using Pytest)
|
||
"PLE", # Pylint Error
|
||
"RUF", # Ruff specific rules
|
||
"FURB", # Refurb rules
|
||
]
|
||
ignore = [
|
||
"E501", # Formatter takes care of that
|
||
]
|
||
fixable = ["ALL"]
|
||
unfixable = []
|
||
allowed-confusables = ["–", "❯"]
|
||
|
||
[tool.ruff.format]
|
||
quote-style = "double"
|
||
indent-style = "space"
|
||
skip-magic-trailing-comma = false
|
||
line-ending = "auto"
|
||
docstring-code-format = false
|