# tinker_cookbook.stores.RunRegistry

## _class_ [**tinker_cookbook.stores.RunRegistry**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/stores/registry.py#L50)()

Discovers training runs and provides stores for each.

Supports multiple storage backends. Each run is tracked with its source storage so stores route to the correct backend.

### _property_ [**storage_count**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/stores/registry.py#L72)

Number of storage backends registered.

**Returns:** _int_

### _property_ [**primary_storage**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/stores/registry.py#L77)

The first (default) storage backend.

**Returns:** _[Storage](https://tinker-docs.thinkingmachines.ai/cookbook/api-reference/stores/storage/)_

### [**storage_for**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/stores/registry.py#L81)( _run_id_)

Return the storage backend that owns a run (falls back to primary).

**Parameters:**

- [**run_id**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/stores/registry.py#L81) ( _str_)

**Returns:** _[Storage](https://tinker-docs.thinking-machines.ai/cookbook/api-reference/stores/storage/)_

### [**refresh**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/stores/registry.py#L85)()

Re-scan all storages. Clears cached stores.

**Returns:** _list[ [RunInfo](https://tinker-docs.thinking-machines.ai/cookbook/api-reference/stores/runinfo/) ]_

### [**get_runs**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/stores/registry.py#L103)()

Return all discovered runs (lazy — calls `refresh` on first access).

**Returns:** _list[ [RunInfo](https://tinker-docs.thinking-machines.ai/cookbook/api-reference/stores/runinfo/) ]_

### [**get_run**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/stores/registry.py#L110)( _run_id_)

Look up a single run by ID, or `None` if not found.

**Parameters:**

- [**run_id**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/stores/registry.py#L110) ( _str_)

**Returns:** _[RunInfo](https://tinker-docs.thinking-machines.ai/cookbook/api-reference/stores/runinfo/) | None_

### [**get_training_store**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/stores/registry.py#L117)( _run_id_)

Get a TrainingRunStore for a specific run.

**Parameters:**

- [**run_id**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/stores/registry.py#L117) ( _str_)

**Returns:** _[TrainingRunStore](https://tinker-docs.thinking-machines.ai/cookbook/api-reference/stores/trainingrunstore/)_

### [**get_eval_store**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/stores/registry.py#L126)()

Get the EvalStore if eval data exists (cached after first call).

Returns None if no eval data found. Import is deferred to avoid circular deps with eval/ **init**.py. Probes `eval_prefixes` (configurable via constructor) for a `runs.jsonl` file.

**Returns:** _Any | None_
