coredipper's picture
Upload folder using huggingface_hub
c3ab545 verified
"""Operon Sleep Consolidation Dashboard — consolidation cycle and counterfactual replay."""
from __future__ import annotations
from dataclasses import dataclass
from typing import Any
import gradio as gr
# ---------------------------------------------------------------------------
# Inline simulation
# ---------------------------------------------------------------------------
@dataclass
class RunRecord:
template_id: str
success: bool
latency_ms: float
tokens_used: int
@dataclass
class ConsolidationResult:
templates_created: int
memories_promoted: int
histone_promotions: int
counterfactuals: int
duration_ms: float
@dataclass
class CounterfactualResult:
corrections: int
affected_stages: list[str]
outcome_would_change: bool
reasoning: str
# ---------------------------------------------------------------------------
# Presets
# ---------------------------------------------------------------------------
def _fresh_session():
return [], False
def _after_10_runs():
records = [RunRecord("enterprise", i < 8, 1200 + i * 50, 3000 + i * 100) for i in range(10)]
return records, False
def _with_corrections():
records = [RunRecord("enterprise", i < 7, 1200 + i * 50, 3000 + i * 100) for i in range(10)]
return records, True
PRESETS = {
"Fresh Session (no history)": _fresh_session,
"After 10 Runs (8 successful)": _after_10_runs,
"With Bi-Temporal Corrections": _with_corrections,
}
def _simulate_consolidation(records, has_corrections):
successful = sum(1 for r in records if r.success)
templates_created = 1 if successful >= 3 else 0
memories_promoted = min(successful, 5)
histone_promotions = 1 if successful >= 5 else 0
counterfactuals = 1 if has_corrections else 0
cr = None
if has_corrections:
cr = CounterfactualResult(
corrections=2,
affected_stages=["researcher", "strategist"],
outcome_would_change=True,
reasoning="2 corrections found: methodology changed from quantitative to qualitative. Researcher and Strategist stages affected.",
)
return ConsolidationResult(
templates_created=templates_created,
memories_promoted=memories_promoted,
histone_promotions=histone_promotions,
counterfactuals=counterfactuals,
duration_ms=0.5,
), cr
# ---------------------------------------------------------------------------
# HTML helpers
# ---------------------------------------------------------------------------
def _result_html(result, cf):
metrics = f"""<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:20px">
<div style="background:#0a1a0a;border:1px solid #1a2a1a;border-radius:6px;padding:16px;text-align:center">
<div style="font-size:24px;font-weight:600;color:#6a6">{result.templates_created}</div>
<div style="font-size:12px;color:#888">Templates Created</div>
</div>
<div style="background:#0a1a2a;border:1px solid #1a2a3a;border-radius:6px;padding:16px;text-align:center">
<div style="font-size:24px;font-weight:600;color:#6af">{result.memories_promoted}</div>
<div style="font-size:12px;color:#888">Memories Promoted</div>
</div>
<div style="background:#1a1a0a;border:1px solid #2a2a1a;border-radius:6px;padding:16px;text-align:center">
<div style="font-size:24px;font-weight:600;color:#aa6">{result.histone_promotions}</div>
<div style="font-size:12px;color:#888">Histone Promotions</div>
</div>
</div>"""
cf_html = ""
if cf:
cf_html = f"""<div style="background:#1a0a0a;border:1px solid #2a1a1a;border-radius:6px;padding:16px;margin-top:16px">
<div style="font-weight:600;color:#f66;margin-bottom:8px">Counterfactual Analysis</div>
<p style="font-size:14px;color:#d0d0d0">{cf.reasoning}</p>
<p style="font-size:13px;color:#888">Affected stages: {', '.join(cf.affected_stages)}</p>
<p style="font-size:13px;color:#f66">Outcome would change: {'Yes' if cf.outcome_would_change else 'No'}</p>
</div>"""
return metrics + cf_html
def _tiers_html(result):
working = max(0, 5 - result.memories_promoted)
episodic = result.memories_promoted
longterm = result.histone_promotions
rows = ""
for tier, count, color in [("WORKING", working, "#888"), ("EPISODIC", episodic, "#6af"), ("LONGTERM", longterm, "#6a6")]:
bar_width = min(count * 20, 100)
rows += f"""<div style="margin-bottom:8px">
<span style="display:inline-block;width:100px;color:{color};font-weight:600;font-size:13px">{tier}</span>
<span style="display:inline-block;width:{bar_width}%;height:16px;background:{color};border-radius:3px;opacity:0.4"></span>
<span style="color:#888;font-size:12px;margin-left:8px">{count}</span>
</div>"""
return f'<div style="padding:12px">{rows}</div>'
# ---------------------------------------------------------------------------
# Callbacks
# ---------------------------------------------------------------------------
def _run_consolidation(preset_name):
if preset_name not in PRESETS:
return "Select a preset.", ""
records, has_corrections = PRESETS[preset_name]()
result, cf = _simulate_consolidation(records, has_corrections)
return _result_html(result, cf), _tiers_html(result)
# ---------------------------------------------------------------------------
# App
# ---------------------------------------------------------------------------
def build_app():
with gr.Blocks(title="Operon Sleep Consolidation", theme=gr.themes.Base()) as demo:
gr.Markdown("# Operon Sleep Consolidation\nReplay, compress, counterfactual replay, and histone promotion.")
with gr.Tab("Consolidation Cycle"):
preset = gr.Dropdown(choices=list(PRESETS.keys()), label="Scenario", value="After 10 Runs (8 successful)")
btn = gr.Button("Run Consolidation")
out = gr.HTML()
tiers = gr.HTML()
btn.click(_run_consolidation, inputs=[preset], outputs=[out, tiers])
with gr.Tab("Memory Tiers"):
gr.Markdown("Memory tier distribution is shown in the Consolidation Cycle tab after running.")
return demo
if __name__ == "__main__":
app = build_app()
app.launch()