Core capabilities
1. Trajectory Storage
Record full Agent trajectories: goal, plan, per-step I/O/runtime/result, critic reports, recovery events. Stored as structured JSON linked to design_hash and design_features (cell count, macros, utilization, clock frequency, etc.).
2. Similarity Search
Retrieve similar historical cases by design features. Cosine similarity between current feature vector (cells, area, utilization, clock domains, congestion hotspots) and history. Returns top-k cases with full trajectories and outcomes.
3. Failure Case Base
Failure library with known fixes. After failure/recovery, auto-classify failure modes (timing-violation/routing-congestion/drc-hotspot) and link successful repair steps. Retrieval prioritizes successful fixes for the same failure class.
4. Applicability
Assess applicability of historical experience. After similarity match, check PDK node, design scale, constraint differences. Output applicability_score (0–1); below threshold (e.g. 0.6) marks low_confidence.
5. Forgetting
Forgetting stale or inapplicable experience. Time decay, applicability drift, redundancy: unused cases lose weight after N months; new PDK experience supersedes old low-confidence cases; duplicate trajectories merge.
Agent calling patterns
from ieda.agent import ExperienceMemory, DesignFeatures
memory = ExperienceMemory()
# Store run trajectory
trajectory = planner.execution_trace # from Agent Planner
memory.store(
trajectory=trajectory,
design_features=DesignFeatures(
cells=1_200_000,
macros=48,
utilization=0.72,
clock_domains=5,
clock_period_ns=0.85
),
result="success",
tags=["timing-closure", "post-route", "hold-fix"]
)
# Similar case retrieval
features = DesignFeatures(cells=1_350_000, macros=52, utilization=0.74)
cases = memory.search(features, k=5, mode="similarity")
# cases[0]: {
# "similarity": 0.94, "applicability": 0.88,
# "plan_summary": "...", "success": true, "steps": 12
# }
# Failure case retrieval
failures = memory.search_failures(
features=features,
failure_mode="timing-violation",
min_applicability=0.6
)
# Forget stale experience
memory.forget(older_than_months=12, min_applicability=0.3)
// MCP: Agent queries historical experience
{
"method": "tools/call",
"params": {
"name": "memory.search",
"arguments": {
"design_features": {
"cells": 1350000,
"macros": 52,
"utilization": 0.74,
"clock_period_ns": 0.85
},
"k": 5,
"filters": {
"success": true,
"failure_mode": null,
"min_applicability": 0.6
}
}
}
}
# Tcl: experience memory query
ieda::memory store -trajectory $trace \
-cells 1200000 -macros 48 -util 0.72
ieda::memory search -cells 1350000 -macros 52 -util 0.74 -k 5
# case-1: sim=0.94 app=0.88 timing-closure success
# case-2: sim=0.87 app=0.82 post-route success
# ...
ieda::memory failures -mode timing-violation
# f-case-1: sim=0.91 fix=resize+buffer steps=8
Input / output contract
| Direction | Field | Type | Description |
|---|---|---|---|
| Input | trajectory | Trace | Full Agent run trajectory |
| Input | design_features | DesignFeatures | Design feature vector (scale, utilization, frequency, etc.) |
| Input | k | int | Number of similar cases to return |
| Input | filters | dict | Filters (success/failure, failure_mode, date range) |
| Output | cases | list[MemoryCase] | Similar cases with similarity/applicability scores |
| Output | recommendation | PriorProposal | Experience-based prior suggestion (reference only) |
| Output | forget_report | dict | Statistics summary of forget operation |