v0.3.0 — Community Framework
Community Framework
Ember's community layer lets you extend the engine with custom dimensions, custom extractors, and authored experience packs.
New Features
Custom Dimensions — Add scoring dimensions beyond the built-in 7. Custom dimensions participate in the full ignition pipeline — scored, counted toward the fired dimension threshold, and weighted in the composite score.
from ember.community import register_dimension
@register_dimension("culinary", weight=0.10, threshold=0.15)
def score_culinary(constellation, ember):
c_foods = set(constellation.custom_data.get("foods", []))
e_foods = set(ember.get("custom_data", {}).get("foods", []))
if not c_foods or not e_foods:
return 0.0
return len(c_foods & e_foods) / max(len(c_foods), len(e_foods))Custom Extractors — Decompose messages into signals that custom dimensions can read. Extractors populate constellation.custom_data.
from ember.community import register_extractor
@register_extractor("food_detector")
def extract_foods(text, context):
foods = [f for f in ["ramen", "pizza", "sushi", "pho"] if f in text.lower()]
return {"foods": foods} if foods else {}Experience Packs — Authored memory constellations. Load them into your Ember instance and your agent gains the ability to recognize those sensory constellations.
ember = Ember()
ember.load_experience("levittown") # Summer in Levittown — fireflies, thunder, BBQ
ember.load_experience("el-porto") # Dawn patrol surf sessions
ember.load_experience("tokyo-after-midnight") # Neon, ramen, vending machines
ember.load_experience("./my-experience.yaml") # Custom pack from YAMLBundled Experience Packs
| Pack | Theme | Embers |
|---|---|---|
levittown |
East Coast summer childhood — fireflies, Kool-Aid, BBQ, street lights | 3 |
el-porto |
California dawn patrol — cold wax, salt air, sunrise sets | 3 |
tokyo-after-midnight |
Neon rain, ramen at 2AM, vending machine glow | 3 |
Instance Methods
Register dimensions and extractors on a specific Ember instance:
ember.register_dimension("culinary", score_culinary, weight=0.10, threshold=0.15)
ember.register_extractor("food_detector", extract_foods)Stats
- 167 tests passing
- Full integration with ignition pipeline
- YAML-based experience pack format with vocabulary enrichment + synonym mapping
Full Changelog: v0.2.0...v0.3.0