Class: Legion::Extensions::Ollama::Actor::ModelSync
- Inherits:
-
Actors::Once
- Object
- Actors::Once
- Legion::Extensions::Ollama::Actor::ModelSync
- Includes:
- Logging::Helper
- Defined in:
- lib/legion/extensions/ollama/actors/model_sync.rb
Overview
Once actor — runs once shortly after extension load. Reads legion.ollama.s3 and legion.ollama.default_models from settings and calls import_from_s3 for any model not already present locally.
Settings example:
{
"legion": {
"ollama": {
"s3": {
"bucket": "legion",
"prefix": "ollama/models",
"endpoint": "https://s3.example.internal"
},
"default_models": ["qwen3.5:4b", "nomic-embed-text:latest"]
}
}
}
Instance Method Summary collapse
-
#delay ⇒ Object
Run 5 seconds after extension load to allow the rest of startup to complete.
- #enabled? ⇒ Boolean
- #manual ⇒ Object
- #runner_class ⇒ Object
- #use_runner? ⇒ Boolean
Instance Method Details
#delay ⇒ Object
Run 5 seconds after extension load to allow the rest of startup to complete.
28 29 30 |
# File 'lib/legion/extensions/ollama/actors/model_sync.rb', line 28 def delay 5.0 end |
#enabled? ⇒ Boolean
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/legion/extensions/ollama/actors/model_sync.rb', line 40 def enabled? return false unless defined?(Legion::Settings) models = Legion::Settings.dig(:ollama, :default_models) s3_cfg = Legion::Settings.dig(:ollama, :s3) models.is_a?(Array) && !models.empty? && s3_cfg.is_a?(Hash) && s3_cfg[:bucket] rescue StandardError => e handle_exception(e, level: :warn, handled: true) false end |
#manual ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/legion/extensions/ollama/actors/model_sync.rb', line 51 def manual models = Legion::Settings.dig(:ollama, :default_models) || [] s3_cfg = Legion::Settings.dig(:ollama, :s3) bucket = s3_cfg[:bucket] s3_opts = s3_cfg.except(:bucket) client = Object.new.extend(Legion::Extensions::Ollama::Runners::S3Models) models_path = ENV.fetch('OLLAMA_MODELS', File.join(Dir.home, '.ollama', 'models')) models.each do |model| if model_present_locally?(model, models_path) log.debug "[ModelSync] #{model} already present locally, skipping" next end log.info "[ModelSync] importing #{model} from S3" result = client.import_from_s3(model: model, bucket: bucket, models_path: models_path, **s3_opts) if result[:status] == 200 log.info "[ModelSync] imported #{model} (blobs_downloaded=#{result[:blobs_downloaded]}, blobs_skipped=#{result[:blobs_skipped]})" else log.warn "[ModelSync] failed to import #{model}: #{result.inspect}" end rescue StandardError => e handle_exception(e, level: :error, handled: true, model: model) end end |
#runner_class ⇒ Object
36 37 38 |
# File 'lib/legion/extensions/ollama/actors/model_sync.rb', line 36 def runner_class self.class end |
#use_runner? ⇒ Boolean
32 33 34 |
# File 'lib/legion/extensions/ollama/actors/model_sync.rb', line 32 def use_runner? false end |