From 459d6ff787ca1186073eb8707c7d449401cedc64 Mon Sep 17 00:00:00 2001 From: moe-berri Date: Wed, 30 Sep 2026 12:54:55 -0700 Subject: [PATCH] fix(roi): preserve reports and identity during upstream outages --- .../21-empty-repository-preserved-report.png | Bin 0 -> 57106 bytes .../22-partial-calculation-explanation.png | Bin 0 -> 66970 bytes .../23-estimator-outage-preserved-report.png | Bin 0 -> 55921 bytes litellm/proxy/roi_calculator/github.py | 15 ++-- litellm/proxy/roi_calculator/sync.py | 16 +++- litellm/types/roi_calculator.py | 20 ++++- .../test_roi_calculator_endpoints.py | 10 +++ tests/unit/proxy/roi_calculator/test_sync.py | 75 +++++++++++++++++- .../ROICalculatorView.integration.test.tsx | 4 + .../_components/ROICalculatorViews.tsx | 6 +- 10 files changed, 130 insertions(+), 16 deletions(-) create mode 100644 .github/assets/roi-calculator/21-empty-repository-preserved-report.png create mode 100644 .github/assets/roi-calculator/22-partial-calculation-explanation.png create mode 100644 .github/assets/roi-calculator/23-estimator-outage-preserved-report.png diff --git a/.github/assets/roi-calculator/21-empty-repository-preserved-report.png b/.github/assets/roi-calculator/21-empty-repository-preserved-report.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6add87f95f46a3cd7319de09be2b2afd18f72e GIT binary patch literal 57106 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