File size: 4,500 Bytes
587feee
97b6b06
 
 
 
 
 
587feee
 
 
97b6b06
 
 
587feee
97b6b06
 
587feee
 
97b6b06
587feee
 
 
 
 
 
 
97b6b06
 
587feee
 
 
 
97b6b06
 
 
 
 
 
 
 
 
 
587feee
 
 
 
97b6b06
587feee
97b6b06
587feee
 
 
 
97b6b06
587feee
 
 
 
 
97b6b06
 
587feee
 
 
97b6b06
 
587feee
 
97b6b06
 
 
 
587feee
 
 
97b6b06
 
587feee
 
 
 
97b6b06
 
587feee
97b6b06
587feee
97b6b06
 
587feee
 
97b6b06
587feee
97b6b06
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# 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()