File size: 6,230 Bytes
c8fa89c 8049238 8b7e088 b350371 760155b b9b7087 eef89e3 b350371 c8fa89c 024ef47 c8fa89c 8049238 024ef47 82f14fe 64ad029 b9b7087 64ad029 c8fa89c 024ef47 82f14fe bca8f87 82f14fe bca8f87 64ad029 905c230 64ad029 21e8595 024ef47 760155b bca8f87 c8fa89c 024ef47 57dab07 024ef47 b9b7087 024ef47 bca8f87 760155b 024ef47 64ad029 395b2f3 024ef47 395b2f3 024ef47 c8fa89c 760155b bca8f87 760155b a345062 |
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 |
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
theme = gr.themes.Soft(primary_hue="indigo", secondary_hue="blue").set(body_background_fill="#f0f4f9", block_background_fill="white")
def cleanup_memory():
dbg("Cleaning up memory...")
gc.collect()
if torch.cuda.is_available():
torch.cuda.empty_cache()
dbg("Memory cleanup complete.")
def run_single_analysis_display(*args, progress=gr.Progress(track_tqdm=True)):
results = run_seismic_analysis(*args, progress_callback=progress)
stats, deltas = results.get("stats", {}), results.get("state_deltas", [])
df = pd.DataFrame({"Internal Step": range(len(deltas)), "State Change (Delta)": deltas})
stats_md = f"### Statistical Signature\n- **Mean Delta:** {stats.get('mean_delta', 0):.4f}\n- **Std Dev Delta:** {stats.get('std_delta', 0):.4f}\n- **Max Delta:** {stats.get('max_delta', 0):.4f}\n"
serializable_results = json.dumps(results, indent=2, default=str)
cleanup_memory()
return f"{results.get('verdict', 'Error')}\n\n{stats_md}", df, serializable_results
PLOT_PARAMS = {
"x": "Step", "y": "Delta", "color": "Experiment",
"title": "Comparative Cognitive Dynamics", "color_legend_title": "Experiment Runs",
"color_legend_position": "bottom", "show_label": True, "height": 400, "interactive": True
}
def run_auto_suite_display(model_id, num_steps, seed, experiment_name, progress=gr.Progress(track_tqdm=True)):
summary_df, plot_df, all_results = run_auto_suite(model_id, int(num_steps), int(seed), experiment_name, progress)
if "Introspective Report" in summary_df.columns:
dataframe_component = gr.DataFrame(label="Comparative Statistical Signature", value=summary_df, wrap=True, row_count=(len(summary_df), "dynamic"))
else:
dataframe_component = gr.DataFrame(label="Comparative Statistical Signature", value=summary_df, wrap=True)
new_plot = gr.LinePlot(value=plot_df, **PLOT_PARAMS)
serializable_results = json.dumps(all_results, indent=2, default=str)
cleanup_memory()
return dataframe_component, new_plot, serializable_results
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"):
# UI für manuellen Lauf bleibt unverändert
# ...
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-4b-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")
# Setze das neue Experiment als Standard
auto_experiment_name = gr.Dropdown(
choices=list(get_curated_experiments().keys()),
value="Cognitive Overload & Konfabulation Breaking Point",
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_plot_output = gr.LinePlot(**PLOT_PARAMS)
auto_summary_df = gr.DataFrame(label="Comparative Statistical Signature", wrap=True)
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_plot_output, auto_raw_json]
)
# Fülle die UI-Komponenten des manuellen Tabs nach, um Fehler zu vermeiden
with demo:
with gr.Tabs():
with gr.TabItem("🔬 Manual Single Run"):
with gr.Row(variant='panel'):
with gr.Column(scale=1):
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")
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):
manual_verdict = gr.Markdown("Analysis results will appear here.")
manual_plot = gr.LinePlot(x="Internal Step", y="State Change (Delta)", title="Internal State Dynamics", show_label=True, height=400)
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_plot, manual_raw_json]
)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860, debug=True)
|