HemanM's picture
Update app.py
71cf0ef verified
import os
# πŸ›‘οΈ Ensure model is saved before importing anything that loads it
if not os.path.exists("trained_model/config.json"):
print("βš™οΈ No model found. Initializing and saving EvoTransformer...")
from init_model import initialize_and_save_model
initialize_and_save_model()
else:
print("βœ… EvoTransformer already initialized.")
import gradio as gr
import random
from inference import generate_response
from logger import log_user_feedback
from dashboard import update_dashboard_plot, evolution_accuracy_plot
from watchdog import retrain_model
from init_model import load_model
# === Load model to extract architecture
model = load_model()
def get_architecture_summary(model):
summary = {
"Layers": getattr(model, "num_layers", "N/A"),
"Attention Heads": getattr(model, "num_heads", "N/A"),
"FFN Dim": getattr(model, "ffn_dim", "N/A"),
"Memory Enabled": getattr(model, "use_memory", "N/A"),
}
return "\n".join(f"{k}: {v}" for k, v in summary.items())
# 🎲 Random examples
examples = [
{
"goal": "Escape from a burning house",
"option1": "Run out through the front door",
"option2": "Hide in the bathroom"
},
{
"goal": "Improve sleep quality",
"option1": "Use phone in bed",
"option2": "Turn off screens 1 hour before bed"
},
{
"goal": "Increase productivity at work",
"option1": "Multitask all day",
"option2": "Use Pomodoro technique"
},
{
"goal": "Lose weight safely",
"option1": "Skip meals",
"option2": "Exercise regularly and eat balanced meals"
},
{
"goal": "Ace an exam",
"option1": "Cram the night before",
"option2": "Study consistently for 2 weeks"
},
]
def load_random_example():
example = random.choice(examples)
return example["goal"], example["option1"], example["option2"]
# 🧠 Model suggestion UI
evo_output = gr.Textbox(label="🧠 EvoTransformer Suggestion")
gpt_output = gr.Textbox(label="πŸ’¬ GPT-3.5 Suggestion")
feedback_output = gr.Textbox(visible=False)
def evo_chat(goal, sol1, sol2):
response = generate_response(goal, sol1, sol2)
evo = response.get("evo_suggestion", "Error")
gpt = response.get("gpt_suggestion", "Error")
return evo, gpt
def handle_feedback(goal, sol1, sol2, winner):
try:
log_user_feedback(goal, sol1, sol2, winner)
return "βœ… Feedback logged. Thank you!"
except Exception as e:
return f"❌ Failed to log: {e}"
with gr.Blocks(title="EvoTransformer v2.1 – Compare Options and Learn") as demo:
gr.Markdown("""
# πŸ€– EvoTransformer v2.1
*Built Different. Learns Live.*
### 🧬 Why EvoTransformer is Special
Unlike traditional AI models that are fixed once deployed, **EvoTransformer evolves**.
- βœ… Learns from **real-time feedback**
- βœ… **Retrains** on your input (every time you click β€œβ™»οΈ Retrain”)
- βœ… Tracks its **own architecture and accuracy** as it grows
- βœ… Competes with **GPT-3.5** on real reasoning tasks
- βœ… Runs light β€” only ~13M parameters
This isn't just a chatbot. It's a living AI experiment.
Every interaction makes it smarter. You're shaping it.
---
""")
gr.Markdown("## 🧠 EvoTransformer v2.1 – Compare Options and Learn")
with gr.Row():
goal_input = gr.Textbox(label="Goal", placeholder="e.g. Escape from house on fire")
with gr.Row():
option1_input = gr.Textbox(label="Option 1", placeholder="e.g. Exit house through main door")
option2_input = gr.Textbox(label="Option 2", placeholder="e.g. Hide under bed")
with gr.Row():
compare_btn = gr.Button("πŸ” Compare")
random_btn = gr.Button("🎲 Load Random Example")
with gr.Row():
evo_output.render()
gpt_output.render()
with gr.Row():
winner_dropdown = gr.Radio(["Solution 1", "Solution 2"], label="Which was better?")
feedback_btn = gr.Button("βœ… Log Feedback")
feedback_output.render()
compare_btn.click(
fn=evo_chat,
inputs=[goal_input, option1_input, option2_input],
outputs=[evo_output, gpt_output]
)
random_btn.click(
fn=load_random_example,
inputs=[],
outputs=[goal_input, option1_input, option2_input]
)
feedback_btn.click(
fn=handle_feedback,
inputs=[goal_input, option1_input, option2_input, winner_dropdown],
outputs=[feedback_output]
)
# === Define UI components to allow later refresh ===
retrain_status = gr.Textbox(label="Retrain Status")
arch_box = gr.Textbox(label="Model Configuration", value=get_architecture_summary(model), lines=5, interactive=False)
evo_plot = gr.Plot(label="Accuracy per Generation", value=evolution_accuracy_plot())
dashboard_img = gr.Image(value=update_dashboard_plot(), label="Solution Votes")
with gr.Row():
retrain_button = gr.Button("♻️ Retrain Evo", variant="primary")
retrain_button.click(
fn=retrain_model,
inputs=[],
outputs=[arch_box, evo_plot, retrain_status],
show_progress=True
)
# === Render inside Accordions ===
with gr.Accordion("🧬 EvoTransformer Architecture", open=False):
arch_box
with gr.Accordion("πŸ“ˆ Evolution Accuracy Plot", open=False):
evo_plot
with gr.Accordion("πŸ“Š User Feedback Summary", open=False):
dashboard_img
with gr.Accordion("πŸ” Retrain Status", open=False):
retrain_status
if __name__ == "__main__":
demo.launch(share=True)