Skip to content

Commit c4ace62

Browse files
Include instructions param in OpenAILanguageModel (#20)
* Set instructions param in OpenAILanguageModel * Don't check for empty string * Don't check for empty string
1 parent e65c288 commit c4ace62

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

Sources/AnyLanguageModel/Models/OpenAILanguageModel.swift

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,11 @@ public struct OpenAILanguageModel: LanguageModel {
8787
fatalError("OpenAILanguageModel only supports generating String content")
8888
}
8989

90-
let messages = [
91-
OpenAIMessage(role: .user, content: .text(prompt.description))
92-
]
90+
var messages: [OpenAIMessage] = []
91+
if let instructions = session.instructions {
92+
messages.append(OpenAIMessage(role: .system, content: .text(instructions.description)))
93+
}
94+
messages.append(OpenAIMessage(role: .user, content: .text(prompt.description)))
9395

9496
// Convert tools if any are available in the session
9597
let openAITools: [OpenAITool]? = {
@@ -231,9 +233,11 @@ public struct OpenAILanguageModel: LanguageModel {
231233
fatalError("OpenAILanguageModel only supports generating String content")
232234
}
233235

234-
let messages = [
235-
OpenAIMessage(role: .user, content: .text(prompt.description))
236-
]
236+
var messages: [OpenAIMessage] = []
237+
if let instructions = session.instructions {
238+
messages.append(OpenAIMessage(role: .system, content: .text(instructions.description)))
239+
}
240+
messages.append(OpenAIMessage(role: .user, content: .text(prompt.description)))
237241

238242
// Convert tools if any are available in the session
239243
let openAITools: [OpenAITool]? = {
@@ -435,7 +439,8 @@ private enum Responses {
435439
options: GenerationOptions,
436440
stream: Bool
437441
) -> JSONValue {
438-
// Extract the user message content for the input parameter
442+
// Extract the system and user message content for the request
443+
let systemMessage = messages.first { $0.role == .system }
439444
let userMessage = messages.first { $0.role == .user }
440445
let inputText = if case .text(let text) = userMessage?.content { text } else { "" }
441446

@@ -445,6 +450,10 @@ private enum Responses {
445450
"stream": .bool(stream),
446451
]
447452

453+
if case .text(let instructions) = systemMessage?.content {
454+
body["instructions"] = .string(instructions)
455+
}
456+
448457
if let tools {
449458
body["tools"] = .array(tools.map { $0.jsonValue(for: .responses) })
450459
}

0 commit comments

Comments
 (0)