refactor: persist EWMA only on LLM failure, dedup EWMA helper
Audit items #7 and #5. #7 — BrentPricePredictor::generatePrediction previously wrote both an EWMA row and an LLM row to price_predictions on every run. The downstream OilSignal already prefers llm_with_context > llm > ewma, so the EWMA row was dead weight 95% of the time. Now we try LLM first; if it returns null (no API key, parse failure, etc.) we compute and persist EWMA as a real fallback. This also avoids redundant work on the success path. Updated the "stores both" test to "stores only LLM" — asserts no EWMA row is written when the provider succeeds. #5 — BrentPricePredictor and AnthropicPredictionProvider both had byte-identical computeEwma() methods with identical EWMA_ALPHA = 0.3 constants. Extracted to App\Services\Ewma::compute() and dropped both private methods + their alpha constants. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -61,7 +61,7 @@ it('returns null when fewer than 14 prices are available for EWMA', function ():
|
||||
expect($this->predictor->generateEwmaPrediction($prices))->toBeNull();
|
||||
});
|
||||
|
||||
it('stores both EWMA and LLM predictions when provider succeeds', function (): void {
|
||||
it('stores only the LLM prediction when the provider succeeds', function (): void {
|
||||
seedPrices(20);
|
||||
|
||||
$this->provider->shouldReceive('predict')->once()->andReturn(new PricePrediction([
|
||||
@@ -76,7 +76,8 @@ it('stores both EWMA and LLM predictions when provider succeeds', function (): v
|
||||
$prediction = $this->predictor->generatePrediction();
|
||||
|
||||
expect($prediction->source)->toBe(PredictionSource::LlmWithContext)
|
||||
->and(PricePrediction::count())->toBe(2);
|
||||
->and(PricePrediction::count())->toBe(1)
|
||||
->and(PricePrediction::where('source', PredictionSource::Ewma)->count())->toBe(0);
|
||||
});
|
||||
|
||||
it('falls back to EWMA when provider returns null', function (): void {
|
||||
|
||||
Reference in New Issue
Block a user