1010// processing logic.
1111#pragma once
1212
13+ #include < executorch/examples/models/llava/runner/llava_image_prefiller.h>
14+ #include < executorch/extension/llm/runner/image.h>
15+ #include < executorch/extension/llm/runner/io_manager/io_manager.h>
16+ #include < executorch/extension/llm/runner/irunner.h>
17+ #include < executorch/extension/llm/runner/stats.h>
18+ #include < executorch/extension/llm/runner/text_decoder_runner.h>
19+ #include < executorch/extension/llm/runner/text_prefiller.h>
20+ #include < executorch/extension/llm/runner/text_token_generator.h>
21+ #include < executorch/extension/module/module.h>
1322#include < cstdint>
1423#include < functional>
1524#include < memory>
1625#include < string>
17- #include < type_traits>
18- #include < unordered_map>
19-
20- #include < executorch/extension/llm/runner/multimodal_runner.h>
2126
2227namespace example {
2328
24- class ET_EXPERIMENTAL LlavaRunner
25- : public ::executorch::extension::llm::MultimodalRunner {
29+ using executorch::extension::Module;
30+ using executorch::extension::llm::ImagePrefiller;
31+ using executorch::extension::llm::IOManager;
32+ using executorch::extension::llm::Stats;
33+ using executorch::extension::llm::TextDecoderRunner;
34+ using executorch::extension::llm::TextPrefiller;
35+ using executorch::extension::llm::TextTokenGenerator;
36+
37+ class ET_EXPERIMENTAL LlavaRunner {
2638 public:
2739 explicit LlavaRunner (
2840 const std::string& model_path,
2941 const std::string& tokenizer_path,
3042 const float temperature = 0 .8f )
31- : MultimodalRunner(model_path, tokenizer_path, temperature){};
43+ : temperature_(temperature),
44+ module_(std::make_unique<Module>(model_path, Module::LoadMode::File)),
45+ io_manager_(std::make_unique<IOManager>()),
46+ tokenizer_path_(tokenizer_path) {
47+ ET_LOG (
48+ Info,
49+ " Creating Llava runner: model_path=%s, tokenizer_path=%s" ,
50+ model_path.c_str (),
51+ tokenizer_path.c_str ());
52+ }
3253
33- bool is_loaded () override ;
54+ bool is_loaded ();
3455
35- ::executorch::runtime::Error load () override ;
56+ ::executorch::runtime::Error load ();
3657
3758 ::executorch::runtime::Error generate (
3859 std::vector<::executorch::extension::llm::Image> images,
@@ -41,17 +62,17 @@ class ET_EXPERIMENTAL LlavaRunner
4162 std::function<void (const std::string&)> token_callback = {},
4263 std::function<void (const ::executorch::extension::llm::Stats&)>
4364 stats_callback = {},
44- bool echo = true ) override ;
65+ bool echo = true );
4566
4667 ::executorch::runtime::Error prefill_images (
4768 std::vector<::executorch::extension::llm::Image>& images,
48- int64_t & start_pos) override ;
69+ int64_t & start_pos);
4970
5071 ::executorch::runtime::Result<uint64_t > prefill_prompt (
5172 const std::string& prompt,
5273 int64_t & start_pos,
5374 int8_t bos = 0 ,
54- int8_t eos = 0 ) override ;
75+ int8_t eos = 0 );
5576
5677 ::executorch::runtime::Error generate_from_pos (
5778 const std::string& prompt,
@@ -60,9 +81,30 @@ class ET_EXPERIMENTAL LlavaRunner
6081 std::function<void (const std::string&)> token_callback = {},
6182 std::function<void (const ::executorch::extension::llm::Stats&)>
6283 stats_callback = {},
63- bool echo = true ) override ;
84+ bool echo = true );
85+
86+ inline void stop () {
87+ text_token_generator_->stop ();
88+ }
6489
6590 private:
91+ // metadata
92+ float temperature_;
93+
94+ // model
95+ std::unordered_set<std::string> model_methods_;
96+ std::unique_ptr<Module> module_;
97+ std::unique_ptr<TextDecoderRunner> text_decoder_runner_;
98+ std::unique_ptr<TextPrefiller> text_prefiller_;
99+ std::unique_ptr<LlavaImagePrefiller> image_prefiller_;
100+ std::unique_ptr<IOManager> io_manager_;
101+ std::unique_ptr<TextTokenGenerator> text_token_generator_;
102+ std::string tokenizer_path_;
103+ std::unique_ptr<::tokenizers::Tokenizer> tokenizer_;
104+
105+ // stats
106+ Stats stats_;
107+
66108 inline static const char * kPresetPrompt =
67109 " A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions. USER: " ;
68110};
0 commit comments