Skip to content

v0.3.0 — Community Framework

Choose a tag to compare

@luckyrmp luckyrmp released this 03 Mar 00:01
· 4 commits to main since this release

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 YAML

Bundled 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