[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "agent-regress-cli" version = "0.1.9" description = "Statistical regression testing for LLM agents. Get a p-value on whether behavior actually shifted between versions, not just whether one run looked different. Apache 2.0, self-hostable, no SaaS dependency -- a Promptfoo alternative for the statistical testing gap threshold-based eval tools don't cover." readme = "README.md" requires-python = ">=3.10" license = { text = "Apache-2.0" } authors = [ { name = "Rudrendu Paul" }, { name = "Sourav Nandy" }, ] keywords = [ "llm", "agents", "testing", "regression", "statistics", "p-value", "cohen-d", "mann-whitney", "langgraph", "openai-agents", "crewai", "promptfoo-alternative", "eval", "benchmark", "ci-cd", ] classifiers = [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Typing :: Typed", ] dependencies = [ "scipy>=1.13", "numpy>=1.26", "jsonschema>=4.21", ] [project.optional-dependencies] langgraph = ["langgraph>=0.2"] openai-agents = ["openai-agents>=0.1"] crewai = ["crewai>=0.80"] langchain = ["langchain-core>=0.3"] mcp = ["mcp[cli]>=2.0.0"] dev = [ "pytest>=8", "pytest-benchmark>=4.0", "pytest-cov>=5.0", "mypy>=1.10", "ruff>=0.9", "pre-commit>=3.7", ] [project.urls] Homepage = "https://github.com/RudrenduPaul/agent-eval" Repository = "https://github.com/RudrenduPaul/agent-eval" Issues = "https://github.com/RudrenduPaul/agent-eval/issues" "Author - Rudrendu Paul" = "https://github.com/RudrenduPaul" "Author - Sourav Nandy" = "https://github.com/Sourav-nandy-ai" [project.scripts] agent-regress = "agent_regress.cli:main" agent-regress-mcp = "agent_regress.mcp_server:main" [tool.hatch.build.targets.wheel] packages = ["src/agent_regress"] [tool.ruff] target-version = "py310" line-length = 88 src = ["src"] [tool.ruff.lint] select = ["E", "F", "B", "I", "N", "UP", "S", "PL", "RUF"] ignore = [ "S101", "PLR2004", ] [tool.ruff.lint.per-file-ignores] "tests/*" = ["S", "PLR2004", "PLR0913", "PLC0415", "B017", "E501"] "benchmarks/*" = ["S", "E501", "PLC0415"] "examples/*" = ["S", "T201"] [tool.mypy] python_version = "3.10" strict = true warn_return_any = true warn_unused_ignores = true show_error_codes = true mypy_path = "src" [[tool.mypy.overrides]] module = [ "scipy.*", "langgraph.*", "langchain_core.*", "openai.*", "agents.*", "crewai.*", "mcp.*", ] ignore_missing_imports = true [tool.pytest.ini_options] testpaths = ["tests"] python_files = ["test_*.py"] python_classes = ["Test*"] python_functions = ["test_*"] addopts = "--tb=short -q" markers = [ "integration: marks tests that require real API keys", "slow: marks tests that take > 10s to run", ] [tool.coverage.run] source = ["src"] omit = [ "tests/*", "benchmarks/*", "examples/*", "src/agent_regress/integrations/*", ] [tool.coverage.report] fail_under = 80 [tool.uv] # crewai (crewai extra) pins json-repair~=0.25.2, which is GHSA-xf7x-x43h-rpqh # (unbounded CPU DoS via circular $ref). Force the patched release instead. override-dependencies = ["json-repair>=0.60.1"]