# microsoft/schgen architecture

> Architecture diagram of the GitHub repository microsoft/schgen, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/microsoft/schgen
- Repository: https://github.com/microsoft/schgen

## Overview

SchGen turns natural-language circuit requests into editable KiCad schematics, while also constructing schematic/code training data and fine-tuning models for that task. The documented data path runs from agentic sketching through representation conversion and JSONL creation into LoRA training; generation then uses schematic-editing operations to produce KiCad output. The tree also includes symbol-context, verification, and evaluation capabilities. Source excerpts are partial, so links between unsampled subsystems are included only where the README documents the workflow.

Main entry points: [`schematic_generation/generate.py`](https://github.com/microsoft/schgen/blob/main/schematic_generation/generate.py) (Generate Schematic), [`dataset_construction/make_dataset.py`](https://github.com/microsoft/schgen/blob/main/dataset_construction/make_dataset.py) (JSONL Dataset), [`training/train.py`](https://github.com/microsoft/schgen/blob/main/training/train.py) (LoRA Fine-Tuning), [`modules/utils/exec_llm_code.py`](https://github.com/microsoft/schgen/blob/main/modules/utils/exec_llm_code.py) (Execute Generated Code)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_generation["Schematic Generation"]
  node_gen["Generate Schematic<br/>[generate.py]"]
  node_llm["LLM Interface<br/>[llm_interface.py]"]
  node_context["Symbol Context<br/>[symbol_context.py]"]
  node_designer["Schematic Designer<br/>[sch_designer.py]"]
  node_verify["Schematic Verifier<br/>[sch_verifier.py]"]
  node_exec["Execute Generated Code<br/>[exec_llm_code.py]"]
end

subgraph group_dataset["Dataset Construction"]
  node_sketch["Agentic Sketch<br/>[agentic_sketch.py]"]
  node_convert["Code Conversion<br/>[kicad_read_sch.py]"]
  node_datasetgen["JSONL Dataset<br/>[make_dataset.py]"]
  node_filter["Dataset Filtering<br/>[dataset_filter.py]"]
end

subgraph group_model["Model Training"]
  node_train["LoRA Fine-Tuning<br/>[train.py]"]
  node_trained["Fine-Tuned Model"]
end

subgraph group_kicad["KiCad and Evaluation"]
  node_interface["KiCad Editing API"]
  node_schematic["Editable Schematic"]
  node_evaluation["Model Evaluation<br/>[eval.py]"]
  node_sch_evaluation["Schematic Evaluation<br/>[sch_evaluation.py]"]
  node_kicad_io["KiCad S-Expression I/O<br/>[schematic.py]"]
end

node_user(("Circuit Request"))
node_designs["Reference Designs"]

node_user -->|"requests"| node_gen
node_gen -->|"queries model"| node_llm
node_gen -->|"prepares context"| node_context
node_gen -->|"generates design"| node_designer
node_gen -->|"checks design"| node_verify
node_gen -->|"runs code"| node_exec
node_exec -->|"edits schematic"| node_interface
node_interface -->|"writes"| node_schematic
node_designs -->|"informs sketch"| node_sketch
node_sketch -->|"produces schematic"| node_convert
node_convert -->|"creates representation"| node_datasetgen
node_datasetgen -.->|"provides samples"| node_filter
node_datasetgen -->|"supplies JSONL"| node_train
node_filter -.->|"supplies samples"| node_train
node_train -->|"produces model"| node_trained
node_trained -.->|"supports generation"| node_gen
node_trained -.->|"evaluated by"| node_evaluation
node_schematic -.->|"evaluated by"| node_sch_evaluation
node_schematic -->|"parsed by"| node_kicad_io

click node_gen "https://github.com/microsoft/schgen/blob/main/schematic_generation/generate.py"
click node_llm "https://github.com/microsoft/schgen/blob/main/modules/utils/llm_interface.py"
click node_context "https://github.com/microsoft/schgen/blob/main/modules/symbol_context.py"
click node_designer "https://github.com/microsoft/schgen/blob/main/modules/sch_designer.py"
click node_verify "https://github.com/microsoft/schgen/blob/main/modules/sch_verifier.py"
click node_exec "https://github.com/microsoft/schgen/blob/main/modules/utils/exec_llm_code.py"
click node_interface "https://github.com/microsoft/schgen/blob/main/modules/kicad_sch_interface.py"
click node_sketch "https://github.com/microsoft/schgen/blob/main/dataset_construction/agentic_sketch.py"
click node_convert "https://github.com/microsoft/schgen/blob/main/dataset_construction/kicad_read_sch.py"
click node_datasetgen "https://github.com/microsoft/schgen/blob/main/dataset_construction/make_dataset.py"
click node_filter "https://github.com/microsoft/schgen/blob/main/modules/dataset_filter.py"
click node_train "https://github.com/microsoft/schgen/blob/main/training/train.py"
click node_evaluation "https://github.com/microsoft/schgen/blob/main/evaluation/eval.py"
click node_sch_evaluation "https://github.com/microsoft/schgen/blob/main/modules/sch_evaluation.py"
click node_kicad_io "https://github.com/microsoft/schgen/blob/main/kiutils/schematic.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_gen,node_llm,node_context,node_designer,node_verify,node_exec toneBlue
class node_sketch,node_convert,node_datasetgen,node_filter toneAmber
class node_train,node_trained,node_user toneMint
class node_interface,node_schematic,node_evaluation,node_sch_evaluation,node_kicad_io toneRose
class node_designs toneIndigo
```

## Components

### Schematic Generation

- [Generate Schematic](https://github.com/microsoft/schgen/blob/main/schematic_generation/generate.py): `schematic_generation/generate.py`
- [LLM Interface](https://github.com/microsoft/schgen/blob/main/modules/utils/llm_interface.py): `modules/utils/llm_interface.py`
- [Symbol Context](https://github.com/microsoft/schgen/blob/main/modules/symbol_context.py): `modules/symbol_context.py`
- [Schematic Designer](https://github.com/microsoft/schgen/blob/main/modules/sch_designer.py): `modules/sch_designer.py`
- [Schematic Verifier](https://github.com/microsoft/schgen/blob/main/modules/sch_verifier.py): `modules/sch_verifier.py`
- [Execute Generated Code](https://github.com/microsoft/schgen/blob/main/modules/utils/exec_llm_code.py): `modules/utils/exec_llm_code.py`

### Dataset Construction

- [Agentic Sketch](https://github.com/microsoft/schgen/blob/main/dataset_construction/agentic_sketch.py): `dataset_construction/agentic_sketch.py`
- [Code Conversion](https://github.com/microsoft/schgen/blob/main/dataset_construction/kicad_read_sch.py): `dataset_construction/kicad_read_sch.py`
- [JSONL Dataset](https://github.com/microsoft/schgen/blob/main/dataset_construction/make_dataset.py): `dataset_construction/make_dataset.py`
- [Dataset Filtering](https://github.com/microsoft/schgen/blob/main/modules/dataset_filter.py): `modules/dataset_filter.py`

### Model Training

- [LoRA Fine-Tuning](https://github.com/microsoft/schgen/blob/main/training/train.py): `training/train.py`
- **Fine-Tuned Model**

### KiCad and Evaluation

- [KiCad Editing API](https://github.com/microsoft/schgen/blob/main/modules/kicad_sch_interface.py): `modules/kicad_sch_interface.py`
- **Editable Schematic**
- [Model Evaluation](https://github.com/microsoft/schgen/blob/main/evaluation/eval.py): `evaluation/eval.py`
- [Schematic Evaluation](https://github.com/microsoft/schgen/blob/main/modules/sch_evaluation.py): `modules/sch_evaluation.py`
- [KiCad S-Expression I/O](https://github.com/microsoft/schgen/blob/main/kiutils/schematic.py): `kiutils/schematic.py`

### Other components

- **Circuit Request**
- **Reference Designs**

## Connections

- Circuit Request → Generate Schematic: requests
- Generate Schematic → LLM Interface: queries model
- Generate Schematic → Symbol Context: prepares context
- Generate Schematic → Schematic Designer: generates design
- Generate Schematic → Schematic Verifier: checks design
- Generate Schematic → Execute Generated Code: runs code
- Execute Generated Code → KiCad Editing API: edits schematic
- KiCad Editing API → Editable Schematic: writes
- Reference Designs → Agentic Sketch: informs sketch
- Agentic Sketch → Code Conversion: produces schematic
- Code Conversion → JSONL Dataset: creates representation
- JSONL Dataset → Dataset Filtering: provides samples
- JSONL Dataset → LoRA Fine-Tuning: supplies JSONL
- Dataset Filtering → LoRA Fine-Tuning: supplies samples
- LoRA Fine-Tuning → Fine-Tuned Model: produces model
- Fine-Tuned Model → Generate Schematic: supports generation
- Fine-Tuned Model → Model Evaluation: evaluated by
- Editable Schematic → Schematic Evaluation: evaluated by
- Editable Schematic → KiCad S-Expression I/O: parsed by
