Packages

A Gleam framework for building AI agents — type-safe, multi-provider, with tool calling, streaming, and simulation testing

Current section

Files

Jump to
glean src glean@agent.erl
Raw

src/glean@agent.erl

-module(glean@agent).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/glean/agent.gleam").
-export([new/1, system/2, tools/2, settings/2, tool_choice/2, max_steps/2, from/1]).
-export_type([agent/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-type agent(IVK) :: {agent,
glean@provider:provider(),
list(binary()),
glean@tool:toolset(IVK),
glean@provider:model_settings(),
glean@provider:tool_choice(),
integer()}.
-file("src/glean/agent.gleam", 29).
?DOC(
" Create a new agent with the given provider.\n"
" All other fields get sensible defaults.\n"
).
-spec new(glean@provider:provider()) -> agent(any()).
new(Provider) ->
{agent,
Provider,
[],
glean@tool:empty_toolset(),
glean@provider:default_settings(),
auto,
10}.
-file("src/glean/agent.gleam", 41).
?DOC(" Add a system prompt to the agent.\n").
-spec system(agent(IVN), binary()) -> agent(IVN).
system(Agent, Prompt) ->
case Prompt /= <<""/utf8>> of
true -> nil;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"glean/agent"/utf8>>,
function => <<"system"/utf8>>,
line => 42,
value => _assert_fail,
start => 1278,
'end' => 1308,
pattern_start => 1289,
pattern_end => 1293})
end,
{agent,
erlang:element(2, Agent),
lists:append(erlang:element(3, Agent), [Prompt]),
erlang:element(4, Agent),
erlang:element(5, Agent),
erlang:element(6, Agent),
erlang:element(7, Agent)}.
-file("src/glean/agent.gleam", 47).
?DOC(" Set the tools available to this agent.\n").
-spec tools(agent(IVQ), glean@tool:toolset(IVQ)) -> agent(IVQ).
tools(Agent, Tools) ->
{agent,
erlang:element(2, Agent),
erlang:element(3, Agent),
Tools,
erlang:element(5, Agent),
erlang:element(6, Agent),
erlang:element(7, Agent)}.
-file("src/glean/agent.gleam", 52).
?DOC(" Set model settings.\n").
-spec settings(agent(IVU), glean@provider:model_settings()) -> agent(IVU).
settings(Agent, Settings) ->
{agent,
erlang:element(2, Agent),
erlang:element(3, Agent),
erlang:element(4, Agent),
Settings,
erlang:element(6, Agent),
erlang:element(7, Agent)}.
-file("src/glean/agent.gleam", 60).
?DOC(" Set the tool choice strategy.\n").
-spec tool_choice(agent(IVX), glean@provider:tool_choice()) -> agent(IVX).
tool_choice(Agent, Choice) ->
{agent,
erlang:element(2, Agent),
erlang:element(3, Agent),
erlang:element(4, Agent),
erlang:element(5, Agent),
Choice,
erlang:element(7, Agent)}.
-file("src/glean/agent.gleam", 65).
?DOC(" Set the maximum number of agent loop steps.\n").
-spec max_steps(agent(IWA), integer()) -> agent(IWA).
max_steps(Agent, Max) ->
case Max > 0 of
true -> nil;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"glean/agent"/utf8>>,
function => <<"max_steps"/utf8>>,
line => 66,
value => _assert_fail,
start => 1953,
'end' => 1978,
pattern_start => 1964,
pattern_end => 1968})
end,
{agent,
erlang:element(2, Agent),
erlang:element(3, Agent),
erlang:element(4, Agent),
erlang:element(5, Agent),
erlang:element(6, Agent),
Max}.
-file("src/glean/agent.gleam", 72).
?DOC(
" Create an agent from a type-safe Model.\n"
" The Model carries both the provider and validated settings.\n"
).
-spec from(glean@model:model()) -> agent(any()).
from(Model) ->
{agent,
erlang:element(2, Model),
[],
glean@tool:empty_toolset(),
erlang:element(3, Model),
auto,
10}.