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>
1926
20- #include < executorch/extension/llm/runner/multimodal_runner.h>
27+ using executorch::extension::Module;
28+ using executorch::extension::llm::ImagePrefiller;
29+ using executorch::extension::llm::IOManager;
30+ using executorch::extension::llm::Stats;
31+ using executorch::extension::llm::TextDecoderRunner;
32+ using executorch::extension::llm::TextPrefiller;
33+ using executorch::extension::llm::TextTokenGenerator;
2134
2235namespace example {
2336
24- class ET_EXPERIMENTAL LlavaRunner
25- : public ::executorch::extension::llm::MultimodalRunner {
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,26 @@ 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 );
6485
6586 private:
87+ // metadata
88+ float temperature_;
89+
90+ // model
91+ std::unordered_set<std::string> model_methods_;
92+ std::unique_ptr<Module> module_;
93+ std::unique_ptr<TextDecoderRunner> text_decoder_runner_;
94+ std::unique_ptr<TextPrefiller> text_prefiller_;
95+ std::unique_ptr<LlavaImagePrefiller> image_prefiller_;
96+ std::unique_ptr<IOManager> io_manager_;
97+ std::unique_ptr<TextTokenGenerator> text_token_generator_;
98+ std::string tokenizer_path_;
99+ std::unique_ptr<::tokenizers::Tokenizer> tokenizer_;
100+
101+ // stats
102+ Stats stats_;
103+
66104 inline static const char * kPresetPrompt =
67105 " 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: " ;
68106};
0 commit comments