Files
2125_GCE/gx_lain/lain_glyph_bridge.py
T

293 lines
9.2 KiB
Python
Raw Normal View History

"""LAIN ↔ Supercharged Glyph Bridge
Connects the Supercharged Glyph Registry (LedoGlyph600) to the LAIN cognition
engine, injecting glyph metadata, frequency signatures, lineage, activation
envelopes, and resonance profiles into the cognition process.
"""
from typing import Optional, Dict, Any, List
from glyphs.super_registry import get_super, search_super, list_super_ids
def load_glyph_context(manifest: dict, context: dict) -> dict:
"""Load glyph context relevant to the GX file.
Determines which glyph(s) are relevant by:
1. Checking manifest["glyph_id"] if present
2. Searching glyphs by manifest["glyphs"] if present
3. Searching glyphs by manifest["tags"] if present
4. Falling back to default context if no glyph found
Args:
manifest: GX manifest dict
context: Execution context dict
Returns:
Dict with glyph metadata and context fields:
{
"id": str,
"name": str,
"category": str,
"score": int,
"praw": dict,
"originalMetrics": dict,
"activation": dict,
"lineage": dict,
"found": bool,
"_raw": dict,
}
"""
# Try to find glyph by explicit ID
glyph_id = manifest.get("glyph_id")
if glyph_id:
glyph = get_super(glyph_id)
if glyph:
return _build_glyph_context(glyph, found=True)
# Try to find by "glyphs" field in manifest
glyphs_list = manifest.get("glyphs")
if glyphs_list and isinstance(glyphs_list, list) and glyphs_list:
glyph_id = glyphs_list[0]
glyph = get_super(glyph_id)
if glyph:
return _build_glyph_context(glyph, found=True)
# Try to find by tags
tags = manifest.get("tags", [])
if tags:
for tag in tags:
results = search_super(tag, limit=1)
if results:
return _build_glyph_context(results[0], found=True)
# Return default context if no glyph found
return _build_glyph_context(None, found=False)
def _build_glyph_context(glyph: Optional[dict], found: bool) -> dict:
"""Build a normalized glyph context dict.
Args:
glyph: Glyph dict from registry, or None
found: Whether a glyph was found
Returns:
Normalized glyph context dict
"""
if glyph and found:
return {
"id": glyph.get("id", "unknown"),
"name": glyph.get("name", "unknown"),
"category": glyph.get("category", "unknown"),
"score": glyph.get("score", 0),
"praw": glyph.get("praw", {}),
"originalMetrics": glyph.get("originalMetrics", {}),
"activation": glyph.get("activation", {}),
"lineage": glyph.get("lineage", {}),
"routing": glyph.get("routing", {}),
"storage": glyph.get("storage", {}),
"governance": glyph.get("governance", {}),
"period": glyph.get("period"),
"band": glyph.get("band"),
"found": True,
"_raw": glyph,
}
else:
return {
"id": "none",
"name": "none",
"category": "none",
"score": 0,
"praw": {},
"originalMetrics": {},
"activation": {},
"lineage": {},
"routing": {},
"storage": {},
"governance": {},
"period": None,
"band": None,
"found": False,
"_raw": None,
}
def inject_glyph_metadata_into_lane(
lane_result: dict,
glyph_context: dict,
) -> dict:
"""Inject glyph metadata into a lane result.
Adds glyph fields to the lane result without overwriting existing fields.
Extends lane_result with:
- glyph_id
- glyph_name
- glyph_category
- glyph_frequency_signature (praw)
- glyph_activation_mode
- glyph_lineage_signature
- glyph_symbolic_anatomy (originalMetrics)
Args:
lane_result: Lane result dict from lane processor
glyph_context: Glyph context from load_glyph_context()
Returns:
Extended lane_result dict with glyph metadata
"""
if not glyph_context.get("found"):
# No glyph context, return unchanged
return lane_result
# Create extended result
extended = dict(lane_result)
# Add glyph metadata
extended["glyph_id"] = glyph_context["id"]
extended["glyph_name"] = glyph_context["name"]
extended["glyph_category"] = glyph_context["category"]
extended["glyph_score"] = glyph_context["score"]
# Add frequency signature
praw = glyph_context.get("praw", {})
if praw:
extended["glyph_frequency_signature"] = praw
# Add activation mode and score
activation = glyph_context.get("activation", {})
if activation:
extended["glyph_activation_mode"] = activation.get("currentMode", "unknown")
extended["glyph_activation_score"] = activation.get("score", 0)
# Add lineage signature
lineage = glyph_context.get("lineage", {})
if lineage:
extended["glyph_lineage_signature"] = lineage.get("signature", "unknown")
extended["glyph_inheritance_weight"] = lineage.get("inheritanceWeight", 0)
# Add symbolic anatomy
metrics = glyph_context.get("originalMetrics", {})
if metrics:
extended["glyph_symbolic_anatomy"] = metrics
return extended
def compute_glyph_resonance(glyph_context: dict) -> dict:
"""Compute glyph-level resonance metrics.
Combines multiple glyph measurements into unified resonance metrics:
- activation_resonance: from activation.score
- frequency_resonance: from praw vector magnitude
- symbolic_resonance: from originalMetrics resonance field
- overall_resonance: combined normalized value
Args:
glyph_context: Glyph context from load_glyph_context()
Returns:
Dict with resonance metrics
"""
if not glyph_context.get("found"):
return {
"activation_resonance": 0.0,
"frequency_resonance": 0.0,
"symbolic_resonance": 0.0,
"overall_resonance": 0.0,
"glyph_found": False,
}
# Activation resonance from activation.score (0-100 scale)
activation = glyph_context.get("activation", {})
activation_score = activation.get("score", 0)
activation_resonance = min(1.0, activation_score / 100.0)
# Frequency resonance from praw vector magnitude
praw = glyph_context.get("praw", {})
praw_values = [float(praw.get(k, 0)) for k in ["P", "R", "A", "W"]]
praw_magnitude = (sum(v * v for v in praw_values) ** 0.5) / 100.0
frequency_resonance = min(1.0, praw_magnitude)
# Symbolic resonance from originalMetrics
metrics = glyph_context.get("originalMetrics", {})
symbolic_resonance_val = metrics.get("resonance", 50)
symbolic_resonance = min(1.0, symbolic_resonance_val / 100.0)
# Combined overall resonance
overall_resonance = (
activation_resonance * 0.4
+ frequency_resonance * 0.3
+ symbolic_resonance * 0.3
)
return {
"activation_resonance": round(activation_resonance, 4),
"frequency_resonance": round(frequency_resonance, 4),
"symbolic_resonance": round(symbolic_resonance, 4),
"overall_resonance": round(overall_resonance, 4),
"glyph_found": True,
"glyph_id": glyph_context["id"],
"glyph_score": glyph_context["score"],
}
def augment_fused_symbol_with_glyphs(
fused_symbol: dict,
glyph_context: dict,
) -> dict:
"""Augment fused symbol with glyph metadata.
Adds glyph context fields to the final fused symbol:
- glyph_id
- glyph_name
- glyph_category
- glyph_score
- glyph_activation_mode
- glyph_resonance
- glyph_lineage_signature
Args:
fused_symbol: Fused symbol from fuse_lanes()
glyph_context: Glyph context from load_glyph_context()
Returns:
Augmented fused_symbol dict
"""
# Create extended symbol
augmented = dict(fused_symbol)
if glyph_context.get("found"):
# Add glyph metadata
augmented["glyph_id"] = glyph_context["id"]
augmented["glyph_name"] = glyph_context["name"]
augmented["glyph_category"] = glyph_context["category"]
augmented["glyph_score"] = glyph_context["score"]
# Add activation mode
activation = glyph_context.get("activation", {})
if activation:
augmented["glyph_activation_mode"] = activation.get("currentMode", "unknown")
# Add lineage signature
lineage = glyph_context.get("lineage", {})
if lineage:
augmented["glyph_lineage_signature"] = lineage.get("signature", "unknown")
# Add key glyph points to key_points
if "key_points" in augmented:
glyph_key_points = [
f"glyph:{glyph_context['id']}",
f"category:{glyph_context['category']}",
]
augmented["key_points"] = augmented.get("key_points", []) + glyph_key_points
else:
# Mark that no glyph was found
augmented["glyph_id"] = "none"
augmented["glyph_name"] = "none"
augmented["glyph_category"] = "none"
augmented["glyph_score"] = 0
augmented["glyph_found"] = False
return augmented