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@testing@function_provider.erl
Raw

src/glean@testing@function_provider.erl

-module(glean@testing@function_provider).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/glean/testing/function_provider.gleam").
-export([function_provider/2]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-file("src/glean/testing/function_provider.gleam", 23).
?DOC(
" Create a provider backed by a user-supplied function.\n"
" The function receives each request and returns a result or error.\n"
"\n"
" ## Example\n"
"\n"
" ```gleam\n"
" let provider = function_provider(\"test\", fn(request) {\n"
" case list.length(request.messages) {\n"
" 1 -> Ok(test_provider.text_result(\"Hello!\"))\n"
" _ -> Ok(test_provider.text_result(\"Goodbye!\"))\n"
" }\n"
" })\n"
" ```\n"
).
-spec function_provider(
binary(),
fun((glean@provider:generate_request()) -> {ok,
glean@provider:generate_result()} |
{error, glean@error:glean_error()})
) -> glean@provider:provider().
function_provider(Name, Handler) ->
Stream_fn = fun(Request, _) -> Handler(Request) end,
{provider, Name, <<Name/binary, "-model"/utf8>>, Handler, Stream_fn}.