Update app.py
Browse files
app.py
CHANGED
@@ -3,6 +3,16 @@ import plotly.graph_objects as go
|
|
3 |
from sentence_transformers import SentenceTransformer
|
4 |
import numpy as np
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
|
7 |
|
8 |
DISC_QUESTIONS = [
|
@@ -34,30 +44,30 @@ DISC_QUESTIONS = [
|
|
34 |
]
|
35 |
|
36 |
DISC_INSIGHTS = {
|
37 |
-
'D': {'alto': ["Você demonstra forte capacidade de liderança e tomada de decisão",
|
38 |
-
"Sua orientação para resultados é uma característica marcante",
|
39 |
-
"Você tende a enfrentar desafios de forma direta e decisiva"],
|
40 |
-
'baixo': ["Você prefere uma abordagem mais colaborativa e consensual",
|
41 |
-
"Sua tendência é buscar harmonia nas relações profissionais",
|
42 |
-
"Você demonstra cuidado ao tomar decisões importantes"]},
|
43 |
-
'I': {'alto': ["Seu entusiasmo e otimismo são características marcantes",
|
44 |
-
"Você tem grande habilidade para inspirar e motivar pessoas",
|
45 |
-
"Sua comunicação expressiva é um diferencial importante"],
|
46 |
-
'baixo': ["Você prefere uma comunicação mais objetiva e focada",
|
47 |
-
"Sua abordagem analítica favorece resultados concretos",
|
48 |
-
"Você valoriza dados e fatos em suas interações"]},
|
49 |
-
'S': {'alto': ["Sua consistência e confiabilidade são pontos fortes",
|
50 |
-
"Você demonstra grande habilidade para trabalho em equipe",
|
51 |
-
"Sua paciência e capacidade de escuta são diferenciais"],
|
52 |
-
'baixo': ["Você se adapta facilmente a mudanças e novos cenários",
|
53 |
-
"Sua flexibilidade é um ponto forte em ambientes dinâmicos",
|
54 |
-
"Você lida bem com múltiplas tarefas simultâneas"]},
|
55 |
-
'C': {'alto': ["Sua precisão e atenção aos detalhes são notáveis",
|
56 |
-
"Você tem forte capacidade analítica e organizacional",
|
57 |
-
"Sua busca por qualidade é uma característica marcante"],
|
58 |
-
'baixo': ["Você demonstra flexibilidade com regras e processos",
|
59 |
-
"Sua praticidade favorece resultados rápidos",
|
60 |
-
"Você se adapta bem a ambientes menos estruturados"]}
|
61 |
}
|
62 |
|
63 |
def get_intensity_level(percentual):
|
@@ -79,15 +89,6 @@ def calcular_perfil(respostas):
|
|
79 |
total = sum(contagem.values())
|
80 |
return {k: (v/total)*100 if total > 0 else 0 for k, v in contagem.items()}
|
81 |
|
82 |
-
import gradio as gr
|
83 |
-
import plotly.graph_objects as go
|
84 |
-
from sentence_transformers import SentenceTransformer
|
85 |
-
import numpy as np
|
86 |
-
|
87 |
-
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
|
88 |
-
|
89 |
-
# [Previous constants DISC_QUESTIONS and DISC_INSIGHTS remain the same]
|
90 |
-
|
91 |
def create_disc_plot(percentuais):
|
92 |
cores = {'D': '#FF4B4B', 'I': '#FFD700', 'S': '#4CAF50', 'C': '#2196F3'}
|
93 |
fig = go.Figure(data=[go.Bar(x=list(percentuais.keys()),
|
@@ -116,13 +117,106 @@ def create_disc_plot(percentuais):
|
|
116 |
)
|
117 |
|
118 |
return fig
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
120 |
def gerar_relatorio(percentuais):
|
121 |
perfis = dict(sorted(percentuais.items(), key=lambda x: x[1], reverse=True))
|
122 |
principal, secundario = list(perfis.keys())[:2]
|
123 |
insights_p = "\n".join([f"• {i}" for i in generate_semantic_insights(principal, perfis[principal])])
|
124 |
insights_s = "\n".join([f"• {i}" for i in generate_semantic_insights(secundario, perfis[secundario])])
|
125 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
126 |
|
127 |
def process_results(*answers):
|
128 |
if any(a is None for a in answers):
|
@@ -134,13 +228,6 @@ def process_results(*answers):
|
|
134 |
report = gerar_relatorio(perfil)
|
135 |
|
136 |
return plot, report
|
137 |
-
|
138 |
-
import gradio as gr
|
139 |
-
import plotly.graph_objects as go
|
140 |
-
from sentence_transformers import SentenceTransformer
|
141 |
-
import numpy as np
|
142 |
-
|
143 |
-
# [Previous imports and constants remain the same]
|
144 |
|
145 |
def create_interface():
|
146 |
with gr.Blocks(theme=gr.themes.Soft(
|
@@ -185,17 +272,6 @@ def create_interface():
|
|
185 |
|
186 |
with gr.Row():
|
187 |
output = gr.Markdown()
|
188 |
-
|
189 |
-
def process_results(*answers):
|
190 |
-
if any(a is None for a in answers):
|
191 |
-
gr.Warning("Por favor, responda todas as questões antes de prosseguir.")
|
192 |
-
return None, None
|
193 |
-
|
194 |
-
perfil = calcular_perfil(answers)
|
195 |
-
plot = create_disc_plot(perfil)
|
196 |
-
report = gerar_relatorio(perfil)
|
197 |
-
|
198 |
-
return plot, report
|
199 |
|
200 |
analyze_btn.click(
|
201 |
fn=process_results,
|
@@ -210,21 +286,32 @@ def create_interface():
|
|
210 |
api_name="reset"
|
211 |
)
|
212 |
|
213 |
-
# Add example inputs
|
214 |
gr.Examples(
|
215 |
examples=[
|
216 |
["D - Assume a liderança e toma decisões rápidas",
|
217 |
"I - Discute com outros e busca diferentes perspectivas",
|
218 |
"S - Ouvir atentamente e contribuir quando solicitado",
|
219 |
"C - Analisa os impactos antes de aceitar",
|
220 |
-
"D - Tornar-se mais direto e focado em resultados"]
|
221 |
-
],
|
222 |
inputs=radios,
|
223 |
outputs=[plot, output],
|
224 |
fn=process_results,
|
225 |
label="Exemplo de Respostas"
|
226 |
)
|
227 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
228 |
return iface
|
229 |
|
230 |
if __name__ == "__main__":
|
@@ -234,4 +321,8 @@ if __name__ == "__main__":
|
|
234 |
show_error=True,
|
235 |
server_name="0.0.0.0",
|
236 |
server_port=7860,
|
|
|
|
|
|
|
|
|
237 |
)
|
|
|
3 |
from sentence_transformers import SentenceTransformer
|
4 |
import numpy as np
|
5 |
|
6 |
+
"""
|
7 |
+
Objetivo do Usuário:
|
8 |
+
Este aplicativo visa ajudar profissionais e gestores a:
|
9 |
+
1. Identificar perfis comportamentais usando a metodologia DISC
|
10 |
+
2. Compreender tendências naturais de comportamento em ambiente profissional
|
11 |
+
3. Facilitar o autoconhecimento e desenvolvimento pessoal
|
12 |
+
4. Apoiar decisões de gestão de pessoas e formação de equipes
|
13 |
+
5. Melhorar a comunicação e relacionamento interpessoal no trabalho
|
14 |
+
"""
|
15 |
+
|
16 |
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
|
17 |
|
18 |
DISC_QUESTIONS = [
|
|
|
44 |
]
|
45 |
|
46 |
DISC_INSIGHTS = {
|
47 |
+
'D': {'alto': ["Você demonstra forte capacidade de liderança e tomada de decisão - ideal para posições gerenciais",
|
48 |
+
"Sua orientação para resultados é uma característica marcante - excelente para projetos com prazos curtos",
|
49 |
+
"Você tende a enfrentar desafios de forma direta e decisiva - ótimo para gestão de crises"],
|
50 |
+
'baixo': ["Você prefere uma abordagem mais colaborativa e consensual - valioso em trabalhos em equipe",
|
51 |
+
"Sua tendência é buscar harmonia nas relações profissionais - importante para mediação de conflitos",
|
52 |
+
"Você demonstra cuidado ao tomar decisões importantes - útil em análises de risco"]},
|
53 |
+
'I': {'alto': ["Seu entusiasmo e otimismo são características marcantes - ideal para vendas e networking",
|
54 |
+
"Você tem grande habilidade para inspirar e motivar pessoas - excelente para liderança de equipes",
|
55 |
+
"Sua comunicação expressiva é um diferencial importante - ótimo para apresentações e treinamentos"],
|
56 |
+
'baixo': ["Você prefere uma comunicação mais objetiva e focada - valioso em análises técnicas",
|
57 |
+
"Sua abordagem analítica favorece resultados concretos - importante em projetos estruturados",
|
58 |
+
"Você valoriza dados e fatos em suas interações - útil em processos decisórios"]},
|
59 |
+
'S': {'alto': ["Sua consistência e confiabilidade são pontos fortes - ideal para gestão de processos",
|
60 |
+
"Você demonstra grande habilidade para trabalho em equipe - excelente para projetos colaborativos",
|
61 |
+
"Sua paciência e capacidade de escuta são diferenciais - ótimo para atendimento ao cliente"],
|
62 |
+
'baixo': ["Você se adapta facilmente a mudanças e novos cenários - valioso em ambientes dinâmicos",
|
63 |
+
"Sua flexibilidade é um ponto forte em ambientes dinâmicos - importante para inovação",
|
64 |
+
"Você lida bem com múltiplas tarefas simultâneas - útil em gestão de projetos"]},
|
65 |
+
'C': {'alto': ["Sua precisão e atenção aos detalhes são notáveis - ideal para análise de dados",
|
66 |
+
"Você tem forte capacidade analítica e organizacional - excelente para planejamento estratégico",
|
67 |
+
"Sua busca por qualidade é uma característica marcante - ótimo para controle de qualidade"],
|
68 |
+
'baixo': ["Você demonstra flexibilidade com regras e processos - valioso em ambientes criativos",
|
69 |
+
"Sua praticidade favorece resultados rápidos - importante para entregas ágeis",
|
70 |
+
"Você se adapta bem a ambientes menos estruturados - útil em startups"]}
|
71 |
}
|
72 |
|
73 |
def get_intensity_level(percentual):
|
|
|
89 |
total = sum(contagem.values())
|
90 |
return {k: (v/total)*100 if total > 0 else 0 for k, v in contagem.items()}
|
91 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
def create_disc_plot(percentuais):
|
93 |
cores = {'D': '#FF4B4B', 'I': '#FFD700', 'S': '#4CAF50', 'C': '#2196F3'}
|
94 |
fig = go.Figure(data=[go.Bar(x=list(percentuais.keys()),
|
|
|
117 |
)
|
118 |
|
119 |
return fig
|
120 |
+
|
121 |
+
def analyze_profile_implications(percentuais):
|
122 |
+
"""
|
123 |
+
Analisa as implicações práticas do perfil DISC para desenvolvimento profissional
|
124 |
+
"""
|
125 |
+
perfis = dict(sorted(percentuais.items(), key=lambda x: x[1], reverse=True))
|
126 |
+
principal = list(perfis.keys())[0]
|
127 |
|
128 |
+
implications = {
|
129 |
+
'D': """
|
130 |
+
Recomendações de Desenvolvimento:
|
131 |
+
• Desenvolva mais paciência com processos e pessoas menos diretas
|
132 |
+
• Pratique escuta ativa em reuniões e discussões
|
133 |
+
• Considere diferentes perspectivas antes de tomar decisões
|
134 |
+
|
135 |
+
Áreas Profissionais Favoráveis:
|
136 |
+
• Gestão de projetos
|
137 |
+
• Empreendedorismo
|
138 |
+
• Liderança executiva
|
139 |
+
""",
|
140 |
+
'I': """
|
141 |
+
Recomendações de Desenvolvimento:
|
142 |
+
• Desenvolva habilidades de organização e atenção a detalhes
|
143 |
+
• Mantenha o foco em prazos e entregas
|
144 |
+
• Equilibre socialização com produtividade
|
145 |
+
|
146 |
+
Áreas Profissionais Favoráveis:
|
147 |
+
• Vendas e Marketing
|
148 |
+
• Relações Públicas
|
149 |
+
• Treinamento e Desenvolvimento
|
150 |
+
""",
|
151 |
+
'S': """
|
152 |
+
Recomendações de Desenvolvimento:
|
153 |
+
• Desenvolva mais assertividade em situações de conflito
|
154 |
+
• Pratique adaptação a mudanças rápidas
|
155 |
+
• Expresse mais suas opiniões em grupo
|
156 |
+
|
157 |
+
Áreas Profissionais Favoráveis:
|
158 |
+
• Recursos Humanos
|
159 |
+
• Atendimento ao Cliente
|
160 |
+
• Gestão de Processos
|
161 |
+
""",
|
162 |
+
'C': """
|
163 |
+
Recomendações de Desenvolvimento:
|
164 |
+
• Desenvolva mais flexibilidade em situações ambíguas
|
165 |
+
• Pratique tomada de decisão mais rápida
|
166 |
+
• Equilibre análise com ação
|
167 |
+
|
168 |
+
Áreas Profissionais Favoráveis:
|
169 |
+
• Análise de Dados
|
170 |
+
• Controle de Qualidade
|
171 |
+
• Planejamento Estratégico
|
172 |
+
"""
|
173 |
+
}
|
174 |
+
|
175 |
+
return implications.get(principal, "")
|
176 |
+
|
177 |
+
def get_career_recommendations(profile):
|
178 |
+
recommendations = {
|
179 |
+
'D': "papéis de liderança e gestão de projetos desafiadores",
|
180 |
+
'I': "funções que envolvem comunicação, vendas e trabalho com pessoas",
|
181 |
+
'S': "posições que requerem consistência, suporte e trabalho em equipe",
|
182 |
+
'C': "atividades que demandam precisão, análise e atenção aos detalhes"
|
183 |
+
}
|
184 |
+
return recommendations.get(profile, "diversos papéis profissionais")
|
185 |
+
|
186 |
def gerar_relatorio(percentuais):
|
187 |
perfis = dict(sorted(percentuais.items(), key=lambda x: x[1], reverse=True))
|
188 |
principal, secundario = list(perfis.keys())[:2]
|
189 |
insights_p = "\n".join([f"• {i}" for i in generate_semantic_insights(principal, perfis[principal])])
|
190 |
insights_s = "\n".join([f"• {i}" for i in generate_semantic_insights(secundario, perfis[secundario])])
|
191 |
+
implications = analyze_profile_implications(percentuais)
|
192 |
+
|
193 |
+
return f"""# Análise de Perfil DISC
|
194 |
+
|
195 |
+
## Visão Geral
|
196 |
+
Perfil principal: {principal} ({perfis[principal]:.1f}% - {get_intensity_level(perfis[principal])})
|
197 |
+
Perfil secundário: {secundario} ({perfis[secundario]:.1f}% - {get_intensity_level(perfis[secundario])})
|
198 |
+
|
199 |
+
## Insights Principais
|
200 |
+
{insights_p}
|
201 |
+
|
202 |
+
## Influências Secundárias
|
203 |
+
{insights_s}
|
204 |
+
|
205 |
+
## Implicações Práticas
|
206 |
+
{implications}
|
207 |
+
|
208 |
+
## Distribuição DISC
|
209 |
+
{', '.join([f'{k}: {v:.1f}%' for k, v in perfis.items()])}
|
210 |
+
|
211 |
+
## Comentário do Sistema
|
212 |
+
Com base no seu perfil, observamos que suas características comportamentais são mais adequadas para {get_career_recommendations(principal)}.
|
213 |
+
Este resultado representa suas tendências naturais e pode ser usado para desenvolvimento pessoal e profissional.
|
214 |
+
|
215 |
+
## Observações Finais
|
216 |
+
• Este perfil reflete seu comportamento natural em ambiente profissional
|
217 |
+
• As recomendações são sugestões para desenvolvimento contínuo
|
218 |
+
• O perfil DISC não é uma medida de competência ou capacidade
|
219 |
+
• Use estas informações como base para seu desenvolvimento profissional"""
|
220 |
|
221 |
def process_results(*answers):
|
222 |
if any(a is None for a in answers):
|
|
|
228 |
report = gerar_relatorio(perfil)
|
229 |
|
230 |
return plot, report
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
231 |
|
232 |
def create_interface():
|
233 |
with gr.Blocks(theme=gr.themes.Soft(
|
|
|
272 |
|
273 |
with gr.Row():
|
274 |
output = gr.Markdown()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
275 |
|
276 |
analyze_btn.click(
|
277 |
fn=process_results,
|
|
|
286 |
api_name="reset"
|
287 |
)
|
288 |
|
|
|
289 |
gr.Examples(
|
290 |
examples=[
|
291 |
["D - Assume a liderança e toma decisões rápidas",
|
292 |
"I - Discute com outros e busca diferentes perspectivas",
|
293 |
"S - Ouvir atentamente e contribuir quando solicitado",
|
294 |
"C - Analisa os impactos antes de aceitar",
|
295 |
+
"D - Tornar-se mais direto e focado em resultados"]],
|
|
|
296 |
inputs=radios,
|
297 |
outputs=[plot, output],
|
298 |
fn=process_results,
|
299 |
label="Exemplo de Respostas"
|
300 |
)
|
301 |
|
302 |
+
# Add footer with information
|
303 |
+
gr.Markdown("""
|
304 |
+
---
|
305 |
+
### 📝 Informações Importantes
|
306 |
+
|
307 |
+
• O teste DISC é uma ferramenta de autoconhecimento e desenvolvimento profissional
|
308 |
+
• Os resultados refletem tendências comportamentais, não habilidades ou competências
|
309 |
+
• Use as informações para desenvolvimento pessoal e melhor comunicação em equipe
|
310 |
+
• Resultados podem variar dependendo do contexto e momento profissional
|
311 |
+
|
312 |
+
© 2024 DISC Analysis Tool - Versão 2.0
|
313 |
+
""")
|
314 |
+
|
315 |
return iface
|
316 |
|
317 |
if __name__ == "__main__":
|
|
|
321 |
show_error=True,
|
322 |
server_name="0.0.0.0",
|
323 |
server_port=7860,
|
324 |
+
debug=True,
|
325 |
+
analytics_enabled=False,
|
326 |
+
enable_queue=True,
|
327 |
+
max_threads=4
|
328 |
)
|