diff --git a/.github/workflows/sdk.ai.yml b/.github/workflows/sdk.ai.yml index fae4b2a87bd..9465f3ec914 100644 --- a/.github/workflows/sdk.ai.yml +++ b/.github/workflows/sdk.ai.yml @@ -48,7 +48,8 @@ jobs: target: iOS xcode: Xcode_26.1 runs-on: ${{ matrix.os }} - needs: spm + # Temporarily run immediately to check build failures + # needs: spm env: TEST_RUNNER_FIRAAppCheckDebugToken: ${{ secrets.VERTEXAI_INTEGRATION_FAC_DEBUG_TOKEN }} TEST_RUNNER_VTXIntegrationImagen: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }} @@ -56,10 +57,11 @@ jobs: secrets_passphrase: ${{ secrets.GHASecretsGPGPassphrase1 }} steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: actions/cache/restore@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1 - with: - path: .build - key: ${{ needs.spm.outputs.cache_key }} + # Temporarily disable cache restore + # - uses: actions/cache/restore@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1 + # with: + # path: .build + # key: ${{ needs.spm.outputs.cache_key }} - name: Run integration tests run: scripts/repo.sh tests run --secrets ./scripts/secrets/AI.json --platforms ${{ matrix.target }} --xcode ${{ matrix.xcode }} AI - name: Upload xcodebuild logs diff --git a/FirebaseAI/Sources/GenerativeModel.swift b/FirebaseAI/Sources/GenerativeModel.swift index b36bf1d4d3c..ac4508d1853 100644 --- a/FirebaseAI/Sources/GenerativeModel.swift +++ b/FirebaseAI/Sources/GenerativeModel.swift @@ -538,7 +538,7 @@ public final class GenerativeModel: Sendable { ) try await context.yield( GenerativeModel.ResponseStream.Snapshot( - content: Content.Partial(firebaseGeneratedContent), + content: Content.PartiallyGenerated(firebaseGeneratedContent), rawContent: firebaseGeneratedContent, rawResponse: response ) diff --git a/FirebaseAI/Sources/Protocols/Public/StructuredOutput/ConvertibleFromFirebaseGeneratedContent.swift b/FirebaseAI/Sources/Protocols/Public/StructuredOutput/ConvertibleFromFirebaseGeneratedContent.swift index 40f06287297..1398aab06e7 100644 --- a/FirebaseAI/Sources/Protocols/Public/StructuredOutput/ConvertibleFromFirebaseGeneratedContent.swift +++ b/FirebaseAI/Sources/Protocols/Public/StructuredOutput/ConvertibleFromFirebaseGeneratedContent.swift @@ -12,24 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#if canImport(FoundationModels) - public import protocol FoundationModels.ConvertibleFromGeneratedContent - public import struct FoundationModels.GeneratedContent -#endif // canImport(FoundationModels) - @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) public protocol ConvertibleFromFirebaseGeneratedContent { init(_ content: FirebaseGeneratedContent) throws } - -#if canImport(FoundationModels) - @available(iOS 26.0, macOS 26.0, *) - @available(tvOS, unavailable) - @available(watchOS, unavailable) - public extension ConvertibleFromFirebaseGeneratedContent - where Self: ConvertibleFromGeneratedContent { - init(_ content: FirebaseGeneratedContent) throws { - try self.init(content.generatedContent) - } - } -#endif // canImport(FoundationModels) diff --git a/FirebaseAI/Sources/Protocols/Public/StructuredOutput/ConvertibleToFirebaseGeneratedContent.swift b/FirebaseAI/Sources/Protocols/Public/StructuredOutput/ConvertibleToFirebaseGeneratedContent.swift index 20ca2e768d1..f33f294fe20 100644 --- a/FirebaseAI/Sources/Protocols/Public/StructuredOutput/ConvertibleToFirebaseGeneratedContent.swift +++ b/FirebaseAI/Sources/Protocols/Public/StructuredOutput/ConvertibleToFirebaseGeneratedContent.swift @@ -12,11 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -#if canImport(FoundationModels) - public import protocol FoundationModels.ConvertibleToGeneratedContent - public import struct FoundationModels.GeneratedContent -#endif // canImport(FoundationModels) - #if compiler(>=6.2) @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) public protocol ConvertibleToFirebaseGeneratedContent: SendableMetatype { @@ -28,14 +23,3 @@ var firebaseGeneratedContent: FirebaseGeneratedContent { get } } #endif // compiler(>=6.2) - -#if canImport(FoundationModels) - @available(iOS 26.0, macOS 26.0, *) - @available(tvOS, unavailable) - @available(watchOS, unavailable) - public extension ConvertibleToFirebaseGeneratedContent where Self: ConvertibleToGeneratedContent { - var firebaseGeneratedContent: FirebaseGeneratedContent { - generatedContent.firebaseGeneratedContent - } - } -#endif // canImport(FoundationModels) diff --git a/FirebaseAI/Sources/Protocols/Public/StructuredOutput/FirebaseGenerable.swift b/FirebaseAI/Sources/Protocols/Public/StructuredOutput/FirebaseGenerable.swift index 7f95e01fd46..a4aa1e6bd97 100644 --- a/FirebaseAI/Sources/Protocols/Public/StructuredOutput/FirebaseGenerable.swift +++ b/FirebaseAI/Sources/Protocols/Public/StructuredOutput/FirebaseGenerable.swift @@ -17,19 +17,19 @@ import Foundation @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) public protocol FirebaseGenerable: ConvertibleFromFirebaseGeneratedContent, ConvertibleToFirebaseGeneratedContent { - associatedtype Partial: ConvertibleFromFirebaseGeneratedContent = Self + associatedtype PartiallyGenerated: ConvertibleFromFirebaseGeneratedContent static var firebaseGenerationSchema: FirebaseGenerationSchema { get } } @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) public extension FirebaseGenerable { - typealias Partial = Self + typealias PartiallyGenerated = Self } @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) public extension Optional where Wrapped: FirebaseGenerable { - typealias Partial = Wrapped.Partial + typealias PartiallyGenerated = Wrapped.PartiallyGenerated } @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) @@ -56,6 +56,8 @@ extension Optional: ConvertibleFromFirebaseGeneratedContent @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) extension Bool: FirebaseGenerable { + public typealias PartiallyGenerated = Self + public static var firebaseGenerationSchema: FirebaseGenerationSchema { FirebaseGenerationSchema(type: Bool.self, kind: .boolean) } @@ -74,6 +76,8 @@ extension Bool: FirebaseGenerable { @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) extension String: FirebaseGenerable { + public typealias PartiallyGenerated = Self + public static var firebaseGenerationSchema: FirebaseGenerationSchema { FirebaseGenerationSchema(type: String.self, kind: .string(guides: StringGuides())) } @@ -92,6 +96,8 @@ extension String: FirebaseGenerable { @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) extension Int: FirebaseGenerable { + public typealias PartiallyGenerated = Self + public static var firebaseGenerationSchema: FirebaseGenerationSchema { FirebaseGenerationSchema(type: Int.self, kind: .integer(guides: IntegerGuides())) } @@ -110,6 +116,8 @@ extension Int: FirebaseGenerable { @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) extension Float: FirebaseGenerable { + public typealias PartiallyGenerated = Self + public static var firebaseGenerationSchema: FirebaseGenerationSchema { FirebaseGenerationSchema(type: Float.self, kind: .double(guides: DoubleGuides())) } @@ -128,6 +136,8 @@ extension Float: FirebaseGenerable { @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) extension Double: FirebaseGenerable { + public typealias PartiallyGenerated = Self + public static var firebaseGenerationSchema: FirebaseGenerationSchema { FirebaseGenerationSchema(type: Double.self, kind: .double(guides: DoubleGuides())) } @@ -146,6 +156,8 @@ extension Double: FirebaseGenerable { @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) extension Decimal: FirebaseGenerable { + public typealias PartiallyGenerated = Self + public static var firebaseGenerationSchema: FirebaseGenerationSchema { FirebaseGenerationSchema(type: Decimal.self, kind: .double(guides: DoubleGuides())) } @@ -164,6 +176,8 @@ extension Decimal: FirebaseGenerable { @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) extension Array: FirebaseGenerable where Element: FirebaseGenerable { + public typealias PartiallyGenerated = [Element.PartiallyGenerated] + public static var firebaseGenerationSchema: FirebaseGenerationSchema { FirebaseGenerationSchema( type: Self.self, diff --git a/FirebaseAI/Sources/Types/Public/StructuredOutput/FirebaseGeneratedContent.swift b/FirebaseAI/Sources/Types/Public/StructuredOutput/FirebaseGeneratedContent.swift index 969d382d581..cd95fec2875 100644 --- a/FirebaseAI/Sources/Types/Public/StructuredOutput/FirebaseGeneratedContent.swift +++ b/FirebaseAI/Sources/Types/Public/StructuredOutput/FirebaseGeneratedContent.swift @@ -14,14 +14,14 @@ import Foundation #if canImport(FoundationModels) - public import protocol FoundationModels.ConvertibleToGeneratedContent - public import struct FoundationModels.GenerationID - public import struct FoundationModels.GeneratedContent + private import FoundationModels #endif // canImport(FoundationModels) @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) public struct FirebaseGeneratedContent: Sendable, CustomDebugStringConvertible, FirebaseGenerable, Equatable { + public typealias PartiallyGenerated = Self + public let kind: Kind public static var firebaseGenerationSchema: FirebaseGenerationSchema { @@ -134,10 +134,9 @@ public struct FirebaseGeneratedContent: Sendable, CustomDebugStringConvertible, if #available(iOS 26.0, macOS 26.0, visionOS 26.0, *) { do { let generatedContent = try GeneratedContent(json: json) - firebaseGeneratedContent = generatedContent.firebaseGeneratedContent - firebaseGeneratedContent.id = id - - self = firebaseGeneratedContent + self = FirebaseGeneratedContent.from( + generatedContent: generatedContent, id: id + ) return } catch { @@ -215,6 +214,47 @@ public struct FirebaseGeneratedContent: Sendable, CustomDebugStringConvertible, return try Value(value) } + + #if canImport(FoundationModels) + @available(iOS 26.0, macOS 26.0, *) + @available(tvOS, unavailable) + @available(watchOS, unavailable) + private static func from(generatedContent: GeneratedContent, + id: ResponseID?) -> FirebaseGeneratedContent { + switch generatedContent.kind { + case .null: + return FirebaseGeneratedContent(kind: .null, id: id) + case let .bool(value): + return FirebaseGeneratedContent(kind: .bool(value), id: id) + case let .number(value): + return FirebaseGeneratedContent(kind: .number(value), id: id) + case let .string(value): + return FirebaseGeneratedContent(kind: .string(value), id: id) + case let .array(values): + return FirebaseGeneratedContent( + kind: .array(values.map { + from(generatedContent: $0, id: nil) + }), + id: id + ) + case let .structure(properties: properties, orderedKeys: orderedKeys): + return FirebaseGeneratedContent( + kind: .structure( + properties: properties.mapValues { + from(generatedContent: $0, id: nil) + }, + orderedKeys: orderedKeys + ), + id: id + ) + @unknown default: + assertionFailure( + "Unknown `FoundationModels.GeneratedContent` kind: \(generatedContent.kind)" + ) + return FirebaseGeneratedContent(kind: .null, id: id) + } + } + #endif // canImport(FoundationModels) } @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) @@ -262,73 +302,3 @@ public extension FirebaseGeneratedContent { } } } - -#if canImport(FoundationModels) - @available(iOS 26.0, macOS 26.0, *) - @available(tvOS, unavailable) - @available(watchOS, unavailable) - extension FirebaseGeneratedContent: ConvertibleToGeneratedContent { - public var generatedContent: GeneratedContent { - let generationID = id?.generationID - - switch kind { - case .null: - return GeneratedContent(kind: .null, id: generationID) - case let .bool(value): - return GeneratedContent(kind: .bool(value), id: generationID) - case let .number(value): - return GeneratedContent(kind: .number(value), id: generationID) - case let .string(value): - return GeneratedContent(kind: .string(value), id: generationID) - case let .array(values): - return GeneratedContent(kind: .array(values.map { $0.generatedContent }), id: generationID) - case let .structure(properties: properties, orderedKeys: orderedKeys): - return GeneratedContent( - kind: .structure( - properties: properties.mapValues { $0.generatedContent }, orderedKeys: orderedKeys - ), - id: generationID - ) - } - } - } - - @available(iOS 26.0, macOS 26.0, *) - @available(tvOS, unavailable) - @available(watchOS, unavailable) - extension GeneratedContent: ConvertibleToFirebaseGeneratedContent { - public var firebaseGeneratedContent: FirebaseGeneratedContent { - let responseID = id.map { ResponseID(generationID: $0) } - return toFirebaseGeneratedContent(id: responseID) - } - - private func toFirebaseGeneratedContent(id: ResponseID?) -> FirebaseGeneratedContent { - switch kind { - case .null: - return FirebaseGeneratedContent(kind: .null, id: id) - case let .bool(value): - return FirebaseGeneratedContent(kind: .bool(value), id: id) - case let .number(value): - return FirebaseGeneratedContent(kind: .number(value), id: id) - case let .string(value): - return FirebaseGeneratedContent(kind: .string(value), id: id) - case let .array(values): - return FirebaseGeneratedContent( - kind: .array(values.map { $0.toFirebaseGeneratedContent(id: nil) }), - id: id - ) - case let .structure(properties: properties, orderedKeys: orderedKeys): - return FirebaseGeneratedContent( - kind: .structure( - properties: properties.mapValues { $0.toFirebaseGeneratedContent(id: nil) }, - orderedKeys: orderedKeys - ), - id: id - ) - @unknown default: - assertionFailure("Unknown `FoundationModels.GeneratedContent` kind: \(kind)") - return FirebaseGeneratedContent(kind: .null, id: id) - } - } - } -#endif // canImport(FoundationModels) diff --git a/FirebaseAI/Sources/Types/Public/StructuredOutput/GenerativeModel+ResponseStream.swift b/FirebaseAI/Sources/Types/Public/StructuredOutput/GenerativeModel+ResponseStream.swift index 6bea48ed393..94bae9e0403 100644 --- a/FirebaseAI/Sources/Types/Public/StructuredOutput/GenerativeModel+ResponseStream.swift +++ b/FirebaseAI/Sources/Types/Public/StructuredOutput/GenerativeModel+ResponseStream.swift @@ -17,7 +17,7 @@ @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) public extension GenerativeModel { struct ResponseStream: AsyncSequence, Sendable - where Content: FirebaseGenerable & Sendable, Content.Partial: Sendable { + where Content: FirebaseGenerable & Sendable, Content.PartiallyGenerated: Sendable { public typealias Element = Snapshot public typealias AsyncIterator = AsyncThrowingStream.Iterator @@ -25,7 +25,7 @@ private let _context: StreamContext public struct Snapshot: Sendable { - public let content: Content.Partial + public let content: Content.PartiallyGenerated public let rawContent: FirebaseGeneratedContent public let rawResponse: GenerateContentResponse } diff --git a/FirebaseAI/Sources/Types/Public/StructuredOutput/ResponseID.swift b/FirebaseAI/Sources/Types/Public/StructuredOutput/ResponseID.swift index 79d65076020..c69dc372cec 100644 --- a/FirebaseAI/Sources/Types/Public/StructuredOutput/ResponseID.swift +++ b/FirebaseAI/Sources/Types/Public/StructuredOutput/ResponseID.swift @@ -14,7 +14,7 @@ import Foundation #if canImport(FoundationModels) - internal import struct FoundationModels.GenerationID + private import FoundationModels #endif // canImport(FoundationModels) protocol GenerationIDProtocol: Sendable, Hashable {} @@ -43,18 +43,22 @@ public struct ResponseID: Sendable, Hashable { identifier = .value(responseID) } + init(generationID: any GenerationIDProtocol) { + identifier = .generationID(generationID) + } + #if canImport(FoundationModels) @available(iOS 26.0, macOS 26.0, *) @available(tvOS, unavailable) @available(watchOS, unavailable) - init(generationID: GenerationID) { + private init(generationID: GenerationID) { identifier = .generationID(generationID) } @available(iOS 26.0, macOS 26.0, *) @available(tvOS, unavailable) @available(watchOS, unavailable) - var generationID: GenerationID? { + private var generationID: GenerationID? { guard case let .generationID(id as GenerationID) = identifier else { return nil } diff --git a/FirebaseAI/Tests/TestApp/FirebaseAITestApp.xcodeproj/project.pbxproj b/FirebaseAI/Tests/TestApp/FirebaseAITestApp.xcodeproj/project.pbxproj index 8b43cedf858..ee4129aac98 100644 --- a/FirebaseAI/Tests/TestApp/FirebaseAITestApp.xcodeproj/project.pbxproj +++ b/FirebaseAI/Tests/TestApp/FirebaseAITestApp.xcodeproj/project.pbxproj @@ -377,6 +377,7 @@ SDKROOT = auto; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -415,6 +416,7 @@ SDKROOT = auto; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -436,6 +438,7 @@ SDKROOT = auto; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FirebaseAITestApp-SPM.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/FirebaseAITestApp-SPM"; @@ -458,6 +461,7 @@ SDKROOT = auto; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx"; SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FirebaseAITestApp-SPM.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/FirebaseAITestApp-SPM"; diff --git a/FirebaseAI/Tests/TestApp/Packages/FirebaseAILogicExtended/Sources/FirebaseAILogicMacro/FirebaseAILogicMacros.swift b/FirebaseAI/Tests/TestApp/Packages/FirebaseAILogicExtended/Sources/FirebaseAILogicMacro/FirebaseAILogicMacros.swift index 6444b785cee..4eee9ade460 100644 --- a/FirebaseAI/Tests/TestApp/Packages/FirebaseAILogicExtended/Sources/FirebaseAILogicMacro/FirebaseAILogicMacros.swift +++ b/FirebaseAI/Tests/TestApp/Packages/FirebaseAILogicExtended/Sources/FirebaseAILogicMacro/FirebaseAILogicMacros.swift @@ -21,22 +21,22 @@ names: named(init(_:)), named(firebaseGeneratedContent) ) -@attached(member, names: arbitrary) public macro FirebaseGenerable(description: String? = nil) = +@attached(member, names: arbitrary) public macro Generable(description: String? = nil) = #externalMacro( module: "FirebaseAILogicMacros", type: "FirebaseGenerableMacro" ) @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) -@attached(peer) public macro FirebaseGuide(description: String? = nil, - _ guides: FirebaseGenerationGuide...) = +@attached(peer) public macro Guide(description: String? = nil, + _ guides: FirebaseGenerationGuide...) = #externalMacro( module: "FirebaseAILogicMacros", type: "FirebaseGuideMacro" ) where T: FirebaseGenerable @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) -@attached(peer) public macro FirebaseGuide(description: String) = +@attached(peer) public macro Guide(description: String) = #externalMacro( module: "FirebaseAILogicMacros", type: "FirebaseGuideMacro" diff --git a/FirebaseAI/Tests/TestApp/Packages/FirebaseAILogicExtended/Sources/FirebaseAILogicMacros/FirebaseGenerableMacro.swift b/FirebaseAI/Tests/TestApp/Packages/FirebaseAILogicExtended/Sources/FirebaseAILogicMacros/FirebaseGenerableMacro.swift index 88eee9178b6..543148057d8 100644 --- a/FirebaseAI/Tests/TestApp/Packages/FirebaseAILogicExtended/Sources/FirebaseAILogicMacros/FirebaseGenerableMacro.swift +++ b/FirebaseAI/Tests/TestApp/Packages/FirebaseAILogicExtended/Sources/FirebaseAILogicMacros/FirebaseGenerableMacro.swift @@ -358,7 +358,7 @@ extension FirebaseGenerableMacro: MemberMacro { let propertyTypeString = info.type.trimmed.description partiallyGeneratedProperties - .append("var \(info.name): \(propertyTypeString).Partial?") + .append("var \(info.name): \(propertyTypeString).PartiallyGenerated?") partiallyGeneratedInits .append("self.\(info.name) = try content.value(forProperty: \"\(info.name)\")") } @@ -421,7 +421,7 @@ extension FirebaseGenerableMacro: MemberMacro { let partiallyGeneratedInitsCode = partiallyGeneratedInits.joined(separator: "\n ") let partiallyGeneratedStructCode = """ - nonisolated struct Partial: Identifiable, FirebaseAILogic.ConvertibleFromFirebaseGeneratedContent { + nonisolated struct PartiallyGenerated: Identifiable, FirebaseAILogic.ConvertibleFromFirebaseGeneratedContent { var id: FirebaseAILogic.ResponseID \(partiallyGeneratedPropertiesCode) nonisolated init(_ content: FirebaseAILogic.FirebaseGeneratedContent) throws { diff --git a/FirebaseAI/Tests/TestApp/Tests/Integration/SchemaTests.swift b/FirebaseAI/Tests/TestApp/Tests/Integration/SchemaTests.swift index 5633db47217..cd962cd153b 100644 --- a/FirebaseAI/Tests/TestApp/Tests/Integration/SchemaTests.swift +++ b/FirebaseAI/Tests/TestApp/Tests/Integration/SchemaTests.swift @@ -32,9 +32,9 @@ struct SchemaTests { ] let generationConfig = GenerationConfig(temperature: 0.0, topP: 0.0, topK: 1) - @FirebaseGenerable + @Generable struct CityList { - @FirebaseGuide(description: "A list of city names", .count(3 ... 5)) + @Guide(description: "A list of city names", .count(3 ... 5)) let cities: [String] } @@ -103,9 +103,9 @@ struct SchemaTests { } #endif // compiler(>=6.2) - @FirebaseGenerable + @Generable struct TestNumber { - @FirebaseGuide(description: "A number", .minimum(110), .maximum(120)) + @Guide(description: "A number", .minimum(110), .maximum(120)) let value: Int } @@ -160,15 +160,15 @@ struct SchemaTests { } #endif // compiler(>=6.2) - @FirebaseGenerable + @Generable struct ProductInfo { - @FirebaseGuide(description: "The name of the product") + @Guide(description: "The name of the product") let productName: String - @FirebaseGuide(description: "A rating", .range(1 ... 5)) + @Guide(description: "A rating", .range(1 ... 5)) let rating: Int - @FirebaseGuide(description: "A price", .minimum(10.00), .maximum(120.00)) + @Guide(description: "A price", .minimum(10.00), .maximum(120.00)) let price: Double - @FirebaseGuide(description: "A sale price", .minimum(5.00), .maximum(90.00)) + @Guide(description: "A sale price", .minimum(5.00), .maximum(90.00)) let salePrice: Float } @@ -249,26 +249,26 @@ struct SchemaTests { } #endif // compiler(>=6.2) - @FirebaseGenerable + @Generable struct MailingAddress { enum PostalInfo { - @FirebaseGenerable + @Generable struct Canada { - @FirebaseGuide(description: """ + @Guide(description: """ The 2-letter province or territory code, for example, 'ON', 'QC', or 'NU'. """) let province: String - @FirebaseGuide(description: "The postal code, for example, 'A1A 1A1'.") + @Guide(description: "The postal code, for example, 'A1A 1A1'.") let postalCode: String } - @FirebaseGenerable + @Generable struct UnitedStates { - @FirebaseGuide(description: """ + @Guide(description: """ The 2-letter U.S. state or territory code, for example, 'CA', 'NY', or 'TX'. """) let state: String - @FirebaseGuide(description: "The 5-digit ZIP code, for example, '12345'.") + @Guide(description: "The 5-digit ZIP code, for example, '12345'.") let zipCode: String } @@ -276,9 +276,9 @@ struct SchemaTests { case unitedStates(state: String, zipCode: String) } - @FirebaseGuide(description: "The civic number and street name, for example, '123 Main Street'.") + @Guide(description: "The civic number and street name, for example, '123 Main Street'.") let streetAddress: String - @FirebaseGuide(description: "The name of the city.") + @Guide(description: "The name of the city.") let city: String let postalInfo: PostalInfo } @@ -400,9 +400,9 @@ struct SchemaTests { } #endif // compiler(>=6.2) - @FirebaseGenerable + @Generable struct FeatureToggle { - @FirebaseGuide(description: "Whether the experimental feature should be active") + @Guide(description: "Whether the experimental feature should be active") let isEnabled: Bool } @@ -450,10 +450,10 @@ struct SchemaTests { } #endif // compiler(>=6.2) - @FirebaseGenerable + @Generable struct UserProfile { let username: String - @FirebaseGuide(description: "The user's optional middle name") + @Guide(description: "The user's optional middle name") let middleName: String? } @@ -505,12 +505,12 @@ struct SchemaTests { } #endif // compiler(>=6.2) - @FirebaseGenerable + @Generable struct Pet { let name: String let species: Species - @FirebaseGenerable(description: "Animal species types") + @Generable(description: "Animal species types") enum Species { case cat, dog } @@ -568,14 +568,14 @@ struct SchemaTests { } #endif // compiler(>=6.2) - @FirebaseGenerable + @Generable struct Task { let title: String - @FirebaseGuide(description: "The priority level") + @Guide(description: "The priority level") let priority: Priority - @FirebaseGenerable + @Generable enum Priority: String { case low case medium = "med" @@ -634,9 +634,9 @@ struct SchemaTests { } #endif // compiler(>=6.2) - @FirebaseGenerable + @Generable struct GradeBook { - @FirebaseGuide(description: "A list of exam scores", .element(.range(0 ... 100))) + @Guide(description: "A list of exam scores", .element(.range(0 ... 100))) let scores: [Int] } @@ -694,17 +694,17 @@ struct SchemaTests { } #endif // compiler(>=6.2) - @FirebaseGenerable + @Generable struct Catalog { let name: String let categories: [Category] - @FirebaseGenerable + @Generable struct Category { let title: String let items: [Item] - @FirebaseGenerable + @Generable struct Item { let name: String let price: Double @@ -783,9 +783,9 @@ struct SchemaTests { } #endif // compiler(>=6.2) - @FirebaseGenerable + @Generable struct Statement { - @FirebaseGuide(description: "The total balance", .minimum(0.0)) + @Guide(description: "The total balance", .minimum(0.0)) let balance: Decimal } @@ -833,9 +833,9 @@ struct SchemaTests { } #endif // compiler(>=6.2) - @FirebaseGenerable + @Generable struct Metadata { - @FirebaseGuide(description: "Optional tags, up to 3", .count(0 ... 3)) + @Guide(description: "Optional tags, up to 3", .count(0 ... 3)) let tags: [String] } @@ -888,9 +888,9 @@ struct SchemaTests { } #endif // compiler(>=6.2) - @FirebaseGenerable + @Generable struct ConstrainedValue { - @FirebaseGuide(description: "A value between 10 and 20", .minimum(10), .maximum(20)) + @Guide(description: "A value between 10 and 20", .minimum(10), .maximum(20)) let value: Int }