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()