completion-kit 0.28.32 → 0.28.34
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 +4 -4
- data/app/assets/stylesheets/completion_kit/application.css +9 -0
- data/app/controllers/completion_kit/responses_controller.rb +1 -1
- data/app/helpers/completion_kit/application_helper.rb +18 -0
- data/app/models/completion_kit/review.rb +5 -1
- data/app/views/completion_kit/dashboard/_failing_checks_card.html.erb +8 -6
- data/app/views/completion_kit/responses/show.html.erb +6 -5
- data/lib/completion_kit/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b098378de17e0d51976041f5376929f0fd220bc23e86f1044bf89133b3b7210e
|
|
4
|
+
data.tar.gz: 65742e5a42a70e82fe3f4216652e8a80e4b08552eb54cc4a7e8621969a8dd26f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3ac30e089d1ec6597556b0f4744315d07f1bf94207e174055a6e7ae51ee09f88b180a681ee79cd671cf1887cfee7cd1e99584adda5e95411d8a09ad4c96d5071
|
|
7
|
+
data.tar.gz: ba7069754a2f1048da264f66a29e630f220225be24a7078bc4bc6b5a5004d328b02e42046b6b58c5a53a294d293fd386b81eccfbbd7f3b7cfd59d5b545062741
|
|
@@ -4421,6 +4421,8 @@ table.ck-runs-table {
|
|
|
4421
4421
|
display: flex;
|
|
4422
4422
|
align-items: center;
|
|
4423
4423
|
justify-content: space-between;
|
|
4424
|
+
flex-wrap: wrap;
|
|
4425
|
+
gap: 0.75rem;
|
|
4424
4426
|
}
|
|
4425
4427
|
|
|
4426
4428
|
.ck-prompt-preview__header .ck-kicker {
|
|
@@ -5686,6 +5688,13 @@ a.tag-mark {
|
|
|
5686
5688
|
text-overflow: ellipsis;
|
|
5687
5689
|
white-space: nowrap;
|
|
5688
5690
|
}
|
|
5691
|
+
.ck-failure-list__count {
|
|
5692
|
+
margin-left: auto;
|
|
5693
|
+
flex: none;
|
|
5694
|
+
font-family: var(--ck-mono);
|
|
5695
|
+
font-size: 0.72rem;
|
|
5696
|
+
color: var(--ck-dim);
|
|
5697
|
+
}
|
|
5689
5698
|
.ck-failure-list__item .ck-icon-btn { margin-left: auto; }
|
|
5690
5699
|
|
|
5691
5700
|
/* Flyout: lives inline in the card's always-present footer row, so the
|
|
@@ -9,7 +9,7 @@ module CompletionKit
|
|
|
9
9
|
ordered_ids = ordered_response_ids
|
|
10
10
|
current_index = ordered_ids.index(@response.id)
|
|
11
11
|
@response_number = current_index + 1
|
|
12
|
-
@reviews = @response.reviews.includes(:metric)
|
|
12
|
+
@reviews = @response.reviews.includes(:metric, :metric_version)
|
|
13
13
|
@prev_response = current_index > 0 ? ordered_ids[current_index - 1] : nil
|
|
14
14
|
@next_response = ordered_ids[current_index + 1]
|
|
15
15
|
end
|
|
@@ -202,6 +202,24 @@ module CompletionKit
|
|
|
202
202
|
end
|
|
203
203
|
end
|
|
204
204
|
|
|
205
|
+
def ck_review_section_header(reviews, judge_model)
|
|
206
|
+
kinds = reviews.filter_map(&:effective_metric_type)
|
|
207
|
+
judge = kinds.include?("llm_judge")
|
|
208
|
+
check = kinds.include?("check")
|
|
209
|
+
|
|
210
|
+
heading = if judge && check
|
|
211
|
+
"Judge's review and checks"
|
|
212
|
+
elsif judge
|
|
213
|
+
"Judge's review"
|
|
214
|
+
elsif check
|
|
215
|
+
"Checks"
|
|
216
|
+
else
|
|
217
|
+
"Reviews"
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
{heading: heading, judge_model: judge ? judge_model.presence : nil}
|
|
221
|
+
end
|
|
222
|
+
|
|
205
223
|
CHECK_KIND_LABELS = {
|
|
206
224
|
"contains" => "Contains a phrase",
|
|
207
225
|
"not_contains" => "Does not contain a phrase",
|
|
@@ -17,7 +17,11 @@ module CompletionKit
|
|
|
17
17
|
after_save_commit :broadcast_run_progress, if: :should_broadcast_progress?
|
|
18
18
|
|
|
19
19
|
def check?
|
|
20
|
-
|
|
20
|
+
effective_metric_type == "check"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def effective_metric_type
|
|
24
|
+
metric_version&.metric_type || metric&.metric_type
|
|
21
25
|
end
|
|
22
26
|
|
|
23
27
|
def stale_against_current_judge?
|
|
@@ -23,21 +23,23 @@
|
|
|
23
23
|
</div>
|
|
24
24
|
|
|
25
25
|
<% if failing_checks[:items].any? %>
|
|
26
|
+
<% worst = failing_checks[:items].group_by { |item| item[:metric_name] }
|
|
27
|
+
.sort_by { |name, items| [-items.length, name.to_s] } %>
|
|
26
28
|
<ul class="ck-failure-list">
|
|
27
|
-
<%
|
|
29
|
+
<% worst.first(2).each do |metric_name, items| %>
|
|
28
30
|
<li class="ck-failure-list__item">
|
|
29
31
|
<span class="ck-failure-list__surface ck-failure-list__surface--check">fail</span>
|
|
30
|
-
<%= link_to
|
|
31
|
-
class: "ck-link ck-failure-list__cause",
|
|
32
|
+
<%= link_to metric_name, completion_kit.run_path(items.first[:run]),
|
|
33
|
+
class: "ck-link ck-failure-list__cause",
|
|
34
|
+
title: "Most recently in #{items.first[:run].name}" %>
|
|
35
|
+
<span class="ck-failure-list__count"><%= items.length %></span>
|
|
32
36
|
</li>
|
|
33
37
|
<% end %>
|
|
34
38
|
</ul>
|
|
35
39
|
<% end %>
|
|
36
40
|
|
|
37
41
|
<div class="ck-stat-card__foot">
|
|
38
|
-
<% if failing_checks[:count]
|
|
39
|
-
<span><%= failing_checks[:count] - 2 %> more failing.</span>
|
|
40
|
-
<% elsif failing_checks[:count].positive? %>
|
|
42
|
+
<% if failing_checks[:count].positive? %>
|
|
41
43
|
<span><%= pluralize(failing_checks[:count], "check") %> failing in the window.</span>
|
|
42
44
|
<% elsif resolved.positive? %>
|
|
43
45
|
<span>Every check passed in the window.</span>
|
|
@@ -95,11 +95,12 @@
|
|
|
95
95
|
<% end %>
|
|
96
96
|
|
|
97
97
|
<% if @reviews.any? %>
|
|
98
|
+
<% review_header = ck_review_section_header(@reviews, @run.judge_model) %>
|
|
98
99
|
<section class="ck-card--spaced">
|
|
99
|
-
<div class="ck-prompt-preview__header">
|
|
100
|
-
<p class="ck-kicker"
|
|
101
|
-
<% if
|
|
102
|
-
<span class="ck-chip ck-chip--soft" style="text-transform: none;"><%=
|
|
100
|
+
<div class="ck-prompt-preview__header" data-ck-review-header>
|
|
101
|
+
<p class="ck-kicker"><%= review_header[:heading] %></p>
|
|
102
|
+
<% if review_header[:judge_model] %>
|
|
103
|
+
<span class="ck-chip ck-chip--soft" style="text-transform: none;"><%= review_header[:judge_model] %></span>
|
|
103
104
|
<% end %>
|
|
104
105
|
</div>
|
|
105
106
|
|
|
@@ -126,7 +127,7 @@
|
|
|
126
127
|
<% elsif review.check? && !review.passed.nil? %>
|
|
127
128
|
<%= ck_check_badge(review.passed) %>
|
|
128
129
|
<% elsif review.status == "failed" %>
|
|
129
|
-
<span class="<%= ck_badge_classes(:failed) %>" title="<%= review.error_message.presence || "Judge failed" %>">Failed</span>
|
|
130
|
+
<span class="<%= ck_badge_classes(:failed) %>" title="<%= review.error_message.presence || (review.check? ? "Check failed" : "Judge failed") %>">Failed</span>
|
|
130
131
|
<% else %>
|
|
131
132
|
<span class="<%= ck_badge_classes(:pending) %>">Pending</span>
|
|
132
133
|
<% 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.28.
|
|
4
|
+
version: 0.28.34
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Damien Bastin
|
|
@@ -173,7 +173,7 @@ description: CompletionKit is a prompt testing platform that runs as a Rails eng
|
|
|
173
173
|
or a standalone app. Run prompts against real datasets, score every output with
|
|
174
174
|
an LLM judge against criteria you define, track prompt versions, and get AI-generated
|
|
175
175
|
improvement suggestions grounded in your actual results. Includes a web UI, REST
|
|
176
|
-
API, and a built-in MCP server with
|
|
176
|
+
API, and a built-in MCP server with 53 tools.
|
|
177
177
|
email:
|
|
178
178
|
- damien@homemade.software
|
|
179
179
|
executables: []
|