Continuum C++ API
Unified runtime for token + tensor execution
Loading...
Searching...
No Matches
interpreter.hpp
Go to the documentation of this file.
1#pragma once
2
12
13#include <cstdint>
14#include <optional>
15#include <unordered_map>
16
17namespace continuum::runtime {
18
19struct ReusePolicy;
20class MemoTable;
21
22continuum::Value convert_value_for_backend(const continuum::Value& value, const std::string& target_backend);
23
25 public:
27 const ReusePolicy* policy = nullptr);
28 std::vector<continuum::Value> run(
29 const ir::Graph& g, const std::unordered_map<ir::NodeId, continuum::Value>& inputs);
31 std::vector<continuum::Value> resume(const Checkpoint& checkpoint);
32 void begin(const ir::Graph& g, const std::unordered_map<ir::NodeId, continuum::Value>& inputs);
33 continuum::Value step(const ir::Node& n, const std::vector<continuum::Value>& input_values);
36 const std::unordered_map<ir::NodeId, continuum::Value>& active_values() const;
37
38 void set_memo_table(MemoTable* memo) { memo_table_ = memo; }
39 void set_semantic_cache(SemanticCacheIndex* sc) { semantic_cache_ = sc; }
40 void set_embedding_provider(EmbeddingProvider* ep) { embedder_ = ep; }
41 void set_layer_cache(LayerKVCacheIndex* lc) { layer_cache_ = lc; }
42 void set_memory_graph(MemoryGraphStore* mg) { memory_graph_ = mg; }
43 void set_cache_namespace(std::string ns) { cache_namespace_ = std::move(ns); }
47 ReuseObserver* observer() const { return observer_; }
48 const std::string& cache_namespace() const { return cache_namespace_; }
49
50 MemoTable* memo_table() const { return memo_table_; }
51 SemanticCacheIndex* semantic_cache() const { return semantic_cache_; }
52 EmbeddingProvider* embedding_provider() const { return embedder_; }
53 LayerKVCacheIndex* layer_cache() const { return layer_cache_; }
54 MemoryGraphStore* memory_graph() const { return memory_graph_; }
55
56 private:
57 struct ActiveExecution {
58 ir::Graph graph;
60 std::unordered_map<ir::NodeId, continuum::Value> values;
61 std::vector<continuum::Value> out;
62 std::size_t next_group_index = 0;
63 std::size_t next_node_in_group = 0;
64 std::size_t executed_nodes = 0;
65 };
66
67 std::vector<continuum::Value> run_to_end();
68 continuum::Value step_impl(const ir::Node& n, const std::vector<continuum::Value>& input_values);
70 void emit_tier(const std::string& tier, std::int64_t start_ns, bool hit, std::int32_t tokens_saved = 0,
71 std::int32_t match_len = 0, float similarity = 0.0f);
72 ir::NodeId next_planned_node(const ActiveExecution& state) const;
73 void advance_plan_cursor(ActiveExecution& state);
74
75 backend::BackendRegistry& backends_;
76 KVCacheIndex& cache_;
77 const ReusePolicy* policy_;
78 Scheduler scheduler_;
79 std::optional<ActiveExecution> active_;
80 MemoTable* memo_table_ = nullptr;
81 SemanticCacheIndex* semantic_cache_ = nullptr;
82 EmbeddingProvider* embedder_ = nullptr;
83 LayerKVCacheIndex* layer_cache_ = nullptr;
84 MemoryGraphStore* memory_graph_ = nullptr;
85 std::string cache_namespace_;
86 ReuseObserver* observer_ = nullptr;
87 ReuseEvent node_trace_; // filled by step_impl, emitted by step
88};
89
90} // namespace continuum::runtime
Definition backend.hpp:54
Definition graph.hpp:11
Definition interpreter.hpp:24
ReuseObserver * observer() const
Definition interpreter.hpp:47
std::vector< continuum::Value > resume(const Checkpoint &checkpoint)
void set_semantic_cache(SemanticCacheIndex *sc)
Definition interpreter.hpp:39
LayerKVCacheIndex * layer_cache() const
Definition interpreter.hpp:53
MemoTable * memo_table() const
Definition interpreter.hpp:50
const std::string & cache_namespace() const
Definition interpreter.hpp:48
const std::unordered_map< ir::NodeId, continuum::Value > & active_values() const
Checkpoint run_until(ir::NodeId node_id)
void set_memo_table(MemoTable *memo)
Definition interpreter.hpp:38
void set_embedding_provider(EmbeddingProvider *ep)
Definition interpreter.hpp:40
SemanticCacheIndex * semantic_cache() const
Definition interpreter.hpp:51
void set_cache_namespace(std::string ns)
Definition interpreter.hpp:43
void begin(const ir::Graph &g, const std::unordered_map< ir::NodeId, continuum::Value > &inputs)
void set_memory_graph(MemoryGraphStore *mg)
Definition interpreter.hpp:42
Interpreter(backend::BackendRegistry &backends, KVCacheIndex &cache, const ReusePolicy *policy=nullptr)
continuum::Value step(const ir::Node &n, const std::vector< continuum::Value > &input_values)
void set_observer(ReuseObserver *observer)
Definition interpreter.hpp:46
std::vector< continuum::Value > run(const ir::Graph &g, const std::unordered_map< ir::NodeId, continuum::Value > &inputs)
MemoryGraphStore * memory_graph() const
Definition interpreter.hpp:54
EmbeddingProvider * embedding_provider() const
Definition interpreter.hpp:52
void set_layer_cache(LayerKVCacheIndex *lc)
Definition interpreter.hpp:41
Definition kv_prefix_cache.hpp:35
Definition layer_cache.hpp:66
Definition memo_table.hpp:55
Definition memory_graph.hpp:33
Definition observer.hpp:47
std::vector< std::vector< ir::NodeId > > ExecutionPlan
Definition scheduler.hpp:9
Definition semantic_cache.hpp:54
std::uint64_t NodeId
Definition node.hpp:13
Definition checkpoint.hpp:12
continuum::Value convert_value_for_backend(const continuum::Value &value, const std::string &target_backend)
std::variant< TensorValue, MlxTensorValue, TokensValue, SchemaValue, std::string, double, int64_t > Value
Definition value.hpp:30
Definition node.hpp:51
Definition checkpoint.hpp:26
Definition semantic_cache.hpp:20
Definition session.hpp:29