whoosh 1.9.0 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b74890ede8ed95aadeafdd55439b0a267ec521ecb5c84fd879807f29789a9d9a
4
- data.tar.gz: aa04e3dbf492846d8f06fe057ef657a137065a6b8069421c24013a4102b63511
3
+ metadata.gz: 035c0a8c4cfc32ee16cba0eba7e84e23ec1c510f41bd541a8409fa59dc5dbbd2
4
+ data.tar.gz: aca768fe55956b76f30b9296fe9ee156b3547ce2089a49a5edcf18ab7ce33d07
5
5
  SHA512:
6
- metadata.gz: 884921ba3182cef85545192b08301ced1d992705621ce0860e55e916da2ece5f8d1b122f676a88e0e7b18dcbb9f271e01e2e46bbd5439962cd476bfb73173078
7
- data.tar.gz: 8dcb16978fa00228a18de47e42cbe29c0e3d8da84c3bf3a6b4b52842ea9ce4cbcc7a5930b1c471c8b2d06065b6793db6574a8ec2392e7f9707e07d73940be0fb
6
+ metadata.gz: f3f877e2e128bd4b16ffece2ebf7a41b87678185906688cac6d514e70c28d0bb4c0bcebd1e466368a2fc591af83f8e89b6b15d5c6b59d493a8e5a2bc78c3da76
7
+ data.tar.gz: aca365000fb9776754d29038d60061dcf92f71ade132e0ea602f80f0defe47a2fe83d5c3ef435e6e241b9bbd2cbdcb9fd1f4c34d38f99f160befd1b0f322930c
data/lib/whoosh/ai/llm.rb CHANGED
@@ -2,15 +2,48 @@
2
2
 
3
3
  module Whoosh
4
4
  module AI
5
+ # Bounded LRU cache. Ruby's Hash preserves insertion order, so we reorder
6
+ # on read (delete+reinsert) and evict the oldest entry when over capacity.
7
+ class LRUCache
8
+ def initialize(max_size)
9
+ @max_size = max_size
10
+ @store = {}
11
+ @mutex = Mutex.new
12
+ end
13
+
14
+ def [](key)
15
+ @mutex.synchronize do
16
+ return nil unless @store.key?(key)
17
+ value = @store.delete(key)
18
+ @store[key] = value
19
+ end
20
+ end
21
+
22
+ def []=(key, value)
23
+ @mutex.synchronize do
24
+ @store.delete(key) if @store.key?(key)
25
+ @store[key] = value
26
+ @store.shift while @store.size > @max_size
27
+ value
28
+ end
29
+ end
30
+
31
+ def size
32
+ @store.size
33
+ end
34
+ end
35
+
36
+ DEFAULT_MODEL = "claude-sonnet-4-6"
37
+ DEFAULT_CACHE_MAX = 1000
38
+
5
39
  class LLM
6
40
  attr_reader :provider, :model
7
41
 
8
- def initialize(provider: "auto", model: nil, cache_enabled: true)
42
+ def initialize(provider: "auto", model: nil, cache_enabled: true, cache_size: DEFAULT_CACHE_MAX)
9
43
  @provider = provider
10
44
  @model = model
11
45
  @cache_enabled = cache_enabled
12
- @cache = cache_enabled ? {} : nil
13
- @mutex = Mutex.new
46
+ @cache = cache_enabled ? LRUCache.new(cache_size) : nil
14
47
  @ruby_llm = nil
15
48
  end
16
49
 
@@ -32,10 +65,7 @@ module Whoosh
32
65
  temperature: temperature
33
66
  )
34
67
 
35
- # Cache result
36
- if use_cache && @cache
37
- @mutex.synchronize { @cache[cache_key] = result }
38
- end
68
+ @cache[cache_key] = result if use_cache && @cache
39
69
 
40
70
  result
41
71
  end
@@ -87,7 +117,7 @@ module Whoosh
87
117
 
88
118
  if @ruby_llm
89
119
  # Use ruby_llm gem
90
- chat = RubyLLM.chat(model: model || "claude-sonnet-4-20250514")
120
+ chat = RubyLLM.chat(model: model || DEFAULT_MODEL)
91
121
  chat.with_instructions(system) if system
92
122
  response = chat.ask(messages.last[:content])
93
123
  response.content
data/lib/whoosh/ai.rb CHANGED
@@ -11,7 +11,8 @@ module Whoosh
11
11
  LLM.new(
12
12
  provider: ai_config["provider"] || "auto",
13
13
  model: ai_config["model"],
14
- cache_enabled: ai_config["cache"] != false
14
+ cache_enabled: ai_config["cache"] != false,
15
+ cache_size: ai_config["cache_size"] || DEFAULT_CACHE_MAX
15
16
  )
16
17
  end
17
18
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Whoosh
4
- VERSION = "1.9.0"
4
+ VERSION = "1.9.1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whoosh
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
4
+ version: 1.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johannes Dwi Cahyo