Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1,30 +1,3 @@
|
|
1 |
-
import os
|
2 |
-
import subprocess
|
3 |
-
|
4 |
-
# Ensure SentencePiece and Accelerate are installed
|
5 |
-
try:
|
6 |
-
import sentencepiece
|
7 |
-
except ImportError:
|
8 |
-
subprocess.check_call([os.sys.executable, "-m", "pip", "install", "sentencepiece"])
|
9 |
-
|
10 |
-
try:
|
11 |
-
import accelerate
|
12 |
-
except ImportError:
|
13 |
-
subprocess.check_call([os.sys.executable, "-m", "pip", "install", "accelerate"])
|
14 |
-
|
15 |
-
import gradio as gr
|
16 |
-
from transformers import GPT2Tokenizer, GPT2LMHeadModel
|
17 |
-
import torch
|
18 |
-
|
19 |
-
# Check if a GPU is available, otherwise use CPU
|
20 |
-
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
21 |
-
|
22 |
-
# Load GPT-2 model and tokenizer
|
23 |
-
model_name = "gpt2" # or "gpt2-medium", "gpt2-large", "gpt2-xl"
|
24 |
-
tokenizer = GPT2Tokenizer.from_pretrained(model_name)
|
25 |
-
model = GPT2LMHeadModel.from_pretrained(model_name).to(device)
|
26 |
-
|
27 |
-
# Function to generate text using GPT-2 and evaluate the prompt
|
28 |
def evaluar_prompt(prompt):
|
29 |
try:
|
30 |
# Encode the prompt
|
@@ -54,26 +27,31 @@ def evaluar_prompt(prompt):
|
|
54 |
# Evaluate clarity
|
55 |
if len(prompt.split()) < 5:
|
56 |
claridad_consejo = "Tu prompt es muy corto, lo que puede generar ambigüedad. Intenta expandirlo para proporcionar más contexto o detalles específicos."
|
|
|
|
|
57 |
else:
|
58 |
claridad_consejo = "Tu prompt es claro y está bien definido, lo que facilita un análisis efectivo."
|
59 |
|
60 |
# Evaluate logic
|
61 |
-
|
62 |
-
|
|
|
63 |
else:
|
64 |
logica_consejo = "El prompt evita términos subjetivos, lo que ayuda a mantener un enfoque objetivo."
|
65 |
|
66 |
# Evaluate relevance
|
67 |
-
|
|
|
68 |
relevancia_consejo = "El prompt es relevante y está alineado con el objetivo de mejorar la experiencia del cliente."
|
69 |
else:
|
70 |
relevancia_consejo = "El prompt podría no estar directamente relacionado con el objetivo principal. Asegúrate de que aborde claramente la cuestión principal."
|
71 |
|
72 |
# Evaluate evidence request
|
73 |
-
|
|
|
74 |
evidencia_consejo = "El prompt ya solicita evidencia, lo cual es positivo para un análisis detallado."
|
75 |
else:
|
76 |
-
evidencia_consejo = "Considera pedir explícitamente ejemplos específicos o evidencia
|
77 |
|
78 |
# Compile suggestions
|
79 |
sugerencias = "### Sugerencias para Mejorar:\n"
|
@@ -85,108 +63,16 @@ def evaluar_prompt(prompt):
|
|
85 |
sugerencias += f"\n* **Evidencia:** {evidencia_consejo}"
|
86 |
|
87 |
# If no advice is necessary, indicate that the prompt is strong
|
88 |
-
if
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
sugerencias += "\nTu prompt está bien construido y no presenta áreas importantes para mejorar."
|
90 |
|
91 |
return sugerencias, 85 # Returning suggestions and an arbitrary score as an example
|
92 |
|
93 |
except Exception as e:
|
94 |
return str(e), "Error"
|
95 |
-
|
96 |
-
def interfaz():
|
97 |
-
with gr.Blocks(css="""
|
98 |
-
body {
|
99 |
-
font-family: 'Helvetica Neue', Arial, sans-serif;
|
100 |
-
background-color: #f7f7f7;
|
101 |
-
color: #333333;
|
102 |
-
margin: 0;
|
103 |
-
padding: 0;
|
104 |
-
}
|
105 |
-
.container {
|
106 |
-
max-width: 800px;
|
107 |
-
margin: 0 auto;
|
108 |
-
padding: 40px;
|
109 |
-
display: flex;
|
110 |
-
flex-direction: column;
|
111 |
-
align-items: center;
|
112 |
-
background-color: #ffffff;
|
113 |
-
border-radius: 8px;
|
114 |
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
115 |
-
}
|
116 |
-
.hero-section {
|
117 |
-
text-align: center;
|
118 |
-
margin-bottom: 40px;
|
119 |
-
}
|
120 |
-
.hero-section h1 {
|
121 |
-
font-size: 36px;
|
122 |
-
font-weight: bold;
|
123 |
-
color: #007BFF;
|
124 |
-
margin-bottom: 10px;
|
125 |
-
}
|
126 |
-
.hero-section p {
|
127 |
-
font-size: 18px;
|
128 |
-
color: #666;
|
129 |
-
margin-top: 0;
|
130 |
-
}
|
131 |
-
.evaluation-section {
|
132 |
-
width: 100%;
|
133 |
-
display: flex;
|
134 |
-
flex-direction: column;
|
135 |
-
gap: 20px;
|
136 |
-
}
|
137 |
-
.evaluation-section h2 {
|
138 |
-
font-size: 28px;
|
139 |
-
font-weight: bold;
|
140 |
-
color: #333;
|
141 |
-
margin-bottom: 10px;
|
142 |
-
}
|
143 |
-
.evaluation-section .gr-textbox,
|
144 |
-
.evaluation-section .gr-number {
|
145 |
-
width: 100%;
|
146 |
-
padding: 12px;
|
147 |
-
font-size: 16px;
|
148 |
-
border: 1px solid #ddd;
|
149 |
-
border-radius: 4px;
|
150 |
-
box-sizing: border-box;
|
151 |
-
transition: border-color 0.2s;
|
152 |
-
}
|
153 |
-
.evaluation-section .gr-textbox:focus,
|
154 |
-
.evaluation-section .gr-number:focus {
|
155 |
-
border-color: #007BFF;
|
156 |
-
outline: none;
|
157 |
-
}
|
158 |
-
.evaluation-section .gr-button {
|
159 |
-
background-color: #007BFF;
|
160 |
-
color: white;
|
161 |
-
padding: 12px 20px;
|
162 |
-
font-size: 16px;
|
163 |
-
font-weight: bold;
|
164 |
-
border: none;
|
165 |
-
border-radius: 4px;
|
166 |
-
cursor: pointer;
|
167 |
-
transition: background-color 0.2s;
|
168 |
-
text-align: center;
|
169 |
-
}
|
170 |
-
.evaluation-section .gr-button:hover {
|
171 |
-
background-color: #0056b3;
|
172 |
-
}
|
173 |
-
""") as demo:
|
174 |
-
with gr.Row(elem_id="hero-section"):
|
175 |
-
gr.Markdown("<div class='container'><h1>Evaluación de Prompts</h1><p>Ingrese su prompt a continuación para recibir sugerencias de mejora basadas en principios de pensamiento crítico.</p></div>", elem_classes="hero-section")
|
176 |
-
|
177 |
-
with gr.Row(elem_id="evaluation-section"):
|
178 |
-
with gr.Column(elem_id="left"):
|
179 |
-
prompt_input = gr.Textbox(label="Escribe tu prompt aquí:", placeholder="Escribe tu prompt...", elem_classes="gr-textbox")
|
180 |
-
feedback_output = gr.Textbox(label="Retroalimentación:", interactive=False, elem_classes="gr-textbox")
|
181 |
-
calificacion_output = gr.Number(label="Calificación Final:", interactive=False, elem_classes="gr-number")
|
182 |
-
|
183 |
-
with gr.Row(elem_id="button-container"):
|
184 |
-
evaluar_button = gr.Button("Evaluar Prompt", elem_classes="gr-button")
|
185 |
-
|
186 |
-
evaluar_button.click(evaluar_prompt, inputs=prompt_input, outputs=[feedback_output, calificacion_output])
|
187 |
-
|
188 |
-
return demo
|
189 |
-
|
190 |
-
# Run the interface
|
191 |
-
demo = interfaz()
|
192 |
-
demo.launch()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
def evaluar_prompt(prompt):
|
2 |
try:
|
3 |
# Encode the prompt
|
|
|
27 |
# Evaluate clarity
|
28 |
if len(prompt.split()) < 5:
|
29 |
claridad_consejo = "Tu prompt es muy corto, lo que puede generar ambigüedad. Intenta expandirlo para proporcionar más contexto o detalles específicos."
|
30 |
+
elif len(prompt.split()) > 20:
|
31 |
+
claridad_consejo = "Tu prompt es muy largo. Considera simplificarlo para que sea más directo y fácil de entender."
|
32 |
else:
|
33 |
claridad_consejo = "Tu prompt es claro y está bien definido, lo que facilita un análisis efectivo."
|
34 |
|
35 |
# Evaluate logic
|
36 |
+
subjective_terms = ["mejor", "peor", "único", "excelente", "terrible"]
|
37 |
+
if any(word in prompt.lower() for word in subjective_terms):
|
38 |
+
logica_consejo = f"Palabras como '{', '.join([w for w in subjective_terms if w in prompt.lower()])}' sugieren una perspectiva subjetiva. Reformula el prompt para enfocarte en criterios objetivos."
|
39 |
else:
|
40 |
logica_consejo = "El prompt evita términos subjetivos, lo que ayuda a mantener un enfoque objetivo."
|
41 |
|
42 |
# Evaluate relevance
|
43 |
+
relevant_terms = ["cliente", "experiencia", "empresa", "servicio", "producto"]
|
44 |
+
if any(word in prompt.lower() for word in relevant_terms):
|
45 |
relevancia_consejo = "El prompt es relevante y está alineado con el objetivo de mejorar la experiencia del cliente."
|
46 |
else:
|
47 |
relevancia_consejo = "El prompt podría no estar directamente relacionado con el objetivo principal. Asegúrate de que aborde claramente la cuestión principal."
|
48 |
|
49 |
# Evaluate evidence request
|
50 |
+
evidence_terms = ["evidencia", "pruebas", "demuestra", "ejemplos", "citas", "datos"]
|
51 |
+
if any(word in prompt.lower() for word in evidence_terms):
|
52 |
evidencia_consejo = "El prompt ya solicita evidencia, lo cual es positivo para un análisis detallado."
|
53 |
else:
|
54 |
+
evidencia_consejo = "Considera pedir explícitamente ejemplos específicos o evidencia para obtener respuestas más detalladas y fundamentadas."
|
55 |
|
56 |
# Compile suggestions
|
57 |
sugerencias = "### Sugerencias para Mejorar:\n"
|
|
|
63 |
sugerencias += f"\n* **Evidencia:** {evidencia_consejo}"
|
64 |
|
65 |
# If no advice is necessary, indicate that the prompt is strong
|
66 |
+
if all(
|
67 |
+
consejo == "Tu prompt es claro y está bien definido, lo que facilita un análisis efectivo." or
|
68 |
+
consejo == "El prompt evita términos subjetivos, lo que ayuda a mantener un enfoque objetivo." or
|
69 |
+
consejo == "El prompt es relevante y está alineado con el objetivo de mejorar la experiencia del cliente." or
|
70 |
+
consejo == "El prompt ya solicita evidencia, lo cual es positivo para un análisis detallado."
|
71 |
+
for consejo in [claridad_consejo, logica_consejo, relevancia_consejo, evidencia_consejo]
|
72 |
+
):
|
73 |
sugerencias += "\nTu prompt está bien construido y no presenta áreas importantes para mejorar."
|
74 |
|
75 |
return sugerencias, 85 # Returning suggestions and an arbitrary score as an example
|
76 |
|
77 |
except Exception as e:
|
78 |
return str(e), "Error"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|