brane fart here?
Some checks failed
ci/woodpecker/push/author-tests Pipeline failed

This commit is contained in:
Ryan Voots 2023-11-22 17:40:06 -05:00
parent 3b7e9da9cb
commit 2112424a80
9 changed files with 227 additions and 103 deletions

100
.vstags
View file

@ -9849,8 +9849,12 @@ Object::PadX::Role::AutoMarshal::unimport local/lib/perl5/Object/PadX/Role/AutoM
OlsonVersion local/lib/perl5/DateTime/TimeZone/Catalog.pm 1865;" s OlsonVersion local/lib/perl5/DateTime/TimeZone/Catalog.pm 1865;" s
OpenAIAsync .build/0T4wbFlmwf/blib/lib/OpenAIAsync.pm 1;" p OpenAIAsync .build/0T4wbFlmwf/blib/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/0T4wbFlmwf/lib/OpenAIAsync.pm 1;" p OpenAIAsync .build/0T4wbFlmwf/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/2oNz8Mp68u/blib/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/2oNz8Mp68u/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync.pm 1;" p OpenAIAsync .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/AcmKa2ZbCJ/lib/OpenAIAsync.pm 1;" p OpenAIAsync .build/AcmKa2ZbCJ/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/JhaXDkLtkw/blib/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/JhaXDkLtkw/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/UPVIKQUOaN/blib/lib/OpenAIAsync.pm 1;" p OpenAIAsync .build/UPVIKQUOaN/blib/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/UPVIKQUOaN/lib/OpenAIAsync.pm 1;" p OpenAIAsync .build/UPVIKQUOaN/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/Xz72xzB4iA/blib/lib/OpenAIAsync.pm 1;" p OpenAIAsync .build/Xz72xzB4iA/blib/lib/OpenAIAsync.pm 1;" p
@ -9859,13 +9863,17 @@ OpenAIAsync .build/bgXXjrPaza/blib/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/bgXXjrPaza/lib/OpenAIAsync.pm 1;" p OpenAIAsync .build/bgXXjrPaza/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/mKmyAW37h1/blib/lib/OpenAIAsync.pm 1;" p OpenAIAsync .build/mKmyAW37h1/blib/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/mKmyAW37h1/lib/OpenAIAsync.pm 1;" p OpenAIAsync .build/mKmyAW37h1/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/previous/blib/lib/OpenAIAsync.pm 1;" p OpenAIAsync .build/t7Cb8f47yj/blib/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/previous/lib/OpenAIAsync.pm 1;" p OpenAIAsync .build/t7Cb8f47yj/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/trQp7H7Uyl/blib/lib/OpenAIAsync.pm 1;" p OpenAIAsync .build/trQp7H7Uyl/blib/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/trQp7H7Uyl/lib/OpenAIAsync.pm 1;" p OpenAIAsync .build/trQp7H7Uyl/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/wX6DkQhw6E/blib/lib/OpenAIAsync.pm 1;" p OpenAIAsync .build/wX6DkQhw6E/blib/lib/OpenAIAsync.pm 1;" p
OpenAIAsync .build/wX6DkQhw6E/lib/OpenAIAsync.pm 1;" p OpenAIAsync .build/wX6DkQhw6E/lib/OpenAIAsync.pm 1;" p
OpenAIAsync lib/OpenAIAsync.pm 1;" p OpenAIAsync lib/OpenAIAsync.pm 1;" p
OpenAIAsync::Client .build/2oNz8Mp68u/blib/lib/OpenAIAsync/Client.pm 1;" p
OpenAIAsync::Client .build/2oNz8Mp68u/lib/OpenAIAsync/Client.pm 1;" p
OpenAIAsync::Client .build/JhaXDkLtkw/blib/lib/OpenAIAsync/Client.pm 1;" p
OpenAIAsync::Client .build/JhaXDkLtkw/lib/OpenAIAsync/Client.pm 1;" p
OpenAIAsync::Client .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Client.pm 1;" p OpenAIAsync::Client .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Client.pm 1;" p
OpenAIAsync::Client .build/UPVIKQUOaN/lib/OpenAIAsync/Client.pm 1;" p OpenAIAsync::Client .build/UPVIKQUOaN/lib/OpenAIAsync/Client.pm 1;" p
OpenAIAsync::Client .build/Xz72xzB4iA/blib/lib/OpenAIAsync/Client.pm 1;" p OpenAIAsync::Client .build/Xz72xzB4iA/blib/lib/OpenAIAsync/Client.pm 1;" p
@ -9874,13 +9882,17 @@ OpenAIAsync::Client .build/bgXXjrPaza/blib/lib/OpenAIAsync/Client.pm 1;" p
OpenAIAsync::Client .build/bgXXjrPaza/lib/OpenAIAsync/Client.pm 1;" p OpenAIAsync::Client .build/bgXXjrPaza/lib/OpenAIAsync/Client.pm 1;" p
OpenAIAsync::Client .build/mKmyAW37h1/blib/lib/OpenAIAsync/Client.pm 1;" p OpenAIAsync::Client .build/mKmyAW37h1/blib/lib/OpenAIAsync/Client.pm 1;" p
OpenAIAsync::Client .build/mKmyAW37h1/lib/OpenAIAsync/Client.pm 1;" p OpenAIAsync::Client .build/mKmyAW37h1/lib/OpenAIAsync/Client.pm 1;" p
OpenAIAsync::Client .build/previous/blib/lib/OpenAIAsync/Client.pm 1;" p OpenAIAsync::Client .build/t7Cb8f47yj/blib/lib/OpenAIAsync/Client.pm 1;" p
OpenAIAsync::Client .build/previous/lib/OpenAIAsync/Client.pm 1;" p OpenAIAsync::Client .build/t7Cb8f47yj/lib/OpenAIAsync/Client.pm 1;" p
OpenAIAsync::Client lib/OpenAIAsync/Client.pm 1;" p OpenAIAsync::Client lib/OpenAIAsync/Client.pm 1;" p
OpenAIAsync::Types .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types.pm 1;" p OpenAIAsync::Types .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/0T4wbFlmwf/lib/OpenAIAsync/Types.pm 1;" p OpenAIAsync::Types .build/0T4wbFlmwf/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/2oNz8Mp68u/blib/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/2oNz8Mp68u/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types.pm 1;" p OpenAIAsync::Types .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types.pm 1;" p OpenAIAsync::Types .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/JhaXDkLtkw/blib/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/JhaXDkLtkw/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Types.pm 1;" p OpenAIAsync::Types .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/UPVIKQUOaN/lib/OpenAIAsync/Types.pm 1;" p OpenAIAsync::Types .build/UPVIKQUOaN/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/Xz72xzB4iA/blib/lib/OpenAIAsync/Types.pm 1;" p OpenAIAsync::Types .build/Xz72xzB4iA/blib/lib/OpenAIAsync/Types.pm 1;" p
@ -9889,8 +9901,8 @@ OpenAIAsync::Types .build/bgXXjrPaza/blib/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/bgXXjrPaza/lib/OpenAIAsync/Types.pm 1;" p OpenAIAsync::Types .build/bgXXjrPaza/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/mKmyAW37h1/blib/lib/OpenAIAsync/Types.pm 1;" p OpenAIAsync::Types .build/mKmyAW37h1/blib/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/mKmyAW37h1/lib/OpenAIAsync/Types.pm 1;" p OpenAIAsync::Types .build/mKmyAW37h1/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/previous/blib/lib/OpenAIAsync/Types.pm 1;" p OpenAIAsync::Types .build/t7Cb8f47yj/blib/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/previous/lib/OpenAIAsync/Types.pm 1;" p OpenAIAsync::Types .build/t7Cb8f47yj/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types.pm 1;" p OpenAIAsync::Types .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/trQp7H7Uyl/lib/OpenAIAsync/Types.pm 1;" p OpenAIAsync::Types .build/trQp7H7Uyl/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types.pm 1;" p OpenAIAsync::Types .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types.pm 1;" p
@ -9898,10 +9910,14 @@ OpenAIAsync::Types .build/wX6DkQhw6E/lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types lib/OpenAIAsync/Types.pm 1;" p OpenAIAsync::Types lib/OpenAIAsync/Types.pm 1;" p
OpenAIAsync::Types::Requests .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/0T4wbFlmwf/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/0T4wbFlmwf/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/2oNz8Mp68u/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/2oNz8Mp68u/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/4DgDOdekNW/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/4DgDOdekNW/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/4DgDOdekNW/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/4DgDOdekNW/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/JhaXDkLtkw/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/JhaXDkLtkw/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/UPVIKQUOaN/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/UPVIKQUOaN/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/Xz72xzB4iA/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/Xz72xzB4iA/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p
@ -9916,8 +9932,8 @@ OpenAIAsync::Types::Requests .build/mKmyAW37h1/blib/lib/OpenAIAsync/Types/Reques
OpenAIAsync::Types::Requests .build/mKmyAW37h1/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/mKmyAW37h1/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/nb3podVIwj/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/nb3podVIwj/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/nb3podVIwj/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/nb3podVIwj/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/previous/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/t7Cb8f47yj/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/previous/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/t7Cb8f47yj/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/trQp7H7Uyl/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/trQp7H7Uyl/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types/Requests.pm 1;" p
@ -9926,10 +9942,14 @@ OpenAIAsync::Types::Requests lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests:: .build/NfFNPyy4iR/lib/OpenAIAsync/Types/Requests.pm 1;" p OpenAIAsync::Types::Requests:: .build/NfFNPyy4iR/lib/OpenAIAsync/Types/Requests.pm 1;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/0T4wbFlmwf/lib/OpenAIAsync/Types/Requests.pm 170;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/0T4wbFlmwf/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/2oNz8Mp68u/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/2oNz8Mp68u/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/4DgDOdekNW/blib/lib/OpenAIAsync/Types/Requests.pm 169;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/4DgDOdekNW/blib/lib/OpenAIAsync/Types/Requests.pm 169;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/4DgDOdekNW/lib/OpenAIAsync/Types/Requests.pm 169;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/4DgDOdekNW/lib/OpenAIAsync/Types/Requests.pm 169;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types/Requests.pm 170;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/JhaXDkLtkw/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/JhaXDkLtkw/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/NfFNPyy4iR/lib/OpenAIAsync/Types/Requests.pm 169;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/NfFNPyy4iR/lib/OpenAIAsync/Types/Requests.pm 169;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/UPVIKQUOaN/lib/OpenAIAsync/Types/Requests.pm 170;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/UPVIKQUOaN/lib/OpenAIAsync/Types/Requests.pm 170;" p
@ -9945,19 +9965,23 @@ OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/mKmyAW37h1/
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/mKmyAW37h1/lib/OpenAIAsync/Types/Requests.pm 170;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/mKmyAW37h1/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/nb3podVIwj/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/nb3podVIwj/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/nb3podVIwj/lib/OpenAIAsync/Types/Requests.pm 170;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/nb3podVIwj/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/previous/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/t7Cb8f47yj/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/previous/lib/OpenAIAsync/Types/Requests.pm 170;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/t7Cb8f47yj/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/trQp7H7Uyl/lib/OpenAIAsync/Types/Requests.pm 170;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/trQp7H7Uyl/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/wX6DkQhw6E/lib/OpenAIAsync/Types/Requests.pm 170;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union .build/wX6DkQhw6E/lib/OpenAIAsync/Types/Requests.pm 170;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union lib/OpenAIAsync/Types/Requests.pm 170;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union lib/OpenAIAsync/Types/Requests.pm 186;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/0T4wbFlmwf/lib/OpenAIAsync/Types/Requests.pm 94;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/0T4wbFlmwf/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/2oNz8Mp68u/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/2oNz8Mp68u/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/4DgDOdekNW/blib/lib/OpenAIAsync/Types/Requests.pm 93;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/4DgDOdekNW/blib/lib/OpenAIAsync/Types/Requests.pm 93;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/4DgDOdekNW/lib/OpenAIAsync/Types/Requests.pm 93;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/4DgDOdekNW/lib/OpenAIAsync/Types/Requests.pm 93;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types/Requests.pm 94;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/JhaXDkLtkw/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/JhaXDkLtkw/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/NfFNPyy4iR/lib/OpenAIAsync/Types/Requests.pm 93;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/NfFNPyy4iR/lib/OpenAIAsync/Types/Requests.pm 93;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/UPVIKQUOaN/lib/OpenAIAsync/Types/Requests.pm 94;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/UPVIKQUOaN/lib/OpenAIAsync/Types/Requests.pm 94;" p
@ -9973,19 +9997,23 @@ OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .buil
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/mKmyAW37h1/lib/OpenAIAsync/Types/Requests.pm 94;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/mKmyAW37h1/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/nb3podVIwj/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/nb3podVIwj/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/nb3podVIwj/lib/OpenAIAsync/Types/Requests.pm 94;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/nb3podVIwj/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/previous/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/t7Cb8f47yj/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/previous/lib/OpenAIAsync/Types/Requests.pm 94;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/t7Cb8f47yj/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/trQp7H7Uyl/lib/OpenAIAsync/Types/Requests.pm 94;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/trQp7H7Uyl/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/wX6DkQhw6E/lib/OpenAIAsync/Types/Requests.pm 94;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion .build/wX6DkQhw6E/lib/OpenAIAsync/Types/Requests.pm 94;" p
OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion lib/OpenAIAsync/Types/Requests.pm 94;" p OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ContentUnion lib/OpenAIAsync/Types/Requests.pm 110;" p
OpenAIAsync::Types::Results .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/0T4wbFlmwf/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/0T4wbFlmwf/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/2oNz8Mp68u/blib/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/2oNz8Mp68u/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/4DgDOdekNW/blib/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/4DgDOdekNW/blib/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/4DgDOdekNW/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/4DgDOdekNW/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/JhaXDkLtkw/blib/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/JhaXDkLtkw/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/NfFNPyy4iR/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/NfFNPyy4iR/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/UPVIKQUOaN/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/UPVIKQUOaN/lib/OpenAIAsync/Types/Results.pm 1;" p
@ -10001,8 +10029,8 @@ OpenAIAsync::Types::Results .build/mKmyAW37h1/blib/lib/OpenAIAsync/Types/Results
OpenAIAsync::Types::Results .build/mKmyAW37h1/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/mKmyAW37h1/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/nb3podVIwj/blib/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/nb3podVIwj/blib/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/nb3podVIwj/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/nb3podVIwj/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/previous/blib/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/t7Cb8f47yj/blib/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/previous/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/t7Cb8f47yj/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/trQp7H7Uyl/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/trQp7H7Uyl/lib/OpenAIAsync/Types/Results.pm 1;" p
OpenAIAsync::Types::Results .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types/Results.pm 1;" p OpenAIAsync::Types::Results .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types/Results.pm 1;" p
@ -28052,6 +28080,10 @@ new .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
new .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s new .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
new .build/0T4wbFlmwf/lib/OpenAIAsync/Types/Requests.pm 173;" s new .build/0T4wbFlmwf/lib/OpenAIAsync/Types/Requests.pm 173;" s
new .build/0T4wbFlmwf/lib/OpenAIAsync/Types/Requests.pm 97;" s new .build/0T4wbFlmwf/lib/OpenAIAsync/Types/Requests.pm 97;" s
new .build/2oNz8Mp68u/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
new .build/2oNz8Mp68u/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
new .build/2oNz8Mp68u/lib/OpenAIAsync/Types/Requests.pm 173;" s
new .build/2oNz8Mp68u/lib/OpenAIAsync/Types/Requests.pm 97;" s
new .build/4DgDOdekNW/blib/lib/OpenAIAsync/Types/Requests.pm 172;" s new .build/4DgDOdekNW/blib/lib/OpenAIAsync/Types/Requests.pm 172;" s
new .build/4DgDOdekNW/blib/lib/OpenAIAsync/Types/Requests.pm 96;" s new .build/4DgDOdekNW/blib/lib/OpenAIAsync/Types/Requests.pm 96;" s
new .build/4DgDOdekNW/lib/OpenAIAsync/Types/Requests.pm 172;" s new .build/4DgDOdekNW/lib/OpenAIAsync/Types/Requests.pm 172;" s
@ -28060,6 +28092,10 @@ new .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
new .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s new .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
new .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types/Requests.pm 173;" s new .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types/Requests.pm 173;" s
new .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types/Requests.pm 97;" s new .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types/Requests.pm 97;" s
new .build/JhaXDkLtkw/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
new .build/JhaXDkLtkw/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
new .build/JhaXDkLtkw/lib/OpenAIAsync/Types/Requests.pm 173;" s
new .build/JhaXDkLtkw/lib/OpenAIAsync/Types/Requests.pm 97;" s
new .build/NfFNPyy4iR/lib/OpenAIAsync/Types/Requests.pm 172;" s new .build/NfFNPyy4iR/lib/OpenAIAsync/Types/Requests.pm 172;" s
new .build/NfFNPyy4iR/lib/OpenAIAsync/Types/Requests.pm 96;" s new .build/NfFNPyy4iR/lib/OpenAIAsync/Types/Requests.pm 96;" s
new .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s new .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
@ -28090,10 +28126,10 @@ new .build/nb3podVIwj/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
new .build/nb3podVIwj/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s new .build/nb3podVIwj/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
new .build/nb3podVIwj/lib/OpenAIAsync/Types/Requests.pm 173;" s new .build/nb3podVIwj/lib/OpenAIAsync/Types/Requests.pm 173;" s
new .build/nb3podVIwj/lib/OpenAIAsync/Types/Requests.pm 97;" s new .build/nb3podVIwj/lib/OpenAIAsync/Types/Requests.pm 97;" s
new .build/previous/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s new .build/t7Cb8f47yj/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
new .build/previous/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s new .build/t7Cb8f47yj/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
new .build/previous/lib/OpenAIAsync/Types/Requests.pm 173;" s new .build/t7Cb8f47yj/lib/OpenAIAsync/Types/Requests.pm 173;" s
new .build/previous/lib/OpenAIAsync/Types/Requests.pm 97;" s new .build/t7Cb8f47yj/lib/OpenAIAsync/Types/Requests.pm 97;" s
new .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s new .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
new .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s new .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
new .build/trQp7H7Uyl/lib/OpenAIAsync/Types/Requests.pm 173;" s new .build/trQp7H7Uyl/lib/OpenAIAsync/Types/Requests.pm 173;" s
@ -28102,8 +28138,8 @@ new .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
new .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s new .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
new .build/wX6DkQhw6E/lib/OpenAIAsync/Types/Requests.pm 173;" s new .build/wX6DkQhw6E/lib/OpenAIAsync/Types/Requests.pm 173;" s
new .build/wX6DkQhw6E/lib/OpenAIAsync/Types/Requests.pm 97;" s new .build/wX6DkQhw6E/lib/OpenAIAsync/Types/Requests.pm 97;" s
new lib/OpenAIAsync/Types/Requests.pm 173;" s new lib/OpenAIAsync/Types/Requests.pm 113;" s
new lib/OpenAIAsync/Types/Requests.pm 97;" s new lib/OpenAIAsync/Types/Requests.pm 189;" s
new local/bin/lwp-request 231;" s new local/bin/lwp-request 231;" s
new local/lib/perl5/Algorithm/Diff.pm 580;" s new local/lib/perl5/Algorithm/Diff.pm 580;" s
new local/lib/perl5/App/Cmd.pm 163;" s new local/lib/perl5/App/Cmd.pm 163;" s
@ -28894,10 +28930,14 @@ onlyres local/lib/perl5/List/SomeUtils/PP.pm 160;" s
onlyval local/lib/perl5/List/SomeUtils/PP.pm 148;" s onlyval local/lib/perl5/List/SomeUtils/PP.pm 148;" s
ontent::new .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s ontent::new .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/0T4wbFlmwf/lib/OpenAIAsync/Types/Requests.pm 173;" s ontent::new .build/0T4wbFlmwf/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/2oNz8Mp68u/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/2oNz8Mp68u/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/4DgDOdekNW/blib/lib/OpenAIAsync/Types/Requests.pm 172;" s ontent::new .build/4DgDOdekNW/blib/lib/OpenAIAsync/Types/Requests.pm 172;" s
ontent::new .build/4DgDOdekNW/lib/OpenAIAsync/Types/Requests.pm 172;" s ontent::new .build/4DgDOdekNW/lib/OpenAIAsync/Types/Requests.pm 172;" s
ontent::new .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s ontent::new .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types/Requests.pm 173;" s ontent::new .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/JhaXDkLtkw/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/JhaXDkLtkw/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/NfFNPyy4iR/lib/OpenAIAsync/Types/Requests.pm 172;" s ontent::new .build/NfFNPyy4iR/lib/OpenAIAsync/Types/Requests.pm 172;" s
ontent::new .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s ontent::new .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/UPVIKQUOaN/lib/OpenAIAsync/Types/Requests.pm 173;" s ontent::new .build/UPVIKQUOaN/lib/OpenAIAsync/Types/Requests.pm 173;" s
@ -28913,13 +28953,13 @@ ontent::new .build/mKmyAW37h1/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/mKmyAW37h1/lib/OpenAIAsync/Types/Requests.pm 173;" s ontent::new .build/mKmyAW37h1/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/nb3podVIwj/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s ontent::new .build/nb3podVIwj/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/nb3podVIwj/lib/OpenAIAsync/Types/Requests.pm 173;" s ontent::new .build/nb3podVIwj/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/previous/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s ontent::new .build/t7Cb8f47yj/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/previous/lib/OpenAIAsync/Types/Requests.pm 173;" s ontent::new .build/t7Cb8f47yj/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s ontent::new .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/trQp7H7Uyl/lib/OpenAIAsync/Types/Requests.pm 173;" s ontent::new .build/trQp7H7Uyl/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s ontent::new .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new .build/wX6DkQhw6E/lib/OpenAIAsync/Types/Requests.pm 173;" s ontent::new .build/wX6DkQhw6E/lib/OpenAIAsync/Types/Requests.pm 173;" s
ontent::new lib/OpenAIAsync/Types/Requests.pm 173;" s ontent::new lib/OpenAIAsync/Types/Requests.pm 189;" s
oo local/lib/perl5/oo.pm 1;" p oo local/lib/perl5/oo.pm 1;" p
oo::import local/lib/perl5/oo.pm 22;" s oo::import local/lib/perl5/oo.pm 22;" s
oo::moo local/lib/perl5/oo.pm 7;" s oo::moo local/lib/perl5/oo.pm 7;" s
@ -31559,10 +31599,14 @@ xlp_collapsed_lengths_initialize local/lib/perl5/Perl/Tidy/Formatter.pm 13897;"
xlp_tweak local/lib/perl5/Perl/Tidy/Formatter.pm 29023;" s xlp_tweak local/lib/perl5/Perl/Tidy/Formatter.pm 29023;" s
y::new .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s y::new .build/0T4wbFlmwf/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/0T4wbFlmwf/lib/OpenAIAsync/Types/Requests.pm 97;" s y::new .build/0T4wbFlmwf/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/2oNz8Mp68u/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/2oNz8Mp68u/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/4DgDOdekNW/blib/lib/OpenAIAsync/Types/Requests.pm 96;" s y::new .build/4DgDOdekNW/blib/lib/OpenAIAsync/Types/Requests.pm 96;" s
y::new .build/4DgDOdekNW/lib/OpenAIAsync/Types/Requests.pm 96;" s y::new .build/4DgDOdekNW/lib/OpenAIAsync/Types/Requests.pm 96;" s
y::new .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s y::new .build/AcmKa2ZbCJ/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types/Requests.pm 97;" s y::new .build/AcmKa2ZbCJ/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/JhaXDkLtkw/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/JhaXDkLtkw/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/NfFNPyy4iR/lib/OpenAIAsync/Types/Requests.pm 96;" s y::new .build/NfFNPyy4iR/lib/OpenAIAsync/Types/Requests.pm 96;" s
y::new .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s y::new .build/UPVIKQUOaN/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/UPVIKQUOaN/lib/OpenAIAsync/Types/Requests.pm 97;" s y::new .build/UPVIKQUOaN/lib/OpenAIAsync/Types/Requests.pm 97;" s
@ -31578,13 +31622,13 @@ y::new .build/mKmyAW37h1/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/mKmyAW37h1/lib/OpenAIAsync/Types/Requests.pm 97;" s y::new .build/mKmyAW37h1/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/nb3podVIwj/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s y::new .build/nb3podVIwj/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/nb3podVIwj/lib/OpenAIAsync/Types/Requests.pm 97;" s y::new .build/nb3podVIwj/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/previous/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s y::new .build/t7Cb8f47yj/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/previous/lib/OpenAIAsync/Types/Requests.pm 97;" s y::new .build/t7Cb8f47yj/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s y::new .build/trQp7H7Uyl/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/trQp7H7Uyl/lib/OpenAIAsync/Types/Requests.pm 97;" s y::new .build/trQp7H7Uyl/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s y::new .build/wX6DkQhw6E/blib/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new .build/wX6DkQhw6E/lib/OpenAIAsync/Types/Requests.pm 97;" s y::new .build/wX6DkQhw6E/lib/OpenAIAsync/Types/Requests.pm 97;" s
y::new lib/OpenAIAsync/Types/Requests.pm 97;" s y::new lib/OpenAIAsync/Types/Requests.pm 113;" s
y_n local/lib/perl5/Module/Build/Base.pm 602;" s y_n local/lib/perl5/Module/Build/Base.pm 602;" s
year local/lib/perl5/Software/License.pm 57;" s year local/lib/perl5/Software/License.pm 57;" s
year local/lib/perl5/x86_64-linux/DateTime.pm 767;" s year local/lib/perl5/x86_64-linux/DateTime.pm 767;" s

View file

@ -126,8 +126,23 @@ class OpenAIAsync::Client :repr(HASH) :isa(IO::Async::Notifier) :strict(params)
return $type_result; return $type_result;
} }
async method chat($prompt) { async method chat($input) {
... if (ref($input) eq 'HASH') {
$input = OpenAIAsync::Types::Requests::ChatCompletion->new($input->%*);
} elsif (ref($input) eq 'OpenAIAsync::Types::Requests::ChatCompletion') {
# dummy, nothing to do
} else {
die "Unsupported input type [".ref($input)."]";
}
print "Making request\n";
my $data = await $self->_make_request("/completions", $input);
my $type_result = OpenAIAsync::Types::Results::ChatCompletion->new($data->%*);
return $type_result;
} }
async method embedding($input) { async method embedding($input) {

View file

@ -13,15 +13,31 @@ role OpenAIAsync::Types::Requests::Base :does(OpenAIAsync::Types::Base) :Struct
#### Base Request Types #### Base Request Types
class OpenAIAsync::Types::Requests::ChatCompletion :does(OpenAIAsync::Types::Requests::Base) { class OpenAIAsync::Types::Requests::ChatCompletion :does(OpenAIAsync::Types::Requests::Base) :Struct {
method _endpoint() {...} method _endpoint() {"/chat/completion"}
field $messages :MarshalTo([OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union]); field $messages :MarshalTo([OpenAIAsync::Types::Requests::ChatCompletion::Messages::Union]);
field $model :JSONStr = "gpt-3.5-turbo";
field $frequency_penalty :JSONNum = undefs;
field $presence_penalty :JSONNum = undef;
field $logit_bias = undef; # TODO wtf is this?
field $max_tokens :JSONNum = undef;
field $response_format :JSONStr :JSONExclude = undef; # I'm not supporting this this version yet
field $seed :JSONNum = undef;
field $stop = undef; # String, array or null, todo handle
field $stream :JSONBool = undef; # TODO handle
field $temperature :JSONNum = undef;
field $top_p :JSONNum = undef;
field $tools :JSONExclude = undef; # TODO handle this
field $tool_choice :JSONExclude = undef; # TODO handle this
field $function_call :JSONExclude = undef;
field $functions :JSONExclude = undef;s
} }
class OpenAIAsync::Types::Requests::Completion :does(OpenAIAsync::Types::Requests::Base) { class OpenAIAsync::Types::Requests::Completion :does(OpenAIAsync::Types::Requests::Base) :Struct {
method _endpoint() {...} method _endpoint() {"/completion"}
use JSON::MaybeXS; # TODO make a role that does this better?
field $model :JSONStr = "gpt-3.5-turbo"; # This is how 99% of everyone else seems to default this field $model :JSONStr = "gpt-3.5-turbo"; # This is how 99% of everyone else seems to default this
field $prompt :JSONStr; field $prompt :JSONStr;
@ -51,7 +67,7 @@ class OpenAIAsync::Types::Requests::Completion :does(OpenAIAsync::Types::Request
} }
} }
class OpenAIAsync::Types::Requests::Embedding :does(OpenAIAsync::Types::Requests::Base) { class OpenAIAsync::Types::Requests::Embedding :does(OpenAIAsync::Types::Requests::Base) :Struct {
method _endpoint() {...} method _endpoint() {...}
field $input :JSONStr; field $input :JSONStr;
field $model :JSONStr; field $model :JSONStr;
@ -61,7 +77,7 @@ class OpenAIAsync::Types::Requests::Embedding :does(OpenAIAsync::Types::Requests
### Request Subtypes ### Request Subtypes
class OpenAIAsync::Types::Requests::ChatCompletion::Messages::Assistant::ToolCall :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Requests::ChatCompletion::Messages::Assistant::ToolCall :does(OpenAIAsync::Types::Base) :Struct {
field $id :JSONStr; field $id :JSONStr;
field $arguments :JSONStr; field $arguments :JSONStr;
field $type :JSONStr; field $type :JSONStr;
@ -73,17 +89,17 @@ class OpenAIAsync::Types::Requests::ChatCompletion::Messages::Assistant::Functio
field $name :JSONStr; field $name :JSONStr;
} }
class OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::Text :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::Text :does(OpenAIAsync::Types::Base) :Struct {
field $type :JSONStr; field $type :JSONStr;
field $text :JSONStr; field $text :JSONStr;
} }
class OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ImageUrl :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ImageUrl :does(OpenAIAsync::Types::Base) :Struct {
field $url :JSONStr; field $url :JSONStr;
field $detail :JSONStr = undef; field $detail :JSONStr = undef;
} }
class OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::Image :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::Image :does(OpenAIAsync::Types::Base) :Struct {
field $type :JSONStr; field $type :JSONStr;
field $image_url :MarshalTo(OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ImageUrl); field $image_url :MarshalTo(OpenAIAsync::Types::Requests::ChatCompletion::Messages::User::ImageUrl);
} }
@ -110,7 +126,7 @@ package
} }
}; };
class OpenAIAsync::Types::Requests::ChatCompletion::Messages::User :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Requests::ChatCompletion::Messages::User :does(OpenAIAsync::Types::Base) :Struct {
# This particular type is more complicated than AutoMarshal can handle, so we need to # This particular type is more complicated than AutoMarshal can handle, so we need to
# do this in a custom manner. # do this in a custom manner.
field $role; field $role;
@ -139,7 +155,7 @@ class OpenAIAsync::Types::Requests::ChatCompletion::Messages::User :does(OpenAIA
} }
} }
class OpenAIAsync::Types::Requests::ChatCompletion::Messages::Assistant :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Requests::ChatCompletion::Messages::Assistant :does(OpenAIAsync::Types::Base) :Struct {
field $role :JSONStr; field $role :JSONStr;
field $content :JSONStr; field $content :JSONStr;
field $name = undef; field $name = undef;
@ -147,19 +163,19 @@ class OpenAIAsync::Types::Requests::ChatCompletion::Messages::Assistant :does(Op
field $function_call :MarshalTo(OpenAIAsync::Types::Requests::ChatCompletion::Messages::Assistant::FunctionCall) = undef; field $function_call :MarshalTo(OpenAIAsync::Types::Requests::ChatCompletion::Messages::Assistant::FunctionCall) = undef;
} }
class OpenAIAsync::Types::Requests::ChatCompletion::Messages::Function :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Requests::ChatCompletion::Messages::Function :does(OpenAIAsync::Types::Base) :Struct {
field $role :JSONStr; field $role :JSONStr;
field $content :JSONStr; field $content :JSONStr;
field $name :JSONStr; field $name :JSONStr;
} }
class OpenAIAsync::Types::Requests::ChatCompletion::Messages::Tool :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Requests::ChatCompletion::Messages::Tool :does(OpenAIAsync::Types::Base) :Struct {
field $role :JSONStr; field $role :JSONStr;
field $content :JSONStr; field $content :JSONStr;
field $tool_call_id :JSONStr; field $tool_call_id :JSONStr;
} }
class OpenAIAsync::Types::Requests::ChatCompletion::Messages::System :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Requests::ChatCompletion::Messages::System :does(OpenAIAsync::Types::Base) :Struct {
field $role :JSONStr; field $role :JSONStr;
field $name :JSONStr = undef; field $name :JSONStr = undef;
field $content :JSONStr; field $content :JSONStr;

View file

@ -7,31 +7,31 @@ use Object::PadX::Role::AutoMarshal;
use Object::PadX::Role::AutoJSON; use Object::PadX::Role::AutoJSON;
use Object::Pad::ClassAttr::Struct; use Object::Pad::ClassAttr::Struct;
class OpenAIAsync::Types::Results::ToolCall :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Results::ToolCall :does(OpenAIAsync::Types::Base) :Struct {
field $id :JSONStr; field $id :JSONStr;
field $type :JSONStr; # always "function" right now, may get expanded in the future field $type :JSONStr; # always "function" right now, may get expanded in the future
field $function :MarshalTo(OpenAIAsync::Types::Results::FunctionCall); field $function :MarshalTo(OpenAIAsync::Types::Results::FunctionCall);
} }
class OpenAIAsync::Types::Results::FunctionCall :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Results::FunctionCall :does(OpenAIAsync::Types::Base) :Struct {
field $arguments :JSONStr; # TODO decode the json from this directly? field $arguments :JSONStr; # TODO decode the json from this directly?
field $name :JSONStr; field $name :JSONStr;
} }
class OpenAIAsync::Types::Results::ChatMessage :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Results::ChatMessage :does(OpenAIAsync::Types::Base) :Struct {
field $content :JSONStr; field $content :JSONStr;
field $tool_calls :MarshalTo([OpenAIAsync::Types::Results::ToolCall]) = undef; # don't think my local server provides this field $tool_calls :MarshalTo([OpenAIAsync::Types::Results::ToolCall]) = undef; # don't think my local server provides this
field $role :JSONStr; field $role :JSONStr;
field $function_call :MarshalTo(OpenAIAsync::Types::Results::FunctionCall) = undef; # Depcrecated, might still happen field $function_call :MarshalTo(OpenAIAsync::Types::Results::FunctionCall) = undef; # Depcrecated, might still happen
} }
class OpenAIAsync::Types::Results::ChatCompletionChoices :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Results::ChatCompletionChoices :does(OpenAIAsync::Types::Base) :Struct {
field $finish_reason :JSONStr; field $finish_reason :JSONStr;
field $index :JSONNum; field $index :JSONNum;
field $message :MarshalTo(OpenAIAsync::Types::Results::ChatMessage); field $message :MarshalTo(OpenAIAsync::Types::Results::ChatMessage);
} }
class OpenAIAsync::Types::Results::ChatCompletion :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Results::ChatCompletion :does(OpenAIAsync::Types::Base) :Struct {
field $id :JSONStr; field $id :JSONStr;
field $choices :MarshalTo([OpenAIAsync::Types::Results::ChatCompletionChoices]); field $choices :MarshalTo([OpenAIAsync::Types::Results::ChatCompletionChoices]);
field $created :JSONStr; field $created :JSONStr;
@ -41,21 +41,21 @@ class OpenAIAsync::Types::Results::ChatCompletion :does(OpenAIAsync::Types::Base
field $object :JSONStr; field $object :JSONStr;
} }
class OpenAIAsync::Types::Results::ChunkDelta :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Results::ChunkDelta :does(OpenAIAsync::Types::Base) :Struct {
field $content :JSONStr; field $content :JSONStr;
field $function_call :MarshalTo(OpenAIAsync::Types::Results::FunctionCall); field $function_call :MarshalTo(OpenAIAsync::Types::Results::FunctionCall);
field $tool_cass :MarshalTo([OpenAIAsync::Types::Results::ToolCall]); field $tool_cass :MarshalTo([OpenAIAsync::Types::Results::ToolCall]);
field $role :JSONStr; field $role :JSONStr;
} }
class OpenAIAsync::Types::Results::ChatCompletionChunkChoices :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Results::ChatCompletionChunkChoices :does(OpenAIAsync::Types::Base) :Struct {
field $delta :MarshalTo(OpenAIAsync::Types::Results::ChunkDelta); field $delta :MarshalTo(OpenAIAsync::Types::Results::ChunkDelta);
field $finish_reason :JSONStr; field $finish_reason :JSONStr;
field $index :JSONStr; field $index :JSONStr;
} }
# This is part of the streaming API # This is part of the streaming API
class OpenAIAsync::Types::Results::ChatCompletionChunk :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Results::ChatCompletionChunk :does(OpenAIAsync::Types::Base) :Struct {
field $id :JSONStr; field $id :JSONStr;
field $choices :MarshalTo(OpenAIAsync::Types::Results::ChatCompletionChunkChoices); field $choices :MarshalTo(OpenAIAsync::Types::Results::ChatCompletionChunkChoices);
field $created :JSONStr; field $created :JSONStr;
@ -64,13 +64,13 @@ class OpenAIAsync::Types::Results::ChatCompletionChunk :does(OpenAIAsync::Types:
field $object :JSONStr; field $object :JSONStr;
} }
class OpenAIAsync::Types::Results::Usage :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Results::Usage :does(OpenAIAsync::Types::Base) :Struct {
field $total_tokens :JSONNum; field $total_tokens :JSONNum;
field $prompt_tokens :JSONNum; field $prompt_tokens :JSONNum;
field $completion_tokens :JSONNum; # look at chat completions, is this the same field $completion_tokens :JSONNum; # look at chat completions, is this the same
} }
class OpenAIAsync::Types::Results::LogProbs :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Results::LogProbs :does(OpenAIAsync::Types::Base) :Struct {
# TODO what's the representation here? # TODO what's the representation here?
field $text_offset = undef; field $text_offset = undef;
field $token_logprobs = undef; field $token_logprobs = undef;
@ -78,14 +78,14 @@ class OpenAIAsync::Types::Results::LogProbs :does(OpenAIAsync::Types::Base) {
field $top_logprobs = undef; field $top_logprobs = undef;
} }
class OpenAIAsync::Types::Results::CompletionChoices :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Results::CompletionChoices :does(OpenAIAsync::Types::Base) :Struct {
field $text :JSONStr; field $text :JSONStr;
field $index :JSONNum; field $index :JSONNum;
field $logprobs :MarshalTo(OpenAIAsync::Types::Results::LogProbs) = undef; # TODO make nicer type? field $logprobs :MarshalTo(OpenAIAsync::Types::Results::LogProbs) = undef; # TODO make nicer type?
field $finish_reason :JSONStr = undef; # TODO enum? helper funcs for this class? ->is_finished? field $finish_reason :JSONStr = undef; # TODO enum? helper funcs for this class? ->is_finished?
} }
class OpenAIAsync::Types::Results::Completion :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Results::Completion :does(OpenAIAsync::Types::Base) :Struct {
field $id :JSONStr; field $id :JSONStr;
field $choices :MarshalTo([OpenAIAsync::Types::Results::CompletionChoices]); field $choices :MarshalTo([OpenAIAsync::Types::Results::CompletionChoices]);
field $created :JSONStr; field $created :JSONStr;
@ -95,7 +95,7 @@ class OpenAIAsync::Types::Results::Completion :does(OpenAIAsync::Types::Base) {
field $object :JSONStr; field $object :JSONStr;
} }
class OpenAIAsync::Types::Results::Embedding :does(OpenAIAsync::Types::Base) { class OpenAIAsync::Types::Results::Embedding :does(OpenAIAsync::Types::Base) :Struct {
field $index :JSONNum; field $index :JSONNum;
field $embedding :JSONList(JSONNum); field $embedding :JSONList(JSONNum);
field $object :JSONStr; field $object :JSONStr;

View file

@ -6,7 +6,7 @@ use Test2::V0;
use OpenAIAsync::Client; use OpenAIAsync::Client;
BEGIN { BEGIN {
$ENV{OPENAI_API_KEY}="12345" unless $ENV{OPENAI_API_KEY}="12345"; $ENV{OPENAI_API_KEY}="12345" unless $ENV{OPENAI_API_KEY}eq"12345";
} }
ok(lives { ok(lives {

View file

@ -0,0 +1,32 @@
use strict;
use warnings;
use Test2::V0;
use OpenAIAsync::Client;
skip_all("Needs disclaimer to run") unless $ENV{I_PROMISE_NOT_TO_SUE_FOR_EXCESSIVE_COSTS} eq "Signed, ".getlogin();
skip_all("No api base defined") unless $ENV{OPENAI_API_BASE};
skip_all("No API key defined") unless $ENV{OPENAI_API_KEY};
exit() unless ($ENV{OPENAI_API_KEY} and $ENV{OPENAI_API_BASE} and $ENV{I_PROMISE_NOT_TO_SUE_FOR_EXCESSIVE_COSTS} eq "Signed, ".getlogin());
use IO::Async::Loop;
my $loop = IO::Async::Loop->new();
my $client;
ok(lives {
$client = OpenAIAsync::Client->new();
isa_ok($client, "OpenAIAsync::Client");
}, "basic client creation");
ok(lives {$loop->add($client);}, "Adding to loop");
my $output_future = $client->completion({max_tokens => 1024, prompt => "Tell a story about a princess named Judy and her princess sister Emmy"});
use Data::Dumper;
print Dumper($output_future->get());
done_testing();

49
xt/02-chat-completion.t Normal file
View file

@ -0,0 +1,49 @@
use strict;
use warnings;
use Test2::V0;
use OpenAIAsync::Client;
skip_all("Needs disclaimer to run") unless $ENV{I_PROMISE_NOT_TO_SUE_FOR_EXCESSIVE_COSTS} eq "Signed, ".getlogin();
skip_all("No api base defined") unless $ENV{OPENAI_API_BASE};
skip_all("No API key defined") unless $ENV{OPENAI_API_KEY};
exit() unless ($ENV{OPENAI_API_KEY} and $ENV{OPENAI_API_BASE} and $ENV{I_PROMISE_NOT_TO_SUE_FOR_EXCESSIVE_COSTS} eq "Signed, ".getlogin());
use IO::Async::Loop;
my $loop = IO::Async::Loop->new();
my $client;
ok(lives {
$client = OpenAIAsync::Client->new();
isa_ok($client, "OpenAIAsync::Client");
}, "basic client creation");
ok(lives {$loop->add($client);}, "Adding to loop");
my $output_future = $client->chat({
model => "gpt-3.5-turbo",
messages => [
{
role => "system",
content => "You are a helpful assistant that tells fanciful stories"
},
{
role => "user",
content => "Hello!"
}
],
max_tokens => 1024,
});
use Data::Dumper;
print Dumper($output_future->get());
done_testing();

View file

@ -1,43 +0,0 @@
use strict;
use warnings;
use Test2::V0;
use OpenAIAsync::Client;
skip_all("Needs disclaimer to run") unless $ENV{I_PROMISE_NOT_TO_SUE_FOR_EXCESSIVE_COSTS} eq "Signed, ".getlogin();
skip_all("No api base defined") unless $ENV{OPENAI_API_BASE};
skip_all("No API key defined") unless $ENV{OPENAI_API_KEY};
exit() unless ($ENV{OPENAI_API_KEY} and $ENV{OPENAI_API_BASE} and $ENV{I_PROMISE_NOT_TO_SUE_FOR_EXCESSIVE_COSTS} eq "Signed, ".getlogin());
ok(lives {
my $client = OpenAIAsync::Client->new();
isa_ok($client, "OpenAIAsync::Client");
}, "basic client creation");
my $exp = dies {
my $client = OpenAIAsync::Client->new(bad_option_doesnt_exist => 1);
};
ok($exp, "Unknown option kills creation");
like($exp, qr/Unrecognised parameters for OpenAIAsync::Client constructor: 'bad_option_doesnt_exist' at/, "exception text for unknonwn option");
ok lives {
my $client = OpenAIAsync::Client->new(http_other_options => {});
isa_ok($client, "OpenAIAsync::Client");
}, "set http options";
ok lives {
my $client = OpenAIAsync::Client->new(io_async_notifier_params=>{});
isa_ok($client, "OpenAIAsync::Client");
}, "Can give io async notifier options";
done_testing();

11
xtest.sh Executable file
View file

@ -0,0 +1,11 @@
#!/bin/bash
set -euxo pipefail
export OPENAI_API_KEY="0118 999 881 999 119 725 3"
export OPENAI_API_BASE="http://openai.general1-model.brainiac.ai.simcop2387.info/v1"
export I_PROMISE_NOT_TO_SUE_FOR_EXCESSIVE_COSTS="Signed, ryan"
#dzil xtest
perl -Ilib xt/02-chat-completion.t