(entries, opts = {})
| 12 | const DEFAULT_MAX_OUTCOMES = 3; |
| 13 | |
| 14 | function filterRelevantOutcomes(entries, opts = {}) { |
| 15 | const minScore = opts.minScore !== undefined ? opts.minScore : DEFAULT_MIN_SCORE; |
| 16 | const maxAgeMs = opts.maxAgeMs !== undefined ? opts.maxAgeMs : DEFAULT_MAX_AGE_MS; |
| 17 | const maxOutcomes = opts.maxOutcomes !== undefined ? opts.maxOutcomes : DEFAULT_MAX_OUTCOMES; |
| 18 | |
| 19 | const now = Date.now(); |
| 20 | |
| 21 | return entries |
| 22 | .filter(e => { |
| 23 | // Only keep 'success' outcomes (failed ones don't provide learning value) |
| 24 | if (e.outcome?.status !== 'success') return false; |
| 25 | // Only keep high-confidence outcomes |
| 26 | if ((e.outcome?.score ?? 0) < minScore) return false; |
| 27 | // Only keep recent outcomes |
| 28 | const ts = e.timestamp ? new Date(e.timestamp).getTime() : 0; |
| 29 | if (now - ts > maxAgeMs) return false; |
| 30 | return true; |
| 31 | }) |
| 32 | .slice(-maxOutcomes); |
| 33 | } |
| 34 | |
| 35 | module.exports = { filterRelevantOutcomes, DEFAULT_MIN_SCORE, DEFAULT_MAX_AGE_MS, DEFAULT_MAX_OUTCOMES }; |
no outgoing calls
no test coverage detected