Current section
Files
Jump to
Current section
Files
src/glopenai@container.erl
-module(glopenai@container).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/glopenai/container.gleam").
-export([memory_limit_to_json/1, memory_limit_decoder/0, container_expires_after_anchor_to_json/1, container_expires_after_anchor_decoder/0, container_expires_after_to_json/1, container_expires_after_decoder/0, container_resource_decoder/0, container_file_resource_decoder/0, new_create_request/1, with_file_ids/2, with_expires_after/2, with_memory_limit/2, create_container_request_to_json/1, empty_list_containers_query/0, empty_list_container_files_query/0, create_request/2, create_response/1, list_request/1, list_request_with_query/2, list_response/1, retrieve_request/2, retrieve_response/1, delete_request/2, delete_response/1, file_create_request/4, file_create_response/1, file_list_request/2, file_list_request_with_query/3, file_list_response/1, file_retrieve_request/3, file_retrieve_response/1, file_delete_request/3, file_delete_response/1, file_content_request/3, file_content_response/1]).
-export_type([memory_limit/0, container_expires_after_anchor/0, container_expires_after/0, container_resource/0, container_list_resource/0, delete_container_response/0, container_file_resource/0, container_file_list_resource/0, delete_container_file_response/0, create_container_request/0, container_file_upload/0, list_order/0, list_containers_query/0, list_container_files_query/0]).
-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 memory_limit() :: one_gigabyte |
four_gigabytes |
sixteen_gigabytes |
sixty_four_gigabytes.
-type container_expires_after_anchor() :: last_active_at.
-type container_expires_after() :: {container_expires_after,
container_expires_after_anchor(),
integer()}.
-type container_resource() :: {container_resource,
binary(),
binary(),
binary(),
integer(),
binary(),
gleam@option:option(container_expires_after()),
gleam@option:option(integer()),
memory_limit()}.
-type container_list_resource() :: {container_list_resource,
binary(),
list(container_resource()),
gleam@option:option(binary()),
gleam@option:option(binary()),
boolean()}.
-type delete_container_response() :: {delete_container_response,
binary(),
binary(),
boolean()}.
-type container_file_resource() :: {container_file_resource,
binary(),
binary(),
binary(),
integer(),
integer(),
binary(),
binary()}.
-type container_file_list_resource() :: {container_file_list_resource,
binary(),
list(container_file_resource()),
gleam@option:option(binary()),
gleam@option:option(binary()),
boolean()}.
-type delete_container_file_response() :: {delete_container_file_response,
binary(),
binary(),
boolean()}.
-type create_container_request() :: {create_container_request,
binary(),
gleam@option:option(list(binary())),
gleam@option:option(container_expires_after()),
gleam@option:option(memory_limit())}.
-type container_file_upload() :: {upload_bytes, binary(), binary(), bitstring()} |
{upload_by_file_id, binary()}.
-type list_order() :: asc | desc.
-type list_containers_query() :: {list_containers_query,
gleam@option:option(integer()),
gleam@option:option(list_order()),
gleam@option:option(binary())}.
-type list_container_files_query() :: {list_container_files_query,
gleam@option:option(integer()),
gleam@option:option(list_order()),
gleam@option:option(binary())}.
-file("src/glopenai/container.gleam", 45).
-spec memory_limit_to_json(memory_limit()) -> gleam@json:json().
memory_limit_to_json(Limit) ->
gleam@json:string(case Limit of
one_gigabyte ->
<<"1g"/utf8>>;
four_gigabytes ->
<<"4g"/utf8>>;
sixteen_gigabytes ->
<<"16g"/utf8>>;
sixty_four_gigabytes ->
<<"64g"/utf8>>
end).
-file("src/glopenai/container.gleam", 54).
-spec memory_limit_decoder() -> gleam@dynamic@decode:decoder(memory_limit()).
memory_limit_decoder() ->
gleam@dynamic@decode:then(
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Value) -> case Value of
<<"1g"/utf8>> ->
gleam@dynamic@decode:success(one_gigabyte);
<<"4g"/utf8>> ->
gleam@dynamic@decode:success(four_gigabytes);
<<"16g"/utf8>> ->
gleam@dynamic@decode:success(sixteen_gigabytes);
<<"64g"/utf8>> ->
gleam@dynamic@decode:success(sixty_four_gigabytes);
_ ->
gleam@dynamic@decode:failure(
one_gigabyte,
<<"MemoryLimit"/utf8>>
)
end end
).
-file("src/glopenai/container.gleam", 72).
-spec container_expires_after_anchor_to_json(container_expires_after_anchor()) -> gleam@json:json().
container_expires_after_anchor_to_json(Anchor) ->
gleam@json:string(case Anchor of
last_active_at ->
<<"last_active_at"/utf8>>
end).
-file("src/glopenai/container.gleam", 80).
-spec container_expires_after_anchor_decoder() -> gleam@dynamic@decode:decoder(container_expires_after_anchor()).
container_expires_after_anchor_decoder() ->
gleam@dynamic@decode:then(
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Value) -> case Value of
<<"last_active_at"/utf8>> ->
gleam@dynamic@decode:success(last_active_at);
_ ->
gleam@dynamic@decode:failure(
last_active_at,
<<"ContainerExpiresAfterAnchor"/utf8>>
)
end end
).
-file("src/glopenai/container.gleam", 95).
-spec container_expires_after_to_json(container_expires_after()) -> gleam@json:json().
container_expires_after_to_json(Expires) ->
gleam@json:object(
[{<<"anchor"/utf8>>,
container_expires_after_anchor_to_json(
erlang:element(2, Expires)
)},
{<<"minutes"/utf8>>, gleam@json:int(erlang:element(3, Expires))}]
).
-file("src/glopenai/container.gleam", 104).
-spec container_expires_after_decoder() -> gleam@dynamic@decode:decoder(container_expires_after()).
container_expires_after_decoder() ->
gleam@dynamic@decode:field(
<<"anchor"/utf8>>,
container_expires_after_anchor_decoder(),
fun(Anchor) ->
gleam@dynamic@decode:field(
<<"minutes"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(Minutes) ->
gleam@dynamic@decode:success(
{container_expires_after, Anchor, Minutes}
)
end
)
end
).
-file("src/glopenai/container.gleam", 128).
-spec container_resource_decoder() -> gleam@dynamic@decode:decoder(container_resource()).
container_resource_decoder() ->
gleam@dynamic@decode:field(
<<"id"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Id) ->
gleam@dynamic@decode:field(
<<"object"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Object) ->
gleam@dynamic@decode:field(
<<"name"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Name) ->
gleam@dynamic@decode:field(
<<"created_at"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(Created_at) ->
gleam@dynamic@decode:field(
<<"status"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_string/1},
fun(Status) ->
gleam@dynamic@decode:optional_field(
<<"expires_after"/utf8>>,
none,
gleam@dynamic@decode:optional(
container_expires_after_decoder(
)
),
fun(Expires_after) ->
gleam@dynamic@decode:optional_field(
<<"last_active_at"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder,
fun gleam@dynamic@decode:decode_int/1}
),
fun(Last_active_at) ->
gleam@dynamic@decode:field(
<<"memory_limit"/utf8>>,
memory_limit_decoder(
),
fun(
Memory_limit
) ->
gleam@dynamic@decode:success(
{container_resource,
Id,
Object,
Name,
Created_at,
Status,
Expires_after,
Last_active_at,
Memory_limit}
)
end
)
end
)
end
)
end
)
end
)
end
)
end
)
end
).
-file("src/glopenai/container.gleam", 168).
-spec container_list_resource_decoder() -> gleam@dynamic@decode:decoder(container_list_resource()).
container_list_resource_decoder() ->
gleam@dynamic@decode:field(
<<"object"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Object) ->
gleam@dynamic@decode:field(
<<"data"/utf8>>,
gleam@dynamic@decode:list(container_resource_decoder()),
fun(Data) ->
gleam@dynamic@decode:optional_field(
<<"first_id"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder, fun gleam@dynamic@decode:decode_string/1}
),
fun(First_id) ->
gleam@dynamic@decode:optional_field(
<<"last_id"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder,
fun gleam@dynamic@decode:decode_string/1}
),
fun(Last_id) ->
gleam@dynamic@decode:field(
<<"has_more"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_bool/1},
fun(Has_more) ->
gleam@dynamic@decode:success(
{container_list_resource,
Object,
Data,
First_id,
Last_id,
Has_more}
)
end
)
end
)
end
)
end
)
end
).
-file("src/glopenai/container.gleam", 195).
-spec delete_container_response_decoder() -> gleam@dynamic@decode:decoder(delete_container_response()).
delete_container_response_decoder() ->
gleam@dynamic@decode:field(
<<"id"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Id) ->
gleam@dynamic@decode:field(
<<"object"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Object) ->
gleam@dynamic@decode:field(
<<"deleted"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_bool/1},
fun(Deleted) ->
gleam@dynamic@decode:success(
{delete_container_response, Id, Object, Deleted}
)
end
)
end
)
end
).
-file("src/glopenai/container.gleam", 222).
-spec container_file_resource_decoder() -> gleam@dynamic@decode:decoder(container_file_resource()).
container_file_resource_decoder() ->
gleam@dynamic@decode:field(
<<"id"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Id) ->
gleam@dynamic@decode:field(
<<"object"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Object) ->
gleam@dynamic@decode:field(
<<"container_id"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Container_id) ->
gleam@dynamic@decode:field(
<<"created_at"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(Created_at) ->
gleam@dynamic@decode:field(
<<"bytes"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_int/1},
fun(Bytes) ->
gleam@dynamic@decode:field(
<<"path"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_string/1},
fun(Path) ->
gleam@dynamic@decode:field(
<<"source"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_string/1},
fun(Source) ->
gleam@dynamic@decode:success(
{container_file_resource,
Id,
Object,
Container_id,
Created_at,
Bytes,
Path,
Source}
)
end
)
end
)
end
)
end
)
end
)
end
)
end
).
-file("src/glopenai/container.gleam", 253).
-spec container_file_list_resource_decoder() -> gleam@dynamic@decode:decoder(container_file_list_resource()).
container_file_list_resource_decoder() ->
gleam@dynamic@decode:field(
<<"object"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Object) ->
gleam@dynamic@decode:field(
<<"data"/utf8>>,
gleam@dynamic@decode:list(container_file_resource_decoder()),
fun(Data) ->
gleam@dynamic@decode:optional_field(
<<"first_id"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder, fun gleam@dynamic@decode:decode_string/1}
),
fun(First_id) ->
gleam@dynamic@decode:optional_field(
<<"last_id"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder,
fun gleam@dynamic@decode:decode_string/1}
),
fun(Last_id) ->
gleam@dynamic@decode:field(
<<"has_more"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_bool/1},
fun(Has_more) ->
gleam@dynamic@decode:success(
{container_file_list_resource,
Object,
Data,
First_id,
Last_id,
Has_more}
)
end
)
end
)
end
)
end
)
end
).
-file("src/glopenai/container.gleam", 285).
-spec delete_container_file_response_decoder() -> gleam@dynamic@decode:decoder(delete_container_file_response()).
delete_container_file_response_decoder() ->
gleam@dynamic@decode:field(
<<"id"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Id) ->
gleam@dynamic@decode:field(
<<"object"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Object) ->
gleam@dynamic@decode:field(
<<"deleted"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_bool/1},
fun(Deleted) ->
gleam@dynamic@decode:success(
{delete_container_file_response,
Id,
Object,
Deleted}
)
end
)
end
)
end
).
-file("src/glopenai/container.gleam", 313).
-spec new_create_request(binary()) -> create_container_request().
new_create_request(Name) ->
{create_container_request, Name, none, none, none}.
-file("src/glopenai/container.gleam", 322).
-spec with_file_ids(create_container_request(), list(binary())) -> create_container_request().
with_file_ids(Request, File_ids) ->
{create_container_request,
erlang:element(2, Request),
{some, File_ids},
erlang:element(4, Request),
erlang:element(5, Request)}.
-file("src/glopenai/container.gleam", 329).
-spec with_expires_after(create_container_request(), container_expires_after()) -> create_container_request().
with_expires_after(Request, Expires_after) ->
{create_container_request,
erlang:element(2, Request),
erlang:element(3, Request),
{some, Expires_after},
erlang:element(5, Request)}.
-file("src/glopenai/container.gleam", 336).
-spec with_memory_limit(create_container_request(), memory_limit()) -> create_container_request().
with_memory_limit(Request, Memory_limit) ->
{create_container_request,
erlang:element(2, Request),
erlang:element(3, Request),
erlang:element(4, Request),
{some, Memory_limit}}.
-file("src/glopenai/container.gleam", 343).
-spec create_container_request_to_json(create_container_request()) -> gleam@json:json().
create_container_request_to_json(Request) ->
glopenai@internal@codec:object_with_optional(
[{<<"name"/utf8>>, gleam@json:string(erlang:element(2, Request))}],
[glopenai@internal@codec:optional_field(
<<"file_ids"/utf8>>,
erlang:element(3, Request),
fun(Ids) -> gleam@json:array(Ids, fun gleam@json:string/1) end
),
glopenai@internal@codec:optional_field(
<<"expires_after"/utf8>>,
erlang:element(4, Request),
fun container_expires_after_to_json/1
),
glopenai@internal@codec:optional_field(
<<"memory_limit"/utf8>>,
erlang:element(5, Request),
fun memory_limit_to_json/1
)]
).
-file("src/glopenai/container.gleam", 388).
-spec order_to_string(list_order()) -> binary().
order_to_string(Order) ->
case Order of
asc ->
<<"asc"/utf8>>;
desc ->
<<"desc"/utf8>>
end.
-file("src/glopenai/container.gleam", 403).
-spec empty_list_containers_query() -> list_containers_query().
empty_list_containers_query() ->
{list_containers_query, none, none, none}.
-file("src/glopenai/container.gleam", 425).
-spec empty_list_container_files_query() -> list_container_files_query().
empty_list_container_files_query() ->
{list_container_files_query, none, none, none}.
-file("src/glopenai/container.gleam", 439).
-spec optional_string_pair(
binary(),
gleam@option:option(IFS),
fun((IFS) -> binary())
) -> list({binary(), binary()}).
optional_string_pair(Key, Value, Encode) ->
case Value of
{some, V} ->
[{Key, Encode(V)}];
none ->
[]
end.
-file("src/glopenai/container.gleam", 407).
-spec list_containers_query_pairs(list_containers_query()) -> list({binary(),
binary()}).
list_containers_query_pairs(Query) ->
lists:append(
[optional_string_pair(
<<"limit"/utf8>>,
erlang:element(2, Query),
fun erlang:integer_to_binary/1
),
optional_string_pair(
<<"order"/utf8>>,
erlang:element(3, Query),
fun order_to_string/1
),
optional_string_pair(
<<"after"/utf8>>,
erlang:element(4, Query),
fun(S) -> S end
)]
).
-file("src/glopenai/container.gleam", 429).
-spec list_container_files_query_pairs(list_container_files_query()) -> list({binary(),
binary()}).
list_container_files_query_pairs(Query) ->
lists:append(
[optional_string_pair(
<<"limit"/utf8>>,
erlang:element(2, Query),
fun erlang:integer_to_binary/1
),
optional_string_pair(
<<"order"/utf8>>,
erlang:element(3, Query),
fun order_to_string/1
),
optional_string_pair(
<<"after"/utf8>>,
erlang:element(4, Query),
fun(S) -> S end
)]
).
-file("src/glopenai/container.gleam", 454).
-spec create_request(glopenai@config:config(), create_container_request()) -> gleam@http@request:request(binary()).
create_request(Config, Request) ->
glopenai@internal:post_request(
Config,
<<"/containers"/utf8>>,
create_container_request_to_json(Request)
).
-file("src/glopenai/container.gleam", 465).
-spec create_response(gleam@http@response:response(binary())) -> {ok,
container_resource()} |
{error, glopenai@error:glopenai_error()}.
create_response(Response) ->
glopenai@internal:parse_response(Response, container_resource_decoder()).
-file("src/glopenai/container.gleam", 471).
-spec list_request(glopenai@config:config()) -> gleam@http@request:request(binary()).
list_request(Config) ->
glopenai@internal:get_request(Config, <<"/containers"/utf8>>).
-file("src/glopenai/container.gleam", 475).
-spec list_request_with_query(glopenai@config:config(), list_containers_query()) -> gleam@http@request:request(binary()).
list_request_with_query(Config, Query) ->
_pipe = glopenai@internal:get_request(Config, <<"/containers"/utf8>>),
gleam@http@request:set_query(_pipe, list_containers_query_pairs(Query)).
-file("src/glopenai/container.gleam", 483).
-spec list_response(gleam@http@response:response(binary())) -> {ok,
container_list_resource()} |
{error, glopenai@error:glopenai_error()}.
list_response(Response) ->
glopenai@internal:parse_response(
Response,
container_list_resource_decoder()
).
-file("src/glopenai/container.gleam", 489).
-spec retrieve_request(glopenai@config:config(), binary()) -> gleam@http@request:request(binary()).
retrieve_request(Config, Container_id) ->
glopenai@internal:get_request(
Config,
<<"/containers/"/utf8, Container_id/binary>>
).
-file("src/glopenai/container.gleam", 493).
-spec retrieve_response(gleam@http@response:response(binary())) -> {ok,
container_resource()} |
{error, glopenai@error:glopenai_error()}.
retrieve_response(Response) ->
glopenai@internal:parse_response(Response, container_resource_decoder()).
-file("src/glopenai/container.gleam", 499).
-spec delete_request(glopenai@config:config(), binary()) -> gleam@http@request:request(binary()).
delete_request(Config, Container_id) ->
glopenai@internal:delete_request(
Config,
<<"/containers/"/utf8, Container_id/binary>>
).
-file("src/glopenai/container.gleam", 503).
-spec delete_response(gleam@http@response:response(binary())) -> {ok,
delete_container_response()} |
{error, glopenai@error:glopenai_error()}.
delete_response(Response) ->
glopenai@internal:parse_response(
Response,
delete_container_response_decoder()
).
-file("src/glopenai/container.gleam", 518).
?DOC(
" Build a multipart `POST /containers/{container_id}/files` request.\n"
"\n"
" When uploading raw bytes, the caller supplies `boundary` explicitly — it\n"
" must not appear inside `data`. The `file_id` variant still goes through\n"
" multipart (matching the Rust client) but carries only a single text field.\n"
).
-spec file_create_request(
glopenai@config:config(),
binary(),
container_file_upload(),
binary()
) -> gleam@http@request:request(bitstring()).
file_create_request(Config, Container_id, Upload, Boundary) ->
Parts = case Upload of
{upload_bytes, Filename, Content_type, Data} ->
[{file_part, <<"file"/utf8>>, Filename, Content_type, Data}];
{upload_by_file_id, File_id} ->
[{field_part, <<"file_id"/utf8>>, File_id}]
end,
glopenai@internal:multipart_request(
Config,
post,
<<<<"/containers/"/utf8, Container_id/binary>>/binary, "/files"/utf8>>,
Parts,
Boundary
).
-file("src/glopenai/container.gleam", 546).
-spec file_create_response(gleam@http@response:response(binary())) -> {ok,
container_file_resource()} |
{error, glopenai@error:glopenai_error()}.
file_create_response(Response) ->
glopenai@internal:parse_response(
Response,
container_file_resource_decoder()
).
-file("src/glopenai/container.gleam", 552).
-spec file_list_request(glopenai@config:config(), binary()) -> gleam@http@request:request(binary()).
file_list_request(Config, Container_id) ->
glopenai@internal:get_request(
Config,
<<<<"/containers/"/utf8, Container_id/binary>>/binary, "/files"/utf8>>
).
-file("src/glopenai/container.gleam", 559).
-spec file_list_request_with_query(
glopenai@config:config(),
binary(),
list_container_files_query()
) -> gleam@http@request:request(binary()).
file_list_request_with_query(Config, Container_id, Query) ->
_pipe = glopenai@internal:get_request(
Config,
<<<<"/containers/"/utf8, Container_id/binary>>/binary, "/files"/utf8>>
),
gleam@http@request:set_query(_pipe, list_container_files_query_pairs(Query)).
-file("src/glopenai/container.gleam", 568).
-spec file_list_response(gleam@http@response:response(binary())) -> {ok,
container_file_list_resource()} |
{error, glopenai@error:glopenai_error()}.
file_list_response(Response) ->
glopenai@internal:parse_response(
Response,
container_file_list_resource_decoder()
).
-file("src/glopenai/container.gleam", 574).
-spec file_retrieve_request(glopenai@config:config(), binary(), binary()) -> gleam@http@request:request(binary()).
file_retrieve_request(Config, Container_id, File_id) ->
glopenai@internal:get_request(
Config,
<<<<<<"/containers/"/utf8, Container_id/binary>>/binary,
"/files/"/utf8>>/binary,
File_id/binary>>
).
-file("src/glopenai/container.gleam", 585).
-spec file_retrieve_response(gleam@http@response:response(binary())) -> {ok,
container_file_resource()} |
{error, glopenai@error:glopenai_error()}.
file_retrieve_response(Response) ->
glopenai@internal:parse_response(
Response,
container_file_resource_decoder()
).
-file("src/glopenai/container.gleam", 591).
-spec file_delete_request(glopenai@config:config(), binary(), binary()) -> gleam@http@request:request(binary()).
file_delete_request(Config, Container_id, File_id) ->
glopenai@internal:delete_request(
Config,
<<<<<<"/containers/"/utf8, Container_id/binary>>/binary,
"/files/"/utf8>>/binary,
File_id/binary>>
).
-file("src/glopenai/container.gleam", 602).
-spec file_delete_response(gleam@http@response:response(binary())) -> {ok,
delete_container_file_response()} |
{error, glopenai@error:glopenai_error()}.
file_delete_response(Response) ->
glopenai@internal:parse_response(
Response,
delete_container_file_response_decoder()
).
-file("src/glopenai/container.gleam", 611).
?DOC(
" Build a request for the raw file content. The body is returned as bytes\n"
" (typed as `String` to keep the sans-IO signature uniform; clients that\n"
" need strict binary handling should use `httpc.send_bits` and decode).\n"
).
-spec file_content_request(glopenai@config:config(), binary(), binary()) -> gleam@http@request:request(binary()).
file_content_request(Config, Container_id, File_id) ->
glopenai@internal:get_request(
Config,
<<<<<<<<"/containers/"/utf8, Container_id/binary>>/binary,
"/files/"/utf8>>/binary,
File_id/binary>>/binary,
"/content"/utf8>>
).
-file("src/glopenai/container.gleam", 625).
?DOC(
" Parse a file-content response. On 2xx returns the raw body string.\n"
" On non-2xx attempts to decode an API error, falling back to\n"
" `UnexpectedResponse`.\n"
).
-spec file_content_response(gleam@http@response:response(binary())) -> {ok,
binary()} |
{error, glopenai@error:glopenai_error()}.
file_content_response(Response) ->
case (erlang:element(2, Response) >= 200) andalso (erlang:element(
2,
Response
)
< 300) of
true ->
{ok, erlang:element(4, Response)};
false ->
case gleam@json:parse(
erlang:element(4, Response),
glopenai@error:wrapped_error_decoder()
) of
{ok, Api_error} ->
{error,
{api_response_error,
erlang:element(2, Response),
Api_error}};
{error, _} ->
{error,
{unexpected_response,
erlang:element(2, Response),
erlang:element(4, Response)}}
end
end.