completion-kit 0.27.0 → 0.27.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f0fa2b7edcc463d34ce7dbed34a522119f840778bd75fa9912124069564420dd
4
- data.tar.gz: 16e1aa2310b4efd26c67fcf70ac55dedb0bd760e97201f41bdb9c73f98247070
3
+ metadata.gz: 38c7acaadacc7cb636ee99e3eb7e4c52f68b89ed57122487eb1591be99435716
4
+ data.tar.gz: 3e5f9c36019c6635ae41b913eea74607f3b8c9f21a511c5ccc3f9ff75422282d
5
5
  SHA512:
6
- metadata.gz: '0572479a9194f494f34f4982c563dc5b3ffae3c1e430c0b39786ea05a6eac15359d7f51946810c8208bf60eb43274554b152d981b492d9fe9a04a01c7c8cb23b'
7
- data.tar.gz: 931853452dac7e901d2e8eed066011c7f428aed7290d68d86787b0c029a9d4f7e0e1b0888ed2adefe015093a6f423487b433731e6a4826ac9dcf5ca255943e62
6
+ metadata.gz: 80adc55bde36fa3ac782c213c4786e677cd27d1b85bef81c14fbd89e05a82e229681866390c34d7f17cd9d6a153bcb93da705d63a87f7aede39dcb26929e3629
7
+ data.tar.gz: 533ef4f6c4b29791a66ce9169ab4c980a38838f5e3a5184d0b07cf0a4276ad0fd5990fae69616a2ea43421daebab1ca1ed2f246b4a310a506403db7548935981
@@ -25,10 +25,17 @@ module CompletionKit
25
25
 
26
26
  def update
27
27
  if @prompt.runs.exists?
28
- new_prompt = @prompt.clone_as_new_version(prompt_params.except(:tag_names).to_h)
29
- new_prompt.publish!
30
- new_prompt.update!(tag_names: prompt_params[:tag_names]) if prompt_params.key?(:tag_names)
31
- render json: new_prompt.reload
28
+ new_prompt = @prompt.build_next_version(prompt_params.except(:tag_names).to_h)
29
+ if new_prompt.valid?
30
+ CompletionKit::ApplicationRecord.transaction do
31
+ new_prompt.save!
32
+ new_prompt.publish!
33
+ new_prompt.update!(tag_names: prompt_params[:tag_names]) if prompt_params.key?(:tag_names)
34
+ end
35
+ render json: new_prompt.reload
36
+ else
37
+ render_validation_errors(new_prompt)
38
+ end
32
39
  elsif @prompt.update(prompt_params)
33
40
  render json: @prompt
34
41
  else
@@ -33,10 +33,19 @@ module CompletionKit
33
33
 
34
34
  def update
35
35
  if @prompt.runs.exists?
36
- new_prompt = @prompt.clone_as_new_version(prompt_params.except(:tag_names).to_h)
37
- new_prompt.publish!
38
- new_prompt.update!(tag_names: prompt_params[:tag_names]) if prompt_params.key?(:tag_names)
39
- redirect_to prompt_path(new_prompt), notice: "Saved as #{new_prompt.version_label}."
36
+ new_prompt = @prompt.build_next_version(prompt_params.except(:tag_names).to_h)
37
+ if new_prompt.valid?
38
+ CompletionKit::ApplicationRecord.transaction do
39
+ new_prompt.save!
40
+ new_prompt.publish!
41
+ new_prompt.update!(tag_names: prompt_params[:tag_names]) if prompt_params.key?(:tag_names)
42
+ end
43
+ redirect_to prompt_path(new_prompt), notice: "Saved as #{new_prompt.version_label}."
44
+ else
45
+ @prompt.assign_attributes(prompt_params.except(:tag_names).to_h)
46
+ @prompt.errors.merge!(new_prompt.errors)
47
+ render :edit, status: :unprocessable_entity
48
+ end
40
49
  elsif @prompt.update(prompt_params)
41
50
  redirect_to prompt_path(@prompt), notice: "Prompt saved."
42
51
  else
@@ -5,10 +5,12 @@ module CompletionKit
5
5
  has_many :runs, dependent: :destroy
6
6
  has_many :responses, through: :runs
7
7
 
8
+ attr_accessor :cloned_from_llm_model
9
+
8
10
  validates :name, presence: true
9
11
  validates :template, presence: true
10
12
  validates :llm_model, presence: true
11
- validate :llm_model_usable_for_generation, if: :llm_model_changed?
13
+ validate :llm_model_usable_for_generation, if: :llm_model_newly_selected?
12
14
  validates :family_key, presence: true
13
15
  validates :version_number, presence: true, numericality: { only_integer: true, greater_than: 0 }
14
16
 
@@ -53,8 +55,8 @@ module CompletionKit
53
55
  self.class.where(family_key: family_key).order(version_number: :desc, created_at: :desc)
54
56
  end
55
57
 
56
- def clone_as_new_version(overrides = {})
57
- self.class.create!(
58
+ def build_next_version(overrides = {})
59
+ version = self.class.new(
58
60
  {
59
61
  name: name,
60
62
  description: description,
@@ -66,6 +68,14 @@ module CompletionKit
66
68
  published_at: nil
67
69
  }.merge(overrides.compact)
68
70
  )
71
+ version.cloned_from_llm_model = llm_model
72
+ version
73
+ end
74
+
75
+ def clone_as_new_version(overrides = {})
76
+ version = build_next_version(overrides)
77
+ version.save!
78
+ version
69
79
  end
70
80
 
71
81
  def publish!
@@ -87,9 +97,14 @@ module CompletionKit
87
97
 
88
98
  private
89
99
 
90
- def llm_model_usable_for_generation
91
- return if llm_model.blank?
100
+ def llm_model_newly_selected?
101
+ return false if llm_model.blank?
102
+ return llm_model != cloned_from_llm_model if new_record? && cloned_from_llm_model.present?
103
+
104
+ llm_model_changed?
105
+ end
92
106
 
107
+ def llm_model_usable_for_generation
93
108
  rows = Model.where(model_id: llm_model)
94
109
  return if rows.empty?
95
110
  return if rows.where(supports_generation: true, status: "active").exists?
@@ -27,6 +27,8 @@ module CompletionKit
27
27
  metrics = import_metrics(config)
28
28
  Result.new(ok: true, error: nil, prompts: prompts, dataset: dataset, metrics: metrics, providers: providers)
29
29
  end
30
+ rescue ActiveRecord::RecordInvalid => e
31
+ failure(e.record.errors.full_messages.to_sentence.presence || e.message)
30
32
  end
31
33
 
32
34
  private
@@ -79,7 +79,9 @@
79
79
  </div>
80
80
  <% if @response.status == "failed" %>
81
81
  <% err = @response.error_payload || {} %>
82
- <div class="ck-code-scroll-wrap"><pre class="ck-code ck-code--error"><%= err[:provider]&.titleize %><%= " #{err[:status]}" if err[:status].present? %><%= "\n\n" if err[:provider].present? || err[:status].present? %><%= err[:message] %></pre></div>
82
+ <% head = [err[:provider]&.titleize, err[:status].presence].compact.join(" ").presence %>
83
+ <% error_text = [head, @response.error_message.presence].compact.join("\n\n").presence || "The provider returned no error detail." %>
84
+ <div class="ck-code-scroll-wrap"><pre class="ck-code ck-code--error"><%= error_text %></pre></div>
83
85
  <% else %>
84
86
  <div class="ck-code-scroll-wrap"><pre class="ck-code"><%= ck_format_maybe_json(@response.response_text) %></pre></div>
85
87
  <% end %>
@@ -1,3 +1,3 @@
1
1
  module CompletionKit
2
- VERSION = "0.27.0"
2
+ VERSION = "0.27.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: completion-kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.27.0
4
+ version: 0.27.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damien Bastin