Skip to content

Commit

Permalink
add extractor name to prediction request for new workflow (#186)
Browse files Browse the repository at this point in the history
* add extractor name to prediction request for new workflow

* fix test

* add new test cases

* rely on only pool_subject_set_id for fetching prediction context
  • Loading branch information
Tooyosi authored Dec 12, 2024
1 parent 0b691cc commit 33de8bf
Show file tree
Hide file tree
Showing 5 changed files with 108 additions and 9 deletions.
7 changes: 6 additions & 1 deletion app/services/batch/prediction/create_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,12 @@ def initialize(prediction_job, bajor_client = Bajor::Client.new)

def run
begin
bajor_job_url = bajor_client.create_prediction_job(prediction_job.manifest_url)
subject_set_id = prediction_job.subject_set_id
context = Context.where(pool_subject_set_id: subject_set_id)

workflow_name = context.first&.extractor_name

bajor_job_url = bajor_client.create_prediction_job(prediction_job.manifest_url, workflow_name)
prediction_job.update(state: :submitted, service_job_url: bajor_job_url, message: '')
rescue Bajor::Client::Error => e
# mark the jobs as failed and record the client error message
Expand Down
4 changes: 2 additions & 2 deletions lib/bajor/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ def create_training_job(manifest_path, workflow_name='cosmic_dawn')
bajor_training_job_tracking_url(bajor_response['id'])
end

def create_prediction_job(manifest_url)
def create_prediction_job(manifest_url, workflow_name='cosmic_dawn')
bajor_response = self.class.post(
'/prediction/jobs/',
body: { manifest_url: manifest_url }.to_json,
body: { manifest_url: manifest_url, opts: { 'workflow_name': workflow_name } }.to_json,
headers: JSON_HEADERS
)

Expand Down
10 changes: 9 additions & 1 deletion spec/fixtures/contexts.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
galaxy_zoo_active_learning_project:
galaxy_zoo_cosmic_active_learning_project:
id: 1
workflow_id: 123
project_id: 39
Expand All @@ -7,3 +7,11 @@ galaxy_zoo_active_learning_project:
module_name: 'galaxy_zoo'
extractor_name: 'cosmic_dawn'

galaxy_zoo_euclid_active_learning_project:
id: 2
workflow_id: 133
project_id: 40
active_subject_set_id: 55
pool_subject_set_id: 67
module_name: 'galaxy_zoo'
extractor_name: 'euclid'
71 changes: 68 additions & 3 deletions spec/lib/bajor/client_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
RSpec.describe Bajor::Client do
let(:bajor_client) { described_class.new }
let(:bajor_host) { 'https://bajor.zooniverse.org' }
let(:run_opts) { '--schema cosmic_dawn' }
let(:workflow_name) { 'cosmic_dawn' }
let(:request_headers) do
{
'Accept' => 'application/json',
Expand All @@ -19,8 +21,6 @@
describe 'create_training_job' do
let(:request_url) { "#{bajor_host}/training/jobs/" }
let(:catalogue_manifest_path) { 'training_catalogues/manifest_path.csv' }
let(:run_opts) { '--schema cosmic_dawn' }
let(:workflow_name) { 'cosmic_dawn' }
let(:request_body) do
{
manifest_path: catalogue_manifest_path,
Expand Down Expand Up @@ -68,6 +68,40 @@
end
end

context 'with specific workflow_name' do
let(:workflow_name) { 'euclid' }
let(:run_opts) { '--schema euclid' }

let(:request_body) do
{
manifest_path: catalogue_manifest_path,
opts: {
run_opts: run_opts,
workflow_name: workflow_name
}
}
end
let(:request) do
stub_request(:post, request_url)
.with(
body: request_body,
headers: request_headers
)
end

before do
request.to_return(status: 201, body: bajor_response_body.to_json, headers: { content_type: 'application/json' })
end

it 'sends the right workflow name' do
bajor_client.create_training_job(catalogue_manifest_path, workflow_name)
expect(
a_request(:post, request_url).with(body: request_body, headers: request_headers)
).to have_been_made.once
end

end

context 'with a failed repsonse' do
let(:error_message) do
'Active Jobs are running in the batch system - please wait till they are fininshed processing.'
Expand All @@ -93,7 +127,7 @@
let(:request_url) { "#{bajor_host}/prediction/jobs/" }
let(:manifest_url) { 'https://manifest-host.zooniverse.org/manifest.csv' }
let(:request_body) do
{ manifest_url: manifest_url }
{ manifest_url: manifest_url, opts: { workflow_name: workflow_name} }
end
let(:job_id) { '3ed68115-dc36-4f66-838c-a52869031c9c' }
let(:bajor_response_body) do
Expand Down Expand Up @@ -133,6 +167,37 @@
end
end

context 'with specific workflow_name' do
let(:workflow_name) { 'euclid' }
let(:run_opts) { '--schema euclid' }

let(:request_body) do
{ manifest_url: manifest_url, opts: { workflow_name: workflow_name} }
end

let(:request) do
stub_request(:post, request_url)
.with(
body: request_body,
headers: request_headers
)
end

before do
request.to_return(status: 201, body: bajor_response_body.to_json, headers: { content_type: 'application/json' })
end

it 'sends the right workflow name' do

bajor_client.create_prediction_job(manifest_url, 'euclid')


expect(
a_request(:post, request_url).with(body: request_body, headers: request_headers)
).to have_been_made.once
end
end

context 'with a failed repsonse' do
let(:error_message) do
'Active Jobs are running in the batch system - please wait till they are fininshed processing.'
Expand Down
25 changes: 23 additions & 2 deletions spec/services/batch/prediction/create_job_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@

RSpec.describe Batch::Prediction::CreateJob do
describe '#run' do
fixtures :contexts

let(:manifest_url) { 'https://manifest-host.zooniverse.org/manifest.csv' }
let(:context){ contexts(:galaxy_zoo_cosmic_active_learning_project) }
let(:prediction_job) do
PredictionJob.new(
manifest_url: manifest_url,
state: :pending,
subject_set_id: 1,
subject_set_id: context.pool_subject_set_id,
probability_threshold: 0.5,
randomisation_factor: 0.5
)
Expand All @@ -33,7 +36,25 @@

it 'calls the bajor client service to create a prediction job' do
prediction_create_job.run
expect(bajor_client_double).to have_received(:create_prediction_job).with(manifest_url).once
expect(bajor_client_double).to have_received(:create_prediction_job).with(manifest_url, context.extractor_name).once
end

describe 'prediction_job with pool_subject_set_id' do
let(:context){ contexts(:galaxy_zoo_euclid_active_learning_project) }
let(:prediction_job) do
PredictionJob.new(
manifest_url: manifest_url,
state: :pending,
subject_set_id: context.pool_subject_set_id,
probability_threshold: 0.5,
randomisation_factor: 0.5
)
end

it 'calls the bajor client service with workflow name from pool_subject_set_id' do
described_class.new(prediction_job, bajor_client_double).run
expect(bajor_client_double).to have_received(:create_prediction_job).with(manifest_url, context.extractor_name).once
end
end

it 'updates the state tracking info on the prediction job resource' do
Expand Down

0 comments on commit 33de8bf

Please sign in to comment.