From 5993f79e7a1a748f5f0429dc58d07596c69c3e06 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Wed, 6 May 2026 15:50:14 +0200 Subject: [PATCH] feat(VocabService, AppHeader): enhance timeout configuration and update ad display settings - Updated the VocabService to allow configurable timeout for responses, defaulting to 300 seconds if not set or invalid. - Modified AppHeader component to change ad format to horizontal and adjusted responsive settings for better display consistency. - Ensured proper height settings for ad elements to maintain layout integrity across different screen sizes. --- backend/services/vocabService.js | 8 ++++-- frontend/src/components/AppHeader.vue | 35 ++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/backend/services/vocabService.js b/backend/services/vocabService.js index 6f360c6..ce438ef 100644 --- a/backend/services/vocabService.js +++ b/backend/services/vocabService.js @@ -2844,7 +2844,11 @@ export default class VocabService { } const controller = new AbortController(); - const timeout = setTimeout(() => controller.abort(), 120000); + const configuredTimeout = Number(process.env.LLM_ASSISTANT_TIMEOUT_MS); + const timeoutMs = Number.isFinite(configuredTimeout) && configuredTimeout >= 30000 + ? configuredTimeout + : 300000; + const timeout = setTimeout(() => controller.abort(), timeoutMs); const temperatureByMode = { explain: 0.4, @@ -2878,7 +2882,7 @@ export default class VocabService { } catch (error) { const err = new Error( error?.name === 'AbortError' - ? 'Der Sprachassistent hat länger als zwei Minuten für eine Antwort gebraucht.' + ? 'Der Sprachassistent hat das Antwort-Zeitlimit überschritten.' : 'Der Sprachassistent konnte nicht erreicht werden.' ); err.status = 502; diff --git a/frontend/src/components/AppHeader.vue b/frontend/src/components/AppHeader.vue index c1d23a7..0a27631 100644 --- a/frontend/src/components/AppHeader.vue +++ b/frontend/src/components/AppHeader.vue @@ -14,8 +14,8 @@ style="display:block" data-ad-client="ca-pub-1104166651501135" :data-ad-slot="adSlotId" - data-ad-format="auto" - data-full-width-responsive="true" + data-ad-format="horizontal" + data-full-width-responsive="false" >
@@ -255,10 +255,25 @@ export default { flex: 1 1 260px; min-width: 180px; max-width: 560px; + min-height: 54px; + max-height: 54px; + display: flex; + align-items: center; + overflow: hidden; } .header-ad .adsbygoogle { - min-height: 54px; + width: 100% !important; + height: 54px !important; + min-height: 54px !important; + max-height: 54px !important; + overflow: hidden !important; +} + +.header-ad :deep(iframe), +.header-ad :deep([id^="aswift_"]) { + height: 54px !important; + max-height: 54px !important; } .header-meta__context { @@ -394,6 +409,20 @@ export default { width: 100%; max-width: none; flex: 1 1 100%; + min-height: 44px; + max-height: 44px; + } + + .header-ad .adsbygoogle { + height: 44px !important; + min-height: 44px !important; + max-height: 44px !important; + } + + .header-ad :deep(iframe), + .header-ad :deep([id^="aswift_"]) { + height: 44px !important; + max-height: 44px !important; } .header-meta {