Memory
Extracted decision rules, logic, and agent learning from source documents — organized, searchable, and visualized as a knowledge graph.
Why Use Memory?
AI agents encode learned behavior in rules, thresholds, and decision paths. The Memory module makes this implicit knowledge explicit and auditable, letting you inspect exactly how your agents decide.
Rule Library
Browse every extracted rule with filters by action, product, risk category, and threshold type. Full-text search and inline editing.
Hard Stop Detection
Automatically surface unmitigated decline rules — the "absolute no" decisions with no available workarounds.
Decision Quality
Categorize rules as aligned, divergent, or partial. Spot soft thresholds and conflicting logic across risk factors.
Knowledge Graph
Visualize how risk factors, rules, outcomes, mitigants, and sources connect in an interactive D3 force-directed graph.
Quick Start
Get your rule extractions into AXIS in three steps:
Navigate to Memory
Click Memory in the left sidebar. If no data is loaded, you will see the upload screen with expected column hints.
Upload Rule Extractions CSV
Drag a CSV into the upload zone. By default, required columns are: id, rule_name, action, batch_id, ingestion_status. Additional columns like risk_category, risk_factor, product_type, mitigants, and threshold_type enrich the dashboard but are optional. Column names are configurable via memory.yaml.
Explore the Dashboard
Once data loads, the summary KPI strip, charts, and five tabs populate automatically. Use filters to slice by action, product, or risk category.
Page Anatomy
Here is how the Memory dashboard is organized, with every major section labeled:
Memory
Extracted decision rules, logic, and agent learning
Rules by Action
Rules by Product
| Rule Name | Action | Risk Factor | Product | Status |
|---|---|---|---|---|
| Max Loan-to-Value Check | decline | LTV Ratio | Commercial | ingested |
| Credit Score Floor | verify | Credit Score | Personal | ingested |
| Response Time SLA | approve | SLA Compliance | Enterprise | ingested |
Summary Strip
The summary strip appears at the top of the dashboard whenever CSV data is loaded. It includes two sections:
KPI Cards
Four compact inline cards using the standard AXIS KPI pattern — icon on the left, bold value and label on the right:
- Rules — total count of extracted rules
- Risk Factors — unique risk factors across all rules
- Mitigants — total mitigants available across the rule set
- Hard Stops — unmitigated decline rules (red-tinted icon)
Charts
Two side-by-side charts provide a distribution overview:
- Rules by Action — horizontal bar chart grouped by action type (approve, decline, verify, refer, exclude). Color-coded using the AXIS chart palette.
- Rules by Product — donut chart breaking down rules by product type. The center annotation shows the total count.
Rules Tab
The default tab. Displays every extracted rule in a sortable table with multi-facet filtering and inline CRUD operations.
Filters
The filter bar sits above the table with dropdown selects for each dimension:
| Filter | Role | Default Column | Example Values |
|---|---|---|---|
| Action | action | action | approve, decline, verify, refer, exclude |
| Product | product | product_type | commercial, personal, auto, all |
| Risk Category | category | risk_category | credit, operational, market, compliance |
| Threshold | threshold_type | threshold_type | hard, soft |
| Status | status | ingestion_status | ingested, pending, failed |
Filters are configurable via filter_roles in memory.yaml. The order in the YAML list determines the order in the UI. A Clear button appears when any filter is active. Changing a filter resets pagination to page 1.
Table Columns
Click any column header to sort ascending/descending:
- Rule Name — the primary identifier. Click the row chevron to expand and see the full decision path diagram.
- Action — color-coded badge (approve=green, decline=red, verify=yellow, etc.)
- Risk Factor / Risk Category — what the rule evaluates
- Product Type — which product line the rule applies to
- Mitigants — comma-separated list of available mitigating actions
- Status — ingestion status dot (green=ingested, gray=pending, red=failed)
- Actions — edit (pencil) and delete (trash) icons for inline CRUD
Pagination
The table shows 15 rules per page. Pagination controls appear at the bottom with pill-style page buttons. At most 5 page buttons are visible, centered around the current page. A "Showing X-Y of Z rules" label sits on the left.
Hard Stops Tab
Hard stops are rules matching the configured hard_stops.action_value (default: decline) with zero mitigants — absolute refusals with no workaround. This tab isolates them for focused review. Both the action value and mitigant requirement are configurable in memory.yaml.
12 hard stop rules — unmitigated declines with no available mitigants
Card anatomy:
- Red left accent border —
border-l-4 border-l-red-400on a white background (no all-red styling) - Octagon X icon — red-tinted stop sign icon
- Title — the rule name in semibold neutral text
- Metadata line —
group_by / category / productrole values - Description — the
outcome_descriptionfield, line-clamped to 3 lines - Tags — threshold type (gray pill) and compound trigger (red-50 pill) when present
Cards are paginated at 10 per page in a two-column grid.
Decision Quality Tab
This tab categorizes rules by how well they align with expected decision logic, displayed in scrollable column cards.
Three categories:
- Aligned — rules that match expected decision logic. Green check icon, count badge.
- Divergent — rules that contradict expected patterns. Amber warning icon. These need review.
- Partial — rules with incomplete alignment. Gray minus icon, displayed in a 2-column grid.
Each column has a max-h-[500px] scroll container. Below the main columns, a Soft Thresholds table lists rules with threshold_type: soft, showing rule name, risk factor, threshold value, and action.
Batches Tab
Tracks ingestion pipeline history. Each batch card shows progress and risk category coverage.
Pipeline batch history and ingestion progress.
Batch card anatomy:
- Batch ID — truncated
batch_idwith a Layers icon - Created date — earliest
created_attimestamp in the batch - Rule count — total rules in the batch (right-aligned)
- Progress bar — stacked bar with green (ingested), gray (pending), red (failed) segments and percentage label
- Status counts — color-coded count labels below the bar
- Risk categories — blue pill tags showing all unique risk categories in the batch
Batches are listed in a scrollable container (max-h-[600px]).
Knowledge Graph Tab
The Knowledge Graph tab connects to FalkorDB to visualize how rules, risk factors, outcomes, mitigants, and sources relate to each other in an interactive force-directed graph.
Graph Controls
- Search bar — fuzzy-search across node labels. Matching nodes highlight and the graph centers on them.
- Type filter — dropdown to filter by node type: All Types, Risk Factors, Rules, Outcomes, Mitigants, Sources.
- Zoom & pan — scroll to zoom, drag to pan the canvas.
- Click a node — opens the detail panel on the right side showing node properties, connected edges, and neighbor traversal.
Node Types
| Type | Color | Description |
|---|---|---|
| RiskFactor | Red | What the rule evaluates (e.g., LTV Ratio, Credit Score) |
| Rule | Blue | Individual decision rules |
| Outcome | Green | Decision outcomes (approve, decline, etc.) |
| Mitigant | Purple | Available mitigating actions |
| Source | Amber | Data sources (policy documents, databases) |
graph_db_host, graph_db_port, graph_db_name, and graph_db_password.
Node Detail Panel
When you click a node, a 288px-wide panel slides in from the right showing:
- Node label and type — with the type-colored icon
- Properties — all key-value pairs stored on the node
- Connected edges — list of relationships (e.g., "EVALUATES", "MITIGATES", "PRODUCES")
- Neighbor traversal — click a connected node to navigate to it
Data Format
The Memory module expects a CSV with rule extraction records. Column names are mapped to internal roles via the field_roles setting in memory.yaml. The defaults below match the standard column names.
Required Columns (default names)
These columns must exist in your CSV. Upload fails with a descriptive error if any are missing. The required set is configurable via required_roles.
id, rule_name, action, batch_id, ingestion_status
Recommended Columns
These columns are optional but enrich the dashboard significantly. If all are empty across your dataset, a warning banner appears on the Memory page.
risk_category, risk_factor, product_type, mitigants, threshold_type
Additional Optional Columns
outcome_description, threshold, compound_trigger, confidence,
decision_quality, created_at, agent_name, source, source_type,
historical_exceptions, data_fields, ingestion_error, ingested_at
Custom Column Names
If your CSV uses different column names, map them in memory.yaml:
# memory.yaml
memory:
field_roles:
category: compliance_area # your column → "category" role
group_by: risk_dimension # your column → "group_by" role
product: line_of_business # your column → "product" role
Example Row
id,rule_name,action,risk_category,risk_factor,product_type,mitigants,threshold_type,outcome_description,decision_quality,batch_id,ingestion_status
R001,Max LTV Check,decline,credit,LTV Ratio,commercial,"",hard,"Decline if LTV exceeds 80%",aligned,a3f8c2d1,ingested
mitigants column (configurable via field_roles) should be a comma-separated list, or empty for hard stops. By default, rules with action: decline and an empty mitigants field are classified as hard stops. These thresholds are configurable via the hard_stops setting.
Key Field Values
The values below are the defaults. Each can be customized in memory.yaml under quality_values, hard_stops, and soft_threshold_value.
| Role | Default Column | Default Values | Used By |
|---|---|---|---|
action | action | approve, decline, verify, refer, exclude, approve_with_conditions | Rules tab badges, summary charts, hard stop detection |
threshold_type | threshold_type | hard, soft | Decision Quality soft threshold table |
quality | decision_quality | aligned, divergent, partial | Decision Quality tab categorization |
status | ingestion_status | ingested, pending, failed | Rules tab status dot, Batches progress bar |
Configuration
The Memory module is fully configurable via backend/config/memory.yaml. No config file is needed for the default column names — every setting has a sensible default.
What You Can Customize
| Setting | What It Controls |
|---|---|
field_roles | Maps your CSV column names to internal role names (e.g., compliance_area → category) |
required_roles | Which roles must be present in uploads (fails with clear error if missing) |
labels | Display labels for filter dropdowns and table headers |
filter_roles | Which roles appear as filter dropdowns (and their order) |
list_fields | Which roles contain comma-separated list data |
hard_stops | Action value and mitigant requirement for hard stop detection |
quality_values | Values for aligned, divergent, and partial categorization |
action_colors | Colors for action badges in summary charts |
contradictory_pairs | Action pairs that trigger the conflict detection banner |
Quick Example
If your CSV has columns compliance_area, risk_dimension, and line_of_business instead of the defaults:
# backend/config/memory.yaml
memory:
field_roles:
category: compliance_area
group_by: risk_dimension
product: line_of_business
labels:
category: Compliance Area
group_by: Risk Dimension
product: Line of Business
filter_roles: [action, product, category, status]
memory.yaml.example to memory.yaml to get started.