Class: LlmLogs::Prompt

Inherits:
ApplicationRecord show all
Defined in:
app/models/llm_logs/prompt.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.load(slug) ⇒ Object



15
16
17
# File 'app/models/llm_logs/prompt.rb', line 15

def self.load(slug)
  find_by!(slug: slug)
end

Instance Method Details

#build(variables = {}) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
# File 'app/models/llm_logs/prompt.rb', line 27

def build(variables = {})
  ver = current_version
  raise "No versions exist for prompt '#{slug}'" unless ver

  trace = LlmLogs::Tracer.current_trace
  if trace && trace.prompt_version_id.nil?
    trace.update_column(:prompt_version_id, ver.id)
  end

  ver.render(variables)
end

#current_versionObject



19
20
21
# File 'app/models/llm_logs/prompt.rb', line 19

def current_version
  versions.order(version_number: :desc).first
end

#rollback_to!(version_number) ⇒ Object



51
52
53
54
55
56
57
58
59
# File 'app/models/llm_logs/prompt.rb', line 51

def rollback_to!(version_number)
  source = version(version_number)
  update_content!(
    messages: source.messages,
    model: source.model,
    model_params: source.model_params,
    changelog: "Rollback to version #{version_number}"
  )
end

#tags_stringObject



11
12
13
# File 'app/models/llm_logs/prompt.rb', line 11

def tags_string
  Array(tags).join(", ")
end

#update_content!(messages:, model: nil, model_params: {}, changelog: nil) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
# File 'app/models/llm_logs/prompt.rb', line 39

def update_content!(messages:, model: nil, model_params: {}, changelog: nil)
  next_number = (versions.maximum(:version_number) || 0) + 1

  versions.create!(
    version_number: next_number,
    messages: messages,
    model: model,
    model_params: model_params,
    changelog: changelog
  )
end

#version(number) ⇒ Object



23
24
25
# File 'app/models/llm_logs/prompt.rb', line 23

def version(number)
  versions.find_by!(version_number: number)
end