Packages

A library for building stateful chains of LLM interactions!

Current section

Files

Jump to
starflow src starflow@transform.erl
Raw

src/starflow@transform.erl

-module(starflow@transform).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([prompt_default/1, parser_default/3]).
-file("/home/ethanthoma/projects/flow/src/starflow/transform.gleam", 38).
-spec prompt_default(starflow@state:state(any())) -> list(starflow@state:content()).
prompt_default(State) ->
[{text_content, gleam@string:inspect(erlang:element(4, State))}].
-file("/home/ethanthoma/projects/flow/src/starflow/transform.gleam", 85).
-spec parser_default(
starflow@state:state(JDF),
starflow@state:response(),
list({binary(), starflow@tool:tool_result()})
) -> starflow@state:state(JDF).
parser_default(State, Last_response, Tool_results) ->
Usage = erlang:element(6, Last_response),
Content = erlang:element(3, Last_response),
Message = {message, <<"assistant"/utf8>>, Content},
Tool_message = begin
_pipe = gleam@list:fold(
Tool_results,
<<""/utf8>>,
fun(Acc, Tool_result) ->
{Name, Value} = Tool_result,
<<<<<<<<<<Acc/binary, "The tool "/utf8>>/binary, Name/binary>>/binary,
" returned result "/utf8>>/binary,
(gleam@string:inspect(Value))/binary>>/binary,
"\n"/utf8>>
end
),
_pipe@1 = {text_content, _pipe},
_pipe@2 = gleam@list:wrap(_pipe@1),
{message, <<"user"/utf8>>, _pipe@2}
end,
erlang:setelement(
3,
erlang:setelement(
2,
State,
lists:append(erlang:element(2, State), [Message, Tool_message])
),
Usage
).