Class: Ollama::Pipeline

Inherits:
Object
  • Object
show all
Defined in:
lib/ollama/pipeline.rb

Overview

Pipeline orchestrates the middleware execution chain. It wraps the transport and applies middleware in order.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(transport, middlewares: [], events: nil) ⇒ Pipeline

Returns a new instance of Pipeline.



12
13
14
15
16
# File 'lib/ollama/pipeline.rb', line 12

def initialize(transport, middlewares: [], events: nil)
  @transport = transport
  @middlewares = middlewares.dup.freeze
  @events = events || Events.new
end

Instance Attribute Details

#eventsObject (readonly)

Returns the value of attribute events.



10
11
12
# File 'lib/ollama/pipeline.rb', line 10

def events
  @events
end

#middlewaresObject (readonly)

Returns the value of attribute middlewares.



10
11
12
# File 'lib/ollama/pipeline.rb', line 10

def middlewares
  @middlewares
end

#transportObject (readonly)

Returns the value of attribute transport.



10
11
12
# File 'lib/ollama/pipeline.rb', line 10

def transport
  @transport
end

Instance Method Details

#call(request) ⇒ Ollama::Transport::Response

Execute a request through the pipeline

Parameters:

Returns:



32
33
34
35
36
37
# File 'lib/ollama/pipeline.rb', line 32

def call(request)
  env = { request: request, started_at: Process.clock_gettime(Process::CLOCK_MONOTONIC) }

  # Execute middleware chain
  execute_chain(request, env)
end

#stream(request) {|chunk| ... } ⇒ Ollama::Transport::Response

Execute a streaming request through the pipeline

Parameters:

Yields:

  • (chunk)

    Yields each chunk of the streaming response

Returns:



43
44
45
46
47
# File 'lib/ollama/pipeline.rb', line 43

def stream(request, &block)
  env = { request: request, started_at: Process.clock_gettime(Process::CLOCK_MONOTONIC) }

  execute_stream_chain(request, env, &block)
end

#use(middleware, **options) ⇒ Pipeline

Add a middleware to the pipeline

Parameters:

  • middleware (Class, Ollama::Middleware)

    Middleware class or instance

  • options (Hash)

    Options to pass to middleware constructor

Returns:

  • (Pipeline)

    New pipeline with middleware added (immutable)

Raises:

  • (ArgumentError)


22
23
24
25
26
27
# File 'lib/ollama/pipeline.rb', line 22

def use(middleware, **options)
  middleware_instance = middleware.is_a?(Class) ? middleware.new(**options) : middleware
  raise ArgumentError, "Middleware must be a subclass of Ollama::Middleware" unless middleware_instance.is_a?(Middleware)

  self.class.new(@transport, middlewares: @middlewares + [middleware_instance], events: @events)
end