ADR-002: Custom token bucket rate limiting⚓︎
Kontekst⚓︎
Google Gemini API har begrensninger på tokens per minutt (TPM) og samtidige foresporsler. Med flere brukere som chatter og analyser som kjorer i bakgrunnen, trenger vi a sikre at vi holder oss innenfor kvotene.
Beslutning⚓︎
Vi implementerer en egen ChatRequestQueue med token bucket-algoritme:
- 1 000 000 tokens per minutt
- Maks 10 samtidige foresporsler (SemaphoreSlim)
- Token-estimering: (inputChars / 4) + 5000 buffer
- System.Threading.Channels for unbounded foresporselsko
Alternativ vurdert⚓︎
ASP.NET Core innebygd rate limiting: Opererer pa HTTP-foresporselsnivaet, ikke token-niva. Passer ikke for LLM-APIer der kostnaden varierer dramatisk per foresporsler.
Konsekvenser⚓︎
Positive: - Forhindrer API-kvoteoverskridelser - Foresporsler koes i stedet for a feile
Avveininger:
- Token-estimering er grov (chars/4) — kan over- eller underestimere
- Hele budsjett refylles hvert minutt (ikke glidende vindu)
- Forelopig kommentert ut i ServiceConfiguration.cs — ikke aktivt i bruk