DHEIVER commited on
Commit
f5eff85
1 Parent(s): f6cb88d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +134 -121
app.py CHANGED
@@ -5,13 +5,57 @@ import logging
5
  import warnings
6
  from typing import List, Tuple, Dict
7
  import random
8
- from datetime import datetime
9
 
10
  logging.basicConfig(level=logging.INFO)
11
  logger = logging.getLogger(__name__)
12
  warnings.filterwarnings('ignore')
13
 
14
- class BiblicalCounselor:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  def __init__(self):
16
  logger.info("Inicializando conselheiro bíblico...")
17
  self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
@@ -26,147 +70,117 @@ class BiblicalCounselor:
26
  logger.error(f"Erro ao carregar modelo: {str(e)}")
27
  raise
28
 
29
- def get_answer(self, theme: str, question: str) -> Tuple[str, str]:
30
- try:
31
- # Respostas pré-definidas para exemplos
32
- responses = {
33
- "casamento_conflitos": (
34
- """🕊️ Orientação Bíblica:
35
- Com base em Efésios 4:26-27, devemos resolver os conflitos sem deixar que o sol se ponha sobre nossa ira.
36
- O perdão e a comunicação são fundamentais no casamento cristão.
37
-
38
- 📖 Princípios Importantes:
39
- 1. Não permita que a raiva permaneça
40
- 2. Comunique-se com amor
41
- 3. Pratique o perdão mútuo
42
-
43
- ✝️ Aplicação Prática:
44
- - Resolva os conflitos no mesmo dia
45
- - Use palavras edificantes
46
- - Ore juntos pela situação""",
47
-
48
- "📚 Referência: Efésios 4:26-27\n🔍 Contexto: Resolução de Conflitos no Casamento"
49
- ),
50
-
51
- "casamento_oracao": (
52
- """🕊️ Orientação Bíblica:
53
- A oração conjunta fortalece o casamento. Conforme 1 Pedro 3:7, marido e mulher são co-herdeiros da graça da vida.
54
-
55
- 📖 Princípios Importantes:
56
- 1. Orem juntos diariamente
57
- 2. Compartilhem pedidos de oração
58
- 3. Agradeçam um pelo outro
59
-
60
- ✝️ Aplicação Prática:
61
- - Estabeleçam um momento diário de oração
62
- - Orem pelos desafios mútuos
63
- - Celebrem as bênçãos juntos""",
64
-
65
- "📚 Referência: 1 Pedro 3:7\n🔍 Contexto: Vida de Oração no Casamento"
66
- )
67
- }
68
 
69
- # Tenta encontrar uma resposta pré-definida
70
- key = f"{theme}_{question.lower().split()[0]}"
71
- if key in responses:
72
- return responses[key]
73
 
74
- # Se não encontrar resposta pré-definida, usa o modelo
75
- passage = "Efésios 5:22-33: Vós, mulheres, sujeitai-vos a vossos maridos, como ao Senhor... Assim devem os maridos amar as suas mulheres, como a seus próprios corpos."
76
-
77
- inputs = self.tokenizer.encode_plus(
78
- question,
79
- passage,
80
- return_tensors="pt",
81
- max_length=512,
82
- truncation=True,
83
- padding="max_length"
84
- ).to(self.device)
85
-
86
- with torch.no_grad():
87
- outputs = self.model(**inputs)
88
-
89
- answer_start = torch.argmax(outputs.start_logits)
90
- answer_end = torch.argmax(outputs.end_logits)
91
-
92
- tokens = self.tokenizer.convert_ids_to_tokens(inputs["input_ids"][0])
93
- answer = tokens[answer_start:answer_end + 1]
94
- model_answer = self.tokenizer.convert_tokens_to_string(answer)
95
 
96
- response = f"""
97
- 🕊️ Orientação Bíblica:
98
- {model_answer}
99
-
100
- 📖 Princípios Importantes:
101
- 1. Busque a orientação divina
102
- 2. Aplique os princípios bíblicos
103
- 3. Mantenha-se em oração
104
-
105
- ✝️ Aplicação Prática:
106
- - Estude a Palavra regularmente
107
- - Pratique os ensinamentos
108
- - Busque aconselhamento pastoral quando necessário
109
- """
110
 
111
- references = "📚 Referência: Efésios 5:22-33\n🔍 Contexto: Princípios Bíblicos para a Vida Cristã"
 
 
112
 
113
- return response, references
 
 
 
 
114
 
115
- except Exception as e:
116
- logger.error(f"Erro ao processar pergunta: {str(e)}")
117
- return "Perdoe-nos, ocorreu um erro ao processar sua pergunta.", "Erro no processamento"
118
 
119
  def create_interface():
120
- counselor = BiblicalCounselor()
121
-
122
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
123
  gr.Markdown("""
124
- # 🕊️ Conselheiro Bíblico Virtual
125
- ### Orientação Espiritual Baseada nas Sagradas Escrituras
126
  """)
127
 
128
  with gr.Row():
129
  with gr.Column():
130
- # Dropdown com valores corretos
131
  theme = gr.Dropdown(
132
- choices=["💑 Casamento", "👶 Criação de Filhos"],
133
- value="💑 Casamento",
134
- label="Escolha o Tema"
135
  )
136
-
137
  question = gr.Textbox(
138
- label="💭 Sua Pergunta",
139
- placeholder="Digite sua pergunta aqui...",
140
  lines=3
141
  )
142
-
143
- submit_btn = gr.Button("🙏 Buscar Orientação", variant="primary")
144
 
145
  with gr.Column():
146
- answer_output = gr.Markdown(label="Resposta")
147
- references = gr.Textbox(label="Referências", interactive=False)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
 
149
- # Exemplos sem cache
150
- with gr.Row():
151
- gr.Markdown("""### Exemplos de Perguntas:
152
- 1. Como resolver conflitos no casamento?
153
- 2. Como orar pelo casamento?
154
- 3. Como educar filhos biblicamente?
155
- 4. Como manter a harmonia familiar?
156
- 5. Como lidar com diferenças no casamento?
157
- """)
158
-
159
- # Função para processar a pergunta
160
- def process_question(theme_selected, question_text):
161
- # Remove emojis do tema para processamento
162
- theme_clean = "casamento" if "Casamento" in theme_selected else "criacao_filhos"
163
- return counselor.get_answer(theme_clean, question_text)
164
-
165
- # Eventos
166
  submit_btn.click(
167
- fn=process_question,
168
  inputs=[theme, question],
169
- outputs=[answer_output, references]
170
  )
171
 
172
  return demo
@@ -178,8 +192,7 @@ if __name__ == "__main__":
178
  demo.launch(
179
  server_name="0.0.0.0",
180
  share=True,
181
- show_error=True,
182
- cache_examples=False # Desativa cache de exemplos
183
  )
184
  except Exception as e:
185
  logger.error(f"Erro ao iniciar aplicação: {str(e)}")
 
5
  import warnings
6
  from typing import List, Tuple, Dict
7
  import random
8
+ import hashlib
9
 
10
  logging.basicConfig(level=logging.INFO)
11
  logger = logging.getLogger(__name__)
12
  warnings.filterwarnings('ignore')
13
 
14
+ # Banco de exemplos e respostas pré-definidas
15
+ BIBLICAL_EXAMPLES = {
16
+ "casamento": [
17
+ {
18
+ "pergunta": "Como resolver conflitos no casamento?",
19
+ "passagem": "Efésios 4:26-32",
20
+ "texto": """Não se ponha o sol sobre a vossa ira. Não deis lugar ao diabo. Toda amargura, cólera, ira, gritaria e blasfêmia sejam tiradas dentre vós, bem como toda malícia. Antes, sede bondosos uns para com os outros, compassivos, perdoando uns aos outros, como também Deus vos perdoou em Cristo.""",
21
+ "resposta_base": """O princípio bíblico para resolução de conflitos no casamento envolve três aspectos fundamentais: não deixar a ira se prolongar, comunicar-se com amor e praticar o perdão mútuo. A Palavra nos ensina que devemos resolver os conflitos rapidamente, não permitindo que o sol se ponha sobre nossa ira.""",
22
+ "aplicacao": "Resolução diária de conflitos, perdão e reconciliação"
23
+ },
24
+ {
25
+ "pergunta": "Como manter um casamento forte espiritualmente?",
26
+ "passagem": "Eclesiastes 4:9-12",
27
+ "texto": """É melhor serem dois do que um, porque têm melhor paga do seu trabalho. Porque se um cair, o outro levanta o seu companheiro; mas ai do que estiver só; pois, caindo, não haverá outro que o levante. Também, se dois dormirem juntos, eles se aquentarão; mas um só, como se aquentará? E, se alguém prevalecer contra um, os dois lhe resistirão; e o cordão de três dobras não se quebra tão depressa.""",
28
+ "resposta_base": """A força espiritual do casamento vem da união em três dimensões: o marido, a esposa e Deus. Como um cordão de três dobras, esta união proporciona apoio mútuo, fortalecimento espiritual e resistência nas adversidades.""",
29
+ "aplicacao": "Desenvolvimento espiritual conjunto e oração em casal"
30
+ },
31
+ {
32
+ "pergunta": "Qual o papel do perdão no casamento?",
33
+ "passagem": "Colossenses 3:13-14",
34
+ "texto": """Suportando-vos uns aos outros, e perdoando-vos uns aos outros, se alguém tiver queixa contra outro; assim como Cristo vos perdoou, assim fazei vós também. E, sobre tudo isto, revesti-vos de amor, que é o vínculo da perfeição.""",
35
+ "resposta_base": """O perdão no casamento reflete o perdão que recebemos de Cristo. É um ato contínuo de amor que fortalece o vínculo conjugal e promove a cura emocional. Devemos perdoar assim como fomos perdoados.""",
36
+ "aplicacao": "Prática do perdão e cultivo do amor sacrificial"
37
+ },
38
+ {
39
+ "pergunta": "Como manter a fidelidade no casamento?",
40
+ "passagem": "Hebreus 13:4",
41
+ "texto": """Venerado seja entre todos o matrimônio e o leito sem mácula; porém aos que se dão à prostituição e aos adúlteros, Deus os julgará.""",
42
+ "resposta_base": """A fidelidade no casamento é um mandamento divino que requer compromisso, respeito mútuo e temor a Deus. O matrimônio deve ser honrado por todos, mantendo a pureza e a santidade da união conjugal.""",
43
+ "aplicacao": "Compromisso com a fidelidade e pureza conjugal"
44
+ },
45
+ {
46
+ "pergunta": "Como lidar com diferenças no casamento?",
47
+ "passagem": "1 Pedro 3:8-9",
48
+ "texto": """Finalmente, sede todos de um mesmo sentimento, compassivos, amando os irmãos, entranhavelmente misericordiosos e humildes. Não tornando mal por mal, ou injúria por injúria; antes, pelo contrário, bendizendo.""",
49
+ "resposta_base": """As diferenças no casamento devem ser tratadas com compreensão, humildade e respeito mútuo. A unidade não significa uniformidade, mas harmonia nas diferenças através do amor e da compaixão.""",
50
+ "aplicacao": "Respeito às diferenças e busca da harmonia"
51
+ }
52
+ ],
53
+ "criacao_filhos": [
54
+ # [Exemplos similares para outros temas...]
55
+ ]
56
+ }
57
+
58
+ class DiverseBiblicalCounselor:
59
  def __init__(self):
60
  logger.info("Inicializando conselheiro bíblico...")
61
  self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
 
70
  logger.error(f"Erro ao carregar modelo: {str(e)}")
71
  raise
72
 
73
+ def get_unique_response(self, question: str, theme: str) -> Tuple[str, Dict]:
74
+ """Gera uma resposta única baseada na pergunta e tema"""
75
+
76
+ # Gera um hash da pergunta para garantir consistência
77
+ question_hash = hashlib.md5(question.lower().encode()).hexdigest()
78
+
79
+ # Seleciona exemplo baseado no hash
80
+ examples = BIBLICAL_EXAMPLES.get(theme, [])
81
+ if not examples:
82
+ return "Tema não encontrado", {}
83
+
84
+ # Usa o hash para selecionar um exemplo de forma determinística
85
+ selected_index = int(question_hash, 16) % len(examples)
86
+ example = examples[selected_index]
87
+
88
+ # Prepara o contexto para o modelo
89
+ inputs = self.tokenizer.encode_plus(
90
+ question,
91
+ example["texto"],
92
+ return_tensors="pt",
93
+ max_length=512,
94
+ truncation=True,
95
+ padding="max_length"
96
+ ).to(self.device)
97
+
98
+ # Gera a resposta
99
+ with torch.no_grad():
100
+ outputs = self.model(**inputs)
101
+
102
+ answer_start = torch.argmax(outputs.start_logits)
103
+ answer_end = torch.argmax(outputs.end_logits)
104
+
105
+ tokens = self.tokenizer.convert_ids_to_tokens(inputs["input_ids"][0])
106
+ model_answer = tokens[answer_start:answer_end + 1]
107
+ model_answer = self.tokenizer.convert_tokens_to_string(model_answer)
 
 
 
 
108
 
109
+ # Formata a resposta final
110
+ response = f"""
111
+ 🕊️ Conselho Bíblico:
112
+ {example['resposta_base']}
113
 
114
+ 📖 Passagem Bíblica:
115
+ {example['passagem']}: {example['texto']}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
 
117
+ ✝️ Aplicação Prática:
118
+ {example['aplicacao']}
 
 
 
 
 
 
 
 
 
 
 
 
119
 
120
+ 💭 Reflexão Adicional:
121
+ {model_answer}
122
+ """
123
 
124
+ metadata = {
125
+ "passagem": example['passagem'],
126
+ "contexto": "Baseado em princípios bíblicos para " + theme.replace('_', ' '),
127
+ "aplicacao": example['aplicacao']
128
+ }
129
 
130
+ return response, metadata
 
 
131
 
132
  def create_interface():
133
+ counselor = DiverseBiblicalCounselor()
134
+
135
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
136
  gr.Markdown("""
137
+ # 🕊️ Conselheiro Bíblico
138
+ ### Orientação Bíblica Personalizada
139
  """)
140
 
141
  with gr.Row():
142
  with gr.Column():
 
143
  theme = gr.Dropdown(
144
+ choices=list(BIBLICAL_EXAMPLES.keys()),
145
+ label="Tema",
146
+ value="casamento"
147
  )
 
148
  question = gr.Textbox(
149
+ label="Sua Pergunta",
150
+ placeholder="Digite sua pergunta...",
151
  lines=3
152
  )
153
+ submit_btn = gr.Button("🙏 Buscar Orientação")
 
154
 
155
  with gr.Column():
156
+ answer_output = gr.Textbox(
157
+ label="Resposta",
158
+ lines=10
159
+ )
160
+ metadata_output = gr.Textbox(
161
+ label="Referências",
162
+ lines=3
163
+ )
164
+
165
+ # Exemplos
166
+ gr.Examples(
167
+ examples=[
168
+ ["casamento", "Como resolver conflitos no casamento?"],
169
+ ["casamento", "Como manter um casamento forte espiritualmente?"],
170
+ ["casamento", "Qual o papel do perdão no casamento?"],
171
+ ["casamento", "Como manter a fidelidade no casamento?"],
172
+ ["casamento", "Como lidar com diferenças no casamento?"]
173
+ ],
174
+ inputs=[theme, question],
175
+ outputs=[answer_output, metadata_output],
176
+ fn=lambda t, q: counselor.get_unique_response(q, t),
177
+ label="Exemplos de Perguntas"
178
+ )
179
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180
  submit_btn.click(
181
+ fn=lambda t, q: counselor.get_unique_response(q, t),
182
  inputs=[theme, question],
183
+ outputs=[answer_output, metadata_output]
184
  )
185
 
186
  return demo
 
192
  demo.launch(
193
  server_name="0.0.0.0",
194
  share=True,
195
+ show_error=True
 
196
  )
197
  except Exception as e:
198
  logger.error(f"Erro ao iniciar aplicação: {str(e)}")