fix: batch collect O(n²) → single queue write; correct model to claude-3-haiku-20240307

- updateJobStatus was called 4,652 times causing ~4,652 file reads/writes
- Now loads queue once, applies all updates in memory, saves once
- Model was using OpenClaw alias (sonnet-4-6) not native Anthropic ID
- Only claude-3-haiku-20240307 is available on this API key; update settings.example.json
This commit is contained in:
2026-03-06 10:56:54 +00:00
parent 17fd919356
commit 85038b6ce1

View File

@@ -107,30 +107,47 @@ async function collect(state, settings) {
let passed = 0, filtered = 0, errors = 0;
for (const { jobId, score, reason, error } of results) {
if (error || score === null) {
// Build a lookup map from results for O(1) access
const resultMap = {};
for (const r of results) resultMap[r.jobId] = r;
// Load queue once, apply all updates in memory, save once
const queue = loadQueue();
const now = new Date().toISOString();
for (const job of queue) {
const r = resultMap[job.id];
if (!r) continue;
if (r.error || r.score === null) {
errors++;
// Pass through on error — never block applications due to filter failure
updateJobStatus(jobId, 'new', { filter_score: null, filter_reason: reason || 'filter_error' });
job.filter_score = null;
job.filter_reason = r.reason || 'filter_error';
job.status_updated_at = now;
continue;
}
// Find per-track threshold
const queue = loadQueue();
const job = queue.find(j => j.id === jobId);
const track = job?.track || 'ae';
const track = job.track || 'ae';
const searchEntry = (searchConfig.searches || []).find(s => s.track === track);
const minScore = searchEntry?.filter_min_score ?? globalMin;
if (score >= minScore) {
job.filter_score = r.score;
job.filter_reason = r.reason;
job.status_updated_at = now;
if (r.score >= minScore) {
passed++;
updateJobStatus(jobId, 'new', { filter_score: score, filter_reason: reason });
// keep status as 'new'
} else {
filtered++;
updateJobStatus(jobId, 'filtered', { filter_score: score, filter_reason: reason });
job.status = 'filtered';
}
}
// Single write for all 4,652 updates
const { saveQueue } = await import('./lib/queue.mjs');
saveQueue(queue);
clearState();
// Append to filter run history