Simon-Pierre Boucher
All apps & projects
Forge Studio icon
Open Source
Swift

Forge Studio

The native macOS cockpit for LLM training

Train language models from scratch on Apple Silicon without opening a terminal — dataset prep, run supervision, and live loss dashboards for Forge.

200k

CSV rows ingested in ~1.1 s

<250 ms

chart snapshot at any size

0

third-party dependencies

30 s

stall watchdog threshold

Overview

Forge Studio is the native GUI companion to Forge, the from-scratch C++20 + Metal LLM training framework. It wraps the entire train-a-model workflow — prepare data, design an architecture, launch and monitor runs, compare experiments, and generate from checkpoints — as a first-party-feeling Mac app built in Swift, SwiftUI, and Swift Charts with zero third-party dependencies.

The centerpiece is a loss dashboard built to the TensorBoard/W&B standard: raw and EMA-smoothed loss, hover crosshairs with full callouts, pinch-zoom and pan with a follow-live pill, best-val markers, and secondary charts for LR schedule, tokens/sec, and gradient norm. Raw data is never discarded — the UI reads LTTB-downsampled snapshots sized to pixel width.

Runs cannot lie: a single-writer state machine makes illegal transitions unrepresentable, the registry persists atomically so you can kill -9 the app at will, crash recovery truthfully resolves interrupted runs, and a watchdog flags stalls. Studio never reimplements training — it drives the real forge binary and reads its structured metrics.

Key Features

TensorBoard-grade loss dashboard

Raw train loss under a bias-corrected EMA with TensorBoard semantics, val loss points, hover crosshair, and a best-val marker annotation.

Hitch-free at 100k steps

LTTB downsampling to ~2x pixel width keeps hover interactions smooth; 200,000 CSV rows ingest in about 1.1 seconds.

Runs that can't lie

A single-writer state machine with an explicit legal-transition table makes illegal run states unrepresentable.

Honest crash recovery

Atomic temp-file-then-rename persistence plus launch-time resolution of interrupted runs — including detecting a forge process still alive.

Dataset prep built in

TinyStories or streamed Hugging Face mixtures like FineWeb-Edu, DCLM, and Cosmopedia, prepared with a live console.

Full config editor

Every Forge config field from n_layers to DeepSeek-style MoE routing, with live validation, presets, derived math, and an LR preview.

Compare runs honestly

Multi-run overlays plotted on the tokens axis — the honest one — for apples-to-apples experiment comparison.

Generate and eval in-app

Sample text and run evaluation from any checkpoint directly inside the app, no terminal required.

Finish-line notifications

Local notifications deliver the final loss when a run finishes or fails, plus a possibly-stalled badge after 30 s of silence.

How It Works

  1. ProcessRunner + LogParser

    An actor streams the real forge binary's output incrementally, parsing header-driven CSV metrics and stdout events off the main thread.

  2. MetricsStore

    An actor-isolated store tails logs incrementally and serves LTTB-downsampled snapshots to the charts — raw data is never discarded.

  3. Run state machine

    queued, launching, running through finished, failed, or stopped — with an explicit legal-transition table and atomic registry persistence.

  4. ForgeConfig models

    A Codable mirror of every Forge config field with validation and derived math, round-tripped byte-compatible against the real configs/*.json.

  5. RunSupervisor + watchdog

    Supervises live processes, flags stalls after 30 seconds of silent metrics, and handles SIGTERM stops with honest UI messaging about checkpoint loss.

Tech Stack

Core

Swift
SwiftUI
Swift Charts
Swift Concurrency (actors)
macOS 14+

Data pipeline

Header-driven CSV parsing
LTTB downsampling
Bias-corrected EMA smoothing

Release

SwiftPM app packaging
Developer ID + hardened runtime
notarytool + stapler DMG

Highlights

  • Never reimplements training — drives the real forge binary and reads its structured metrics, so what you see is exactly what the framework did
  • The Swift parameter-count formula is tested to match forge info for every shipped config
  • RESEARCH.md documents the full Forge contract — config schema, CLI, log.csv grammar, signal behavior — extracted from source and enforced by tests
  • kill -9 safe: atomic temp-file-then-rename persistence for the run registry
  • Measured performance: 200,000 CSV rows ingest in ~1.1 s and snapshot to chart width in under 250 ms
  • Zero third-party packages — pure Swift, SwiftUI, and Swift Charts

Explore Forge Studio

macOS cockpit for Forge LLM training — the full source is on GitHub.