# athome > The plumbing every local AI experiment rebuilds, built once. ## Docs ### API Reference #### Config > The pydantic-settings surface over ~/.athome/config.toml. - [config.SectionSettings](https://yasyf.github.io/experiment-at-home/reference/config.SectionSettings.html) - [config.AthomeSettings](https://yasyf.github.io/experiment-at-home/reference/config.AthomeSettings.html) - [config.load](https://yasyf.github.io/experiment-at-home/reference/config.load.html) #### Cache > Content+version-keyed caching with atomic staging writes. - [cache.Cache](https://yasyf.github.io/experiment-at-home/reference/cache.Cache.html) - [cache.CacheKey](https://yasyf.github.io/experiment-at-home/reference/cache.CacheKey.html) - [cache.CacheStats](https://yasyf.github.io/experiment-at-home/reference/cache.CacheStats.html) - [cache.cached](https://yasyf.github.io/experiment-at-home/reference/cache.cached.html) - [cache.stats_all](https://yasyf.github.io/experiment-at-home/reference/cache.stats_all.html) - [cache.CacheKeyError](https://yasyf.github.io/experiment-at-home/reference/cache.CacheKeyError.html) #### LLM cache > Record/replay HTTP caching for OpenAI-shaped clients. - [llmcache.LlmCacheMode](https://yasyf.github.io/experiment-at-home/reference/llmcache.LlmCacheMode.html) - [llmcache.LlmCacheSettings](https://yasyf.github.io/experiment-at-home/reference/llmcache.LlmCacheSettings.html) - [llmcache.CachingTransport](https://yasyf.github.io/experiment-at-home/reference/llmcache.CachingTransport.html) - [llmcache.RetryTransport](https://yasyf.github.io/experiment-at-home/reference/llmcache.RetryTransport.html) - [llmcache.transport](https://yasyf.github.io/experiment-at-home/reference/llmcache.transport.html) - [llmcache.LlmCacheMiss](https://yasyf.github.io/experiment-at-home/reference/llmcache.LlmCacheMiss.html) #### Workers > Sidecar subprocesses speaking the length-prefixed wire protocol. - [workers.WorkerTransport](https://yasyf.github.io/experiment-at-home/reference/workers.WorkerTransport.html) - [workers.WorkerSpec](https://yasyf.github.io/experiment-at-home/reference/workers.WorkerSpec.html) - [workers.PipeWorker](https://yasyf.github.io/experiment-at-home/reference/workers.PipeWorker.html) - [workers.WorkerPool](https://yasyf.github.io/experiment-at-home/reference/workers.WorkerPool.html) - [workers.serve](https://yasyf.github.io/experiment-at-home/reference/workers.serve.html) - [workers.WorkerError](https://yasyf.github.io/experiment-at-home/reference/workers.WorkerError.html) - [workers.WorkerCrashed](https://yasyf.github.io/experiment-at-home/reference/workers.WorkerCrashed.html) - [workers.HandshakeMismatch](https://yasyf.github.io/experiment-at-home/reference/workers.HandshakeMismatch.html) - [wire.validate](https://yasyf.github.io/experiment-at-home/reference/wire.validate.html) - [wire.encode](https://yasyf.github.io/experiment-at-home/reference/wire.encode.html) - [wire.decode](https://yasyf.github.io/experiment-at-home/reference/wire.decode.html) - [wire.WireError](https://yasyf.github.io/experiment-at-home/reference/wire.WireError.html) #### Progress > Resumable work-sets, crash-safe run sinks, phase gating. - [progress.WorkSet](https://yasyf.github.io/experiment-at-home/reference/progress.WorkSet.html) - [progress.RunSink](https://yasyf.github.io/experiment-at-home/reference/progress.RunSink.html) - [progress.Phases](https://yasyf.github.io/experiment-at-home/reference/progress.Phases.html) - [progress.FailureBudgetExceeded](https://yasyf.github.io/experiment-at-home/reference/progress.FailureBudgetExceeded.html) - [progress.PhaseMissing](https://yasyf.github.io/experiment-at-home/reference/progress.PhaseMissing.html) #### launchd > Declarative launchd agents. - [launchd.AgentSpec](https://yasyf.github.io/experiment-at-home/reference/launchd.AgentSpec.html) - [launchd.Calendar](https://yasyf.github.io/experiment-at-home/reference/launchd.Calendar.html) - [launchd.Interval](https://yasyf.github.io/experiment-at-home/reference/launchd.Interval.html) - [launchd.KeepAlive](https://yasyf.github.io/experiment-at-home/reference/launchd.KeepAlive.html) - [launchd.AgentStatus](https://yasyf.github.io/experiment-at-home/reference/launchd.AgentStatus.html) - [launchd.plist_dict](https://yasyf.github.io/experiment-at-home/reference/launchd.plist_dict.html) - [launchd.install](https://yasyf.github.io/experiment-at-home/reference/launchd.install.html) - [launchd.uninstall](https://yasyf.github.io/experiment-at-home/reference/launchd.uninstall.html) - [launchd.status](https://yasyf.github.io/experiment-at-home/reference/launchd.status.html) - [launchd.installed](https://yasyf.github.io/experiment-at-home/reference/launchd.installed.html) - [launchd.LaunchdError](https://yasyf.github.io/experiment-at-home/reference/launchd.LaunchdError.html) #### Detach > Sentinel-tracked detached overnight runs. - [detach.DetachedRun](https://yasyf.github.io/experiment-at-home/reference/detach.DetachedRun.html) - [detach.launch](https://yasyf.github.io/experiment-at-home/reference/detach.launch.html) - [detach.wait](https://yasyf.github.io/experiment-at-home/reference/detach.wait.html) - [detach.running](https://yasyf.github.io/experiment-at-home/reference/detach.running.html) - [detach.DetachError](https://yasyf.github.io/experiment-at-home/reference/detach.DetachError.html) #### Sync > Verified rsync mirroring. - [sync.mirror](https://yasyf.github.io/experiment-at-home/reference/sync.mirror.html) - [sync.SyncReport](https://yasyf.github.io/experiment-at-home/reference/sync.SyncReport.html) - [sync.SyncVerificationError](https://yasyf.github.io/experiment-at-home/reference/sync.SyncVerificationError.html) #### Store > The shared aiosqlite scaffold. - [store.Store](https://yasyf.github.io/experiment-at-home/reference/store.Store.html) #### Serve > Recipe-driven local model servers. RapidMlxSettings and LlamaServerSettings carry the engine-selection guidance. - [serve.RapidMlxSettings](https://yasyf.github.io/experiment-at-home/reference/serve.RapidMlxSettings.html) - [serve.MlxVlmSettings](https://yasyf.github.io/experiment-at-home/reference/serve.MlxVlmSettings.html) - [serve.LlamaServerSettings](https://yasyf.github.io/experiment-at-home/reference/serve.LlamaServerSettings.html) - [serve.ManagedServer](https://yasyf.github.io/experiment-at-home/reference/serve.ManagedServer.html) - [serve.ServerHandle](https://yasyf.github.io/experiment-at-home/reference/serve.ServerHandle.html) - [serve.up](https://yasyf.github.io/experiment-at-home/reference/serve.up.html) - [serve.down](https://yasyf.github.io/experiment-at-home/reference/serve.down.html) - [serve.settings_for](https://yasyf.github.io/experiment-at-home/reference/serve.settings_for.html) - [serve.command_for](https://yasyf.github.io/experiment-at-home/reference/serve.command_for.html) - [serve.probe_all](https://yasyf.github.io/experiment-at-home/reference/serve.probe_all.html) - [serve.ServeError](https://yasyf.github.io/experiment-at-home/reference/serve.ServeError.html) - [serve.HealthTimeout](https://yasyf.github.io/experiment-at-home/reference/serve.HealthTimeout.html) #### Idle > A generic idle-unload lifecycle — single-flight load, reference-counted use, and a TTL reaper that unloads a value once it sits idle. - [idle.IdleResource](https://yasyf.github.io/experiment-at-home/reference/idle.IdleResource.html) #### Activator > A probe-safe idle-unload proxy over IdleResource — probes answer locally while the child is down, wakes spawn it under a single-flight load, and the streamed relay's inflight count spans the whole response body. - [activator.ActivatorSettings](https://yasyf.github.io/experiment-at-home/reference/activator.ActivatorSettings.html) - [activator.Activator](https://yasyf.github.io/experiment-at-home/reference/activator.Activator.html) - [activator.serve_activator](https://yasyf.github.io/experiment-at-home/reference/activator.serve_activator.html) - [activator.ActivatorError](https://yasyf.github.io/experiment-at-home/reference/activator.ActivatorError.html) #### STT > Speech-to-text over transcribe.cpp — a lazily-loaded model behind one serialized compute lane, committed-delta streaming, and an OpenAI-compatible transcription server. - [stt.Transcriber](https://yasyf.github.io/experiment-at-home/reference/stt.Transcriber.html) - [stt.SttStream](https://yasyf.github.io/experiment-at-home/reference/stt.SttStream.html) - [stt.Transcript](https://yasyf.github.io/experiment-at-home/reference/stt.Transcript.html) - [stt.Segment](https://yasyf.github.io/experiment-at-home/reference/stt.Segment.html) - [stt.Word](https://yasyf.github.io/experiment-at-home/reference/stt.Word.html) - [stt.VARIANTS](https://yasyf.github.io/experiment-at-home/reference/stt.VARIANTS.html) - [stt.gguf_path](https://yasyf.github.io/experiment-at-home/reference/stt.gguf_path.html) - [stt.decode](https://yasyf.github.io/experiment-at-home/reference/stt.decode.html) - [stt.f32_from_s16](https://yasyf.github.io/experiment-at-home/reference/stt.f32_from_s16.html) - [stt.SttServeSettings](https://yasyf.github.io/experiment-at-home/reference/stt.SttServeSettings.html) - [stt.SttServer](https://yasyf.github.io/experiment-at-home/reference/stt.SttServer.html) - [stt.serve_stt](https://yasyf.github.io/experiment-at-home/reference/stt.serve_stt.html) - [stt.SttError](https://yasyf.github.io/experiment-at-home/reference/stt.SttError.html) #### Embed > Batch text-embedding backends and a digest-keyed incremental index with MMR rerank. - [embed.EmbedBackend](https://yasyf.github.io/experiment-at-home/reference/embed.EmbedBackend.html) - [embed.ApiBackend](https://yasyf.github.io/experiment-at-home/reference/embed.ApiBackend.html) - [embed.LocalBackend](https://yasyf.github.io/experiment-at-home/reference/embed.LocalBackend.html) - [embed.VoyageEmbedBackend](https://yasyf.github.io/experiment-at-home/reference/embed.VoyageEmbedBackend.html) - [embed.EmbedIndex](https://yasyf.github.io/experiment-at-home/reference/embed.EmbedIndex.html) - [embed.EmbedSettings](https://yasyf.github.io/experiment-at-home/reference/embed.EmbedSettings.html) - [embed.VoyageSettings](https://yasyf.github.io/experiment-at-home/reference/embed.VoyageSettings.html) - [embed.EmbedError](https://yasyf.github.io/experiment-at-home/reference/embed.EmbedError.html) #### Registry > Content-addressed artifact versions with an atomic current promotion. - [registry.VersionInfo](https://yasyf.github.io/experiment-at-home/reference/registry.VersionInfo.html) - [registry.versions](https://yasyf.github.io/experiment-at-home/reference/registry.versions.html) - [registry.current](https://yasyf.github.io/experiment-at-home/reference/registry.current.html) - [registry.register](https://yasyf.github.io/experiment-at-home/reference/registry.register.html) - [registry.promote](https://yasyf.github.io/experiment-at-home/reference/registry.promote.html) - [registry.rollback](https://yasyf.github.io/experiment-at-home/reference/registry.rollback.html) - [registry.prune](https://yasyf.github.io/experiment-at-home/reference/registry.prune.html) - [registry.components](https://yasyf.github.io/experiment-at-home/reference/registry.components.html) - [registry.RegistryError](https://yasyf.github.io/experiment-at-home/reference/registry.RegistryError.html) #### Train > LoRA fine-tuning over tinker, local mlx-lm, or modal. - [train.TrainSpec](https://yasyf.github.io/experiment-at-home/reference/train.TrainSpec.html) - [train.TrainResult](https://yasyf.github.io/experiment-at-home/reference/train.TrainResult.html) - [train.Checkpoint](https://yasyf.github.io/experiment-at-home/reference/train.Checkpoint.html) - [train.Adapter](https://yasyf.github.io/experiment-at-home/reference/train.Adapter.html) - [train.BaseModelSpec](https://yasyf.github.io/experiment-at-home/reference/train.BaseModelSpec.html) - [train.Hyperparams](https://yasyf.github.io/experiment-at-home/reference/train.Hyperparams.html) - [train.LoraSpec](https://yasyf.github.io/experiment-at-home/reference/train.LoraSpec.html) - [train.HfDatasetRef](https://yasyf.github.io/experiment-at-home/reference/train.HfDatasetRef.html) - [train.LocalJsonlRef](https://yasyf.github.io/experiment-at-home/reference/train.LocalJsonlRef.html) - [train.Rows](https://yasyf.github.io/experiment-at-home/reference/train.Rows.html) - [train.TrainSettings](https://yasyf.github.io/experiment-at-home/reference/train.TrainSettings.html) - [train.TinkerSettings](https://yasyf.github.io/experiment-at-home/reference/train.TinkerSettings.html) - [train.TinkerPrice](https://yasyf.github.io/experiment-at-home/reference/train.TinkerPrice.html) - [train.TrainBackend](https://yasyf.github.io/experiment-at-home/reference/train.TrainBackend.html) - [train.tinker.TinkerBackend](https://yasyf.github.io/experiment-at-home/reference/train.tinker.TinkerBackend.html) - [train.CheckpointPolicy](https://yasyf.github.io/experiment-at-home/reference/train.CheckpointPolicy.html) - [train.EvalRow](https://yasyf.github.io/experiment-at-home/reference/train.EvalRow.html) - [train.ScoredSequence](https://yasyf.github.io/experiment-at-home/reference/train.ScoredSequence.html) - [train.SavedCheckpoint](https://yasyf.github.io/experiment-at-home/reference/train.SavedCheckpoint.html) - [train.StepRecord](https://yasyf.github.io/experiment-at-home/reference/train.StepRecord.html) - [train.TrainReport](https://yasyf.github.io/experiment-at-home/reference/train.TrainReport.html) - [train.retrain](https://yasyf.github.io/experiment-at-home/reference/train.retrain.html) - [train.RetrainOutcome](https://yasyf.github.io/experiment-at-home/reference/train.RetrainOutcome.html) - [train.run](https://yasyf.github.io/experiment-at-home/reference/train.run.html) - [train.evaluate](https://yasyf.github.io/experiment-at-home/reference/train.evaluate.html) - [train.register](https://yasyf.github.io/experiment-at-home/reference/train.register.html) - [train.model_path](https://yasyf.github.io/experiment-at-home/reference/train.model_path.html) - [train.select](https://yasyf.github.io/experiment-at-home/reference/train.select.html) - [train.lora_keys](https://yasyf.github.io/experiment-at-home/reference/train.lora_keys.html) - [train.std_lora_keys](https://yasyf.github.io/experiment-at-home/reference/train.std_lora_keys.html) - [train.spend_cap](https://yasyf.github.io/experiment-at-home/reference/train.spend_cap.html) - [train.NoBackendAvailable](https://yasyf.github.io/experiment-at-home/reference/train.NoBackendAvailable.html) - [train.UnservableBase](https://yasyf.github.io/experiment-at-home/reference/train.UnservableBase.html) - [train.UnsupportedLoraShape](https://yasyf.github.io/experiment-at-home/reference/train.UnsupportedLoraShape.html) - [train.InsufficientData](https://yasyf.github.io/experiment-at-home/reference/train.InsufficientData.html) - [train.OverlongEvalRows](https://yasyf.github.io/experiment-at-home/reference/train.OverlongEvalRows.html) #### Tinker engine > The ordered op stream over Tinker's clock-cycle model — forward/backward and optimizer step as one inseparable op, submit-ahead execution, and a cost projection folded over the same schedule the executor runs. - [train.engine.TrainOp](https://yasyf.github.io/experiment-at-home/reference/train.engine.TrainOp.html) - [train.engine.ScoreOp](https://yasyf.github.io/experiment-at-home/reference/train.engine.ScoreOp.html) - [train.engine.SnapshotOp](https://yasyf.github.io/experiment-at-home/reference/train.engine.SnapshotOp.html) - [train.engine.CrossEntropy](https://yasyf.github.io/experiment-at-home/reference/train.engine.CrossEntropy.html) - [train.engine.Custom](https://yasyf.github.io/experiment-at-home/reference/train.engine.Custom.html) - [train.engine.TrainDone](https://yasyf.github.io/experiment-at-home/reference/train.engine.TrainDone.html) - [train.engine.ScoreDone](https://yasyf.github.io/experiment-at-home/reference/train.engine.ScoreDone.html) - [train.engine.SnapshotDone](https://yasyf.github.io/experiment-at-home/reference/train.engine.SnapshotDone.html) - [train.engine.execute](https://yasyf.github.io/experiment-at-home/reference/train.engine.execute.html) - [train.engine.projection](https://yasyf.github.io/experiment-at-home/reference/train.engine.projection.html) - [train.engine.token_count](https://yasyf.github.io/experiment-at-home/reference/train.engine.token_count.html) #### Gate > Promotion-gate statistics with an explicit higher-is-fire contract; behind the gate extra. - [train.gate.GateVerdict](https://yasyf.github.io/experiment-at-home/reference/train.gate.GateVerdict.html) - [train.gate.GateResult](https://yasyf.github.io/experiment-at-home/reference/train.gate.GateResult.html) - [train.gate.corrected_gate](https://yasyf.github.io/experiment-at-home/reference/train.gate.corrected_gate.html) - [train.gate.sentinel_auc](https://yasyf.github.io/experiment-at-home/reference/train.gate.sentinel_auc.html) - [train.gate.sign_test_p](https://yasyf.github.io/experiment-at-home/reference/train.gate.sign_test_p.html) - [train.gate.threshold_for_budget](https://yasyf.github.io/experiment-at-home/reference/train.gate.threshold_for_budget.html) - [train.gate.matched_fire_mask](https://yasyf.github.io/experiment-at-home/reference/train.gate.matched_fire_mask.html) #### OCR types > Protocols for token- and document-level OCR engines. - [ocr.Box](https://yasyf.github.io/experiment-at-home/reference/ocr.Box.html) - [ocr.OcrToken](https://yasyf.github.io/experiment-at-home/reference/ocr.OcrToken.html) - [ocr.Document](https://yasyf.github.io/experiment-at-home/reference/ocr.Document.html) - [ocr.TokenOcr](https://yasyf.github.io/experiment-at-home/reference/ocr.TokenOcr.html) - [ocr.DocOcr](https://yasyf.github.io/experiment-at-home/reference/ocr.DocOcr.html) #### Errors > The exception root the CLI renders. - [errors.AthomeError](https://yasyf.github.io/experiment-at-home/reference/errors.AthomeError.html)