ruby : add Whisper::VERSION (#3292)

* Add a test for segment

* Check option existence

* Use more proper variable to define build option

* Assert Core ML enabled

* Define Whisper::VERSION

* Add test for Whisper::VERSION

* Add signature of Whisper::VERSION
This commit is contained in:
KITAITI Makoto 2025-06-27 11:41:26 +09:00 committed by GitHub
parent 32cf4e2aba
commit f8abbeb234
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 24 additions and 4 deletions

View File

@ -64,7 +64,7 @@ class Options
def configure_coreml def configure_coreml
if enabled?("WHISPER_COREML") if enabled?("WHISPER_COREML")
$LDFLAGS << " -framework Foundation -framework CoreML" $LDFLAGS << " -framework Foundation -framework CoreML"
$CPPFLAGS << " -DRUBY_WHISPER_USE_COREML" $defs << "-DRUBY_WHISPER_USE_COREML"
end end
end end
@ -73,10 +73,13 @@ class Options
end end
def enabled?(option) def enabled?(option)
if @options[option][1].nil? op = @options[option]
raise "Option not exist: #{option}" unless op
raise "Option not boolean: #{option}(#{op[0]})" unless op[0] == "BOOL"
if op[1].nil?
cmake_options[option][1] cmake_options[option][1]
else else
@options[option][1] op[1]
end end
end end
end end

View File

@ -148,6 +148,7 @@ void Init_whisper() {
mWhisper = rb_define_module("Whisper"); mWhisper = rb_define_module("Whisper");
mVAD = rb_define_module_under(mWhisper, "VAD"); mVAD = rb_define_module_under(mWhisper, "VAD");
rb_define_const(mWhisper, "VERSION", rb_str_new2(whisper_version()));
rb_define_const(mWhisper, "LOG_LEVEL_NONE", INT2NUM(GGML_LOG_LEVEL_NONE)); rb_define_const(mWhisper, "LOG_LEVEL_NONE", INT2NUM(GGML_LOG_LEVEL_NONE));
rb_define_const(mWhisper, "LOG_LEVEL_INFO", INT2NUM(GGML_LOG_LEVEL_INFO)); rb_define_const(mWhisper, "LOG_LEVEL_INFO", INT2NUM(GGML_LOG_LEVEL_INFO));
rb_define_const(mWhisper, "LOG_LEVEL_WARN", INT2NUM(GGML_LOG_LEVEL_WARN)); rb_define_const(mWhisper, "LOG_LEVEL_WARN", INT2NUM(GGML_LOG_LEVEL_WARN));

View File

@ -10,6 +10,7 @@ module Whisper
type encoder_begin_callback = ^(Whisper::Context, void, Object user_data) -> void type encoder_begin_callback = ^(Whisper::Context, void, Object user_data) -> void
type abort_callback = ^(Whisper::Context, void, Object user_data) -> boolish type abort_callback = ^(Whisper::Context, void, Object user_data) -> boolish
VERSION: String
LOG_LEVEL_NONE: Integer LOG_LEVEL_NONE: Integer
LOG_LEVEL_INFO: Integer LOG_LEVEL_INFO: Integer
LOG_LEVEL_WARN: Integer LOG_LEVEL_WARN: Integer

View File

@ -31,10 +31,11 @@ class TestPackage < TestBase
Dir.mktmpdir do |dir| Dir.mktmpdir do |dir|
system "gem", "install", "--install-dir", dir.shellescape, "--no-document", "pkg/#{gemspec.file_name.shellescape}", "--", "--enable-whisper-coreml", exception: true system "gem", "install", "--install-dir", dir.shellescape, "--no-document", "pkg/#{gemspec.file_name.shellescape}", "--", "--enable-whisper-coreml", exception: true
assert_installed dir, gemspec.version assert_installed dir, gemspec.version
libdir = File.join(dir, "gems", "#{gemspec.name}-#{gemspec.version}", "lib")
assert_nothing_raised do assert_nothing_raised do
libdir = File.join(dir, "gems", "#{gemspec.name}-#{gemspec.version}", "lib")
system "ruby", "-I", libdir, "-r", "whisper", "-e", "Whisper::Context.new('tiny')", exception: true system "ruby", "-I", libdir, "-r", "whisper", "-e", "Whisper::Context.new('tiny')", exception: true
end end
assert_match(/COREML = 1/, `ruby -I #{libdir.shellescape} -r whisper -e 'puts Whisper.system_info_str'`)
end end
end end
end end

View File

@ -72,6 +72,16 @@ class TestSegment < TestBase
whisper.transcribe(AUDIO, params) whisper.transcribe(AUDIO, params)
end end
def test_transcription_after_segment_retrieved
params = Whisper::Params.new
segment = whisper.each_segment.first
assert_match(/ask not what your country can do for you, ask what you can do for your country/, segment.text)
whisper.transcribe(AUDIO, Whisper::Params.new(offset: 5000))
assert_not_match(/ask not what your country can do for you, ask what you can do for your country/, segment.text)
assert_match(/what you can do for your country/i, segment.text)
end
def test_pattern_matching def test_pattern_matching
segment = whisper.each_segment.first segment = whisper.each_segment.first
segment => {start_time:, end_time:, text:, no_speech_prob:, speaker_turn_next:} segment => {start_time:, end_time:, text:, no_speech_prob:, speaker_turn_next:}

View File

@ -116,6 +116,10 @@ class TestWhisper < TestBase
assert_match(/\AWHISPER : COREML = \d | OPENVINO = \d |/, Whisper.system_info_str) assert_match(/\AWHISPER : COREML = \d | OPENVINO = \d |/, Whisper.system_info_str)
end end
def test_version
assert_kind_of String, Whisper::VERSION
end
def test_log_set def test_log_set
user_data = Object.new user_data = Object.new
logs = [] logs = []