위기 표현 경계를 확장

This commit is contained in:
Yun Chan 2026-08-28 19:58:41 +09:00
parent 35a9d8802c
commit aeca42475b
3 changed files with 115 additions and 7 deletions

View file

@ -1546,6 +1546,13 @@ class SessionTurnPersistenceTest(unittest.IsolatedAsyncioTestCase):
"제가 지금 여쭤보는 건 자살 생각이 있는지예요.",
"제가 지금 묻는 질문은 혹시 죽고 싶은 생각이 있는지예요.",
"누구나 지금 자살하고 싶다고 말하는 것은 아니에요.",
"저는 지금 자살할 것 같지 않아요.",
"저는 지금 자해할 것 같지 않아요.",
"저는 지금 살기 싫지 않아요.",
"저는 지금 없어지고 싶지 않아요.",
"저는 지금 죽어야 할 것 같지 않아요.",
"저는 지금 살아갈 이유가 없는 건 아니에요.",
"저는 지금 자해 충동이 있지는 않아요.",
)
for index, client_reply in enumerate(client_replies, start=1):
@ -1569,6 +1576,45 @@ class SessionTurnPersistenceTest(unittest.IsolatedAsyncioTestCase):
engine.generate.assert_awaited_once()
self.assertNotEqual(suggestion.focus, "risk")
async def test_live_coach_short_circuits_strong_crisis_variants(self) -> None:
client_replies = (
"저는 지금 자살하려고 해요.",
"지금 당장 죽으려고 해요.",
"제 목숨을 끊으려고 해요.",
"자살 계획이 있어요.",
"자해 시도를 하려고 해요.",
"자살 충동이 있어요.",
"자살할지도 모르겠어요.",
"스스로를 해칠 계획이 있어요.",
"제 안전을 유지할 수 없어요.",
)
for index, client_reply in enumerate(client_replies, start=1):
with self.subTest(client_reply=client_reply):
item = live_coach.LiveCoachInput(
session_id=f"strong-crisis-variant-{index}",
turn_seq=2,
stage="exploration",
effective_openness=0.5,
theory_mode="humanistic",
persona_code="P1",
persona_name="서연",
learner_text="그 경험을 조금 더 들려줄 수 있을까요?",
client_reply=client_reply,
recent_turns=[],
)
engine = SimpleNamespace(
generate=AsyncMock(
side_effect=AssertionError("strong crisis signal must bypass engine")
)
)
suggestion = await live_coach.generate_live_coaching(item, engine=engine)
engine.generate.assert_not_called()
self.assertEqual(suggestion.focus, "risk")
self.assertEqual(suggestion.status, "ready")
async def test_live_coach_prompt_uses_client_role_token_not_persona_name(
self,
) -> None: