* Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.
* MindIE is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#ifndef RESPONSE_BUFFER_H
#define RESPONSE_BUFFER_H
#include <atomic>
#include <cstdint>
#include <memory>
#include <mutex>
#include "concurrent_deque.h"
#include "request_response/response.h"
#include "utils/data_type.h"
namespace mindie_llm {
class ResponseBuffer {
public:
explicit ResponseBuffer(InferReqType inferStage, std::int64_t lastRespArriveTime)
: lastRespArriveTime_(lastRespArriveTime), inferStage_(inferStage) {}
~ResponseBuffer() = default;
void AddResponse(const ResponseSPtr &response) { responseQueue4UniqueReq.PushBack(response); }
void SetlastRespArriveTime(std::int64_t lastRespArriveTime) { lastRespArriveTime_ = lastRespArriveTime; }
void SetInferStage(InferReqType inferStage) { inferStage_ = inferStage; }
InferReqType GetInferStage() const { return inferStage_; }
void SetReqEnded() { isEnded_ = true; }
bool IsEnded() const { return isEnded_; }
std::int64_t GetlastRespArriveTime() const { return lastRespArriveTime_; }
bool IsEmpty() { return responseQueue4UniqueReq.Empty(); }
ResponseSPtr PopFront() {
ResponseSPtr result;
if (responseQueue4UniqueReq.PopFront(result)) {
return result;
}
return nullptr;
}
private:
ConcurrentDeque<ResponseSPtr> responseQueue4UniqueReq;
std::int64_t lastRespArriveTime_;
InferReqType inferStage_;
std::atomic<bool> isEnded_ = {false};
};
}
#endif