Initial Open-SWE-Traces cleanup pipeline
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
"""Tests for deterministic static trajectory evidence extraction."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
|
||||
from swe_data_processing.features import extract_patch_files, extract_static_signals
|
||||
|
||||
|
||||
def _tool(name: str) -> str:
|
||||
return json.dumps({"type": "function", "function": {"name": name, "parameters": {}}})
|
||||
|
||||
|
||||
def test_detects_masked_failing_test_after_edit() -> None:
|
||||
record = {
|
||||
"trajectory_id": "sample-1",
|
||||
"resolved": 0,
|
||||
"tools": [_tool("str_replace_editor"), _tool("execute_bash"), _tool("finish")],
|
||||
"trajectory": [
|
||||
{"role": "system", "content": "system"},
|
||||
{"role": "user", "content": "Do not modify test files."},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "",
|
||||
"tool_calls": [
|
||||
{
|
||||
"id": "edit-1",
|
||||
"type": "function",
|
||||
"function": {
|
||||
"name": "str_replace_editor",
|
||||
"arguments": json.dumps(
|
||||
{"command": "str_replace", "path": "/workspace/src/main.py"}
|
||||
),
|
||||
},
|
||||
}
|
||||
],
|
||||
},
|
||||
{"role": "tool", "content": "The file was edited."},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "",
|
||||
"tool_calls": [
|
||||
{
|
||||
"id": "test-1",
|
||||
"type": "function",
|
||||
"function": {
|
||||
"name": "execute_bash",
|
||||
"arguments": json.dumps({"command": "pytest tests | tail -20"}),
|
||||
},
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
"role": "tool",
|
||||
"content": "1 failed, 10 passed\n[Command finished with exit code 0]",
|
||||
},
|
||||
],
|
||||
"metadata": {
|
||||
"model_patch": {"patch": "diff --git a/src/main.py b/src/main.py\n+++ b/src/main.py\n"},
|
||||
"reference_patch": {"patch": "diff --git a/src/main.py b/src/main.py\n+++ b/src/main.py\n"},
|
||||
},
|
||||
}
|
||||
|
||||
signals = extract_static_signals(record)
|
||||
assert signals["last_stateful_turn"] == 3
|
||||
assert signals["instruction_constraints"] == ["Do not modify test files."]
|
||||
assert signals["test_events"][0]["masked_pipeline"] is True
|
||||
assert signals["test_events"][0]["explicit_failure"] is True
|
||||
assert signals["test_events"][0]["explicit_exit_codes"] == [0]
|
||||
|
||||
|
||||
def test_detects_malformed_and_unknown_tool_calls() -> None:
|
||||
record = {
|
||||
"trajectory_id": "sample-2",
|
||||
"tools": [_tool("execute_bash")],
|
||||
"trajectory": [
|
||||
{"role": "system", "content": "system"},
|
||||
{"role": "user", "content": "issue"},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "",
|
||||
"tool_calls": [
|
||||
{
|
||||
"id": "bad",
|
||||
"function": {"name": "made_up_tool", "arguments": "{bad json"},
|
||||
}
|
||||
],
|
||||
},
|
||||
{"role": "tool", "content": "error"},
|
||||
],
|
||||
"metadata": {"model_patch": {}, "reference_patch": {}},
|
||||
}
|
||||
signals = extract_static_signals(record)
|
||||
assert signals["malformed_tool_turns"][0]["turn_id"] == 3
|
||||
assert signals["unknown_tool_turns"] == [{"turn_id": 3, "tool_name": "made_up_tool"}]
|
||||
|
||||
|
||||
def test_extract_patch_files_is_stable_and_unique() -> None:
|
||||
patch = "+++ b/src/a.py\n+++ b/src/b.py\n+++ b/src/a.py\n+++ /dev/null\n"
|
||||
assert extract_patch_files(patch) == ["src/a.py", "src/b.py"]
|
||||
Reference in New Issue
Block a user