fix(avatar): follow language changes each turn
This commit is contained in:
@@ -11,6 +11,7 @@ from routers.chat import (
|
||||
_match_standard_qa,
|
||||
_public_avatar_payload,
|
||||
_qa_requires_language_adaptation,
|
||||
_qa_requires_per_turn_rendering,
|
||||
_require_owned_avatar,
|
||||
_resolve_reply,
|
||||
)
|
||||
@@ -86,6 +87,41 @@ class ChatOrchestrationTests(unittest.TestCase):
|
||||
self.assertTrue(_qa_requires_language_adaptation("안녕하세요", "你好"))
|
||||
self.assertFalse(_qa_requires_language_adaptation("你好", "您好"))
|
||||
|
||||
def test_conversation_qa_is_rendered_for_the_current_turn_language(self):
|
||||
history = [SimpleNamespace(role="user", content="Please answer in English.")]
|
||||
self.assertTrue(_qa_requires_per_turn_rendering("Quelle est votre adresse ?", "Our address is Test Road 1.", history))
|
||||
|
||||
fake_model = Mock(return_value="Notre adresse est Test Road 1.")
|
||||
result = _resolve_reply(
|
||||
None,
|
||||
self.avatar,
|
||||
"Quelle est votre adresse ?",
|
||||
history,
|
||||
qa_pairs=[SimpleNamespace(question="Quelle est votre adresse ?", answer="Our address is Test Road 1.", enabled=True)],
|
||||
search_fn=Mock(),
|
||||
model_client=fake_model,
|
||||
)
|
||||
|
||||
self.assertEqual(result["source"], "qa")
|
||||
self.assertEqual(result["answer"], "Notre adresse est Test Road 1.")
|
||||
messages = fake_model.call_args.kwargs["messages"]
|
||||
self.assertEqual(messages[-1], {"role": "user", "content": "Quelle est votre adresse ?"})
|
||||
self.assertEqual(messages[-2]["role"], "system")
|
||||
self.assertIn("本轮语言覆盖指令", messages[-2]["content"])
|
||||
self.assertIn("不要沿用上一轮语言", messages[-2]["content"])
|
||||
|
||||
def test_latest_user_message_has_an_adjacent_language_override(self):
|
||||
history = [
|
||||
SimpleNamespace(role="user", content="请用中文回答"),
|
||||
SimpleNamespace(role="assistant", content="好的,请问有什么可以帮你?"),
|
||||
]
|
||||
messages = _build_prompt(self.avatar, history, "What can you help me with?", [])
|
||||
|
||||
self.assertEqual(messages[-1], {"role": "user", "content": "What can you help me with?"})
|
||||
self.assertEqual(messages[-2]["role"], "system")
|
||||
self.assertIn("最新用户消息", messages[-2]["content"])
|
||||
self.assertIn("立即切换到相同语言", messages[-2]["content"])
|
||||
|
||||
def test_conversational_paraphrase_matches_standard_qa(self):
|
||||
for question in ("请问一下,你们公司在哪里呀?", "请问去你们那边怎么走"):
|
||||
with self.subTest(question=question):
|
||||
|
||||
Reference in New Issue
Block a user