Class: LLM::Transport

Inherits:
Object
  • Object
show all
Defined in:
lib/llm/transport.rb,
lib/llm/transport/http.rb,
lib/llm/transport/utils.rb,
lib/llm/transport/request.rb,
lib/llm/transport/response.rb,
lib/llm/transport/execution.rb,
lib/llm/transport/stream_decoder.rb,
lib/llm/transport/persistent_http.rb,
lib/llm/transport/net_http_adapter.rb

Overview

The LLM::Transport class defines the execution interface used by Provider.

Custom transports can subclass this class and override #request to execute provider requests without changing request adapters or response adapters.

Providers should construct Request objects before delegating to a transport. Custom transports can execute those requests directly, or transform them into backend-specific request objects before execution.

Only #request is required. The remaining methods are optional hooks for features such as interruption, request ownership, or persistence, and only need to be implemented when the underlying adapter can support them.

Returned responses should implement the LLM::Transport::Response interface. In practice this can mean adapting another client's response object so existing provider execution, response adapters, and error handlers can rely on one normalized response contract instead of transport-specific classes.

Direct Known Subclasses

HTTP, PersistentHTTP

Defined Under Namespace

Modules: Execution, NetHTTPAdapter, Utils Classes: HTTP, PersistentHTTP, Request, Response, StreamDecoder

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.net_http_persistent ⇒ Class

Returns the built-in Net::HTTP::Persistent transport class.

Returns:

  • (Class)


48
49
50
# File 'lib/llm/transport.rb', line 48

def self.net_http_persistent
  PersistentHTTP
end

.net_http ⇒ Class

Returns the built-in Net::HTTP transport class.

Returns:

  • (Class)


41
42
43
# File 'lib/llm/transport.rb', line 41

def self.net_http
  HTTP
end

Instance Method Details

#set_body_stream(request, io)

This method returns an undefined value.

Parameters:



98
99
100
101
# File 'lib/llm/transport.rb', line 98

def set_body_stream(request, io)
  request.body_stream = io
  request["transfer-encoding"] = "chunked" unless request["content-length"]
end

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

Performs a request through the transport.

Parameters:

Yield Parameters:

Returns:

Raises:

  • (NotImplementedError)


59
60
61
# File 'lib/llm/transport.rb', line 59

def request(request, owner:, stream: nil, &)
  raise NotImplementedError
end

#request_owner ⇒ Object

Returns the current request owner.

Returns:



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

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

#interrupt_errors ⇒ Array<Class<Exception>>

Returns the exception classes that indicate an interrupted request.

Returns:

  • (Array<Class<Exception>>)


74
75
76
# File 'lib/llm/transport.rb', line 74

def interrupt_errors
  []
end

#interrupt!(owner) ⇒ nil

Interrupt an active request, if any.

Parameters:

Returns:

  • (nil)

Raises:

  • (NotImplementedError)


82
83
84
# File 'lib/llm/transport.rb', line 82

def interrupt!(owner)
  raise NotImplementedError
end

#interrupted?(owner) ⇒ Boolean?

Returns whether an execution owner was interrupted.

Parameters:

Returns:

  • (Boolean, nil)


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

def interrupted?(owner)
  nil
end