Skip to content

Commit

Permalink
Add showing status for test result page and fix displaying test resul…
Browse files Browse the repository at this point in the history
…t content (#34)

* Add showing status for test result page and fix displaying test result content

* Add data migration for old failed test results
  • Loading branch information
Vadser authored Jul 23, 2024
1 parent 0a395d7 commit 9250222
Show file tree
Hide file tree
Showing 14 changed files with 62 additions and 24 deletions.
2 changes: 2 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -91,3 +91,5 @@ gem 'tailwindcss-rails', '~> 2.6'
gem 'pg', '~> 1.5'

gem 'draper', '~> 4.0'

gem 'data_migrate', '~> 9.4'
4 changes: 4 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,9 @@ GEM
bigdecimal
rexml
crass (1.0.6)
data_migrate (9.4.0)
activerecord (>= 6.1)
railties (>= 6.1)
database_cleaner (2.0.2)
database_cleaner-active_record (>= 2, < 3)
database_cleaner-active_record (2.2.0)
Expand Down Expand Up @@ -426,6 +429,7 @@ PLATFORMS
DEPENDENCIES
bootsnap
capybara
data_migrate (~> 9.4)
database_cleaner
debug
devise (~> 4.9)
Expand Down
4 changes: 0 additions & 4 deletions app/controllers/test_results_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,6 @@ def index
@test_results = @test_results.where(status: params[:status]) if params[:status].present?

@test_results = @test_results.decorate
respond_to do |format|
format.html { render :index }
format.json { render json: @test_results }
end
end

def show
Expand Down
12 changes: 12 additions & 0 deletions app/decorators/test_result_decorator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,16 @@ def assertions_state

'failed'
end

def content
return '' if object.pending?

return JSON.parse(object.result).dig('error', 'message') if object.failed?

return JSON.parse(object.result).dig('choices', 0, 'message', 'content') if object.model_version.executor_type == 'openai'

JSON.parse(object.result)['content'] if object.completed?
rescue StandardError
''
end
end
2 changes: 1 addition & 1 deletion app/jobs/test_model_version_run_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def generate_assertion_results
test_run = test_model_version_run.test_run

test_run.assertions.each do |assertion|
state = CheckAssertion.new(assertion).call(test_result.content)
state = CheckAssertion.new(assertion).call(test_result.decorate.content)

test_result.assertion_results.create(assertion:, state:)
end
Expand Down
17 changes: 0 additions & 17 deletions app/models/test_result.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,4 @@ class TestResult < ApplicationRecord
delegate :model_version, to: :test_model_version_run

default_scope { order(id: :desc) }

def as_json(options = {})
options[:methods] ||= [:content]
super
end

def content
return '' if pending?

return JSON.parse(result).dig('error', 'message') if failed?

return JSON.parse(result).dig('choices', 0, 'message', 'content') if model_version.executor_type == 'openai'

JSON.parse(result)['content'] if completed?
rescue StandardError
''
end
end
2 changes: 1 addition & 1 deletion app/services/executors/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def call(prompt)

{ status: :failed, result: response.body }
rescue StandardError => e
{ status: :failed, result: e.message }
{ status: :failed, result: { error: { message: e.message } }.to_json }
end
end
end
4 changes: 4 additions & 0 deletions app/views/test_results/_test_result.json.jbuilder
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# frozen_string_literal: true

json.extract! test_result, :id, :result, :content, :time, :rating, :status, :created_at, :updated_at
json.url test_result_url(test_result, format: :json)
3 changes: 3 additions & 0 deletions app/views/test_results/index.json.jbuilder
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# frozen_string_literal: true

json.array! @test_results, partial: 'test_results/test_result', as: :test_result
9 changes: 9 additions & 0 deletions app/views/test_results/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,15 @@
<%= @test_result.model_version.build_name %>
</p>

<p class="my-5">
<strong class="font-medium mb-1">Status:</strong>
<span
class="px-2 py-1 font-semibold leading-tight rounded-full <%= define_status_class(@test_result.status) %>"
>
<%= @test_result.status.capitalize %>
</span>
</p>

<strong class="font-medium mb-1">Result:</strong>
<pre id="json-display"></pre>
<div class="w-full w-full mx-auto mt-10 overflow-hidden rounded-lg shadow-xs">
Expand Down
1 change: 1 addition & 0 deletions bin/docker-entrypoint
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@ generate_credentials() {
generate_credentials

./bin/rails db:prepare
./bin/rails data:migrate

exec "${@}"
21 changes: 21 additions & 0 deletions db/data/20240723151844_update_result_for_failed_test_results.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# frozen_string_literal: true

class UpdateResultForFailedTestResults < ActiveRecord::Migration[7.1]
TestResult = Class.new(ActiveRecord::Base)

def up
TestResult.where(status: 2).find_each do |test_result|
parsed_result = begin
JSON.parse(test_result.result)
rescue StandardError
nil
end

test_result.update(result: { error: { message: test_result.result } }.to_json) unless parsed_result.present?
end
end

def down
raise ActiveRecord::IrreversibleMigration
end
end
3 changes: 3 additions & 0 deletions db/data_schema.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# frozen_string_literal: true

DataMigrate::Data.define(version: 20_240_723_151_844)
2 changes: 1 addition & 1 deletion spec/services/executors/base_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
end

it 'returns a failed status' do
expect(executor.call(prompt)).to eq({ status: :failed, result: 'execution expired' })
expect(executor.call(prompt)).to eq({ result: { error: { message: 'execution expired' } }.to_json, status: :failed })
end
end
end
Expand Down

0 comments on commit 9250222

Please sign in to comment.