@@ -311,7 +311,25 @@ actor OpenAIChatCompletionsService: ChatCompletionsStreamAPI, ChatCompletionsAPI
311311 . requiresBeginWithUserMessage,
312312 canUseTool: model. info. supportsFunctionCalling,
313313 supportsImage: model. info. supportsImage,
314- supportsAudio: model. info. supportsAudio
314+ supportsAudio: model. info. supportsAudio,
315+ supportsTemperature: {
316+ guard model. format == . openAI else { return true }
317+ if let chatGPTModel = ChatGPTModel ( rawValue: model. info. modelName) {
318+ return chatGPTModel. supportsTemperature
319+ } else if model. info. modelName. hasPrefix ( " o " ) {
320+ return false
321+ }
322+ return true
323+ } ( ) ,
324+ supportsSystemPrompt: {
325+ guard model. format == . openAI else { return true }
326+ if let chatGPTModel = ChatGPTModel ( rawValue: model. info. modelName) {
327+ return chatGPTModel. supportsSystemPrompt
328+ } else if model. info. modelName. hasPrefix ( " o " ) {
329+ return false
330+ }
331+ return true
332+ } ( )
315333 )
316334 self . model = model
317335 self . requestModifier = requestModifier
@@ -714,7 +732,9 @@ extension OpenAIChatCompletionsService.RequestBody {
714732 requiresBeginWithUserMessage: Bool ,
715733 canUseTool: Bool ,
716734 supportsImage: Bool ,
717- supportsAudio: Bool
735+ supportsAudio: Bool ,
736+ supportsTemperature: Bool ,
737+ supportsSystemPrompt: Bool
718738 ) {
719739 temperature = body. temperature
720740 stream = body. stream
@@ -737,6 +757,17 @@ extension OpenAIChatCompletionsService.RequestBody {
737757
738758 var body = body
739759
760+ if !supportsTemperature {
761+ temperature = nil
762+ }
763+ if !supportsSystemPrompt {
764+ for (index, message) in body. messages. enumerated ( ) {
765+ if message. role == . system {
766+ body. messages [ index] . role = . user
767+ }
768+ }
769+ }
770+
740771 if requiresBeginWithUserMessage {
741772 let firstUserIndex = body. messages. firstIndex ( where: { $0. role == . user } ) ?? 0
742773 let endIndex = firstUserIndex
0 commit comments