Core capabilities
1. Model Registry
Register full metadata for every AI model: type (NN/RL/GBDT/GNN/LLM), version, applicability (design family, PDK node, scenario type), training scope, known limits. Each model has a unique model_tag; routing uses Registry calibration data, not hard-coded rules.
2. Calibration
Learn calibrated probabilities and error correlation matrices per model. Track systematic bias patterns—not just accuracy (e.g., a model always overestimates congestion on small designs, another is optimistic on 7nm data). Correlation matrices guide ensemble: independent-error models combine better than co-linear ones.
3. OOD Detection
Detect whether inputs lie in the model's applicability domain. Dual check: Mahalanobis distance to training centroid (default threshold 3.0) and density-based blank regions mark OOD. OOD forces fallback to deterministic engines—no risky predictions.
4. F0-F4 Routing
Route by fidelity tier—F0 (estimate NN, fast coarse prediction) → F2 (in-design hybrid, mid-precision assist) → F4 (correlated deterministic, high-precision execution). Agents use F0 early to filter candidates, F2 for refinement, F4 deterministic tools for gold results.
5. Ensemble
Ensemble considers error correlation, not simple voting. Independent models (~0 correlation) outperform co-linear ones. Router prefers high-independence combinations to maximize ensemble gain.
Agent invocation
Model Router exposes a unified inference entry—Agents describe requirements without knowing which specific model runs.
Python SDK
from ieda.router import ModelRouter router = ModelRouter("http://localhost:9120") # Register a new model router.register( model_tag="congestion_nn_v3.1", model_type="NN", applicable_domain={ "design_family": ["riscv", "soc"], "pdk": ["sky130", "nangate45"], }, ) # Route inference request result = router.route( model_family="congestion_nn", input_features=design_features, required_fidelity="F2", fallback_policy="deterministic", ) print(result.selected_model) # "congestion_nn_v3.1" print(result.confidence) # 0.87 print(result.ood_flag) # False print(result.fallback_triggered) # False
Input/output contract
RouteRequest
| Field | Type | Required | Description |
|---|---|---|---|
model_family | string | Yes | Model family name—e.g. "congestion_nn", "timing_nn", "macro_placer" |
input_features | object | Yes | Input feature vector—structured features exported by AiEDA Library |
required_fidelity | "F0" | "F1" | "F2" | "F3" | "F4" | Yes | Required fidelity tier |
fallback_policy | "deterministic" | "best_effort" | "reject" | Yes | Fallback policy—deterministic engine; best_effort picks best in class; reject refuses prediction |
RouteResult
| Field | Type | Description |
|---|---|---|
selected_model | string | Selected model tag |
confidence | float | Calibrated confidence (0.0 ~ 1.0) |
calibration_metadata | object | ECE (Expected Calibration Error), bias, and other calibration metrics |
ood_flag | boolean | Whether input was judged OOD |
fallback_triggered | boolean | Whether fallback was triggered |