import gradio as gr import torch from transformers import AutoModelForCausalLM, AutoTokenizer from peft import PeftModel # Configuración base_model_id = "unsloth/gemma-2-2b-bnb-4bit" adapter_id = "cochinoraptor/bloggon-ads-lora" # Cargar el modelo base y el adaptador LoRA print("Cargando modelo base...") base_model = AutoModelForCausalLM.from_pretrained( base_model_id, device_map="auto", torch_dtype=torch.float16 ) print("Cargando tokenizador...") tokenizer = AutoTokenizer.from_pretrained(base_model_id) print("Aplicando adaptador LoRA...") model = PeftModel.from_pretrained(base_model, adapter_id) model.eval() def generate_blog(topic, temperature=0.7, max_tokens=400): prompt = f"Escribe un blog sobre {topic}:\n\nBlog:" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) with torch.no_grad(): outputs = model.generate( **inputs, max_new_tokens=int(max_tokens), temperature=float(temperature), do_sample=True, top_p=0.95, repetition_penalty=1.1 ) response = tokenizer.decode(outputs[0], skip_special_tokens=True) # Limpiar la respuesta para mostrar solo el blog if "Blog:" in response: response = response.split("Blog:")[-1].strip() return response # Interfaz Gradio iface = gr.Interface( fn=generate_blog, inputs=[ gr.Textbox(label="Tema del blog", placeholder="Ejemplo: inteligencia artificial, viajes, marketing..."), gr.Slider(label="Creatividad (temperature)", minimum=0.1, maximum=1.5, value=0.7, step=0.1), gr.Slider(label="Longitud (tokens)", minimum=100, maximum=800, value=400, step=50) ], outputs=gr.Textbox(label="Blog generado", lines=20), title="Bloggon Pet - Generador de Blogs con IA", description="Ingresa un tema y la IA generará un blog completo para ti." ) iface.launch()