diff --git a/bindings/ruby/ext/ruby_whisper.c b/bindings/ruby/ext/ruby_whisper.c index 13b7c999c..654a1900b 100644 --- a/bindings/ruby/ext/ruby_whisper.c +++ b/bindings/ruby/ext/ruby_whisper.c @@ -1,6 +1,7 @@ #include "ruby_whisper.h" VALUE mWhisper; +VALUE mLogSettable; VALUE mVAD; VALUE mParakeet; VALUE cContext; @@ -31,6 +32,8 @@ ID id_pre_converted_models; ID id_coreml_compiled_models; ID id_cache; ID id_n_processors; +ID id_extended; +ID id_start_log_callback_thread; static bool is_log_callback_finalized = false; static bool is_ruby_log_callback_present = false; @@ -198,8 +201,12 @@ void Init_whisper() { id_coreml_compiled_models = rb_intern("coreml_compiled_models"); id_cache = rb_intern("cache"); id_n_processors = rb_intern("n_processors"); + id_extended = rb_intern("extended"); + id_start_log_callback_thread = rb_intern("start_log_callback_thread"); mWhisper = rb_define_module("Whisper"); + rb_require("whisper/log_settable"); + mLogSettable = rb_path2class("Whisper::LogSettable"); mVAD = rb_define_module_under(mWhisper, "VAD"); mParakeet = rb_define_module_under(mWhisper, "Parakeet"); diff --git a/bindings/ruby/ext/ruby_whisper_parakeet.c b/bindings/ruby/ext/ruby_whisper_parakeet.c index 2d88aa307..f805d5477 100644 --- a/bindings/ruby/ext/ruby_whisper_parakeet.c +++ b/bindings/ruby/ext/ruby_whisper_parakeet.c @@ -3,6 +3,9 @@ #include extern VALUE mParakeet; +extern VALUE mLogSettable; +extern ID id_extended; +extern ID id_start_log_callback_thread; extern void ruby_whisper_log_queue_initialize(ruby_whisper_log_queue *log_queue); extern void ruby_whisper_log_queue_open(ruby_whisper_log_queue *log_queue); @@ -10,8 +13,6 @@ extern void ruby_whisper_log_queue_close(ruby_whisper_log_queue *log_queue); extern void ruby_whisper_log_queue_enqueue(ruby_whisper_log_queue *log_queue, enum ggml_log_level level, const char *text); extern VALUE ruby_whisper_log_queue_drain(ruby_whisper_log_queue *log_queue); -ID id_start_log_callback_thread; - static ruby_whisper_log_queue parakeet_log_queue; static VALUE @@ -67,5 +68,6 @@ init_ruby_whisper_parakeet() rb_define_private_method(rb_singleton_class(mParakeet), "drain_logs", ruby_whisper_parakeet_s_drain_logs, 0); rb_set_end_proc(ruby_whisper_parakeet_end_proc, Qnil); - rb_require("whisper/parakeet"); + rb_extend_object(mParakeet, mLogSettable); + rb_funcall(mLogSettable, id_extended, 1, mParakeet); } diff --git a/bindings/ruby/lib/whisper/log_settable.rb b/bindings/ruby/lib/whisper/log_settable.rb new file mode 100644 index 000000000..2f8218d26 --- /dev/null +++ b/bindings/ruby/lib/whisper/log_settable.rb @@ -0,0 +1,36 @@ +require "mutex_m" + +module Whisper + module LogSettable + class << self + def extended(base) + base.extend Mutex_m + end + end + + private + + def start_log_callback_thread + return if @log_callback_thread&.alive? + + @log_callback_thread = Thread.new { + begin + while logs = drain_logs + begin + callback, user_data = synchronize {[@log_callback, @log_callback_user_data]} + next if callback.nil? + + logs.each do |(level, text)| + callback.call level, text, user_data + end + rescue => err + $stderr.puts err + end + end + rescue => err + $stderr.puts err + end + } + end + end +end diff --git a/bindings/ruby/lib/whisper/parakeet.rb b/bindings/ruby/lib/whisper/parakeet.rb deleted file mode 100644 index df9ac9274..000000000 --- a/bindings/ruby/lib/whisper/parakeet.rb +++ /dev/null @@ -1,34 +0,0 @@ -require "mutex_m" - -module Whisper - module Parakeet - extend Mutex_m - - class << self - private - - def start_log_callback_thread - return if @log_callback_thread&.alive? - - @log_callback_thread = Thread.new { - begin - while logs = drain_logs - begin - callback, user_data = synchronize {[@log_callback, @log_callback_user_data]} - next if callback.nil? - - logs.each do |(level, text)| - callback.call level, text, user_data - end - rescue => err - $stderr.puts err - end - end - rescue => err - $stderr.puts err - end - } - end - end - end -end