Continuum C++ API
Unified runtime for token + tensor execution
Loading...
Searching...
No Matches
session.hpp
Go to the documentation of this file.
1#pragma once
2
9
10#include <cstdint>
11#include <memory>
12#include <optional>
13#include <string>
14#include <unordered_map>
15#include <vector>
16
17namespace continuum::runtime {
18
19class MemoTable;
20class LayerKVCacheIndex;
21class MemoryGraphStore;
22
23enum class ReusePolicyKind {
24 Always,
25 Never,
27};
28
31 std::int32_t min_prefix_len = 0;
32
33 static ReusePolicy always() { return {ReusePolicyKind::Always, 0}; }
34 static ReusePolicy never() { return {ReusePolicyKind::Never, 0}; }
35 static ReusePolicy threshold(std::int32_t min_len) {
37 }
38
39 bool should_attempt(const std::vector<std::int32_t>& /*input_tokens*/,
40 std::int32_t potential_prefix_len) const {
41 if (kind == ReusePolicyKind::Never) return false;
43 return potential_prefix_len >= min_prefix_len;
44 }
45 return true;
46 }
47};
48
50 std::string node_name;
51 bool cache_hit = false;
52 bool memo_hit = false;
53 bool semantic_hit = false;
54 float semantic_similarity = 0.0f;
55 std::int32_t prefix_hit_len = 0;
56 std::int32_t total_tokens = 0;
57 std::int32_t tokens_saved = 0;
58 std::int32_t tokens_sent = 0;
59 std::int32_t compute_steps = 0;
60};
61
63 std::string session_id;
64 std::vector<ReuseStepRecord> steps;
65 std::int64_t total_lookups = 0;
66 std::int64_t total_hits = 0;
67 std::int64_t total_tokens_saved = 0;
68 std::int64_t total_tokens_processed = 0;
69 std::int64_t run_count = 0;
70
71 double hit_rate() const {
72 return total_lookups > 0 ? static_cast<double>(total_hits) / static_cast<double>(total_lookups) : 0.0;
73 }
74 double token_reduction_ratio() const {
75 const auto total = total_tokens_saved + total_tokens_processed;
76 return total > 0 ? static_cast<double>(total_tokens_saved) / static_cast<double>(total) : 0.0;
77 }
78 void reset() {
79 steps.clear();
80 total_lookups = 0;
81 total_hits = 0;
84 run_count = 0;
85 }
86};
87
90 std::string tier;
91 std::size_t entries = 0;
92 std::size_t capacity = 0;
93 std::size_t bytes = 0;
94};
95
96class Session {
97 public:
98 explicit Session(const std::string& id, backend::BackendRegistry& backends,
99 std::size_t max_cache_entries = 8192);
100 explicit Session(const std::string& id, backend::BackendRegistry& backends,
101 KVCacheIndex& external_cache);
102
103 std::vector<continuum::Value> run(
104 const ir::Graph& g, const std::unordered_map<ir::NodeId, continuum::Value>& inputs);
105
106 const ReusePolicy& policy() const { return policy_; }
107 void set_policy(const ReusePolicy& policy) { policy_ = policy; }
108 void set_memo_table(MemoTable* memo) { memo_table_ = memo; }
109 void set_semantic_cache(SemanticCacheIndex* sc) { semantic_cache_ = sc; }
110 void set_embedding_provider(EmbeddingProvider* ep) { embedder_ = ep; }
111 void set_layer_cache(LayerKVCacheIndex* lc) { layer_cache_ = lc; }
112 void set_memory_graph(MemoryGraphStore* mg) { memory_graph_ = mg; }
113 void set_cache_namespace(std::string ns) { cache_namespace_ = std::move(ns); }
114 const std::string& cache_namespace() const { return cache_namespace_; }
118 ReuseObserver* observer() const { return observer_; }
119
120 const ReuseMetrics& metrics() const { return metrics_; }
121 void reset_metrics() { metrics_.reset(); }
122
123 KVCacheIndex& cache() { return cache_; }
124 const KVCacheIndex& cache() const { return cache_; }
125 MemoTable* memo_table() const { return memo_table_; }
126 SemanticCacheIndex* semantic_cache() const { return semantic_cache_; }
127
129 std::vector<CacheTierStats> cache_stats() const;
130
131 const std::string& id() const { return session_id_; }
132 std::int64_t run_count() const { return metrics_.run_count; }
133 std::size_t cache_size() const { return cache_.size(); }
134
135 bool save_cache_metadata(const std::string& path) const;
136 bool load_cache_metadata(const std::string& path);
137
138 private:
139 std::string session_id_;
140 backend::BackendRegistry& backends_;
141 std::unique_ptr<KVCacheIndex> owned_cache_;
142 KVCacheIndex& cache_;
143 ReusePolicy policy_;
144 ReuseMetrics metrics_;
145 MemoTable* memo_table_ = nullptr;
146 SemanticCacheIndex* semantic_cache_ = nullptr;
147 EmbeddingProvider* embedder_ = nullptr;
148 LayerKVCacheIndex* layer_cache_ = nullptr;
149 MemoryGraphStore* memory_graph_ = nullptr;
150 std::string cache_namespace_;
151 ReuseObserver* observer_ = nullptr;
152};
153
154} // namespace continuum::runtime
Definition backend.hpp:54
Definition graph.hpp:11
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
Definition semantic_cache.hpp:54
Definition session.hpp:96
const KVCacheIndex & cache() const
Definition session.hpp:124
Session(const std::string &id, backend::BackendRegistry &backends, std::size_t max_cache_entries=8192)
void set_observer(ReuseObserver *observer)
Definition session.hpp:117
std::size_t cache_size() const
Definition session.hpp:133
void set_semantic_cache(SemanticCacheIndex *sc)
Definition session.hpp:109
void set_embedding_provider(EmbeddingProvider *ep)
Definition session.hpp:110
MemoTable * memo_table() const
Definition session.hpp:125
Session(const std::string &id, backend::BackendRegistry &backends, KVCacheIndex &external_cache)
std::int64_t run_count() const
Definition session.hpp:132
const std::string & id() const
Definition session.hpp:131
void set_cache_namespace(std::string ns)
Definition session.hpp:113
const ReusePolicy & policy() const
Definition session.hpp:106
bool save_cache_metadata(const std::string &path) const
std::vector< continuum::Value > run(const ir::Graph &g, const std::unordered_map< ir::NodeId, continuum::Value > &inputs)
const ReuseMetrics & metrics() const
Definition session.hpp:120
void set_memo_table(MemoTable *memo)
Definition session.hpp:108
void reset_metrics()
Definition session.hpp:121
void set_policy(const ReusePolicy &policy)
Definition session.hpp:107
void set_memory_graph(MemoryGraphStore *mg)
Definition session.hpp:112
void set_layer_cache(LayerKVCacheIndex *lc)
Definition session.hpp:111
const std::string & cache_namespace() const
Definition session.hpp:114
bool load_cache_metadata(const std::string &path)
std::vector< CacheTierStats > cache_stats() const
Occupancy of every attached tier; detached tiers are omitted.
SemanticCacheIndex * semantic_cache() const
Definition session.hpp:126
KVCacheIndex & cache()
Definition session.hpp:123
ReuseObserver * observer() const
Definition session.hpp:118
Definition checkpoint.hpp:12
ReusePolicyKind
Definition session.hpp:23
Occupancy snapshot of one reuse tier, for observability.
Definition session.hpp:89
std::size_t entries
Resident entries.
Definition session.hpp:91
std::size_t bytes
Approximate resident bytes (see each tier's estimated_bytes).
Definition session.hpp:93
std::string tier
"prefix_kv", "memo", "semantic", "layer_kv", or "memory_graph".
Definition session.hpp:90
std::size_t capacity
Entry bound the tier evicts at.
Definition session.hpp:92
Definition semantic_cache.hpp:20
Definition session.hpp:62
std::vector< ReuseStepRecord > steps
Definition session.hpp:64
std::int64_t total_tokens_saved
Definition session.hpp:67
double token_reduction_ratio() const
Definition session.hpp:74
std::int64_t total_lookups
Definition session.hpp:65
double hit_rate() const
Definition session.hpp:71
std::int64_t total_hits
Definition session.hpp:66
std::int64_t run_count
Definition session.hpp:69
std::int64_t total_tokens_processed
Definition session.hpp:68
void reset()
Definition session.hpp:78
std::string session_id
Definition session.hpp:63
Definition session.hpp:29
static ReusePolicy never()
Definition session.hpp:34
static ReusePolicy always()
Definition session.hpp:33
bool should_attempt(const std::vector< std::int32_t > &, std::int32_t potential_prefix_len) const
Definition session.hpp:39
std::int32_t min_prefix_len
Definition session.hpp:31
static ReusePolicy threshold(std::int32_t min_len)
Definition session.hpp:35
ReusePolicyKind kind
Definition session.hpp:30
Definition session.hpp:49
std::int32_t total_tokens
Definition session.hpp:56
std::string node_name
Definition session.hpp:50
bool cache_hit
Definition session.hpp:51
std::int32_t tokens_sent
Definition session.hpp:58
std::int32_t compute_steps
Definition session.hpp:59
std::int32_t tokens_saved
Definition session.hpp:57
float semantic_similarity
Definition session.hpp:54
bool memo_hit
Definition session.hpp:52
std::int32_t prefix_hit_len
Definition session.hpp:55
bool semantic_hit
Definition session.hpp:53