Skip to content

Commit d8f570f

Browse files
authored
CollabForge
1 parent 2127afb commit d8f570f

File tree

1,628 files changed

+31225
-129
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,628 files changed

+31225
-129
lines changed

.gitignore

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,4 +191,9 @@ cython_debug/
191191
# exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
192192
# refer to https://docs.cursor.com/context/ignore-files
193193
.cursorignore
194-
.cursorindexingignore
194+
.cursorindexingignore
195+
196+
# .gitignore
197+
backend/.secrets/
198+
backend/.secrets/
199+
.env
File renamed without changes.

backend/agents/specialized_agents/frontend_writer.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,28 @@
44
from typing import Dict
55
from agents.specialized_agents.planner_agent import PlannerAgent
66

7+
#this is gemini embedding to generate code using Gemini Pro
8+
from google.generativeai import configure, GenerativeModel
9+
import os
10+
11+
configure(api_key=os.getenv("GEMINI_API_KEY"))
12+
13+
model = GenerativeModel("gemini-pro")
14+
15+
def generate_ui_code(prompt):
16+
response = model.generate_content(f"Generate UI code for: {prompt}")
17+
return response.text
18+
#this is updated FrontendWriterAgent to use Gemini Pro for code generation
719
class FrontendWriterAgent(Agent):
820
def __init__(self):
921
super().__init__(name="FrontendWriterAgent")
1022
self.planner = PlannerAgent()
1123

12-
1324
def run(self, user_prompt: str) -> dict:
1425
plan = self.planner.run(user_prompt)
15-
16-
# Simulate frontend code generation from plan
17-
frontend_code = f"// Generated UI for {plan['project_name']}\n"
18-
for feature in plan["features"]:
19-
frontend_code += f"<section>{feature}</section>\n"
20-
26+
frontend_code = generate_ui_code(user_prompt)
2127
return {
2228
"project_name": plan["project_name"],
2329
"tech_stack": plan["tech_stack"]["frontend"],
2430
"generated_ui": frontend_code
25-
}
26-
31+
}

backend/api/__init__.py

Whitespace-only changes.

backend/api/v2/__init__.py

Whitespace-only changes.
Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,39 @@
1+
import sys
2+
import os
3+
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
4+
15
from fastapi import APIRouter, Request
2-
from agents.collaborative_webapp_generator import CollaborativeWebAppGenerator
6+
from pydantic import BaseModel
7+
from typing import Dict
8+
from gemini_writer import generate_webapp_code
9+
10+
11+
12+
# make sure this function exists
313

414
router = APIRouter()
5-
generator = CollaborativeWebAppGenerator()
15+
16+
class PromptInput(BaseModel):
17+
user_prompt: str
618

719
@router.post("/generate-plan")
8-
async def generate_plan(request: Request):
9-
body = await request.json()
10-
user_prompt = body.get("user_prompt", "")
11-
result = generator.generate(user_prompt)
12-
return result
20+
async def generate_plan(input: PromptInput) -> Dict:
21+
prompt = input.user_prompt
22+
23+
# Generate frontend UI with Gemini
24+
generated_ui = await generate_webapp_code(prompt)
25+
26+
return {
27+
"plan": {
28+
"project_name": "AI App Generator",
29+
"features": ["AI-assisted planning", "Web UI preview"],
30+
"tech_stack": {
31+
"frontend": "React + Tailwind",
32+
"backend": "FastAPI",
33+
"database": "None"
34+
}
35+
},
36+
"frontend": {
37+
"generated_ui": generated_ui
38+
}
39+
}

backend/gemini_writer.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import os
2+
import json
3+
import re
4+
from dotenv import load_dotenv
5+
import vertexai
6+
from vertexai.generative_models import GenerativeModel
7+
8+
async def generate_webapp_code(prompt: str) -> str:
9+
model = GenerativeModel("gemini-2.0-flash")
10+
chat = model.start_chat()
11+
response = chat.send_message(
12+
f"Generate minimal HTML+TailwindCSS UI for: {prompt}. Wrap all in <html>..."
13+
)
14+
return response.text
15+
16+
# Load environment variables
17+
load_dotenv()
18+
19+
PROJECT_ID = os.getenv("VERTEX_PROJECT_ID")
20+
LOCATION = os.getenv("VERTEX_LOCATION", "us-central1")
21+
MODEL_ID = os.getenv("VERTEX_MODEL_ID", "gemini-2.0-flash")
22+
23+
def init_vertex():
24+
vertexai.init(project=PROJECT_ID, location=LOCATION)
25+
26+
def clean_markdown_json(text: str) -> str:
27+
"""Strip triple backticks and optional 'json' language tag from response."""
28+
return re.sub(r"^```json\s*|```$", "", text.strip(), flags=re.IGNORECASE | re.MULTILINE)
29+
30+
def generate_webapp_plan(user_prompt: str) -> dict:
31+
init_vertex()
32+
model = GenerativeModel(MODEL_ID)
33+
34+
system_prompt = """
35+
You are a multi-agent AI system designed to help users create full-stack web applications.
36+
Given a prompt like 'to-do list app', generate:
37+
38+
1. A project name (kebab-case)
39+
2. A list of 4–6 features
40+
3. A recommended tech stack: frontend, backend, database
41+
4. Basic frontend UI layout in HTML (placeholder elements)
42+
43+
Respond in this JSON format:
44+
{
45+
"plan": {
46+
"project_name": "...",
47+
"features": ["...", "..."],
48+
"tech_stack": {
49+
"frontend": "...",
50+
"backend": "...",
51+
"database": "..."
52+
}
53+
},
54+
"frontend": {
55+
"generated_ui": "...HTML output..."
56+
}
57+
}
58+
"""
59+
60+
try:
61+
response = model.generate_content(f"{system_prompt}\n\nUser prompt: {user_prompt}")
62+
cleaned = clean_markdown_json(response.text)
63+
return json.loads(cleaned)
64+
except Exception as e:
65+
raise RuntimeError(f"Error generating webapp plan: {e}")

backend/main.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,33 @@
22
CollabForge Platform - Main FastAPI Application
33
AI-Powered Collaborative Web Application Generator
44
"""
5-
65
from fastapi import FastAPI, HTTPException
76
from fastapi.middleware.cors import CORSMiddleware
87
from fastapi.responses import JSONResponse
98
import os
109
from datetime import datetime
1110
from api.v2 import collaborative_generation
11+
from dotenv import load_dotenv
12+
import vertexai
13+
14+
15+
#from fastapi import FastAPI, HTTPException
16+
#from fastapi.middleware.cors import CORSMiddleware
17+
#from fastapi.responses import JSONResponse
18+
#import os
19+
#from datetime import datetime
20+
#from api.v2 import collaborative_generation
21+
#app.include_router(collaborative_generation.router, prefix="/api/v2")
22+
23+
#this is code to use Gemini Pro for code generation
24+
from dotenv import load_dotenv
25+
load_dotenv()
26+
27+
import vertexai
28+
import os
29+
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = ".secrets/service-account.json"
30+
vertexai.init(project="collabforge-adk", location="us-central1")
31+
1232

1333
# Initialize FastAPI app
1434
app = FastAPI(

backend/node_modules/.bin/autoprefixer

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/node_modules/.bin/browserslist

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)