Awesome Comparisons provides a powerful configuration inheritance system that allows you to define criteria, groupings, and value displays once and reuse them across multiple datasets. This eliminates duplication and ensures consistency.
The configuration system consists of three layers:
configuration/defaults/datasets/{id}/config/comparison.ymlAll shared configuration files live in configuration/defaults/:
configuration/
├── datasets.manifest.json # Dataset registry
├── comparison-default.yml # Global defaults
└── defaults/ # Shared fragments
├── general-licensing.yml # License-related criteria
├── groups-advanced.yml # Advanced grouping definitions
├── groups.yml # Basic grouping definitions
└── value-displays.yml # Common value displays
Define reusable criteria in shared YAML files:
Example: configuration/defaults/general-licensing.yml
criteria:
- License:
name: License
type: LABEL
search: true
table: true
detail: true
values:
- name: "MIT"
description: "MIT License - permissive open source"
class: "label-success"
- name: "Apache-2.0"
description: "Apache License 2.0"
class: "label-success"
- name: "GPL-3.0"
description: "GNU General Public License v3.0"
class: "label-info"
- name: "Proprietary"
description: "Proprietary/commercial license"
class: "label-warning"
- Opensource:
name: Opensource
type: LABEL
search: true
table: true
values:
- name: "Yes"
display: "Yes"
class: "label-success"
- name: "No"
display: "No"
class: "label-warning"
- FreeTrial:
name: FreeTrial
type: LABEL
search: true
table: true
values:
- name: "Yes"
display: "✓"
class: "label-success"
- name: "No"
display: "✗"
class: "label-danger"
Define how criteria are organized into groups. Groups are regular criteria items with special properties:
Example: configuration/defaults/groups-advanced.yml
criteria:
- General:
name: General Info
type: MARKDOWN
search: false
table: false
detail: false
order: '10'
defaultExpanded: true
children:
- Classification
- Version
- Repository
- Rating
- ShortDescription
- Description
- Languages
- Licensing:
name: Licensing
type: MARKDOWN
search: false
table: false
detail: false
order: '20'
defaultExpanded: true
children:
- Opensource
- License
- FreeTrial
- Features:
name: Features
type: MARKDOWN
search: false
table: false
detail: false
order: '30'
defaultExpanded: true
children:
- BYOK
- LocalOffline
- GitSupport
- Terminal
- Extensible
- MCP-Client
Define how specific values should render:
Example: configuration/defaults/value-displays.yml
criteria:
- Classification:
values:
- name: "AIE/Model"
display: "AIE/Model"
- name: "Code/Editor"
display: "Code/Editor"
- name: "Code/Terminal"
display: "Code/Terminal"
- Languages:
values:
- name: "Python"
display: "🐍 Python"
- name: "JavaScript"
display: "JS"
- name: "TypeScript"
display: "TS"
- name: "Java"
display: "☕ Java"
- name: "Any"
display: "Any"
The dataset manifest (configuration/datasets.manifest.json) specifies which shared configuration files each dataset should inherit.
{
"id": "aie-model",
"displayLabel": "AIE/Model",
"sources": {
"dataDir": "datasets/aie-model/data",
"config": "datasets/aie-model/config/comparison.yml",
"configDefaults": [
"configuration/comparison-default.yml",
"configuration/defaults/general-licensing.yml",
"configuration/defaults/groups-advanced.yml",
"configuration/defaults/value-displays.yml"
]
}
}
The configDefaults array lists shared configuration files in order:
Order matters! Example:
"configDefaults": [
"configuration/comparison-default.yml", // Base defaults
"configuration/defaults/general-licensing.yml", // Add licensing criteria
"configuration/defaults/groups-advanced.yml", // Add advanced groupings
"configuration/defaults/value-displays.yml" // Override value displays
]
Different datasets can inherit different combinations:
AIE Model Dataset (full set):
"configDefaults": [
"configuration/comparison-default.yml",
"configuration/defaults/general-licensing.yml",
"configuration/defaults/groups-advanced.yml",
"configuration/defaults/value-displays.yml"
]
Terminal Dataset (simpler configuration):
"configDefaults": [
"configuration/comparison-default.yml",
"configuration/defaults/general-licensing.yml",
"configuration/defaults/value-displays.yml"
]
When loading a dataset configuration, the system:
configuration/comparison-default.ymlconfigDefaults)
datasets/{id}/config/comparison.ymlShared (general-licensing.yml):
criteria:
- License:
name: License
type: LABEL
search: true
table: true
Dataset-Specific (datasets/aie-model/config/comparison.yml):
criteria:
- License:
name: "License Type" # Override name
type: LABEL
search: true
table: true
detail: true # Add detail visibility
- BYOK: # Dataset-unique criterion
name: "Bring Your Own Key"
type: LABEL
search: true
Merged Result for aie-model:
criteria:
- License:
name: "License Type" # From dataset (overrides shared)
type: LABEL
search: true
table: true
detail: true # From dataset
- BYOK: # From dataset (unique)
name: "Bring Your Own Key"
type: LABEL
search: true
configuration/defaults/configDefaults for relevant datasetsBest practices:
platform-support.yml)groups-custom.yml)criteria array with:
- Deployment:)name: Display nametype: Must be MARKDOWNsearch, table, detail: Must all be falseorder: Position in listdefaultExpanded: Default state (true/false)children: Array of criterion tagsconfigDefaults for datasets that need itExample: Custom grouping file
# configuration/defaults/groups-devtools.yml
criteria:
- Deployment:
name: Deployment Options
type: MARKDOWN
search: false
table: false
detail: false
order: '40'
defaultExpanded: true
children:
- BYOK
- LocalOffline
- GitSupport
- Integration:
name: Integration Features
type: MARKDOWN
search: false
table: false
detail: false
order: '50'
defaultExpanded: true
children:
- Terminal
- Extensible
- MCP-Client
To override a shared criterion in a dataset:
tag to dataset configExample:
Shared:
- Classification:
name: Classification
type: LABEL
search: true
table: true
Dataset Override:
- Classification:
name: "Tool Classification" # Override name only
# type, search, table inherited from shared
Stack multiple shared files for modular configuration:
"configDefaults": [
"configuration/comparison-default.yml", // Base
"configuration/defaults/general-licensing.yml", // Add licensing criteria
"configuration/defaults/groups-advanced.yml", // Add advanced groupings
"configuration/defaults/value-displays.yml" // Common displays
]
Override just values, not the entire criterion:
Shared:
- Opensource:
name: Opensource
type: LABEL
values:
- name: "Yes"
class: "label-success"
- name: "No"
class: "label-warning"
Dataset:
- Opensource:
values:
- name: "Yes"
display: "✓ Open Source" # Override just display
# Inherits "No" from shared
Different datasets can use different grouping structures by including different shared config files:
Simple Dataset uses groups.yml (basic grouping):
"configDefaults": [
"configuration/comparison-default.yml",
"configuration/defaults/groups.yml"
]
Advanced Dataset uses groups-advanced.yml (detailed grouping):
"configDefaults": [
"configuration/comparison-default.yml",
"configuration/defaults/groups-advanced.yml"
]
Groups are merged like any other criteria, so datasets can also override or add to groups.
Groups can reference criteria that don’t exist in all datasets:
Shared grouping:
criteria:
- Features:
name: Features
type: MARKDOWN
search: false
table: false
detail: false
order: '30'
defaultExpanded: true
children:
- BYOK
- LocalOffline
- GitSupport
- Terminal # May not exist in all datasets
The system resolves children against the merged criteria for each dataset and warns (but doesn’t fail) if criteria are missing.
Error: “Group child ‘X’ not found in criteria definitions”
Cause: A group criterion references a child tag that doesn’t exist in the merged criteria.
Solutions:
Error: “Duplicate criterion tag ‘X’”
Cause: Same tag defined in multiple shared files or shared + dataset.
Solutions:
Symptom: Changes to shared config don’t appear in dataset.
Checks:
configDefaults arraynpm run data:prepare -- --dataset {id}Symptom: Dataset override doesn’t replace shared definition.
Checks:
tag matches exactly (case-sensitive)1. Create shared criteria file:
configuration/defaults/custom-features.yml:
criteria:
- BYOK:
name: "Bring Your Own Key"
type: LABEL
search: true
table: true
values:
- name: "Yes"
class: "label-success"
- name: "No"
class: "label-secondary"
- name: "Partial"
class: "label-info"
- LocalOffline:
name: "Local/Offline"
type: LABEL
search: true
values:
- name: "Yes"
display: "✓"
- name: "No"
display: "✗"
2. Create shared grouping:
configuration/defaults/groups-custom.yml:
criteria:
- DeploymentFeatures:
name: Deployment Features
type: MARKDOWN
search: false
table: false
detail: false
order: '60'
defaultExpanded: true
children:
- BYOK
- LocalOffline
3. Add to dataset manifest:
{
"id": "aie-model",
"sources": {
"configDefaults": [
"configuration/comparison-default.yml",
"configuration/defaults/custom-features.yml",
"configuration/defaults/groups-custom.yml"
]
}
}
4. Dataset can now override:
datasets/aie-model/config/comparison.yml:
criteria:
- BYOK:
name: "API Key Support" # Override name
# Other fields inherited from shared
- MCP-Client: # Dataset-specific
name: "MCP Client Support"
type: LABEL