Skip to content

Commit 7c7a311

Browse files
committed
Update ChatModel
1 parent 3863c2a commit 7c7a311

2 files changed

Lines changed: 30 additions & 18 deletions

File tree

Tool/Sources/AIModel/ChatModel.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@ public struct ChatModel: Codable, Equatable, Identifiable {
9494
public var maxTokens: Int
9595
@FallbackDecoding<EmptyBool>
9696
public var supportsFunctionCalling: Bool
97+
@FallbackDecoding<EmptyBool>
98+
public var supportsImage: Bool
99+
@FallbackDecoding<EmptyBool>
100+
public var supportsAudio: Bool
97101
@FallbackDecoding<EmptyString>
98102
public var modelName: String
99103

@@ -114,6 +118,8 @@ public struct ChatModel: Codable, Equatable, Identifiable {
114118
isFullURL: Bool = false,
115119
maxTokens: Int = 4000,
116120
supportsFunctionCalling: Bool = true,
121+
supportsImage: Bool = false,
122+
supportsAudio: Bool = false,
117123
modelName: String = "",
118124
openAIInfo: OpenAIInfo = OpenAIInfo(),
119125
ollamaInfo: OllamaInfo = OllamaInfo(),
@@ -126,6 +132,8 @@ public struct ChatModel: Codable, Equatable, Identifiable {
126132
self.isFullURL = isFullURL
127133
self.maxTokens = maxTokens
128134
self.supportsFunctionCalling = supportsFunctionCalling
135+
self.supportsImage = supportsImage
136+
self.supportsAudio = supportsAudio
129137
self.modelName = modelName
130138
self.openAIInfo = openAIInfo
131139
self.ollamaInfo = ollamaInfo

Tool/Sources/OpenAIService/APIs/OpenAIChatCompletionsService.swift

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,9 @@ actor OpenAIChatCompletionsService: ChatCompletionsStreamAPI, ChatCompletionsAPI
299299
requestBody,
300300
endpoint: endpoint,
301301
enforceMessageOrder: model.info.openAICompatibleInfo.enforceMessageOrder,
302-
canUseTool: model.info.supportsFunctionCalling
302+
canUseTool: model.info.supportsFunctionCalling,
303+
supportsImage: model.info.supportsImage,
304+
supportsAudio: model.info.supportsAudio
303305
)
304306
self.model = model
305307
}
@@ -676,7 +678,9 @@ extension OpenAIChatCompletionsService.RequestBody {
676678
_ body: ChatCompletionsRequestBody,
677679
endpoint: URL,
678680
enforceMessageOrder: Bool,
679-
canUseTool: Bool
681+
canUseTool: Bool,
682+
supportsImage: Bool,
683+
supportsAudio: Bool
680684
) {
681685
temperature = body.temperature
682686
stream = body.stream
@@ -739,24 +743,24 @@ extension OpenAIChatCompletionsService.RequestBody {
739743
case (.system, _):
740744
systemPrompts.append(contentsOf: Self.convertContentPart(
741745
content: message.content,
742-
images: message.images,
743-
audios: message.audios
746+
images: supportsImage ? message.images : [],
747+
audios: supportsAudio ? message.audios : []
744748
))
745749
case (.tool, true):
746750
if let last = nonSystemMessages.last, last.role == .tool {
747751
Self.joinMessageContent(
748752
&nonSystemMessages[nonSystemMessages.endIndex - 1],
749753
content: message.content,
750-
images: message.images,
751-
audios: message.audios
754+
images: supportsImage ? message.images : [],
755+
audios: supportsAudio ? message.audios : []
752756
)
753757
} else {
754758
nonSystemMessages.append(.init(
755759
role: .tool,
756760
content: .contentParts(Self.convertContentPart(
757761
content: message.content,
758-
images: message.images,
759-
audios: message.audios
762+
images: supportsImage ? message.images : [],
763+
audios: supportsAudio ? message.audios : []
760764
)),
761765
tool_calls: message.toolCalls?.map { tool in
762766
MessageToolCall(
@@ -775,16 +779,16 @@ extension OpenAIChatCompletionsService.RequestBody {
775779
Self.joinMessageContent(
776780
&nonSystemMessages[nonSystemMessages.endIndex - 1],
777781
content: message.content,
778-
images: message.images,
779-
audios: message.audios
782+
images: supportsImage ? message.images : [],
783+
audios: supportsAudio ? message.audios : []
780784
)
781785
} else {
782786
nonSystemMessages.append(.init(
783787
role: .assistant,
784788
content: .contentParts(Self.convertContentPart(
785789
content: message.content,
786-
images: message.images,
787-
audios: message.audios
790+
images: supportsImage ? message.images : [],
791+
audios: supportsAudio ? message.audios : []
788792
))
789793
))
790794
}
@@ -793,16 +797,16 @@ extension OpenAIChatCompletionsService.RequestBody {
793797
Self.joinMessageContent(
794798
&nonSystemMessages[nonSystemMessages.endIndex - 1],
795799
content: message.content,
796-
images: message.images,
797-
audios: message.audios
800+
images: supportsImage ? message.images : [],
801+
audios: supportsAudio ? message.audios : []
798802
)
799803
} else {
800804
nonSystemMessages.append(.init(
801805
role: .user,
802806
content: .contentParts(Self.convertContentPart(
803807
content: message.content,
804-
images: message.images,
805-
audios: message.audios
808+
images: supportsImage ? message.images : [],
809+
audios: supportsAudio ? message.audios : []
806810
)),
807811
name: message.name,
808812
tool_call_id: message.toolCallId
@@ -838,8 +842,8 @@ extension OpenAIChatCompletionsService.RequestBody {
838842
}(),
839843
content: .contentParts(Self.convertContentPart(
840844
content: message.content,
841-
images: message.images,
842-
audios: message.audios
845+
images: supportsImage ? message.images : [],
846+
audios: supportsAudio ? message.audios : []
843847
)),
844848
name: message.name,
845849
tool_calls: message.toolCalls?.map { tool in

0 commit comments

Comments
 (0)