seabiscuit

A typed language for ML policiesearly access

ML policies you can read as graphs.

Seabiscuit is a small, typed language for models that mix code you can write down with numbers you have to learn. It already runs in production, and it's coming to the public soon.

ramp.sbpolicy
policy(scan: Cloud) -> (rise: Gaussian[Angle], ok: Bool)optimiser cma_es(sigma0: 0.3) bias = tensor(0°, lower: -2°, upper: 2°)   # the phone's tilt error deck   = scan |> largest_plane(threshold: 1 cm)side   = slice(deck, plane(origin: (0 m, 0 m, 0 m), normal: right),               thickness: 5 cm)line   = lowess(side, span: 0.5)u0, u1 = line.domaindz     = line(u1) - line(u0)rise   = atan2(dz, u1 - u0) - bias + noise(0.3°)ok     = rise.mean <= 4.76°                # a 1:12 ramp

bias is the only tensor. Every other number is a frozen constant.

scan: CloudinputscanCloudbias: Angletensor · trainedbiasAnglelargest_plane: Largest planelargest_planeLargest plane→ deckplane: PlaneplanePlanePlaneslice: Slice · 50 mmsliceSlice · 50 mm→ sidelowess: LOWESS · span 0.5lowessLOWESS · span 0.5→ lineline.domainexprline.domain→ u0line(u1) - line(u0)exprline(u1) - line(u0)→ dznoise: NoisenoiseNoiseGaussian[Angle]atan2(dz, u1 - u0) - bias + noise(0.3°)expratan2(dz, u1 - u0) - …→ riserise.mean <= 4.76°exprrise.mean <= 4.76°→ okrise: Gaussian[Angle]outputriseGaussian[Angle]ok: BooloutputokBool
ramp.sb, as the compiler sees it · hover a node or a line, click a node

Write it like this

Short programs, typed all the way down.

A policy is a typed function. Lengths and angles carry their units, so inches and millimetres mix freely and a missing unit is a compile error.

gap.sbpolicy
policy(post: Point, gate: Point, hinge: Length = 3 mm)    -> (gap: Length, fits: Bool) gap  = horizontal_distance(post, gate) - 2 * hingefits = gap > 36 in                  # inches and millimetres mix freely
post: PointinputpostPointgate: PointinputgatePointhinge: LengthinputhingeLengthhorizontal_distance: Horizontal distancehorizontal_distanceHorizontal distanceLengthhorizontal_distance(post, gate) - 2 * hingeexprhorizontal_distance(p…→ gapgap > 36 inexprgap > 36 in→ fitsgap: LengthoutputgapLengthfits: BooloutputfitsBool
gap.sb · compiled graph · click a node for its details

Why Seabiscuit

Structure you write is structure you don't have to learn.

Often most of an algorithm is something you can already write down: a cross-section, a known noise level, a rule of thumb with units. Seabiscuit lets you write that part as code and spend your data only on what's left.

Glass box

Every node is a pure function with typed inputs and outputs, and every trained number has a name. When an output looks wrong, you can see which step made it.

Small models

With the geometry and the noise written as code, what’s left to learn is a few named numbers, not a network, so it trains on the data you actually have.

Honest numbers

Metrics come from held-out folds, grouped so repeat measurements of one subject never straddle train and validation.

Seabiscuit Cloud

The language is the core. Seabiscuit Cloud runs it for you.

Tooling, training, hosting and integration around Seabiscuit, from the first line to a policy your app calls in production. Available now through early access.

  1. 01 · WRITE

    Write with a live graph

    The editor recompiles as you type. The graph redraws beside your code and diagnostics appear inline.

  2. 02 · TRAIN

    Train on your data

    Point a run at a folder or a tag. Every run keeps its metrics, plots and the trained values it produced.

  3. 03 · DEPLOY

    Deploy and roll back

    Policies live in git. Move the deployment marker to any commit; rolling back restores code and trained values together.

  4. 04 · CALL

    Call it from anywhere

    Run deployed policies over the API, or ship the capture app template to collect scans in the field.

IN PRODUCTION

Already a workhorse.

Seabiscuit grew up on a real problem. Equimorphic builds saddle-fitting algorithms for horses from phone scans, and they write and run them in Seabiscuit today. Here's what a member of their development team had to say. Equimorphic has close ties to Seabiscuit, as our founder is now their CTO; see the about page for the story.

Employee photo

“Neigh! The tools provided by Seabiscuit (the tech company, not my fellow horse) have been invaluable during the development of our saddle fitting algorithms. The tools for gathering and managing our 3D point cloud data combined with the blazingly fast iteration speed on policies has allowed us to race our product into early testing faster than we initially thought possible. When we expand into other types of saddles, the new algorithms are looking like they will take days and not weeks to develop.”

— Gerald the Inflatable Horse; R&D Mascot and Saddle Model at Equimorphic; equimorphic.com

Open source

The language will be open source.

We plan to open-source the Seabiscuit language. Join the list and you'll hear first when it's out.

Early access

Want to build on it now?

Seabiscuit Cloud is open to a small group of teams while we get it ready for everyone. Tell us what you're building and we'll get back to you.