feat(#373): prediction integration for cost estimation

- Create PredictionService for pre-task cost/token estimates
- Refresh common predictions on startup
- Integrate predictions into LLM telemetry tracker
- Add GET /api/telemetry/estimate endpoint
- Graceful degradation when no prediction data available
- Add unit tests for prediction service

Refs #373

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-15 01:50:58 -06:00
parent fcecf3654b
commit ed23293e1a
6 changed files with 621 additions and 15 deletions

View File

@@ -333,12 +333,13 @@ describe("LlmTelemetryTrackerService", () => {
service.trackLlmCompletion(baseParams);
// claude-sonnet-4-5: 150 * 3 + 300 * 15 = 450 + 4500 = 4950
const expectedCost = 4950;
const expectedActualCost = 4950;
expect(mockTelemetryService.eventBuilder?.build).toHaveBeenCalledWith(
expect.objectContaining({
estimated_cost_usd_micros: expectedCost,
actual_cost_usd_micros: expectedCost,
// Estimated values are 0 when no PredictionService is injected
estimated_cost_usd_micros: 0,
actual_cost_usd_micros: expectedActualCost,
}),
);
});
@@ -437,8 +438,9 @@ describe("LlmTelemetryTrackerService", () => {
expect.objectContaining({
actual_input_tokens: 50,
actual_output_tokens: 100,
estimated_input_tokens: 50,
estimated_output_tokens: 100,
// Estimated values are 0 when no PredictionService is injected
estimated_input_tokens: 0,
estimated_output_tokens: 0,
}),
);
});