Module: CompletionKit::ApplicationHelper

Defined in:
app/helpers/completion_kit/application_helper.rb

Constant Summary collapse

PROVIDER_LABELS =
{
  "openai" => "OpenAI",
  "anthropic" => "Anthropic",
  "ollama" => "Ollama / local endpoint",
  "openrouter" => "OpenRouter"
}.freeze

Instance Method Summary collapse

Instance Method Details

#ck_badge_classes(kind) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'app/helpers/completion_kit/application_helper.rb', line 26

def ck_badge_classes(kind)
  case kind.to_s
  when "high"
    "ck-badge ck-badge--high"
  when "medium"
    "ck-badge ck-badge--medium"
  when "low"
    "ck-badge ck-badge--low"
  when "pending"
    "ck-badge ck-badge--pending"
  when "running"
    "ck-badge ck-badge--running"
  when "generating", "judging"
    "ck-badge ck-badge--running"
  when "completed"
    "ck-badge ck-badge--high"
  when "failed"
    "ck-badge ck-badge--low"
  else
    "ck-badge ck-badge--pending"
  end
end

#ck_button_classes(tone = :dark, variant: :solid) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'app/helpers/completion_kit/application_helper.rb', line 3

def ck_button_classes(tone = :dark, variant: :solid)
  base = "ck-button"

  styles = case [tone, variant]
           when [:dark, :solid]
             "ck-button--primary"
           when [:light, :outline]
             "ck-button--secondary"
           when [:green, :solid]
             "ck-button--success"
           when [:red, :outline]
             "ck-button--danger"
           when [:amber, :outline]
             "ck-button--warning"
           when [:blue, :outline]
             "ck-button--info"
           else
             "ck-button--primary"
           end

  "#{base} #{styles}"
end

#ck_grouped_models(models, selected = nil) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'app/helpers/completion_kit/application_helper.rb', line 90

def ck_grouped_models(models, selected = nil)
  if selected.present? && models.none? { |m| m[:id] == selected }
    retired = CompletionKit::Model.find_by(model_id: selected)
    if retired
      models = models + [{ id: retired.model_id, name: "#{retired.display_name || retired.model_id} (retired)", provider: retired.provider }]
    end
  end

  groups = models.group_by do |m|
    if m[:provider] == "openrouter"
      upstream = m[:id].to_s.split("/", 2).first
      "OpenRouter — #{upstream}"
    else
      ck_provider_label(m[:provider])
    end
  end

  ordered_keys = groups.keys.sort_by { |label| [label.start_with?("OpenRouter") ? 1 : 0, label] }
  grouped = ordered_keys.map { |label| [label, groups[label].map { |m| [m[:name], m[:id]] }] }
  grouped_options_for_select(grouped, selected)
end

#ck_model_options_html(scope) ⇒ Object



112
113
114
115
116
# File 'app/helpers/completion_kit/application_helper.rb', line 112

def ck_model_options_html(scope)
  models = CompletionKit::ApiConfig.available_models(scope: scope)
  return "" if models.empty?
  ck_grouped_models(models)
end

#ck_provider_label(provider) ⇒ Object



86
87
88
# File 'app/helpers/completion_kit/application_helper.rb', line 86

def ck_provider_label(provider)
  PROVIDER_LABELS[provider.to_s] || provider.to_s.titleize
end

#ck_run_dot(run) ⇒ Object



49
50
51
52
53
54
55
56
# File 'app/helpers/completion_kit/application_helper.rb', line 49

def ck_run_dot(run)
  case run.status
  when "generating", "judging" then "ck-dot ck-dot--running"
  when "failed" then "ck-dot ck-dot--failed"
  when "completed" then "ck-dot ck-dot--completed"
  else "ck-dot ck-dot--pending"
  end
end

#ck_run_status_label(run) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'app/helpers/completion_kit/application_helper.rb', line 58

def ck_run_status_label(run)
  case run.status
  when "pending" then "Ready to run"
  when "generating"
    if run.progress_total.to_i > 0
      "Generating responses (#{run.progress_current}/#{run.progress_total})"
    else
      "Generating responses…"
    end
  when "judging"
    if run.progress_total.to_i > 0
      "Judging (#{run.progress_current}/#{run.progress_total} evaluations)"
    else
      "Judging…"
    end
  when "completed" then "Completed"
  when "failed" then "Failed"
  else run.status.capitalize
  end
end

#ck_score_kind(score) ⇒ Object



118
119
120
121
122
123
124
# File 'app/helpers/completion_kit/application_helper.rb', line 118

def ck_score_kind(score)
  return :pending if score.nil?
  return :high if score >= CompletionKit.config.high_quality_threshold
  return :medium if score >= CompletionKit.config.medium_quality_threshold

  :low
end

#ck_word_diff_new(old_text, new_text) ⇒ Object



130
131
132
# File 'app/helpers/completion_kit/application_helper.rb', line 130

def ck_word_diff_new(old_text, new_text)
  diff_tokens(old_text, new_text, :new)
end

#ck_word_diff_old(old_text, new_text) ⇒ Object



126
127
128
# File 'app/helpers/completion_kit/application_helper.rb', line 126

def ck_word_diff_old(old_text, new_text)
  diff_tokens(old_text, new_text, :old)
end