-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathpyproject.toml
More file actions
97 lines (85 loc) · 2.87 KB
/
pyproject.toml
File metadata and controls
97 lines (85 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
[project]
name = "cube-harness"
version = "0.1.0"
description = "cube-harness, open source agentic evaluation and data generation framework."
readme = "README.md"
authors = [
{ name = "Nicolas Gontier", email = "nicolas.gontier@servicenow.com" },
{ name = "Aman Jaiswal", email = "amanjaiswal73892@gmail.com" },
{ name = "Oleh Shliazhko", email = "oleh.shliazhko@servicenow.com" },
]
requires-python = ">=3.12"
dependencies = [
"cube-standard>=0.1.0rc8",
"cube-browser-playwright>=0.2.0", # used by cubes/workarena (PlaywrightSessionConfig)
"pydantic~=2.0",
"litellm~=1.80.8",
"Pillow~=11.0",
"beautifulsoup4~=4.14",
"numpy~=2.3.5",
"ray[default]>=2.52.1",
"tenacity>=8.5.0",
"typer~=0.25",
"python-dotenv~=1.2.0",
"termcolor~=3.2",
"opentelemetry-api>=1.20.0",
"opentelemetry-sdk>=1.20.0",
"opentelemetry-exporter-otlp-proto-http>=1.20.0",
"opentelemetry-exporter-otlp-proto-grpc>=1.39.1",
"browsergym-core>=0.14.3",
"mcp[cli]>=1.26",
"msgpack>=1.0.0",
"zstandard>=0.20.0",
"docker>=7.1.0",
]
[project.optional-dependencies]
# XRay trajectory viewer
analyze = [
"gradio~=5.49",
"pandas~=2.0",
]
# Trajectory investigator — post-hoc LLM analysis via Claude Code
investigator = [
"claude-agent-sdk>=0.1.6",
]
[build-system]
requires = ["uv_build>=0.8.22,<0.9.0"]
build-backend = "uv_build"
[tool.uv]
constraint-dependencies = ["pyasn1>=0.6.2", "cryptography>=46.0.5", "protobuf>=6.33.5"]
[tool.ruff]
fix = true
line-length = 120
indent-width = 4
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
skip-magic-trailing-comma = false
line-ending = "auto"
[tool.ruff.lint]
extend-select = ["I"] # sort imports
[project.scripts]
ch-mcp-server = "cube_harness.mcp.server:main"
ch-xray = "cube_harness.analyze.xray:main"
ch-trace = "cube_harness.analyze.trace:main"
ch-investigate = "cube_harness.analyze.investigator:main"
ch-investigation-report = "cube_harness.analyze.investigation_report:main"
ch-reset-episodes = "cube_harness.analyze.reset_episodes:main"
[dependency-groups]
dev = [
"ruff>=0.14.7",
"pytest>=8.0",
"pytest-cov>=6.0",
"pytest-xdist>=3.8.0",
"pytest-asyncio>=1.3.0",
"pytest-playwright>=0.7.2",
]
[tool.pytest.ini_options]
markers = [
"slow: tests taking >5s but no external deps (Ray retry, xray e2e). CI runs them; deselect locally for fast feedback ('-m \"not slow\"').",
"serial: mark test to be run sequentially (deselect with '-m \"not serial\"').",
"integration: requires a live browser (headless Chromium via Playwright). CI runs them after `playwright install`.",
"live_api: hits a real LLM provider — costs money, needs API key (e.g. ANTHROPIC_API_KEY). Auto-skipped without the key; never run by default CI. Run locally to validate cache-control / streaming / etc. against a real model.",
]
[tool.setuptools.packages.find]
where = ["src"]