Skip to content

Commit a50cd21

Browse files
committed
Update ChatCompletionsAPIBuilder to not take the prompt
1 parent d4c9c24 commit a50cd21

3 files changed

Lines changed: 32 additions & 47 deletions

File tree

Tool/Sources/OpenAIService/APIs/ChatCompletionsAPIBuilder.swift

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,14 @@ protocol ChatCompletionsAPIBuilder {
88
model: ChatModel,
99
endpoint: URL,
1010
apiKey: String,
11-
requestBody: ChatCompletionsRequestBody,
12-
prompt: ChatGPTPrompt
11+
requestBody: ChatCompletionsRequestBody
1312
) -> any ChatCompletionsStreamAPI
1413

1514
func buildNonStreamAPI(
1615
model: ChatModel,
1716
endpoint: URL,
1817
apiKey: String,
19-
requestBody: ChatCompletionsRequestBody,
20-
prompt: ChatGPTPrompt
18+
requestBody: ChatCompletionsRequestBody
2119
) -> any ChatCompletionsAPI
2220
}
2321

@@ -26,8 +24,7 @@ struct DefaultChatCompletionsAPIBuilder: ChatCompletionsAPIBuilder {
2624
model: ChatModel,
2725
endpoint: URL,
2826
apiKey: String,
29-
requestBody: ChatCompletionsRequestBody,
30-
prompt: ChatGPTPrompt
27+
requestBody: ChatCompletionsRequestBody
3128
) -> any ChatCompletionsStreamAPI {
3229
if model.id == "com.github.copilot" {
3330
return BuiltinExtensionChatCompletionsService(
@@ -42,7 +39,6 @@ struct DefaultChatCompletionsAPIBuilder: ChatCompletionsAPIBuilder {
4239
apiKey: apiKey,
4340
model: model,
4441
requestBody: requestBody,
45-
prompt: prompt,
4642
baseURL: endpoint.absoluteString
4743
)
4844
case .openAI, .openAICompatible, .azureOpenAI:
@@ -73,8 +69,7 @@ struct DefaultChatCompletionsAPIBuilder: ChatCompletionsAPIBuilder {
7369
model: ChatModel,
7470
endpoint: URL,
7571
apiKey: String,
76-
requestBody: ChatCompletionsRequestBody,
77-
prompt: ChatGPTPrompt
72+
requestBody: ChatCompletionsRequestBody
7873
) -> any ChatCompletionsAPI {
7974
if model.id == "com.github.copilot" {
8075
return BuiltinExtensionChatCompletionsService(
@@ -89,7 +84,6 @@ struct DefaultChatCompletionsAPIBuilder: ChatCompletionsAPIBuilder {
8984
apiKey: apiKey,
9085
model: model,
9186
requestBody: requestBody,
92-
prompt: prompt,
9387
baseURL: endpoint.absoluteString
9488
)
9589
case .openAI, .openAICompatible, .azureOpenAI:
@@ -118,7 +112,7 @@ struct DefaultChatCompletionsAPIBuilder: ChatCompletionsAPIBuilder {
118112
}
119113

120114
struct ChatCompletionsAPIBuilderDependencyKey: DependencyKey {
121-
static var liveValue = DefaultChatCompletionsAPIBuilder()
115+
static var liveValue: ChatCompletionsAPIBuilder = DefaultChatCompletionsAPIBuilder()
122116
}
123117

124118
extension DependencyValues {

Tool/Sources/OpenAIService/APIs/GoogleAIChatCompletionsService.swift

Lines changed: 25 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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

217206
extension 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)

Tool/Sources/OpenAIService/LegacyChatGPTService.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,7 @@ extension LegacyChatGPTService {
252252
model: model,
253253
endpoint: url,
254254
apiKey: configuration.apiKey,
255-
requestBody: requestBody,
256-
prompt: prompt
255+
requestBody: requestBody
257256
)
258257

259258
#if DEBUG
@@ -351,8 +350,7 @@ extension LegacyChatGPTService {
351350
model: model,
352351
endpoint: url,
353352
apiKey: configuration.apiKey,
354-
requestBody: requestBody,
355-
prompt: prompt
353+
requestBody: requestBody
356354
)
357355

358356
#if DEBUG

0 commit comments

Comments
 (0)