class RubyConversations::Conversation
Represents a conversation thread, managing messages and interactions with the LLM.
def base_attributes
def base_attributes { id: id } end
def chat
def chat @chat ||= RubyLLM.chat(model: llm, provider: provider).with_temperature(0.0) end
def configuration_attributes
def configuration_attributes { tool: tool } end
def conversation_attributes_for_storage
def conversation_attributes_for_storage { ai_conversation: base_attributes.merge(relationship_attributes).merge(messages_attributes).compact } end
def initialize(attributes = {})
def initialize(attributes = {}) @chat = attributes.delete(:chat) @model_identifier = attributes.delete(:model_identifier) @provider = attributes.delete(:provider) @tools_optional = attributes.delete(:tools_optional) @messages = [] configure_llm_credentials super end
def messages_attributes
def messages_attributes { messages_attributes: messages.map(&:attributes_for_api) } end
def model_identifier
def model_identifier @model_identifier ||= RubyConversations.configuration.default_llm_model end
def provider
def provider @provider ||= RubyConversations.configuration.default_llm_provider end
def relationship_attributes
def relationship_attributes { conversationable_type: conversationable_type, conversationable_id: conversationable_id } end
def validate_messages
def validate_messages messages.each do |message| next if message.valid? message.errors.full_messages.each do |msg| errors.add(:messages, "invalid: #{msg}") end end end