Files
mlc-ai--mlc-llm/cpp/serve/event_trace_recorder.h
wehub-resource-sync 770d92cb1f
Lint / lint (push) Waiting to run
Windows CI / Windows (push) Waiting to run
Build Docs / Deploy Docs (push) Waiting to run
chore: import upstream snapshot with attribution
2026-07-13 13:23:58 +08:00

82 lines
2.6 KiB
C++

/*!
* Copyright (c) 2023-2025 by Contributors
* \file serve/event_trace_recorder.h
* \brief The event trace recorder for requests in MLC LLM.
*/
#ifndef MLC_LLM_SERVE_EVENT_TRACE_RECORDER_H_
#define MLC_LLM_SERVE_EVENT_TRACE_RECORDER_H_
#include <tvm/ffi/container/array.h>
#include <tvm/ffi/object.h>
#include <tvm/ffi/reflection/registry.h>
#include <tvm/ffi/string.h>
#include <string>
namespace mlc {
namespace llm {
namespace serve {
using tvm::ffi::Array;
using tvm::ffi::Object;
using tvm::ffi::ObjectRef;
using tvm::ffi::String;
/*! \brief The event trace recorder for requests. */
class EventTraceRecorderObj : public Object {
public:
/*!
* \brief Record a event for the input request in the trace recorder.
* \param request_id The subject request of the event.
* \param event The event in a string name.
* It can have one of the following patterns:
* - "start xxx", which marks the start of event "xxx",
* - "finish xxx", which marks the finish of event "xxx",
* - "yyy", which marks the instant event "yyy".
* The "starts" and "finishes" will be automatically paired in the trace recorder.
*/
virtual void AddEvent(const String& request_id, const std::string& event) = 0;
/*! \brief Record a event for the list of input requests. */
virtual void AddEvent(const Array<String>& request_ids, const std::string& event) = 0;
/*! \brief Dump the logged events in Chrome Trace Event Format in JSON string. */
virtual std::string DumpJSON() = 0;
static void RegisterReflection() {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<EventTraceRecorderObj>();
}
static constexpr const bool _type_has_method_sequal_reduce = false;
static constexpr const bool _type_has_method_shash_reduce = false;
static constexpr const bool _type_mutable = true;
TVM_FFI_DECLARE_OBJECT_INFO("mlc.serve.EventTraceRecorder", EventTraceRecorderObj, Object);
};
/*!
* \brief Managed reference to EventTraceRecorderObj.
* \sa EventTraceRecorderObj
*/
class EventTraceRecorder : public ObjectRef {
public:
/*! \brief Create an event trace recorder. */
static EventTraceRecorder Create();
TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE(EventTraceRecorder, ObjectRef, EventTraceRecorderObj);
};
/****************** Helper macro ******************/
/*! \brief Record a event for the input request or list or requests. */
#define RECORD_EVENT(trace_recorder, request_ids, event) \
if (trace_recorder.has_value()) { \
trace_recorder.value()->AddEvent(request_ids, event); \
}
} // namespace serve
} // namespace llm
} // namespace mlc
#endif // MLC_LLM_SERVE_EVENT_TRACE_RECORDER_H_