#pragma once #include #include "src/turbomind/core/core.h" #include "src/turbomind/engine/gateway.h" namespace xgrammar { class CompiledGrammar; } namespace turbomind { class ModelRequest { public: virtual ~ModelRequest() = default; ModelRequest(Gateway* gateway, DataType data_type, int session_len, int vocab_size, int hidden_dim); // Cancel running request void Cancel(); // Reset the channel to uninitailized state, calls `notify` when done void End(std::function cb, uint64_t session_id); struct InputParam { std::shared_ptr tensors; SessionParam session; GenerationConfig gen_cfg; bool stream_output; bool enable_metrics; }; struct OutputParam { std::shared_ptr tensors; std::shared_ptr state; std::shared_ptr metrics; }; OutputParam Forward(InputParam param, std::function cb); void setGrammar(const xgrammar::CompiledGrammar& grammar); protected: Gateway* const gateway_; const DataType data_type_; const int session_len_; const int hidden_dim_; const int vocab_size_; uint64_t session_id_; std::weak_ptr request_; std::shared_ptr inputs_; std::shared_ptr outputs_; std::shared_ptr grammar_; }; } // namespace turbomind