Packages
langchain
0.8.10
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/utils/aws_eventstream_decoder.ex
defmodule LangChain.Utils.AwsEventstreamDecoder do
@moduledoc """
Decodes AWS messages in the application/vnd.amazon.eventstream content-type.
Ignores the headers because on Bedrock it's the same content type, event type & message type headers in every message.
"""
def decode(<<
message_length::32,
headers_length::32,
prelude_checksum::32,
headers::binary-size(headers_length),
body::binary-size(message_length - headers_length - 16),
message_checksum::32,
rest::bitstring
>>) do
message_without_checksum =
<<message_length::32, headers_length::32, prelude_checksum::32,
headers::binary-size(headers_length),
body::binary-size(message_length - headers_length - 16)>>
with :ok <-
verify_checksum(<<message_length::32, headers_length::32>>, prelude_checksum, :prelude),
:ok <- verify_checksum(message_without_checksum, message_checksum, :message) do
{:ok, body, rest}
end
end
def decode(<<message_length::32, _message::bitstring>> = data) do
{:incomplete_message, "Expected message length #{message_length} but got #{byte_size(data)}"}
end
def decode(_) do
{:error, "Unable to decode message"}
end
defp verify_checksum(data, checksum, part) do
if :erlang.crc32(data) == checksum do
:ok
else
{:error, "Checksum mismatch for #{part}"}
end
end
end