Program Listing for File service.h¶
↰ Return to documentation for file (src/translator/service.h
)
#ifndef SRC_BERGAMOT_SERVICE_H_
#define SRC_BERGAMOT_SERVICE_H_
#include <queue>
#include <thread>
#include <vector>
#include "cache.h"
#include "data/types.h"
#include "logging.h"
#include "quality_estimator.h"
#include "response.h"
#include "response_builder.h"
#include "text_processor.h"
#include "threadsafe_batching_pool.h"
#include "translation_model.h"
#include "translator/parser.h"
#include "vocabs.h"
namespace marian {
namespace bergamot {
class BlockingService;
class AsyncService;
class BlockingService {
public:
struct Config {
size_t cacheSize{0};
Logger::Config logger;
template <class App>
static void addOptions(App &app, Config &config) {
// Options will come here.
app.add_option("--cache-size", config.cacheSize, "Number of entries to store in cache.");
Logger::Config::addOptions(app, config.logger);
}
};
BlockingService(const BlockingService::Config &config);
std::vector<Response> translateMultiple(std::shared_ptr<TranslationModel> translationModel,
std::vector<std::string> &&source,
const std::vector<ResponseOptions> &responseOptions);
std::vector<Response> pivotMultiple(std::shared_ptr<TranslationModel> first, std::shared_ptr<TranslationModel> second,
std::vector<std::string> &&sources,
const std::vector<ResponseOptions> &responseOptions);
TranslationCache::Stats cacheStats() { return cache_ ? cache_->stats() : TranslationCache::Stats(); }
private:
std::vector<Response> translateMultipleRaw(std::shared_ptr<TranslationModel> translationModel,
std::vector<std::string> &&source,
const std::vector<ResponseOptions> &responseOptions);
size_t requestId_;
AggregateBatchingPool batchingPool_;
Config config_;
// Logger which shuts down cleanly with service.
Logger logger_;
std::optional<TranslationCache> cache_;
};
class AsyncService {
public:
struct Config {
size_t numWorkers{1};
size_t cacheSize{0};
Logger::Config logger; // Configurations for logging
template <class App>
static void addOptions(App &app, Config &config) {
app.add_option("--cpu-threads", config.numWorkers, "Workers to form translation backend");
app.add_option("--cache-size", config.cacheSize, "Number of entries to store in cache.");
Logger::Config::addOptions(app, config.logger);
}
};
AsyncService(const AsyncService::Config &config);
Ptr<TranslationModel> createCompatibleModel(const TranslationModel::Config &config) {
// @TODO: Remove this remove this dependency/coupling.
return New<TranslationModel>(config, /*replicas=*/config_.numWorkers);
}
void translate(std::shared_ptr<TranslationModel> translationModel, std::string &&source, CallbackType callback,
const ResponseOptions &options = ResponseOptions());
void pivot(std::shared_ptr<TranslationModel> first, std::shared_ptr<TranslationModel> second, std::string &&source,
CallbackType clientCallback, const ResponseOptions &options = ResponseOptions());
void clear();
~AsyncService();
TranslationCache::Stats cacheStats() { return cache_ ? cache_->stats() : TranslationCache::Stats(); }
private:
void translateRaw(std::shared_ptr<TranslationModel> translationModel, std::string &&source, CallbackType callback,
const ResponseOptions &options = ResponseOptions());
AsyncService::Config config_;
std::vector<std::thread> workers_;
size_t requestId_;
ThreadsafeBatchingPool<AggregateBatchingPool> safeBatchingPool_;
// Logger which shuts down cleanly with service.
Logger logger_;
std::optional<TranslationCache> cache_;
};
} // namespace bergamot
} // namespace marian
#endif // SRC_BERGAMOT_SERVICE_H_