VisionTechSpace / app.py
devByByron's picture
Update app.py
587feee verified
Raw
History Blame Contribute Delete
4.5 kB
# app.py - Improved Custom Content Generator
import gradio as gr
from transformers import pipeline, set_seed, AutoTokenizer, AutoModelForCausalLM
from diffusers import StableDiffusionPipeline
import torch
# ---------- CONFIG ----------
TEXT_MODEL = "openai-community/gpt2" # Text model
CODE_MODEL = "Salesforce/codegen-350M-multi" # Better for code
IMAGE_MODEL = "stabilityai/stable-diffusion-2-1" # Higher quality images
SEED = 42
# ----------------------------
# Load text generator
text_tokenizer = AutoTokenizer.from_pretrained(TEXT_MODEL)
text_model = AutoModelForCausalLM.from_pretrained(TEXT_MODEL)
text_pipe = pipeline("text-generation", model=text_model, tokenizer=text_tokenizer,
device_map="auto" if torch.cuda.is_available() else None)
# Load code generator
code_tokenizer = AutoTokenizer.from_pretrained(CODE_MODEL)
code_model = AutoModelForCausalLM.from_pretrained(CODE_MODEL)
code_pipe = pipeline("text-generation", model=code_model, tokenizer=code_tokenizer,
device_map="auto" if torch.cuda.is_available() else None)
# Load Stable Diffusion
device = "cuda" if torch.cuda.is_available() else "cpu"
try:
sd_pipe = StableDiffusionPipeline.from_pretrained(
IMAGE_MODEL,
torch_dtype=torch.float16 if device == "cuda" else torch.float32
).to(device)
has_sd = True
except Exception as e:
sd_pipe = None
has_sd = False
print("Stable Diffusion not available:", e)
set_seed(SEED)
# ---------- Generation helpers ----------
def generate_text(prompt, max_len=150, temperature=0.7, top_k=50, top_p=0.95, num_return=1):
out = text_pipe(prompt, max_length=max_len, do_sample=True,
temperature=float(temperature), top_k=int(top_k),
top_p=float(top_p), num_return_sequences=int(num_return))
return "\n\n===\n\n".join(o['generated_text'] for o in out)
def generate_image(prompt, steps=35, guidance_scale=8.0, height=768, width=768):
if not has_sd:
return "Stable Diffusion model not loaded."
return sd_pipe(prompt, num_inference_steps=int(steps),
guidance_scale=float(guidance_scale),
height=int(height), width=int(width)).images[0]
def generate_code(prompt, language="Python", max_len=256):
full_prompt = f"# {language} code\n# {prompt}\n"
out = code_pipe(full_prompt, max_length=max_len, do_sample=True,
temperature=0.2, top_k=50, top_p=0.95, num_return_sequences=1)
return out[0]['generated_text']
# ---------- UI ----------
with gr.Blocks(title="Custom Content Generator") as demo:
gr.Markdown("## Custom Content Generator — Text, Image, and Code.")
with gr.Tabs():
with gr.TabItem("Text"):
inp = gr.Textbox(label="Prompt", lines=3)
max_len = gr.Slider(50, 512, value=150, step=10, label="Max length")
temp = gr.Slider(0.0, 1.5, value=0.7, step=0.05, label="Temperature")
top_k = gr.Slider(0, 200, value=50, step=1, label="Top-k")
top_p = gr.Slider(0.0, 1.0, value=0.95, step=0.01, label="Top-p")
out_text = gr.Textbox(label="Generated Text", lines=12)
gr.Button("Generate Text").click(
generate_text, [inp, max_len, temp, top_k, top_p, gr.Number(value=1, visible=False)], out_text
)
with gr.TabItem("Image"):
img_prompt = gr.Textbox(label="Image Prompt", lines=2)
steps = gr.Slider(10, 50, value=35, step=1, label="Steps")
guidance = gr.Slider(1.0, 20.0, value=8.0, step=0.1, label="Guidance scale")
size = gr.Dropdown(choices=["512x512", "768x768"], value="768x768", label="Image size")
img_out = gr.Image(label="Generated Image")
def img_gen(prompt, steps, guidance, size):
w, h = map(int, size.split("x"))
return generate_image(prompt, steps=steps, guidance_scale=guidance, height=h, width=w)
gr.Button("Generate Image").click(img_gen, [img_prompt, steps, guidance, size], img_out)
with gr.TabItem("Code"):
code_prompt = gr.Textbox(label="Describe Code Task", lines=3)
lang = gr.Dropdown(choices=["Python", "JavaScript", "TypeScript", "Java", "C#", "Go"], value="Python")
code_out = gr.Textbox(label="Generated Code", lines=18)
gr.Button("Generate Code").click(generate_code, [code_prompt, lang], code_out)
if __name__ == "__main__":
demo.launch()