miguelcastroe commited on
Commit
34e8486
·
verified ·
1 Parent(s): e403771

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -131
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
- if any(word in prompt.lower() for word in ["mejor", "peor", "único"]):
62
- logica_consejo = f"Palabras como '{', '.join([w for w in ['mejor', 'peor', 'único'] if w in prompt.lower()])}' sugieren una perspectiva subjetiva. Reformula el prompt para enfocarte en criterios objetivos."
 
63
  else:
64
  logica_consejo = "El prompt evita términos subjetivos, lo que ayuda a mantener un enfoque objetivo."
65
 
66
  # Evaluate relevance
67
- if any(word in prompt.lower() for word in ["cliente", "experiencia", "empresa", "servicio"]):
 
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
- if any(word in prompt.lower() for word in ["evidencia", "pruebas", "demuestra", "ejemplos"]):
 
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 sobre cómo mejorar la experiencia del cliente, para obtener respuestas más detalladas y fundamentadas."
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 not any([claridad_consejo, logica_consejo, relevancia_consejo, evidencia_consejo]):
 
 
 
 
 
 
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"