Module: Legion::LLM::Discovery::Ollama

Extended by:
Legion::Logging::Helper
Defined in:
lib/legion/llm/discovery/ollama.rb

Class Method Summary collapse

Class Method Details

.model_available?(name) ⇒ Boolean

Returns:

  • (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_namesObject



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

.modelsObject



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

Returns:

  • (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