Packages
langchain
0.4.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/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