Skip to content

Commit 1e96333

Browse files
authored
[Firebase AI] Add parameters to SPT Chat sample (#1793)
1 parent 3fadb66 commit 1e96333

File tree

2 files changed

+55
-7
lines changed

2 files changed

+55
-7
lines changed

firebaseai/ChatExample/Screens/ConversationFromTemplateScreen.swift

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ struct ConversationFromTemplateScreen: View {
2828
@State
2929
private var userPrompt = ""
3030

31+
@State
32+
private var userName = ""
33+
34+
@State
35+
private var preferredLanguage = ""
36+
3137
init(firebaseService: FirebaseAI, title: String) {
3238
self.title = title
3339
self.firebaseService = firebaseService
@@ -44,6 +50,17 @@ struct ConversationFromTemplateScreen: View {
4450

4551
var body: some View {
4652
VStack {
53+
VStack {
54+
HStack {
55+
Text("Name:")
56+
TextField("Your name", text: $userName)
57+
}
58+
HStack {
59+
Text("Language:")
60+
TextField("Your preferred response language", text: $preferredLanguage)
61+
}
62+
}.padding()
63+
4764
ScrollViewReader { scrollViewProxy in
4865
List {
4966
ForEach(viewModel.messages) { message in
@@ -104,7 +121,7 @@ struct ConversationFromTemplateScreen: View {
104121
Task {
105122
let prompt = userPrompt
106123
userPrompt = ""
107-
await viewModel.sendMessage(prompt)
124+
await viewModel.sendMessage(prompt, name: userName, language: preferredLanguage)
108125
}
109126
}
110127

firebaseai/ChatExample/ViewModels/ConversationFromTemplateViewModel.swift

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,28 @@
2020
import Foundation
2121
import UIKit
2222

23+
// Template Details
24+
//
25+
// Configuration
26+
//
27+
// input:
28+
// default:
29+
// language: "English"
30+
// schema:
31+
// name?: string
32+
// language?: string
33+
// message: string
34+
//
35+
// Prompt and system instructions
36+
//
37+
// {{role "system"}}
38+
// {{#if name}}The user's name is {{name}}.{{/if}}
39+
// The user prefers to communicate in {{language}}.
40+
// {{history}}
41+
// {{role "user"}}
42+
// {{message}}
43+
//
44+
2345
@MainActor
2446
class ConversationFromTemplateViewModel: ObservableObject {
2547
/// This array holds both the user's and the system's chat messages
@@ -41,18 +63,20 @@ class ConversationFromTemplateViewModel: ObservableObject {
4163

4264
init(firebaseService: FirebaseAI) {
4365
model = firebaseService.templateGenerativeModel()
44-
chat = model.startChat(templateID: "chat-history")
66+
chat = model.startChat(templateID: "apple-qs-chat")
4567
}
4668

47-
func sendMessage(_ text: String) async {
69+
func sendMessage(_ text: String, name: String, language: String) async {
4870
error = nil
49-
await internalSendMessage(text)
71+
let name = name.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ? nil : name
72+
let language = language.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ? nil : language
73+
await internalSendMessage(text, name: name, language: language)
5074
}
5175

5276
func startNewChat() {
5377
stop()
5478
error = nil
55-
chat = model.startChat(templateID: "chat-history")
79+
chat = model.startChat(templateID: "apple-qs-chat")
5680
messages.removeAll()
5781
}
5882

@@ -61,7 +85,7 @@ class ConversationFromTemplateViewModel: ObservableObject {
6185
error = nil
6286
}
6387

64-
private func internalSendMessage(_ text: String) async {
88+
private func internalSendMessage(_ text: String, name: String?, language: String?) async {
6589
chatTask?.cancel()
6690

6791
chatTask = Task {
@@ -79,7 +103,14 @@ class ConversationFromTemplateViewModel: ObservableObject {
79103
messages.append(systemMessage)
80104

81105
do {
82-
let response = try await chat.sendMessage(text, inputs: ["message": text])
106+
var inputs = ["message": text]
107+
if let name {
108+
inputs["name"] = name
109+
}
110+
if let language {
111+
inputs["language"] = language
112+
}
113+
let response = try await chat.sendMessage(text, inputs: inputs)
83114

84115
if let responseText = response.text {
85116
// replace pending message with backend response

0 commit comments

Comments
 (0)