Class: Legion::Extensions::Llm::Ollama::Provider
- Inherits:
-
Provider
- Object
- Provider
- Legion::Extensions::Llm::Ollama::Provider
- Includes:
- Logging::Helper
- 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
- .capabilities ⇒ Object
- .configuration_requirements ⇒ Object
- .default_tier ⇒ Object
- .default_transport ⇒ Object
- .local? ⇒ Boolean
- .slug ⇒ Object
Instance Method Summary collapse
- #api_base ⇒ Object
- #completion_url ⇒ Object
- #config_base_url ⇒ Object
- #discover_offerings(live: false, raise_on_unreachable: false, **filters) ⇒ Object
- #embedding_url ⇒ Object
- #fetch_model_detail(model_name) ⇒ Object
- #list_models(live: false, **filters) ⇒ 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
- #translator ⇒ Object
- #version_url ⇒ Object
Class Attribute Details
.registry_publisher ⇒ Object
24 25 26 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 24 def registry_publisher @registry_publisher ||= Ollama.registry_publisher end |
Class Method Details
.capabilities ⇒ Object
22 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 22 def capabilities = Capabilities |
.configuration_requirements ⇒ Object
21 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 21 def configuration_requirements = [] |
.default_tier ⇒ Object
20 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 20 def default_tier = :local |
.default_transport ⇒ Object
19 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 19 def default_transport = :http |
.local? ⇒ Boolean
18 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 18 def local? = true |
.slug ⇒ Object
17 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 17 def slug = 'ollama' |
Instance Method Details
#api_base ⇒ Object
48 49 50 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 48 def api_base resolve_base_url || normalize_url(settings[:base_url] || settings[:endpoint] || 'http://127.0.0.1:11434') end |
#completion_url ⇒ Object
56 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 56 def completion_url = '/api/chat' |
#config_base_url ⇒ Object
52 53 54 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 52 def config_base_url config.respond_to?(:base_url) ? config.base_url : settings[:base_url] end |
#discover_offerings(live: false, raise_on_unreachable: false, **filters) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 87 def discover_offerings(live: false, raise_on_unreachable: false, **filters) return filter_cached_offerings(Array(@cached_offerings), filters) unless live provider_health = health(live:) @cached_offerings = discover_live_offerings(filters, provider_health, live:) log_discover_complete(@cached_offerings) @cached_offerings rescue Faraday::ConnectionFailed, Faraday::TimeoutError => e log.warn("[#{slug}] instance=#{provider_instance_id} unreachable: #{e.}") raise if raise_on_unreachable [] end |
#embedding_url ⇒ Object
61 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 61 def (**) = '/api/embed' |
#fetch_model_detail(model_name) ⇒ Object
109 110 111 112 113 114 115 116 117 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 109 def fetch_model_detail(model_name) raw = show_model(model_name) context_window = extract_context_window(raw) { context_window: context_window, capabilities: extract_capabilities(raw) }.compact rescue StandardError => e handle_exception(e, level: :warn, handled: true, operation: 'ollama.fetch_model_detail', model: model_name) nil end |
#list_models(live: false, **filters) ⇒ Object
80 81 82 83 84 85 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 80 def list_models(live: false, **filters) log.debug { "ollama provider discovering models endpoint=#{api_base}#{models_url}" } super.tap do |models| log.debug { "ollama provider discovered model_count=#{models.size}" } end end |
#list_running_models ⇒ Object
65 66 67 68 69 70 71 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 65 def list_running_models log.debug { "ollama provider listing running models endpoint=#{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
58 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 58 def models_url = '/api/tags' |
#pull_model(model, stream: false) ⇒ Object
119 120 121 122 123 124 125 126 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 119 def pull_model(model, stream: false) log.debug { "ollama provider pulling model=#{model} stream=#{stream}" } 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
62 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 62 def pull_url = '/api/pull' |
#readiness(live: false) ⇒ Object
73 74 75 76 77 78 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 73 def readiness(live: false) log.debug { "ollama provider checking readiness live=#{live} endpoint=#{api_base}" } super.tap do || self.class.registry_publisher.publish_readiness_async() if live end end |
#running_models_url ⇒ Object
59 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 59 def running_models_url = '/api/ps' |
#settings ⇒ Object
40 41 42 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 40 def settings Ollama.default_settings end |
#show_model(model) ⇒ Object
101 102 103 104 105 106 107 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 101 def show_model(model) log.debug { "ollama provider fetching model details model=#{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
60 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 60 def show_model_url = '/api/show' |
#stream_url ⇒ Object
57 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 57 def stream_url = '/api/chat' |
#translator ⇒ Object
44 45 46 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 44 def translator @translator ||= Translator.new(config: config) end |
#version_url ⇒ Object
63 |
# File 'lib/legion/extensions/llm/ollama/provider.rb', line 63 def version_url = '/api/version' |