Current section
Files
Jump to
Current section
Files
src/overlay@llm@chat.erl
-module(overlay@llm@chat).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/overlay/llm/chat.gleam").
-export([from_completion/1, fresh/0, text/1, append_chunks/2]).
-export_type([message/1, completion/1]).
-type message(HGW) :: {user_message, binary(), list(binary())} |
{assistant_message, binary(), list(HGW)} |
{tool_result_message, binary(), binary(), list(binary())}.
-type completion(HGX) :: {completion, binary(), binary(), list(HGX)}.
-file("src/overlay/llm/chat.gleam", 21).
-spec from_completion(completion(HHR)) -> message(HHR).
from_completion(Completion) ->
{completion, _, Content, Tool_calls} = Completion,
{assistant_message, Content, Tool_calls}.
-file("src/overlay/llm/chat.gleam", 26).
-spec fresh() -> completion(any()).
fresh() ->
{completion, <<""/utf8>>, <<""/utf8>>, []}.
-file("src/overlay/llm/chat.gleam", 30).
-spec text(message(any())) -> binary().
text(Message) ->
case Message of
{user_message, Text, _} ->
Text;
{assistant_message, Text@1, _} ->
Text@1;
{tool_result_message, _, Text@2, _} ->
Text@2
end.
-file("src/overlay/llm/chat.gleam", 43).
-spec do_append_chunks(list(completion(HIC)), binary(), binary(), list(HIC)) -> completion(HIC).
do_append_chunks(Chunks, Thinking, Content, Tool_calls) ->
case Chunks of
[] ->
{completion, Thinking, Content, Tool_calls};
[{completion, _, _, _} = Chunk | Rest] ->
do_append_chunks(
Rest,
<<Thinking/binary, (erlang:element(2, Chunk))/binary>>,
<<Content/binary, (erlang:element(3, Chunk))/binary>>,
lists:append(Tool_calls, erlang:element(4, Chunk))
)
end.
-file("src/overlay/llm/chat.gleam", 38).
-spec append_chunks(completion(HIH), list(completion(HIH))) -> completion(HIH).
append_chunks(Completion, Chunks) ->
{completion, Thinking, Content, Tool_calls} = Completion,
do_append_chunks(Chunks, Thinking, Content, Tool_calls).