@@ -7,20 +7,17 @@ actor GoogleAIChatCompletionsService: ChatCompletionsAPI, ChatCompletionsStreamA
77 let apiKey : String
88 let model : ChatModel
99 var requestBody : ChatCompletionsRequestBody
10- let prompt : ChatGPTPrompt
1110 let baseURL : String
1211
1312 init (
1413 apiKey: String ,
1514 model: ChatModel ,
1615 requestBody: ChatCompletionsRequestBody ,
17- prompt: ChatGPTPrompt ,
1816 baseURL: String
1917 ) {
2018 self . apiKey = apiKey
2119 self . model = model
2220 self . requestBody = requestBody
23- self . prompt = prompt
2421 self . baseURL = baseURL
2522 }
2623
@@ -36,9 +33,7 @@ actor GoogleAIChatCompletionsService: ChatCompletionsAPI, ChatCompletionsStreamA
3633 ? . init( )
3734 : . init( apiVersion: model. info. googleGenerativeAIInfo. apiVersion)
3835 )
39- let history = prompt. googleAICompatible. history. map { message in
40- ModelContent ( message)
41- }
36+ let history = Self . convertMessages ( requestBody. messages)
4237
4338 do {
4439 let response = try await aiModel. generateContent ( history)
@@ -86,7 +81,7 @@ actor GoogleAIChatCompletionsService: ChatCompletionsAPI, ChatCompletionsStreamA
8681 ? . init( )
8782 : . init( apiVersion: model. info. googleGenerativeAIInfo. apiVersion)
8883 )
89- let history = prompt . googleAICompatible . history . map { message in
84+ let history = requestBody . messages . map { message in
9085 ModelContent ( message)
9186 }
9287
@@ -135,15 +130,15 @@ actor GoogleAIChatCompletionsService: ChatCompletionsAPI, ChatCompletionsStreamA
135130
136131 return stream
137132 }
138- }
139133
140- extension ChatGPTPrompt {
141- var googleAICompatible : ChatGPTPrompt {
142- var history = self . history
143- var reformattedHistory = [ ChatMessage] ( )
134+ static func convertMessages(
135+ _ messages: [ ChatCompletionsRequestBody . Message ]
136+ ) -> [ ModelContent ] {
137+ var history = messages
138+ var reformattedHistory = [ ChatCompletionsRequestBody . Message] ( )
144139
145140 // We don't want to combine the new user message with others.
146- let newUserMessage : ChatMessage ? = if history. last? . role == . user {
141+ let newUserMessage : ChatCompletionsRequestBody . Message ? = if history. last? . role == . user {
147142 history. removeLast ( )
148143 } else {
149144 nil
@@ -154,7 +149,6 @@ extension ChatGPTPrompt {
154149 guard lastIndex >= 0 else { // first message
155150 if message. role == . system {
156151 reformattedHistory. append ( . init(
157- id: message. id,
158152 role: . user,
159153 content: ModelContent . convertContent ( of: message)
160154 ) )
@@ -174,8 +168,7 @@ extension ChatGPTPrompt {
174168 if ModelContent . convertRole ( lastMessage. role) == ModelContent
175169 . convertRole ( message. role)
176170 {
177- let newMessage = ChatMessage (
178- id: message. id,
171+ let newMessage = ChatCompletionsRequestBody . Message (
179172 role: message. role == . assistant ? . assistant : . user,
180173 content: """
181174 \( ModelContent . convertContent ( of: lastMessage) )
@@ -197,7 +190,7 @@ extension ChatGPTPrompt {
197190 . convertRole ( newUserMessage. role)
198191 {
199192 // Add dummy message
200- let dummyMessage = ChatMessage (
193+ let dummyMessage = ChatCompletionsRequestBody . Message (
201194 role: . assistant,
202195 content: " OK "
203196 )
@@ -206,47 +199,47 @@ extension ChatGPTPrompt {
206199 reformattedHistory. append ( newUserMessage)
207200 }
208201
209- return . init(
210- history: reformattedHistory,
211- references: references,
212- remainingTokenCount: remainingTokenCount
213- )
202+ return reformattedHistory. map ( ModelContent . init)
214203 }
215204}
216205
217206extension ModelContent {
218- static func convertRole( _ role: ChatMessage . Role ) -> String {
207+ static func convertRole( _ role: ChatCompletionsRequestBody . Message . Role ) -> String {
219208 switch role {
220- case . user, . system:
209+ case . user, . system, . tool :
221210 return " user "
222211 case . assistant:
223212 return " model "
224213 }
225214 }
226215
227- static func convertContent( of message: ChatMessage ) -> String {
216+ static func convertContent( of message: ChatCompletionsRequestBody . Message ) -> String {
228217 switch message. role {
229218 case . system:
230- return " System Prompt: \n \( message. content ?? " " ) "
219+ return " System Prompt: \n \( message. content) "
231220 case . user:
232- return message. content ?? " "
221+ return message. content
222+ case . tool:
223+ return """
224+ Result of function ID: \( message. toolCallId ?? " " )
225+ \( message. content)
226+ """
233227 case . assistant:
234228 if let toolCalls = message. toolCalls {
235229 return toolCalls. map { call in
236- let response = call. response
237230 return """
231+ Function ID: \( call. id)
238232 Call function: \( call. function. name)
239- Arguments: \( call. function. arguments)
240- Result: \( response. content)
233+ Arguments: \( call. function. arguments ?? " {} " )
241234 """
242235 } . joined ( separator: " \n " )
243236 } else {
244- return message. content ?? " "
237+ return message. content
245238 }
246239 }
247240 }
248241
249- init ( _ message: ChatMessage ) {
242+ init ( _ message: ChatCompletionsRequestBody . Message ) {
250243 let role = Self . convertRole ( message. role)
251244 let parts = [ ModelContent . Part. text ( Self . convertContent ( of: message) ) ]
252245 self = . init( role: role, parts: parts)
0 commit comments