chatwoot-develop/script/test_jasmine_brain.rb

70 lines
2.0 KiB
Ruby

# script/test_jasmine_brain.rb
# Usage: bundle exec rails runner script/test_jasmine_brain.rb
begin
puts 'Testing JasmineBrain (LLM Powered)...'
# 1. Setup Mock Objects
account = Account.first
assistant = Captain::Assistant.first || Captain::Assistant.create!(name: 'Brain Test', account: account, llm_model: 'gemini-1.5-flash')
# Ensure Gemini is used to be fast and cheap, or fallback to what is configured
puts "Assistant Model: #{assistant.llm_model}"
# Create a dummy conversation struct if needed, or find a real one
conversation = Conversation.first
unless conversation
puts 'No conversation found, creating dummy...'
inbox = Inbox.first
contact = Contact.first_or_create!(name: 'Tester', account: account)
conversation = Conversation.create!(inbox: inbox, contact: contact, account: account)
end
# 2. Test Case 1: Availability (Should be status_suites)
msg1 = 'Olá, gostaria de saber se tem alguma suíte com hidro livre agora?'
puts "\n--- Test 1: Availability ---"
puts "User: #{msg1}"
decision1 = Captain::Llm::JasmineBrain.decide(
assistant: assistant,
conversation: conversation,
message: msg1,
history: []
)
puts "Decision: Strategy=#{decision1.strategy}, Tool=#{decision1.tool_key}"
puts "Reasoning: #{decision1.reasoning}"
if decision1.strategy == :execute_tool && decision1.tool_key == 'status_suites'
puts '✅ PASS'
else
puts '❌ FAIL'
end
# 3. Test Case 2: General Chat (Should be direct)
msg2 = 'Quem é o presidente do brasil?'
puts "\n--- Test 2: General Chat ---"
puts "User: #{msg2}"
decision2 = Captain::Llm::JasmineBrain.decide(
assistant: assistant,
conversation: conversation,
message: msg2,
history: []
)
puts "Decision: Strategy=#{decision2.strategy}, Tool=#{decision2.tool_key}"
puts "Reasoning: #{decision2.reasoning}"
if decision2.strategy == :direct
puts '✅ PASS'
else
puts '❌ FAIL'
end
rescue StandardError => e
puts "ERROR: #{e.message}"
puts e.backtrace.first(5)
end