| """Perception layer for BLUX-cA.""" | |
| from __future__ import annotations | |
| import hashlib | |
| from dataclasses import dataclass | |
| from typing import Dict, Iterable, List | |
| class PerceptionInput: | |
| """Normalized representation of an inbound stimulus.""" | |
| text: str | |
| tags: List[str] | |
| fingerprint: str | |
| class PerceptionLayer: | |
| """Perception layer that normalizes raw inputs into a structured payload.""" | |
| def __init__(self, *, default_tags: Iterable[str] | None = None) -> None: | |
| self._default_tags = list(default_tags or []) | |
| def _fingerprint(text: str) -> str: | |
| return hashlib.sha256(text.encode("utf-8")).hexdigest() | |
| def observe(self, text: str, *, tags: Iterable[str] | None = None) -> PerceptionInput: | |
| normalized_tags = sorted(set(self._default_tags + list(tags or []))) | |
| fingerprint = self._fingerprint(text) | |
| return PerceptionInput(text=text.strip(), tags=normalized_tags, fingerprint=fingerprint) | |
| __all__ = ["PerceptionLayer", "PerceptionInput"] | |