Packages
langchain
0.3.0-rc.1
0.9.2
0.9.1
0.9.0
0.8.14
0.8.13
0.8.12
0.8.11
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.4.0-rc.3
0.4.0-rc.2
0.4.0-rc.1
0.4.0-rc.0
0.3.3
0.3.2
0.3.1
0.3.0
0.3.0-rc.2
0.3.0-rc.1
0.3.0-rc.0
0.2.0
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Elixir implementation of a LangChain style framework that lets Elixir projects integrate with and leverage LLMs.
Current section
Files
Jump to
Current section
Files
lib/chat_models/llm_callbacks.ex
defmodule LangChain.ChatModels.LLMCallbacks do
@moduledoc """
Defines the callbacks fired by an LLM module.
A callback handler is a map that defines the specific callback event with a
function to execute for that event.
## Example
A sample configured callback handler that forwards received data to a specific
LiveView.
live_view_pid = self()
my_handlers = %{
on_llm_new_message: fn new_message -> send(live_view_pid, {:received_message, new_message})
}
model = SomeLLM.new!(%{callbacks: [my_handlers]})
chain = LLMChain.new!(%{llm: model})
"""
alias LangChain.Message
alias LangChain.MessageDelta
alias LangChain.TokenUsage
@typedoc """
Executed when an LLM is streaming a response and a new MessageDelta (or token)
was received.
- `:index` is optionally present if the LLM supports sending `n` versions of a
response.
The return value is discarded.
## Example
A function declaration that matches the signature.
def handle_llm_new_delta(_chat_model, delta) do
IO.write(delta)
end
"""
@type llm_new_delta :: (model :: struct(), MessageDelta.t() -> any())
@typedoc """
Executed when an LLM is not streaming and a full message was received.
The return value is discarded.
## Example
A function declaration that matches the signature.
def handle_llm_new_message(_chat_model, message) do
IO.inspect(message)
end
"""
@type llm_new_message :: (model :: struct(), Message.t() -> any())
@typedoc """
Executed when an LLM (typically a service) responds with rate limiting
information.
The specific rate limit information depends on the LLM. It returns a map with
all the available information included.
The return value is discarded.
## Example
A function declaration that matches the signature.
def handle_llm_ratelimit_info(_chat_model, %{} = info) do
IO.inspect(info)
end
"""
@type llm_ratelimit_info :: (model :: struct(), info :: %{String.t() => any()} -> any())
@typedoc """
Executed when an LLM response reports the token usage in a
`LangChain.TokenUsage` struct. The data returned depends on the LLM.
The return value is discarded.
## Example
A function declaration that matches the signature.
def handle_llm_token_usage(_chat_model, %TokenUsage{} = usage) do
IO.inspect(usage)
end
"""
@type llm_token_usage :: (model :: struct(), TokenUsage.t() -> any())
@typedoc """
The supported set of callbacks for an LLM module.
"""
@type llm_callback_handler :: %{
on_llm_new_delta: llm_new_delta(),
on_llm_new_message: llm_new_message(),
on_llm_ratelimit_info: llm_ratelimit_info(),
on_llm_token_usage: llm_token_usage()
}
end