LlmComposer.Providers.Bedrock.HttpClient (llm_composer v0.20.3)

Copy Markdown View Source

ExAws HTTP client for Bedrock using Mint by default, with optional Finch support.

When stream: true is present in http_opts, uses streaming HTTP via a spawned process that forwards events as messages to the caller. Returns a lazy Stream as the response body — required for the ConverseStream binary event-stream response.

The spawned task is monitored with Process.monitor/1 so any unexpected crash surfaces immediately to the caller instead of waiting for the stream timeout.

Default behaviour (Mint)

Uses Mint.HTTP directly for both streaming and regular requests. No additional configuration is required since Mint is a required dependency of llm_composer.

Finch (optional)

If the :llm_composer :tesla_adapter config is set to a Finch adapter, Finch is used instead of Mint:

config :llm_composer, :tesla_adapter, {Tesla.Adapter.Finch, name: MyFinch}

Finch must be started in your supervision tree:

children = [{Finch, name: MyFinch}]

The Finch path honors the same :bedrock, :receive_timeout / :timeout config the Mint path reads (see receive_timeout/0), so switching adapters doesn't change the effective timeout. :pool_timeout and :request_timeout can also be set directly in the adapter tuple's options and are forwarded to Finch as-is, taking precedence over the configured receive timeout if both are present:

config :llm_composer, :tesla_adapter,
  {Tesla.Adapter.Finch, name: MyFinch, receive_timeout: 60_000}

Streaming errors

Once the response status and headers have arrived, the lazy Stream returned as the response body raises LlmComposer.Providers.Bedrock.HttpClient.StreamError if the underlying connection fails, crashes, or stalls before the body is fully received — callers consuming the stream (e.g. via Enum.into/2 or Stream.each/2) see that error instead of a silently truncated body.