Qwen3-Coder-Next-Spark-Agentic / tests /test_closed_loop.py
hizrianraz's picture
Harden August 3 Spark launch candidate
9a5e3ef verified
Raw
History Blame Contribute Delete
6.52 kB
import importlib.util
import json
import unittest
from pathlib import Path
SCRIPT = Path(__file__).resolve().parents[1] / "eval" / "qwen_native_closed_loop" / "run_closed_loop.py"
SPEC = importlib.util.spec_from_file_location("run_closed_loop", SCRIPT)
MODULE = importlib.util.module_from_spec(SPEC)
assert SPEC.loader is not None
SPEC.loader.exec_module(MODULE)
class ScriptedChat:
def __init__(self):
self.turn = 0
def __call__(self, messages, tools):
self.turn += 1
self.assert_tool_schema(tools)
if self.turn == 1:
return {
"role": "assistant",
"content": "",
"tool_calls": [{
"id": "call-1",
"type": "function",
"function": {
"name": "read_release_manifest",
"arguments": json.dumps({
"release_id": "aug3",
"component": "qwen3-coder-next",
}),
},
}],
}
if self.turn == 2:
manifest = json.loads(messages[-1]["content"])
return {
"role": "assistant",
"content": "",
"tool_calls": [{
"id": "call-2",
"type": "function",
"function": {
"name": "run_check_plan",
"arguments": json.dumps({
"component": manifest["component"],
"checks": manifest["required_checks"],
"run_nonce": manifest["run_nonce"],
}),
},
}],
}
receipt = json.loads(messages[-1]["content"])["receipt"]
return {"role": "assistant", "content": f"LAUNCH_PREFLIGHT_PASS:{receipt}"}
@staticmethod
def assert_tool_schema(tools):
assert [tool["function"]["name"] for tool in tools] == [
"read_release_manifest",
"run_check_plan",
]
class SingleToolChat:
def __init__(self):
self.turn = 0
def __call__(self, messages, tools):
self.turn += 1
if self.turn == 1:
return {
"role": "assistant",
"content": "",
"tool_calls": [{
"id": "single-1",
"type": "function",
"function": {
"name": "read_release_manifest",
"arguments": json.dumps({
"release_id": "aug3",
"component": "qwen3-coder-next",
}),
},
}],
}
nonce = json.loads(messages[-1]["content"])["run_nonce"]
return {"role": "assistant", "content": f"MANIFEST_NONCE:{nonce}"}
class RecoveryChat:
def __init__(self):
self.turn = 0
def __call__(self, messages, tools):
self.turn += 1
if self.turn == 1:
return {
"role": "assistant",
"content": "",
"tool_calls": [{
"id": "recovery-1",
"type": "function",
"function": {
"name": "read_release_manifest",
"arguments": json.dumps({
"release_id": "missing",
"component": "qwen3-coder-next",
}),
},
}],
}
if self.turn == 2:
error = json.loads(messages[-1]["content"])
assert error["error"] == "manifest_not_found"
return {
"role": "assistant",
"content": "",
"tool_calls": [{
"id": "recovery-2",
"type": "function",
"function": {
"name": "read_release_manifest",
"arguments": json.dumps({
"release_id": "aug3",
"component": "qwen3-coder-next",
}),
},
}],
}
nonce = json.loads(messages[-1]["content"])["run_nonce"]
return {"role": "assistant", "content": f"RECOVERED:{nonce}"}
class ClosedLoopTests(unittest.TestCase):
def test_single_tool_dynamic_result_passes(self):
result = MODULE.run_single_tool_roundtrip(SingleToolChat(), nonce="fixed-test-nonce")
self.assertTrue(result["passed"], result)
self.assertEqual(result["final_answer"], "MANIFEST_NONCE:fixed-test-nonce")
def test_two_tool_roundtrip_passes(self):
result = MODULE.run_closed_loop(ScriptedChat(), nonce="fixed-test-nonce")
self.assertTrue(result["passed"], result)
self.assertEqual([event["tool"] for event in result["tool_executions"]], [
"read_release_manifest",
"run_check_plan",
])
self.assertTrue(result["final_answer"].startswith("LAUNCH_PREFLIGHT_PASS:"))
def test_tool_error_recovery_passes(self):
result = MODULE.run_tool_error_recovery(RecoveryChat(), nonce="fixed-test-nonce")
self.assertTrue(result["passed"], result)
self.assertEqual(len(result["tool_executions"]), 2)
self.assertEqual(result["tool_executions"][0]["result"]["error"], "manifest_not_found")
self.assertEqual(result["final_answer"], "RECOVERED:fixed-test-nonce")
def test_wrong_first_arguments_fail(self):
def wrong_chat(messages, tools):
return {
"role": "assistant",
"content": "",
"tool_calls": [{
"id": "bad-1",
"type": "function",
"function": {
"name": "read_release_manifest",
"arguments": json.dumps({
"release_id": "aug4",
"component": "qwen3-coder-next",
}),
},
}],
}
result = MODULE.run_closed_loop(wrong_chat, nonce="fixed-test-nonce")
self.assertFalse(result["passed"])
self.assertIn("args mismatch", result["error"])
if __name__ == "__main__":
unittest.main()