diff --git a/lib/rev_ai.rb b/lib/rev_ai.rb index 5994a9bf79aa2532b277ef24a2435910f32f17a4..93ad1caff06f228d15b56361084a3e70efc34b84 100644 --- a/lib/rev_ai.rb +++ b/lib/rev_ai.rb @@ -5,6 +5,8 @@ require "em_promise" require "json" class RevAi + class Failed < StandardError; end + def initialize(token: CONFIG[:rev_ai_token]) @token = token end @@ -24,6 +26,8 @@ class RevAi def stt_result(job) job = job["job"] + return failed(job) if job["status"] == "failed" + req( :get, "https://api.rev.ai/speechtotext/v1/jobs/#{job['id']}/transcript", @@ -46,6 +50,8 @@ class RevAi def language_id_result(job) job = job["job"] + return failed(job) if job["status"] == "failed" + req( :get, "https://api.rev.ai/languageid/v1/jobs/#{job['id']}/result" @@ -55,6 +61,8 @@ class RevAi end end +protected + def req(m, url, accept: nil, **kwargs) EM::HttpRequest.new( url, tls: { verify_peer: true } @@ -67,4 +75,8 @@ class RevAi }, body: kwargs.to_json ) end + + def failed(job) + EMPromise.reject(Failed.new("#{job['failure']} #{job['failure_detail']}")) + end end diff --git a/web.rb b/web.rb index 885761a18d2395694e37072eb58da9cb52f2ee46..65fcdee8d4a9f471d3ad21e9c9279a8d54795215 100644 --- a/web.rb +++ b/web.rb @@ -241,7 +241,7 @@ class Web < Roda end r.post "language_id" do - rev_ai.language_id_result(params).then do |result| + rev_ai.language_id_result(params).then { |result| rev_ai.stt( result["top_language"], result.dig("metadata", "media_url"), @@ -251,11 +251,14 @@ class Web < Roda )), **result["metadata"].transform_keys(&:to_sym) ).then { "OK" } - end + }.catch_only(RevAi::Failed) { |e| + log_error(e) + "Failure logged" + } end r.post "transcription" do - rev_ai.stt_result(params).then do |result| + rev_ai.stt_result(params).then { |result| next "OK" if result["text"].empty? customer_repo.find( @@ -270,7 +273,10 @@ class Web < Roda "OK" end - end + }.catch_only(RevAi::Failed) { |e| + log_error(e) + "Failure logged" + } end r.post do