diff --git a/lib/rev_ai.rb b/lib/rev_ai.rb index 93ad1caff06f228d15b56361084a3e70efc34b84..1fc7ed801b3614d031214e43509243bec1f9b97a 100644 --- a/lib/rev_ai.rb +++ b/lib/rev_ai.rb @@ -7,8 +7,9 @@ require "json" class RevAi class Failed < StandardError; end - def initialize(token: CONFIG[:rev_ai_token]) + def initialize(token: CONFIG[:rev_ai_token], logger: log) @token = token + @log = logger end def stt(language, media_url, callback_url, **kwargs) @@ -24,9 +25,9 @@ class RevAi ) end - def stt_result(job) + def stt_result(job, url) job = job["job"] - return failed(job) if job["status"] == "failed" + return maybe_retry_as_en(job, url) if job["status"] == "failed" req( :get, @@ -79,4 +80,20 @@ protected def failed(job) EMPromise.reject(Failed.new("#{job['failure']} #{job['failure_detail']}")) end + + def maybe_retry_as_en(job, url) + return failed(job) if job["language"] == "en" + + metadata = JSON.parse(job["metadata"]).transform_keys(&:to_sym) + return failed(job) if metadata[:retry] + + retry_as_en(metadata, url) + end + + def retry_as_en(metadata, url) + @log.info "Retry transcription as EN" + stt("en", metadata["media_url"], url, **metadata.merge(retry: true)).then do + {} + end + end end diff --git a/lib/statsd.rb b/lib/statsd.rb index 86753ea1fcaf0f03ae16af3767938786b6de4b25..5fd77c3fb0c6ef89a7b16bee8dbe7b89bf3fc142 100644 --- a/lib/statsd.rb +++ b/lib/statsd.rb @@ -30,4 +30,9 @@ Registration::Payment::Mail.statsd_count :write, "registration.payment.mail" Registration::Finish.extend StatsD::Instrument Registration::Finish.statsd_count :write, "registration.finish" +RevAi.extend StatsD::Instrument +RevAi.statsd_count :stt, "rev_ai.stt" +RevAi.statsd_count :language_id, "rev_ai.language_id" +RevAi.statsd_count :retry_as_en, "rev_ai.retry_as_en" + # rubocop:enable Layout/LineLength diff --git a/sgx_jmp.rb b/sgx_jmp.rb index 4233fc0df807c13543fcebf7e3b5c92fb9ea13df..e6d0642f39609a8ef66b74c198d219bbc39333e4 100644 --- a/sgx_jmp.rb +++ b/sgx_jmp.rb @@ -100,8 +100,8 @@ require_relative "lib/registration" require_relative "lib/transaction" require_relative "lib/tel_selections" require_relative "lib/snikket" -require_relative "lib/statsd" require_relative "web" +require_relative "lib/statsd" ELECTRUM = Electrum.new(**CONFIG[:electrum]) EM::Hiredis::Client.load_scripts_from("./redis_lua") diff --git a/web.rb b/web.rb index 59947a9698ca49b41bf0dc5b99dcd52f2a63a7fc..35c169aba94145d3f1667ac06f62a8d978ed04be 100644 --- a/web.rb +++ b/web.rb @@ -122,7 +122,7 @@ class Web < Roda end def rev_ai - RevAi.new + RevAi.new(logger: log.child(loggable_params)) end TEL_CANDIDATES = { @@ -270,8 +270,8 @@ class Web < Roda end r.post "transcription" do - rev_ai.stt_result(params).then { |result| - next "OK" if result["text"].empty? + rev_ai.stt_result(params, request.url).then { |result| + next "OK" if result["text"].to_s.empty? customer_repo.find( result.dig("metadata", "customer_id")