diff --git a/Sources/AnyLanguageModelMacros/GenerableMacro.swift b/Sources/AnyLanguageModelMacros/GenerableMacro.swift index a44707e7..31ff2f83 100644 --- a/Sources/AnyLanguageModelMacros/GenerableMacro.swift +++ b/Sources/AnyLanguageModelMacros/GenerableMacro.swift @@ -690,12 +690,15 @@ public struct GenerableMacro: MemberMacro, ExtensionMacro { return DeclSyntax( stringLiteral: """ - public struct PartiallyGenerated: Sendable, ConvertibleFromGeneratedContent { + public struct PartiallyGenerated: Identifiable, Sendable, ConvertibleFromGeneratedContent { + public var id: GenerationID + \(optionalProperties) private let rawContent: GeneratedContent public init(_ generatedContent: GeneratedContent) throws { + self.id = generatedContent.id ?? GenerationID() self.rawContent = generatedContent if \(properties.isEmpty ? "case .structure = generatedContent.kind" : "case .structure(let properties, _) = generatedContent.kind") { diff --git a/Tests/AnyLanguageModelTests/GenerableMacroTests.swift b/Tests/AnyLanguageModelTests/GenerableMacroTests.swift index 1e6c12e7..75e12295 100644 --- a/Tests/AnyLanguageModelTests/GenerableMacroTests.swift +++ b/Tests/AnyLanguageModelTests/GenerableMacroTests.swift @@ -126,13 +126,18 @@ struct GenerableMacroTests { @Test("Create instance from GeneratedContent") func fromGeneratedContent() throws { - let content = GeneratedContent(properties: [ - "name": GeneratedContent("Bob"), - "age": GeneratedContent(kind: .number(25)), - ]) + let generationID = GenerationID() + let content = GeneratedContent( + properties: [ + "name": GeneratedContent("Bob"), + "age": GeneratedContent(kind: .number(25)), + ], + id: generationID + ) let args = try TestArguments(content) #expect(args.name == "Bob") #expect(args.age == 25) + #expect(args.asPartiallyGenerated().id == generationID) } }