AI-Agentic-Coder / README.md
kaushikpaul's picture
Deploy Space
ca22196 verified
|
Raw
History Blame Contribute Delete
12 kB
---
title: AI-Agentic-Coder
app_file: src/ai_agentic_coder/main.py
sdk: gradio
sdk_version: 6.14.0
---
# AI Agentic Coder
[![Live Website](https://img.shields.io/badge/Live_Website-6c63ff?logo=rocket&logoColor=white&labelColor=5a52d3)](https://projects.kaushikpaul.co.in/ai-agentic-coder)
An AI-powered agentic coding assistant that:
- Turns your natural language requirements into a working Python module
- Designs the module, implements the code, writes simple tests, and builds a demo UI
- Packages the output and launches the generated Gradio app with a public URL
Backed by a multi-agent CrewAI pipeline, the app coordinates “engineering lead”, “backend”, “frontend”, “QA”, and a “runner” agent to deliver end-to-end results.
## Live Demo
- Visit the hosted Space: https://projects.kaushikpaul.co.in/ai-agentic-coder
## Features
- **Idea → Running App in Minutes**
- One-click pipeline: design the module → implement code → generate tests → scaffold a Gradio demo → auto-package into a zip → upload to Google Cloud Storage → launch the app → return live/public URLs.
- **Multi‑Agent Orchestration (CrewAI)**
- Specialized agents for engineering lead, backend, frontend, QA, and runtime. Tasks are declared in YAML and executed sequentially for predictable outcomes.
- **Production‑Friendly Reliability**
- Built‑in retry limits and execution timeouts for coding/testing agents, plus automatic cleanup of previous app processes to avoid port conflicts.
- **Model‑Flexible by Design**
- Switch between OpenRouter and OpenCode Go from `.env`. Models are configured with environment variables instead of hardcoded YAML values.
- **Modern Developer UX**
- Polished Gradio UI with non‑blocking background execution, streaming progress, one‑click example loader, and strict URL extraction/validation on completion.
- **Secure Artifact Delivery**
- Packages all generated code and dependencies into a zip file, uploads to Google Cloud Storage, and returns a time-limited, signed download URL. The app is automatically launched in a background process, and its public URL is captured and returned—no manual builds or deployments needed.
- **Extensible & Maintainable**
- Add agents, tasks, or custom tools (e.g., `python_code_run_tool.py`) without touching the core pipeline. Everything is declarative and composable.
- **Runs Local or in the Cloud**
- Works out of the box on your machine and is ready for Hugging Face Spaces deployment with the same entry point.
## Architecture Overview
- **Crew & Agents:** `src/ai_agentic_coder/crew.py`
- Agents configured in `src/ai_agentic_coder/config/agents.yaml`
- Tasks configured in `src/ai_agentic_coder/config/tasks.yaml`
- **Tools:**
- Python code runner and GCS uploader: `src/ai_agentic_coder/tools/python_code_run_tool.py`
- **UI:** `src/ai_agentic_coder/gradio_ui.py`
- **Entry point:** `src/ai_agentic_coder/main.py`
- **Outputs:** `src/ai_agentic_coder/output/`
- Design doc, backend module, test module, demo app, and utility artifacts
### Pipeline (from tasks.yaml)
1. `design_task` → writes `src/ai_agentic_coder/output/{module_name}_design.md`
2. `code_task` → writes `src/ai_agentic_coder/output/{module_name}` (e.g., `accounts.py`)
3. `frontend_task` → writes `src/ai_agentic_coder/output/app.py` (Gradio demo with share=True)
4. `test_task` → writes `src/ai_agentic_coder/output/test_{module_name}`
5. `python_code_run_task` → uploads zip to GCS, runs the app, and returns two URLs; also writes `src/ai_agentic_coder/output/gradio_public_url.txt`
## Prerequisites
- Python 3.10–3.12 (project targets >=3.10 per `pyproject.toml`)
- A modern browser (Chrome, Edge, Safari, Firefox)
- API keys and credentials (see Configuration)
- Docker Engine running (local only) — required for sandboxed "safe" execution of generated code. If you opt out and force `unsafe` mode locally (see Configuration → Execution Mode), Docker is not required.
## Quick Start
### 1) Clone the repo
```bash
git clone https://github.com/Kaushik-Paul/AI-Agentic-Coder.git
cd AI-Agentic-Coder
```
### 2) (Optional) Create and activate a virtual environment
```bash
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
```
### 3) Install dependencies
#### Option A — Install with uv (recommended)
1) Install uv
- Linux/macOS:
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
# ensure ~/.local/bin is on your PATH
export PATH="$HOME/.local/bin:$PATH"
```
- Windows (PowerShell):
```powershell
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
```
2) Sync dependencies
```bash
uv sync
```
#### Option B — Install with pip
```bash
pip install -r requirements.txt
```
### 4) Create a .env file
Create a `.env` file in the project root with the following variables (adjust as needed):
```ini
# ——— LLM provider ———
# Defaults to OpenCode Go when USE_OPENROUTER is false or omitted.
USE_OPENROUTER=false
OPENCODE_GO_API_KEY=your_opencode_go_key
OPENCODE_GO_MODEL=minimax-m2.7
# Optional: auto, openai, or anthropic. auto reads OpenCode Go model metadata and falls back safely.
OPENCODE_GO_API_STYLE=auto
# To use OpenRouter instead:
# USE_OPENROUTER=true
# OPENROUTER_API_KEY=your_openrouter_key
# OPENROUTER_MODEL=moonshotai/kimi-k2:free
# Optional shared tuning:
LLM_TEMPERATURE=0.2
LLM_TIMEOUT=300
# ——— Google Cloud Storage (used by PythonCodeRunTool) ———
GCP_PROJECT_ID=your_gcp_project_id
GCP_BUCKET_NAME=your_public_or_private_bucket_name
# Base64-encoded service account JSON. Example to generate:
# cat service_account.json | base64 -w 0
GCP_SERVICE_KEY=base64_encoded_service_account_json
```
### 5) Run the app
Using uv:
```bash
uv run python -m src.ai_agentic_coder.main
```
Using python directly:
```bash
python -m src.ai_agentic_coder.main
```
Gradio will print a local URL (e.g., http://127.0.0.1:7860). Open it in your browser.
## Built with CrewAI
This project leverages [CrewAI](https://docs.crewai.com/en/introduction), a powerful framework for orchestrating role-playing, autonomous AI agents. CrewAI enables the creation of sophisticated AI workflows where different agents can work together to accomplish complex tasks.
Key features used in this project:
- **Agents**: Specialized AI agents for design, backend, frontend, testing, and running
- **Tasks**: Well-defined tasks that agents perform sequentially
- **Tools**: Custom Python tool to package, upload, and run generated code
- **Delegation**: Sequential, YAML-driven orchestration of the pipeline
## Configuration
### LLMs and Agents
- File: `src/ai_agentic_coder/model_client.py`
- Provider selection is driven by `.env`: `USE_OPENROUTER=true` uses `OPENROUTER_MODEL`; otherwise the app uses OpenCode Go with `OPENCODE_GO_MODEL`.
- OpenCode Go defaults to `minimax-m2.7`. The app checks OpenCode Go model metadata to choose the correct API style, so Anthropic-style models use `/messages` and OpenAI-compatible models use `/chat/completions`. You can override detection with `OPENCODE_GO_API_STYLE=openai` or `OPENCODE_GO_API_STYLE=anthropic`.
### Tasks & Outputs
- File: `src/ai_agentic_coder/config/tasks.yaml`
- Pipeline and outputs are described in the Architecture section.
### UI Behavior
- File: `src/ai_agentic_coder/gradio_ui.py`
- You provide: `Requirements`, `Module Name` (without .py), `Class Name`.
- The app displays a progress bar during execution and, on success, two URLs: a signed download URL and a live app URL.
- Generated demos are served through the main Gradio app at `/generated-app/`, which works on Hugging Face Spaces without relying on Gradio tunnel/share URLs.
### Execution Mode (Docker vs non‑Docker)
- Files: `src/ai_agentic_coder/crew.py`
- Local runs use CrewAI `code_execution_mode="safe"`, executing generated code inside Docker for isolation.
- On Hugging Face Spaces, the project automatically switches to `"unsafe"` mode (no Docker) for compatibility:
- See: `crew.py``is_running_in_hf_space()` and `run_in_docker = "unsafe" if is_running_in_hf_space() else "safe"`.
- Agents with code execution enabled inherit this setting: `backend_engineer`, `test_engineer` (see their `code_execution_mode=run_in_docker`).
- Requirement: Ensure Docker is running when executing locally (see Quick Start step 0).
- Opting out locally: If you don’t need Docker isolation on your machine, you can force non‑Docker execution by setting the variable unconditionally in `crew.py`:
```python
# src/ai_agentic_coder/crew.py
# Force no Docker even on local runs
run_in_docker = "unsafe"
```
This removes the need to have Docker running locally.
## Usage
1. Open the app in your browser.
2. Paste or write your requirements (what you want to build).
3. Enter a module name (e.g., `accounts`) and class name (e.g., `Account`).
4. Click “Run AI Coder”.
5. Wait a few minutes while the pipeline runs. When done, you’ll see:
- A 30-minute signed Google Cloud Storage URL to download the generated artifacts as a zip
- A live URL of the generated Gradio demo app, proxied through the main app
## Outputs
Generated files are saved under `src/ai_agentic_coder/output/`:
- `{module_name}_design.md` — Detailed design produced by the engineering lead agent
- `{module_name}.py` — The generated backend module
- `app.py` — A minimal Gradio UI demonstrating the backend (launched with share=True)
- `test_{module_name}` — Unit test module for the backend
- `gradio_public_url.txt` — CrewAI task output containing the returned URLs
- `latest_run_result.json` — Exact tool result used by the UI, so signed URL query parameters are preserved
## Deployment
- The project is already hosted on Hugging Face Spaces: https://projects.kaushikpaul.co.in/ai-agentic-coder
- To deploy with the helper script:
- Set `HF_TOKEN` with write access to the Space.
- Optionally set `HF_SPACE_ID`; it defaults to `kaushikpaul/AI-Agentic-Coder`.
- Run `uv run python scripts/deploy_space.py`.
- To deploy your own Space manually:
- Set Space SDK to “Gradio” and point to `src/ai_agentic_coder/main.py` as the entry file.
- Add required secrets in the Space settings:
- `USE_OPENROUTER`
- `OPENCODE_GO_API_KEY`, `OPENCODE_GO_MODEL` or `OPENROUTER_API_KEY`, `OPENROUTER_MODEL`
- `GCP_PROJECT_ID`, `GCP_BUCKET_NAME`, `GCP_SERVICE_KEY` (base64-encoded service account JSON)
- Ensure the Python version matches (3.10–3.12) and install via `requirements.txt` or `pyproject.toml`.
## Troubleshooting
- **Missing or invalid API keys/credentials**
- Verify `.env` values. Ensure the selected LLM provider key and GCP service key are valid; confirm bucket exists and is accessible.
- **GCS upload errors**
- Confirm `GCP_SERVICE_KEY` contains a valid base64-encoded service account JSON with `storage.objects.create` and signing capability. The service account should also be able to access the target bucket.
- **Live URL not detected**
- The generated preview is available at `/generated-app/` for `AI_AGENTIC_CODER_PREVIEW_TTL_MINUTES` minutes, defaulting to 30. A new run stops the previous preview and reuses the same route.
- If your app is behind a custom domain or proxy, set `AI_AGENTIC_CODER_BASE_URL` so returned preview links use the exact public origin.
- **Virtualenv issues on Windows**
- Use `.venv\Scripts\activate` and ensure `python` points to the venv interpreter.
## Tech Stack
- **Python**: 3.10–3.12
- **Frameworks/Libraries**: CrewAI, Gradio 6, google-cloud-storage, python-dotenv, requests, httpx
- **Orchestration**: YAML-configured agents and tasks via CrewAI
- **UI**: Gradio Blocks with live progress and URL surfacing
## Security & Privacy
- Do not commit `.env` files or secrets.
- Use least-privilege GCP service accounts. Prefer short-lived signed URLs for distribution (already used here).
## License
This project is licensed under the MIT License — see the [LICENSE](LICENSE) file for details.