download method
Future<bool>
download({
- required String modelUrl,
- required String mmprojUrl,
- String? modelFilename,
- String? mmprojFilename,
- CactusProgressCallback? onProgress,
Implementation
Future<bool> download({
required String modelUrl,
required String mmprojUrl,
String? modelFilename,
String? mmprojFilename,
CactusProgressCallback? onProgress,
}) async {
try {
final actualModelFilename = modelFilename ?? modelUrl.split('/').last;
final actualMmprojFilename = mmprojFilename ?? mmprojUrl.split('/').last;
if (actualModelFilename.isEmpty || actualMmprojFilename.isEmpty) {
throw ArgumentError('Cannot determine filenames from URLs and no filenames provided');
}
final downloadParams = CactusInitParams(
modelUrl: modelUrl,
modelFilename: actualModelFilename,
mmprojUrl: mmprojUrl,
mmprojFilename: actualMmprojFilename,
onInitProgress: onProgress,
);
try {
final tempContext = await CactusContext.init(downloadParams);
tempContext.release();
_lastDownloadedModelFilename = actualModelFilename;
_lastDownloadedMmprojFilename = actualMmprojFilename;
return true;
} catch (e) {
final appDocDir = await getApplicationDocumentsDirectory();
final modelPath = '${appDocDir.path}/$actualModelFilename';
final mmprojPath = '${appDocDir.path}/$actualMmprojFilename';
final modelFile = File(modelPath);
final mmprojFile = File(mmprojPath);
if (await modelFile.exists() && await mmprojFile.exists()) {
_lastDownloadedModelFilename = actualModelFilename;
_lastDownloadedMmprojFilename = actualMmprojFilename;
return true;
}
rethrow;
}
} catch (e) {
if (onProgress != null) {
onProgress(null, "Download failed: ${e.toString()}", true);
}
return false;
}
}