mirror of
https://github.com/Mintplex-Labs/whisper.cpp.git
synced 2026-07-19 12:52:59 -04:00
fc49ee4479
* Add Params#new_segment_callback= method
* Add tests for Params#new_segment_callback=
* Group tests for #transcribe
* Don't use static for thread-safety
* Set new_segment_callback only when necessary
* Remove redundant check
* [skip ci] Add Ruby version README
* Revert "Group tests for #transcribe"
This reverts commit 71b65b00ccf1816c9ea8a247fb30f71bc09707d3.
* Revert "Add tests for Params#new_segment_callback="
This reverts commit 81e6df3bab7662da5379db51f28a989db7408c02.
* Add test for Context#full_n_segments
* Add Context#full_n_segments
* Add tests for lang API
* Add lang API
* Add tests for Context#full_lang_id API
* Add Context#full_lang_id
* Add abnormal test cases for lang
* Raise appropriate errors from lang APIs
* Add tests for Context#full_get_segment_t{0,1} API
* Add Context#full_get_segment_t{0,1}
* Add tests for Context#full_get_segment_speaker_turn_next API
* Add Context#full_get_segment_speaker_turn_next
* Add tests for Context#full_get_segment_text
* Add Context#full_get_setgment_text
* Add tests for Params#new_segment_callback=
* Run new segment callback
* Split tests to multiple files
* Use container struct for new segment callback
* Add tests for Params#new_segment_callback_user_data=
* Add Whisper::Params#new_user_callback_user_data=
* Add GC-related test for new segment callback
* Protect new segment callback related structs from GC
* Add meaningful test for build
* Rename: new_segment_callback_user_data -> new_segment_callback_container
* Add tests for Whisper::Segment
* Add Whisper::Segment and Whisper::Context#each_segment
* Extract c_ruby_whisper_callback_container_allocate()
* Add test for Whisper::Params#on_new_segment
* Add Whisper::Params#on_new_egment
* Assign symbol IDs to variables
* Make extsources.yaml simpler
* Update README
* Add document comments
* Add test for calling Whisper::Params#on_new_segment multiple times
* Add file dependencies to GitHub actions config and .gitignore
* Add more files to ext/.gitignore
77 lines
2.4 KiB
Ruby
77 lines
2.4 KiB
Ruby
require "test/unit"
|
|
require "whisper"
|
|
|
|
class TestCallback < Test::Unit::TestCase
|
|
TOPDIR = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
|
|
|
def setup
|
|
@params = Whisper::Params.new
|
|
@whisper = Whisper::Context.new(File.join(TOPDIR, '..', '..', 'models', 'ggml-base.en.bin'))
|
|
@audio = File.join(TOPDIR, '..', '..', 'samples', 'jfk.wav')
|
|
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 @whisper, 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 country/, text if i_segment == 0
|
|
end
|
|
}
|
|
|
|
@whisper.transcribe(@audio, @params)
|
|
end
|
|
|
|
def test_new_segment_callback_closure
|
|
search_word = "what"
|
|
@params.new_segment_callback = ->(context, state, n_new, user_data) {
|
|
n_segments = context.full_n_segments
|
|
n_new.times do |i|
|
|
i_segment = n_segments - 1 + i
|
|
text = context.full_get_segment_text(i_segment)
|
|
if text.include?(search_word)
|
|
t0 = context.full_get_segment_t0(i_segment)
|
|
t1 = context.full_get_segment_t1(i_segment)
|
|
raise "search word '#{search_word}' found at between #{t0} and #{t1}"
|
|
end
|
|
end
|
|
}
|
|
|
|
assert_raise RuntimeError do
|
|
@whisper.transcribe(@audio, @params)
|
|
end
|
|
end
|
|
|
|
def test_new_segment_callback_user_data
|
|
udata = Object.new
|
|
@params.new_segment_callback_user_data = udata
|
|
@params.new_segment_callback = ->(context, state, n_new, user_data) {
|
|
assert_same udata, user_data
|
|
}
|
|
|
|
@whisper.transcribe(@audio, @params)
|
|
end
|
|
|
|
def test_new_segment_callback_user_data_gc
|
|
@params.new_segment_callback_user_data = "My user data"
|
|
@params.new_segment_callback = ->(context, state, n_new, user_data) {
|
|
assert_equal "My user data", user_data
|
|
}
|
|
GC.start
|
|
|
|
assert_same @whisper, @whisper.transcribe(@audio, @params)
|
|
end
|
|
end
|