File size: 8,236 Bytes
c8fa89c 8049238 8b7e088 b350371 760155b b9b7087 eef89e3 094008d c8fa89c 024ef47 c8fa89c 024ef47 06e9d76 094008d 06e9d76 094008d 06e9d76 094008d 64ad029 06e9d76 024ef47 06e9d76 094008d d6b73ac b652405 16e19a3 06e9d76 b652405 8a082d7 b652405 06e9d76 b652405 06e9d76 d6b73ac 06e9d76 bca8f87 06e9d76 b652405 2a78f31 094008d b652405 094008d 64ad029 905c230 64ad029 21e8595 024ef47 09d65a8 d6b73ac 09d65a8 d6b73ac 09d65a8 06e9d76 09d65a8 06e9d76 09d65a8 c8fa89c 024ef47 57dab07 024ef47 b652405 024ef47 760155b d6b73ac 760155b 024ef47 d6b73ac 024ef47 b652405 024ef47 d6b73ac 024ef47 b652405 024ef47 c8fa89c 760155b b652405 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
import gradio as gr
import pandas as pd
import gc
import torch
import json
from cognitive_mapping_probe.orchestrator_seismograph import run_seismic_analysis
from cognitive_mapping_probe.auto_experiment import run_auto_suite, get_curated_experiments
from cognitive_mapping_probe.prompts import RESONANCE_PROMPTS
from cognitive_mapping_probe.utils import dbg, cleanup_memory
theme = gr.themes.Soft(primary_hue="indigo", secondary_hue="blue").set(body_background_fill="#f0f4f9", block_background_fill="white")
def run_single_analysis_display(*args, progress=gr.Progress(track_tqdm=True)):
"""
Wrapper für den 'Manual Single Run'-Tab, jetzt mit Frequenz-Analyse.
"""
try:
results = run_seismic_analysis(*args, progress_callback=progress)
stats, deltas = results.get("stats", {}), results.get("state_deltas", [])
# Zeitreihen-Plot
df_time = pd.DataFrame({"Internal Step": range(len(deltas)), "State Change (Delta)": deltas})
# Frequenz-Plot
spectrum_data = []
if "power_spectrum" in results:
spectrum = results["power_spectrum"]
for freq, power in zip(spectrum["frequencies"], spectrum["power"]):
if freq > 0.001:
spectrum_data.append({"Frequency": freq, "Power": power})
df_freq = pd.DataFrame(spectrum_data)
# Update der Statistik-Anzeige
stats_md = f"""### Statistical Signature
- **Mean Delta:** {stats.get('mean_delta', 0):.4f}
- **Std Dev Delta:** {stats.get('std_delta', 0):.4f}
- **Dominant Frequency:** {stats.get('dominant_frequency', 0):.4f} Hz
- **Spectral Entropy:** {stats.get('spectral_entropy', 0):.4f}"""
serializable_results = json.dumps(results, indent=2, default=str)
return f"{results.get('verdict', 'Error')}\n\n{stats_md}", df_time, df_freq, serializable_results
finally:
cleanup_memory()
def run_auto_suite_display(model_id, num_steps, seed, experiment_name, progress=gr.Progress(track_tqdm=True)):
"""Wrapper für den 'Automated Suite'-Tab."""
try:
summary_df, plot_df, all_results = run_auto_suite(model_id, int(num_steps), int(seed), experiment_name, progress)
dataframe_component = gr.DataFrame(label="Comparative Signature (incl. Signal Metrics)", value=summary_df, wrap=True, row_count=(len(summary_df), "dynamic"))
# Zeitreihen-Plot
plot_params_time = {
"title": "Comparative Cognitive Dynamics (Time Domain)",
"color_legend_position": "bottom", "show_label": True, "height": 300, "interactive": True
}
if experiment_name == "Mechanistic Probe (Attention Entropies)":
plot_params_time.update({"x": "Step", "y": "Value", "color": "Metric", "color_legend_title": "Metric"})
else:
plot_params_time.update({"x": "Step", "y": "Delta", "color": "Experiment", "color_legend_title": "Experiment Runs"})
time_domain_plot = gr.LinePlot(value=plot_df, **plot_params_time)
# Frequenz-Spektrum-Plot
spectrum_data = []
for label, result in all_results.items():
if "power_spectrum" in result:
spectrum = result["power_spectrum"]
for freq, power in zip(spectrum["frequencies"], spectrum["power"]):
if freq > 0.001:
spectrum_data.append({"Frequency": freq, "Power": power, "Experiment": label})
spectrum_df = pd.DataFrame(spectrum_data)
spectrum_plot_params = {
"x": "Frequency", "y": "Power", "color": "Experiment",
"title": "Cognitive Frequency Fingerprint (Frequency Domain)", "height": 300,
"color_legend_position": "bottom", "show_label": True, "interactive": True,
"color_legend_title": "Experiment Runs",
}
frequency_domain_plot = gr.LinePlot(value=spectrum_df, **spectrum_plot_params)
serializable_results = json.dumps(all_results, indent=2, default=str)
return dataframe_component, time_domain_plot, frequency_domain_plot, serializable_results
finally:
cleanup_memory()
with gr.Blocks(theme=theme, title="Cognitive Seismograph 2.3") as demo:
gr.Markdown("# 🧠 Cognitive Seismograph 2.3: Advanced Experiment Suite")
with gr.Tabs():
with gr.TabItem("🔬 Manual Single Run"):
gr.Markdown("Run a single experiment with manual parameters to explore specific hypotheses.")
with gr.Row(variant='panel'):
with gr.Column(scale=1):
gr.Markdown("### 1. General Parameters")
manual_model_id = gr.Textbox(value="google/gemma-3-1b-it", label="Model ID")
manual_prompt_type = gr.Radio(choices=list(RESONANCE_PROMPTS.keys()), value="resonance_prompt", label="Prompt Type")
manual_seed = gr.Slider(1, 1000, 42, step=1, label="Seed")
manual_num_steps = gr.Slider(50, 1000, 300, step=10, label="Number of Internal Steps")
gr.Markdown("### 2. Modulation Parameters")
manual_concept = gr.Textbox(label="Concept to Inject", placeholder="e.g., 'calmness'")
manual_strength = gr.Slider(0.0, 5.0, 1.5, step=0.1, label="Injection Strength")
manual_run_btn = gr.Button("Run Single Analysis", variant="primary")
with gr.Column(scale=2):
gr.Markdown("### Single Run Results")
manual_verdict = gr.Markdown("Analysis results will appear here.")
with gr.Row():
manual_time_plot = gr.LinePlot(x="Internal Step", y="State Change (Delta)", title="Time Domain")
manual_freq_plot = gr.LinePlot(x="Frequency", y="Power", title="Frequency Domain")
with gr.Accordion("Raw JSON Output", open=False):
manual_raw_json = gr.JSON()
manual_run_btn.click(
fn=run_single_analysis_display,
inputs=[manual_model_id, manual_prompt_type, manual_seed, manual_num_steps, manual_concept, manual_strength],
outputs=[manual_verdict, manual_time_plot, manual_freq_plot, manual_raw_json]
)
with gr.TabItem("🚀 Automated Suite"):
gr.Markdown("Run a predefined, curated suite of experiments and visualize the results comparatively.")
with gr.Row(variant='panel'):
with gr.Column(scale=1):
gr.Markdown("### Auto-Experiment Parameters")
auto_model_id = gr.Textbox(value="google/gemma-3-12b-it", label="Model ID")
auto_num_steps = gr.Slider(50, 1000, 300, step=10, label="Steps per Run")
auto_seed = gr.Slider(1, 1000, 42, step=1, label="Seed")
auto_experiment_name = gr.Dropdown(
choices=list(get_curated_experiments().keys()),
value="Causal Verification & Crisis Dynamics",
label="Curated Experiment Protocol"
)
auto_run_btn = gr.Button("Run Curated Auto-Experiment", variant="primary")
with gr.Column(scale=2):
gr.Markdown("### Suite Results Summary")
auto_summary_df = gr.DataFrame(label="Comparative Signature (incl. Signal Metrics)", wrap=True)
with gr.Row():
auto_time_plot_output = gr.LinePlot()
auto_freq_plot_output = gr.LinePlot()
with gr.Accordion("Raw JSON for all runs", open=False):
auto_raw_json = gr.JSON()
auto_run_btn.click(
fn=run_auto_suite_display,
inputs=[auto_model_id, auto_num_steps, auto_seed, auto_experiment_name],
outputs=[auto_summary_df, auto_time_plot_output, auto_freq_plot_output, auto_raw_json]
)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860, debug=True) |