|
|
// |
|
|
// whisper-encoder-impl.m |
|
|
// |
|
|
// This file was automatically generated and should not be edited. |
|
|
// |
|
|
|
|
|
#if !__has_feature(objc_arc) |
|
|
#error This file must be compiled with automatic reference counting enabled (-fobjc-arc) |
|
|
#endif |
|
|
|
|
|
#import "whisper-compat.h" |
|
|
#import "whisper-encoder-impl.h" |
|
|
|
|
|
@implementation whisper_encoder_implInput |
|
|
|
|
|
- (instancetype)initWithLogmel_data:(MLMultiArray *)logmel_data { |
|
|
self = [super init]; |
|
|
if (self) { |
|
|
_logmel_data = logmel_data; |
|
|
} |
|
|
return self; |
|
|
} |
|
|
|
|
|
- (NSSet<NSString *> *)featureNames { |
|
|
return [NSSet setWithArray:@[@"logmel_data"]]; |
|
|
} |
|
|
|
|
|
- (nullable MLFeatureValue *)featureValueForName:(NSString *)featureName { |
|
|
if ([featureName isEqualToString:@"logmel_data"]) { |
|
|
return [MLFeatureValue featureValueWithMultiArray:self.logmel_data]; |
|
|
} |
|
|
return nil; |
|
|
} |
|
|
|
|
|
@end |
|
|
|
|
|
@implementation whisper_encoder_implOutput |
|
|
|
|
|
- (instancetype)initWithOutput:(MLMultiArray *)output { |
|
|
self = [super init]; |
|
|
if (self) { |
|
|
_output = output; |
|
|
} |
|
|
return self; |
|
|
} |
|
|
|
|
|
- (NSSet<NSString *> *)featureNames { |
|
|
return [NSSet setWithArray:@[@"output"]]; |
|
|
} |
|
|
|
|
|
- (nullable MLFeatureValue *)featureValueForName:(NSString *)featureName { |
|
|
if ([featureName isEqualToString:@"output"]) { |
|
|
return [MLFeatureValue featureValueWithMultiArray:self.output]; |
|
|
} |
|
|
return nil; |
|
|
} |
|
|
|
|
|
@end |
|
|
|
|
|
@implementation whisper_encoder_impl |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ (nullable NSURL *)URLOfModelInThisBundle { |
|
|
NSString *assetPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"whisper_encoder_impl" ofType:@"mlmodelc"]; |
|
|
if (nil == assetPath) { os_log_error(OS_LOG_DEFAULT, "Could not load whisper-encoder-impl.mlmodelc in the bundle resource"); return nil; } |
|
|
return [NSURL fileURLWithPath:assetPath]; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (instancetype)initWithMLModel:(MLModel *)model { |
|
|
if (model == nil) { |
|
|
return nil; |
|
|
} |
|
|
self = [super init]; |
|
|
if (self != nil) { |
|
|
_model = model; |
|
|
} |
|
|
return self; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (nullable instancetype)init { |
|
|
return [self initWithContentsOfURL:(NSURL * _Nonnull)self.class.URLOfModelInThisBundle error:nil]; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (nullable instancetype)initWithConfiguration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error { |
|
|
return [self initWithContentsOfURL:(NSURL * _Nonnull)self.class.URLOfModelInThisBundle configuration:configuration error:error]; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL error:(NSError * _Nullable __autoreleasing * _Nullable)error { |
|
|
MLModel *model = [MLModel modelWithContentsOfURL:modelURL error:error]; |
|
|
if (model == nil) { return nil; } |
|
|
return [self initWithMLModel:model]; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error { |
|
|
MLModel *model = [MLModel modelWithContentsOfURL:modelURL configuration:configuration error:error]; |
|
|
if (model == nil) { return nil; } |
|
|
return [self initWithMLModel:model]; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ (void)loadWithConfiguration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_encoder_impl * _Nullable model, NSError * _Nullable error))handler { |
|
|
[self loadContentsOfURL:(NSURL * _Nonnull)[self URLOfModelInThisBundle] |
|
|
configuration:configuration |
|
|
completionHandler:handler]; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ (void)loadContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_encoder_impl * _Nullable model, NSError * _Nullable error))handler { |
|
|
[MLModel loadContentsOfURL:modelURL |
|
|
configuration:configuration |
|
|
completionHandler:^(MLModel *model, NSError *error) { |
|
|
if (model != nil) { |
|
|
whisper_encoder_impl *typedModel = [[whisper_encoder_impl alloc] initWithMLModel:model]; |
|
|
handler(typedModel, nil); |
|
|
} else { |
|
|
handler(nil, error); |
|
|
} |
|
|
}]; |
|
|
} |
|
|
|
|
|
- (nullable whisper_encoder_implOutput *)predictionFromFeatures:(whisper_encoder_implInput *)input error:(NSError * _Nullable __autoreleasing * _Nullable)error { |
|
|
return [self predictionFromFeatures:input options:[[MLPredictionOptions alloc] init] error:error]; |
|
|
} |
|
|
|
|
|
- (nullable whisper_encoder_implOutput *)predictionFromFeatures:(whisper_encoder_implInput *)input options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error { |
|
|
id<MLFeatureProvider> outFeatures = [self.model predictionFromFeatures:input options:options error:error]; |
|
|
if (!outFeatures) { return nil; } |
|
|
return [[whisper_encoder_implOutput alloc] initWithOutput:(MLMultiArray *)[outFeatures featureValueForName:@"output"].multiArrayValue]; |
|
|
} |
|
|
|
|
|
- (void)predictionFromFeatures:(whisper_encoder_implInput *)input completionHandler:(void (^)(whisper_encoder_implOutput * _Nullable output, NSError * _Nullable error))completionHandler { |
|
|
[self.model predictionFromFeatures:input completionHandler:^(id<MLFeatureProvider> prediction, NSError *predictionError) { |
|
|
if (prediction != nil) { |
|
|
whisper_encoder_implOutput *output = [[whisper_encoder_implOutput alloc] initWithOutput:(MLMultiArray *)[prediction featureValueForName:@"output"].multiArrayValue]; |
|
|
completionHandler(output, predictionError); |
|
|
} else { |
|
|
completionHandler(nil, predictionError); |
|
|
} |
|
|
}]; |
|
|
} |
|
|
|
|
|
- (void)predictionFromFeatures:(whisper_encoder_implInput *)input options:(MLPredictionOptions *)options completionHandler:(void (^)(whisper_encoder_implOutput * _Nullable output, NSError * _Nullable error))completionHandler { |
|
|
[self.model predictionFromFeatures:input options:options completionHandler:^(id<MLFeatureProvider> prediction, NSError *predictionError) { |
|
|
if (prediction != nil) { |
|
|
whisper_encoder_implOutput *output = [[whisper_encoder_implOutput alloc] initWithOutput:(MLMultiArray *)[prediction featureValueForName:@"output"].multiArrayValue]; |
|
|
completionHandler(output, predictionError); |
|
|
} else { |
|
|
completionHandler(nil, predictionError); |
|
|
} |
|
|
}]; |
|
|
} |
|
|
|
|
|
- (nullable whisper_encoder_implOutput *)predictionFromLogmel_data:(MLMultiArray *)logmel_data error:(NSError * _Nullable __autoreleasing * _Nullable)error { |
|
|
whisper_encoder_implInput *input_ = [[whisper_encoder_implInput alloc] initWithLogmel_data:logmel_data]; |
|
|
return [self predictionFromFeatures:input_ error:error]; |
|
|
} |
|
|
|
|
|
- (nullable NSArray<whisper_encoder_implOutput *> *)predictionsFromInputs:(NSArray<whisper_encoder_implInput*> *)inputArray options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error { |
|
|
id<MLBatchProvider> inBatch = [[MLArrayBatchProvider alloc] initWithFeatureProviderArray:inputArray]; |
|
|
id<MLBatchProvider> outBatch = [self.model predictionsFromBatch:inBatch options:options error:error]; |
|
|
if (!outBatch) { return nil; } |
|
|
NSMutableArray<whisper_encoder_implOutput*> *results = [NSMutableArray arrayWithCapacity:(NSUInteger)outBatch.count]; |
|
|
for (NSInteger i = 0; i < outBatch.count; i++) { |
|
|
id<MLFeatureProvider> resultProvider = [outBatch featuresAtIndex:i]; |
|
|
whisper_encoder_implOutput * result = [[whisper_encoder_implOutput alloc] initWithOutput:(MLMultiArray *)[resultProvider featureValueForName:@"output"].multiArrayValue]; |
|
|
[results addObject:result]; |
|
|
} |
|
|
return results; |
|
|
} |
|
|
|
|
|
@end |
|
|
|