@@ -728,6 +728,8 @@ - (BOOL)executeModelWithHandle:(ModelHandle *)handle
728728 args.count );
729729 return NO ;
730730 }
731+ NSError *localError = nil ;
732+ NSArray <MLMultiArray *> *modelOutputs = nil ;
731733 @autoreleasepool {
732734 NSArray <MLMultiArray *> *inputs = [args subarrayWithRange: NSMakeRange (0 , model.orderedInputNames.count)];
733735 NSArray <MLMultiArray *> *outputs = [args subarrayWithRange: NSMakeRange (model.orderedInputNames.count, args.count - model.orderedInputNames.count)];
@@ -736,19 +738,22 @@ - (BOOL)executeModelWithHandle:(ModelHandle *)handle
736738 outputBackings = outputs;
737739 }
738740
739- NSArray <MLMultiArray *> * modelOutputs = [self executeModelUsingExecutor: executor
740- inputs: inputs
741- outputBackings: outputBackings
742- loggingOptions: loggingOptions
743- eventLogger: eventLogger
744- error: error];
745- if (! modelOutputs) {
746- return NO ;
741+ modelOutputs = [self executeModelUsingExecutor: executor
742+ inputs: inputs
743+ outputBackings: outputBackings
744+ loggingOptions: loggingOptions
745+ eventLogger: eventLogger
746+ error: error];
747+ if (modelOutputs) {
748+ ::set_outputs (outputs, modelOutputs) ;
747749 }
748-
749- ::set_outputs (outputs, modelOutputs);
750750 }
751-
751+ if (!modelOutputs) {
752+ if (error) {
753+ *error = localError;
754+ }
755+ return NO ;
756+ }
752757 return YES ;
753758}
754759
@@ -777,40 +782,41 @@ - (BOOL)executeModelWithHandle:(ModelHandle *)handle
777782
778783 std::vector<executorchcoreml::MultiArray> inputArgs (argsVec.begin (), argsVec.begin () + model.orderedInputNames .count );
779784 std::vector<executorchcoreml::MultiArray> outputArgs (argsVec.begin () + model.orderedInputNames .count , argsVec.end ());
785+ NSError *localError = nil ;
786+ NSArray <MLMultiArray *> *modelOutputs = nil ;
780787 @autoreleasepool {
781788 NSArray <MLMultiArray *> *inputs = [model prepareInputs: inputArgs error: error];
782- if (!inputs) {
783- return NO ;
784- }
785-
786- NSArray <MLMultiArray *> *outputBackings = @[];
787- if (executor.ignoreOutputBackings == NO ) {
788- outputBackings = [model prepareOutputBackings: outputArgs error: error];
789- }
790-
791- if (!outputBackings) {
792- return NO ;
793- }
794-
795- NSArray <MLMultiArray *> *modelOutputs = [self executeModelUsingExecutor: executor
796- inputs: inputs
797- outputBackings: outputBackings
798- loggingOptions: loggingOptions
799- eventLogger: eventLogger
800- error: error];
801- if (!modelOutputs) {
802- return NO ;
789+ if (inputs) {
790+ NSArray <MLMultiArray *> *outputBackings = @[];
791+ if (executor.ignoreOutputBackings == NO ) {
792+ outputBackings = [model prepareOutputBackings: outputArgs error: error];
793+ }
794+ if (outputBackings) {
795+ modelOutputs = [self executeModelUsingExecutor: executor
796+ inputs: inputs
797+ outputBackings: outputBackings
798+ loggingOptions: loggingOptions
799+ eventLogger: eventLogger
800+ error: error];
801+ if (!modelOutputs) {
802+ // Resize for dynamic shapes
803+ for (int i = 0 ; i < outputArgs.size (); i++) {
804+ auto new_size = to_vector<size_t >(modelOutputs[i].shape );
805+ outputArgs[i].resize (new_size);
806+ argsVec[model.orderedInputNames.count + i].resize (new_size);
807+ }
808+ ::set_outputs (outputArgs, modelOutputs);
809+ }
810+ }
803811 }
804-
805- // Resize for dynamic shapes
806- for (int i = 0 ; i < outputArgs.size (); i++) {
807- auto new_size = to_vector<size_t >(modelOutputs[i].shape );
808- outputArgs[i].resize (new_size);
809- argsVec[model.orderedInputNames.count + i].resize (new_size);
812+ }
813+ if (!modelOutputs) {
814+ if (error) {
815+ *error = localError;
810816 }
811- ::set_outputs (outputArgs, modelOutputs);
812- return YES ;
817+ return NO ;
813818 }
819+ return YES ;
814820}
815821
816822- (BOOL )unloadModelWithHandle : (ModelHandle *)handle {
0 commit comments