@@ -57,9 +57,10 @@ object OpenAIChatCompletionExtra {
57
57
def createChatCompletionWithJSON [T : Format ](
58
58
messages : Seq [BaseMessage ],
59
59
settings : CreateChatCompletionSettings ,
60
- taskNameForLogging : Option [String ] = None ,
61
- maxRetries : Option [Int ] = Some (5 ),
62
- retryOnAnyError : Boolean = false
60
+ failoverModels : Seq [String ],
61
+ maxRetries : Option [Int ] = Some (defaultMaxRetries),
62
+ retryOnAnyError : Boolean = false ,
63
+ taskNameForLogging : Option [String ] = None
63
64
)(
64
65
implicit ec : ExecutionContext ,
65
66
scheduler : Scheduler
@@ -78,10 +79,14 @@ object OpenAIChatCompletionExtra {
78
79
(messages, settings)
79
80
}
80
81
81
- val callFuture = openAIChatCompletionService
82
- .createChatCompletion (
82
+ openAIChatCompletionService
83
+ .createChatCompletionWithFailover (
83
84
messagesFinal,
84
- settingsFinal
85
+ settingsFinal,
86
+ failoverModels,
87
+ maxRetries,
88
+ retryOnAnyError,
89
+ failureMessage = s " ${taskNameForLoggingFinal.capitalize} failed. "
85
90
)
86
91
.map { response =>
87
92
val content = response.choices.head.message.content
@@ -95,18 +100,6 @@ object OpenAIChatCompletionExtra {
95
100
96
101
json.as[T ]
97
102
}
98
-
99
- maxRetries.map { maxRetries =>
100
- implicit val retrySettings : RetrySettings = RetrySettings (maxRetries = maxRetries)
101
-
102
- callFuture.retryOnFailure(
103
- failureMessage = Some (s " ${taskNameForLoggingFinal.capitalize} failed. " ),
104
- log = Some (logger.warn),
105
- isRetryable = isRetryable(retryOnAnyError)
106
- )
107
- }.getOrElse(
108
- callFuture
109
- )
110
103
}
111
104
112
105
private def isRetryable (
@@ -125,7 +118,7 @@ object OpenAIChatCompletionExtra {
125
118
ModelId .gpt_4o_2024_08_06
126
119
)
127
120
128
- private def handleOutputJsonSchema (
121
+ def handleOutputJsonSchema (
129
122
messages : Seq [BaseMessage ],
130
123
settings : CreateChatCompletionSettings ,
131
124
taskNameForLogging : String ,
0 commit comments