Class: LlmLogs::PromptVersionsController

Inherits:
ApplicationController show all
Defined in:
app/controllers/llm_logs/prompt_versions_controller.rb

Instance Method Summary collapse

Instance Method Details

#compareObject



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'app/controllers/llm_logs/prompt_versions_controller.rb', line 33

def compare

  if params[:a].blank? || params[:b].blank? || params[:a] == params[:b]
    redirect_to prompt_versions_path(@prompt), alert: "Select two different versions to compare."
    return
  end

  @version_a = @prompt.versions.find_by(version_number: params[:a])
  @version_b = @prompt.versions.find_by(version_number: params[:b])

  unless @version_a && @version_b
    redirect_to prompt_versions_path(@prompt), alert: "Version not found."
    return
  end

  max_messages = [@version_a.messages.size, @version_b.messages.size].max
  @diffs = (0...max_messages).map do |i|
    msg_a = @version_a.messages[i]
    msg_b = @version_b.messages[i]
    role = (msg_a || msg_b)["role"]
    content_a = (msg_a&.dig("content") || "").gsub("\r\n", "\n")
    content_b = (msg_b&.dig("content") || "").gsub("\r\n", "\n")
    diff_html = Diffy::SplitDiff.new(content_a, content_b, format: :html_simple)
    { role: role, left: diff_html.left, right: diff_html.right }
  end
end

#destroyObject



21
22
23
24
25
26
27
28
29
30
31
# File 'app/controllers/llm_logs/prompt_versions_controller.rb', line 21

def destroy
  version = @prompt.versions.find(params[:id])

  if version == @prompt.current_version
    redirect_to prompt_versions_path(@prompt), alert: "Cannot delete the current active version."
    return
  end

  version.destroy!
  redirect_to prompt_versions_path(@prompt), notice: "Version #{version.version_number} deleted."
end

#indexObject



7
8
9
# File 'app/controllers/llm_logs/prompt_versions_controller.rb', line 7

def index
  @versions = @prompt.versions.order(version_number: :desc)
end

#restoreObject



15
16
17
18
19
# File 'app/controllers/llm_logs/prompt_versions_controller.rb', line 15

def restore
  version = @prompt.versions.find(params[:id])
  @prompt.rollback_to!(version.version_number)
  redirect_to prompt_path(@prompt), notice: "Restored to version #{version.version_number}."
end

#showObject



11
12
13
# File 'app/controllers/llm_logs/prompt_versions_controller.rb', line 11

def show
  @version = @prompt.versions.find(params[:id])
end