Current section
Files
Jump to
Current section
Files
src/llmgleam@client.erl
-module(llmgleam@client).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/llmgleam/client.gleam").
-export([with_message/2, with_messages/2, new_client/2, request/1, with_system_instruction/2, completion/2]).
-export_type([provider/0, client/0, request/0]).
-type provider() :: gemini | g_p_t.
-opaque client() :: {gemini_client, llmgleam@gemini:gemini_client_internal()} |
{g_p_t_client, llmgleam@gpt:g_p_t_client_internal()}.
-opaque request() :: {request,
list(llmgleam@types:chat_message()),
client(),
gleam@option:option(binary())}.
-file("src/llmgleam/client.gleam", 25).
-spec with_message(request(), llmgleam@types:chat_message()) -> request().
with_message(Request, Message) ->
{request,
lists:reverse([Message | erlang:element(2, Request)]),
erlang:element(3, Request),
erlang:element(4, Request)}.
-file("src/llmgleam/client.gleam", 33).
-spec with_messages(request(), list(llmgleam@types:chat_message())) -> request().
with_messages(Request, Messages) ->
{request,
lists:append(erlang:element(2, Request), Messages),
erlang:element(3, Request),
erlang:element(4, Request)}.
-file("src/llmgleam/client.gleam", 44).
-spec new_client(provider(), binary()) -> client().
new_client(Provider, Api_key) ->
case Provider of
gemini ->
{gemini_client, {gemini_client_internal, Api_key}};
g_p_t ->
{g_p_t_client, {g_p_t_client_internal, Api_key}}
end.
-file("src/llmgleam/client.gleam", 51).
-spec client_completion(
client(),
binary(),
list(llmgleam@types:chat_message()),
gleam@option:option(binary())
) -> {ok, llmgleam@types:completion()} |
{error, llmgleam@types:completion_error()}.
client_completion(Client, Model, Messages, System_instruction) ->
case Client of
{gemini_client, C} ->
llmgleam@gemini:generate_content(
C,
Model,
Messages,
System_instruction
);
{g_p_t_client, C@1} ->
llmgleam@gpt:generate_content(
C@1,
Model,
Messages,
System_instruction
)
end.
-file("src/llmgleam/client.gleam", 64).
-spec request(client()) -> request().
request(C) ->
{request, gleam@list:new(), C, none}.
-file("src/llmgleam/client.gleam", 68).
-spec with_system_instruction(request(), binary()) -> request().
with_system_instruction(Request, System_instruction) ->
{request,
erlang:element(2, Request),
erlang:element(3, Request),
{some, System_instruction}}.
-file("src/llmgleam/client.gleam", 79).
-spec completion(request(), binary()) -> {ok, llmgleam@types:completion()} |
{error, llmgleam@types:completion_error()}.
completion(Request, Model) ->
_pipe = erlang:element(3, Request),
client_completion(
_pipe,
Model,
erlang:element(2, Request),
erlang:element(4, Request)
).