File size: 6,090 Bytes
c0a5683
 
a53144b
c0a5683
 
 
 
 
 
 
 
 
 
b84ed06
c0a5683
 
 
49441eb
c0a5683
 
 
d136349
49441eb
 
 
 
 
d136349
0fa35ce
 
 
 
 
 
49441eb
 
 
 
 
0fa35ce
 
fd52d45
 
 
 
 
49441eb
 
0fa35ce
 
 
 
 
 
49441eb
0fa35ce
fd52d45
49441eb
 
 
0fa35ce
 
 
 
 
49441eb
 
 
 
 
 
 
 
0fa35ce
 
 
 
 
 
 
 
 
fd52d45
 
 
 
 
 
 
 
 
 
 
 
0fa35ce
 
 
 
 
 
 
 
fd52d45
0fa35ce
 
 
fd52d45
0fa35ce
 
 
 
49441eb
 
 
0fa35ce
 
 
 
 
49441eb
 
 
 
 
 
 
d136349
 
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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()