fix: refresh delegation permissions and report Reasoner task outcomes
This commit is contained in:
@@ -134,7 +134,7 @@ class ReasonerNativeTest(unittest.IsolatedAsyncioTestCase):
|
||||
await asyncio.wait_for(wait(), 5)
|
||||
|
||||
async def test_explicit_completion_uses_actual_native_backend_and_clears_context(self):
|
||||
await self.start_reasoner([[('complete_task', {"result": "显式模拟结果"})]])
|
||||
await self.start_reasoner([[('complete_task', {"status": "succeeded", "result": "显式模拟结果"})]])
|
||||
await asyncio.wait_for(self.finished.wait(), 5)
|
||||
self.assertEqual(self.results[0]["status"], "succeeded")
|
||||
self.assertEqual(self.results[0]["result"], "显式模拟结果")
|
||||
@@ -150,10 +150,41 @@ class ReasonerNativeTest(unittest.IsolatedAsyncioTestCase):
|
||||
self.assertIn("complete_task", self.results[0]["result"])
|
||||
self.assertNotIn("private reasoning", str(self.events))
|
||||
|
||||
async def test_explicit_partial_failure_preserves_failed_business_result(self):
|
||||
await self.start_reasoner([[('complete_task', {
|
||||
"status": "failed", "result": "只完成查询;写入服务不可用,目标未完整完成。",
|
||||
})]])
|
||||
await asyncio.wait_for(self.finished.wait(), 5)
|
||||
self.assertEqual(self.results[0]["status"], "failed")
|
||||
self.assertIn("报告任务未完成", self.results[0]["summary"])
|
||||
self.assertIn("只完成查询", self.results[0]["result"])
|
||||
self.assertIsNone(self.executor._worker)
|
||||
|
||||
async def test_missing_completion_status_does_not_accept_success(self):
|
||||
await self.start_reasoner([
|
||||
[('complete_task', {"result": "执行结束,但未报告目标是否完成"})],
|
||||
"simulated model stopped without correcting completion status",
|
||||
])
|
||||
await asyncio.wait_for(self.finished.wait(), 5)
|
||||
self.assertEqual(self.results[0]["status"], "failed")
|
||||
self.assertIsNone(self.executor._final)
|
||||
self.assertEqual(len(self.model.contexts), 2)
|
||||
self.assertIn("必须提供 succeeded 或 failed", str(self.model.contexts[1]))
|
||||
|
||||
async def test_invalid_completion_status_requires_model_correction(self):
|
||||
await self.start_reasoner([
|
||||
[('complete_task', {"status": "partial", "result": "只完成查询"})],
|
||||
[('complete_task', {"status": "failed", "result": "只完成查询,目标未完成"})],
|
||||
])
|
||||
await asyncio.wait_for(self.finished.wait(), 5)
|
||||
self.assertEqual(self.results[0]["status"], "failed")
|
||||
self.assertEqual(self.results[0]["result"], "只完成查询,目标未完成")
|
||||
self.assertEqual(len(self.model.contexts), 2)
|
||||
|
||||
async def test_question_reply_continues_same_native_context(self):
|
||||
await self.start_reasoner([
|
||||
[('ask_user', {"question": "需要哪一天的数据?"})],
|
||||
[('complete_task', {"result": "已按用户回答完成"})],
|
||||
[('complete_task', {"status": "succeeded", "result": "已按用户回答完成"})],
|
||||
])
|
||||
await self.wait_status("waiting_input")
|
||||
self.assertFalse(self.finished.is_set())
|
||||
@@ -186,7 +217,7 @@ class ReasonerNativeTest(unittest.IsolatedAsyncioTestCase):
|
||||
|
||||
# Isolate the HTTP side effect while retaining real argument/result handling.
|
||||
with patch("services.tool_executor.ToolExecutor._execute_http", AsyncMock(return_value={"status": "ok", "data": {"answer": "after"}})) as http:
|
||||
await self.start_reasoner([[('lookup', {})], [('complete_task', {"result": "查询完成"})]], config)
|
||||
await self.start_reasoner([[('lookup', {})], [('complete_task', {"status": "succeeded", "result": "查询完成"})]], config)
|
||||
await asyncio.wait_for(self.finished.wait(), 5)
|
||||
self.assertEqual(self.results[0]["status"], "succeeded")
|
||||
self.assertEqual(http.await_args.args[1], {"customer": "local-customer"})
|
||||
|
||||
Reference in New Issue
Block a user