DHEIVER commited on
Commit
32578e6
·
verified ·
1 Parent(s): bc0bf99

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +275 -0
app.py ADDED
@@ -0,0 +1,275 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from gradio_client import Client
3
+ import pandas as pd
4
+ import json
5
+ from typing import Dict, List, Union
6
+ import time
7
+
8
+ class TemperamentAnalyzer:
9
+ def __init__(self):
10
+ # Inicializa o cliente Llama
11
+ self.client = Client("DHEIVER/chat-Llama-3.3-70B")
12
+
13
+ # Define o questionário completo
14
+ self.questionnaire = {
15
+ 'SANGUÍNEO': {
16
+ 'strengths': [
17
+ 'Cordial', 'Alegre', 'Contagiante', 'Bem humorado', 'Extrovertido',
18
+ 'Estimulante', 'Bondoso', 'Emotivo', 'Espontâneo', 'Ingênuo',
19
+ 'Faz amizade com facilidade', 'Tem relacionamento profundo com as pessoas',
20
+ 'Mais coração do que razão', 'Relaciona-se bem', 'Gosta de crianças',
21
+ 'Esquece as coisas desagradáveis facilmente', 'Sincero', 'Anima as pessoas',
22
+ 'Participa com entusiasmo de novos planos', 'Barulhento',
23
+ 'Espalhafatoso', 'Curiosidade Infantil', 'Sensível com as necessidades do próximo',
24
+ 'Desperta de bom humor', 'Otimista', 'Vive para o presente',
25
+ 'Não se sente temeroso pelo futuro', 'Não gosta de estar só',
26
+ 'Fala antes de pensar', 'Terno e compassivo'
27
+ ],
28
+ 'weaknesses': [
29
+ 'Pouco prático e desorganizado', 'Age sem pensar', 'Tendência a lascívia',
30
+ 'Dificuldade para concentrar-se', 'Pouca produtividade', 'Indisciplinado',
31
+ 'Começa e não termina seus planos', 'Responde e se compromete sem pensar',
32
+ 'Turbulento', 'Não conhece suas limitações', 'Não cumpre horários',
33
+ 'Pode alterar seus princípios morais', 'Não é leal', 'Egoísta',
34
+ 'Dominador da conversa', 'Instável emocionalmente', 'Desanima facilmente',
35
+ 'Tem explosões de ira', 'Se arrepende várias vezes', 'Vontade fraca'
36
+ ]
37
+ },
38
+ 'COLÉRICO': {
39
+ 'strengths': [
40
+ 'Temperamento ardente', 'Ativo', 'Prático', 'Voluntarioso',
41
+ 'Auto suficiente', 'Independente', 'Decidido', 'Facilidade de tomar decisões',
42
+ 'Vibra com muitas atividades', 'Pouco influenciado pelo meio',
43
+ 'Influenciador do meio', 'Não se amedronta nas adversidades',
44
+ 'Não é dado a detalhes', 'Cérebro perspicaz', 'Não vacila sob pressão',
45
+ 'Determinado e persistente', 'Objetivo', 'Apresenta sugestões',
46
+ 'Líder nato', 'Insistente', 'Intuitivo', 'Não liga muito para artes',
47
+ 'Mais razão do que coração', 'Extrovertido', 'Firme',
48
+ 'Não se abala com críticas', 'Auto disciplinado', 'Geralmente otimista',
49
+ 'Gosta do desafio', 'Interesse pelo aspecto prático'
50
+ ],
51
+ 'weaknesses': [
52
+ 'Insensível', 'Irado', 'Impetuosidade danosa', 'Infringe direitos dos outros',
53
+ 'Sem compaixão', 'Indiferente aos anseios', 'Agressivo', 'Guarda rancor',
54
+ 'Vingativo', 'Tende a ter úlcera', 'Cruel', 'Mete-se em apuros',
55
+ 'Dificilmente pede desculpas', 'Declarações cruéis', 'Age tiranicamente',
56
+ 'Orgulhoso', 'Arrogante', 'Dificuldade para orar', 'Frusta os outros',
57
+ 'Prepotente'
58
+ ]
59
+ },
60
+ 'MELANCÓLICO': {
61
+ 'strengths': [
62
+ 'Analítico', 'Abnegado', 'Perfeccionista', 'Apreciador de Artes',
63
+ 'Introvertido', 'É todo coração', 'Não desaponta dependentes',
64
+ 'Não faz amigos facilmente', 'Amigo fiel', 'Bom diagnosticador',
65
+ 'Pessoa de confiança', 'Não procura as pessoas', 'Prevê obstáculos',
66
+ 'Confiança em sua capacidade', 'Sensibilidade artística', 'Varia disposição',
67
+ 'Correto na profissão', 'Se sacrifica pessoalmente', 'Evita conflitos',
68
+ 'Não ocioso', 'Criativo', 'Sensível emocionalmente', 'Pensador',
69
+ 'Revive acontecimentos', 'Cumpridor', 'Evita evidência',
70
+ 'Reservado', 'Fala pouco mas preciso', 'Não se compromete além',
71
+ 'Introspectivo'
72
+ ],
73
+ 'weaknesses': [
74
+ 'Egocêntrico', 'Auto-análise complacente', 'Interesse excessivo físico',
75
+ 'Alimenta vingança', 'Hipocondríaco', 'Ofende-se facilmente',
76
+ 'Desconfiado', 'Suposições desfavoráveis', 'Dificilmente perdoa',
77
+ 'Autocomiseração', 'Pessimista', 'Inseguro', 'Temeroso',
78
+ 'Crítico inflexível', 'Depressivo', 'Foge da realidade',
79
+ 'Mau humorado', 'Condições mentais mórbidas', 'Conspiração contra si',
80
+ 'Tudo é capital'
81
+ ]
82
+ },
83
+ 'FLEUMÁTICO': {
84
+ 'strengths': [
85
+ 'Calmo', 'Frio', 'Bem equilibrado', 'É todo razão',
86
+ 'Controla emoções', 'Racional', 'Raramente explode',
87
+ 'Aprecia artes', 'Fino gosto', 'Controlado',
88
+ 'Gosta do convívio social', 'Despreocupado', 'Sente mais que demonstra',
89
+ 'Prático e eficiente', 'Senso de humor mordaz', 'Provoca gargalhadas',
90
+ 'Cérebro organizado', 'Trabalha bem sob tensão', 'Pouco se envolve',
91
+ 'Vida regrada', 'Tende à rotina', 'Mais espectador',
92
+ 'Metódico', 'Bom coração discreto', 'Capaz',
93
+ 'Cumpridor', 'Conciliador', 'Pacificador nato',
94
+ 'Sabe ouvir', 'Bom conselheiro'
95
+ ],
96
+ 'weaknesses': [
97
+ 'Moroso', 'Indolente', 'Sem motivação', 'Provocador',
98
+ 'Distante e gélido', 'Obstinado', 'Egoísta', 'Indeciso',
99
+ 'Resistente', 'Avarento', 'Descompromissado', 'Torna-se mais vagaroso',
100
+ 'Espectador sem envolvimento', 'Acomodado', 'Humor contra outros',
101
+ 'Conservador por comodismo', 'Disfarça obstinação', 'Não se envolve',
102
+ 'Vacila entre desejos', 'Procrastinador'
103
+ ]
104
+ }
105
+ }
106
+
107
+ def analyze_responses(self, responses: Dict[str, Dict[str, List[str]]]) -> Dict:
108
+ """Analisa as respostas e calcula pontuações"""
109
+ scores = {}
110
+ for temp, categories in self.questionnaire.items():
111
+ marked_strengths = len(responses.get(temp, {}).get('strengths', []))
112
+ marked_weaknesses = len(responses.get(temp, {}).get('weaknesses', []))
113
+ total_possible = len(categories['strengths']) + len(categories['weaknesses'])
114
+ total_marked = marked_strengths + marked_weaknesses
115
+ scores[temp] = (total_marked / total_possible) * 100
116
+
117
+ return scores
118
+
119
+ def get_llama_interpretation(self, scores: Dict[str, float], dominant: str) -> str:
120
+ """Obtém interpretação do modelo Llama"""
121
+ prompt = f"""
122
+ Análise espiritual baseada nos seguintes resultados do teste de temperamento:
123
+
124
+ Pontuações:
125
+ {json.dumps(scores, indent=2)}
126
+
127
+ Temperamento Dominante: {dominant}
128
+
129
+ Por favor forneça:
130
+ 1. Análise detalhada do perfil temperamental
131
+ 2. Necessidades espirituais específicas
132
+ 3. Recomendações práticas para desenvolvimento espiritual
133
+ 4. Dons espirituais potenciais
134
+ 5. Áreas de ministério recomendadas
135
+ 6. Desafios espirituais a superar
136
+ 7. Estratégias de crescimento espiritual
137
+ """
138
+
139
+ try:
140
+ result = self.client.predict(
141
+ message=prompt,
142
+ chat_history=[],
143
+ system_message="""Você é um especialista em análise espiritual e temperamentos,
144
+ com profundo conhecimento da interação entre personalidade e desenvolvimento espiritual.
145
+ Forneça análises detalhadas e práticas.""",
146
+ max_tokens=2048,
147
+ temperature=0.7,
148
+ top_p=0.95,
149
+ language="pt",
150
+ api_name="/respond"
151
+ )
152
+ return result
153
+ except Exception as e:
154
+ return f"Erro na análise: {str(e)}"
155
+
156
+ def create_interface():
157
+ analyzer = TemperamentAnalyzer()
158
+
159
+ def process_selections(
160
+ sang_strengths, sang_weaknesses,
161
+ col_strengths, col_weaknesses,
162
+ mel_strengths, mel_weaknesses,
163
+ fleu_strengths, fleu_weaknesses
164
+ ):
165
+ # Organiza respostas
166
+ responses = {
167
+ 'SANGUÍNEO': {
168
+ 'strengths': sang_strengths,
169
+ 'weaknesses': sang_weaknesses
170
+ },
171
+ 'COLÉRICO': {
172
+ 'strengths': col_strengths,
173
+ 'weaknesses': col_weaknesses
174
+ },
175
+ 'MELANCÓLICO': {
176
+ 'strengths': mel_strengths,
177
+ 'weaknesses': mel_weaknesses
178
+ },
179
+ 'FLEUMÁTICO': {
180
+ 'strengths': fleu_strengths,
181
+ 'weaknesses': fleu_weaknesses
182
+ }
183
+ }
184
+
185
+ # Calcula pontuações
186
+ scores = analyzer.analyze_responses(responses)
187
+
188
+ # Identifica temperamento dominante
189
+ dominant = max(scores.items(), key=lambda x: x[1])[0]
190
+
191
+ # Obtém interpretação do Llama
192
+ interpretation = analyzer.get_llama_interpretation(scores, dominant)
193
+
194
+ # Formata resultado
195
+ result = f"""
196
+ # Análise de Temperamento e Necessidades Espirituais
197
+
198
+ ## Pontuações
199
+ {'-' * 50}
200
+ """ + '\n'.join([f"**{temp}**: {score:.1f}%" for temp, score in scores.items()]) + f"""
201
+
202
+ ## Temperamento Dominante
203
+ {'-' * 50}
204
+ **{dominant}**
205
+
206
+ ## Análise Detalhada
207
+ {'-' * 50}
208
+ {interpretation}
209
+ """
210
+
211
+ return result
212
+
213
+ # Interface Gradio
214
+ with gr.Blocks(theme=gr.themes.Soft()) as iface:
215
+ gr.Markdown("# Análise de Temperamento e Necessidades Espirituais")
216
+
217
+ with gr.Tab("SANGUÍNEO"):
218
+ sang_str = gr.CheckboxGroup(
219
+ choices=analyzer.questionnaire['SANGUÍNEO']['strengths'],
220
+ label="Pontos Fortes"
221
+ )
222
+ sang_weak = gr.CheckboxGroup(
223
+ choices=analyzer.questionnaire['SANGUÍNEO']['weaknesses'],
224
+ label="Pontos Fracos"
225
+ )
226
+
227
+ with gr.Tab("COLÉRICO"):
228
+ col_str = gr.CheckboxGroup(
229
+ choices=analyzer.questionnaire['COLÉRICO']['strengths'],
230
+ label="Pontos Fortes"
231
+ )
232
+ col_weak = gr.CheckboxGroup(
233
+ choices=analyzer.questionnaire['COLÉRICO']['weaknesses'],
234
+ label="Pontos Fracos"
235
+ )
236
+
237
+ with gr.Tab("MELANCÓLICO"):
238
+ mel_str = gr.CheckboxGroup(
239
+ choices=analyzer.questionnaire['MELANCÓLICO']['strengths'],
240
+ label="Pontos Fortes"
241
+ )
242
+ mel_weak = gr.CheckboxGroup(
243
+ choices=analyzer.questionnaire['MELANCÓLICO']['weaknesses'],
244
+ label="Pontos Fracos"
245
+ )
246
+
247
+ with gr.Tab("FLEUMÁTICO"):
248
+ fleu_str = gr.CheckboxGroup(
249
+ choices=analyzer.questionnaire['FLEUMÁTICO']['strengths'],
250
+ label="Pontos Fortes"
251
+ )
252
+ fleu_weak = gr.CheckboxGroup(
253
+ choices=analyzer.questionnaire['FLEUMÁTICO']['weaknesses'],
254
+ label="Pontos Fracos"
255
+ )
256
+
257
+ analyze_btn = gr.Button("Analisar Temperamento", variant="primary")
258
+ output = gr.Markdown()
259
+
260
+ analyze_btn.click(
261
+ fn=process_selections,
262
+ inputs=[
263
+ sang_str, sang_weak,
264
+ col_str, col_weak,
265
+ mel_str, mel_weak,
266
+ fleu_str, fleu_weak
267
+ ],
268
+ outputs=output
269
+ )
270
+
271
+ return iface
272
+
273
+ if __name__ == "__main__":
274
+ iface = create_interface()
275
+ iface.launch()