Spaces:
Running
Running
| import gradio as gr | |
| import torch | |
| from transformers import pipeline | |
| # 1. Configuraci贸n del modelo | |
| model_id = "Fifthoply/AyudaAlan-0.1" | |
| print(f"Cargando {model_id} en CPU...") | |
| pipe = pipeline( | |
| "text-generation", | |
| model=model_id, | |
| dtype=torch.float32, | |
| device_map="cpu" | |
| ) | |
| def chat_responder(message, history): | |
| prompt = "<|im_start|>system\nEres un asistente breve.<|im_end|>\n" | |
| # Procesar historial con detecci贸n de formato autom谩tica | |
| for msg in history: | |
| # Caso 1: Formato de diccionario {"role": "...", "content": "..."} | |
| if isinstance(msg, dict): | |
| role = msg.get("role", "user") | |
| content = msg.get("content", "") | |
| prompt += f"<|im_start|>{role}\n{content}<|im_end|>\n" | |
| # Caso 2: Formato de lista cl谩sica [user, assistant] | |
| elif isinstance(msg, (list, tuple)): | |
| u, a = msg | |
| prompt += f"<|im_start|>user\n{u}<|im_end|>\n<|im_start|>assistant\n{a}<|im_end|>\n" | |
| prompt += f"<|im_start|>user\n{message}<|im_end|>\n<|im_start|>assistant\n" | |
| # Generaci贸n | |
| outputs = pipe( | |
| prompt, | |
| max_new_tokens=25, | |
| do_sample=False, | |
| pad_token_id=pipe.tokenizer.pad_token_id, | |
| eos_token_id=pipe.tokenizer.eos_token_id | |
| ) | |
| # Extraer la respuesta (usando el 铆ndice [0] para asegurar el acceso al texto) | |
| generated_text = outputs[0]['generated_text'] | |
| respuesta = generated_text.split("<|im_start|>assistant\n")[-1].split("<|im_end|>")[0].strip() | |
| return respuesta | |
| # 2. Interfaz de Usuario (Sin argumentos problem谩ticos) | |
| demo = gr.ChatInterface( | |
| fn=chat_responder, | |
| title="Ayuda Alan 馃Ε", | |
| description="Hazme una pregunta y te dir茅 c贸mo se hace.", | |
| examples=["驴C贸mo se toma agua?", "驴C贸mo se salta?"], | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |