Module: Legion::LLM::Discovery::Ollama
- Extended by:
- Legion::Logging::Helper
- Defined in:
- lib/legion/llm/discovery/ollama.rb
Class Method Summary collapse
- .model_available?(name) ⇒ Boolean
- .model_names ⇒ Object
- .model_size(name) ⇒ Object
- .models ⇒ Object
- .refresh! ⇒ Object
- .reset! ⇒ Object
- .stale? ⇒ Boolean
Class Method Details
.model_available?(name) ⇒ Boolean
23 24 25 |
# File 'lib/legion/llm/discovery/ollama.rb', line 23 def model_available?(name) model_names.any? { |n| n == name || n.start_with?("#{name}:") } end |
.model_names ⇒ Object
19 20 21 |
# File 'lib/legion/llm/discovery/ollama.rb', line 19 def model_names models.map { |m| m['name'] } end |
.model_size(name) ⇒ Object
27 28 29 |
# File 'lib/legion/llm/discovery/ollama.rb', line 27 def model_size(name) models.find { |m| m['name'] == name || m['name'].start_with?("#{name}:") }&.dig('size') end |
.models ⇒ Object
14 15 16 17 |
# File 'lib/legion/llm/discovery/ollama.rb', line 14 def models ensure_fresh @models || [] end |
.refresh! ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/legion/llm/discovery/ollama.rb', line 31 def refresh! response = connection.get('/api/tags') if response.success? parsed = ::JSON.parse(response.body) @models = parsed['models'] || [] log.debug("Discovery::Ollama model list refreshed count=#{@models.size}") else log.warn("Discovery::Ollama HTTP failure status=#{response.status}") @models ||= [] end rescue StandardError => e handle_exception(e, level: :warn) @models ||= [] ensure @last_refreshed_at = Time.now end |
.reset! ⇒ Object
48 49 50 51 |
# File 'lib/legion/llm/discovery/ollama.rb', line 48 def reset! @models = nil @last_refreshed_at = nil end |
.stale? ⇒ Boolean
53 54 55 56 57 58 |
# File 'lib/legion/llm/discovery/ollama.rb', line 53 def stale? return true if @last_refreshed_at.nil? ttl = discovery_settings[:refresh_seconds] || 60 Time.now - @last_refreshed_at > ttl end |