From a45d447494800c4a9521807a8dce89a585fb860b Mon Sep 17 00:00:00 2001 From: 0/0 Date: Wed, 14 Dec 2022 15:56:48 -0700 Subject: [PATCH] update whisper.cpp and sys version --- sys/Cargo.toml | 2 +- sys/src/bindings.rs | 1118 +++++++++++++++++++++++++++++-------------- sys/whisper.cpp | 2 +- 3 files changed, 757 insertions(+), 365 deletions(-) diff --git a/sys/Cargo.toml b/sys/Cargo.toml index 86681fa..5479cf3 100644 --- a/sys/Cargo.toml +++ b/sys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "whisper-rs-sys" -version = "0.1.3" +version = "0.2.0" edition = "2021" description = "Rust bindings for whisper.cpp (FFI bindings)" license = "Unlicense" diff --git a/sys/src/bindings.rs b/sys/src/bindings.rs index 449b3aa..d42e517 100644 --- a/sys/src/bindings.rs +++ b/sys/src/bindings.rs @@ -1,5 +1,96 @@ -/* automatically generated by rust-bindgen 0.60.1 */ +/* automatically generated by rust-bindgen 0.61.0 */ +pub const _STDINT_H: u32 = 1; +pub const _FEATURES_H: u32 = 1; +pub const _DEFAULT_SOURCE: u32 = 1; +pub const __GLIBC_USE_ISOC2X: u32 = 0; +pub const __USE_ISOC11: u32 = 1; +pub const __USE_ISOC99: u32 = 1; +pub const __USE_ISOC95: u32 = 1; +pub const __USE_POSIX_IMPLICITLY: u32 = 1; +pub const _POSIX_SOURCE: u32 = 1; +pub const _POSIX_C_SOURCE: u32 = 200809; +pub const __USE_POSIX: u32 = 1; +pub const __USE_POSIX2: u32 = 1; +pub const __USE_POSIX199309: u32 = 1; +pub const __USE_POSIX199506: u32 = 1; +pub const __USE_XOPEN2K: u32 = 1; +pub const __USE_XOPEN2K8: u32 = 1; +pub const _ATFILE_SOURCE: u32 = 1; +pub const __USE_MISC: u32 = 1; +pub const __USE_ATFILE: u32 = 1; +pub const __USE_FORTIFY_LEVEL: u32 = 0; +pub const __GLIBC_USE_DEPRECATED_GETS: u32 = 0; +pub const __GLIBC_USE_DEPRECATED_SCANF: u32 = 0; +pub const _STDC_PREDEF_H: u32 = 1; +pub const __STDC_IEC_559__: u32 = 1; +pub const __STDC_IEC_559_COMPLEX__: u32 = 1; +pub const __STDC_ISO_10646__: u32 = 201706; +pub const __GNU_LIBRARY__: u32 = 6; +pub const __GLIBC__: u32 = 2; +pub const __GLIBC_MINOR__: u32 = 31; +pub const _SYS_CDEFS_H: u32 = 1; +pub const __glibc_c99_flexarr_available: u32 = 1; +pub const __WORDSIZE: u32 = 64; +pub const __WORDSIZE_TIME64_COMPAT32: u32 = 1; +pub const __SYSCALL_WORDSIZE: u32 = 64; +pub const __LONG_DOUBLE_USES_FLOAT128: u32 = 0; +pub const __HAVE_GENERIC_SELECTION: u32 = 1; +pub const __GLIBC_USE_LIB_EXT2: u32 = 0; +pub const __GLIBC_USE_IEC_60559_BFP_EXT: u32 = 0; +pub const __GLIBC_USE_IEC_60559_BFP_EXT_C2X: u32 = 0; +pub const __GLIBC_USE_IEC_60559_FUNCS_EXT: u32 = 0; +pub const __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X: u32 = 0; +pub const __GLIBC_USE_IEC_60559_TYPES_EXT: u32 = 0; +pub const _BITS_TYPES_H: u32 = 1; +pub const __TIMESIZE: u32 = 64; +pub const _BITS_TYPESIZES_H: u32 = 1; +pub const __OFF_T_MATCHES_OFF64_T: u32 = 1; +pub const __INO_T_MATCHES_INO64_T: u32 = 1; +pub const __RLIM_T_MATCHES_RLIM64_T: u32 = 1; +pub const __STATFS_MATCHES_STATFS64: u32 = 1; +pub const __FD_SETSIZE: u32 = 1024; +pub const _BITS_TIME64_H: u32 = 1; +pub const _BITS_WCHAR_H: u32 = 1; +pub const _BITS_STDINT_INTN_H: u32 = 1; +pub const _BITS_STDINT_UINTN_H: u32 = 1; +pub const INT8_MIN: i32 = -128; +pub const INT16_MIN: i32 = -32768; +pub const INT32_MIN: i32 = -2147483648; +pub const INT8_MAX: u32 = 127; +pub const INT16_MAX: u32 = 32767; +pub const INT32_MAX: u32 = 2147483647; +pub const UINT8_MAX: u32 = 255; +pub const UINT16_MAX: u32 = 65535; +pub const UINT32_MAX: u32 = 4294967295; +pub const INT_LEAST8_MIN: i32 = -128; +pub const INT_LEAST16_MIN: i32 = -32768; +pub const INT_LEAST32_MIN: i32 = -2147483648; +pub const INT_LEAST8_MAX: u32 = 127; +pub const INT_LEAST16_MAX: u32 = 32767; +pub const INT_LEAST32_MAX: u32 = 2147483647; +pub const UINT_LEAST8_MAX: u32 = 255; +pub const UINT_LEAST16_MAX: u32 = 65535; +pub const UINT_LEAST32_MAX: u32 = 4294967295; +pub const INT_FAST8_MIN: i32 = -128; +pub const INT_FAST16_MIN: i64 = -9223372036854775808; +pub const INT_FAST32_MIN: i64 = -9223372036854775808; +pub const INT_FAST8_MAX: u32 = 127; +pub const INT_FAST16_MAX: u64 = 9223372036854775807; +pub const INT_FAST32_MAX: u64 = 9223372036854775807; +pub const UINT_FAST8_MAX: u32 = 255; +pub const UINT_FAST16_MAX: i32 = -1; +pub const UINT_FAST32_MAX: i32 = -1; +pub const INTPTR_MIN: i64 = -9223372036854775808; +pub const INTPTR_MAX: u64 = 9223372036854775807; +pub const UINTPTR_MAX: i32 = -1; +pub const PTRDIFF_MIN: i64 = -9223372036854775808; +pub const PTRDIFF_MAX: u64 = 9223372036854775807; +pub const SIG_ATOMIC_MIN: i32 = -2147483648; +pub const SIG_ATOMIC_MAX: u32 = 2147483647; +pub const SIZE_MAX: i32 = -1; +pub const WINT_MIN: u32 = 0; +pub const WINT_MAX: u32 = 4294967295; pub const true_: u32 = 1; pub const false_: u32 = 0; pub const __bool_true_false_are_defined: u32 = 1; @@ -8,30 +99,228 @@ pub const WHISPER_N_FFT: u32 = 400; pub const WHISPER_N_MEL: u32 = 80; pub const WHISPER_HOP_LENGTH: u32 = 160; pub const WHISPER_CHUNK_SIZE: u32 = 30; -pub type int_least64_t = i64; -pub type uint_least64_t = u64; -pub type int_fast64_t = i64; -pub type uint_fast64_t = u64; -pub type int_least32_t = i32; -pub type uint_least32_t = u32; -pub type int_fast32_t = i32; -pub type uint_fast32_t = u32; -pub type int_least16_t = i16; -pub type uint_least16_t = u16; -pub type int_fast16_t = i16; -pub type uint_fast16_t = u16; -pub type int_least8_t = i8; -pub type uint_least8_t = u8; -pub type int_fast8_t = i8; -pub type uint_fast8_t = u8; -pub type intmax_t = ::std::os::raw::c_long; -pub type uintmax_t = ::std::os::raw::c_ulong; +pub type __u_char = ::std::os::raw::c_uchar; +pub type __u_short = ::std::os::raw::c_ushort; +pub type __u_int = ::std::os::raw::c_uint; +pub type __u_long = ::std::os::raw::c_ulong; +pub type __int8_t = ::std::os::raw::c_schar; +pub type __uint8_t = ::std::os::raw::c_uchar; +pub type __int16_t = ::std::os::raw::c_short; +pub type __uint16_t = ::std::os::raw::c_ushort; +pub type __int32_t = ::std::os::raw::c_int; +pub type __uint32_t = ::std::os::raw::c_uint; +pub type __int64_t = ::std::os::raw::c_long; +pub type __uint64_t = ::std::os::raw::c_ulong; +pub type __int_least8_t = __int8_t; +pub type __uint_least8_t = __uint8_t; +pub type __int_least16_t = __int16_t; +pub type __uint_least16_t = __uint16_t; +pub type __int_least32_t = __int32_t; +pub type __uint_least32_t = __uint32_t; +pub type __int_least64_t = __int64_t; +pub type __uint_least64_t = __uint64_t; +pub type __quad_t = ::std::os::raw::c_long; +pub type __u_quad_t = ::std::os::raw::c_ulong; +pub type __intmax_t = ::std::os::raw::c_long; +pub type __uintmax_t = ::std::os::raw::c_ulong; +pub type __dev_t = ::std::os::raw::c_ulong; +pub type __uid_t = ::std::os::raw::c_uint; +pub type __gid_t = ::std::os::raw::c_uint; +pub type __ino_t = ::std::os::raw::c_ulong; +pub type __ino64_t = ::std::os::raw::c_ulong; +pub type __mode_t = ::std::os::raw::c_uint; +pub type __nlink_t = ::std::os::raw::c_ulong; +pub type __off_t = ::std::os::raw::c_long; +pub type __off64_t = ::std::os::raw::c_long; +pub type __pid_t = ::std::os::raw::c_int; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct __fsid_t { + pub __val: [::std::os::raw::c_int; 2usize], +} +#[test] +fn bindgen_test_layout___fsid_t() { + const UNINIT: ::std::mem::MaybeUninit<__fsid_t> = ::std::mem::MaybeUninit::uninit(); + let ptr = UNINIT.as_ptr(); + assert_eq!( + ::std::mem::size_of::<__fsid_t>(), + 8usize, + concat!("Size of: ", stringify!(__fsid_t)) + ); + assert_eq!( + ::std::mem::align_of::<__fsid_t>(), + 4usize, + concat!("Alignment of ", stringify!(__fsid_t)) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).__val) as usize - ptr as usize }, + 0usize, + concat!( + "Offset of field: ", + stringify!(__fsid_t), + "::", + stringify!(__val) + ) + ); +} +pub type __clock_t = ::std::os::raw::c_long; +pub type __rlim_t = ::std::os::raw::c_ulong; +pub type __rlim64_t = ::std::os::raw::c_ulong; +pub type __id_t = ::std::os::raw::c_uint; +pub type __time_t = ::std::os::raw::c_long; +pub type __useconds_t = ::std::os::raw::c_uint; +pub type __suseconds_t = ::std::os::raw::c_long; +pub type __daddr_t = ::std::os::raw::c_int; +pub type __key_t = ::std::os::raw::c_int; +pub type __clockid_t = ::std::os::raw::c_int; +pub type __timer_t = *mut ::std::os::raw::c_void; +pub type __blksize_t = ::std::os::raw::c_long; +pub type __blkcnt_t = ::std::os::raw::c_long; +pub type __blkcnt64_t = ::std::os::raw::c_long; +pub type __fsblkcnt_t = ::std::os::raw::c_ulong; +pub type __fsblkcnt64_t = ::std::os::raw::c_ulong; +pub type __fsfilcnt_t = ::std::os::raw::c_ulong; +pub type __fsfilcnt64_t = ::std::os::raw::c_ulong; +pub type __fsword_t = ::std::os::raw::c_long; +pub type __ssize_t = ::std::os::raw::c_long; +pub type __syscall_slong_t = ::std::os::raw::c_long; +pub type __syscall_ulong_t = ::std::os::raw::c_ulong; +pub type __loff_t = __off64_t; +pub type __caddr_t = *mut ::std::os::raw::c_char; +pub type __intptr_t = ::std::os::raw::c_long; +pub type __socklen_t = ::std::os::raw::c_uint; +pub type __sig_atomic_t = ::std::os::raw::c_int; +pub type int_least8_t = __int_least8_t; +pub type int_least16_t = __int_least16_t; +pub type int_least32_t = __int_least32_t; +pub type int_least64_t = __int_least64_t; +pub type uint_least8_t = __uint_least8_t; +pub type uint_least16_t = __uint_least16_t; +pub type uint_least32_t = __uint_least32_t; +pub type uint_least64_t = __uint_least64_t; +pub type int_fast8_t = ::std::os::raw::c_schar; +pub type int_fast16_t = ::std::os::raw::c_long; +pub type int_fast32_t = ::std::os::raw::c_long; +pub type int_fast64_t = ::std::os::raw::c_long; +pub type uint_fast8_t = ::std::os::raw::c_uchar; +pub type uint_fast16_t = ::std::os::raw::c_ulong; +pub type uint_fast32_t = ::std::os::raw::c_ulong; +pub type uint_fast64_t = ::std::os::raw::c_ulong; +pub type intmax_t = __intmax_t; +pub type uintmax_t = __uintmax_t; #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct whisper_context { _unused: [u8; 0], } pub type whisper_token = ::std::os::raw::c_int; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct whisper_token_data { + pub id: whisper_token, + pub tid: whisper_token, + pub p: f32, + pub pt: f32, + pub ptsum: f32, + pub t0: i64, + pub t1: i64, + pub vlen: f32, +} +#[test] +fn bindgen_test_layout_whisper_token_data() { + const UNINIT: ::std::mem::MaybeUninit = ::std::mem::MaybeUninit::uninit(); + let ptr = UNINIT.as_ptr(); + assert_eq!( + ::std::mem::size_of::(), + 48usize, + concat!("Size of: ", stringify!(whisper_token_data)) + ); + assert_eq!( + ::std::mem::align_of::(), + 8usize, + concat!("Alignment of ", stringify!(whisper_token_data)) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).id) as usize - ptr as usize }, + 0usize, + concat!( + "Offset of field: ", + stringify!(whisper_token_data), + "::", + stringify!(id) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).tid) as usize - ptr as usize }, + 4usize, + concat!( + "Offset of field: ", + stringify!(whisper_token_data), + "::", + stringify!(tid) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).p) as usize - ptr as usize }, + 8usize, + concat!( + "Offset of field: ", + stringify!(whisper_token_data), + "::", + stringify!(p) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).pt) as usize - ptr as usize }, + 12usize, + concat!( + "Offset of field: ", + stringify!(whisper_token_data), + "::", + stringify!(pt) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).ptsum) as usize - ptr as usize }, + 16usize, + concat!( + "Offset of field: ", + stringify!(whisper_token_data), + "::", + stringify!(ptsum) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).t0) as usize - ptr as usize }, + 24usize, + concat!( + "Offset of field: ", + stringify!(whisper_token_data), + "::", + stringify!(t0) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).t1) as usize - ptr as usize }, + 32usize, + concat!( + "Offset of field: ", + stringify!(whisper_token_data), + "::", + stringify!(t1) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).vlen) as usize - ptr as usize }, + 40usize, + concat!( + "Offset of field: ", + stringify!(whisper_token_data), + "::", + stringify!(vlen) + ) + ); +} extern "C" { pub fn whisper_init(path_model: *const ::std::os::raw::c_char) -> *mut whisper_context; } @@ -71,10 +360,13 @@ extern "C" { ) -> ::std::os::raw::c_int; } extern "C" { - pub fn whisper_sample_best(ctx: *mut whisper_context, need_timestamp: bool) -> whisper_token; + pub fn whisper_sample_best(ctx: *mut whisper_context) -> whisper_token_data; } extern "C" { - pub fn whisper_sample_timestamp(ctx: *mut whisper_context) -> whisper_token; + pub fn whisper_sample_timestamp( + ctx: *mut whisper_context, + is_initial: bool, + ) -> whisper_token_data; } extern "C" { pub fn whisper_lang_id(lang: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; @@ -127,162 +419,71 @@ extern "C" { extern "C" { pub fn whisper_print_timings(ctx: *mut whisper_context); } -pub const whisper_decode_strategy_WHISPER_DECODE_GREEDY: whisper_decode_strategy = 0; -pub const whisper_decode_strategy_WHISPER_DECODE_BEAM_SEARCH: whisper_decode_strategy = 1; +extern "C" { + pub fn whisper_reset_timings(ctx: *mut whisper_context); +} +extern "C" { + pub fn whisper_print_system_info() -> *const ::std::os::raw::c_char; +} +pub const whisper_sampling_strategy_WHISPER_SAMPLING_GREEDY: whisper_sampling_strategy = 0; +pub const whisper_sampling_strategy_WHISPER_SAMPLING_BEAM_SEARCH: whisper_sampling_strategy = 1; #[doc = ""] -pub type whisper_decode_strategy = ::std::os::raw::c_uint; +pub type whisper_sampling_strategy = ::std::os::raw::c_uint; +pub type whisper_new_segment_callback = ::std::option::Option< + unsafe extern "C" fn( + ctx: *mut whisper_context, + n_new: ::std::os::raw::c_int, + user_data: *mut ::std::os::raw::c_void, + ), +>; +pub type whisper_encoder_begin_callback = ::std::option::Option< + unsafe extern "C" fn(ctx: *mut whisper_context, user_data: *mut ::std::os::raw::c_void) -> bool, +>; #[repr(C)] -#[derive(Copy, Clone)] +#[derive(Debug, Copy, Clone)] pub struct whisper_full_params { - pub strategy: whisper_decode_strategy, + pub strategy: whisper_sampling_strategy, pub n_threads: ::std::os::raw::c_int, + pub n_max_text_ctx: ::std::os::raw::c_int, pub offset_ms: ::std::os::raw::c_int, + pub duration_ms: ::std::os::raw::c_int, pub translate: bool, pub no_context: bool, - pub print_special_tokens: bool, + pub single_segment: bool, + pub print_special: bool, pub print_progress: bool, pub print_realtime: bool, pub print_timestamps: bool, + pub token_timestamps: bool, + pub thold_pt: f32, + pub thold_ptsum: f32, + pub max_len: ::std::os::raw::c_int, + pub max_tokens: ::std::os::raw::c_int, + pub speed_up: bool, + pub audio_ctx: ::std::os::raw::c_int, + pub prompt_tokens: *const whisper_token, + pub prompt_n_tokens: ::std::os::raw::c_int, pub language: *const ::std::os::raw::c_char, - pub __bindgen_anon_1: whisper_full_params__bindgen_ty_1, -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union whisper_full_params__bindgen_ty_1 { - pub greedy: whisper_full_params__bindgen_ty_1__bindgen_ty_1, - pub beam_search: whisper_full_params__bindgen_ty_1__bindgen_ty_2, + pub greedy: whisper_full_params__bindgen_ty_1, + pub beam_search: whisper_full_params__bindgen_ty_2, + pub new_segment_callback: whisper_new_segment_callback, + pub new_segment_callback_user_data: *mut ::std::os::raw::c_void, + pub encoder_begin_callback: whisper_encoder_begin_callback, + pub encoder_begin_callback_user_data: *mut ::std::os::raw::c_void, } #[repr(C)] #[derive(Debug, Copy, Clone)] -pub struct whisper_full_params__bindgen_ty_1__bindgen_ty_1 { +pub struct whisper_full_params__bindgen_ty_1 { pub n_past: ::std::os::raw::c_int, } #[test] -fn bindgen_test_layout_whisper_full_params__bindgen_ty_1__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::(), - 4usize, - concat!( - "Size of: ", - stringify!(whisper_full_params__bindgen_ty_1__bindgen_ty_1) - ) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!( - "Alignment of ", - stringify!(whisper_full_params__bindgen_ty_1__bindgen_ty_1) - ) - ); - fn test_field_n_past() { - assert_eq!( - unsafe { - let uninit = ::std::mem::MaybeUninit::< - whisper_full_params__bindgen_ty_1__bindgen_ty_1, - >::uninit(); - let ptr = uninit.as_ptr(); - ::std::ptr::addr_of!((*ptr).n_past) as usize - ptr as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(whisper_full_params__bindgen_ty_1__bindgen_ty_1), - "::", - stringify!(n_past) - ) - ); - } - test_field_n_past(); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct whisper_full_params__bindgen_ty_1__bindgen_ty_2 { - pub n_past: ::std::os::raw::c_int, - pub beam_width: ::std::os::raw::c_int, - pub n_best: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_whisper_full_params__bindgen_ty_1__bindgen_ty_2() { - assert_eq!( - ::std::mem::size_of::(), - 12usize, - concat!( - "Size of: ", - stringify!(whisper_full_params__bindgen_ty_1__bindgen_ty_2) - ) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!( - "Alignment of ", - stringify!(whisper_full_params__bindgen_ty_1__bindgen_ty_2) - ) - ); - fn test_field_n_past() { - assert_eq!( - unsafe { - let uninit = ::std::mem::MaybeUninit::< - whisper_full_params__bindgen_ty_1__bindgen_ty_2, - >::uninit(); - let ptr = uninit.as_ptr(); - ::std::ptr::addr_of!((*ptr).n_past) as usize - ptr as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(whisper_full_params__bindgen_ty_1__bindgen_ty_2), - "::", - stringify!(n_past) - ) - ); - } - test_field_n_past(); - fn test_field_beam_width() { - assert_eq!( - unsafe { - let uninit = ::std::mem::MaybeUninit::< - whisper_full_params__bindgen_ty_1__bindgen_ty_2, - >::uninit(); - let ptr = uninit.as_ptr(); - ::std::ptr::addr_of!((*ptr).beam_width) as usize - ptr as usize - }, - 4usize, - concat!( - "Offset of field: ", - stringify!(whisper_full_params__bindgen_ty_1__bindgen_ty_2), - "::", - stringify!(beam_width) - ) - ); - } - test_field_beam_width(); - fn test_field_n_best() { - assert_eq!( - unsafe { - let uninit = ::std::mem::MaybeUninit::< - whisper_full_params__bindgen_ty_1__bindgen_ty_2, - >::uninit(); - let ptr = uninit.as_ptr(); - ::std::ptr::addr_of!((*ptr).n_best) as usize - ptr as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(whisper_full_params__bindgen_ty_1__bindgen_ty_2), - "::", - stringify!(n_best) - ) - ); - } - test_field_n_best(); -} -#[test] fn bindgen_test_layout_whisper_full_params__bindgen_ty_1() { + const UNINIT: ::std::mem::MaybeUninit = + ::std::mem::MaybeUninit::uninit(); + let ptr = UNINIT.as_ptr(); assert_eq!( ::std::mem::size_of::(), - 12usize, + 4usize, concat!("Size of: ", stringify!(whisper_full_params__bindgen_ty_1)) ); assert_eq!( @@ -293,46 +494,80 @@ fn bindgen_test_layout_whisper_full_params__bindgen_ty_1() { stringify!(whisper_full_params__bindgen_ty_1) ) ); - fn test_field_greedy() { - assert_eq!( - unsafe { - let uninit = ::std::mem::MaybeUninit::::uninit(); - let ptr = uninit.as_ptr(); - ::std::ptr::addr_of!((*ptr).greedy) as usize - ptr as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(whisper_full_params__bindgen_ty_1), - "::", - stringify!(greedy) - ) - ); - } - test_field_greedy(); - fn test_field_beam_search() { - assert_eq!( - unsafe { - let uninit = ::std::mem::MaybeUninit::::uninit(); - let ptr = uninit.as_ptr(); - ::std::ptr::addr_of!((*ptr).beam_search) as usize - ptr as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(whisper_full_params__bindgen_ty_1), - "::", - stringify!(beam_search) - ) - ); - } - test_field_beam_search(); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).n_past) as usize - ptr as usize }, + 0usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params__bindgen_ty_1), + "::", + stringify!(n_past) + ) + ); +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct whisper_full_params__bindgen_ty_2 { + pub n_past: ::std::os::raw::c_int, + pub beam_width: ::std::os::raw::c_int, + pub n_best: ::std::os::raw::c_int, +} +#[test] +fn bindgen_test_layout_whisper_full_params__bindgen_ty_2() { + const UNINIT: ::std::mem::MaybeUninit = + ::std::mem::MaybeUninit::uninit(); + let ptr = UNINIT.as_ptr(); + assert_eq!( + ::std::mem::size_of::(), + 12usize, + concat!("Size of: ", stringify!(whisper_full_params__bindgen_ty_2)) + ); + assert_eq!( + ::std::mem::align_of::(), + 4usize, + concat!( + "Alignment of ", + stringify!(whisper_full_params__bindgen_ty_2) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).n_past) as usize - ptr as usize }, + 0usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params__bindgen_ty_2), + "::", + stringify!(n_past) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).beam_width) as usize - ptr as usize }, + 4usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params__bindgen_ty_2), + "::", + stringify!(beam_width) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).n_best) as usize - ptr as usize }, + 8usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params__bindgen_ty_2), + "::", + stringify!(n_best) + ) + ); } #[test] fn bindgen_test_layout_whisper_full_params() { + const UNINIT: ::std::mem::MaybeUninit = ::std::mem::MaybeUninit::uninit(); + let ptr = UNINIT.as_ptr(); assert_eq!( ::std::mem::size_of::(), - 48usize, + 128usize, concat!("Size of: ", stringify!(whisper_full_params)) ); assert_eq!( @@ -340,179 +575,293 @@ fn bindgen_test_layout_whisper_full_params() { 8usize, concat!("Alignment of ", stringify!(whisper_full_params)) ); - fn test_field_strategy() { - assert_eq!( - unsafe { - let uninit = ::std::mem::MaybeUninit::::uninit(); - let ptr = uninit.as_ptr(); - ::std::ptr::addr_of!((*ptr).strategy) as usize - ptr as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(whisper_full_params), - "::", - stringify!(strategy) - ) - ); - } - test_field_strategy(); - fn test_field_n_threads() { - assert_eq!( - unsafe { - let uninit = ::std::mem::MaybeUninit::::uninit(); - let ptr = uninit.as_ptr(); - ::std::ptr::addr_of!((*ptr).n_threads) as usize - ptr as usize - }, - 4usize, - concat!( - "Offset of field: ", - stringify!(whisper_full_params), - "::", - stringify!(n_threads) - ) - ); - } - test_field_n_threads(); - fn test_field_offset_ms() { - assert_eq!( - unsafe { - let uninit = ::std::mem::MaybeUninit::::uninit(); - let ptr = uninit.as_ptr(); - ::std::ptr::addr_of!((*ptr).offset_ms) as usize - ptr as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(whisper_full_params), - "::", - stringify!(offset_ms) - ) - ); - } - test_field_offset_ms(); - fn test_field_translate() { - assert_eq!( - unsafe { - let uninit = ::std::mem::MaybeUninit::::uninit(); - let ptr = uninit.as_ptr(); - ::std::ptr::addr_of!((*ptr).translate) as usize - ptr as usize - }, - 12usize, - concat!( - "Offset of field: ", - stringify!(whisper_full_params), - "::", - stringify!(translate) - ) - ); - } - test_field_translate(); - fn test_field_no_context() { - assert_eq!( - unsafe { - let uninit = ::std::mem::MaybeUninit::::uninit(); - let ptr = uninit.as_ptr(); - ::std::ptr::addr_of!((*ptr).no_context) as usize - ptr as usize - }, - 13usize, - concat!( - "Offset of field: ", - stringify!(whisper_full_params), - "::", - stringify!(no_context) - ) - ); - } - test_field_no_context(); - fn test_field_print_special_tokens() { - assert_eq!( - unsafe { - let uninit = ::std::mem::MaybeUninit::::uninit(); - let ptr = uninit.as_ptr(); - ::std::ptr::addr_of!((*ptr).print_special_tokens) as usize - ptr as usize - }, - 14usize, - concat!( - "Offset of field: ", - stringify!(whisper_full_params), - "::", - stringify!(print_special_tokens) - ) - ); - } - test_field_print_special_tokens(); - fn test_field_print_progress() { - assert_eq!( - unsafe { - let uninit = ::std::mem::MaybeUninit::::uninit(); - let ptr = uninit.as_ptr(); - ::std::ptr::addr_of!((*ptr).print_progress) as usize - ptr as usize - }, - 15usize, - concat!( - "Offset of field: ", - stringify!(whisper_full_params), - "::", - stringify!(print_progress) - ) - ); - } - test_field_print_progress(); - fn test_field_print_realtime() { - assert_eq!( - unsafe { - let uninit = ::std::mem::MaybeUninit::::uninit(); - let ptr = uninit.as_ptr(); - ::std::ptr::addr_of!((*ptr).print_realtime) as usize - ptr as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(whisper_full_params), - "::", - stringify!(print_realtime) - ) - ); - } - test_field_print_realtime(); - fn test_field_print_timestamps() { - assert_eq!( - unsafe { - let uninit = ::std::mem::MaybeUninit::::uninit(); - let ptr = uninit.as_ptr(); - ::std::ptr::addr_of!((*ptr).print_timestamps) as usize - ptr as usize - }, - 17usize, - concat!( - "Offset of field: ", - stringify!(whisper_full_params), - "::", - stringify!(print_timestamps) - ) - ); - } - test_field_print_timestamps(); - fn test_field_language() { - assert_eq!( - unsafe { - let uninit = ::std::mem::MaybeUninit::::uninit(); - let ptr = uninit.as_ptr(); - ::std::ptr::addr_of!((*ptr).language) as usize - ptr as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(whisper_full_params), - "::", - stringify!(language) - ) - ); - } - test_field_language(); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).strategy) as usize - ptr as usize }, + 0usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(strategy) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).n_threads) as usize - ptr as usize }, + 4usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(n_threads) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).n_max_text_ctx) as usize - ptr as usize }, + 8usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(n_max_text_ctx) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).offset_ms) as usize - ptr as usize }, + 12usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(offset_ms) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).duration_ms) as usize - ptr as usize }, + 16usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(duration_ms) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).translate) as usize - ptr as usize }, + 20usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(translate) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).no_context) as usize - ptr as usize }, + 21usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(no_context) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).single_segment) as usize - ptr as usize }, + 22usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(single_segment) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).print_special) as usize - ptr as usize }, + 23usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(print_special) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).print_progress) as usize - ptr as usize }, + 24usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(print_progress) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).print_realtime) as usize - ptr as usize }, + 25usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(print_realtime) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).print_timestamps) as usize - ptr as usize }, + 26usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(print_timestamps) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).token_timestamps) as usize - ptr as usize }, + 27usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(token_timestamps) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).thold_pt) as usize - ptr as usize }, + 28usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(thold_pt) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).thold_ptsum) as usize - ptr as usize }, + 32usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(thold_ptsum) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).max_len) as usize - ptr as usize }, + 36usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(max_len) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).max_tokens) as usize - ptr as usize }, + 40usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(max_tokens) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).speed_up) as usize - ptr as usize }, + 44usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(speed_up) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).audio_ctx) as usize - ptr as usize }, + 48usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(audio_ctx) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).prompt_tokens) as usize - ptr as usize }, + 56usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(prompt_tokens) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).prompt_n_tokens) as usize - ptr as usize }, + 64usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(prompt_n_tokens) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).language) as usize - ptr as usize }, + 72usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(language) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).greedy) as usize - ptr as usize }, + 80usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(greedy) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).beam_search) as usize - ptr as usize }, + 84usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(beam_search) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).new_segment_callback) as usize - ptr as usize }, + 96usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(new_segment_callback) + ) + ); + assert_eq!( + unsafe { + ::std::ptr::addr_of!((*ptr).new_segment_callback_user_data) as usize - ptr as usize + }, + 104usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(new_segment_callback_user_data) + ) + ); + assert_eq!( + unsafe { ::std::ptr::addr_of!((*ptr).encoder_begin_callback) as usize - ptr as usize }, + 112usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(encoder_begin_callback) + ) + ); + assert_eq!( + unsafe { + ::std::ptr::addr_of!((*ptr).encoder_begin_callback_user_data) as usize - ptr as usize + }, + 120usize, + concat!( + "Offset of field: ", + stringify!(whisper_full_params), + "::", + stringify!(encoder_begin_callback_user_data) + ) + ); } extern "C" { - pub fn whisper_full_default_params(strategy: whisper_decode_strategy) -> whisper_full_params; + pub fn whisper_full_default_params(strategy: whisper_sampling_strategy) -> whisper_full_params; } extern "C" { pub fn whisper_full( @@ -522,6 +871,15 @@ extern "C" { n_samples: ::std::os::raw::c_int, ) -> ::std::os::raw::c_int; } +extern "C" { + pub fn whisper_full_parallel( + ctx: *mut whisper_context, + params: whisper_full_params, + samples: *const f32, + n_samples: ::std::os::raw::c_int, + n_processors: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_int; +} extern "C" { pub fn whisper_full_n_segments(ctx: *mut whisper_context) -> ::std::os::raw::c_int; } @@ -543,3 +901,37 @@ extern "C" { i_segment: ::std::os::raw::c_int, ) -> *const ::std::os::raw::c_char; } +extern "C" { + pub fn whisper_full_n_tokens( + ctx: *mut whisper_context, + i_segment: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_int; +} +extern "C" { + pub fn whisper_full_get_token_text( + ctx: *mut whisper_context, + i_segment: ::std::os::raw::c_int, + i_token: ::std::os::raw::c_int, + ) -> *const ::std::os::raw::c_char; +} +extern "C" { + pub fn whisper_full_get_token_id( + ctx: *mut whisper_context, + i_segment: ::std::os::raw::c_int, + i_token: ::std::os::raw::c_int, + ) -> whisper_token; +} +extern "C" { + pub fn whisper_full_get_token_data( + ctx: *mut whisper_context, + i_segment: ::std::os::raw::c_int, + i_token: ::std::os::raw::c_int, + ) -> whisper_token_data; +} +extern "C" { + pub fn whisper_full_get_token_p( + ctx: *mut whisper_context, + i_segment: ::std::os::raw::c_int, + i_token: ::std::os::raw::c_int, + ) -> f32; +} diff --git a/sys/whisper.cpp b/sys/whisper.cpp index b2f1600..124c718 160000 --- a/sys/whisper.cpp +++ b/sys/whisper.cpp @@ -1 +1 @@ -Subproject commit b2f1600aa380e3ec5dc0de6194e38f27245c2a6a +Subproject commit 124c718c73f915f3e4235ae2af8841356e76177d