akra35567 commited on
Commit
5355c8a
·
verified ·
1 Parent(s): 344f70f

Update modules/config.py

Browse files
Files changed (1) hide show
  1. modules/config.py +108 -191
modules/config.py CHANGED
@@ -7,7 +7,7 @@
7
  """
8
  import os
9
  import json
10
- from typing import List, Dict, Any, Optional # ADICIONE ESTA LINHA
11
 
12
  # ============================================================================
13
  # 🔥 CHAVES DE API
@@ -149,14 +149,14 @@ CONTEXTO DE REPLY:
149
  REGRAS DE CONTEXTO ABSOLUTAS:
150
  1. IDENTIFICAÇÃO DE QUEM FALOU:
151
  - Se mensagem citada foi MINHA: "Estou respondendo ao que EU disse antes..."
152
- - Se mensagem citada foi de OUTRA PESSOA: "Leia o conteúdo da mensagem citada: '{mensagem_citada}' para saber sobre o quê o usuário quer que você fale sobre algo que foi dito por outro, talvez queira uma opinião"
153
  - NUNCA assuma que falei algo se não fui eu
154
  2. RESPOSTA A MIM MESMA:
155
  - Se usuário está respondendo MINHA mensagem: "Tu tá falando do que eu disse..."
156
  - Mantenha continuidade do MEU pensamento anterior
157
  - Não finja amnésia sobre o que EU disse
158
  3. RESPOSTA A TERCEIROS:
159
- - Se usuário cita outra pessoa: "saiba que a messagem citada não é sua e as ideias aí podem ser diferentes mas lei o conteudo da menssagem citada 'mensagem_citada' para contextualizar"
160
  - Comente sobre a situação, não assuma fala alheia
161
  4. SE NÃO HÁ CONTEXTO:
162
  - Responda diretamente à mensagem atual
@@ -366,96 +366,7 @@ def formatar_reply_context(payload_data: dict) -> str:
366
  return formato
367
 
368
  # ============================================================================
369
- # 🔧 FUNÇÃO PRINCIPAL PARA GERAR PROMPT COMPATÍVEL COM API.PY
370
- # ============================================================================
371
- def gerar_prompt_completo_compativel(
372
- mensagem: str,
373
- historico: List[Dict[str, str]],
374
- mensagem_citada: str,
375
- analise: Dict[str, Any],
376
- usuario: str,
377
- tipo_conversa: str,
378
- reply_info: Optional[Dict] = None
379
- ) -> str:
380
- """Gera o prompt completo compatível com a API atual"""
381
-
382
- # Preparar dados do payload
383
- payload_data = {
384
- 'mensagem': mensagem,
385
- 'mensagem_citada': mensagem_citada,
386
- 'tipo_conversa': tipo_conversa,
387
- 'reply_info': reply_info or {}
388
- }
389
-
390
- # Extrair dados da análise
391
- numero = analise.get('numero', 'desconhecido')
392
- tom_usuario = analise.get('tom_usuario', 'normal')
393
- humor = analise.get('humor_atualizado', HUMOR_INICIAL)
394
- usuario_privilegiado = analise.get('usuario_privilegiado', False)
395
-
396
- # Verificar se é usuário privilegiado
397
- privilegiado = USUARIOS_PRIVILEGIADOS.get(numero, {})
398
- nome_usuario = privilegiado.get('nome_curto', usuario) if privilegiado else usuario
399
-
400
- # Configurar modo de resposta
401
- modo_resposta = 'normal_ironico'
402
- if usuario_privilegiado:
403
- modo_resposta = 'tecnico_formal'
404
-
405
- modo_config = MODOS_RESPOSTA.get(modo_resposta, MODOS_RESPOSTA['normal_ironico'])
406
-
407
- # Formatar contextos
408
- reply_context = formatar_reply_context(payload_data)
409
- reply_info_context = formatar_reply_info_context(payload_data)
410
- contexto_resposta = determinar_contexto_resposta(payload_data)
411
-
412
- # Limpar formatação da mensagem citada se necessário (mantendo o original)
413
- mensagem_citada_para_prompt = mensagem_citada
414
- if mensagem_citada:
415
- # Se começar com formatação, extrair apenas o conteúdo
416
- if mensagem_citada.startswith("[Respondendo à Akira:"):
417
- # Manter formatação para identificar que é reply à Akira
418
- pass
419
- elif mensagem_citada.startswith("[") and ":" in mensagem_citada:
420
- # Manter formatação para identificar que é reply a terceiros
421
- pass
422
-
423
- # Preparar variáveis para o prompt
424
- prompt_vars = {
425
- 'humor': humor,
426
- 'humor_desc': HUMORES_BASE.get(humor, ''),
427
- 'tom_usuario': tom_usuario,
428
- 'modo_resposta': modo_resposta,
429
- 'tipo_conversa': tipo_conversa,
430
- 'emocao_detectada': analise.get('emocao_primaria', 'neutral'),
431
- 'regras_modo': modo_config['desc'],
432
- 'max_chars': modo_config['max_chars'],
433
- 'usa_girias': 'SIM' if modo_config['usa_girias'] else 'NÃO',
434
- 'usa_emojis': 'SIM' if modo_config['usa_emojis'] else 'NÃO',
435
- 'prob_emoji': int(modo_config['prob_emoji'] * 100),
436
- 'reply_context': reply_context,
437
- 'mensagem_citada': mensagem_citada_para_prompt, # Usando a variável original limpa
438
- 'usuario_privilegiado': f"SIM - {privilegiado.get('nome', '')}" if privilegiado else "NÃO",
439
- 'pode_dar_comandos': 'SIM' if privilegiado.get('pode_dar_ordens', False) else 'NÃO',
440
- 'reply_info_context': reply_info_context,
441
- 'usuario_citado_nome': reply_info.get('usuario_citado_nome', 'N/A') if reply_info else 'N/A',
442
- 'usuario_citado_numero': reply_info.get('usuario_citado_numero', 'N/A') if reply_info else 'N/A',
443
- 'eh_resposta_akira': 'SIM' if reply_info and reply_info.get('reply_to_bot', False) else 'NÃO',
444
- 'contexto_resposta': contexto_resposta,
445
- 'tipo_isolamento': 'GRUPO' if tipo_conversa == 'grupo' else 'PRIVADO',
446
- 'nome_usuario': nome_usuario
447
- }
448
-
449
- # Gerar prompt final
450
- prompt_final = SYSTEM_PROMPT.format(**prompt_vars)
451
-
452
- # Adicionar mensagem do usuário no final
453
- prompt_final += f"\n\nMENSAGEM DO USUÁRIO ({usuario}): {mensagem}"
454
-
455
- return prompt_final
456
-
457
- # ============================================================================
458
- # 🔧 FUNÇÃO PARA API.PY (PARA USO DIRETO)
459
  # ============================================================================
460
  def construir_prompt_api(
461
  mensagem: str,
@@ -471,15 +382,70 @@ def construir_prompt_api(
471
  Compatível com a chamada atual em api.py
472
  """
473
  try:
474
- return gerar_prompt_completo_compativel(
475
- mensagem=mensagem,
476
- historico=historico,
477
- mensagem_citada=mensagem_citada,
478
- analise=analise,
479
- usuario=usuario,
480
- tipo_conversa=tipo_conversa,
481
- reply_info=reply_info
482
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
483
  except Exception as e:
484
  # Fallback em caso de erro
485
  print(f"Erro ao construir prompt: {e}")
@@ -528,103 +494,54 @@ def validate_config():
528
  # 🎯 TESTE DA CORREÇÃO
529
  # ============================================================================
530
  if __name__ == "__main__":
531
- # Teste com diferentes cenários para verificar se o erro foi resolvido
532
- test_cases = [
533
- {
534
- "descricao": "Cenário 1: Reply à Akira",
535
- "mensagem": "Você disse que ia ajudar, mas não fez nada!",
536
- "mensagem_citada": "[Respondendo à Akira: 'Vou te ajudar com isso amanhã...']",
537
- "tipo_conversa": "pv",
538
- "reply_info": {
539
- "reply_to_bot": True,
540
- "usuario_citado_nome": "Akira",
541
- "usuario_citado_numero": "bot"
542
- },
543
- "analise": {
544
- "numero": "244123456789",
545
- "tom_usuario": "normal",
546
- "humor_atualizado": "normal_ironico",
547
- "usuario_privilegiado": False,
548
- "emocao_primaria": "neutral"
549
- },
550
- "usuario": "João"
551
- },
552
- {
553
- "descricao": "Cenário 2: Reply a terceiros",
554
- "mensagem": "O Carlos disse que você é chata, é verdade?",
555
- "mensagem_citada": "[Carlos disse: 'A Akira é muito chata']",
556
- "tipo_conversa": "grupo",
557
- "reply_info": {
558
- "reply_to_bot": False,
559
- "usuario_citado_nome": "Carlos",
560
- "usuario_citado_numero": "244555555555"
561
- },
562
- "analise": {
563
- "numero": "244987654321",
564
- "tom_usuario": "curioso",
565
- "humor_atualizado": "curiosa_ironica",
566
- "usuario_privilegiado": False,
567
- "emocao_primaria": "curiosity"
568
- },
569
- "usuario": "Maria"
570
  },
571
- {
572
- "descricao": "Cenário 3: Sem reply (erro ortográfico)",
573
- "mensagem": "Oi, como vc ta?",
574
- "mensagem_citada": "",
575
- "tipo_conversa": "pv",
576
- "reply_info": None,
577
- "analise": {
578
- "numero": "244111111111",
579
- "tom_usuario": "normal",
580
- "humor_atualizado": "normal_ironico",
581
- "usuario_privilegiado": False,
582
- "emocao_primaria": "neutral"
583
- },
584
- "usuario": "Pedro"
585
- }
586
- ]
587
 
588
  print("=" * 80)
589
  print("TESTANDO CORREÇÃO DO ERRO 'mensagem_citada'")
590
  print("=" * 80)
591
 
592
- for i, test_case in enumerate(test_cases, 1):
593
- print(f"\n{'='*60}")
594
- print(f"TESTE {i}: {test_case['descricao']}")
595
- print('='*60)
 
 
 
 
 
 
596
 
597
- try:
598
- prompt = construir_prompt_api(
599
- mensagem=test_case['mensagem'],
600
- historico=[],
601
- mensagem_citada=test_case['mensagem_citada'],
602
- analise=test_case['analise'],
603
- usuario=test_case['usuario'],
604
- tipo_conversa=test_case['tipo_conversa'],
605
- reply_info=test_case['reply_info']
606
- )
607
-
608
- print("✅ Prompt gerado com sucesso!")
609
- print(f"📏 Tamanho: {len(prompt)} caracteres")
610
- print(f"🔍 Contém 'mensagem_citada': {'mensagem_citada' in prompt}")
611
- print(f"🔍 Contém 'reply_context': {'reply_context' in prompt}")
612
-
613
- # Verificar se a mensagem citada está sendo passada corretamente
614
- if test_case['mensagem_citada']:
615
- print(f"🔍 Mensagem citada no prompt: {'Sim' if test_case['mensagem_citada'] in prompt else 'Não'}")
616
 
617
- # Mostrar partes importantes
618
- lines = prompt.split('\n')
619
- for line in lines[-10:]: # Últimas 10 linhas
620
- if any(keyword in line.lower() for keyword in ['reply', 'contexto', 'citad', 'akira', 'mensagem']):
621
- print(f" {line[:80]}{'...' if len(line) > 80 else ''}")
622
-
623
- except KeyError as e:
624
- print(f"❌ ERRO: Chave faltando - {e}")
625
- print("Verifique as variáveis no SYSTEM_PROMPT")
626
- except Exception as e:
627
- print(f"❌ ERRO: {e}")
628
 
629
  print("\n" + "=" * 80)
630
  print("VALIDANDO CONFIGURAÇÃO...")
 
7
  """
8
  import os
9
  import json
10
+ from typing import List, Dict, Any, Optional
11
 
12
  # ============================================================================
13
  # 🔥 CHAVES DE API
 
149
  REGRAS DE CONTEXTO ABSOLUTAS:
150
  1. IDENTIFICAÇÃO DE QUEM FALOU:
151
  - Se mensagem citada foi MINHA: "Estou respondendo ao que EU disse antes..."
152
+ - Se mensagem citada foi de OUTRA PESSOA: "Leia o conteúdo da mensagem citada: '{mensagem_citada_texto}' para saber sobre o quê o usuário quer que você fale sobre algo que foi dito por outro, talvez queira uma opinião"
153
  - NUNCA assuma que falei algo se não fui eu
154
  2. RESPOSTA A MIM MESMA:
155
  - Se usuário está respondendo MINHA mensagem: "Tu tá falando do que eu disse..."
156
  - Mantenha continuidade do MEU pensamento anterior
157
  - Não finja amnésia sobre o que EU disse
158
  3. RESPOSTA A TERCEIROS:
159
+ - Se usuário cita outra pessoa: "Isso foi [Nome], não eu. Quer o quê?"
160
  - Comente sobre a situação, não assuma fala alheia
161
  4. SE NÃO HÁ CONTEXTO:
162
  - Responda diretamente à mensagem atual
 
366
  return formato
367
 
368
  # ============================================================================
369
+ # 🔧 FUNÇÃO PARA API.PY (PARA USO DIRETO) - SIMPLIFICADA PARA RESOLVER ERRO
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370
  # ============================================================================
371
  def construir_prompt_api(
372
  mensagem: str,
 
382
  Compatível com a chamada atual em api.py
383
  """
384
  try:
385
+ # Dados básicos
386
+ humor_atual = analise.get('humor_atualizado', HUMOR_INICIAL)
387
+ tom_usuario = analise.get('tom_usuario', 'normal')
388
+ modo_resposta = analise.get('modo_resposta', 'normal_ironico')
389
+
390
+ # Extrair conteúdo limpo da mensagem citada
391
+ mensagem_citada_texto = mensagem_citada
392
+ if mensagem_citada:
393
+ if mensagem_citada.startswith("[Respondendo à Akira:"):
394
+ mensagem_citada_texto = mensagem_citada[23:]
395
+ elif mensagem_citada.startswith("[") and ":" in mensagem_citada:
396
+ partes = mensagem_citada.split(":", 1)
397
+ if len(partes) > 1:
398
+ mensagem_citada_texto = partes[1].strip()
399
+
400
+ # Determinar contexto de reply
401
+ eh_resposta_akira = False
402
+ if reply_info:
403
+ eh_resposta_akira = reply_info.get('reply_to_bot', False)
404
+ elif mensagem_citada and mensagem_citada.startswith("[Respondendo à Akira:"):
405
+ eh_resposta_akira = True
406
+
407
+ # Usuário privilegiado
408
+ usuario_privilegiado = analise.get('usuario_privilegiado', False)
409
+ privilegiado = USUARIOS_PRIVILEGIADOS.get(analise.get('numero', ''), {})
410
+ nome_usuario = privilegiado.get('nome_curto', usuario) if privilegiado else usuario
411
+
412
+ # Modo config
413
+ modo_config = MODOS_RESPOSTA.get(modo_resposta, MODOS_RESPOSTA['normal_ironico'])
414
+
415
+ # Preparar variáveis para o SYSTEM_PROMPT
416
+ prompt_vars = {
417
+ 'humor': humor_atual,
418
+ 'humor_desc': HUMORES_BASE.get(humor_atual, ''),
419
+ 'tom_usuario': tom_usuario,
420
+ 'modo_resposta': modo_resposta,
421
+ 'tipo_conversa': tipo_conversa,
422
+ 'emocao_detectada': analise.get('emocao_primaria', 'neutral'),
423
+ 'regras_modo': modo_config['desc'],
424
+ 'max_chars': modo_config['max_chars'],
425
+ 'usa_girias': 'SIM' if modo_config['usa_girias'] else 'NÃO',
426
+ 'usa_emojis': 'SIM' if modo_config['usa_emojis'] else 'NÃO',
427
+ 'prob_emoji': int(modo_config['prob_emoji'] * 100),
428
+ 'reply_context': formatar_reply_context({'mensagem_citada': mensagem_citada, 'reply_info': reply_info}),
429
+ 'mensagem_citada_texto': mensagem_citada_texto,
430
+ 'usuario_privilegiado': f"SIM - {privilegiado.get('nome', '')}" if privilegiado else "NÃO",
431
+ 'pode_dar_comandos': 'SIM' if privilegiado.get('pode_dar_ordens', False) else 'NÃO',
432
+ 'reply_info_context': formatar_reply_info_context({'reply_info': reply_info}),
433
+ 'usuario_citado_nome': reply_info.get('usuario_citado_nome', 'N/A') if reply_info else 'N/A',
434
+ 'usuario_citado_numero': reply_info.get('usuario_citado_numero', 'N/A') if reply_info else 'N/A',
435
+ 'eh_resposta_akira': 'SIM' if eh_resposta_akira else 'NÃO',
436
+ 'contexto_resposta': determinar_contexto_resposta({'reply_info': reply_info}),
437
+ 'tipo_isolamento': 'GRUPO' if tipo_conversa == 'grupo' else 'PRIVADO',
438
+ 'nome_usuario': nome_usuario
439
+ }
440
+
441
+ # Gerar prompt final
442
+ prompt_final = SYSTEM_PROMPT.format(**prompt_vars)
443
+
444
+ # Adicionar mensagem do usuário no final
445
+ prompt_final += f"\n\nMENSAGEM DO USUÁRIO ({usuario}): {mensagem}"
446
+
447
+ return prompt_final
448
+
449
  except Exception as e:
450
  # Fallback em caso de erro
451
  print(f"Erro ao construir prompt: {e}")
 
494
  # 🎯 TESTE DA CORREÇÃO
495
  # ============================================================================
496
  if __name__ == "__main__":
497
+ # Teste rápido para verificar se o erro foi resolvido
498
+ test_case = {
499
+ "mensagem": "oquê é latência?",
500
+ "mensagem_citada": "",
501
+ "tipo_conversa": "grupo",
502
+ "reply_info": None,
503
+ "analise": {
504
+ "numero": "244978787009",
505
+ "tom_usuario": "curioso",
506
+ "humor_atualizado": "normal_ironico",
507
+ "usuario_privilegiado": True,
508
+ "emocao_primaria": "neutral",
509
+ "modo_resposta": "tecnico_formal"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
510
  },
511
+ "usuario": "Isaac Quarenta"
512
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
513
 
514
  print("=" * 80)
515
  print("TESTANDO CORREÇÃO DO ERRO 'mensagem_citada'")
516
  print("=" * 80)
517
 
518
+ try:
519
+ prompt = construir_prompt_api(
520
+ mensagem=test_case['mensagem'],
521
+ historico=[],
522
+ mensagem_citada=test_case['mensagem_citada'],
523
+ analise=test_case['analise'],
524
+ usuario=test_case['usuario'],
525
+ tipo_conversa=test_case['tipo_conversa'],
526
+ reply_info=test_case['reply_info']
527
+ )
528
 
529
+ print("✅ Prompt gerado com sucesso!")
530
+ print(f"📏 Tamanho: {len(prompt)} caracteres")
531
+ print(f"🔍 Contém 'mensagem_citada_texto': {'mensagem_citada_texto' in prompt}")
532
+
533
+ # Mostrar partes do prompt
534
+ lines = prompt.split('\n')
535
+ for i, line in enumerate(lines[:20]): # Primeiras 20 linhas
536
+ print(f" {i:2}: {line[:80]}{'...' if len(line) > 80 else ''}")
 
 
 
 
 
 
 
 
 
 
 
537
 
538
+ except KeyError as e:
539
+ print(f"❌ ERRO: Chave faltando - {e}")
540
+ print("Verifique as variáveis no SYSTEM_PROMPT")
541
+ except Exception as e:
542
+ print(f"❌ ERRO: {e}")
543
+ import traceback
544
+ traceback.print_exc()
 
 
 
 
545
 
546
  print("\n" + "=" * 80)
547
  print("VALIDANDO CONFIGURAÇÃO...")