Module: Legion::LLM::Cache
- Extended by:
- Cache::Helper, Legion::Logging::Helper
- Defined in:
- lib/legion/llm/cache.rb,
lib/legion/llm/cache/response.rb
Defined Under Namespace
Modules: Response
Constant Summary collapse
- DEFAULT_TTL =
300
Class Method Summary collapse
- .cache_namespace ⇒ Object
-
.enabled? ⇒ Boolean
Returns true if response caching is enabled in settings and Legion::Cache is loaded.
-
.get(cache_key) ⇒ Object
Returns the cached response hash, or nil on miss / cache unavailable.
-
.key(model:, provider:, messages:, temperature: nil, tools: nil, schema: nil) ⇒ Object
Generates a deterministic SHA256 cache key from request parameters.
-
.set(cache_key, response, ttl: DEFAULT_TTL) ⇒ Object
Stores a response in the cache with the given TTL.
Class Method Details
.cache_namespace ⇒ Object
17 |
# File 'lib/legion/llm/cache.rb', line 17 def cache_namespace = '' |
.enabled? ⇒ Boolean
Returns true if response caching is enabled in settings and Legion::Cache is loaded.
61 62 63 64 65 |
# File 'lib/legion/llm/cache.rb', line 61 def enabled? return false unless available? Legion::LLM::Settings.value(:prompt_caching, :response_cache, :enabled, default: true) != false end |
.get(cache_key) ⇒ Object
Returns the cached response hash, or nil on miss / cache unavailable.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/legion/llm/cache.rb', line 33 def get(cache_key) return nil unless available? raw = cache_backend_get(cache_key) if raw.nil? log.debug("LLM cache miss key=#{cache_key}") return nil end Legion::JSON.load(raw) rescue StandardError => e handle_exception(e, level: :warn, handled: true, operation: 'llm.cache.get', key: cache_key) nil end |
.key(model:, provider:, messages:, temperature: nil, tools: nil, schema: nil) ⇒ Object
Generates a deterministic SHA256 cache key from request parameters.
20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/legion/llm/cache.rb', line 20 def key(model:, provider:, messages:, temperature: nil, tools: nil, schema: nil) payload = Legion::JSON.dump({ model: model.to_s, provider: provider.to_s, messages: , temperature: temperature, tools: tools, schema: schema }) Digest::SHA256.hexdigest(payload) end |
.set(cache_key, response, ttl: DEFAULT_TTL) ⇒ Object
Stores a response in the cache with the given TTL.
49 50 51 52 53 54 55 56 57 58 |
# File 'lib/legion/llm/cache.rb', line 49 def set(cache_key, response, ttl: DEFAULT_TTL) return false unless available? cache_backend_set(cache_key, Legion::JSON.dump(response), ttl: ttl) log.debug("LLM cache write key=#{cache_key} ttl=#{ttl}") true rescue StandardError => e handle_exception(e, level: :warn, handled: true, operation: 'llm.cache.set', key: cache_key) false end |