{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 🐛 CodeDebugger — GRPO Training on Google Colab\n", "\n", "**Meta + Scalar OpenEnv Hackathon 2026**\n", "\n", "This notebook trains an LLM to fix buggy Python code using GRPO (Group Relative Policy Optimization) via TRL + Unsloth.\n", "\n", "Requirements: **T4 GPU** (free tier) or better." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Step 1: Install dependencies\n", "!pip install -q groq unsloth trl peft transformers datasets accelerate\n", "!pip install -q fastapi uvicorn streamlit pyyaml" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Step 2: Clone the repo\n", "!git clone https://github.com/YOUR_USERNAME/codedebugger.git\n", "%cd codedebugger" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Step 3: Set API key\n", "import os\n", "os.environ['GROQ_API_KEY'] = 'your-groq-api-key-here' # Replace with your key" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Step 4: Verify environment works\n", "from codedebugger.env.codedebugger_env import CodeDebuggerEnv\n", "from codedebugger.data.bug_dataset import get_problem\n", "\n", "env = CodeDebuggerEnv(max_steps=3)\n", "obs = env.reset(problem_id='bug_001')\n", "print('Observation keys:', list(obs.keys()))\n", "print('Buggy code:', obs['buggy_code'])\n", "print('Error:', obs['error_message'])\n", "print()\n", "print(env.render())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Step 5: Test with the correct fix\n", "problem = get_problem('bug_001')\n", "obs, reward, done, info = env.step(problem['correct_code'])\n", "print(f'Reward: {reward:.4f}')\n", "print(f'Done: {done}')\n", "print(f'Pass rate: {info[\"step_record\"][\"pass_rate\"]:.0%}')\n", "print(f'Reward breakdown: {info[\"step_record\"][\"reward_breakdown\"]}')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Step 6: Run baselines\n", "from codedebugger.training.run_baseline import run_no_change_baseline, run_correct_code_baseline\n", "\n", "no_change = run_no_change_baseline()\n", "oracle = run_correct_code_baseline()\n", "\n", "print(f\"\\nNo-change solve rate: {no_change['solve_rate']:.0%}\")\n", "print(f\"Oracle solve rate: {oracle['solve_rate']:.0%}\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Step 7: Train with GRPO\n", "from codedebugger.training.train_grpo import train, GRPOConfig\n", "\n", "config = GRPOConfig(\n", " model_name='unsloth/Llama-3.2-3B-Instruct',\n", " num_epochs=1,\n", " batch_size=2,\n", " group_size=4,\n", " max_steps=100,\n", " learning_rate=5e-6,\n", ")\n", "\n", "train(config)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Step 8: Run LLM fixer baseline (requires GROQ_API_KEY)\n", "from codedebugger.orchestrator import Orchestrator\n", "\n", "orch = Orchestrator(max_steps=3, max_episodes=5)\n", "results = orch.run()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.11.0" }, "accelerator": "GPU", "gpuClass": "standard" }, "nbformat": 4, "nbformat_minor": 4 }