import streamlit as st from transformers import pipeline import json from pathlib import Path import os class FastWebGenerator: def __init__(self): # Load the smallest model possible for quick text completion self.generator = pipeline( 'text-generation', model='distilgpt2', device_map='auto' ) # Load templates self.templates = { "react": { "component": """ import React, { useState, useEffect } from 'react'; const {component_name} = () => { const [data, setData] = useState([]); useEffect(() => { // Fetch data fetchData(); }, []); const fetchData = async () => { try { const response = await fetch('/api/data'); const jsonData = await response.json(); setData(jsonData); } catch (error) { console.error('Error:', error); } }; return (

{title}

{content}
); }; export default {component_name}; """, "api": """ async function fetchData() { const response = await fetch('/api/endpoint'); const data = await response.json(); return data; } async function postData(data) { const response = await fetch('/api/endpoint', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(data), }); return response.json(); } """ }, "fastapi": { "main": """ from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import List, Optional import uvicorn app = FastAPI() class ItemModel(BaseModel): id: Optional[int] name: str description: Optional[str] @app.get("/") async def root(): return {"message": "API is running"} @app.get("/items") async def get_items(): return {"items": items} @app.post("/items") async def create_item(item: ItemModel): items.append(item) return item if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000) """, "crud": """ @app.get("/items/{item_id}") async def get_item(item_id: int): if item_id < 0 or item_id >= len(items): raise HTTPException(status_code=404, detail="Item not found") return items[item_id] @app.put("/items/{item_id}") async def update_item(item_id: int, item: ItemModel): if item_id < 0 or item_id >= len(items): raise HTTPException(status_code=404, detail="Item not found") items[item_id] = item return item @app.delete("/items/{item_id}") async def delete_item(item_id: int): if item_id < 0 or item_id >= len(items): raise HTTPException(status_code=404, detail="Item not found") item = items.pop(item_id) return item """ }, "mongodb": """ from motor.motor_asyncio import AsyncIOMotorClient client = AsyncIOMotorClient('mongodb://localhost:27017') db = client.database_name async def get_all(): cursor = db.collection.find({}) return await cursor.to_list(length=100) async def get_one(id: str): return await db.collection.find_one({"_id": id}) async def create_one(data: dict): result = await db.collection.insert_one(data) return result.inserted_id async def update_one(id: str, data: dict): result = await db.collection.update_one( {"_id": id}, {"$set": data} ) return result.modified_count async def delete_one(id: str): result = await db.collection.delete_one({"_id": id}) return result.deleted_count """ } def customize_code(self, template, params): # Quick text customization using the model prompt = f"Customize this code: {template}\nWith these parameters: {params}\n" result = self.generator(prompt, max_length=100, num_return_sequences=1)[0]['generated_text'] return result def generate_project(self, specs): frontend_code = self.templates["react"]["component"].replace( "{component_name}", specs["component_name"] ).replace( "{title}", specs["title"] ).replace( "{content}", specs["content"] ) backend_code = self.templates["fastapi"]["main"] if specs.get("crud", False): backend_code += self.templates["fastapi"]["crud"] db_code = self.templates["mongodb"] if specs["database"] == "MongoDB" else "" return { "frontend": frontend_code, "backend": backend_code, "database": db_code } def main(): st.set_page_config(page_title="Fast Code Generator", layout="wide") if 'generator' not in st.session_state: with st.spinner("Loading generator..."): st.session_state.generator = FastWebGenerator() st.title("⚡ Fast Code Generator") with st.form("generate_form"): col1, col2 = st.columns(2) with col1: component_name = st.text_input("Component Name", "MyComponent") title = st.text_input("Title", "My App") content = st.text_area("Content", "

Your content here

") with col2: database = st.selectbox("Database", ["MongoDB", "PostgreSQL"]) add_crud = st.checkbox("Add CRUD Operations", value=True) add_auth = st.checkbox("Add Authentication", value=False) if st.form_submit_button("Generate"): specs = { "component_name": component_name, "title": title, "content": content, "database": database, "crud": add_crud, "auth": add_auth } result = st.session_state.generator.generate_project(specs) # Display results tabs = st.tabs(["Frontend", "Backend", "Database"]) with tabs[0]: st.code(result["frontend"], language="javascript") with tabs[1]: st.code(result["backend"], language="python") with tabs[2]: st.code(result["database"], language="python") # Add download button combined_code = f""" // Frontend Code {result['frontend']} // Backend Code {result['backend']} // Database Code {result['database']} """ st.download_button( "Download Code", combined_code, file_name="generated_code.txt", mime="text/plain" ) if __name__ == "__main__": main()