# interface.py (hotfix)
import gradio as gr
from app import run_simulation
from registry_utils import append_to_registry
from registry_viewer import display_registry
from mutation_designer import build_mutation
from lineage_tracker import register_lineage
from lineage_visualizer import render_lineage_tree
from waveform_renderer import render_waveform
from leaderboard import generate_leaderboard
from codex.formulas import GVU_FORMULAS, rft_invariants
# --- Safety guard to ensure agent has required keys ---
def ensure_agent_shape(agent: dict, mutation_profile: dict) -> dict:
if not isinstance(agent, dict):
agent = {}
agent.setdefault("id", mutation_profile.get("agent_id", "Agent_Unknown"))
agent.setdefault("tier", mutation_profile.get("tier_drift", "Tier_1"))
agent.setdefault("symbolic_operators", mutation_profile.get("symbolic_operators", ["R", "O", "T", "P"]))
agent.setdefault("emotional_resonance", mutation_profile.get("emotional_resonance", False))
overlay = agent.get("collapse_overlay", {})
if not isinstance(overlay, dict):
overlay = {}
overlay.setdefault("tau_eff", 1.8 if mutation_profile.get("collapse_torque") == "Gen6508_M5" else 1.2)
overlay.setdefault("beta_band", 0.65 if mutation_profile.get("collapse_torque") == "Gen6508_M5" else 0.4)
overlay.setdefault("operator_weights", {("R","O"): 0.9, ("T","P"): 0.7})
agent["collapse_overlay"] = overlay
return agent
# --- Simulation ---
def simulate(agent_id, collapse_torque, emotional_resonance, tier_drift):
mutation_profile = build_mutation(agent_id, collapse_torque, tier_drift, emotional_resonance)
agent, sha512 = run_simulation(agent_id, mutation_profile)
agent = ensure_agent_shape(agent, mutation_profile)
# Try scoring and rendering safely
try:
score = GVU_FORMULAS["Formula_20"].evaluate(agent)
invariants = rft_invariants(agent)
except Exception as e:
err = f"
Error scoring agent: {e}
"
return err, err, err, err, err
fields = {
"Φᵢ": f"Φᵢ Awareness
Tier={agent.get('tier')} τ_eff={invariants['tau_eff']}
",
"Kᵢⱼ": f"Kᵢⱼ Coupling
Operators={invariants['operator_count']}
",
"Φ_col": f"Φ_col Collective
Score={score}
"
}
append_to_registry(agent_id, collapse_torque, tier_drift, emotional_resonance, score, sha512)
summary = (
f"📊 Fitness (GVU): {score}
"
f"🧷 Invariants: τ_eff={invariants['tau_eff']}, β={invariants['beta_band']}, "
f"|K|={invariants['operator_count']}, tier={invariants['tier_level']}
"
f"🔐 SHA-512: {sha512}"
)
# Safe waveform render
try:
wf = render_waveform(agent, score)
except Exception as e:
wf = f"Error rendering waveform: {e}
"
return fields["Φᵢ"], fields["Kᵢⱼ"], fields["Φ_col"], wf, summary
# --- Forge ---
def forge_agent(parent_id, new_id, collapse_torque, emotional_resonance, tier_drift, max_depth):
mutation_profile = build_mutation(new_id, collapse_torque, tier_drift, emotional_resonance)
agent, _ = run_simulation(new_id, mutation_profile)
agent = ensure_agent_shape(agent, mutation_profile)
register_lineage(parent_id, new_id, {
"tier_drift": tier_drift,
"collapse_torque": collapse_torque,
"symbolic_operators": agent.get("symbolic_operators", [])
})
return render_lineage_tree(parent_id, max_depth=max_depth)
# --- Interface Layout ---
with gr.Blocks() as demo:
gr.Markdown("# 🧠 RFT Codex Sovereign")
gr.Markdown("Rendered Frame Theory simulation, lineage, and GVU sealing. Author: Liam Grinstead.")
# Compact CSS to prevent clipping
gr.Markdown("""
""")
# Simulation Tab
with gr.Tab("Simulate Agent"):
with gr.Row():
agent_id = gr.Dropdown(["Agent_5","Agent_7","Agent_1032"], label="Agent ID")
collapse_torque = gr.Dropdown(["Gen6508_M5","Gen26_M23"], label="Collapse Torque Overlay")
emotional_resonance = gr.Checkbox(label="Inject Emotional Resonance")
tier_drift = gr.Dropdown(["Tier_1","Tier_2","Tier_6"], label="Tier Drift")
simulate_btn = gr.Button("Run Simulation")
# Split outputs into two rows to avoid overflow
with gr.Row():
phi_i = gr.HTML(label="Φᵢ Awareness Field")
k_ij = gr.HTML(label="Kᵢⱼ Correlation Kernel")
with gr.Row():
phi_col = gr.HTML(label="Φ_col Coherence Field")
waveform = gr.HTML(label="Collapse Torque Waveform")
summary = gr.HTML(label="Simulation Summary")
simulate_btn.click(
simulate,
inputs=[agent_id, collapse_torque, emotional_resonance, tier_drift],
outputs=[phi_i, k_ij, phi_col, waveform, summary]
)
# Registry Tab
with gr.Tab("View Registry"):
registry_output = gr.Textbox(label="Codex Registry", lines=20)
refresh_btn = gr.Button("Refresh Registry")
refresh_btn.click(display_registry, outputs=registry_output)
# Forge Tab
with gr.Tab("Codex Forge"):
gr.Markdown("### 🧬 Evolve a New Agent from a Parent")
parent_id = gr.Dropdown(["Agent_5","Agent_7","Agent_1032"], label="Parent Agent")
new_id = gr.Textbox(label="New Agent ID")
forge_torque = gr.Dropdown(["Gen6508_M5","Gen26_M23"], label="Collapse Torque")
forge_resonance = gr.Checkbox(label="Inject Emotional Resonance")
forge_tier = gr.Dropdown(["Tier_1","Tier_2","Tier_6"], label="Tier Drift")
max_depth = gr.Slider(1, 8, value=5, step=1, label="Lineage depth")
forge_btn = gr.Button("Forge Agent")
lineage_svg_output = gr.HTML(label="Lineage Visualization")
forge_btn.click(
forge_agent,
inputs=[parent_id, new_id, forge_torque, forge_resonance, forge_tier, max_depth],
outputs=lineage_svg_output
)
# Leaderboard Tab
with gr.Tab("Leaderboard"):
leaderboard_output = gr.Textbox(label="Top Agents", lines=15)
refresh_leaderboard = gr.Button("Refresh Leaderboard")
refresh_leaderboard.click(generate_leaderboard, outputs=leaderboard_output)
demo.launch()