Chand11's picture
Update app.py
e7be0be verified
import os
import gradio as gr
import google.generativeai as genai
from datetime import datetime
# --- Configure Gemini ---
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
model = genai.GenerativeModel("gemini-1.5-flash")
# --- Recursive Executor Function ---
def recursive_executor(task, max_attempts=3):
logs = []
code_output = ""
for attempt in range(1, max_attempts + 1):
logs.append(f"\n--- Attempt {attempt} ---")
try:
response = model.generate_content(
f"Write Python code to solve this task:\n{task}"
)
code_output = response.text.strip()
# βœ… quick validation: does it at least contain 'def' or 'print'
if "def " in code_output or "print(" in code_output:
logs.append("βœ… Code looks valid, stopping recursion.")
break
else:
logs.append("⚠️ Code seems incomplete, retrying...")
except Exception as e:
logs.append(f"❌ Error: {str(e)}")
if not code_output:
code_output = "# No valid code generated."
return code_output, "\n".join(logs)
# --- Download Logs ---
def save_logs(log_text):
filename = f"logs_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt"
with open(filename, "w", encoding="utf-8") as f:
f.write(log_text)
return filename
# --- Gradio Interface ---
with gr.Blocks(theme="soft") as demo:
gr.Markdown("## πŸ” Recursive Executor with Logs & Code Viewer")
task_input = gr.Textbox(
placeholder="Enter a programming task...",
label="Task"
)
run_btn = gr.Button("Run Executor")
code_output = gr.Code(label="Generated Code", language="python")
logs_output = gr.Textbox(label="Execution Logs", lines=15)
download_btn = gr.Button("Download Logs")
file_output = gr.File(label="Log File")
def run_executor(task):
code, logs = recursive_executor(task)
return code, logs
run_btn.click(run_executor, inputs=task_input, outputs=[code_output, logs_output])
download_btn.click(save_logs, inputs=logs_output, outputs=file_output)
if __name__ == "__main__":
demo.launch()