Skip to content

Commit f9754ba

Browse files
authored
[Firebase AI] Add internal JSON Schema support in GenerationConfig (#15404)
1 parent d5b6dec commit f9754ba

File tree

3 files changed

+419
-117
lines changed

3 files changed

+419
-117
lines changed

FirebaseAI/Sources/GenerationConfig.swift

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ public struct GenerationConfig: Sendable {
4848
/// Output schema of the generated candidate text.
4949
let responseSchema: Schema?
5050

51+
/// Output schema of the generated response in [JSON Schema](https://json-schema.org/) format.
52+
///
53+
/// If set, `responseSchema` must be omitted and `responseMIMEType` is required.
54+
let responseJSONSchema: JSONObject?
55+
5156
/// Supported modalities of the response.
5257
let responseModalities: [ResponseModality]?
5358

@@ -175,6 +180,26 @@ public struct GenerationConfig: Sendable {
175180
self.stopSequences = stopSequences
176181
self.responseMIMEType = responseMIMEType
177182
self.responseSchema = responseSchema
183+
responseJSONSchema = nil
184+
self.responseModalities = responseModalities
185+
self.thinkingConfig = thinkingConfig
186+
}
187+
188+
init(temperature: Float? = nil, topP: Float? = nil, topK: Int? = nil, candidateCount: Int? = nil,
189+
maxOutputTokens: Int? = nil, presencePenalty: Float? = nil, frequencyPenalty: Float? = nil,
190+
stopSequences: [String]? = nil, responseMIMEType: String, responseJSONSchema: JSONObject,
191+
responseModalities: [ResponseModality]? = nil, thinkingConfig: ThinkingConfig? = nil) {
192+
self.temperature = temperature
193+
self.topP = topP
194+
self.topK = topK
195+
self.candidateCount = candidateCount
196+
self.maxOutputTokens = maxOutputTokens
197+
self.presencePenalty = presencePenalty
198+
self.frequencyPenalty = frequencyPenalty
199+
self.stopSequences = stopSequences
200+
self.responseMIMEType = responseMIMEType
201+
responseSchema = nil
202+
self.responseJSONSchema = responseJSONSchema
178203
self.responseModalities = responseModalities
179204
self.thinkingConfig = thinkingConfig
180205
}
@@ -195,6 +220,7 @@ extension GenerationConfig: Encodable {
195220
case stopSequences
196221
case responseMIMEType = "responseMimeType"
197222
case responseSchema
223+
case responseJSONSchema = "responseJsonSchema"
198224
case responseModalities
199225
case thinkingConfig
200226
}

0 commit comments

Comments
 (0)