import gradio as gr import pandas as pd import json import os from plot import plot_radar_chart from diagram import show_transformer_diagram from evo_transformer import EvoTransformer # === Initialize === evo = EvoTransformer() # === Gradio Output Placeholders === accuracy_output = gr.Text(label="Simulated Accuracy") params_output = gr.Text(label="Estimated Parameters") current_config_output = gr.Text(label="Current Config Summary") radar_image = gr.Image(label="Final Generation Trait Radar") diagram_image = gr.Image(label="Illustrative Transformer Structure") history_outputs = [] # === Core Evolution Function === def evolve_model(generations): evo.__init__() # Reset EvoTransformer evo.evolve(generations) score = evo.evaluate() radar_path = "radar_chart.png" diagram_path = "architecture_diagram.png" # Plot radar chart try: plot_radar_chart(evo.config, radar_path) except Exception as e: print("Radar chart error:", e) radar_path = None # Plot architecture diagram diagram_bytes = None try: plot_architecture_diagram(evo.config) if os.path.exists(diagram_path): with open(diagram_path, "rb") as f: diagram_bytes = f.read() except Exception as e: print("Diagram plot error:", e) # History cards history = evo.get_history() history_cards = [f"Gen {i+1} Config: {h}" for i, h in enumerate(history)] # History downloadables df = pd.DataFrame(history) df_csv_path = "evo_history.csv" df.to_csv(df_csv_path, index=False) json_path = "evo_history.json" with open(json_path, "w") as f: json.dump(history, f, indent=2) return ( f"{score['accuracy']*100:.2f}%", f"{score['params']:.2f}M params", str(evo.config), radar_path, diagram_bytes, *history_cards, df_csv_path, json_path ) # === Gradio Interface === generations_input = gr.Slider(1, 10, value=3, step=1, label="Number of Generations") evolve_btn = gr.Button("\U0001F9EC Evolve Architecture") with gr.Blocks(title="EvoTransformer") as demo: gr.Markdown(""" # 🧬 EvoTransformer – Evolving Transformer Architectures Simulate trait mutation and adaptive architecture generation. """) with gr.Row(): generations_input.render() evolve_btn.render() accuracy_output.render() params_output.render() current_config_output.render() gr.Markdown("## 🧬 Evolution History") radar_image.render() diagram_image.render() with gr.Accordion("Downloadable Files", open=True): csv_file = gr.File(label="Download CSV History") json_file = gr.File(label="Download JSON History") for _ in range(10): card = gr.Textbox(label="", interactive=False) history_outputs.append(card) evolve_btn.click( fn=evolve_model, inputs=[generations_input], outputs=[ accuracy_output, params_output, current_config_output, radar_image, diagram_image, *history_outputs, csv_file, json_file ] ) demo.launch()