protected virtual async Task <string> DownloadAndExtractWordEmbedding(string language, CancellationToken cancellationToken) { var wordEmbeddingOptions = _options.WordEmbeddingOptions.First(_ => _.Language == language); var filePath = DirectoryHelper.GetWordEmbeddingFilePath(language); if (File.Exists(filePath)) { return(filePath); } var zipPath = DirectoryHelper.GetWordEmbeddingZipFilePath(language); if (!File.Exists(zipPath)) { using (var httpClient = _httpClientFactory.BuildHttpClient()) { var progress = new Progress <float>(); progress.ProgressChanged += HandleProgressChanged; using (var file = File.OpenWrite(DirectoryHelper.GetWordEmbeddingZipFilePath(language))) { await httpClient.DownloadDataAsync(wordEmbeddingOptions.DownloadUrl, file, progress); } } } using (var archive = ZipFile.OpenRead(zipPath)) { var entry = archive.Entries.First(e => e.FullName.EndsWith(".vec")); entry.ExtractToFile(filePath); } return(filePath); }