Continuum C++ API
Unified runtime for token + tensor execution
Loading...
Searching...
No Matches
semantic_cache.hpp
Go to the documentation of this file.
1#pragma once
2
4
5#include <cstdint>
6#include <functional>
7#include <memory>
8#include <mutex>
9#include <optional>
10#include <string>
11#include <unordered_map>
12#include <vector>
13
14namespace continuum::runtime {
15
21 virtual ~EmbeddingProvider() = default;
23 virtual std::vector<float> embed(const std::string& text) const = 0;
24 virtual std::size_t dimension() const = 0;
28 virtual std::string identity() const = 0;
29};
30
32 std::vector<float> embedding;
33 std::vector<std::uint8_t> cached_output;
34 std::string model_id;
35 std::int64_t last_access_ns = 0;
36 std::string cache_namespace;
38 std::string embedder_id;
40 std::string prompt;
41};
42
55 public:
56 explicit SemanticCacheIndex(std::size_t max_entries = 2048,
57 float similarity_threshold = 0.85f);
58
59 struct LookupResult {
60 std::vector<std::uint8_t> output;
61 float similarity = 0.0f;
62 bool above_threshold = false;
63 std::string prompt;
64 std::int32_t verifier_rejections = 0;
65 };
66
68 LookupResult lookup(const std::vector<float>& query_embedding,
69 const std::string& model_id,
70 const std::string& cache_namespace = {},
71 const std::string& embedder_id = {},
72 const std::string& query_prompt = {}) const;
73
74 void insert(const std::vector<float>& embedding,
75 const std::string& model_id,
76 std::vector<std::uint8_t> output,
77 const std::string& cache_namespace = {},
78 const std::string& embedder_id = {},
79 const std::string& prompt = {});
80
82 void set_verifier(std::shared_ptr<const HitVerifier> verifier);
83 std::shared_ptr<const HitVerifier> verifier() const;
85 std::int64_t verifier_rejections() const;
86
87 void clear();
88 std::size_t size() const;
90 std::size_t max_entries() const { return max_entries_; }
92 std::size_t estimated_bytes() const;
93 float similarity_threshold() const;
95
96 static float cosine_similarity(const std::vector<float>& a,
97 const std::vector<float>& b);
98
99 private:
100 mutable std::mutex mu_;
101 // Mutable so a const lookup can refresh LRU recency on a hit.
102 mutable std::vector<SemanticCacheEntry> entries_;
103 std::size_t max_entries_;
104 float similarity_threshold_;
105 mutable std::uint64_t clock_ = 0;
106 std::shared_ptr<const HitVerifier> verifier_ = std::make_shared<LexicalNearMissVerifier>();
107 mutable std::int64_t verifier_rejections_ = 0;
108 // Verdicts per (cached prompt, query prompt): a Session's metrics pass and
109 // its interpreter look up the same prompt, and a verifier may be costly.
110 mutable std::unordered_map<std::string, bool> verdicts_;
111 static constexpr std::size_t kMaxVerdicts = 4096;
112};
113
115 public:
116 explicit BruteForceEmbeddingProvider(std::size_t dim = 64);
117
118 std::vector<float> embed(const std::string& text) const override;
119 std::size_t dimension() const override;
121 std::string identity() const override;
122
123 private:
124 std::size_t dim_;
125};
126
127} // namespace continuum::runtime
Definition semantic_cache.hpp:114
std::string identity() const override
"continuum/char-ngram-v1:<dim>".
std::vector< float > embed(const std::string &text) const override
Embed text; the result must have dimension() elements.
Definition semantic_cache.hpp:54
void set_verifier(std::shared_ptr< const HitVerifier > verifier)
Replace the hit verifier; nullptr serves any candidate above threshold.
SemanticCacheIndex(std::size_t max_entries=2048, float similarity_threshold=0.85f)
std::size_t estimated_bytes() const
Approximate resident bytes: embeddings, outputs, ids, and per-entry overhead.
std::int64_t verifier_rejections() const
Candidates turned down by the verifier since construction / clear().
std::shared_ptr< const HitVerifier > verifier() const
LookupResult lookup(const std::vector< float > &query_embedding, const std::string &model_id, const std::string &cache_namespace={}, const std::string &embedder_id={}, const std::string &query_prompt={}) const
Best entry for the same model, namespace, and embedder identity.
std::size_t max_entries() const
Capacity in entries passed at construction.
Definition semantic_cache.hpp:90
static float cosine_similarity(const std::vector< float > &a, const std::vector< float > &b)
void insert(const std::vector< float > &embedding, const std::string &model_id, std::vector< std::uint8_t > output, const std::string &cache_namespace={}, const std::string &embedder_id={}, const std::string &prompt={})
Definition checkpoint.hpp:12
Definition semantic_cache.hpp:20
virtual std::string identity() const =0
virtual std::size_t dimension() const =0
virtual std::vector< float > embed(const std::string &text) const =0
Embed text; the result must have dimension() elements.
Definition semantic_cache.hpp:31
std::int64_t last_access_ns
Definition semantic_cache.hpp:35
std::vector< float > embedding
Definition semantic_cache.hpp:32
std::vector< std::uint8_t > cached_output
Definition semantic_cache.hpp:33
std::string embedder_id
EmbeddingProvider::identity() of the embedder that produced embedding.
Definition semantic_cache.hpp:38
std::string prompt
Prompt text the entry was cached for, checked by the HitVerifier.
Definition semantic_cache.hpp:40
std::string model_id
Definition semantic_cache.hpp:34
std::string cache_namespace
Definition semantic_cache.hpp:36
float similarity
Definition semantic_cache.hpp:61
std::int32_t verifier_rejections
candidates the verifier turned down
Definition semantic_cache.hpp:64
bool above_threshold
true when an answer is served
Definition semantic_cache.hpp:62
std::string prompt
prompt of the served entry
Definition semantic_cache.hpp:63
std::vector< std::uint8_t > output
Definition semantic_cache.hpp:60