Commit 5b3721a
authored
Harden Azure OpenAI embedding retry for 429 throttling (#1114)
## Why
Embedding generation could fail fast on transient Azure OpenAI
throttling (HTTP 429), which interrupted full vector rebuild runs. We
need resilient retry behavior that respects service guidance while still
failing clearly when retries are exhausted.
## What changed
- Added robust retry handling in `EmbeddingService` for transient
failures, including `ClientResultException` status-based detection
(429/5xx/408), exponential backoff, jitter, and Retry-After header
support when present.
- Kept failure behavior explicit: retries are logged with context, and
final exhaustion throws a clear terminal exception with attempt details.
- Preserved cancellation semantics: caller-requested cancellation is
rethrown directly and not wrapped as retry exhaustion.
- Improved staging cleanup behavior after failures so cleanup is best
effort and does not mask the original error.
- Replaced ad-hoc logger calls with source-generated `LoggerMessage`
methods to match project logging conventions.
## Configuration and ASP.NET conventions
- Introduced `EmbeddingRetryOptions` and bound it via standard options
binding at `AIOptions:EmbeddingRetry`.
- Added validation (data annotations plus runtime validation) and safe
defaults.
- Added `EmbeddingRetry` defaults in
`EssentialCSharp.Web/appsettings.json`.
- Added `MaxDelayMs` cap to prevent delay overflow/unbounded waits.
## Additional cleanup
- Removed tracked `build_output.txt` and added it to `.gitignore`.
- Removed obsolete `RetryOptions` model after renaming to avoid
ambiguity with `Azure.Core.RetryOptions`.
## Validation
- Built `EssentialCSharp.Chat.Shared/EssentialCSharp.Chat.Common.csproj`
successfully after changes.
- Ran dual review passes with Opus 4.6 and GPT-5.5 and incorporated
findings.1 parent 8fd1dd0 commit 5b3721a
5 files changed
Lines changed: 369 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
| 35 | + | |
35 | 36 | | |
36 | 37 | | |
37 | 38 | | |
| |||
Lines changed: 22 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| 9 | + | |
8 | 10 | | |
9 | 11 | | |
10 | 12 | | |
| |||
65 | 67 | | |
66 | 68 | | |
67 | 69 | | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
68 | 79 | | |
69 | 80 | | |
70 | 81 | | |
| |||
89 | 100 | | |
90 | 101 | | |
91 | 102 | | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
92 | 114 | | |
93 | 115 | | |
94 | 116 | | |
| |||
Lines changed: 83 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
0 commit comments