-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathpyproject.toml
More file actions
133 lines (123 loc) · 4.36 KB
/
Copy pathpyproject.toml
File metadata and controls
133 lines (123 loc) · 4.36 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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
[build-system]
requires = ["setuptools>=77"]
build-backend = "setuptools.build_meta"
[project]
name = "studentsim"
version = "0.0.1"
description = "Per-student AI student simulators for adaptive AI tutoring research (NeurIPS 2026 submission)."
readme = "README.md"
license = "MIT"
license-files = ["LICENSE"]
requires-python = ">=3.10"
authors = [
{ name = "StudentSim contributors" },
]
keywords = ["student-simulation", "ai-tutoring", "lora", "grpo", "behavioral-fidelity"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Science/Research",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
]
dependencies = [
# Pure-Python core. Heavy ML deps live in optional extras. Everything here
# is imported by the package; a dependency nothing imports is a promise
# about the environment that nothing checks.
"pyyaml>=6.0",
"numpy>=1.24",
]
[project.optional-dependencies]
# Per-domain extras. Users of only one domain do not have to pull the heavy deps
# of the others.
chess = [
"python-chess>=1.999", # python-chess for FEN/UCI parsing and legality checks
]
l2 = [
"language-tool-python>=2.7",
]
math = [
"beautifulsoup4>=4.12", # problem bodies arrive as HTML with MathML inside
]
# Inference backends. The HF backend is required for any local Stage-1 / Stage-2
# eval. The vLLM backend is required by the tutor RL reward simulator.
inference = [
"torch>=2.1",
"transformers>=4.40",
"peft>=0.10",
"accelerate>=0.30", # required by device_map="auto"
"safetensors>=0.4", # adapter shards are read directly
]
# Tutor RL stack. verl and vLLM are not imported; verl is launched as a
# subprocess and picks its own rollout backend.
tutor_rl = [
"verl>=0.3",
"vllm>=0.5",
"cairosvg>=2.7", # renders the board the tutor and the judge are shown;
# needs libcairo, which pip cannot install for you
]
# Closed-source baseline clients.
baselines = [
"openai>=1.30", # also covers Azure OpenAI
]
# Maia2 chess KT baseline. This extra installs what Maia2 runs on, not Maia2
# itself: the package is not reliably on PyPI, so install it from its own repo.
maia2 = [
"torch>=2.1",
"python-chess>=1.999",
]
all = [
"studentsim[chess,l2,math,inference,tutor_rl,baselines,maia2]",
]
dev = [
"pytest>=8.0",
"pytest-cov>=4.1",
"ruff>=0.4",
"mypy>=1.10",
]
[project.scripts]
studentsim-train = "studentsim.cli.train:main"
studentsim-eval = "studentsim.cli.eval:main"
studentsim-tutor-rl = "studentsim.cli.tutor_rl:main"
studentsim-train-heads = "studentsim.cli.train_heads:main"
studentsim-baselines = "studentsim.cli.baselines:main"
studentsim-judge-guidance = "studentsim.cli.judge_guidance:main"
studentsim-generate-guidance = "studentsim.cli.generate_guidance:main"
studentsim-build-corpus = "studentsim.cli.build_corpus:main"
studentsim-build-playground = "studentsim.cli.build_playground:main"
studentsim-precompute-stockfish = "studentsim.cli.precompute_stockfish:main"
[project.urls]
Homepage = "https://github.com/microsoft/StudentSim"
Issues = "https://github.com/microsoft/StudentSim/issues"
[tool.setuptools.packages.find]
include = ["studentsim*"]
exclude = ["tests*", "docs*"]
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py"]
addopts = "-ra --strict-markers --strict-config"
markers = [
"slow: marks tests as slow (run with `pytest -m slow`)",
"e2e: marks tests as end-to-end (run manually; not on CI)",
"needs_gpu: marks tests that require a CUDA device",
"needs_internet: marks tests that need network access (model / data download)",
]
[tool.ruff]
line-length = 100
target-version = "py310"
[tool.ruff.lint]
select = ["E", "F", "I", "B", "UP", "SIM", "PL", "RUF"]
ignore = [
"PLR0913", # too many arguments — common in dataclass __init__ via keyword
"PLR2004", # magic number — readable as inline constants in metric impls
]
[tool.ruff.lint.per-file-ignores]
# The judge's two prompts are reproduced verbatim from the run that produced
# the recorded labels, so their lines cannot be rewrapped.
"studentsim/tutor_rl/judge.py" = ["E501"]
[tool.mypy]
python_version = "3.10"
strict = true
ignore_missing_imports = true