Packages
llm_composer
0.12.0
0.20.2
0.20.1
0.20.0
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.2
0.16.1
0.16.0
0.15.0
0.14.2
0.14.1
0.14.0
0.13.1
0.13.0
0.12.3
0.12.2
0.12.0
0.11.2
0.11.1
0.11.0
0.10.0
0.8.0
0.7.0
0.6.0
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.0
LlmComposer is an Elixir library that facilitates chat interactions with language models, providing tools to handle user messages, generate responses, and execute functions automatically based on model outputs.
Current section
Files
Jump to
Current section
Files
lib/llm_composer/http_client.ex
defmodule LlmComposer.HttpClient do
@moduledoc """
Helper mod for setup the Tesla http client and its options
"""
@default_timeout 50_000
@spec client(binary(), keyword()) :: Tesla.Client.t()
def client(base_url, opts \\ []) do
base_url
|> middlewares(opts)
|> Tesla.client(adapter())
end
@spec adapter() :: term()
defp adapter do
Application.get_env(:llm_composer, :tesla_adapter, Tesla.Adapter.Mint)
end
@spec middlewares(binary(), keyword()) :: list(term())
defp middlewares(base_url, opts) do
stream = Keyword.get(opts, :stream_response)
resp = [
{
Tesla.Middleware.BaseUrl,
base_url
},
Tesla.Middleware.JSON
]
if stream do
resp ++ [{Tesla.Middleware.SSE, only: :data}]
else
resp ++
[
{Tesla.Middleware.Retry,
delay: :timer.seconds(1),
max_delay: :timer.seconds(10),
max_retries: 10,
should_retry: fn
{:ok, %{status: status}} when status in [429, 500, 503] -> true
{:error, :closed} -> true
_other -> false
end},
{Tesla.Middleware.Timeout,
timeout:
Application.get_env(:llm_composer, :timeout) ||
Keyword.get(opts, :default_timeout, @default_timeout)}
]
end
end
end