2025-03-12 12:39:16 -04:00
|
|
|
class Message < ApplicationRecord
|
|
|
|
belongs_to :chat
|
|
|
|
|
|
|
|
enum :role, { user: "user", assistant: "assistant", system: "system" }
|
|
|
|
|
2025-03-12 14:06:42 -04:00
|
|
|
validates :content, presence: true, allow_blank: true
|
2025-03-12 12:39:16 -04:00
|
|
|
validates :role, presence: true
|
|
|
|
|
|
|
|
scope :conversation, -> { where(debug_mode: false, role: [ :user, :assistant ]) }
|
2025-03-12 14:06:42 -04:00
|
|
|
scope :ordered, -> { order(created_at: :asc) }
|
|
|
|
|
|
|
|
after_create_commit :broadcast_to_chat
|
|
|
|
after_update_commit :broadcast_update_to_chat
|
|
|
|
|
|
|
|
private
|
|
|
|
def broadcast_to_chat
|
|
|
|
broadcast_append_to(
|
|
|
|
chat,
|
|
|
|
partial: "messages/message",
|
|
|
|
locals: { message: self },
|
|
|
|
target: "chat_#{chat.id}_messages"
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
def broadcast_update_to_chat
|
|
|
|
broadcast_update_to(
|
|
|
|
chat,
|
|
|
|
partial: "messages/message",
|
|
|
|
locals: { message: self },
|
|
|
|
target: "message_#{self.id}"
|
|
|
|
)
|
|
|
|
end
|
2025-03-12 12:39:16 -04:00
|
|
|
end
|