From fe318206524198a59c47e001c8b53093e8431929 Mon Sep 17 00:00:00 2001 From: Mattt Zmuda Date: Tue, 24 Mar 2026 00:25:56 -0700 Subject: [PATCH] Preserve named string enum dependencies in schema conversion --- .../Models/SystemLanguageModel.swift | 6 ++++++ .../DynamicSchemaConversionTests.swift | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/Sources/AnyLanguageModel/Models/SystemLanguageModel.swift b/Sources/AnyLanguageModel/Models/SystemLanguageModel.swift index 97fddb0b..ff2e8f25 100644 --- a/Sources/AnyLanguageModel/Models/SystemLanguageModel.swift +++ b/Sources/AnyLanguageModel/Models/SystemLanguageModel.swift @@ -552,6 +552,12 @@ return .init(name: name ?? "", description: jsonSchema.description, properties: schemaProperties) case .string(_, _, _, _, _, _, _, _, pattern: let pattern, _): + if let values = jsonSchema.enum?.compactMap(\.stringValue), !values.isEmpty { + if let name { + return .init(name: name, description: jsonSchema.description, anyOf: values) + } + } + var guides: [FoundationModels.GenerationGuide] = [] if let values = jsonSchema.enum?.compactMap(\.stringValue), !values.isEmpty { guides.append(.anyOf(values)) diff --git a/Tests/AnyLanguageModelTests/DynamicSchemaConversionTests.swift b/Tests/AnyLanguageModelTests/DynamicSchemaConversionTests.swift index b5d95f3c..579e7a38 100644 --- a/Tests/AnyLanguageModelTests/DynamicSchemaConversionTests.swift +++ b/Tests/AnyLanguageModelTests/DynamicSchemaConversionTests.swift @@ -201,6 +201,24 @@ import Testing _ = convertToDynamicSchema(schema) } + @available(macOS 26.0, iOS 26.0, watchOS 26.0, tvOS 26.0, visionOS 26.0, *) + @Test func convertNamedStringEnumDependencySchema() throws { + let outputVersion: JSONSchema = .string(enum: ["v0", "v1"]) + let enumDependency = convertToDynamicSchema(outputVersion, name: "OutputVersion") + + let root = FoundationModels.DynamicGenerationSchema( + name: "Root", + properties: [ + .init( + name: "version", + schema: .init(referenceTo: "OutputVersion") + ) + ] + ) + + _ = try FoundationModels.GenerationSchema(root: root, dependencies: [enumDependency]) + } + // MARK: - Fallback Types @available(macOS 26.0, iOS 26.0, watchOS 26.0, tvOS 26.0, visionOS 26.0, *)