diff --git a/.github/workflows/build-ios-llm-example.yml b/.github/workflows/build-ios-llm-example.yml index 2d2e2e1410..dc6cc16879 100644 --- a/.github/workflows/build-ios-llm-example.yml +++ b/.github/workflows/build-ios-llm-example.yml @@ -56,24 +56,10 @@ jobs: else echo "iOS project exists, skipping prebuild" fi - - name: Cache CocoaPods - uses: actions/cache@v4 - with: - path: | - apps/llm/ios/Pods - ~/Library/Caches/CocoaPods - ~/.cocoapods - key: ${{ runner.os }}-pods-${{ hashFiles('apps/llm/ios/Podfile.lock') }} - restore-keys: | - ${{ runner.os }}-pods- - name: Install CocoaPods dependencies working-directory: apps/llm/ios run: | - if [ ! -d "Pods" ]; then - pod install - else - echo "Pods directory exists, skipping install" - fi + pod install - name: Build app working-directory: apps/llm/ios run: | diff --git a/packages/react-native-executorch/ios/RnExecutorch/utils/Conversions.h b/packages/react-native-executorch/ios/RnExecutorch/utils/Conversions.h deleted file mode 100644 index 53cf629428..0000000000 --- a/packages/react-native-executorch/ios/RnExecutorch/utils/Conversions.h +++ /dev/null @@ -1,14 +0,0 @@ -#import "opencv2/opencv.hpp" - -// Convert a matrix containing a single value per cell to a NSArray -template NSArray *simpleMatToNSArray(const cv::Mat &mat) { - std::size_t numPixels = mat.rows * mat.cols; - NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:numPixels]; - - for (std::size_t x = 0; x < mat.rows; ++x) { - for (std::size_t y = 0; y < mat.cols; ++y) { - arr[x * mat.cols + y] = @(mat.at(x, y)); - } - } - return arr; -} diff --git a/packages/react-native-executorch/ios/RnExecutorch/utils/ETError.h b/packages/react-native-executorch/ios/RnExecutorch/utils/ETError.h deleted file mode 100644 index 2b95d0f143..0000000000 --- a/packages/react-native-executorch/ios/RnExecutorch/utils/ETError.h +++ /dev/null @@ -1,26 +0,0 @@ -typedef NS_ENUM(NSUInteger, ETError) { - UndefinedError = 0x65, - ModuleNotLoaded = 0x66, - FileWriteFailed = 0x67, - InvalidModelSource = 0xff, - - Ok = 0x00, - Internal = 0x01, - InvalidState = 0x02, - EndOfMethod = 0x03, - - NotSupported = 0x10, - NotImplemented = 0x11, - InvalidArgument = 0x12, - InvalidType = 0x13, - OperatorMissing = 0x14, - - NotFound = 0x20, - MemoryAllocationFailed = 0x21, - AccessFailed = 0x22, - InvalidProgram = 0x23, - - DelegateInvalidCompatibility = 0x30, - DelegateMemoryAllocationFailed = 0x31, - DelegateInvalidHandle = 0x32 -}; diff --git a/packages/react-native-executorch/ios/RnExecutorch/utils/ImageProcessor.h b/packages/react-native-executorch/ios/RnExecutorch/utils/ImageProcessor.h deleted file mode 100644 index 234bbc7e51..0000000000 --- a/packages/react-native-executorch/ios/RnExecutorch/utils/ImageProcessor.h +++ /dev/null @@ -1,15 +0,0 @@ -#import - -@interface ImageProcessor : NSObject - -+ (NSArray *)matToNSArray:(const cv::Mat &)mat - mean:(cv::Scalar)mean - variance:(cv::Scalar)variance; -+ (NSArray *)matToNSArray:(const cv::Mat &)mat; -+ (cv::Mat)arrayToMat:(NSArray *)array width:(int)width height:(int)height; -+ (cv::Mat)arrayToMatGray:(NSArray *)array width:(int)width height:(int)height; -+ (NSArray *)matToNSArrayGray:(const cv::Mat &)mat; -+ (NSString *)saveToTempFile:(const cv::Mat &)image; -+ (cv::Mat)readImage:(NSString *)source; - -@end diff --git a/packages/react-native-executorch/ios/RnExecutorch/utils/ImageProcessor.mm b/packages/react-native-executorch/ios/RnExecutorch/utils/ImageProcessor.mm deleted file mode 100644 index d2da07dfd4..0000000000 --- a/packages/react-native-executorch/ios/RnExecutorch/utils/ImageProcessor.mm +++ /dev/null @@ -1,147 +0,0 @@ -#import "ImageProcessor.h" -#import "ETError.h" - -@implementation ImageProcessor - -+ (NSArray *)matToNSArray:(const cv::Mat &)mat { - return [ImageProcessor matToNSArray:mat - mean:cv::Scalar(0.0, 0.0, 0.0) - variance:cv::Scalar(1.0, 1.0, 1.0)]; -} - -+ (NSArray *)matToNSArray:(const cv::Mat &)mat - mean:(cv::Scalar)mean - variance:(cv::Scalar)variance { - int pixelCount = mat.cols * mat.rows; - NSMutableArray *floatArray = - [[NSMutableArray alloc] initWithCapacity:pixelCount * 3]; - for (NSUInteger k = 0; k < pixelCount * 3; k++) { - [floatArray addObject:@0.0]; - } - - for (int i = 0; i < pixelCount; i++) { - int row = i / mat.cols; - int col = i % mat.cols; - cv::Vec3b pixel = mat.at(row, col); - floatArray[0 * pixelCount + i] = - @((pixel[0] - mean[0] * 255.0) / (variance[0] * 255.0)); - floatArray[1 * pixelCount + i] = - @((pixel[1] - mean[1] * 255.0) / (variance[1] * 255.0)); - floatArray[2 * pixelCount + i] = - @((pixel[2] - mean[2] * 255.0) / (variance[2] * 255.0)); - } - - return floatArray; -} - -+ (NSArray *)matToNSArrayGray:(const cv::Mat &)mat { - NSMutableArray *pixelArray = - [[NSMutableArray alloc] initWithCapacity:mat.cols * mat.rows]; - - for (int row = 0; row < mat.rows; row++) { - for (int col = 0; col < mat.cols; col++) { - float pixelValue = mat.at(row, col); - [pixelArray addObject:@(pixelValue)]; - } - } - - return pixelArray; -} - -+ (cv::Mat)arrayToMat:(NSArray *)array width:(int)width height:(int)height { - cv::Mat mat(height, width, CV_8UC3); - - int pixelCount = width * height; - for (int i = 0; i < pixelCount; i++) { - int row = i / width; - int col = i % width; - float r = 0, g = 0, b = 0; - - r = [[array objectAtIndex:0 * pixelCount + i] floatValue]; - g = [[array objectAtIndex:1 * pixelCount + i] floatValue]; - b = [[array objectAtIndex:2 * pixelCount + i] floatValue]; - - cv::Vec3b color((uchar)(b * 255), (uchar)(g * 255), (uchar)(r * 255)); - mat.at(row, col) = color; - } - - return mat; -} - -+ (cv::Mat)arrayToMatGray:(NSArray *)array width:(int)width height:(int)height { - cv::Mat mat(height, width, CV_32F); - - int pixelCount = width * height; - for (int i = 0; i < pixelCount; i++) { - int row = i / width; - int col = i % width; - float value = [array[i] floatValue]; - mat.at(row, col) = value; - } - - return mat; -} - -+ (NSString *)saveToTempFile:(const cv::Mat &)image { - NSString *uniqueID = [[NSUUID UUID] UUIDString]; - NSString *filename = - [NSString stringWithFormat:@"rn_executorch_%@.png", uniqueID]; - NSString *outputPath = - [NSTemporaryDirectory() stringByAppendingPathComponent:filename]; - - std::string filePath = [outputPath UTF8String]; - if (!cv::imwrite(filePath, image)) { - @throw [NSException - exceptionWithName:@"ImageSaveException" - reason:[NSString - stringWithFormat:@"%ld", (long)FileWriteFailed] - userInfo:nil]; - } - - return [NSString stringWithFormat:@"file://%@", outputPath]; -} - -+ (cv::Mat)readImage:(NSString *)source { - NSURL *url = [NSURL URLWithString:source]; - - cv::Mat inputImage; - if ([[url scheme] isEqualToString:@"data"]) { - // base64 - NSArray *parts = [source componentsSeparatedByString:@","]; - if ([parts count] < 2) { - @throw [NSException - exceptionWithName:@"readImage_error" - reason:[NSString - stringWithFormat:@"%ld", (long)InvalidArgument] - userInfo:nil]; - } - NSString *encodedString = parts[1]; - NSData *data = [[NSData alloc] - initWithBase64EncodedString:encodedString - options: - NSDataBase64DecodingIgnoreUnknownCharacters]; - cv::Mat encodedData(1, [data length], CV_8UC1, (void *)data.bytes); - inputImage = cv::imdecode(encodedData, cv::IMREAD_COLOR); - } else if ([[url scheme] isEqualToString:@"file"]) { - // local file - inputImage = cv::imread([[url path] UTF8String], cv::IMREAD_COLOR); - } else { - // external file - NSData *data = [NSData dataWithContentsOfURL:url]; - inputImage = - cv::imdecode(cv::Mat(1, [data length], CV_8UC1, (void *)data.bytes), - cv::IMREAD_COLOR); - } - - if (inputImage.empty()) { - @throw [NSException - exceptionWithName:@"readImage_error" - reason:[NSString - stringWithFormat:@"%ld", (long)InvalidArgument] - userInfo:nil]; - } - - return inputImage; -} - -@end diff --git a/packages/react-native-executorch/ios/RnExecutorch/utils/Numerical.h b/packages/react-native-executorch/ios/RnExecutorch/utils/Numerical.h deleted file mode 100644 index 102a2bc546..0000000000 --- a/packages/react-native-executorch/ios/RnExecutorch/utils/Numerical.h +++ /dev/null @@ -1,3 +0,0 @@ -#include - -std::vector softmax(const std::vector &v); diff --git a/packages/react-native-executorch/ios/RnExecutorch/utils/Numerical.mm b/packages/react-native-executorch/ios/RnExecutorch/utils/Numerical.mm deleted file mode 100644 index 7f91861aee..0000000000 --- a/packages/react-native-executorch/ios/RnExecutorch/utils/Numerical.mm +++ /dev/null @@ -1,18 +0,0 @@ -#include "Utils.h" - -std::vector softmax(const std::vector &v) { - std::vector result(v.size()); - double maxVal = *std::max_element(v.begin(), v.end()); - - double sumExp = 0.0; - for (size_t i = 0; i < v.size(); ++i) { - result[i] = std::exp(v[i] - maxVal); - sumExp += result[i]; - } - - for (size_t i = 0; i < v.size(); ++i) { - result[i] /= sumExp; - } - - return result; -} diff --git a/packages/react-native-executorch/ios/RnExecutorch/utils/ScalarType.h b/packages/react-native-executorch/ios/RnExecutorch/utils/ScalarType.h deleted file mode 100644 index f03af8e1e3..0000000000 --- a/packages/react-native-executorch/ios/RnExecutorch/utils/ScalarType.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef ScalarType_h -#define ScalarType_h - -@interface ScalarType : NSObject - -@property(class, nonatomic, readonly) NSNumber *Int8; -@property(class, nonatomic, readonly) NSNumber *Int32; -@property(class, nonatomic, readonly) NSNumber *Long; -@property(class, nonatomic, readonly) NSNumber *Float; -@property(class, nonatomic, readonly) NSNumber *Double; - -@end - -#endif /* ScalarType_h */ diff --git a/packages/react-native-executorch/ios/RnExecutorch/utils/ScalarType.mm b/packages/react-native-executorch/ios/RnExecutorch/utils/ScalarType.mm deleted file mode 100644 index cdd9a8a895..0000000000 --- a/packages/react-native-executorch/ios/RnExecutorch/utils/ScalarType.mm +++ /dev/null @@ -1,21 +0,0 @@ -#import "ScalarType.h" - -@implementation ScalarType - -+ (NSNumber *)Int8 { - return @1; -} -+ (NSNumber *)Int32 { - return @3; -} -+ (NSNumber *)Long { - return @4; -} -+ (NSNumber *)Float { - return @6; -} -+ (NSNumber *)Double { - return @7; -} - -@end