Skip to content

Commit de9f099

Browse files
committed
OpenAIChatCompletionExtra - parseJsonOrThrow
1 parent d9c0393 commit de9f099

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

openai-core/src/main/scala/io/cequence/openaiscala/service/OpenAIChatCompletionExtra.scala

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package io.cequence.openaiscala.service
22

33
import akka.actor.Scheduler
4+
import com.fasterxml.jackson.core.JsonParseException
45
import io.cequence.openaiscala.JsonFormats.eitherJsonSchemaFormat
56
import io.cequence.openaiscala.RetryHelpers.RetrySettings
6-
import io.cequence.openaiscala.{RetryHelpers, Retryable}
7+
import io.cequence.openaiscala.{OpenAIScalaClientException, RetryHelpers, Retryable}
78
import io.cequence.openaiscala.domain.response.ChatCompletionResponse
89
import io.cequence.openaiscala.domain.settings.{
910
ChatCompletionResponseFormatType,
@@ -92,7 +93,7 @@ object OpenAIChatCompletionExtra {
9293
val content = response.choices.head.message.content
9394
val contentTrimmed = content.stripPrefix("```json").stripSuffix("```").trim
9495
val contentJson = contentTrimmed.dropWhile(_ != '{')
95-
val json = Json.parse(contentJson)
96+
val json = parseJsonOrThrow(contentJson)
9697

9798
logger.debug(
9899
s"${taskNameForLoggingFinal.capitalize} finished in " + (new java.util.Date().getTime - start.getTime) + " ms."
@@ -102,6 +103,17 @@ object OpenAIChatCompletionExtra {
102103
}
103104
}
104105

106+
private def parseJsonOrThrow(
107+
jsonString: String
108+
) = try {
109+
Json.parse(jsonString)
110+
} catch {
111+
case e: JsonParseException =>
112+
val message = "Failed to parse JSON response:\n" + jsonString
113+
logger.error(message)
114+
throw new OpenAIScalaClientException(message, e)
115+
}
116+
105117
private def isRetryable(
106118
retryOnAnyError: Boolean
107119
): Throwable => Boolean =

0 commit comments

Comments
 (0)