DHEIVER commited on
Commit
56b8e80
1 Parent(s): 1af59eb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -20
app.py CHANGED
@@ -6,7 +6,7 @@ from typing import Dict, List, Tuple
6
  from textblob import TextBlob
7
 
8
  # Load embeddings model
9
- model = SentenceTransformer('BAAI/bge-large-en-v1.5')
10
 
11
  PERGUNTAS = [
12
  {
@@ -129,24 +129,38 @@ class EnhancedCoach:
129
  self.sessao_completa = False
130
  self.tone_history = []
131
  self.response_quality_metrics = []
132
-
133
  def analyze_response_quality(self, text: str) -> Dict[str, float]:
134
  sentences = [s.strip() for s in text.split('.') if s.strip()]
 
135
 
136
  metrics = {
137
- "depth": self._calculate_depth(text),
138
  "clarity": self._calculate_clarity(sentences),
139
- "specificity": self._calculate_specificity(text),
140
  "actionability": self._calculate_actionability(sentences)
141
  }
142
 
143
  self.response_quality_metrics.append(metrics)
144
  return metrics
145
 
146
- def _calculate_depth(self, text: str) -> float:
147
- words = text.lower().split()
 
 
148
  unique_words = len(set(words))
149
- return min(1.0, (len(words) * unique_words) / 1000)
 
 
 
 
 
 
 
 
 
 
 
150
 
151
  def _calculate_clarity(self, sentences: List[str]) -> float:
152
  if not sentences:
@@ -154,14 +168,27 @@ class EnhancedCoach:
154
  avg_length = sum(len(s.split()) for s in sentences) / len(sentences)
155
  return 1.0 if 10 <= avg_length <= 20 else 0.7
156
 
157
- def _calculate_specificity(self, text: str) -> float:
158
- specific_indicators = ["exemplo", "especificamente", "concretamente",
159
- "situação", "caso", "quando", "onde", "como"]
160
- return min(1.0, sum(text.lower().count(ind) for ind in specific_indicators) / 5)
 
 
 
 
 
 
 
 
 
 
161
 
162
  def _calculate_actionability(self, sentences: List[str]) -> float:
163
- action_verbs = ["implementar", "fazer", "criar", "desenvolver", "estabelecer",
164
- "planejar", "executar", "medir", "avaliar"]
 
 
 
165
  if not sentences:
166
  return 0.0
167
  actionable = sum(1 for s in sentences
@@ -181,8 +208,14 @@ class EnhancedCoach:
181
  return predominant_tone[0], predominant_tone[1]
182
 
183
  def analisar_sentimento(self, texto: str) -> str:
184
- positive_words = ["consegui", "superei", "aprendi", "melhorei", "efetivo"]
185
- negative_words = ["difícil", "desafiador", "complicado", "problema", "falha"]
 
 
 
 
 
 
186
 
187
  texto_lower = texto.lower()
188
  positive_count = sum(1 for word in positive_words if word in texto_lower)
@@ -224,7 +257,7 @@ class EnhancedCoach:
224
  def gerar_resposta(self, texto_usuario: str) -> str:
225
  quality_metrics = self.analyze_response_quality(texto_usuario)
226
 
227
- if quality_metrics["depth"] < 0.3 or quality_metrics["specificity"] < 0.2:
228
  return """### Feedback Inicial 💭
229
 
230
  Para oferecer um feedback mais valioso, poderia compartilhar mais detalhes específicos sobre sua experiência?
@@ -294,7 +327,9 @@ Alguns aspectos que enriqueceriam sua reflexão:
294
  return ""
295
 
296
  def _gerar_pontos_aprofundamento(self) -> str:
297
- return """#### Pontos para Aprofundamento:
 
 
298
  1. Como essa experiência se conecta com seus valores de liderança?
299
  2. Que recursos específicos você identificou como necessários?
300
  3. Qual seria o próximo marco de desenvolvimento nessa área?"""
@@ -368,7 +403,7 @@ Tome um momento para conectar com suas experiências e compartilhe sua perspecti
368
  def criar_interface():
369
  coach = EnhancedCoach()
370
 
371
- with gr.Blocks(title="Coach de Liderança", theme=gr.themes.Base()) as app:
372
  gr.Markdown("""# 🚀 Coach de Liderança
373
  Desenvolva sua liderança através de reflexão guiada e feedback personalizado.""")
374
 
@@ -384,7 +419,7 @@ def criar_interface():
384
  lines=4,
385
  label="Sua Resposta"
386
  )
387
- btn = gr.Button("Enviar")
388
 
389
  def responder(mensagem, historico):
390
  if not mensagem.strip():
@@ -401,4 +436,4 @@ def criar_interface():
401
 
402
  if __name__ == "__main__":
403
  app = criar_interface()
404
- app.launch()
 
6
  from textblob import TextBlob
7
 
8
  # Load embeddings model
9
+ model = SentenceTransformer('neuralmind/bert-large-portuguese-vocab')
10
 
11
  PERGUNTAS = [
12
  {
 
129
  self.sessao_completa = False
130
  self.tone_history = []
131
  self.response_quality_metrics = []
132
+
133
  def analyze_response_quality(self, text: str) -> Dict[str, float]:
134
  sentences = [s.strip() for s in text.split('.') if s.strip()]
135
+ words = text.lower().split()
136
 
137
  metrics = {
138
+ "depth": self._calculate_depth(text, words),
139
  "clarity": self._calculate_clarity(sentences),
140
+ "specificity": self._calculate_specificity(text, words),
141
  "actionability": self._calculate_actionability(sentences)
142
  }
143
 
144
  self.response_quality_metrics.append(metrics)
145
  return metrics
146
 
147
+ def _calculate_depth(self, text: str, words: List[str]) -> float:
148
+ if not words:
149
+ return 0.0
150
+
151
  unique_words = len(set(words))
152
+ word_length_avg = sum(len(word) for word in words) / len(words)
153
+ sentences = [s.strip() for s in text.split('.') if s.strip()]
154
+
155
+ word_variety = unique_words / len(words)
156
+ sentence_length = len(sentences)
157
+ complexity = word_length_avg / 5
158
+
159
+ depth_score = (word_variety * 0.4 +
160
+ min(sentence_length / 3, 1.0) * 0.4 +
161
+ complexity * 0.2)
162
+
163
+ return min(1.0, depth_score)
164
 
165
  def _calculate_clarity(self, sentences: List[str]) -> float:
166
  if not sentences:
 
168
  avg_length = sum(len(s.split()) for s in sentences) / len(sentences)
169
  return 1.0 if 10 <= avg_length <= 20 else 0.7
170
 
171
+ def _calculate_specificity(self, text: str, words: List[str]) -> float:
172
+ specific_indicators = [
173
+ "exemplo", "especificamente", "concretamente",
174
+ "situação", "caso", "quando", "onde", "como",
175
+ "projeto", "equipe", "reunião", "feedback",
176
+ "resultado", "impacto", "mudança", "melhoria",
177
+ "implementei", "desenvolvi", "criei", "estabeleci",
178
+ "eu", "minha", "nosso", "realizei", "fiz"
179
+ ]
180
+
181
+ indicator_count = sum(text.lower().count(ind) for ind in specific_indicators)
182
+ response_length_factor = min(len(words) / 20, 1.0)
183
+
184
+ return min(1.0, (indicator_count * 0.7 + response_length_factor * 0.3))
185
 
186
  def _calculate_actionability(self, sentences: List[str]) -> float:
187
+ action_verbs = [
188
+ "implementar", "fazer", "criar", "desenvolver", "estabelecer",
189
+ "planejar", "executar", "medir", "avaliar", "iniciar",
190
+ "construir", "liderar", "coordenar", "definir", "ajustar"
191
+ ]
192
  if not sentences:
193
  return 0.0
194
  actionable = sum(1 for s in sentences
 
208
  return predominant_tone[0], predominant_tone[1]
209
 
210
  def analisar_sentimento(self, texto: str) -> str:
211
+ positive_words = [
212
+ "consegui", "superei", "aprendi", "melhorei", "efetivo",
213
+ "cresci", "evoluí", "realizei", "alcancei", "progresso"
214
+ ]
215
+ negative_words = [
216
+ "difícil", "desafiador", "complicado", "problema", "falha",
217
+ "obstáculo", "limitação", "erro", "confuso", "inseguro"
218
+ ]
219
 
220
  texto_lower = texto.lower()
221
  positive_count = sum(1 for word in positive_words if word in texto_lower)
 
257
  def gerar_resposta(self, texto_usuario: str) -> str:
258
  quality_metrics = self.analyze_response_quality(texto_usuario)
259
 
260
+ if quality_metrics["depth"] < 0.15 and quality_metrics["specificity"] < 0.1:
261
  return """### Feedback Inicial 💭
262
 
263
  Para oferecer um feedback mais valioso, poderia compartilhar mais detalhes específicos sobre sua experiência?
 
327
  return ""
328
 
329
  def _gerar_pontos_aprofundamento(self) -> str:
330
+ return """
331
+
332
+ #### Pontos para Aprofundamento:
333
  1. Como essa experiência se conecta com seus valores de liderança?
334
  2. Que recursos específicos você identificou como necessários?
335
  3. Qual seria o próximo marco de desenvolvimento nessa área?"""
 
403
  def criar_interface():
404
  coach = EnhancedCoach()
405
 
406
+ with gr.Blocks(title="Coach de Liderança", theme=gr.themes.Soft()) as app:
407
  gr.Markdown("""# 🚀 Coach de Liderança
408
  Desenvolva sua liderança através de reflexão guiada e feedback personalizado.""")
409
 
 
419
  lines=4,
420
  label="Sua Resposta"
421
  )
422
+ btn = gr.Button("Enviar", variant="primary")
423
 
424
  def responder(mensagem, historico):
425
  if not mensagem.strip():
 
436
 
437
  if __name__ == "__main__":
438
  app = criar_interface()
439
+ app.launch()