From 3e4b3e6a3f5c28121f64c73fb977cdcf2217d638 Mon Sep 17 00:00:00 2001 From: Ethan Huang Date: Tue, 23 Dec 2025 21:29:46 +0800 Subject: [PATCH 1/2] Add Identifiable conformance to `PartiallyGenerated` struct in `GenerableMacro` --- Sources/AnyLanguageModelMacros/GenerableMacro.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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") { From 9dfb06f0449cae1d67a8205ec99b11f73434cff8 Mon Sep 17 00:00:00 2001 From: Ethan Huang Date: Tue, 23 Dec 2025 23:37:26 +0800 Subject: [PATCH 2/2] Add generation ID to GeneratedContent initialization in tests --- .../AnyLanguageModelTests/GenerableMacroTests.swift | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) 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) } }