Skip to content

Commit e229039

Browse files
committed
Download CoreML models on MacOS if possible
When using CoreML with Whispercpp, it needs additional encoder models so attempt to download the appropriate model and symlink it to the location where whisper expects it to be
1 parent 1e49dec commit e229039

12 files changed

Lines changed: 442 additions & 95 deletions

cmake/BuildWhispercpp.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ if(APPLE)
4444
PROPERTIES
4545
IMPORTED_LOCATION
4646
${whispercpp_fetch_SOURCE_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}whisper.coreml${CMAKE_STATIC_LIBRARY_SUFFIX})
47+
add_compile_definitions(LOCALVOCAL_WITH_COREML)
4748

4849
elseif(WIN32)
4950
if(NOT DEFINED ACCELERATION)

data/models/models_directory.json

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,10 @@
179179
{
180180
"url": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base-q5_1.bin",
181181
"sha256": "422f1ae452ade6f30a004d7e5c6a43195e4433bc370bf23fac9cc591f01a8898"
182+
},
183+
{
184+
"url": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base-encoder.mlmodelc.zip",
185+
"sha256": "7e6ab77041942572f239b5b602f8aaa1c3ed29d73e3d8f20abea03a773541089"
182186
}
183187
]
184188
},
@@ -5024,6 +5028,138 @@
50245028
"description": "This model is from the mukowaty/ggml-whisper project on Hugging Face.",
50255029
"source": "Hugging Face"
50265030
}
5031+
},
5032+
{
5033+
"friendly_name": "Whisper Base CoreML model",
5034+
"local_folder_name": "coreml/ggml-base",
5035+
"type": "MODEL_TYPE_TRANSCRIPTION_COREML",
5036+
"files": [
5037+
{
5038+
"url": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base-encoder.mlmodelc.zip",
5039+
"sha256": "7e6ab77041942572f239b5b602f8aaa1c3ed29d73e3d8f20abea03a773541089"
5040+
}
5041+
]
5042+
},
5043+
{
5044+
"friendly_name": "Whisper Base (en) CoreML model",
5045+
"local_folder_name": "coreml/ggml-base.en",
5046+
"type": "MODEL_TYPE_TRANSCRIPTION_COREML",
5047+
"files": [
5048+
{
5049+
"url": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en-encoder.mlmodelc.zip",
5050+
"sha256": "8cf860309e2449e2bdc8be834cf838ab2565747ecc8c0ef914ef5975115e192b"
5051+
}
5052+
]
5053+
},
5054+
{
5055+
"friendly_name": "Whisper Large v1 CoreML model",
5056+
"local_folder_name": "coreml/ggml-large-v1",
5057+
"type": "MODEL_TYPE_TRANSCRIPTION_COREML",
5058+
"files": [
5059+
{
5060+
"url": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v1-encoder.mlmodelc.zip",
5061+
"sha256": "d10d24a4272572fee07843ffc2e4e4ceebd1d0b0831a142dd2fdb3d56d5bf56e"
5062+
}
5063+
]
5064+
},
5065+
{
5066+
"friendly_name": "Whisper Large v2 CoreML model",
5067+
"local_folder_name": "coreml/ggml-large-v2",
5068+
"type": "MODEL_TYPE_TRANSCRIPTION_COREML",
5069+
"files": [
5070+
{
5071+
"url": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v2-encoder.mlmodelc.zip",
5072+
"sha256": "c65d28737f51d09dff3b9da9d26c2ab6f5d82857c9b049ce383d64c2502a5541"
5073+
}
5074+
]
5075+
},
5076+
{
5077+
"friendly_name": "Whisper Large v3 CoreML model",
5078+
"local_folder_name": "coreml/ggml-large-v3",
5079+
"type": "MODEL_TYPE_TRANSCRIPTION_COREML",
5080+
"files": [
5081+
{
5082+
"url": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3-encoder.mlmodelc.zip",
5083+
"sha256": "47837be7594a29429ec08620043390c4d6d467f8bd362df09e9390ace76a55a4"
5084+
}
5085+
]
5086+
},
5087+
{
5088+
"friendly_name": "Whisper Large v3-turbo CoreML model",
5089+
"local_folder_name": "coreml/ggml-large-v3-turbo",
5090+
"type": "MODEL_TYPE_TRANSCRIPTION_COREML",
5091+
"files": [
5092+
{
5093+
"url": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3-turbo-encoder.mlmodelc.zip",
5094+
"sha256": "84bedfe895bd7b5de6e8e89a0803dfc5addf8c0c5bc4c937451716bf7cf7988a"
5095+
}
5096+
]
5097+
},
5098+
{
5099+
"friendly_name": "Whisper Medium CoreML model",
5100+
"local_folder_name": "coreml/ggml-medium",
5101+
"type": "MODEL_TYPE_TRANSCRIPTION_COREML",
5102+
"files": [
5103+
{
5104+
"url": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-medium-encoder.mlmodelc.zip",
5105+
"sha256": "79b0b8d436d47d3f24dd3afc91f19447dd686a4f37521b2f6d9c30a642133fbd"
5106+
}
5107+
]
5108+
},
5109+
{
5110+
"friendly_name": "Whisper Medium (en) CoreML model",
5111+
"local_folder_name": "coreml/ggml-medium.en",
5112+
"type": "MODEL_TYPE_TRANSCRIPTION_COREML",
5113+
"files": [
5114+
{
5115+
"url": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-medium.en-encoder.mlmodelc.zip",
5116+
"sha256": "cdc44fee3c62b5743913e3147ed75f4e8ecfb52dd7a0f0f7387094b406ff0ee6"
5117+
}
5118+
]
5119+
},
5120+
{
5121+
"friendly_name": "Whisper Small CoreML model",
5122+
"local_folder_name": "coreml/ggml-small",
5123+
"type": "MODEL_TYPE_TRANSCRIPTION_COREML",
5124+
"files": [
5125+
{
5126+
"url": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small-encoder.mlmodelc.zip",
5127+
"sha256": "de43fb9fed471e95c19e60ae67575c2bf09e8fb607016da171b06ddad313988b"
5128+
}
5129+
]
5130+
},
5131+
{
5132+
"friendly_name": "Whisper Small (en) CoreML model",
5133+
"local_folder_name": "coreml/ggml-small.en",
5134+
"type": "MODEL_TYPE_TRANSCRIPTION_COREML",
5135+
"files": [
5136+
{
5137+
"url": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.en-encoder.mlmodelc.zip",
5138+
"sha256": "b2ef1c506378b825b4b4341979a93e1656b5d6c129f17114cfb8fb78aabc2f89"
5139+
}
5140+
]
5141+
},
5142+
{
5143+
"friendly_name": "Whisper Tiny CoreML model",
5144+
"local_folder_name": "coreml/ggml-tiny",
5145+
"type": "MODEL_TYPE_TRANSCRIPTION_COREML",
5146+
"files": [
5147+
{
5148+
"url": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-tiny-encoder.mlmodelc.zip",
5149+
"sha256": "c88cbd2648e1f5415092bcf5256add463a0f19943e6938f46e8d4ffdebd47739"
5150+
}
5151+
]
5152+
},
5153+
{
5154+
"friendly_name": "Whisper Tiny (en) CoreML model",
5155+
"local_folder_name": "coreml/ggml-tiny.en",
5156+
"type": "MODEL_TYPE_TRANSCRIPTION_COREML",
5157+
"files": [
5158+
{
5159+
"url": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-tiny.en-encoder.mlmodelc.zip",
5160+
"sha256": "82b32eef73c94bb0c432a776a047b757d9525c26d84038a15d8798d7c8d1ee58"
5161+
}
5162+
]
50275163
}
50285164
]
50295165
}

src/model-utils/model-downloader-types.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,24 @@
33

44
#include <functional>
55
#include <map>
6+
#include <optional>
67
#include <string>
78
#include <vector>
89

910
typedef std::function<void(int download_status, const std::string &path)>
1011
download_finished_callback_t;
12+
typedef std::function<void()> coreml_model_download_finished_callback_t;
1113

1214
struct ModelFileDownloadInfo {
1315
std::string url;
1416
std::string sha256;
1517
};
1618

17-
enum ModelType { MODEL_TYPE_TRANSCRIPTION, MODEL_TYPE_TRANSLATION };
19+
enum ModelType {
20+
MODEL_TYPE_TRANSCRIPTION,
21+
MODEL_TYPE_TRANSLATION,
22+
MODEL_TYPE_TRANSCRIPTION_COREML
23+
};
1824

1925
struct ExtraInfo {
2026
std::string language;
@@ -31,6 +37,6 @@ struct ModelInfo {
3137
};
3238

3339
extern const std::map<std::string, ModelInfo> &models_info();
34-
extern const std::vector<ModelInfo> get_sorted_models_info();
40+
extern const std::vector<ModelInfo> get_sorted_models_info(std::optional<ModelType> type_filter);
3541

3642
#endif /* MODEL_DOWNLOADER_TYPES_H */

0 commit comments

Comments
 (0)