From 6741004c69c417b00ab99fa23556cd77498b88d7 Mon Sep 17 00:00:00 2001 From: xb205 <62425964+devxb@users.noreply.github.com> Date: Sun, 16 Feb 2025 04:22:33 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20OCR=20TIMEOUT=EC=9D=84=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=ED=95=9C=EB=8B=A4=20(#54)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin/me/misik/api/app/CreateReviewFacade.kt | 11 +++++++++-- src/main/kotlin/me/misik/api/domain/ReviewStyle.kt | 2 ++ .../misik/api/domain/response/ReviewStylesResponse.kt | 7 ++++--- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/me/misik/api/app/CreateReviewFacade.kt b/src/main/kotlin/me/misik/api/app/CreateReviewFacade.kt index ff128d7..8c46dff 100644 --- a/src/main/kotlin/me/misik/api/app/CreateReviewFacade.kt +++ b/src/main/kotlin/me/misik/api/app/CreateReviewFacade.kt @@ -4,6 +4,8 @@ import com.fasterxml.jackson.databind.ObjectMapper import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.filterNot import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.withTimeout import me.misik.api.api.response.ParsedOcrResponse import me.misik.api.core.Chatbot import me.misik.api.core.GracefulShutdownDispatcher @@ -18,6 +20,7 @@ import me.misik.api.domain.request.CreateReviewRequest import me.misik.api.domain.request.OcrTextRequest import org.slf4j.LoggerFactory import org.springframework.stereotype.Service +import kotlin.time.Duration.Companion.milliseconds @Service class CreateReviewFacade( @@ -75,8 +78,12 @@ class CreateReviewFacade( } fun parseOcrText(ocrText: OcrTextRequest): ParsedOcrResponse { - val prompt = promptService.findAllByType(PromptType.OCR).first() - return parseOcrWithRetry(prompt, ocrText, 0) + return runBlocking(GracefulShutdownDispatcher.dispatcher) { + withTimeout(10.milliseconds) { + val prompt = promptService.findAllByType(PromptType.OCR).first() + parseOcrWithRetry(prompt, ocrText, 0) + } + } } private fun parseOcrWithRetry( diff --git a/src/main/kotlin/me/misik/api/domain/ReviewStyle.kt b/src/main/kotlin/me/misik/api/domain/ReviewStyle.kt index adaf6a2..ad979d5 100644 --- a/src/main/kotlin/me/misik/api/domain/ReviewStyle.kt +++ b/src/main/kotlin/me/misik/api/domain/ReviewStyle.kt @@ -4,4 +4,6 @@ enum class ReviewStyle(val iconUrl: String) { PROFESSIONAL("https://kr.object.ncloudstorage.com/misik/review-style/professional-icon.png"), FRIENDLY("https://kr.object.ncloudstorage.com/misik/review-style/friendly-icon.png"), CUTE("https://kr.object.ncloudstorage.com/misik/review-style/cute-icon.png"), + OCR("NOT_USE"), + ; } diff --git a/src/main/kotlin/me/misik/api/domain/response/ReviewStylesResponse.kt b/src/main/kotlin/me/misik/api/domain/response/ReviewStylesResponse.kt index 6e0e499..5526306 100644 --- a/src/main/kotlin/me/misik/api/domain/response/ReviewStylesResponse.kt +++ b/src/main/kotlin/me/misik/api/domain/response/ReviewStylesResponse.kt @@ -6,10 +6,11 @@ data class ReviewStylesResponse( val reviewStyles: List ) { companion object { - fun from(reviewStyles: List) : ReviewStylesResponse { + fun from(reviewStyles: List): ReviewStylesResponse { return ReviewStylesResponse( - reviewStyles.map { ReviewStyleResponse.from(it) } + reviewStyles.filterNot { it != ReviewStyle.OCR } + .map { ReviewStyleResponse.from(it) } ) } } -} \ No newline at end of file +}