//===- InteractiveModelRunner.h ---- "gym" ML model runner -----*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // #ifndef LLVM_ANALYSIS_INTERACTIVEMODELRUNNER_H #define LLVM_ANALYSIS_INTERACTIVEMODELRUNNER_H #include "llvm/Analysis/MLModelRunner.h" #include "llvm/Analysis/TensorSpec.h" #include "llvm/Analysis/Utils/TrainingLogger.h" #include <system_error> namespace llvm { /// A MLModelRunner that asks for advice from an external agent, or host. It /// uses 2 files - ideally named pipes - one to send data to that agent, and /// one to receive advice. /// The data exchange uses the training logger (Utils/TrainingLogger.h) format. /// Specifically, the compiler will send the log header, set the context, and /// send observations; the host is expected to reply with a tensor value after /// each observation as a binary buffer that's conforming to the shape of the /// advice. Interleaved, the data closely resembles the training log for a /// log where we don't capture the reward signal. /// /// Note that the correctness of the received data is the responsibility of the /// host. In particular, if insufficient data were sent, the compiler will block /// when waiting for an advice. /// /// Note that the host can either open the pipes RW, or open first the pipe to /// the compiler - i.e. the "Inbound" - and then the "Outbound", to avoid /// deadlock. This is because the compiler first tries to open the inbound /// (which will hang until there's a writer on the other end). class InteractiveModelRunner : public MLModelRunner { … }; } // namespace llvm #endif // LLVM_ANALYSIS_INTERACTIVEMODELRUNNER_H