Module: Legion::Extensions::Ollama

Extended by:
Core
Defined in:
lib/legion/extensions/ollama.rb,
lib/legion/extensions/ollama/client.rb,
lib/legion/extensions/ollama/version.rb,
lib/legion/extensions/ollama/transport.rb,
lib/legion/extensions/ollama/runners/chat.rb,
lib/legion/extensions/ollama/helpers/usage.rb,
lib/legion/extensions/ollama/runners/blobs.rb,
lib/legion/extensions/ollama/runners/fleet.rb,
lib/legion/extensions/ollama/helpers/client.rb,
lib/legion/extensions/ollama/helpers/errors.rb,
lib/legion/extensions/ollama/runners/models.rb,
lib/legion/extensions/ollama/runners/version.rb,
lib/legion/extensions/ollama/actors/model_sync.rb,
lib/legion/extensions/ollama/runners/s3_models.rb,
lib/legion/extensions/ollama/runners/embeddings.rb,
lib/legion/extensions/ollama/actors/model_worker.rb,
lib/legion/extensions/ollama/runners/completions.rb,
lib/legion/extensions/ollama/actors/endpoint_puller.rb,
lib/legion/extensions/ollama/transport/exchanges/llm_request.rb,
lib/legion/extensions/ollama/transport/messages/llm_response.rb

Defined Under Namespace

Modules: Actor, Helpers, Runners, Transport Classes: Client

Constant Summary collapse

VERSION =
'0.3.5'

Class Method Summary collapse

Class Method Details

.build_actorsObject

Called by the framework during autobuild. Runs normal actor discovery, then replaces the single ModelWorker entry with one concrete subclass per subscription entry in settings (each has a zero-arg initialize).



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/legion/extensions/ollama.rb', line 64

def self.build_actors
  super
  @actors.delete(:model_worker)

  subs = setting_value(settings, :subscriptions)
  valid_subscriptions = valid_fleet_subscriptions(subs)
  endpoint_configured = fleet_scheduler == :basic_get &&
                        nested_setting(settings, :fleet, :endpoint, :enabled) == true &&
                        valid_subscriptions.any?
  @actors.delete(:endpoint_puller) unless endpoint_configured

  return unless subs.is_a?(Array)
  return if fleet_scheduler == :basic_get

  subs.each do |sub|
    request_type   = setting_value(sub, :type)&.to_s
    model          = setting_value(sub, :model)&.to_s
    limits         = setting_value(sub, :limits) || {}
    context_window = setting_value(sub, :context_window) ||
                     setting_value(limits, :context_window)
    next unless request_type && model

    actor_name   = :"model_worker_#{request_type}_#{model.tr(':.', '__')}"
    worker_class = Class.new(Legion::Extensions::Ollama::Actor::ModelWorker) do
      define_method(:initialize) do
        super(request_type: request_type, model: model, context_window: context_window)
      end
    end

    @actors[actor_name] = {
      extension:      'lex-ollama',
      extension_name: :ollama,
      actor_name:     actor_name,
      actor_class:    worker_class,
      type:           'literal'
    }
  end
end

.default_settingsObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/legion/extensions/ollama.rb', line 39

def self.default_settings
  {
    s3:    {},
    fleet: {
      consumer_priority:       0,
      scheduler:               :basic_get,
      queue_expires_ms:        60_000,
      message_ttl_ms:          120_000,
      queue_max_length:        100,
      delivery_limit:          3,
      consumer_ack_timeout_ms: 300_000,
      endpoint:                {
        enabled:                        false,
        empty_lane_backoff_ms:          250,
        idle_backoff_ms:                1_000,
        max_consecutive_pulls_per_lane: 0,
        accept_when:                    []
      }
    }
  }
end

.fleet_schedulerObject



103
104
105
# File 'lib/legion/extensions/ollama.rb', line 103

def self.fleet_scheduler
  (nested_setting(settings, :fleet, :scheduler) || :basic_get).to_sym
end

.nested_setting(hash, *keys) ⇒ Object



124
125
126
127
128
129
130
# File 'lib/legion/extensions/ollama.rb', line 124

def self.nested_setting(hash, *keys)
  keys.reduce(hash) do |current, key|
    return nil unless current.respond_to?(:key?)

    setting_value(current, key)
  end
end

.setting_value(hash, key) ⇒ Object



115
116
117
118
119
120
121
122
# File 'lib/legion/extensions/ollama.rb', line 115

def self.setting_value(hash, key)
  return nil unless hash.respond_to?(:key?)

  string_key = key.to_s
  return hash[string_key] if hash.key?(string_key)

  hash[key] if hash.key?(key)
end

.valid_fleet_subscriptions(subscriptions) ⇒ Object



107
108
109
110
111
112
113
# File 'lib/legion/extensions/ollama.rb', line 107

def self.valid_fleet_subscriptions(subscriptions)
  return [] unless subscriptions.is_a?(Array)

  subscriptions.select do |sub|
    setting_value(sub, :type) && setting_value(sub, :model)
  end
end