Spaces:
Sleeping
Sleeping
| import os | |
| import math | |
| import gradio as gr | |
| import json | |
| import logging | |
| from datasets import load_dataset, concatenate_datasets #list_datasets, load_from_disk | |
| from transformers import ( | |
| AutoTokenizer, | |
| AutoModelForCausalLM, | |
| DataCollatorForLanguageModeling, | |
| TrainingArguments, | |
| Trainer, | |
| pipeline, | |
| AutoModelForQuestionAnswering, | |
| ) | |
| import evaluate # type: ignore | |
| from huggingface_hub import login | |
| from translate import Translator | |
| from datasets import load_dataset, DownloadConfig | |
| # Modelo base | |
| MODEL_KEY = "EleutherAI/gpt-neo-125M" | |
| tokenizer = AutoTokenizer.from_pretrained(MODEL_KEY) | |
| model = AutoModelForCausalLM.from_pretrained(MODEL_KEY) | |
| generator = pipeline("text-generation", model=model, tokenizer=tokenizer) | |
| # Cargar modelos para Preguntas y Respuestas (QA) | |
| qa_model = AutoModelForQuestionAnswering.from_pretrained("deepset/roberta-base-squad2") | |
| qa_tokenizer = AutoTokenizer.from_pretrained("deepset/roberta-base-squad2") | |
| qa_pipeline = pipeline("question-answering", model=qa_model, tokenizer=qa_tokenizer) | |
| # Agregar más datasets para mejorar las respuestas | |
| context_map = { | |
| "imdb": "Dom: Cine | Estilo: Opinión", | |
| "daily_dialog": "Dom: Conversación | Estilo: Diálogo diario", | |
| "go_emotions": "Dom: Emociones | Estilo: Clasificación emocional", | |
| "wikitext": "Dom: Enciclopedia | Estilo: Conocimiento general", | |
| "math": "Dom: Matemáticas | Estilo: Problema matemático", # Agregar problemas de matemáticas | |
| "empathetic_dialogues": "Dom: Psicología | Estilo: Apoyo emocional", # Para el comportamiento emocional | |
| "math_advanced": "Dom: Matemáticas Avanzadas | Estilo: Trigonometría y Cálculo", # Dataset de matemáticas avanzadas | |
| "programming": "Dom: Programación | Estilo: Resolución de código", # Dataset para programación | |
| "social_sciences": "Dom: Ciencias Sociales | Estilo: Preguntas sobre historia y geografía", # Dataset de sociales | |
| "economics": "Dom: Economía | Estilo: Problemas económicos y teorías", # Dataset de economía | |
| "health": "Dom: Salud | Estilo: Información médica y de salud", # Dataset de salud | |
| } | |
| # Detectar idioma automáticamente | |
| def detect_language(text): | |
| try: | |
| return detect(text) # Detecta el idioma de la entrada | |
| except: | |
| return "en" # Si no se puede detectar, se asume inglés | |
| # Generación de texto (si se solicita un cuento, por ejemplo) | |
| def generate_text(prompt, max_length=100): | |
| output = generator(prompt, max_length=int(max_length), num_return_sequences=1)[0]["generated_text"] | |
| return output | |
| # Preguntas y respuestas basadas en contexto | |
| def answer_question(question, context): | |
| result = qa_pipeline(question=question, context=context) | |
| return result['answer'] | |
| # Traducción | |
| def translate_text(text, lang): | |
| translator = Translator(to_lang=lang) | |
| try: | |
| return translator.translate(text) | |
| except Exception as e: | |
| return f"Error: {str(e)}" | |
| # Selección del contexto y modelo según la solicitud | |
| def process_input(user_input): | |
| # Detectar idioma | |
| detected_lang = detect_language(user_input) | |
| print(f"Idioma detectado: {detected_lang}") | |
| # Si la entrada es una pregunta, usaremos un modelo de Preguntas y Respuestas | |
| if '?' in user_input: | |
| context = "Este es un contexto general. Puedo responder preguntas específicas sobre cine, ciencia, o emociones." | |
| # Identificar tipo de pregunta (matemáticas, programación, etc.) | |
| if "matemática" in user_input.lower() or "cálculo" in user_input.lower() or "trigonometría" in user_input.lower(): | |
| context = "Dom: Matemáticas Avanzadas | Estilo: Trigonometría y Cálculo. Ejemplo: ¿Cuál es la derivada de x^2?" | |
| elif "programación" in user_input.lower(): | |
| context = "Dom: Programación | Estilo: Resolución de código. Ejemplo: ¿Cómo se resuelve un bucle en Python?" | |
| elif "historia" in user_input.lower() or "geografía" in user_input.lower(): | |
| context = "Dom: Ciencias Sociales | Estilo: Preguntas sobre historia y geografía. Ejemplo: ¿Quién fue Sócrates?" | |
| elif "economía" in user_input.lower(): | |
| context = "Dom: Economía | Estilo: Problemas económicos y teorías. Ejemplo: ¿Qué es la inflación?" | |
| elif "salud" in user_input.lower(): | |
| context = "Dom: Salud | Estilo: Información médica y de salud. Ejemplo: ¿Qué es la diabetes?" | |
| answer = answer_question(user_input, context) | |
| return answer | |
| elif "math" in user_input.lower(): | |
| # Si se detecta una pregunta matemática | |
| return "Resolviendo la operación matemática..." | |
| elif "cuento" in user_input.lower(): | |
| # Si el usuario solicita un cuento | |
| prompt = "Había una vez, en un reino lejano..." | |
| return generate_text(prompt, max_length=200) | |
| elif "emoción" in user_input.lower(): | |
| # Si es una solicitud de apoyo emocional | |
| context = "Dom: Psicología | Estilo: Apoyo emocional. ¿Cómo te sientes hoy?" | |
| return generate_text(context + " Estoy aquí para apoyarte", max_length=100) | |
| else: | |
| return "No entiendo la solicitud, por favor intenta preguntar algo más específico." | |
| # Interfaz de Gradio | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# 🧠 MultiDomain Text Generator + Translator") | |
| with gr.Tab("Generar respuestas y contar historias"): | |
| user_input = gr.Textbox(label="Tu pregunta o solicitud", placeholder="Haz una pregunta o pide un cuento...") | |
| output_text = gr.Textbox(label="Respuesta generada") | |
| btn_generate = gr.Button("Generar respuesta o cuento") | |
| btn_generate.click(process_input, inputs=user_input, outputs=output_text) | |
| with gr.Tab("Traducir texto"): | |
| input_text = gr.Textbox(label="Texto a traducir") | |
| lang = gr.Textbox(label="Código de idioma destino", value="en") | |
| output_translation = gr.Textbox(label="Texto traducido") | |
| btn_translate = gr.Button("Traducir") | |
| btn_translate.click(translate_text, inputs=[input_text, lang], outputs=output_translation) | |
| demo.launch() | |