Class: Legion::Extensions::Llm::Ollama::Provider

Inherits:
Provider
  • Object
show all
Defined in:
lib/legion/extensions/llm/ollama/provider.rb

Overview

Ollama provider implementation for the Legion::Extensions::Llm base provider contract.

Defined Under Namespace

Modules: Capabilities

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.registry_publisherObject



19
20
21
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 19

def registry_publisher
  @registry_publisher ||= Ollama.registry_publisher
end

Class Method Details

.capabilitiesObject



17
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 17

def capabilities = Capabilities

.configuration_requirementsObject



16
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 16

def configuration_requirements = []

.local?Boolean

Returns:

  • (Boolean)


15
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 15

def local? = true

.slugObject



14
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 14

def slug = 'ollama'

Instance Method Details

#api_baseObject



39
40
41
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 39

def api_base
  resolve_base_url || normalize_url(settings[:base_url] || '127.0.0.1:11434')
end

#completion_urlObject



47
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 47

def completion_url = '/api/chat'

#config_base_urlObject



43
44
45
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 43

def config_base_url
  settings[:base_url]
end

#embedding_urlObject



52
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 52

def embedding_url(**) = '/api/embed'

#list_modelsObject



71
72
73
74
75
76
77
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 71

def list_models
  log.info { "discovering models from #{api_base}#{models_url}" }
  super.tap do |models|
    log.info { "discovered #{models.size} model(s) from Ollama" }
    self.class.registry_publisher.publish_models_async(models, readiness: readiness(live: false))
  end
end

#list_running_modelsObject



56
57
58
59
60
61
62
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 56

def list_running_models
  log.info { "listing running models from #{api_base}#{running_models_url}" }
  connection.get(running_models_url).body.fetch('models', [])
rescue StandardError => e
  handle_exception(e, level: :error, handled: true, operation: 'ollama.list_running_models')
  []
end

#models_urlObject



49
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 49

def models_url = '/api/tags'

#pull_model(model, stream: false) ⇒ Object



87
88
89
90
91
92
93
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 87

def pull_model(model, stream: false)
  log.info { "pulling model #{model} stream=#{stream}" }
  connection.post(pull_url, { model: model, stream: stream }).body
rescue StandardError => e
  handle_exception(e, level: :error, handled: true, operation: 'ollama.pull_model')
  raise
end

#pull_urlObject



53
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 53

def pull_url = '/api/pull'

#readiness(live: false) ⇒ Object



64
65
66
67
68
69
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 64

def readiness(live: false)
  log.info { "checking readiness live=#{live} at #{api_base}" }
  super.tap do ||
    self.class.registry_publisher.publish_readiness_async() if live
  end
end

#running_models_urlObject



50
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 50

def running_models_url = '/api/ps'

#settingsObject



35
36
37
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 35

def settings
  Ollama.default_settings
end

#show_model(model) ⇒ Object



79
80
81
82
83
84
85
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 79

def show_model(model)
  log.info { "fetching model details for #{model}" }
  connection.post(show_model_url, { model: model }).body
rescue StandardError => e
  handle_exception(e, level: :error, handled: true, operation: 'ollama.show_model')
  raise
end

#show_model_urlObject



51
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 51

def show_model_url = '/api/show'

#stream_urlObject



48
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 48

def stream_url = '/api/chat'

#version_urlObject



54
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 54

def version_url = '/api/version'