app/models/ruby_conversations/concerns/conversation_messages.rb
# frozen_string_literal: true module RubyConversations module Concerns # Handles message-related functionality for Conversation module ConversationMessages extend ActiveSupport::Concern def initialize_messages(message_attributes) (message_attributes || []).each do |msg_data| processed_prompts = process_message_prompts(msg_data) message_instance = RubyConversations::Message.new(msg_data.except('id', 'conversation_id', 'created_at', 'updated_at')) message_instance.message_prompts = processed_prompts @messages << message_instance # Add to the messages array end end def with_prompts(prompt_inputs, description: nil) message = MessageBuilder.new(self).build_from_multiple_prompts(prompt_inputs, description: description) with_model(message) self end def with_prompt(name, description: nil, inputs: {}) message = MessageBuilder.new(self).build_from_single_prompt(name, description: description, inputs: inputs) with_model(message) self end def with_user_message(message, description: nil) MessageBuilder.new(self).build_from_user_message(message, description: description) self end private def with_model(message) return unless message.message_prompts.first.llm.present? model = message.message_prompts.first.llm chat.with_model(model) with_message_llm(message, chat.model.id) end def with_message_llm(message, llm) message.llm = llm message.model_identifier = llm end end end end