Class: DurableHuggingfaceHub::Utils::HttpClient

Inherits:
Object
  • Object
show all
Defined in:
lib/durable_huggingface_hub/utils/http.rb

Overview

HTTP client for making requests to the HuggingFace Hub API.

This class provides a configured Faraday client with retry logic, connection pooling, timeout settings, and proper error handling.

Examples:

Basic GET request

client = HttpClient.new
response = client.get("https://huggingface.co/api/models/bert-base-uncased")

With authentication

client = HttpClient.new(token: "hf_...")
response = client.get("/api/whoami")

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(token: nil, endpoint: nil, headers: nil, timeout: nil, open_timeout: nil, proxy: nil, logger: nil) ⇒ HttpClient

Creates a new HTTP client.

Parameters:

  • token (String, nil) (defaults to: nil)

    Authentication token

  • endpoint (String) (defaults to: nil)

    Base endpoint URL

  • headers (Hash, nil) (defaults to: nil)

    Additional default headers

  • timeout (Integer, nil) (defaults to: nil)

    Request timeout in seconds

  • open_timeout (Integer, nil) (defaults to: nil)

    Connection timeout in seconds

  • proxy (String, nil) (defaults to: nil)

    Proxy URL

  • logger (Logger, nil) (defaults to: nil)

    Logger for request/response logging



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/durable_huggingface_hub/utils/http.rb', line 47

def initialize(
  token: nil,
  endpoint: nil,
  headers: nil,
  timeout: nil,
  open_timeout: nil,
  proxy: nil,
  logger: nil
)
  @token = token || Configuration.instance.token
  @endpoint = endpoint || Configuration.instance.endpoint
  @default_headers = build_default_headers(headers)
  @logger = logger
  @connection = build_connection(
    timeout: timeout,
    open_timeout: open_timeout,
    proxy: proxy
  )
end

Instance Attribute Details

#connectionFaraday::Connection (readonly)

Returns The underlying Faraday connection.

Returns:

  • (Faraday::Connection)

    The underlying Faraday connection



36
37
38
# File 'lib/durable_huggingface_hub/utils/http.rb', line 36

def connection
  @connection
end

#default_headersHash (readonly)

Returns Default headers for all requests.

Returns:

  • (Hash)

    Default headers for all requests



33
34
35
# File 'lib/durable_huggingface_hub/utils/http.rb', line 33

def default_headers
  @default_headers
end

#endpointString (readonly)

Returns Base URL for API requests.

Returns:

  • (String)

    Base URL for API requests



30
31
32
# File 'lib/durable_huggingface_hub/utils/http.rb', line 30

def endpoint
  @endpoint
end

#tokenString? (readonly)

Returns Authentication token.

Returns:

  • (String, nil)

    Authentication token



27
28
29
# File 'lib/durable_huggingface_hub/utils/http.rb', line 27

def token
  @token
end

Instance Method Details

#delete(path, params: nil, headers: nil) ⇒ Faraday::Response

Performs a DELETE request.

Parameters:

  • path (String)

    URL path or full URL

  • params (Hash, nil) (defaults to: nil)

    Query parameters

  • headers (Hash, nil) (defaults to: nil)

    Additional headers

Returns:

  • (Faraday::Response)

    Response object

Raises:



117
118
119
# File 'lib/durable_huggingface_hub/utils/http.rb', line 117

def delete(path, params: nil, headers: nil)
  request(:delete, path, params: params, headers: headers)
end

#get(path, params: nil, headers: nil, timeout: nil) ⇒ Faraday::Response

Performs a GET request.

Examples:

response = client.get("/api/models", params: { limit: 10 })

Parameters:

  • path (String)

    URL path or full URL

  • params (Hash, nil) (defaults to: nil)

    Query parameters

  • headers (Hash, nil) (defaults to: nil)

    Additional headers

  • timeout (Numeric, nil) (defaults to: nil)

    Request timeout in seconds

Returns:

  • (Faraday::Response)

    Response object

Raises:



78
79
80
# File 'lib/durable_huggingface_hub/utils/http.rb', line 78

def get(path, params: nil, headers: nil, timeout: nil)
  request(:get, path, params: params, headers: headers, timeout: timeout)
end

#head(path, params: nil, headers: nil, timeout: nil) ⇒ Faraday::Response

Performs a HEAD request.

Parameters:

  • path (String)

    URL path or full URL

  • params (Hash, nil) (defaults to: nil)

    Query parameters

  • headers (Hash, nil) (defaults to: nil)

    Additional headers

  • timeout (Numeric, nil) (defaults to: nil)

    Request timeout in seconds

Returns:

  • (Faraday::Response)

    Response object

Raises:



129
130
131
# File 'lib/durable_huggingface_hub/utils/http.rb', line 129

def head(path, params: nil, headers: nil, timeout: nil)
  request(:head, path, params: params, headers: headers, timeout: timeout)
end

#post(path, body: nil, params: nil, headers: nil, timeout: nil) ⇒ Faraday::Response

Performs a POST request.

Examples:

response = client.post("/api/repos", body: { name: "my-model" })

Parameters:

  • path (String)

    URL path or full URL

  • body (Hash, String, nil) (defaults to: nil)

    Request body

  • params (Hash, nil) (defaults to: nil)

    Query parameters

  • headers (Hash, nil) (defaults to: nil)

    Additional headers

  • timeout (Numeric, nil) (defaults to: nil)

    Request timeout in seconds

Returns:

  • (Faraday::Response)

    Response object

Raises:



94
95
96
# File 'lib/durable_huggingface_hub/utils/http.rb', line 94

def post(path, body: nil, params: nil, headers: nil, timeout: nil)
  request(:post, path, body: body, params: params, headers: headers, timeout: timeout)
end

#put(path, body: nil, params: nil, headers: nil) ⇒ Faraday::Response

Performs a PUT request.

Parameters:

  • path (String)

    URL path or full URL

  • body (Hash, String, nil) (defaults to: nil)

    Request body

  • params (Hash, nil) (defaults to: nil)

    Query parameters

  • headers (Hash, nil) (defaults to: nil)

    Additional headers

Returns:

  • (Faraday::Response)

    Response object

Raises:



106
107
108
# File 'lib/durable_huggingface_hub/utils/http.rb', line 106

def put(path, body: nil, params: nil, headers: nil)
  request(:put, path, body: body, params: params, headers: headers)
end

#request(method, path, body: nil, params: nil, headers: nil, timeout: nil) {|req| ... } ⇒ Faraday::Response

Performs an HTTP request with error handling.

Parameters:

  • method (Symbol)

    HTTP method

  • path (String)

    URL path

  • body (Hash, String, nil) (defaults to: nil)

    Request body

  • params (Hash, nil) (defaults to: nil)

    Query parameters

  • headers (Hash, nil) (defaults to: nil)

    Additional headers

  • timeout (Numeric, nil) (defaults to: nil)

    Request timeout in seconds (overrides default)

Yields:

  • (req)

    Optional block for Faraday request configuration

Returns:

  • (Faraday::Response)

    Response object

Raises:



144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'lib/durable_huggingface_hub/utils/http.rb', line 144

def request(method, path, body: nil, params: nil, headers: nil, timeout: nil, &block)
  url = build_url(path)
  merged_headers = @default_headers.merge(headers || {})

  response = @connection.send(method) do |req|
    req.url(url)
    req.params.update(params) if params
    req.headers.update(merged_headers)
    req.body = prepare_body(body) if body && method != :get && method != :head
    req.options.timeout = timeout if timeout
    block&.call(req)
  end

  handle_response(response)
rescue Faraday::Error => e
  handle_faraday_error(e)
end