Upload 18 files
Browse files- app.py +3 -1
- jade/webdev.py +34 -5
app.py
CHANGED
|
@@ -143,6 +143,7 @@ class WebDevRequest(BaseModel):
|
|
| 143 |
prompt: str
|
| 144 |
existing_code: str | None = None
|
| 145 |
mode: str = "html" # "html" or "react"
|
|
|
|
| 146 |
|
| 147 |
@app.post("/webdev/generate")
|
| 148 |
async def handle_webdev(request: WebDevRequest):
|
|
@@ -150,7 +151,8 @@ async def handle_webdev(request: WebDevRequest):
|
|
| 150 |
result = webdev_agent.generate(
|
| 151 |
prompt=request.prompt,
|
| 152 |
refine_code=request.existing_code,
|
| 153 |
-
mode=request.mode
|
|
|
|
| 154 |
)
|
| 155 |
return result
|
| 156 |
except Exception as e:
|
|
|
|
| 143 |
prompt: str
|
| 144 |
existing_code: str | None = None
|
| 145 |
mode: str = "html" # "html" or "react"
|
| 146 |
+
error_message: str | None = None # For agentic error fixing
|
| 147 |
|
| 148 |
@app.post("/webdev/generate")
|
| 149 |
async def handle_webdev(request: WebDevRequest):
|
|
|
|
| 151 |
result = webdev_agent.generate(
|
| 152 |
prompt=request.prompt,
|
| 153 |
refine_code=request.existing_code,
|
| 154 |
+
mode=request.mode,
|
| 155 |
+
error_message=request.error_message
|
| 156 |
)
|
| 157 |
return result
|
| 158 |
except Exception as e:
|
jade/webdev.py
CHANGED
|
@@ -97,7 +97,7 @@ DESIGN:
|
|
| 97 |
|
| 98 |
OUTPUT: Only the JSON object, nothing else."""
|
| 99 |
|
| 100 |
-
def generate(self, prompt: str, refine_code: str = None, mode: str = "html") -> dict:
|
| 101 |
"""
|
| 102 |
Generate or refine code based on prompt
|
| 103 |
|
|
@@ -105,6 +105,7 @@ OUTPUT: Only the JSON object, nothing else."""
|
|
| 105 |
prompt: User's description
|
| 106 |
refine_code: Optional existing code to refine
|
| 107 |
mode: "html" for HTML generation, "react" for React/Sandpack
|
|
|
|
| 108 |
|
| 109 |
Returns:
|
| 110 |
dict with code/files and success status
|
|
@@ -113,7 +114,26 @@ OUTPUT: Only the JSON object, nothing else."""
|
|
| 113 |
system_prompt = self.react_prompt if mode == "react" else self.html_prompt
|
| 114 |
|
| 115 |
if mode == "react":
|
| 116 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 117 |
user_message = f"""Current files:
|
| 118 |
{refine_code}
|
| 119 |
|
|
@@ -129,7 +149,7 @@ Update the React app based on the feedback. Output the complete updated JSON."""
|
|
| 129 |
{"role": "system", "content": system_prompt},
|
| 130 |
{"role": "user", "content": user_message}
|
| 131 |
],
|
| 132 |
-
temperature=0.7,
|
| 133 |
max_tokens=16000
|
| 134 |
)
|
| 135 |
|
|
@@ -162,7 +182,16 @@ Update the React app based on the feedback. Output the complete updated JSON."""
|
|
| 162 |
return {"success": False, "error": "Failed to parse React code"}
|
| 163 |
|
| 164 |
else: # HTML mode
|
| 165 |
-
if refine_code:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 166 |
user_message = f"""Current code:
|
| 167 |
```html
|
| 168 |
{refine_code}
|
|
@@ -180,7 +209,7 @@ Update the code based on the feedback. Output the complete updated HTML file."""
|
|
| 180 |
{"role": "system", "content": system_prompt},
|
| 181 |
{"role": "user", "content": user_message}
|
| 182 |
],
|
| 183 |
-
temperature=0.7,
|
| 184 |
max_tokens=8000
|
| 185 |
)
|
| 186 |
|
|
|
|
| 97 |
|
| 98 |
OUTPUT: Only the JSON object, nothing else."""
|
| 99 |
|
| 100 |
+
def generate(self, prompt: str, refine_code: str = None, mode: str = "html", error_message: str = None) -> dict:
|
| 101 |
"""
|
| 102 |
Generate or refine code based on prompt
|
| 103 |
|
|
|
|
| 105 |
prompt: User's description
|
| 106 |
refine_code: Optional existing code to refine
|
| 107 |
mode: "html" for HTML generation, "react" for React/Sandpack
|
| 108 |
+
error_message: If provided, fix this error in the code
|
| 109 |
|
| 110 |
Returns:
|
| 111 |
dict with code/files and success status
|
|
|
|
| 114 |
system_prompt = self.react_prompt if mode == "react" else self.html_prompt
|
| 115 |
|
| 116 |
if mode == "react":
|
| 117 |
+
# Error fix mode - agentic correction
|
| 118 |
+
if error_message and refine_code:
|
| 119 |
+
user_message = f"""The following React code has a compilation error.
|
| 120 |
+
|
| 121 |
+
ERROR MESSAGE:
|
| 122 |
+
{error_message}
|
| 123 |
+
|
| 124 |
+
CURRENT CODE (JSON):
|
| 125 |
+
{refine_code}
|
| 126 |
+
|
| 127 |
+
Fix the error and return the corrected JSON. Keep all the functionality intact.
|
| 128 |
+
Common fixes:
|
| 129 |
+
- Remove TypeScript syntax (no interfaces, type annotations)
|
| 130 |
+
- Fix JSX syntax errors
|
| 131 |
+
- Ensure all components are properly defined
|
| 132 |
+
- Use simple function components
|
| 133 |
+
|
| 134 |
+
Return ONLY the fixed JSON object."""
|
| 135 |
+
|
| 136 |
+
elif refine_code:
|
| 137 |
user_message = f"""Current files:
|
| 138 |
{refine_code}
|
| 139 |
|
|
|
|
| 149 |
{"role": "system", "content": system_prompt},
|
| 150 |
{"role": "user", "content": user_message}
|
| 151 |
],
|
| 152 |
+
temperature=0.5 if error_message else 0.7, # Lower temp for fixes
|
| 153 |
max_tokens=16000
|
| 154 |
)
|
| 155 |
|
|
|
|
| 182 |
return {"success": False, "error": "Failed to parse React code"}
|
| 183 |
|
| 184 |
else: # HTML mode
|
| 185 |
+
if error_message and refine_code:
|
| 186 |
+
user_message = f"""Fix this error in the HTML:
|
| 187 |
+
|
| 188 |
+
ERROR: {error_message}
|
| 189 |
+
|
| 190 |
+
CODE:
|
| 191 |
+
{refine_code}
|
| 192 |
+
|
| 193 |
+
Return the fixed HTML code."""
|
| 194 |
+
elif refine_code:
|
| 195 |
user_message = f"""Current code:
|
| 196 |
```html
|
| 197 |
{refine_code}
|
|
|
|
| 209 |
{"role": "system", "content": system_prompt},
|
| 210 |
{"role": "user", "content": user_message}
|
| 211 |
],
|
| 212 |
+
temperature=0.5 if error_message else 0.7,
|
| 213 |
max_tokens=8000
|
| 214 |
)
|
| 215 |
|