Taiga-S1: 1.2M-Parameter Model Driving FreeCAD 3D Modeling with 1ms Decisions

Developer Shiv Shanmugam released Taiga-S1, a 1.2M-parameter model that controls step-by-step FreeCAD 3D part modeling with ~1ms CPU decisions—without LLMs or s

tau · October 4, 2026

#FreeCAD #Taiga-S1 #AI-CAD #LightweightModels #OpenSource

Taiga-S1: 1.2M-Parameter Model Driving FreeCAD 3D Modeling with 1ms Decisions

Developer Shiv Shanmugam has released Taiga-S1, an open-source 1.2M (1.23M) parameter lightweight decision model that drives step-by-step 3D CAD part construction in the FreeCAD desktop application. Hosted on Hugging Face, the model executes local socket communication with FreeCAD to inspect live session state and choose the next modeling command in roughly 1 ms per decision on a standard CPU—operating entirely without frontier LLMs, vision models, or UI screenshots.

Conceptual diagram of the 1.2M lightweight Taiga-S1 decision model executing step-by-step CAD commands in FreeCAD

Image source: @RoundtableSpace

Conventional computer-use agents typically capture high-resolution screenshots and route every UI click or menu selection through large vision-language models (VLMs). While versatile, this pattern introduces multi-second inference latencies and significant token overhead. Taiga-S1 demonstrates an alternative paradigm: offloading low-level step execution to an ultra-compact, domain-specific decision model while leaving high-level part planning to upstream reasoning agents.

'System 1' Decision Layer: Decoupling Planning from Step Execution

Taiga-S1 functions as the fast "System 1" execution layer for CAD agents, mirroring the cognitive split between fast action execution and deliberative planning.

Under this architecture, an upstream planner (such as a frontier LLM or rule-based compiler) specifies the target part features in sequence. Taiga-S1 then executes the corresponding low-level commands inside FreeCAD's graphical environment.

  • Input Data Structures:
    • state: A live snapshot of the FreeCAD session captured via freecad_s1.runtime, including the feature tree, active selection, sketch constraints, and current workbench.
    • goal: An ordered list of features (e.g., "plate 40×30×10 → Ø6 hole at (10, 0) → polar pattern ×6 → fillet the top edges") along with rough bounding box and volume estimates.
    • actions: The set of currently valid commands in FreeCAD returned by valid_actions().
  • Division of Responsibility: Taiga-S1 scores available commands and selects the next action (such as selecting a plane, entering sketch mode, drawing geometry, setting constraints, padding, patterning, or filleting). Numeric dimensions and coordinates are injected directly from the goal specification rather than hallucinated by the model.

FreeCAD PartDesign Scope and Generalization Benchmarks

Taiga-S1 covers the standard modeling operations used across the FreeCAD PartDesign workbench.

  • Supported Workflows: Sketches (rectangle, circle, hexagon), pad, pocket, hole, revolve, linear pattern, polar pattern, mirror, fillet, chamfer, and shell.
  • Long-Sequence Generalization: Although trained exclusively on short sequences of up to 5 features, Taiga-S1 completed 100% of 100 held-out 11-feature test goals (~55 sequential commands) and 95% of 17-feature test goals, proving that compact decision networks can generalize far beyond their training horizons.
  • Error Detection and Self-Correction: When 20% of its actions were deliberately replaced with random commands in robustness tests, the model recognized the corrupted state, invoked FreeCAD's undo mechanisms, and successfully recovered to finish 86% to 100% of the target parts.

Python API and Local Socket Runtime

Taiga-S1 is distributed as a lightweight PyTorch checkpoint optimized for real-time CPU evaluation.

from freecad_s1.model.net import from_pretrained
from freecad_s1.rollout import Policy

# Load weights and initialize CPU rollout policy
model = from_pretrained("shhivv/taiga-s1")
policy = Policy(model, device="cpu")

# Score available actions against the current state and goal
probs = policy.score(state, goal, actions)   # {command: probability}, best first
next_command = next(iter(probs))

Because the runtime drives FreeCAD live over a local socket without remote API calls or GPU VRAM requirements, developers can integrate it directly into local coding agent harnesses, headless testing suites, and robotic CAD automation pipelines.

Practical Caveats and Future Roadmap

When evaluating Taiga-S1 for production workflows, developers should account for its design boundaries:

  • Execution Layer Only (Planner Required): Taiga-S1 is not an end-to-end generative designer. It does not synthesize creative mechanical concepts from vague prompts; it requires an upstream planner to supply a well-formed feature sequence and target dimensions.
  • Expansion to OS Accessibility Trees: Developer Shiv Shanmugam noted that the next phase of this research involves adapting the same tiny-model decision framework to software lacking dedicated scripting APIs, utilizing the operating system's accessibility tree as the direct interaction surface.

Sources