Spaces:
Running
Running
| [project] | |
| name = "alphabrief-api" | |
| version = "1.0.0" | |
| description = "AlphaBrief — supervisor-pattern multi-agent research orchestration with MCP tooling and human-in-the-loop governance" | |
| readme = "README.md" | |
| requires-python = ">=3.12,<3.13" | |
| license = { text = "MIT" } | |
| dependencies = [ | |
| "fastapi>=0.115.0", | |
| "uvicorn[standard]>=0.32.0", | |
| "pydantic>=2.9.0", | |
| "pydantic-settings>=2.6.0", | |
| "langgraph>=0.2.50", | |
| "langgraph-checkpoint>=2.0.0", | |
| "langgraph-checkpoint-postgres>=2.0.0", | |
| # Durable checkpoints for the default SQLite database, so the human gate | |
| # survives a restart without anyone configuring Postgres. | |
| "langgraph-checkpoint-sqlite>=2.0.0", | |
| "anthropic>=0.40.0", | |
| "mcp>=1.1.0", | |
| "yfinance>=0.2.50", | |
| "feedparser>=6.0.11", | |
| "sqlalchemy>=2.0.36", | |
| "psycopg[binary]>=3.2.0", | |
| "langfuse>=2.53.0", | |
| "httpx>=0.27.0", | |
| "sse-starlette>=2.1.3", | |
| "python-dotenv>=1.0.1", | |
| "tenacity>=9.0.0", | |
| ] | |
| [project.optional-dependencies] | |
| dev = [ | |
| "pytest>=8.3.0", | |
| "pytest-asyncio>=0.24.0", | |
| "pytest-cov>=6.0.0", | |
| "ruff>=0.8.0", | |
| "mypy>=1.13.0", | |
| # Deploying the API to a Hugging Face Space (scripts/deploy_space.py). | |
| "huggingface-hub>=0.26.0", | |
| ] | |
| [build-system] | |
| requires = ["hatchling"] | |
| build-backend = "hatchling.build" | |
| [tool.hatch.build.targets.wheel] | |
| packages = ["app"] | |
| # -------------------------------------------------------------- pytest ------ | |
| # Ruff + mypy configuration lives in the repo-root pyproject.toml so that one | |
| # quality gate covers apps/api and eval/ together. Pytest is rooted here. | |
| [tool.pytest.ini_options] | |
| minversion = "8.0" | |
| testpaths = ["tests"] | |
| asyncio_mode = "auto" | |
| asyncio_default_fixture_loop_scope = "function" | |
| addopts = "-q --strict-markers --strict-config" | |
| filterwarnings = [ | |
| "error", | |
| # Third-party internals we do not control. Scoped as tightly as possible so | |
| # a warning raised by OUR code still fails the suite. | |
| "ignore::DeprecationWarning:yfinance", | |
| "ignore::FutureWarning:yfinance", | |
| "ignore::DeprecationWarning:pkg_resources", | |
| "ignore::DeprecationWarning:peewee", | |
| "ignore::DeprecationWarning:websockets", | |
| "ignore:.*'crypt' is deprecated.*:DeprecationWarning", | |
| "ignore:.*datetime.datetime.utcnow.*:DeprecationWarning", | |
| "ignore:.*Support for class-based `config`.*:DeprecationWarning", | |
| ] | |
| markers = [ | |
| "network: performs a real outbound network call (deselect with '-m \"not network\"')", | |
| ] | |