76 lines
2.0 KiB
C
76 lines
2.0 KiB
C
#include "ruby_whisper.h"
|
|
|
|
extern ID id_to_s;
|
|
|
|
extern VALUE ruby_whisper_normalize_model_path(VALUE model_path);
|
|
|
|
static void
|
|
ruby_whisper_parakeet_context_free(void *p)
|
|
{
|
|
ruby_whisper_parakeet_context *rwpc = (ruby_whisper_parakeet_context *)p;
|
|
if (rwpc->context) {
|
|
parakeet_free(rwpc->context);
|
|
rwpc->context = NULL;
|
|
}
|
|
}
|
|
|
|
static size_t
|
|
ruby_whisper_parakeet_context_memsize(const void *p)
|
|
{
|
|
ruby_whisper_parakeet_context *rwpc = (ruby_whisper_parakeet_context *)p;
|
|
if (!rwpc) {
|
|
return 0;
|
|
}
|
|
size_t size = sizeof(*rwpc);
|
|
return size;
|
|
}
|
|
|
|
static const rb_data_type_t ruby_whisper_parakeet_context_type = {
|
|
"ruby_whisper_parakeet_context",
|
|
{0, ruby_whisper_parakeet_context_free, ruby_whisper_parakeet_context_memsize,},
|
|
0, 0,
|
|
0
|
|
};
|
|
|
|
static VALUE
|
|
ruby_whisper_parakeet_context_allocate(VALUE klass)
|
|
{
|
|
ruby_whisper_parakeet_context *rwpc;
|
|
|
|
VALUE obj = TypedData_Make_Struct(klass, ruby_whisper_parakeet_context, &ruby_whisper_parakeet_context_type, rwpc);
|
|
rwpc->context = NULL;
|
|
|
|
return obj;
|
|
}
|
|
|
|
static VALUE
|
|
ruby_whisper_parakeet_context_initialize(int argc, VALUE *argv, VALUE self)
|
|
{
|
|
ruby_whisper_parakeet_context *rwpc;
|
|
VALUE model_path;
|
|
|
|
rb_scan_args(argc, argv, "1", &model_path);
|
|
TypedData_Get_Struct(self, ruby_whisper_parakeet_context, &ruby_whisper_parakeet_context_type, rwpc);
|
|
|
|
model_path = ruby_whisper_normalize_model_path(model_path);
|
|
if (!rb_respond_to(model_path, id_to_s)) {
|
|
rb_raise(rb_eRuntimeError, "Expected file path to model to initialize Parakeet::Context");
|
|
}
|
|
rwpc->context = parakeet_init_from_file_with_params(StringValueCStr(model_path), parakeet_context_default_params());
|
|
if (rwpc->context == NULL) {
|
|
rb_raise(rb_eRuntimeError, "Failed to load model");
|
|
}
|
|
|
|
return Qnil;
|
|
}
|
|
|
|
void
|
|
init_ruby_whisper_parakeet_context(VALUE *mParakeet)
|
|
{
|
|
VALUE cParakeetContext = rb_define_class_under(*mParakeet, "Context", rb_cObject);
|
|
|
|
rb_define_alloc_func(cParakeetContext, ruby_whisper_parakeet_context_allocate);
|
|
|
|
rb_define_method(cParakeetContext, "initialize", ruby_whisper_parakeet_context_initialize, -1);
|
|
}
|