2020import Foundation
2121import 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
2446class 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