diff --git a/firebaseai/FirebaseAIExample.xcodeproj/project.pbxproj b/firebaseai/FirebaseAIExample.xcodeproj/project.pbxproj index 3b4137ad3..a54b512f1 100644 --- a/firebaseai/FirebaseAIExample.xcodeproj/project.pbxproj +++ b/firebaseai/FirebaseAIExample.xcodeproj/project.pbxproj @@ -19,8 +19,8 @@ 8848C8352B0D04BC007B434F /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8848C8342B0D04BC007B434F /* ContentView.swift */; }; 8848C8372B0D04BD007B434F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8848C8362B0D04BD007B434F /* Assets.xcassets */; }; 8848C83A2B0D04BD007B434F /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8848C8392B0D04BD007B434F /* Preview Assets.xcassets */; }; - 886F95D52B17BA010036F07A /* SummarizeScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88209C1B2B0FBDC300F64795 /* SummarizeScreen.swift */; }; - 886F95D62B17BA010036F07A /* SummarizeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88209C1D2B0FBDC300F64795 /* SummarizeViewModel.swift */; }; + 886F95D52B17BA010036F07A /* GenerateContentScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88209C1B2B0FBDC300F64795 /* GenerateContentScreen.swift */; }; + 886F95D62B17BA010036F07A /* GenerateContentViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88209C1D2B0FBDC300F64795 /* GenerateContentViewModel.swift */; }; 886F95D82B17BA420036F07A /* MarkdownUI in Frameworks */ = {isa = PBXBuildFile; productRef = 886F95D72B17BA420036F07A /* MarkdownUI */; }; 886F95DB2B17BAEF0036F07A /* PhotoReasoningViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8802666F2B0FC39000CF7CB6 /* PhotoReasoningViewModel.swift */; }; 886F95DC2B17BAEF0036F07A /* PhotoReasoningScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 880266752B0FC39000CF7CB6 /* PhotoReasoningScreen.swift */; }; @@ -41,8 +41,8 @@ 86C1F4802BC726150026816F /* FunctionCallingViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FunctionCallingViewModel.swift; sourceTree = ""; }; 8802666F2B0FC39000CF7CB6 /* PhotoReasoningViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhotoReasoningViewModel.swift; sourceTree = ""; }; 880266752B0FC39000CF7CB6 /* PhotoReasoningScreen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhotoReasoningScreen.swift; sourceTree = ""; }; - 88209C1B2B0FBDC300F64795 /* SummarizeScreen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SummarizeScreen.swift; sourceTree = ""; }; - 88209C1D2B0FBDC300F64795 /* SummarizeViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SummarizeViewModel.swift; sourceTree = ""; }; + 88209C1B2B0FBDC300F64795 /* GenerateContentScreen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GenerateContentScreen.swift; sourceTree = ""; }; + 88209C1D2B0FBDC300F64795 /* GenerateContentViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GenerateContentViewModel.swift; sourceTree = ""; }; 88263BEE2B239BFE008AB09B /* ErrorView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ErrorView.swift; sourceTree = ""; }; 8848C82F2B0D04BC007B434F /* FirebaseAISample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FirebaseAISample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 8848C8322B0D04BC007B434F /* FirebaseAISampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirebaseAISampleApp.swift; sourceTree = ""; }; @@ -127,7 +127,7 @@ 88209C1A2B0FBDC300F64795 /* Screens */ = { isa = PBXGroup; children = ( - 88209C1B2B0FBDC300F64795 /* SummarizeScreen.swift */, + 88209C1B2B0FBDC300F64795 /* GenerateContentScreen.swift */, ); path = Screens; sourceTree = ""; @@ -135,7 +135,7 @@ 88209C1C2B0FBDC300F64795 /* ViewModels */ = { isa = PBXGroup; children = ( - 88209C1D2B0FBDC300F64795 /* SummarizeViewModel.swift */, + 88209C1D2B0FBDC300F64795 /* GenerateContentViewModel.swift */, ); path = ViewModels; sourceTree = ""; @@ -383,7 +383,7 @@ 886F95DE2B17D5010036F07A /* ChatMessage.swift in Sources */, 88263BF12B239C11008AB09B /* ErrorDetailsView.swift in Sources */, 8848C8352B0D04BC007B434F /* ContentView.swift in Sources */, - 886F95D52B17BA010036F07A /* SummarizeScreen.swift in Sources */, + 886F95D52B17BA010036F07A /* GenerateContentScreen.swift in Sources */, 8848C8332B0D04BC007B434F /* FirebaseAISampleApp.swift in Sources */, 886F95E02B17D5010036F07A /* ConversationViewModel.swift in Sources */, 886F95DD2B17D5010036F07A /* MessageView.swift in Sources */, @@ -393,7 +393,7 @@ 886F95DB2B17BAEF0036F07A /* PhotoReasoningViewModel.swift in Sources */, 886F95E12B17D5010036F07A /* ConversationScreen.swift in Sources */, 88263BF02B239C09008AB09B /* ErrorView.swift in Sources */, - 886F95D62B17BA010036F07A /* SummarizeViewModel.swift in Sources */, + 886F95D62B17BA010036F07A /* GenerateContentViewModel.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/firebaseai/FirebaseAISample/ContentView.swift b/firebaseai/FirebaseAISample/ContentView.swift index af7f2035f..4c18ab4fc 100644 --- a/firebaseai/FirebaseAISample/ContentView.swift +++ b/firebaseai/FirebaseAISample/ContentView.swift @@ -47,9 +47,9 @@ struct ContentView: View { Section("Samples") { NavigationLink { - SummarizeScreen(firebaseService: firebaseService) + GenerateContentScreen(firebaseService: firebaseService) } label: { - Label("Text", systemImage: "doc.text") + Label("Generate Content", systemImage: "doc.text") } NavigationLink { PhotoReasoningScreen(firebaseService: firebaseService) diff --git a/firebaseai/GenerativeAITextSample/Screens/SummarizeScreen.swift b/firebaseai/GenerativeAITextSample/Screens/GenerateContentScreen.swift similarity index 74% rename from firebaseai/GenerativeAITextSample/Screens/SummarizeScreen.swift rename to firebaseai/GenerativeAITextSample/Screens/GenerateContentScreen.swift index f11bcafc5..9bab06fb5 100644 --- a/firebaseai/GenerativeAITextSample/Screens/SummarizeScreen.swift +++ b/firebaseai/GenerativeAITextSample/Screens/GenerateContentScreen.swift @@ -16,14 +16,15 @@ import MarkdownUI import SwiftUI import FirebaseAI -struct SummarizeScreen: View { +struct GenerateContentScreen: View { let firebaseService: FirebaseAI - @StateObject var viewModel: SummarizeViewModel + @StateObject var viewModel: GenerateContentViewModel @State var userInput = "" init(firebaseService: FirebaseAI) { self.firebaseService = firebaseService - _viewModel = StateObject(wrappedValue: SummarizeViewModel(firebaseService: firebaseService)) + _viewModel = + StateObject(wrappedValue: GenerateContentViewModel(firebaseService: firebaseService)) } enum FocusedField: Hashable { @@ -36,17 +37,17 @@ struct SummarizeScreen: View { var body: some View { VStack { VStack(alignment: .leading) { - Text("Enter some text, then tap on _Go_ to summarize it.") + Text("Enter some text, then tap on _Go_ to run generateContent on it.") .padding(.horizontal, 6) HStack(alignment: .top) { - TextField("Enter text summarize", text: $userInput, axis: .vertical) + TextField("Enter generate content input", text: $userInput, axis: .vertical) .focused($focusedField, equals: .message) .textFieldStyle(.roundedBorder) .onSubmit { - onSummarizeTapped() + onGenerateContentTapped() } Button("Go") { - onSummarizeTapped() + onGenerateContentTapped() } .padding(.top, 4) } @@ -71,17 +72,17 @@ struct SummarizeScreen: View { .navigationTitle("Text sample") } - private func onSummarizeTapped() { + private func onGenerateContentTapped() { focusedField = nil Task { - await viewModel.summarize(inputText: userInput) + await viewModel.generateContent(inputText: userInput) } } } #Preview { NavigationStack { - SummarizeScreen(firebaseService: FirebaseAI.firebaseAI()) + GenerateContentScreen(firebaseService: FirebaseAI.firebaseAI()) } } diff --git a/firebaseai/GenerativeAITextSample/ViewModels/SummarizeViewModel.swift b/firebaseai/GenerativeAITextSample/ViewModels/GenerateContentViewModel.swift similarity index 90% rename from firebaseai/GenerativeAITextSample/ViewModels/SummarizeViewModel.swift rename to firebaseai/GenerativeAITextSample/ViewModels/GenerateContentViewModel.swift index 94c41e70a..a9272ef5b 100644 --- a/firebaseai/GenerativeAITextSample/ViewModels/SummarizeViewModel.swift +++ b/firebaseai/GenerativeAITextSample/ViewModels/GenerateContentViewModel.swift @@ -17,7 +17,7 @@ import Foundation import OSLog @MainActor -class SummarizeViewModel: ObservableObject { +class GenerateContentViewModel: ObservableObject { private var logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "generative-ai") @Published @@ -35,7 +35,7 @@ class SummarizeViewModel: ObservableObject { model = firebaseService.generativeModel(modelName: "gemini-2.0-flash-001") } - func summarize(inputText: String) async { + func generateContent(inputText: String) async { defer { inProgress = false } @@ -48,9 +48,7 @@ class SummarizeViewModel: ObservableObject { errorMessage = nil outputText = "" - let prompt = "Summarize the following text for me: \(inputText)" - - let outputContentStream = try model.generateContentStream(prompt) + let outputContentStream = try model.generateContentStream(inputText) // stream response for try await outputContent in outputContentStream {