// -*- c++ -*- #pragma once #include #include #include #ifdef WITH_THREADS #include #endif #include "moses/Util.h" #include "moses/ChartManager.h" #include "moses/Hypothesis.h" #include "moses/Manager.h" #include "moses/StaticData.h" #include "moses/ThreadPool.h" #include "moses/TranslationModel/PhraseDictionaryMultiModel.h" #include "moses/TreeInput.h" #include "moses/TranslationTask.h" #include #include #include "Translator.h" namespace MosesServer { class TranslationRequest : public virtual Moses::TranslationTask { boost::condition_variable& m_cond; boost::mutex& m_mutex; bool m_done; xmlrpc_c::paramList const& m_paramList; std::map m_retData; std::map m_bias; // for biased sampling Translator* m_translator; std::string m_source_string, m_target_string; // bool m_withAlignInfo; // bool m_withWordAlignInfo; bool m_withGraphInfo; bool m_withTopts; bool m_withScoreBreakdown; uint64_t m_session_id; // 0 means none, 1 means new void parse_request(); void parse_request(std::map const& req); virtual void run_chart_decoder(); virtual void run_phrase_decoder(); void pack_hypothesis(const Moses::Manager& manager, std::vector const& edges, std::string const& key, std::map & dest) const; void pack_hypothesis(const Moses::Manager& manager, Moses::Hypothesis const* h, std::string const& key, std::map & dest) const; void add_phrase_aln_info(Moses::Hypothesis const& h, std::vector& aInfo) const; void outputChartHypo(std::ostream& out, const Moses::ChartHypothesis* hypo); bool compareSearchGraphNode(const Moses::SearchGraphNode& a, const Moses::SearchGraphNode& b); void insertGraphInfo(Moses::Manager& manager, std::map& retData); void outputNBest(Moses::Manager const& manager, std::map& retData); void insertTranslationOptions(Moses::Manager& manager, std::map& retData); protected: TranslationRequest(xmlrpc_c::paramList const& paramList, boost::condition_variable& cond, boost::mutex& mut); public: static boost::shared_ptr create(Translator* translator, xmlrpc_c::paramList const& paramList, boost::condition_variable& cond, boost::mutex& mut); virtual bool DeleteAfterExecution() { return false; } bool IsDone() const { return m_done; } std::map const& GetRetData() { return m_retData; } void Run(); }; }