36 lines
1.1 KiB
Ruby
Executable File
36 lines
1.1 KiB
Ruby
Executable File
class Captain::Tools::AddLabelToConversationTool < Captain::Tools::BasePublicTool
|
|
description 'Add a label to a conversation'
|
|
param :label_name, type: 'string', desc: 'The name of the label to add'
|
|
|
|
def perform(tool_context, args = {})
|
|
label_name = args[:label_name] || args['label_name']
|
|
conversation = find_conversation(tool_context.state)
|
|
return 'Conversation not found' unless conversation
|
|
|
|
label_name = label_name&.strip&.downcase
|
|
return 'Label name is required' if label_name.blank?
|
|
|
|
label = find_label(label_name)
|
|
return 'Label not found' unless label
|
|
|
|
add_label_to_conversation(conversation, label_name)
|
|
|
|
log_tool_usage('added_label', conversation_id: conversation.id, label: label_name)
|
|
|
|
"Label '#{label_name}' added to conversation ##{conversation.display_id}"
|
|
end
|
|
|
|
private
|
|
|
|
def find_label(label_name)
|
|
account_scoped(Label).find_by(title: label_name)
|
|
end
|
|
|
|
def add_label_to_conversation(conversation, label_name)
|
|
conversation.add_labels(label_name)
|
|
rescue StandardError => e
|
|
Rails.logger.error "Failed to add label to conversation: #{e.message}"
|
|
raise
|
|
end
|
|
end
|