mirror of
https://github.com/browsermt/bergamot-translator.git
synced 2024-10-26 05:43:59 +03:00
34228d37bf
* Merging two Services * Moving stop() logic to destructor * We have WITH_PTHREADS back * string based constructor on Service * Removing now empty service_base.* files * Hiding away pcqueue_ construction Ugliest ifdefs I have done in my life. * Another ifdef to hide pcqueue header file * Missing semicolons in WITH_PTHREADS path * Fixing async_translate residue argument from copy * Adding comments * Initialize batchtranslator only at one place To reduce tax for bytebuffer loads, initialize batchtranslator only at one place. * \#ifdef WITH_PTHREADS -> #ifndef WASM_HIDE_THREADS Sane platform (non WASM) is default. This truly only hide-threads from compilation path and not switch unswitch pthreads (-lpthread). * Review comments: Rearranging destructor, fix wrong comment * Move loadVocabularies to service.cpp and put in anonymous namespace * Prettifying diff: Removing unwanted empty lines * Indicate in comments multithreaded has numWorkers translators * Typo fix: bergamot_translator -> bergamot-translator * Safety guards to avoid pcqueue illegal init * Add WASM_HIDE_THREADS as a global WASM_COMPILE_FLAG * Compile Defs: WASM_HIDE_THREADS -> __EMSCRIPTEN__ * Removing dead CMakeLists.txt code following __EMSCRIPTEN__ * Compile defs: __EMSCRIPTEN__ -> WASM
61 lines
2.0 KiB
C++
61 lines
2.0 KiB
C++
#include <cstdlib>
|
|
#include <future>
|
|
#include <iostream>
|
|
#include <sstream>
|
|
|
|
#include "common/definitions.h"
|
|
#include "common/timer.h"
|
|
#include "common/utils.h"
|
|
#include "marian.h"
|
|
#include "translator/history.h"
|
|
#include "translator/output_collector.h"
|
|
#include "translator/output_printer.h"
|
|
#include "translator/parser.h"
|
|
#include "translator/response.h"
|
|
#include "translator/service.h"
|
|
|
|
void marian_decoder_minimal(const marian::Histories &histories,
|
|
marian::Ptr<marian::Vocab const> targetVocab,
|
|
marian::Ptr<marian::Options> options) {
|
|
|
|
bool doNbest = options->get<bool>("n-best");
|
|
auto collector =
|
|
marian::New<marian::OutputCollector>(options->get<std::string>("output"));
|
|
|
|
// There is a dependency of vocabs here.
|
|
auto printer = marian::New<marian::OutputPrinter>(options, targetVocab);
|
|
if (options->get<bool>("quiet-translation"))
|
|
collector->setPrintingStrategy(marian::New<marian::QuietPrinting>());
|
|
|
|
for (auto &history : histories) {
|
|
std::stringstream best1;
|
|
std::stringstream bestn;
|
|
printer->print(history, best1, bestn);
|
|
collector->Write((long)history->getLineNum(), best1.str(), bestn.str(),
|
|
doNbest);
|
|
}
|
|
}
|
|
|
|
int main(int argc, char *argv[]) {
|
|
auto cp = marian::bergamot::createConfigParser();
|
|
auto options = cp.parseOptions(argc, argv, true);
|
|
marian::timer::Timer decoderTimer;
|
|
|
|
marian::bergamot::Service service(options);
|
|
// Read a large input text blob from stdin
|
|
std::ostringstream std_input;
|
|
std_input << std::cin.rdbuf();
|
|
std::string input = std_input.str();
|
|
using marian::bergamot::Response;
|
|
|
|
// Wait on future until Response is complete
|
|
std::future<Response> responseFuture = service.translate(std::move(input));
|
|
responseFuture.wait();
|
|
const Response &response = responseFuture.get();
|
|
|
|
marian_decoder_minimal(response.histories(), service.targetVocab(), options);
|
|
|
|
LOG(info, "Total time: {:.5f}s wall", decoderTimer.elapsed());
|
|
return 0;
|
|
}
|