DHEIVER commited on
Commit
8445ab0
1 Parent(s): 35edc8e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +153 -298
app.py CHANGED
@@ -7,131 +7,82 @@ from typing import List, Tuple, Dict
7
  import random
8
  import hashlib
9
  from datetime import datetime
 
 
 
 
 
10
 
11
  logging.basicConfig(level=logging.INFO)
12
  logger = logging.getLogger(__name__)
13
  warnings.filterwarnings('ignore')
14
 
15
- class DiverseBiblicalCounselor:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  def __init__(self):
17
- logger.info("Inicializando conselheiro bíblico...")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
19
  self.model_name = "pierreguillou/bert-base-cased-squad-v1.1-portuguese"
20
  self.session_history = []
 
 
 
21
 
22
- self.biblical_examples = {
23
- "casamento": [
24
- {
25
- "pergunta": "Como resolver conflitos no casamento?",
26
- "passagem": "Efésios 4:26-32",
27
- "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.""",
28
- "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.""",
29
- "aplicacao": "Resolução diária de conflitos, perdão e reconciliação"
30
- },
31
- {
32
- "pergunta": "Como manter um casamento forte espiritualmente?",
33
- "passagem": "Eclesiastes 4:9-12",
34
- "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.""",
35
- "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.""",
36
- "aplicacao": "Desenvolvimento espiritual conjunto e oração em casal"
37
- },
38
- {
39
- "pergunta": "Como lidar com diferenças no casamento?",
40
- "passagem": "1 Pedro 3:8-9",
41
- "texto": """Finalmente, sede todos de um mesmo sentimento, compassivos, amando os irmãos, entranhavelmente misericordiosos e humildes. Não torneis mal por mal, ou injúria por injúria; antes, pelo contrário, bendizei, sabendo que para isto fostes chamados, para que por herança alcanceis a bênção.""",
42
- "resposta_base": """As diferenças no casamento devem ser tratadas com compreensão mútua, humildade e amor. O casal deve buscar unidade sem anular as individualidades.""",
43
- "aplicacao": "Praticar empatia e respeito às diferenças"
44
- }
45
- ],
46
- "familia": [
47
- {
48
- "pergunta": "Como educar filhos segundo a Bíblia?",
49
- "passagem": "Provérbios 22:6",
50
- "texto": """Instrui o menino no caminho em que deve andar, e até quando envelhecer não se desviará dele.""",
51
- "resposta_base": """A educação dos filhos deve ser fundamentada nos princípios bíblicos, com amor, disciplina e instrução constante. Os pais são responsáveis por guiar seus filhos no caminho do Senhor desde cedo.""",
52
- "aplicacao": "Ensino diário dos princípios bíblicos aos filhos"
53
- },
54
- {
55
- "pergunta": "Como manter a harmonia familiar?",
56
- "passagem": "Colossenses 3:13-14",
57
- "texto": """Suportai-vos uns aos outros, e perdoai-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.""",
58
- "resposta_base": """A harmonia familiar é construída sobre o fundamento do amor, perdão e compreensão mútua. Cada membro deve contribuir para um ambiente de paz e respeito.""",
59
- "aplicacao": "Cultivo diário do amor e perdão no ambiente familiar"
60
- }
61
- ],
62
- "vida_espiritual": [
63
- {
64
- "pergunta": "Como desenvolver uma vida de oração?",
65
- "passagem": "1 Tessalonicenses 5:17-18",
66
- "texto": """Orai sem cessar. Em tudo dai graças, porque esta é a vontade de Deus em Cristo Jesus para convosco.""",
67
- "resposta_base": """A vida de oração é fundamental para o crescimento espiritual. Devemos manter comunicação constante com Deus, sendo gratos em todas as circunstâncias.""",
68
- "aplicacao": "Estabelecer momentos diários de oração e gratidão"
69
- },
70
- {
71
- "pergunta": "Como crescer na fé?",
72
- "passagem": "Romanos 10:17",
73
- "texto": """De sorte que a fé é pelo ouvir, e o ouvir pela palavra de Deus.""",
74
- "resposta_base": """O crescimento na fé vem através do estudo e meditação na Palavra de Deus, além da prática constante dos seus ensinamentos.""",
75
- "aplicacao": "Estudo diário da Bíblia e prática dos ensinamentos"
76
- },
77
- {
78
- "pergunta": "Como vencer tentações?",
79
- "passagem": "1 Coríntios 10:13",
80
- "texto": """Não veio sobre vós tentação, senão humana; mas fiel é Deus, que não vos deixará tentar acima do que podeis, antes com a tentação dará também o escape, para que a possais suportar.""",
81
- "resposta_base": """Deus é fiel em nos dar força e escape das tentações. Devemos confiar em Sua palavra e buscar Sua presença nos momentos de provação.""",
82
- "aplicacao": "Buscar força em Deus e usar os escapes que Ele provê"
83
- }
84
- ],
85
- "trabalho": [
86
- {
87
- "pergunta": "Como ter integridade no trabalho?",
88
- "passagem": "Colossenses 3:23",
89
- "texto": """E tudo quanto fizerdes, fazei-o de coração, como ao Senhor e não aos homens.""",
90
- "resposta_base": """O trabalho deve ser realizado com excelência e integridade, como um serviço ao Senhor.""",
91
- "aplicacao": "Praticar ética e dedicação no ambiente profissional"
92
- },
93
- {
94
- "pergunta": "Como lidar com pressões no trabalho?",
95
- "passagem": "Filipenses 4:6-7",
96
- "texto": """Não andeis ansiosos por coisa alguma; antes em tudo sejam os vossos pedidos conhecidos diante de Deus pela oração e súplica com ação de graças; E a paz de Deus, que excede todo entendimento, guardará os vossos corações e os vossos sentimentos em Cristo Jesus.""",
97
- "resposta_base": """As pressões do trabalho devem ser entregues a Deus através da oração, mantendo a confiança em Sua provisão e direção.""",
98
- "aplicacao": "Praticar a entrega das preocupações a Deus"
99
- }
100
- ],
101
- "relacionamentos": [
102
- {
103
- "pergunta": "Como lidar com conflitos?",
104
- "passagem": "Mateus 5:23-24",
105
- "texto": """Portanto, se estiveres apresentando a tua oferta no altar e aí te lembrares de que teu irmão tem alguma coisa contra ti, deixa ali a tua oferta diante do altar, e vai primeiro reconciliar-te com teu irmão; e depois vem apresentar a tua oferta.""",
106
- "resposta_base": """A reconciliação e o perdão são prioridades nos relacionamentos cristãos.""",
107
- "aplicacao": "Buscar reconciliação ativa nos relacionamentos"
108
- },
109
- {
110
- "pergunta": "Como construir amizades verdadeiras?",
111
- "passagem": "Provérbios 17:17",
112
- "texto": """Em todo tempo ama o amigo, e na angústia nasce o irmão.""",
113
- "resposta_base": """Amizades verdadeiras são construídas com amor, lealdade e presença nos momentos difíceis.""",
114
- "aplicacao": "Cultivar amizades com dedicação e fidelidade"
115
- }
116
- ],
117
- "geral": [
118
- {
119
- "pergunta": "Como encontrar propósito na vida?",
120
- "passagem": "Jeremias 29:11",
121
- "texto": """Porque eu bem sei os pensamentos que tenho a vosso respeito, diz o Senhor; pensamentos de paz, e não de mal, para vos dar o fim que esperais.""",
122
- "resposta_base": """Deus tem um propósito específico para cada pessoa, baseado em Seu plano de paz e esperança.""",
123
- "aplicacao": "Buscar a direção de Deus para a vida"
124
- },
125
- {
126
- "pergunta": "Como ter paz em tempos difíceis?",
127
- "passagem": "João 14:27",
128
- "texto": """Deixo-vos a paz, a minha paz vos dou; não vo-la dou como o mundo a dá. Não se turbe o vosso coração, nem se atemorize.""",
129
- "resposta_base": """A verdadeira paz vem de Deus e permanece mesmo em meio às tribulações.""",
130
- "aplicacao": "Confiar na paz de Deus em todas as circunstâncias"
131
- }
132
- ]
133
- }
134
-
135
  try:
136
  self.tokenizer = AutoTokenizer.from_pretrained(self.model_name)
137
  self.model = AutoModelForQuestionAnswering.from_pretrained(self.model_name)
@@ -141,233 +92,137 @@ class DiverseBiblicalCounselor:
141
  logger.error(f"Erro ao carregar modelo: {str(e)}")
142
  raise
143
 
144
- def get_themes(self) -> List[str]:
145
- """Retorna lista de temas disponíveis"""
146
- return list(self.biblical_examples.keys())
147
-
148
- def get_examples(self) -> List[List[str]]:
149
- """Retorna exemplos formatados para a interface"""
150
- examples = []
151
- for theme in self.biblical_examples:
152
- for example in self.biblical_examples[theme]:
153
- examples.append([theme, example["pergunta"]])
154
- return examples
155
-
156
- def get_verse_of_the_day(self) -> str:
157
- """Retorna um versículo diário baseado na data"""
158
- all_verses = []
159
- for theme_examples in self.biblical_examples.values():
160
- for example in theme_examples:
161
- all_verses.append({
162
- 'passagem': example['passagem'],
163
- 'texto': example['texto']
164
- })
165
 
166
- today = datetime.now().strftime("%Y%m%d")
167
- random.seed(today)
168
- verse = random.choice(all_verses)
169
 
170
- return f"📖 Versículo do Dia:\n{verse['passagem']}\n\n{verse['texto']}"
171
-
172
- def find_best_theme(self, question: str) -> str:
173
- """Identifica o melhor tema baseado na pergunta"""
174
- question = question.lower()
175
- theme_keywords = {
176
- "casamento": ["casamento", "cônjuge", "esposa", "marido", "casal", "matrimônio", "matrimonial"],
177
- "familia": ["família", "filhos", "pais", "criação", "lar", "familiar", "doméstico"],
178
- "vida_espiritual": ["oração", "jejum", "adoração", "espiritual", "fé", "devoção", "santidade"],
179
- "trabalho": ["trabalho", "emprego", "carreira", "profissão", "negócio", "profissional"],
180
- "relacionamentos": ["amizade", "relacionamento", "conflito", "perdão", "amigo", "social"],
181
- "geral": [] # Tema padrão se nenhum outro corresponder
182
- }
183
 
184
- for theme, keywords in theme_keywords.items():
185
- if any(keyword in question for keyword in keywords):
186
- return theme
187
- return "geral"
188
-
189
- def save_to_history(self, question: str, theme: str, response: str, metadata: Dict):
190
- """Salva a consulta no histórico com timestamp"""
191
- self.session_history.append({
192
- "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
193
- "theme": theme,
194
- "question": question,
195
- "response": response,
196
- "metadata": metadata
197
- })
198
- return self.format_history()
199
-
200
- def format_history(self) -> str:
201
- """Formata o histórico de consultas para exibição"""
202
- if not self.session_history:
203
- return "Nenhuma consulta realizada ainda."
204
-
205
- history_text = "📚 Histórico de Consultas:\n\n"
206
- for entry in reversed(self.session_history[-5:]):
207
- history_text += f"🕒 {entry['timestamp']}\n"
208
- history_text += f"📌 Tema: {entry['theme']}\n"
209
- history_text += f"❓ Pergunta: {entry['question']}\n"
210
- history_text += f"📖 Passagem: {entry['metadata']['passagem']}\n"
211
- history_text += "─" * 50 + "\n"
212
- return history_text
213
-
214
- def get_unique_response(self, question: str, theme: str = None) -> Tuple[str, Dict, str]:
215
- """Gera uma resposta única baseada na pergunta, detectando o tema automaticamente se não fornecido"""
216
- if not theme or theme not in self.biblical_examples:
217
- theme = self.find_best_theme(question)
218
-
219
- examples = self.biblical_examples[theme]
220
- selected_index = random.randint(0, len(examples) - 1)
221
- example = examples[selected_index]
222
 
223
- try:
224
- inputs = self.tokenizer.encode_plus(
225
- question,
226
- example["texto"],
227
- return_tensors="pt",
228
- max_length=512,
229
- truncation=True,
230
- padding="max_length"
231
- ).to(self.device)
232
-
233
- with torch.no_grad():
234
- outputs = self.model(**inputs)
235
-
236
- answer_start = torch.argmax(outputs.start_logits)
237
- answer_end = torch.argmax(outputs.end_logits)
238
-
239
- tokens = self.tokenizer.convert_ids_to_tokens(inputs["input_ids"][0])
240
- model_answer = tokens[answer_start:answer_end + 1]
241
- model_answer = self.tokenizer.convert_tokens_to_string(model_answer)
242
- except Exception as e:
243
- logger.error(f"Erro ao gerar resposta: {str(e)}")
244
- model_answer = "Reflexão baseada nos princípios bíblicos apresentados."
245
 
246
- response = f"""
247
- 🕊️ Conselho Bíblico:
248
- {example['resposta_base']}
 
249
 
250
  📖 Passagem Bíblica:
251
  {example['passagem']}: {example['texto']}
252
 
253
- ✝️ Aplicação Prática:
254
  {example['aplicacao']}
255
 
256
- 💭 Reflexão Adicional:
257
- {model_answer}
 
 
 
258
 
259
- 🙏 Lembre-se: Esta é uma orientação baseada em princípios bíblicos. Para questões específicas, consulte também sua liderança espiritual local.
 
260
  """
261
 
262
- metadata = {
263
- "passagem": example['passagem'],
264
- "contexto": f"Baseado em princípios bíblicos para {theme.replace('_', ' ')}",
265
- "aplicacao": example['aplicacao']
 
 
 
 
266
  }
 
267
 
268
- history = self.save_to_history(question, theme, response, metadata)
269
- return response, metadata, history
270
-
271
- def create_interface():
272
- counselor = DiverseBiblicalCounselor()
 
 
273
 
274
- with gr.Blocks(theme=gr.themes.Soft()) as demo:
275
  gr.Markdown("""
276
- # 🕊️ Conselheiro Bíblico
277
- ### Orientação Bíblica Personalizada para Qualquer Pergunta
278
  """)
279
 
280
  with gr.Row():
281
- verse_of_day = gr.Textbox(
282
- label="Versículo do Dia",
283
- value=counselor.get_verse_of_the_day(),
284
- lines=4,
285
- interactive=False
286
- )
 
 
 
 
 
 
 
 
 
287
 
288
  with gr.Tabs():
289
- with gr.TabItem("📝 Consulta"):
290
  with gr.Row():
291
  with gr.Column():
292
  theme = gr.Dropdown(
293
  choices=counselor.get_themes(),
294
- label="Tema (Opcional)",
295
  value="geral",
296
- info="Selecione um tema ou deixe em branco para detecção automática"
297
  )
 
298
  question = gr.Textbox(
299
- label="Sua Pergunta",
300
- placeholder="Digite qualquer pergunta sobre a Bíblia ou vida cristã...",
301
  lines=3
302
  )
303
- submit_btn = gr.Button("🙏 Buscar Orientação", variant="primary")
 
 
 
304
 
305
  with gr.Column():
306
  answer_output = gr.Textbox(
307
- label="Resposta",
308
  lines=12
309
  )
310
- metadata_output = gr.Textbox(
311
- label="Referências",
312
- lines=3
313
- )
314
 
315
- with gr.TabItem("📚 Histórico"):
316
- history_output = gr.Textbox(
317
- label="Histórico de Consultas",
318
- value="Nenhuma consulta realizada ainda.",
319
- lines=15,
320
- interactive=False
321
- )
322
-
323
- with gr.TabItem("ℹ️ Ajuda"):
324
- gr.Markdown("""
325
- ### Como usar o Conselheiro Bíblico:
326
- 1. Digite sua pergunta sobre qualquer tema bíblico ou da vida cristã
327
- 2. Opcionalmente, selecione um tema específico para contextualizar melhor sua pergunta
328
- 3. Clique em "Buscar Orientação"
329
- 4. Receba orientação baseada em princípios bíblicos
330
-
331
- ### Temas Disponíveis:
332
- - Casamento: Conselhos para relacionamento conjugal
333
- - Família: Orientação para vida familiar
334
- - Vida Espiritual: Crescimento na fé e devoção
335
- - Trabalho: Princípios bíblicos para a vida profissional
336
- - Relacionamentos: Amizades e convivência
337
- - Geral: Outros temas e questões diversas
338
-
339
- ### Funcionalidades:
340
- - Versículo diário atualizado automaticamente
341
- - Detecção automática do tema da sua pergunta
342
- - Histórico das últimas consultas
343
- - Respostas baseadas em princípios bíblicos com aplicações práticas
344
-
345
- ### Observações:
346
- - As respostas são geradas com base em princípios bíblicos
347
- - Para questões específicas, recomenda-se consultar também sua liderança espiritual
348
- - O sistema aprende e se adapta para fornecer respostas mais relevantes
349
- """)
350
-
351
- gr.Examples(
352
- examples=counselor.get_examples(),
353
- inputs=[theme, question],
354
- outputs=[answer_output, metadata_output, history_output],
355
- fn=lambda t, q: counselor.get_unique_response(q, t),
356
- label="Exemplos de Perguntas"
357
- )
358
 
359
- submit_btn.click(
360
- fn=counselor.get_unique_response,
361
- inputs=[question, theme],
362
- outputs=[answer_output, metadata_output, history_output]
363
- )
364
 
365
  return demo
366
 
367
  if __name__ == "__main__":
368
  try:
369
- logger.info("Iniciando aplicação...")
370
- demo = create_interface()
371
  demo.launch(
372
  server_name="0.0.0.0",
373
  share=True,
 
7
  import random
8
  import hashlib
9
  from datetime import datetime
10
+ from dataclasses import dataclass
11
+ from enum import Enum
12
+ import json
13
+ import re
14
+ from pathlib import Path
15
 
16
  logging.basicConfig(level=logging.INFO)
17
  logger = logging.getLogger(__name__)
18
  warnings.filterwarnings('ignore')
19
 
20
+ class ThemeType(Enum):
21
+ MARRIAGE = "casamento"
22
+ FAMILY = "familia"
23
+ SPIRITUAL = "vida_espiritual"
24
+ WORK = "trabalho"
25
+ RELATIONSHIPS = "relacionamentos"
26
+ GENERAL = "geral"
27
+
28
+ @dataclass
29
+ class BiblicalExample:
30
+ question: str
31
+ passage: str
32
+ text: str
33
+ base_response: str
34
+ application: str
35
+ keywords: List[str]
36
+ sentiment: str # Added for emotional context
37
+
38
+ class ResponseGenerator:
39
  def __init__(self):
40
+ self.nlp_model = None # Placeholder for sentiment analysis
41
+
42
+ def analyze_sentiment(self, text: str) -> str:
43
+ # Basic sentiment analysis based on keywords
44
+ positive_words = {'alegria', 'esperança', 'paz', 'amor', 'gratidão'}
45
+ negative_words = {'tristeza', 'medo', 'ansiedade', 'preocupação', 'angústia'}
46
+
47
+ text_words = set(text.lower().split())
48
+ pos_count = len(text_words.intersection(positive_words))
49
+ neg_count = len(text_words.intersection(negative_words))
50
+
51
+ return 'positive' if pos_count > neg_count else 'negative' if neg_count > pos_count else 'neutral'
52
+
53
+ def personalize_response(self, example: BiblicalExample, question: str) -> str:
54
+ sentiment = self.analyze_sentiment(question)
55
+
56
+ # Customize response based on sentiment
57
+ intro = {
58
+ 'positive': "Que bom que você está buscando orientação! ",
59
+ 'negative': "Entendo que você possa estar passando por um momento difícil. ",
60
+ 'neutral': "Agradeço sua busca por sabedoria. "
61
+ }
62
+
63
+ return f"{intro[sentiment]}{example.base_response}"
64
+
65
+ class EnhancedBiblicalCounselor:
66
+ def __init__(self):
67
+ logger.info("Inicializando conselheiro bíblico aprimorado...")
68
  self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
69
  self.model_name = "pierreguillou/bert-base-cased-squad-v1.1-portuguese"
70
  self.session_history = []
71
+ self.response_generator = ResponseGenerator()
72
+ self.load_examples()
73
+ self.setup_model()
74
 
75
+ def load_examples(self):
76
+ # Load examples from JSON file (you would need to create this)
77
+ examples_path = Path("biblical_examples.json")
78
+ if examples_path.exists():
79
+ with open(examples_path) as f:
80
+ self.biblical_examples = json.load(f)
81
+ else:
82
+ # Fallback to default examples
83
+ self.biblical_examples = self._get_default_examples()
84
+
85
+ def setup_model(self):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  try:
87
  self.tokenizer = AutoTokenizer.from_pretrained(self.model_name)
88
  self.model = AutoModelForQuestionAnswering.from_pretrained(self.model_name)
 
92
  logger.error(f"Erro ao carregar modelo: {str(e)}")
93
  raise
94
 
95
+ def get_unique_response(self, question: str, theme: str = None) -> Tuple[str, Dict, str]:
96
+ if not theme:
97
+ theme = self.find_best_theme(question)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
 
99
+ example = self._select_best_example(question, theme)
100
+ personalized_response = self.response_generator.personalize_response(example, question)
 
101
 
102
+ # Generate AI response using the model
103
+ model_response = self._generate_model_response(question, example['texto'])
 
 
 
 
 
 
 
 
 
 
 
104
 
105
+ # Create enhanced response with better formatting and structure
106
+ response = self._format_enhanced_response(
107
+ personalized_response,
108
+ example,
109
+ model_response,
110
+ self._get_additional_resources(theme)
111
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
 
113
+ metadata = self._create_metadata(example, theme)
114
+ history = self.save_to_history(question, theme, response, metadata)
115
+
116
+ return response, metadata, history
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
 
118
+ def _format_enhanced_response(self, personalized_response, example, model_response, resources):
119
+ return f"""
120
+ 🌟 Orientação Personalizada:
121
+ {personalized_response}
122
 
123
  📖 Passagem Bíblica:
124
  {example['passagem']}: {example['texto']}
125
 
126
+ Aplicação Prática:
127
  {example['aplicacao']}
128
 
129
+ 💭 Reflexão Gerada por IA:
130
+ {model_response}
131
+
132
+ 📚 Recursos Adicionais:
133
+ {resources}
134
 
135
+ 🙏 Observação: Esta orientação é baseada em princípios bíblicos. Para questões específicas,
136
+ considere consultar sua liderança espiritual local.
137
  """
138
 
139
+ def _get_additional_resources(self, theme):
140
+ # Add relevant books, articles, or other resources based on the theme
141
+ resources = {
142
+ "casamento": ["'O Significado do Casamento' - Timothy Keller",
143
+ "'Casamento Blindado' - Renato e Cristiane Cardoso"],
144
+ "familia": ["'Criando Filhos' - Tim Kimmel",
145
+ "'Limites' - Henry Cloud e John Townsend"]
146
+ # Add more resources for other themes
147
  }
148
+ return "\n".join(resources.get(theme, ["Bíblia de Estudo"]))
149
 
150
+ def create_enhanced_interface():
151
+ counselor = EnhancedBiblicalCounselor()
152
+
153
+ custom_theme = gr.themes.Soft().set(
154
+ button_primary_background_fill="indigo",
155
+ button_primary_background_fill_dark="darkblue",
156
+ )
157
 
158
+ with gr.Blocks(theme=custom_theme) as demo:
159
  gr.Markdown("""
160
+ # 🕊️ Conselheiro Bíblico Plus
161
+ ### Orientação Bíblica Personalizada com Inteligência Artificial
162
  """)
163
 
164
  with gr.Row():
165
+ with gr.Column(scale=1):
166
+ verse_of_day = gr.Textbox(
167
+ label="🌟 Versículo do Dia",
168
+ value=counselor.get_verse_of_the_day(),
169
+ lines=4,
170
+ interactive=False
171
+ )
172
+
173
+ with gr.Column(scale=1):
174
+ prayer_focus = gr.Textbox(
175
+ label="🙏 Foco de Oração do Dia",
176
+ value=counselor.get_daily_prayer_focus(),
177
+ lines=4,
178
+ interactive=False
179
+ )
180
 
181
  with gr.Tabs():
182
+ with gr.TabItem("📝 Nova Consulta", id=1):
183
  with gr.Row():
184
  with gr.Column():
185
  theme = gr.Dropdown(
186
  choices=counselor.get_themes(),
187
+ label="🎯 Tema",
188
  value="geral",
189
+ info="Selecione um tema ou deixe em automático"
190
  )
191
+
192
  question = gr.Textbox(
193
+ label="Sua Pergunta",
194
+ placeholder="Digite sua pergunta sobre qualquer tema bíblico...",
195
  lines=3
196
  )
197
+
198
+ with gr.Row():
199
+ submit_btn = gr.Button("🙏 Buscar Orientação", variant="primary")
200
+ clear_btn = gr.Button("🔄 Limpar", variant="secondary")
201
 
202
  with gr.Column():
203
  answer_output = gr.Textbox(
204
+ label="✨ Orientação",
205
  lines=12
206
  )
 
 
 
 
207
 
208
+ with gr.Accordion("📚 Detalhes e Referências"):
209
+ metadata_output = gr.JSON(
210
+ label="📋 Informações Detalhadas"
211
+ )
212
+
213
+ feedback = gr.Radio(
214
+ ["👍 Útil", "👎 Precisa Melhorar"],
215
+ label="📢 Sua Opinião"
216
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
 
218
+ # Add more tabs and features...
 
 
 
 
219
 
220
  return demo
221
 
222
  if __name__ == "__main__":
223
  try:
224
+ logger.info("Iniciando aplicação aprimorada...")
225
+ demo = create_enhanced_interface()
226
  demo.launch(
227
  server_name="0.0.0.0",
228
  share=True,