Skip to content

Commit ce44f7c

Browse files
committed
update: model call types
1 parent ac7bba2 commit ce44f7c

File tree

1 file changed

+61
-11
lines changed

1 file changed

+61
-11
lines changed

Sources/CompilerSwiftAI/Model Calling/ModelCall.swift

Lines changed: 61 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,75 @@ struct APIMessage: Codable {
88
let content: String
99
}
1010

11-
/// Request format for model calls, matching the backend API contract
12-
struct ModelCallRequest: Codable {
11+
/// Base protocol for model call requests
12+
protocol ModelCallRequestBase: Codable {
13+
var provider: ModelProvider { get }
14+
var model: String { get }
15+
var temperature: Float? { get }
16+
var maxTokens: Int? { get }
17+
}
18+
19+
/// Request format for completion (non-streaming) model calls
20+
struct CompletionRequest: ModelCallRequestBase {
21+
let provider: ModelProvider
22+
let model: String
23+
let systemPrompt: String?
24+
let userPrompt: String
25+
let temperature: Float?
26+
let maxTokens: Int?
27+
28+
init(using metadata: ModelMetadata, systemPrompt: String? = nil, userPrompt: String) {
29+
self.provider = metadata.provider
30+
self.model = metadata.model
31+
self.systemPrompt = systemPrompt
32+
self.userPrompt = userPrompt
33+
self.temperature = metadata.temperature
34+
self.maxTokens = metadata.maxTokens
35+
}
36+
}
37+
38+
/// Request format for streaming model calls
39+
struct StreamRequest: ModelCallRequestBase {
1340
let provider: ModelProvider
14-
let model: Model
15-
let messages: [APIMessage]
41+
let model: String
42+
let messages: [Message]
43+
let temperature: Float?
44+
let maxTokens: Int?
1645

1746
init(using metadata: ModelMetadata, messages: [Message]) {
1847
self.provider = metadata.provider
1948
self.model = metadata.model
49+
self.messages = messages
50+
self.temperature = metadata.temperature
51+
self.maxTokens = metadata.maxTokens
2052

21-
Logger.modelCalls.debug("Converting \(messages.count) messages to API format")
22-
let apiMessages = messages.map { message in
23-
APIMessage(role: message.role.rawValue, content: message.content)
24-
}
25-
self.messages = apiMessages
53+
Logger.modelCalls.debug("Preparing stream request with \(messages.count) messages")
2654
}
2755
}
2856

29-
struct ModelCallResponse: Codable, Sendable {
30-
let role: String
57+
/// Response format for completion calls
58+
struct CompletionResponse: Codable, Sendable {
59+
let content: String
60+
}
61+
62+
/// Response format for streaming calls - each chunk
63+
struct StreamChunk: Codable, Sendable {
3164
let content: String
3265
}
66+
67+
// Helper for encoding/decoding Message content arrays for the API
68+
extension Message {
69+
var apiContent: String {
70+
content.map { content in
71+
switch content.content {
72+
case .text(let text):
73+
return text
74+
case .image(let image):
75+
return """
76+
[Image: \(image.mimeType.rawValue),
77+
Base64: \(image.base64Data.prefix(20))...]
78+
"""
79+
}
80+
}.joined(separator: "\n")
81+
}
82+
}

0 commit comments

Comments
 (0)