From b1f1a14198be30c84836aaab5516326ec82bffde Mon Sep 17 00:00:00 2001 From: AnyCPU Date: Tue, 16 Sep 2025 17:55:23 +0300 Subject: [PATCH] go: allow set a use_gpu option in Go bindings --- bindings/go/context_params.go | 24 ++++++++++++++++++++++++ bindings/go/whisper.go | 9 +++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 bindings/go/context_params.go diff --git a/bindings/go/context_params.go b/bindings/go/context_params.go new file mode 100644 index 00000000..924d0770 --- /dev/null +++ b/bindings/go/context_params.go @@ -0,0 +1,24 @@ +package whisper + +type ( + contextParamsOption interface{ apply(*ContextParams) } + contextParamsOptionFunc func(*ContextParams) +) + +func (fn contextParamsOptionFunc) apply(to *ContextParams) { + fn(to) +} + +func WithUseGPU(v bool) contextParamsOption { + return contextParamsOptionFunc(func(p *ContextParams) { + p.SetUseGPU(v) + }) +} + +func (p *ContextParams) UseGPU() bool { + return bool(p.use_gpu) +} + +func (p *ContextParams) SetUseGPU(v bool) { + p.use_gpu = toBool(v) +} diff --git a/bindings/go/whisper.go b/bindings/go/whisper.go index 3ef73414..dc076d3e 100644 --- a/bindings/go/whisper.go +++ b/bindings/go/whisper.go @@ -71,6 +71,7 @@ type ( TokenData C.struct_whisper_token_data SamplingStrategy C.enum_whisper_sampling_strategy Params C.struct_whisper_full_params + ContextParams C.struct_whisper_context_params ) /////////////////////////////////////////////////////////////////////////////// @@ -101,10 +102,14 @@ var ( // Allocates all memory needed for the model and loads the model from the given file. // Returns NULL on failure. -func Whisper_init(path string) *Context { +func Whisper_init(path string, options ...contextParamsOption) *Context { cPath := C.CString(path) defer C.free(unsafe.Pointer(cPath)) - if ctx := C.whisper_init_from_file_with_params(cPath, C.whisper_context_default_params()); ctx != nil { + params := ContextParams(C.whisper_context_default_params()) + for _, o := range options { + o.apply(¶ms) + } + if ctx := C.whisper_init_from_file_with_params(cPath, (C.struct_whisper_context_params)(params)); ctx != nil { return (*Context)(ctx) } else { return nil