Class: LLM::Transport::HTTP Private

Inherits:
LLM::Transport show all
Includes:
NetHTTPAdapter
Defined in:
lib/llm/transport/http.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

The LLM::Transport::HTTP transport is the built-in adapter for Ruby’s Net::HTTP. It manages transient HTTP connections, tracks active requests by owner, and interrupts in-flight requests when needed.

Defined Under Namespace

Classes: ActiveRequest

Constant Summary collapse

INTERRUPT_ERRORS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

[::IOError, ::EOFError, Errno::EBADF].freeze

Instance Method Summary collapse

Methods inherited from LLM::Transport

curb, net_http, net_http_persistent, #set_body_stream

Constructor Details

#initialize(host:, port:, timeout:, ssl:) ⇒ LLM::Transport::HTTP

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Parameters:

  • host (String)
  • port (Integer)
  • timeout (Integer)
  • ssl (Boolean)


25
26
27
28
29
30
31
32
# File 'lib/llm/transport/http.rb', line 25

def initialize(host:, port:, timeout:, ssl:)
  @host = host
  @port = port
  @timeout = timeout
  @ssl = ssl
  @base_uri = URI("#{ssl ? "https" : "http"}://#{host}:#{port}/")
  @monitor = Monitor.new
end

Instance Method Details

#inspectString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (String)


90
91
92
# File 'lib/llm/transport/http.rb', line 90

def inspect
  "#<#{LLM::Utils.object_id(self)}>"
end

#interrupt!(owner) ⇒ nil

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Interrupt an active request, if any.

Parameters:

  • owner (Fiber)

Returns:

  • (nil)


52
53
54
55
56
57
58
59
60
# File 'lib/llm/transport/http.rb', line 52

def interrupt!(owner)
  req = request_for(owner) or return
  lock { (@interrupts ||= {})[owner] = true }
  close_socket(req.client)
  req.client.finish if req.client.active?
  owner.stop if owner.respond_to?(:stop)
rescue *interrupt_errors
  nil
end

#interrupt_errorsArray<Class<Exception>>

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Array<Class<Exception>>)


44
45
46
# File 'lib/llm/transport/http.rb', line 44

def interrupt_errors
  [*INTERRUPT_ERRORS, *optional_interrupt_errors]
end

#interrupted?(owner) ⇒ Boolean?

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns whether an execution owner was interrupted.

Parameters:

  • owner (Fiber)

Returns:

  • (Boolean, nil)


66
67
68
# File 'lib/llm/transport/http.rb', line 66

def interrupted?(owner)
  lock { @interrupts&.delete(owner) }
end

#request(request, owner:, stream: nil) {|response| ... } ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Performs a request on the current HTTP transport. Accepts both Net::HTTPRequest and Request.

Parameters:

Yield Parameters:

Returns:



79
80
81
82
83
84
85
86
# File 'lib/llm/transport/http.rb', line 79

def request(request, owner:, stream: nil, &b)
  http_req = resolve_request(request)
  client = client()
  set_request(ActiveRequest.new(client:), owner)
  perform_request(client, http_req, stream, &b)
ensure
  clear_request(owner)
end

#request_ownerObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the current request owner.

Returns:



37
38
39
40
# File 'lib/llm/transport/http.rb', line 37

def request_owner
  return Fiber.current unless defined?(::Async)
  Async::Task.current? ? Async::Task.current : Fiber.current
end