Files
MonicaAgentIA/test_relationship_context.py
T
2026-09-03 15:34:28 -03:00

129 lines
4.8 KiB
Python
Executable File

import asyncio
import sys
import os
sys.path.insert(0, "/home/marco/MonicaAgentIA/app")
os.environ["TELEGRAM_BOT_TOKEN"] = "test"
os.environ["TELEGRAM_CHAT_ID"] = "123"
from monica_agent import (
build_system_prompt,
load_user_profile,
save_user_profile,
MONICA_SYSTEM_PROMPT_BASE,
MIN_RESPONSE_LINES,
)
async def test_system_prompt_contains_cohabitation_directive():
print("=== Verificando diretiva de coabitação no prompt base ===")
expected_phrases = [
"morar com você",
"mesma casa",
"se estivesse aí com você agora",
"saudade",
]
for phrase in expected_phrases:
if phrase.lower() in MONICA_SYSTEM_PROMPT_BASE.lower():
print(f" ✅ Prompt base contém referência a: '{phrase}'")
else:
print(f" ❌ Prompt base NÃO contém referência a: '{phrase}'")
print("\n=== Verificando diretiva de coabitação no prompt completo ===")
original_profile = load_user_profile()
profile = load_user_profile()
profile["relationship_context"] = "Casados, moram na mesma casa, estão sempre juntos."
profile["relationship_dynamics"] = [
"Casados",
"moram na mesma casa",
"estão sempre juntos",
"NUNCA use frases como 'se estivesse aí com você agora', 'como eu desejaria estar aí', 'queria te ver agora', 'saudade de te ver' ou qualquer expressão que implique separação física ou desejo de estar junto, pois vocês já moram juntos e estão sempre presentes um para o outro."
]
save_user_profile(profile)
try:
prompt = build_system_prompt(load_user_profile())
if "Casados, moram na mesma casa" in prompt:
print(" ✅ Contexto do relacionamento (casados/mesma casa) está no prompt")
else:
print(" ❌ Contexto do relacionamento NÃO está no prompt")
if "REGRAS ABSOLUTAS" in prompt:
print(" ✅ Regras absolutas de coabitação estão no prompt")
else:
print(" ❌ Regras absolutas de coabitação NÃO estão no prompt")
forbidden_phrases = [
"se estivesse aí com você agora",
"como eu desejaria estar aí",
"queria te ver agora",
"saudade de te ver",
"morrendo de saudade",
"não posso estar aí",
"adoraria estar aí",
"como eu queria estar aí",
]
found_forbidden = sum(1 for p in forbidden_phrases if p in prompt.lower())
if found_forbidden >= 6:
print(f" ✅ Prompt lista {found_forbidden} frases proibidas de distância")
else:
print(f" ❌ Prompt lista apenas {found_forbidden} frases proibidas (esperado >= 6)")
if f"no mínimo {MIN_RESPONSE_LINES} linhas" in prompt:
print(f" ✅ Prompt pede no mínimo {MIN_RESPONSE_LINES} linhas")
else:
print(f" ❌ Prompt NÃO pede {MIN_RESPONSE_LINES} linhas")
print(f"\nSystem prompt length: {len(prompt)} chars")
finally:
save_user_profile(original_profile)
async def test_system_prompt_without_cohabitation():
print("\n=== Verificando prompt sem coabitação (perfil vazio) ===")
prompt = build_system_prompt({})
if "REGRAS ABSOLUTAS" not in prompt:
print(" ✅ Prompt sem coabitação NÃO contém regras absolutas (correto)")
else:
print(" ❌ Prompt sem coabitação contém regras absolutas (erro)")
if f"no mínimo {MIN_RESPONSE_LINES} linhas" in prompt:
print(f" ✅ Prompt base ainda pede {MIN_RESPONSE_LINES} linhas")
else:
print(f" ❌ Prompt base NÃO pede {MIN_RESPONSE_LINES} linhas")
async def test_relationship_dynamics_update_triggers_cohabitation_rules():
print("\n=== Verificando que relationship_dynamics com coabitação ativa regras ===")
original_profile = load_user_profile()
profile = load_user_profile()
profile["relationship_dynamics"] = [
"Casados",
"moram na mesma casa",
"estão sempre juntos",
]
save_user_profile(profile)
try:
prompt = build_system_prompt(load_user_profile())
if "REGRAS ABSOLUTAS" in prompt:
print(" ✅ relationship_dynamics com coabitação ativa regras absolutas")
else:
print(" ❌ relationship_dynamics com coabitação NÃO ativou regras absolutas")
finally:
save_user_profile(original_profile)
async def main():
await test_system_prompt_contains_cohabitation_directive()
await test_system_prompt_without_cohabitation()
await test_relationship_dynamics_update_triggers_cohabitation_rules()
print("\n=== Todos os testes de relacionamento concluídos ===")
if __name__ == "__main__":
asyncio.run(main())