108 lines
2.7 KiB
Ruby
108 lines
2.7 KiB
Ruby
require_relative "helper"
|
|
|
|
class TestParakeetCallback < TestBase
|
|
def setup
|
|
omit "Skip not to download large model" if ENV["CI"]
|
|
|
|
Whisper.instance_variable_set "@whisper", nil
|
|
GC.start
|
|
@params = Parakeet::Params.new
|
|
@parakeet = Parakeet::Context.new("parakeet-tdt-0.6b-v3-q4_0")
|
|
end
|
|
|
|
def test_new_segment_callback
|
|
@params.new_segment_callback = ->(context, state, n_new, user_data) {
|
|
assert_kind_of Integer, n_new
|
|
assert n_new > 0
|
|
assert_same @parakeet, context
|
|
|
|
n_segments = context.full_n_segments
|
|
n_new.times do |i|
|
|
i_segment = n_segments - 1 + i
|
|
start_time = context.full_get_segment_t0(i_segment) * 10
|
|
end_time = context.full_get_segment_t1(i_segment) * 10
|
|
text = context.full_get_segment_text(i_segment)
|
|
|
|
assert_kind_of Integer, start_time
|
|
assert start_time >= 0
|
|
assert_kind_of Integer, end_time
|
|
assert end_time > 0
|
|
assert_match(/ask not what your country can do for you, ask what you can do for your/, text) if i_segment == 0
|
|
end
|
|
}
|
|
|
|
@parakeet.transcribe AUDIO, @params
|
|
end
|
|
|
|
def test_on_new_segment
|
|
seg = nil
|
|
index = 0
|
|
@params.on_new_segment do |segment|
|
|
assert_instance_of Parakeet::Segment, segment
|
|
if index == 0
|
|
seg = segment
|
|
assert_equal 0, segment.start_time
|
|
assert_match(/ask not what your country can do for you, ask what you can do for your/, segment.text)
|
|
end
|
|
index += 1
|
|
end
|
|
@parakeet.transcribe AUDIO, @params
|
|
assert_equal 0, seg.start_time
|
|
assert_match /ask not what your country can do for you, ask what you can do for your/, seg.text
|
|
end
|
|
|
|
def test_on_new_token
|
|
index = 0
|
|
@params.on_new_token do |token|
|
|
assert_instance_of Parakeet::Token, token
|
|
if index == 0
|
|
assert_instance_of Integer, token.start_time
|
|
assert_match "▁And", token.text
|
|
end
|
|
index += 1
|
|
end
|
|
|
|
@parakeet.transcribe AUDIO, @params
|
|
end
|
|
|
|
def test_on_progress
|
|
first = nil
|
|
@params.on_progress do |progress|
|
|
assert_kind_of Integer, progress
|
|
assert 0 <= progress && progress <= 100
|
|
first = progress if first.nil?
|
|
end
|
|
|
|
@parakeet.transcribe AUDIO, @params
|
|
|
|
assert_equal 0, first
|
|
end
|
|
|
|
def test_on_encoder_begin
|
|
i = 0
|
|
@params.on_encoder_begin do
|
|
i += 1
|
|
end
|
|
|
|
@parakeet.transcribe AUDIO, @params
|
|
|
|
assert i > 0
|
|
end
|
|
|
|
def test_abort_on
|
|
do_abort = false
|
|
@params.on_new_segment do |segment|
|
|
do_abort = true if segment.text.match?(/ask/)
|
|
end
|
|
i = 0
|
|
@params.abort_on do
|
|
i += 1
|
|
do_abort
|
|
end
|
|
|
|
@parakeet.transcribe(AUDIO, @params) rescue nil
|
|
|
|
assert i > 0
|
|
end
|
|
end
|