Class: CompletionKit::Prompt

Inherits:
ApplicationRecord show all
Includes:
Taggable
Defined in:
app/models/completion_kit/prompt.rb

Constant Summary

Constants inherited from ApplicationRecord

ApplicationRecord::TenantScopedUniquenessValidator

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Taggable

#tag_names, #tag_names=

Instance Attribute Details

#cloned_from_llm_modelObject

Returns the value of attribute cloned_from_llm_model.



8
9
10
# File 'app/models/completion_kit/prompt.rb', line 8

def cloned_from_llm_model
  @cloned_from_llm_model
end

Class Method Details

.available_models(provider: nil) ⇒ Object



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

def self.available_models(provider: nil)
  ApiConfig.available_models(provider: provider)
end

.current_for(identifier) ⇒ Object



27
28
29
30
31
32
# File 'app/models/completion_kit/prompt.rb', line 27

def self.current_for(identifier)
  current_versions.find_by(family_key: identifier) ||
    current_versions.find_by(name: identifier) ||
    current_versions.find { |p| p.slug == identifier.to_s } ||
    raise(ActiveRecord::RecordNotFound)
end

Instance Method Details

#as_json(options = {}) ⇒ Object



89
90
91
92
93
94
95
96
# File 'app/models/completion_kit/prompt.rb', line 89

def as_json(options = {})
  {
    id: id, name: name, description: description, template: template,
    llm_model: llm_model, family_key: family_key, version_number: version_number,
    current: current, created_at: created_at, updated_at: updated_at,
    tags: tags.as_json
  }
end

#build_next_version(overrides = {}) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'app/models/completion_kit/prompt.rb', line 58

def build_next_version(overrides = {})
  version = self.class.new(
    {
      name: name,
      description: description,
      template: template,
      llm_model: llm_model,
      family_key: family_key,
      version_number: next_version_number,
      current: false,
      published_at: nil
    }.merge(overrides.compact)
  )
  version.cloned_from_llm_model = llm_model
  version
end

#clone_as_new_version(overrides = {}) ⇒ Object



75
76
77
78
79
# File 'app/models/completion_kit/prompt.rb', line 75

def clone_as_new_version(overrides = {})
  version = build_next_version(overrides)
  version.save!
  version
end

#display_nameObject



46
47
48
# File 'app/models/completion_kit/prompt.rb', line 46

def display_name
  "#{name}#{version_label}"
end

#family_versionsObject



54
55
56
# File 'app/models/completion_kit/prompt.rb', line 54

def family_versions
  self.class.where(family_key: family_key).order(version_number: :desc, created_at: :desc)
end

#llm_model_providerObject



50
51
52
# File 'app/models/completion_kit/prompt.rb', line 50

def llm_model_provider
  ApiConfig.provider_for_model(llm_model)
end

#publish!Object



81
82
83
84
85
86
87
# File 'app/models/completion_kit/prompt.rb', line 81

def publish!
  transaction do
    self.class.where(family_key: family_key).where.not(id: id).update_all(current: false)
    reload
    update!(current: true, published_at: Time.current)
  end
end

#slugObject



34
35
36
# File 'app/models/completion_kit/prompt.rb', line 34

def slug
  name.to_s.downcase.strip.gsub(/[^a-z0-9]+/, "-").gsub(/\A-|-\z/, "")
end

#variablesObject



38
39
40
# File 'app/models/completion_kit/prompt.rb', line 38

def variables
  CsvProcessor.extract_variables(self)
end

#version_labelObject



42
43
44
# File 'app/models/completion_kit/prompt.rb', line 42

def version_label
  "v#{version_number}"
end