Spaces:
Sleeping
Sleeping
Commit
·
847a4f8
1
Parent(s):
feb5fc6
Adding README
Browse files- .gitattributes +1 -0
- README.md +116 -1
- app.py +1 -1
- static/Architecture.png +3 -0
- static/UI.png +3 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
*.png filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
|
@@ -13,9 +13,124 @@ tags:
|
|
| 13 |
- mcp-in-action-track-enterprise
|
| 14 |
- mcp-in-action-track-consumer
|
| 15 |
- mcp-in-action-track-creative
|
|
|
|
|
|
|
| 16 |
- gradio-hackathon
|
| 17 |
- vibe-coding
|
| 18 |
- autonomous-software
|
|
|
|
|
|
|
| 19 |
---
|
|
|
|
| 20 |
|
| 21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
- mcp-in-action-track-enterprise
|
| 14 |
- mcp-in-action-track-consumer
|
| 15 |
- mcp-in-action-track-creative
|
| 16 |
+
- MCP protocol
|
| 17 |
+
- MCP
|
| 18 |
- gradio-hackathon
|
| 19 |
- vibe-coding
|
| 20 |
- autonomous-software
|
| 21 |
+
- A2A protocol
|
| 22 |
+
- A2A
|
| 23 |
---
|
| 24 |
+
# CODERAMA
|
| 25 |
|
| 26 |
+
> *⚠️ DISCLAIMER: DO NOT TRY IN PRODUCTION. THIS DEMO IS INTENDED FOR DEMONSTRATION PURPOSES ONLY.*
|
| 27 |
+
> *⚠️ Important: MCP and A2A protocols in action.*
|
| 28 |
+
|
| 29 |
+
This project highlights how an enterprise could implement software development lifecycle using Agents. It demonstrates
|
| 30 |
+
the intricate working of a enterprise team where there might be different teams dealing with the entire software development lifecycle.For this project we have assumed three separate teams working to implement the application. These teams communicate via
|
| 31 |
+
Agent2Agent (A2A) protocol. This simulates the scenario where each team can have different structure, policy, and could be using a different language internally.
|
| 32 |
+
|
| 33 |
+
These teams collaborate and seamlessly work together to accomplish a goal. Within a team they may use their internal tools to accomplish their task. These tools are exposed via a MCP server (FastMCP). Each team can have their own set of tools or use tools exposed via MCP that they need.
|
| 34 |
+
|
| 35 |
+
The project highlights the interoperability between A2A protocol and MCP protocol which serves very different purpose but can work together to achieve a goal.
|
| 36 |
+
|
| 37 |
+
## Architecture
|
| 38 |
+
The application features a software development pipeline with a host agent that routes requests to the appropriate specialized agent:
|
| 39 |
+
|
| 40 |
+
* **Host Agent** *(Python, Google ADK, A2A Python SDK)*: Acts as the central orchestrator for software development, dynamically determining which agent to send a request to based on the task at hand.
|
| 41 |
+
* **Requirement Gathering Agent** *(Python, Google ADK, A2A Python SDK, FASTMCP)*: Receives a high-level requirement from the user and creates a detailed content outline.Clarifies any questions with the user to get a detailed understanding of the business case and suggest appropriate recommendations for the goal. It does not assume anything and the high level detailed requirement has to be approved by the user before it is finalized.
|
| 42 |
+
* **Project Planning Agent** *(Python, Google ADK, A2A Python SDK, FASTMCP)*: Take the high level finalized requirement and converts it into managable `sprints`. This is necessary as we can track the progress better and not overwhelm our `Software Development Agent` with too much information.
|
| 43 |
+
* **Software Development Agent** *(Python, Google ADK, A2A Python SDK, FASTMCP)*: This is the agent that does the development of the software. It not only develops the software but also validates it and test it before approving it. It moves one `sprint` at a time. Once a sprint is approved by the user, only then it moves to the next `sprint`. This helps to keep the Human-In-The-Loop so they know the progress that is being made and can suggest any improvements while the development is done rather than at the end.
|
| 44 |
+
|
| 45 |
+
Apart from the above `agents` there is also a **Policy Enforcer** which acts as a guard between the user and the system. Anything that comes from the user and any response that goes to the user is sanitized by the `Policy Enforcer`. This is to ensure safety and compliance that is typical in a enterprise setting.
|
| 46 |
+
|
| 47 |
+
We have used a MCP server using `FASTMCP` server which uses `STDIO` protocol for communication. This module needs to be installed as a part of the installation process. `GRADIO` is used as the frontend to communicate with the system.
|
| 48 |
+
|
| 49 |
+
Logging is implemented for all the agents and the server. You can find the logs in the project execution directory named as `requirement_gathering.log` , `software_development.log` and `project_planning.log`. Currently the logging is at INFO level and you can find all the tool call, tool response and LLM response in the logs.
|
| 50 |
+
|
| 51 |
+
Once the project is complete the user can download it. It will all the instrctions to run the code along with the test cases.
|
| 52 |
+
|
| 53 |
+

|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
## App UI
|
| 57 |
+
|
| 58 |
+

|
| 59 |
+
|
| 60 |
+
|
| 61 |
+
---
|
| 62 |
+
|
| 63 |
+
## 🚀 **DEMO**
|
| 64 |
+
|
| 65 |
+
### **Option 1: Demo (Recommended)**
|
| 66 |
+
👉 **[Open HuggingFace Space](https://huggingface.co/spaces/MCP-1st-Birthday/CODERAMA)**
|
| 67 |
+
|
| 68 |
+
1. Fill in all the details in the left panel
|
| 69 |
+
2. Chat with the Agent. Assign it a project like `Create me an application to calculate factorial of a number`
|
| 70 |
+
3. Watch it in action
|
| 71 |
+
|
| 72 |
+
## 🎬 **Demo Video**
|
| 73 |
+
|
| 74 |
+
### **[▶️ Watch Full Demo (2 minutes)](https://youtube.com/shorts/XYZ)**
|
| 75 |
+
|
| 76 |
+
|
| 77 |
+
## Setup and Deployment
|
| 78 |
+
|
| 79 |
+
### Prerequisites
|
| 80 |
+
|
| 81 |
+
Before running the application locally, ensure you have the following installed:
|
| 82 |
+
|
| 83 |
+
1. **uv:** The Python package management tool used in this project. Follow the installation guide: [https://docs.astral.sh/uv/getting-started/installation/](https://docs.astral.sh/uv/getting-started/installation/)
|
| 84 |
+
2. **python 3.10** Python 3.10+ is required.
|
| 85 |
+
3. **Docker** Optional but highly recommended.
|
| 86 |
+
|
| 87 |
+
### **Installation:**
|
| 88 |
+
|
| 89 |
+
```bash
|
| 90 |
+
# 1. Clone repository
|
| 91 |
+
git clone https://github.com/debasisdwivedy/Coderama.git
|
| 92 |
+
cd Coderama
|
| 93 |
+
|
| 94 |
+
# 2. Create virtual environment
|
| 95 |
+
uv venv --python 3.10
|
| 96 |
+
|
| 97 |
+
# 3. Activate environment
|
| 98 |
+
# Windows PowerShell:
|
| 99 |
+
.venv\Scripts\Activate.ps1
|
| 100 |
+
# Windows CMD:
|
| 101 |
+
.venv\Scripts\activate.bat
|
| 102 |
+
# macOS/Linux:
|
| 103 |
+
source .venv/bin/activate
|
| 104 |
+
|
| 105 |
+
# 4. Install dependencies
|
| 106 |
+
uv pip install -r requirements.txt
|
| 107 |
+
|
| 108 |
+
# 5. Run app
|
| 109 |
+
uv run .
|
| 110 |
+
```
|
| 111 |
+
---
|
| 112 |
+
|
| 113 |
+
## ✅ **Hackathon Submission Checklist**
|
| 114 |
+
|
| 115 |
+
- [x] README with `mcp-in-action-track-xx` tag
|
| 116 |
+
- [x] 5 functional MCP tools
|
| 117 |
+
- [x] Gradio 6.0 integration
|
| 118 |
+
- [x] X social media post
|
| 119 |
+
- [x] Deploy to HuggingFace Spaces
|
| 120 |
+
- [x] Add screenshots to this README
|
| 121 |
+
- [x] Record 2-minute demo video
|
| 122 |
+
- [x] Update video link above
|
| 123 |
+
|
| 124 |
+
**Status:**
|
| 125 |
+
- ✅ All submission requirements completed
|
| 126 |
+
- ✅ Live on HuggingFace Spaces
|
| 127 |
+
- ✅ Demo video published
|
| 128 |
+
|
| 129 |
+
|
| 130 |
+
---
|
| 131 |
+
|
| 132 |
+
## 📜 **License**
|
| 133 |
+
|
| 134 |
+
MIT License - see [LICENSE](LICENSE) for details.
|
| 135 |
+
|
| 136 |
+
**TL;DR:** Free for personal, commercial, government use. Attribution appreciated but not required.
|
app.py
CHANGED
|
@@ -124,7 +124,7 @@ def zip_and_download():
|
|
| 124 |
temp_dir = tempfile.mkdtemp()
|
| 125 |
zip_path = os.path.join(temp_dir, ZIP_NAME)
|
| 126 |
|
| 127 |
-
if not os.path.exists(FOLDER_TO_ZIP):
|
| 128 |
raise gr.Error("WORKSPACE Folder does not exist!")
|
| 129 |
|
| 130 |
# Create ZIP archive
|
|
|
|
| 124 |
temp_dir = tempfile.mkdtemp()
|
| 125 |
zip_path = os.path.join(temp_dir, ZIP_NAME)
|
| 126 |
|
| 127 |
+
if FOLDER_TO_ZIP is None or not os.path.exists(FOLDER_TO_ZIP):
|
| 128 |
raise gr.Error("WORKSPACE Folder does not exist!")
|
| 129 |
|
| 130 |
# Create ZIP archive
|
static/Architecture.png
ADDED
|
Git LFS Details
|
static/UI.png
ADDED
|
Git LFS Details
|