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