How to set timeout option for Req?

This Post request takes some time, and fails in Req with a mint timeout error, but works fine with Httpoison. How can I configure the timeout with Req?

body =
  %{
    prompt: prompt,
    model: "claude-2",
    max_tokens_to_sample: 5000,
    stream: false
  }
  |> Jason.encode!()

{:ok, %HTTPoison.Response{status_code: 200, body: body}} =
  HTTPoison.post(
    "https://api.anthropic.com/v1/complete",
    body,
    headers,
    recv_timeout: 120_000
  )

completion =
  body
  |> Jason.decode!()
  |> Map.get("completion")

With Req this fails and times out:

{:ok, %Req.Response{body: %{"completion" => completion}}} =
  Req.post("https://api.anthropic.com/v1/complete",
    json: %{
      prompt: prompt,
      model: "claude-2",
      max_tokens_to_sample: 5000,
      stream: false
    },
    headers: headers,
    connect_options: [timeout: 120_000]
  )

Appreciate the help!

It seems like the :receive_timeout option is what you actually want.

  • :receive_timeout - socket receive timeout in milliseconds, defaults to 15_000.

source: Req.Steps — req v0.3.11

So try something like this: Req.post(url, json: json, headers: headers, receive_timeout: 120_000)

3 Likes