root
feat: real WordPress/Android/React/FastAPI/ReactNative knowledge injection into LLM prompts
7fab749 | import os | |
| from typing import Dict, Any, List | |
| from backend.builder.engine import AutonomousCodeBuilder | |
| from backend.models.gateway import model_gateway, DEFAULT_MODEL | |
| from backend.tools.knowledge_loader import build_prompt_with_knowledge | |
| class AIBuilderService: | |
| def __init__(self, workspace_root: str = "."): | |
| self.builder = AutonomousCodeBuilder(workspace_root=workspace_root) | |
| def generate_project( | |
| self, | |
| prompt: str, | |
| template: str = "fastapi-react", | |
| ) -> Dict[str, Any]: | |
| """ | |
| Generate a production project scaffold and write it to disk. | |
| (Kept template-based: multi-file scaffolding is a structural | |
| operation, not a single free-text generation.) | |
| """ | |
| files: Dict[str, str] = { | |
| "README.md": f"""# Generated Project | |
| Prompt: | |
| {prompt} | |
| """, | |
| ".gitignore": """__pycache__/ | |
| *.pyc | |
| .env | |
| node_modules/ | |
| dist/ | |
| build/ | |
| """, | |
| } | |
| if template == "fastapi-react": | |
| files.update( | |
| { | |
| "backend/main.py": """from fastapi import FastAPI | |
| app = FastAPI(title="Generated API") | |
| @app.get("/") | |
| async def root(): | |
| return {"status": "ok"} | |
| """, | |
| "backend/requirements.txt": """fastapi | |
| uvicorn | |
| """, | |
| "frontend/package.json": """{ | |
| "name": "generated-app", | |
| "private": true, | |
| "version": "1.0.0" | |
| } | |
| """, | |
| "frontend/src/main.tsx": """export default function App() { | |
| return <h1>Generated Project</h1>; | |
| } | |
| """, | |
| } | |
| ) | |
| created_files = self.builder.generate_project(files) | |
| return { | |
| "status": "success", | |
| "prompt": prompt, | |
| "template": template, | |
| "generated_files": created_files, | |
| "file_count": len(created_files), | |
| } | |
| async def generate_component( | |
| self, | |
| name: str, | |
| description: str, | |
| framework: str = "react", | |
| ) -> Dict[str, Any]: | |
| """Generate a real UI component via LLM.""" | |
| filename = ( | |
| f"components/{name.lower()}.tsx" | |
| if framework == "react" | |
| else f"components/{name.lower()}.py" | |
| ) | |
| prompt = ( | |
| f"Write a single {framework} component named {name}. " | |
| f"Description: {description}. " | |
| f"Output ONLY the code, no explanation, no markdown fences." | |
| ) | |
| result = await model_gateway.generate(DEFAULT_MODEL, prompt) | |
| return { | |
| "status": "success", | |
| "component_name": name, | |
| "framework": framework, | |
| "filepath": filename, | |
| "code": result["text"], | |
| "provider": result["provider"], | |
| "model": result["model"], | |
| } | |
| async def generate_api( | |
| self, | |
| endpoint_path: str, | |
| method: str, | |
| description: str, | |
| ) -> Dict[str, Any]: | |
| """Generate a real FastAPI endpoint via LLM.""" | |
| base_prompt = f"Write a production FastAPI route for {method.upper()} {endpoint_path}. Description: {description}. Assume app = FastAPI() exists. Include all imports." | |
| prompt = build_prompt_with_knowledge(base_prompt, f"fastapi {description}") | |
| result = await model_gateway.generate(DEFAULT_MODEL, prompt) | |
| return { | |
| "status": "success", | |
| "endpoint": endpoint_path, | |
| "method": method.upper(), | |
| "code": result["text"], | |
| "provider": result["provider"], | |
| "model": result["model"], | |
| } | |
| async def generate_schema( | |
| self, | |
| table_name: str, | |
| fields: List[Dict[str, str]], | |
| ) -> Dict[str, Any]: | |
| """Generate a real Pydantic model via LLM.""" | |
| model_name = "".join(word.capitalize() for word in table_name.split("_")) | |
| field_desc = ", ".join(f"{f['name']}: {f['type']}" for f in fields) | |
| base_prompt = f"Write a production Pydantic BaseModel named {model_name}Base with fields: {field_desc}. Include SQLAlchemy model too." | |
| prompt = build_prompt_with_knowledge(base_prompt, "fastapi pydantic sqlalchemy") | |
| result = await model_gateway.generate(DEFAULT_MODEL, prompt) | |
| return { | |
| "status": "success", | |
| "table_name": table_name, | |
| "pydantic_model": result["text"], | |
| "provider": result["provider"], | |
| "model": result["model"], | |
| } | |
| def generate_pipeline( | |
| self, | |
| target: str = "docker", | |
| ) -> Dict[str, Any]: | |
| """Kept template-based: deployment configs need to be exact/reliable, | |
| not creatively generated.""" | |
| if target == "docker": | |
| content = """FROM python:3.11-slim | |
| WORKDIR /app | |
| COPY requirements.txt . | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| COPY . . | |
| CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "8000"] | |
| """ | |
| filename = "Dockerfile" | |
| else: | |
| content = """#!/usr/bin/env bash | |
| echo "Building package..." | |
| """ | |
| filename = "deploy.sh" | |
| return { | |
| "status": "success", | |
| "target": target, | |
| "filename": filename, | |
| "content": content, | |
| } | |