Post

Replies

Boosts

Views

Activity

Reply to Foundation Models Tools not invoking
What am I missing here? struct ContactsTool: Tool { let name = "getContacts" let description = """ Get a contact from the address book matching the name """ @Generable struct Arguments { @Guide(description: "The search query used to search the contact example name or email or contact number") let searchQuery: String? } func call(arguments: Arguments) async -> ToolOutput { do { // Request permission to access the person's contacts. let store = CNContactStore() try await store.requestAccess(for: .contacts) let keysToFetch = [CNContactGivenNameKey, CNContactBirthdayKey] as [CNKeyDescriptor] let request = CNContactFetchRequest(keysToFetch: keysToFetch) var contacts: [CNContact] = [] try store.enumerateContacts(with: request) { contact, stop in if contact.givenName.lowercased().contains(arguments.searchQuery?.lowercased() ?? "") { contacts.append(contact) } else if contact.middleName.lowercased().contains(arguments.searchQuery?.lowercased() ?? "") { contacts.append(contact) } else if contact.familyName.lowercased().contains(arguments.searchQuery?.lowercased() ?? "") { contacts.append(contact) } else if contact.emailAddresses.isEmpty == false { for email in contact.emailAddresses { if email.value.lowercased.contains(arguments.searchQuery?.lowercased() ?? "") { contacts.append(contact) break } } } } guard let pickedContact = contacts.shuffled().first else { return ToolOutput("No contact found") } return ToolOutput("These are the picked contact from your phone: name :\(pickedContact.givenName) \(pickedContact.familyName) email: \(pickedContact.emailAddresses.first?.value ?? "")") } catch { return ToolOutput("No contact found") } } } struct DocumentGenerationAssistTool: Tool { var name: String = "documentGenerationAssistTool" var description: String = "provides sample data for document generation" @Generable struct Arguments { @Guide(description: "the name or type of the document.") var documentName: String } func call(arguments: Arguments) async throws -> ToolOutput { return ToolOutput(GeneratedContent(SignRequest.sampleNonDisclosureAgreement.documet)) } }``` My session Creation: ```language static let modelInstruction = Instructions { "You are a document generation assistant for an eSignature platform. Your task is to convert plain text input into professional, well-structured HTML documents that will be used in legally binding signing requests. These documents will be edited in a rich text editor and exported to PDF." "The user may only specify the document name and may be a list of signers or receiver or approver" """ Always use the \(contactTool.name) tool to find the recipients """ """ Always use the \(documentAssistTool.name) tool for the document generation """ } private var session = LanguageModelSession(tools: [contactTool, documentAssistTool], instructions: modelInstruction)``` My user prompt -> "Generate a rental agreement with minimum of 2 pages need to be send for baarathi as a signer residing in Guduvancherry chennai pincode 603202"
Jun ’25
Reply to Foundation Models Tools not invoking
However, I’ve noticed that my model occasionally triggers the contact tool when I regenerate a response within the same session, even without changing the prompt. Also, if you don’t mind, could you please share the instruction and prompt you used?
Replies
Boosts
Views
Activity
Jul ’25
Reply to Insufficient memory for Foundational Model Adapter Training
reduce the max_new_tokens=64
Replies
Boosts
Views
Activity
Jun ’25
Reply to Foundation Models Tools not invoking
What am I missing here? struct ContactsTool: Tool { let name = "getContacts" let description = """ Get a contact from the address book matching the name """ @Generable struct Arguments { @Guide(description: "The search query used to search the contact example name or email or contact number") let searchQuery: String? } func call(arguments: Arguments) async -> ToolOutput { do { // Request permission to access the person's contacts. let store = CNContactStore() try await store.requestAccess(for: .contacts) let keysToFetch = [CNContactGivenNameKey, CNContactBirthdayKey] as [CNKeyDescriptor] let request = CNContactFetchRequest(keysToFetch: keysToFetch) var contacts: [CNContact] = [] try store.enumerateContacts(with: request) { contact, stop in if contact.givenName.lowercased().contains(arguments.searchQuery?.lowercased() ?? "") { contacts.append(contact) } else if contact.middleName.lowercased().contains(arguments.searchQuery?.lowercased() ?? "") { contacts.append(contact) } else if contact.familyName.lowercased().contains(arguments.searchQuery?.lowercased() ?? "") { contacts.append(contact) } else if contact.emailAddresses.isEmpty == false { for email in contact.emailAddresses { if email.value.lowercased.contains(arguments.searchQuery?.lowercased() ?? "") { contacts.append(contact) break } } } } guard let pickedContact = contacts.shuffled().first else { return ToolOutput("No contact found") } return ToolOutput("These are the picked contact from your phone: name :\(pickedContact.givenName) \(pickedContact.familyName) email: \(pickedContact.emailAddresses.first?.value ?? "")") } catch { return ToolOutput("No contact found") } } } struct DocumentGenerationAssistTool: Tool { var name: String = "documentGenerationAssistTool" var description: String = "provides sample data for document generation" @Generable struct Arguments { @Guide(description: "the name or type of the document.") var documentName: String } func call(arguments: Arguments) async throws -> ToolOutput { return ToolOutput(GeneratedContent(SignRequest.sampleNonDisclosureAgreement.documet)) } }``` My session Creation: ```language static let modelInstruction = Instructions { "You are a document generation assistant for an eSignature platform. Your task is to convert plain text input into professional, well-structured HTML documents that will be used in legally binding signing requests. These documents will be edited in a rich text editor and exported to PDF." "The user may only specify the document name and may be a list of signers or receiver or approver" """ Always use the \(contactTool.name) tool to find the recipients """ """ Always use the \(documentAssistTool.name) tool for the document generation """ } private var session = LanguageModelSession(tools: [contactTool, documentAssistTool], instructions: modelInstruction)``` My user prompt -> "Generate a rental agreement with minimum of 2 pages need to be send for baarathi as a signer residing in Guduvancherry chennai pincode 603202"
Replies
Boosts
Views
Activity
Jun ’25