Previously BlockingService pivoting missed preproc and postproc for HTML
leading to issues in WebAssembly API. This change adds fixes for the
same, along with test coverage for the functionality over both async and
blocking services.
This commit is contained in:
Jerin Philip 2022-02-01 13:31:11 +00:00 коммит произвёл GitHub
Родитель cfdda155e2
Коммит 95de806d1d
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
4 изменённых файлов: 27 добавлений и 1 удалений

@ -1 +1 @@
Subproject commit f5e9eb15a0323e33a80d18b4a9234c93242fd399
Subproject commit aaf315c80b7339c2ae6fcca080ca30d3f0a5e2f5

Просмотреть файл

@ -71,6 +71,8 @@ void TestSuite<Service>::TestSuite::run(const std::string &opModeAsString, std::
translationCache(models.front());
} else if (opModeAsString == "test-pivot") {
pivotTranslate(models);
} else if (opModeAsString == "test-pivot-with-html") {
pivotTranslateWithHTML(models);
} else if (opModeAsString == "test-html-translation") {
htmlTranslation(models.front());
} else {
@ -226,6 +228,19 @@ void TestSuite<Service>::translationCache(Ptr<TranslationModel> model) {
std::cout << firstResponse.target.text;
}
template <class Service>
void TestSuite<Service>::pivotTranslateWithHTML(std::vector<Ptr<TranslationModel>> &models) {
ABORT_IF(models.size() != 2, "Forward and backward test needs two models.");
ResponseOptions responseOptions;
responseOptions.HTML = true;
std::string source = readFromStdin();
std::promise<Response> responsePromise;
std::future<Response> responseFuture = responsePromise.get_future();
Response response = bridge_.pivot(service_, models.front(), models.back(), std::move(source), responseOptions);
std::cout << response.source.text;
std::cout << response.target.text;
}
template <class Service>
void TestSuite<Service>::pivotTranslate(std::vector<Ptr<TranslationModel>> &models) {
// We expect a source -> pivot; pivot -> source model to get source -> source and build this test using accuracy of

Просмотреть файл

@ -88,6 +88,8 @@ class TestSuite {
void pivotTranslate(std::vector<Ptr<TranslationModel>> &models);
void pivotTranslateWithHTML(std::vector<Ptr<TranslationModel>> &models);
void htmlTranslation(Ptr<TranslationModel> model);
};

Просмотреть файл

@ -81,6 +81,11 @@ std::vector<Response> BlockingService::pivotMultiple(std::shared_ptr<Translation
std::shared_ptr<TranslationModel> second,
std::vector<std::string> &&sources,
const ResponseOptions &responseOptions) {
std::vector<HTML> htmls;
for (auto &&source : sources) {
htmls.emplace_back(std::move(source), responseOptions.HTML);
}
// Translate source to pivots. This is same as calling translateMultiple.
std::vector<Response> sourcesToPivots;
sourcesToPivots = translateMultipleRaw(first, std::move(sources), responseOptions);
@ -115,6 +120,10 @@ std::vector<Response> BlockingService::pivotMultiple(std::shared_ptr<Translation
finalResponses.push_back(std::move(finalResponse));
}
for (size_t i = 0; i < finalResponses.size(); i++) {
htmls[i].restore(finalResponses[i]);
}
return finalResponses;
}