From 08c11e567cdc73dc9e53272ee1c2c7e5f2cc6911 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 7 Jun 2026 16:06:04 +0200 Subject: [PATCH] feat(search): raise NL search rate limit from 5 to 20 req/min The rule-based NLP service is <100ms vs Ollama's ~15s, making the old limit too restrictive for normal interactive use. Co-Authored-By: Claude Sonnet 4.6 --- .../familienarchiv/search/NlSearchRateLimitProperties.java | 2 +- backend/src/main/resources/application.yaml | 2 +- .../familienarchiv/search/NlSearchControllerTest.java | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/search/NlSearchRateLimitProperties.java b/backend/src/main/java/org/raddatz/familienarchiv/search/NlSearchRateLimitProperties.java index e71f8a36..3be4b3b0 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/search/NlSearchRateLimitProperties.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/search/NlSearchRateLimitProperties.java @@ -8,5 +8,5 @@ import org.springframework.stereotype.Component; @ConfigurationProperties("app.nl-search.rate-limit") @Data public class NlSearchRateLimitProperties { - private int maxRequestsPerMinute = 5; + private int maxRequestsPerMinute = 20; } diff --git a/backend/src/main/resources/application.yaml b/backend/src/main/resources/application.yaml index a0054de6..c4756780 100644 --- a/backend/src/main/resources/application.yaml +++ b/backend/src/main/resources/application.yaml @@ -135,7 +135,7 @@ app: nl-search: rate-limit: - max-requests-per-minute: 5 + max-requests-per-minute: 20 ocr: sender-model: diff --git a/backend/src/test/java/org/raddatz/familienarchiv/search/NlSearchControllerTest.java b/backend/src/test/java/org/raddatz/familienarchiv/search/NlSearchControllerTest.java index 51600aa2..8630a2cb 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/search/NlSearchControllerTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/search/NlSearchControllerTest.java @@ -138,14 +138,14 @@ class NlSearchControllerTest { .andExpect(jsonPath("$.code").value("SMART_SEARCH_UNAVAILABLE")); } - // --- 7. 6th request in 1 minute → 429 (rate limit = 5/min default) --- + // --- 7. 21st request in 1 minute → 429 (rate limit = 20/min default) --- @Test @WithMockUser(username = "user@test.com", authorities = {"READ_ALL"}) - void search_returns429_onSixthRequestWithinRateLimit() throws Exception { + void search_returns429_on21stRequestWithinRateLimit() throws Exception { when(nlQueryParserService.search(anyString(), anyString(), any())).thenReturn(makeResponse()); - for (int i = 0; i < 5; i++) { + for (int i = 0; i < 20; i++) { mockMvc.perform(post("/api/search/nl").with(csrf()) .contentType(MediaType.APPLICATION_JSON) .content("{\"query\":\"Briefe von Walter\",\"lang\":\"de\"}"))