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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user