API Reference
Public API of ttt_discover. Import from the package root:
from ttt_discover import (
Environment,
DiscoverConfig,
discover,
State,
BaseRewardEvaluator,
SandboxRewardEvaluator,
)
Discovery
discover(config: DiscoverConfig) -> None
Runs discovery with test-time RL training: builds dataset and RL config from config, sets up logging and (optionally) Ray, then runs training. This is the main entry point for launching a discovery run.
- config — A
DiscoverConfiginstance (see below). - Blocks until training completes (uses
asyncio.runinternally).
DiscoverConfig
Configuration for discovery runs. Defined with chz.chz (frozen/dataclass-like). All attributes have defaults.
| Attribute | Type | Default | Description |
|---|---|---|---|
model_name |
str |
"openai/gpt-oss-120b" |
Model name for training and tokenizer. |
lora_rank |
int |
32 |
LoRA rank. |
renderer_name |
str | None |
"gpt_oss_high_reasoning" |
Renderer for prompts. |
save_every |
int |
5 |
Save checkpoint every N epochs. |
group_size |
int |
8 |
Envs per group. |
groups_per_batch |
int |
64 |
Groups per batch. |
learning_rate |
float |
4e-5 |
Learning rate. |
num_epochs |
int |
50 |
Training epochs. |
temperature |
float |
1.0 |
Sampling temperature. |
kl_penalty_coef |
float |
0.1 |
KL penalty coefficient. |
phase1_max_tokens |
int |
26000 |
Token budget for prompt + thinking (two-phase sampling). |
experiment_name |
str | None |
None |
Experiment name (used in log path). |
wandb_project |
str | None |
"tinker-cookbook" |
Weights & Biases project. |
env_type |
str |
Environment |
Environment class (e.g. your subclass of Environment). |
problem_type |
str |
"26" |
Problem type identifier. |
num_cpus_per_task |
int |
0 |
CPUs per task; if > 0, Ray is initialized for job dispatch. |
eval_timeout |
int |
1000 |
Evaluation timeout (e.g. seconds). |
Environments and state
Environment
Base class for problem environments. Subclass this to define a new task; the discovery pipeline uses it to build rollouts, prompt the model, and verify code.
- Class attribute:
state_type— theStatesubclass used for this env (e.g.Stateor a custom subclass). - Class attribute:
reward_function— class (e.g. aBaseRewardEvaluatorsubclass or factory) used to create the evaluator. It is called withproblem_type,log_dir,eval_timeout,num_cpus_per_task; the returned instance must provideget_reward(generation, state).
Class methods
create_initial_state(problem_type: str) -> State
Factory for the initial state used in rollouts. Override in subclasses to provide task-specific initial state.
Constructor
__init__(self, renderer, initial_state: State, sampler, config)rendererandconfigcome from the dataset builder;initial_stateandsamplerare provided per rollout.
Abstract methods to implement
get_question() -> str
Build the prompt string (e.g. from a template, injecting previous code fromstate).
Other methods (override as needed)
is_maximize() -> bool— DefaultTrue(higher reward = better). IMPORTANT: If setting is_maximize to False, the sampler will internally negate the state values, meaning you should probably create an initial state with a very negative initial value to avoid the sampler getting stuck in the intial state.check_format(parsed_code: str) -> bool— Validate format of parsed code.check_answer(parsed_code: str, step: int) -> VerifyResult— Async answer checking (uses timeout and optional sandbox).
Internally the env uses a reward evaluator (e.g. BaseRewardEvaluator / SandboxRewardEvaluator) to turn code + state into rewards and constructions.
State
Base class for a single rollout state: one “construction” (e.g. reuse), the code that produced it, and metadata used for value estimation and prompting.
Attributes
| Attribute | Type | Description |
|---|---|---|
id |
str |
Unique identifier (UUID if not provided). |
timestep |
int |
Training step when this state was first visited. |
value |
float |
Expected value from this state (higher = better in default setup). |
code |
str |
Code that produced this construction. |
construction |
list[Any] |
JSON-serializable construction (e.g. solution object). |
parent_values |
list[float] |
Ancestor values (most recent first) for terminal value estimation. |
parents |
list[dict] |
Parent refs [{"id": ..., "timestep": ...}, ...] (most recent first). |
observation |
str |
Stdout/logs from the code that created this state. |
Constructor
State(timestep, construction, code, value=None, parent_values=None, parents=None, id=None, observation="")
Methods
to_dict() -> dict— Serialize to a dictionary (e.g. for logging or replay).from_dict(d: dict) -> State— Class method: construct from a dictionary.to_prompt(target, metric_name="value", maximize=True, language="") -> str— Build context string for the prompt (previous code, value before/after, target, gap, and optional stdout).
Reward evaluators
BaseRewardEvaluator
Minimal abstract interface for reward evaluation. Concrete evaluators may return more than a float elsewhere; this interface only requires a single method.
Abstract method
get_reward(self, code: str, state: Any) -> float
Compute reward for the given code and state. Must be implemented by subclasses.
SandboxRewardEvaluator
Evaluator that runs model-generated code in a separate process via Ray: writes code to a temp file, runs it with CPU affinity and timeout, and returns results (or failure info). Supports code extraction from markdown, stdout capture, and optional verifier preprocessing.
Inherits from: BaseRewardEvaluator.
Constructor
__init__(self, problem_type: int, log_dir: str, num_cpus_per_task: int = 1, fail_score: float = 0.0, eval_timeout: int = 530, worst_perf_log: float = 0.0, env_type: str = "")- problem_type — Problem identifier.
- log_dir — Directory for logs and temp files (e.g.
tmpunder it). - num_cpus_per_task — CPUs allocated per Ray task (must be ≥ 1).
- fail_score — Reward to return on failure.
- eval_timeout — Timeout in seconds for running the generated program.
- worst_perf_log — Value used for “worst” performance in logs.
- env_type — Optional env type name for logging/identification.
Abstract method to implement
get_program_entrypoint() -> str
Name of the function in the generated script that should be executed (e.g."main"or"run").get_reward(self, code: str, state: Any)
Full reward interface used by the env; typically implemented to callexecute_codeand map results to a reward dict withreward,msg,correctness,raw_score,stdout.
Methods
preprocess_generation(self, generation, state) -> str
Optionally wrap or modify the model generation (e.g. add verifier and construction fromstate). Override or useverifier_src; default returnsgenerationunchanged if no verifier.execute_code(self, solution_str: str, state) -> tuple[Any, str \| None]
Extract code fromsolution_str, runpreprocess_generation, execute in sandbox. Returns(result, None)on success or(None, error_message)on failure.
Attributes
verifier_src— Optional callable whose source is injected inpreprocess_generation(e.g. verifier function)._last_stdout— Set after execution; holds stdout of the last run (useful for failure entries and debugging).
Summary
| Symbol | Kind | Purpose |
|---|---|---|
discover |
function | Run discovery with RL from a DiscoverConfig. |
DiscoverConfig |
class | Config for discover (model, training, env, problem, CPUs, timeouts). |
Environment |
class | Base env for problems; implement get_question, optionally override state/reward behavior. |
State |
class | One rollout state (construction, code, value, parents, observation); serialization and to_prompt. |
BaseRewardEvaluator |
abstract class | Interface: get_reward(code, state) -> float. |
SandboxRewardEvaluator |
class | Runs code in a sandbox via Ray; implement get_program_entrypoint and optionally get_reward / preprocessing. |