Skip to content

Commit e85aa33

Browse files
authored
Preserve named string enum dependencies in schema conversion (#149)
1 parent 884251f commit e85aa33

2 files changed

Lines changed: 24 additions & 0 deletions

File tree

Sources/AnyLanguageModel/Models/SystemLanguageModel.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,12 @@
552552
return .init(name: name ?? "", description: jsonSchema.description, properties: schemaProperties)
553553

554554
case .string(_, _, _, _, _, _, _, _, pattern: let pattern, _):
555+
if let values = jsonSchema.enum?.compactMap(\.stringValue), !values.isEmpty {
556+
if let name {
557+
return .init(name: name, description: jsonSchema.description, anyOf: values)
558+
}
559+
}
560+
555561
var guides: [FoundationModels.GenerationGuide<String>] = []
556562
if let values = jsonSchema.enum?.compactMap(\.stringValue), !values.isEmpty {
557563
guides.append(.anyOf(values))

Tests/AnyLanguageModelTests/DynamicSchemaConversionTests.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,24 @@ import Testing
201201
_ = convertToDynamicSchema(schema)
202202
}
203203

204+
@available(macOS 26.0, iOS 26.0, watchOS 26.0, tvOS 26.0, visionOS 26.0, *)
205+
@Test func convertNamedStringEnumDependencySchema() throws {
206+
let outputVersion: JSONSchema = .string(enum: ["v0", "v1"])
207+
let enumDependency = convertToDynamicSchema(outputVersion, name: "OutputVersion")
208+
209+
let root = FoundationModels.DynamicGenerationSchema(
210+
name: "Root",
211+
properties: [
212+
.init(
213+
name: "version",
214+
schema: .init(referenceTo: "OutputVersion")
215+
)
216+
]
217+
)
218+
219+
_ = try FoundationModels.GenerationSchema(root: root, dependencies: [enumDependency])
220+
}
221+
204222
// MARK: - Fallback Types
205223

206224
@available(macOS 26.0, iOS 26.0, watchOS 26.0, tvOS 26.0, visionOS 26.0, *)

0 commit comments

Comments
 (0)