Current section
Files
Jump to
Current section
Files
src/glopenai@upload.erl
-module(glopenai@upload).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/glopenai/upload.gleam").
-export([upload_purpose_to_json/1, upload_purpose_decoder/0, upload_status_decoder/0, upload_decoder/0, upload_part_decoder/0, new_create_request/4, with_expires_after/2, create_upload_request_to_json/1, new_complete_request/1, with_md5/2, complete_upload_request_to_json/1, create_request/2, create_response/1, add_part_request/4, add_part_response/1, complete_request/3, complete_response/1, cancel_request/2, cancel_response/1]).
-export_type([upload_purpose/0, upload_status/0, upload/0, upload_part/0, create_upload_request/0, complete_upload_request/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 upload_purpose() :: upload_assistants |
upload_vision |
upload_batch |
upload_fine_tune.
-type upload_status() :: upload_pending |
upload_completed |
upload_cancelled |
upload_expired.
-type upload() :: {upload,
binary(),
integer(),
binary(),
integer(),
upload_purpose(),
upload_status(),
integer(),
binary(),
gleam@option:option(glopenai@file:open_ai_file())}.
-type upload_part() :: {upload_part, binary(), integer(), binary(), binary()}.
-type create_upload_request() :: {create_upload_request,
binary(),
upload_purpose(),
integer(),
binary(),
gleam@option:option(glopenai@file:file_expiration_after())}.
-type complete_upload_request() :: {complete_upload_request,
list(binary()),
gleam@option:option(binary())}.
-file("src/glopenai/upload.gleam", 37).
-spec upload_purpose_to_json(upload_purpose()) -> gleam@json:json().
upload_purpose_to_json(Purpose) ->
gleam@json:string(case Purpose of
upload_assistants ->
<<"assistants"/utf8>>;
upload_vision ->
<<"vision"/utf8>>;
upload_batch ->
<<"batch"/utf8>>;
upload_fine_tune ->
<<"fine-tune"/utf8>>
end).
-file("src/glopenai/upload.gleam", 46).
-spec upload_purpose_decoder() -> gleam@dynamic@decode:decoder(upload_purpose()).
upload_purpose_decoder() ->
gleam@dynamic@decode:then(
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Value) -> case Value of
<<"assistants"/utf8>> ->
gleam@dynamic@decode:success(upload_assistants);
<<"vision"/utf8>> ->
gleam@dynamic@decode:success(upload_vision);
<<"batch"/utf8>> ->
gleam@dynamic@decode:success(upload_batch);
<<"fine-tune"/utf8>> ->
gleam@dynamic@decode:success(upload_fine_tune);
_ ->
gleam@dynamic@decode:failure(
upload_fine_tune,
<<"UploadPurpose"/utf8>>
)
end end
).
-file("src/glopenai/upload.gleam", 64).
-spec upload_status_decoder() -> gleam@dynamic@decode:decoder(upload_status()).
upload_status_decoder() ->
gleam@dynamic@decode:then(
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Value) -> case Value of
<<"pending"/utf8>> ->
gleam@dynamic@decode:success(upload_pending);
<<"completed"/utf8>> ->
gleam@dynamic@decode:success(upload_completed);
<<"cancelled"/utf8>> ->
gleam@dynamic@decode:success(upload_cancelled);
<<"expired"/utf8>> ->
gleam@dynamic@decode:success(upload_expired);
_ ->
gleam@dynamic@decode:failure(
upload_pending,
<<"UploadStatus"/utf8>>
)
end end
).
-file("src/glopenai/upload.gleam", 90).
-spec upload_decoder() -> gleam@dynamic@decode:decoder(upload()).
upload_decoder() ->
gleam@dynamic@decode:field(
<<"id"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Id) ->
gleam@dynamic@decode:field(
<<"created_at"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(Created_at) ->
gleam@dynamic@decode:field(
<<"filename"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Filename) ->
gleam@dynamic@decode:field(
<<"bytes"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(Bytes) ->
gleam@dynamic@decode:field(
<<"purpose"/utf8>>,
upload_purpose_decoder(),
fun(Purpose) ->
gleam@dynamic@decode:field(
<<"status"/utf8>>,
upload_status_decoder(),
fun(Status) ->
gleam@dynamic@decode:field(
<<"expires_at"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_int/1},
fun(Expires_at) ->
gleam@dynamic@decode:field(
<<"object"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_string/1},
fun(Object) ->
gleam@dynamic@decode:optional_field(
<<"file"/utf8>>,
none,
gleam@dynamic@decode:optional(
glopenai@file:openai_file_decoder(
)
),
fun(
File
) ->
gleam@dynamic@decode:success(
{upload,
Id,
Created_at,
Filename,
Bytes,
Purpose,
Status,
Expires_at,
Object,
File}
)
end
)
end
)
end
)
end
)
end
)
end
)
end
)
end
)
end
).
-file("src/glopenai/upload.gleam", 121).
-spec upload_part_decoder() -> gleam@dynamic@decode:decoder(upload_part()).
upload_part_decoder() ->
gleam@dynamic@decode:field(
<<"id"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Id) ->
gleam@dynamic@decode:field(
<<"created_at"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(Created_at) ->
gleam@dynamic@decode:field(
<<"upload_id"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Upload_id) ->
gleam@dynamic@decode:field(
<<"object"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_string/1},
fun(Object) ->
gleam@dynamic@decode:success(
{upload_part,
Id,
Created_at,
Upload_id,
Object}
)
end
)
end
)
end
)
end
).
-file("src/glopenai/upload.gleam", 146).
-spec new_create_request(binary(), upload_purpose(), integer(), binary()) -> create_upload_request().
new_create_request(Filename, Purpose, Bytes, Mime_type) ->
{create_upload_request, Filename, Purpose, Bytes, Mime_type, none}.
-file("src/glopenai/upload.gleam", 161).
-spec with_expires_after(
create_upload_request(),
glopenai@file:file_expiration_after()
) -> create_upload_request().
with_expires_after(Request, Expires_after) ->
{create_upload_request,
erlang:element(2, Request),
erlang:element(3, Request),
erlang:element(4, Request),
erlang:element(5, Request),
{some, Expires_after}}.
-file("src/glopenai/upload.gleam", 168).
-spec create_upload_request_to_json(create_upload_request()) -> gleam@json:json().
create_upload_request_to_json(Request) ->
glopenai@internal@codec:object_with_optional(
[{<<"filename"/utf8>>, gleam@json:string(erlang:element(2, Request))},
{<<"purpose"/utf8>>,
upload_purpose_to_json(erlang:element(3, Request))},
{<<"bytes"/utf8>>, gleam@json:int(erlang:element(4, Request))},
{<<"mime_type"/utf8>>,
gleam@json:string(erlang:element(5, Request))}],
[glopenai@internal@codec:optional_field(
<<"expires_after"/utf8>>,
erlang:element(6, Request),
fun glopenai@file:file_expiration_after_to_json/1
)]
).
-file("src/glopenai/upload.gleam", 192).
-spec new_complete_request(list(binary())) -> complete_upload_request().
new_complete_request(Part_ids) ->
{complete_upload_request, Part_ids, none}.
-file("src/glopenai/upload.gleam", 196).
-spec with_md5(complete_upload_request(), binary()) -> complete_upload_request().
with_md5(Request, Md5) ->
{complete_upload_request, erlang:element(2, Request), {some, Md5}}.
-file("src/glopenai/upload.gleam", 203).
-spec complete_upload_request_to_json(complete_upload_request()) -> gleam@json:json().
complete_upload_request_to_json(Request) ->
glopenai@internal@codec:object_with_optional(
[{<<"part_ids"/utf8>>,
gleam@json:array(
erlang:element(2, Request),
fun gleam@json:string/1
)}],
[glopenai@internal@codec:optional_field(
<<"md5"/utf8>>,
erlang:element(3, Request),
fun gleam@json:string/1
)]
).
-file("src/glopenai/upload.gleam", 216).
-spec create_request(glopenai@config:config(), create_upload_request()) -> gleam@http@request:request(binary()).
create_request(Config, Request) ->
glopenai@internal:post_request(
Config,
<<"/uploads"/utf8>>,
create_upload_request_to_json(Request)
).
-file("src/glopenai/upload.gleam", 227).
-spec create_response(gleam@http@response:response(binary())) -> {ok, upload()} |
{error, glopenai@error:glopenai_error()}.
create_response(Response) ->
glopenai@internal:parse_response(Response, upload_decoder()).
-file("src/glopenai/upload.gleam", 235).
?DOC(
" Build the multipart `add part` request. `data` is the raw chunk bytes;\n"
" `boundary` must not appear in `data` (pick a long random string or hash).\n"
).
-spec add_part_request(
glopenai@config:config(),
binary(),
bitstring(),
binary()
) -> gleam@http@request:request(bitstring()).
add_part_request(Config, Upload_id, Data, Boundary) ->
glopenai@internal:multipart_request(
Config,
post,
<<<<"/uploads/"/utf8, Upload_id/binary>>/binary, "/parts"/utf8>>,
[{file_part,
<<"data"/utf8>>,
<<"part"/utf8>>,
<<"application/octet-stream"/utf8>>,
Data}],
Boundary
).
-file("src/glopenai/upload.gleam", 257).
-spec add_part_response(gleam@http@response:response(binary())) -> {ok,
upload_part()} |
{error, glopenai@error:glopenai_error()}.
add_part_response(Response) ->
glopenai@internal:parse_response(Response, upload_part_decoder()).
-file("src/glopenai/upload.gleam", 263).
-spec complete_request(
glopenai@config:config(),
binary(),
complete_upload_request()
) -> gleam@http@request:request(binary()).
complete_request(Config, Upload_id, Request) ->
glopenai@internal:post_request(
Config,
<<<<"/uploads/"/utf8, Upload_id/binary>>/binary, "/complete"/utf8>>,
complete_upload_request_to_json(Request)
).
-file("src/glopenai/upload.gleam", 275).
-spec complete_response(gleam@http@response:response(binary())) -> {ok,
upload()} |
{error, glopenai@error:glopenai_error()}.
complete_response(Response) ->
glopenai@internal:parse_response(Response, upload_decoder()).
-file("src/glopenai/upload.gleam", 281).
-spec cancel_request(glopenai@config:config(), binary()) -> gleam@http@request:request(binary()).
cancel_request(Config, Upload_id) ->
glopenai@internal:post_request(
Config,
<<<<"/uploads/"/utf8, Upload_id/binary>>/binary, "/cancel"/utf8>>,
gleam@json:object([])
).
-file("src/glopenai/upload.gleam", 289).
-spec cancel_response(gleam@http@response:response(binary())) -> {ok, upload()} |
{error, glopenai@error:glopenai_error()}.
cancel_response(Response) ->
glopenai@internal:parse_response(Response, upload_decoder()).