-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()).