Replace trajectory audit with isolated prefix scoring
This commit is contained in:
@@ -72,6 +72,7 @@ README.
|
||||
swe_data_processing/
|
||||
├── pyproject.toml
|
||||
├── README.md
|
||||
├── changelog.md # Versioned strategy changes
|
||||
├── .env.example
|
||||
├── src/swe_data_processing/
|
||||
│ ├── cli.py # Command-line entry points
|
||||
@@ -203,18 +204,28 @@ The classifier returns one of:
|
||||
Training use is tracked separately as `SFT_FULL`, `SFT_STEP_ONLY`,
|
||||
`DPO_REJECTED`, `ERROR_ANALYSIS`, `HOLD`, or `DROP`.
|
||||
|
||||
### 4. Audit educational process quality
|
||||
### 4. Locate a safe prefix and score it independently
|
||||
|
||||
This stage does not repair trajectories. It identifies defensible erroneous or
|
||||
inefficient calls, scores six process-quality dimensions, and optionally finds
|
||||
a causal first-bad assistant turn for prefix-only learning:
|
||||
`audit` uses two isolated GLM calls for failed and unknown trajectories:
|
||||
|
||||
1. The boundary call receives the trajectory as roughly 32-turn blocks without
|
||||
splitting an assistant action from its immediate tool result. It cannot see
|
||||
`resolved`, model patches, or reference patches. It selects the earliest
|
||||
unrepaired major/critical assistant turn, keeps a safe full process trace,
|
||||
or returns `HOLD` when neither decision is supported.
|
||||
2. Python slices the exact messages before that assistant turn. The quality call
|
||||
receives only this materialized prefix, so suffix behavior cannot affect its
|
||||
score.
|
||||
|
||||
Successful trajectories skip boundary selection and are scored as complete
|
||||
trajectories. The command remains simple:
|
||||
|
||||
```bash
|
||||
swe-qc audit \
|
||||
--input samples/sample_20_seed_20260805.jsonl \
|
||||
--output qc_outputs/sample20.audits.jsonl \
|
||||
--errors qc_outputs/sample20.audit.errors.jsonl \
|
||||
--workers 20 \
|
||||
--workers 5 \
|
||||
--resume
|
||||
```
|
||||
|
||||
@@ -223,15 +234,23 @@ remain serialized in the main thread, so each completed record is appended
|
||||
atomically even when API requests run in parallel. Output order follows request
|
||||
completion order; `sample_id` remains the stable join key.
|
||||
|
||||
The deterministic score combines weighted process dimensions with penalties
|
||||
for minor, major, and critical behavior issues. Failed exploratory calls are
|
||||
not penalized when the agent interprets them correctly and recovers.
|
||||
The gateway previously returned frequent HTTP 429 responses at 20 workers, so
|
||||
five workers is the practical default for long runs unless the service limit is
|
||||
raised.
|
||||
|
||||
The causal audit payload excludes the reference patch and every derived signal,
|
||||
including reference file names, patch length, and model/reference size ratios.
|
||||
The immutable outcome is used only to select the mode: failed or unknown
|
||||
trajectories can become process-prefix candidates, but never full-trajectory
|
||||
SFT candidates.
|
||||
The quality call lists concrete erroneous and inefficient assistant actions and
|
||||
scores five 0-20 dimensions: planning, investigation, tool use and observation,
|
||||
progress, and clarity/efficiency. Python recomputes issue counts, sums the five
|
||||
dimensions, and assigns:
|
||||
|
||||
- `HIGH`: 80-100
|
||||
- `MEDIUM`: 60-79
|
||||
- `LOW`: 40-59
|
||||
- `REJECT`: below 40, or an unrepaired major/critical problem remains
|
||||
|
||||
Incomplete prefixes can still be useful. Normal failed experiments are retained
|
||||
when the agent later diagnoses, repairs, and verifies them. A prefix ending in a
|
||||
complete tool result is valid process-SFT structure.
|
||||
|
||||
### 5. Create static repair plans
|
||||
|
||||
|
||||
Reference in New Issue
Block a user