Class: Legion::Extensions::Llm::Ollama::Provider
- Inherits:
-
Provider
- Object
- Provider
- Legion::Extensions::Llm::Ollama::Provider
- 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
- #api_base ⇒ Object
- #completion_url ⇒ Object
- #config_base_url ⇒ Object
- #embedding_url ⇒ Object
- #list_models ⇒ Object
- #list_running_models ⇒ Object
- #models_url ⇒ Object
- #pull_model(model, stream: false) ⇒ Object
- #pull_url ⇒ Object
- #readiness(live: false) ⇒ Object
- #running_models_url ⇒ Object
- #settings ⇒ Object
- #show_model(model) ⇒ Object
- #show_model_url ⇒ Object
- #stream_url ⇒ Object
- #version_url ⇒ Object
Class Attribute Details
.registry_publisher ⇒ Object
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
.capabilities ⇒ Object
17 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 17 def capabilities = Capabilities |
.configuration_requirements ⇒ Object
16 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 16 def configuration_requirements = [] |
.local? ⇒ Boolean
15 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 15 def local? = true |
.slug ⇒ Object
14 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 14 def slug = 'ollama' |
Instance Method Details
#api_base ⇒ Object
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_url ⇒ Object
47 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 47 def completion_url = '/api/chat' |
#config_base_url ⇒ Object
43 44 45 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 43 def config_base_url settings[:base_url] end |
#embedding_url ⇒ Object
52 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 52 def (**) = '/api/embed' |
#list_models ⇒ Object
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_models ⇒ Object
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_url ⇒ Object
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_url ⇒ Object
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_url ⇒ Object
50 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 50 def running_models_url = '/api/ps' |
#settings ⇒ Object
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_url ⇒ Object
51 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 51 def show_model_url = '/api/show' |
#stream_url ⇒ Object
48 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 48 def stream_url = '/api/chat' |
#version_url ⇒ Object
54 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 54 def version_url = '/api/version' |