Skip to content

Commit 7c99777

Browse files
committed
curl: set connect_timeout, low_speed_*
1 parent e4d2829 commit 7c99777

1 file changed

Lines changed: 16 additions & 2 deletions

File tree

  • mrblib/mruby-llm/provider/transport

mrblib/mruby-llm/provider/transport/http.rb

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ def initialize(host:, port:, timeout:, ssl:, persistent: false)
2121
@timeout = timeout
2222
@ssl = ssl
2323
@curl = ::Curl.multi
24-
@curl.timeout = timeout if @curl.respond_to?(:timeout=)
24+
@curl.timeout = timeout
25+
@curl.connect_timeout = timeout
26+
@curl.low_speed_limit = 1
27+
@curl.low_speed_time = timeout
2528
@monitor = Monitor.new
2629
end
2730

@@ -87,7 +90,7 @@ def perform_streaming(request, owner, stream, active)
8790
raw_body = +""
8891
decoder_class = stream.decoder == LLM::Transport::StreamDecoder ? LLM::Transport::Curl::StreamDecoder : stream.decoder
8992
decoder = decoder_class.new(stream.parser.new(stream.streamer))
90-
curl_request = @curl.send(request_url(request), build_http_request(request)) do |header, chunk|
93+
curl_request = send_streaming_request(request) do |header, chunk|
9194
raise LLM::Interrupt, "request interrupted" if interrupted?(owner)
9295
res ||= LLM::Transport::Response.from(header)
9396
if res.success? && res["content-type"].to_s.include?("text/event-stream")
@@ -111,6 +114,17 @@ def perform_streaming(request, owner, stream, active)
111114
decoder&.free
112115
end
113116

117+
def send_streaming_request(request, &block)
118+
previous_timeout = @curl.timeout
119+
previous_timeout_ms = @curl.timeout_ms
120+
@curl.timeout = nil
121+
@curl.timeout_ms = nil
122+
@curl.send(request_url(request), build_http_request(request), &block)
123+
ensure
124+
@curl.timeout = previous_timeout
125+
@curl.timeout_ms = previous_timeout_ms
126+
end
127+
114128
def perform_until_done(request, owner)
115129
until request.done?
116130
if interrupted?(owner)

0 commit comments

Comments
 (0)